<?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>BWImages</name>
	<version>1.2</version>
  <mincmsversion>1.8.2</mincmsversion>
	<help><![CDATA[CjxoMz5CV0ltYWdlcyBtb2R1bGU8L2gzPgpCV0ltYWdlcyBhaW1zIHRvIHByb3ZpZGUgZWFzeSBtYW5hZ2VtZW50IG9mIGltYWdlIHNjYWxpbmcuIEl0IHByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIGNyZWF0ZSBhIHByZXNldCBvZiBpbWFnZSBzZXR0aW5ncywgaS5lLiBmb2xkZXIgdG8gdXBsb2FkIHRvIGFuZCBpbWFnZSBzaXplLCBhbmQgYXBwbHkgdGhvc2Ugc2V0dGluZ3MgdG8gYW4gdXBsb2FkZWQgaW1hZ2UuClVwbG9hZGluZyBhbmQgc2NhbGluZyBhbiBpbWFnZSBpcyBkb25lIGluIGp1c3QgdGhyZWUgc2ltcGxlIHN0ZXBzOjxici8+CjxvbD4gICAgCjxsaT5TZWxlY3QgYW4gaW1hZ2UgdG8gdXBsb2FkIGFuZCBhIHByZXNldCBvZiBpbWFnZSBzZXR0aW5ncyAocGF0aCB0byB1cGxvYWQgdG8gYW5kIGltYWdlIHNpemUpLjwvbGk+CjxsaT5Dcm9wIHRoZSB1cGxvYWRlZCBpbWFnZSB3aXRoIEpjcm9wLjwvbGk+CjxsaT5TYXZlIHRoZSBjcm9wcGVkIGltYWdlIHRvIHRoZSBmb2xkZXIgZGVmaW5lZCBpbiB0aGUgc2VsZWN0ZWQgcHJlc2V0LjwvbGk+Cjwvb2w+CkJXSW1hZ2VzIGNhbiBhbHNvIGJlIHVzZWQgdG8gYXR0YWNoIGltYWdlcyB0byBuZXdzIGFydGljbGVzIGZyb20gdGhlIE5ld3MgbW9kdWxlIGFuZCBzY2FsZSB0aGVtLiBUaGVzZSBmZWF0dXJlcyBhcmUgb25seSBhdmFpbGFibGUgaWYgYSBmaWxlIGZpZWxkIGhhcyBiZWVuIGRlZmluZWQgaW4gdGhlIE5ld3MgbW9kdWxlLgo8aDM+SG93IHRvIHVzZSBCV0ltYWdlczwvaDM+CjxwPlRoaXMgbW9kdWxlIGNhbiBub3QgYmUgaW5jbHVkZWQgZm9yIHRoZSBmcm9udGVuZCBvciBpbiBjb250ZW50IGJsb2Nrcy4gVGhpcyBtb2R1bGUgb25seSBoZWxwcyB5b3Ugc2NhbGUgZG93biB0aGUgaW1hZ2VzIGluIGNvcnJlY3Qgc2l6ZSwgYW5kIHNhdmUgdGhlbTwvcD4KPGgzPlBhcmFtZXRlcnM8L2gzPjx1bD48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBsYW5nPSJlbl9VUyIgLSBEZXplIHBhcmFtZXRlciB3b3JkdCBnZWJydWlrdCBvbSBkZSB0YWFsa2V1emUgYWFuIHRlIGdldmVuLiBOaWV0IGFsbGUgbW9kdWxlcyBvbmRlcnN0ZXVuZW4gZGV6ZSBwYXJhbWV0ZXIgKG9mIGhlYmJlbiBkZXplIG5vZGlnKS48L2xpPjwvdWw+]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiBCdWlsZG5ldCBXZWJzZXJ2aWNlcyAmbHQ7c3VwcG9ydEBidWlsZG5ldC5ubCZndDs8YnIgLz48YnIgLz5WZXJzaW9uOiAxLjI8YnIgLz4=]]></about>
	<description><![CDATA[BWImage module, with this module you can crop/scale the images to the given demention]]></description>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.addeditsetting.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgovLyBTZXQtdXAgSlMKJHRoaXMtPkxvYWRKUygpOwoKLy9HZXQgdGhlIGltYWdlIGlkCiRpbWFnZV9pZCA9ICcnOwppZiAoaXNzZXQoJHBhcmFtc1snaW1hZ2VfaWQnXSkpewogICAgJGltYWdlX2lkID0gJHBhcmFtc1snaW1hZ2VfaWQnXTsKfQoKLy9JZiBzdWJtaXR0ZWQgdXBkYXRlIHRoZSBzZXR0aW5nIGZvciB0aGUgaW1hZ2UKLy91cGRhdGUgdGhlIGRiIHdpdGggdGhlIHNhdmUgYnV0dG9uKG5vIHJlZGlyZWN0KQppZihpc3NldCgkX1BPU1RbJ20xX3NhdmUnXSkpewoJJGNoZWNrID0gJHRoaXMtPkNoZWNrU2V0dGluZ3NGaWVsZHMoJHBhcmFtcyk7CglpZigkY2hlY2spewoJCSR0aGlzLT5VcGRhdGVTZXR0aW5nKCRpbWFnZV9pZCwgJHBhcmFtcyk7CgkJZWNobyAkdGhpcy0+U2hvd01lc3NhZ2UoJHRoaXMtPkxhbmcoJ3NldHRpbmdfY29udGVudF91cGRhdGUnKSk7Cgl9ZWxzZXsKCQkvL3Nob3cgZXJyb3IKCQllY2hvICR0aGlzLT5TaG93RXJyb3JzKCR0aGlzLT5MYW5nKCdzZXR0aW5nX2NvbnRlbnRfdXBkYXRlX2ZhaWx1cmUnKSk7Cgl9Cn1lbHNlaWYoaXNzZXQoJF9QT1NUWydtMV9zdWJtaXQnXSkpewoJLy91cGRhdGUgdGhlIGRiIHdpdGggdGhlIHN1Ym1pdCBidXR0b24ocmVkaXJlY3QpCgkkY2hlY2sgPSAkdGhpcy0+Q2hlY2tTZXR0aW5nc0ZpZWxkcygkcGFyYW1zKTsKCWlmKCRjaGVjayl7CgkJJHRoaXMtPlVwZGF0ZVNldHRpbmcoJGltYWdlX2lkLCAkcGFyYW1zKTsKCQkkdGhpcy0+UmVkaXJlY3QoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCBhcnJheSgnYWN0aXZlX3RhYicgPT4gJ3ByZWZlcmVuY2VzJywgJ2ltYWdlX3VwZGF0ZScgPT4gJzEnKSk7Cgl9ZWxzZXsKCQllY2hvICR0aGlzLT5TaG93RXJyb3JzKCR0aGlzLT5MYW5nKCdpbWFnZV9jb250ZW50X3VwZGF0ZV9mYWlsdXJlJykpOwoJfQp9CgovL3JldHVybiB0byBvdmVydmlldwppZihpc3NldCgkX1BPU1RbJ20xX2NhbmNlbCddKSl7CgkkdGhpcy0+UmVkaXJlY3QoJGlkLCAnZGVmYXVsdGFkbWluJyk7Cn1lbHNlaWYoaXNzZXQoJF9QT1NUWydtMV9jcmVhdGUnXSkpewoJLy9pbnNlcnQgaW50byBkYgoJJGNoZWNrID0gJHRoaXMtPkNoZWNrU2V0dGluZ3NGaWVsZHMoJHBhcmFtcyk7CglpZigkY2hlY2spewoJCS8vYWRkIHJlY29yZCBpbiBkYXRhYmFzZQoJCSR0aGlzLT5BZGRTZXR0aW5nKCRwYXJhbXMpOwoJCSR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsIGFycmF5KCdhY3RpdmVfdGFiJyA9PiAncHJlZmVyZW5jZXMnLCAnaW1hZ2VfY3JlYXRlJyA9PiAnMScpKTsKCX1lbHNlewoJCS8vcmV0dXJuIGVycm9yCgkJZWNobyAkdGhpcy0+U2hvd0Vycm9ycygkdGhpcy0+TGFuZygnaW1hZ2VfY29udGVudF91cGRhdGVfZmFpbHVyZScpKTsKCQkKCQkkaW1hZ2UgPSBhcnJheSgpOwoJCSRmaWVsZHMgPSBhcnJheSgndGl0bGUnLCAncGF0aCcsICd3aWR0aCcsICdoZWlnaHQnKTsKCQlmb3JlYWNoKCRmaWVsZHMgYXMgJGZpZWxkKXsKCQkJJGltYWdlWyRmaWVsZF0gPSAkcGFyYW1zWyRmaWVsZF07CgkJfQoJCQoJfQp9CgppZiAoaXNzZXQoJHBhcmFtc1snaW1hZ2VfaWQnXSkgJiYgIWlzc2V0KCRfUE9TVFsnbTFfY3JlYXRlJ10pKXsKCS8vR2V0IHRoZSBpbWFnZSBpbmZvcm1hdGlvbiAKCSRpbWFnZSA9ICR0aGlzLT5HZXRTZXR0aW5nKCRpbWFnZV9pZCk7Cn0KCmlmKGlzc2V0KCRfUE9TVFsnbTFfc2F2ZSddKSB8fCBpc3NldCgkX1BPU1RbJ20xX3N1Ym1pdCddKSl7CgkkZmllbGRzID0gYXJyYXkoJ3RpdGxlJywgJ3BhdGgnLCAnd2lkdGgnLCAnaGVpZ2h0Jyk7Cglmb3JlYWNoKCRmaWVsZHMgYXMgJGZpZWxkKXsKCQkkaW1hZ2VbJGZpZWxkXSA9ICRwYXJhbXNbJGZpZWxkXTsKCX0KfQoKLy9DcmVhdGUgZm9ybSBzdGFydCBhbmQgZW5kaW5nCmlmKGlzc2V0KCRwYXJhbXNbJ2FkZGltYWdlJ10pIHx8IChpc3NldCgkX1BPU1RbJ20xX2NyZWF0ZSddKSkpewoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdjcmVhdGUnLCAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAnY3JlYXRlJywgJHRoaXMtPkxhbmcoJ2NyZWF0ZScpKSk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3BhZ2VfdGl0bGUnLCAkdGhpcy0+TGFuZygnaW1hZ2Vfc2V0dGluZ19uZXcnKSk7Cn1lbHNlewoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzYXZlJywgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwgJ3NhdmUnLCAkdGhpcy0+TGFuZygnc2F2ZScpKSk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N1Ym1pdCcsICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdzdWJtaXQnLCAkdGhpcy0+TGFuZygnc3VibWl0JykpKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbigncGFnZV90aXRsZScsICR0aGlzLT5MYW5nKCdpbWFnZV90aXRsZV91cGRhdGUnKSAuJyAnLiAkaW1hZ2VbJ3RpdGxlJ10pOwp9CgokaW5saW5lID0gJyc7CiRpZHN1ZmZpeCA9ICcnOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2NhbmNlbCcsICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdjYW5jZWwnLCAkdGhpcy0+TGFuZygnY2FuY2VsJykpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdmb3JtX3N0YXJ0JywgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsICdhZGRlZGl0c2V0dGluZycsICRyZXR1cm5pZCwgJ3Bvc3QnLCAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsICRpbmxpbmUsICRpZHN1ZmZpeCwgYXJyYXkoImltYWdlX2lkIiA9PiAkaW1hZ2VfaWQpKSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbignZm9ybV9lbmQnLCAkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdsb2NhdGllX3VpdGxlZycsICR0aGlzLT5sYW5nKCdleHBsYWluX3BhdGgnKSk7CgovL0NyZWF0ZSB0aGUgaW5wdXRmaWVsZHMKJGZpZWxkcyA9IGFycmF5KCd0aXRsZScsICdwYXRoJywgJ3dpZHRoJywgJ2hlaWdodCcpOwpmb3JlYWNoKCRmaWVsZHMgYXMgJGZpZWxkKXsKCWlmIChpc3NldCgkcGFyYW1zWydpbWFnZV9pZCddKSB8fCBpc3NldCgkX1BPU1RbJ20xX2NyZWF0ZSddKSl7CgkJJHZhbHVlID0gJGltYWdlWyRmaWVsZF07Cgl9ZWxzZXsKCQkkdmFsdWUgPSAnJzsKCX0KCSR0aGlzLT5zbWFydHktPmFzc2lnbignaW1hZ2VfaW5wdXRfJy4gJGZpZWxkLCAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJGZpZWxkLCAkdmFsdWUsIDU1KSk7Cn0KCi8vQ3JlYXRlIHRoZSBmaWVsZCBsYWJlbHMgYW5kIGNoZWNrIGlmIHRoZXkgYXJlIHJlcXVpcmVkCiRyZXFzID0gYXJyYXkoJ3RpdGxlJyA9PiAnMScsICdwYXRoJyA9PiAnMScsICd3aWR0aCcgPT4gJzEnLCAnaGVpZ2h0JyA9PiAnMScpOwokbGFiZWxzID0gYXJyYXkoJ3RpdGxlJywgJ3BhdGgnLCAnd2lkdGgnLCAnaGVpZ2h0Jyk7CmZvcmVhY2goJGxhYmVscyBhcyAkbGFiZWwpewoJJHJlcXVpcmUgPSAoYXJyYXlfa2V5X2V4aXN0cygkbGFiZWwsICRyZXFzKSkgPyAnICogJzonJzsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignaW1hZ2VfJy4gJGxhYmVsLCAkdGhpcy0+TGFuZygnaW1hZ2VfJy4gJGxhYmVsKSAuJycuICRyZXF1aXJlKTsKfQoKLy9hc3NpZ24gdG9vbHRpcHMgdG8gc21hcnR5IHZhcnMKJHRvb2x0aXBzID0gYXJyYXkoJ3RpdGxlJywgJ3BhdGgnLCAnd2lkdGgnLCAnaGVpZ2h0Jyk7CmZvcmVhY2goJHRvb2x0aXBzIGFzICR0b29sdGlwKSB7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2ltYWdlXycuICR0b29sdGlwIC4nX2hlbHAnLCAkdGhpcy0+TWFrZVRvb2xUaXAoJHRoaXMtPkxhbmcoJ2lucHV0XycgLiAkdG9vbHRpcCAuICdfaGVscCcpKSk7Cn0KCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnYWRtaW5fYWRkZWRpdHNldHRpbmcudHBsJyk7Cj8+]]></data>
	</file>
	<file>
	  <filename>/action.default.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghaXNzZXQoJGdDbXMpKSBleGl0OwoKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgovL2FjdGl2ZSB0YWJzCmVjaG8gJHRoaXMtPlN0YXJ0VGFiSGVhZGVycygpOwoKaWYoRkFMU0UgPT0gZW1wdHkoJHBhcmFtc1snYWN0aXZlX3RhYiddKSl7CiAgICAkYWN0aXZlX3RhYiA9ICRwYXJhbXNbJ2FjdGl2ZV90YWInXTsKfWVsc2V7CiAgJGFjdGl2ZV90YWIgPSAnJzsKfQogJG5ld3NmaWVsZCA9ICR0aGlzLT5HZXROZXdzRmllbGQoKTsKIC8qIHpldCB0YWJzIG9wIGFjdGl2ZSBvZiBuaWV0IGVuIGdlZWYgZGV6ZSBlZW4gbmFhbSBtZWUgKi8KaWYgKCR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ1VwbG9hZCBpbWFnZXMgaW4gQldJbWFnZXMnKSkgewoJZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCd1cGxvYWQnLCR0aGlzLT5sYW5nKCd1cGxvYWRfdGFiJyksKCd1cGxvYWQnID09ICRhY3RpdmVfdGFiKT90cnVlOmZhbHNlKTsKCQoJLy8gSWYgYSBmaWxlIGZpZWxkIGhhcyBiZWVuIGRlZmluZWQgaW4gdGhlIG5ld3MgbW9kdWxlCQoJaWYgKCFlbXB0eSgkbmV3c2ZpZWxkKSl7CgkJZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCd1cGxvYWRuZXdzJywkdGhpcy0+bGFuZygndXBsb2FkbmV3c190YWInKSwoJ3VwbG9hZG5ld3MnID09ICRhY3RpdmVfdGFiKT90cnVlOmZhbHNlKTsKCX0KfQppZiAoJHRoaXMtPkNoZWNrUGVybWlzc2lvbignQWRkIHNldHRpbmdzIEJXSW1hZ2VzJykpIHsKCWVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcigncHJlZmVyZW5jZXMnLCR0aGlzLT5sYW5nKCdwcmVmc190YWInKSwoJ3ByZWZlcmVuY2VzJyA9PSAkYWN0aXZlX3RhYik/dHJ1ZTpmYWxzZSk7CglpZiAoIWVtcHR5KCRuZXdzZmllbGQpKXsKCQllY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoJ25ld3NwcmVmZXJlbmNlcycsJHRoaXMtPmxhbmcoJ25ld3NwcmVmc190YWInKSwoJ25ld3NwcmVmZXJlbmNlcycgPT0gJGFjdGl2ZV90YWIpP3RydWU6ZmFsc2UpOwoJfQoJZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCdtb2R1bGVfc2V0dGluZ3MnLCR0aGlzLT5sYW5nKCdtb2R1bGVfc2V0dGluZ3MnKSwoJ21vZHVsZV9zZXR0aW5ncycgPT0gJGFjdGl2ZV90YWIpP3RydWU6ZmFsc2UpOwp9CgovL2VuZCBoZWFkZXIgdGFicwplY2hvICR0aGlzLT5FbmRUYWJIZWFkZXJzKCk7CgovL1NldCBUYWIgY29udGVudHMKZWNobyAkdGhpcy0+U3RhcnRUYWJDb250ZW50KCk7CgokY3VycmVudF90YWIgPSAnJzsKCQlpZiAoJHRoaXMtPkNoZWNrUGVybWlzc2lvbignVXBsb2FkIGltYWdlcyBpbiBCV0ltYWdlcycpKSB7CgkJCS8vaW5jbHVkZSBhZG1pbl91cGxvYWR0YWIgdG8gY3VycmVudCB0YWIKCQkJZWNobyAkdGhpcy0+U3RhcnRUYWIoJ3VwbG9hZCcsICRwYXJhbXMpOwoJCQkkY3VycmVudF90YWIgPSAndXBsb2FkJzsKCQkJaW5jbHVkZShkaXJuYW1lKF9fRklMRV9fKS4nL2FkbWluX3VwbG9hZHRhYi5waHAnKTsKCQkJZWNobyAkdGhpcy0+RW5kVGFiKCk7CgkJCQoJCQkvLyBJZiBhIGZpbGUgZmllbGQgaGFzIGJlZW4gZGVmaW5lZCBpbiB0aGUgbmV3cyBtb2R1bGUKCQkJaWYgKCFlbXB0eSgkbmV3c2ZpZWxkKSl7CgkJCQkvLyBpbmNsdWRlIGFkbWluX3VwbG9hZG5ld3N0YWIgdG8gY3VycmVudCB0YWIKCQkJCWVjaG8gJHRoaXMtPlN0YXJ0VGFiKCd1cGxvYWRuZXdzJywgJHBhcmFtcyk7CgkJCQkkY3VycmVudF90YWIgPSAndXBsb2FkbmV3cyc7CgkJCQlpbmNsdWRlKGRpcm5hbWUoX19GSUxFX18pLicvYWRtaW5fdXBsb2FkbmV3c3RhYi5waHAnKTsKCQkJCWVjaG8gJHRoaXMtPkVuZFRhYigpOwoJCQl9CgkJCQoJCQkKCQl9CgkJCgkJaWYgKCR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ0FkZCBzZXR0aW5ncyBCV0ltYWdlcycpKSB7CgkJCS8vaW5jbHVkZSBhZG1pbl9wcmVmZXJlbmNlc3RhYiB0byBjdXJyZW50IHRhYgoJCQllY2hvICR0aGlzLT5TdGFydFRhYigncHJlZmVyZW5jZXMnLCAkcGFyYW1zKTsKCQkJJGN1cnJlbnRfdGFiID0gJ3ByZWZlcmVuY2VzJzsKCQkJaW5jbHVkZShkaXJuYW1lKF9fRklMRV9fKS4nL2FkbWluX3ByZWZlcmVuY2VzdGFiLnBocCcpOwoJCQllY2hvICR0aGlzLT5FbmRUYWIoKTsKCQkJCgkJCS8vIElmIGEgZmlsZSBmaWVsZCBoYXMgYmVlbiBkZWZpbmVkIGluIHRoZSBuZXdzIG1vZHVsZQoJCQlpZiAoIWVtcHR5KCRuZXdzZmllbGQpKXsKCQkJCS8vIGluY2x1ZGUgYWRtaW5fdXBsb2FkbmV3c3RhYiB0byBjdXJyZW50IHRhYgoJCQkJZWNobyAkdGhpcy0+U3RhcnRUYWIoJ25ld3NwcmVmZXJlbmNlcycsICRwYXJhbXMpOwoJCQkJJGN1cnJlbnRfdGFiID0gJ25ld3NwcmVmZXJlbmNlcyc7CgkJCQlpbmNsdWRlKGRpcm5hbWUoX19GSUxFX18pLicvYWRtaW5fbmV3c3ByZWZlcmVuY2VzdGFiLnBocCcpOwoJCQkJZWNobyAkdGhpcy0+RW5kVGFiKCk7CgkJCX0KCQl9CgkJCgkJaWYgKCR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ0FkZCBzZXR0aW5ncyBCV0ltYWdlcycpKSB7CQoJCQllY2hvICR0aGlzLT5TdGFydFRhYignbW9kdWxlX3NldHRpbmdzJywgJHBhcmFtcyk7CgkJCSRjdXJyZW50X3RhYiA9ICdtb2R1bGVfc2V0dGluZ3MnOwoJCQlpbmNsdWRlKGRpcm5hbWUoX19GSUxFX18pLicvYWRtaW5fbW9kdWxlX3NldHRpbmdzLnBocCcpOwoJCQllY2hvICR0aGlzLT5FbmRUYWIoKTsJCgkJfQoJCmVjaG8gJHRoaXMtPkVuZFRhYkNvbnRlbnQoKTsKCj8+]]></data>
	</file>
	<file>
	  <filename>/action.deletesetting.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgokaW1hZ2VfaWQgPSAnJzsKaWYgKGlzc2V0KCRwYXJhbXNbJ2ltYWdlX2lkJ10pKQogIHsKICAgICRpbWFnZV9pZCA9ICRwYXJhbXNbJ2ltYWdlX2lkJ107CiAgfQoKJHRoaXMtPkRlbGV0ZVNldHRpbmcoJGltYWdlX2lkKTsKCiRwYXJhbXMgPSBhcnJheSgnYWN0aXZlX3RhYicgPT4gJ3ByZWZlcmVuY2VzJywgJ2ltYWdlX2RlbGV0ZScgPT4gJzEnKTsKJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgJHBhcmFtcyk7Cgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/admin_cropimage.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgoJLy9mb3IgZGVidWdnaW5nCgkJCgkvL2dldCB0aGUgZXh0IGZyb20gdGhlIGZpbGUocGFyYW1zKQoJJGV4dCA9IHN0cnRvbG93ZXIoJHBhcmFtc1snZXh0J10pOwoJLy9nZXQgdGhlIGZpbGVuYW1lICsgZXh0Cgkkb3JpZ2luZWVsID0gJHBhcmFtc1snb3JpZ2luZWVsJ107CgkKCS8vc2V0IHNlcnZlcnBhdGgKCSRzZXJ2ZXJQYXRoID0gJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXTsKCS8vZ2V0IHNldHRpbmcgcGF0aCBhbmQgYXNzaWduIHdpdGggc2VydmVycGF0aAoJLy8gSWYgYSBuZXdzIGFydGljbGUgaGFzIGJlZW4gc2VsZWN0ZWQKICAgCWlmICghZW1wdHkoJHBhcmFtc1snYXJ0aWNsZUlEJ10pKXsKICAgCQkkbmV3c19wYXRoID0gJHNlcnZlclBhdGggLiAiL3VwbG9hZHMvbmV3cy8iOwogICAJCS8vIGlmIG1hcCBub3QgZXhpc3RzLCBtYWtlIG1hcAoJCWlmICghZmlsZV9leGlzdHMoJG5ld3NfcGF0aCkpIHsKCQkJbWtkaXIoJG5ld3NfcGF0aCwwNzc3KTsJCQkKCQl9CQkKICAgCQkkbWFwX3BhdGggPSAkbmV3c19wYXRoIC4gImlkIi4kcGFyYW1zWydhcnRpY2xlSUQnXS4iLyI7CiAgIAkJCiAgIAkJJG5ld3NfZmllbGQgPSAkdGhpcy0+R2V0TmV3c0ZpZWxkKCk7CiAgIAkJJG5ld3NfZmllbGQgPSAkbmV3c19maWVsZFsnaWQnXTsKICAgCQkKICAgCQkvLyBOZXdzIGRhdGFiYXNlIHVwZGF0ZW4KICAgCQkvLyBEZWxldGUgb2xkIGltYWdlIHZhbHVlIGZyb20gZGF0YWJhc2UKICAgCQkkcXVlcnkgPSAiREVMRVRFIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9uZXdzX2ZpZWxkdmFscyBXSEVSRSBuZXdzX2lkID0/IEFORCBmaWVsZGRlZl9pZCA9ID8iOwogICAJCSR2YXJzID0gYXJyYXkoJHBhcmFtc1snYXJ0aWNsZUlEJ10sICRuZXdzX2ZpZWxkKTsKICAgCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCR2YXJzKTsgICAJCQogICAJCQogICAJCSRxdWVyeSA9ICJJTlNFUlQgSU5UTyAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX25ld3NfZmllbGR2YWxzIChuZXdzX2lkLGZpZWxkZGVmX2lkLHZhbHVlLGNyZWF0ZV9kYXRlLG1vZGlmaWVkX2RhdGUpCgkJCQkJVkFMVUVTICg/LD8sPyw/LD8pCiAgIAkJIjsKICAgCQkkdmFycyA9IGFycmF5KCRwYXJhbXNbJ2FydGljbGVJRCddLCAkbmV3c19maWVsZCwkb3JpZ2luZWVsLGRhdGUoIlktbS1kIEg6aTpzIiksZGF0ZSgiWS1tLWQgSDppOnMiKSk7CiAgIAkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwkdmFycyk7ICAgCQkKICAgCX0gZWxzZSB7CiAgIAkJJG1hcF9wYXRoID0gJHNlcnZlclBhdGggLiAiLyIgLiAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnQ29uZmlnUGF0aCcpICAuICIvIiAuICRwYXJhbXNbJ3BhdGhJbWFnZSddIC4iLyI7CiAgIAl9CQkJCgoJLy8gTWFrZSBtYXAgaWYgbm9nIGV4aXN0cwoJaWYgKCFmaWxlX2V4aXN0cygkbWFwX3BhdGgpKSB7CgkJbWtkaXIoJG1hcF9wYXRoLDc3Nyk7Cgl9CgkKCS8vZ2V0IHNldHRpbmcgd2lkdGggYW5kIGhlaWdodAoJJHRhcmdfdyA9ICRwYXJhbXNbJ3dpZHRoSW1hZ2UnXTsvLyRfUE9TVFsndyddOwoJJHRhcmdfaCA9ICRwYXJhbXNbJ2hlaWdodEltYWdlJ107Ly8kX1BPU1RbJ2gnXTsKCS8vaW1hZ2UgcXVhbGl0eQoJJGpwZWdfcXVhbGl0eSA9IDEwMDsKCQoJLy9zZXQgc3JjIHZhciB3aXRoIHBhdGggZW4gZmlsZW5hbWUKCSRzcmMgPSAkbWFwX3BhdGggLiAkb3JpZ2luZWVsOwoJCglpZiAoKCRwYXJhbXNbJ3gnXSAhPSAnJykgJiYgKCRwYXJhbXNbJ3knXSkgIT0gJycpIHsKCQoJCS8vaWYgZmlsZSBleHQgZXF1YWxzIGpwZwoJCWlmKCRleHQgPT0gJ2pwZycgfHwgJGV4dCA9PSAnanBlZycpIHsKCQkJLy9zZXQgdmFyIGZvciBjcmVhdGluZyBuZXcgaW1hZ2UgZnJvbSBzcmMgd2l0aCBqcGcgZXh0CgkJCSRpbWdfciA9IGltYWdlY3JlYXRlZnJvbWpwZWcoJHNyYyk7CgkJCS8vc2V0IHZhciBmb3IgY3JvcHBpbmcgaW1hZ2Ugd2lkdGggaGVpZ2h0IGFuZCB3aWR0aAoJCQkkZHN0X3IgPSBJbWFnZUNyZWF0ZVRydWVDb2xvciggJHRhcmdfdywgJHRhcmdfaCApOwoJCQkvL2NvcHkgb3JpZ2luYWwgYW5kIGNyZWF0ZSBjcm9wcGVkIGltYWdlCgkJCWltYWdlY29weXJlc2FtcGxlZCgkZHN0X3IsJGltZ19yLDAsMCwkcGFyYW1zWyd4J10sJHBhcmFtc1sneSddLAoJCQkkdGFyZ193LCR0YXJnX2gsJHBhcmFtc1sndyddLCRwYXJhbXNbJ2gnXSk7CgkJCS8vbWFrZSBuZXcgZmlsZSBhbmQgd3JpdGUgaW4gJHNyYyAob3ZlcndyaXRlKQoJCQlpZiAoIWltYWdlanBlZygkZHN0X3IsICRzcmMgLCRqcGVnX3F1YWxpdHkpKXsKCQkJCS8vZWxzZSBlY2hvIGVycm9yCgkJCX1lbHNlewoJCQkJLy9pZiBzdWNjZWRlZCBhc3NpZ24gc21hcnR5CgkJCQllY2hvICR0aGlzLT5TaG93TWVzc2FnZSgkdGhpcy0+TGFuZygncmVzaXplX2NvbXBsZXRlZCcpKTsKCQkJfQkKCQl9CgkJLy9pZiBmaWxlIGV4IGVxdWVhbHMgcG5nCgkJZWxzZWlmKCRleHQgPT0gJ3BuZycpIHsKCQkJLy9zZXQgdmFyIGZvciBjcm9wcGluZyBpbWFnZSB3aWR0aCBoZWlnaHQgYW5kIHdpZHRoCgkJCSRkc3RfciA9IEltYWdlQ3JlYXRlVHJ1ZUNvbG9yKCAkdGFyZ193LCAkdGFyZ19oICk7CgoJCQkvL3NldHRpbmcgdHJhbnBhcmFudGllCgkJCWltYWdlYWxwaGFibGVuZGluZygkZHN0X3IgLCBmYWxzZSk7CgkJCWltYWdlc2F2ZWFscGhhKCRkc3RfciAsIHRydWUpOwoJCQkKCQkJLy9zZXQgdmFyIGZvciBjcmVhdGluZyBuZXcgaW1hZ2UgZnJvbSBzcmMgd2lkdGggcG5nIGV4dAoJCQkkaW1nX3IgPSBpbWFnZWNyZWF0ZWZyb21wbmcoJHNyYyk7CQkKIAkJCQoJCQkvL2NvcHkgb3JpZ2luYWwgYW5kIGNyZWF0ZSBjcm9wcGVkIGltYWdlCgkJCWltYWdlY29weXJlc2FtcGxlZCgkZHN0X3IsICRpbWdfciwgMCwgMCwgJHBhcmFtc1sneCddLCAkcGFyYW1zWyd5J10sCgkJCSR0YXJnX3csICR0YXJnX2gsICRwYXJhbXNbJ3cnXSwgJHBhcmFtc1snaCddKTsKCQkJLy8gbWFrZSBuZXcgZmlsZSBhbmQgd3JpdGUgaW4gJHNyYyAob3ZlcndyaXRlKQoJCQlpZiAoIWltYWdlcG5nKCRkc3RfciwgJHNyYyAsOSkpewoJCQkJLy9lbHNlIGVjaG8gZXJyb3IoZGVidWdnaW5nKQoJCQl9ZWxzZXsKCQkJCS8vaWYgc3VjY2VkZWQgYXNzaWduIHNtYXJ0eSBhbmQgcmVkaXJlY3QKCQkJCWVjaG8gJHRoaXMtPlNob3dNZXNzYWdlKCR0aGlzLT5MYW5nKCdyZXNpemVfY29tcGxldGVkJykpOwoJCQl9CQoJCX0KCQkvL2lmIGZpbGUgZXggZXF1ZWFscyBnaWYKCQllbHNlaWYoJGV4dCA9PSAnZ2lmJyl7CgkJCS8vc2V0IHZhciBmb3IgY3JlYXRpbmcgbmV3IGltYWdlIGZyb20gc3JjIHdpZHRoIGdpZiBleHQKCQkJJGltZ19yID0gaW1hZ2VjcmVhdGVmcm9tZ2lmKCRzcmMpOwoJCQkvL3NldCB2YXIgZm9yIGNyb3BwaW5nIGltYWdlIHdpZHRoIGhlaWdodCBhbmQgd2lkdGgKCQkJJGRzdF9yID0gSW1hZ2VDcmVhdGVUcnVlQ29sb3IoICR0YXJnX3csICR0YXJnX2ggKTsKCQkJLy9jb3B5IG9yaWdpbmFsIGFuZCBjcmVhdGUgY3JvcHBlZCBpbWFnZQoJCQlpbWFnZWNvcHlyZXNhbXBsZWQoJGRzdF9yLCRpbWdfciwwLDAsJHBhcmFtc1sneCddLCRwYXJhbXNbJ3knXSwKCQkJJHRhcmdfdywkdGFyZ19oLCRwYXJhbXNbJ3cnXSwkcGFyYW1zWydoJ10pOwoJCQkvL21ha2UgbmV3IGZpbGUgYW5kIHdyaXRlIGluICRzcmMgKG92ZXJ3cml0ZSkKCQkJaWYgKCFpbWFnZWdpZigkZHN0X3IsICRzcmMgLCRqcGVnX3F1YWxpdHkpKXsKCQkJCS8vZWxzZSBlY2hvIGVycm9yCgkJCQllY2hvICR0aGlzLT5TaG93TWVzc2FnZSgnSGV0IHJlc2l6ZW4gdmFuIFBORyBmaWxlcyBpcyBuaWV0IGdlbHVrdCEnKTsKCQkJfWVsc2V7CgkJCQkvL2lmIHN1Y2NlZGVkIGFzc2lnbiBzbWFydHkgYW5kIHJlZGlyZWN0CgkJCQllY2hvICR0aGlzLT5TaG93TWVzc2FnZSgkdGhpcy0+TGFuZygncmVzaXplX2NvbXBsZXRlZCcpKTsKCQkJfQkKCQl9Cgl9ZWxzZSB7CgkJJHBhcmFtcyA9IGFycmF5KCdlcnJvcl9tZXNzYWdlJz0+ICdlcnJvcl9jcm9wJywgJ2FjdGl2ZV90YWInID0+ICd1cGxvYWQnLCAncGF0aEltYWdlJyA9PiAkbWFwX3BhdGgsICdmaWxlbmFtZScgPT4gJG9yaWdpbmVlbCk7CgkJJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgJHBhcmFtcyk7Cgl9CgoKCg==]]></data>
	</file>
	<file>
	  <filename>/admin_module_settings.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgovLyBGb3JtIHN1Ym1pdHRlZD8KaWYoIGlzc2V0KCRwYXJhbXNbJ3N1Ym1pdCddKSAmJiAkcGFyYW1zWydhY3RpdmVfdGFiJ10gPT0gIm1vZHVsZV9zZXR0aW5ncyIgJiYgKCFlbXB0eSgkcGFyYW1zWydDb25maWdQYXRoJ10pKSl7CgkkZXJyb3IgPSBGQUxTRTsJICAJCgkkY2hlY2sgPSAkdGhpcy0+Q2hlY2tNb2R1bGVTZXR0aW5nKCRwYXJhbXNbJ0NvbmZpZ1BhdGgnXSk7CglpZigkY2hlY2spewoJCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdDb25maWdQYXRoJywgJHBhcmFtc1snQ29uZmlnUGF0aCddKTsKCQkvLyBSZWRpcmVjdCB0byBwcmV2ZW50IGRvdWJsZSBwb3N0IGFuZCBhbGxvd3MgdXMgdG8gc2hvdyBhIG1lc3NhZ2UKCSAgCSRwYXJhbXMgPSBhcnJheSgndGFiX21lc3NhZ2UnPT4gJ3RhYm1lc3NhZ2Vfc2V0dGluZ3NfY2hhbmdlZCcsICdhY3RpdmVfdGFiJyA9PiAnbW9kdWxlX3NldHRpbmdzJyk7CgkJJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgJHBhcmFtcyk7Cgl9IGVsc2UgewoJCS8vc2hvdyBlcnJvcgoJCWVjaG8gJHRoaXMtPlNob3dFcnJvcnMoJHRoaXMtPkxhbmcoJ2NvbmZpZ191cGRhdGVfZXJyb3InKSk7CgkJJHRoaXMtPlNldFByZWZlcmVuY2UoJ0NvbmZpZ1BhdGgnLCAndXBsb2Fkcy9pbWFnZXMnKTsKCX0KICAJCiAgCQogIAogIH0gZWxzZWlmIChlbXB0eSgkcGFyYW1zWydDb25maWdQYXRoJ10pICYmICRwYXJhbXNbJ2FjdGl2ZV90YWInXSA9PSAnbW9kdWxlX3NldHRpbmdzJyAmJiBpc3NldCgkcGFyYW1zWydzdWJtaXQnXSkpIHsKICAJLy9zaG93IGVycm9yCgllY2hvICR0aGlzLT5TaG93RXJyb3JzKCR0aGlzLT5MYW5nKCdpbWFnZV9jb250ZW50X3VwZGF0ZV9mYWlsdXJlJykpOwoJJHRoaXMtPlNldFByZWZlcmVuY2UoJ0NvbmZpZ1BhdGgnLCAndXBsb2Fkcy9pbWFnZXMnKTsKICB9CiAgCi8vIExvb3Agc2V0dGluZ3MgdGhhdCB3ZSBhbGxvdyB0byBjaGFuZ2UKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZV9Db25maWdwYXRoJywkdGhpcy0+TGFuZygnc2V0dGluZ19Db25maWdwYXRoJykpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X0NvbmZpZ3BhdGgnLCR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCdDb25maWdQYXRoJywkdGhpcy0+R2V0UHJlZmVyZW5jZSgnQ29uZmlnUGF0aCcsJycpLDUwLDI1NSkpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X0NvbmZpZ3BhdGhfaGVscCcsJHRoaXMtPk1ha2VUb29sVGlwKCR0aGlzLT5MYW5nKCdoZWxwX0NvbmZpZ3BhdGgnKSkpOwoKLy8gRm9ybSBzdGFydC9lbmQKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdGFydGZvcm0nLCAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwncG9zdCcsJ211bHRpcGFydC9mb3JtLWRhdGEnLCBmYWxzZSwgJycsIGFycmF5KCdhY3RpdmVfdGFiJyA9PiAnbW9kdWxlX3NldHRpbmdzJykpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdlbmRmb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbignc3VibWl0JywgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwgJ3N1Ym1pdCcsIGxhbmcoJ3N1Ym1pdCcpKSk7CgkKLy8gVGVtcGxhdGUKZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdhZG1pbl9zZXR0aW5nc3RhYi50cGwnKTsKPz4=]]></data>
	</file>
	<file>
	  <filename>/admin_newspreferencestab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgCmlmICghaXNzZXQoJGdDbXMpKSBleGl0OwoKCi8vIElmIGZvciBpcyBzdWJtaXR0ZW4KaWYgKGlzc2V0KCRwYXJhbXNbJ3N1Ym1pdCddKSAmJiAkcGFyYW1zWydhY3RpdmVfdGFiJ10gPT0gIm5ld3NwcmVmZXJlbmNlcyIpewoJaWYgKCR0aGlzLT5VcGRhdGVOZXdzU2V0dGluZ3MoJHBhcmFtc1snd2lkdGgnXSwkcGFyYW1zWydoZWlnaHQnXSkpewoJCWVjaG8gJHRoaXMtPlNob3dNZXNzYWdlKCR0aGlzLT5MYW5nKCdwcmVmZXJlbmNlc3VwZGF0ZWQnKSk7Cgl9Cn0KCiRzZXR0aW5ncyA9ICR0aGlzLT5HZXROZXdzU2V0dGluZ3MoKTsKCiR0aGlzLT5zbWFydHktPmFzc2lnbignd2lkdGhfdGV4dCcsICR0aGlzLT5MYW5nKCd3aWR0aF90ZXh0JykpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2hlaWdodF90ZXh0JywgJHRoaXMtPkxhbmcoJ2hlaWdodF90ZXh0JykpOwoKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdmb3JtX3N0YXJ0JywgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsICdwb3N0JywgJ211bHRpcGFydC9mb3JtLWRhdGEnLCAnJywgJycsIGFycmF5KCJhY3RpdmVfdGFiIiA9PiAnbmV3c3ByZWZlcmVuY2VzJykpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd3aWR0aCcsICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCd3aWR0aCcsJHNldHRpbmdzWyd3aWR0aCddLCcnLCcnLCdzdHlsZT0id2lkdGg6IDEwMHB4OyInKSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbignaGVpZ2h0JywgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsJ2hlaWdodCcsJHNldHRpbmdzWydoZWlnaHQnXSwnJywnJywnc3R5bGU9IndpZHRoOiAxMDBweDsiJykpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N1Ym1pdF9rbm9wJywkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCdzdWJtaXQnLCdPcHNsYWFuJykpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2Zvcm1fZW5kJywgJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7CgovLyBUZW1wbGF0ZQplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2FkbWluX25ld3NzZXR0aW5ncy50cGwnKTsKPz4K]]></data>
	</file>
	<file>
	  <filename>/admin_preferencestab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgCmlmICghaXNzZXQoJGdDbXMpKSBleGl0OwoKCi8vUnVuIHVwZGF0ZSBzdGF0dXMKaWYoaXNzZXQoJHBhcmFtc1snaW1hZ2VfZGVsZXRlJ10pKXsKCWVjaG8gJHRoaXMtPlNob3dNZXNzYWdlKCR0aGlzLT5MYW5nKCdpbWFnZV9kZWxldGVkJykpOwp9CmlmKGlzc2V0KCRwYXJhbXNbJ2ltYWdlX3VwZGF0ZSddKSkgewoJZWNobyAkdGhpcy0+U2hvd01lc3NhZ2UoJHRoaXMtPkxhbmcoJ3NldHRpbmdfY29udGVudF91cGRhdGUnKSk7Cn0KaWYoaXNzZXQoJHBhcmFtc1snaW1hZ2VfY3JlYXRlJ10pKSB7CgllY2hvICR0aGlzLT5TaG93TWVzc2FnZSgkdGhpcy0+TGFuZygnaW1hZ2VfY3JlYXRlZCcpKTsKfQoKJG9yZGVyX2J5ID0gJ0RFU0MnOwokb3JkZXIgPSAnaWQnOwokYnkgPSAnREVTQyc7CgppZigkY3VycmVudF90YWIgPT0gJHBhcmFtc1snYWN0aXZlX3RhYiddKXsKCS8vT3JkZXIgYnkgZm9yIHF1ZXJ5IGJ1aWxkCglpZihpc3NldCgkcGFyYW1zWydvcmRlciddKSl7CgkJaWYoJHBhcmFtc1snYnknXSA9PSAnQVNDJyl7CgkJCSRieSA9ICdERVNDJzsKCQl9ZWxzZXsKCQkJJGJ5ID0gJ0FTQyc7CgkJfQoJCSRvcmRlciA9ICRwYXJhbXNbJ29yZGVyJ107CgkJJG9yZGVyX2J5ID0gJHBhcmFtc1snYnknXTsKCX0KfQoKCi8vIGFzc2lnbiBoZWFkZXIgbGlua3MgYW5kIGJ5IGNsaWNrIG9yZGVyIGJ5IERFU0Mgb3IgQVNDIAokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2ltYWdlX3RpdGxlJywgJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkID0gJycsICR0aGlzLT5MYW5nKCdpbWFnZV90aXRsZScpLCBhcnJheSgnYWN0aXZlX3RhYicgPT4gJ3ByZWZlcmVuY2VzJywgJ29yZGVyJyA9PiAndGl0bGUnLCAnYnknID0+ICRieSApKSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbignaW1hZ2VfcGF0aCcsICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCA9ICcnLCAkdGhpcy0+TGFuZygnaW1hZ2VfcGF0aCcpLCBhcnJheSgnYWN0aXZlX3RhYicgPT4gJ3ByZWZlcmVuY2VzJywgJ29yZGVyJyA9PiAncGF0aCcsICdieScgPT4gJGJ5ICkpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbWFnZV93aWR0aCcsICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCA9ICcnLCAkdGhpcy0+TGFuZygnaW1hZ2Vfd2lkdGgnKSwgYXJyYXkoJ2FjdGl2ZV90YWInID0+ICdwcmVmZXJlbmNlcycsICdvcmRlcicgPT4gJ3dpZHRoJywgJ2J5JyA9PiAkYnkgKSkpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2ltYWdlX2hlaWdodCcsICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCA9ICcnLCAkdGhpcy0+TGFuZygnaW1hZ2VfaGVpZ2h0JyksIGFycmF5KCdhY3RpdmVfdGFiJyA9PiAncHJlZmVyZW5jZXMnLCAnb3JkZXInID0+ICdoZWlnaHQnLCAnYnknID0+ICRieSApKSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbignaW1hZ2VfZWRpdCcsICR0aGlzLT5MYW5nKCdpbWFnZV9lZGl0JykpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2FkZGxpbmsnLCAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdhZGRlZGl0c2V0dGluZycsICRyZXR1cm5pZCA9ICcnLCAkZ0Ntcy0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ10tPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL25ld29iamVjdC5naWYnLCdkZWZhdWx0JywnJywnJywnc3lzdGVtaWNvbicpLCBhcnJheSgnYWN0aXZlX3RhYicgPT4gJ3ByZWZlcmVuY2VzJywgJ2FkZGltYWdlJyA9PiAnYWRkJykpCgkJCQkJLicgJy4gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnYWRkZWRpdHNldHRpbmcnLCAkcmV0dXJuaWQgPSAnJywgJHRoaXMtPkxhbmcoJ2ltYWdlX2FkZGltYWdlJyksIGFycmF5KCdhY3RpdmVfdGFiJyA9PiAncHJlZmVyZW5jZXMnLCAnYWRkaW1hZ2UnID0+ICdhZGQnKSkKCQkJCQkgICk7CgovL1JldHJpZXZlIGFsbCB0aGUgam9icwokaXRlbXMgPSAkdGhpcy0+U2V0dGluZ3NPdmVydmlldygkaWQsICRvcmRlciwgJG9yZGVyX2J5KTsKCi8vQ3JlYXRlIHRoZSB0aXRsZSBsaW5rLCBlZGl0IGFuZCBkZWxldGUgaWNvbgokbmV3X2l0ZW1zID0gYXJyYXkoKTsKZm9yZWFjaCgkaXRlbXMgYXMgJGl0ZW0pewoJJGl0ZW1bJ3RpdGxlbGluayddID0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnYWRkZWRpdHNldHRpbmcnLCAkcmV0dXJuaWQsICRpdGVtWyd0aXRsZSddLCAKCQlhcnJheSgiaW1hZ2VfaWQiID0+ICRpdGVtWydpZCddKSk7CgkkaXRlbVsnZWRpdGxpbmsnXSA9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2FkZGVkaXRzZXR0aW5nJywgJHJldHVybmlkLCAkZ0Ntcy0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ10tPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2VkaXQuZ2lmJywnZWRpdCcsJycsJycsJ3N5c3RlbWljb24nKSwgCgkJYXJyYXkoImltYWdlX2lkIiA9PiAkaXRlbVsnaWQnXSkpOwoJJGl0ZW1bJ2RlbGV0ZWxpbmsnXSA9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2RlbGV0ZXNldHRpbmcnLCAkcmV0dXJuaWQsICRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vZGVsZXRlLmdpZicsJ2RlbGV0ZScsJycsJycsJ3N5c3RlbWljb24nKSwgCgkJYXJyYXkoImltYWdlX2lkIiA9PiAkaXRlbVsnaWQnXSksICR0aGlzLT5MYW5nKCdpbWFnZV9kZWxldGUnKSk7CgkKCS8vcHV0IHRoZSBuZXcgaXRlbXMgaW4gYXJyYXkKCSRuZXdfaXRlbXNbXSA9ICRpdGVtOwp9Ci8vYXNzaWduIHRoZSBuZXcgaXRlbSB0byBzbWFydHkKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpdGVtcycsICRuZXdfaXRlbXMpOwoKLy8gVGVtcGxhdGUKZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdhZG1pbl9zZXR0aW5ncy50cGwnKTsKPz4K]]></data>
	</file>
	<file>
	  <filename>/admin_saveimage.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CQoJCiAgCS8vJHBhcmFtc1snc3VibWl0J107CgkvLyRlcnJvciA9IEZBTFNFOwogIAkKCS8vZGVmaW5lIHBhcmFtcwoJJHBhcmFtc1sndGFiX21hc3NhZ2UnXSA9ICdnZXVwbG9hZCc7CiAgCSRwYXJhbXNbJ2FjdGl2ZV90YWInXSA9ICd1cGxvYWQnOyAgCQogIAkkdXBsb2FkaW1hZ2UgPSAkcGFyYW1zWydkcm9wZG93blNldHRpbmdzJ107CiAgCWlmICghZW1wdHkoJHBhcmFtc1snbmV3c2l0ZW1zJ10pKXsKICAJCSRzZXR0aW5ncyA9ICR0aGlzLT5HZXROZXdzU2V0dGluZ3MoKTsKICAJfSBlbHNlIHsKICAJCSRzZXR0aW5ncyA9ICR0aGlzLT5HZXRTZXR0aW5nKCR1cGxvYWRpbWFnZSk7CiAgCX0KICAJCiAgCS8vZGVmaW5lIHNtYXJ0eSB2YXJpYWJsZXMKICAJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd3aWR0aCcsICRzZXR0aW5nc1snd2lkdGgnXSk7CiAgIAkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2hlaWdodCcsICRzZXR0aW5nc1snaGVpZ2h0J10pOwogICAJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdwYXRoJywgJHNldHRpbmdzWydwYXRoJ10pOwogICAJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdsb2FkRmFuY3lib3gnLCAkdGhpcy0+TG9hZEZhbmN5Ym94KCkpOwogICAJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdsb2FkSmNyb3AnLCAkdGhpcy0+TG9hZEpjcm9wKCkpOyAgIAkKICAgCQoJLy9zZXQgc2VydmVycGF0aAogICAJJHNlcnZlclBhdGggPSAkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddOwogICAJLy9zZXQgbWFwIHBhdGgKICAgCS8vIElmIGEgbmV3cyBhcnRpY2xlIGhhcyBiZWVuIHNlbGVjdGVkCiAgIAlpZiAoIWVtcHR5KCRwYXJhbXNbJ25ld3NpdGVtcyddKSl7CiAgIAkJJG5ld3NfcGF0aCA9ICRzZXJ2ZXJQYXRoIC4gIi91cGxvYWRzL25ld3MvIjsKICAgCQkvLyBpZiBtYXAgbm90IGV4aXN0cywgbWFrZSBtYXAKCQlpZiAoIWZpbGVfZXhpc3RzKCRuZXdzX3BhdGgpKSB7CgkJCW1rZGlyKCRuZXdzX3BhdGgsMDc3Nyk7CQkJCgkJfQkJCiAgIAkJJG1hcF9wYXRoID0gJG5ld3NfcGF0aCAuICJpZCIuJHBhcmFtc1snbmV3c2l0ZW1zJ10uIi8iOwogICAJCSRhY3RpdmVfdGFiID0gInVwbG9hZG5ld3MiOyAgIAkJCiAgIAl9IGVsc2UgewogICAJCSRtYXBfcGF0aCA9ICRzZXJ2ZXJQYXRoIC4gIi8iIC4gJHRoaXMtPkdldFByZWZlcmVuY2UoJ0NvbmZpZ1BhdGgnKSAuICIvIiAuICRzZXR0aW5nc1sncGF0aCddOwogICAJCWlmKCFmaWxlX2V4aXN0cygkbWFwX3BhdGgpKXsKICAgCQkJJG1hcF9wYXRoID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ0NvbmZpZ1BhdGgnKSAuICIvIiAuICRzZXR0aW5nc1sncGF0aCddOwoJICAgCQlpZighbWtkaXIoc3RyX3JlcGxhY2UoJy8nLCBESVJFQ1RPUllfU0VQQVJBVE9SLCAnLi4vJy4kbWFwX3BhdGgpLCAwNzc3LCB0cnVlKSl7CgkgICAJCQllY2hvICR0aGlzLT5TaG93RXJyb3JzKCR0aGlzLT5MYW5nKCdlcnJvcl9tYWtlX2Rpcl9mYWlsZWQnKSk7CgkgICAJCX0KICAgCQl9CiAgIAkJJGFjdGl2ZV90YWIgPSAidXBsb2FkIjsKICAgCQkkbWFwX3BhdGggPSAkc2VydmVyUGF0aCAuICIvIiAuICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdDb25maWdQYXRoJykgLiAiLyIgLiAkc2V0dGluZ3NbJ3BhdGgnXSAuICIvIjsKICAgCX0KCQkKCWlmICghZW1wdHkoJF9GSUxFU1snbTFfdXBsb2FkSW1hZ2UnXVsnbmFtZSddKSl7CQoJCQoJCS8vIGlmIG1hcCBub3QgZXhpc3RzLCBtYWtlIG1hcAoJCWlmICghZmlsZV9leGlzdHMoJG1hcF9wYXRoKSkgewoJCQlta2RpcigkbWFwX3BhdGgsMDc3Nyk7CQkJCgkJfQoJCQoJCS8vaWYgdGhlcmUgYXJlIHNwYWNlcyBpbiB0aGUgaW1hZ2UgbmFtZSByZXBsYWNlIHRoZW0gd2l0aCAiXyIKCQkkQWZiZWVsZGluZ0lEID0gc3RyX3JlcGxhY2UoIiAiLCJfIiwkX0ZJTEVTWydtMV91cGxvYWRJbWFnZSddWyduYW1lJ10pOwoJCS8vZ2V0IHRoZSBleHQgZnJvbSB0aGUgaW1hZ2UJCQkKCQkkcGF0aF9wYXJ0cyA9IHBhdGhpbmZvKCcnLiRBZmJlZWxkaW5nSUQuJycpOwoJCS8vc2V0IHRoZSBleHQgdG8gdmFyCgkJJGV4dCA9IHN0cnRvbG93ZXIoJHBhdGhfcGFydHNbJ2V4dGVuc2lvbiddKTsKCQkvL3NldCB0aGUgaW1hZ2UgbmFtZQoJCSRiZXN0YW5kc25hYW0gPSBzdHJfcmVwbGFjZSgiLiIuJGV4dCwgIiIsICRfRklMRVNbJ20xX3VwbG9hZEltYWdlJ11bJ25hbWUnXSk7CgkJLy9tYWtlIHRoZSBpbWFnZSB3aXRoIHRoZSBuYW1lIGFuZCBleHQKCQkkb3JpZ2luZWVsID0gJGJlc3RhbmRzbmFhbSAvKi4gIl8iIC4gJHJhbmRvbSAuKi8gLiAiLiIgLiAkZXh0OwkKCQkvL3NldCB0YXJnZXQgcGF0aCB0byBpbWFnZQkJCQkJCQoJCSR0YXJnZXRfcGF0aCA9ICRtYXBfcGF0aCAuICRvcmlnaW5lZWw7IAoJCS8vdXBsb2FkIGltYWdlIGZpbGUgdG8gJHRhcmdldF9wYXRoCQoJCWxpc3QoJGltYWdlU2l6ZVdpZHRoLCAkaW1hZ2VTaXplSGVpZ2h0KSA9IGdldGltYWdlc2l6ZSgkX0ZJTEVTWydtMV91cGxvYWRJbWFnZSddWyd0bXBfbmFtZSddKTsgCgogICAJCQlpZigkc2V0dGluZ3NbJ3dpZHRoJ10gPiAkaW1hZ2VTaXplV2lkdGggfHwgJHNldHRpbmdzWydoZWlnaHQnXSA+ICRpbWFnZVNpemVIZWlnaHQpewogICAJCQkJJHBhcmFtcyA9IGFycmF5KCdlcnJvcl9tZXNzYWdlJz0+ICdlcnJvcl91cGxvYWRfaW1hZ2Vfc2l6ZScsICdhY3RpdmVfdGFiJyA9PiAndXBsb2FkJyk7CgkJCQkkdGhpcy0+UmVkaXJlY3QoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCAkcGFyYW1zKTsKICAgCQkJfWVsc2UgewogICAJCQkJaWYobW92ZV91cGxvYWRlZF9maWxlKCRfRklMRVNbJ20xX3VwbG9hZEltYWdlJ11bJ3RtcF9uYW1lJ10sICR0YXJnZXRfcGF0aCkgJiYgJGV4dCA9PSAnanBnJyB8fCAkZXh0ID09ICdwbmcnIHx8ICRleHQgPT0gJ2dpZicgfHwgJGV4dCA9PSAnanBlZycpewoJCQkJCS8vbWFieSBmb3IgZGVidWdnaW5nCgkJCQl9IGVsc2UgewoJCQkJCSRwYXJhbXMgPSBhcnJheSgnZXJyb3JfbWVzc2FnZSc9PiAnZXJyb3JfdXBsb2FkJywgJ2FjdGl2ZV90YWInID0+ICd1cGxvYWQnLCAncGF0aEltYWdlJyA9PiAkbWFwX3BhdGgsICdmaWxlbmFtZScgPT4gJG9yaWdpbmVlbCk7CgkJCQkJJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgJHBhcmFtcyk7CgkJCQl9CiAgIAkJCX0KICAgCQkJCgkJCQkKCX0JCgkKCQoJCQoJLy9jcmVhdGUgZm9ybQogICAJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdGFydGZvcm0nLCAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwncG9zdCcsJ211bHRpcGFydC9mb3JtLWRhdGEnLCBmYWxzZSwgJycsIGFycmF5KCdpbWFnZV9yZXNpemVkJyA9PiB0cnVlLCAnb3JpZ2luZWVsJyA9PiAkb3JpZ2luZWVsLCAnd2lkdGhJbWFnZScgPT4gJHNldHRpbmdzWyd3aWR0aCddLCAnaGVpZ2h0SW1hZ2UnID0+ICRzZXR0aW5nc1snaGVpZ2h0J10sICdwYXRoSW1hZ2UnID0+ICRzZXR0aW5nc1sncGF0aCddLCAndG90YWxwYXRoSW1hZ2UnID0+ICRtYXBfcGF0aCwgJ2V4dCcgPT4gJGV4dCwgJ2FydGljbGVJRCcgPT4gJHBhcmFtc1snbmV3c2l0ZW1zJ10sICdhY3RpdmVfdGFiJyA9PiAkYWN0aXZlX3RhYikpKTsKCS8vbWFrZSBoaWRkZW4gaW5wdXRzIGZvciB0aGUgc2NhbGluZyAoeCx5KSBhbmQgd2lkdGggYW5kIGhlaWdodAogICAJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF94JywgJHRoaXMtPkNyZWF0ZUlucHV0SGlkZGVuKCRpZCwgJ3gnKSk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X3knLCAkdGhpcy0+Q3JlYXRlSW5wdXRIaWRkZW4oJGlkLCAneScpKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfd2lkdGgnLCAkdGhpcy0+Q3JlYXRlSW5wdXRIaWRkZW4oJGlkLCAndycpKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfaGVpZ2h0JywgJHRoaXMtPkNyZWF0ZUlucHV0SGlkZGVuKCRpZCwgJ2gnKSk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2NhbmNlbCcsICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdjYW5jZWwnLCAnQ2FuY2VsJykpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdWJtaXQnLCAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAnc2F2ZV9pbWFnZScsICR0aGlzLT5sYW5nKCdzYXZlX2ltYWdlJykpKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignZW5kZm9ybScsICR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOwoJLy9hc3NpZ24gdG1wIGltYWdlIHRvIHNtYXJ0eQoJLy8gSWYgYSBuZXdzIGFydGljbGUgaGFzIGJlZW4gc2VsZWN0ZWQKICAgCWlmICghZW1wdHkoJHBhcmFtc1snbmV3c2l0ZW1zJ10pKXsKICAgCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RtcGltYWdlJywgIi91cGxvYWRzL25ld3MvaWQiIC4gJHBhcmFtc1snbmV3c2l0ZW1zJ10gLiAiLyIgLiAkb3JpZ2luZWVsKTsKICAgCX0gZWxzZSB7CiAgIAkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0bXBpbWFnZScsICIvIiAuICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdDb25maWdQYXRoJykgLiAiLyIgLiAkc2V0dGluZ3NbJ3BhdGgnXSAuICIvIiAuICRvcmlnaW5lZWwpOwogICAJfQogICAKICAgCQogICAJLy9lY2hvIHRlbXBsYXRlCgllY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2FkbWluX2pjcm9wLnRwbCcpOwoKICAJLy8gUmVkaXJlY3QgdG8gcHJldmVudCBkb3VibGUgcG9zdCBhbmQgYWxsb3dzIHVzIHRvIHNob3cgYSBtZXNzYWdlCiAgCS8vJHBhcmFtcyA9IGFycmF5KCd0YWJfbWVzc2FnZSc9PiAnZ2V1cGxvYWQnLCAnYWN0aXZlX3RhYicgPT4gJ3VwbG9hZCcsICk7CgkvLyR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsICRwYXJhbXMpOwoJCgoK]]></data>
	</file>
	<file>
	  <filename>/admin_uploadnewstab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CiRjb25maWcgPSAkZ0Ntcy0+R2V0Q29uZmlnKCk7CgkKLy8gaXMgdGhlIGltYWdlIHVwbG9hZGVkPwppZighZW1wdHkoJHBhcmFtc1snc3VibWl0J10pKSB7CgkKfQovLyBpcyB0aGUgaW1hZ2UgcmVzaXplZD8KaWYoJHBhcmFtc1snaW1hZ2VfcmVzaXplZCddKSB7CgkKfQoKaWYoIWVtcHR5KCRwYXJhbXNbJ2NhbmNlbCddKSkgewoJJHRvdGFsUGF0aEltYWdlID0gJHBhcmFtc1sndG90YWxwYXRoSW1hZ2UnXSAuICRwYXJhbXNbJ29yaWdpbmVlbCddOwoJZWNobyAkJHRvdGFsUGF0aEltYWdlOwoJaWYodW5saW5rKCR0b3RhbFBhdGhJbWFnZSkpIHsKCQllY2hvICR0aGlzLT5TaG93RXJyb3JzKCR0aGlzLT5MYW5nKCdlcnJvcl9pbWFnZV9ub3Rfc2F2ZWQnKSk7Cgl9Cn0KCmlmKCRwYXJhbXNbJ2Vycm9yX21lc3NhZ2UnXSA9PSAnZXJyb3JfdXBsb2FkX2ltYWdlX3NpemUnKXsKCWVjaG8gJHRoaXMtPlNob3dFcnJvcnMoJHRoaXMtPkxhbmcoJ2Vycm9yX3VwbG9hZF9pbWFnZV9zaXplJykpOwp9CgppZigoJHBhcmFtc1snZXJyb3JfbWVzc2FnZSddID09ICdlcnJvcl9jcm9wJykpIHsKCSR0b3RhbFBhdGhJbWFnZSA9ICRwYXJhbXNbJ3BhdGhJbWFnZSddIC4gJHBhcmFtc1snZmlsZW5hbWUnXTsKCWlmKHVubGluaygkdG90YWxQYXRoSW1hZ2UpKSB7CgkJCWVjaG8gJHRoaXMtPlNob3dFcnJvcnMoJHRoaXMtPkxhbmcoJ2Vycm9yX2Nyb3BfZGVsZXRlZCcpKTsKCQl9ZWxzZSB7CgkJCWVjaG8gJHRoaXMtPlNob3dFcnJvcnMoJHRoaXMtPkxhbmcoJ2Vycm9yX2Nyb3Bfbm90X2RlbGV0ZWQnKSk7CgkJfQp9IAppZiAoJHBhcmFtc1snZXJyb3JfbWVzc2FnZSddID09ICdlcnJvcl91cGxvYWQnKSB7CgkkdG90YWxQYXRoSW1hZ2UgPSAkcGFyYW1zWydwYXRoSW1hZ2UnXSAuICRwYXJhbXNbJ2ZpbGVuYW1lJ107CglpZih1bmxpbmsoJHRvdGFsUGF0aEltYWdlKSkgewoJCWVjaG8gJHRoaXMtPlNob3dFcnJvcnMoJHRoaXMtPkxhbmcoJ2Vycm9yX3VwbG9hZF9leHRlbnNpb24nKSk7Cgl9CQp9CgppZigoaXNzZXQoJHBhcmFtc1snc3VibWl0J10pKSAmJiAkcGFyYW1zWydhY3RpdmVfdGFiJ10gPT0gInVwbG9hZG5ld3MiKXsKCWlmKCFlbXB0eSgkX0ZJTEVTWydtMV91cGxvYWRJbWFnZSddWyduYW1lJ10pKXsKCQkvL2luY2x1ZGUgdXBsb2FkIHNjcmlwdAoJCWluY2x1ZGUgJ2FkbWluX3NhdmVpbWFnZS5waHAnOwoJfWVsc2UgewoJCWVjaG8gJHRoaXMtPlNob3dFcnJvcnMoJHRoaXMtPkxhbmcoJ2Vycm9yX25vX2ZpbGVfdXBsb2FkJykpOwoJfQp9CgkKCgkKaWYoKCRwYXJhbXNbJ2ltYWdlX3Jlc2l6ZWQnXSkgJiYgKGlzc2V0KCRwYXJhbXNbJ3NhdmVfaW1hZ2UnXSkgJiYgJHBhcmFtc1snYWN0aXZlX3RhYiddID09ICJ1cGxvYWRuZXdzIikpIHsJCQkKCQkJLy9pbmNsdWRlIGpDcm9wIHNjcmlwdAoJCQlpbmNsdWRlICdhZG1pbl9jcm9waW1hZ2UucGhwJzsJCn0KCi8vZ2V0IGltYWdlIHNldHRpbmdzCiRpbWFnZVNldHRpbmdzID0gJHRoaXMtPkdldFNldHRpbmdzVGl0bGVzKCk7CgkKLy8gRm9ybSBzdGFydC9lbmQKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdGFydGZvcm0nLCAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwncG9zdCcsJ211bHRpcGFydC9mb3JtLWRhdGEnLCBmYWxzZSwgJycsIGFycmF5KCdhY3RpdmVfdGFiJyA9PiAndXBsb2FkbmV3cycpKSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfdXBsb2FkX2ltYWdlJywgJHRoaXMtPkNyZWF0ZUZpbGVVcGxvYWRJbnB1dCgkaWQsICd1cGxvYWRJbWFnZScsICdhY2NlcHQ9ImltYWdlLyoiJyApKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdlbmRmb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbignc3VibWl0JywgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwgJ3N1Ym1pdCcsIGxhbmcoJ3N1Ym1pdCcpKSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbigndXBsb2FkX3RleHQnLCAkdGhpcy0+TGFuZygndXBsb2FkX3RleHQnKSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbignY2hvb3NlX25ld3NfdGV4dCcsICR0aGlzLT5MYW5nKCdjaG9vc2VfbmV3c190ZXh0JykpOwoKLy8gR2V0IG5ld3MgaXRlbXMKaWYgKCR0aGlzLT5HZXROZXdzSXRlbXMoKSl7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2Ryb3Bkb3duX25ld3NpdGVtcycsICR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwgJ25ld3NpdGVtcycsICR0aGlzLT5HZXROZXdzSXRlbXMoKSkpOwp9CgkKLy8gVGVtcGxhdGUKZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdhZG1pbl91cGxvYWRuZXdzLnRwbCcpOw==]]></data>
	</file>
	<file>
	  <filename>/admin_uploadtab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CiRjb25maWcgPSAkZ0Ntcy0+R2V0Q29uZmlnKCk7CgkKLy8gaXMgdGhlIGltYWdlIHVwbG9hZGVkPwppZighZW1wdHkoJHBhcmFtc1snc3VibWl0J10pKSB7CgkKfQovLyBpcyB0aGUgaW1hZ2UgcmVzaXplZD8KaWYoJHBhcmFtc1snaW1hZ2VfcmVzaXplZCddKSB7CgkKfQoKaWYoIWVtcHR5KCRwYXJhbXNbJ2NhbmNlbCddKSkgewoJJHRvdGFsUGF0aEltYWdlID0gJHBhcmFtc1sndG90YWxwYXRoSW1hZ2UnXSAuICRwYXJhbXNbJ29yaWdpbmVlbCddOwoJZWNobyAkJHRvdGFsUGF0aEltYWdlOwoJaWYodW5saW5rKCR0b3RhbFBhdGhJbWFnZSkpIHsKCQllY2hvICR0aGlzLT5TaG93RXJyb3JzKCR0aGlzLT5MYW5nKCdlcnJvcl9pbWFnZV9ub3Rfc2F2ZWQnKSk7Cgl9Cn0KCmlmKCRwYXJhbXNbJ2Vycm9yX21lc3NhZ2UnXSA9PSAnZXJyb3JfdXBsb2FkX2ltYWdlX3NpemUnKXsKCS8vZWNobyAkdGhpcy0+U2hvd0Vycm9ycygkdGhpcy0+TGFuZygnZXJyb3JfdXBsb2FkX2ltYWdlX3NpemUnKSk7Cn0KCmlmKCgkcGFyYW1zWydlcnJvcl9tZXNzYWdlJ10gPT0gJ2Vycm9yX2Nyb3AnKSkgewoJJHRvdGFsUGF0aEltYWdlID0gJHBhcmFtc1sncGF0aEltYWdlJ10gLiAkcGFyYW1zWydmaWxlbmFtZSddOwoJaWYodW5saW5rKCR0b3RhbFBhdGhJbWFnZSkpIHsKCQkJZWNobyAkdGhpcy0+U2hvd0Vycm9ycygkdGhpcy0+TGFuZygnZXJyb3JfY3JvcF9kZWxldGVkJykpOwoJCX1lbHNlIHsKCQkJZWNobyAkdGhpcy0+U2hvd0Vycm9ycygkdGhpcy0+TGFuZygnZXJyb3JfY3JvcF9ub3RfZGVsZXRlZCcpKTsKCQl9Cn0gCmlmICgkcGFyYW1zWydlcnJvcl9tZXNzYWdlJ10gPT0gJ2Vycm9yX3VwbG9hZCcpIHsKCSR0b3RhbFBhdGhJbWFnZSA9ICRwYXJhbXNbJ3BhdGhJbWFnZSddIC4gJHBhcmFtc1snZmlsZW5hbWUnXTsKCWlmKHVubGluaygkdG90YWxQYXRoSW1hZ2UpKSB7CgkJZWNobyAkdGhpcy0+U2hvd0Vycm9ycygkdGhpcy0+TGFuZygnZXJyb3JfdXBsb2FkX2V4dGVuc2lvbicpKTsKCX0JCn0KCmlmKChpc3NldCgkcGFyYW1zWydzdWJtaXQnXSkpICYmICRwYXJhbXNbJ2FjdGl2ZV90YWInXSA9PSAidXBsb2FkIil7CglpZighZW1wdHkoJF9GSUxFU1snbTFfdXBsb2FkSW1hZ2UnXVsnbmFtZSddKSl7CgkJLy9pbmNsdWRlIHVwbG9hZCBzY3JpcHQKCQlpbmNsdWRlICdhZG1pbl9zYXZlaW1hZ2UucGhwJzsKCX1lbHNlIHsKCQllY2hvICR0aGlzLT5TaG93RXJyb3JzKCR0aGlzLT5MYW5nKCdlcnJvcl9ub19maWxlX3VwbG9hZCcpKTsKCX0KfQoJCgoJCmlmKCgkcGFyYW1zWydpbWFnZV9yZXNpemVkJ10pICYmIChpc3NldCgkcGFyYW1zWydzYXZlX2ltYWdlJ10pICYmICRwYXJhbXNbJ2FjdGl2ZV90YWInXSA9PSAidXBsb2FkIikpIHsJCQkKCQkJLy9pbmNsdWRlIGpDcm9wIHNjcmlwdAoJCQlpbmNsdWRlICdhZG1pbl9jcm9waW1hZ2UucGhwJzsJCn0KCi8vZ2V0IGltYWdlIHNldHRpbmdzCiRpbWFnZVNldHRpbmdzID0gJHRoaXMtPkdldFNldHRpbmdzVGl0bGVzKCk7CgoJLy8gdGhlc2Ugc2V0dGluZ3MgYXJlIG9ubHkgZm9yIGRlYnVnZ2luZwovKgllY2hvICdQYXJhbXM6IDxwcmU+JzsKCXByaW50X3IoJHBhcmFtcyk7CgllY2hvICc8L3ByZT4nOwoKICAgCWVjaG8gJzxiciAvPlZhciBzZXR0aW5nczogPHByZT4nOwogICAJcHJpbnRfcigkc2V0dGluZ3MpOwogICAJZWNobyAnPC9wcmU+JzsKICAgCQkgICAJCiAgIAllY2hvICc8YnIgLz5VcGxvYWQgaW1hZ2U6IDxwcmU+JzsKICAgCXByaW50X3IoJF9GSUxFU1snbTFfdXBsb2FkSW1hZ2UnXSk7CiAgIAllY2hvICc8L3ByZT4nOyovCgkKLy8gRm9ybSBzdGFydC9lbmQKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdGFydGZvcm0nLCAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwncG9zdCcsJ211bHRpcGFydC9mb3JtLWRhdGEnLCBmYWxzZSwgJycsIGFycmF5KCdhY3RpdmVfdGFiJyA9PiAndXBsb2FkJykpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF91cGxvYWRfaW1hZ2UnLCAkdGhpcy0+Q3JlYXRlRmlsZVVwbG9hZElucHV0KCRpZCwgJ3VwbG9hZEltYWdlJywgJ2FjY2VwdD0iaW1hZ2UvKiInICkpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2Ryb3Bkb3duX3NldHRpbmdzX2ltYWdlJywgJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24oJGlkLCAnZHJvcGRvd25TZXR0aW5ncycsICRpbWFnZVNldHRpbmdzKSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbignZW5kZm9ybScsICR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N1Ym1pdCcsICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdzdWJtaXQnLCBsYW5nKCdzdWJtaXQnKSkpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3VwbG9hZF90ZXh0JywgJHRoaXMtPkxhbmcoJ3VwbG9hZF90ZXh0JykpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2Nob29zZV9zZXR0aW5nX3RleHQnLCAkdGhpcy0+TGFuZygnY2hvb3NlX3NldHRpbmdfdGV4dCcpKTsKCQovLyBUZW1wbGF0ZQplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2FkbWluX3VwbG9hZC50cGwnKTs=]]></data>
	</file>
	<file>
	  <filename>/BWImages.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKY2xhc3MgQldJbWFnZXMgZXh0ZW5kcyBDTVNNb2R1bGUKewoJcHVibGljIHN0YXRpYyAkdGVsbGVyID0gMDsKCglmdW5jdGlvbiBHZXROYW1lKCkKCXsKCQlyZXR1cm4gZ2V0X2NsYXNzKCR0aGlzKTsgCgl9CgkKCWZ1bmN0aW9uIEdldEZyaWVuZGx5TmFtZSgpCiAgCXsKCQlyZXR1cm4gJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpOwogIAl9CgogIAlmdW5jdGlvbiBHZXRWZXJzaW9uKCkKICAJewogICAgCXJldHVybiAnMS4yJzsKICAJfQkKICAJCiAJZnVuY3Rpb24gR2V0SGVscCgpCiAgCXsKICAgIAlyZXR1cm4gJHRoaXMtPkxhbmcoJ2hlbHAnKTsKICAJfQogIAkKICAJZnVuY3Rpb24gR2V0QXV0aG9yKCkKICAJewogICAgCXJldHVybiAiQnVpbGRuZXQgV2Vic2VydmljZXMiOwogIAl9CiAgCQogICAJZnVuY3Rpb24gR2V0QXV0aG9yRW1haWwoKQogIAl7CiAgIAkJcmV0dXJuICdzdXBwb3J0QGJ1aWxkbmV0Lm5sJzsKICAJfQogIAkKICAJZnVuY3Rpb24gR2V0Q2hhbmdlTG9nKCkKICAJewogICAJCXJldHVybiAkdGhpcy0+TGFuZygnY2hhbmdlbG9nJyk7CiAgCX0KICAJCiAgCWZ1bmN0aW9uIElzUGx1Z2luTW9kdWxlKCkKICAJewogICAgCXJldHVybiB0cnVlOwogIAl9CgogIAlmdW5jdGlvbiBIYXNBZG1pbigpCiAgCXsKICAgIAlyZXR1cm4gdHJ1ZTsKICAJfQogIAkKICAJZnVuY3Rpb24gR2V0QWRtaW5TZWN0aW9uKCkKICAJewogICAgCXJldHVybiAnY29udGVudCc7CiAgCX0KICAJCiAJZnVuY3Rpb24gR2V0QWRtaW5EZXNjcmlwdGlvbigpCiAgCXsKICAgIAlyZXR1cm4gJHRoaXMtPkxhbmcoJ21vZGRlc2NyaXB0aW9uJyk7CiAgCX0KCiAgCWZ1bmN0aW9uIFZpc2libGVUb0FkbWluVXNlcigpCiAgCXsKICAJCXJldHVybiAJJHRoaXMtPkNoZWNrUGVybWlzc2lvbignVXBsb2FkIGltYWdlcyBpbiBCV0ltYWdlcycpIHx8CiAgCQkJCSR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ0FkZCBzZXR0aW5ncyBCV0ltYWdlcycpOwogIAl9CiAgCQoJZnVuY3Rpb24gR2V0RGVwZW5kZW5jaWVzKCkKCXsKCSAgICByZXR1cm4gYXJyYXkoKTsKCX0KCQoJZnVuY3Rpb24gTWluaW11bUNNU1ZlcnNpb24oKQogIAl7CiAgICAJcmV0dXJuICIxLjguMiI7CiAgCX0KICAJCiAgCWZ1bmN0aW9uIFNldFBhcmFtZXRlcnMoKQogIAl7CQkKICAgCQkvLyR0aGlzLT5SZWdpc3Rlck1vZHVsZVBsdWdpbigpOwogIAl9CgoJCgogIAkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIAkvKiBNb2R1bGUgZnVuY3RpZXMgKi8KICAJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAJCiAgCS8vc2hvdyBhbGwgdGhlIGltYWdlIHNldHRpbmdzCglmdW5jdGlvbiBTZXR0aW5nc092ZXJ2aWV3KCRvYmplY3QsICRvcmRlciA9ICd0aXRsZScsICRieSA9ICdERVNDJyl7CgkJJGRiID0mICR0aGlzLT5HZXREYigpOwoJCSRnQ21zID0gY21zbXMoKTsKCQkkdmFycyA9IGFycmF5KCk7CgkKCQkkcXVlcnkgPSAnU0VMRUNUIGlkLCB0aXRsZSwgcGF0aCwgd2lkdGgsIGhlaWdodCBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfYndpbWFnZXNfc2V0dGluZ3MgCgkJCQkgIE9SREVSIEJZICcuIGFkZHNsYXNoZXMoJG9yZGVyKSAuJyAnLiAkYnkgLicgJyA7CgkJCgkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgJHZhcnMpOwoJCS8vZWNobyAkZGItPnNxbDsKCQlpZiAoJGRicmVzdWx0KXsKCQkJJGFycmF5ID0gYXJyYXkoKTsKCQkJd2hpbGUoJGZvdW5kID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKXsKCQkJICAJJGFycmF5W10gPSAkZm91bmQ7IAoJCQl9CgkJCQoJCQlyZXR1cm4gJGFycmF5OwoJCQkJCgkJfQoJCQoJCXJldHVybiBmYWxzZTsKCX0KCQoJLy8gTWFrZSB0b29sdGlwIGZvciBoZWxwCiAgCWZ1bmN0aW9uIE1ha2VUb29sVGlwKCR0ZWtzdCl7CgkJJGdDbXMgPSBjbXNtcygpOwoJCQoJCSRjbGFzcyA9ICJoZWxwIi5yYW5kKDEwMDAsOTk5OSk7CgkgIAkkaWNvbiA9ICc8YSB0aXRsZT0iJy4kdGVrc3QuJyIgY2xhc3M9IicuJGNsYXNzLiciPicuJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9pbmZvLmdpZicsICcnLCcnLCcnLCdzeXN0ZW1pY29uJykuJzwvYT4nOwoJICAJJGljb24gLj0gJzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCSAgCWpRdWVyeSgiYS4nLiRjbGFzcy4nIikudG9vbHRpcCgpCgkgIAk8L3NjcmlwdD4nOwoJICAJCgkgIAkkcmV0dXJuID0gJGljb247CgkgIAkKCSAgCXJldHVybiAkcmV0dXJuOwoJICB9CgoJIC8vZ2l2ZSB0aGUgbW9kdWxlIHBhdGggYmFjawoJIGZ1bmN0aW9uIE1vZHVsZVBhdGgoKXsKCSAJJHN0ciA9ICIvbW9kdWxlcy8iLiR0aGlzLT5HZXROYW1lKCkuIi8iOwoJCXJldHVybiAkc3RyOwoJIH0KCSAKCSAvLyBjb25maWcgcGF0aCB0byBpbWFnZW1hcAoJIGZ1bmN0aW9uIEltYWdlUGF0aCgpIHsKCSAJJHNlcnZlclBhdGggPSAkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddOwoJIAkkc3RyID0gJHNlcnZlclBhdGggLiAiL3VwbG9hZHMvaW1hZ2VzLyI7CgkgCXJldHVybiAkc3RyOwoJIH0KCSAKCS8vbG9hZCBqYXZhc2NyaXB0CglmdW5jdGlvbiBMb2FkSlMoKXsKCSAgCSRsaWJkaXIgPSAkdGhpcy0+TW9kdWxlUGF0aCgpIC4gImxpYiIgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gImpzIiAuIERJUkVDVE9SWV9TRVBBUkFUT1I7CgkgIAllY2hvICc8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSInLiRsaWJkaXIuJ2pxdWVyeS5taW4uanMiID48L3NjcmlwdD4nOwoJICAJZWNobyAnPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJy4kbGliZGlyLidqcXVlcnkudG9vbHRpcC5taW4uanMiID48L3NjcmlwdD4nOwoJICAJZWNobyAnPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iJy4kbGliZGlyLidqcXVlcnkudG9vbHRpcC5jc3MiID48L2xpbms+JzsKCSAgCS8vZWNobyAnPHNjcmlwdCBzcmM9IicuJGxpYmRpci4nanF1ZXJ5Lm1pbi5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4nOwoJICB9CgkgIAoJICBmdW5jdGlvbiBMb2FkSmNyb3AoKSB7CgkgIAkkbGliZGlyID0gJHRoaXMtPk1vZHVsZVBhdGgoKSAuICJsaWIiIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICJqcyIgLiBESVJFQ1RPUllfU0VQQVJBVE9SOwogCQllY2hvICc8c2NyaXB0IHNyYz0iJy4kbGliZGlyLidqcXVlcnkuSmNyb3AuanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+JzsKICAgCQllY2hvICc8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9IicuJGxpYmRpci4nanF1ZXJ5Lkpjcm9wLmNzcyIgdHlwZT0idGV4dC9jc3MiIC8+JzsKICAgCQllY2hvICc8c2NyaXB0IHNyYz0iJy4kbGliZGlyLidqcXVlcnkuSmNyb3AuYWN0aW9uLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwvc2NyaXB0Pic7CgkgIH0KCSAgCgkgIGZ1bmN0aW9uIExvYWRGYW5jeWJveCgpIHsgCQoJICAJJGxpYmRpciA9ICR0aGlzLT5Nb2R1bGVQYXRoKCkgLiAibGliIiAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAianMiIC4gRElSRUNUT1JZX1NFUEFSQVRPUjsKCSAgCWVjaG8gJzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IicuJGxpYmRpci4nanF1ZXJ5Lm1pbi5qcyIgPjwvc2NyaXB0Pic7CgkgIAllY2hvICc8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSInIC4kbGliZGlyLiAnZmFuY3lib3gvanF1ZXJ5LmZhbmN5Ym94LnBhY2suanMiPjwvc2NyaXB0Pic7CgkgIAllY2hvICc8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9IicgLiRsaWJkaXIuICdmYW5jeWJveC9qcXVlcnkuZmFuY3lib3guY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9InNjcmVlbiIgLz4nOwoJICB9CgkKCgkvL0RlbGV0ZSBhIGltYWdlIHNldHRpbmcKCWZ1bmN0aW9uIERlbGV0ZVNldHRpbmcoJGlkKXsKCQkkZGIgPSYgJHRoaXMtPkdldERiKCk7CgkJCgkJJHZhcnMgPSBhcnJheSgpOwoJCSR2YXJzW10gPSAkaWQ7CgkJJHF1ZXJ5ID0gJ0RFTEVURSBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfYndpbWFnZXNfc2V0dGluZ3MgV0hFUkUgaWQgPSA/JzsKCQkKCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCAkdmFycyk7Cgl9CgkKCS8vQWRkIGEgbmV3IGltYWdlIHNldHRpbmcKCWZ1bmN0aW9uIEFkZFNldHRpbmcoJHZhbHVlcyl7CgkJJGRiID0mICR0aGlzLT5HZXREYigpOwoJCSR2YXJzID0gYXJyYXkoKTsKCQkKCQkvLyBHZW5lcmF0ZSBJRCAmIEV4ZWN1dGUgcXVlcnkKICAgIAkkaW1hZ2VpZCA9ICRkYi0+R2VuSUQoY21zX2RiX3ByZWZpeCgpIC4gIm1vZHVsZV9id2ltYWdlc19zZXR0aW5nc19zZXEiKTsKICAgIAkvL2VjaG8gJGltYWdlaWQ7CiAgICAJJHZhcnNbXSA9ICRpbWFnZWlkOwogICAgCQoJCSRpdGVtcyA9IGFycmF5KCd0aXRsZScsICdwYXRoJywgJ3dpZHRoJywgJ2hlaWdodCcpOwoJCWZvcmVhY2goJGl0ZW1zIGFzICRpdGVtKXsKCQkJJHZhcnNbXSA9ICR2YWx1ZXNbJGl0ZW1dOwoJCX0gICAJCgkJJHF1ZXJ5ID0gJ0lOU0VSVCBJTlRPICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfYndpbWFnZXNfc2V0dGluZ3MgCgkJCQkgIChpZCwgdGl0bGUsIHBhdGgsIHdpZHRoLCBoZWlnaHQpCgkJCQkgIFZBTFVFUyAKCQkJCSAgKD8sID8sID8sID8sID8pJzsKCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCAkdmFycyk7CgkJLy9lY2hvICRkYi0+c3FsOwoJfQoJCgkvL2NoZWNrIGlmIHRoZSBmaWVsZHMgYXJlIGNvcnJlY3QKCWZ1bmN0aW9uIENoZWNrU2V0dGluZ3NGaWVsZHMoJHZhbHVlcyl7CgkJJGxhYmVscyA9IGFycmF5KCd0aXRsZScsICdwYXRoJywgJ3dpZHRoJywgJ2hlaWdodCcpOwoJCSRjaGVjayA9IGZhbHNlOwoJCSR2YWx1ZXNbJ2hlaWdodCddID0gcHJlZ19yZXBsYWNlKCIvW14wLTldKy8iLCAiIiwgJHZhbHVlc1snaGVpZ2h0J10pOwoJCSR2YWx1ZXNbJ3dpZHRoJ10gPSBwcmVnX3JlcGxhY2UoIi9bXjAtOV0rLyIsICIiLCAkdmFsdWVzWyd3aWR0aCddKTsKCQkKCQlpZigJJHZhbHVlc1sndGl0bGUnXSAmJiAkdmFsdWVzWydwYXRoJ10gJiYgJHZhbHVlc1snd2lkdGgnXSAKCQkJJiYgJHZhbHVlc1snaGVpZ2h0J10gJiYgaXNfbnVtZXJpYygkdmFsdWVzWyd3aWR0aCddKSAKCQkJJiYgaXNfbnVtZXJpYygkdmFsdWVzWydoZWlnaHQnXSkpeyAKCQkJCSRjaGVjayA9ICB0cnVlOwoJCQl9CQkKCQlyZXR1cm4gJGNoZWNrOwoJfQoJCglmdW5jdGlvbiBDaGVja01vZHVsZVNldHRpbmcoJGNvbmZpZyl7CgkJJGNoZWNrID0gZmFsc2U7CgkJaWYocHJlZ19tYXRjaCgiI15bYS16MC05L18tXSskI2kiLCAkY29uZmlnKSkgewoJCQkkY2hlY2sgPSB0cnVlOwoJCX0KCQlyZXR1cm4gJGNoZWNrOwoJfQoKCQoJLy9VcGRhdGUgYSBpbWFnZSBzZXR0aW5nCglmdW5jdGlvbiBVcGRhdGVTZXR0aW5nKCRpbWFnZV9pZCwgJHZhbHVlcyl7CgkJJGRiID0mICR0aGlzLT5HZXREYigpOwoKCQkkdmFycyA9IGFycmF5KCk7CgkJJGl0ZW1zID0gYXJyYXkoJ3RpdGxlJywgJ3BhdGgnLCAnd2lkdGgnLCAnaGVpZ2h0Jyk7CgkJZm9yZWFjaCgkaXRlbXMgYXMgJGl0ZW0pewoJCQkkdmFyc1tdID0gJHZhbHVlc1skaXRlbV07CgkJfQoJCQoJCSR2YXJzW10gPSAkaW1hZ2VfaWQ7CgkJCgkJJHF1ZXJ5ID0gJ1VQREFURSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX2J3aW1hZ2VzX3NldHRpbmdzIAoJCQkJICBTRVQgdGl0bGUgPSA/LCBwYXRoID0gPywgd2lkdGggPSA/LCBoZWlnaHQgPSA/CgkJCQkgIFdIRVJFIGlkID0gPyc7CgkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgJHZhcnMpOwkKCX0KCQoJLy9HZXQgaW1hZ2Ugc2V0dGluZyBpbmZvcm1hdGlvbgoJZnVuY3Rpb24gR2V0U2V0dGluZygkaW1hZ2VfaWQpewoJCSRkYiA9JiAkdGhpcy0+R2V0RGIoKTsKCQkKCQkkcXVlcnkgPSAnU0VMRUNUIGlkLCB0aXRsZSwgcGF0aCwgd2lkdGgsIGhlaWdodAoJCQkJICBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfYndpbWFnZXNfc2V0dGluZ3MgIAoJCQkJICBXSEVSRSBpZCA9ID8nIDsKCQkvL2VjaG8gJGZhcV9pZDsKCQkkdmFycyA9IGFycmF5KCk7CgkJJHZhcnNbXSA9ICRpbWFnZV9pZDsKCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCAkdmFycyk7CgkJLy9lY2hvICRkYi0+c3FsOwoJCWlmICgkZGJyZXN1bHQpewoJCQlyZXR1cm4gJGRicmVzdWx0LT5GZXRjaFJvdygpOwoJCX0KCQlyZXR1cm4gZmFsc2U7Cgl9CgoJZnVuY3Rpb24gR2V0U2V0dGluZ3NUaXRsZXMoKSB7CgkJJGRiID0mICR0aGlzLT5HZXREYigpOwoJCQoJCSRxdWVyeSA9ICdTRUxFQ1QgaWQsIHRpdGxlCgkJCQkgIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9id2ltYWdlc19zZXR0aW5ncyAgCgkJCQkgICcgOwoJCS8vZWNobyAkZmFxX2lkOwoJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnkpOwoJCS8vZWNobyAkZGItPnNxbDsKCQlpZiAoJGRicmVzdWx0KXsKCQkJJGFycmF5ID0gYXJyYXkoKTsKCQkJd2hpbGUoJGZvdW5kID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKXsKCQkJICAJJGFycmF5WyRmb3VuZFsndGl0bGUnXV0gPSAkZm91bmRbJ2lkJ107IAoJCQl9CgkJCQoJCQlyZXR1cm4gJGFycmF5OwoJCQkJCgkJfQoJCQoJCXJldHVybiBmYWxzZTsKCX0KCQkKCS8vIEZ1bmN0aW9uIHRvIGNoZWNrIHdoZXRoZXIgYSBmaWxlIGZpZWxkIGhhcyBiZWVuIGRlZmluZWQgaW4gdGhlIG5ld3MgbW9kdWxlCglmdW5jdGlvbiBHZXROZXdzRmllbGQoKXsKCQkkZGIgPSYgJHRoaXMtPkdldERiKCk7CgkJJHF1ZXJ5ID0gIlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9uZXdzX2ZpZWxkZGVmcyBXSEVSRSB0eXBlPT8gTElNSVQgMSI7CgkJJHZhcnMgPSBhcnJheSgnZmlsZScpOwoJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksJHZhcnMpOwoJCXJldHVybiAkZGJyZXN1bHQtPkZldGNoUm93KCk7Cgl9CgkKCS8vIEZ1bmN0aW9uIHRvIGdldCBuZXdzIGl0ZW1zCglmdW5jdGlvbiBHZXROZXdzSXRlbXMoKXsKCQkkZGIgPSYgJHRoaXMtPkdldERiKCk7CgkJJHF1ZXJ5ID0gIlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9uZXdzIE9SREVSIEJZIG5ld3NfZGF0ZSBERVNDIjsKCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5KTsKCQlpZiAoJGRicmVzdWx0KXsKCQkJJGFycmF5ID0gYXJyYXkoKTsKCQkJd2hpbGUoJGZvdW5kID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKXsKCQkJICAJJGFycmF5WyRmb3VuZFsnbmV3c190aXRsZSddXSA9ICRmb3VuZFsnbmV3c19pZCddOyAKCQkJfQoJCQlyZXR1cm4gJGFycmF5OwoJCX0KCQlyZXR1cm4gZmFsc2U7Cgl9CgkKCS8vIEZ1bmN0aW9uIHRvIGdldCBzZXR0aW5ncyBmb3IgbmV3cyBpbWFnZXMKCWZ1bmN0aW9uIEdldE5ld3NTZXR0aW5ncygpewoJCSRkYiA9JiAkdGhpcy0+R2V0RGIoKTsKCQkkcXVlcnkgPSAiU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2J3aW1hZ2VzX25ld3NzZXR0aW5ncyBMSU1JVCAxIjsKCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5KTsKCQlpZiAoJGRicmVzdWx0KXsJCQkKCQkJJGZvdW5kID0gJGRicmVzdWx0LT5GZXRjaFJvdygpOwkJCSAgCQoJCQlyZXR1cm4gJGZvdW5kOwoJCX0KCQlyZXR1cm4gZmFsc2U7Cgl9CgkKCS8vIEZ1bmN0aW9uIHRvIHVwZGF0ZSBuZXdzIHNldHRpbmdzCglmdW5jdGlvbiBVcGRhdGVOZXdzU2V0dGluZ3MoJHdpZHRoID0gNTAwLCRoZWlnaHQgPSAyMDApewoJCSRkYiA9JiAkdGhpcy0+R2V0RGIoKTsKCQkvLyBTdHJpcCBldmVyeXRoaW5nIGJ1dCBudW1iZXJzCgkJJHdpZHRoID0gcHJlZ19yZXBsYWNlKCIvW14wLTldKy8iLCAiIiwgJHdpZHRoKTsKCQkkaGVpZ2h0ID0gcHJlZ19yZXBsYWNlKCIvW14wLTldKy8iLCAiIiwgJGhlaWdodCk7CgkJLy8gVXBkYXRlIGRhdGFiYXNlCgkJLy8gRGVsZXRlIHNldHRpbmdzIGZpcnN0CgkJJHF1ZXJ5ID0gIkRFTEVURSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfYndpbWFnZXNfbmV3c3NldHRpbmdzIjsKCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5KTsKCQkkcXVlcnkgPSAiSU5TRVJUIElOVE8gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9id2ltYWdlc19uZXdzc2V0dGluZ3MgKHdpZHRoLGhlaWdodCkgVkFMVUVTKD8sPykiOwoJCSR2YXJzID0gYXJyYXkoJHdpZHRoLCRoZWlnaHQpOwoJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksJHZhcnMpOwkJCgkJcmV0dXJuICRkYnJlc3VsdDsKCX0KfQo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0JXSW1hZ2VzJzsKJGxhbmdbJ21vZGRlc2NyaXB0aW9uJ10gPSAnQldJbWFnZSBtb2R1bGUsIHdpdGggdGhpcyBtb2R1bGUgeW91IGNhbiBjcm9wL3NjYWxlIHRoZSBpbWFnZXMgdG8gdGhlIGdpdmVuIGRlbWVudGlvbic7CiRsYW5nWydjaGFuZ2Vsb2cnXSA9ICcnOwoKJGxhbmdbJ3ByZWZzX3RhYiddID0gJ1NldHRpbmdzJzsKJGxhbmdbJ3VwbG9hZF90YWInXSA9ICdVcGxvYWQnOwokbGFuZ1sndXBsb2FkbmV3c190YWInXSA9ICdVcGxvYWQgZm9yIG5ld3MnOwokbGFuZ1snbmV3c3ByZWZzX3RhYiddID0gJ1NldHRpbmdzIGZvciBuZXdzJzsKCi8vd2FybmluZyBmb3IgZGVsZXRpbmcsIGRlZmF1bHRzIGZvciBzZW5kLCBzdWJtaXQsIHNhdmUsIGNhbmNlbCBhbmQgY3JlYXRlCiRsYW5nWydpbWFnZV9kZWxldGUnXSA9ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgU2V0dGluZyBmb3IgdGhpcyBwYXRoPyc7CiRsYW5nWydzdWJtaXQnXSA9ICdTZW5kJzsKJGxhbmdbJ3NhdmUnXSA9ICdTYXZlJzsKJGxhbmdbJ2NhbmNlbCddID0gJ0NhbmNlbCc7CiRsYW5nWydjcmVhdGUnXSA9ICdTZW5kJzsKCi8vY29uZmlybSBkZWxldGVkCiRsYW5nWydpbWFnZV9kZWxldGVkJ10gPSAnVGhlIHNldHRpbmcgaGFzIGJlZW4gZGVsZXRlZCc7Ci8vIGNvbmZpcm0gY3JlYXRlZAokbGFuZ1snaW1hZ2VfY3JlYXRlZCddID0gJ1RoZSBzZXR0aW5nIGlzIGNyZWF0ZWQnOwovLyBlcnJvciBpZiBmaWVsZHMgYXJlIG5vdCBmaWxsZWQgaW4KJGxhbmdbJ2ltYWdlX2NvbnRlbnRfdXBkYXRlX2ZhaWx1cmUnXSA9ICdFcnJvciwgYXJlIGFsbCB0aGUgZmllbGRzIGZpbGxlZCBpbiBjb3JyZWN0bHk/JzsKCiRsYW5nWydjb25maWdfdXBkYXRlX2Vycm9yJ10gPSAnRXJyb3I6IENvbmZpZyBwYXRoIGlzIG5vdCBjb3JyZWN0IGZpbGxlZCBpbi4gUGxlYXNlIGNoZWNrIGlmIHRoZSBjb25maWdwYXRoIG9ubHkgY29udGFpbnMgbnVtYmVycyBhbmQgYWxwaGFiZXRpY3MgY2hhcmFjdGVycy4nOwoKLy9tYWtlIGEgbmV3IGltYWdlIHNldHRpbmcKJGxhbmcgWydpbWFnZV9zZXR0aW5nX25ldyddID0gJ01ha2UgbmV3IHNldHRpbmdzIGZvciBpbWFnZXMnOwovL3VwZGF0ZSBhIHNldHRpbmcKJGxhbmcgWydpbWFnZV90aXRsZV91cGRhdGUnXSA9ICdVcGRhdGUgdGhpcyBzZXR0aW5nOiAnOwovL3VwZGF0ZSBub3RpY2Ugd2hlbiB1cGRhdGluZyBhIHNldHRpbmcKJGxhbmcgWydzZXR0aW5nX2NvbnRlbnRfdXBkYXRlJ10gPSAnVGhlIHNldHRpbmdzIHdoZXJlIHVwZGF0ZWQnOwoKLy8gdG9vbHRpcHMgaGVscCBmb3IgYmFja2VuZAokbGFuZ1snaW5wdXRfdGl0bGVfaGVscCddID0gJ1RoZSBuYW1lIG9mIHRoZSBzZXR0aW5nJzsKJGxhbmdbJ2lucHV0X3BhdGhfaGVscCddID0gJ1R5cGUgaGVyZSBvbmx5IHRoZSBmb2xkZXIgbmFtZS4gPGJyIC8+RGVmYXVsdCBwYXRoIGlzOiAvdXBsb2Fkcy9pbWFnZXMvW2ZvbGRlciBuYW1lXS8uJzsKJGxhbmdbJ2lucHV0X3dpZHRoX2hlbHAnXSA9ICdUeXBlIGhlcmUgdGhlIHdpZHRoIG9mIHRoZSBpbWFnZSwgdGhlIGZvcm1hdCBpcyBpbiBQaXhlbHMuIEV4YW1wbGU6IDEwMCc7CiRsYW5nWydpbnB1dF9oZWlnaHRfaGVscCddID0gJ1R5cGUgaGVyZSB0aGUgaGVpZ2h0IG9mIHRoZSBpbWFnZSwgdGhlIGZvcm1hdCBpcyBpbiBQaXhlbHMuIEV4YW1wbGU6IDY1JzsKCiRsYW5nWydzYXZlX2ltYWdlJ10gPSAnU2F2ZSBJbWFnZSc7Ci8vcmVzaXplZCBjb21wbGV0ZWQKJGxhbmdbJ3Jlc2l6ZV9jb21wbGV0ZWQnXSA9ICdUaGUgaW1hZ2UgaXMgc3VjY2Vzc2Z1bGx5IGNyb3BwZWQgYW5kIHNhdmVkJzsKJGxhbmdbJ2Vycm9yX3VwbG9hZF9leHRlbnNpb24nXSA9ICdUaGUgZXh0ZW5zaW9uIHlvdSB0cnkgdG8gdXBsb2FkIGlzIG5vdCB2YWxpZC4gClRoZSBuZXh0IGV4dGVuc2lvbnMgYXJlIHZhbGlkIGV4dGVuc2lvbnM6IDxzdHJvbmc+LkpQRywgLkpQRUcsIC5QTkcsIC5HSUYnOwovL2Vycm9yIG5vIGltYWdlIHNlbGVjdGVkCiRsYW5nWydlcnJvcl9ub19maWxlX3VwbG9hZCddID0gJ1RoZXJlIGlzIG5vIGltYWdlIHNlbGVjdGVkLCBzZWxlY3QgYSBpbWFnZSBhbmQgdHJ5IGFnYWluJzsKLy9lcnJvciB0aGVyZSBhcmUgbm8gc2V0dGluZ3MKJGxhbmdbJ2Vycm9yX25vX3NldHRpbmdzX3VwbG9hZCddID0gJ0Vycm9yOiBUaGVyZSBhcmUgbm8gc2V0dGluZ3MsIHBsZWFzZSBhZGQgc2V0dGluZ3Mgb3IgY29udGFjdCB5b3VyIHdlYm1hc3Rlcic7Ci8vY2xvc2UgZXJyb3IsIGltYWdlIGlzIG5vdCBzYXZlZAokbGFuZ1snZXJyb3JfaW1hZ2Vfbm90X3NhdmVkJ10gPSAnTm90ZTogSW1hZ2UgaXMgbm90IHNhdmVkJzsKCiRsYW5nWydwcmVmZXJlbmNlc3VwZGF0ZWQnXSA9ICdUaGUgc2V0dGluZ3MgYXJlIHVwZGF0ZWQnOwovL2Vycm9yIG1hc3NhZ2UgaWYgbm8gY3JvcCBhcmVhIGlzIHNlbGVjdGVkCiRsYW5nWydlcnJvcl9jcm9wJ10gPSAnVGhlcmUgaXMgbm9nIHNlbGVjdGVkIGFyZWEgdG8gY3JvcCwgdXBsb2FkIHRoZSBpbWFnZSwgYW5kIHRyeSBhZ2Fpbi4nOwovL2Vycm9yIGltYWdlIHRvIHNtYWxsIAokbGFuZ1snZXJyb3JfdXBsb2FkX2ltYWdlX3NpemUnXSA9ICdFcnJvcjogVGhlIGltYWdlIHlvdSB0cnkgdG8gcmVzaXplLCBpcyB0byBzbWFsbC4gVXBsb2FkIGEgYmlnZ2VyIGltYWdlIGFuZCB0cnkgaXQgYWdhaW4uJzsKCi8vaGVhZGVycyBmb3Igb3ZlcnZpZXcgc2V0dGluZ3MKJGxhbmdbJ2ltYWdlX3RpdGxlJ10gPSAnTmFtZSc7CiRsYW5nWydpbWFnZV9wYXRoJ10gPSAnRm9sZGVyIG5hbWUnOwokbGFuZ1snaW1hZ2Vfd2lkdGgnXSA9ICdXaWR0aCc7CiRsYW5nWydpbWFnZV9oZWlnaHQnXSA9ICdIZWlnaHQnOwokbGFuZ1snaW1hZ2VfZWRpdCddID0gJ0VkaXQnOwoKJGxhbmdbJ3VwbG9hZF90ZXh0J10gPSAnVXBsb2FkIGltYWdlJzsKJGxhbmdbJ2Nob29zZV9zZXR0aW5nX3RleHQnXSA9ICdDaG9vc2UgVHlwZSc7CiRsYW5nWydjaG9vc2VfbmV3c190ZXh0J10gPSAnQ2hvb3NlIG5ld3MgYXJ0aWNsZSc7CiRsYW5nWyd3aWR0aF90ZXh0J10gPSAnV2lkdGgnOwokbGFuZ1snaGVpZ2h0X3RleHQnXSA9ICdIZWlnaHQnOwoKJGxhbmdbJ2ltYWdlX2FkZGltYWdlJ10gPSAnQWRkIHNldHRpbmcnOwoKJGxhbmdbJ2Vycm9yX21ha2VfZGlyX2ZhaWxlZCddID0gJ0Vycm9yOiBDb3VsZCBub3QgbWFrZSBtYXAnOwoKLy8gbW9kdWxlIHNldHRpbmdzIGxhbmcKJGxhbmdbJ21vZHVsZV9zZXR0aW5ncyddID0gJ01vZHVsZSBTZXR0aW5ncyc7CiRsYW5nWydzZXR0aW5nX0NvbmZpZ3BhdGgnXSA9ICdQYXRoIHRvIGltYWdlIGZvbGRlcic7CiRsYW5nWydoZWxwX0NvbmZpZ3BhdGgnXSA9ICdUaGUgY29uZmlnIHBhdGggdG8gdGhlIGltYWdlIGZvbGRlciAoZS5nLiB1cGxvYWRzL2ltYWdlcyknOwokbGFuZ1sndGFibWVzc2FnZV9zZXR0aW5nc19jaGFuZ2VkJ10gPSAnVGhlIGNvbmZpZ3BhdGggaXMgc3VjY2VzZnVsbHkgc2F2ZWQnOwokbGFuZ1snQ29uZmlncGF0aF9zYXZlZCddID0gJ1RoZSBjb25maWdwYXRoIGlzIHN1Y2Nlc2Z1bGx5IHNhdmVkJzsKCiRsYW5nWydoZWxwJ10gPSAnCjxoMz5CV0ltYWdlcyBtb2R1bGU8L2gzPgpCV0ltYWdlcyBhaW1zIHRvIHByb3ZpZGUgZWFzeSBtYW5hZ2VtZW50IG9mIGltYWdlIHNjYWxpbmcuIEl0IHByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIGNyZWF0ZSBhIHByZXNldCBvZiBpbWFnZSBzZXR0aW5ncywgaS5lLiBmb2xkZXIgdG8gdXBsb2FkIHRvIGFuZCBpbWFnZSBzaXplLCBhbmQgYXBwbHkgdGhvc2Ugc2V0dGluZ3MgdG8gYW4gdXBsb2FkZWQgaW1hZ2UuClVwbG9hZGluZyBhbmQgc2NhbGluZyBhbiBpbWFnZSBpcyBkb25lIGluIGp1c3QgdGhyZWUgc2ltcGxlIHN0ZXBzOjxici8+CjxvbD4gICAgCjxsaT5TZWxlY3QgYW4gaW1hZ2UgdG8gdXBsb2FkIGFuZCBhIHByZXNldCBvZiBpbWFnZSBzZXR0aW5ncyAocGF0aCB0byB1cGxvYWQgdG8gYW5kIGltYWdlIHNpemUpLjwvbGk+CjxsaT5Dcm9wIHRoZSB1cGxvYWRlZCBpbWFnZSB3aXRoIEpjcm9wLjwvbGk+CjxsaT5TYXZlIHRoZSBjcm9wcGVkIGltYWdlIHRvIHRoZSBmb2xkZXIgZGVmaW5lZCBpbiB0aGUgc2VsZWN0ZWQgcHJlc2V0LjwvbGk+Cjwvb2w+CkJXSW1hZ2VzIGNhbiBhbHNvIGJlIHVzZWQgdG8gYXR0YWNoIGltYWdlcyB0byBuZXdzIGFydGljbGVzIGZyb20gdGhlIE5ld3MgbW9kdWxlIGFuZCBzY2FsZSB0aGVtLiBUaGVzZSBmZWF0dXJlcyBhcmUgb25seSBhdmFpbGFibGUgaWYgYSBmaWxlIGZpZWxkIGhhcyBiZWVuIGRlZmluZWQgaW4gdGhlIE5ld3MgbW9kdWxlLgo8aDM+SG93IHRvIHVzZSBCV0ltYWdlczwvaDM+CjxwPlRoaXMgbW9kdWxlIGNhbiBub3QgYmUgaW5jbHVkZWQgZm9yIHRoZSBmcm9udGVuZCBvciBpbiBjb250ZW50IGJsb2Nrcy4gVGhpcyBtb2R1bGUgb25seSBoZWxwcyB5b3Ugc2NhbGUgZG93biB0aGUgaW1hZ2VzIGluIGNvcnJlY3Qgc2l6ZSwgYW5kIHNhdmUgdGhlbTwvcD4KJzsKCi8qdG90IGhpZXIgZ2VkZWZpbmVlcmQqLwoKCj8+]]></data>
	</file>
	<file>
	  <filename>/lang/ext/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/ext/nl_NL.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0JXSW1hZ2VzJzsKJGxhbmdbJ21vZGRlc2NyaXB0aW9uJ10gPSAnQldJbWFnZXMgd29yZCBnZWJydWlrdCB2b29yIGhldCBqdWlzdCBzY2hhbGVuIHZhbiBmb3RvIGluIHZlcmhvdWRpbmcnOwokbGFuZ1snY2hhbmdlbG9nJ10gPSAnJzsKCi8vbWFrZSBhIG5ldyBpbWFnZSBzZXR0aW5nCiRsYW5nIFsnaW1hZ2Vfc2V0dGluZ19uZXcnXSA9ICdNYWFrIG5pZXV3ZSBpbnN0ZWxsaW5nZW4gdm9vciBhZmJlZWxkaW5nZW4nOwovL3VwZGF0ZSBhIHNldHRpbmcKJGxhbmcgWydpbWFnZV90aXRsZV91cGRhdGUnXSA9ICdCZXdlcmsgZGV6ZSBpbnN0ZWxsaW5nOiAnOwovL3VwZGF0ZSBub3RpY2Ugd2hlbiB1cGRhdGluZyBhIHNldHRpbmcKJGxhbmcgWydzZXR0aW5nX2NvbnRlbnRfdXBkYXRlJ10gPSAnRGUgaW5zdGVsbGluZ2VuIHppam4gYmlqZ2V3ZXJrdCc7Ci8vd2FybmluZyBiZWZvcmUgZGVsZXRpbmcKJGxhbmdbJ2ltYWdlX2RlbGV0ZSddID0gJ1dlZXQgdSB6ZWtlciBkYXQgdSBkZXplIGluc3RlbGxpbmcgd2lsdCB2ZXJ3aWpkZXJlbj8nOwovL2NvbmZpcm0gZGVsZXRlZAokbGFuZ1snaW1hZ2VfZGVsZXRlZCddID0gJ0RlIGluc3RlbGxpbmcgaXMgc3VjY2Vzdm9sIHZlcndpamRlcmQnOwovLyBjb25maXJtIGNyZWF0ZWQKJGxhbmdbJ2ltYWdlX2NyZWF0ZWQnXSA9ICdEZSBpbnN0ZWxsaW5nIGlzIHN1Y2Nlc3ZvbCBhYW5nZW1hYWt0JzsKLy8gZXJyb3IgaWYgZmllbGRzIGFyZSBub3QgZmlsbGVkIGluCiRsYW5nWydpbWFnZV9jb250ZW50X3VwZGF0ZV9mYWlsdXJlJ10gPSAnWmlqbiBhbGxlIHZlbGRlbiBjb3JyZWN0IGluZ2V2dWxkPyc7Ci8vIHRvb2x0aXBzIGZvciBiYWNrZW5kCiRsYW5nWydpbnB1dF90aXRsZV9oZWxwJ10gPSAnRGUgbmFhbSB2YW4gZGV6ZSBpbnN0ZWxsaW5nJzsKJGxhbmdbJ2lucHV0X3BhdGhfaGVscCddID0gJ1Z1bCBoaWVyIGFsbGVlbiBkZSBtYXBuYWFtIGluLCB3YWFyIGRlIGltYWdlIGtvbXQgdGUgc3RhYW4uIDxici8+U3RhbmRhYXJkIHBhZCBpczogL3VwbG9hZHMvaW1hZ2VzL1ttYXBuYWFtXS8nOwokbGFuZ1snaW5wdXRfd2lkdGhfaGVscCddID0gJ1Z1bCBoaWVyIGRlIGJyZWVkdGUgdmFuIGRlIGFmYmVlbGRpbmcgaW4sIGRpdCBmb3JtYWF0IGlzIGluIHBpeGVscy4gQmlqdm9vcmJlZWxkOiAxMDAnOwokbGFuZ1snaW5wdXRfaGVpZ2h0X2hlbHAnXSA9ICdWdWwgaGllciBkZSBob29ndGUgdmFuIGRlIGFmYmVlbGRpbmcgaW4sIGRpdCBmb3JtYWF0IGlzIGluIHBpeGVscy4gQmlqdm9vcmJlZWxkOiA2NSc7CiRsYW5nWydjb25maWdfdXBkYXRlX2Vycm9yJ10gPSAnRm91dG1lbGRpbmc6IFBhZCBpcyBuaWV0IGNvcnJlY3QgaW5nZXZ1bGQuIENvbnRyb2xlZXIgb2YgaGV0IGNvbmZpZyBwYWQgYWxsZWVuIGJlc3RhYXQgdWl0IGNpamZlcnMgZW4gYWxmYWJldGlzY2hlIHRla2Vucy4nOwokbGFuZ1snZ2V1cGxvYWQnXSA9ICdEZSBhZmJlZWxkaW5nIGlzIGdldXBsb2FkJzsKJGxhbmdbJ3NldHRpbmdfY29udGVudF91cGRhdGVfZmFpbHVyZSddID0gJ0ZvdXRtZWxkaW5nOiBaaWpuIGFsbGUgdmVsZGVuIHdlbCBjb3JyZWN0IGluZ2V2dWxkPyc7CiRsYW5nWydzYXZlX2ltYWdlJ10gPSAnU2xhIGFmYmVlbGRpbmcgb3AnOwovL2Vycm9yIG1hc3NhZ2UgaWYgbm8gY3JvcCBhcmVhIGlzIHNlbGVjdGVkIGFuZCBpbWFnZSBpcyBkZWxldGVkCiRsYW5nWydlcnJvcl9jcm9wX2RlbGV0ZWQnXSA9ICdGb3V0bWVsZGluZzogRXIgaXMgZ2VlbiBzZWxlY3RpZSBnZW1hYWt0IHZhbiBkZSBhZmJlZWxkaW5nLCB1cGxvYWQgZGUgYWZiZWVsZGluZyBlbiBwcm9iZWVyIGhldCBvcG5pZXV3Lic7Ci8vZXJyb3IgbWFzc2FnZSBpZiBubyBjcm9wIGFuZCBpbWFnZSBpcyBub3QgZGVsZXRlZAokbGFuZ1snZXJyb3JfY3JvcF9ub3RfZGVsZXRlZCddID0gJ0ZvdXRtZWxkaW5nOiBFciBpcyBnZWVuIHNlbGVjdGllIGdlbWFha3QgdmFuIGRlIGFmYmVlbGRpbmcsIHVwbG9hZCBkZSBhZmJlZWxkaW5nIGVuIHByb2JlZXIgaGV0IG9wbmlldXcuIDxiciAvPkVycm9yOiBhZmJlZWxkaW5nIGlzIG5pZXQgdmVyd2lqZGVyZCEnOwovL3Jlc2l6ZWQgY29tcGxldGVkCiRsYW5nWydyZXNpemVfY29tcGxldGVkJ10gPSAnRGUgYWZiZWVsZGluZyBpcyBzdWNjZXN2b2wgYmlqZ2VzbmVkZW4gZW4gb3BnZXNsYWdlbic7Ci8vdXBsb2FkIGVycm9yCiRsYW5nWydlcnJvcl91cGxvYWRfZXh0ZW5zaW9uJ10gPSAnRGUgZXh0ZW5zaWUgZGllIHUgcHJvYmVlcmQgdGUgdXBsb2FkIGlzIG5pZXQgZ2VsZGlnLiAKRGUgdm9sZ2VuZGUgZXh0ZW5zaWVzIHppam4gZ2VsZGlnOiA8c3Ryb25nPi5KUEcsIC5KUEVHLCAuUE5HLCAuR0lGPC9zdHJvbmc+JzsKLy9lcnJvciBubyBmaWxlIHNlbGVjdGVkCiRsYW5nWydlcnJvcl9ub19maWxlX3VwbG9hZCddID0gJ0VyIGlzIGdlZW4gYWZiZWVsZGluZyBnZXNlbGVjdGVlcmQsIHNlbGVjdGVlciB1dyBhZmJlZWxkaW5nIGVuIHByb2JlZXIgaGV0IG9wbmlldXcnOwovL2Vycm9yIHRoZXJlIGFyZSBubyBzZXR0aW5ncwokbGFuZ1snZXJyb3Jfbm9fc2V0dGluZ3NfdXBsb2FkJ10gPSAnRXIgemlqbiBnZWVuIGluc3RlbGxpbmdlbiBhYW5nZW1hYWt0LiBNYWFrIGluc3RlbGxpbmdlbiBhYW4gZW4gbmVlbSBhbmRlcnMgY29udGFjdCBvcCBtZXQgZGUgd2Vic2l0ZSBiZWhlZXJkZXInOwovL2Nsb3NlIGVycm9yLCBpbWFnZSBpcyBub3Qgc2F2ZWQKJGxhbmdbJ2Vycm9yX2ltYWdlX25vdF9zYXZlZCddID0gJ0xldCBvcDogQWZiZWVsZGluZyBpcyBuaWV0IG9wZ2VzbGFnZW4hJzsKLy9lcnJvciBpbWFnZSB0byBzbWFsbCAKJGxhbmdbJ2Vycm9yX3VwbG9hZF9pbWFnZV9zaXplJ10gPSAnRm91dG1lbGRpbmc6IERlIGFmYmVlbGRpbmcgZGllIHUgcHJvYmVlcmQgdGUgc2NoYWxlbiwgaXMgdGUga2xlaW4uIFVwbG9hZCBlZW4gYWZiZWVsZGluZyBkaWUgZ3JvdGVyIGlzLic7CgokbGFuZ1sndXBsb2FkX3RhYiddID0gJ1VwbG9hZCc7CiRsYW5nWyd1cGxvYWRuZXdzX3RhYiddID0gJ1VwbG9hZCB2b29yIG5pZXV3cyc7CiRsYW5nWydwcmVmc190YWInXSA9ICdJbnN0ZWxsaW5nZW4nOwokbGFuZ1snbmV3c3ByZWZzX3RhYiddID0gJ0luc3RlbGxpbmdlbiB2b29yIG5pZXV3cyc7CgovL2dlbmVyYWwKJGxhbmdbJ3N1Ym1pdCddID0gJ1ZlcnN0dXJlbic7CiRsYW5nWydzYXZlJ10gPSAnT3BzbGFhbic7CiRsYW5nWydjYW5jZWwnXSA9ICdBbm51bGVyZW4nOwokbGFuZ1snY3JlYXRlJ10gPSAnVmVyc3R1cmVuJzsKJGxhbmdbJ3ByZWZlcmVuY2VzdXBkYXRlZCddID0gJ0RlIGluc3RlbGxpbmdlbiB6aWpuIGJpamdld2Vya3QnOwokbGFuZ1sndXBsb2FkX3RleHQnXSA9ICdVcGxvYWQgYWZiZWVsZGluZyc7CiRsYW5nWydjaG9vc2Vfc2V0dGluZ190ZXh0J10gPSAnS2llcyB0eXBlJzsKJGxhbmdbJ2Nob29zZV9uZXdzX3RleHQnXSA9ICdLaWVzIG5pZXV3cyBhcnRpa2VsJzsKJGxhbmdbJ3dpZHRoX3RleHQnXSA9ICdCcmVlZHRlJzsKJGxhbmdbJ2hlaWdodF90ZXh0J10gPSAnSG9vZ3RlJzsKCi8vaGVhZGVycyBmb3Igb3ZlcnZpZXcgc2V0dGluZ3MKJGxhbmdbJ2ltYWdlX3RpdGxlJ10gPSAnTmFhbSc7CiRsYW5nWydpbWFnZV9wYXRoJ10gPSAnTWFwbmFhbSc7CiRsYW5nWydpbWFnZV93aWR0aCddID0gJ0JyZWVkdGUnOwokbGFuZ1snaW1hZ2VfaGVpZ2h0J10gPSAnSG9vZ3RlJzsKJGxhbmdbJ2ltYWdlX2VkaXQnXSA9ICdCZXdlcmtlbic7CgovLyBtb2R1bGUgc2V0dGluZ3MgbGFuZwokbGFuZ1snbW9kdWxlX3NldHRpbmdzJ10gPSAnTW9kdWxlIEluc3RlbGxpbmdlbic7CiRsYW5nWydzZXR0aW5nX0NvbmZpZ3BhdGgnXSA9ICdQYWQgbmFhciBhZmJlZWxkaW5ncyBsb2NhdGllJzsKJGxhbmdbJ2hlbHBfQ29uZmlncGF0aCddID0gJ0hldCByZWxhdGlldmUgcGFkIG5hYXIgZGUgYWZiZWVsZGluZ3Nsb2NhdGllKGUuZy4gdXBsb2Fkcy9pbWFnZXMpJzsKJGxhbmdbJ3RhYm1lc3NhZ2Vfc2V0dGluZ3NfY2hhbmdlZCddID0gJ01vZHVsZSBpbnN0ZWxsaW5nIHppam4gc3VjY2Vzdm9sIG9wZ2VzbGFnZW4nOwokbGFuZ1snQ29uZmlncGF0aF9zYXZlZCddID0gJ01vZHVsZSBpbnN0ZWxsaW5nIHppam4gc3VjY2Vzdm9sIG9wZ2VzbGFnZW4nOwoKJGxhbmdbJ2ltYWdlX2FkZGltYWdlJ10gPSAnVm9lZyBpbnN0ZWxsaW5nIHRvZSc7CiRsYW5nWydlcnJvcl9tYWtlX2Rpcl9mYWlsZWQnXSA9ICdGb3V0bWVsZGluZzogS2FuIG1hcCBuaWV0IGFhbm1ha2VuJzsKCiRsYW5nWydoZWxwJ10gPSAnCjxoMz5CV0ltYWdlcyBtb2R1bGU8L2gzPgpCV0ltYWdlcyBhaW1zIHRvIHByb3ZpZGUgZWFzeSBtYW5hZ2VtZW50IG9mIGltYWdlIHNjYWxpbmcuIEl0IHByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIGNyZWF0ZSBhIHByZXNldCBvZiBpbWFnZSBzZXR0aW5ncywgaS5lLiBmb2xkZXIgdG8gdXBsb2FkIHRvIGFuZCBpbWFnZSBzaXplLCBhbmQgYXBwbHkgdGhvc2Ugc2V0dGluZ3MgdG8gYW4gdXBsb2FkZWQgaW1hZ2UuClVwbG9hZGluZyBhbmQgc2NhbGluZyBhbiBpbWFnZSBpcyBkb25lIGluIGp1c3QgdGhyZWUgc2ltcGxlIHN0ZXBzOjxici8+CjxvbD4gICAgCjxsaT5TZWxlY3QgYW4gaW1hZ2UgdG8gdXBsb2FkIGFuZCBhIHByZXNldCBvZiBpbWFnZSBzZXR0aW5ncyAocGF0aCB0byB1cGxvYWQgdG8gYW5kIGltYWdlIHNpemUpLjwvbGk+CjxsaT5Dcm9wIHRoZSB1cGxvYWRlZCBpbWFnZSB3aXRoIEpjcm9wLjwvbGk+CjxsaT5TYXZlIHRoZSBjcm9wcGVkIGltYWdlIHRvIHRoZSBmb2xkZXIgZGVmaW5lZCBpbiB0aGUgc2VsZWN0ZWQgcHJlc2V0LjwvbGk+Cjwvb2w+CkJXSW1hZ2VzIGNhbiBhbHNvIGJlIHVzZWQgdG8gYXR0YWNoIGltYWdlcyB0byBuZXdzIGFydGljbGVzIGZyb20gdGhlIE5ld3MgbW9kdWxlIGFuZCBzY2FsZSB0aGVtLiBUaGVzZSBmZWF0dXJlcyBhcmUgb25seSBhdmFpbGFibGUgaWYgYSBmaWxlIGZpZWxkIGhhcyBiZWVuIGRlZmluZWQgaW4gdGhlIE5ld3MgbW9kdWxlLgoKPGgzPkhvZSBCV0ltYWdlcyB0ZSBnZWJydWlrZW4/PC9oMz4KPHA+RGV6ZSBtb2R1bGUgaXMgZ2VlbiBmcm9udGVuZCBtb2R1bGUuIERlemUgbW9kdWxlIGthbiBhbGxlZW4gZ2VicnVpa3Qgd29yZGVuIG9tIGltYWdlcyB0ZSBzY2hhbGVuIGVuIG9wIHRlIHNsYWFuLCBpbiBkZSBiYWNrZW5kPC9wPgonOwoKCi8qdG90IGhpZXIgZ2VkZWZpbmVlcmQqLwoKCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/js/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/js/fancybox/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/js/fancybox/blank.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==]]></data>
	</file>
	<file>
	  <filename>/lib/js/fancybox/fancybox_loading.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhGAAYAPcIADo6OkVFRTQ0NMnJydPT04yMjC8vL7y8vB0dHXl5eX5+fu7u7lJSUqGhoQ0NDSsrK62treXl5ZSUlMLCwhgYGKenp7S0tLu7u/X19fr6+kNDQ5ycnBISEgQEBFtbW7GxsRcXFzAwMCMjI2ZmZoaGhktLS83NzQoKClxcXE1NTc7OzhQUFGVlZQUFBVRUVG9vbxkZGZWVlebm5tzc3NTU1OLi4jExMVlZWUBAQJ6eniYmJqKiopqamoeHh6+vr8PDwwkJCT8/P5OTkw8PDykpKRAQECEhIYmJiYiIiCQkJF1dXS0tLSAgILCwsAgICBERETMzM4WFhb29vSoqKgsLC6Ojo7+/v5mZmfT09Pn5+Tg4OLa2trq6utDQ0CIiIp2dnaurqwwMDD09PUdHR66urkRERExMTNXV1eHh4ZaWlhMTE9vb28/Pzzw8PKCgoBYWFqysrL6+vlpaWm5ubp+fn0ZGRsDAwJubmz4+Pg4ODjk5OZCQkAYGBicnJywsLDIyMnh4eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/i1NYWRlIGJ5IEtyYXNpbWlyYSBOZWpjaGV2YSAod3d3LmxvYWRpbmZvLm5ldCkAIfkEBQoACAAsAAAAABgAGAAAB/+ACIKDhAg2NoWJiUAtgkMHB0OKkys8L44qKpIIMEaNkwgrBzQGCEOZkkA2RJ+gLjJCLaeanAJFlCuCQDs1AUCoRQI6gy2tLQU+KUAIADMxQDc3LUY2ki1FREbELD8EMQJAKcODQLdAOgI2MIVEPSoDAZNDh0bLiS04R9qKQEa3hUACMrIHSlAxQUaE8FiYI0jBIgaISCTSL8aOHBhxPCQSkYiOVEOAhGw1qdHBREM8Ter3bxE1Gy0LFaFHUBAMG8IkhSR0zRQ6dYSMECnSSJW2IreobVqRjWcrdLc4yrKxD8HJRDO1tZCI0FZBq0RsLNvKytQqkveMrBMUcVAntF8IdRD5+lXk10AAIfkEBQoABgAsAAAAABgAGAAAB/+ABoKDhC1LD4SJioItToJOTRAOjC2LiQUsgg5SUpMGCRUUloMQE4ibnQZQESqiowYpBFEtqA4tDRlKlk9PjxIqGk6cTikYTY6LChvBBgIDSE4MDE4NCxqCTw9MhEpNUlFLTgFJhA8MtElQUBSVg0kKFxYAu+pMyIoACgiWTkyehQbatXs1qJKTJA8SLuk16smhhEmcOEjy8AHDXQ8PTWpRaSBBj4mebLPUgsnFRE4QqDtJ6AkUAfYSUVCXZJItQhINTBQAZQUhJgs1QdnGywATKBtXaCOZRECvB0toCSBH0MATmIISCmIiwCdBqMi06lyypCoTVy0StqMwsuogsW4GFzm5ZykQACH5BAUKAAIALAAAAAAYABgAAAf/gAKCg4QCU0mFiYkdHYJUDQ1Ujo2KgxwKHoJhZGRhgi9XIJWCHF9kiJtgngY0XKKjAmNWCQJUZGCSMTIulYyOSFxatrgBNZGCMDCEXlMcgjZbCVRjY1QxMwACYR5dVZLINjZJYR1iCIRT1WIfWTIJlI4IWjaeigwLWA02lWFe34lTqqSAN4gSQUUGB1GZwpChs1EcDEyROIXKQoYSH1bi0FDiP1iLICL4SIgKgnqJwsijtzGcv0IwDIgjF+YjFU9hkmgx8EqQFwMPw9jwIoCDMwQG6nEkWpCgFk8Mi2oh5EsRBy1EO0QV4EWLxl4TvzFsREXiwUIdvCgToHXKIBheC87CSuIWJCyLIAMBACH5BAUKAAAALAIAAAAWABcAAAfegACCg4MiIoSIiYgSBYqKHSIwgg45V1SCIwUcjh1TIZdUlZdTExBqjgBqAoeUVx0dJARmqII6IQ6hljhsEoSnAIeDDiEiHTg4HUgDAgBULhOugiEhOg4dHB2EImVUAlURZy+XgiICt45ma2hpD4kOwYo6aWWJ2bSCVFQOHA4OAA8A29G6waYgGysPpkwRONAgmwkhBNmjpa9fP0IOJKGC4Q8RlXICOiqaBi9VCAHVrrkD4ECHOY06HvxyIEAjuXOpppQcZGsTIWr3AKxKJCLiPYaIkMajtZOWDkQTBwUCACH5BAUKAAEALAIAAAAWABcAAAfRgAGCg4NUVISIiYhTSYMdiogUg1NTjwFKCpCJHZSDPjwcmqGTlR0KF2WaAR1JIRwdD1NUbRc9gysrmggdHK8KFg+CZhZIghQhAo0BDoeDCABUITEEPyyWgiGqZQMqSFOqiiI9beCqDufMAZSdqgw/Fxc/FutTwe3w8MDlkM2DIteIHuwwA3BQCFeQGCzAsiOEJUkBlK0i1MFBhzIWsshI8EjEg1EBQiAQlEvQISpKVFToJ4gVIksiBlGASKikIHu3wIVwsC+RCJqRegpKkqQgokAAIfkEBQoAAAAsAAAAABgAGAAAB8uAAIKDhABAQIWJiokdi46FS4MUIo2Pgg6CS1ONQJqVlooiAhyghVOCHCFJg2+kjyKEIkuYQHV0Cpafhg4dIUhxEHKFiJZBW1wJq47EiQgJWo66ix2HDoeGU9lTkY8pEN9wblNA2pqWJd/f4oLSy4dA1omui1MxdYvMjikzaDHcpYKmuACipUqEM3MgFYIFgEMHNwsCGHJhIkY7QpgGpcAAgdibN4tADjplyE0GYaUQddgmKEQEExQAZtokKEGVmAA7JCFpKF9Kn4kCAQAh+QQFCgABACwAAAAAGAAYAAAH0YABgoOEAVRUhYmKhA+LjoIwgw+NkI+SIYgBk4JUBpSPK4yfloubgx2CHaiMlgaDHAYihJGEHIWZDkkCIaGEmY8cISEiv4rFhB0iDqSWVA7OiFSTk66PZXfYbkLE06aOAHc8PHfbzL6HVB3HAQ7EiyJIAIuZBsuKZQMEPaMBtIPPhJKkoBIiBgE7LAqNitXhxg0qMWbIo5LCRwFSDlSooFKmxg57K3olEplRhYMOQmS4IPUgxLKSywzQOCDSES0HBEwKesHDH0Y7duypMzdImKVAACH5BAUKACkALAAAAAAYABgAAAatwJRwSEydTsWkcslUUpbPJtGRREqFnKs26RBsmaEmxdDsZIUhA6hoTZ3LSw6irXwPO18l/coxPPwPR3kcfw+Ge1d4TRwiiEIICUyORQAWFwpJIAZhQgwPRCIBHQYkBxAoRWRCGgsNJwwMJyQDXicBG5h6HxglJwcHJxoEElYcdkQeGQ0dDr8nHSQEJVIUJhGcEwdCDxMQa0wUFZFCv0MjBcdJHVYnHx9til9/UkEAIfkEBQoAAAAsAAAAABgAGAAAB9mAAIKDhABUVIWJiouMiV6NSY2EiIVUD5KEj4WamACcgxwhjZ9DIZ9eIUODD58AogBDHUOUg7FDSQIhFJWtiUMPAl60hUPCi1S9nYUdgsyGD9DQmNHQVM7KgtFJqsuYHdeEHSk7l4odXtzLITtYCwyLoabDHQkyWR94VCWRgwh4HVRw6RpEpUIXD4i0zIihLwW9La84sCJEYZehHTUCUAEDh4qWA0gofVvEQEYMgBytJbASQNKbAzQuDQEDBlESOF84NHpz5YWgmWC4eVDQiRKVHTuGYRvEj1EgACH5BAUKAAAALAAAAAAYABgAAAfjgACCg4QAQECFiYqDLUkPi4stIoktgyKVkII2eQCYgkA2D56Zk4wAIgJqkZ5JNhyeeTaELaOlgrGTqqcGnJaFBrcAeaMtnHmtsoVAIjbJirE2IoiKHDDTlLaEedvbmYWYNnYq4yo33gYP6Q9ABlbk5d6D6MbcedeQo7MBaUmRIr2JDKRBs8YMpGbSZr04E6GKHiABsgHhIEzTLB52XCASMABJCxw4WsDYRCibLkNpVITkkQNIrH6CaC0yc8YjEJacUFHMpAaCnU8sEbETxbPACKA5eqm55A0IJiB70tyLVyjbokAAIfkEBQoAAQAsAAAAABgAGAAAB/eAAYKDhAFUVIWJioRERIuLfIWNkYOUkEQhiHyNglR+RJaPhH5+lCEcixQUgyIhYZtEVGEhfZR8lnwVXR5hAbOCqIKug46VCTJZH2J8YYiVqGF9AiErhSE7WAsMi7MCIs6FfGY7xYmhhGHpzeCPfFSUfh8XcfTbop9En54f9PWiAY0C9lK37l+AW+cOikEiYhEVBL0UEemhYkCZRyFCfCPEh8WPLjEEUAGAgJAsX9JCcCzgwwwiPxYS8OGACsGwACvKCVpRzVCPOAAAOuJAq1JCQWXiyOTz6egiDjx8FJtkqKkoDgo8CII1aIUIp0YH9dFpMNGhf4EAACH5BAUKAAAALAAAAAAYABgAAAj/AAEIHEgQwIkTBRMm5INQYJ8+CiMCoFAhwcApUwgykSiQgokIfwRi5GNwSUaOAFBkqIJwyhKBTP4UifjmjcAwTTCk4INRYEiJV+K4QBhkQRU+RWbGHFhkysaBc85EqKLlBAOIA0/MPNHnzx8KBZekQTOjRMQiXpmEiRggDdaEJ9QqPEgXpUA+eAFMqQIBDhwIZiUWMYmxD9cqfiEA5jgYI0aEdOvalagFEIKIcWcq7JOAy5YgEcP8EcCk4UA5EOIg+YPUNACkA70WVEAnAOQ/TJAq/QngjVOCRWw6/LPWJZ8wAiYDQNsHr0uYAjRL5Lmk4fOSJ6czAStyCsmJT5XrCH0rnuBBlAEBADs=]]></data>
	</file>
	<file>
	  <filename>/lib/js/fancybox/fancybox_overlay.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpCMEM4NDgzQjlDRTNFMTExODE4NUVDOTdFQ0I0RDgxRSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpGREU5OEVCQzAzMjYxMUUyOTg5OURDMDlDRTJDMTc0RSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpGREU5OEVCQjAzMjYxMUUyOTg5OURDMDlDRTJDMTc0RSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkIxQzg0ODNCOUNFM0UxMTE4MTg1RUM5N0VDQjREODFFIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkIwQzg0ODNCOUNFM0UxMTE4MTg1RUM5N0VDQjREODFFIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+s3YRAQAAABtJREFUeNpiFODh2cBABGBiIBKMKqSOQoAAAwBokQDs5F/8FAAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/lib/js/fancybox/fancybox_sprite.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAACwAAACYCAMAAACoAftQAAAAvVBMVEUAAAAAAAAAAAAODg4AAAAAAAAAAADNzc0BAQHZ2dkDAwMHBwcAAADf398CAgI/Pz8BAQEAAACCgoIcHBzl5eUAAAC/v7/x8fEGBgZnZ2cAAADs7OwGBgb4+Pg/Pz/Jycmenp5nZ2f39/eDg4MAAADQ0ND4+Piurq7a2tr8/Pzs7OwAAAD5+fn9/f3e3t4AAAD///9OTk7BwcE1NTWsrKyNjY2cnJx6enpdXV1oaGgsLCy6uroiIiLOzs5BQUFt3PCNAAAAL3RSTlMAAQMIDRIZHSMnLTpESFNVXWlpbG15en+HiZCWoaGssrO2vsDFydPU3uL4+fr9/Ywv6xsAAAQVSURBVHhe7JZbc6JMGIQXAUOQEMi3uMYkrmopZgqs5ujZ//+zvpdNzMsMlli1N3uRvtCbpzo9I+nmhyqN9OO6GNQ6Ha1SG0mcrhskXe90rvKE6kbX7r9MF4vp2887nfBrqPW0xJemD4w32e7jHIj2602SbNZ7Qfgd0zJLtgKi2B0+tSsE3h8u0RX7HGGfHWrK9oiIbrK69SiQHxTliO5VWtP0rrNEemhoj6muaYqx2XuGyJrwbgUKohhb3hIFM6wCC7Zm4+M5Zs5fpKNiTYndEOUHDFRYCeADLvGiy7DtL7E5/12gJPacalPlqEc2eoFAdmCa2UOGyOhoUuQgwo7PxCwJMGXYGcQMlyCVX3DchCkGs3V6h0iFgyUSZsuS6QQLGaYDhueUHxhf3RpzOqB8dRMcz84lf5FS9A1Ngi2PQm8PF7RBZOnEyqFnSC/BKX6bHQmucpB13mRzCJtTsPUowlpl14if2JifUXcwgeqdA2OLn1C+PdsbzCKkW0a3KeKxbbAxF4FJ9EgAaXGqyFORAuLZNrkMZNoNKnNS9PE5dpltFofjB4PJXIAk5rP/HMu4Ukmm7XjEkwLfc2yT66tJk7lp2T2H1LMtk2wVVsWpcE0SlW4DbeLE/xG3eRvfQv7Fptw4KvpDNRKLt1/3rZty/xbjrPef1+5D018ITYttkiTrfAUsrmzK3RTIT/woHxH3DaZl9h2rRH2aX0ydaYb1BVK1zNdA32RvNn7DkVmmoyeVJvYBMcdl5Vg2/lW0zpSbUNIKT12KLV8wVjsmNvGW63feU3qj86veGQmAA1e5qzbStNZdmVTlRzzbSjG+4+t4u1iqjxxjR6pczaiNBCCVXoGx25X7mUNGgJBHM/QsXWp+dk4U5xJjX4EXSM7ACcCxnnnm2zI8rxVoFgMr/lUwUpyNPvYVx/eRfaUSQzkzLWxEOVhiwynCAd2GvCm/2bquBPEo+LxnDv0YXdyfFOHQP+8EV/kY0enSorxyitoLxxwiabDRqDImWF2JJVBIeVNEk2HgsDGn7vkhcPy67lMOiBGF4AGS3tX8yYqAfb5eF/kRiMPX4cDjEDLd8wezJT4lwtHrMHBtbg6V9oLhYDYLw3A2eSVbn0elSdMCecFg+Ee0Kq7dlftLXSCrRxNE8lzH7hp0Nu3qpHQty7Ztq2sabHvtpb/SLauisVTye1O+N2Ubbxhu2xSAq6x1UwoAWfum8P3Gu5ZNYaUA2jaFJYCofVPYOWnZFD4TcLpxU1ZAnN24KRnfxQ2bshEE/Vub8r0p35vi/t9eHRoBDMNQDJUvMLkOkDMM+8D7b9cR+kOKLPy4juojnQeAkWWVAyLLLINVdovj44N8LOqi/3Djxo0bN5ZvdbWJuwHhrw2ILYdqBwDT2fEEXtrZFmVcCWLiAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/lib/js/fancybox/helpers/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/js/fancybox/helpers/fancybox_buttons.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAFoAAABaCAMAAAAPdrEwAAAAvVBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACoqKgAAABhYWEAAACKiooAAAAAAADj4+MAAADExMQAAABlZWWAgIAAAAAzMzMAAADg4OArKysAAADk5OR0dHRXV1dgYGCtra3u7u7Hx8eoqKjDw8P4+Pjv7++wsLD4+PjZ2dm/v7/Gxsb39/f5+fn5+fno6Oj6+vrb29vh4eHq6ur7+/vw8PD4+Pj29vb7+/v8/Pz////5+fn09PTy8vLw8PARO2GBAAAANnRSTlMAAQMFBwsOERUXHB8gJiguNzg9Pz8/Q0hLT1VWYGVoeH2IkaKkpKmxsrjExc3T1djc4uPw8vVWxhKTAAAC9ElEQVR4Xu2WXXeaQBCGgQUWiGCsibExiWk+bA0xNlZnP8D8/5/VQUp7FMYc95iLtjw3czHs45zx5bDWv05LS/gc7hewb5/txoOzR7bpP86aDeFMx/ZeNX+WTe7wResJutlE65ew2azPnb3qYK5V3e2iuXAXZnS7TWalb09LbEqttLrabfIpAKAbzQAw5Q3mLNcV38PtFeuKTNTdfi8VQiitFZa059fWheb1ep3nuRCg1NbSudKAp7CHT9TdLOqn2NqcTvsR21nXs1bYRHJEgNxaeiSh8P56gHAXvZoZ8e/w8G/zO2pYnTNrxz1VRU9Na2bL694LkVdyAXC2pc4Bqn1g98dNZ1c90aVaT2pqJ+ihW+TpU8l9ZFt/CB5ef7HKBZoTz941a5FvdkW5AW4G/Q1df2td3WHJ6BUIM4j86SkXQLkhOwv4Bs/Z6vlBSTLP6mbLn2cSRDocpgJkNvetRve7b2PNjPCLBQBmA3MCsLjgVpP7NrL3qx9qZsTtXC7QzBi6F5cdt0Hg8Mjfr/Y7ncJcd/d7RepY1OujuQmbOdZeHJc1/rbLfVZU5nM0/y20tLS0sNmpTXfDGAmrciBc6y8O2Y01ElflQCKp9Qs5eCyVknFZDNSg6MFjmWXoLIqBGoTIycHjDCCLy2KixlsKlIMfXb1GysGPr357Q3e58Q9RA8Cd9yELEfli3D26Ot9cgb8OE370hQgUL8a9yD323ygBRDny0V8ZKUU58vFfdBDUyEiMyxJxWQ5Xz8mRkZMYOanKgfAuOTLiBlEUuFU5EObjyP8jLS0tLexRF7hUl9mnyyvHSO0m00wqGVA35cmnpV56ZlNH11pKGTV3I6W1Wl1zI7X9aSkBSLWUMhsnZlN7y2w1ToFUK6mn3DZS89vVuDeYUuriiw4TZjZ1t5/wKCG2GQxGo9EgcY3Ujsc9m7mM/LAjnOga5JXIOgGRV4OsE9B5pbNOY5JXOus0dF7prNOY5JXOOg2dVzrrNCZ5pbNuTkvLT1EJqK9sfkCLAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/lib/js/fancybox/helpers/jquery.fancybox-buttons.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[I2ZhbmN5Ym94LWJ1dHRvbnMgewoJcG9zaXRpb246IGZpeGVkOwoJbGVmdDogMDsKCXdpZHRoOiAxMDAlOwoJei1pbmRleDogODA1MDsKfQoKI2ZhbmN5Ym94LWJ1dHRvbnMudG9wIHsKCXRvcDogMTBweDsKfQoKI2ZhbmN5Ym94LWJ1dHRvbnMuYm90dG9tIHsKCWJvdHRvbTogMTBweDsKfQoKI2ZhbmN5Ym94LWJ1dHRvbnMgdWwgewoJZGlzcGxheTogYmxvY2s7Cgl3aWR0aDogMTY2cHg7CgloZWlnaHQ6IDMwcHg7CgltYXJnaW46IDAgYXV0bzsKCXBhZGRpbmc6IDA7CglsaXN0LXN0eWxlOiBub25lOwoJYm9yZGVyOiAxcHggc29saWQgIzExMTsKCWJvcmRlci1yYWRpdXM6IDNweDsKCS13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMXB4IHJnYmEoMjU1LDI1NSwyNTUsLjA1KTsKCSAgIC1tb3otYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMXB4IHJnYmEoMjU1LDI1NSwyNTUsLjA1KTsKCSAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMXB4IHJnYmEoMjU1LDI1NSwyNTUsLjA1KTsKCWJhY2tncm91bmQ6IHJnYig1MCw1MCw1MCk7CgliYWNrZ3JvdW5kOiAtbW96LWxpbmVhci1ncmFkaWVudCh0b3AsIHJnYig2OCw2OCw2OCkgMCUsIHJnYig1Miw1Miw1MikgNTAlLCByZ2IoNDEsNDEsNDEpIDUwJSwgcmdiKDUxLDUxLDUxKSAxMDAlKTsKCWJhY2tncm91bmQ6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGNvbG9yLXN0b3AoMCUscmdiKDY4LDY4LDY4KSksIGNvbG9yLXN0b3AoNTAlLHJnYig1Miw1Miw1MikpLCBjb2xvci1zdG9wKDUwJSxyZ2IoNDEsNDEsNDEpKSwgY29sb3Itc3RvcCgxMDAlLHJnYig1MSw1MSw1MSkpKTsKCWJhY2tncm91bmQ6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwgcmdiKDY4LDY4LDY4KSAwJSxyZ2IoNTIsNTIsNTIpIDUwJSxyZ2IoNDEsNDEsNDEpIDUwJSxyZ2IoNTEsNTEsNTEpIDEwMCUpOwoJYmFja2dyb3VuZDogLW8tbGluZWFyLWdyYWRpZW50KHRvcCwgcmdiKDY4LDY4LDY4KSAwJSxyZ2IoNTIsNTIsNTIpIDUwJSxyZ2IoNDEsNDEsNDEpIDUwJSxyZ2IoNTEsNTEsNTEpIDEwMCUpOwoJYmFja2dyb3VuZDogLW1zLWxpbmVhci1ncmFkaWVudCh0b3AsIHJnYig2OCw2OCw2OCkgMCUscmdiKDUyLDUyLDUyKSA1MCUscmdiKDQxLDQxLDQxKSA1MCUscmdiKDUxLDUxLDUxKSAxMDAlKTsKCWJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0b3AsIHJnYig2OCw2OCw2OCkgMCUscmdiKDUyLDUyLDUyKSA1MCUscmdiKDQxLDQxLDQxKSA1MCUscmdiKDUxLDUxLDUxKSAxMDAlKTsKCWZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KCBzdGFydENvbG9yc3RyPScjNDQ0NDQ0JywgZW5kQ29sb3JzdHI9JyMyMjIyMjInLEdyYWRpZW50VHlwZT0wICk7Cn0KCiNmYW5jeWJveC1idXR0b25zIHVsIGxpIHsKCWZsb2F0OiBsZWZ0OwoJbWFyZ2luOiAwOwoJcGFkZGluZzogMDsKfQoKI2ZhbmN5Ym94LWJ1dHRvbnMgYSB7CglkaXNwbGF5OiBibG9jazsKCXdpZHRoOiAzMHB4OwoJaGVpZ2h0OiAzMHB4OwoJdGV4dC1pbmRlbnQ6IC05OTk5cHg7CgliYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2ZhbmN5Ym94X2J1dHRvbnMucG5nJyk7CgliYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OwoJb3V0bGluZTogbm9uZTsKCW9wYWNpdHk6IDAuODsKfQoKI2ZhbmN5Ym94LWJ1dHRvbnMgYTpob3ZlciB7CglvcGFjaXR5OiAxOwp9CgojZmFuY3lib3gtYnV0dG9ucyBhLmJ0blByZXYgewoJYmFja2dyb3VuZC1wb3NpdGlvbjogNXB4IDA7Cn0KCiNmYW5jeWJveC1idXR0b25zIGEuYnRuTmV4dCB7CgliYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzNweCAwOwoJYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgIzNlM2UzZTsKfQoKI2ZhbmN5Ym94LWJ1dHRvbnMgYS5idG5QbGF5IHsKCWJhY2tncm91bmQtcG9zaXRpb246IDAgLTMwcHg7Cn0KCiNmYW5jeWJveC1idXR0b25zIGEuYnRuUGxheU9uIHsKCWJhY2tncm91bmQtcG9zaXRpb246IC0zMHB4IC0zMHB4Owp9CgojZmFuY3lib3gtYnV0dG9ucyBhLmJ0blRvZ2dsZSB7CgliYWNrZ3JvdW5kLXBvc2l0aW9uOiAzcHggLTYwcHg7Cglib3JkZXItbGVmdDogMXB4IHNvbGlkICMxMTE7Cglib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjM2UzZTNlOwoJd2lkdGg6IDM1cHgKfQoKI2ZhbmN5Ym94LWJ1dHRvbnMgYS5idG5Ub2dnbGVPbiB7CgliYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjdweCAtNjBweDsKfQoKI2ZhbmN5Ym94LWJ1dHRvbnMgYS5idG5DbG9zZSB7Cglib3JkZXItbGVmdDogMXB4IHNvbGlkICMxMTE7Cgl3aWR0aDogMzVweDsKCWJhY2tncm91bmQtcG9zaXRpb246IC01NnB4IDBweDsKfQoKI2ZhbmN5Ym94LWJ1dHRvbnMgYS5idG5EaXNhYmxlZCB7CglvcGFjaXR5IDogMC40OwoJY3Vyc29yOiBkZWZhdWx0Owp9]]></data>
	</file>
	<file>
	  <filename>/lib/js/fancybox/helpers/jquery.fancybox-buttons.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IC8qIQogKiBCdXR0b25zIGhlbHBlciBmb3IgZmFuY3lCb3gKICogdmVyc2lvbjogMS4wLjUgKE1vbiwgMTUgT2N0IDIwMTIpCiAqIEByZXF1aXJlcyBmYW5jeUJveCB2Mi4wIG9yIGxhdGVyCiAqCiAqIFVzYWdlOgogKiAgICAgJCgiLmZhbmN5Ym94IikuZmFuY3lib3goewogKiAgICAgICAgIGhlbHBlcnMgOiB7CiAqICAgICAgICAgICAgIGJ1dHRvbnM6IHsKICogICAgICAgICAgICAgICAgIHBvc2l0aW9uIDogJ3RvcCcKICogICAgICAgICAgICAgfQogKiAgICAgICAgIH0KICogICAgIH0pOwogKgogKi8KKGZ1bmN0aW9uICgkKSB7CgkvL1Nob3J0Y3V0IGZvciBmYW5jeUJveCBvYmplY3QKCXZhciBGID0gJC5mYW5jeWJveDsKCgkvL0FkZCBoZWxwZXIgb2JqZWN0CglGLmhlbHBlcnMuYnV0dG9ucyA9IHsKCQlkZWZhdWx0cyA6IHsKCQkJc2tpcFNpbmdsZSA6IGZhbHNlLCAvLyBkaXNhYmxlcyBpZiBnYWxsZXJ5IGNvbnRhaW5zIHNpbmdsZSBpbWFnZQoJCQlwb3NpdGlvbiAgIDogJ3RvcCcsIC8vICd0b3AnIG9yICdib3R0b20nCgkJCXRwbCAgICAgICAgOiAnPGRpdiBpZD0iZmFuY3lib3gtYnV0dG9ucyI+PHVsPjxsaT48YSBjbGFzcz0iYnRuUHJldiIgdGl0bGU9IlByZXZpb3VzIiBocmVmPSJqYXZhc2NyaXB0OjsiPjwvYT48L2xpPjxsaT48YSBjbGFzcz0iYnRuUGxheSIgdGl0bGU9IlN0YXJ0IHNsaWRlc2hvdyIgaHJlZj0iamF2YXNjcmlwdDo7Ij48L2E+PC9saT48bGk+PGEgY2xhc3M9ImJ0bk5leHQiIHRpdGxlPSJOZXh0IiBocmVmPSJqYXZhc2NyaXB0OjsiPjwvYT48L2xpPjxsaT48YSBjbGFzcz0iYnRuVG9nZ2xlIiB0aXRsZT0iVG9nZ2xlIHNpemUiIGhyZWY9ImphdmFzY3JpcHQ6OyI+PC9hPjwvbGk+PGxpPjxhIGNsYXNzPSJidG5DbG9zZSIgdGl0bGU9IkNsb3NlIiBocmVmPSJqYXZhc2NyaXB0OmpRdWVyeS5mYW5jeWJveC5jbG9zZSgpOyI+PC9hPjwvbGk+PC91bD48L2Rpdj4nCgkJfSwKCgkJbGlzdCA6IG51bGwsCgkJYnV0dG9uczogbnVsbCwKCgkJYmVmb3JlTG9hZDogZnVuY3Rpb24gKG9wdHMsIG9iaikgewoJCQkvL1JlbW92ZSBzZWxmIGlmIGdhbGxlcnkgZG8gbm90IGhhdmUgYXQgbGVhc3QgdHdvIGl0ZW1zCgoJCQlpZiAob3B0cy5za2lwU2luZ2xlICYmIG9iai5ncm91cC5sZW5ndGggPCAyKSB7CgkJCQlvYmouaGVscGVycy5idXR0b25zID0gZmFsc2U7CgkJCQlvYmouY2xvc2VCdG4gPSB0cnVlOwoKCQkJCXJldHVybjsKCQkJfQoKCQkJLy9JbmNyZWFzZSB0b3AgbWFyZ2luIHRvIGdpdmUgc3BhY2UgZm9yIGJ1dHRvbnMKCQkJb2JqLm1hcmdpblsgb3B0cy5wb3NpdGlvbiA9PT0gJ2JvdHRvbScgPyAyIDogMCBdICs9IDMwOwoJCX0sCgoJCW9uUGxheVN0YXJ0OiBmdW5jdGlvbiAoKSB7CgkJCWlmICh0aGlzLmJ1dHRvbnMpIHsKCQkJCXRoaXMuYnV0dG9ucy5wbGF5LmF0dHIoJ3RpdGxlJywgJ1BhdXNlIHNsaWRlc2hvdycpLmFkZENsYXNzKCdidG5QbGF5T24nKTsKCQkJfQoJCX0sCgoJCW9uUGxheUVuZDogZnVuY3Rpb24gKCkgewoJCQlpZiAodGhpcy5idXR0b25zKSB7CgkJCQl0aGlzLmJ1dHRvbnMucGxheS5hdHRyKCd0aXRsZScsICdTdGFydCBzbGlkZXNob3cnKS5yZW1vdmVDbGFzcygnYnRuUGxheU9uJyk7CgkJCX0KCQl9LAoKCQlhZnRlclNob3c6IGZ1bmN0aW9uIChvcHRzLCBvYmopIHsKCQkJdmFyIGJ1dHRvbnMgPSB0aGlzLmJ1dHRvbnM7CgoJCQlpZiAoIWJ1dHRvbnMpIHsKCQkJCXRoaXMubGlzdCA9ICQob3B0cy50cGwpLmFkZENsYXNzKG9wdHMucG9zaXRpb24pLmFwcGVuZFRvKCdib2R5Jyk7CgoJCQkJYnV0dG9ucyA9IHsKCQkJCQlwcmV2ICAgOiB0aGlzLmxpc3QuZmluZCgnLmJ0blByZXYnKS5jbGljayggRi5wcmV2ICksCgkJCQkJbmV4dCAgIDogdGhpcy5saXN0LmZpbmQoJy5idG5OZXh0JykuY2xpY2soIEYubmV4dCApLAoJCQkJCXBsYXkgICA6IHRoaXMubGlzdC5maW5kKCcuYnRuUGxheScpLmNsaWNrKCBGLnBsYXkgKSwKCQkJCQl0b2dnbGUgOiB0aGlzLmxpc3QuZmluZCgnLmJ0blRvZ2dsZScpLmNsaWNrKCBGLnRvZ2dsZSApCgkJCQl9CgkJCX0KCgkJCS8vUHJldgoJCQlpZiAob2JqLmluZGV4ID4gMCB8fCBvYmoubG9vcCkgewoJCQkJYnV0dG9ucy5wcmV2LnJlbW92ZUNsYXNzKCdidG5EaXNhYmxlZCcpOwoJCQl9IGVsc2UgewoJCQkJYnV0dG9ucy5wcmV2LmFkZENsYXNzKCdidG5EaXNhYmxlZCcpOwoJCQl9CgoJCQkvL05leHQgLyBQbGF5CgkJCWlmIChvYmoubG9vcCB8fCBvYmouaW5kZXggPCBvYmouZ3JvdXAubGVuZ3RoIC0gMSkgewoJCQkJYnV0dG9ucy5uZXh0LnJlbW92ZUNsYXNzKCdidG5EaXNhYmxlZCcpOwoJCQkJYnV0dG9ucy5wbGF5LnJlbW92ZUNsYXNzKCdidG5EaXNhYmxlZCcpOwoKCQkJfSBlbHNlIHsKCQkJCWJ1dHRvbnMubmV4dC5hZGRDbGFzcygnYnRuRGlzYWJsZWQnKTsKCQkJCWJ1dHRvbnMucGxheS5hZGRDbGFzcygnYnRuRGlzYWJsZWQnKTsKCQkJfQoKCQkJdGhpcy5idXR0b25zID0gYnV0dG9uczsKCgkJCXRoaXMub25VcGRhdGUob3B0cywgb2JqKTsKCQl9LAoKCQlvblVwZGF0ZTogZnVuY3Rpb24gKG9wdHMsIG9iaikgewoJCQl2YXIgdG9nZ2xlOwoKCQkJaWYgKCF0aGlzLmJ1dHRvbnMpIHsKCQkJCXJldHVybjsKCQkJfQoKCQkJdG9nZ2xlID0gdGhpcy5idXR0b25zLnRvZ2dsZS5yZW1vdmVDbGFzcygnYnRuRGlzYWJsZWQgYnRuVG9nZ2xlT24nKTsKCgkJCS8vU2l6ZSB0b2dnbGUgYnV0dG9uCgkJCWlmIChvYmouY2FuU2hyaW5rKSB7CgkJCQl0b2dnbGUuYWRkQ2xhc3MoJ2J0blRvZ2dsZU9uJyk7CgoJCQl9IGVsc2UgaWYgKCFvYmouY2FuRXhwYW5kKSB7CgkJCQl0b2dnbGUuYWRkQ2xhc3MoJ2J0bkRpc2FibGVkJyk7CgkJCX0KCQl9LAoKCQliZWZvcmVDbG9zZTogZnVuY3Rpb24gKCkgewoJCQlpZiAodGhpcy5saXN0KSB7CgkJCQl0aGlzLmxpc3QucmVtb3ZlKCk7CgkJCX0KCgkJCXRoaXMubGlzdCAgICA9IG51bGw7CgkJCXRoaXMuYnV0dG9ucyA9IG51bGw7CgkJfQoJfTsKCn0oalF1ZXJ5KSk7]]></data>
	</file>
	<file>
	  <filename>/lib/js/fancybox/helpers/jquery.fancybox-media.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohCiAqIE1lZGlhIGhlbHBlciBmb3IgZmFuY3lCb3gKICogdmVyc2lvbjogMS4wLjUgKFR1ZSwgMjMgT2N0IDIwMTIpCiAqIEByZXF1aXJlcyBmYW5jeUJveCB2Mi4wIG9yIGxhdGVyCiAqCiAqIFVzYWdlOgogKiAgICAgJCgiLmZhbmN5Ym94IikuZmFuY3lib3goewogKiAgICAgICAgIGhlbHBlcnMgOiB7CiAqICAgICAgICAgICAgIG1lZGlhOiB0cnVlCiAqICAgICAgICAgfQogKiAgICAgfSk7CiAqCiAqIFNldCBjdXN0b20gVVJMIHBhcmFtZXRlcnM6CiAqICAgICAkKCIuZmFuY3lib3giKS5mYW5jeWJveCh7CiAqICAgICAgICAgaGVscGVycyA6IHsKICogICAgICAgICAgICAgbWVkaWE6IHsKICogICAgICAgICAgICAgICAgIHlvdXR1YmUgOiB7CiAqICAgICAgICAgICAgICAgICAgICAgcGFyYW1zIDogewogKiAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvcGxheSA6IDAKICogICAgICAgICAgICAgICAgICAgICB9CiAqICAgICAgICAgICAgICAgICB9CiAqICAgICAgICAgICAgIH0KICogICAgICAgICB9CiAqICAgICB9KTsKICoKICogT3I6CiAqICAgICAkKCIuZmFuY3lib3giKS5mYW5jeWJveCh7LAogKgkgICAgICAgaGVscGVycyA6IHsKICogICAgICAgICAgICAgbWVkaWE6IHRydWUKICogICAgICAgICB9LAogKiAgICAgICAgIHlvdXR1YmUgOiB7CiAqICAgICAgICAgICAgIGF1dG9wbGF5OiAwCiAqICAgICAgICAgfQogKiAgICAgfSk7CiAqCiAqICBTdXBwb3J0czoKICoKICogICAgICBZb3V0dWJlCiAqICAgICAgICAgIGh0dHA6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1vcGoyNEtuenJXbwogKiAgICAgICAgICBodHRwOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkL29wajI0S256cldvCiAqICAgICAgICAgIGh0dHA6Ly95b3V0dS5iZS9vcGoyNEtuenJXbwogKiAgICAgIFZpbWVvCiAqICAgICAgICAgIGh0dHA6Ly92aW1lby5jb20vNDA2NDgxNjkKICogICAgICAgICAgaHR0cDovL3ZpbWVvLmNvbS9jaGFubmVscy9zdGFmZnBpY2tzLzM4ODQzNjI4CiAqICAgICAgICAgIGh0dHA6Ly92aW1lby5jb20vZ3JvdXBzL3N1cnJlYWxpc20vdmlkZW9zLzM2NTE2Mzg0CiAqICAgICAgICAgIGh0dHA6Ly9wbGF5ZXIudmltZW8uY29tL3ZpZGVvLzQ1MDc0MzAzCiAqICAgICAgTWV0YWNhZmUKICogICAgICAgICAgaHR0cDovL3d3dy5tZXRhY2FmZS5jb20vd2F0Y2gvNzYzNTk2NC9kcl9zZXVzc190aGVfbG9yYXhfbW92aWVfdHJhaWxlci8KICogICAgICAgICAgaHR0cDovL3d3dy5tZXRhY2FmZS5jb20vd2F0Y2gvNzYzNTk2NC8KICogICAgICBEYWlseW1vdGlvbgogKiAgICAgICAgICBodHRwOi8vd3d3LmRhaWx5bW90aW9uLmNvbS92aWRlby94b3l0cWhfZHItc2V1c3MtdGhlLWxvcmF4LXByZW1pZXJlX3Blb3BsZQogKiAgICAgIFR3aXR2aWQKICogICAgICAgICAgaHR0cDovL3R3aXR2aWQuY29tL1FZN01ECiAqICAgICAgVHdpdHBpYwogKiAgICAgICAgICBodHRwOi8vdHdpdHBpYy5jb20vN3A5M3N0CiAqICAgICAgSW5zdGFncmFtCiAqICAgICAgICAgIGh0dHA6Ly9pbnN0YWdyLmFtL3AvSWVqa3VVR3hRbi8KICogICAgICAgICAgaHR0cDovL2luc3RhZ3JhbS5jb20vcC9JZWprdVVHeFFuLwogKiAgICAgIEdvb2dsZSBtYXBzCiAqICAgICAgICAgIGh0dHA6Ly9tYXBzLmdvb2dsZS5jb20vbWFwcz9xPUVpZmZlbCtUb3dlciwrQXZlbnVlK0d1c3RhdmUrRWlmZmVsLCtQYXJpcywrRnJhbmNlJnQ9aCZ6PTE3CiAqICAgICAgICAgIGh0dHA6Ly9tYXBzLmdvb2dsZS5jb20vP2xsPTQ4Ljg1Nzk5NSwyLjI5NDI5NyZzcG49MC4wMDc2NjYsMC4wMjExMzYmdD1tJno9MTYKICogICAgICAgICAgaHR0cDovL21hcHMuZ29vZ2xlLmNvbS8/bGw9NDguODU5NDYzLDIuMjkyNjI2JnNwbj0wLjAwMDk2NSwwLjAwMjY0MiZ0PW0mej0xOSZsYXllcj1jJmNibGw9NDguODU5NTI0LDIuMjkyNTMyJnBhbm9pZD1ZSjBscTI4T095M1ZUMklxSXVWWTBnJmNicD0xMiwxNTEuNTgsLDAsLTE1LjU2CiAqLwooZnVuY3Rpb24gKCQpIHsKCSJ1c2Ugc3RyaWN0IjsKCgkvL1Nob3J0Y3V0IGZvciBmYW5jeUJveCBvYmplY3QKCXZhciBGID0gJC5mYW5jeWJveCwKCQlmb3JtYXQgPSBmdW5jdGlvbiggdXJsLCByZXosIHBhcmFtcyApIHsKCQkJcGFyYW1zID0gcGFyYW1zIHx8ICcnOwoKCQkJaWYgKCAkLnR5cGUoIHBhcmFtcyApID09PSAib2JqZWN0IiApIHsKCQkJCXBhcmFtcyA9ICQucGFyYW0ocGFyYW1zLCB0cnVlKTsKCQkJfQoKCQkJJC5lYWNoKHJleiwgZnVuY3Rpb24oa2V5LCB2YWx1ZSkgewoJCQkJdXJsID0gdXJsLnJlcGxhY2UoICckJyArIGtleSwgdmFsdWUgfHwgJycgKTsKCQkJfSk7CgoJCQlpZiAocGFyYW1zLmxlbmd0aCkgewoJCQkJdXJsICs9ICggdXJsLmluZGV4T2YoJz8nKSA+IDAgPyAnJicgOiAnPycgKSArIHBhcmFtczsKCQkJfQoKCQkJcmV0dXJuIHVybDsKCQl9OwoKCS8vQWRkIGhlbHBlciBvYmplY3QKCUYuaGVscGVycy5tZWRpYSA9IHsKCQlkZWZhdWx0cyA6IHsKCQkJeW91dHViZSA6IHsKCQkJCW1hdGNoZXIgOiAvKHlvdXR1YmVcLmNvbXx5b3V0dVwuYmUpXC8od2F0Y2hcP3Y9fHZcL3x1XC98ZW1iZWRcLz8pPyh2aWRlb3Nlcmllc1w/bGlzdD0oLiopfFtcdy1dezExfXxcP2xpc3RUeXBlPSguKikmbGlzdD0oLiopKS4qL2ksCgkJCQlwYXJhbXMgIDogewoJCQkJCWF1dG9wbGF5ICAgIDogMSwKCQkJCQlhdXRvaGlkZSAgICA6IDEsCgkJCQkJZnMgICAgICAgICAgOiAxLAoJCQkJCXJlbCAgICAgICAgIDogMCwKCQkJCQloZCAgICAgICAgICA6IDEsCgkJCQkJd21vZGUgICAgICAgOiAnb3BhcXVlJywKCQkJCQllbmFibGVqc2FwaSA6IDEKCQkJCX0sCgkJCQl0eXBlIDogJ2lmcmFtZScsCgkJCQl1cmwgIDogJy8vd3d3LnlvdXR1YmUuY29tL2VtYmVkLyQzJwoJCQl9LAoJCQl2aW1lbyA6IHsKCQkJCW1hdGNoZXIgOiAvKD86dmltZW8oPzpwcm8pPy5jb20pXC8oPzpbXlxkXSspPyhcZCspKD86LiopLywKCQkJCXBhcmFtcyAgOiB7CgkJCQkJYXV0b3BsYXkgICAgICA6IDEsCgkJCQkJaGQgICAgICAgICAgICA6IDEsCgkJCQkJc2hvd190aXRsZSAgICA6IDEsCgkJCQkJc2hvd19ieWxpbmUgICA6IDEsCgkJCQkJc2hvd19wb3J0cmFpdCA6IDAsCgkJCQkJZnVsbHNjcmVlbiAgICA6IDEKCQkJCX0sCgkJCQl0eXBlIDogJ2lmcmFtZScsCgkJCQl1cmwgIDogJy8vcGxheWVyLnZpbWVvLmNvbS92aWRlby8kMScKCQkJfSwKCQkJbWV0YWNhZmUgOiB7CgkJCQltYXRjaGVyIDogL21ldGFjYWZlLmNvbVwvKD86d2F0Y2h8ZnBsYXllcilcLyhbXHdcLV17MSwxMH0pLywKCQkJCXBhcmFtcyAgOiB7CgkJCQkJYXV0b1BsYXkgOiAneWVzJwoJCQkJfSwKCQkJCXR5cGUgOiAnc3dmJywKCQkJCXVybCAgOiBmdW5jdGlvbiggcmV6LCBwYXJhbXMsIG9iaiApIHsKCQkJCQlvYmouc3dmLmZsYXNoVmFycyA9ICdwbGF5ZXJWYXJzPScgKyAkLnBhcmFtKCBwYXJhbXMsIHRydWUgKTsKCgkJCQkJcmV0dXJuICcvL3d3dy5tZXRhY2FmZS5jb20vZnBsYXllci8nICsgcmV6WzFdICsgJy8uc3dmJzsKCQkJCX0KCQkJfSwKCQkJZGFpbHltb3Rpb24gOiB7CgkJCQltYXRjaGVyIDogL2RhaWx5bW90aW9uLmNvbVwvdmlkZW9cLyguKilcLz8oLiopLywKCQkJCXBhcmFtcyAgOiB7CgkJCQkJYWRkaXRpb25hbEluZm9zIDogMCwKCQkJCQlhdXRvU3RhcnQgOiAxCgkJCQl9LAoJCQkJdHlwZSA6ICdzd2YnLAoJCQkJdXJsICA6ICcvL3d3dy5kYWlseW1vdGlvbi5jb20vc3dmL3ZpZGVvLyQxJwoJCQl9LAoJCQl0d2l0dmlkIDogewoJCQkJbWF0Y2hlciA6IC90d2l0dmlkXC5jb21cLyhbYS16QS1aMC05X1wtXD9cPV0rKS9pLAoJCQkJcGFyYW1zICA6IHsKCQkJCQlhdXRvcGxheSA6IDAKCQkJCX0sCgkJCQl0eXBlIDogJ2lmcmFtZScsCgkJCQl1cmwgIDogJy8vd3d3LnR3aXR2aWQuY29tL2VtYmVkLnBocD9ndWlkPSQxJwoJCQl9LAoJCQl0d2l0cGljIDogewoJCQkJbWF0Y2hlciA6IC90d2l0cGljXC5jb21cLyg/ISg/OnBsYWNlfHBob3Rvc3xldmVudHMpXC8pKFthLXpBLVowLTlcP1w9XC1dKykvaSwKCQkJCXR5cGUgOiAnaW1hZ2UnLAoJCQkJdXJsICA6ICcvL3R3aXRwaWMuY29tL3Nob3cvZnVsbC8kMS8nCgkJCX0sCgkJCWluc3RhZ3JhbSA6IHsKCQkJCW1hdGNoZXIgOiAvKGluc3RhZ3JcLmFtfGluc3RhZ3JhbVwuY29tKVwvcFwvKFthLXpBLVowLTlfXC1dKylcLz8vaSwKCQkJCXR5cGUgOiAnaW1hZ2UnLAoJCQkJdXJsICA6ICcvLyQxL3AvJDIvbWVkaWEvJwoJCQl9LAoJCQlnb29nbGVfbWFwcyA6IHsKCQkJCW1hdGNoZXIgOiAvbWFwc1wuZ29vZ2xlXC4oW2Etel17MiwzfShcLlthLXpdezJ9KT8pXC8oXD9sbD18bWFwc1w/KSguKikvaSwKCQkJCXR5cGUgOiAnaWZyYW1lJywKCQkJCXVybCAgOiBmdW5jdGlvbiggcmV6ICkgewoJCQkJCXJldHVybiAnLy9tYXBzLmdvb2dsZS4nICsgcmV6WzFdICsgJy8nICsgcmV6WzNdICsgJycgKyByZXpbNF0gKyAnJm91dHB1dD0nICsgKHJlels0XS5pbmRleE9mKCdsYXllcj1jJykgPiAwID8gJ3N2ZW1iZWQnIDogJ2VtYmVkJyk7CgkJCQl9CgkJCX0KCQl9LAoKCQliZWZvcmVMb2FkIDogZnVuY3Rpb24ob3B0cywgb2JqKSB7CgkJCXZhciB1cmwgICA9IG9iai5ocmVmIHx8ICcnLAoJCQkJdHlwZSAgPSBmYWxzZSwKCQkJCXdoYXQsCgkJCQlpdGVtLAoJCQkJcmV6LAoJCQkJcGFyYW1zOwoKCQkJZm9yICh3aGF0IGluIG9wdHMpIHsKCQkJCWl0ZW0gPSBvcHRzWyB3aGF0IF07CgkJCQlyZXogID0gdXJsLm1hdGNoKCBpdGVtLm1hdGNoZXIgKTsKCgkJCQlpZiAocmV6KSB7CgkJCQkJdHlwZSAgID0gaXRlbS50eXBlOwoJCQkJCXBhcmFtcyA9ICQuZXh0ZW5kKHRydWUsIHt9LCBpdGVtLnBhcmFtcywgb2JqWyB3aGF0IF0gfHwgKCQuaXNQbGFpbk9iamVjdChvcHRzWyB3aGF0IF0pID8gb3B0c1sgd2hhdCBdLnBhcmFtcyA6IG51bGwpKTsKCgkJCQkJdXJsID0gJC50eXBlKCBpdGVtLnVybCApID09PSAiZnVuY3Rpb24iID8gaXRlbS51cmwuY2FsbCggdGhpcywgcmV6LCBwYXJhbXMsIG9iaiApIDogZm9ybWF0KCBpdGVtLnVybCwgcmV6LCBwYXJhbXMgKTsKCgkJCQkJYnJlYWs7CgkJCQl9CgkJCX0KCgkJCWlmICh0eXBlKSB7CgkJCQlvYmouaHJlZiA9IHVybDsKCQkJCW9iai50eXBlID0gdHlwZTsKCgkJCQlvYmouYXV0b0hlaWdodCA9IGZhbHNlOwoJCQl9CgkJfQoJfTsKCn0oalF1ZXJ5KSk7]]></data>
	</file>
	<file>
	  <filename>/lib/js/fancybox/helpers/jquery.fancybox-thumbs.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[I2ZhbmN5Ym94LXRodW1icyB7Cglwb3NpdGlvbjogZml4ZWQ7CglsZWZ0OiAwOwoJd2lkdGg6IDEwMCU7CglvdmVyZmxvdzogaGlkZGVuOwoJei1pbmRleDogODA1MDsKfQoKI2ZhbmN5Ym94LXRodW1icy5ib3R0b20gewoJYm90dG9tOiAycHg7Cn0KCiNmYW5jeWJveC10aHVtYnMudG9wIHsKCXRvcDogMnB4Owp9CgojZmFuY3lib3gtdGh1bWJzIHVsIHsKCXBvc2l0aW9uOiByZWxhdGl2ZTsKCWxpc3Qtc3R5bGU6IG5vbmU7CgltYXJnaW46IDA7CglwYWRkaW5nOiAwOwp9CgojZmFuY3lib3gtdGh1bWJzIHVsIGxpIHsKCWZsb2F0OiBsZWZ0OwoJcGFkZGluZzogMXB4OwoJb3BhY2l0eTogMC41Owp9CgojZmFuY3lib3gtdGh1bWJzIHVsIGxpLmFjdGl2ZSB7CglvcGFjaXR5OiAwLjc1OwoJcGFkZGluZzogMDsKCWJvcmRlcjogMXB4IHNvbGlkICNmZmY7Cn0KCiNmYW5jeWJveC10aHVtYnMgdWwgbGk6aG92ZXIgewoJb3BhY2l0eTogMTsKfQoKI2ZhbmN5Ym94LXRodW1icyB1bCBsaSBhIHsKCWRpc3BsYXk6IGJsb2NrOwoJcG9zaXRpb246IHJlbGF0aXZlOwoJb3ZlcmZsb3c6IGhpZGRlbjsKCWJvcmRlcjogMXB4IHNvbGlkICMyMjI7CgliYWNrZ3JvdW5kOiAjMTExOwoJb3V0bGluZTogbm9uZTsKfQoKI2ZhbmN5Ym94LXRodW1icyB1bCBsaSBpbWcgewoJZGlzcGxheTogYmxvY2s7Cglwb3NpdGlvbjogcmVsYXRpdmU7Cglib3JkZXI6IDA7CglwYWRkaW5nOiAwOwp9]]></data>
	</file>
	<file>
	  <filename>/lib/js/fancybox/helpers/jquery.fancybox-thumbs.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IC8qIQogKiBUaHVtYm5haWwgaGVscGVyIGZvciBmYW5jeUJveAogKiB2ZXJzaW9uOiAxLjAuNyAoTW9uLCAwMSBPY3QgMjAxMikKICogQHJlcXVpcmVzIGZhbmN5Qm94IHYyLjAgb3IgbGF0ZXIKICoKICogVXNhZ2U6CiAqICAgICAkKCIuZmFuY3lib3giKS5mYW5jeWJveCh7CiAqICAgICAgICAgaGVscGVycyA6IHsKICogICAgICAgICAgICAgdGh1bWJzOiB7CiAqICAgICAgICAgICAgICAgICB3aWR0aCAgOiA1MCwKICogICAgICAgICAgICAgICAgIGhlaWdodCA6IDUwCiAqICAgICAgICAgICAgIH0KICogICAgICAgICB9CiAqICAgICB9KTsKICoKICovCihmdW5jdGlvbiAoJCkgewoJLy9TaG9ydGN1dCBmb3IgZmFuY3lCb3ggb2JqZWN0Cgl2YXIgRiA9ICQuZmFuY3lib3g7CgoJLy9BZGQgaGVscGVyIG9iamVjdAoJRi5oZWxwZXJzLnRodW1icyA9IHsKCQlkZWZhdWx0cyA6IHsKCQkJd2lkdGggICAgOiA1MCwgICAgICAgLy8gdGh1bWJuYWlsIHdpZHRoCgkJCWhlaWdodCAgIDogNTAsICAgICAgIC8vIHRodW1ibmFpbCBoZWlnaHQKCQkJcG9zaXRpb24gOiAnYm90dG9tJywgLy8gJ3RvcCcgb3IgJ2JvdHRvbScKCQkJc291cmNlICAgOiBmdW5jdGlvbiAoIGl0ZW0gKSB7ICAvLyBmdW5jdGlvbiB0byBvYnRhaW4gdGhlIFVSTCBvZiB0aGUgdGh1bWJuYWlsIGltYWdlCgkJCQl2YXIgaHJlZjsKCgkJCQlpZiAoaXRlbS5lbGVtZW50KSB7CgkJCQkJaHJlZiA9ICQoaXRlbS5lbGVtZW50KS5maW5kKCdpbWcnKS5hdHRyKCdzcmMnKTsKCQkJCX0KCgkJCQlpZiAoIWhyZWYgJiYgaXRlbS50eXBlID09PSAnaW1hZ2UnICYmIGl0ZW0uaHJlZikgewoJCQkJCWhyZWYgPSBpdGVtLmhyZWY7CgkJCQl9CgoJCQkJcmV0dXJuIGhyZWY7CgkJCX0KCQl9LAoKCQl3cmFwICA6IG51bGwsCgkJbGlzdCAgOiBudWxsLAoJCXdpZHRoIDogMCwKCgkJaW5pdDogZnVuY3Rpb24gKG9wdHMsIG9iaikgewoJCQl2YXIgdGhhdCA9IHRoaXMsCgkJCQlsaXN0LAoJCQkJdGh1bWJXaWR0aCAgPSBvcHRzLndpZHRoLAoJCQkJdGh1bWJIZWlnaHQgPSBvcHRzLmhlaWdodCwKCQkJCXRodW1iU291cmNlID0gb3B0cy5zb3VyY2U7CgoJCQkvL0J1aWxkIGxpc3Qgc3RydWN0dXJlCgkJCWxpc3QgPSAnJzsKCgkJCWZvciAodmFyIG4gPSAwOyBuIDwgb2JqLmdyb3VwLmxlbmd0aDsgbisrKSB7CgkJCQlsaXN0ICs9ICc8bGk+PGEgc3R5bGU9IndpZHRoOicgKyB0aHVtYldpZHRoICsgJ3B4O2hlaWdodDonICsgdGh1bWJIZWlnaHQgKyAncHg7IiBocmVmPSJqYXZhc2NyaXB0OmpRdWVyeS5mYW5jeWJveC5qdW1wdG8oJyArIG4gKyAnKTsiPjwvYT48L2xpPic7CgkJCX0KCgkJCXRoaXMud3JhcCA9ICQoJzxkaXYgaWQ9ImZhbmN5Ym94LXRodW1icyI+PC9kaXY+JykuYWRkQ2xhc3Mob3B0cy5wb3NpdGlvbikuYXBwZW5kVG8oJ2JvZHknKTsKCQkJdGhpcy5saXN0ID0gJCgnPHVsPicgKyBsaXN0ICsgJzwvdWw+JykuYXBwZW5kVG8odGhpcy53cmFwKTsKCgkJCS8vTG9hZCBlYWNoIHRodW1ibmFpbAoJCQkkLmVhY2gob2JqLmdyb3VwLCBmdW5jdGlvbiAoaSkgewoJCQkJdmFyIGhyZWYgPSB0aHVtYlNvdXJjZSggb2JqLmdyb3VwWyBpIF0gKTsKCgkJCQlpZiAoIWhyZWYpIHsKCQkJCQlyZXR1cm47CgkJCQl9CgoJCQkJJCgiPGltZyAvPiIpLmxvYWQoZnVuY3Rpb24gKCkgewoJCQkJCXZhciB3aWR0aCAgPSB0aGlzLndpZHRoLAoJCQkJCQloZWlnaHQgPSB0aGlzLmhlaWdodCwKCQkJCQkJd2lkdGhSYXRpbywgaGVpZ2h0UmF0aW8sIHBhcmVudDsKCgkJCQkJaWYgKCF0aGF0Lmxpc3QgfHwgIXdpZHRoIHx8ICFoZWlnaHQpIHsKCQkJCQkJcmV0dXJuOwoJCQkJCX0KCgkJCQkJLy9DYWxjdWxhdGUgdGh1bWJuYWlsIHdpZHRoL2hlaWdodCBhbmQgY2VudGVyIGl0CgkJCQkJd2lkdGhSYXRpbyAgPSB3aWR0aCAvIHRodW1iV2lkdGg7CgkJCQkJaGVpZ2h0UmF0aW8gPSBoZWlnaHQgLyB0aHVtYkhlaWdodDsKCgkJCQkJcGFyZW50ID0gdGhhdC5saXN0LmNoaWxkcmVuKCkuZXEoaSkuZmluZCgnYScpOwoKCQkJCQlpZiAod2lkdGhSYXRpbyA+PSAxICYmIGhlaWdodFJhdGlvID49IDEpIHsKCQkJCQkJaWYgKHdpZHRoUmF0aW8gPiBoZWlnaHRSYXRpbykgewoJCQkJCQkJd2lkdGggID0gTWF0aC5mbG9vcih3aWR0aCAvIGhlaWdodFJhdGlvKTsKCQkJCQkJCWhlaWdodCA9IHRodW1iSGVpZ2h0OwoKCQkJCQkJfSBlbHNlIHsKCQkJCQkJCXdpZHRoICA9IHRodW1iV2lkdGg7CgkJCQkJCQloZWlnaHQgPSBNYXRoLmZsb29yKGhlaWdodCAvIHdpZHRoUmF0aW8pOwoJCQkJCQl9CgkJCQkJfQoKCQkJCQkkKHRoaXMpLmNzcyh7CgkJCQkJCXdpZHRoICA6IHdpZHRoLAoJCQkJCQloZWlnaHQgOiBoZWlnaHQsCgkJCQkJCXRvcCAgICA6IE1hdGguZmxvb3IodGh1bWJIZWlnaHQgLyAyIC0gaGVpZ2h0IC8gMiksCgkJCQkJCWxlZnQgICA6IE1hdGguZmxvb3IodGh1bWJXaWR0aCAvIDIgLSB3aWR0aCAvIDIpCgkJCQkJfSk7CgoJCQkJCXBhcmVudC53aWR0aCh0aHVtYldpZHRoKS5oZWlnaHQodGh1bWJIZWlnaHQpOwoKCQkJCQkkKHRoaXMpLmhpZGUoKS5hcHBlbmRUbyhwYXJlbnQpLmZhZGVJbigzMDApOwoKCQkJCX0pLmF0dHIoJ3NyYycsIGhyZWYpOwoJCQl9KTsKCgkJCS8vU2V0IGluaXRpYWwgd2lkdGgKCQkJdGhpcy53aWR0aCA9IHRoaXMubGlzdC5jaGlsZHJlbigpLmVxKDApLm91dGVyV2lkdGgodHJ1ZSk7CgoJCQl0aGlzLmxpc3Qud2lkdGgodGhpcy53aWR0aCAqIChvYmouZ3JvdXAubGVuZ3RoICsgMSkpLmNzcygnbGVmdCcsIE1hdGguZmxvb3IoJCh3aW5kb3cpLndpZHRoKCkgKiAwLjUgLSAob2JqLmluZGV4ICogdGhpcy53aWR0aCArIHRoaXMud2lkdGggKiAwLjUpKSk7CgkJfSwKCgkJYmVmb3JlTG9hZDogZnVuY3Rpb24gKG9wdHMsIG9iaikgewoJCQkvL1JlbW92ZSBzZWxmIGlmIGdhbGxlcnkgZG8gbm90IGhhdmUgYXQgbGVhc3QgdHdvIGl0ZW1zCgkJCWlmIChvYmouZ3JvdXAubGVuZ3RoIDwgMikgewoJCQkJb2JqLmhlbHBlcnMudGh1bWJzID0gZmFsc2U7CgoJCQkJcmV0dXJuOwoJCQl9CgoJCQkvL0luY3JlYXNlIGJvdHRvbSBtYXJnaW4gdG8gZ2l2ZSBzcGFjZSBmb3IgdGh1bWJzCgkJCW9iai5tYXJnaW5bIG9wdHMucG9zaXRpb24gPT09ICd0b3AnID8gMCA6IDIgXSArPSAoKG9wdHMuaGVpZ2h0KSArIDE1KTsKCQl9LAoKCQlhZnRlclNob3c6IGZ1bmN0aW9uIChvcHRzLCBvYmopIHsKCQkJLy9DaGVjayBpZiBleGlzdHMgYW5kIGNyZWF0ZSBvciB1cGRhdGUgbGlzdAoJCQlpZiAodGhpcy5saXN0KSB7CgkJCQl0aGlzLm9uVXBkYXRlKG9wdHMsIG9iaik7CgoJCQl9IGVsc2UgewoJCQkJdGhpcy5pbml0KG9wdHMsIG9iaik7CgkJCX0KCgkJCS8vU2V0IGFjdGl2ZSBlbGVtZW50CgkJCXRoaXMubGlzdC5jaGlsZHJlbigpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKS5lcShvYmouaW5kZXgpLmFkZENsYXNzKCdhY3RpdmUnKTsKCQl9LAoKCQkvL0NlbnRlciBsaXN0CgkJb25VcGRhdGU6IGZ1bmN0aW9uIChvcHRzLCBvYmopIHsKCQkJaWYgKHRoaXMubGlzdCkgewoJCQkJdGhpcy5saXN0LnN0b3AodHJ1ZSkuYW5pbWF0ZSh7CgkJCQkJJ2xlZnQnOiBNYXRoLmZsb29yKCQod2luZG93KS53aWR0aCgpICogMC41IC0gKG9iai5pbmRleCAqIHRoaXMud2lkdGggKyB0aGlzLndpZHRoICogMC41KSkKCQkJCX0sIDE1MCk7CgkJCX0KCQl9LAoKCQliZWZvcmVDbG9zZTogZnVuY3Rpb24gKCkgewoJCQlpZiAodGhpcy53cmFwKSB7CgkJCQl0aGlzLndyYXAucmVtb3ZlKCk7CgkJCX0KCgkJCXRoaXMud3JhcCAgPSBudWxsOwoJCQl0aGlzLmxpc3QgID0gbnVsbDsKCQkJdGhpcy53aWR0aCA9IDA7CgkJfQoJfQoKfShqUXVlcnkpKTs=]]></data>
	</file>
	<file>
	  <filename>/lib/js/fancybox/jquery.fancybox.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohIGZhbmN5Qm94IHYyLjEuMyBmYW5jeWFwcHMuY29tIHwgZmFuY3lhcHBzLmNvbS9mYW5jeWJveC8jbGljZW5zZSAqLwouZmFuY3lib3gtd3JhcCwKLmZhbmN5Ym94LXNraW4sCi5mYW5jeWJveC1vdXRlciwKLmZhbmN5Ym94LWlubmVyLAouZmFuY3lib3gtaW1hZ2UsCi5mYW5jeWJveC13cmFwIGlmcmFtZSwKLmZhbmN5Ym94LXdyYXAgb2JqZWN0LAouZmFuY3lib3gtbmF2LAouZmFuY3lib3gtbmF2IHNwYW4sCi5mYW5jeWJveC10bXAKewoJcGFkZGluZzogMDsKCW1hcmdpbjogMDsKCWJvcmRlcjogMDsKCW91dGxpbmU6IG5vbmU7Cgl2ZXJ0aWNhbC1hbGlnbjogdG9wOwp9CgouZmFuY3lib3gtd3JhcCB7Cglwb3NpdGlvbjogYWJzb2x1dGU7Cgl0b3A6IDA7CglsZWZ0OiAwOwoJei1pbmRleDogODAyMDsKfQoKLmZhbmN5Ym94LXNraW4gewoJcG9zaXRpb246IHJlbGF0aXZlOwoJYmFja2dyb3VuZDogI2Y5ZjlmOTsKCWNvbG9yOiAjNDQ0OwoJdGV4dC1zaGFkb3c6IG5vbmU7Cgktd2Via2l0LWJvcmRlci1yYWRpdXM6IDRweDsKCSAgIC1tb3otYm9yZGVyLXJhZGl1czogNHB4OwoJICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7Cn0KCi5mYW5jeWJveC1vcGVuZWQgewoJei1pbmRleDogODAzMDsKfQoKLmZhbmN5Ym94LW9wZW5lZCAuZmFuY3lib3gtc2tpbiB7Cgktd2Via2l0LWJveC1zaGFkb3c6IDAgMTBweCAyNXB4IHJnYmEoMCwgMCwgMCwgMC41KTsKCSAgIC1tb3otYm94LXNoYWRvdzogMCAxMHB4IDI1cHggcmdiYSgwLCAwLCAwLCAwLjUpOwoJICAgICAgICBib3gtc2hhZG93OiAwIDEwcHggMjVweCByZ2JhKDAsIDAsIDAsIDAuNSk7Cn0KCi5mYW5jeWJveC1vdXRlciwgLmZhbmN5Ym94LWlubmVyIHsKCXBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKLmZhbmN5Ym94LWlubmVyIHsKCW92ZXJmbG93OiBoaWRkZW47Cn0KCi5mYW5jeWJveC10eXBlLWlmcmFtZSAuZmFuY3lib3gtaW5uZXIgewoJLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoOwp9CgouZmFuY3lib3gtZXJyb3IgewoJY29sb3I6ICM0NDQ7Cglmb250OiAxNHB4LzIwcHggIkhlbHZldGljYSBOZXVlIixIZWx2ZXRpY2EsQXJpYWwsc2Fucy1zZXJpZjsKCW1hcmdpbjogMDsKCXBhZGRpbmc6IDE1cHg7Cgl3aGl0ZS1zcGFjZTogbm93cmFwOwp9CgouZmFuY3lib3gtaW1hZ2UsIC5mYW5jeWJveC1pZnJhbWUgewoJZGlzcGxheTogYmxvY2s7Cgl3aWR0aDogMTAwJTsKCWhlaWdodDogMTAwJTsKfQoKLmZhbmN5Ym94LWltYWdlIHsKCW1heC13aWR0aDogMTAwJTsKCW1heC1oZWlnaHQ6IDEwMCU7Cn0KCiNmYW5jeWJveC1sb2FkaW5nLCAuZmFuY3lib3gtY2xvc2UsIC5mYW5jeWJveC1wcmV2IHNwYW4sIC5mYW5jeWJveC1uZXh0IHNwYW4gewoJYmFja2dyb3VuZC1pbWFnZTogdXJsKCdmYW5jeWJveF9zcHJpdGUucG5nJyk7Cn0KCiNmYW5jeWJveC1sb2FkaW5nIHsKCXBvc2l0aW9uOiBmaXhlZDsKCXRvcDogNTAlOwoJbGVmdDogNTAlOwoJbWFyZ2luLXRvcDogLTIycHg7CgltYXJnaW4tbGVmdDogLTIycHg7CgliYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xMDhweDsKCW9wYWNpdHk6IDAuODsKCWN1cnNvcjogcG9pbnRlcjsKCXotaW5kZXg6IDgwNjA7Cn0KCiNmYW5jeWJveC1sb2FkaW5nIGRpdiB7Cgl3aWR0aDogNDRweDsKCWhlaWdodDogNDRweDsKCWJhY2tncm91bmQ6IHVybCgnZmFuY3lib3hfbG9hZGluZy5naWYnKSBjZW50ZXIgY2VudGVyIG5vLXJlcGVhdDsKfQoKLmZhbmN5Ym94LWNsb3NlIHsKCXBvc2l0aW9uOiBhYnNvbHV0ZTsKCXRvcDogLTE4cHg7CglyaWdodDogLTE4cHg7Cgl3aWR0aDogMzZweDsKCWhlaWdodDogMzZweDsKCWN1cnNvcjogcG9pbnRlcjsKCXotaW5kZXg6IDgwNDA7Cn0KCi5mYW5jeWJveC1uYXYgewoJcG9zaXRpb246IGFic29sdXRlOwoJdG9wOiAwOwoJd2lkdGg6IDQwJTsKCWhlaWdodDogMTAwJTsKCWN1cnNvcjogcG9pbnRlcjsKCXRleHQtZGVjb3JhdGlvbjogbm9uZTsKCWJhY2tncm91bmQ6IHRyYW5zcGFyZW50IHVybCgnYmxhbmsuZ2lmJyk7IC8qIGhlbHBzIElFICovCgktd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwwLDAsMCk7Cgl6LWluZGV4OiA4MDQwOwp9CgouZmFuY3lib3gtcHJldiB7CglsZWZ0OiAwOwp9CgouZmFuY3lib3gtbmV4dCB7CglyaWdodDogMDsKfQoKLmZhbmN5Ym94LW5hdiBzcGFuIHsKCXBvc2l0aW9uOiBhYnNvbHV0ZTsKCXRvcDogNTAlOwoJd2lkdGg6IDM2cHg7CgloZWlnaHQ6IDM0cHg7CgltYXJnaW4tdG9wOiAtMThweDsKCWN1cnNvcjogcG9pbnRlcjsKCXotaW5kZXg6IDgwNDA7Cgl2aXNpYmlsaXR5OiBoaWRkZW47Cn0KCi5mYW5jeWJveC1wcmV2IHNwYW4gewoJbGVmdDogMTBweDsKCWJhY2tncm91bmQtcG9zaXRpb246IDAgLTM2cHg7Cn0KCi5mYW5jeWJveC1uZXh0IHNwYW4gewoJcmlnaHQ6IDEwcHg7CgliYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC03MnB4Owp9CgouZmFuY3lib3gtbmF2OmhvdmVyIHNwYW4gewoJdmlzaWJpbGl0eTogdmlzaWJsZTsKfQoKLmZhbmN5Ym94LXRtcCB7Cglwb3NpdGlvbjogYWJzb2x1dGU7Cgl0b3A6IC05OTk5OXB4OwoJbGVmdDogLTk5OTk5cHg7Cgl2aXNpYmlsaXR5OiBoaWRkZW47CgltYXgtd2lkdGg6IDk5OTk5cHg7CgltYXgtaGVpZ2h0OiA5OTk5OXB4OwoJb3ZlcmZsb3c6IHZpc2libGUgIWltcG9ydGFudDsKfQoKLyogT3ZlcmxheSBoZWxwZXIgKi8KCi5mYW5jeWJveC1sb2NrIHsKCW92ZXJmbG93OiBoaWRkZW47Cn0KCi5mYW5jeWJveC1vdmVybGF5IHsKCXBvc2l0aW9uOiBhYnNvbHV0ZTsKCXRvcDogMDsKCWxlZnQ6IDA7CglvdmVyZmxvdzogaGlkZGVuOwoJZGlzcGxheTogbm9uZTsKCXotaW5kZXg6IDgwMTA7CgliYWNrZ3JvdW5kOiB1cmwoJ2ZhbmN5Ym94X292ZXJsYXkucG5nJyk7Cn0KCi5mYW5jeWJveC1vdmVybGF5LWZpeGVkIHsKCXBvc2l0aW9uOiBmaXhlZDsKCWJvdHRvbTogMDsKCXJpZ2h0OiAwOwp9CgouZmFuY3lib3gtbG9jayAuZmFuY3lib3gtb3ZlcmxheSB7CglvdmVyZmxvdzogYXV0bzsKCW92ZXJmbG93LXk6IHNjcm9sbDsKfQoKLyogVGl0bGUgaGVscGVyICovCgouZmFuY3lib3gtdGl0bGUgewoJdmlzaWJpbGl0eTogaGlkZGVuOwoJZm9udDogbm9ybWFsIDEzcHgvMjBweCAiSGVsdmV0aWNhIE5ldWUiLEhlbHZldGljYSxBcmlhbCxzYW5zLXNlcmlmOwoJcG9zaXRpb246IHJlbGF0aXZlOwoJdGV4dC1zaGFkb3c6IG5vbmU7Cgl6LWluZGV4OiA4MDUwOwp9CgouZmFuY3lib3gtb3BlbmVkIC5mYW5jeWJveC10aXRsZSB7Cgl2aXNpYmlsaXR5OiB2aXNpYmxlOwp9CgouZmFuY3lib3gtdGl0bGUtZmxvYXQtd3JhcCB7Cglwb3NpdGlvbjogYWJzb2x1dGU7Cglib3R0b206IDA7CglyaWdodDogNTAlOwoJbWFyZ2luLWJvdHRvbTogLTM1cHg7Cgl6LWluZGV4OiA4MDUwOwoJdGV4dC1hbGlnbjogY2VudGVyOwp9CgouZmFuY3lib3gtdGl0bGUtZmxvYXQtd3JhcCAuY2hpbGQgewoJZGlzcGxheTogaW5saW5lLWJsb2NrOwoJbWFyZ2luLXJpZ2h0OiAtMTAwJTsKCXBhZGRpbmc6IDJweCAyMHB4OwoJYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7IC8qIEZhbGxiYWNrIGZvciB3ZWIgYnJvd3NlcnMgdGhhdCBkb2Vzbid0IHN1cHBvcnQgUkdCYSAqLwoJYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjgpOwoJLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAxNXB4OwoJICAgLW1vei1ib3JkZXItcmFkaXVzOiAxNXB4OwoJICAgICAgICBib3JkZXItcmFkaXVzOiAxNXB4OwoJdGV4dC1zaGFkb3c6IDAgMXB4IDJweCAjMjIyOwoJY29sb3I6ICNGRkY7Cglmb250LXdlaWdodDogYm9sZDsKCWxpbmUtaGVpZ2h0OiAyNHB4OwoJd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLmZhbmN5Ym94LXRpdGxlLW91dHNpZGUtd3JhcCB7Cglwb3NpdGlvbjogcmVsYXRpdmU7CgltYXJnaW4tdG9wOiAxMHB4OwoJY29sb3I6ICNmZmY7Cn0KCi5mYW5jeWJveC10aXRsZS1pbnNpZGUtd3JhcCB7CglwYWRkaW5nLXRvcDogMTBweDsKfQoKLmZhbmN5Ym94LXRpdGxlLW92ZXItd3JhcCB7Cglwb3NpdGlvbjogYWJzb2x1dGU7Cglib3R0b206IDA7CglsZWZ0OiAwOwoJY29sb3I6ICNmZmY7CglwYWRkaW5nOiAxMHB4OwoJYmFja2dyb3VuZDogIzAwMDsKCWJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgLjgpOwp9]]></data>
	</file>
	<file>
	  <filename>/lib/js/fancybox/jquery.fancybox.pack.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKICogRmFuY3lCb3ggLSBqUXVlcnkgUGx1Z2luCiAqIFNpbXBsZSBhbmQgZmFuY3kgbGlnaHRib3ggYWx0ZXJuYXRpdmUKICoKICogRXhhbXBsZXMgYW5kIGRvY3VtZW50YXRpb24gYXQ6IGh0dHA6Ly9mYW5jeWJveC5uZXQKICogCiAqIENvcHlyaWdodCAoYykgMjAwOCAtIDIwMTAgSmFuaXMgU2thcm5lbGlzCiAqIFRoYXQgc2FpZCwgaXQgaXMgaGFyZGx5IGEgb25lLXBlcnNvbiBwcm9qZWN0LiBNYW55IHBlb3BsZSBoYXZlIHN1Ym1pdHRlZCBidWdzLCBjb2RlLCBhbmQgb2ZmZXJlZCB0aGVpciBhZHZpY2UgZnJlZWx5LiBUaGVpciBzdXBwb3J0IGlzIGdyZWF0bHkgYXBwcmVjaWF0ZWQuCiAqIAogKiBWZXJzaW9uOiAxLjMuNCAoMTEvMTEvMjAxMCkKICogUmVxdWlyZXM6IGpRdWVyeSB2MS4zKwogKgogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgYW5kIEdQTCBsaWNlbnNlczoKICogICBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocAogKiAgIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwuaHRtbAogKi8KLyoKOyhmdW5jdGlvbihiKXt2YXIgbSx0LHUsZixELGosRSxuLHosQSxxPTAsZT17fSxvPVtdLHA9MCxkPXt9LGw9W10sRz1udWxsLHY9bmV3IEltYWdlLEo9L1wuKGpwZ3xnaWZ8cG5nfGJtcHxqcGVnKSguKik/JC9pLFc9L1teXC5dXC4oc3dmKVxzKiQvaSxLLEw9MSx5PTAscz0iIixyLGksaD1mYWxzZSxCPWIuZXh0ZW5kKGIoIjxkaXYvPiIpWzBdLHtwcm9wOjB9KSxNPWIuYnJvd3Nlci5tc2llJiZiLmJyb3dzZXIudmVyc2lvbjw3JiYhd2luZG93LlhNTEh0dHBSZXF1ZXN0LE49ZnVuY3Rpb24oKXt0LmhpZGUoKTt2Lm9uZXJyb3I9di5vbmxvYWQ9bnVsbDtHJiZHLmFib3J0KCk7bS5lbXB0eSgpfSxPPWZ1bmN0aW9uKCl7aWYoZmFsc2U9PT1lLm9uRXJyb3IobyxxLGUpKXt0LmhpZGUoKTtoPWZhbHNlfWVsc2V7ZS50aXRsZVNob3c9ZmFsc2U7ZS53aWR0aD0iYXV0byI7ZS5oZWlnaHQ9ImF1dG8iO20uaHRtbCgnPHAgaWQ9ImZhbmN5Ym94LWVycm9yIj5UaGUgcmVxdWVzdGVkIGNvbnRlbnQgY2Fubm90IGJlIGxvYWRlZC48YnIgLz5QbGVhc2UgdHJ5IGFnYWluIGxhdGVyLjwvcD4nKTsKRigpfX0sST1mdW5jdGlvbigpe3ZhciBhPW9bcV0sYyxnLGssQyxQLHc7TigpO2U9Yi5leHRlbmQoe30sYi5mbi5mYW5jeWJveC5kZWZhdWx0cyx0eXBlb2YgYihhKS5kYXRhKCJmYW5jeWJveCIpPT0idW5kZWZpbmVkIj9lOmIoYSkuZGF0YSgiZmFuY3lib3giKSk7dz1lLm9uU3RhcnQobyxxLGUpO2lmKHc9PT1mYWxzZSloPWZhbHNlO2Vsc2V7aWYodHlwZW9mIHc9PSJvYmplY3QiKWU9Yi5leHRlbmQoZSx3KTtrPWUudGl0bGV8fChhLm5vZGVOYW1lP2IoYSkuYXR0cigidGl0bGUiKTphLnRpdGxlKXx8IiI7aWYoYS5ub2RlTmFtZSYmIWUub3JpZyllLm9yaWc9YihhKS5jaGlsZHJlbigiaW1nOmZpcnN0IikubGVuZ3RoP2IoYSkuY2hpbGRyZW4oImltZzpmaXJzdCIpOmIoYSk7aWYoaz09PSIiJiZlLm9yaWcmJmUudGl0bGVGcm9tQWx0KWs9ZS5vcmlnLmF0dHIoImFsdCIpO2M9ZS5ocmVmfHwoYS5ub2RlTmFtZT9iKGEpLmF0dHIoImhyZWYiKTphLmhyZWYpfHxudWxsO2lmKC9eKD86amF2YXNjcmlwdCkvaS50ZXN0KGMpfHwKYz09IiMiKWM9bnVsbDtpZihlLnR5cGUpe2c9ZS50eXBlO2lmKCFjKWM9ZS5jb250ZW50fWVsc2UgaWYoZS5jb250ZW50KWc9Imh0bWwiO2Vsc2UgaWYoYylnPWMubWF0Y2goSik/ImltYWdlIjpjLm1hdGNoKFcpPyJzd2YiOmIoYSkuaGFzQ2xhc3MoImlmcmFtZSIpPyJpZnJhbWUiOmMuaW5kZXhPZigiIyIpPT09MD8iaW5saW5lIjoiYWpheCI7aWYoZyl7aWYoZz09ImlubGluZSIpe2E9Yy5zdWJzdHIoYy5pbmRleE9mKCIjIikpO2c9YihhKS5sZW5ndGg+MD8iaW5saW5lIjoiYWpheCJ9ZS50eXBlPWc7ZS5ocmVmPWM7ZS50aXRsZT1rO2lmKGUuYXV0b0RpbWVuc2lvbnMpaWYoZS50eXBlPT0iaHRtbCJ8fGUudHlwZT09ImlubGluZSJ8fGUudHlwZT09ImFqYXgiKXtlLndpZHRoPSJhdXRvIjtlLmhlaWdodD0iYXV0byJ9ZWxzZSBlLmF1dG9EaW1lbnNpb25zPWZhbHNlO2lmKGUubW9kYWwpe2Uub3ZlcmxheVNob3c9dHJ1ZTtlLmhpZGVPbk92ZXJsYXlDbGljaz1mYWxzZTtlLmhpZGVPbkNvbnRlbnRDbGljaz0KZmFsc2U7ZS5lbmFibGVFc2NhcGVCdXR0b249ZmFsc2U7ZS5zaG93Q2xvc2VCdXR0b249ZmFsc2V9ZS5wYWRkaW5nPXBhcnNlSW50KGUucGFkZGluZywxMCk7ZS5tYXJnaW49cGFyc2VJbnQoZS5tYXJnaW4sMTApO20uY3NzKCJwYWRkaW5nIixlLnBhZGRpbmcrZS5tYXJnaW4pO2IoIi5mYW5jeWJveC1pbmxpbmUtdG1wIikudW5iaW5kKCJmYW5jeWJveC1jYW5jZWwiKS5iaW5kKCJmYW5jeWJveC1jaGFuZ2UiLGZ1bmN0aW9uKCl7Yih0aGlzKS5yZXBsYWNlV2l0aChqLmNoaWxkcmVuKCkpfSk7c3dpdGNoKGcpe2Nhc2UgImh0bWwiOm0uaHRtbChlLmNvbnRlbnQpO0YoKTticmVhaztjYXNlICJpbmxpbmUiOmlmKGIoYSkucGFyZW50KCkuaXMoIiNmYW5jeWJveC1jb250ZW50Iik9PT10cnVlKXtoPWZhbHNlO2JyZWFrfWIoJzxkaXYgY2xhc3M9ImZhbmN5Ym94LWlubGluZS10bXAiIC8+JykuaGlkZSgpLmluc2VydEJlZm9yZShiKGEpKS5iaW5kKCJmYW5jeWJveC1jbGVhbnVwIixmdW5jdGlvbigpe2IodGhpcykucmVwbGFjZVdpdGgoai5jaGlsZHJlbigpKX0pLmJpbmQoImZhbmN5Ym94LWNhbmNlbCIsCmZ1bmN0aW9uKCl7Yih0aGlzKS5yZXBsYWNlV2l0aChtLmNoaWxkcmVuKCkpfSk7YihhKS5hcHBlbmRUbyhtKTtGKCk7YnJlYWs7Y2FzZSAiaW1hZ2UiOmg9ZmFsc2U7Yi5mYW5jeWJveC5zaG93QWN0aXZpdHkoKTt2PW5ldyBJbWFnZTt2Lm9uZXJyb3I9ZnVuY3Rpb24oKXtPKCl9O3Yub25sb2FkPWZ1bmN0aW9uKCl7aD10cnVlO3Yub25lcnJvcj12Lm9ubG9hZD1udWxsO2Uud2lkdGg9di53aWR0aDtlLmhlaWdodD12LmhlaWdodDtiKCI8aW1nIC8+IikuYXR0cih7aWQ6ImZhbmN5Ym94LWltZyIsc3JjOnYuc3JjLGFsdDplLnRpdGxlfSkuYXBwZW5kVG8obSk7USgpfTt2LnNyYz1jO2JyZWFrO2Nhc2UgInN3ZiI6ZS5zY3JvbGxpbmc9Im5vIjtDPSc8b2JqZWN0IGNsYXNzaWQ9ImNsc2lkOkQyN0NEQjZFLUFFNkQtMTFjZi05NkI4LTQ0NDU1MzU0MDAwMCIgd2lkdGg9IicrZS53aWR0aCsnIiBoZWlnaHQ9IicrZS5oZWlnaHQrJyI+PHBhcmFtIG5hbWU9Im1vdmllIiB2YWx1ZT0iJytjKwonIj48L3BhcmFtPic7UD0iIjtiLmVhY2goZS5zd2YsZnVuY3Rpb24oeCxIKXtDKz0nPHBhcmFtIG5hbWU9IicreCsnIiB2YWx1ZT0iJytIKyciPjwvcGFyYW0+JztQKz0iICIreCsnPSInK0grJyInfSk7Qys9JzxlbWJlZCBzcmM9IicrYysnIiB0eXBlPSJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCIgd2lkdGg9IicrZS53aWR0aCsnIiBoZWlnaHQ9IicrZS5oZWlnaHQrJyInK1ArIj48L2VtYmVkPjwvb2JqZWN0PiI7bS5odG1sKEMpO0YoKTticmVhaztjYXNlICJhamF4IjpoPWZhbHNlO2IuZmFuY3lib3guc2hvd0FjdGl2aXR5KCk7ZS5hamF4Lndpbj1lLmFqYXguc3VjY2VzcztHPWIuYWpheChiLmV4dGVuZCh7fSxlLmFqYXgse3VybDpjLGRhdGE6ZS5hamF4LmRhdGF8fHt9LGVycm9yOmZ1bmN0aW9uKHgpe3guc3RhdHVzPjAmJk8oKX0sc3VjY2VzczpmdW5jdGlvbih4LEgsUil7aWYoKHR5cGVvZiBSPT0ib2JqZWN0Ij9SOkcpLnN0YXR1cz09MjAwKXtpZih0eXBlb2YgZS5hamF4Lndpbj09CiJmdW5jdGlvbiIpe3c9ZS5hamF4LndpbihjLHgsSCxSKTtpZih3PT09ZmFsc2Upe3QuaGlkZSgpO3JldHVybn1lbHNlIGlmKHR5cGVvZiB3PT0ic3RyaW5nInx8dHlwZW9mIHc9PSJvYmplY3QiKXg9d31tLmh0bWwoeCk7RigpfX19KSk7YnJlYWs7Y2FzZSAiaWZyYW1lIjpRKCl9fWVsc2UgTygpfX0sRj1mdW5jdGlvbigpe3ZhciBhPWUud2lkdGgsYz1lLmhlaWdodDthPWEudG9TdHJpbmcoKS5pbmRleE9mKCIlIik+LTE/cGFyc2VJbnQoKGIod2luZG93KS53aWR0aCgpLWUubWFyZ2luKjIpKnBhcnNlRmxvYXQoYSkvMTAwLDEwKSsicHgiOmE9PSJhdXRvIj8iYXV0byI6YSsicHgiO2M9Yy50b1N0cmluZygpLmluZGV4T2YoIiUiKT4tMT9wYXJzZUludCgoYih3aW5kb3cpLmhlaWdodCgpLWUubWFyZ2luKjIpKnBhcnNlRmxvYXQoYykvMTAwLDEwKSsicHgiOmM9PSJhdXRvIj8iYXV0byI6YysicHgiO20ud3JhcElubmVyKCc8ZGl2IHN0eWxlPSJ3aWR0aDonK2ErIjtoZWlnaHQ6IitjKwoiO292ZXJmbG93OiAiKyhlLnNjcm9sbGluZz09ImF1dG8iPyJhdXRvIjplLnNjcm9sbGluZz09InllcyI/InNjcm9sbCI6ImhpZGRlbiIpKyc7cG9zaXRpb246cmVsYXRpdmU7Ij48L2Rpdj4nKTtlLndpZHRoPW0ud2lkdGgoKTtlLmhlaWdodD1tLmhlaWdodCgpO1EoKX0sUT1mdW5jdGlvbigpe3ZhciBhLGM7dC5oaWRlKCk7aWYoZi5pcygiOnZpc2libGUiKSYmZmFsc2U9PT1kLm9uQ2xlYW51cChsLHAsZCkpe2IuZXZlbnQudHJpZ2dlcigiZmFuY3lib3gtY2FuY2VsIik7aD1mYWxzZX1lbHNle2g9dHJ1ZTtiKGouYWRkKHUpKS51bmJpbmQoKTtiKHdpbmRvdykudW5iaW5kKCJyZXNpemUuZmIgc2Nyb2xsLmZiIik7Yihkb2N1bWVudCkudW5iaW5kKCJrZXlkb3duLmZiIik7Zi5pcygiOnZpc2libGUiKSYmZC50aXRsZVBvc2l0aW9uIT09Im91dHNpZGUiJiZmLmNzcygiaGVpZ2h0IixmLmhlaWdodCgpKTtsPW87cD1xO2Q9ZTtpZihkLm92ZXJsYXlTaG93KXt1LmNzcyh7ImJhY2tncm91bmQtY29sb3IiOmQub3ZlcmxheUNvbG9yLApvcGFjaXR5OmQub3ZlcmxheU9wYWNpdHksY3Vyc29yOmQuaGlkZU9uT3ZlcmxheUNsaWNrPyJwb2ludGVyIjoiYXV0byIsaGVpZ2h0OmIoZG9jdW1lbnQpLmhlaWdodCgpfSk7aWYoIXUuaXMoIjp2aXNpYmxlIikpe00mJmIoInNlbGVjdDpub3QoI2ZhbmN5Ym94LXRtcCBzZWxlY3QpIikuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3R5bGUudmlzaWJpbGl0eSE9PSJoaWRkZW4ifSkuY3NzKHt2aXNpYmlsaXR5OiJoaWRkZW4ifSkub25lKCJmYW5jeWJveC1jbGVhbnVwIixmdW5jdGlvbigpe3RoaXMuc3R5bGUudmlzaWJpbGl0eT0iaW5oZXJpdCJ9KTt1LnNob3coKX19ZWxzZSB1LmhpZGUoKTtpPVgoKTtzPWQudGl0bGV8fCIiO3k9MDtuLmVtcHR5KCkucmVtb3ZlQXR0cigic3R5bGUiKS5yZW1vdmVDbGFzcygpO2lmKGQudGl0bGVTaG93IT09ZmFsc2Upe2lmKGIuaXNGdW5jdGlvbihkLnRpdGxlRm9ybWF0KSlhPWQudGl0bGVGb3JtYXQocyxsLHAsZCk7ZWxzZSBhPXMmJnMubGVuZ3RoPwpkLnRpdGxlUG9zaXRpb249PSJmbG9hdCI/Jzx0YWJsZSBpZD0iZmFuY3lib3gtdGl0bGUtZmxvYXQtd3JhcCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj48dHI+PHRkIGlkPSJmYW5jeWJveC10aXRsZS1mbG9hdC1sZWZ0Ij48L3RkPjx0ZCBpZD0iZmFuY3lib3gtdGl0bGUtZmxvYXQtbWFpbiI+JytzKyc8L3RkPjx0ZCBpZD0iZmFuY3lib3gtdGl0bGUtZmxvYXQtcmlnaHQiPjwvdGQ+PC90cj48L3RhYmxlPic6JzxkaXYgaWQ9ImZhbmN5Ym94LXRpdGxlLScrZC50aXRsZVBvc2l0aW9uKyciPicrcysiPC9kaXY+IjpmYWxzZTtzPWE7aWYoISghc3x8cz09PSIiKSl7bi5hZGRDbGFzcygiZmFuY3lib3gtdGl0bGUtIitkLnRpdGxlUG9zaXRpb24pLmh0bWwocykuYXBwZW5kVG8oImJvZHkiKS5zaG93KCk7c3dpdGNoKGQudGl0bGVQb3NpdGlvbil7Y2FzZSAiaW5zaWRlIjpuLmNzcyh7d2lkdGg6aS53aWR0aC1kLnBhZGRpbmcqMixtYXJnaW5MZWZ0OmQucGFkZGluZyxtYXJnaW5SaWdodDpkLnBhZGRpbmd9KTsKeT1uLm91dGVySGVpZ2h0KHRydWUpO24uYXBwZW5kVG8oRCk7aS5oZWlnaHQrPXk7YnJlYWs7Y2FzZSAib3ZlciI6bi5jc3Moe21hcmdpbkxlZnQ6ZC5wYWRkaW5nLHdpZHRoOmkud2lkdGgtZC5wYWRkaW5nKjIsYm90dG9tOmQucGFkZGluZ30pLmFwcGVuZFRvKEQpO2JyZWFrO2Nhc2UgImZsb2F0IjpuLmNzcygibGVmdCIscGFyc2VJbnQoKG4ud2lkdGgoKS1pLndpZHRoLTQwKS8yLDEwKSotMSkuYXBwZW5kVG8oZik7YnJlYWs7ZGVmYXVsdDpuLmNzcyh7d2lkdGg6aS53aWR0aC1kLnBhZGRpbmcqMixwYWRkaW5nTGVmdDpkLnBhZGRpbmcscGFkZGluZ1JpZ2h0OmQucGFkZGluZ30pLmFwcGVuZFRvKGYpfX19bi5oaWRlKCk7aWYoZi5pcygiOnZpc2libGUiKSl7YihFLmFkZCh6KS5hZGQoQSkpLmhpZGUoKTthPWYucG9zaXRpb24oKTtyPXt0b3A6YS50b3AsbGVmdDphLmxlZnQsd2lkdGg6Zi53aWR0aCgpLGhlaWdodDpmLmhlaWdodCgpfTtjPXIud2lkdGg9PWkud2lkdGgmJnIuaGVpZ2h0PT0KaS5oZWlnaHQ7ai5mYWRlVG8oZC5jaGFuZ2VGYWRlLDAuMyxmdW5jdGlvbigpe3ZhciBnPWZ1bmN0aW9uKCl7ai5odG1sKG0uY29udGVudHMoKSkuZmFkZVRvKGQuY2hhbmdlRmFkZSwxLFMpfTtiLmV2ZW50LnRyaWdnZXIoImZhbmN5Ym94LWNoYW5nZSIpO2ouZW1wdHkoKS5yZW1vdmVBdHRyKCJmaWx0ZXIiKS5jc3MoeyJib3JkZXItd2lkdGgiOmQucGFkZGluZyx3aWR0aDppLndpZHRoLWQucGFkZGluZyoyLGhlaWdodDplLmF1dG9EaW1lbnNpb25zPyJhdXRvIjppLmhlaWdodC15LWQucGFkZGluZyoyfSk7aWYoYylnKCk7ZWxzZXtCLnByb3A9MDtiKEIpLmFuaW1hdGUoe3Byb3A6MX0se2R1cmF0aW9uOmQuY2hhbmdlU3BlZWQsZWFzaW5nOmQuZWFzaW5nQ2hhbmdlLHN0ZXA6VCxjb21wbGV0ZTpnfSl9fSl9ZWxzZXtmLnJlbW92ZUF0dHIoInN0eWxlIik7ai5jc3MoImJvcmRlci13aWR0aCIsZC5wYWRkaW5nKTtpZihkLnRyYW5zaXRpb25Jbj09ImVsYXN0aWMiKXtyPVYoKTtqLmh0bWwobS5jb250ZW50cygpKTsKZi5zaG93KCk7aWYoZC5vcGFjaXR5KWkub3BhY2l0eT0wO0IucHJvcD0wO2IoQikuYW5pbWF0ZSh7cHJvcDoxfSx7ZHVyYXRpb246ZC5zcGVlZEluLGVhc2luZzpkLmVhc2luZ0luLHN0ZXA6VCxjb21wbGV0ZTpTfSl9ZWxzZXtkLnRpdGxlUG9zaXRpb249PSJpbnNpZGUiJiZ5PjAmJm4uc2hvdygpO2ouY3NzKHt3aWR0aDppLndpZHRoLWQucGFkZGluZyoyLGhlaWdodDplLmF1dG9EaW1lbnNpb25zPyJhdXRvIjppLmhlaWdodC15LWQucGFkZGluZyoyfSkuaHRtbChtLmNvbnRlbnRzKCkpO2YuY3NzKGkpLmZhZGVJbihkLnRyYW5zaXRpb25Jbj09Im5vbmUiPzA6ZC5zcGVlZEluLFMpfX19fSxZPWZ1bmN0aW9uKCl7aWYoZC5lbmFibGVFc2NhcGVCdXR0b258fGQuZW5hYmxlS2V5Ym9hcmROYXYpYihkb2N1bWVudCkuYmluZCgia2V5ZG93bi5mYiIsZnVuY3Rpb24oYSl7aWYoYS5rZXlDb2RlPT0yNyYmZC5lbmFibGVFc2NhcGVCdXR0b24pe2EucHJldmVudERlZmF1bHQoKTtiLmZhbmN5Ym94LmNsb3NlKCl9ZWxzZSBpZigoYS5rZXlDb2RlPT0KMzd8fGEua2V5Q29kZT09MzkpJiZkLmVuYWJsZUtleWJvYXJkTmF2JiZhLnRhcmdldC50YWdOYW1lIT09IklOUFVUIiYmYS50YXJnZXQudGFnTmFtZSE9PSJURVhUQVJFQSImJmEudGFyZ2V0LnRhZ05hbWUhPT0iU0VMRUNUIil7YS5wcmV2ZW50RGVmYXVsdCgpO2IuZmFuY3lib3hbYS5rZXlDb2RlPT0zNz8icHJldiI6Im5leHQiXSgpfX0pO2lmKGQuc2hvd05hdkFycm93cyl7aWYoZC5jeWNsaWMmJmwubGVuZ3RoPjF8fHAhPT0wKXouc2hvdygpO2lmKGQuY3ljbGljJiZsLmxlbmd0aD4xfHxwIT1sLmxlbmd0aC0xKUEuc2hvdygpfWVsc2V7ei5oaWRlKCk7QS5oaWRlKCl9fSxTPWZ1bmN0aW9uKCl7aWYoIWIuc3VwcG9ydC5vcGFjaXR5KXtqLmdldCgwKS5zdHlsZS5yZW1vdmVBdHRyaWJ1dGUoImZpbHRlciIpO2YuZ2V0KDApLnN0eWxlLnJlbW92ZUF0dHJpYnV0ZSgiZmlsdGVyIil9ZS5hdXRvRGltZW5zaW9ucyYmai5jc3MoImhlaWdodCIsImF1dG8iKTtmLmNzcygiaGVpZ2h0IiwiYXV0byIpOwpzJiZzLmxlbmd0aCYmbi5zaG93KCk7ZC5zaG93Q2xvc2VCdXR0b24mJkUuc2hvdygpO1koKTtkLmhpZGVPbkNvbnRlbnRDbGljayYmai5iaW5kKCJjbGljayIsYi5mYW5jeWJveC5jbG9zZSk7ZC5oaWRlT25PdmVybGF5Q2xpY2smJnUuYmluZCgiY2xpY2siLGIuZmFuY3lib3guY2xvc2UpO2Iod2luZG93KS5iaW5kKCJyZXNpemUuZmIiLGIuZmFuY3lib3gucmVzaXplKTtkLmNlbnRlck9uU2Nyb2xsJiZiKHdpbmRvdykuYmluZCgic2Nyb2xsLmZiIixiLmZhbmN5Ym94LmNlbnRlcik7aWYoZC50eXBlPT0iaWZyYW1lIiliKCc8aWZyYW1lIGlkPSJmYW5jeWJveC1mcmFtZSIgbmFtZT0iZmFuY3lib3gtZnJhbWUnKyhuZXcgRGF0ZSkuZ2V0VGltZSgpKyciIGZyYW1lYm9yZGVyPSIwIiBoc3BhY2U9IjAiICcrKGIuYnJvd3Nlci5tc2llPydhbGxvd3RyYW5zcGFyZW5jeT0idHJ1ZSIiJzoiIikrJyBzY3JvbGxpbmc9IicrZS5zY3JvbGxpbmcrJyIgc3JjPSInK2QuaHJlZisnIj48L2lmcmFtZT4nKS5hcHBlbmRUbyhqKTsKZi5zaG93KCk7aD1mYWxzZTtiLmZhbmN5Ym94LmNlbnRlcigpO2Qub25Db21wbGV0ZShsLHAsZCk7dmFyIGEsYztpZihsLmxlbmd0aC0xPnApe2E9bFtwKzFdLmhyZWY7aWYodHlwZW9mIGEhPT0idW5kZWZpbmVkIiYmYS5tYXRjaChKKSl7Yz1uZXcgSW1hZ2U7Yy5zcmM9YX19aWYocD4wKXthPWxbcC0xXS5ocmVmO2lmKHR5cGVvZiBhIT09InVuZGVmaW5lZCImJmEubWF0Y2goSikpe2M9bmV3IEltYWdlO2Muc3JjPWF9fX0sVD1mdW5jdGlvbihhKXt2YXIgYz17d2lkdGg6cGFyc2VJbnQoci53aWR0aCsoaS53aWR0aC1yLndpZHRoKSphLDEwKSxoZWlnaHQ6cGFyc2VJbnQoci5oZWlnaHQrKGkuaGVpZ2h0LXIuaGVpZ2h0KSphLDEwKSx0b3A6cGFyc2VJbnQoci50b3ArKGkudG9wLXIudG9wKSphLDEwKSxsZWZ0OnBhcnNlSW50KHIubGVmdCsoaS5sZWZ0LXIubGVmdCkqYSwxMCl9O2lmKHR5cGVvZiBpLm9wYWNpdHkhPT0idW5kZWZpbmVkIiljLm9wYWNpdHk9YTwwLjU/MC41OmE7Zi5jc3MoYyk7CmouY3NzKHt3aWR0aDpjLndpZHRoLWQucGFkZGluZyoyLGhlaWdodDpjLmhlaWdodC15KmEtZC5wYWRkaW5nKjJ9KX0sVT1mdW5jdGlvbigpe3JldHVybltiKHdpbmRvdykud2lkdGgoKS1kLm1hcmdpbioyLGIod2luZG93KS5oZWlnaHQoKS1kLm1hcmdpbioyLGIoZG9jdW1lbnQpLnNjcm9sbExlZnQoKStkLm1hcmdpbixiKGRvY3VtZW50KS5zY3JvbGxUb3AoKStkLm1hcmdpbl19LFg9ZnVuY3Rpb24oKXt2YXIgYT1VKCksYz17fSxnPWQuYXV0b1NjYWxlLGs9ZC5wYWRkaW5nKjI7Yy53aWR0aD1kLndpZHRoLnRvU3RyaW5nKCkuaW5kZXhPZigiJSIpPi0xP3BhcnNlSW50KGFbMF0qcGFyc2VGbG9hdChkLndpZHRoKS8xMDAsMTApOmQud2lkdGgraztjLmhlaWdodD1kLmhlaWdodC50b1N0cmluZygpLmluZGV4T2YoIiUiKT4tMT9wYXJzZUludChhWzFdKnBhcnNlRmxvYXQoZC5oZWlnaHQpLzEwMCwxMCk6ZC5oZWlnaHQraztpZihnJiYoYy53aWR0aD5hWzBdfHxjLmhlaWdodD5hWzFdKSlpZihlLnR5cGU9PQoiaW1hZ2UifHxlLnR5cGU9PSJzd2YiKXtnPWQud2lkdGgvZC5oZWlnaHQ7aWYoYy53aWR0aD5hWzBdKXtjLndpZHRoPWFbMF07Yy5oZWlnaHQ9cGFyc2VJbnQoKGMud2lkdGgtaykvZytrLDEwKX1pZihjLmhlaWdodD5hWzFdKXtjLmhlaWdodD1hWzFdO2Mud2lkdGg9cGFyc2VJbnQoKGMuaGVpZ2h0LWspKmcraywxMCl9fWVsc2V7Yy53aWR0aD1NYXRoLm1pbihjLndpZHRoLGFbMF0pO2MuaGVpZ2h0PU1hdGgubWluKGMuaGVpZ2h0LGFbMV0pfWMudG9wPXBhcnNlSW50KE1hdGgubWF4KGFbM10tMjAsYVszXSsoYVsxXS1jLmhlaWdodC00MCkqMC41KSwxMCk7Yy5sZWZ0PXBhcnNlSW50KE1hdGgubWF4KGFbMl0tMjAsYVsyXSsoYVswXS1jLndpZHRoLTQwKSowLjUpLDEwKTtyZXR1cm4gY30sVj1mdW5jdGlvbigpe3ZhciBhPWUub3JpZz9iKGUub3JpZyk6ZmFsc2UsYz17fTtpZihhJiZhLmxlbmd0aCl7Yz1hLm9mZnNldCgpO2MudG9wKz1wYXJzZUludChhLmNzcygicGFkZGluZ1RvcCIpLAoxMCl8fDA7Yy5sZWZ0Kz1wYXJzZUludChhLmNzcygicGFkZGluZ0xlZnQiKSwxMCl8fDA7Yy50b3ArPXBhcnNlSW50KGEuY3NzKCJib3JkZXItdG9wLXdpZHRoIiksMTApfHwwO2MubGVmdCs9cGFyc2VJbnQoYS5jc3MoImJvcmRlci1sZWZ0LXdpZHRoIiksMTApfHwwO2Mud2lkdGg9YS53aWR0aCgpO2MuaGVpZ2h0PWEuaGVpZ2h0KCk7Yz17d2lkdGg6Yy53aWR0aCtkLnBhZGRpbmcqMixoZWlnaHQ6Yy5oZWlnaHQrZC5wYWRkaW5nKjIsdG9wOmMudG9wLWQucGFkZGluZy0yMCxsZWZ0OmMubGVmdC1kLnBhZGRpbmctMjB9fWVsc2V7YT1VKCk7Yz17d2lkdGg6ZC5wYWRkaW5nKjIsaGVpZ2h0OmQucGFkZGluZyoyLHRvcDpwYXJzZUludChhWzNdK2FbMV0qMC41LDEwKSxsZWZ0OnBhcnNlSW50KGFbMl0rYVswXSowLjUsMTApfX1yZXR1cm4gY30sWj1mdW5jdGlvbigpe2lmKHQuaXMoIjp2aXNpYmxlIikpe2IoImRpdiIsdCkuY3NzKCJ0b3AiLEwqLTQwKyJweCIpO0w9KEwrMSklMTJ9ZWxzZSBjbGVhckludGVydmFsKEspfTsKYi5mbi5mYW5jeWJveD1mdW5jdGlvbihhKXtpZighYih0aGlzKS5sZW5ndGgpcmV0dXJuIHRoaXM7Yih0aGlzKS5kYXRhKCJmYW5jeWJveCIsYi5leHRlbmQoe30sYSxiLm1ldGFkYXRhP2IodGhpcykubWV0YWRhdGEoKTp7fSkpLnVuYmluZCgiY2xpY2suZmIiKS5iaW5kKCJjbGljay5mYiIsZnVuY3Rpb24oYyl7Yy5wcmV2ZW50RGVmYXVsdCgpO2lmKCFoKXtoPXRydWU7Yih0aGlzKS5ibHVyKCk7bz1bXTtxPTA7Yz1iKHRoaXMpLmF0dHIoInJlbCIpfHwiIjtpZighY3x8Yz09IiJ8fGM9PT0ibm9mb2xsb3ciKW8ucHVzaCh0aGlzKTtlbHNle289YigiYVtyZWw9IitjKyJdLCBhcmVhW3JlbD0iK2MrIl0iKTtxPW8uaW5kZXgodGhpcyl9SSgpfX0pO3JldHVybiB0aGlzfTtiLmZhbmN5Ym94PWZ1bmN0aW9uKGEsYyl7dmFyIGc7aWYoIWgpe2g9dHJ1ZTtnPXR5cGVvZiBjIT09InVuZGVmaW5lZCI/Yzp7fTtvPVtdO3E9cGFyc2VJbnQoZy5pbmRleCwxMCl8fDA7aWYoYi5pc0FycmF5KGEpKXtmb3IodmFyIGs9CjAsQz1hLmxlbmd0aDtrPEM7aysrKWlmKHR5cGVvZiBhW2tdPT0ib2JqZWN0IiliKGFba10pLmRhdGEoImZhbmN5Ym94IixiLmV4dGVuZCh7fSxnLGFba10pKTtlbHNlIGFba109Yih7fSkuZGF0YSgiZmFuY3lib3giLGIuZXh0ZW5kKHtjb250ZW50OmFba119LGcpKTtvPWpRdWVyeS5tZXJnZShvLGEpfWVsc2V7aWYodHlwZW9mIGE9PSJvYmplY3QiKWIoYSkuZGF0YSgiZmFuY3lib3giLGIuZXh0ZW5kKHt9LGcsYSkpO2Vsc2UgYT1iKHt9KS5kYXRhKCJmYW5jeWJveCIsYi5leHRlbmQoe2NvbnRlbnQ6YX0sZykpO28ucHVzaChhKX1pZihxPm8ubGVuZ3RofHxxPDApcT0wO0koKX19O2IuZmFuY3lib3guc2hvd0FjdGl2aXR5PWZ1bmN0aW9uKCl7Y2xlYXJJbnRlcnZhbChLKTt0LnNob3coKTtLPXNldEludGVydmFsKFosNjYpfTtiLmZhbmN5Ym94LmhpZGVBY3Rpdml0eT1mdW5jdGlvbigpe3QuaGlkZSgpfTtiLmZhbmN5Ym94Lm5leHQ9ZnVuY3Rpb24oKXtyZXR1cm4gYi5mYW5jeWJveC5wb3MocCsKMSl9O2IuZmFuY3lib3gucHJldj1mdW5jdGlvbigpe3JldHVybiBiLmZhbmN5Ym94LnBvcyhwLTEpfTtiLmZhbmN5Ym94LnBvcz1mdW5jdGlvbihhKXtpZighaCl7YT1wYXJzZUludChhKTtvPWw7aWYoYT4tMSYmYTxsLmxlbmd0aCl7cT1hO0koKX1lbHNlIGlmKGQuY3ljbGljJiZsLmxlbmd0aD4xKXtxPWE+PWwubGVuZ3RoPzA6bC5sZW5ndGgtMTtJKCl9fX07Yi5mYW5jeWJveC5jYW5jZWw9ZnVuY3Rpb24oKXtpZighaCl7aD10cnVlO2IuZXZlbnQudHJpZ2dlcigiZmFuY3lib3gtY2FuY2VsIik7TigpO2Uub25DYW5jZWwobyxxLGUpO2g9ZmFsc2V9fTtiLmZhbmN5Ym94LmNsb3NlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYSgpe3UuZmFkZU91dCgiZmFzdCIpO24uZW1wdHkoKS5oaWRlKCk7Zi5oaWRlKCk7Yi5ldmVudC50cmlnZ2VyKCJmYW5jeWJveC1jbGVhbnVwIik7ai5lbXB0eSgpO2Qub25DbG9zZWQobCxwLGQpO2w9ZT1bXTtwPXE9MDtkPWU9e307aD1mYWxzZX1pZighKGh8fGYuaXMoIjpoaWRkZW4iKSkpe2g9CnRydWU7aWYoZCYmZmFsc2U9PT1kLm9uQ2xlYW51cChsLHAsZCkpaD1mYWxzZTtlbHNle04oKTtiKEUuYWRkKHopLmFkZChBKSkuaGlkZSgpO2Ioai5hZGQodSkpLnVuYmluZCgpO2Iod2luZG93KS51bmJpbmQoInJlc2l6ZS5mYiBzY3JvbGwuZmIiKTtiKGRvY3VtZW50KS51bmJpbmQoImtleWRvd24uZmIiKTtqLmZpbmQoImlmcmFtZSIpLmF0dHIoInNyYyIsTSYmL15odHRwcy9pLnRlc3Qod2luZG93LmxvY2F0aW9uLmhyZWZ8fCIiKT8iamF2YXNjcmlwdDp2b2lkKGZhbHNlKSI6ImFib3V0OmJsYW5rIik7ZC50aXRsZVBvc2l0aW9uIT09Imluc2lkZSImJm4uZW1wdHkoKTtmLnN0b3AoKTtpZihkLnRyYW5zaXRpb25PdXQ9PSJlbGFzdGljIil7cj1WKCk7dmFyIGM9Zi5wb3NpdGlvbigpO2k9e3RvcDpjLnRvcCxsZWZ0OmMubGVmdCx3aWR0aDpmLndpZHRoKCksaGVpZ2h0OmYuaGVpZ2h0KCl9O2lmKGQub3BhY2l0eSlpLm9wYWNpdHk9MTtuLmVtcHR5KCkuaGlkZSgpO0IucHJvcD0xOwpiKEIpLmFuaW1hdGUoe3Byb3A6MH0se2R1cmF0aW9uOmQuc3BlZWRPdXQsZWFzaW5nOmQuZWFzaW5nT3V0LHN0ZXA6VCxjb21wbGV0ZTphfSl9ZWxzZSBmLmZhZGVPdXQoZC50cmFuc2l0aW9uT3V0PT0ibm9uZSI/MDpkLnNwZWVkT3V0LGEpfX19O2IuZmFuY3lib3gucmVzaXplPWZ1bmN0aW9uKCl7dS5pcygiOnZpc2libGUiKSYmdS5jc3MoImhlaWdodCIsYihkb2N1bWVudCkuaGVpZ2h0KCkpO2IuZmFuY3lib3guY2VudGVyKHRydWUpfTtiLmZhbmN5Ym94LmNlbnRlcj1mdW5jdGlvbihhKXt2YXIgYyxnO2lmKCFoKXtnPWE9PT10cnVlPzE6MDtjPVUoKTshZyYmKGYud2lkdGgoKT5jWzBdfHxmLmhlaWdodCgpPmNbMV0pfHxmLnN0b3AoKS5hbmltYXRlKHt0b3A6cGFyc2VJbnQoTWF0aC5tYXgoY1szXS0yMCxjWzNdKyhjWzFdLWouaGVpZ2h0KCktNDApKjAuNS1kLnBhZGRpbmcpKSxsZWZ0OnBhcnNlSW50KE1hdGgubWF4KGNbMl0tMjAsY1syXSsoY1swXS1qLndpZHRoKCktNDApKjAuNS0KZC5wYWRkaW5nKSl9LHR5cGVvZiBhPT0ibnVtYmVyIj9hOjIwMCl9fTtiLmZhbmN5Ym94LmluaXQ9ZnVuY3Rpb24oKXtpZighYigiI2ZhbmN5Ym94LXdyYXAiKS5sZW5ndGgpe2IoImJvZHkiKS5hcHBlbmQobT1iKCc8ZGl2IGlkPSJmYW5jeWJveC10bXAiPjwvZGl2PicpLHQ9YignPGRpdiBpZD0iZmFuY3lib3gtbG9hZGluZyI+PGRpdj48L2Rpdj48L2Rpdj4nKSx1PWIoJzxkaXYgaWQ9ImZhbmN5Ym94LW92ZXJsYXkiPjwvZGl2PicpLGY9YignPGRpdiBpZD0iZmFuY3lib3gtd3JhcCI+PC9kaXY+JykpO0Q9YignPGRpdiBpZD0iZmFuY3lib3gtb3V0ZXIiPjwvZGl2PicpLmFwcGVuZCgnPGRpdiBjbGFzcz0iZmFuY3lib3gtYmciIGlkPSJmYW5jeWJveC1iZy1uIj48L2Rpdj48ZGl2IGNsYXNzPSJmYW5jeWJveC1iZyIgaWQ9ImZhbmN5Ym94LWJnLW5lIj48L2Rpdj48ZGl2IGNsYXNzPSJmYW5jeWJveC1iZyIgaWQ9ImZhbmN5Ym94LWJnLWUiPjwvZGl2PjxkaXYgY2xhc3M9ImZhbmN5Ym94LWJnIiBpZD0iZmFuY3lib3gtYmctc2UiPjwvZGl2PjxkaXYgY2xhc3M9ImZhbmN5Ym94LWJnIiBpZD0iZmFuY3lib3gtYmctcyI+PC9kaXY+PGRpdiBjbGFzcz0iZmFuY3lib3gtYmciIGlkPSJmYW5jeWJveC1iZy1zdyI+PC9kaXY+PGRpdiBjbGFzcz0iZmFuY3lib3gtYmciIGlkPSJmYW5jeWJveC1iZy13Ij48L2Rpdj48ZGl2IGNsYXNzPSJmYW5jeWJveC1iZyIgaWQ9ImZhbmN5Ym94LWJnLW53Ij48L2Rpdj4nKS5hcHBlbmRUbyhmKTsKRC5hcHBlbmQoaj1iKCc8ZGl2IGlkPSJmYW5jeWJveC1jb250ZW50Ij48L2Rpdj4nKSxFPWIoJzxhIGlkPSJmYW5jeWJveC1jbG9zZSI+PC9hPicpLG49YignPGRpdiBpZD0iZmFuY3lib3gtdGl0bGUiPjwvZGl2PicpLHo9YignPGEgaHJlZj0iamF2YXNjcmlwdDo7IiBpZD0iZmFuY3lib3gtbGVmdCI+PHNwYW4gY2xhc3M9ImZhbmN5LWljbyIgaWQ9ImZhbmN5Ym94LWxlZnQtaWNvIj48L3NwYW4+PC9hPicpLEE9YignPGEgaHJlZj0iamF2YXNjcmlwdDo7IiBpZD0iZmFuY3lib3gtcmlnaHQiPjxzcGFuIGNsYXNzPSJmYW5jeS1pY28iIGlkPSJmYW5jeWJveC1yaWdodC1pY28iPjwvc3Bhbj48L2E+JykpO0UuY2xpY2soYi5mYW5jeWJveC5jbG9zZSk7dC5jbGljayhiLmZhbmN5Ym94LmNhbmNlbCk7ei5jbGljayhmdW5jdGlvbihhKXthLnByZXZlbnREZWZhdWx0KCk7Yi5mYW5jeWJveC5wcmV2KCl9KTtBLmNsaWNrKGZ1bmN0aW9uKGEpe2EucHJldmVudERlZmF1bHQoKTtiLmZhbmN5Ym94Lm5leHQoKX0pOwpiLmZuLm1vdXNld2hlZWwmJmYuYmluZCgibW91c2V3aGVlbC5mYiIsZnVuY3Rpb24oYSxjKXtpZihoKWEucHJldmVudERlZmF1bHQoKTtlbHNlIGlmKGIoYS50YXJnZXQpLmdldCgwKS5jbGllbnRIZWlnaHQ9PTB8fGIoYS50YXJnZXQpLmdldCgwKS5zY3JvbGxIZWlnaHQ9PT1iKGEudGFyZ2V0KS5nZXQoMCkuY2xpZW50SGVpZ2h0KXthLnByZXZlbnREZWZhdWx0KCk7Yi5mYW5jeWJveFtjPjA/InByZXYiOiJuZXh0Il0oKX19KTtiLnN1cHBvcnQub3BhY2l0eXx8Zi5hZGRDbGFzcygiZmFuY3lib3gtaWUiKTtpZihNKXt0LmFkZENsYXNzKCJmYW5jeWJveC1pZTYiKTtmLmFkZENsYXNzKCJmYW5jeWJveC1pZTYiKTtiKCc8aWZyYW1lIGlkPSJmYW5jeWJveC1oaWRlLXNlbC1mcmFtZSIgc3JjPSInKygvXmh0dHBzL2kudGVzdCh3aW5kb3cubG9jYXRpb24uaHJlZnx8IiIpPyJqYXZhc2NyaXB0OnZvaWQoZmFsc2UpIjoiYWJvdXQ6YmxhbmsiKSsnIiBzY3JvbGxpbmc9Im5vIiBib3JkZXI9IjAiIGZyYW1lYm9yZGVyPSIwIiB0YWJpbmRleD0iLTEiPjwvaWZyYW1lPicpLnByZXBlbmRUbyhEKX19fTsKYi5mbi5mYW5jeWJveC5kZWZhdWx0cz17cGFkZGluZzoxMCxtYXJnaW46NDAsb3BhY2l0eTpmYWxzZSxtb2RhbDpmYWxzZSxjeWNsaWM6ZmFsc2Usc2Nyb2xsaW5nOiJhdXRvIix3aWR0aDo1NjAsaGVpZ2h0OjM0MCxhdXRvU2NhbGU6dHJ1ZSxhdXRvRGltZW5zaW9uczp0cnVlLGNlbnRlck9uU2Nyb2xsOmZhbHNlLGFqYXg6e30sc3dmOnt3bW9kZToidHJhbnNwYXJlbnQifSxoaWRlT25PdmVybGF5Q2xpY2s6dHJ1ZSxoaWRlT25Db250ZW50Q2xpY2s6ZmFsc2Usb3ZlcmxheVNob3c6dHJ1ZSxvdmVybGF5T3BhY2l0eTowLjcsb3ZlcmxheUNvbG9yOiIjNzc3Iix0aXRsZVNob3c6dHJ1ZSx0aXRsZVBvc2l0aW9uOiJmbG9hdCIsdGl0bGVGb3JtYXQ6bnVsbCx0aXRsZUZyb21BbHQ6ZmFsc2UsdHJhbnNpdGlvbkluOiJmYWRlIix0cmFuc2l0aW9uT3V0OiJmYWRlIixzcGVlZEluOjMwMCxzcGVlZE91dDozMDAsY2hhbmdlU3BlZWQ6MzAwLGNoYW5nZUZhZGU6ImZhc3QiLGVhc2luZ0luOiJzd2luZyIsCmVhc2luZ091dDoic3dpbmciLHNob3dDbG9zZUJ1dHRvbjp0cnVlLHNob3dOYXZBcnJvd3M6dHJ1ZSxlbmFibGVFc2NhcGVCdXR0b246dHJ1ZSxlbmFibGVLZXlib2FyZE5hdjp0cnVlLG9uU3RhcnQ6ZnVuY3Rpb24oKXt9LG9uQ2FuY2VsOmZ1bmN0aW9uKCl7fSxvbkNvbXBsZXRlOmZ1bmN0aW9uKCl7fSxvbkNsZWFudXA6ZnVuY3Rpb24oKXt9LG9uQ2xvc2VkOmZ1bmN0aW9uKCl7fSxvbkVycm9yOmZ1bmN0aW9uKCl7fX07Yihkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXtiLmZhbmN5Ym94LmluaXQoKX0pfSkoalF1ZXJ5KTsKKi8KLy8hIGZhbmN5Qm94IHYyLjEuMyBmYW5jeWFwcHMuY29tIHwgZmFuY3lhcHBzLmNvbS9mYW5jeWJveC8jbGljZW5zZSAKKGZ1bmN0aW9uKEIseCxmLHEpe3ZhciByPWYoQiksbT1mKHgpLGI9Zi5mYW5jeWJveD1mdW5jdGlvbigpe2Iub3Blbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHU9bnVsbCxuPXguY3JlYXRlVG91Y2ghPT1xLHM9ZnVuY3Rpb24oYSl7cmV0dXJuIGEmJmEuaGFzT3duUHJvcGVydHkmJmEgaW5zdGFuY2VvZiBmfSxwPWZ1bmN0aW9uKGEpe3JldHVybiBhJiYic3RyaW5nIj09PWYudHlwZShhKX0sRT1mdW5jdGlvbihhKXtyZXR1cm4gcChhKSYmMDxhLmluZGV4T2YoIiUiKX0saz1mdW5jdGlvbihhLGQpe3ZhciBlPXBhcnNlSW50KGEsMTApfHwwO2QmJkUoYSkmJihlKj1iLmdldFZpZXdwb3J0KClbZF0vMTAwKTtyZXR1cm4gTWF0aC5jZWlsKGUpfSx2PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGsoYSxiKSsicHgifTtmLmV4dGVuZChiLHt2ZXJzaW9uOiIyLjEuMyIsZGVmYXVsdHM6e3BhZGRpbmc6MTUsbWFyZ2luOjIwLHdpZHRoOjgwMCxoZWlnaHQ6NjAwLG1pbldpZHRoOjEwMCxtaW5IZWlnaHQ6MTAwLAptYXhXaWR0aDo5OTk5LG1heEhlaWdodDo5OTk5LGF1dG9TaXplOiEwLGF1dG9IZWlnaHQ6ITEsYXV0b1dpZHRoOiExLGF1dG9SZXNpemU6ITAsYXV0b0NlbnRlcjohbixmaXRUb1ZpZXc6ITAsYXNwZWN0UmF0aW86ITEsdG9wUmF0aW86MC41LGxlZnRSYXRpbzowLjUsc2Nyb2xsaW5nOiJhdXRvIix3cmFwQ1NTOiIiLGFycm93czohMCxjbG9zZUJ0bjohMCxjbG9zZUNsaWNrOiExLG5leHRDbGljazohMSxtb3VzZVdoZWVsOiEwLGF1dG9QbGF5OiExLHBsYXlTcGVlZDozRTMscHJlbG9hZDozLG1vZGFsOiExLGxvb3A6ITAsYWpheDp7ZGF0YVR5cGU6Imh0bWwiLGhlYWRlcnM6eyJYLWZhbmN5Qm94IjohMH19LGlmcmFtZTp7c2Nyb2xsaW5nOiJhdXRvIixwcmVsb2FkOiEwfSxzd2Y6e3dtb2RlOiJ0cmFuc3BhcmVudCIsYWxsb3dmdWxsc2NyZWVuOiJ0cnVlIixhbGxvd3NjcmlwdGFjY2VzczoiYWx3YXlzIn0sa2V5czp7bmV4dDp7MTM6ImxlZnQiLDM0OiJ1cCIsMzk6ImxlZnQiLDQwOiJ1cCJ9LApwcmV2Ons4OiJyaWdodCIsMzM6ImRvd24iLDM3OiJyaWdodCIsMzg6ImRvd24ifSxjbG9zZTpbMjddLHBsYXk6WzMyXSx0b2dnbGU6WzcwXX0sZGlyZWN0aW9uOntuZXh0OiJsZWZ0IixwcmV2OiJyaWdodCJ9LHNjcm9sbE91dHNpZGU6ITAsaW5kZXg6MCx0eXBlOm51bGwsaHJlZjpudWxsLGNvbnRlbnQ6bnVsbCx0aXRsZTpudWxsLHRwbDp7d3JhcDonPGRpdiBjbGFzcz0iZmFuY3lib3gtd3JhcCIgdGFiSW5kZXg9Ii0xIj48ZGl2IGNsYXNzPSJmYW5jeWJveC1za2luIj48ZGl2IGNsYXNzPSJmYW5jeWJveC1vdXRlciI+PGRpdiBjbGFzcz0iZmFuY3lib3gtaW5uZXIiPjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PicsaW1hZ2U6JzxpbWcgY2xhc3M9ImZhbmN5Ym94LWltYWdlIiBzcmM9IntocmVmfSIgYWx0PSIiIC8+JyxpZnJhbWU6JzxpZnJhbWUgaWQ9ImZhbmN5Ym94LWZyYW1le3JuZH0iIG5hbWU9ImZhbmN5Ym94LWZyYW1le3JuZH0iIGNsYXNzPSJmYW5jeWJveC1pZnJhbWUiIGZyYW1lYm9yZGVyPSIwIiB2c3BhY2U9IjAiIGhzcGFjZT0iMCIgd2Via2l0QWxsb3dGdWxsU2NyZWVuIG1vemFsbG93ZnVsbHNjcmVlbiBhbGxvd0Z1bGxTY3JlZW4nKwooZi5icm93c2VyLm1zaWU/JyBhbGxvd3RyYW5zcGFyZW5jeT0idHJ1ZSInOiIiKSsiPjwvaWZyYW1lPiIsZXJyb3I6JzxwIGNsYXNzPSJmYW5jeWJveC1lcnJvciI+VGhlIHJlcXVlc3RlZCBjb250ZW50IGNhbm5vdCBiZSBsb2FkZWQuPGJyLz5QbGVhc2UgdHJ5IGFnYWluIGxhdGVyLjwvcD4nLGNsb3NlQnRuOic8YSB0aXRsZT0iQ2xvc2UiIGNsYXNzPSJmYW5jeWJveC1pdGVtIGZhbmN5Ym94LWNsb3NlIiBocmVmPSJqYXZhc2NyaXB0OjsiPjwvYT4nLG5leHQ6JzxhIHRpdGxlPSJOZXh0IiBjbGFzcz0iZmFuY3lib3gtbmF2IGZhbmN5Ym94LW5leHQiIGhyZWY9ImphdmFzY3JpcHQ6OyI+PHNwYW4+PC9zcGFuPjwvYT4nLHByZXY6JzxhIHRpdGxlPSJQcmV2aW91cyIgY2xhc3M9ImZhbmN5Ym94LW5hdiBmYW5jeWJveC1wcmV2IiBocmVmPSJqYXZhc2NyaXB0OjsiPjxzcGFuPjwvc3Bhbj48L2E+J30sb3BlbkVmZmVjdDoiZmFkZSIsb3BlblNwZWVkOjI1MCxvcGVuRWFzaW5nOiJzd2luZyIsCm9wZW5PcGFjaXR5OiEwLG9wZW5NZXRob2Q6Inpvb21JbiIsY2xvc2VFZmZlY3Q6ImZhZGUiLGNsb3NlU3BlZWQ6MjUwLGNsb3NlRWFzaW5nOiJzd2luZyIsY2xvc2VPcGFjaXR5OiEwLGNsb3NlTWV0aG9kOiJ6b29tT3V0IixuZXh0RWZmZWN0OiJlbGFzdGljIixuZXh0U3BlZWQ6MjUwLG5leHRFYXNpbmc6InN3aW5nIixuZXh0TWV0aG9kOiJjaGFuZ2VJbiIscHJldkVmZmVjdDoiZWxhc3RpYyIscHJldlNwZWVkOjI1MCxwcmV2RWFzaW5nOiJzd2luZyIscHJldk1ldGhvZDoiY2hhbmdlT3V0IixoZWxwZXJzOntvdmVybGF5OiEwLHRpdGxlOiEwfSxvbkNhbmNlbDpmLm5vb3AsYmVmb3JlTG9hZDpmLm5vb3AsYWZ0ZXJMb2FkOmYubm9vcCxiZWZvcmVTaG93OmYubm9vcCxhZnRlclNob3c6Zi5ub29wLGJlZm9yZUNoYW5nZTpmLm5vb3AsYmVmb3JlQ2xvc2U6Zi5ub29wLGFmdGVyQ2xvc2U6Zi5ub29wfSxncm91cDp7fSxvcHRzOnt9LHByZXZpb3VzOm51bGwsY29taW5nOm51bGwsY3VycmVudDpudWxsLAppc0FjdGl2ZTohMSxpc09wZW46ITEsaXNPcGVuZWQ6ITEsd3JhcDpudWxsLHNraW46bnVsbCxvdXRlcjpudWxsLGlubmVyOm51bGwscGxheWVyOnt0aW1lcjpudWxsLGlzQWN0aXZlOiExfSxhamF4TG9hZDpudWxsLGltZ1ByZWxvYWQ6bnVsbCx0cmFuc2l0aW9uczp7fSxoZWxwZXJzOnt9LG9wZW46ZnVuY3Rpb24oYSxkKXtpZihhJiYoZi5pc1BsYWluT2JqZWN0KGQpfHwoZD17fSksITEhPT1iLmNsb3NlKCEwKSkpcmV0dXJuIGYuaXNBcnJheShhKXx8KGE9cyhhKT9mKGEpLmdldCgpOlthXSksZi5lYWNoKGEsZnVuY3Rpb24oZSxjKXt2YXIgaj17fSxnLGgsaSxsLGs7Im9iamVjdCI9PT1mLnR5cGUoYykmJihjLm5vZGVUeXBlJiYoYz1mKGMpKSxzKGMpPyhqPXtocmVmOmMuZGF0YSgiZmFuY3lib3gtaHJlZiIpfHxjLmF0dHIoImhyZWYiKSx0aXRsZTpjLmRhdGEoImZhbmN5Ym94LXRpdGxlIil8fGMuYXR0cigidGl0bGUiKSxpc0RvbTohMCxlbGVtZW50OmN9LGYubWV0YWRhdGEmJmYuZXh0ZW5kKCEwLApqLGMubWV0YWRhdGEoKSkpOmo9Yyk7Zz1kLmhyZWZ8fGouaHJlZnx8KHAoYyk/YzpudWxsKTtoPWQudGl0bGUhPT1xP2QudGl0bGU6ai50aXRsZXx8IiI7bD0oaT1kLmNvbnRlbnR8fGouY29udGVudCk/Imh0bWwiOmQudHlwZXx8ai50eXBlOyFsJiZqLmlzRG9tJiYobD1jLmRhdGEoImZhbmN5Ym94LXR5cGUiKSxsfHwobD0obD1jLnByb3AoImNsYXNzIikubWF0Y2goL2ZhbmN5Ym94XC4oXHcrKS8pKT9sWzFdOm51bGwpKTtwKGcpJiYobHx8KGIuaXNJbWFnZShnKT9sPSJpbWFnZSI6Yi5pc1NXRihnKT9sPSJzd2YiOiIjIj09PWcuY2hhckF0KDApP2w9ImlubGluZSI6cChjKSYmKGw9Imh0bWwiLGk9YykpLCJhamF4Ij09PWwmJihrPWcuc3BsaXQoL1xzKy8sMiksZz1rLnNoaWZ0KCksaz1rLnNoaWZ0KCkpKTtpfHwoImlubGluZSI9PT1sP2c/aT1mKHAoZyk/Zy5yZXBsYWNlKC8uKig/PSNbXlxzXSskKS8sIiIpOmcpOmouaXNEb20mJihpPWMpOiJodG1sIj09PWw/aT1nOiFsJiYoIWcmJgpqLmlzRG9tKSYmKGw9ImlubGluZSIsaT1jKSk7Zi5leHRlbmQoaix7aHJlZjpnLHR5cGU6bCxjb250ZW50OmksdGl0bGU6aCxzZWxlY3RvcjprfSk7YVtlXT1qfSksYi5vcHRzPWYuZXh0ZW5kKCEwLHt9LGIuZGVmYXVsdHMsZCksZC5rZXlzIT09cSYmKGIub3B0cy5rZXlzPWQua2V5cz9mLmV4dGVuZCh7fSxiLmRlZmF1bHRzLmtleXMsZC5rZXlzKTohMSksYi5ncm91cD1hLGIuX3N0YXJ0KGIub3B0cy5pbmRleCl9LGNhbmNlbDpmdW5jdGlvbigpe3ZhciBhPWIuY29taW5nO2EmJiExIT09Yi50cmlnZ2VyKCJvbkNhbmNlbCIpJiYoYi5oaWRlTG9hZGluZygpLGIuYWpheExvYWQmJmIuYWpheExvYWQuYWJvcnQoKSxiLmFqYXhMb2FkPW51bGwsYi5pbWdQcmVsb2FkJiYoYi5pbWdQcmVsb2FkLm9ubG9hZD1iLmltZ1ByZWxvYWQub25lcnJvcj1udWxsKSxhLndyYXAmJmEud3JhcC5zdG9wKCEwLCEwKS50cmlnZ2VyKCJvblJlc2V0IikucmVtb3ZlKCksYi5jb21pbmc9bnVsbCxiLmN1cnJlbnR8fApiLl9hZnRlclpvb21PdXQoYSkpfSxjbG9zZTpmdW5jdGlvbihhKXtiLmNhbmNlbCgpOyExIT09Yi50cmlnZ2VyKCJiZWZvcmVDbG9zZSIpJiYoYi51bmJpbmRFdmVudHMoKSxiLmlzQWN0aXZlJiYoIWIuaXNPcGVufHwhMD09PWE/KGYoIi5mYW5jeWJveC13cmFwIikuc3RvcCghMCkudHJpZ2dlcigib25SZXNldCIpLnJlbW92ZSgpLGIuX2FmdGVyWm9vbU91dCgpKTooYi5pc09wZW49Yi5pc09wZW5lZD0hMSxiLmlzQ2xvc2luZz0hMCxmKCIuZmFuY3lib3gtaXRlbSwgLmZhbmN5Ym94LW5hdiIpLnJlbW92ZSgpLGIud3JhcC5zdG9wKCEwLCEwKS5yZW1vdmVDbGFzcygiZmFuY3lib3gtb3BlbmVkIiksYi50cmFuc2l0aW9uc1tiLmN1cnJlbnQuY2xvc2VNZXRob2RdKCkpKSl9LHBsYXk6ZnVuY3Rpb24oYSl7dmFyIGQ9ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQoYi5wbGF5ZXIudGltZXIpfSxlPWZ1bmN0aW9uKCl7ZCgpO2IuY3VycmVudCYmYi5wbGF5ZXIuaXNBY3RpdmUmJihiLnBsYXllci50aW1lcj0Kc2V0VGltZW91dChiLm5leHQsYi5jdXJyZW50LnBsYXlTcGVlZCkpfSxjPWZ1bmN0aW9uKCl7ZCgpO2YoImJvZHkiKS51bmJpbmQoIi5wbGF5ZXIiKTtiLnBsYXllci5pc0FjdGl2ZT0hMTtiLnRyaWdnZXIoIm9uUGxheUVuZCIpfTtpZighMD09PWF8fCFiLnBsYXllci5pc0FjdGl2ZSYmITEhPT1hKXtpZihiLmN1cnJlbnQmJihiLmN1cnJlbnQubG9vcHx8Yi5jdXJyZW50LmluZGV4PGIuZ3JvdXAubGVuZ3RoLTEpKWIucGxheWVyLmlzQWN0aXZlPSEwLGYoImJvZHkiKS5iaW5kKHsiYWZ0ZXJTaG93LnBsYXllciBvblVwZGF0ZS5wbGF5ZXIiOmUsIm9uQ2FuY2VsLnBsYXllciBiZWZvcmVDbG9zZS5wbGF5ZXIiOmMsImJlZm9yZUxvYWQucGxheWVyIjpkfSksZSgpLGIudHJpZ2dlcigib25QbGF5U3RhcnQiKX1lbHNlIGMoKX0sbmV4dDpmdW5jdGlvbihhKXt2YXIgZD1iLmN1cnJlbnQ7ZCYmKHAoYSl8fChhPWQuZGlyZWN0aW9uLm5leHQpLGIuanVtcHRvKGQuaW5kZXgrMSxhLCJuZXh0IikpfSwKcHJldjpmdW5jdGlvbihhKXt2YXIgZD1iLmN1cnJlbnQ7ZCYmKHAoYSl8fChhPWQuZGlyZWN0aW9uLnByZXYpLGIuanVtcHRvKGQuaW5kZXgtMSxhLCJwcmV2IikpfSxqdW1wdG86ZnVuY3Rpb24oYSxkLGUpe3ZhciBjPWIuY3VycmVudDtjJiYoYT1rKGEpLGIuZGlyZWN0aW9uPWR8fGMuZGlyZWN0aW9uW2E+PWMuaW5kZXg/Im5leHQiOiJwcmV2Il0sYi5yb3V0ZXI9ZXx8Imp1bXB0byIsYy5sb29wJiYoMD5hJiYoYT1jLmdyb3VwLmxlbmd0aCthJWMuZ3JvdXAubGVuZ3RoKSxhJT1jLmdyb3VwLmxlbmd0aCksYy5ncm91cFthXSE9PXEmJihiLmNhbmNlbCgpLGIuX3N0YXJ0KGEpKSl9LHJlcG9zaXRpb246ZnVuY3Rpb24oYSxkKXt2YXIgZT1iLmN1cnJlbnQsYz1lP2Uud3JhcDpudWxsLGo7YyYmKGo9Yi5fZ2V0UG9zaXRpb24oZCksYSYmInNjcm9sbCI9PT1hLnR5cGU/KGRlbGV0ZSBqLnBvc2l0aW9uLGMuc3RvcCghMCwhMCkuYW5pbWF0ZShqLDIwMCkpOihjLmNzcyhqKSxlLnBvcz1mLmV4dGVuZCh7fSwKZS5kaW0saikpKX0sdXBkYXRlOmZ1bmN0aW9uKGEpe3ZhciBkPWEmJmEudHlwZSxlPSFkfHwib3JpZW50YXRpb25jaGFuZ2UiPT09ZDtlJiYoY2xlYXJUaW1lb3V0KHUpLHU9bnVsbCk7Yi5pc09wZW4mJiF1JiYodT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIGM9Yi5jdXJyZW50O2MmJiFiLmlzQ2xvc2luZyYmKGIud3JhcC5yZW1vdmVDbGFzcygiZmFuY3lib3gtdG1wIiksKGV8fCJsb2FkIj09PWR8fCJyZXNpemUiPT09ZCYmYy5hdXRvUmVzaXplKSYmYi5fc2V0RGltZW5zaW9uKCksInNjcm9sbCI9PT1kJiZjLmNhblNocmlua3x8Yi5yZXBvc2l0aW9uKGEpLGIudHJpZ2dlcigib25VcGRhdGUiKSx1PW51bGwpfSxlJiYhbj8wOjMwMCkpfSx0b2dnbGU6ZnVuY3Rpb24oYSl7Yi5pc09wZW4mJihiLmN1cnJlbnQuZml0VG9WaWV3PSJib29sZWFuIj09PWYudHlwZShhKT9hOiFiLmN1cnJlbnQuZml0VG9WaWV3LG4mJihiLndyYXAucmVtb3ZlQXR0cigic3R5bGUiKS5hZGRDbGFzcygiZmFuY3lib3gtdG1wIiksCmIudHJpZ2dlcigib25VcGRhdGUiKSksYi51cGRhdGUoKSl9LGhpZGVMb2FkaW5nOmZ1bmN0aW9uKCl7bS51bmJpbmQoIi5sb2FkaW5nIik7ZigiI2ZhbmN5Ym94LWxvYWRpbmciKS5yZW1vdmUoKX0sc2hvd0xvYWRpbmc6ZnVuY3Rpb24oKXt2YXIgYSxkO2IuaGlkZUxvYWRpbmcoKTthPWYoJzxkaXYgaWQ9ImZhbmN5Ym94LWxvYWRpbmciPjxkaXY+PC9kaXY+PC9kaXY+JykuY2xpY2soYi5jYW5jZWwpLmFwcGVuZFRvKCJib2R5Iik7bS5iaW5kKCJrZXlkb3duLmxvYWRpbmciLGZ1bmN0aW9uKGEpe2lmKDI3PT09KGEud2hpY2h8fGEua2V5Q29kZSkpYS5wcmV2ZW50RGVmYXVsdCgpLGIuY2FuY2VsKCl9KTtiLmRlZmF1bHRzLmZpeGVkfHwoZD1iLmdldFZpZXdwb3J0KCksYS5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOjAuNSpkLmgrZC55LGxlZnQ6MC41KmQudytkLnh9KSl9LGdldFZpZXdwb3J0OmZ1bmN0aW9uKCl7dmFyIGE9Yi5jdXJyZW50JiZiLmN1cnJlbnQubG9ja2VkfHwKITEsZD17eDpyLnNjcm9sbExlZnQoKSx5OnIuc2Nyb2xsVG9wKCl9O2E/KGQudz1hWzBdLmNsaWVudFdpZHRoLGQuaD1hWzBdLmNsaWVudEhlaWdodCk6KGQudz1uJiZCLmlubmVyV2lkdGg/Qi5pbm5lcldpZHRoOnIud2lkdGgoKSxkLmg9biYmQi5pbm5lckhlaWdodD9CLmlubmVySGVpZ2h0OnIuaGVpZ2h0KCkpO3JldHVybiBkfSx1bmJpbmRFdmVudHM6ZnVuY3Rpb24oKXtiLndyYXAmJnMoYi53cmFwKSYmYi53cmFwLnVuYmluZCgiLmZiIik7bS51bmJpbmQoIi5mYiIpO3IudW5iaW5kKCIuZmIiKX0sYmluZEV2ZW50czpmdW5jdGlvbigpe3ZhciBhPWIuY3VycmVudCxkO2EmJihyLmJpbmQoIm9yaWVudGF0aW9uY2hhbmdlLmZiIisobj8iIjoiIHJlc2l6ZS5mYiIpKyhhLmF1dG9DZW50ZXImJiFhLmxvY2tlZD8iIHNjcm9sbC5mYiI6IiIpLGIudXBkYXRlKSwoZD1hLmtleXMpJiZtLmJpbmQoImtleWRvd24uZmIiLGZ1bmN0aW9uKGUpe3ZhciBjPWUud2hpY2h8fGUua2V5Q29kZSxqPQplLnRhcmdldHx8ZS5zcmNFbGVtZW50O2lmKDI3PT09YyYmYi5jb21pbmcpcmV0dXJuITE7IWUuY3RybEtleSYmKCFlLmFsdEtleSYmIWUuc2hpZnRLZXkmJiFlLm1ldGFLZXkmJighanx8IWoudHlwZSYmIWYoaikuaXMoIltjb250ZW50ZWRpdGFibGVdIikpKSYmZi5lYWNoKGQsZnVuY3Rpb24oZCxqKXtpZigxPGEuZ3JvdXAubGVuZ3RoJiZqW2NdIT09cSlyZXR1cm4gYltkXShqW2NdKSxlLnByZXZlbnREZWZhdWx0KCksITE7aWYoLTE8Zi5pbkFycmF5KGMsaikpcmV0dXJuIGJbZF0oKSxlLnByZXZlbnREZWZhdWx0KCksITF9KX0pLGYuZm4ubW91c2V3aGVlbCYmYS5tb3VzZVdoZWVsJiZiLndyYXAuYmluZCgibW91c2V3aGVlbC5mYiIsZnVuY3Rpb24oZCxjLGosZyl7Zm9yKHZhciBoPWYoZC50YXJnZXR8fG51bGwpLGk9ITE7aC5sZW5ndGgmJiFpJiYhaC5pcygiLmZhbmN5Ym94LXNraW4iKSYmIWguaXMoIi5mYW5jeWJveC13cmFwIik7KWk9aFswXSYmIShoWzBdLnN0eWxlLm92ZXJmbG93JiYKImhpZGRlbiI9PT1oWzBdLnN0eWxlLm92ZXJmbG93KSYmKGhbMF0uY2xpZW50V2lkdGgmJmhbMF0uc2Nyb2xsV2lkdGg+aFswXS5jbGllbnRXaWR0aHx8aFswXS5jbGllbnRIZWlnaHQmJmhbMF0uc2Nyb2xsSGVpZ2h0PmhbMF0uY2xpZW50SGVpZ2h0KSxoPWYoaCkucGFyZW50KCk7aWYoMCE9PWMmJiFpJiYxPGIuZ3JvdXAubGVuZ3RoJiYhYS5jYW5TaHJpbmspe2lmKDA8Z3x8MDxqKWIucHJldigwPGc/ImRvd24iOiJsZWZ0Iik7ZWxzZSBpZigwPmd8fDA+ailiLm5leHQoMD5nPyJ1cCI6InJpZ2h0Iik7ZC5wcmV2ZW50RGVmYXVsdCgpfX0pKX0sdHJpZ2dlcjpmdW5jdGlvbihhLGQpe3ZhciBlLGM9ZHx8Yi5jb21pbmd8fGIuY3VycmVudDtpZihjKXtmLmlzRnVuY3Rpb24oY1thXSkmJihlPWNbYV0uYXBwbHkoYyxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkpKTtpZighMT09PWUpcmV0dXJuITE7Yy5oZWxwZXJzJiZmLmVhY2goYy5oZWxwZXJzLGZ1bmN0aW9uKGQsCmUpe2UmJihiLmhlbHBlcnNbZF0mJmYuaXNGdW5jdGlvbihiLmhlbHBlcnNbZF1bYV0pKSYmKGU9Zi5leHRlbmQoITAse30sYi5oZWxwZXJzW2RdLmRlZmF1bHRzLGUpLGIuaGVscGVyc1tkXVthXShlLGMpKX0pO2YuZXZlbnQudHJpZ2dlcihhKyIuZmIiKX19LGlzSW1hZ2U6ZnVuY3Rpb24oYSl7cmV0dXJuIHAoYSkmJmEubWF0Y2goLyheZGF0YTppbWFnZVwvLiosKXwoXC4oanAoZXxnfGVnKXxnaWZ8cG5nfGJtcHx3ZWJwKSgoXD98IykuKik/JCkvaSl9LGlzU1dGOmZ1bmN0aW9uKGEpe3JldHVybiBwKGEpJiZhLm1hdGNoKC9cLihzd2YpKChcP3wjKS4qKT8kL2kpfSxfc3RhcnQ6ZnVuY3Rpb24oYSl7dmFyIGQ9e30sZSxjLGE9ayhhKTtlPWIuZ3JvdXBbYV18fG51bGw7aWYoIWUpcmV0dXJuITE7ZD1mLmV4dGVuZCghMCx7fSxiLm9wdHMsZSk7ZT1kLm1hcmdpbjtjPWQucGFkZGluZzsibnVtYmVyIj09PWYudHlwZShlKSYmKGQubWFyZ2luPVtlLGUsZSxlXSk7Im51bWJlciI9PT1mLnR5cGUoYykmJgooZC5wYWRkaW5nPVtjLGMsYyxjXSk7ZC5tb2RhbCYmZi5leHRlbmQoITAsZCx7Y2xvc2VCdG46ITEsY2xvc2VDbGljazohMSxuZXh0Q2xpY2s6ITEsYXJyb3dzOiExLG1vdXNlV2hlZWw6ITEsa2V5czpudWxsLGhlbHBlcnM6e292ZXJsYXk6e2Nsb3NlQ2xpY2s6ITF9fX0pO2QuYXV0b1NpemUmJihkLmF1dG9XaWR0aD1kLmF1dG9IZWlnaHQ9ITApOyJhdXRvIj09PWQud2lkdGgmJihkLmF1dG9XaWR0aD0hMCk7ImF1dG8iPT09ZC5oZWlnaHQmJihkLmF1dG9IZWlnaHQ9ITApO2QuZ3JvdXA9Yi5ncm91cDtkLmluZGV4PWE7Yi5jb21pbmc9ZDtpZighMT09PWIudHJpZ2dlcigiYmVmb3JlTG9hZCIpKWIuY29taW5nPW51bGw7ZWxzZXtjPWQudHlwZTtlPWQuaHJlZjtpZighYylyZXR1cm4gYi5jb21pbmc9bnVsbCxiLmN1cnJlbnQmJmIucm91dGVyJiYianVtcHRvIiE9PWIucm91dGVyPyhiLmN1cnJlbnQuaW5kZXg9YSxiW2Iucm91dGVyXShiLmRpcmVjdGlvbikpOiExO2IuaXNBY3RpdmU9CiEwO2lmKCJpbWFnZSI9PT1jfHwic3dmIj09PWMpZC5hdXRvSGVpZ2h0PWQuYXV0b1dpZHRoPSExLGQuc2Nyb2xsaW5nPSJ2aXNpYmxlIjsiaW1hZ2UiPT09YyYmKGQuYXNwZWN0UmF0aW89ITApOyJpZnJhbWUiPT09YyYmbiYmKGQuc2Nyb2xsaW5nPSJzY3JvbGwiKTtkLndyYXA9ZihkLnRwbC53cmFwKS5hZGRDbGFzcygiZmFuY3lib3gtIisobj8ibW9iaWxlIjoiZGVza3RvcCIpKyIgZmFuY3lib3gtdHlwZS0iK2MrIiBmYW5jeWJveC10bXAgIitkLndyYXBDU1MpLmFwcGVuZFRvKGQucGFyZW50fHwiYm9keSIpO2YuZXh0ZW5kKGQse3NraW46ZigiLmZhbmN5Ym94LXNraW4iLGQud3JhcCksb3V0ZXI6ZigiLmZhbmN5Ym94LW91dGVyIixkLndyYXApLGlubmVyOmYoIi5mYW5jeWJveC1pbm5lciIsZC53cmFwKX0pO2YuZWFjaChbIlRvcCIsIlJpZ2h0IiwiQm90dG9tIiwiTGVmdCJdLGZ1bmN0aW9uKGEsYil7ZC5za2luLmNzcygicGFkZGluZyIrYix2KGQucGFkZGluZ1thXSkpfSk7Yi50cmlnZ2VyKCJvblJlYWR5Iik7CmlmKCJpbmxpbmUiPT09Y3x8Imh0bWwiPT09Yyl7aWYoIWQuY29udGVudHx8IWQuY29udGVudC5sZW5ndGgpcmV0dXJuIGIuX2Vycm9yKCJjb250ZW50Iil9ZWxzZSBpZighZSlyZXR1cm4gYi5fZXJyb3IoImhyZWYiKTsiaW1hZ2UiPT09Yz9iLl9sb2FkSW1hZ2UoKToiYWpheCI9PT1jP2IuX2xvYWRBamF4KCk6ImlmcmFtZSI9PT1jP2IuX2xvYWRJZnJhbWUoKTpiLl9hZnRlckxvYWQoKX19LF9lcnJvcjpmdW5jdGlvbihhKXtmLmV4dGVuZChiLmNvbWluZyx7dHlwZToiaHRtbCIsYXV0b1dpZHRoOiEwLGF1dG9IZWlnaHQ6ITAsbWluV2lkdGg6MCxtaW5IZWlnaHQ6MCxzY3JvbGxpbmc6Im5vIixoYXNFcnJvcjphLGNvbnRlbnQ6Yi5jb21pbmcudHBsLmVycm9yfSk7Yi5fYWZ0ZXJMb2FkKCl9LF9sb2FkSW1hZ2U6ZnVuY3Rpb24oKXt2YXIgYT1iLmltZ1ByZWxvYWQ9bmV3IEltYWdlO2Eub25sb2FkPWZ1bmN0aW9uKCl7dGhpcy5vbmxvYWQ9dGhpcy5vbmVycm9yPW51bGw7Yi5jb21pbmcud2lkdGg9CnRoaXMud2lkdGg7Yi5jb21pbmcuaGVpZ2h0PXRoaXMuaGVpZ2h0O2IuX2FmdGVyTG9hZCgpfTthLm9uZXJyb3I9ZnVuY3Rpb24oKXt0aGlzLm9ubG9hZD10aGlzLm9uZXJyb3I9bnVsbDtiLl9lcnJvcigiaW1hZ2UiKX07YS5zcmM9Yi5jb21pbmcuaHJlZjshMCE9PWEuY29tcGxldGUmJmIuc2hvd0xvYWRpbmcoKX0sX2xvYWRBamF4OmZ1bmN0aW9uKCl7dmFyIGE9Yi5jb21pbmc7Yi5zaG93TG9hZGluZygpO2IuYWpheExvYWQ9Zi5hamF4KGYuZXh0ZW5kKHt9LGEuYWpheCx7dXJsOmEuaHJlZixlcnJvcjpmdW5jdGlvbihhLGUpe2IuY29taW5nJiYiYWJvcnQiIT09ZT9iLl9lcnJvcigiYWpheCIsYSk6Yi5oaWRlTG9hZGluZygpfSxzdWNjZXNzOmZ1bmN0aW9uKGQsZSl7InN1Y2Nlc3MiPT09ZSYmKGEuY29udGVudD1kLGIuX2FmdGVyTG9hZCgpKX19KSl9LF9sb2FkSWZyYW1lOmZ1bmN0aW9uKCl7dmFyIGE9Yi5jb21pbmcsZD1mKGEudHBsLmlmcmFtZS5yZXBsYWNlKC9ce3JuZFx9L2csCihuZXcgRGF0ZSkuZ2V0VGltZSgpKSkuYXR0cigic2Nyb2xsaW5nIixuPyJhdXRvIjphLmlmcmFtZS5zY3JvbGxpbmcpLmF0dHIoInNyYyIsYS5ocmVmKTtmKGEud3JhcCkuYmluZCgib25SZXNldCIsZnVuY3Rpb24oKXt0cnl7Zih0aGlzKS5maW5kKCJpZnJhbWUiKS5oaWRlKCkuYXR0cigic3JjIiwiLy9hYm91dDpibGFuayIpLmVuZCgpLmVtcHR5KCl9Y2F0Y2goYSl7fX0pO2EuaWZyYW1lLnByZWxvYWQmJihiLnNob3dMb2FkaW5nKCksZC5vbmUoImxvYWQiLGZ1bmN0aW9uKCl7Zih0aGlzKS5kYXRhKCJyZWFkeSIsMSk7bnx8Zih0aGlzKS5iaW5kKCJsb2FkLmZiIixiLnVwZGF0ZSk7Zih0aGlzKS5wYXJlbnRzKCIuZmFuY3lib3gtd3JhcCIpLndpZHRoKCIxMDAlIikucmVtb3ZlQ2xhc3MoImZhbmN5Ym94LXRtcCIpLnNob3coKTtiLl9hZnRlckxvYWQoKX0pKTthLmNvbnRlbnQ9ZC5hcHBlbmRUbyhhLmlubmVyKTthLmlmcmFtZS5wcmVsb2FkfHxiLl9hZnRlckxvYWQoKX0sX3ByZWxvYWRJbWFnZXM6ZnVuY3Rpb24oKXt2YXIgYT0KYi5ncm91cCxkPWIuY3VycmVudCxlPWEubGVuZ3RoLGM9ZC5wcmVsb2FkP01hdGgubWluKGQucHJlbG9hZCxlLTEpOjAsZixnO2ZvcihnPTE7Zzw9YztnKz0xKWY9YVsoZC5pbmRleCtnKSVlXSwiaW1hZ2UiPT09Zi50eXBlJiZmLmhyZWYmJigobmV3IEltYWdlKS5zcmM9Zi5ocmVmKX0sX2FmdGVyTG9hZDpmdW5jdGlvbigpe3ZhciBhPWIuY29taW5nLGQ9Yi5jdXJyZW50LGUsYyxqLGcsaDtiLmhpZGVMb2FkaW5nKCk7aWYoYSYmITEhPT1iLmlzQWN0aXZlKWlmKCExPT09Yi50cmlnZ2VyKCJhZnRlckxvYWQiLGEsZCkpYS53cmFwLnN0b3AoITApLnRyaWdnZXIoIm9uUmVzZXQiKS5yZW1vdmUoKSxiLmNvbWluZz1udWxsO2Vsc2V7ZCYmKGIudHJpZ2dlcigiYmVmb3JlQ2hhbmdlIixkKSxkLndyYXAuc3RvcCghMCkucmVtb3ZlQ2xhc3MoImZhbmN5Ym94LW9wZW5lZCIpLmZpbmQoIi5mYW5jeWJveC1pdGVtLCAuZmFuY3lib3gtbmF2IikucmVtb3ZlKCkpO2IudW5iaW5kRXZlbnRzKCk7CmU9YS5jb250ZW50O2M9YS50eXBlO2o9YS5zY3JvbGxpbmc7Zi5leHRlbmQoYix7d3JhcDphLndyYXAsc2tpbjphLnNraW4sb3V0ZXI6YS5vdXRlcixpbm5lcjphLmlubmVyLGN1cnJlbnQ6YSxwcmV2aW91czpkfSk7Zz1hLmhyZWY7c3dpdGNoKGMpe2Nhc2UgImlubGluZSI6Y2FzZSAiYWpheCI6Y2FzZSAiaHRtbCI6YS5zZWxlY3Rvcj9lPWYoIjxkaXY+IikuaHRtbChlKS5maW5kKGEuc2VsZWN0b3IpOnMoZSkmJihlLmRhdGEoImZhbmN5Ym94LXBsYWNlaG9sZGVyIil8fGUuZGF0YSgiZmFuY3lib3gtcGxhY2Vob2xkZXIiLGYoJzxkaXYgY2xhc3M9ImZhbmN5Ym94LXBsYWNlaG9sZGVyIj48L2Rpdj4nKS5pbnNlcnRBZnRlcihlKS5oaWRlKCkpLGU9ZS5zaG93KCkuZGV0YWNoKCksYS53cmFwLmJpbmQoIm9uUmVzZXQiLGZ1bmN0aW9uKCl7Zih0aGlzKS5maW5kKGUpLmxlbmd0aCYmZS5oaWRlKCkucmVwbGFjZUFsbChlLmRhdGEoImZhbmN5Ym94LXBsYWNlaG9sZGVyIikpLmRhdGEoImZhbmN5Ym94LXBsYWNlaG9sZGVyIiwKITEpfSkpO2JyZWFrO2Nhc2UgImltYWdlIjplPWEudHBsLmltYWdlLnJlcGxhY2UoIntocmVmfSIsZyk7YnJlYWs7Y2FzZSAic3dmIjplPSc8b2JqZWN0IGlkPSJmYW5jeWJveC1zd2YiIGNsYXNzaWQ9ImNsc2lkOkQyN0NEQjZFLUFFNkQtMTFjZi05NkI4LTQ0NDU1MzU0MDAwMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSI+PHBhcmFtIG5hbWU9Im1vdmllIiB2YWx1ZT0iJytnKyciPjwvcGFyYW0+JyxoPSIiLGYuZWFjaChhLnN3ZixmdW5jdGlvbihhLGIpe2UrPSc8cGFyYW0gbmFtZT0iJythKyciIHZhbHVlPSInK2IrJyI+PC9wYXJhbT4nO2grPSIgIithKyc9IicrYisnIid9KSxlKz0nPGVtYmVkIHNyYz0iJytnKyciIHR5cGU9ImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIicraCsiPjwvZW1iZWQ+PC9vYmplY3Q+In0oIXMoZSl8fCFlLnBhcmVudCgpLmlzKGEuaW5uZXIpKSYmYS5pbm5lci5hcHBlbmQoZSk7Yi50cmlnZ2VyKCJiZWZvcmVTaG93Iik7CmEuaW5uZXIuY3NzKCJvdmVyZmxvdyIsInllcyI9PT1qPyJzY3JvbGwiOiJubyI9PT1qPyJoaWRkZW4iOmopO2IuX3NldERpbWVuc2lvbigpO2IucmVwb3NpdGlvbigpO2IuaXNPcGVuPSExO2IuY29taW5nPW51bGw7Yi5iaW5kRXZlbnRzKCk7aWYoYi5pc09wZW5lZCl7aWYoZC5wcmV2TWV0aG9kKWIudHJhbnNpdGlvbnNbZC5wcmV2TWV0aG9kXSgpfWVsc2UgZigiLmZhbmN5Ym94LXdyYXAiKS5ub3QoYS53cmFwKS5zdG9wKCEwKS50cmlnZ2VyKCJvblJlc2V0IikucmVtb3ZlKCk7Yi50cmFuc2l0aW9uc1tiLmlzT3BlbmVkP2EubmV4dE1ldGhvZDphLm9wZW5NZXRob2RdKCk7Yi5fcHJlbG9hZEltYWdlcygpfX0sX3NldERpbWVuc2lvbjpmdW5jdGlvbigpe3ZhciBhPWIuZ2V0Vmlld3BvcnQoKSxkPTAsZT0hMSxjPSExLGU9Yi53cmFwLGo9Yi5za2luLGc9Yi5pbm5lcixoPWIuY3VycmVudCxjPWgud2lkdGgsaT1oLmhlaWdodCxsPWgubWluV2lkdGgsdD1oLm1pbkhlaWdodCxtPWgubWF4V2lkdGgsCm49aC5tYXhIZWlnaHQscj1oLnNjcm9sbGluZyxwPWguc2Nyb2xsT3V0c2lkZT9oLnNjcm9sbGJhcldpZHRoOjAsdz1oLm1hcmdpbix5PWsod1sxXSt3WzNdKSxxPWsod1swXSt3WzJdKSx4LHoscyxDLEEsRixCLEQsdTtlLmFkZChqKS5hZGQoZykud2lkdGgoImF1dG8iKS5oZWlnaHQoImF1dG8iKS5yZW1vdmVDbGFzcygiZmFuY3lib3gtdG1wIik7dz1rKGoub3V0ZXJXaWR0aCghMCktai53aWR0aCgpKTt4PWsoai5vdXRlckhlaWdodCghMCktai5oZWlnaHQoKSk7ej15K3c7cz1xK3g7Qz1FKGMpPyhhLncteikqayhjKS8xMDA6YztBPUUoaSk/KGEuaC1zKSprKGkpLzEwMDppO2lmKCJpZnJhbWUiPT09aC50eXBlKXtpZih1PWguY29udGVudCxoLmF1dG9IZWlnaHQmJjE9PT11LmRhdGEoInJlYWR5IikpdHJ5e3VbMF0uY29udGVudFdpbmRvdy5kb2N1bWVudC5sb2NhdGlvbiYmKGcud2lkdGgoQykuaGVpZ2h0KDk5OTkpLEY9dS5jb250ZW50cygpLmZpbmQoImJvZHkiKSxwJiZGLmNzcygib3ZlcmZsb3cteCIsCiJoaWRkZW4iKSxBPUYuaGVpZ2h0KCkpfWNhdGNoKEcpe319ZWxzZSBpZihoLmF1dG9XaWR0aHx8aC5hdXRvSGVpZ2h0KWcuYWRkQ2xhc3MoImZhbmN5Ym94LXRtcCIpLGguYXV0b1dpZHRofHxnLndpZHRoKEMpLGguYXV0b0hlaWdodHx8Zy5oZWlnaHQoQSksaC5hdXRvV2lkdGgmJihDPWcud2lkdGgoKSksaC5hdXRvSGVpZ2h0JiYoQT1nLmhlaWdodCgpKSxnLnJlbW92ZUNsYXNzKCJmYW5jeWJveC10bXAiKTtjPWsoQyk7aT1rKEEpO0Q9Qy9BO2w9ayhFKGwpP2sobCwidyIpLXo6bCk7bT1rKEUobSk/ayhtLCJ3IiktejptKTt0PWsoRSh0KT9rKHQsImgiKS1zOnQpO249ayhFKG4pP2sobiwiaCIpLXM6bik7Rj1tO0I9bjtoLmZpdFRvVmlldyYmKG09TWF0aC5taW4oYS53LXosbSksbj1NYXRoLm1pbihhLmgtcyxuKSk7ej1hLncteTtxPWEuaC1xO2guYXNwZWN0UmF0aW8/KGM+bSYmKGM9bSxpPWsoYy9EKSksaT5uJiYoaT1uLGM9ayhpKkQpKSxjPGwmJihjPWwsaT1rKGMvRCkpLGk8dCYmCihpPXQsYz1rKGkqRCkpKTooYz1NYXRoLm1heChsLE1hdGgubWluKGMsbSkpLGguYXV0b0hlaWdodCYmImlmcmFtZSIhPT1oLnR5cGUmJihnLndpZHRoKGMpLGk9Zy5oZWlnaHQoKSksaT1NYXRoLm1heCh0LE1hdGgubWluKGksbikpKTtpZihoLmZpdFRvVmlldylpZihnLndpZHRoKGMpLmhlaWdodChpKSxlLndpZHRoKGMrdyksYT1lLndpZHRoKCkseT1lLmhlaWdodCgpLGguYXNwZWN0UmF0aW8pZm9yKDsoYT56fHx5PnEpJiYoYz5sJiZpPnQpJiYhKDE5PGQrKyk7KWk9TWF0aC5tYXgodCxNYXRoLm1pbihuLGktMTApKSxjPWsoaSpEKSxjPGwmJihjPWwsaT1rKGMvRCkpLGM+bSYmKGM9bSxpPWsoYy9EKSksZy53aWR0aChjKS5oZWlnaHQoaSksZS53aWR0aChjK3cpLGE9ZS53aWR0aCgpLHk9ZS5oZWlnaHQoKTtlbHNlIGM9TWF0aC5tYXgobCxNYXRoLm1pbihjLGMtKGEteikpKSxpPU1hdGgubWF4KHQsTWF0aC5taW4oaSxpLSh5LXEpKSk7cCYmKCJhdXRvIj09PXImJmk8QSYmYyt3KwpwPHopJiYoYys9cCk7Zy53aWR0aChjKS5oZWlnaHQoaSk7ZS53aWR0aChjK3cpO2E9ZS53aWR0aCgpO3k9ZS5oZWlnaHQoKTtlPShhPnp8fHk+cSkmJmM+bCYmaT50O2M9aC5hc3BlY3RSYXRpbz9jPEYmJmk8QiYmYzxDJiZpPEE6KGM8Rnx8aTxCKSYmKGM8Q3x8aTxBKTtmLmV4dGVuZChoLHtkaW06e3dpZHRoOnYoYSksaGVpZ2h0OnYoeSl9LG9yaWdXaWR0aDpDLG9yaWdIZWlnaHQ6QSxjYW5TaHJpbms6ZSxjYW5FeHBhbmQ6Yyx3UGFkZGluZzp3LGhQYWRkaW5nOngsd3JhcFNwYWNlOnktai5vdXRlckhlaWdodCghMCksc2tpblNwYWNlOmouaGVpZ2h0KCktaX0pOyF1JiYoaC5hdXRvSGVpZ2h0JiZpPnQmJmk8biYmIWMpJiZnLmhlaWdodCgiYXV0byIpfSxfZ2V0UG9zaXRpb246ZnVuY3Rpb24oYSl7dmFyIGQ9Yi5jdXJyZW50LGU9Yi5nZXRWaWV3cG9ydCgpLGM9ZC5tYXJnaW4sZj1iLndyYXAud2lkdGgoKStjWzFdK2NbM10sZz1iLndyYXAuaGVpZ2h0KCkrY1swXStjWzJdLGM9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsCnRvcDpjWzBdLGxlZnQ6Y1szXX07ZC5hdXRvQ2VudGVyJiZkLmZpeGVkJiYhYSYmZzw9ZS5oJiZmPD1lLnc/Yy5wb3NpdGlvbj0iZml4ZWQiOmQubG9ja2VkfHwoYy50b3ArPWUueSxjLmxlZnQrPWUueCk7Yy50b3A9dihNYXRoLm1heChjLnRvcCxjLnRvcCsoZS5oLWcpKmQudG9wUmF0aW8pKTtjLmxlZnQ9dihNYXRoLm1heChjLmxlZnQsYy5sZWZ0KyhlLnctZikqZC5sZWZ0UmF0aW8pKTtyZXR1cm4gY30sX2FmdGVyWm9vbUluOmZ1bmN0aW9uKCl7dmFyIGE9Yi5jdXJyZW50O2EmJihiLmlzT3Blbj1iLmlzT3BlbmVkPSEwLGIud3JhcC5jc3MoIm92ZXJmbG93IiwidmlzaWJsZSIpLmFkZENsYXNzKCJmYW5jeWJveC1vcGVuZWQiKSxiLnVwZGF0ZSgpLChhLmNsb3NlQ2xpY2t8fGEubmV4dENsaWNrJiYxPGIuZ3JvdXAubGVuZ3RoKSYmYi5pbm5lci5jc3MoImN1cnNvciIsInBvaW50ZXIiKS5iaW5kKCJjbGljay5mYiIsZnVuY3Rpb24oZCl7IWYoZC50YXJnZXQpLmlzKCJhIikmJiFmKGQudGFyZ2V0KS5wYXJlbnQoKS5pcygiYSIpJiYKKGQucHJldmVudERlZmF1bHQoKSxiW2EuY2xvc2VDbGljaz8iY2xvc2UiOiJuZXh0Il0oKSl9KSxhLmNsb3NlQnRuJiZmKGEudHBsLmNsb3NlQnRuKS5hcHBlbmRUbyhiLnNraW4pLmJpbmQobj8idG91Y2hzdGFydC5mYiI6ImNsaWNrLmZiIixmdW5jdGlvbihhKXthLnByZXZlbnREZWZhdWx0KCk7Yi5jbG9zZSgpfSksYS5hcnJvd3MmJjE8Yi5ncm91cC5sZW5ndGgmJigoYS5sb29wfHwwPGEuaW5kZXgpJiZmKGEudHBsLnByZXYpLmFwcGVuZFRvKGIub3V0ZXIpLmJpbmQoImNsaWNrLmZiIixiLnByZXYpLChhLmxvb3B8fGEuaW5kZXg8Yi5ncm91cC5sZW5ndGgtMSkmJmYoYS50cGwubmV4dCkuYXBwZW5kVG8oYi5vdXRlcikuYmluZCgiY2xpY2suZmIiLGIubmV4dCkpLGIudHJpZ2dlcigiYWZ0ZXJTaG93IiksIWEubG9vcCYmYS5pbmRleD09PWEuZ3JvdXAubGVuZ3RoLTE/Yi5wbGF5KCExKTpiLm9wdHMuYXV0b1BsYXkmJiFiLnBsYXllci5pc0FjdGl2ZSYmKGIub3B0cy5hdXRvUGxheT0KITEsYi5wbGF5KCkpKX0sX2FmdGVyWm9vbU91dDpmdW5jdGlvbihhKXthPWF8fGIuY3VycmVudDtmKCIuZmFuY3lib3gtd3JhcCIpLnRyaWdnZXIoIm9uUmVzZXQiKS5yZW1vdmUoKTtmLmV4dGVuZChiLHtncm91cDp7fSxvcHRzOnt9LHJvdXRlcjohMSxjdXJyZW50Om51bGwsaXNBY3RpdmU6ITEsaXNPcGVuZWQ6ITEsaXNPcGVuOiExLGlzQ2xvc2luZzohMSx3cmFwOm51bGwsc2tpbjpudWxsLG91dGVyOm51bGwsaW5uZXI6bnVsbH0pO2IudHJpZ2dlcigiYWZ0ZXJDbG9zZSIsYSl9fSk7Yi50cmFuc2l0aW9ucz17Z2V0T3JpZ1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGE9Yi5jdXJyZW50LGQ9YS5lbGVtZW50LGU9YS5vcmlnLGM9e30sZj01MCxnPTUwLGg9YS5oUGFkZGluZyxpPWEud1BhZGRpbmcsbD1iLmdldFZpZXdwb3J0KCk7IWUmJihhLmlzRG9tJiZkLmlzKCI6dmlzaWJsZSIpKSYmKGU9ZC5maW5kKCJpbWc6Zmlyc3QiKSxlLmxlbmd0aHx8KGU9ZCkpO3MoZSk/KGM9ZS5vZmZzZXQoKSwKZS5pcygiaW1nIikmJihmPWUub3V0ZXJXaWR0aCgpLGc9ZS5vdXRlckhlaWdodCgpKSk6KGMudG9wPWwueSsobC5oLWcpKmEudG9wUmF0aW8sYy5sZWZ0PWwueCsobC53LWYpKmEubGVmdFJhdGlvKTtpZigiZml4ZWQiPT09Yi53cmFwLmNzcygicG9zaXRpb24iKXx8YS5sb2NrZWQpYy50b3AtPWwueSxjLmxlZnQtPWwueDtyZXR1cm4gYz17dG9wOnYoYy50b3AtaCphLnRvcFJhdGlvKSxsZWZ0OnYoYy5sZWZ0LWkqYS5sZWZ0UmF0aW8pLHdpZHRoOnYoZitpKSxoZWlnaHQ6dihnK2gpfX0sc3RlcDpmdW5jdGlvbihhLGQpe3ZhciBlLGMsZj1kLnByb3A7Yz1iLmN1cnJlbnQ7dmFyIGc9Yy53cmFwU3BhY2UsaD1jLnNraW5TcGFjZTtpZigid2lkdGgiPT09Znx8ImhlaWdodCI9PT1mKWU9ZC5lbmQ9PT1kLnN0YXJ0PzE6KGEtZC5zdGFydCkvKGQuZW5kLWQuc3RhcnQpLGIuaXNDbG9zaW5nJiYoZT0xLWUpLGM9IndpZHRoIj09PWY/Yy53UGFkZGluZzpjLmhQYWRkaW5nLGM9YS1jLGIuc2tpbltmXShrKCJ3aWR0aCI9PT0KZj9jOmMtZyplKSksYi5pbm5lcltmXShrKCJ3aWR0aCI9PT1mP2M6Yy1nKmUtaCplKSl9LHpvb21JbjpmdW5jdGlvbigpe3ZhciBhPWIuY3VycmVudCxkPWEucG9zLGU9YS5vcGVuRWZmZWN0LGM9ImVsYXN0aWMiPT09ZSxqPWYuZXh0ZW5kKHtvcGFjaXR5OjF9LGQpO2RlbGV0ZSBqLnBvc2l0aW9uO2M/KGQ9dGhpcy5nZXRPcmlnUG9zaXRpb24oKSxhLm9wZW5PcGFjaXR5JiYoZC5vcGFjaXR5PTAuMSkpOiJmYWRlIj09PWUmJihkLm9wYWNpdHk9MC4xKTtiLndyYXAuY3NzKGQpLmFuaW1hdGUoaix7ZHVyYXRpb246Im5vbmUiPT09ZT8wOmEub3BlblNwZWVkLGVhc2luZzphLm9wZW5FYXNpbmcsc3RlcDpjP3RoaXMuc3RlcDpudWxsLGNvbXBsZXRlOmIuX2FmdGVyWm9vbUlufSl9LHpvb21PdXQ6ZnVuY3Rpb24oKXt2YXIgYT1iLmN1cnJlbnQsZD1hLmNsb3NlRWZmZWN0LGU9ImVsYXN0aWMiPT09ZCxjPXtvcGFjaXR5OjAuMX07ZSYmKGM9dGhpcy5nZXRPcmlnUG9zaXRpb24oKSxhLmNsb3NlT3BhY2l0eSYmCihjLm9wYWNpdHk9MC4xKSk7Yi53cmFwLmFuaW1hdGUoYyx7ZHVyYXRpb246Im5vbmUiPT09ZD8wOmEuY2xvc2VTcGVlZCxlYXNpbmc6YS5jbG9zZUVhc2luZyxzdGVwOmU/dGhpcy5zdGVwOm51bGwsY29tcGxldGU6Yi5fYWZ0ZXJab29tT3V0fSl9LGNoYW5nZUluOmZ1bmN0aW9uKCl7dmFyIGE9Yi5jdXJyZW50LGQ9YS5uZXh0RWZmZWN0LGU9YS5wb3MsYz17b3BhY2l0eToxfSxmPWIuZGlyZWN0aW9uLGc7ZS5vcGFjaXR5PTAuMTsiZWxhc3RpYyI9PT1kJiYoZz0iZG93biI9PT1mfHwidXAiPT09Zj8idG9wIjoibGVmdCIsImRvd24iPT09Znx8InJpZ2h0Ij09PWY/KGVbZ109dihrKGVbZ10pLTIwMCksY1tnXT0iKz0yMDBweCIpOihlW2ddPXYoayhlW2ddKSsyMDApLGNbZ109Ii09MjAwcHgiKSk7Im5vbmUiPT09ZD9iLl9hZnRlclpvb21JbigpOmIud3JhcC5jc3MoZSkuYW5pbWF0ZShjLHtkdXJhdGlvbjphLm5leHRTcGVlZCxlYXNpbmc6YS5uZXh0RWFzaW5nLGNvbXBsZXRlOmZ1bmN0aW9uKCl7c2V0VGltZW91dChiLl9hZnRlclpvb21JbiwKMjApfX0pfSxjaGFuZ2VPdXQ6ZnVuY3Rpb24oKXt2YXIgYT1iLnByZXZpb3VzLGQ9YS5wcmV2RWZmZWN0LGU9e29wYWNpdHk6MC4xfSxjPWIuZGlyZWN0aW9uOyJlbGFzdGljIj09PWQmJihlWyJkb3duIj09PWN8fCJ1cCI9PT1jPyJ0b3AiOiJsZWZ0Il09KCJ1cCI9PT1jfHwibGVmdCI9PT1jPyItIjoiKyIpKyI9MjAwcHgiKTthLndyYXAuYW5pbWF0ZShlLHtkdXJhdGlvbjoibm9uZSI9PT1kPzA6YS5wcmV2U3BlZWQsZWFzaW5nOmEucHJldkVhc2luZyxjb21wbGV0ZTpmdW5jdGlvbigpe2YodGhpcykudHJpZ2dlcigib25SZXNldCIpLnJlbW92ZSgpfX0pfX07Yi5oZWxwZXJzLm92ZXJsYXk9e2RlZmF1bHRzOntjbG9zZUNsaWNrOiEwLHNwZWVkT3V0OjIwMCxzaG93RWFybHk6ITAsY3NzOnt9LGxvY2tlZDohbixmaXhlZDohMH0sb3ZlcmxheTpudWxsLGZpeGVkOiExLGNyZWF0ZTpmdW5jdGlvbihhKXthPWYuZXh0ZW5kKHt9LHRoaXMuZGVmYXVsdHMsYSk7dGhpcy5vdmVybGF5JiZ0aGlzLmNsb3NlKCk7CnRoaXMub3ZlcmxheT1mKCc8ZGl2IGNsYXNzPSJmYW5jeWJveC1vdmVybGF5Ij48L2Rpdj4nKS5hcHBlbmRUbygiYm9keSIpO3RoaXMuZml4ZWQ9ITE7YS5maXhlZCYmYi5kZWZhdWx0cy5maXhlZCYmKHRoaXMub3ZlcmxheS5hZGRDbGFzcygiZmFuY3lib3gtb3ZlcmxheS1maXhlZCIpLHRoaXMuZml4ZWQ9ITApfSxvcGVuOmZ1bmN0aW9uKGEpe3ZhciBkPXRoaXMsYT1mLmV4dGVuZCh7fSx0aGlzLmRlZmF1bHRzLGEpO3RoaXMub3ZlcmxheT90aGlzLm92ZXJsYXkudW5iaW5kKCIub3ZlcmxheSIpLndpZHRoKCJhdXRvIikuaGVpZ2h0KCJhdXRvIik6dGhpcy5jcmVhdGUoYSk7dGhpcy5maXhlZHx8KHIuYmluZCgicmVzaXplLm92ZXJsYXkiLGYucHJveHkodGhpcy51cGRhdGUsdGhpcykpLHRoaXMudXBkYXRlKCkpO2EuY2xvc2VDbGljayYmdGhpcy5vdmVybGF5LmJpbmQoImNsaWNrLm92ZXJsYXkiLGZ1bmN0aW9uKGEpe2YoYS50YXJnZXQpLmhhc0NsYXNzKCJmYW5jeWJveC1vdmVybGF5IikmJgooYi5pc0FjdGl2ZT9iLmNsb3NlKCk6ZC5jbG9zZSgpKX0pO3RoaXMub3ZlcmxheS5jc3MoYS5jc3MpLnNob3coKX0sY2xvc2U6ZnVuY3Rpb24oKXtmKCIuZmFuY3lib3gtb3ZlcmxheSIpLnJlbW92ZSgpO3IudW5iaW5kKCJyZXNpemUub3ZlcmxheSIpO3RoaXMub3ZlcmxheT1udWxsOyExIT09dGhpcy5tYXJnaW4mJihmKCJib2R5IikuY3NzKCJtYXJnaW4tcmlnaHQiLHRoaXMubWFyZ2luKSx0aGlzLm1hcmdpbj0hMSk7dGhpcy5lbCYmdGhpcy5lbC5yZW1vdmVDbGFzcygiZmFuY3lib3gtbG9jayIpfSx1cGRhdGU6ZnVuY3Rpb24oKXt2YXIgYT0iMTAwJSIsYjt0aGlzLm92ZXJsYXkud2lkdGgoYSkuaGVpZ2h0KCIxMDAlIik7Zi5icm93c2VyLm1zaWU/KGI9TWF0aC5tYXgoeC5kb2N1bWVudEVsZW1lbnQub2Zmc2V0V2lkdGgseC5ib2R5Lm9mZnNldFdpZHRoKSxtLndpZHRoKCk+YiYmKGE9bS53aWR0aCgpKSk6bS53aWR0aCgpPnIud2lkdGgoKSYmKGE9bS53aWR0aCgpKTt0aGlzLm92ZXJsYXkud2lkdGgoYSkuaGVpZ2h0KG0uaGVpZ2h0KCkpfSwKb25SZWFkeTpmdW5jdGlvbihhLGIpe2YoIi5mYW5jeWJveC1vdmVybGF5Iikuc3RvcCghMCwhMCk7dGhpcy5vdmVybGF5fHwodGhpcy5tYXJnaW49bS5oZWlnaHQoKT5yLmhlaWdodCgpfHwic2Nyb2xsIj09PWYoImJvZHkiKS5jc3MoIm92ZXJmbG93LXkiKT9mKCJib2R5IikuY3NzKCJtYXJnaW4tcmlnaHQiKTohMSx0aGlzLmVsPXguYWxsJiYheC5xdWVyeVNlbGVjdG9yP2YoImh0bWwiKTpmKCJib2R5IiksdGhpcy5jcmVhdGUoYSkpO2EubG9ja2VkJiZ0aGlzLmZpeGVkJiYoYi5sb2NrZWQ9dGhpcy5vdmVybGF5LmFwcGVuZChiLndyYXApLGIuZml4ZWQ9ITEpOyEwPT09YS5zaG93RWFybHkmJnRoaXMuYmVmb3JlU2hvdy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGJlZm9yZVNob3c6ZnVuY3Rpb24oYSxiKXtiLmxvY2tlZCYmKHRoaXMuZWwuYWRkQ2xhc3MoImZhbmN5Ym94LWxvY2siKSwhMSE9PXRoaXMubWFyZ2luJiZmKCJib2R5IikuY3NzKCJtYXJnaW4tcmlnaHQiLGsodGhpcy5tYXJnaW4pKwpiLnNjcm9sbGJhcldpZHRoKSk7dGhpcy5vcGVuKGEpfSxvblVwZGF0ZTpmdW5jdGlvbigpe3RoaXMuZml4ZWR8fHRoaXMudXBkYXRlKCl9LGFmdGVyQ2xvc2U6ZnVuY3Rpb24oYSl7dGhpcy5vdmVybGF5JiYhYi5pc0FjdGl2ZSYmdGhpcy5vdmVybGF5LmZhZGVPdXQoYS5zcGVlZE91dCxmLnByb3h5KHRoaXMuY2xvc2UsdGhpcykpfX07Yi5oZWxwZXJzLnRpdGxlPXtkZWZhdWx0czp7dHlwZToiZmxvYXQiLHBvc2l0aW9uOiJib3R0b20ifSxiZWZvcmVTaG93OmZ1bmN0aW9uKGEpe3ZhciBkPWIuY3VycmVudCxlPWQudGl0bGUsYz1hLnR5cGU7Zi5pc0Z1bmN0aW9uKGUpJiYoZT1lLmNhbGwoZC5lbGVtZW50LGQpKTtpZihwKGUpJiYiIiE9PWYudHJpbShlKSl7ZD1mKCc8ZGl2IGNsYXNzPSJmYW5jeWJveC10aXRsZSBmYW5jeWJveC10aXRsZS0nK2MrJy13cmFwIj4nK2UrIjwvZGl2PiIpO3N3aXRjaChjKXtjYXNlICJpbnNpZGUiOmM9Yi5za2luO2JyZWFrO2Nhc2UgIm91dHNpZGUiOmM9CmIud3JhcDticmVhaztjYXNlICJvdmVyIjpjPWIuaW5uZXI7YnJlYWs7ZGVmYXVsdDpjPWIuc2tpbixkLmFwcGVuZFRvKCJib2R5IiksZi5icm93c2VyLm1zaWUmJmQud2lkdGgoZC53aWR0aCgpKSxkLndyYXBJbm5lcignPHNwYW4gY2xhc3M9ImNoaWxkIj48L3NwYW4+JyksYi5jdXJyZW50Lm1hcmdpblsyXSs9TWF0aC5hYnMoayhkLmNzcygibWFyZ2luLWJvdHRvbSIpKSl9ZFsidG9wIj09PWEucG9zaXRpb24/InByZXBlbmRUbyI6ImFwcGVuZFRvIl0oYyl9fX07Zi5mbi5mYW5jeWJveD1mdW5jdGlvbihhKXt2YXIgZCxlPWYodGhpcyksYz10aGlzLnNlbGVjdG9yfHwiIixqPWZ1bmN0aW9uKGcpe3ZhciBoPWYodGhpcykuYmx1cigpLGk9ZCxqLGs7IWcuY3RybEtleSYmKCFnLmFsdEtleSYmIWcuc2hpZnRLZXkmJiFnLm1ldGFLZXkpJiYhaC5pcygiLmZhbmN5Ym94LXdyYXAiKSYmKGo9YS5ncm91cEF0dHJ8fCJkYXRhLWZhbmN5Ym94LWdyb3VwIixrPWguYXR0cihqKSxrfHwoaj0icmVsIiwKaz1oLmdldCgwKVtqXSksayYmKCIiIT09ayYmIm5vZm9sbG93IiE9PWspJiYoaD1jLmxlbmd0aD9mKGMpOmUsaD1oLmZpbHRlcigiWyIraisnPSInK2srJyJdJyksaT1oLmluZGV4KHRoaXMpKSxhLmluZGV4PWksITEhPT1iLm9wZW4oaCxhKSYmZy5wcmV2ZW50RGVmYXVsdCgpKX0sYT1hfHx7fTtkPWEuaW5kZXh8fDA7IWN8fCExPT09YS5saXZlP2UudW5iaW5kKCJjbGljay5mYi1zdGFydCIpLmJpbmQoImNsaWNrLmZiLXN0YXJ0IixqKTptLnVuZGVsZWdhdGUoYywiY2xpY2suZmItc3RhcnQiKS5kZWxlZ2F0ZShjKyI6bm90KCcuZmFuY3lib3gtaXRlbSwgLmZhbmN5Ym94LW5hdicpIiwiY2xpY2suZmItc3RhcnQiLGopO3RoaXMuZmlsdGVyKCJbZGF0YS1mYW5jeWJveC1zdGFydD0xXSIpLnRyaWdnZXIoImNsaWNrIik7cmV0dXJuIHRoaXN9O20ucmVhZHkoZnVuY3Rpb24oKXtmLnNjcm9sbGJhcldpZHRoPT09cSYmKGYuc2Nyb2xsYmFyV2lkdGg9ZnVuY3Rpb24oKXt2YXIgYT1mKCc8ZGl2IHN0eWxlPSJ3aWR0aDo1MHB4O2hlaWdodDo1MHB4O292ZXJmbG93OmF1dG8iPjxkaXYvPjwvZGl2PicpLmFwcGVuZFRvKCJib2R5IiksCmI9YS5jaGlsZHJlbigpLGI9Yi5pbm5lcldpZHRoKCktYi5oZWlnaHQoOTkpLmlubmVyV2lkdGgoKTthLnJlbW92ZSgpO3JldHVybiBifSk7aWYoZi5zdXBwb3J0LmZpeGVkUG9zaXRpb249PT1xKXt2YXIgYT1mLnN1cHBvcnQsZD1mKCc8ZGl2IHN0eWxlPSJwb3NpdGlvbjpmaXhlZDt0b3A6MjBweDsiPjwvZGl2PicpLmFwcGVuZFRvKCJib2R5IiksZT0yMD09PWRbMF0ub2Zmc2V0VG9wfHwxNT09PWRbMF0ub2Zmc2V0VG9wO2QucmVtb3ZlKCk7YS5maXhlZFBvc2l0aW9uPWV9Zi5leHRlbmQoYi5kZWZhdWx0cyx7c2Nyb2xsYmFyV2lkdGg6Zi5zY3JvbGxiYXJXaWR0aCgpLGZpeGVkOmYuc3VwcG9ydC5maXhlZFBvc2l0aW9uLHBhcmVudDpmKCJib2R5Iil9KX0pfSkod2luZG93LGRvY3VtZW50LGpRdWVyeSk7Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/js/Jcrop.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhCAAIAJEAAKqqqv///wAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQJCgAAACwAAAAACAAIAAACDZQFCadrzVRMB9FZ5SwAIfkECQoAAAAsAAAAAAgACAAAAg+ELqCYaudeW9ChyOyltQAAIfkECQoAAAAsAAAAAAgACAAAAg8EhGKXm+rQYtC0WGl9oAAAIfkECQoAAAAsAAAAAAgACAAAAg+EhWKQernaYmjCWLF7qAAAIfkECQoAAAAsAAAAAAgACAAAAg2EISmna81UTAfRWeUsACH5BAkKAAAALAAAAAAIAAgAAAIPFA6imGrnXlvQocjspbUAACH5BAkKAAAALAAAAAAIAAgAAAIPlIBgl5vq0GLQtFhpfaIAACH5BAUKAAAALAAAAAAIAAgAAAIPlIFgknq52mJowlixe6gAADs=]]></data>
	</file>
	<file>
	  <filename>/lib/js/jquery.color.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKICogalF1ZXJ5IENvbG9yIEFuaW1hdGlvbnMKICogQ29weXJpZ2h0IDIwMDcgSm9obiBSZXNpZwogKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGFuZCBHUEwgbGljZW5zZXMuCiAqLwoKKGZ1bmN0aW9uKGpRdWVyeSl7CgoJLy8gV2Ugb3ZlcnJpZGUgdGhlIGFuaW1hdGlvbiBmb3IgYWxsIG9mIHRoZXNlIGNvbG9yIHN0eWxlcwoJalF1ZXJ5LmVhY2goWydiYWNrZ3JvdW5kQ29sb3InLCAnYm9yZGVyQm90dG9tQ29sb3InLCAnYm9yZGVyTGVmdENvbG9yJywgJ2JvcmRlclJpZ2h0Q29sb3InLCAnYm9yZGVyVG9wQ29sb3InLCAnY29sb3InLCAnb3V0bGluZUNvbG9yJ10sIGZ1bmN0aW9uKGksYXR0cil7CgkJalF1ZXJ5LmZ4LnN0ZXBbYXR0cl0gPSBmdW5jdGlvbihmeCl7CgkJCWlmICggZnguc3RhdGUgPT0gMCApIHsKCQkJCWZ4LnN0YXJ0ID0gZ2V0Q29sb3IoIGZ4LmVsZW0sIGF0dHIgKTsKCQkJCWZ4LmVuZCA9IGdldFJHQiggZnguZW5kICk7CgkJCX0KCgkJCWZ4LmVsZW0uc3R5bGVbYXR0cl0gPSAicmdiKCIgKyBbCgkJCQlNYXRoLm1heChNYXRoLm1pbiggcGFyc2VJbnQoKGZ4LnBvcyAqIChmeC5lbmRbMF0gLSBmeC5zdGFydFswXSkpICsgZnguc3RhcnRbMF0pLCAyNTUpLCAwKSwKCQkJCU1hdGgubWF4KE1hdGgubWluKCBwYXJzZUludCgoZngucG9zICogKGZ4LmVuZFsxXSAtIGZ4LnN0YXJ0WzFdKSkgKyBmeC5zdGFydFsxXSksIDI1NSksIDApLAoJCQkJTWF0aC5tYXgoTWF0aC5taW4oIHBhcnNlSW50KChmeC5wb3MgKiAoZnguZW5kWzJdIC0gZnguc3RhcnRbMl0pKSArIGZ4LnN0YXJ0WzJdKSwgMjU1KSwgMCkKCQkJXS5qb2luKCIsIikgKyAiKSI7CgkJfQoJfSk7CgoJLy8gQ29sb3IgQ29udmVyc2lvbiBmdW5jdGlvbnMgZnJvbSBoaWdobGlnaHRGYWRlCgkvLyBCeSBCbGFpciBNaXRjaGVsbW9yZQoJLy8gaHR0cDovL2pxdWVyeS5vZmZwdXQuY2EvaGlnaGxpZ2h0RmFkZS8KCgkvLyBQYXJzZSBzdHJpbmdzIGxvb2tpbmcgZm9yIGNvbG9yIHR1cGxlcyBbMjU1LDI1NSwyNTVdCglmdW5jdGlvbiBnZXRSR0IoY29sb3IpIHsKCQl2YXIgcmVzdWx0OwoKCQkvLyBDaGVjayBpZiB3ZSdyZSBhbHJlYWR5IGRlYWxpbmcgd2l0aCBhbiBhcnJheSBvZiBjb2xvcnMKCQlpZiAoIGNvbG9yICYmIGNvbG9yLmNvbnN0cnVjdG9yID09IEFycmF5ICYmIGNvbG9yLmxlbmd0aCA9PSAzICkKCQkJcmV0dXJuIGNvbG9yOwoKCQkvLyBMb29rIGZvciByZ2IobnVtLG51bSxudW0pCgkJaWYgKHJlc3VsdCA9IC9yZ2JcKFxzKihbMC05XXsxLDN9KVxzKixccyooWzAtOV17MSwzfSlccyosXHMqKFswLTldezEsM30pXHMqXCkvLmV4ZWMoY29sb3IpKQoJCQlyZXR1cm4gW3BhcnNlSW50KHJlc3VsdFsxXSksIHBhcnNlSW50KHJlc3VsdFsyXSksIHBhcnNlSW50KHJlc3VsdFszXSldOwoKCQkvLyBMb29rIGZvciByZ2IobnVtJSxudW0lLG51bSUpCgkJaWYgKHJlc3VsdCA9IC9yZ2JcKFxzKihbMC05XSsoPzpcLlswLTldKyk/KVwlXHMqLFxzKihbMC05XSsoPzpcLlswLTldKyk/KVwlXHMqLFxzKihbMC05XSsoPzpcLlswLTldKyk/KVwlXHMqXCkvLmV4ZWMoY29sb3IpKQoJCQlyZXR1cm4gW3BhcnNlRmxvYXQocmVzdWx0WzFdKSoyLjU1LCBwYXJzZUZsb2F0KHJlc3VsdFsyXSkqMi41NSwgcGFyc2VGbG9hdChyZXN1bHRbM10pKjIuNTVdOwoKCQkvLyBMb29rIGZvciAjYTBiMWMyCgkJaWYgKHJlc3VsdCA9IC8jKFthLWZBLUYwLTldezJ9KShbYS1mQS1GMC05XXsyfSkoW2EtZkEtRjAtOV17Mn0pLy5leGVjKGNvbG9yKSkKCQkJcmV0dXJuIFtwYXJzZUludChyZXN1bHRbMV0sMTYpLCBwYXJzZUludChyZXN1bHRbMl0sMTYpLCBwYXJzZUludChyZXN1bHRbM10sMTYpXTsKCgkJLy8gTG9vayBmb3IgI2ZmZgoJCWlmIChyZXN1bHQgPSAvIyhbYS1mQS1GMC05XSkoW2EtZkEtRjAtOV0pKFthLWZBLUYwLTldKS8uZXhlYyhjb2xvcikpCgkJCXJldHVybiBbcGFyc2VJbnQocmVzdWx0WzFdK3Jlc3VsdFsxXSwxNiksIHBhcnNlSW50KHJlc3VsdFsyXStyZXN1bHRbMl0sMTYpLCBwYXJzZUludChyZXN1bHRbM10rcmVzdWx0WzNdLDE2KV07CgoJCS8vIE90aGVyd2lzZSwgd2UncmUgbW9zdCBsaWtlbHkgZGVhbGluZyB3aXRoIGEgbmFtZWQgY29sb3IKCQlyZXR1cm4gY29sb3JzW2pRdWVyeS50cmltKGNvbG9yKS50b0xvd2VyQ2FzZSgpXTsKCX0KCQoJZnVuY3Rpb24gZ2V0Q29sb3IoZWxlbSwgYXR0cikgewoJCXZhciBjb2xvcjsKCgkJZG8gewoJCQljb2xvciA9IGpRdWVyeS5jdXJDU1MoZWxlbSwgYXR0cik7CgoJCQkvLyBLZWVwIGdvaW5nIHVudGlsIHdlIGZpbmQgYW4gZWxlbWVudCB0aGF0IGhhcyBjb2xvciwgb3Igd2UgaGl0IHRoZSBib2R5CgkJCWlmICggY29sb3IgIT0gJycgJiYgY29sb3IgIT0gJ3RyYW5zcGFyZW50JyB8fCBqUXVlcnkubm9kZU5hbWUoZWxlbSwgImJvZHkiKSApCgkJCQlicmVhazsgCgoJCQlhdHRyID0gImJhY2tncm91bmRDb2xvciI7CgkJfSB3aGlsZSAoIGVsZW0gPSBlbGVtLnBhcmVudE5vZGUgKTsKCgkJcmV0dXJuIGdldFJHQihjb2xvcik7Cgl9OwoJCgkvLyBTb21lIG5hbWVkIGNvbG9ycyB0byB3b3JrIHdpdGgKCS8vIEZyb20gSW50ZXJmYWNlIGJ5IFN0ZWZhbiBQZXRyZQoJLy8gaHR0cDovL2ludGVyZmFjZS5leWVjb24ucm8vCgoJdmFyIGNvbG9ycyA9IHsKCQlhcXVhOlswLDI1NSwyNTVdLAoJCWF6dXJlOlsyNDAsMjU1LDI1NV0sCgkJYmVpZ2U6WzI0NSwyNDUsMjIwXSwKCQlibGFjazpbMCwwLDBdLAoJCWJsdWU6WzAsMCwyNTVdLAoJCWJyb3duOlsxNjUsNDIsNDJdLAoJCWN5YW46WzAsMjU1LDI1NV0sCgkJZGFya2JsdWU6WzAsMCwxMzldLAoJCWRhcmtjeWFuOlswLDEzOSwxMzldLAoJCWRhcmtncmV5OlsxNjksMTY5LDE2OV0sCgkJZGFya2dyZWVuOlswLDEwMCwwXSwKCQlkYXJra2hha2k6WzE4OSwxODMsMTA3XSwKCQlkYXJrbWFnZW50YTpbMTM5LDAsMTM5XSwKCQlkYXJrb2xpdmVncmVlbjpbODUsMTA3LDQ3XSwKCQlkYXJrb3JhbmdlOlsyNTUsMTQwLDBdLAoJCWRhcmtvcmNoaWQ6WzE1Myw1MCwyMDRdLAoJCWRhcmtyZWQ6WzEzOSwwLDBdLAoJCWRhcmtzYWxtb246WzIzMywxNTAsMTIyXSwKCQlkYXJrdmlvbGV0OlsxNDgsMCwyMTFdLAoJCWZ1Y2hzaWE6WzI1NSwwLDI1NV0sCgkJZ29sZDpbMjU1LDIxNSwwXSwKCQlncmVlbjpbMCwxMjgsMF0sCgkJaW5kaWdvOls3NSwwLDEzMF0sCgkJa2hha2k6WzI0MCwyMzAsMTQwXSwKCQlsaWdodGJsdWU6WzE3MywyMTYsMjMwXSwKCQlsaWdodGN5YW46WzIyNCwyNTUsMjU1XSwKCQlsaWdodGdyZWVuOlsxNDQsMjM4LDE0NF0sCgkJbGlnaHRncmV5OlsyMTEsMjExLDIxMV0sCgkJbGlnaHRwaW5rOlsyNTUsMTgyLDE5M10sCgkJbGlnaHR5ZWxsb3c6WzI1NSwyNTUsMjI0XSwKCQlsaW1lOlswLDI1NSwwXSwKCQltYWdlbnRhOlsyNTUsMCwyNTVdLAoJCW1hcm9vbjpbMTI4LDAsMF0sCgkJbmF2eTpbMCwwLDEyOF0sCgkJb2xpdmU6WzEyOCwxMjgsMF0sCgkJb3JhbmdlOlsyNTUsMTY1LDBdLAoJCXBpbms6WzI1NSwxOTIsMjAzXSwKCQlwdXJwbGU6WzEyOCwwLDEyOF0sCgkJdmlvbGV0OlsxMjgsMCwxMjhdLAoJCXJlZDpbMjU1LDAsMF0sCgkJc2lsdmVyOlsxOTIsMTkyLDE5Ml0sCgkJd2hpdGU6WzI1NSwyNTUsMjU1XSwKCQl5ZWxsb3c6WzI1NSwyNTUsMF0KCX07CgkKfSkoalF1ZXJ5KTsK]]></data>
	</file>
	<file>
	  <filename>/lib/js/jquery.Jcrop.action.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[CQkgalF1ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7DQoJCQkgalF1ZXJ5KCIjYWJzb2x1dGVTdWJtaXQiKS5oaWRlKCk7DQoJCQkgLy9zZXQgdmFycw0KCQkJIHZhciB2aWV3cG9ydHdpZHRoOw0KCQkJIHZhciB2aWV3cG9ydGhlaWdodDsNCgkJCSANCgkJCSANCgkJCSAvL29wZW4gZmFuY3lib3gNCgkJCSBqUXVlcnkuZmFuY3lib3goew0KCSAgICAgICAgICAgICAgICAnY29udGVudCcgOiBqUXVlcnkoIi5hcnRpY2xlIikuaHRtbCgpLA0KCSAgICAgICAgICAgICAgICAnb25Db21wbGV0ZSc6IGNhbGxpbnRlcnZhbCgpLA0KCSAgICAgICAgICAgICAgICAnc2Nyb2xsaW5nJyAgIDogJ25vJywNCgkgICAgICAgICAgICAgICAgY2xvc2VDbGljayAgOiBmYWxzZSwNCgkgICAgICAgICAgICAgICAgaGVscGVycyAgIDogeyANCgkgICAgICAgICAgICAgICAgIG92ZXJsYXkgOiB7Y2xvc2VDbGljazogZmFsc2V9DQoJICAgICAgICAgICAgICAgIH0NCgkgICAgICAgICB9KTsNCgkJCSANCgkJCSB2YXIgeGE7DQoJCQkgLy9zZXQgaW50ZXJ2YWwNCgkJCSBmdW5jdGlvbiBjYWxsaW50ZXJ2YWwoKXsNCgkJCQkgeGEgPSBzZXRJbnRlcnZhbChjYWxsSmNyb3AsNTAwKTsJICANCgkJCSB9DQoJCQkJIA0KCQkJIC8vY2FsbCBKY3JvcA0KCQkJIGZ1bmN0aW9uIGNhbGxKY3JvcCgpew0KCQkJCQkgLy9nZXQgZmFuY3lib3ggd2lkdGggYW5kIGhlaWdodA0KCQkJCQkgdmlld3BvcnR3aWR0aCA9IGpRdWVyeSgiLmZhbmN5Ym94LWlubmVyIikud2lkdGgoKTsNCgkJCQkgICAgIHZpZXdwb3J0aGVpZ2h0ID0galF1ZXJ5KCIuZmFuY3lib3gtaW5uZXIiKS5oZWlnaHQoKTsNCgkJCQkJIA0KCQkJCSAgICAgLy9jYWxsIGpjcm9wIHNjcmlwdA0KCQkJCSAgICAgalF1ZXJ5KCcuZmFuY3lib3gtaW5uZXIgI2Nyb3Bib3gnKS5KY3JvcCh7DQoJCQkJCQkgYXNwZWN0UmF0aW86IHdpZHRoL2hlaWdodCwNCgkJCQkJCSBvblNlbGVjdDogdXBkYXRlQ29vcmRzLA0KCQkJCQkJIGJveFdpZHRoOiB2aWV3cG9ydHdpZHRoLA0KCQkJCQkJIGJveEhlaWdodDogdmlld3BvcnRoZWlnaHQsDQoJCQkJCQkgbWluU2l6ZTogW3dpZHRoLCBoZWlnaHRdDQoJCQkJCSB9KTsNCgkJCQkgICAgIA0KCQkJCSAgICAgLy9lbXB0eSBodG1sDQoJCQkJICAgICBqUXVlcnkoIiNlZGl0SW1hZ2VTZXR0aW5ncyIpLmh0bWwoIiIpOw0KCQkJCQkgLy9jbGVhciBpbnRlcnZhbA0KCQkJCQkgY2xlYXJJbnRlcnZhbCh4YSk7DQoJCQkgfTsNCgkJCSANCgkJCSAvL2NvbWJpbmUgY2xvc2UgY2xpY2sgd2l0aCBzdWJtaXQgY2xpY2sNCgkJCSBqUXVlcnkoImEuZmFuY3lib3gtY2xvc2UiKS5saXZlKCJjbGljayIsIGZ1bmN0aW9uKCl7DQoJCQkJIGpRdWVyeSgiI20xX2NhbmNlbCIpLmNsaWNrKCk7DQoJCQkgfSk7DQoJCQkgDQoJCQkgLy91cGRhdGUgY29vcmRpbmF0ZXMgYW5kIGZpbGwgaW4gdGhlIGhpZGRlbiBpbnB1dHMNCgkJCSBmdW5jdGlvbiB1cGRhdGVDb29yZHMoYykgewkJCQkNCgkJCQkgalF1ZXJ5KCIuZmFuY3lib3gtaW5uZXIgI2Fic29sdXRlU3VibWl0Iikuc2hvdygpOw0KCQkJCSBqUXVlcnkoJy5mYW5jeWJveC1pbm5lciAjbTFfeCcpLnZhbChjLngpOw0KCQkJCSBqUXVlcnkoJy5mYW5jeWJveC1pbm5lciAjbTFfeScpLnZhbChjLnkpOw0KCQkJCSBqUXVlcnkoJy5mYW5jeWJveC1pbm5lciAjbTFfdycpLnZhbChjLncpOw0KCQkJCSBqUXVlcnkoJy5mYW5jeWJveC1pbm5lciAjbTFfaCcpLnZhbChjLmgpOw0KCQkJIH07DQoJCQkgDQoJCSB9KTsJCQkg]]></data>
	</file>
	<file>
	  <filename>/lib/js/jquery.Jcrop.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoganF1ZXJ5Lkpjcm9wLmNzcyB2MC45LjEwIC0gTUlUIExpY2Vuc2UgKi8KCi8qCiAgVGhlIG91dGVyLW1vc3QgY29udGFpbmVyIGluIGEgdHlwaWNhbCBKY3JvcCBpbnN0YW5jZQogIElmIHlvdSBhcmUgaGF2aW5nIGRpZmZpY3VsdHkgd2l0aCBmb3JtYXR0aW5nIHJlbGF0ZWQgdG8gc3R5bGVzCiAgb24gYSBwYXJlbnQgZWxlbWVudCwgcGxhY2UgYW55IGZpeGVzIGhlcmUgb3IgaW4gYSBsaWtlIHNlbGVjdG9yCgogIFlvdSBjYW4gYWxzbyBzdHlsZSB0aGlzIGVsZW1lbnQgaWYgeW91IHdhbnQgdG8gYWRkIGEgYm9yZGVyLCBldGMKICBBIGJldHRlciBtZXRob2QgZm9yIHN0eWxpbmcgY2FuIGJlIHNlZW4gYmVsb3cgd2l0aCAuamNyb3AtbGlnaHQKICAoQWRkIGEgY2xhc3MgdG8gdGhlIGhvbGRlciBhbmQgc3R5bGUgZWxlbWVudHMgZm9yIHRoYXQgZXh0ZW5kZWQgY2xhc3MpCiovCi5qY3JvcC1ob2xkZXIgewogIGRpcmVjdGlvbjogbHRyOwogIHRleHQtYWxpZ246IGxlZnQ7Cn0KCi8qIFRoZXNlIHN0eWxlcyBkZWZpbmUgdGhlIGJvcmRlciBsaW5lcyAqLwouamNyb3AtdmxpbmUsLmpjcm9wLWhsaW5le2JhY2tncm91bmQ6I0ZGRiB1cmwoSmNyb3AuZ2lmKSB0b3AgbGVmdCByZXBlYXQ7Zm9udC1zaXplOjA7cG9zaXRpb246YWJzb2x1dGU7fQouamNyb3AtdmxpbmV7aGVpZ2h0OjEwMCU7d2lkdGg6MXB4IWltcG9ydGFudDt9Ci5qY3JvcC1obGluZXtoZWlnaHQ6MXB4IWltcG9ydGFudDt3aWR0aDoxMDAlO30KLmpjcm9wLXZsaW5lLnJpZ2h0e3JpZ2h0OjA7fQouamNyb3AtaGxpbmUuYm90dG9te2JvdHRvbTowO30KI2Fic29sdXRlU3VibWl0IHsKCWJvdHRvbTogMjVweDsgICAgCiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICByaWdodDogMjVweDsKICAgIHotaW5kZXg6IDIxNDc0ODM2NDc7CQp9CgovKiBIYW5kbGUgc3R5bGUgLSBzaXplIGlzIHNldCBieSBKY3JvcCBoYW5kbGVTaXplIG9wdGlvbiAoY3VycmVudGx5KSAqLwouamNyb3AtaGFuZGxle2JhY2tncm91bmQtY29sb3I6IzMzMztib3JkZXI6MXB4ICNlZWUgc29saWQ7Zm9udC1zaXplOjFweDt9CgovKiBUaGlzIHN0eWxlIGlzIHVzZWQgZm9yIGludmlzaWJsZSBjbGljayB0YXJnZXRzICovCi5qY3JvcC10cmFja2VyCnsKICBoZWlnaHQ6IDEwMCU7IAogIHdpZHRoOiAxMDAlOwogIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7IC8qICJ0dXJuIG9mZiIgbGluayBoaWdobGlnaHQgKi8KICAtd2Via2l0LXRvdWNoLWNhbGxvdXQ6IG5vbmU7ICAgICAgICAgICAgICAvKiBkaXNhYmxlIGNhbGxvdXQsIGltYWdlIHNhdmUgcGFuZWwgKi8KICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOyAgICAgICAgICAgICAgICAvKiBkaXNhYmxlIGN1dCBjb3B5IHBhc3RlICovCn0KCi8qIFBvc2l0aW9uaW5nIG9mIGhhbmRsZXMgYW5kIGRyYWcgYmFycyAqLwouamNyb3AtaGFuZGxlLm9yZC1ue2xlZnQ6NTAlO21hcmdpbi1sZWZ0Oi00cHg7bWFyZ2luLXRvcDotNHB4O3RvcDowO30KLmpjcm9wLWhhbmRsZS5vcmQtc3tib3R0b206MDtsZWZ0OjUwJTttYXJnaW4tYm90dG9tOi00cHg7bWFyZ2luLWxlZnQ6LTRweDt9Ci5qY3JvcC1oYW5kbGUub3JkLWV7bWFyZ2luLXJpZ2h0Oi00cHg7bWFyZ2luLXRvcDotNHB4O3JpZ2h0OjA7dG9wOjUwJTt9Ci5qY3JvcC1oYW5kbGUub3JkLXd7bGVmdDowO21hcmdpbi1sZWZ0Oi00cHg7bWFyZ2luLXRvcDotNHB4O3RvcDo1MCU7fQouamNyb3AtaGFuZGxlLm9yZC1ud3tsZWZ0OjA7bWFyZ2luLWxlZnQ6LTRweDttYXJnaW4tdG9wOi00cHg7dG9wOjA7fQouamNyb3AtaGFuZGxlLm9yZC1uZXttYXJnaW4tcmlnaHQ6LTRweDttYXJnaW4tdG9wOi00cHg7cmlnaHQ6MDt0b3A6MDt9Ci5qY3JvcC1oYW5kbGUub3JkLXNle2JvdHRvbTowO21hcmdpbi1ib3R0b206LTRweDttYXJnaW4tcmlnaHQ6LTRweDtyaWdodDowO30KLmpjcm9wLWhhbmRsZS5vcmQtc3d7Ym90dG9tOjA7bGVmdDowO21hcmdpbi1ib3R0b206LTRweDttYXJnaW4tbGVmdDotNHB4O30KLmpjcm9wLWRyYWdiYXIub3JkLW4sLmpjcm9wLWRyYWdiYXIub3JkLXN7aGVpZ2h0OjdweDt3aWR0aDoxMDAlO30KLmpjcm9wLWRyYWdiYXIub3JkLWUsLmpjcm9wLWRyYWdiYXIub3JkLXd7aGVpZ2h0OjEwMCU7d2lkdGg6N3B4O30KLmpjcm9wLWRyYWdiYXIub3JkLW57bWFyZ2luLXRvcDotNHB4O30KLmpjcm9wLWRyYWdiYXIub3JkLXN7Ym90dG9tOjA7bWFyZ2luLWJvdHRvbTotNHB4O30KLmpjcm9wLWRyYWdiYXIub3JkLWV7bWFyZ2luLXJpZ2h0Oi00cHg7cmlnaHQ6MDt9Ci5qY3JvcC1kcmFnYmFyLm9yZC13e21hcmdpbi1sZWZ0Oi00cHg7fQoKLyogVGhlICJqY3JvcC1saWdodCIgY2xhc3MvZXh0ZW5zaW9uICovCi5qY3JvcC1saWdodCAuamNyb3AtdmxpbmUsLmpjcm9wLWxpZ2h0IC5qY3JvcC1obGluZQp7CgliYWNrZ3JvdW5kOiNGRkY7CglmaWx0ZXI6QWxwaGEob3BhY2l0eT03MCkhaW1wb3J0YW50OwoJb3BhY2l0eTouNzAhaW1wb3J0YW50Owp9Ci5qY3JvcC1saWdodCAuamNyb3AtaGFuZGxlCnsKCS1tb3otYm9yZGVyLXJhZGl1czozcHg7Cgktd2Via2l0LWJvcmRlci1yYWRpdXM6M3B4OwoJYmFja2dyb3VuZC1jb2xvcjojMDAwOwoJYm9yZGVyLWNvbG9yOiNGRkY7Cglib3JkZXItcmFkaXVzOjNweDsKfQoKLyogVGhlICJqY3JvcC1kYXJrIiBjbGFzcy9leHRlbnNpb24gKi8KLmpjcm9wLWRhcmsgLmpjcm9wLXZsaW5lLC5qY3JvcC1kYXJrIC5qY3JvcC1obGluZQp7CgliYWNrZ3JvdW5kOiMwMDA7CglmaWx0ZXI6QWxwaGEob3BhY2l0eT03MCkhaW1wb3J0YW50OwoJb3BhY2l0eTouNyFpbXBvcnRhbnQ7Cn0KLmpjcm9wLWRhcmsgLmpjcm9wLWhhbmRsZQp7CgktbW96LWJvcmRlci1yYWRpdXM6M3B4OwoJLXdlYmtpdC1ib3JkZXItcmFkaXVzOjNweDsKCWJhY2tncm91bmQtY29sb3I6I0ZGRjsKCWJvcmRlci1jb2xvcjojMDAwOwoJYm9yZGVyLXJhZGl1czozcHg7Cn0KCi8qIEZpeCBmb3IgdHdpdHRlciBib290c3RyYXAgZXQgYWwuICovCi5qY3JvcC1ob2xkZXIgaW1nLGltZy5qY3JvcC1wcmV2aWV3eyBtYXgtd2lkdGg6IG5vbmU7IH0K]]></data>
	</file>
	<file>
	  <filename>/lib/js/jquery.Jcrop.function.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ICAgIGpRdWVyeShmdW5jdGlvbihqUXVlcnkpew0KDQogICAgICAvLyBDcmVhdGUgdmFyaWFibGVzIChpbiB0aGlzIHNjb3BlKSB0byBob2xkIHRoZSBBUEkgYW5kIGltYWdlIHNpemUNCiAgICAgIHZhciBqY3JvcF9hcGksIGJvdW5keCwgYm91bmR5Ow0KICAgICAgDQogICAgICBqUXVlcnkoJyN0YXJnZXQnKS5KY3JvcCh7DQogICAgICAgIG9uQ2hhbmdlOiB1cGRhdGVQcmV2aWV3LA0KICAgICAgICBvblNlbGVjdDogdXBkYXRlUHJldmlldywNCiAgICAgICAgYXNwZWN0UmF0aW86IDENCiAgICAgIH0sZnVuY3Rpb24oKXsNCiAgICAgICAgLy8gVXNlIHRoZSBBUEkgdG8gZ2V0IHRoZSByZWFsIGltYWdlIHNpemUNCiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0Qm91bmRzKCk7DQogICAgICAgIGJvdW5keCA9IGJvdW5kc1swXTsNCiAgICAgICAgYm91bmR5ID0gYm91bmRzWzFdOw0KICAgICAgICAvLyBTdG9yZSB0aGUgQVBJIGluIHRoZSBqY3JvcF9hcGkgdmFyaWFibGUNCiAgICAgICAgamNyb3BfYXBpID0gdGhpczsNCiAgICAgIH0pOw0KDQogICAgICBmdW5jdGlvbiB1cGRhdGVQcmV2aWV3KGMpDQogICAgICB7DQogICAgICAgIGlmIChwYXJzZUludChjLncpID4gMCkNCiAgICAgICAgew0KICAgICAgICAgIHZhciByeCA9IDEwMCAvIGMudzsNCiAgICAgICAgICB2YXIgcnkgPSAxMDAgLyBjLmg7DQoNCiAgICAgICAgICBqUXVlcnkoJyNwcmV2aWV3JykuY3NzKHsNCiAgICAgICAgICAgIHdpZHRoOiBNYXRoLnJvdW5kKHJ4ICogYm91bmR4KSArICdweCcsDQogICAgICAgICAgICBoZWlnaHQ6IE1hdGgucm91bmQocnkgKiBib3VuZHkpICsgJ3B4JywNCiAgICAgICAgICAgIG1hcmdpbkxlZnQ6ICctJyArIE1hdGgucm91bmQocnggKiBjLngpICsgJ3B4JywNCiAgICAgICAgICAgIG1hcmdpblRvcDogJy0nICsgTWF0aC5yb3VuZChyeSAqIGMueSkgKyAncHgnDQogICAgICAgICAgfSk7DQogICAgICAgIH0NCiAgICAgIH07DQoNCiAgICB9KTs=]]></data>
	</file>
	<file>
	  <filename>/lib/js/jquery.Jcrop.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIGpxdWVyeS5KY3JvcC5qcyB2MC45LjEwCiAqIGpRdWVyeSBJbWFnZSBDcm9wcGluZyBQbHVnaW4gLSByZWxlYXNlZCB1bmRlciBNSVQgTGljZW5zZSAKICogQXV0aG9yOiBLZWxseSBIYWxsbWFuIDxraGFsbG1hbkBnbWFpbC5jb20+CiAqIGh0dHA6Ly9naXRodWIuY29tL3RhcG1vZG8vSmNyb3AKICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIgVGFwbW9kbyBJbnRlcmFjdGl2ZSBMTEMge3t7CiAqCiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uCiAqIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCiAqIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKICogcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsCiAqIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQogKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZwogKiBjb25kaXRpb25zOgogKgogKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQogKiBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KICoKICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCiAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUwogKiBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAogKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAogKiBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKICogV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCiAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogKgogKiB9fX0KICovCgooZnVuY3Rpb24gKGpRdWVyeSkgewoKICBqUXVlcnkuSmNyb3AgPSBmdW5jdGlvbiAob2JqLCBvcHQpIHsKICAgIHZhciBvcHRpb25zID0galF1ZXJ5LmV4dGVuZCh7fSwgalF1ZXJ5Lkpjcm9wLmRlZmF1bHRzKSwKICAgICAgICBkb2NPZmZzZXQsIGxhc3RjdXJzLCBpZTZtb2RlID0gZmFsc2U7CgogICAgLy8gSW50ZXJuYWwgTWV0aG9kcyB7e3sKICAgIGZ1bmN0aW9uIHB4KG4pIHsKICAgICAgcmV0dXJuIG4gKyAncHgnOwogICAgfQogICAgZnVuY3Rpb24gY3NzQ2xhc3MoY2wpIHsKICAgICAgcmV0dXJuIG9wdGlvbnMuYmFzZUNsYXNzICsgJy0nICsgY2w7CiAgICB9CiAgICBmdW5jdGlvbiBzdXBwb3J0c0NvbG9yRmFkZSgpIHsKICAgICAgcmV0dXJuIGpRdWVyeS5meC5zdGVwLmhhc093blByb3BlcnR5KCdiYWNrZ3JvdW5kQ29sb3InKTsKICAgIH0KICAgIGZ1bmN0aW9uIGdldFBvcyhvYmopIC8ve3t7CiAgICB7CiAgICAgIHZhciBwb3MgPSBqUXVlcnkob2JqKS5vZmZzZXQoKTsKICAgICAgcmV0dXJuIFtwb3MubGVmdCwgcG9zLnRvcF07CiAgICB9CiAgICAvL319fQogICAgZnVuY3Rpb24gbW91c2VBYnMoZSkgLy97e3sKICAgIHsKICAgICAgcmV0dXJuIFsoZS5wYWdlWCAtIGRvY09mZnNldFswXSksIChlLnBhZ2VZIC0gZG9jT2Zmc2V0WzFdKV07CiAgICB9CiAgICAvL319fQogICAgZnVuY3Rpb24gc2V0T3B0aW9ucyhvcHQpIC8ve3t7CiAgICB7CiAgICAgIGlmICh0eXBlb2Yob3B0KSAhPT0gJ29iamVjdCcpIG9wdCA9IHt9OwogICAgICBvcHRpb25zID0galF1ZXJ5LmV4dGVuZChvcHRpb25zLCBvcHQpOwoKICAgICAgalF1ZXJ5LmVhY2goWydvbkNoYW5nZScsJ29uU2VsZWN0Jywnb25SZWxlYXNlJywnb25EYmxDbGljayddLGZ1bmN0aW9uKGksZSkgewogICAgICAgIGlmICh0eXBlb2Yob3B0aW9uc1tlXSkgIT09ICdmdW5jdGlvbicpIG9wdGlvbnNbZV0gPSBmdW5jdGlvbiAoKSB7fTsKICAgICAgfSk7CiAgICB9CiAgICAvL319fQogICAgZnVuY3Rpb24gc3RhcnREcmFnTW9kZShtb2RlLCBwb3MpIC8ve3t7CiAgICB7CiAgICAgIGRvY09mZnNldCA9IGdldFBvcyhqUXVlcnlpbWcpOwogICAgICBUcmFja2VyLnNldEN1cnNvcihtb2RlID09PSAnbW92ZScgPyBtb2RlIDogbW9kZSArICctcmVzaXplJyk7CgogICAgICBpZiAobW9kZSA9PT0gJ21vdmUnKSB7CiAgICAgICAgcmV0dXJuIFRyYWNrZXIuYWN0aXZhdGVIYW5kbGVycyhjcmVhdGVNb3Zlcihwb3MpLCBkb25lU2VsZWN0KTsKICAgICAgfQoKICAgICAgdmFyIGZjID0gQ29vcmRzLmdldEZpeGVkKCk7CiAgICAgIHZhciBvcHAgPSBvcHBMb2NrQ29ybmVyKG1vZGUpOwogICAgICB2YXIgb3BjID0gQ29vcmRzLmdldENvcm5lcihvcHBMb2NrQ29ybmVyKG9wcCkpOwoKICAgICAgQ29vcmRzLnNldFByZXNzZWQoQ29vcmRzLmdldENvcm5lcihvcHApKTsKICAgICAgQ29vcmRzLnNldEN1cnJlbnQob3BjKTsKCiAgICAgIFRyYWNrZXIuYWN0aXZhdGVIYW5kbGVycyhkcmFnbW9kZUhhbmRsZXIobW9kZSwgZmMpLCBkb25lU2VsZWN0KTsKICAgIH0KICAgIC8vfX19CiAgICBmdW5jdGlvbiBkcmFnbW9kZUhhbmRsZXIobW9kZSwgZikgLy97e3sKICAgIHsKICAgICAgcmV0dXJuIGZ1bmN0aW9uIChwb3MpIHsKICAgICAgICBpZiAoIW9wdGlvbnMuYXNwZWN0UmF0aW8pIHsKICAgICAgICAgIHN3aXRjaCAobW9kZSkgewogICAgICAgICAgY2FzZSAnZSc6CiAgICAgICAgICAgIHBvc1sxXSA9IGYueTI7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAndyc6CiAgICAgICAgICAgIHBvc1sxXSA9IGYueTI7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAnbic6CiAgICAgICAgICAgIHBvc1swXSA9IGYueDI7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAncyc6CiAgICAgICAgICAgIHBvc1swXSA9IGYueDI7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzd2l0Y2ggKG1vZGUpIHsKICAgICAgICAgIGNhc2UgJ2UnOgogICAgICAgICAgICBwb3NbMV0gPSBmLnkgKyAxOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgJ3cnOgogICAgICAgICAgICBwb3NbMV0gPSBmLnkgKyAxOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgJ24nOgogICAgICAgICAgICBwb3NbMF0gPSBmLnggKyAxOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgJ3MnOgogICAgICAgICAgICBwb3NbMF0gPSBmLnggKyAxOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgQ29vcmRzLnNldEN1cnJlbnQocG9zKTsKICAgICAgICBTZWxlY3Rpb24udXBkYXRlKCk7CiAgICAgIH07CiAgICB9CiAgICAvL319fQogICAgZnVuY3Rpb24gY3JlYXRlTW92ZXIocG9zKSAvL3t7ewogICAgewogICAgICB2YXIgbGxvYyA9IHBvczsKICAgICAgS2V5TWFuYWdlci53YXRjaEtleXMoKTsKCiAgICAgIHJldHVybiBmdW5jdGlvbiAocG9zKSB7CiAgICAgICAgQ29vcmRzLm1vdmVPZmZzZXQoW3Bvc1swXSAtIGxsb2NbMF0sIHBvc1sxXSAtIGxsb2NbMV1dKTsKICAgICAgICBsbG9jID0gcG9zOwoKICAgICAgICBTZWxlY3Rpb24udXBkYXRlKCk7CiAgICAgIH07CiAgICB9CiAgICAvL319fQogICAgZnVuY3Rpb24gb3BwTG9ja0Nvcm5lcihvcmQpIC8ve3t7CiAgICB7CiAgICAgIHN3aXRjaCAob3JkKSB7CiAgICAgIGNhc2UgJ24nOgogICAgICAgIHJldHVybiAnc3cnOwogICAgICBjYXNlICdzJzoKICAgICAgICByZXR1cm4gJ253JzsKICAgICAgY2FzZSAnZSc6CiAgICAgICAgcmV0dXJuICdudyc7CiAgICAgIGNhc2UgJ3cnOgogICAgICAgIHJldHVybiAnbmUnOwogICAgICBjYXNlICduZSc6CiAgICAgICAgcmV0dXJuICdzdyc7CiAgICAgIGNhc2UgJ253JzoKICAgICAgICByZXR1cm4gJ3NlJzsKICAgICAgY2FzZSAnc2UnOgogICAgICAgIHJldHVybiAnbncnOwogICAgICBjYXNlICdzdyc6CiAgICAgICAgcmV0dXJuICduZSc7CiAgICAgIH0KICAgIH0KICAgIC8vfX19CiAgICBmdW5jdGlvbiBjcmVhdGVEcmFnZ2VyKG9yZCkgLy97e3sKICAgIHsKICAgICAgcmV0dXJuIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgaWYgKG9wdGlvbnMuZGlzYWJsZWQpIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgaWYgKChvcmQgPT09ICdtb3ZlJykgJiYgIW9wdGlvbnMuYWxsb3dNb3ZlKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIEZpeCBwb3NpdGlvbiBvZiBjcm9wIGFyZWEgd2hlbiBkcmFnZ2VkIHRoZSB2ZXJ5IGZpcnN0IHRpbWUuCiAgICAgICAgLy8gTmVjZXNzYXJ5IHdoZW4gY3JvcCBpbWFnZSBpcyBpbiBhIGhpZGRlbiBlbGVtZW50IHdoZW4gcGFnZSBpcyBsb2FkZWQuCiAgICAgICAgZG9jT2Zmc2V0ID0gZ2V0UG9zKGpRdWVyeWltZyk7CgogICAgICAgIGJ0bmRvd24gPSB0cnVlOwogICAgICAgIHN0YXJ0RHJhZ01vZGUob3JkLCBtb3VzZUFicyhlKSk7CiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9OwogICAgfQogICAgLy99fX0KICAgIGZ1bmN0aW9uIHByZXNpemUoalF1ZXJ5b2JqLCB3LCBoKSAvL3t7ewogICAgewogICAgICB2YXIgbncgPSBqUXVlcnlvYmoud2lkdGgoKSwKICAgICAgICAgIG5oID0galF1ZXJ5b2JqLmhlaWdodCgpOwogICAgICBpZiAoKG53ID4gdykgJiYgdyA+IDApIHsKICAgICAgICBudyA9IHc7CiAgICAgICAgbmggPSAodyAvIGpRdWVyeW9iai53aWR0aCgpKSAqIGpRdWVyeW9iai5oZWlnaHQoKTsKICAgICAgfQogICAgICBpZiAoKG5oID4gaCkgJiYgaCA+IDApIHsKICAgICAgICBuaCA9IGg7CiAgICAgICAgbncgPSAoaCAvIGpRdWVyeW9iai5oZWlnaHQoKSkgKiBqUXVlcnlvYmoud2lkdGgoKTsKICAgICAgfQogICAgICB4c2NhbGUgPSBqUXVlcnlvYmoud2lkdGgoKSAvIG53OwogICAgICB5c2NhbGUgPSBqUXVlcnlvYmouaGVpZ2h0KCkgLyBuaDsKICAgICAgalF1ZXJ5b2JqLndpZHRoKG53KS5oZWlnaHQobmgpOwogICAgfQogICAgLy99fX0KICAgIGZ1bmN0aW9uIHVuc2NhbGUoYykgLy97e3sKICAgIHsKICAgICAgcmV0dXJuIHsKICAgICAgICB4OiBjLnggKiB4c2NhbGUsCiAgICAgICAgeTogYy55ICogeXNjYWxlLAogICAgICAgIHgyOiBjLngyICogeHNjYWxlLAogICAgICAgIHkyOiBjLnkyICogeXNjYWxlLAogICAgICAgIHc6IGMudyAqIHhzY2FsZSwKICAgICAgICBoOiBjLmggKiB5c2NhbGUKICAgICAgfTsKICAgIH0KICAgIC8vfX19CiAgICBmdW5jdGlvbiBkb25lU2VsZWN0KHBvcykgLy97e3sKICAgIHsKICAgICAgdmFyIGMgPSBDb29yZHMuZ2V0Rml4ZWQoKTsKICAgICAgaWYgKChjLncgPiBvcHRpb25zLm1pblNlbGVjdFswXSkgJiYgKGMuaCA+IG9wdGlvbnMubWluU2VsZWN0WzFdKSkgewogICAgICAgIFNlbGVjdGlvbi5lbmFibGVIYW5kbGVzKCk7CiAgICAgICAgU2VsZWN0aW9uLmRvbmUoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBTZWxlY3Rpb24ucmVsZWFzZSgpOwogICAgICB9CiAgICAgIFRyYWNrZXIuc2V0Q3Vyc29yKG9wdGlvbnMuYWxsb3dTZWxlY3QgPyAnY3Jvc3NoYWlyJyA6ICdkZWZhdWx0Jyk7CiAgICB9CiAgICAvL319fQogICAgZnVuY3Rpb24gbmV3U2VsZWN0aW9uKGUpIC8ve3t7CiAgICB7CiAgICAgIGlmIChvcHRpb25zLmRpc2FibGVkKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIGlmICghb3B0aW9ucy5hbGxvd1NlbGVjdCkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBidG5kb3duID0gdHJ1ZTsKICAgICAgZG9jT2Zmc2V0ID0gZ2V0UG9zKGpRdWVyeWltZyk7CiAgICAgIFNlbGVjdGlvbi5kaXNhYmxlSGFuZGxlcygpOwogICAgICBUcmFja2VyLnNldEN1cnNvcignY3Jvc3NoYWlyJyk7CiAgICAgIHZhciBwb3MgPSBtb3VzZUFicyhlKTsKICAgICAgQ29vcmRzLnNldFByZXNzZWQocG9zKTsKICAgICAgU2VsZWN0aW9uLnVwZGF0ZSgpOwogICAgICBUcmFja2VyLmFjdGl2YXRlSGFuZGxlcnMoc2VsZWN0RHJhZywgZG9uZVNlbGVjdCk7CiAgICAgIEtleU1hbmFnZXIud2F0Y2hLZXlzKCk7CgogICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIC8vfX19CiAgICBmdW5jdGlvbiBzZWxlY3REcmFnKHBvcykgLy97e3sKICAgIHsKICAgICAgQ29vcmRzLnNldEN1cnJlbnQocG9zKTsKICAgICAgU2VsZWN0aW9uLnVwZGF0ZSgpOwogICAgfQogICAgLy99fX0KICAgIGZ1bmN0aW9uIG5ld1RyYWNrZXIoKSAvL3t7ewogICAgewogICAgICB2YXIgdHJrID0galF1ZXJ5KCc8ZGl2PjwvZGl2PicpLmFkZENsYXNzKGNzc0NsYXNzKCd0cmFja2VyJykpOwogICAgICBpZiAoalF1ZXJ5LmJyb3dzZXIubXNpZSkgewogICAgICAgIHRyay5jc3MoewogICAgICAgICAgb3BhY2l0eTogMCwKICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3doaXRlJwogICAgICAgIH0pOwogICAgICB9CiAgICAgIHJldHVybiB0cms7CiAgICB9CiAgICAvL319fQoKICAgIC8vIH19fQogICAgLy8gSW5pdGlhbGl6YXRpb24ge3t7CiAgICAvLyBTYW5pdGl6ZSBzb21lIG9wdGlvbnMge3t7CiAgICBpZiAoalF1ZXJ5LmJyb3dzZXIubXNpZSAmJiAoalF1ZXJ5LmJyb3dzZXIudmVyc2lvbi5zcGxpdCgnLicpWzBdID09PSAnNicpKSB7CiAgICAgIGllNm1vZGUgPSB0cnVlOwogICAgfQogICAgaWYgKHR5cGVvZihvYmopICE9PSAnb2JqZWN0JykgewogICAgICBvYmogPSBqUXVlcnkob2JqKVswXTsKICAgIH0KICAgIGlmICh0eXBlb2Yob3B0KSAhPT0gJ29iamVjdCcpIHsKICAgICAgb3B0ID0ge307CiAgICB9CiAgICAvLyB9fX0KICAgIHNldE9wdGlvbnMob3B0KTsKICAgIC8vIEluaXRpYWxpemUgc29tZSBqUXVlcnkgb2JqZWN0cyB7e3sKICAgIC8vIFRoZSB2YWx1ZXMgYXJlIFNFVCBvbiB0aGUgaW1hZ2UocykgZm9yIHRoZSBpbnRlcmZhY2UKICAgIC8vIElmIHRoZSBvcmlnaW5hbCBpbWFnZSBoYXMgYW55IG9mIHRoZXNlIHNldCwgdGhleSB3aWxsIGJlIHJlc2V0CiAgICAvLyBIb3dldmVyLCBpZiB5b3UgZGVzdHJveSgpIHRoZSBKY3JvcCBpbnN0YW5jZSB0aGUgb3JpZ2luYWwgaW1hZ2UncwogICAgLy8gY2hhcmFjdGVyIGluIHRoZSBET00gd2lsbCBiZSBhcyB5b3UgbGVmdCBpdC4KICAgIHZhciBpbWdfY3NzID0gewogICAgICBib3JkZXI6ICdub25lJywKICAgICAgdmlzaWJpbGl0eTogJ3Zpc2libGUnLAogICAgICBtYXJnaW46IDAsCiAgICAgIHBhZGRpbmc6IDAsCiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLAogICAgICB0b3A6IDAsCiAgICAgIGxlZnQ6IDAKICAgIH07CgogICAgdmFyIGpRdWVyeW9yaWdpbWcgPSBqUXVlcnkob2JqKSwKICAgICAgaW1nX21vZGUgPSB0cnVlOwoKICAgIGlmIChvYmoudGFnTmFtZSA9PSAnSU1HJykgewogICAgICAvLyBGaXggc2l6ZSBvZiBjcm9wIGltYWdlLgogICAgICAvLyBOZWNlc3Nhcnkgd2hlbiBjcm9wIGltYWdlIGlzIHdpdGhpbiBhIGhpZGRlbiBlbGVtZW50IHdoZW4gcGFnZSBpcyBsb2FkZWQuCiAgICAgIGlmIChqUXVlcnlvcmlnaW1nWzBdLndpZHRoICE9IDAgJiYgalF1ZXJ5b3JpZ2ltZ1swXS5oZWlnaHQgIT0gMCkgewogICAgICAgIC8vIE9idGFpbiBkaW1lbnNpb25zIGZyb20gY29udGFpbmVkIGltZyBlbGVtZW50LgogICAgICAgIGpRdWVyeW9yaWdpbWcud2lkdGgoalF1ZXJ5b3JpZ2ltZ1swXS53aWR0aCk7CiAgICAgICAgalF1ZXJ5b3JpZ2ltZy5oZWlnaHQoalF1ZXJ5b3JpZ2ltZ1swXS5oZWlnaHQpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIE9idGFpbiBkaW1lbnNpb25zIGZyb20gdGVtcG9yYXJ5IGltYWdlIGluIGNhc2UgdGhlIG9yaWdpbmFsIGlzIG5vdCBsb2FkZWQgeWV0IChlLmcuIElFIDcuMCkuIAogICAgICAgIHZhciB0ZW1wSW1hZ2UgPSBuZXcgSW1hZ2UoKTsKICAgICAgICB0ZW1wSW1hZ2Uuc3JjID0galF1ZXJ5b3JpZ2ltZ1swXS5zcmM7CiAgICAgICAgalF1ZXJ5b3JpZ2ltZy53aWR0aCh0ZW1wSW1hZ2Uud2lkdGgpOwogICAgICAgIGpRdWVyeW9yaWdpbWcuaGVpZ2h0KHRlbXBJbWFnZS5oZWlnaHQpOwogICAgICB9IAoKICAgICAgdmFyIGpRdWVyeWltZyA9IGpRdWVyeW9yaWdpbWcuY2xvbmUoKS5yZW1vdmVBdHRyKCdpZCcpLmNzcyhpbWdfY3NzKS5zaG93KCk7CgogICAgICBqUXVlcnlpbWcud2lkdGgoalF1ZXJ5b3JpZ2ltZy53aWR0aCgpKTsKICAgICAgalF1ZXJ5aW1nLmhlaWdodChqUXVlcnlvcmlnaW1nLmhlaWdodCgpKTsKICAgICAgalF1ZXJ5b3JpZ2ltZy5hZnRlcihqUXVlcnlpbWcpLmhpZGUoKTsKCiAgICB9IGVsc2UgewogICAgICBqUXVlcnlpbWcgPSBqUXVlcnlvcmlnaW1nLmNzcyhpbWdfY3NzKS5zaG93KCk7CiAgICAgIGltZ19tb2RlID0gZmFsc2U7CiAgICAgIGlmIChvcHRpb25zLnNoYWRlID09PSBudWxsKSB7IG9wdGlvbnMuc2hhZGUgPSB0cnVlOyB9CiAgICB9CgogICAgcHJlc2l6ZShqUXVlcnlpbWcsIG9wdGlvbnMuYm94V2lkdGgsIG9wdGlvbnMuYm94SGVpZ2h0KTsKCiAgICB2YXIgYm91bmR4ID0galF1ZXJ5aW1nLndpZHRoKCksCiAgICAgICAgYm91bmR5ID0galF1ZXJ5aW1nLmhlaWdodCgpLAogICAgICAgIAogICAgICAgIAogICAgICAgIGpRdWVyeWRpdiA9IGpRdWVyeSgnPGRpdiAvPicpLndpZHRoKGJvdW5keCkuaGVpZ2h0KGJvdW5keSkuYWRkQ2xhc3MoY3NzQ2xhc3MoJ2hvbGRlcicpKS5jc3MoewogICAgICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLAogICAgICAgIGJhY2tncm91bmRDb2xvcjogb3B0aW9ucy5iZ0NvbG9yCiAgICAgIH0pLmluc2VydEFmdGVyKGpRdWVyeW9yaWdpbWcpLmFwcGVuZChqUXVlcnlpbWcpOwoKICAgIGlmIChvcHRpb25zLmFkZENsYXNzKSB7CiAgICAgIGpRdWVyeWRpdi5hZGRDbGFzcyhvcHRpb25zLmFkZENsYXNzKTsKICAgIH0KCiAgICB2YXIgalF1ZXJ5aW1nMiA9IGpRdWVyeSgnPGRpdiAvPicpLAoKICAgICAgICBqUXVlcnlpbWdfaG9sZGVyID0galF1ZXJ5KCc8ZGl2IC8+JykgCiAgICAgICAgLndpZHRoKCcxMDAlJykuaGVpZ2h0KCcxMDAlJykuY3NzKHsKICAgICAgICAgIHpJbmRleDogMzEwLAogICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsCiAgICAgICAgICBvdmVyZmxvdzogJ2hpZGRlbicKICAgICAgICB9KSwKCiAgICAgICAgalF1ZXJ5aGRsX2hvbGRlciA9IGpRdWVyeSgnPGRpdiAvPicpIAogICAgICAgIC53aWR0aCgnMTAwJScpLmhlaWdodCgnMTAwJScpLmNzcygnekluZGV4JywgMzIwKSwgCgogICAgICAgIGpRdWVyeXNlbCA9IGpRdWVyeSgnPGRpdiAvPicpIAogICAgICAgIC5jc3MoewogICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsCiAgICAgICAgICB6SW5kZXg6IDYwMAogICAgICAgIH0pLmRibGNsaWNrKGZ1bmN0aW9uKCl7CiAgICAgICAgICB2YXIgYyA9IENvb3Jkcy5nZXRGaXhlZCgpOwogICAgICAgICAgb3B0aW9ucy5vbkRibENsaWNrLmNhbGwoYXBpLGMpOwogICAgICAgIH0pLmluc2VydEJlZm9yZShqUXVlcnlpbWcpLmFwcGVuZChqUXVlcnlpbWdfaG9sZGVyLCBqUXVlcnloZGxfaG9sZGVyKTsgCgogICAgaWYgKGltZ19tb2RlKSB7CgogICAgICBqUXVlcnlpbWcyID0galF1ZXJ5KCc8aW1nIC8+JykKICAgICAgICAgIC5hdHRyKCdzcmMnLCBqUXVlcnlpbWcuYXR0cignc3JjJykpLmNzcyhpbWdfY3NzKS53aWR0aChib3VuZHgpLmhlaWdodChib3VuZHkpLAoKICAgICAgalF1ZXJ5aW1nX2hvbGRlci5hcHBlbmQoalF1ZXJ5aW1nMik7CgogICAgfQoKICAgIGlmIChpZTZtb2RlKSB7CiAgICAgIGpRdWVyeXNlbC5jc3MoewogICAgICAgIG92ZXJmbG93WTogJ2hpZGRlbicKICAgICAgfSk7CiAgICB9CgogICAgdmFyIGJvdW5kID0gb3B0aW9ucy5ib3VuZGFyeTsKICAgIHZhciBqUXVlcnl0cmsgPSBuZXdUcmFja2VyKCkud2lkdGgoYm91bmR4ICsgKGJvdW5kICogMikpLmhlaWdodChib3VuZHkgKyAoYm91bmQgKiAyKSkuY3NzKHsKICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsCiAgICAgIHRvcDogcHgoLWJvdW5kKSwKICAgICAgbGVmdDogcHgoLWJvdW5kKSwKICAgICAgekluZGV4OiAyOTAKICAgIH0pLm1vdXNlZG93bihuZXdTZWxlY3Rpb24pOwoKICAgIC8qIH19fSAqLwogICAgLy8gU2V0IG1vcmUgdmFyaWFibGVzIHt7ewogICAgdmFyIGJnY29sb3IgPSBvcHRpb25zLmJnQ29sb3IsCiAgICAgICAgYmdvcGFjaXR5ID0gb3B0aW9ucy5iZ09wYWNpdHksCiAgICAgICAgeGxpbWl0LCB5bGltaXQsIHhtaW4sIHltaW4sIHhzY2FsZSwgeXNjYWxlLCBlbmFibGVkID0gdHJ1ZSwKICAgICAgICBidG5kb3duLCBhbmltYXRpbmcsIHNoaWZ0X2Rvd247CgogICAgZG9jT2Zmc2V0ID0gZ2V0UG9zKGpRdWVyeWltZyk7CiAgICAvLyB9fX0KICAgIC8vIH19fQogICAgLy8gSW50ZXJuYWwgTW9kdWxlcyB7e3sKICAgIC8vIFRvdWNoIE1vZHVsZSB7e3sgCiAgICB2YXIgVG91Y2ggPSAoZnVuY3Rpb24gKCkgewogICAgICAvLyBUb3VjaCBzdXBwb3J0IGRldGVjdGlvbiBmdW5jdGlvbiBhZGFwdGVkICh1bmRlciBNSVQgTGljZW5zZSkKICAgICAgLy8gZnJvbSBjb2RlIGJ5IEplZmZyZXkgU2FtYmVsbHMgLSBodHRwOi8vZ2l0aHViLmNvbS9pYW1hbXVzZWQvCiAgICAgIGZ1bmN0aW9uIGhhc1RvdWNoU3VwcG9ydCgpIHsKICAgICAgICB2YXIgc3VwcG9ydCA9IHt9LAogICAgICAgICAgICBldmVudHMgPSBbJ3RvdWNoc3RhcnQnLCAndG91Y2htb3ZlJywgJ3RvdWNoZW5kJ10sCiAgICAgICAgICAgIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksIGk7CgogICAgICAgIHRyeSB7CiAgICAgICAgICBmb3IoaT0wOyBpPGV2ZW50cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB2YXIgZXZlbnROYW1lID0gZXZlbnRzW2ldOwogICAgICAgICAgICBldmVudE5hbWUgPSAnb24nICsgZXZlbnROYW1lOwogICAgICAgICAgICB2YXIgaXNTdXBwb3J0ZWQgPSAoZXZlbnROYW1lIGluIGVsKTsKICAgICAgICAgICAgaWYgKCFpc1N1cHBvcnRlZCkgewogICAgICAgICAgICAgIGVsLnNldEF0dHJpYnV0ZShldmVudE5hbWUsICdyZXR1cm47Jyk7CiAgICAgICAgICAgICAgaXNTdXBwb3J0ZWQgPSB0eXBlb2YgZWxbZXZlbnROYW1lXSA9PSAnZnVuY3Rpb24nOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHN1cHBvcnRbZXZlbnRzW2ldXSA9IGlzU3VwcG9ydGVkOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHN1cHBvcnQudG91Y2hzdGFydCAmJiBzdXBwb3J0LnRvdWNoZW5kICYmIHN1cHBvcnQudG91Y2htb3ZlOwogICAgICAgIH0KICAgICAgICBjYXRjaChlcnIpIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIGZ1bmN0aW9uIGRldGVjdFN1cHBvcnQoKSB7CiAgICAgICAgaWYgKChvcHRpb25zLnRvdWNoU3VwcG9ydCA9PT0gdHJ1ZSkgfHwgKG9wdGlvbnMudG91Y2hTdXBwb3J0ID09PSBmYWxzZSkpIHJldHVybiBvcHRpb25zLnRvdWNoU3VwcG9ydDsKICAgICAgICAgIGVsc2UgcmV0dXJuIGhhc1RvdWNoU3VwcG9ydCgpOwogICAgICB9CiAgICAgIHJldHVybiB7CiAgICAgICAgY3JlYXRlRHJhZ2dlcjogZnVuY3Rpb24gKG9yZCkgewogICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIGUucGFnZVggPSBlLm9yaWdpbmFsRXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0ucGFnZVg7CiAgICAgICAgICAgIGUucGFnZVkgPSBlLm9yaWdpbmFsRXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0ucGFnZVk7CiAgICAgICAgICAgIGlmIChvcHRpb25zLmRpc2FibGVkKSB7CiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgob3JkID09PSAnbW92ZScpICYmICFvcHRpb25zLmFsbG93TW92ZSkgewogICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBidG5kb3duID0gdHJ1ZTsKICAgICAgICAgICAgc3RhcnREcmFnTW9kZShvcmQsIG1vdXNlQWJzKGUpKTsKICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9OwogICAgICAgIH0sCiAgICAgICAgbmV3U2VsZWN0aW9uOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgZS5wYWdlWCA9IGUub3JpZ2luYWxFdmVudC5jaGFuZ2VkVG91Y2hlc1swXS5wYWdlWDsKICAgICAgICAgIGUucGFnZVkgPSBlLm9yaWdpbmFsRXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0ucGFnZVk7CiAgICAgICAgICByZXR1cm4gbmV3U2VsZWN0aW9uKGUpOwogICAgICAgIH0sCiAgICAgICAgaXNTdXBwb3J0ZWQ6IGhhc1RvdWNoU3VwcG9ydCwKICAgICAgICBzdXBwb3J0OiBkZXRlY3RTdXBwb3J0KCkKICAgICAgfTsKICAgIH0oKSk7CiAgICAvLyB9fX0KICAgIC8vIENvb3JkcyBNb2R1bGUge3t7CiAgICB2YXIgQ29vcmRzID0gKGZ1bmN0aW9uICgpIHsKICAgICAgdmFyIHgxID0gMCwKICAgICAgICAgIHkxID0gMCwKICAgICAgICAgIHgyID0gMCwKICAgICAgICAgIHkyID0gMCwKICAgICAgICAgIG94LCBveTsKCiAgICAgIGZ1bmN0aW9uIHNldFByZXNzZWQocG9zKSAvL3t7ewogICAgICB7CiAgICAgICAgcG9zID0gcmVib3VuZChwb3MpOwogICAgICAgIHgyID0geDEgPSBwb3NbMF07CiAgICAgICAgeTIgPSB5MSA9IHBvc1sxXTsKICAgICAgfQogICAgICAvL319fQogICAgICBmdW5jdGlvbiBzZXRDdXJyZW50KHBvcykgLy97e3sKICAgICAgewogICAgICAgIHBvcyA9IHJlYm91bmQocG9zKTsKICAgICAgICBveCA9IHBvc1swXSAtIHgyOwogICAgICAgIG95ID0gcG9zWzFdIC0geTI7CiAgICAgICAgeDIgPSBwb3NbMF07CiAgICAgICAgeTIgPSBwb3NbMV07CiAgICAgIH0KICAgICAgLy99fX0KICAgICAgZnVuY3Rpb24gZ2V0T2Zmc2V0KCkgLy97e3sKICAgICAgewogICAgICAgIHJldHVybiBbb3gsIG95XTsKICAgICAgfQogICAgICAvL319fQogICAgICBmdW5jdGlvbiBtb3ZlT2Zmc2V0KG9mZnNldCkgLy97e3sKICAgICAgewogICAgICAgIHZhciBveCA9IG9mZnNldFswXSwKICAgICAgICAgICAgb3kgPSBvZmZzZXRbMV07CgogICAgICAgIGlmICgwID4geDEgKyBveCkgewogICAgICAgICAgb3ggLT0gb3ggKyB4MTsKICAgICAgICB9CiAgICAgICAgaWYgKDAgPiB5MSArIG95KSB7CiAgICAgICAgICBveSAtPSBveSArIHkxOwogICAgICAgIH0KCiAgICAgICAgaWYgKGJvdW5keSA8IHkyICsgb3kpIHsKICAgICAgICAgIG95ICs9IGJvdW5keSAtICh5MiArIG95KTsKICAgICAgICB9CiAgICAgICAgaWYgKGJvdW5keCA8IHgyICsgb3gpIHsKICAgICAgICAgIG94ICs9IGJvdW5keCAtICh4MiArIG94KTsKICAgICAgICB9CgogICAgICAgIHgxICs9IG94OwogICAgICAgIHgyICs9IG94OwogICAgICAgIHkxICs9IG95OwogICAgICAgIHkyICs9IG95OwogICAgICB9CiAgICAgIC8vfX19CiAgICAgIGZ1bmN0aW9uIGdldENvcm5lcihvcmQpIC8ve3t7CiAgICAgIHsKICAgICAgICB2YXIgYyA9IGdldEZpeGVkKCk7CiAgICAgICAgc3dpdGNoIChvcmQpIHsKICAgICAgICBjYXNlICduZSc6CiAgICAgICAgICByZXR1cm4gW2MueDIsIGMueV07CiAgICAgICAgY2FzZSAnbncnOgogICAgICAgICAgcmV0dXJuIFtjLngsIGMueV07CiAgICAgICAgY2FzZSAnc2UnOgogICAgICAgICAgcmV0dXJuIFtjLngyLCBjLnkyXTsKICAgICAgICBjYXNlICdzdyc6CiAgICAgICAgICByZXR1cm4gW2MueCwgYy55Ml07CiAgICAgICAgfQogICAgICB9CiAgICAgIC8vfX19CiAgICAgIGZ1bmN0aW9uIGdldEZpeGVkKCkgLy97e3sKICAgICAgewogICAgICAgIGlmICghb3B0aW9ucy5hc3BlY3RSYXRpbykgewogICAgICAgICAgcmV0dXJuIGdldFJlY3QoKTsKICAgICAgICB9CiAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBjb3VsZCB1c2Ugc29tZSBvcHRpbWl6YXRpb24gSSB0aGluay4uLgogICAgICAgIHZhciBhc3BlY3QgPSBvcHRpb25zLmFzcGVjdFJhdGlvLAogICAgICAgICAgICBtaW5feCA9IG9wdGlvbnMubWluU2l6ZVswXSAvIHhzY2FsZSwKICAgICAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICAvL21pbl95ID0gb3B0aW9ucy5taW5TaXplWzFdL3lzY2FsZSwKICAgICAgICAgICAgbWF4X3ggPSBvcHRpb25zLm1heFNpemVbMF0gLyB4c2NhbGUsCiAgICAgICAgICAgIG1heF95ID0gb3B0aW9ucy5tYXhTaXplWzFdIC8geXNjYWxlLAogICAgICAgICAgICBydyA9IHgyIC0geDEsCiAgICAgICAgICAgIHJoID0geTIgLSB5MSwKICAgICAgICAgICAgcndhID0gTWF0aC5hYnMocncpLAogICAgICAgICAgICByaGEgPSBNYXRoLmFicyhyaCksCiAgICAgICAgICAgIHJlYWxfcmF0aW8gPSByd2EgLyByaGEsCiAgICAgICAgICAgIHh4LCB5eSwgdywgaDsKCiAgICAgICAgaWYgKG1heF94ID09PSAwKSB7CiAgICAgICAgICBtYXhfeCA9IGJvdW5keCAqIDEwOwogICAgICAgIH0KICAgICAgICBpZiAobWF4X3kgPT09IDApIHsKICAgICAgICAgIG1heF95ID0gYm91bmR5ICogMTA7CiAgICAgICAgfQogICAgICAgIGlmIChyZWFsX3JhdGlvIDwgYXNwZWN0KSB7CiAgICAgICAgICB5eSA9IHkyOwogICAgICAgICAgdyA9IHJoYSAqIGFzcGVjdDsKICAgICAgICAgIHh4ID0gcncgPCAwID8geDEgLSB3IDogdyArIHgxOwoKICAgICAgICAgIGlmICh4eCA8IDApIHsKICAgICAgICAgICAgeHggPSAwOwogICAgICAgICAgICBoID0gTWF0aC5hYnMoKHh4IC0geDEpIC8gYXNwZWN0KTsKICAgICAgICAgICAgeXkgPSByaCA8IDAgPyB5MSAtIGggOiBoICsgeTE7CiAgICAgICAgICB9IGVsc2UgaWYgKHh4ID4gYm91bmR4KSB7CiAgICAgICAgICAgIHh4ID0gYm91bmR4OwogICAgICAgICAgICBoID0gTWF0aC5hYnMoKHh4IC0geDEpIC8gYXNwZWN0KTsKICAgICAgICAgICAgeXkgPSByaCA8IDAgPyB5MSAtIGggOiBoICsgeTE7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHh4ID0geDI7CiAgICAgICAgICBoID0gcndhIC8gYXNwZWN0OwogICAgICAgICAgeXkgPSByaCA8IDAgPyB5MSAtIGggOiB5MSArIGg7CiAgICAgICAgICBpZiAoeXkgPCAwKSB7CiAgICAgICAgICAgIHl5ID0gMDsKICAgICAgICAgICAgdyA9IE1hdGguYWJzKCh5eSAtIHkxKSAqIGFzcGVjdCk7CiAgICAgICAgICAgIHh4ID0gcncgPCAwID8geDEgLSB3IDogdyArIHgxOwogICAgICAgICAgfSBlbHNlIGlmICh5eSA+IGJvdW5keSkgewogICAgICAgICAgICB5eSA9IGJvdW5keTsKICAgICAgICAgICAgdyA9IE1hdGguYWJzKHl5IC0geTEpICogYXNwZWN0OwogICAgICAgICAgICB4eCA9IHJ3IDwgMCA/IHgxIC0gdyA6IHcgKyB4MTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIE1hZ2ljICUtKQogICAgICAgIGlmICh4eCA+IHgxKSB7IC8vIHJpZ2h0IHNpZGUKICAgICAgICAgIGlmICh4eCAtIHgxIDwgbWluX3gpIHsKICAgICAgICAgICAgeHggPSB4MSArIG1pbl94OwogICAgICAgICAgfSBlbHNlIGlmICh4eCAtIHgxID4gbWF4X3gpIHsKICAgICAgICAgICAgeHggPSB4MSArIG1heF94OwogICAgICAgICAgfQogICAgICAgICAgaWYgKHl5ID4geTEpIHsKICAgICAgICAgICAgeXkgPSB5MSArICh4eCAtIHgxKSAvIGFzcGVjdDsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHl5ID0geTEgLSAoeHggLSB4MSkgLyBhc3BlY3Q7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmICh4eCA8IHgxKSB7IC8vIGxlZnQgc2lkZQogICAgICAgICAgaWYgKHgxIC0geHggPCBtaW5feCkgewogICAgICAgICAgICB4eCA9IHgxIC0gbWluX3g7CiAgICAgICAgICB9IGVsc2UgaWYgKHgxIC0geHggPiBtYXhfeCkgewogICAgICAgICAgICB4eCA9IHgxIC0gbWF4X3g7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoeXkgPiB5MSkgewogICAgICAgICAgICB5eSA9IHkxICsgKHgxIC0geHgpIC8gYXNwZWN0OwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgeXkgPSB5MSAtICh4MSAtIHh4KSAvIGFzcGVjdDsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICh4eCA8IDApIHsKICAgICAgICAgIHgxIC09IHh4OwogICAgICAgICAgeHggPSAwOwogICAgICAgIH0gZWxzZSBpZiAoeHggPiBib3VuZHgpIHsKICAgICAgICAgIHgxIC09IHh4IC0gYm91bmR4OwogICAgICAgICAgeHggPSBib3VuZHg7CiAgICAgICAgfQoKICAgICAgICBpZiAoeXkgPCAwKSB7CiAgICAgICAgICB5MSAtPSB5eTsKICAgICAgICAgIHl5ID0gMDsKICAgICAgICB9IGVsc2UgaWYgKHl5ID4gYm91bmR5KSB7CiAgICAgICAgICB5MSAtPSB5eSAtIGJvdW5keTsKICAgICAgICAgIHl5ID0gYm91bmR5OwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG1ha2VPYmooZmxpcENvb3Jkcyh4MSwgeTEsIHh4LCB5eSkpOwogICAgICB9CiAgICAgIC8vfX19CiAgICAgIGZ1bmN0aW9uIHJlYm91bmQocCkgLy97e3sKICAgICAgewogICAgICAgIGlmIChwWzBdIDwgMCkgewogICAgICAgICAgcFswXSA9IDA7CiAgICAgICAgfQogICAgICAgIGlmIChwWzFdIDwgMCkgewogICAgICAgICAgcFsxXSA9IDA7CiAgICAgICAgfQoKICAgICAgICBpZiAocFswXSA+IGJvdW5keCkgewogICAgICAgICAgcFswXSA9IGJvdW5keDsKICAgICAgICB9CiAgICAgICAgaWYgKHBbMV0gPiBib3VuZHkpIHsKICAgICAgICAgIHBbMV0gPSBib3VuZHk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gW3BbMF0sIHBbMV1dOwogICAgICB9CiAgICAgIC8vfX19CiAgICAgIGZ1bmN0aW9uIGZsaXBDb29yZHMoeDEsIHkxLCB4MiwgeTIpIC8ve3t7CiAgICAgIHsKICAgICAgICB2YXIgeGEgPSB4MSwKICAgICAgICAgICAgeGIgPSB4MiwKICAgICAgICAgICAgeWEgPSB5MSwKICAgICAgICAgICAgeWIgPSB5MjsKICAgICAgICBpZiAoeDIgPCB4MSkgewogICAgICAgICAgeGEgPSB4MjsKICAgICAgICAgIHhiID0geDE7CiAgICAgICAgfQogICAgICAgIGlmICh5MiA8IHkxKSB7CiAgICAgICAgICB5YSA9IHkyOwogICAgICAgICAgeWIgPSB5MTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIFt4YSwgeWEsIHhiLCB5Yl07CiAgICAgIH0KICAgICAgLy99fX0KICAgICAgZnVuY3Rpb24gZ2V0UmVjdCgpIC8ve3t7CiAgICAgIHsKICAgICAgICB2YXIgeHNpemUgPSB4MiAtIHgxLAogICAgICAgICAgICB5c2l6ZSA9IHkyIC0geTEsCiAgICAgICAgICAgIGRlbHRhOwoKICAgICAgICBpZiAoeGxpbWl0ICYmIChNYXRoLmFicyh4c2l6ZSkgPiB4bGltaXQpKSB7CiAgICAgICAgICB4MiA9ICh4c2l6ZSA+IDApID8gKHgxICsgeGxpbWl0KSA6ICh4MSAtIHhsaW1pdCk7CiAgICAgICAgfQogICAgICAgIGlmICh5bGltaXQgJiYgKE1hdGguYWJzKHlzaXplKSA+IHlsaW1pdCkpIHsKICAgICAgICAgIHkyID0gKHlzaXplID4gMCkgPyAoeTEgKyB5bGltaXQpIDogKHkxIC0geWxpbWl0KTsKICAgICAgICB9CgogICAgICAgIGlmICh5bWluIC8geXNjYWxlICYmIChNYXRoLmFicyh5c2l6ZSkgPCB5bWluIC8geXNjYWxlKSkgewogICAgICAgICAgeTIgPSAoeXNpemUgPiAwKSA/ICh5MSArIHltaW4gLyB5c2NhbGUpIDogKHkxIC0geW1pbiAvIHlzY2FsZSk7CiAgICAgICAgfQogICAgICAgIGlmICh4bWluIC8geHNjYWxlICYmIChNYXRoLmFicyh4c2l6ZSkgPCB4bWluIC8geHNjYWxlKSkgewogICAgICAgICAgeDIgPSAoeHNpemUgPiAwKSA/ICh4MSArIHhtaW4gLyB4c2NhbGUpIDogKHgxIC0geG1pbiAvIHhzY2FsZSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoeDEgPCAwKSB7CiAgICAgICAgICB4MiAtPSB4MTsKICAgICAgICAgIHgxIC09IHgxOwogICAgICAgIH0KICAgICAgICBpZiAoeTEgPCAwKSB7CiAgICAgICAgICB5MiAtPSB5MTsKICAgICAgICAgIHkxIC09IHkxOwogICAgICAgIH0KICAgICAgICBpZiAoeDIgPCAwKSB7CiAgICAgICAgICB4MSAtPSB4MjsKICAgICAgICAgIHgyIC09IHgyOwogICAgICAgIH0KICAgICAgICBpZiAoeTIgPCAwKSB7CiAgICAgICAgICB5MSAtPSB5MjsKICAgICAgICAgIHkyIC09IHkyOwogICAgICAgIH0KICAgICAgICBpZiAoeDIgPiBib3VuZHgpIHsKICAgICAgICAgIGRlbHRhID0geDIgLSBib3VuZHg7CiAgICAgICAgICB4MSAtPSBkZWx0YTsKICAgICAgICAgIHgyIC09IGRlbHRhOwogICAgICAgIH0KICAgICAgICBpZiAoeTIgPiBib3VuZHkpIHsKICAgICAgICAgIGRlbHRhID0geTIgLSBib3VuZHk7CiAgICAgICAgICB5MSAtPSBkZWx0YTsKICAgICAgICAgIHkyIC09IGRlbHRhOwogICAgICAgIH0KICAgICAgICBpZiAoeDEgPiBib3VuZHgpIHsKICAgICAgICAgIGRlbHRhID0geDEgLSBib3VuZHk7CiAgICAgICAgICB5MiAtPSBkZWx0YTsKICAgICAgICAgIHkxIC09IGRlbHRhOwogICAgICAgIH0KICAgICAgICBpZiAoeTEgPiBib3VuZHkpIHsKICAgICAgICAgIGRlbHRhID0geTEgLSBib3VuZHk7CiAgICAgICAgICB5MiAtPSBkZWx0YTsKICAgICAgICAgIHkxIC09IGRlbHRhOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG1ha2VPYmooZmxpcENvb3Jkcyh4MSwgeTEsIHgyLCB5MikpOwogICAgICB9CiAgICAgIC8vfX19CiAgICAgIGZ1bmN0aW9uIG1ha2VPYmooYSkgLy97e3sKICAgICAgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICB4OiBhWzBdLAogICAgICAgICAgeTogYVsxXSwKICAgICAgICAgIHgyOiBhWzJdLAogICAgICAgICAgeTI6IGFbM10sCiAgICAgICAgICB3OiBhWzJdIC0gYVswXSwKICAgICAgICAgIGg6IGFbM10gLSBhWzFdCiAgICAgICAgfTsKICAgICAgfQogICAgICAvL319fQoKICAgICAgcmV0dXJuIHsKICAgICAgICBmbGlwQ29vcmRzOiBmbGlwQ29vcmRzLAogICAgICAgIHNldFByZXNzZWQ6IHNldFByZXNzZWQsCiAgICAgICAgc2V0Q3VycmVudDogc2V0Q3VycmVudCwKICAgICAgICBnZXRPZmZzZXQ6IGdldE9mZnNldCwKICAgICAgICBtb3ZlT2Zmc2V0OiBtb3ZlT2Zmc2V0LAogICAgICAgIGdldENvcm5lcjogZ2V0Q29ybmVyLAogICAgICAgIGdldEZpeGVkOiBnZXRGaXhlZAogICAgICB9OwogICAgfSgpKTsKCiAgICAvL319fQogICAgLy8gU2hhZGUgTW9kdWxlIHt7ewogICAgdmFyIFNoYWRlID0gKGZ1bmN0aW9uKCkgewogICAgICB2YXIgZW5hYmxlZCA9IGZhbHNlLAogICAgICAgICAgaG9sZGVyID0galF1ZXJ5KCc8ZGl2IC8+JykuY3NzKHsKICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsCiAgICAgICAgICAgIHpJbmRleDogMjQwLAogICAgICAgICAgICBvcGFjaXR5OiAwCiAgICAgICAgICB9KSwKICAgICAgICAgIHNoYWRlcyA9IHsKICAgICAgICAgICAgdG9wOiBjcmVhdGVTaGFkZSgpLAogICAgICAgICAgICBsZWZ0OiBjcmVhdGVTaGFkZSgpLmhlaWdodChib3VuZHkpLAogICAgICAgICAgICByaWdodDogY3JlYXRlU2hhZGUoKS5oZWlnaHQoYm91bmR5KSwKICAgICAgICAgICAgYm90dG9tOiBjcmVhdGVTaGFkZSgpCiAgICAgICAgICB9OwoKICAgICAgZnVuY3Rpb24gcmVzaXplU2hhZGVzKHcsaCkgewogICAgICAgIHNoYWRlcy5sZWZ0LmNzcyh7IGhlaWdodDogcHgoaCkgfSk7CiAgICAgICAgc2hhZGVzLnJpZ2h0LmNzcyh7IGhlaWdodDogcHgoaCkgfSk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gdXBkYXRlQXV0bygpCiAgICAgIHsKICAgICAgICByZXR1cm4gdXBkYXRlU2hhZGUoQ29vcmRzLmdldEZpeGVkKCkpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHVwZGF0ZVNoYWRlKGMpCiAgICAgIHsKICAgICAgICBzaGFkZXMudG9wLmNzcyh7CiAgICAgICAgICBsZWZ0OiBweChjLngpLAogICAgICAgICAgd2lkdGg6IHB4KGMudyksCiAgICAgICAgICBoZWlnaHQ6IHB4KGMueSkKICAgICAgICB9KTsKICAgICAgICBzaGFkZXMuYm90dG9tLmNzcyh7CiAgICAgICAgICB0b3A6IHB4KGMueTIpLAogICAgICAgICAgbGVmdDogcHgoYy54KSwKICAgICAgICAgIHdpZHRoOiBweChjLncpLAogICAgICAgICAgaGVpZ2h0OiBweChib3VuZHktYy55MikKICAgICAgICB9KTsKICAgICAgICBzaGFkZXMucmlnaHQuY3NzKHsKICAgICAgICAgIGxlZnQ6IHB4KGMueDIpLAogICAgICAgICAgd2lkdGg6IHB4KGJvdW5keC1jLngyKQogICAgICAgIH0pOwogICAgICAgIHNoYWRlcy5sZWZ0LmNzcyh7CiAgICAgICAgICB3aWR0aDogcHgoYy54KQogICAgICAgIH0pOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGNyZWF0ZVNoYWRlKCkgewogICAgICAgIHJldHVybiBqUXVlcnkoJzxkaXYgLz4nKS5jc3MoewogICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsCiAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IG9wdGlvbnMuc2hhZGVDb2xvcnx8b3B0aW9ucy5iZ0NvbG9yCiAgICAgICAgfSkuYXBwZW5kVG8oaG9sZGVyKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBlbmFibGVTaGFkZSgpIHsKICAgICAgICBpZiAoIWVuYWJsZWQpIHsKICAgICAgICAgIGVuYWJsZWQgPSB0cnVlOwogICAgICAgICAgaG9sZGVyLmluc2VydEJlZm9yZShqUXVlcnlpbWcpOwogICAgICAgICAgdXBkYXRlQXV0bygpOwogICAgICAgICAgU2VsZWN0aW9uLnNldEJnT3BhY2l0eSgxLDAsMSk7CiAgICAgICAgICBqUXVlcnlpbWcyLmhpZGUoKTsKCiAgICAgICAgICBzZXRCZ0NvbG9yKG9wdGlvbnMuc2hhZGVDb2xvcnx8b3B0aW9ucy5iZ0NvbG9yLDEpOwogICAgICAgICAgaWYgKFNlbGVjdGlvbi5pc0F3YWtlKCkpCiAgICAgICAgICB7CiAgICAgICAgICAgIHNldE9wYWNpdHkob3B0aW9ucy5iZ09wYWNpdHksMSk7CiAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2Ugc2V0T3BhY2l0eSgxLDEpOwogICAgICAgIH0KICAgICAgfQogICAgICBmdW5jdGlvbiBzZXRCZ0NvbG9yKGNvbG9yLG5vdykgewogICAgICAgIGNvbG9yQ2hhbmdlTWFjcm8oZ2V0U2hhZGVzKCksY29sb3Isbm93KTsKICAgICAgfQogICAgICBmdW5jdGlvbiBkaXNhYmxlU2hhZGUoKSB7CiAgICAgICAgaWYgKGVuYWJsZWQpIHsKICAgICAgICAgIGhvbGRlci5yZW1vdmUoKTsKICAgICAgICAgIGpRdWVyeWltZzIuc2hvdygpOwogICAgICAgICAgZW5hYmxlZCA9IGZhbHNlOwogICAgICAgICAgaWYgKFNlbGVjdGlvbi5pc0F3YWtlKCkpIHsKICAgICAgICAgICAgU2VsZWN0aW9uLnNldEJnT3BhY2l0eShvcHRpb25zLmJnT3BhY2l0eSwxLDEpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgU2VsZWN0aW9uLnNldEJnT3BhY2l0eSgxLDEsMSk7CiAgICAgICAgICAgIFNlbGVjdGlvbi5kaXNhYmxlSGFuZGxlcygpOwogICAgICAgICAgfQogICAgICAgICAgY29sb3JDaGFuZ2VNYWNybyhqUXVlcnlkaXYsMCwxKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gc2V0T3BhY2l0eShvcGFjaXR5LG5vdykgewogICAgICAgIGlmIChlbmFibGVkKSB7CiAgICAgICAgICBpZiAob3B0aW9ucy5iZ0ZhZGUgJiYgIW5vdykgewogICAgICAgICAgICBob2xkZXIuYW5pbWF0ZSh7CiAgICAgICAgICAgICAgb3BhY2l0eTogMS1vcGFjaXR5CiAgICAgICAgICAgIH0sewogICAgICAgICAgICAgIHF1ZXVlOiBmYWxzZSwKICAgICAgICAgICAgICBkdXJhdGlvbjogb3B0aW9ucy5mYWRlVGltZQogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaG9sZGVyLmNzcyh7b3BhY2l0eToxLW9wYWNpdHl9KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gcmVmcmVzaEFsbCgpIHsKICAgICAgICBvcHRpb25zLnNoYWRlID8gZW5hYmxlU2hhZGUoKSA6IGRpc2FibGVTaGFkZSgpOwogICAgICAgIGlmIChTZWxlY3Rpb24uaXNBd2FrZSgpKSBzZXRPcGFjaXR5KG9wdGlvbnMuYmdPcGFjaXR5KTsKICAgICAgfQogICAgICBmdW5jdGlvbiBnZXRTaGFkZXMoKSB7CiAgICAgICAgcmV0dXJuIGhvbGRlci5jaGlsZHJlbigpOwogICAgICB9CgogICAgICByZXR1cm4gewogICAgICAgIHVwZGF0ZTogdXBkYXRlQXV0bywKICAgICAgICB1cGRhdGVSYXc6IHVwZGF0ZVNoYWRlLAogICAgICAgIGdldFNoYWRlczogZ2V0U2hhZGVzLAogICAgICAgIHNldEJnQ29sb3I6IHNldEJnQ29sb3IsCiAgICAgICAgZW5hYmxlOiBlbmFibGVTaGFkZSwKICAgICAgICBkaXNhYmxlOiBkaXNhYmxlU2hhZGUsCiAgICAgICAgcmVzaXplOiByZXNpemVTaGFkZXMsCiAgICAgICAgcmVmcmVzaDogcmVmcmVzaEFsbCwKICAgICAgICBvcGFjaXR5OiBzZXRPcGFjaXR5CiAgICAgIH07CiAgICB9KCkpOwogICAgLy8gfX19CiAgICAvLyBTZWxlY3Rpb24gTW9kdWxlIHt7ewogICAgdmFyIFNlbGVjdGlvbiA9IChmdW5jdGlvbiAoKSB7CiAgICAgIHZhciBhd2FrZSwKICAgICAgICAgIGhkZXAgPSAzNzAsCiAgICAgICAgICBib3JkZXJzID0ge30sCiAgICAgICAgICBoYW5kbGUgPSB7fSwKICAgICAgICAgIGRyYWdiYXIgPSB7fSwKICAgICAgICAgIHNlZWhhbmRsZXMgPSBmYWxzZTsKCiAgICAgIC8vIFByaXZhdGUgTWV0aG9kcwogICAgICBmdW5jdGlvbiBpbnNlcnRCb3JkZXIodHlwZSkgLy97e3sKICAgICAgewogICAgICAgIHZhciBqcSA9IGpRdWVyeSgnPGRpdiAvPicpLmNzcyh7CiAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJywKICAgICAgICAgIG9wYWNpdHk6IG9wdGlvbnMuYm9yZGVyT3BhY2l0eQogICAgICAgIH0pLmFkZENsYXNzKGNzc0NsYXNzKHR5cGUpKTsKICAgICAgICBqUXVlcnlpbWdfaG9sZGVyLmFwcGVuZChqcSk7CiAgICAgICAgcmV0dXJuIGpxOwogICAgICB9CiAgICAgIC8vfX19CiAgICAgIGZ1bmN0aW9uIGRyYWdEaXYob3JkLCB6aSkgLy97e3sKICAgICAgewogICAgICAgIHZhciBqcSA9IGpRdWVyeSgnPGRpdiAvPicpLm1vdXNlZG93bihjcmVhdGVEcmFnZ2VyKG9yZCkpLmNzcyh7CiAgICAgICAgICBjdXJzb3I6IG9yZCArICctcmVzaXplJywKICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLAogICAgICAgICAgekluZGV4OiB6aQogICAgICAgIH0pLmFkZENsYXNzKCdvcmQtJytvcmQpOwoKICAgICAgICBpZiAoVG91Y2guc3VwcG9ydCkgewogICAgICAgICAganEuYmluZCgndG91Y2hzdGFydC5qY3JvcCcsIFRvdWNoLmNyZWF0ZURyYWdnZXIob3JkKSk7CiAgICAgICAgfQoKICAgICAgICBqUXVlcnloZGxfaG9sZGVyLmFwcGVuZChqcSk7CiAgICAgICAgcmV0dXJuIGpxOwogICAgICB9CiAgICAgIC8vfX19CiAgICAgIGZ1bmN0aW9uIGluc2VydEhhbmRsZShvcmQpIC8ve3t7CiAgICAgIHsKICAgICAgICB2YXIgaHMgPSBvcHRpb25zLmhhbmRsZVNpemU7CiAgICAgICAgcmV0dXJuIGRyYWdEaXYob3JkLCBoZGVwKyspLmNzcyh7CiAgICAgICAgICBvcGFjaXR5OiBvcHRpb25zLmhhbmRsZU9wYWNpdHkKICAgICAgICB9KS53aWR0aChocykuaGVpZ2h0KGhzKS5hZGRDbGFzcyhjc3NDbGFzcygnaGFuZGxlJykpOwogICAgICB9CiAgICAgIC8vfX19CiAgICAgIGZ1bmN0aW9uIGluc2VydERyYWdiYXIob3JkKSAvL3t7ewogICAgICB7CiAgICAgICAgcmV0dXJuIGRyYWdEaXYob3JkLCBoZGVwKyspLmFkZENsYXNzKCdqY3JvcC1kcmFnYmFyJyk7CiAgICAgIH0KICAgICAgLy99fX0KICAgICAgZnVuY3Rpb24gY3JlYXRlRHJhZ2JhcnMobGkpIC8ve3t7CiAgICAgIHsKICAgICAgICB2YXIgaTsKICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGkubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIGRyYWdiYXJbbGlbaV1dID0gaW5zZXJ0RHJhZ2JhcihsaVtpXSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8vfX19CiAgICAgIGZ1bmN0aW9uIGNyZWF0ZUJvcmRlcnMobGkpIC8ve3t7CiAgICAgIHsKICAgICAgICB2YXIgY2wsaTsKICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGkubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIHN3aXRjaChsaVtpXSl7CiAgICAgICAgICAgIGNhc2Unbic6IGNsPSdobGluZSc7IGJyZWFrOwogICAgICAgICAgICBjYXNlJ3MnOiBjbD0naGxpbmUgYm90dG9tJzsgYnJlYWs7CiAgICAgICAgICAgIGNhc2UnZSc6IGNsPSd2bGluZSByaWdodCc7IGJyZWFrOwogICAgICAgICAgICBjYXNlJ3cnOiBjbD0ndmxpbmUnOyBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGJvcmRlcnNbbGlbaV1dID0gaW5zZXJ0Qm9yZGVyKGNsKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLy99fX0KICAgICAgZnVuY3Rpb24gY3JlYXRlSGFuZGxlcyhsaSkgLy97e3sKICAgICAgewogICAgICAgIHZhciBpOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCBsaS5sZW5ndGg7IGkrKykgewogICAgICAgICAgaGFuZGxlW2xpW2ldXSA9IGluc2VydEhhbmRsZShsaVtpXSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8vfX19CiAgICAgIGZ1bmN0aW9uIG1vdmV0byh4LCB5KSAvL3t7ewogICAgICB7CiAgICAgICAgaWYgKCFvcHRpb25zLnNoYWRlKSB7CiAgICAgICAgICBqUXVlcnlpbWcyLmNzcyh7CiAgICAgICAgICAgIHRvcDogcHgoLXkpLAogICAgICAgICAgICBsZWZ0OiBweCgteCkKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBqUXVlcnlzZWwuY3NzKHsKICAgICAgICAgIHRvcDogcHgoeSksCiAgICAgICAgICBsZWZ0OiBweCh4KQogICAgICAgIH0pOwogICAgICB9CiAgICAgIC8vfX19CiAgICAgIGZ1bmN0aW9uIHJlc2l6ZSh3LCBoKSAvL3t7ewogICAgICB7CiAgICAgICAgalF1ZXJ5c2VsLndpZHRoKHcpLmhlaWdodChoKTsKICAgICAgfQogICAgICAvL319fQogICAgICBmdW5jdGlvbiByZWZyZXNoKCkgLy97e3sKICAgICAgewogICAgICAgIHZhciBjID0gQ29vcmRzLmdldEZpeGVkKCk7CgogICAgICAgIENvb3Jkcy5zZXRQcmVzc2VkKFtjLngsIGMueV0pOwogICAgICAgIENvb3Jkcy5zZXRDdXJyZW50KFtjLngyLCBjLnkyXSk7CgogICAgICAgIHVwZGF0ZVZpc2libGUoKTsKICAgICAgfQogICAgICAvL319fQoKICAgICAgLy8gSW50ZXJuYWwgTWV0aG9kcwogICAgICBmdW5jdGlvbiB1cGRhdGVWaXNpYmxlKHNlbGVjdCkgLy97e3sKICAgICAgewogICAgICAgIGlmIChhd2FrZSkgewogICAgICAgICAgcmV0dXJuIHVwZGF0ZShzZWxlY3QpOwogICAgICAgIH0KICAgICAgfQogICAgICAvL319fQogICAgICBmdW5jdGlvbiB1cGRhdGUoc2VsZWN0KSAvL3t7ewogICAgICB7CiAgICAgICAgdmFyIGMgPSBDb29yZHMuZ2V0Rml4ZWQoKTsKCiAgICAgICAgcmVzaXplKGMudywgYy5oKTsKICAgICAgICBtb3ZldG8oYy54LCBjLnkpOwogICAgICAgIGlmIChvcHRpb25zLnNoYWRlKSBTaGFkZS51cGRhdGVSYXcoYyk7CgogICAgICAgIGF3YWtlIHx8IHNob3coKTsKCiAgICAgICAgaWYgKHNlbGVjdCkgewogICAgICAgICAgb3B0aW9ucy5vblNlbGVjdC5jYWxsKGFwaSwgdW5zY2FsZShjKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG9wdGlvbnMub25DaGFuZ2UuY2FsbChhcGksIHVuc2NhbGUoYykpOwogICAgICAgIH0KICAgICAgfQogICAgICAvL319fQogICAgICBmdW5jdGlvbiBzZXRCZ09wYWNpdHkob3BhY2l0eSxmb3JjZSxub3cpIC8ve3t7CiAgICAgIHsKICAgICAgICBpZiAoIWF3YWtlICYmICFmb3JjZSkgcmV0dXJuOwogICAgICAgIGlmIChvcHRpb25zLmJnRmFkZSAmJiAhbm93KSB7CiAgICAgICAgICBqUXVlcnlpbWcuYW5pbWF0ZSh7CiAgICAgICAgICAgIG9wYWNpdHk6IG9wYWNpdHkKICAgICAgICAgIH0sewogICAgICAgICAgICBxdWV1ZTogZmFsc2UsCiAgICAgICAgICAgIGR1cmF0aW9uOiBvcHRpb25zLmZhZGVUaW1lCiAgICAgICAgICB9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgalF1ZXJ5aW1nLmNzcygnb3BhY2l0eScsIG9wYWNpdHkpOwogICAgICAgIH0KICAgICAgfQogICAgICAvL319fQogICAgICBmdW5jdGlvbiBzaG93KCkgLy97e3sKICAgICAgewogICAgICAgIGpRdWVyeXNlbC5zaG93KCk7CgogICAgICAgIGlmIChvcHRpb25zLnNoYWRlKSBTaGFkZS5vcGFjaXR5KGJnb3BhY2l0eSk7CiAgICAgICAgICBlbHNlIHNldEJnT3BhY2l0eShiZ29wYWNpdHksdHJ1ZSk7CgogICAgICAgIGF3YWtlID0gdHJ1ZTsKICAgICAgfQogICAgICAvL319fQogICAgICBmdW5jdGlvbiByZWxlYXNlKCkgLy97e3sKICAgICAgewogICAgICAgIGRpc2FibGVIYW5kbGVzKCk7CiAgICAgICAgalF1ZXJ5c2VsLmhpZGUoKTsKCiAgICAgICAgaWYgKG9wdGlvbnMuc2hhZGUpIFNoYWRlLm9wYWNpdHkoMSk7CiAgICAgICAgICBlbHNlIHNldEJnT3BhY2l0eSgxKTsKCiAgICAgICAgYXdha2UgPSBmYWxzZTsKICAgICAgICBvcHRpb25zLm9uUmVsZWFzZS5jYWxsKGFwaSk7CiAgICAgIH0KICAgICAgLy99fX0KICAgICAgZnVuY3Rpb24gc2hvd0hhbmRsZXMoKSAvL3t7ewogICAgICB7CiAgICAgICAgaWYgKHNlZWhhbmRsZXMpIHsKICAgICAgICAgIGpRdWVyeWhkbF9ob2xkZXIuc2hvdygpOwogICAgICAgIH0KICAgICAgfQogICAgICAvL319fQogICAgICBmdW5jdGlvbiBlbmFibGVIYW5kbGVzKCkgLy97e3sKICAgICAgewogICAgICAgIHNlZWhhbmRsZXMgPSB0cnVlOwogICAgICAgIGlmIChvcHRpb25zLmFsbG93UmVzaXplKSB7CiAgICAgICAgICBqUXVlcnloZGxfaG9sZGVyLnNob3coKTsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgICAvL319fQogICAgICBmdW5jdGlvbiBkaXNhYmxlSGFuZGxlcygpIC8ve3t7CiAgICAgIHsKICAgICAgICBzZWVoYW5kbGVzID0gZmFsc2U7CiAgICAgICAgalF1ZXJ5aGRsX2hvbGRlci5oaWRlKCk7CiAgICAgIH0gCiAgICAgIC8vfX19CiAgICAgIGZ1bmN0aW9uIGFuaW1Nb2RlKHYpIC8ve3t7CiAgICAgIHsKICAgICAgICBpZiAoYW5pbWF0aW5nID09PSB2KSB7CiAgICAgICAgICBkaXNhYmxlSGFuZGxlcygpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBlbmFibGVIYW5kbGVzKCk7CiAgICAgICAgfQogICAgICB9IAogICAgICAvL319fQogICAgICBmdW5jdGlvbiBkb25lKCkgLy97e3sKICAgICAgewogICAgICAgIGFuaW1Nb2RlKGZhbHNlKTsKICAgICAgICByZWZyZXNoKCk7CiAgICAgIH0gCiAgICAgIC8vfX19CiAgICAgIC8vIEluc2VydCBkcmFnZ2FibGUgZWxlbWVudHMge3t7CiAgICAgIC8vIEluc2VydCBib3JkZXIgZGl2cyBmb3Igb3V0bGluZQoKICAgICAgaWYgKG9wdGlvbnMuZHJhZ0VkZ2VzICYmIGpRdWVyeS5pc0FycmF5KG9wdGlvbnMuY3JlYXRlRHJhZ2JhcnMpKQogICAgICAgIGNyZWF0ZURyYWdiYXJzKG9wdGlvbnMuY3JlYXRlRHJhZ2JhcnMpOwoKICAgICAgaWYgKGpRdWVyeS5pc0FycmF5KG9wdGlvbnMuY3JlYXRlSGFuZGxlcykpCiAgICAgICAgY3JlYXRlSGFuZGxlcyhvcHRpb25zLmNyZWF0ZUhhbmRsZXMpOwoKICAgICAgaWYgKG9wdGlvbnMuZHJhd0JvcmRlcnMgJiYgalF1ZXJ5LmlzQXJyYXkob3B0aW9ucy5jcmVhdGVCb3JkZXJzKSkKICAgICAgICBjcmVhdGVCb3JkZXJzKG9wdGlvbnMuY3JlYXRlQm9yZGVycyk7CgogICAgICAvL319fQoKICAgICAgLy8gVGhpcyBpcyBhIGhhY2sgZm9yIGlPUzUgdG8gc3VwcG9ydCBkcmFnL21vdmUgdG91Y2ggZnVuY3Rpb25hbGl0eQogICAgICBqUXVlcnkoZG9jdW1lbnQpLmJpbmQoJ3RvdWNoc3RhcnQuamNyb3AtaW9zJyxmdW5jdGlvbihlKSB7CiAgICAgICAgaWYgKGpRdWVyeShlLmN1cnJlbnRUYXJnZXQpLmhhc0NsYXNzKCdqY3JvcC10cmFja2VyJykpIGUuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgIH0pOwoKICAgICAgdmFyIGpRdWVyeXRyYWNrID0gbmV3VHJhY2tlcigpLm1vdXNlZG93bihjcmVhdGVEcmFnZ2VyKCdtb3ZlJykpLmNzcyh7CiAgICAgICAgY3Vyc29yOiAnbW92ZScsCiAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsCiAgICAgICAgekluZGV4OiAzNjAKICAgICAgfSk7CgogICAgICBpZiAoVG91Y2guc3VwcG9ydCkgewogICAgICAgIGpRdWVyeXRyYWNrLmJpbmQoJ3RvdWNoc3RhcnQuamNyb3AnLCBUb3VjaC5jcmVhdGVEcmFnZ2VyKCdtb3ZlJykpOwogICAgICB9CgogICAgICBqUXVlcnlpbWdfaG9sZGVyLmFwcGVuZChqUXVlcnl0cmFjayk7CiAgICAgIGRpc2FibGVIYW5kbGVzKCk7CgogICAgICByZXR1cm4gewogICAgICAgIHVwZGF0ZVZpc2libGU6IHVwZGF0ZVZpc2libGUsCiAgICAgICAgdXBkYXRlOiB1cGRhdGUsCiAgICAgICAgcmVsZWFzZTogcmVsZWFzZSwKICAgICAgICByZWZyZXNoOiByZWZyZXNoLAogICAgICAgIGlzQXdha2U6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHJldHVybiBhd2FrZTsKICAgICAgICB9LAogICAgICAgIHNldEN1cnNvcjogZnVuY3Rpb24gKGN1cnNvcikgewogICAgICAgICAgalF1ZXJ5dHJhY2suY3NzKCdjdXJzb3InLCBjdXJzb3IpOwogICAgICAgIH0sCiAgICAgICAgZW5hYmxlSGFuZGxlczogZW5hYmxlSGFuZGxlcywKICAgICAgICBlbmFibGVPbmx5OiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBzZWVoYW5kbGVzID0gdHJ1ZTsKICAgICAgICB9LAogICAgICAgIHNob3dIYW5kbGVzOiBzaG93SGFuZGxlcywKICAgICAgICBkaXNhYmxlSGFuZGxlczogZGlzYWJsZUhhbmRsZXMsCiAgICAgICAgYW5pbU1vZGU6IGFuaW1Nb2RlLAogICAgICAgIHNldEJnT3BhY2l0eTogc2V0QmdPcGFjaXR5LAogICAgICAgIGRvbmU6IGRvbmUKICAgICAgfTsKICAgIH0oKSk7CiAgICAKICAgIC8vfX19CiAgICAvLyBUcmFja2VyIE1vZHVsZSB7e3sKICAgIHZhciBUcmFja2VyID0gKGZ1bmN0aW9uICgpIHsKICAgICAgdmFyIG9uTW92ZSA9IGZ1bmN0aW9uICgpIHt9LAogICAgICAgICAgb25Eb25lID0gZnVuY3Rpb24gKCkge30sCiAgICAgICAgICB0cmFja0RvYyA9IG9wdGlvbnMudHJhY2tEb2N1bWVudDsKCiAgICAgIGZ1bmN0aW9uIHRvRnJvbnQoKSAvL3t7ewogICAgICB7CiAgICAgICAgalF1ZXJ5dHJrLmNzcyh7CiAgICAgICAgICB6SW5kZXg6IDQ1MAogICAgICAgIH0pOwogICAgICAgIGlmIChUb3VjaC5zdXBwb3J0KSB7CiAgICAgICAgICBqUXVlcnkoZG9jdW1lbnQpCiAgICAgICAgICAgIC5iaW5kKCd0b3VjaG1vdmUuamNyb3AnLCB0cmFja1RvdWNoTW92ZSkKICAgICAgICAgICAgLmJpbmQoJ3RvdWNoZW5kLmpjcm9wJywgdHJhY2tUb3VjaEVuZCk7CiAgICAgICAgfQogICAgICAgIGlmICh0cmFja0RvYykgewogICAgICAgICAgalF1ZXJ5KGRvY3VtZW50KQogICAgICAgICAgICAuYmluZCgnbW91c2Vtb3ZlLmpjcm9wJyx0cmFja01vdmUpCiAgICAgICAgICAgIC5iaW5kKCdtb3VzZXVwLmpjcm9wJyx0cmFja1VwKTsKICAgICAgICB9CiAgICAgIH0gCiAgICAgIC8vfX19CiAgICAgIGZ1bmN0aW9uIHRvQmFjaygpIC8ve3t7CiAgICAgIHsKICAgICAgICBqUXVlcnl0cmsuY3NzKHsKICAgICAgICAgIHpJbmRleDogMjkwCiAgICAgICAgfSk7CiAgICAgICAgalF1ZXJ5KGRvY3VtZW50KS51bmJpbmQoJy5qY3JvcCcpOwogICAgICB9IAogICAgICAvL319fQogICAgICBmdW5jdGlvbiB0cmFja01vdmUoZSkgLy97e3sKICAgICAgewogICAgICAgIG9uTW92ZShtb3VzZUFicyhlKSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9IAogICAgICAvL319fQogICAgICBmdW5jdGlvbiB0cmFja1VwKGUpIC8ve3t7CiAgICAgIHsKICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKCiAgICAgICAgaWYgKGJ0bmRvd24pIHsKICAgICAgICAgIGJ0bmRvd24gPSBmYWxzZTsKCiAgICAgICAgICBvbkRvbmUobW91c2VBYnMoZSkpOwoKICAgICAgICAgIGlmIChTZWxlY3Rpb24uaXNBd2FrZSgpKSB7CiAgICAgICAgICAgIG9wdGlvbnMub25TZWxlY3QuY2FsbChhcGksIHVuc2NhbGUoQ29vcmRzLmdldEZpeGVkKCkpKTsKICAgICAgICAgIH0KCiAgICAgICAgICB0b0JhY2soKTsKICAgICAgICAgIG9uTW92ZSA9IGZ1bmN0aW9uICgpIHt9OwogICAgICAgICAgb25Eb25lID0gZnVuY3Rpb24gKCkge307CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgLy99fX0KICAgICAgZnVuY3Rpb24gYWN0aXZhdGVIYW5kbGVycyhtb3ZlLCBkb25lKSAvL3t7ewogICAgICB7CiAgICAgICAgYnRuZG93biA9IHRydWU7CiAgICAgICAgb25Nb3ZlID0gbW92ZTsKICAgICAgICBvbkRvbmUgPSBkb25lOwogICAgICAgIHRvRnJvbnQoKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgLy99fX0KICAgICAgZnVuY3Rpb24gdHJhY2tUb3VjaE1vdmUoZSkgLy97e3sKICAgICAgewogICAgICAgIGUucGFnZVggPSBlLm9yaWdpbmFsRXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0ucGFnZVg7CiAgICAgICAgZS5wYWdlWSA9IGUub3JpZ2luYWxFdmVudC5jaGFuZ2VkVG91Y2hlc1swXS5wYWdlWTsKICAgICAgICByZXR1cm4gdHJhY2tNb3ZlKGUpOwogICAgICB9CiAgICAgIC8vfX19CiAgICAgIGZ1bmN0aW9uIHRyYWNrVG91Y2hFbmQoZSkgLy97e3sKICAgICAgewogICAgICAgIGUucGFnZVggPSBlLm9yaWdpbmFsRXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0ucGFnZVg7CiAgICAgICAgZS5wYWdlWSA9IGUub3JpZ2luYWxFdmVudC5jaGFuZ2VkVG91Y2hlc1swXS5wYWdlWTsKICAgICAgICByZXR1cm4gdHJhY2tVcChlKTsKICAgICAgfQogICAgICAvL319fQogICAgICBmdW5jdGlvbiBzZXRDdXJzb3IodCkgLy97e3sKICAgICAgewogICAgICAgIGpRdWVyeXRyay5jc3MoJ2N1cnNvcicsIHQpOwogICAgICB9CiAgICAgIC8vfX19CgogICAgICBpZiAoIXRyYWNrRG9jKSB7CiAgICAgICAgalF1ZXJ5dHJrLm1vdXNlbW92ZSh0cmFja01vdmUpLm1vdXNldXAodHJhY2tVcCkubW91c2VvdXQodHJhY2tVcCk7CiAgICAgIH0KCiAgICAgIGpRdWVyeWltZy5iZWZvcmUoalF1ZXJ5dHJrKTsKICAgICAgcmV0dXJuIHsKICAgICAgICBhY3RpdmF0ZUhhbmRsZXJzOiBhY3RpdmF0ZUhhbmRsZXJzLAogICAgICAgIHNldEN1cnNvcjogc2V0Q3Vyc29yCiAgICAgIH07CiAgICB9KCkpOwogICAgLy99fX0KICAgIC8vIEtleU1hbmFnZXIgTW9kdWxlIHt7ewogICAgdmFyIEtleU1hbmFnZXIgPSAoZnVuY3Rpb24gKCkgewogICAgICB2YXIgalF1ZXJ5a2V5bWdyID0galF1ZXJ5KCc8aW5wdXQgdHlwZT0icmFkaW8iIC8+JykuY3NzKHsKICAgICAgICBwb3NpdGlvbjogJ2ZpeGVkJywKICAgICAgICBsZWZ0OiAnLTEyMHB4JywKICAgICAgICB3aWR0aDogJzEycHgnCiAgICAgIH0pLAogICAgICAgICAgalF1ZXJ5a2V5d3JhcCA9IGpRdWVyeSgnPGRpdiAvPicpLmNzcyh7CiAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJywKICAgICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJwogICAgICAgIH0pLmFwcGVuZChqUXVlcnlrZXltZ3IpOwoKICAgICAgZnVuY3Rpb24gd2F0Y2hLZXlzKCkgLy97e3sKICAgICAgewogICAgICAgIGlmIChvcHRpb25zLmtleVN1cHBvcnQpIHsKICAgICAgICAgIGpRdWVyeWtleW1nci5zaG93KCk7CiAgICAgICAgICBqUXVlcnlrZXltZ3IuZm9jdXMoKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLy99fX0KICAgICAgZnVuY3Rpb24gb25CbHVyKGUpIC8ve3t7CiAgICAgIHsKICAgICAgICBqUXVlcnlrZXltZ3IuaGlkZSgpOwogICAgICB9CiAgICAgIC8vfX19CiAgICAgIGZ1bmN0aW9uIGRvTnVkZ2UoZSwgeCwgeSkgLy97e3sKICAgICAgewogICAgICAgIGlmIChvcHRpb25zLmFsbG93TW92ZSkgewogICAgICAgICAgQ29vcmRzLm1vdmVPZmZzZXQoW3gsIHldKTsKICAgICAgICAgIFNlbGVjdGlvbi51cGRhdGVWaXNpYmxlKHRydWUpOwogICAgICAgIH0KICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgfQogICAgICAvL319fQogICAgICBmdW5jdGlvbiBwYXJzZUtleShlKSAvL3t7ewogICAgICB7CiAgICAgICAgaWYgKGUuY3RybEtleSB8fCBlLm1ldGFLZXkpIHsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICBzaGlmdF9kb3duID0gZS5zaGlmdEtleSA/IHRydWUgOiBmYWxzZTsKICAgICAgICB2YXIgbnVkZ2UgPSBzaGlmdF9kb3duID8gMTAgOiAxOwoKICAgICAgICBzd2l0Y2ggKGUua2V5Q29kZSkgewogICAgICAgIGNhc2UgMzc6CiAgICAgICAgICBkb051ZGdlKGUsIC1udWRnZSwgMCk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDM5OgogICAgICAgICAgZG9OdWRnZShlLCBudWRnZSwgMCk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDM4OgogICAgICAgICAgZG9OdWRnZShlLCAwLCAtbnVkZ2UpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSA0MDoKICAgICAgICAgIGRvTnVkZ2UoZSwgMCwgbnVkZ2UpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAyNzoKICAgICAgICAgIGlmIChvcHRpb25zLmFsbG93U2VsZWN0KSBTZWxlY3Rpb24ucmVsZWFzZSgpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSA5OgogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgLy99fX0KCiAgICAgIGlmIChvcHRpb25zLmtleVN1cHBvcnQpIHsKICAgICAgICBqUXVlcnlrZXltZ3Iua2V5ZG93bihwYXJzZUtleSkuYmx1cihvbkJsdXIpOwogICAgICAgIGlmIChpZTZtb2RlIHx8ICFvcHRpb25zLmZpeGVkU3VwcG9ydCkgewogICAgICAgICAgalF1ZXJ5a2V5bWdyLmNzcyh7CiAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLAogICAgICAgICAgICBsZWZ0OiAnLTIwcHgnCiAgICAgICAgICB9KTsKICAgICAgICAgIGpRdWVyeWtleXdyYXAuYXBwZW5kKGpRdWVyeWtleW1ncikuaW5zZXJ0QmVmb3JlKGpRdWVyeWltZyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGpRdWVyeWtleW1nci5pbnNlcnRCZWZvcmUoalF1ZXJ5aW1nKTsKICAgICAgICB9CiAgICAgIH0KCgogICAgICByZXR1cm4gewogICAgICAgIHdhdGNoS2V5czogd2F0Y2hLZXlzCiAgICAgIH07CiAgICB9KCkpOwogICAgLy99fX0KICAgIC8vIH19fQogICAgLy8gQVBJIG1ldGhvZHMge3t7CiAgICBmdW5jdGlvbiBzZXRDbGFzcyhjbmFtZSkgLy97e3sKICAgIHsKICAgICAgalF1ZXJ5ZGl2LnJlbW92ZUNsYXNzKCkuYWRkQ2xhc3MoY3NzQ2xhc3MoJ2hvbGRlcicpKS5hZGRDbGFzcyhjbmFtZSk7CiAgICB9CiAgICAvL319fQogICAgZnVuY3Rpb24gYW5pbWF0ZVRvKGEsIGNhbGxiYWNrKSAvL3t7ewogICAgewogICAgICB2YXIgeDEgPSBhWzBdIC8geHNjYWxlLAogICAgICAgICAgeTEgPSBhWzFdIC8geXNjYWxlLAogICAgICAgICAgeDIgPSBhWzJdIC8geHNjYWxlLAogICAgICAgICAgeTIgPSBhWzNdIC8geXNjYWxlOwoKICAgICAgaWYgKGFuaW1hdGluZykgewogICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgdmFyIGFuaW10byA9IENvb3Jkcy5mbGlwQ29vcmRzKHgxLCB5MSwgeDIsIHkyKSwKICAgICAgICAgIGMgPSBDb29yZHMuZ2V0Rml4ZWQoKSwKICAgICAgICAgIGluaXRjciA9IFtjLngsIGMueSwgYy54MiwgYy55Ml0sCiAgICAgICAgICBhbmltYXQgPSBpbml0Y3IsCiAgICAgICAgICBpbnRlcnYgPSBvcHRpb25zLmFuaW1hdGlvbkRlbGF5LAogICAgICAgICAgaXgxID0gYW5pbXRvWzBdIC0gaW5pdGNyWzBdLAogICAgICAgICAgaXkxID0gYW5pbXRvWzFdIC0gaW5pdGNyWzFdLAogICAgICAgICAgaXgyID0gYW5pbXRvWzJdIC0gaW5pdGNyWzJdLAogICAgICAgICAgaXkyID0gYW5pbXRvWzNdIC0gaW5pdGNyWzNdLAogICAgICAgICAgcGNlbnQgPSAwLAogICAgICAgICAgdmVsb2NpdHkgPSBvcHRpb25zLnN3aW5nU3BlZWQ7CgogICAgICB4ID0gYW5pbWF0WzBdOwogICAgICB5ID0gYW5pbWF0WzFdOwogICAgICB4MiA9IGFuaW1hdFsyXTsKICAgICAgeTIgPSBhbmltYXRbM107CgogICAgICBTZWxlY3Rpb24uYW5pbU1vZGUodHJ1ZSk7CiAgICAgIHZhciBhbmltX3RpbWVyOwoKICAgICAgZnVuY3Rpb24gcXVldWVBbmltYXRvcigpIHsKICAgICAgICB3aW5kb3cuc2V0VGltZW91dChhbmltYXRvciwgaW50ZXJ2KTsKICAgICAgfQogICAgICB2YXIgYW5pbWF0b3IgPSAoZnVuY3Rpb24gKCkgewogICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBwY2VudCArPSAoMTAwIC0gcGNlbnQpIC8gdmVsb2NpdHk7CgogICAgICAgICAgYW5pbWF0WzBdID0geCArICgocGNlbnQgLyAxMDApICogaXgxKTsKICAgICAgICAgIGFuaW1hdFsxXSA9IHkgKyAoKHBjZW50IC8gMTAwKSAqIGl5MSk7CiAgICAgICAgICBhbmltYXRbMl0gPSB4MiArICgocGNlbnQgLyAxMDApICogaXgyKTsKICAgICAgICAgIGFuaW1hdFszXSA9IHkyICsgKChwY2VudCAvIDEwMCkgKiBpeTIpOwoKICAgICAgICAgIGlmIChwY2VudCA+PSA5OS44KSB7CiAgICAgICAgICAgIHBjZW50ID0gMTAwOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHBjZW50IDwgMTAwKSB7CiAgICAgICAgICAgIHNldFNlbGVjdFJhdyhhbmltYXQpOwogICAgICAgICAgICBxdWV1ZUFuaW1hdG9yKCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBTZWxlY3Rpb24uZG9uZSgpOwogICAgICAgICAgICBpZiAodHlwZW9mKGNhbGxiYWNrKSA9PT0gJ2Z1bmN0aW9uJykgewogICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwoYXBpKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH07CiAgICAgIH0oKSk7CiAgICAgIHF1ZXVlQW5pbWF0b3IoKTsKICAgIH0KICAgIC8vfX19CiAgICBmdW5jdGlvbiBzZXRTZWxlY3QocmVjdCkgLy97e3sKICAgIHsKICAgICAgc2V0U2VsZWN0UmF3KFtyZWN0WzBdIC8geHNjYWxlLCByZWN0WzFdIC8geXNjYWxlLCByZWN0WzJdIC8geHNjYWxlLCByZWN0WzNdIC8geXNjYWxlXSk7CiAgICAgIG9wdGlvbnMub25TZWxlY3QuY2FsbChhcGksIHVuc2NhbGUoQ29vcmRzLmdldEZpeGVkKCkpKTsKICAgICAgU2VsZWN0aW9uLmVuYWJsZUhhbmRsZXMoKTsKICAgIH0KICAgIC8vfX19CiAgICBmdW5jdGlvbiBzZXRTZWxlY3RSYXcobCkgLy97e3sKICAgIHsKICAgICAgQ29vcmRzLnNldFByZXNzZWQoW2xbMF0sIGxbMV1dKTsKICAgICAgQ29vcmRzLnNldEN1cnJlbnQoW2xbMl0sIGxbM11dKTsKICAgICAgU2VsZWN0aW9uLnVwZGF0ZSgpOwogICAgfQogICAgLy99fX0KICAgIGZ1bmN0aW9uIHRlbGxTZWxlY3QoKSAvL3t7ewogICAgewogICAgICByZXR1cm4gdW5zY2FsZShDb29yZHMuZ2V0Rml4ZWQoKSk7CiAgICB9CiAgICAvL319fQogICAgZnVuY3Rpb24gdGVsbFNjYWxlZCgpIC8ve3t7CiAgICB7CiAgICAgIHJldHVybiBDb29yZHMuZ2V0Rml4ZWQoKTsKICAgIH0KICAgIC8vfX19CiAgICBmdW5jdGlvbiBzZXRPcHRpb25zTmV3KG9wdCkgLy97e3sKICAgIHsKICAgICAgc2V0T3B0aW9ucyhvcHQpOwogICAgICBpbnRlcmZhY2VVcGRhdGUoKTsKICAgIH0KICAgIC8vfX19CiAgICBmdW5jdGlvbiBkaXNhYmxlQ3JvcCgpIC8ve3t7CiAgICB7CiAgICAgIG9wdGlvbnMuZGlzYWJsZWQgPSB0cnVlOwogICAgICBTZWxlY3Rpb24uZGlzYWJsZUhhbmRsZXMoKTsKICAgICAgU2VsZWN0aW9uLnNldEN1cnNvcignZGVmYXVsdCcpOwogICAgICBUcmFja2VyLnNldEN1cnNvcignZGVmYXVsdCcpOwogICAgfQogICAgLy99fX0KICAgIGZ1bmN0aW9uIGVuYWJsZUNyb3AoKSAvL3t7ewogICAgewogICAgICBvcHRpb25zLmRpc2FibGVkID0gZmFsc2U7CiAgICAgIGludGVyZmFjZVVwZGF0ZSgpOwogICAgfQogICAgLy99fX0KICAgIGZ1bmN0aW9uIGNhbmNlbENyb3AoKSAvL3t7ewogICAgewogICAgICBTZWxlY3Rpb24uZG9uZSgpOwogICAgICBUcmFja2VyLmFjdGl2YXRlSGFuZGxlcnMobnVsbCwgbnVsbCk7CiAgICB9CiAgICAvL319fQogICAgZnVuY3Rpb24gZGVzdHJveSgpIC8ve3t7CiAgICB7CiAgICAgIGpRdWVyeWRpdi5yZW1vdmUoKTsKICAgICAgalF1ZXJ5b3JpZ2ltZy5zaG93KCk7CiAgICAgIGpRdWVyeShvYmopLnJlbW92ZURhdGEoJ0pjcm9wJyk7CiAgICB9CiAgICAvL319fQogICAgZnVuY3Rpb24gc2V0SW1hZ2Uoc3JjLCBjYWxsYmFjaykgLy97e3sKICAgIHsKICAgICAgU2VsZWN0aW9uLnJlbGVhc2UoKTsKICAgICAgZGlzYWJsZUNyb3AoKTsKICAgICAgdmFyIGltZyA9IG5ldyBJbWFnZSgpOwogICAgICBpbWcub25sb2FkID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBpdyA9IGltZy53aWR0aDsKICAgICAgICB2YXIgaWggPSBpbWcuaGVpZ2h0OwogICAgICAgIHZhciBidyA9IG9wdGlvbnMuYm94V2lkdGg7CiAgICAgICAgdmFyIGJoID0gb3B0aW9ucy5ib3hIZWlnaHQ7CiAgICAgICAgalF1ZXJ5aW1nLndpZHRoKGl3KS5oZWlnaHQoaWgpOwogICAgICAgIGpRdWVyeWltZy5hdHRyKCdzcmMnLCBzcmMpOwogICAgICAgIGpRdWVyeWltZzIuYXR0cignc3JjJywgc3JjKTsKICAgICAgICBwcmVzaXplKGpRdWVyeWltZywgYncsIGJoKTsKICAgICAgICBib3VuZHggPSBqUXVlcnlpbWcud2lkdGgoKTsKICAgICAgICBib3VuZHkgPSBqUXVlcnlpbWcuaGVpZ2h0KCk7CiAgICAgICAgalF1ZXJ5aW1nMi53aWR0aChib3VuZHgpLmhlaWdodChib3VuZHkpOwogICAgICAgIGpRdWVyeXRyay53aWR0aChib3VuZHggKyAoYm91bmQgKiAyKSkuaGVpZ2h0KGJvdW5keSArIChib3VuZCAqIDIpKTsKICAgICAgICBqUXVlcnlkaXYud2lkdGgoYm91bmR4KS5oZWlnaHQoYm91bmR5KTsKICAgICAgICBTaGFkZS5yZXNpemUoYm91bmR4LGJvdW5keSk7CiAgICAgICAgZW5hYmxlQ3JvcCgpOwoKICAgICAgICBpZiAodHlwZW9mKGNhbGxiYWNrKSA9PT0gJ2Z1bmN0aW9uJykgewogICAgICAgICAgY2FsbGJhY2suY2FsbChhcGkpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgaW1nLnNyYyA9IHNyYzsKICAgIH0KICAgIC8vfX19CiAgICBmdW5jdGlvbiBjb2xvckNoYW5nZU1hY3JvKGpRdWVyeW9iaixjb2xvcixub3cpIHsKICAgICAgdmFyIG15Y29sb3IgPSBjb2xvciB8fCBvcHRpb25zLmJnQ29sb3I7CiAgICAgIGlmIChvcHRpb25zLmJnRmFkZSAmJiBzdXBwb3J0c0NvbG9yRmFkZSgpICYmIG9wdGlvbnMuZmFkZVRpbWUgJiYgIW5vdykgewogICAgICAgIGpRdWVyeW9iai5hbmltYXRlKHsKICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogbXljb2xvcgogICAgICAgIH0sIHsKICAgICAgICAgIHF1ZXVlOiBmYWxzZSwKICAgICAgICAgIGR1cmF0aW9uOiBvcHRpb25zLmZhZGVUaW1lCiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgalF1ZXJ5b2JqLmNzcygnYmFja2dyb3VuZENvbG9yJywgbXljb2xvcik7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIGludGVyZmFjZVVwZGF0ZShhbHQpIC8ve3t7CiAgICAvLyBUaGlzIG1ldGhvZCB0d2Vha3MgdGhlIGludGVyZmFjZSBiYXNlZCBvbiBvcHRpb25zIG9iamVjdC4KICAgIC8vIENhbGxlZCB3aGVuIG9wdGlvbnMgYXJlIGNoYW5nZWQgYW5kIGF0IGVuZCBvZiBpbml0aWFsaXphdGlvbi4KICAgIHsKICAgICAgaWYgKG9wdGlvbnMuYWxsb3dSZXNpemUpIHsKICAgICAgICBpZiAoYWx0KSB7CiAgICAgICAgICBTZWxlY3Rpb24uZW5hYmxlT25seSgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBTZWxlY3Rpb24uZW5hYmxlSGFuZGxlcygpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBTZWxlY3Rpb24uZGlzYWJsZUhhbmRsZXMoKTsKICAgICAgfQoKICAgICAgVHJhY2tlci5zZXRDdXJzb3Iob3B0aW9ucy5hbGxvd1NlbGVjdCA/ICdjcm9zc2hhaXInIDogJ2RlZmF1bHQnKTsKICAgICAgU2VsZWN0aW9uLnNldEN1cnNvcihvcHRpb25zLmFsbG93TW92ZSA/ICdtb3ZlJyA6ICdkZWZhdWx0Jyk7CgogICAgICBpZiAob3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgndHJ1ZVNpemUnKSkgewogICAgICAgIHhzY2FsZSA9IG9wdGlvbnMudHJ1ZVNpemVbMF0gLyBib3VuZHg7CiAgICAgICAgeXNjYWxlID0gb3B0aW9ucy50cnVlU2l6ZVsxXSAvIGJvdW5keTsKICAgICAgfQoKICAgICAgaWYgKG9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ3NldFNlbGVjdCcpKSB7CiAgICAgICAgc2V0U2VsZWN0KG9wdGlvbnMuc2V0U2VsZWN0KTsKICAgICAgICBTZWxlY3Rpb24uZG9uZSgpOwogICAgICAgIGRlbGV0ZShvcHRpb25zLnNldFNlbGVjdCk7CiAgICAgIH0KCiAgICAgIFNoYWRlLnJlZnJlc2goKTsKCiAgICAgIGlmIChvcHRpb25zLmJnQ29sb3IgIT0gYmdjb2xvcikgewogICAgICAgIGNvbG9yQ2hhbmdlTWFjcm8oCiAgICAgICAgICBvcHRpb25zLnNoYWRlPyBTaGFkZS5nZXRTaGFkZXMoKTogalF1ZXJ5ZGl2LAogICAgICAgICAgb3B0aW9ucy5zaGFkZT8KICAgICAgICAgICAgKG9wdGlvbnMuc2hhZGVDb2xvciB8fCBvcHRpb25zLmJnQ29sb3IpOgogICAgICAgICAgICBvcHRpb25zLmJnQ29sb3IKICAgICAgICApOwogICAgICAgIGJnY29sb3IgPSBvcHRpb25zLmJnQ29sb3I7CiAgICAgIH0KCiAgICAgIGlmIChiZ29wYWNpdHkgIT0gb3B0aW9ucy5iZ09wYWNpdHkpIHsKICAgICAgICBiZ29wYWNpdHkgPSBvcHRpb25zLmJnT3BhY2l0eTsKICAgICAgICBpZiAob3B0aW9ucy5zaGFkZSkgU2hhZGUucmVmcmVzaCgpOwogICAgICAgICAgZWxzZSBTZWxlY3Rpb24uc2V0QmdPcGFjaXR5KGJnb3BhY2l0eSk7CiAgICAgIH0KCiAgICAgIHhsaW1pdCA9IG9wdGlvbnMubWF4U2l6ZVswXSB8fCAwOwogICAgICB5bGltaXQgPSBvcHRpb25zLm1heFNpemVbMV0gfHwgMDsKICAgICAgeG1pbiA9IG9wdGlvbnMubWluU2l6ZVswXSB8fCAwOwogICAgICB5bWluID0gb3B0aW9ucy5taW5TaXplWzFdIHx8IDA7CgogICAgICBpZiAob3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnb3V0ZXJJbWFnZScpKSB7CiAgICAgICAgalF1ZXJ5aW1nLmF0dHIoJ3NyYycsIG9wdGlvbnMub3V0ZXJJbWFnZSk7CiAgICAgICAgZGVsZXRlKG9wdGlvbnMub3V0ZXJJbWFnZSk7CiAgICAgIH0KCiAgICAgIFNlbGVjdGlvbi5yZWZyZXNoKCk7CiAgICB9CiAgICAvL319fQogICAgLy99fX0KCiAgICBpZiAoVG91Y2guc3VwcG9ydCkgalF1ZXJ5dHJrLmJpbmQoJ3RvdWNoc3RhcnQuamNyb3AnLCBUb3VjaC5uZXdTZWxlY3Rpb24pOwoKICAgIGpRdWVyeWhkbF9ob2xkZXIuaGlkZSgpOwogICAgaW50ZXJmYWNlVXBkYXRlKHRydWUpOwoKICAgIHZhciBhcGkgPSB7CiAgICAgIHNldEltYWdlOiBzZXRJbWFnZSwKICAgICAgYW5pbWF0ZVRvOiBhbmltYXRlVG8sCiAgICAgIHNldFNlbGVjdDogc2V0U2VsZWN0LAogICAgICBzZXRPcHRpb25zOiBzZXRPcHRpb25zTmV3LAogICAgICB0ZWxsU2VsZWN0OiB0ZWxsU2VsZWN0LAogICAgICB0ZWxsU2NhbGVkOiB0ZWxsU2NhbGVkLAogICAgICBzZXRDbGFzczogc2V0Q2xhc3MsCgogICAgICBkaXNhYmxlOiBkaXNhYmxlQ3JvcCwKICAgICAgZW5hYmxlOiBlbmFibGVDcm9wLAogICAgICBjYW5jZWw6IGNhbmNlbENyb3AsCiAgICAgIHJlbGVhc2U6IFNlbGVjdGlvbi5yZWxlYXNlLAogICAgICBkZXN0cm95OiBkZXN0cm95LAoKICAgICAgZm9jdXM6IEtleU1hbmFnZXIud2F0Y2hLZXlzLAoKICAgICAgZ2V0Qm91bmRzOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgcmV0dXJuIFtib3VuZHggKiB4c2NhbGUsIGJvdW5keSAqIHlzY2FsZV07CiAgICAgIH0sCiAgICAgIGdldFdpZGdldFNpemU6IGZ1bmN0aW9uICgpIHsKICAgICAgICByZXR1cm4gW2JvdW5keCwgYm91bmR5XTsKICAgICAgfSwKICAgICAgZ2V0U2NhbGVGYWN0b3I6IGZ1bmN0aW9uICgpIHsKICAgICAgICByZXR1cm4gW3hzY2FsZSwgeXNjYWxlXTsKICAgICAgfSwKICAgICAgZ2V0T3B0aW9uczogZnVuY3Rpb24oKSB7CiAgICAgICAgLy8gY2FyZWZ1bDogaW50ZXJuYWwgdmFsdWVzIGFyZSByZXR1cm5lZAogICAgICAgIHJldHVybiBvcHRpb25zOwogICAgICB9LAoKICAgICAgdWk6IHsKICAgICAgICBob2xkZXI6IGpRdWVyeWRpdiwKICAgICAgICBzZWxlY3Rpb246IGpRdWVyeXNlbAogICAgICB9CiAgICB9OwoKICAgIGlmIChqUXVlcnkuYnJvd3Nlci5tc2llKQogICAgICBqUXVlcnlkaXYuYmluZCgnc2VsZWN0c3RhcnQnLCBmdW5jdGlvbiAoKSB7IHJldHVybiBmYWxzZTsgfSk7CgogICAgalF1ZXJ5b3JpZ2ltZy5kYXRhKCdKY3JvcCcsIGFwaSk7CiAgICByZXR1cm4gYXBpOwogIH07CiAgalF1ZXJ5LmZuLkpjcm9wID0gZnVuY3Rpb24gKG9wdGlvbnMsIGNhbGxiYWNrKSAvL3t7ewogIHsKICAgIHZhciBhcGk7CiAgICAvLyBJdGVyYXRlIG92ZXIgZWFjaCBvYmplY3QsIGF0dGFjaCBKY3JvcAogICAgdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsKICAgICAgLy8gSWYgd2UndmUgYWxyZWFkeSBhdHRhY2hlZCB0byB0aGlzIG9iamVjdAogICAgICBpZiAoalF1ZXJ5KHRoaXMpLmRhdGEoJ0pjcm9wJykpIHsKICAgICAgICAvLyBUaGUgQVBJIGNhbiBiZSByZXF1ZXN0ZWQgdGhpcyB3YXkgKHVuZG9jdW1lbnRlZCkKICAgICAgICBpZiAob3B0aW9ucyA9PT0gJ2FwaScpIHJldHVybiBqUXVlcnkodGhpcykuZGF0YSgnSmNyb3AnKTsKICAgICAgICAvLyBPdGhlcndpc2UsIHdlIGp1c3QgcmVzZXQgdGhlIG9wdGlvbnMuLi4KICAgICAgICBlbHNlIGpRdWVyeSh0aGlzKS5kYXRhKCdKY3JvcCcpLnNldE9wdGlvbnMob3B0aW9ucyk7CiAgICAgIH0KICAgICAgLy8gSWYgd2UgaGF2ZW4ndCBiZWVuIGF0dGFjaGVkLCBwcmVsb2FkIGFuZCBhdHRhY2gKICAgICAgZWxzZSB7CiAgICAgICAgaWYgKHRoaXMudGFnTmFtZSA9PSAnSU1HJykKICAgICAgICAgIGpRdWVyeS5KY3JvcC5Mb2FkZXIodGhpcyxmdW5jdGlvbigpewogICAgICAgICAgICBqUXVlcnkodGhpcykuY3NzKHtkaXNwbGF5OidibG9jaycsdmlzaWJpbGl0eTonaGlkZGVuJ30pOwogICAgICAgICAgICBhcGkgPSBqUXVlcnkuSmNyb3AodGhpcywgb3B0aW9ucyk7CiAgICAgICAgICAgIGlmIChqUXVlcnkuaXNGdW5jdGlvbihjYWxsYmFjaykpIGNhbGxiYWNrLmNhbGwoYXBpKTsKICAgICAgICAgIH0pOwogICAgICAgIGVsc2UgewogICAgICAgICAgalF1ZXJ5KHRoaXMpLmNzcyh7ZGlzcGxheTonYmxvY2snLHZpc2liaWxpdHk6J2hpZGRlbid9KTsKICAgICAgICAgIGFwaSA9IGpRdWVyeS5KY3JvcCh0aGlzLCBvcHRpb25zKTsKICAgICAgICAgIGlmIChqUXVlcnkuaXNGdW5jdGlvbihjYWxsYmFjaykpIGNhbGxiYWNrLmNhbGwoYXBpKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0pOwoKICAgIC8vIFJldHVybiAidGhpcyIgc28gdGhlIG9iamVjdCBpcyBjaGFpbmFibGUgKGpRdWVyeS1zdHlsZSkKICAgIHJldHVybiB0aGlzOwogIH07CiAgLy99fX0KICAvLyBqUXVlcnkuSmNyb3AuTG9hZGVyIC0gYmFzaWMgaW1hZ2UgbG9hZGVyIHt7ewoKICBqUXVlcnkuSmNyb3AuTG9hZGVyID0gZnVuY3Rpb24oaW1nb2JqLHN1Y2Nlc3MsZXJyb3IpewogICAgdmFyIGpRdWVyeWltZyA9IGpRdWVyeShpbWdvYmopLCBpbWcgPSBqUXVlcnlpbWdbMF07CgogICAgZnVuY3Rpb24gY29tcGxldGVDaGVjaygpewogICAgICBpZiAoaW1nLmNvbXBsZXRlKSB7CiAgICAgICAgalF1ZXJ5aW1nLnVuYmluZCgnLmpjbG9hZGVyJyk7CiAgICAgICAgaWYgKGpRdWVyeS5pc0Z1bmN0aW9uKHN1Y2Nlc3MpKSBzdWNjZXNzLmNhbGwoaW1nKTsKICAgICAgfQogICAgICBlbHNlIHdpbmRvdy5zZXRUaW1lb3V0KGNvbXBsZXRlQ2hlY2ssNTApOwogICAgfQoKICAgIGpRdWVyeWltZwogICAgICAuYmluZCgnbG9hZC5qY2xvYWRlcicsY29tcGxldGVDaGVjaykKICAgICAgLmJpbmQoJ2Vycm9yLmpjbG9hZGVyJyxmdW5jdGlvbihlKXsKICAgICAgICBqUXVlcnlpbWcudW5iaW5kKCcuamNsb2FkZXInKTsKICAgICAgICBpZiAoalF1ZXJ5LmlzRnVuY3Rpb24oZXJyb3IpKSBlcnJvci5jYWxsKGltZyk7CiAgICAgIH0pOwoKICAgIGlmIChpbWcuY29tcGxldGUgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oc3VjY2VzcykpewogICAgICBqUXVlcnlpbWcudW5iaW5kKCcuamNsb2FkZXInKTsKICAgICAgc3VjY2Vzcy5jYWxsKGltZyk7CiAgICB9CiAgfTsKCiAgLy99fX0KICAvLyBHbG9iYWwgRGVmYXVsdHMge3t7CiAgalF1ZXJ5Lkpjcm9wLmRlZmF1bHRzID0gewoKICAgIC8vIEJhc2ljIFNldHRpbmdzCiAgICBhbGxvd1NlbGVjdDogdHJ1ZSwKICAgIGFsbG93TW92ZTogdHJ1ZSwKICAgIGFsbG93UmVzaXplOiB0cnVlLAoKICAgIHRyYWNrRG9jdW1lbnQ6IHRydWUsCgogICAgLy8gU3R5bGluZyBPcHRpb25zCiAgICBiYXNlQ2xhc3M6ICdqY3JvcCcsCiAgICBhZGRDbGFzczogbnVsbCwKICAgIGJnQ29sb3I6ICdibGFjaycsCiAgICBiZ09wYWNpdHk6IDAuNiwKICAgIGJnRmFkZTogZmFsc2UsCiAgICBib3JkZXJPcGFjaXR5OiAwLjQsCiAgICBoYW5kbGVPcGFjaXR5OiAwLjUsCiAgICBoYW5kbGVTaXplOiA3LAoKICAgIGFzcGVjdFJhdGlvOiAwLAogICAga2V5U3VwcG9ydDogdHJ1ZSwKICAgIGNyZWF0ZUhhbmRsZXM6IFsnbicsJ3MnLCdlJywndycsJ253JywnbmUnLCdzZScsJ3N3J10sCiAgICBjcmVhdGVEcmFnYmFyczogWyduJywncycsJ2UnLCd3J10sCiAgICBjcmVhdGVCb3JkZXJzOiBbJ24nLCdzJywnZScsJ3cnXSwKICAgIGRyYXdCb3JkZXJzOiB0cnVlLAogICAgZHJhZ0VkZ2VzOiB0cnVlLAogICAgZml4ZWRTdXBwb3J0OiB0cnVlLAogICAgdG91Y2hTdXBwb3J0OiBudWxsLAoKICAgIHNoYWRlOiBudWxsLAoKICAgIGJveFdpZHRoOiAwLAogICAgYm94SGVpZ2h0OiAwLAogICAgYm91bmRhcnk6IDIsCiAgICBmYWRlVGltZTogNDAwLAogICAgYW5pbWF0aW9uRGVsYXk6IDIwLAogICAgc3dpbmdTcGVlZDogMywKCiAgICBtaW5TZWxlY3Q6IFswLCAwXSwKICAgIG1heFNpemU6IFswLCAwXSwKICAgIG1pblNpemU6IFswLCAwXSwKCiAgICAvLyBDYWxsYmFja3MgLyBFdmVudCBIYW5kbGVycwogICAgb25DaGFuZ2U6IGZ1bmN0aW9uICgpIHt9LAogICAgb25TZWxlY3Q6IGZ1bmN0aW9uICgpIHt9LAogICAgb25EYmxDbGljazogZnVuY3Rpb24gKCkge30sCiAgICBvblJlbGVhc2U6IGZ1bmN0aW9uICgpIHt9CiAgfTsKCiAgLy8gfX19Cn0oalF1ZXJ5KSk7Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/js/jquery.Jcrop.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIGpxdWVyeS5KY3JvcC5taW4uanMgdjAuOS4xMCAoYnVpbGQ6MjAxMjA0MjkpCiAqIGpRdWVyeSBJbWFnZSBDcm9wcGluZyBQbHVnaW4gLSByZWxlYXNlZCB1bmRlciBNSVQgTGljZW5zZQogKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiBUYXBtb2RvIEludGVyYWN0aXZlIExMQwogKiBodHRwczovL2dpdGh1Yi5jb20vdGFwbW9kby9KY3JvcAogKi8KKGZ1bmN0aW9uKGEpe2EuSmNyb3A9ZnVuY3Rpb24oYixjKXtmdW5jdGlvbiBoKGEpe3JldHVybiBhKyJweCJ9ZnVuY3Rpb24gaShhKXtyZXR1cm4gZC5iYXNlQ2xhc3MrIi0iK2F9ZnVuY3Rpb24gaigpe3JldHVybiBhLmZ4LnN0ZXAuaGFzT3duUHJvcGVydHkoImJhY2tncm91bmRDb2xvciIpfWZ1bmN0aW9uIGsoYil7dmFyIGM9YShiKS5vZmZzZXQoKTtyZXR1cm5bYy5sZWZ0LGMudG9wXX1mdW5jdGlvbiBsKGEpe3JldHVyblthLnBhZ2VYLWVbMF0sYS5wYWdlWS1lWzFdXX1mdW5jdGlvbiBtKGIpe3R5cGVvZiBiIT0ib2JqZWN0IiYmKGI9e30pLGQ9YS5leHRlbmQoZCxiKSxhLmVhY2goWyJvbkNoYW5nZSIsIm9uU2VsZWN0Iiwib25SZWxlYXNlIiwib25EYmxDbGljayJdLGZ1bmN0aW9uKGEsYil7dHlwZW9mIGRbYl0hPSJmdW5jdGlvbiImJihkW2JdPWZ1bmN0aW9uKCl7fSl9KX1mdW5jdGlvbiBuKGEsYil7ZT1rKEUpLGJkLnNldEN1cnNvcihhPT09Im1vdmUiP2E6YSsiLXJlc2l6ZSIpO2lmKGE9PT0ibW92ZSIpcmV0dXJuIGJkLmFjdGl2YXRlSGFuZGxlcnMocChiKSx1KTt2YXIgYz1iYS5nZXRGaXhlZCgpLGQ9cShhKSxmPWJhLmdldENvcm5lcihxKGQpKTtiYS5zZXRQcmVzc2VkKGJhLmdldENvcm5lcihkKSksYmEuc2V0Q3VycmVudChmKSxiZC5hY3RpdmF0ZUhhbmRsZXJzKG8oYSxjKSx1KX1mdW5jdGlvbiBvKGEsYil7cmV0dXJuIGZ1bmN0aW9uKGMpe2lmKCFkLmFzcGVjdFJhdGlvKXN3aXRjaChhKXtjYXNlImUiOmNbMV09Yi55MjticmVhaztjYXNlInciOmNbMV09Yi55MjticmVhaztjYXNlIm4iOmNbMF09Yi54MjticmVhaztjYXNlInMiOmNbMF09Yi54Mn1lbHNlIHN3aXRjaChhKXtjYXNlImUiOmNbMV09Yi55KzE7YnJlYWs7Y2FzZSJ3IjpjWzFdPWIueSsxO2JyZWFrO2Nhc2UibiI6Y1swXT1iLngrMTticmVhaztjYXNlInMiOmNbMF09Yi54KzF9YmEuc2V0Q3VycmVudChjKSxiYy51cGRhdGUoKX19ZnVuY3Rpb24gcChhKXt2YXIgYj1hO3JldHVybiBiZS53YXRjaEtleXMoKSxmdW5jdGlvbigKYSl7YmEubW92ZU9mZnNldChbYVswXS1iWzBdLGFbMV0tYlsxXV0pLGI9YSxiYy51cGRhdGUoKX19ZnVuY3Rpb24gcShhKXtzd2l0Y2goYSl7Y2FzZSJuIjpyZXR1cm4ic3ciO2Nhc2UicyI6cmV0dXJuIm53IjtjYXNlImUiOnJldHVybiJudyI7Y2FzZSJ3IjpyZXR1cm4ibmUiO2Nhc2UibmUiOnJldHVybiJzdyI7Y2FzZSJudyI6cmV0dXJuInNlIjtjYXNlInNlIjpyZXR1cm4ibnciO2Nhc2Uic3ciOnJldHVybiJuZSJ9fWZ1bmN0aW9uIHIoYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3JldHVybiBkLmRpc2FibGVkPyExOmE9PT0ibW92ZSImJiFkLmFsbG93TW92ZT8hMTooZT1rKEUpLFg9ITAsbihhLGwoYikpLGIuc3RvcFByb3BhZ2F0aW9uKCksYi5wcmV2ZW50RGVmYXVsdCgpLCExKX19ZnVuY3Rpb24gcyhhLGIsYyl7dmFyIGQ9YS53aWR0aCgpLGU9YS5oZWlnaHQoKTtkPmImJmI+MCYmKGQ9YixlPWIvYS53aWR0aCgpKmEuaGVpZ2h0KCkpLGU+YyYmYz4wJiYoZT1jLGQ9Yy9hLmhlaWdodCgpKmEud2lkdGgoKSksVT1hLndpZHRoKCkvZCxWPWEuaGVpZ2h0KCkvZSxhLndpZHRoKGQpLmhlaWdodChlKX1mdW5jdGlvbiB0KGEpe3JldHVybnt4OmEueCpVLHk6YS55KlYseDI6YS54MipVLHkyOmEueTIqVix3OmEudypVLGg6YS5oKlZ9fWZ1bmN0aW9uIHUoYSl7dmFyIGI9YmEuZ2V0Rml4ZWQoKTtiLnc+ZC5taW5TZWxlY3RbMF0mJmIuaD5kLm1pblNlbGVjdFsxXT8oYmMuZW5hYmxlSGFuZGxlcygpLGJjLmRvbmUoKSk6YmMucmVsZWFzZSgpLGJkLnNldEN1cnNvcihkLmFsbG93U2VsZWN0PyJjcm9zc2hhaXIiOiJkZWZhdWx0Iil9ZnVuY3Rpb24gdihhKXtpZihkLmRpc2FibGVkKXJldHVybiExO2lmKCFkLmFsbG93U2VsZWN0KXJldHVybiExO1g9ITAsZT1rKEUpLGJjLmRpc2FibGVIYW5kbGVzKCksYmQuc2V0Q3Vyc29yKCJjcm9zc2hhaXIiKTt2YXIgYj1sKGEpO3JldHVybiBiYS5zZXRQcmVzc2VkKGIpLGJjLnVwZGF0ZSgpLGJkLmFjdGl2YXRlSGFuZGxlcnModyx1KSxiZS53YXRjaEtleXMoKSxhLnN0b3BQcm9wYWdhdGlvbgooKSxhLnByZXZlbnREZWZhdWx0KCksITF9ZnVuY3Rpb24gdyhhKXtiYS5zZXRDdXJyZW50KGEpLGJjLnVwZGF0ZSgpfWZ1bmN0aW9uIHooKXt2YXIgYj1hKCI8ZGl2PjwvZGl2PiIpLmFkZENsYXNzKGkoInRyYWNrZXIiKSk7cmV0dXJuIGEuYnJvd3Nlci5tc2llJiZiLmNzcyh7b3BhY2l0eTowLGJhY2tncm91bmRDb2xvcjoid2hpdGUifSksYn1mdW5jdGlvbiBiZihhKXtILnJlbW92ZUNsYXNzKCkuYWRkQ2xhc3MoaSgiaG9sZGVyIikpLmFkZENsYXNzKGEpfWZ1bmN0aW9uIGJnKGEsYil7ZnVuY3Rpb24gdCgpe3dpbmRvdy5zZXRUaW1lb3V0KHUsbCl9dmFyIGM9YVswXS9VLGU9YVsxXS9WLGY9YVsyXS9VLGc9YVszXS9WO2lmKFkpcmV0dXJuO3ZhciBoPWJhLmZsaXBDb29yZHMoYyxlLGYsZyksaT1iYS5nZXRGaXhlZCgpLGo9W2kueCxpLnksaS54MixpLnkyXSxrPWosbD1kLmFuaW1hdGlvbkRlbGF5LG09aFswXS1qWzBdLG49aFsxXS1qWzFdLG89aFsyXS1qWzJdLHA9aFszXS1qWzNdLHE9MCxyPWQuc3dpbmdTcGVlZDt4PWtbMF0seT1rWzFdLGY9a1syXSxnPWtbM10sYmMuYW5pbU1vZGUoITApO3ZhciBzLHU9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtxKz0oMTAwLXEpL3Isa1swXT14K3EvMTAwKm0sa1sxXT15K3EvMTAwKm4sa1syXT1mK3EvMTAwKm8sa1szXT1nK3EvMTAwKnAscT49OTkuOCYmKHE9MTAwKSxxPDEwMD8oYmkoayksdCgpKTooYmMuZG9uZSgpLHR5cGVvZiBiPT0iZnVuY3Rpb24iJiZiLmNhbGwoYnQpKX19KCk7dCgpfWZ1bmN0aW9uIGJoKGEpe2JpKFthWzBdL1UsYVsxXS9WLGFbMl0vVSxhWzNdL1ZdKSxkLm9uU2VsZWN0LmNhbGwoYnQsdChiYS5nZXRGaXhlZCgpKSksYmMuZW5hYmxlSGFuZGxlcygpfWZ1bmN0aW9uIGJpKGEpe2JhLnNldFByZXNzZWQoW2FbMF0sYVsxXV0pLGJhLnNldEN1cnJlbnQoW2FbMl0sYVszXV0pLGJjLnVwZGF0ZSgpfWZ1bmN0aW9uIGJqKCl7cmV0dXJuIHQoYmEuZ2V0Rml4ZWQoKSl9ZnVuY3Rpb24gYmsoKXtyZXR1cm4gYmEuZ2V0Rml4ZWQoKX1mdW5jdGlvbiBibAooYSl7bShhKSxicygpfWZ1bmN0aW9uIGJtKCl7ZC5kaXNhYmxlZD0hMCxiYy5kaXNhYmxlSGFuZGxlcygpLGJjLnNldEN1cnNvcigiZGVmYXVsdCIpLGJkLnNldEN1cnNvcigiZGVmYXVsdCIpfWZ1bmN0aW9uIGJuKCl7ZC5kaXNhYmxlZD0hMSxicygpfWZ1bmN0aW9uIGJvKCl7YmMuZG9uZSgpLGJkLmFjdGl2YXRlSGFuZGxlcnMobnVsbCxudWxsKX1mdW5jdGlvbiBicCgpe0gucmVtb3ZlKCksQi5zaG93KCksYShiKS5yZW1vdmVEYXRhKCJKY3JvcCIpfWZ1bmN0aW9uIGJxKGEsYil7YmMucmVsZWFzZSgpLGJtKCk7dmFyIGM9bmV3IEltYWdlO2Mub25sb2FkPWZ1bmN0aW9uKCl7dmFyIGU9Yy53aWR0aCxmPWMuaGVpZ2h0LGc9ZC5ib3hXaWR0aCxoPWQuYm94SGVpZ2h0O0Uud2lkdGgoZSkuaGVpZ2h0KGYpLEUuYXR0cigic3JjIixhKSxJLmF0dHIoInNyYyIsYSkscyhFLGcsaCksRj1FLndpZHRoKCksRz1FLmhlaWdodCgpLEkud2lkdGgoRikuaGVpZ2h0KEcpLE4ud2lkdGgoRitNKjIpLmhlaWdodChHK00qMiksSC53aWR0aChGKS5oZWlnaHQoRyksYmIucmVzaXplKEYsRyksYm4oKSx0eXBlb2YgYj09ImZ1bmN0aW9uIiYmYi5jYWxsKGJ0KX0sYy5zcmM9YX1mdW5jdGlvbiBicihhLGIsYyl7dmFyIGU9Ynx8ZC5iZ0NvbG9yO2QuYmdGYWRlJiZqKCkmJmQuZmFkZVRpbWUmJiFjP2EuYW5pbWF0ZSh7YmFja2dyb3VuZENvbG9yOmV9LHtxdWV1ZTohMSxkdXJhdGlvbjpkLmZhZGVUaW1lfSk6YS5jc3MoImJhY2tncm91bmRDb2xvciIsZSl9ZnVuY3Rpb24gYnMoYSl7ZC5hbGxvd1Jlc2l6ZT9hP2JjLmVuYWJsZU9ubHkoKTpiYy5lbmFibGVIYW5kbGVzKCk6YmMuZGlzYWJsZUhhbmRsZXMoKSxiZC5zZXRDdXJzb3IoZC5hbGxvd1NlbGVjdD8iY3Jvc3NoYWlyIjoiZGVmYXVsdCIpLGJjLnNldEN1cnNvcihkLmFsbG93TW92ZT8ibW92ZSI6ImRlZmF1bHQiKSxkLmhhc093blByb3BlcnR5KCJ0cnVlU2l6ZSIpJiYoVT1kLnRydWVTaXplWzBdL0YsVj1kLnRydWVTaXplWzFdL0cpLGQuaGFzT3duUHJvcGVydHkoInNldFNlbGVjdCIKKSYmKGJoKGQuc2V0U2VsZWN0KSxiYy5kb25lKCksZGVsZXRlIGQuc2V0U2VsZWN0KSxiYi5yZWZyZXNoKCksZC5iZ0NvbG9yIT1PJiYoYnIoZC5zaGFkZT9iYi5nZXRTaGFkZXMoKTpILGQuc2hhZGU/ZC5zaGFkZUNvbG9yfHxkLmJnQ29sb3I6ZC5iZ0NvbG9yKSxPPWQuYmdDb2xvciksUCE9ZC5iZ09wYWNpdHkmJihQPWQuYmdPcGFjaXR5LGQuc2hhZGU/YmIucmVmcmVzaCgpOmJjLnNldEJnT3BhY2l0eShQKSksUT1kLm1heFNpemVbMF18fDAsUj1kLm1heFNpemVbMV18fDAsUz1kLm1pblNpemVbMF18fDAsVD1kLm1pblNpemVbMV18fDAsZC5oYXNPd25Qcm9wZXJ0eSgib3V0ZXJJbWFnZSIpJiYoRS5hdHRyKCJzcmMiLGQub3V0ZXJJbWFnZSksZGVsZXRlIGQub3V0ZXJJbWFnZSksYmMucmVmcmVzaCgpfXZhciBkPWEuZXh0ZW5kKHt9LGEuSmNyb3AuZGVmYXVsdHMpLGUsZixnPSExO2EuYnJvd3Nlci5tc2llJiZhLmJyb3dzZXIudmVyc2lvbi5zcGxpdCgiLiIpWzBdPT09IjYiJiYoZz0hMCksdHlwZW9mIGIhPSJvYmplY3QiJiYoYj1hKGIpWzBdKSx0eXBlb2YgYyE9Im9iamVjdCImJihjPXt9KSxtKGMpO3ZhciBBPXtib3JkZXI6Im5vbmUiLHZpc2liaWxpdHk6InZpc2libGUiLG1hcmdpbjowLHBhZGRpbmc6MCxwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDowLGxlZnQ6MH0sQj1hKGIpLEM9ITA7aWYoYi50YWdOYW1lPT0iSU1HIil7aWYoQlswXS53aWR0aCE9MCYmQlswXS5oZWlnaHQhPTApQi53aWR0aChCWzBdLndpZHRoKSxCLmhlaWdodChCWzBdLmhlaWdodCk7ZWxzZXt2YXIgRD1uZXcgSW1hZ2U7RC5zcmM9QlswXS5zcmMsQi53aWR0aChELndpZHRoKSxCLmhlaWdodChELmhlaWdodCl9dmFyIEU9Qi5jbG9uZSgpLnJlbW92ZUF0dHIoImlkIikuY3NzKEEpLnNob3coKTtFLndpZHRoKEIud2lkdGgoKSksRS5oZWlnaHQoQi5oZWlnaHQoKSksQi5hZnRlcihFKS5oaWRlKCl9ZWxzZSBFPUIuY3NzKEEpLnNob3coKSxDPSExLGQuc2hhZGU9PT1udWxsJiYoZC5zaGFkZT0hMCk7cyhFLGQuYm94V2lkdGgsZC4KYm94SGVpZ2h0KTt2YXIgRj1FLndpZHRoKCksRz1FLmhlaWdodCgpLEg9YSgiPGRpdiAvPiIpLndpZHRoKEYpLmhlaWdodChHKS5hZGRDbGFzcyhpKCJob2xkZXIiKSkuY3NzKHtwb3NpdGlvbjoicmVsYXRpdmUiLGJhY2tncm91bmRDb2xvcjpkLmJnQ29sb3J9KS5pbnNlcnRBZnRlcihCKS5hcHBlbmQoRSk7ZC5hZGRDbGFzcyYmSC5hZGRDbGFzcyhkLmFkZENsYXNzKTt2YXIgST1hKCI8ZGl2IC8+IiksSj1hKCI8ZGl2IC8+Iikud2lkdGgoIjEwMCUiKS5oZWlnaHQoIjEwMCUiKS5jc3Moe3pJbmRleDozMTAscG9zaXRpb246ImFic29sdXRlIixvdmVyZmxvdzoiaGlkZGVuIn0pLEs9YSgiPGRpdiAvPiIpLndpZHRoKCIxMDAlIikuaGVpZ2h0KCIxMDAlIikuY3NzKCJ6SW5kZXgiLDMyMCksTD1hKCI8ZGl2IC8+IikuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLHpJbmRleDo2MDB9KS5kYmxjbGljayhmdW5jdGlvbigpe3ZhciBhPWJhLmdldEZpeGVkKCk7ZC5vbkRibENsaWNrLmNhbGwoYnQsYSl9KS5pbnNlcnRCZWZvcmUoRSkuYXBwZW5kKEosSyk7QyYmKEk9YSgiPGltZyAvPiIpLmF0dHIoInNyYyIsRS5hdHRyKCJzcmMiKSkuY3NzKEEpLndpZHRoKEYpLmhlaWdodChHKSxKLmFwcGVuZChJKSksZyYmTC5jc3Moe292ZXJmbG93WToiaGlkZGVuIn0pO3ZhciBNPWQuYm91bmRhcnksTj16KCkud2lkdGgoRitNKjIpLmhlaWdodChHK00qMikuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDpoKC1NKSxsZWZ0OmgoLU0pLHpJbmRleDoyOTB9KS5tb3VzZWRvd24odiksTz1kLmJnQ29sb3IsUD1kLmJnT3BhY2l0eSxRLFIsUyxULFUsVixXPSEwLFgsWSxaO2U9ayhFKTt2YXIgXz1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoKXt2YXIgYT17fSxiPVsidG91Y2hzdGFydCIsInRvdWNobW92ZSIsInRvdWNoZW5kIl0sYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxkO3RyeXtmb3IoZD0wO2Q8Yi5sZW5ndGg7ZCsrKXt2YXIgZT1iW2RdO2U9Im9uIitlO3ZhciBmPWUgaW4gYztmfHwoYy5zZXRBdHRyaWJ1dGUoZSwicmV0dXJuOyIKKSxmPXR5cGVvZiBjW2VdPT0iZnVuY3Rpb24iKSxhW2JbZF1dPWZ9cmV0dXJuIGEudG91Y2hzdGFydCYmYS50b3VjaGVuZCYmYS50b3VjaG1vdmV9Y2F0Y2goZyl7cmV0dXJuITF9fWZ1bmN0aW9uIGIoKXtyZXR1cm4gZC50b3VjaFN1cHBvcnQ9PT0hMHx8ZC50b3VjaFN1cHBvcnQ9PT0hMT9kLnRvdWNoU3VwcG9ydDphKCl9cmV0dXJue2NyZWF0ZURyYWdnZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3JldHVybiBiLnBhZ2VYPWIub3JpZ2luYWxFdmVudC5jaGFuZ2VkVG91Y2hlc1swXS5wYWdlWCxiLnBhZ2VZPWIub3JpZ2luYWxFdmVudC5jaGFuZ2VkVG91Y2hlc1swXS5wYWdlWSxkLmRpc2FibGVkPyExOmE9PT0ibW92ZSImJiFkLmFsbG93TW92ZT8hMTooWD0hMCxuKGEsbChiKSksYi5zdG9wUHJvcGFnYXRpb24oKSxiLnByZXZlbnREZWZhdWx0KCksITEpfX0sbmV3U2VsZWN0aW9uOmZ1bmN0aW9uKGEpe3JldHVybiBhLnBhZ2VYPWEub3JpZ2luYWxFdmVudC5jaGFuZ2VkVG91Y2hlc1swXS5wYWdlWCxhLnBhZ2VZPWEub3JpZ2luYWxFdmVudC5jaGFuZ2VkVG91Y2hlc1swXS5wYWdlWSx2KGEpfSxpc1N1cHBvcnRlZDphLHN1cHBvcnQ6YigpfX0oKSxiYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGgoZCl7ZD1uKGQpLGM9YT1kWzBdLGU9Yj1kWzFdfWZ1bmN0aW9uIGkoYSl7YT1uKGEpLGY9YVswXS1jLGc9YVsxXS1lLGM9YVswXSxlPWFbMV19ZnVuY3Rpb24gaigpe3JldHVybltmLGddfWZ1bmN0aW9uIGsoZCl7dmFyIGY9ZFswXSxnPWRbMV07MD5hK2YmJihmLT1mK2EpLDA+YitnJiYoZy09ZytiKSxHPGUrZyYmKGcrPUctKGUrZykpLEY8YytmJiYoZis9Ri0oYytmKSksYSs9ZixjKz1mLGIrPWcsZSs9Z31mdW5jdGlvbiBsKGEpe3ZhciBiPW0oKTtzd2l0Y2goYSl7Y2FzZSJuZSI6cmV0dXJuW2IueDIsYi55XTtjYXNlIm53IjpyZXR1cm5bYi54LGIueV07Y2FzZSJzZSI6cmV0dXJuW2IueDIsYi55Ml07Y2FzZSJzdyI6cmV0dXJuW2IueCxiLnkyXX19ZnVuY3Rpb24gbSgpe2lmKCFkLmFzcGVjdFJhdGlvCilyZXR1cm4gcCgpO3ZhciBmPWQuYXNwZWN0UmF0aW8sZz1kLm1pblNpemVbMF0vVSxoPWQubWF4U2l6ZVswXS9VLGk9ZC5tYXhTaXplWzFdL1Ysaj1jLWEsaz1lLWIsbD1NYXRoLmFicyhqKSxtPU1hdGguYWJzKGspLG49bC9tLHIscyx0LHU7cmV0dXJuIGg9PT0wJiYoaD1GKjEwKSxpPT09MCYmKGk9RyoxMCksbjxmPyhzPWUsdD1tKmYscj1qPDA/YS10OnQrYSxyPDA/KHI9MCx1PU1hdGguYWJzKChyLWEpL2YpLHM9azwwP2ItdTp1K2IpOnI+RiYmKHI9Rix1PU1hdGguYWJzKChyLWEpL2YpLHM9azwwP2ItdTp1K2IpKToocj1jLHU9bC9mLHM9azwwP2ItdTpiK3UsczwwPyhzPTAsdD1NYXRoLmFicygocy1iKSpmKSxyPWo8MD9hLXQ6dCthKTpzPkcmJihzPUcsdD1NYXRoLmFicyhzLWIpKmYscj1qPDA/YS10OnQrYSkpLHI+YT8oci1hPGc/cj1hK2c6ci1hPmgmJihyPWEraCkscz5iP3M9Yisoci1hKS9mOnM9Yi0oci1hKS9mKTpyPGEmJihhLXI8Zz9yPWEtZzphLXI+aCYmKHI9YS1oKSxzPmI/cz1iKyhhLXIpL2Y6cz1iLShhLXIpL2YpLHI8MD8oYS09cixyPTApOnI+RiYmKGEtPXItRixyPUYpLHM8MD8oYi09cyxzPTApOnM+RyYmKGItPXMtRyxzPUcpLHEobyhhLGIscixzKSl9ZnVuY3Rpb24gbihhKXtyZXR1cm4gYVswXTwwJiYoYVswXT0wKSxhWzFdPDAmJihhWzFdPTApLGFbMF0+RiYmKGFbMF09RiksYVsxXT5HJiYoYVsxXT1HKSxbYVswXSxhWzFdXX1mdW5jdGlvbiBvKGEsYixjLGQpe3ZhciBlPWEsZj1jLGc9YixoPWQ7cmV0dXJuIGM8YSYmKGU9YyxmPWEpLGQ8YiYmKGc9ZCxoPWIpLFtlLGcsZixoXX1mdW5jdGlvbiBwKCl7dmFyIGQ9Yy1hLGY9ZS1iLGc7cmV0dXJuIFEmJk1hdGguYWJzKGQpPlEmJihjPWQ+MD9hK1E6YS1RKSxSJiZNYXRoLmFicyhmKT5SJiYoZT1mPjA/YitSOmItUiksVC9WJiZNYXRoLmFicyhmKTxUL1YmJihlPWY+MD9iK1QvVjpiLVQvViksUy9VJiZNYXRoLmFicyhkKTxTL1UmJihjPWQ+MD9hK1MvVTphLVMvVSksYTwwJiYoYy09YSxhLT1hKSxiPDAmJihlLT1iLGItPWIpLGM8MCYmCihhLT1jLGMtPWMpLGU8MCYmKGItPWUsZS09ZSksYz5GJiYoZz1jLUYsYS09ZyxjLT1nKSxlPkcmJihnPWUtRyxiLT1nLGUtPWcpLGE+RiYmKGc9YS1HLGUtPWcsYi09ZyksYj5HJiYoZz1iLUcsZS09ZyxiLT1nKSxxKG8oYSxiLGMsZSkpfWZ1bmN0aW9uIHEoYSl7cmV0dXJue3g6YVswXSx5OmFbMV0seDI6YVsyXSx5MjphWzNdLHc6YVsyXS1hWzBdLGg6YVszXS1hWzFdfX12YXIgYT0wLGI9MCxjPTAsZT0wLGYsZztyZXR1cm57ZmxpcENvb3JkczpvLHNldFByZXNzZWQ6aCxzZXRDdXJyZW50OmksZ2V0T2Zmc2V0OmosbW92ZU9mZnNldDprLGdldENvcm5lcjpsLGdldEZpeGVkOm19fSgpLGJiPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZihhLGIpe2UubGVmdC5jc3Moe2hlaWdodDpoKGIpfSksZS5yaWdodC5jc3Moe2hlaWdodDpoKGIpfSl9ZnVuY3Rpb24gZygpe3JldHVybiBpKGJhLmdldEZpeGVkKCkpfWZ1bmN0aW9uIGkoYSl7ZS50b3AuY3NzKHtsZWZ0OmgoYS54KSx3aWR0aDpoKGEudyksaGVpZ2h0OmgoYS55KX0pLGUuYm90dG9tLmNzcyh7dG9wOmgoYS55MiksbGVmdDpoKGEueCksd2lkdGg6aChhLncpLGhlaWdodDpoKEctYS55Mil9KSxlLnJpZ2h0LmNzcyh7bGVmdDpoKGEueDIpLHdpZHRoOmgoRi1hLngyKX0pLGUubGVmdC5jc3Moe3dpZHRoOmgoYS54KX0pfWZ1bmN0aW9uIGooKXtyZXR1cm4gYSgiPGRpdiAvPiIpLmNzcyh7cG9zaXRpb246ImFic29sdXRlIixiYWNrZ3JvdW5kQ29sb3I6ZC5zaGFkZUNvbG9yfHxkLmJnQ29sb3J9KS5hcHBlbmRUbyhjKX1mdW5jdGlvbiBrKCl7Ynx8KGI9ITAsYy5pbnNlcnRCZWZvcmUoRSksZygpLGJjLnNldEJnT3BhY2l0eSgxLDAsMSksSS5oaWRlKCksbChkLnNoYWRlQ29sb3J8fGQuYmdDb2xvciwxKSxiYy5pc0F3YWtlKCk/bihkLmJnT3BhY2l0eSwxKTpuKDEsMSkpfWZ1bmN0aW9uIGwoYSxiKXticihwKCksYSxiKX1mdW5jdGlvbiBtKCl7YiYmKGMucmVtb3ZlKCksSS5zaG93KCksYj0hMSxiYy5pc0F3YWtlKCk/YmMuc2V0QmdPcGFjaXR5KGQuYmdPcGFjaXR5CiwxLDEpOihiYy5zZXRCZ09wYWNpdHkoMSwxLDEpLGJjLmRpc2FibGVIYW5kbGVzKCkpLGJyKEgsMCwxKSl9ZnVuY3Rpb24gbihhLGUpe2ImJihkLmJnRmFkZSYmIWU/Yy5hbmltYXRlKHtvcGFjaXR5OjEtYX0se3F1ZXVlOiExLGR1cmF0aW9uOmQuZmFkZVRpbWV9KTpjLmNzcyh7b3BhY2l0eToxLWF9KSl9ZnVuY3Rpb24gbygpe2Quc2hhZGU/aygpOm0oKSxiYy5pc0F3YWtlKCkmJm4oZC5iZ09wYWNpdHkpfWZ1bmN0aW9uIHAoKXtyZXR1cm4gYy5jaGlsZHJlbigpfXZhciBiPSExLGM9YSgiPGRpdiAvPiIpLmNzcyh7cG9zaXRpb246ImFic29sdXRlIix6SW5kZXg6MjQwLG9wYWNpdHk6MH0pLGU9e3RvcDpqKCksbGVmdDpqKCkuaGVpZ2h0KEcpLHJpZ2h0OmooKS5oZWlnaHQoRyksYm90dG9tOmooKX07cmV0dXJue3VwZGF0ZTpnLHVwZGF0ZVJhdzppLGdldFNoYWRlczpwLHNldEJnQ29sb3I6bCxlbmFibGU6ayxkaXNhYmxlOm0scmVzaXplOmYscmVmcmVzaDpvLG9wYWNpdHk6bn19KCksYmM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBrKGIpe3ZhciBjPWEoIjxkaXYgLz4iKS5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsb3BhY2l0eTpkLmJvcmRlck9wYWNpdHl9KS5hZGRDbGFzcyhpKGIpKTtyZXR1cm4gSi5hcHBlbmQoYyksY31mdW5jdGlvbiBsKGIsYyl7dmFyIGQ9YSgiPGRpdiAvPiIpLm1vdXNlZG93bihyKGIpKS5jc3Moe2N1cnNvcjpiKyItcmVzaXplIixwb3NpdGlvbjoiYWJzb2x1dGUiLHpJbmRleDpjfSkuYWRkQ2xhc3MoIm9yZC0iK2IpO3JldHVybiBfLnN1cHBvcnQmJmQuYmluZCgidG91Y2hzdGFydC5qY3JvcCIsXy5jcmVhdGVEcmFnZ2VyKGIpKSxLLmFwcGVuZChkKSxkfWZ1bmN0aW9uIG0oYSl7dmFyIGI9ZC5oYW5kbGVTaXplO3JldHVybiBsKGEsYysrKS5jc3Moe29wYWNpdHk6ZC5oYW5kbGVPcGFjaXR5fSkud2lkdGgoYikuaGVpZ2h0KGIpLmFkZENsYXNzKGkoImhhbmRsZSIpKX1mdW5jdGlvbiBuKGEpe3JldHVybiBsKGEsYysrKS5hZGRDbGFzcygiamNyb3AtZHJhZ2JhciIpfWZ1bmN0aW9uIG8KKGEpe3ZhciBiO2ZvcihiPTA7YjxhLmxlbmd0aDtiKyspZ1thW2JdXT1uKGFbYl0pfWZ1bmN0aW9uIHAoYSl7dmFyIGIsYztmb3IoYz0wO2M8YS5sZW5ndGg7YysrKXtzd2l0Y2goYVtjXSl7Y2FzZSJuIjpiPSJobGluZSI7YnJlYWs7Y2FzZSJzIjpiPSJobGluZSBib3R0b20iO2JyZWFrO2Nhc2UiZSI6Yj0idmxpbmUgcmlnaHQiO2JyZWFrO2Nhc2UidyI6Yj0idmxpbmUifWVbYVtjXV09ayhiKX19ZnVuY3Rpb24gcShhKXt2YXIgYjtmb3IoYj0wO2I8YS5sZW5ndGg7YisrKWZbYVtiXV09bShhW2JdKX1mdW5jdGlvbiBzKGEsYil7ZC5zaGFkZXx8SS5jc3Moe3RvcDpoKC1iKSxsZWZ0OmgoLWEpfSksTC5jc3Moe3RvcDpoKGIpLGxlZnQ6aChhKX0pfWZ1bmN0aW9uIHUoYSxiKXtMLndpZHRoKGEpLmhlaWdodChiKX1mdW5jdGlvbiB2KCl7dmFyIGE9YmEuZ2V0Rml4ZWQoKTtiYS5zZXRQcmVzc2VkKFthLngsYS55XSksYmEuc2V0Q3VycmVudChbYS54MixhLnkyXSksdygpfWZ1bmN0aW9uIHcoYSl7aWYoYilyZXR1cm4geChhKX1mdW5jdGlvbiB4KGEpe3ZhciBjPWJhLmdldEZpeGVkKCk7dShjLncsYy5oKSxzKGMueCxjLnkpLGQuc2hhZGUmJmJiLnVwZGF0ZVJhdyhjKSxifHxBKCksYT9kLm9uU2VsZWN0LmNhbGwoYnQsdChjKSk6ZC5vbkNoYW5nZS5jYWxsKGJ0LHQoYykpfWZ1bmN0aW9uIHkoYSxjLGUpe2lmKCFiJiYhYylyZXR1cm47ZC5iZ0ZhZGUmJiFlP0UuYW5pbWF0ZSh7b3BhY2l0eTphfSx7cXVldWU6ITEsZHVyYXRpb246ZC5mYWRlVGltZX0pOkUuY3NzKCJvcGFjaXR5IixhKX1mdW5jdGlvbiBBKCl7TC5zaG93KCksZC5zaGFkZT9iYi5vcGFjaXR5KFApOnkoUCwhMCksYj0hMH1mdW5jdGlvbiBCKCl7RigpLEwuaGlkZSgpLGQuc2hhZGU/YmIub3BhY2l0eSgxKTp5KDEpLGI9ITEsZC5vblJlbGVhc2UuY2FsbChidCl9ZnVuY3Rpb24gQygpe2omJksuc2hvdygpfWZ1bmN0aW9uIEQoKXtqPSEwO2lmKGQuYWxsb3dSZXNpemUpcmV0dXJuIEsuc2hvdygpLCEwfWZ1bmN0aW9uIEYoKXtqPSExLEsuaGlkZSgKKX1mdW5jdGlvbiBHKGEpe1k9PT1hP0YoKTpEKCl9ZnVuY3Rpb24gSCgpe0coITEpLHYoKX12YXIgYixjPTM3MCxlPXt9LGY9e30sZz17fSxqPSExO2QuZHJhZ0VkZ2VzJiZhLmlzQXJyYXkoZC5jcmVhdGVEcmFnYmFycykmJm8oZC5jcmVhdGVEcmFnYmFycyksYS5pc0FycmF5KGQuY3JlYXRlSGFuZGxlcykmJnEoZC5jcmVhdGVIYW5kbGVzKSxkLmRyYXdCb3JkZXJzJiZhLmlzQXJyYXkoZC5jcmVhdGVCb3JkZXJzKSYmcChkLmNyZWF0ZUJvcmRlcnMpLGEoZG9jdW1lbnQpLmJpbmQoInRvdWNoc3RhcnQuamNyb3AtaW9zIixmdW5jdGlvbihiKXthKGIuY3VycmVudFRhcmdldCkuaGFzQ2xhc3MoImpjcm9wLXRyYWNrZXIiKSYmYi5zdG9wUHJvcGFnYXRpb24oKX0pO3ZhciBNPXooKS5tb3VzZWRvd24ocigibW92ZSIpKS5jc3Moe2N1cnNvcjoibW92ZSIscG9zaXRpb246ImFic29sdXRlIix6SW5kZXg6MzYwfSk7cmV0dXJuIF8uc3VwcG9ydCYmTS5iaW5kKCJ0b3VjaHN0YXJ0Lmpjcm9wIixfLmNyZWF0ZURyYWdnZXIoIm1vdmUiKSksSi5hcHBlbmQoTSksRigpLHt1cGRhdGVWaXNpYmxlOncsdXBkYXRlOngscmVsZWFzZTpCLHJlZnJlc2g6dixpc0F3YWtlOmZ1bmN0aW9uKCl7cmV0dXJuIGJ9LHNldEN1cnNvcjpmdW5jdGlvbihhKXtNLmNzcygiY3Vyc29yIixhKX0sZW5hYmxlSGFuZGxlczpELGVuYWJsZU9ubHk6ZnVuY3Rpb24oKXtqPSEwfSxzaG93SGFuZGxlczpDLGRpc2FibGVIYW5kbGVzOkYsYW5pbU1vZGU6RyxzZXRCZ09wYWNpdHk6eSxkb25lOkh9fSgpLGJkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZigpe04uY3NzKHt6SW5kZXg6NDUwfSksXy5zdXBwb3J0JiZhKGRvY3VtZW50KS5iaW5kKCJ0b3VjaG1vdmUuamNyb3AiLGspLmJpbmQoInRvdWNoZW5kLmpjcm9wIixtKSxlJiZhKGRvY3VtZW50KS5iaW5kKCJtb3VzZW1vdmUuamNyb3AiLGgpLmJpbmQoIm1vdXNldXAuamNyb3AiLGkpfWZ1bmN0aW9uIGcoKXtOLmNzcyh7ekluZGV4OjI5MH0pLGEoZG9jdW1lbnQpLnVuYmluZCgiLmpjcm9wIil9ZnVuY3Rpb24gaAooYSl7cmV0dXJuIGIobChhKSksITF9ZnVuY3Rpb24gaShhKXtyZXR1cm4gYS5wcmV2ZW50RGVmYXVsdCgpLGEuc3RvcFByb3BhZ2F0aW9uKCksWCYmKFg9ITEsYyhsKGEpKSxiYy5pc0F3YWtlKCkmJmQub25TZWxlY3QuY2FsbChidCx0KGJhLmdldEZpeGVkKCkpKSxnKCksYj1mdW5jdGlvbigpe30sYz1mdW5jdGlvbigpe30pLCExfWZ1bmN0aW9uIGooYSxkKXtyZXR1cm4gWD0hMCxiPWEsYz1kLGYoKSwhMX1mdW5jdGlvbiBrKGEpe3JldHVybiBhLnBhZ2VYPWEub3JpZ2luYWxFdmVudC5jaGFuZ2VkVG91Y2hlc1swXS5wYWdlWCxhLnBhZ2VZPWEub3JpZ2luYWxFdmVudC5jaGFuZ2VkVG91Y2hlc1swXS5wYWdlWSxoKGEpfWZ1bmN0aW9uIG0oYSl7cmV0dXJuIGEucGFnZVg9YS5vcmlnaW5hbEV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLnBhZ2VYLGEucGFnZVk9YS5vcmlnaW5hbEV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLnBhZ2VZLGkoYSl9ZnVuY3Rpb24gbihhKXtOLmNzcygiY3Vyc29yIixhKX12YXIgYj1mdW5jdGlvbigpe30sYz1mdW5jdGlvbigpe30sZT1kLnRyYWNrRG9jdW1lbnQ7cmV0dXJuIGV8fE4ubW91c2Vtb3ZlKGgpLm1vdXNldXAoaSkubW91c2VvdXQoaSksRS5iZWZvcmUoTikse2FjdGl2YXRlSGFuZGxlcnM6aixzZXRDdXJzb3I6bn19KCksYmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7ZC5rZXlTdXBwb3J0JiYoYi5zaG93KCksYi5mb2N1cygpKX1mdW5jdGlvbiBmKGEpe2IuaGlkZSgpfWZ1bmN0aW9uIGgoYSxiLGMpe2QuYWxsb3dNb3ZlJiYoYmEubW92ZU9mZnNldChbYixjXSksYmMudXBkYXRlVmlzaWJsZSghMCkpLGEucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIGkoYSl7aWYoYS5jdHJsS2V5fHxhLm1ldGFLZXkpcmV0dXJuITA7Wj1hLnNoaWZ0S2V5PyEwOiExO3ZhciBiPVo/MTA6MTtzd2l0Y2goYS5rZXlDb2RlKXtjYXNlIDM3OmgoYSwtYiwwKTticmVhaztjYXNlIDM5OmgoYSxiLDApO2JyZWFrO2Nhc2UgMzg6aChhLDAsLWIpO2JyZWFrO2Nhc2UgNDAKOmgoYSwwLGIpO2JyZWFrO2Nhc2UgMjc6ZC5hbGxvd1NlbGVjdCYmYmMucmVsZWFzZSgpO2JyZWFrO2Nhc2UgOTpyZXR1cm4hMH1yZXR1cm4hMX12YXIgYj1hKCc8aW5wdXQgdHlwZT0icmFkaW8iIC8+JykuY3NzKHtwb3NpdGlvbjoiZml4ZWQiLGxlZnQ6Ii0xMjBweCIsd2lkdGg6IjEycHgifSksYz1hKCI8ZGl2IC8+IikuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLG92ZXJmbG93OiJoaWRkZW4ifSkuYXBwZW5kKGIpO3JldHVybiBkLmtleVN1cHBvcnQmJihiLmtleWRvd24oaSkuYmx1cihmKSxnfHwhZC5maXhlZFN1cHBvcnQ/KGIuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLGxlZnQ6Ii0yMHB4In0pLGMuYXBwZW5kKGIpLmluc2VydEJlZm9yZShFKSk6Yi5pbnNlcnRCZWZvcmUoRSkpLHt3YXRjaEtleXM6ZX19KCk7Xy5zdXBwb3J0JiZOLmJpbmQoInRvdWNoc3RhcnQuamNyb3AiLF8ubmV3U2VsZWN0aW9uKSxLLmhpZGUoKSxicyghMCk7dmFyIGJ0PXtzZXRJbWFnZTpicSxhbmltYXRlVG86Ymcsc2V0U2VsZWN0OmJoLHNldE9wdGlvbnM6YmwsdGVsbFNlbGVjdDpiaix0ZWxsU2NhbGVkOmJrLHNldENsYXNzOmJmLGRpc2FibGU6Ym0sZW5hYmxlOmJuLGNhbmNlbDpibyxyZWxlYXNlOmJjLnJlbGVhc2UsZGVzdHJveTpicCxmb2N1czpiZS53YXRjaEtleXMsZ2V0Qm91bmRzOmZ1bmN0aW9uKCl7cmV0dXJuW0YqVSxHKlZdfSxnZXRXaWRnZXRTaXplOmZ1bmN0aW9uKCl7cmV0dXJuW0YsR119LGdldFNjYWxlRmFjdG9yOmZ1bmN0aW9uKCl7cmV0dXJuW1UsVl19LGdldE9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gZH0sdWk6e2hvbGRlcjpILHNlbGVjdGlvbjpMfX07cmV0dXJuIGEuYnJvd3Nlci5tc2llJiZILmJpbmQoInNlbGVjdHN0YXJ0IixmdW5jdGlvbigpe3JldHVybiExfSksQi5kYXRhKCJKY3JvcCIsYnQpLGJ0fSxhLmZuLkpjcm9wPWZ1bmN0aW9uKGIsYyl7dmFyIGQ7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2lmKGEodGhpcykuZGF0YSgiSmNyb3AiKSl7aWYoYj09PSJhcGkiKXJldHVybiBhCih0aGlzKS5kYXRhKCJKY3JvcCIpO2EodGhpcykuZGF0YSgiSmNyb3AiKS5zZXRPcHRpb25zKGIpfWVsc2UgdGhpcy50YWdOYW1lPT0iSU1HIj9hLkpjcm9wLkxvYWRlcih0aGlzLGZ1bmN0aW9uKCl7YSh0aGlzKS5jc3Moe2Rpc3BsYXk6ImJsb2NrIix2aXNpYmlsaXR5OiJoaWRkZW4ifSksZD1hLkpjcm9wKHRoaXMsYiksYS5pc0Z1bmN0aW9uKGMpJiZjLmNhbGwoZCl9KTooYSh0aGlzKS5jc3Moe2Rpc3BsYXk6ImJsb2NrIix2aXNpYmlsaXR5OiJoaWRkZW4ifSksZD1hLkpjcm9wKHRoaXMsYiksYS5pc0Z1bmN0aW9uKGMpJiZjLmNhbGwoZCkpfSksdGhpc30sYS5KY3JvcC5Mb2FkZXI9ZnVuY3Rpb24oYixjLGQpe2Z1bmN0aW9uIGcoKXtmLmNvbXBsZXRlPyhlLnVuYmluZCgiLmpjbG9hZGVyIiksYS5pc0Z1bmN0aW9uKGMpJiZjLmNhbGwoZikpOndpbmRvdy5zZXRUaW1lb3V0KGcsNTApfXZhciBlPWEoYiksZj1lWzBdO2UuYmluZCgibG9hZC5qY2xvYWRlciIsZykuYmluZCgiZXJyb3IuamNsb2FkZXIiLGZ1bmN0aW9uKGIpe2UudW5iaW5kKCIuamNsb2FkZXIiKSxhLmlzRnVuY3Rpb24oZCkmJmQuY2FsbChmKX0pLGYuY29tcGxldGUmJmEuaXNGdW5jdGlvbihjKSYmKGUudW5iaW5kKCIuamNsb2FkZXIiKSxjLmNhbGwoZikpfSxhLkpjcm9wLmRlZmF1bHRzPXthbGxvd1NlbGVjdDohMCxhbGxvd01vdmU6ITAsYWxsb3dSZXNpemU6ITAsdHJhY2tEb2N1bWVudDohMCxiYXNlQ2xhc3M6Impjcm9wIixhZGRDbGFzczpudWxsLGJnQ29sb3I6ImJsYWNrIixiZ09wYWNpdHk6LjYsYmdGYWRlOiExLGJvcmRlck9wYWNpdHk6LjQsaGFuZGxlT3BhY2l0eTouNSxoYW5kbGVTaXplOjcsYXNwZWN0UmF0aW86MCxrZXlTdXBwb3J0OiEwLGNyZWF0ZUhhbmRsZXM6WyJuIiwicyIsImUiLCJ3IiwibnciLCJuZSIsInNlIiwic3ciXSxjcmVhdGVEcmFnYmFyczpbIm4iLCJzIiwiZSIsInciXSxjcmVhdGVCb3JkZXJzOlsibiIsInMiLCJlIiwidyJdLGRyYXdCb3JkZXJzOiEwLGRyYWdFZGdlczohMCxmaXhlZFN1cHBvcnQ6ITAsCnRvdWNoU3VwcG9ydDpudWxsLHNoYWRlOm51bGwsYm94V2lkdGg6MCxib3hIZWlnaHQ6MCxib3VuZGFyeToyLGZhZGVUaW1lOjQwMCxhbmltYXRpb25EZWxheToyMCxzd2luZ1NwZWVkOjMsbWluU2VsZWN0OlswLDBdLG1heFNpemU6WzAsMF0sbWluU2l6ZTpbMCwwXSxvbkNoYW5nZTpmdW5jdGlvbigpe30sb25TZWxlY3Q6ZnVuY3Rpb24oKXt9LG9uRGJsQ2xpY2s6ZnVuY3Rpb24oKXt9LG9uUmVsZWFzZTpmdW5jdGlvbigpe319fSkoalF1ZXJ5KTs=]]></data>
	</file>
	<file>
	  <filename>/lib/js/jquery.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohIGpRdWVyeSB2MS43LjIganF1ZXJ5LmNvbSB8IGpxdWVyeS5vcmcvbGljZW5zZSAqLwooZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjeShhKXtyZXR1cm4gZi5pc1dpbmRvdyhhKT9hOmEubm9kZVR5cGU9PT05P2EuZGVmYXVsdFZpZXd8fGEucGFyZW50V2luZG93OiExfWZ1bmN0aW9uIGN1KGEpe2lmKCFjalthXSl7dmFyIGI9Yy5ib2R5LGQ9ZigiPCIrYSsiPiIpLmFwcGVuZFRvKGIpLGU9ZC5jc3MoImRpc3BsYXkiKTtkLnJlbW92ZSgpO2lmKGU9PT0ibm9uZSJ8fGU9PT0iIil7Y2t8fChjaz1jLmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpLGNrLmZyYW1lQm9yZGVyPWNrLndpZHRoPWNrLmhlaWdodD0wKSxiLmFwcGVuZENoaWxkKGNrKTtpZighY2x8fCFjay5jcmVhdGVFbGVtZW50KWNsPShjay5jb250ZW50V2luZG93fHxjay5jb250ZW50RG9jdW1lbnQpLmRvY3VtZW50LGNsLndyaXRlKChmLnN1cHBvcnQuYm94TW9kZWw/IjwhZG9jdHlwZSBodG1sPiI6IiIpKyI8aHRtbD48Ym9keT4iKSxjbC5jbG9zZSgpO2Q9Y2wuY3JlYXRlRWxlbWVudChhKSxjbC5ib2R5LmFwcGVuZENoaWxkKGQpLGU9Zi5jc3MoZCwiZGlzcGxheSIpLGIucmVtb3ZlQ2hpbGQoY2spfWNqW2FdPWV9cmV0dXJuIGNqW2FdfWZ1bmN0aW9uIGN0KGEsYil7dmFyIGM9e307Zi5lYWNoKGNwLmNvbmNhdC5hcHBseShbXSxjcC5zbGljZSgwLGIpKSxmdW5jdGlvbigpe2NbdGhpc109YX0pO3JldHVybiBjfWZ1bmN0aW9uIGNzKCl7Y3E9Yn1mdW5jdGlvbiBjcigpe3NldFRpbWVvdXQoY3MsMCk7cmV0dXJuIGNxPWYubm93KCl9ZnVuY3Rpb24gY2koKXt0cnl7cmV0dXJuIG5ldyBhLkFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxIVFRQIil9Y2F0Y2goYil7fX1mdW5jdGlvbiBjaCgpe3RyeXtyZXR1cm4gbmV3IGEuWE1MSHR0cFJlcXVlc3R9Y2F0Y2goYil7fX1mdW5jdGlvbiBjYihhLGMpe2EuZGF0YUZpbHRlciYmKGM9YS5kYXRhRmlsdGVyKGMsYS5kYXRhVHlwZSkpO3ZhciBkPWEuZGF0YVR5cGVzLGU9e30sZyxoLGk9ZC5sZW5ndGgsaixrPWRbMF0sbCxtLG4sbyxwO2ZvcihnPTE7ZzxpO2crKyl7aWYoZz09PTEpZm9yKGggaW4gYS5jb252ZXJ0ZXJzKXR5cGVvZiBoPT0ic3RyaW5nIiYmKGVbaC50b0xvd2VyQ2FzZSgpXT1hLmNvbnZlcnRlcnNbaF0pO2w9ayxrPWRbZ107aWYoaz09PSIqIilrPWw7ZWxzZSBpZihsIT09IioiJiZsIT09ayl7bT1sKyIgIitrLG49ZVttXXx8ZVsiKiAiK2tdO2lmKCFuKXtwPWI7Zm9yKG8gaW4gZSl7aj1vLnNwbGl0KCIgIik7aWYoalswXT09PWx8fGpbMF09PT0iKiIpe3A9ZVtqWzFdKyIgIitrXTtpZihwKXtvPWVbb10sbz09PSEwP249cDpwPT09ITAmJihuPW8pO2JyZWFrfX19fSFuJiYhcCYmZi5lcnJvcigiTm8gY29udmVyc2lvbiBmcm9tICIrbS5yZXBsYWNlKCIgIiwiIHRvICIpKSxuIT09ITAmJihjPW4/bihjKTpwKG8oYykpKX19cmV0dXJuIGN9ZnVuY3Rpb24gY2EoYSxjLGQpe3ZhciBlPWEuY29udGVudHMsZj1hLmRhdGFUeXBlcyxnPWEucmVzcG9uc2VGaWVsZHMsaCxpLGosaztmb3IoaSBpbiBnKWkgaW4gZCYmKGNbZ1tpXV09ZFtpXSk7d2hpbGUoZlswXT09PSIqIilmLnNoaWZ0KCksaD09PWImJihoPWEubWltZVR5cGV8fGMuZ2V0UmVzcG9uc2VIZWFkZXIoImNvbnRlbnQtdHlwZSIpKTtpZihoKWZvcihpIGluIGUpaWYoZVtpXSYmZVtpXS50ZXN0KGgpKXtmLnVuc2hpZnQoaSk7YnJlYWt9aWYoZlswXWluIGQpaj1mWzBdO2Vsc2V7Zm9yKGkgaW4gZCl7aWYoIWZbMF18fGEuY29udmVydGVyc1tpKyIgIitmWzBdXSl7aj1pO2JyZWFrfWt8fChrPWkpfWo9anx8a31pZihqKXtqIT09ZlswXSYmZi51bnNoaWZ0KGopO3JldHVybiBkW2pdfX1mdW5jdGlvbiBiXyhhLGIsYyxkKXtpZihmLmlzQXJyYXkoYikpZi5lYWNoKGIsZnVuY3Rpb24oYixlKXtjfHxiRC50ZXN0KGEpP2QoYSxlKTpiXyhhKyJbIisodHlwZW9mIGU9PSJvYmplY3QiP2I6IiIpKyJdIixlLGMsZCl9KTtlbHNlIGlmKCFjJiZmLnR5cGUoYik9PT0ib2JqZWN0Iilmb3IodmFyIGUgaW4gYiliXyhhKyJbIitlKyJdIixiW2VdLGMsZCk7ZWxzZSBkKGEsYil9ZnVuY3Rpb24gYiQoYSxjKXt2YXIgZCxlLGc9Zi5hamF4U2V0dGluZ3MuZmxhdE9wdGlvbnN8fHt9O2ZvcihkIGluIGMpY1tkXSE9PWImJigoZ1tkXT9hOmV8fChlPXt9KSlbZF09Y1tkXSk7ZSYmZi5leHRlbmQoITAsYSxlKX1mdW5jdGlvbiBiWihhLGMsZCxlLGYsZyl7Zj1mfHxjLmRhdGFUeXBlc1swXSxnPWd8fHt9LGdbZl09ITA7dmFyIGg9YVtmXSxpPTAsaj1oP2gubGVuZ3RoOjAsaz1hPT09YlMsbDtmb3IoO2k8aiYmKGt8fCFsKTtpKyspbD1oW2ldKGMsZCxlKSx0eXBlb2YgbD09InN0cmluZyImJigha3x8Z1tsXT9sPWI6KGMuZGF0YVR5cGVzLnVuc2hpZnQobCksbD1iWihhLGMsZCxlLGwsZykpKTsoa3x8IWwpJiYhZ1siKiJdJiYobD1iWihhLGMsZCxlLCIqIixnKSk7cmV0dXJuIGx9ZnVuY3Rpb24gYlkoYSl7cmV0dXJuIGZ1bmN0aW9uKGIsYyl7dHlwZW9mIGIhPSJzdHJpbmciJiYoYz1iLGI9IioiKTtpZihmLmlzRnVuY3Rpb24oYykpe3ZhciBkPWIudG9Mb3dlckNhc2UoKS5zcGxpdChiTyksZT0wLGc9ZC5sZW5ndGgsaCxpLGo7Zm9yKDtlPGc7ZSsrKWg9ZFtlXSxqPS9eXCsvLnRlc3QoaCksaiYmKGg9aC5zdWJzdHIoMSl8fCIqIiksaT1hW2hdPWFbaF18fFtdLGlbaj8idW5zaGlmdCI6InB1c2giXShjKX19fWZ1bmN0aW9uIGJCKGEsYixjKXt2YXIgZD1iPT09IndpZHRoIj9hLm9mZnNldFdpZHRoOmEub2Zmc2V0SGVpZ2h0LGU9Yj09PSJ3aWR0aCI/MTowLGc9NDtpZihkPjApe2lmKGMhPT0iYm9yZGVyIilmb3IoO2U8ZztlKz0yKWN8fChkLT1wYXJzZUZsb2F0KGYuY3NzKGEsInBhZGRpbmciK2J4W2VdKSl8fDApLGM9PT0ibWFyZ2luIj9kKz1wYXJzZUZsb2F0KGYuY3NzKGEsYytieFtlXSkpfHwwOmQtPXBhcnNlRmxvYXQoZi5jc3MoYSwiYm9yZGVyIitieFtlXSsiV2lkdGgiKSl8fDA7cmV0dXJuIGQrInB4In1kPWJ5KGEsYik7aWYoZDwwfHxkPT1udWxsKWQ9YS5zdHlsZVtiXTtpZihidC50ZXN0KGQpKXJldHVybiBkO2Q9cGFyc2VGbG9hdChkKXx8MDtpZihjKWZvcig7ZTxnO2UrPTIpZCs9cGFyc2VGbG9hdChmLmNzcyhhLCJwYWRkaW5nIitieFtlXSkpfHwwLGMhPT0icGFkZGluZyImJihkKz1wYXJzZUZsb2F0KGYuY3NzKGEsImJvcmRlciIrYnhbZV0rIldpZHRoIikpfHwwKSxjPT09Im1hcmdpbiImJihkKz1wYXJzZUZsb2F0KGYuY3NzKGEsYytieFtlXSkpfHwwKTtyZXR1cm4gZCsicHgifWZ1bmN0aW9uIGJvKGEpe3ZhciBiPWMuY3JlYXRlRWxlbWVudCgiZGl2Iik7YmguYXBwZW5kQ2hpbGQoYiksYi5pbm5lckhUTUw9YS5vdXRlckhUTUw7cmV0dXJuIGIuZmlyc3RDaGlsZH1mdW5jdGlvbiBibihhKXt2YXIgYj0oYS5ub2RlTmFtZXx8IiIpLnRvTG93ZXJDYXNlKCk7Yj09PSJpbnB1dCI/Ym0oYSk6YiE9PSJzY3JpcHQiJiZ0eXBlb2YgYS5nZXRFbGVtZW50c0J5VGFnTmFtZSE9InVuZGVmaW5lZCImJmYuZ3JlcChhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLGJtKX1mdW5jdGlvbiBibShhKXtpZihhLnR5cGU9PT0iY2hlY2tib3gifHxhLnR5cGU9PT0icmFkaW8iKWEuZGVmYXVsdENoZWNrZWQ9YS5jaGVja2VkfWZ1bmN0aW9uIGJsKGEpe3JldHVybiB0eXBlb2YgYS5nZXRFbGVtZW50c0J5VGFnTmFtZSE9InVuZGVmaW5lZCI/YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpOnR5cGVvZiBhLnF1ZXJ5U2VsZWN0b3JBbGwhPSJ1bmRlZmluZWQiP2EucXVlcnlTZWxlY3RvckFsbCgiKiIpOltdfWZ1bmN0aW9uIGJrKGEsYil7dmFyIGM7Yi5ub2RlVHlwZT09PTEmJihiLmNsZWFyQXR0cmlidXRlcyYmYi5jbGVhckF0dHJpYnV0ZXMoKSxiLm1lcmdlQXR0cmlidXRlcyYmYi5tZXJnZUF0dHJpYnV0ZXMoYSksYz1iLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksYz09PSJvYmplY3QiP2Iub3V0ZXJIVE1MPWEub3V0ZXJIVE1MOmMhPT0iaW5wdXQifHxhLnR5cGUhPT0iY2hlY2tib3giJiZhLnR5cGUhPT0icmFkaW8iP2M9PT0ib3B0aW9uIj9iLnNlbGVjdGVkPWEuZGVmYXVsdFNlbGVjdGVkOmM9PT0iaW5wdXQifHxjPT09InRleHRhcmVhIj9iLmRlZmF1bHRWYWx1ZT1hLmRlZmF1bHRWYWx1ZTpjPT09InNjcmlwdCImJmIudGV4dCE9PWEudGV4dCYmKGIudGV4dD1hLnRleHQpOihhLmNoZWNrZWQmJihiLmRlZmF1bHRDaGVja2VkPWIuY2hlY2tlZD1hLmNoZWNrZWQpLGIudmFsdWUhPT1hLnZhbHVlJiYoYi52YWx1ZT1hLnZhbHVlKSksYi5yZW1vdmVBdHRyaWJ1dGUoZi5leHBhbmRvKSxiLnJlbW92ZUF0dHJpYnV0ZSgiX3N1Ym1pdF9hdHRhY2hlZCIpLGIucmVtb3ZlQXR0cmlidXRlKCJfY2hhbmdlX2F0dGFjaGVkIikpfWZ1bmN0aW9uIGJqKGEsYil7aWYoYi5ub2RlVHlwZT09PTEmJiEhZi5oYXNEYXRhKGEpKXt2YXIgYyxkLGUsZz1mLl9kYXRhKGEpLGg9Zi5fZGF0YShiLGcpLGk9Zy5ldmVudHM7aWYoaSl7ZGVsZXRlIGguaGFuZGxlLGguZXZlbnRzPXt9O2ZvcihjIGluIGkpZm9yKGQ9MCxlPWlbY10ubGVuZ3RoO2Q8ZTtkKyspZi5ldmVudC5hZGQoYixjLGlbY11bZF0pfWguZGF0YSYmKGguZGF0YT1mLmV4dGVuZCh7fSxoLmRhdGEpKX19ZnVuY3Rpb24gYmkoYSxiKXtyZXR1cm4gZi5ub2RlTmFtZShhLCJ0YWJsZSIpP2EuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRib2R5IilbMF18fGEuYXBwZW5kQ2hpbGQoYS5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRib2R5IikpOmF9ZnVuY3Rpb24gVShhKXt2YXIgYj1WLnNwbGl0KCJ8IiksYz1hLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtpZihjLmNyZWF0ZUVsZW1lbnQpd2hpbGUoYi5sZW5ndGgpYy5jcmVhdGVFbGVtZW50KGIucG9wKCkpO3JldHVybiBjfWZ1bmN0aW9uIFQoYSxiLGMpe2I9Ynx8MDtpZihmLmlzRnVuY3Rpb24oYikpcmV0dXJuIGYuZ3JlcChhLGZ1bmN0aW9uKGEsZCl7dmFyIGU9ISFiLmNhbGwoYSxkLGEpO3JldHVybiBlPT09Y30pO2lmKGIubm9kZVR5cGUpcmV0dXJuIGYuZ3JlcChhLGZ1bmN0aW9uKGEsZCl7cmV0dXJuIGE9PT1iPT09Y30pO2lmKHR5cGVvZiBiPT0ic3RyaW5nIil7dmFyIGQ9Zi5ncmVwKGEsZnVuY3Rpb24oYSl7cmV0dXJuIGEubm9kZVR5cGU9PT0xfSk7aWYoTy50ZXN0KGIpKXJldHVybiBmLmZpbHRlcihiLGQsIWMpO2I9Zi5maWx0ZXIoYixkKX1yZXR1cm4gZi5ncmVwKGEsZnVuY3Rpb24oYSxkKXtyZXR1cm4gZi5pbkFycmF5KGEsYik+PTA9PT1jfSl9ZnVuY3Rpb24gUyhhKXtyZXR1cm4hYXx8IWEucGFyZW50Tm9kZXx8YS5wYXJlbnROb2RlLm5vZGVUeXBlPT09MTF9ZnVuY3Rpb24gSygpe3JldHVybiEwfWZ1bmN0aW9uIEooKXtyZXR1cm4hMX1mdW5jdGlvbiBuKGEsYixjKXt2YXIgZD1iKyJkZWZlciIsZT1iKyJxdWV1ZSIsZz1iKyJtYXJrIixoPWYuX2RhdGEoYSxkKTtoJiYoYz09PSJxdWV1ZSJ8fCFmLl9kYXRhKGEsZSkpJiYoYz09PSJtYXJrInx8IWYuX2RhdGEoYSxnKSkmJnNldFRpbWVvdXQoZnVuY3Rpb24oKXshZi5fZGF0YShhLGUpJiYhZi5fZGF0YShhLGcpJiYoZi5yZW1vdmVEYXRhKGEsZCwhMCksaC5maXJlKCkpfSwwKX1mdW5jdGlvbiBtKGEpe2Zvcih2YXIgYiBpbiBhKXtpZihiPT09ImRhdGEiJiZmLmlzRW1wdHlPYmplY3QoYVtiXSkpY29udGludWU7aWYoYiE9PSJ0b0pTT04iKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIGwoYSxjLGQpe2lmKGQ9PT1iJiZhLm5vZGVUeXBlPT09MSl7dmFyIGU9ImRhdGEtIitjLnJlcGxhY2UoaywiLSQxIikudG9Mb3dlckNhc2UoKTtkPWEuZ2V0QXR0cmlidXRlKGUpO2lmKHR5cGVvZiBkPT0ic3RyaW5nIil7dHJ5e2Q9ZD09PSJ0cnVlIj8hMDpkPT09ImZhbHNlIj8hMTpkPT09Im51bGwiP251bGw6Zi5pc051bWVyaWMoZCk/K2Q6ai50ZXN0KGQpP2YucGFyc2VKU09OKGQpOmR9Y2F0Y2goZyl7fWYuZGF0YShhLGMsZCl9ZWxzZSBkPWJ9cmV0dXJuIGR9ZnVuY3Rpb24gaChhKXt2YXIgYj1nW2FdPXt9LGMsZDthPWEuc3BsaXQoL1xzKy8pO2ZvcihjPTAsZD1hLmxlbmd0aDtjPGQ7YysrKWJbYVtjXV09ITA7cmV0dXJuIGJ9dmFyIGM9YS5kb2N1bWVudCxkPWEubmF2aWdhdG9yLGU9YS5sb2NhdGlvbixmPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gSigpe2lmKCFlLmlzUmVhZHkpe3RyeXtjLmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbCgibGVmdCIpfWNhdGNoKGEpe3NldFRpbWVvdXQoSiwxKTtyZXR1cm59ZS5yZWFkeSgpfX12YXIgZT1mdW5jdGlvbihhLGIpe3JldHVybiBuZXcgZS5mbi5pbml0KGEsYixoKX0sZj1hLmpRdWVyeSxnPWEuJCxoLGk9L14oPzpbXiM8XSooPFtcd1xXXSs+KVtePl0qJHwjKFtcd1wtXSopJCkvLGo9L1xTLyxrPS9eXHMrLyxsPS9ccyskLyxtPS9ePChcdyspXHMqXC8/Pig/OjxcL1wxPik/JC8sbj0vXltcXSw6e31cc10qJC8sbz0vXFwoPzpbIlxcXC9iZm5ydF18dVswLTlhLWZBLUZdezR9KS9nLHA9LyJbXiJcXFxuXHJdKiJ8dHJ1ZXxmYWxzZXxudWxsfC0/XGQrKD86XC5cZCopPyg/OltlRV1bK1wtXT9cZCspPy9nLHE9Lyg/Ol58OnwsKSg/OlxzKlxbKSsvZyxyPS8od2Via2l0KVsgXC9dKFtcdy5dKykvLHM9LyhvcGVyYSkoPzouKnZlcnNpb24pP1sgXC9dKFtcdy5dKykvLHQ9Lyhtc2llKSAoW1x3Ll0rKS8sdT0vKG1vemlsbGEpKD86Lio/IHJ2OihbXHcuXSspKT8vLHY9Ly0oW2Etel18WzAtOV0pL2lnLHc9L14tbXMtLyx4PWZ1bmN0aW9uKGEsYil7cmV0dXJuKGIrIiIpLnRvVXBwZXJDYXNlKCl9LHk9ZC51c2VyQWdlbnQseixBLEIsQz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLEQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxFPUFycmF5LnByb3RvdHlwZS5wdXNoLEY9QXJyYXkucHJvdG90eXBlLnNsaWNlLEc9U3RyaW5nLnByb3RvdHlwZS50cmltLEg9QXJyYXkucHJvdG90eXBlLmluZGV4T2YsST17fTtlLmZuPWUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjplLGluaXQ6ZnVuY3Rpb24oYSxkLGYpe3ZhciBnLGgsaixrO2lmKCFhKXJldHVybiB0aGlzO2lmKGEubm9kZVR5cGUpe3RoaXMuY29udGV4dD10aGlzWzBdPWEsdGhpcy5sZW5ndGg9MTtyZXR1cm4gdGhpc31pZihhPT09ImJvZHkiJiYhZCYmYy5ib2R5KXt0aGlzLmNvbnRleHQ9Yyx0aGlzWzBdPWMuYm9keSx0aGlzLnNlbGVjdG9yPWEsdGhpcy5sZW5ndGg9MTtyZXR1cm4gdGhpc31pZih0eXBlb2YgYT09InN0cmluZyIpe2EuY2hhckF0KDApIT09IjwifHxhLmNoYXJBdChhLmxlbmd0aC0xKSE9PSI+Inx8YS5sZW5ndGg8Mz9nPWkuZXhlYyhhKTpnPVtudWxsLGEsbnVsbF07aWYoZyYmKGdbMV18fCFkKSl7aWYoZ1sxXSl7ZD1kIGluc3RhbmNlb2YgZT9kWzBdOmQsaz1kP2Qub3duZXJEb2N1bWVudHx8ZDpjLGo9bS5leGVjKGEpLGo/ZS5pc1BsYWluT2JqZWN0KGQpPyhhPVtjLmNyZWF0ZUVsZW1lbnQoalsxXSldLGUuZm4uYXR0ci5jYWxsKGEsZCwhMCkpOmE9W2suY3JlYXRlRWxlbWVudChqWzFdKV06KGo9ZS5idWlsZEZyYWdtZW50KFtnWzFdXSxba10pLGE9KGouY2FjaGVhYmxlP2UuY2xvbmUoai5mcmFnbWVudCk6ai5mcmFnbWVudCkuY2hpbGROb2Rlcyk7cmV0dXJuIGUubWVyZ2UodGhpcyxhKX1oPWMuZ2V0RWxlbWVudEJ5SWQoZ1syXSk7aWYoaCYmaC5wYXJlbnROb2RlKXtpZihoLmlkIT09Z1syXSlyZXR1cm4gZi5maW5kKGEpO3RoaXMubGVuZ3RoPTEsdGhpc1swXT1ofXRoaXMuY29udGV4dD1jLHRoaXMuc2VsZWN0b3I9YTtyZXR1cm4gdGhpc31yZXR1cm4hZHx8ZC5qcXVlcnk/KGR8fGYpLmZpbmQoYSk6dGhpcy5jb25zdHJ1Y3RvcihkKS5maW5kKGEpfWlmKGUuaXNGdW5jdGlvbihhKSlyZXR1cm4gZi5yZWFkeShhKTthLnNlbGVjdG9yIT09YiYmKHRoaXMuc2VsZWN0b3I9YS5zZWxlY3Rvcix0aGlzLmNvbnRleHQ9YS5jb250ZXh0KTtyZXR1cm4gZS5tYWtlQXJyYXkoYSx0aGlzKX0sc2VsZWN0b3I6IiIsanF1ZXJ5OiIxLjcuMiIsbGVuZ3RoOjAsc2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aH0sdG9BcnJheTpmdW5jdGlvbigpe3JldHVybiBGLmNhbGwodGhpcywwKX0sZ2V0OmZ1bmN0aW9uKGEpe3JldHVybiBhPT1udWxsP3RoaXMudG9BcnJheSgpOmE8MD90aGlzW3RoaXMubGVuZ3RoK2FdOnRoaXNbYV19LHB1c2hTdGFjazpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5jb25zdHJ1Y3RvcigpO2UuaXNBcnJheShhKT9FLmFwcGx5KGQsYSk6ZS5tZXJnZShkLGEpLGQucHJldk9iamVjdD10aGlzLGQuY29udGV4dD10aGlzLmNvbnRleHQsYj09PSJmaW5kIj9kLnNlbGVjdG9yPXRoaXMuc2VsZWN0b3IrKHRoaXMuc2VsZWN0b3I/IiAiOiIiKStjOmImJihkLnNlbGVjdG9yPXRoaXMuc2VsZWN0b3IrIi4iK2IrIigiK2MrIikiKTtyZXR1cm4gZH0sZWFjaDpmdW5jdGlvbihhLGIpe3JldHVybiBlLmVhY2godGhpcyxhLGIpfSxyZWFkeTpmdW5jdGlvbihhKXtlLmJpbmRSZWFkeSgpLEEuYWRkKGEpO3JldHVybiB0aGlzfSxlcTpmdW5jdGlvbihhKXthPSthO3JldHVybiBhPT09LTE/dGhpcy5zbGljZShhKTp0aGlzLnNsaWNlKGEsYSsxKX0sZmlyc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgwKX0sbGFzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKC0xKX0sc2xpY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soRi5hcHBseSh0aGlzLGFyZ3VtZW50cyksInNsaWNlIixGLmNhbGwoYXJndW1lbnRzKS5qb2luKCIsIikpfSxtYXA6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGUubWFwKHRoaXMsZnVuY3Rpb24oYixjKXtyZXR1cm4gYS5jYWxsKGIsYyxiKX0pKX0sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJldk9iamVjdHx8dGhpcy5jb25zdHJ1Y3RvcihudWxsKX0scHVzaDpFLHNvcnQ6W10uc29ydCxzcGxpY2U6W10uc3BsaWNlfSxlLmZuLmluaXQucHJvdG90eXBlPWUuZm4sZS5leHRlbmQ9ZS5mbi5leHRlbmQ9ZnVuY3Rpb24oKXt2YXIgYSxjLGQsZixnLGgsaT1hcmd1bWVudHNbMF18fHt9LGo9MSxrPWFyZ3VtZW50cy5sZW5ndGgsbD0hMTt0eXBlb2YgaT09ImJvb2xlYW4iJiYobD1pLGk9YXJndW1lbnRzWzFdfHx7fSxqPTIpLHR5cGVvZiBpIT0ib2JqZWN0IiYmIWUuaXNGdW5jdGlvbihpKSYmKGk9e30pLGs9PT1qJiYoaT10aGlzLC0taik7Zm9yKDtqPGs7aisrKWlmKChhPWFyZ3VtZW50c1tqXSkhPW51bGwpZm9yKGMgaW4gYSl7ZD1pW2NdLGY9YVtjXTtpZihpPT09Ziljb250aW51ZTtsJiZmJiYoZS5pc1BsYWluT2JqZWN0KGYpfHwoZz1lLmlzQXJyYXkoZikpKT8oZz8oZz0hMSxoPWQmJmUuaXNBcnJheShkKT9kOltdKTpoPWQmJmUuaXNQbGFpbk9iamVjdChkKT9kOnt9LGlbY109ZS5leHRlbmQobCxoLGYpKTpmIT09YiYmKGlbY109Zil9cmV0dXJuIGl9LGUuZXh0ZW5kKHtub0NvbmZsaWN0OmZ1bmN0aW9uKGIpe2EuJD09PWUmJihhLiQ9ZyksYiYmYS5qUXVlcnk9PT1lJiYoYS5qUXVlcnk9Zik7cmV0dXJuIGV9LGlzUmVhZHk6ITEscmVhZHlXYWl0OjEsaG9sZFJlYWR5OmZ1bmN0aW9uKGEpe2E/ZS5yZWFkeVdhaXQrKzplLnJlYWR5KCEwKX0scmVhZHk6ZnVuY3Rpb24oYSl7aWYoYT09PSEwJiYhLS1lLnJlYWR5V2FpdHx8YSE9PSEwJiYhZS5pc1JlYWR5KXtpZighYy5ib2R5KXJldHVybiBzZXRUaW1lb3V0KGUucmVhZHksMSk7ZS5pc1JlYWR5PSEwO2lmKGEhPT0hMCYmLS1lLnJlYWR5V2FpdD4wKXJldHVybjtBLmZpcmVXaXRoKGMsW2VdKSxlLmZuLnRyaWdnZXImJmUoYykudHJpZ2dlcigicmVhZHkiKS5vZmYoInJlYWR5Iil9fSxiaW5kUmVhZHk6ZnVuY3Rpb24oKXtpZighQSl7QT1lLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKTtpZihjLnJlYWR5U3RhdGU9PT0iY29tcGxldGUiKXJldHVybiBzZXRUaW1lb3V0KGUucmVhZHksMSk7aWYoYy5hZGRFdmVudExpc3RlbmVyKWMuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsQiwhMSksYS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixlLnJlYWR5LCExKTtlbHNlIGlmKGMuYXR0YWNoRXZlbnQpe2MuYXR0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsQiksYS5hdHRhY2hFdmVudCgib25sb2FkIixlLnJlYWR5KTt2YXIgYj0hMTt0cnl7Yj1hLmZyYW1lRWxlbWVudD09bnVsbH1jYXRjaChkKXt9Yy5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwmJmImJkooKX19fSxpc0Z1bmN0aW9uOmZ1bmN0aW9uKGEpe3JldHVybiBlLnR5cGUoYSk9PT0iZnVuY3Rpb24ifSxpc0FycmF5OkFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGEpe3JldHVybiBlLnR5cGUoYSk9PT0iYXJyYXkifSxpc1dpbmRvdzpmdW5jdGlvbihhKXtyZXR1cm4gYSE9bnVsbCYmYT09YS53aW5kb3d9LGlzTnVtZXJpYzpmdW5jdGlvbihhKXtyZXR1cm4haXNOYU4ocGFyc2VGbG9hdChhKSkmJmlzRmluaXRlKGEpfSx0eXBlOmZ1bmN0aW9uKGEpe3JldHVybiBhPT1udWxsP1N0cmluZyhhKTpJW0MuY2FsbChhKV18fCJvYmplY3QifSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKGEpe2lmKCFhfHxlLnR5cGUoYSkhPT0ib2JqZWN0Inx8YS5ub2RlVHlwZXx8ZS5pc1dpbmRvdyhhKSlyZXR1cm4hMTt0cnl7aWYoYS5jb25zdHJ1Y3RvciYmIUQuY2FsbChhLCJjb25zdHJ1Y3RvciIpJiYhRC5jYWxsKGEuY29uc3RydWN0b3IucHJvdG90eXBlLCJpc1Byb3RvdHlwZU9mIikpcmV0dXJuITF9Y2F0Y2goYyl7cmV0dXJuITF9dmFyIGQ7Zm9yKGQgaW4gYSk7cmV0dXJuIGQ9PT1ifHxELmNhbGwoYSxkKX0saXNFbXB0eU9iamVjdDpmdW5jdGlvbihhKXtmb3IodmFyIGIgaW4gYSlyZXR1cm4hMTtyZXR1cm4hMH0sZXJyb3I6ZnVuY3Rpb24oYSl7dGhyb3cgbmV3IEVycm9yKGEpfSxwYXJzZUpTT046ZnVuY3Rpb24oYil7aWYodHlwZW9mIGIhPSJzdHJpbmcifHwhYilyZXR1cm4gbnVsbDtiPWUudHJpbShiKTtpZihhLkpTT04mJmEuSlNPTi5wYXJzZSlyZXR1cm4gYS5KU09OLnBhcnNlKGIpO2lmKG4udGVzdChiLnJlcGxhY2UobywiQCIpLnJlcGxhY2UocCwiXSIpLnJlcGxhY2UocSwiIikpKXJldHVybihuZXcgRnVuY3Rpb24oInJldHVybiAiK2IpKSgpO2UuZXJyb3IoIkludmFsaWQgSlNPTjogIitiKX0scGFyc2VYTUw6ZnVuY3Rpb24oYyl7aWYodHlwZW9mIGMhPSJzdHJpbmcifHwhYylyZXR1cm4gbnVsbDt2YXIgZCxmO3RyeXthLkRPTVBhcnNlcj8oZj1uZXcgRE9NUGFyc2VyLGQ9Zi5wYXJzZUZyb21TdHJpbmcoYywidGV4dC94bWwiKSk6KGQ9bmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxET00iKSxkLmFzeW5jPSJmYWxzZSIsZC5sb2FkWE1MKGMpKX1jYXRjaChnKXtkPWJ9KCFkfHwhZC5kb2N1bWVudEVsZW1lbnR8fGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInBhcnNlcmVycm9yIikubGVuZ3RoKSYmZS5lcnJvcigiSW52YWxpZCBYTUw6ICIrYyk7cmV0dXJuIGR9LG5vb3A6ZnVuY3Rpb24oKXt9LGdsb2JhbEV2YWw6ZnVuY3Rpb24oYil7YiYmai50ZXN0KGIpJiYoYS5leGVjU2NyaXB0fHxmdW5jdGlvbihiKXthLmV2YWwuY2FsbChhLGIpfSkoYil9LGNhbWVsQ2FzZTpmdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKHcsIm1zLSIpLnJlcGxhY2Uodix4KX0sbm9kZU5hbWU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5ub2RlTmFtZSYmYS5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpPT09Yi50b1VwcGVyQ2FzZSgpfSxlYWNoOmZ1bmN0aW9uKGEsYyxkKXt2YXIgZixnPTAsaD1hLmxlbmd0aCxpPWg9PT1ifHxlLmlzRnVuY3Rpb24oYSk7aWYoZCl7aWYoaSl7Zm9yKGYgaW4gYSlpZihjLmFwcGx5KGFbZl0sZCk9PT0hMSlicmVha31lbHNlIGZvcig7ZzxoOylpZihjLmFwcGx5KGFbZysrXSxkKT09PSExKWJyZWFrfWVsc2UgaWYoaSl7Zm9yKGYgaW4gYSlpZihjLmNhbGwoYVtmXSxmLGFbZl0pPT09ITEpYnJlYWt9ZWxzZSBmb3IoO2c8aDspaWYoYy5jYWxsKGFbZ10sZyxhW2crK10pPT09ITEpYnJlYWs7cmV0dXJuIGF9LHRyaW06Rz9mdW5jdGlvbihhKXtyZXR1cm4gYT09bnVsbD8iIjpHLmNhbGwoYSl9OmZ1bmN0aW9uKGEpe3JldHVybiBhPT1udWxsPyIiOihhKyIiKS5yZXBsYWNlKGssIiIpLnJlcGxhY2UobCwiIil9LG1ha2VBcnJheTpmdW5jdGlvbihhLGIpe3ZhciBjPWJ8fFtdO2lmKGEhPW51bGwpe3ZhciBkPWUudHlwZShhKTthLmxlbmd0aD09bnVsbHx8ZD09PSJzdHJpbmcifHxkPT09ImZ1bmN0aW9uInx8ZD09PSJyZWdleHAifHxlLmlzV2luZG93KGEpP0UuY2FsbChjLGEpOmUubWVyZ2UoYyxhKX1yZXR1cm4gY30saW5BcnJheTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ7aWYoYil7aWYoSClyZXR1cm4gSC5jYWxsKGIsYSxjKTtkPWIubGVuZ3RoLGM9Yz9jPDA/TWF0aC5tYXgoMCxkK2MpOmM6MDtmb3IoO2M8ZDtjKyspaWYoYyBpbiBiJiZiW2NdPT09YSlyZXR1cm4gY31yZXR1cm4tMX0sbWVyZ2U6ZnVuY3Rpb24oYSxjKXt2YXIgZD1hLmxlbmd0aCxlPTA7aWYodHlwZW9mIGMubGVuZ3RoPT0ibnVtYmVyIilmb3IodmFyIGY9Yy5sZW5ndGg7ZTxmO2UrKylhW2QrK109Y1tlXTtlbHNlIHdoaWxlKGNbZV0hPT1iKWFbZCsrXT1jW2UrK107YS5sZW5ndGg9ZDtyZXR1cm4gYX0sZ3JlcDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9W10sZTtjPSEhYztmb3IodmFyIGY9MCxnPWEubGVuZ3RoO2Y8ZztmKyspZT0hIWIoYVtmXSxmKSxjIT09ZSYmZC5wdXNoKGFbZl0pO3JldHVybiBkfSxtYXA6ZnVuY3Rpb24oYSxjLGQpe3ZhciBmLGcsaD1bXSxpPTAsaj1hLmxlbmd0aCxrPWEgaW5zdGFuY2VvZiBlfHxqIT09YiYmdHlwZW9mIGo9PSJudW1iZXIiJiYoaj4wJiZhWzBdJiZhW2otMV18fGo9PT0wfHxlLmlzQXJyYXkoYSkpO2lmKGspZm9yKDtpPGo7aSsrKWY9YyhhW2ldLGksZCksZiE9bnVsbCYmKGhbaC5sZW5ndGhdPWYpO2Vsc2UgZm9yKGcgaW4gYSlmPWMoYVtnXSxnLGQpLGYhPW51bGwmJihoW2gubGVuZ3RoXT1mKTtyZXR1cm4gaC5jb25jYXQuYXBwbHkoW10saCl9LGd1aWQ6MSxwcm94eTpmdW5jdGlvbihhLGMpe2lmKHR5cGVvZiBjPT0ic3RyaW5nIil7dmFyIGQ9YVtjXTtjPWEsYT1kfWlmKCFlLmlzRnVuY3Rpb24oYSkpcmV0dXJuIGI7dmFyIGY9Ri5jYWxsKGFyZ3VtZW50cywyKSxnPWZ1bmN0aW9uKCl7cmV0dXJuIGEuYXBwbHkoYyxmLmNvbmNhdChGLmNhbGwoYXJndW1lbnRzKSkpfTtnLmd1aWQ9YS5ndWlkPWEuZ3VpZHx8Zy5ndWlkfHxlLmd1aWQrKztyZXR1cm4gZ30sYWNjZXNzOmZ1bmN0aW9uKGEsYyxkLGYsZyxoLGkpe3ZhciBqLGs9ZD09bnVsbCxsPTAsbT1hLmxlbmd0aDtpZihkJiZ0eXBlb2YgZD09Im9iamVjdCIpe2ZvcihsIGluIGQpZS5hY2Nlc3MoYSxjLGwsZFtsXSwxLGgsZik7Zz0xfWVsc2UgaWYoZiE9PWIpe2o9aT09PWImJmUuaXNGdW5jdGlvbihmKSxrJiYoaj8oaj1jLGM9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBqLmNhbGwoZShhKSxjKX0pOihjLmNhbGwoYSxmKSxjPW51bGwpKTtpZihjKWZvcig7bDxtO2wrKyljKGFbbF0sZCxqP2YuY2FsbChhW2xdLGwsYyhhW2xdLGQpKTpmLGkpO2c9MX1yZXR1cm4gZz9hOms/Yy5jYWxsKGEpOm0/YyhhWzBdLGQpOmh9LG5vdzpmdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0VGltZSgpfSx1YU1hdGNoOmZ1bmN0aW9uKGEpe2E9YS50b0xvd2VyQ2FzZSgpO3ZhciBiPXIuZXhlYyhhKXx8cy5leGVjKGEpfHx0LmV4ZWMoYSl8fGEuaW5kZXhPZigiY29tcGF0aWJsZSIpPDAmJnUuZXhlYyhhKXx8W107cmV0dXJue2Jyb3dzZXI6YlsxXXx8IiIsdmVyc2lvbjpiWzJdfHwiMCJ9fSxzdWI6ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGIsYyl7cmV0dXJuIG5ldyBhLmZuLmluaXQoYixjKX1lLmV4dGVuZCghMCxhLHRoaXMpLGEuc3VwZXJjbGFzcz10aGlzLGEuZm49YS5wcm90b3R5cGU9dGhpcygpLGEuZm4uY29uc3RydWN0b3I9YSxhLnN1Yj10aGlzLnN1YixhLmZuLmluaXQ9ZnVuY3Rpb24oZCxmKXtmJiZmIGluc3RhbmNlb2YgZSYmIShmIGluc3RhbmNlb2YgYSkmJihmPWEoZikpO3JldHVybiBlLmZuLmluaXQuY2FsbCh0aGlzLGQsZixiKX0sYS5mbi5pbml0LnByb3RvdHlwZT1hLmZuO3ZhciBiPWEoYyk7cmV0dXJuIGF9LGJyb3dzZXI6e319KSxlLmVhY2goIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QiLnNwbGl0KCIgIiksZnVuY3Rpb24oYSxiKXtJWyJbb2JqZWN0ICIrYisiXSJdPWIudG9Mb3dlckNhc2UoKX0pLHo9ZS51YU1hdGNoKHkpLHouYnJvd3NlciYmKGUuYnJvd3Nlclt6LmJyb3dzZXJdPSEwLGUuYnJvd3Nlci52ZXJzaW9uPXoudmVyc2lvbiksZS5icm93c2VyLndlYmtpdCYmKGUuYnJvd3Nlci5zYWZhcmk9ITApLGoudGVzdCgiwqAiKSYmKGs9L15bXHNceEEwXSsvLGw9L1tcc1x4QTBdKyQvKSxoPWUoYyksYy5hZGRFdmVudExpc3RlbmVyP0I9ZnVuY3Rpb24oKXtjLnJlbW92ZUV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLEIsITEpLGUucmVhZHkoKX06Yy5hdHRhY2hFdmVudCYmKEI9ZnVuY3Rpb24oKXtjLnJlYWR5U3RhdGU9PT0iY29tcGxldGUiJiYoYy5kZXRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIixCKSxlLnJlYWR5KCkpfSk7cmV0dXJuIGV9KCksZz17fTtmLkNhbGxiYWNrcz1mdW5jdGlvbihhKXthPWE/Z1thXXx8aChhKTp7fTt2YXIgYz1bXSxkPVtdLGUsaSxqLGssbCxtLG49ZnVuY3Rpb24oYil7dmFyIGQsZSxnLGgsaTtmb3IoZD0wLGU9Yi5sZW5ndGg7ZDxlO2QrKylnPWJbZF0saD1mLnR5cGUoZyksaD09PSJhcnJheSI/bihnKTpoPT09ImZ1bmN0aW9uIiYmKCFhLnVuaXF1ZXx8IXAuaGFzKGcpKSYmYy5wdXNoKGcpfSxvPWZ1bmN0aW9uKGIsZil7Zj1mfHxbXSxlPSFhLm1lbW9yeXx8W2IsZl0saT0hMCxqPSEwLG09a3x8MCxrPTAsbD1jLmxlbmd0aDtmb3IoO2MmJm08bDttKyspaWYoY1ttXS5hcHBseShiLGYpPT09ITEmJmEuc3RvcE9uRmFsc2Upe2U9ITA7YnJlYWt9aj0hMSxjJiYoYS5vbmNlP2U9PT0hMD9wLmRpc2FibGUoKTpjPVtdOmQmJmQubGVuZ3RoJiYoZT1kLnNoaWZ0KCkscC5maXJlV2l0aChlWzBdLGVbMV0pKSl9LHA9e2FkZDpmdW5jdGlvbigpe2lmKGMpe3ZhciBhPWMubGVuZ3RoO24oYXJndW1lbnRzKSxqP2w9Yy5sZW5ndGg6ZSYmZSE9PSEwJiYoaz1hLG8oZVswXSxlWzFdKSl9cmV0dXJuIHRoaXN9LHJlbW92ZTpmdW5jdGlvbigpe2lmKGMpe3ZhciBiPWFyZ3VtZW50cyxkPTAsZT1iLmxlbmd0aDtmb3IoO2Q8ZTtkKyspZm9yKHZhciBmPTA7ZjxjLmxlbmd0aDtmKyspaWYoYltkXT09PWNbZl0pe2omJmY8PWwmJihsLS0sZjw9bSYmbS0tKSxjLnNwbGljZShmLS0sMSk7aWYoYS51bmlxdWUpYnJlYWt9fXJldHVybiB0aGlzfSxoYXM6ZnVuY3Rpb24oYSl7aWYoYyl7dmFyIGI9MCxkPWMubGVuZ3RoO2Zvcig7YjxkO2IrKylpZihhPT09Y1tiXSlyZXR1cm4hMH1yZXR1cm4hMX0sZW1wdHk6ZnVuY3Rpb24oKXtjPVtdO3JldHVybiB0aGlzfSxkaXNhYmxlOmZ1bmN0aW9uKCl7Yz1kPWU9YjtyZXR1cm4gdGhpc30sZGlzYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hY30sbG9jazpmdW5jdGlvbigpe2Q9YiwoIWV8fGU9PT0hMCkmJnAuZGlzYWJsZSgpO3JldHVybiB0aGlzfSxsb2NrZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hZH0sZmlyZVdpdGg6ZnVuY3Rpb24oYixjKXtkJiYoaj9hLm9uY2V8fGQucHVzaChbYixjXSk6KCFhLm9uY2V8fCFlKSYmbyhiLGMpKTtyZXR1cm4gdGhpc30sZmlyZTpmdW5jdGlvbigpe3AuZmlyZVdpdGgodGhpcyxhcmd1bWVudHMpO3JldHVybiB0aGlzfSxmaXJlZDpmdW5jdGlvbigpe3JldHVybiEhaX19O3JldHVybiBwfTt2YXIgaT1bXS5zbGljZTtmLmV4dGVuZCh7RGVmZXJyZWQ6ZnVuY3Rpb24oYSl7dmFyIGI9Zi5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksYz1mLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSxkPWYuQ2FsbGJhY2tzKCJtZW1vcnkiKSxlPSJwZW5kaW5nIixnPXtyZXNvbHZlOmIscmVqZWN0OmMsbm90aWZ5OmR9LGg9e2RvbmU6Yi5hZGQsZmFpbDpjLmFkZCxwcm9ncmVzczpkLmFkZCxzdGF0ZTpmdW5jdGlvbigpe3JldHVybiBlfSxpc1Jlc29sdmVkOmIuZmlyZWQsaXNSZWplY3RlZDpjLmZpcmVkLHRoZW46ZnVuY3Rpb24oYSxiLGMpe2kuZG9uZShhKS5mYWlsKGIpLnByb2dyZXNzKGMpO3JldHVybiB0aGlzfSxhbHdheXM6ZnVuY3Rpb24oKXtpLmRvbmUuYXBwbHkoaSxhcmd1bWVudHMpLmZhaWwuYXBwbHkoaSxhcmd1bWVudHMpO3JldHVybiB0aGlzfSxwaXBlOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZi5EZWZlcnJlZChmdW5jdGlvbihkKXtmLmVhY2goe2RvbmU6W2EsInJlc29sdmUiXSxmYWlsOltiLCJyZWplY3QiXSxwcm9ncmVzczpbYywibm90aWZ5Il19LGZ1bmN0aW9uKGEsYil7dmFyIGM9YlswXSxlPWJbMV0sZztmLmlzRnVuY3Rpb24oYyk/aVthXShmdW5jdGlvbigpe2c9Yy5hcHBseSh0aGlzLGFyZ3VtZW50cyksZyYmZi5pc0Z1bmN0aW9uKGcucHJvbWlzZSk/Zy5wcm9taXNlKCkudGhlbihkLnJlc29sdmUsZC5yZWplY3QsZC5ub3RpZnkpOmRbZSsiV2l0aCJdKHRoaXM9PT1pP2Q6dGhpcyxbZ10pfSk6aVthXShkW2VdKX0pfSkucHJvbWlzZSgpfSxwcm9taXNlOmZ1bmN0aW9uKGEpe2lmKGE9PW51bGwpYT1oO2Vsc2UgZm9yKHZhciBiIGluIGgpYVtiXT1oW2JdO3JldHVybiBhfX0saT1oLnByb21pc2Uoe30pLGo7Zm9yKGogaW4gZylpW2pdPWdbal0uZmlyZSxpW2orIldpdGgiXT1nW2pdLmZpcmVXaXRoO2kuZG9uZShmdW5jdGlvbigpe2U9InJlc29sdmVkIn0sYy5kaXNhYmxlLGQubG9jaykuZmFpbChmdW5jdGlvbigpe2U9InJlamVjdGVkIn0sYi5kaXNhYmxlLGQubG9jayksYSYmYS5jYWxsKGksaSk7cmV0dXJuIGl9LHdoZW46ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gbShhKXtyZXR1cm4gZnVuY3Rpb24oYil7ZVthXT1hcmd1bWVudHMubGVuZ3RoPjE/aS5jYWxsKGFyZ3VtZW50cywwKTpiLGoubm90aWZ5V2l0aChrLGUpfX1mdW5jdGlvbiBsKGEpe3JldHVybiBmdW5jdGlvbihjKXtiW2FdPWFyZ3VtZW50cy5sZW5ndGg+MT9pLmNhbGwoYXJndW1lbnRzLDApOmMsLS1nfHxqLnJlc29sdmVXaXRoKGosYil9fXZhciBiPWkuY2FsbChhcmd1bWVudHMsMCksYz0wLGQ9Yi5sZW5ndGgsZT1BcnJheShkKSxnPWQsaD1kLGo9ZDw9MSYmYSYmZi5pc0Z1bmN0aW9uKGEucHJvbWlzZSk/YTpmLkRlZmVycmVkKCksaz1qLnByb21pc2UoKTtpZihkPjEpe2Zvcig7YzxkO2MrKyliW2NdJiZiW2NdLnByb21pc2UmJmYuaXNGdW5jdGlvbihiW2NdLnByb21pc2UpP2JbY10ucHJvbWlzZSgpLnRoZW4obChjKSxqLnJlamVjdCxtKGMpKTotLWc7Z3x8ai5yZXNvbHZlV2l0aChqLGIpfWVsc2UgaiE9PWEmJmoucmVzb2x2ZVdpdGgoaixkP1thXTpbXSk7cmV0dXJuIGt9fSksZi5zdXBwb3J0PWZ1bmN0aW9uKCl7dmFyIGIsZCxlLGcsaCxpLGosayxsLG0sbixvLHA9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKSxxPWMuZG9jdW1lbnRFbGVtZW50O3Auc2V0QXR0cmlidXRlKCJjbGFzc05hbWUiLCJ0IikscC5pbm5lckhUTUw9IiAgIDxsaW5rLz48dGFibGU+PC90YWJsZT48YSBocmVmPScvYScgc3R5bGU9J3RvcDoxcHg7ZmxvYXQ6bGVmdDtvcGFjaXR5Oi41NTsnPmE8L2E+PGlucHV0IHR5cGU9J2NoZWNrYm94Jy8+IixkPXAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSxlPXAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImEiKVswXTtpZighZHx8IWQubGVuZ3RofHwhZSlyZXR1cm57fTtnPWMuY3JlYXRlRWxlbWVudCgic2VsZWN0IiksaD1nLmFwcGVuZENoaWxkKGMuY3JlYXRlRWxlbWVudCgib3B0aW9uIikpLGk9cC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKVswXSxiPXtsZWFkaW5nV2hpdGVzcGFjZTpwLmZpcnN0Q2hpbGQubm9kZVR5cGU9PT0zLHRib2R5OiFwLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpLmxlbmd0aCxodG1sU2VyaWFsaXplOiEhcC5nZXRFbGVtZW50c0J5VGFnTmFtZSgibGluayIpLmxlbmd0aCxzdHlsZTovdG9wLy50ZXN0KGUuZ2V0QXR0cmlidXRlKCJzdHlsZSIpKSxocmVmTm9ybWFsaXplZDplLmdldEF0dHJpYnV0ZSgiaHJlZiIpPT09Ii9hIixvcGFjaXR5Oi9eMC41NS8udGVzdChlLnN0eWxlLm9wYWNpdHkpLGNzc0Zsb2F0OiEhZS5zdHlsZS5jc3NGbG9hdCxjaGVja09uOmkudmFsdWU9PT0ib24iLG9wdFNlbGVjdGVkOmguc2VsZWN0ZWQsZ2V0U2V0QXR0cmlidXRlOnAuY2xhc3NOYW1lIT09InQiLGVuY3R5cGU6ISFjLmNyZWF0ZUVsZW1lbnQoImZvcm0iKS5lbmN0eXBlLGh0bWw1Q2xvbmU6Yy5jcmVhdGVFbGVtZW50KCJuYXYiKS5jbG9uZU5vZGUoITApLm91dGVySFRNTCE9PSI8Om5hdj48LzpuYXY+IixzdWJtaXRCdWJibGVzOiEwLGNoYW5nZUJ1YmJsZXM6ITAsZm9jdXNpbkJ1YmJsZXM6ITEsZGVsZXRlRXhwYW5kbzohMCxub0Nsb25lRXZlbnQ6ITAsaW5saW5lQmxvY2tOZWVkc0xheW91dDohMSxzaHJpbmtXcmFwQmxvY2tzOiExLHJlbGlhYmxlTWFyZ2luUmlnaHQ6ITAscGl4ZWxNYXJnaW46ITB9LGYuYm94TW9kZWw9Yi5ib3hNb2RlbD1jLmNvbXBhdE1vZGU9PT0iQ1NTMUNvbXBhdCIsaS5jaGVja2VkPSEwLGIubm9DbG9uZUNoZWNrZWQ9aS5jbG9uZU5vZGUoITApLmNoZWNrZWQsZy5kaXNhYmxlZD0hMCxiLm9wdERpc2FibGVkPSFoLmRpc2FibGVkO3RyeXtkZWxldGUgcC50ZXN0fWNhdGNoKHIpe2IuZGVsZXRlRXhwYW5kbz0hMX0hcC5hZGRFdmVudExpc3RlbmVyJiZwLmF0dGFjaEV2ZW50JiZwLmZpcmVFdmVudCYmKHAuYXR0YWNoRXZlbnQoIm9uY2xpY2siLGZ1bmN0aW9uKCl7Yi5ub0Nsb25lRXZlbnQ9ITF9KSxwLmNsb25lTm9kZSghMCkuZmlyZUV2ZW50KCJvbmNsaWNrIikpLGk9Yy5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLGkudmFsdWU9InQiLGkuc2V0QXR0cmlidXRlKCJ0eXBlIiwicmFkaW8iKSxiLnJhZGlvVmFsdWU9aS52YWx1ZT09PSJ0IixpLnNldEF0dHJpYnV0ZSgiY2hlY2tlZCIsImNoZWNrZWQiKSxpLnNldEF0dHJpYnV0ZSgibmFtZSIsInQiKSxwLmFwcGVuZENoaWxkKGkpLGo9Yy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksai5hcHBlbmRDaGlsZChwLmxhc3RDaGlsZCksYi5jaGVja0Nsb25lPWouY2xvbmVOb2RlKCEwKS5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5jaGVja2VkLGIuYXBwZW5kQ2hlY2tlZD1pLmNoZWNrZWQsai5yZW1vdmVDaGlsZChpKSxqLmFwcGVuZENoaWxkKHApO2lmKHAuYXR0YWNoRXZlbnQpZm9yKG4gaW57c3VibWl0OjEsY2hhbmdlOjEsZm9jdXNpbjoxfSltPSJvbiIrbixvPW0gaW4gcCxvfHwocC5zZXRBdHRyaWJ1dGUobSwicmV0dXJuOyIpLG89dHlwZW9mIHBbbV09PSJmdW5jdGlvbiIpLGJbbisiQnViYmxlcyJdPW87ai5yZW1vdmVDaGlsZChwKSxqPWc9aD1wPWk9bnVsbCxmKGZ1bmN0aW9uKCl7dmFyIGQsZSxnLGgsaSxqLGwsbSxuLHEscixzLHQsdT1jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF07IXV8fChtPTEsdD0icGFkZGluZzowO21hcmdpbjowO2JvcmRlcjoiLHI9InBvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDt3aWR0aDoxcHg7aGVpZ2h0OjFweDsiLHM9dCsiMDt2aXNpYmlsaXR5OmhpZGRlbjsiLG49InN0eWxlPSciK3IrdCsiNXB4IHNvbGlkICMwMDA7IixxPSI8ZGl2ICIrbisiZGlzcGxheTpibG9jazsnPjxkaXYgc3R5bGU9JyIrdCsiMDtkaXNwbGF5OmJsb2NrO292ZXJmbG93OmhpZGRlbjsnPjwvZGl2PjwvZGl2PiIrIjx0YWJsZSAiK24rIicgY2VsbHBhZGRpbmc9JzAnIGNlbGxzcGFjaW5nPScwJz4iKyI8dHI+PHRkPjwvdGQ+PC90cj48L3RhYmxlPiIsZD1jLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGQuc3R5bGUuY3NzVGV4dD1zKyJ3aWR0aDowO2hlaWdodDowO3Bvc2l0aW9uOnN0YXRpYzt0b3A6MDttYXJnaW4tdG9wOiIrbSsicHgiLHUuaW5zZXJ0QmVmb3JlKGQsdS5maXJzdENoaWxkKSxwPWMuY3JlYXRlRWxlbWVudCgiZGl2IiksZC5hcHBlbmRDaGlsZChwKSxwLmlubmVySFRNTD0iPHRhYmxlPjx0cj48dGQgc3R5bGU9JyIrdCsiMDtkaXNwbGF5Om5vbmUnPjwvdGQ+PHRkPnQ8L3RkPjwvdHI+PC90YWJsZT4iLGs9cC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKSxvPWtbMF0ub2Zmc2V0SGVpZ2h0PT09MCxrWzBdLnN0eWxlLmRpc3BsYXk9IiIsa1sxXS5zdHlsZS5kaXNwbGF5PSJub25lIixiLnJlbGlhYmxlSGlkZGVuT2Zmc2V0cz1vJiZrWzBdLm9mZnNldEhlaWdodD09PTAsYS5nZXRDb21wdXRlZFN0eWxlJiYocC5pbm5lckhUTUw9IiIsbD1jLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGwuc3R5bGUud2lkdGg9IjAiLGwuc3R5bGUubWFyZ2luUmlnaHQ9IjAiLHAuc3R5bGUud2lkdGg9IjJweCIscC5hcHBlbmRDaGlsZChsKSxiLnJlbGlhYmxlTWFyZ2luUmlnaHQ9KHBhcnNlSW50KChhLmdldENvbXB1dGVkU3R5bGUobCxudWxsKXx8e21hcmdpblJpZ2h0OjB9KS5tYXJnaW5SaWdodCwxMCl8fDApPT09MCksdHlwZW9mIHAuc3R5bGUuem9vbSE9InVuZGVmaW5lZCImJihwLmlubmVySFRNTD0iIixwLnN0eWxlLndpZHRoPXAuc3R5bGUucGFkZGluZz0iMXB4IixwLnN0eWxlLmJvcmRlcj0wLHAuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiIscC5zdHlsZS5kaXNwbGF5PSJpbmxpbmUiLHAuc3R5bGUuem9vbT0xLGIuaW5saW5lQmxvY2tOZWVkc0xheW91dD1wLm9mZnNldFdpZHRoPT09MyxwLnN0eWxlLmRpc3BsYXk9ImJsb2NrIixwLnN0eWxlLm92ZXJmbG93PSJ2aXNpYmxlIixwLmlubmVySFRNTD0iPGRpdiBzdHlsZT0nd2lkdGg6NXB4Oyc+PC9kaXY+IixiLnNocmlua1dyYXBCbG9ja3M9cC5vZmZzZXRXaWR0aCE9PTMpLHAuc3R5bGUuY3NzVGV4dD1yK3MscC5pbm5lckhUTUw9cSxlPXAuZmlyc3RDaGlsZCxnPWUuZmlyc3RDaGlsZCxpPWUubmV4dFNpYmxpbmcuZmlyc3RDaGlsZC5maXJzdENoaWxkLGo9e2RvZXNOb3RBZGRCb3JkZXI6Zy5vZmZzZXRUb3AhPT01LGRvZXNBZGRCb3JkZXJGb3JUYWJsZUFuZENlbGxzOmkub2Zmc2V0VG9wPT09NX0sZy5zdHlsZS5wb3NpdGlvbj0iZml4ZWQiLGcuc3R5bGUudG9wPSIyMHB4IixqLmZpeGVkUG9zaXRpb249Zy5vZmZzZXRUb3A9PT0yMHx8Zy5vZmZzZXRUb3A9PT0xNSxnLnN0eWxlLnBvc2l0aW9uPWcuc3R5bGUudG9wPSIiLGUuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiIsZS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLGouc3VidHJhY3RzQm9yZGVyRm9yT3ZlcmZsb3dOb3RWaXNpYmxlPWcub2Zmc2V0VG9wPT09LTUsai5kb2VzTm90SW5jbHVkZU1hcmdpbkluQm9keU9mZnNldD11Lm9mZnNldFRvcCE9PW0sYS5nZXRDb21wdXRlZFN0eWxlJiYocC5zdHlsZS5tYXJnaW5Ub3A9IjElIixiLnBpeGVsTWFyZ2luPShhLmdldENvbXB1dGVkU3R5bGUocCxudWxsKXx8e21hcmdpblRvcDowfSkubWFyZ2luVG9wIT09IjElIiksdHlwZW9mIGQuc3R5bGUuem9vbSE9InVuZGVmaW5lZCImJihkLnN0eWxlLnpvb209MSksdS5yZW1vdmVDaGlsZChkKSxsPXA9ZD1udWxsLGYuZXh0ZW5kKGIsaikpfSk7cmV0dXJuIGJ9KCk7dmFyIGo9L14oPzpcey4qXH18XFsuKlxdKSQvLGs9LyhbQS1aXSkvZztmLmV4dGVuZCh7Y2FjaGU6e30sdXVpZDowLGV4cGFuZG86ImpRdWVyeSIrKGYuZm4uanF1ZXJ5K01hdGgucmFuZG9tKCkpLnJlcGxhY2UoL1xEL2csIiIpLG5vRGF0YTp7ZW1iZWQ6ITAsb2JqZWN0OiJjbHNpZDpEMjdDREI2RS1BRTZELTExY2YtOTZCOC00NDQ1NTM1NDAwMDAiLGFwcGxldDohMH0saGFzRGF0YTpmdW5jdGlvbihhKXthPWEubm9kZVR5cGU/Zi5jYWNoZVthW2YuZXhwYW5kb11dOmFbZi5leHBhbmRvXTtyZXR1cm4hIWEmJiFtKGEpfSxkYXRhOmZ1bmN0aW9uKGEsYyxkLGUpe2lmKCEhZi5hY2NlcHREYXRhKGEpKXt2YXIgZyxoLGksaj1mLmV4cGFuZG8saz10eXBlb2YgYz09InN0cmluZyIsbD1hLm5vZGVUeXBlLG09bD9mLmNhY2hlOmEsbj1sP2Fbal06YVtqXSYmaixvPWM9PT0iZXZlbnRzIjtpZigoIW58fCFtW25dfHwhbyYmIWUmJiFtW25dLmRhdGEpJiZrJiZkPT09YilyZXR1cm47bnx8KGw/YVtqXT1uPSsrZi51dWlkOm49aiksbVtuXXx8KG1bbl09e30sbHx8KG1bbl0udG9KU09OPWYubm9vcCkpO2lmKHR5cGVvZiBjPT0ib2JqZWN0Inx8dHlwZW9mIGM9PSJmdW5jdGlvbiIpZT9tW25dPWYuZXh0ZW5kKG1bbl0sYyk6bVtuXS5kYXRhPWYuZXh0ZW5kKG1bbl0uZGF0YSxjKTtnPWg9bVtuXSxlfHwoaC5kYXRhfHwoaC5kYXRhPXt9KSxoPWguZGF0YSksZCE9PWImJihoW2YuY2FtZWxDYXNlKGMpXT1kKTtpZihvJiYhaFtjXSlyZXR1cm4gZy5ldmVudHM7az8oaT1oW2NdLGk9PW51bGwmJihpPWhbZi5jYW1lbENhc2UoYyldKSk6aT1oO3JldHVybiBpfX0scmVtb3ZlRGF0YTpmdW5jdGlvbihhLGIsYyl7aWYoISFmLmFjY2VwdERhdGEoYSkpe3ZhciBkLGUsZyxoPWYuZXhwYW5kbyxpPWEubm9kZVR5cGUsaj1pP2YuY2FjaGU6YSxrPWk/YVtoXTpoO2lmKCFqW2tdKXJldHVybjtpZihiKXtkPWM/altrXTpqW2tdLmRhdGE7aWYoZCl7Zi5pc0FycmF5KGIpfHwoYiBpbiBkP2I9W2JdOihiPWYuY2FtZWxDYXNlKGIpLGIgaW4gZD9iPVtiXTpiPWIuc3BsaXQoIiAiKSkpO2ZvcihlPTAsZz1iLmxlbmd0aDtlPGc7ZSsrKWRlbGV0ZSBkW2JbZV1dO2lmKCEoYz9tOmYuaXNFbXB0eU9iamVjdCkoZCkpcmV0dXJufX1pZighYyl7ZGVsZXRlIGpba10uZGF0YTtpZighbShqW2tdKSlyZXR1cm59Zi5zdXBwb3J0LmRlbGV0ZUV4cGFuZG98fCFqLnNldEludGVydmFsP2RlbGV0ZSBqW2tdOmpba109bnVsbCxpJiYoZi5zdXBwb3J0LmRlbGV0ZUV4cGFuZG8/ZGVsZXRlIGFbaF06YS5yZW1vdmVBdHRyaWJ1dGU/YS5yZW1vdmVBdHRyaWJ1dGUoaCk6YVtoXT1udWxsKX19LF9kYXRhOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZi5kYXRhKGEsYixjLCEwKX0sYWNjZXB0RGF0YTpmdW5jdGlvbihhKXtpZihhLm5vZGVOYW1lKXt2YXIgYj1mLm5vRGF0YVthLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldO2lmKGIpcmV0dXJuIGIhPT0hMCYmYS5nZXRBdHRyaWJ1dGUoImNsYXNzaWQiKT09PWJ9cmV0dXJuITB9fSksZi5mbi5leHRlbmQoe2RhdGE6ZnVuY3Rpb24oYSxjKXt2YXIgZCxlLGcsaCxpLGo9dGhpc1swXSxrPTAsbT1udWxsO2lmKGE9PT1iKXtpZih0aGlzLmxlbmd0aCl7bT1mLmRhdGEoaik7aWYoai5ub2RlVHlwZT09PTEmJiFmLl9kYXRhKGosInBhcnNlZEF0dHJzIikpe2c9ai5hdHRyaWJ1dGVzO2ZvcihpPWcubGVuZ3RoO2s8aTtrKyspaD1nW2tdLm5hbWUsaC5pbmRleE9mKCJkYXRhLSIpPT09MCYmKGg9Zi5jYW1lbENhc2UoaC5zdWJzdHJpbmcoNSkpLGwoaixoLG1baF0pKTtmLl9kYXRhKGosInBhcnNlZEF0dHJzIiwhMCl9fXJldHVybiBtfWlmKHR5cGVvZiBhPT0ib2JqZWN0IilyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Zi5kYXRhKHRoaXMsYSl9KTtkPWEuc3BsaXQoIi4iLDIpLGRbMV09ZFsxXT8iLiIrZFsxXToiIixlPWRbMV0rIiEiO3JldHVybiBmLmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKGMpe2lmKGM9PT1iKXttPXRoaXMudHJpZ2dlckhhbmRsZXIoImdldERhdGEiK2UsW2RbMF1dKSxtPT09YiYmaiYmKG09Zi5kYXRhKGosYSksbT1sKGosYSxtKSk7cmV0dXJuIG09PT1iJiZkWzFdP3RoaXMuZGF0YShkWzBdKTptfWRbMV09Yyx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYj1mKHRoaXMpO2IudHJpZ2dlckhhbmRsZXIoInNldERhdGEiK2UsZCksZi5kYXRhKHRoaXMsYSxjKSxiLnRyaWdnZXJIYW5kbGVyKCJjaGFuZ2VEYXRhIitlLGQpfSl9LG51bGwsYyxhcmd1bWVudHMubGVuZ3RoPjEsbnVsbCwhMSl9LHJlbW92ZURhdGE6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2YucmVtb3ZlRGF0YSh0aGlzLGEpfSl9fSksZi5leHRlbmQoe19tYXJrOmZ1bmN0aW9uKGEsYil7YSYmKGI9KGJ8fCJmeCIpKyJtYXJrIixmLl9kYXRhKGEsYiwoZi5fZGF0YShhLGIpfHwwKSsxKSl9LF91bm1hcms6ZnVuY3Rpb24oYSxiLGMpe2EhPT0hMCYmKGM9YixiPWEsYT0hMSk7aWYoYil7Yz1jfHwiZngiO3ZhciBkPWMrIm1hcmsiLGU9YT8wOihmLl9kYXRhKGIsZCl8fDEpLTE7ZT9mLl9kYXRhKGIsZCxlKTooZi5yZW1vdmVEYXRhKGIsZCwhMCksbihiLGMsIm1hcmsiKSl9fSxxdWV1ZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ7aWYoYSl7Yj0oYnx8ImZ4IikrInF1ZXVlIixkPWYuX2RhdGEoYSxiKSxjJiYoIWR8fGYuaXNBcnJheShjKT9kPWYuX2RhdGEoYSxiLGYubWFrZUFycmF5KGMpKTpkLnB1c2goYykpO3JldHVybiBkfHxbXX19LGRlcXVldWU6ZnVuY3Rpb24oYSxiKXtiPWJ8fCJmeCI7dmFyIGM9Zi5xdWV1ZShhLGIpLGQ9Yy5zaGlmdCgpLGU9e307ZD09PSJpbnByb2dyZXNzIiYmKGQ9Yy5zaGlmdCgpKSxkJiYoYj09PSJmeCImJmMudW5zaGlmdCgiaW5wcm9ncmVzcyIpLGYuX2RhdGEoYSxiKyIucnVuIixlKSxkLmNhbGwoYSxmdW5jdGlvbigpe2YuZGVxdWV1ZShhLGIpfSxlKSksYy5sZW5ndGh8fChmLnJlbW92ZURhdGEoYSxiKyJxdWV1ZSAiK2IrIi5ydW4iLCEwKSxuKGEsYiwicXVldWUiKSl9fSksZi5mbi5leHRlbmQoe3F1ZXVlOmZ1bmN0aW9uKGEsYyl7dmFyIGQ9Mjt0eXBlb2YgYSE9InN0cmluZyImJihjPWEsYT0iZngiLGQtLSk7aWYoYXJndW1lbnRzLmxlbmd0aDxkKXJldHVybiBmLnF1ZXVlKHRoaXNbMF0sYSk7cmV0dXJuIGM9PT1iP3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9Zi5xdWV1ZSh0aGlzLGEsYyk7YT09PSJmeCImJmJbMF0hPT0iaW5wcm9ncmVzcyImJmYuZGVxdWV1ZSh0aGlzLGEpfSl9LGRlcXVldWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2YuZGVxdWV1ZSh0aGlzLGEpfSl9LGRlbGF5OmZ1bmN0aW9uKGEsYil7YT1mLmZ4P2YuZnguc3BlZWRzW2FdfHxhOmEsYj1ifHwiZngiO3JldHVybiB0aGlzLnF1ZXVlKGIsZnVuY3Rpb24oYixjKXt2YXIgZD1zZXRUaW1lb3V0KGIsYSk7Yy5zdG9wPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KGQpfX0pfSxjbGVhclF1ZXVlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnF1ZXVlKGF8fCJmeCIsW10pfSxwcm9taXNlOmZ1bmN0aW9uKGEsYyl7ZnVuY3Rpb24gbSgpey0taHx8ZC5yZXNvbHZlV2l0aChlLFtlXSl9dHlwZW9mIGEhPSJzdHJpbmciJiYoYz1hLGE9YiksYT1hfHwiZngiO3ZhciBkPWYuRGVmZXJyZWQoKSxlPXRoaXMsZz1lLmxlbmd0aCxoPTEsaT1hKyJkZWZlciIsaj1hKyJxdWV1ZSIsaz1hKyJtYXJrIixsO3doaWxlKGctLSlpZihsPWYuZGF0YShlW2ddLGksYiwhMCl8fChmLmRhdGEoZVtnXSxqLGIsITApfHxmLmRhdGEoZVtnXSxrLGIsITApKSYmZi5kYXRhKGVbZ10saSxmLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwhMCkpaCsrLGwuYWRkKG0pO20oKTtyZXR1cm4gZC5wcm9taXNlKGMpfX0pO3ZhciBvPS9bXG5cdFxyXS9nLHA9L1xzKy8scT0vXHIvZyxyPS9eKD86YnV0dG9ufGlucHV0KSQvaSxzPS9eKD86YnV0dG9ufGlucHV0fG9iamVjdHxzZWxlY3R8dGV4dGFyZWEpJC9pLHQ9L15hKD86cmVhKT8kL2ksdT0vXig/OmF1dG9mb2N1c3xhdXRvcGxheXxhc3luY3xjaGVja2VkfGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkfHNlbGVjdGVkKSQvaSx2PWYuc3VwcG9ydC5nZXRTZXRBdHRyaWJ1dGUsdyx4LHk7Zi5mbi5leHRlbmQoe2F0dHI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZi5hY2Nlc3ModGhpcyxmLmF0dHIsYSxiLGFyZ3VtZW50cy5sZW5ndGg+MSl9LHJlbW92ZUF0dHI6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2YucmVtb3ZlQXR0cih0aGlzLGEpfSl9LHByb3A6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZi5hY2Nlc3ModGhpcyxmLnByb3AsYSxiLGFyZ3VtZW50cy5sZW5ndGg+MSl9LHJlbW92ZVByb3A6ZnVuY3Rpb24oYSl7YT1mLnByb3BGaXhbYV18fGE7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3RyeXt0aGlzW2FdPWIsZGVsZXRlIHRoaXNbYV19Y2F0Y2goYyl7fX0pfSxhZGRDbGFzczpmdW5jdGlvbihhKXt2YXIgYixjLGQsZSxnLGgsaTtpZihmLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtmKHRoaXMpLmFkZENsYXNzKGEuY2FsbCh0aGlzLGIsdGhpcy5jbGFzc05hbWUpKX0pO2lmKGEmJnR5cGVvZiBhPT0ic3RyaW5nIil7Yj1hLnNwbGl0KHApO2ZvcihjPTAsZD10aGlzLmxlbmd0aDtjPGQ7YysrKXtlPXRoaXNbY107aWYoZS5ub2RlVHlwZT09PTEpaWYoIWUuY2xhc3NOYW1lJiZiLmxlbmd0aD09PTEpZS5jbGFzc05hbWU9YTtlbHNle2c9IiAiK2UuY2xhc3NOYW1lKyIgIjtmb3IoaD0wLGk9Yi5sZW5ndGg7aDxpO2grKyl+Zy5pbmRleE9mKCIgIitiW2hdKyIgIil8fChnKz1iW2hdKyIgIik7ZS5jbGFzc05hbWU9Zi50cmltKGcpfX19cmV0dXJuIHRoaXN9LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKGEpe3ZhciBjLGQsZSxnLGgsaSxqO2lmKGYuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe2YodGhpcykucmVtb3ZlQ2xhc3MoYS5jYWxsKHRoaXMsYix0aGlzLmNsYXNzTmFtZSkpfSk7aWYoYSYmdHlwZW9mIGE9PSJzdHJpbmcifHxhPT09Yil7Yz0oYXx8IiIpLnNwbGl0KHApO2ZvcihkPTAsZT10aGlzLmxlbmd0aDtkPGU7ZCsrKXtnPXRoaXNbZF07aWYoZy5ub2RlVHlwZT09PTEmJmcuY2xhc3NOYW1lKWlmKGEpe2g9KCIgIitnLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UobywiICIpO2ZvcihpPTAsaj1jLmxlbmd0aDtpPGo7aSsrKWg9aC5yZXBsYWNlKCIgIitjW2ldKyIgIiwiICIpO2cuY2xhc3NOYW1lPWYudHJpbShoKX1lbHNlIGcuY2xhc3NOYW1lPSIifX1yZXR1cm4gdGhpc30sdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24oYSxiKXt2YXIgYz10eXBlb2YgYSxkPXR5cGVvZiBiPT0iYm9vbGVhbiI7aWYoZi5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYyl7Zih0aGlzKS50b2dnbGVDbGFzcyhhLmNhbGwodGhpcyxjLHRoaXMuY2xhc3NOYW1lLGIpLGIpfSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2lmKGM9PT0ic3RyaW5nIil7dmFyIGUsZz0wLGg9Zih0aGlzKSxpPWIsaj1hLnNwbGl0KHApO3doaWxlKGU9altnKytdKWk9ZD9pOiFoLmhhc0NsYXNzKGUpLGhbaT8iYWRkQ2xhc3MiOiJyZW1vdmVDbGFzcyJdKGUpfWVsc2UgaWYoYz09PSJ1bmRlZmluZWQifHxjPT09ImJvb2xlYW4iKXRoaXMuY2xhc3NOYW1lJiZmLl9kYXRhKHRoaXMsIl9fY2xhc3NOYW1lX18iLHRoaXMuY2xhc3NOYW1lKSx0aGlzLmNsYXNzTmFtZT10aGlzLmNsYXNzTmFtZXx8YT09PSExPyIiOmYuX2RhdGEodGhpcywiX19jbGFzc05hbWVfXyIpfHwiIn0pfSxoYXNDbGFzczpmdW5jdGlvbihhKXt2YXIgYj0iICIrYSsiICIsYz0wLGQ9dGhpcy5sZW5ndGg7Zm9yKDtjPGQ7YysrKWlmKHRoaXNbY10ubm9kZVR5cGU9PT0xJiYoIiAiK3RoaXNbY10uY2xhc3NOYW1lKyIgIikucmVwbGFjZShvLCIgIikuaW5kZXhPZihiKT4tMSlyZXR1cm4hMDtyZXR1cm4hMX0sdmFsOmZ1bmN0aW9uKGEpe3ZhciBjLGQsZSxnPXRoaXNbMF07e2lmKCEhYXJndW1lbnRzLmxlbmd0aCl7ZT1mLmlzRnVuY3Rpb24oYSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihkKXt2YXIgZz1mKHRoaXMpLGg7aWYodGhpcy5ub2RlVHlwZT09PTEpe2U/aD1hLmNhbGwodGhpcyxkLGcudmFsKCkpOmg9YSxoPT1udWxsP2g9IiI6dHlwZW9mIGg9PSJudW1iZXIiP2grPSIiOmYuaXNBcnJheShoKSYmKGg9Zi5tYXAoaCxmdW5jdGlvbihhKXtyZXR1cm4gYT09bnVsbD8iIjphKyIifSkpLGM9Zi52YWxIb29rc1t0aGlzLnR5cGVdfHxmLnZhbEhvb2tzW3RoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKV07aWYoIWN8fCEoInNldCJpbiBjKXx8Yy5zZXQodGhpcyxoLCJ2YWx1ZSIpPT09Yil0aGlzLnZhbHVlPWh9fSl9aWYoZyl7Yz1mLnZhbEhvb2tzW2cudHlwZV18fGYudmFsSG9va3NbZy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXTtpZihjJiYiZ2V0ImluIGMmJihkPWMuZ2V0KGcsInZhbHVlIikpIT09YilyZXR1cm4gZDtkPWcudmFsdWU7cmV0dXJuIHR5cGVvZiBkPT0ic3RyaW5nIj9kLnJlcGxhY2UocSwiIik6ZD09bnVsbD8iIjpkfX19fSksZi5leHRlbmQoe3ZhbEhvb2tzOntvcHRpb246e2dldDpmdW5jdGlvbihhKXt2YXIgYj1hLmF0dHJpYnV0ZXMudmFsdWU7cmV0dXJuIWJ8fGIuc3BlY2lmaWVkP2EudmFsdWU6YS50ZXh0fX0sc2VsZWN0OntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZz1hLnNlbGVjdGVkSW5kZXgsaD1bXSxpPWEub3B0aW9ucyxqPWEudHlwZT09PSJzZWxlY3Qtb25lIjtpZihnPDApcmV0dXJuIG51bGw7Yz1qP2c6MCxkPWo/ZysxOmkubGVuZ3RoO2Zvcig7YzxkO2MrKyl7ZT1pW2NdO2lmKGUuc2VsZWN0ZWQmJihmLnN1cHBvcnQub3B0RGlzYWJsZWQ/IWUuZGlzYWJsZWQ6ZS5nZXRBdHRyaWJ1dGUoImRpc2FibGVkIik9PT1udWxsKSYmKCFlLnBhcmVudE5vZGUuZGlzYWJsZWR8fCFmLm5vZGVOYW1lKGUucGFyZW50Tm9kZSwib3B0Z3JvdXAiKSkpe2I9ZihlKS52YWwoKTtpZihqKXJldHVybiBiO2gucHVzaChiKX19aWYoaiYmIWgubGVuZ3RoJiZpLmxlbmd0aClyZXR1cm4gZihpW2ddKS52YWwoKTtyZXR1cm4gaH0sc2V0OmZ1bmN0aW9uKGEsYil7dmFyIGM9Zi5tYWtlQXJyYXkoYik7ZihhKS5maW5kKCJvcHRpb24iKS5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5zZWxlY3RlZD1mLmluQXJyYXkoZih0aGlzKS52YWwoKSxjKT49MH0pLGMubGVuZ3RofHwoYS5zZWxlY3RlZEluZGV4PS0xKTtyZXR1cm4gY319fSxhdHRyRm46e3ZhbDohMCxjc3M6ITAsaHRtbDohMCx0ZXh0OiEwLGRhdGE6ITAsd2lkdGg6ITAsaGVpZ2h0OiEwLG9mZnNldDohMH0sYXR0cjpmdW5jdGlvbihhLGMsZCxlKXt2YXIgZyxoLGksaj1hLm5vZGVUeXBlO2lmKCEhYSYmaiE9PTMmJmohPT04JiZqIT09Mil7aWYoZSYmYyBpbiBmLmF0dHJGbilyZXR1cm4gZihhKVtjXShkKTtpZih0eXBlb2YgYS5nZXRBdHRyaWJ1dGU9PSJ1bmRlZmluZWQiKXJldHVybiBmLnByb3AoYSxjLGQpO2k9aiE9PTF8fCFmLmlzWE1MRG9jKGEpLGkmJihjPWMudG9Mb3dlckNhc2UoKSxoPWYuYXR0ckhvb2tzW2NdfHwodS50ZXN0KGMpP3g6dykpO2lmKGQhPT1iKXtpZihkPT09bnVsbCl7Zi5yZW1vdmVBdHRyKGEsYyk7cmV0dXJufWlmKGgmJiJzZXQiaW4gaCYmaSYmKGc9aC5zZXQoYSxkLGMpKSE9PWIpcmV0dXJuIGc7YS5zZXRBdHRyaWJ1dGUoYywiIitkKTtyZXR1cm4gZH1pZihoJiYiZ2V0ImluIGgmJmkmJihnPWguZ2V0KGEsYykpIT09bnVsbClyZXR1cm4gZztnPWEuZ2V0QXR0cmlidXRlKGMpO3JldHVybiBnPT09bnVsbD9iOmd9fSxyZW1vdmVBdHRyOmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlLGcsaCxpPTA7aWYoYiYmYS5ub2RlVHlwZT09PTEpe2Q9Yi50b0xvd2VyQ2FzZSgpLnNwbGl0KHApLGc9ZC5sZW5ndGg7Zm9yKDtpPGc7aSsrKWU9ZFtpXSxlJiYoYz1mLnByb3BGaXhbZV18fGUsaD11LnRlc3QoZSksaHx8Zi5hdHRyKGEsZSwiIiksYS5yZW1vdmVBdHRyaWJ1dGUodj9lOmMpLGgmJmMgaW4gYSYmKGFbY109ITEpKX19LGF0dHJIb29rczp7dHlwZTp7c2V0OmZ1bmN0aW9uKGEsYil7aWYoci50ZXN0KGEubm9kZU5hbWUpJiZhLnBhcmVudE5vZGUpZi5lcnJvcigidHlwZSBwcm9wZXJ0eSBjYW4ndCBiZSBjaGFuZ2VkIik7ZWxzZSBpZighZi5zdXBwb3J0LnJhZGlvVmFsdWUmJmI9PT0icmFkaW8iJiZmLm5vZGVOYW1lKGEsImlucHV0Iikpe3ZhciBjPWEudmFsdWU7YS5zZXRBdHRyaWJ1dGUoInR5cGUiLGIpLGMmJihhLnZhbHVlPWMpO3JldHVybiBifX19LHZhbHVlOntnZXQ6ZnVuY3Rpb24oYSxiKXtpZih3JiZmLm5vZGVOYW1lKGEsImJ1dHRvbiIpKXJldHVybiB3LmdldChhLGIpO3JldHVybiBiIGluIGE/YS52YWx1ZTpudWxsfSxzZXQ6ZnVuY3Rpb24oYSxiLGMpe2lmKHcmJmYubm9kZU5hbWUoYSwiYnV0dG9uIikpcmV0dXJuIHcuc2V0KGEsYixjKTthLnZhbHVlPWJ9fX0scHJvcEZpeDp7dGFiaW5kZXg6InRhYkluZGV4IixyZWFkb25seToicmVhZE9ubHkiLCJmb3IiOiJodG1sRm9yIiwiY2xhc3MiOiJjbGFzc05hbWUiLG1heGxlbmd0aDoibWF4TGVuZ3RoIixjZWxsc3BhY2luZzoiY2VsbFNwYWNpbmciLGNlbGxwYWRkaW5nOiJjZWxsUGFkZGluZyIscm93c3Bhbjoicm93U3BhbiIsY29sc3BhbjoiY29sU3BhbiIsdXNlbWFwOiJ1c2VNYXAiLGZyYW1lYm9yZGVyOiJmcmFtZUJvcmRlciIsY29udGVudGVkaXRhYmxlOiJjb250ZW50RWRpdGFibGUifSxwcm9wOmZ1bmN0aW9uKGEsYyxkKXt2YXIgZSxnLGgsaT1hLm5vZGVUeXBlO2lmKCEhYSYmaSE9PTMmJmkhPT04JiZpIT09Mil7aD1pIT09MXx8IWYuaXNYTUxEb2MoYSksaCYmKGM9Zi5wcm9wRml4W2NdfHxjLGc9Zi5wcm9wSG9va3NbY10pO3JldHVybiBkIT09Yj9nJiYic2V0ImluIGcmJihlPWcuc2V0KGEsZCxjKSkhPT1iP2U6YVtjXT1kOmcmJiJnZXQiaW4gZyYmKGU9Zy5nZXQoYSxjKSkhPT1udWxsP2U6YVtjXX19LHByb3BIb29rczp7dGFiSW5kZXg6e2dldDpmdW5jdGlvbihhKXt2YXIgYz1hLmdldEF0dHJpYnV0ZU5vZGUoInRhYmluZGV4Iik7cmV0dXJuIGMmJmMuc3BlY2lmaWVkP3BhcnNlSW50KGMudmFsdWUsMTApOnMudGVzdChhLm5vZGVOYW1lKXx8dC50ZXN0KGEubm9kZU5hbWUpJiZhLmhyZWY/MDpifX19fSksZi5hdHRySG9va3MudGFiaW5kZXg9Zi5wcm9wSG9va3MudGFiSW5kZXgseD17Z2V0OmZ1bmN0aW9uKGEsYyl7dmFyIGQsZT1mLnByb3AoYSxjKTtyZXR1cm4gZT09PSEwfHx0eXBlb2YgZSE9ImJvb2xlYW4iJiYoZD1hLmdldEF0dHJpYnV0ZU5vZGUoYykpJiZkLm5vZGVWYWx1ZSE9PSExP2MudG9Mb3dlckNhc2UoKTpifSxzZXQ6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkO2I9PT0hMT9mLnJlbW92ZUF0dHIoYSxjKTooZD1mLnByb3BGaXhbY118fGMsZCBpbiBhJiYoYVtkXT0hMCksYS5zZXRBdHRyaWJ1dGUoYyxjLnRvTG93ZXJDYXNlKCkpKTtyZXR1cm4gY319LHZ8fCh5PXtuYW1lOiEwLGlkOiEwLGNvb3JkczohMH0sdz1mLnZhbEhvb2tzLmJ1dHRvbj17Z2V0OmZ1bmN0aW9uKGEsYyl7dmFyIGQ7ZD1hLmdldEF0dHJpYnV0ZU5vZGUoYyk7cmV0dXJuIGQmJih5W2NdP2Qubm9kZVZhbHVlIT09IiI6ZC5zcGVjaWZpZWQpP2Qubm9kZVZhbHVlOmJ9LHNldDpmdW5jdGlvbihhLGIsZCl7dmFyIGU9YS5nZXRBdHRyaWJ1dGVOb2RlKGQpO2V8fChlPWMuY3JlYXRlQXR0cmlidXRlKGQpLGEuc2V0QXR0cmlidXRlTm9kZShlKSk7cmV0dXJuIGUubm9kZVZhbHVlPWIrIiJ9fSxmLmF0dHJIb29rcy50YWJpbmRleC5zZXQ9dy5zZXQsZi5lYWNoKFsid2lkdGgiLCJoZWlnaHQiXSxmdW5jdGlvbihhLGIpe2YuYXR0ckhvb2tzW2JdPWYuZXh0ZW5kKGYuYXR0ckhvb2tzW2JdLHtzZXQ6ZnVuY3Rpb24oYSxjKXtpZihjPT09IiIpe2Euc2V0QXR0cmlidXRlKGIsImF1dG8iKTtyZXR1cm4gY319fSl9KSxmLmF0dHJIb29rcy5jb250ZW50ZWRpdGFibGU9e2dldDp3LmdldCxzZXQ6ZnVuY3Rpb24oYSxiLGMpe2I9PT0iIiYmKGI9ImZhbHNlIiksdy5zZXQoYSxiLGMpfX0pLGYuc3VwcG9ydC5ocmVmTm9ybWFsaXplZHx8Zi5lYWNoKFsiaHJlZiIsInNyYyIsIndpZHRoIiwiaGVpZ2h0Il0sZnVuY3Rpb24oYSxjKXtmLmF0dHJIb29rc1tjXT1mLmV4dGVuZChmLmF0dHJIb29rc1tjXSx7Z2V0OmZ1bmN0aW9uKGEpe3ZhciBkPWEuZ2V0QXR0cmlidXRlKGMsMik7cmV0dXJuIGQ9PT1udWxsP2I6ZH19KX0pLGYuc3VwcG9ydC5zdHlsZXx8KGYuYXR0ckhvb2tzLnN0eWxlPXtnZXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuc3R5bGUuY3NzVGV4dC50b0xvd2VyQ2FzZSgpfHxifSxzZXQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5zdHlsZS5jc3NUZXh0PSIiK2J9fSksZi5zdXBwb3J0Lm9wdFNlbGVjdGVkfHwoZi5wcm9wSG9va3Muc2VsZWN0ZWQ9Zi5leHRlbmQoZi5wcm9wSG9va3Muc2VsZWN0ZWQse2dldDpmdW5jdGlvbihhKXt2YXIgYj1hLnBhcmVudE5vZGU7YiYmKGIuc2VsZWN0ZWRJbmRleCxiLnBhcmVudE5vZGUmJmIucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4KTtyZXR1cm4gbnVsbH19KSksZi5zdXBwb3J0LmVuY3R5cGV8fChmLnByb3BGaXguZW5jdHlwZT0iZW5jb2RpbmciKSxmLnN1cHBvcnQuY2hlY2tPbnx8Zi5lYWNoKFsicmFkaW8iLCJjaGVja2JveCJdLGZ1bmN0aW9uKCl7Zi52YWxIb29rc1t0aGlzXT17Z2V0OmZ1bmN0aW9uKGEpe3JldHVybiBhLmdldEF0dHJpYnV0ZSgidmFsdWUiKT09PW51bGw/Im9uIjphLnZhbHVlfX19KSxmLmVhY2goWyJyYWRpbyIsImNoZWNrYm94Il0sZnVuY3Rpb24oKXtmLnZhbEhvb2tzW3RoaXNdPWYuZXh0ZW5kKGYudmFsSG9va3NbdGhpc10se3NldDpmdW5jdGlvbihhLGIpe2lmKGYuaXNBcnJheShiKSlyZXR1cm4gYS5jaGVja2VkPWYuaW5BcnJheShmKGEpLnZhbCgpLGIpPj0wfX0pfSk7dmFyIHo9L14oPzp0ZXh0YXJlYXxpbnB1dHxzZWxlY3QpJC9pLEE9L14oW15cLl0qKT8oPzpcLiguKykpPyQvLEI9Lyg/Ol58XHMpaG92ZXIoXC5cUyspP1xiLyxDPS9ea2V5LyxEPS9eKD86bW91c2V8Y29udGV4dG1lbnUpfGNsaWNrLyxFPS9eKD86Zm9jdXNpbmZvY3VzfGZvY3Vzb3V0Ymx1cikkLyxGPS9eKFx3KikoPzojKFtcd1wtXSspKT8oPzpcLihbXHdcLV0rKSk/JC8sRz1mdW5jdGlvbigKYSl7dmFyIGI9Ri5leGVjKGEpO2ImJihiWzFdPShiWzFdfHwiIikudG9Mb3dlckNhc2UoKSxiWzNdPWJbM10mJm5ldyBSZWdFeHAoIig/Ol58XFxzKSIrYlszXSsiKD86XFxzfCQpIikpO3JldHVybiBifSxIPWZ1bmN0aW9uKGEsYil7dmFyIGM9YS5hdHRyaWJ1dGVzfHx7fTtyZXR1cm4oIWJbMV18fGEubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWJbMV0pJiYoIWJbMl18fChjLmlkfHx7fSkudmFsdWU9PT1iWzJdKSYmKCFiWzNdfHxiWzNdLnRlc3QoKGNbImNsYXNzIl18fHt9KS52YWx1ZSkpfSxJPWZ1bmN0aW9uKGEpe3JldHVybiBmLmV2ZW50LnNwZWNpYWwuaG92ZXI/YTphLnJlcGxhY2UoQiwibW91c2VlbnRlciQxIG1vdXNlbGVhdmUkMSIpfTtmLmV2ZW50PXthZGQ6ZnVuY3Rpb24oYSxjLGQsZSxnKXt2YXIgaCxpLGosayxsLG0sbixvLHAscSxyLHM7aWYoIShhLm5vZGVUeXBlPT09M3x8YS5ub2RlVHlwZT09PTh8fCFjfHwhZHx8IShoPWYuX2RhdGEoYSkpKSl7ZC5oYW5kbGVyJiYocD1kLGQ9cC5oYW5kbGVyLGc9cC5zZWxlY3RvciksZC5ndWlkfHwoZC5ndWlkPWYuZ3VpZCsrKSxqPWguZXZlbnRzLGp8fChoLmV2ZW50cz1qPXt9KSxpPWguaGFuZGxlLGl8fChoLmhhbmRsZT1pPWZ1bmN0aW9uKGEpe3JldHVybiB0eXBlb2YgZiE9InVuZGVmaW5lZCImJighYXx8Zi5ldmVudC50cmlnZ2VyZWQhPT1hLnR5cGUpP2YuZXZlbnQuZGlzcGF0Y2guYXBwbHkoaS5lbGVtLGFyZ3VtZW50cyk6Yn0saS5lbGVtPWEpLGM9Zi50cmltKEkoYykpLnNwbGl0KCIgIik7Zm9yKGs9MDtrPGMubGVuZ3RoO2srKyl7bD1BLmV4ZWMoY1trXSl8fFtdLG09bFsxXSxuPShsWzJdfHwiIikuc3BsaXQoIi4iKS5zb3J0KCkscz1mLmV2ZW50LnNwZWNpYWxbbV18fHt9LG09KGc/cy5kZWxlZ2F0ZVR5cGU6cy5iaW5kVHlwZSl8fG0scz1mLmV2ZW50LnNwZWNpYWxbbV18fHt9LG89Zi5leHRlbmQoe3R5cGU6bSxvcmlnVHlwZTpsWzFdLGRhdGE6ZSxoYW5kbGVyOmQsZ3VpZDpkLmd1aWQsc2VsZWN0b3I6ZyxxdWljazpnJiZHKGcpLG5hbWVzcGFjZTpuLmpvaW4oIi4iKX0scCkscj1qW21dO2lmKCFyKXtyPWpbbV09W10sci5kZWxlZ2F0ZUNvdW50PTA7aWYoIXMuc2V0dXB8fHMuc2V0dXAuY2FsbChhLGUsbixpKT09PSExKWEuYWRkRXZlbnRMaXN0ZW5lcj9hLmFkZEV2ZW50TGlzdGVuZXIobSxpLCExKTphLmF0dGFjaEV2ZW50JiZhLmF0dGFjaEV2ZW50KCJvbiIrbSxpKX1zLmFkZCYmKHMuYWRkLmNhbGwoYSxvKSxvLmhhbmRsZXIuZ3VpZHx8KG8uaGFuZGxlci5ndWlkPWQuZ3VpZCkpLGc/ci5zcGxpY2Uoci5kZWxlZ2F0ZUNvdW50KyssMCxvKTpyLnB1c2gobyksZi5ldmVudC5nbG9iYWxbbV09ITB9YT1udWxsfX0sZ2xvYmFsOnt9LHJlbW92ZTpmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBnPWYuaGFzRGF0YShhKSYmZi5fZGF0YShhKSxoLGksaixrLGwsbSxuLG8scCxxLHIscztpZighIWcmJiEhKG89Zy5ldmVudHMpKXtiPWYudHJpbShJKGJ8fCIiKSkuc3BsaXQoIiAiKTtmb3IoaD0wO2g8Yi5sZW5ndGg7aCsrKXtpPUEuZXhlYyhiW2hdKXx8W10saj1rPWlbMV0sbD1pWzJdO2lmKCFqKXtmb3IoaiBpbiBvKWYuZXZlbnQucmVtb3ZlKGEsaitiW2hdLGMsZCwhMCk7Y29udGludWV9cD1mLmV2ZW50LnNwZWNpYWxbal18fHt9LGo9KGQ/cC5kZWxlZ2F0ZVR5cGU6cC5iaW5kVHlwZSl8fGoscj1vW2pdfHxbXSxtPXIubGVuZ3RoLGw9bD9uZXcgUmVnRXhwKCIoXnxcXC4pIitsLnNwbGl0KCIuIikuc29ydCgpLmpvaW4oIlxcLig/Oi4qXFwuKT8iKSsiKFxcLnwkKSIpOm51bGw7Zm9yKG49MDtuPHIubGVuZ3RoO24rKylzPXJbbl0sKGV8fGs9PT1zLm9yaWdUeXBlKSYmKCFjfHxjLmd1aWQ9PT1zLmd1aWQpJiYoIWx8fGwudGVzdChzLm5hbWVzcGFjZSkpJiYoIWR8fGQ9PT1zLnNlbGVjdG9yfHxkPT09IioqIiYmcy5zZWxlY3RvcikmJihyLnNwbGljZShuLS0sMSkscy5zZWxlY3RvciYmci5kZWxlZ2F0ZUNvdW50LS0scC5yZW1vdmUmJnAucmVtb3ZlLmNhbGwoYSxzKSk7ci5sZW5ndGg9PT0wJiZtIT09ci5sZW5ndGgmJigoIXAudGVhcmRvd258fHAudGVhcmRvd24uY2FsbChhLGwpPT09ITEpJiZmLnJlbW92ZUV2ZW50KGEsaixnLmhhbmRsZSksZGVsZXRlIG9bal0pfWYuaXNFbXB0eU9iamVjdChvKSYmKHE9Zy5oYW5kbGUscSYmKHEuZWxlbT1udWxsKSxmLnJlbW92ZURhdGEoYSxbImV2ZW50cyIsImhhbmRsZSJdLCEwKSl9fSxjdXN0b21FdmVudDp7Z2V0RGF0YTohMCxzZXREYXRhOiEwLGNoYW5nZURhdGE6ITB9LHRyaWdnZXI6ZnVuY3Rpb24oYyxkLGUsZyl7aWYoIWV8fGUubm9kZVR5cGUhPT0zJiZlLm5vZGVUeXBlIT09OCl7dmFyIGg9Yy50eXBlfHxjLGk9W10saixrLGwsbSxuLG8scCxxLHIscztpZihFLnRlc3QoaCtmLmV2ZW50LnRyaWdnZXJlZCkpcmV0dXJuO2guaW5kZXhPZigiISIpPj0wJiYoaD1oLnNsaWNlKDAsLTEpLGs9ITApLGguaW5kZXhPZigiLiIpPj0wJiYoaT1oLnNwbGl0KCIuIiksaD1pLnNoaWZ0KCksaS5zb3J0KCkpO2lmKCghZXx8Zi5ldmVudC5jdXN0b21FdmVudFtoXSkmJiFmLmV2ZW50Lmdsb2JhbFtoXSlyZXR1cm47Yz10eXBlb2YgYz09Im9iamVjdCI/Y1tmLmV4cGFuZG9dP2M6bmV3IGYuRXZlbnQoaCxjKTpuZXcgZi5FdmVudChoKSxjLnR5cGU9aCxjLmlzVHJpZ2dlcj0hMCxjLmV4Y2x1c2l2ZT1rLGMubmFtZXNwYWNlPWkuam9pbigiLiIpLGMubmFtZXNwYWNlX3JlPWMubmFtZXNwYWNlP25ldyBSZWdFeHAoIihefFxcLikiK2kuam9pbigiXFwuKD86LipcXC4pPyIpKyIoXFwufCQpIik6bnVsbCxvPWguaW5kZXhPZigiOiIpPDA/Im9uIitoOiIiO2lmKCFlKXtqPWYuY2FjaGU7Zm9yKGwgaW4gailqW2xdLmV2ZW50cyYmaltsXS5ldmVudHNbaF0mJmYuZXZlbnQudHJpZ2dlcihjLGQsaltsXS5oYW5kbGUuZWxlbSwhMCk7cmV0dXJufWMucmVzdWx0PWIsYy50YXJnZXR8fChjLnRhcmdldD1lKSxkPWQhPW51bGw/Zi5tYWtlQXJyYXkoZCk6W10sZC51bnNoaWZ0KGMpLHA9Zi5ldmVudC5zcGVjaWFsW2hdfHx7fTtpZihwLnRyaWdnZXImJnAudHJpZ2dlci5hcHBseShlLGQpPT09ITEpcmV0dXJuO3I9W1tlLHAuYmluZFR5cGV8fGhdXTtpZighZyYmIXAubm9CdWJibGUmJiFmLmlzV2luZG93KGUpKXtzPXAuZGVsZWdhdGVUeXBlfHxoLG09RS50ZXN0KHMraCk/ZTplLnBhcmVudE5vZGUsbj1udWxsO2Zvcig7bTttPW0ucGFyZW50Tm9kZSlyLnB1c2goW20sc10pLG49bTtuJiZuPT09ZS5vd25lckRvY3VtZW50JiZyLnB1c2goW24uZGVmYXVsdFZpZXd8fG4ucGFyZW50V2luZG93fHxhLHNdKX1mb3IobD0wO2w8ci5sZW5ndGgmJiFjLmlzUHJvcGFnYXRpb25TdG9wcGVkKCk7bCsrKW09cltsXVswXSxjLnR5cGU9cltsXVsxXSxxPShmLl9kYXRhKG0sImV2ZW50cyIpfHx7fSlbYy50eXBlXSYmZi5fZGF0YShtLCJoYW5kbGUiKSxxJiZxLmFwcGx5KG0sZCkscT1vJiZtW29dLHEmJmYuYWNjZXB0RGF0YShtKSYmcS5hcHBseShtLGQpPT09ITEmJmMucHJldmVudERlZmF1bHQoKTtjLnR5cGU9aCwhZyYmIWMuaXNEZWZhdWx0UHJldmVudGVkKCkmJighcC5fZGVmYXVsdHx8cC5fZGVmYXVsdC5hcHBseShlLm93bmVyRG9jdW1lbnQsZCk9PT0hMSkmJihoIT09ImNsaWNrInx8IWYubm9kZU5hbWUoZSwiYSIpKSYmZi5hY2NlcHREYXRhKGUpJiZvJiZlW2hdJiYoaCE9PSJmb2N1cyImJmghPT0iYmx1ciJ8fGMudGFyZ2V0Lm9mZnNldFdpZHRoIT09MCkmJiFmLmlzV2luZG93KGUpJiYobj1lW29dLG4mJihlW29dPW51bGwpLGYuZXZlbnQudHJpZ2dlcmVkPWgsZVtoXSgpLGYuZXZlbnQudHJpZ2dlcmVkPWIsbiYmKGVbb109bikpO3JldHVybiBjLnJlc3VsdH19LGRpc3BhdGNoOmZ1bmN0aW9uKGMpe2M9Zi5ldmVudC5maXgoY3x8YS5ldmVudCk7dmFyIGQ9KGYuX2RhdGEodGhpcywiZXZlbnRzIil8fHt9KVtjLnR5cGVdfHxbXSxlPWQuZGVsZWdhdGVDb3VudCxnPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApLGg9IWMuZXhjbHVzaXZlJiYhYy5uYW1lc3BhY2UsaT1mLmV2ZW50LnNwZWNpYWxbYy50eXBlXXx8e30saj1bXSxrLGwsbSxuLG8scCxxLHIscyx0LHU7Z1swXT1jLGMuZGVsZWdhdGVUYXJnZXQ9dGhpcztpZighaS5wcmVEaXNwYXRjaHx8aS5wcmVEaXNwYXRjaC5jYWxsKHRoaXMsYykhPT0hMSl7aWYoZSYmKCFjLmJ1dHRvbnx8Yy50eXBlIT09ImNsaWNrIikpe249Zih0aGlzKSxuLmNvbnRleHQ9dGhpcy5vd25lckRvY3VtZW50fHx0aGlzO2ZvcihtPWMudGFyZ2V0O20hPXRoaXM7bT1tLnBhcmVudE5vZGV8fHRoaXMpaWYobS5kaXNhYmxlZCE9PSEwKXtwPXt9LHI9W10sblswXT1tO2ZvcihrPTA7azxlO2srKylzPWRba10sdD1zLnNlbGVjdG9yLHBbdF09PT1iJiYocFt0XT1zLnF1aWNrP0gobSxzLnF1aWNrKTpuLmlzKHQpKSxwW3RdJiZyLnB1c2gocyk7ci5sZW5ndGgmJmoucHVzaCh7ZWxlbTptLG1hdGNoZXM6cn0pfX1kLmxlbmd0aD5lJiZqLnB1c2goe2VsZW06dGhpcyxtYXRjaGVzOmQuc2xpY2UoZSl9KTtmb3Ioaz0wO2s8ai5sZW5ndGgmJiFjLmlzUHJvcGFnYXRpb25TdG9wcGVkKCk7aysrKXtxPWpba10sYy5jdXJyZW50VGFyZ2V0PXEuZWxlbTtmb3IobD0wO2w8cS5tYXRjaGVzLmxlbmd0aCYmIWMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKTtsKyspe3M9cS5tYXRjaGVzW2xdO2lmKGh8fCFjLm5hbWVzcGFjZSYmIXMubmFtZXNwYWNlfHxjLm5hbWVzcGFjZV9yZSYmYy5uYW1lc3BhY2VfcmUudGVzdChzLm5hbWVzcGFjZSkpYy5kYXRhPXMuZGF0YSxjLmhhbmRsZU9iaj1zLG89KChmLmV2ZW50LnNwZWNpYWxbcy5vcmlnVHlwZV18fHt9KS5oYW5kbGV8fHMuaGFuZGxlcikuYXBwbHkocS5lbGVtLGcpLG8hPT1iJiYoYy5yZXN1bHQ9byxvPT09ITEmJihjLnByZXZlbnREZWZhdWx0KCksYy5zdG9wUHJvcGFnYXRpb24oKSkpfX1pLnBvc3REaXNwYXRjaCYmaS5wb3N0RGlzcGF0Y2guY2FsbCh0aGlzLGMpO3JldHVybiBjLnJlc3VsdH19LHByb3BzOiJhdHRyQ2hhbmdlIGF0dHJOYW1lIHJlbGF0ZWROb2RlIHNyY0VsZW1lbnQgYWx0S2V5IGJ1YmJsZXMgY2FuY2VsYWJsZSBjdHJsS2V5IGN1cnJlbnRUYXJnZXQgZXZlbnRQaGFzZSBtZXRhS2V5IHJlbGF0ZWRUYXJnZXQgc2hpZnRLZXkgdGFyZ2V0IHRpbWVTdGFtcCB2aWV3IHdoaWNoIi5zcGxpdCgiICIpLGZpeEhvb2tzOnt9LGtleUhvb2tzOntwcm9wczoiY2hhciBjaGFyQ29kZSBrZXkga2V5Q29kZSIuc3BsaXQoIiAiKSxmaWx0ZXI6ZnVuY3Rpb24oYSxiKXthLndoaWNoPT1udWxsJiYoYS53aGljaD1iLmNoYXJDb2RlIT1udWxsP2IuY2hhckNvZGU6Yi5rZXlDb2RlKTtyZXR1cm4gYX19LG1vdXNlSG9va3M6e3Byb3BzOiJidXR0b24gYnV0dG9ucyBjbGllbnRYIGNsaWVudFkgZnJvbUVsZW1lbnQgb2Zmc2V0WCBvZmZzZXRZIHBhZ2VYIHBhZ2VZIHNjcmVlblggc2NyZWVuWSB0b0VsZW1lbnQiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGEsZCl7dmFyIGUsZixnLGg9ZC5idXR0b24saT1kLmZyb21FbGVtZW50O2EucGFnZVg9PW51bGwmJmQuY2xpZW50WCE9bnVsbCYmKGU9YS50YXJnZXQub3duZXJEb2N1bWVudHx8YyxmPWUuZG9jdW1lbnRFbGVtZW50LGc9ZS5ib2R5LGEucGFnZVg9ZC5jbGllbnRYKyhmJiZmLnNjcm9sbExlZnR8fGcmJmcuc2Nyb2xsTGVmdHx8MCktKGYmJmYuY2xpZW50TGVmdHx8ZyYmZy5jbGllbnRMZWZ0fHwwKSxhLnBhZ2VZPWQuY2xpZW50WSsoZiYmZi5zY3JvbGxUb3B8fGcmJmcuc2Nyb2xsVG9wfHwwKS0oZiYmZi5jbGllbnRUb3B8fGcmJmcuY2xpZW50VG9wfHwwKSksIWEucmVsYXRlZFRhcmdldCYmaSYmKGEucmVsYXRlZFRhcmdldD1pPT09YS50YXJnZXQ/ZC50b0VsZW1lbnQ6aSksIWEud2hpY2gmJmghPT1iJiYoYS53aGljaD1oJjE/MTpoJjI/MzpoJjQ/MjowKTtyZXR1cm4gYX19LGZpeDpmdW5jdGlvbihhKXtpZihhW2YuZXhwYW5kb10pcmV0dXJuIGE7dmFyIGQsZSxnPWEsaD1mLmV2ZW50LmZpeEhvb2tzW2EudHlwZV18fHt9LGk9aC5wcm9wcz90aGlzLnByb3BzLmNvbmNhdChoLnByb3BzKTp0aGlzLnByb3BzO2E9Zi5FdmVudChnKTtmb3IoZD1pLmxlbmd0aDtkOyllPWlbLS1kXSxhW2VdPWdbZV07YS50YXJnZXR8fChhLnRhcmdldD1nLnNyY0VsZW1lbnR8fGMpLGEudGFyZ2V0Lm5vZGVUeXBlPT09MyYmKGEudGFyZ2V0PWEudGFyZ2V0LnBhcmVudE5vZGUpLGEubWV0YUtleT09PWImJihhLm1ldGFLZXk9YS5jdHJsS2V5KTtyZXR1cm4gaC5maWx0ZXI/aC5maWx0ZXIoYSxnKTphfSxzcGVjaWFsOntyZWFkeTp7c2V0dXA6Zi5iaW5kUmVhZHl9LGxvYWQ6e25vQnViYmxlOiEwfSxmb2N1czp7ZGVsZWdhdGVUeXBlOiJmb2N1c2luIn0sYmx1cjp7ZGVsZWdhdGVUeXBlOiJmb2N1c291dCJ9LGJlZm9yZXVubG9hZDp7c2V0dXA6ZnVuY3Rpb24oYSxiLGMpe2YuaXNXaW5kb3codGhpcykmJih0aGlzLm9uYmVmb3JldW5sb2FkPWMpfSx0ZWFyZG93bjpmdW5jdGlvbihhLGIpe3RoaXMub25iZWZvcmV1bmxvYWQ9PT1iJiYodGhpcy5vbmJlZm9yZXVubG9hZD1udWxsKX19fSxzaW11bGF0ZTpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1mLmV4dGVuZChuZXcgZi5FdmVudCxjLHt0eXBlOmEsaXNTaW11bGF0ZWQ6ITAsb3JpZ2luYWxFdmVudDp7fX0pO2Q/Zi5ldmVudC50cmlnZ2VyKGUsbnVsbCxiKTpmLmV2ZW50LmRpc3BhdGNoLmNhbGwoYixlKSxlLmlzRGVmYXVsdFByZXZlbnRlZCgpJiZjLnByZXZlbnREZWZhdWx0KCl9fSxmLmV2ZW50LmhhbmRsZT1mLmV2ZW50LmRpc3BhdGNoLGYucmVtb3ZlRXZlbnQ9Yy5yZW1vdmVFdmVudExpc3RlbmVyP2Z1bmN0aW9uKGEsYixjKXthLnJlbW92ZUV2ZW50TGlzdGVuZXImJmEucmVtb3ZlRXZlbnRMaXN0ZW5lcihiLGMsITEpfTpmdW5jdGlvbihhLGIsYyl7YS5kZXRhY2hFdmVudCYmYS5kZXRhY2hFdmVudCgib24iK2IsYyl9LGYuRXZlbnQ9ZnVuY3Rpb24oYSxiKXtpZighKHRoaXMgaW5zdGFuY2VvZiBmLkV2ZW50KSlyZXR1cm4gbmV3IGYuRXZlbnQoYSxiKTthJiZhLnR5cGU/KHRoaXMub3JpZ2luYWxFdmVudD1hLHRoaXMudHlwZT1hLnR5cGUsdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9YS5kZWZhdWx0UHJldmVudGVkfHxhLnJldHVyblZhbHVlPT09ITF8fGEuZ2V0UHJldmVudERlZmF1bHQmJmEuZ2V0UHJldmVudERlZmF1bHQoKT9LOkopOnRoaXMudHlwZT1hLGImJmYuZXh0ZW5kKHRoaXMsYiksdGhpcy50aW1lU3RhbXA9YSYmYS50aW1lU3RhbXB8fGYubm93KCksdGhpc1tmLmV4cGFuZG9dPSEwfSxmLkV2ZW50LnByb3RvdHlwZT17cHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1LO3ZhciBhPXRoaXMub3JpZ2luYWxFdmVudDshYXx8KGEucHJldmVudERlZmF1bHQ/YS5wcmV2ZW50RGVmYXVsdCgpOmEucmV0dXJuVmFsdWU9ITEpfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPUs7dmFyIGE9dGhpcy5vcmlnaW5hbEV2ZW50OyFhfHwoYS5zdG9wUHJvcGFnYXRpb24mJmEuc3RvcFByb3BhZ2F0aW9uKCksYS5jYW5jZWxCdWJibGU9ITApfSxzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt0aGlzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkPUssdGhpcy5zdG9wUHJvcGFnYXRpb24oKX0saXNEZWZhdWx0UHJldmVudGVkOkosaXNQcm9wYWdhdGlvblN0b3BwZWQ6Sixpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDpKfSxmLmVhY2goe21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSxmdW5jdGlvbihhLGIpe2YuZXZlbnQuc3BlY2lhbFthXT17ZGVsZWdhdGVUeXBlOmIsYmluZFR5cGU6YixoYW5kbGU6ZnVuY3Rpb24oYSl7dmFyIGM9dGhpcyxkPWEucmVsYXRlZFRhcmdldCxlPWEuaGFuZGxlT2JqLGc9ZS5zZWxlY3RvcixoO2lmKCFkfHxkIT09YyYmIWYuY29udGFpbnMoYyxkKSlhLnR5cGU9ZS5vcmlnVHlwZSxoPWUuaGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyksYS50eXBlPWI7cmV0dXJuIGh9fX0pLGYuc3VwcG9ydC5zdWJtaXRCdWJibGVzfHwoZi5ldmVudC5zcGVjaWFsLnN1Ym1pdD17c2V0dXA6ZnVuY3Rpb24oKXtpZihmLm5vZGVOYW1lKHRoaXMsImZvcm0iKSlyZXR1cm4hMTtmLmV2ZW50LmFkZCh0aGlzLCJjbGljay5fc3VibWl0IGtleXByZXNzLl9zdWJtaXQiLGZ1bmN0aW9uKGEpe3ZhciBjPWEudGFyZ2V0LGQ9Zi5ub2RlTmFtZShjLCJpbnB1dCIpfHxmLm5vZGVOYW1lKGMsImJ1dHRvbiIpP2MuZm9ybTpiO2QmJiFkLl9zdWJtaXRfYXR0YWNoZWQmJihmLmV2ZW50LmFkZChkLCJzdWJtaXQuX3N1Ym1pdCIsZnVuY3Rpb24oYSl7YS5fc3VibWl0X2J1YmJsZT0hMH0pLGQuX3N1Ym1pdF9hdHRhY2hlZD0hMCl9KX0scG9zdERpc3BhdGNoOmZ1bmN0aW9uKGEpe2EuX3N1Ym1pdF9idWJibGUmJihkZWxldGUgYS5fc3VibWl0X2J1YmJsZSx0aGlzLnBhcmVudE5vZGUmJiFhLmlzVHJpZ2dlciYmZi5ldmVudC5zaW11bGF0ZSgic3VibWl0Iix0aGlzLnBhcmVudE5vZGUsYSwhMCkpfSx0ZWFyZG93bjpmdW5jdGlvbigpe2lmKGYubm9kZU5hbWUodGhpcywiZm9ybSIpKXJldHVybiExO2YuZXZlbnQucmVtb3ZlKHRoaXMsIi5fc3VibWl0Iil9fSksZi5zdXBwb3J0LmNoYW5nZUJ1YmJsZXN8fChmLmV2ZW50LnNwZWNpYWwuY2hhbmdlPXtzZXR1cDpmdW5jdGlvbigpe2lmKHoudGVzdCh0aGlzLm5vZGVOYW1lKSl7aWYodGhpcy50eXBlPT09ImNoZWNrYm94Inx8dGhpcy50eXBlPT09InJhZGlvIilmLmV2ZW50LmFkZCh0aGlzLCJwcm9wZXJ0eWNoYW5nZS5fY2hhbmdlIixmdW5jdGlvbihhKXthLm9yaWdpbmFsRXZlbnQucHJvcGVydHlOYW1lPT09ImNoZWNrZWQiJiYodGhpcy5fanVzdF9jaGFuZ2VkPSEwKX0pLGYuZXZlbnQuYWRkKHRoaXMsImNsaWNrLl9jaGFuZ2UiLGZ1bmN0aW9uKGEpe3RoaXMuX2p1c3RfY2hhbmdlZCYmIWEuaXNUcmlnZ2VyJiYodGhpcy5fanVzdF9jaGFuZ2VkPSExLGYuZXZlbnQuc2ltdWxhdGUoImNoYW5nZSIsdGhpcyxhLCEwKSl9KTtyZXR1cm4hMX1mLmV2ZW50LmFkZCh0aGlzLCJiZWZvcmVhY3RpdmF0ZS5fY2hhbmdlIixmdW5jdGlvbihhKXt2YXIgYj1hLnRhcmdldDt6LnRlc3QoYi5ub2RlTmFtZSkmJiFiLl9jaGFuZ2VfYXR0YWNoZWQmJihmLmV2ZW50LmFkZChiLCJjaGFuZ2UuX2NoYW5nZSIsZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnROb2RlJiYhYS5pc1NpbXVsYXRlZCYmIWEuaXNUcmlnZ2VyJiZmLmV2ZW50LnNpbXVsYXRlKCJjaGFuZ2UiLHRoaXMucGFyZW50Tm9kZSxhLCEwKX0pLGIuX2NoYW5nZV9hdHRhY2hlZD0hMCl9KX0saGFuZGxlOmZ1bmN0aW9uKGEpe3ZhciBiPWEudGFyZ2V0O2lmKHRoaXMhPT1ifHxhLmlzU2ltdWxhdGVkfHxhLmlzVHJpZ2dlcnx8Yi50eXBlIT09InJhZGlvIiYmYi50eXBlIT09ImNoZWNrYm94IilyZXR1cm4gYS5oYW5kbGVPYmouaGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHRlYXJkb3duOmZ1bmN0aW9uKCl7Zi5ldmVudC5yZW1vdmUodGhpcywiLl9jaGFuZ2UiKTtyZXR1cm4gei50ZXN0KHRoaXMubm9kZU5hbWUpfX0pLGYuc3VwcG9ydC5mb2N1c2luQnViYmxlc3x8Zi5lYWNoKHtmb2N1czoiZm9jdXNpbiIsYmx1cjoiZm9jdXNvdXQifSxmdW5jdGlvbihhLGIpe3ZhciBkPTAsZT1mdW5jdGlvbihhKXtmLmV2ZW50LnNpbXVsYXRlKGIsYS50YXJnZXQsZi5ldmVudC5maXgoYSksITApfTtmLmV2ZW50LnNwZWNpYWxbYl09e3NldHVwOmZ1bmN0aW9uKCl7ZCsrPT09MCYmYy5hZGRFdmVudExpc3RlbmVyKGEsZSwhMCl9LHRlYXJkb3duOmZ1bmN0aW9uKCl7LS1kPT09MCYmYy5yZW1vdmVFdmVudExpc3RlbmVyKGEsZSwhMCl9fX0pLGYuZm4uZXh0ZW5kKHtvbjpmdW5jdGlvbihhLGMsZCxlLGcpe3ZhciBoLGk7aWYodHlwZW9mIGE9PSJvYmplY3QiKXt0eXBlb2YgYyE9InN0cmluZyImJihkPWR8fGMsYz1iKTtmb3IoaSBpbiBhKXRoaXMub24oaSxjLGQsYVtpXSxnKTtyZXR1cm4gdGhpc31kPT1udWxsJiZlPT1udWxsPyhlPWMsZD1jPWIpOmU9PW51bGwmJih0eXBlb2YgYz09InN0cmluZyI/KGU9ZCxkPWIpOihlPWQsZD1jLGM9YikpO2lmKGU9PT0hMSllPUo7ZWxzZSBpZighZSlyZXR1cm4gdGhpcztnPT09MSYmKGg9ZSxlPWZ1bmN0aW9uKGEpe2YoKS5vZmYoYSk7cmV0dXJuIGguYXBwbHkodGhpcyxhcmd1bWVudHMpfSxlLmd1aWQ9aC5ndWlkfHwoaC5ndWlkPWYuZ3VpZCsrKSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2YuZXZlbnQuYWRkKHRoaXMsYSxlLGQsYyl9KX0sb25lOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLm9uKGEsYixjLGQsMSl9LG9mZjpmdW5jdGlvbihhLGMsZCl7aWYoYSYmYS5wcmV2ZW50RGVmYXVsdCYmYS5oYW5kbGVPYmope3ZhciBlPWEuaGFuZGxlT2JqO2YoYS5kZWxlZ2F0ZVRhcmdldCkub2ZmKGUubmFtZXNwYWNlP2Uub3JpZ1R5cGUrIi4iK2UubmFtZXNwYWNlOmUub3JpZ1R5cGUsZS5zZWxlY3RvcixlLmhhbmRsZXIpO3JldHVybiB0aGlzfWlmKHR5cGVvZiBhPT0ib2JqZWN0Iil7Zm9yKHZhciBnIGluIGEpdGhpcy5vZmYoZyxjLGFbZ10pO3JldHVybiB0aGlzfWlmKGM9PT0hMXx8dHlwZW9mIGM9PSJmdW5jdGlvbiIpZD1jLGM9YjtkPT09ITEmJihkPUopO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmLmV2ZW50LnJlbW92ZSh0aGlzLGEsZCxjKX0pfSxiaW5kOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy5vbihhLG51bGwsYixjKX0sdW5iaW5kOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMub2ZmKGEsbnVsbCxiKX0sbGl2ZTpmdW5jdGlvbihhLGIsYyl7Zih0aGlzLmNvbnRleHQpLm9uKGEsdGhpcy5zZWxlY3RvcixiLGMpO3JldHVybiB0aGlzfSxkaWU6ZnVuY3Rpb24oYSxiKXtmKHRoaXMuY29udGV4dCkub2ZmKGEsdGhpcy5zZWxlY3Rvcnx8IioqIixiKTtyZXR1cm4gdGhpc30sZGVsZWdhdGU6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIHRoaXMub24oYixhLGMsZCl9LHVuZGVsZWdhdGU6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT0xP3RoaXMub2ZmKGEsIioqIik6dGhpcy5vZmYoYixhLGMpfSx0cmlnZ2VyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2YuZXZlbnQudHJpZ2dlcihhLGIsdGhpcyl9KX0sdHJpZ2dlckhhbmRsZXI6ZnVuY3Rpb24oYSxiKXtpZih0aGlzWzBdKXJldHVybiBmLmV2ZW50LnRyaWdnZXIoYSxiLHRoaXNbMF0sITApfSx0b2dnbGU6ZnVuY3Rpb24oYSl7dmFyIGI9YXJndW1lbnRzLGM9YS5ndWlkfHxmLmd1aWQrKyxkPTAsZT1mdW5jdGlvbihjKXt2YXIgZT0oZi5fZGF0YSh0aGlzLCJsYXN0VG9nZ2xlIithLmd1aWQpfHwwKSVkO2YuX2RhdGEodGhpcywibGFzdFRvZ2dsZSIrYS5ndWlkLGUrMSksYy5wcmV2ZW50RGVmYXVsdCgpO3JldHVybiBiW2VdLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8ITF9O2UuZ3VpZD1jO3doaWxlKGQ8Yi5sZW5ndGgpYltkKytdLmd1aWQ9YztyZXR1cm4gdGhpcy5jbGljayhlKX0saG92ZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5tb3VzZWVudGVyKGEpLm1vdXNlbGVhdmUoYnx8YSl9fSksZi5lYWNoKCJibHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgbG9hZCByZXNpemUgc2Nyb2xsIHVubG9hZCBjbGljayBkYmxjbGljayBtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSBjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGVycm9yIGNvbnRleHRtZW51Ii5zcGxpdCgiICIpLGZ1bmN0aW9uKGEsYil7Zi5mbltiXT1mdW5jdGlvbihhLGMpe2M9PW51bGwmJihjPWEsYT1udWxsKTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4wP3RoaXMub24oYixudWxsLGEsYyk6dGhpcy50cmlnZ2VyKGIpfSxmLmF0dHJGbiYmKGYuYXR0ckZuW2JdPSEwKSxDLnRlc3QoYikmJihmLmV2ZW50LmZpeEhvb2tzW2JdPWYuZXZlbnQua2V5SG9va3MpLEQudGVzdChiKSYmKGYuZXZlbnQuZml4SG9va3NbYl09Zi5ldmVudC5tb3VzZUhvb2tzKX0pLGZ1bmN0aW9uKCl7ZnVuY3Rpb24geChhLGIsYyxlLGYsZyl7Zm9yKHZhciBoPTAsaT1lLmxlbmd0aDtoPGk7aCsrKXt2YXIgaj1lW2hdO2lmKGope3ZhciBrPSExO2o9althXTt3aGlsZShqKXtpZihqW2RdPT09Yyl7az1lW2ouc2l6c2V0XTticmVha31pZihqLm5vZGVUeXBlPT09MSl7Z3x8KGpbZF09YyxqLnNpenNldD1oKTtpZih0eXBlb2YgYiE9InN0cmluZyIpe2lmKGo9PT1iKXtrPSEwO2JyZWFrfX1lbHNlIGlmKG0uZmlsdGVyKGIsW2pdKS5sZW5ndGg+MCl7az1qO2JyZWFrfX1qPWpbYV19ZVtoXT1rfX19ZnVuY3Rpb24gdyhhLGIsYyxlLGYsZyl7Zm9yKHZhciBoPTAsaT1lLmxlbmd0aDtoPGk7aCsrKXt2YXIgaj1lW2hdO2lmKGope3ZhciBrPSExO2o9althXTt3aGlsZShqKXtpZihqW2RdPT09Yyl7az1lW2ouc2l6c2V0XTticmVha31qLm5vZGVUeXBlPT09MSYmIWcmJihqW2RdPWMsai5zaXpzZXQ9aCk7aWYoai5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09Yil7az1qO2JyZWFrfWo9althXX1lW2hdPWt9fX12YXIgYT0vKCg/OlwoKD86XChbXigpXStcKXxbXigpXSspK1wpfFxbKD86XFtbXlxbXF1dKlxdfFsnIl1bXiciXSpbJyJdfFteXFtcXSciXSspK1xdfFxcLnxbXiA+K34sKFxbXFxdKykrfFs+K35dKShccyosXHMqKT8oKD86LnxccnxcbikqKS9nLGQ9InNpemNhY2hlIisoTWF0aC5yYW5kb20oKSsiIikucmVwbGFjZSgiLiIsIiIpLGU9MCxnPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsaD0hMSxpPSEwLGo9L1xcL2csaz0vXHJcbi9nLGw9L1xXLztbMCwwXS5zb3J0KGZ1bmN0aW9uKCl7aT0hMTtyZXR1cm4gMH0pO3ZhciBtPWZ1bmN0aW9uKGIsZCxlLGYpe2U9ZXx8W10sZD1kfHxjO3ZhciBoPWQ7aWYoZC5ub2RlVHlwZSE9PTEmJmQubm9kZVR5cGUhPT05KXJldHVybltdO2lmKCFifHx0eXBlb2YgYiE9InN0cmluZyIpcmV0dXJuIGU7dmFyIGksaixrLGwsbixxLHIsdCx1PSEwLHY9bS5pc1hNTChkKSx3PVtdLHg9Yjtkb3thLmV4ZWMoIiIpLGk9YS5leGVjKHgpO2lmKGkpe3g9aVszXSx3LnB1c2goaVsxXSk7aWYoaVsyXSl7bD1pWzNdO2JyZWFrfX19d2hpbGUoaSk7aWYody5sZW5ndGg+MSYmcC5leGVjKGIpKWlmKHcubGVuZ3RoPT09MiYmby5yZWxhdGl2ZVt3WzBdXSlqPXkod1swXSt3WzFdLGQsZik7ZWxzZXtqPW8ucmVsYXRpdmVbd1swXV0/W2RdOm0ody5zaGlmdCgpLGQpO3doaWxlKHcubGVuZ3RoKWI9dy5zaGlmdCgpLG8ucmVsYXRpdmVbYl0mJihiKz13LnNoaWZ0KCkpLGo9eShiLGosZil9ZWxzZXshZiYmdy5sZW5ndGg+MSYmZC5ub2RlVHlwZT09PTkmJiF2JiZvLm1hdGNoLklELnRlc3Qod1swXSkmJiFvLm1hdGNoLklELnRlc3Qod1t3Lmxlbmd0aC0xXSkmJihuPW0uZmluZCh3LnNoaWZ0KCksZCx2KSxkPW4uZXhwcj9tLmZpbHRlcihuLmV4cHIsbi5zZXQpWzBdOm4uc2V0WzBdKTtpZihkKXtuPWY/e2V4cHI6dy5wb3AoKSxzZXQ6cyhmKX06bS5maW5kKHcucG9wKCksdy5sZW5ndGg9PT0xJiYod1swXT09PSJ+Inx8d1swXT09PSIrIikmJmQucGFyZW50Tm9kZT9kLnBhcmVudE5vZGU6ZCx2KSxqPW4uZXhwcj9tLmZpbHRlcihuLmV4cHIsbi5zZXQpOm4uc2V0LHcubGVuZ3RoPjA/az1zKGopOnU9ITE7d2hpbGUody5sZW5ndGgpcT13LnBvcCgpLHI9cSxvLnJlbGF0aXZlW3FdP3I9dy5wb3AoKTpxPSIiLHI9PW51bGwmJihyPWQpLG8ucmVsYXRpdmVbcV0oayxyLHYpfWVsc2Ugaz13PVtdfWt8fChrPWopLGt8fG0uZXJyb3IocXx8Yik7aWYoZy5jYWxsKGspPT09IltvYmplY3QgQXJyYXldIilpZighdSllLnB1c2guYXBwbHkoZSxrKTtlbHNlIGlmKGQmJmQubm9kZVR5cGU9PT0xKWZvcih0PTA7a1t0XSE9bnVsbDt0Kyspa1t0XSYmKGtbdF09PT0hMHx8a1t0XS5ub2RlVHlwZT09PTEmJm0uY29udGFpbnMoZCxrW3RdKSkmJmUucHVzaChqW3RdKTtlbHNlIGZvcih0PTA7a1t0XSE9bnVsbDt0Kyspa1t0XSYma1t0XS5ub2RlVHlwZT09PTEmJmUucHVzaChqW3RdKTtlbHNlIHMoayxlKTtsJiYobShsLGgsZSxmKSxtLnVuaXF1ZVNvcnQoZSkpO3JldHVybiBlfTttLnVuaXF1ZVNvcnQ9ZnVuY3Rpb24oYSl7aWYodSl7aD1pLGEuc29ydCh1KTtpZihoKWZvcih2YXIgYj0xO2I8YS5sZW5ndGg7YisrKWFbYl09PT1hW2ItMV0mJmEuc3BsaWNlKGItLSwxKX1yZXR1cm4gYX0sbS5tYXRjaGVzPWZ1bmN0aW9uKGEsYil7cmV0dXJuIG0oYSxudWxsLG51bGwsYil9LG0ubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGEsYil7cmV0dXJuIG0oYixudWxsLG51bGwsW2FdKS5sZW5ndGg+MH0sbS5maW5kPWZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGYsZyxoLGk7aWYoIWEpcmV0dXJuW107Zm9yKGU9MCxmPW8ub3JkZXIubGVuZ3RoO2U8ZjtlKyspe2g9by5vcmRlcltlXTtpZihnPW8ubGVmdE1hdGNoW2hdLmV4ZWMoYSkpe2k9Z1sxXSxnLnNwbGljZSgxLDEpO2lmKGkuc3Vic3RyKGkubGVuZ3RoLTEpIT09IlxcIil7Z1sxXT0oZ1sxXXx8IiIpLnJlcGxhY2UoaiwiIiksZD1vLmZpbmRbaF0oZyxiLGMpO2lmKGQhPW51bGwpe2E9YS5yZXBsYWNlKG8ubWF0Y2hbaF0sIiIpO2JyZWFrfX19fWR8fChkPXR5cGVvZiBiLmdldEVsZW1lbnRzQnlUYWdOYW1lIT0idW5kZWZpbmVkIj9iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik6W10pO3JldHVybntzZXQ6ZCxleHByOmF9fSxtLmZpbHRlcj1mdW5jdGlvbihhLGMsZCxlKXt2YXIgZixnLGgsaSxqLGssbCxuLHAscT1hLHI9W10scz1jLHQ9YyYmY1swXSYmbS5pc1hNTChjWzBdKTt3aGlsZShhJiZjLmxlbmd0aCl7Zm9yKGggaW4gby5maWx0ZXIpaWYoKGY9by5sZWZ0TWF0Y2hbaF0uZXhlYyhhKSkhPW51bGwmJmZbMl0pe2s9by5maWx0ZXJbaF0sbD1mWzFdLGc9ITEsZi5zcGxpY2UoMSwxKTtpZihsLnN1YnN0cihsLmxlbmd0aC0xKT09PSJcXCIpY29udGludWU7cz09PXImJihyPVtdKTtpZihvLnByZUZpbHRlcltoXSl7Zj1vLnByZUZpbHRlcltoXShmLHMsZCxyLGUsdCk7aWYoIWYpZz1pPSEwO2Vsc2UgaWYoZj09PSEwKWNvbnRpbnVlfWlmKGYpZm9yKG49MDsoaj1zW25dKSE9bnVsbDtuKyspaiYmKGk9ayhqLGYsbixzKSxwPWVeaSxkJiZpIT1udWxsP3A/Zz0hMDpzW25dPSExOnAmJihyLnB1c2goaiksZz0hMCkpO2lmKGkhPT1iKXtkfHwocz1yKSxhPWEucmVwbGFjZShvLm1hdGNoW2hdLCIiKTtpZighZylyZXR1cm5bXTticmVha319aWYoYT09PXEpaWYoZz09bnVsbCltLmVycm9yKGEpO2Vsc2UgYnJlYWs7cT1hfXJldHVybiBzfSxtLmVycm9yPWZ1bmN0aW9uKGEpe3Rocm93IG5ldyBFcnJvcigiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIithKX07dmFyIG49bS5nZXRUZXh0PWZ1bmN0aW9uKGEpe3ZhciBiLGMsZD1hLm5vZGVUeXBlLGU9IiI7aWYoZCl7aWYoZD09PTF8fGQ9PT05fHxkPT09MTEpe2lmKHR5cGVvZiBhLnRleHRDb250ZW50PT0ic3RyaW5nIilyZXR1cm4gYS50ZXh0Q29udGVudDtpZih0eXBlb2YgYS5pbm5lclRleHQ9PSJzdHJpbmciKXJldHVybiBhLmlubmVyVGV4dC5yZXBsYWNlKGssIiIpO2ZvcihhPWEuZmlyc3RDaGlsZDthO2E9YS5uZXh0U2libGluZyllKz1uKGEpfWVsc2UgaWYoZD09PTN8fGQ9PT00KXJldHVybiBhLm5vZGVWYWx1ZX1lbHNlIGZvcihiPTA7Yz1hW2JdO2IrKyljLm5vZGVUeXBlIT09OCYmKGUrPW4oYykpO3JldHVybiBlfSxvPW0uc2VsZWN0b3JzPXtvcmRlcjpbIklEIiwiTkFNRSIsIlRBRyJdLG1hdGNoOntJRDovIygoPzpbXHdcdTAwYzAtXHVGRkZGXC1dfFxcLikrKS8sQ0xBU1M6L1wuKCg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSspLyxOQU1FOi9cW25hbWU9WyciXSooKD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKylbJyJdKlxdLyxBVFRSOi9cW1xzKigoPzpbXHdcdTAwYzAtXHVGRkZGXC1dfFxcLikrKVxzKig/OihcUz89KVxzKig/OihbJyJdKSguKj8pXDN8KCM/KD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKil8KXwpXHMqXF0vLFRBRzovXigoPzpbXHdcdTAwYzAtXHVGRkZGXCpcLV18XFwuKSspLyxDSElMRDovOihvbmx5fG50aHxsYXN0fGZpcnN0KS1jaGlsZCg/OlwoXHMqKGV2ZW58b2RkfCg/OlsrXC1dP1xkK3woPzpbK1wtXT9cZCopP25ccyooPzpbK1wtXVxzKlxkKyk/KSlccypcKSk/LyxQT1M6LzoobnRofGVxfGd0fGx0fGZpcnN0fGxhc3R8ZXZlbnxvZGQpKD86XCgoXGQqKVwpKT8oPz1bXlwtXXwkKS8sUFNFVURPOi86KCg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSspKD86XCgoWyciXT8pKCg/OlwoW15cKV0rXCl8W15cKFwpXSopKylcMlwpKT8vfSxsZWZ0TWF0Y2g6e30sYXR0ck1hcDp7ImNsYXNzIjoiY2xhc3NOYW1lIiwiZm9yIjoiaHRtbEZvciJ9LGF0dHJIYW5kbGU6e2hyZWY6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZ2V0QXR0cmlidXRlKCJocmVmIil9LHR5cGU6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZ2V0QXR0cmlidXRlKCJ0eXBlIil9fSxyZWxhdGl2ZTp7IisiOmZ1bmN0aW9uKGEsYil7dmFyIGM9dHlwZW9mIGI9PSJzdHJpbmciLGQ9YyYmIWwudGVzdChiKSxlPWMmJiFkO2QmJihiPWIudG9Mb3dlckNhc2UoKSk7Zm9yKHZhciBmPTAsZz1hLmxlbmd0aCxoO2Y8ZztmKyspaWYoaD1hW2ZdKXt3aGlsZSgoaD1oLnByZXZpb3VzU2libGluZykmJmgubm9kZVR5cGUhPT0xKTthW2ZdPWV8fGgmJmgubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWI/aHx8ITE6aD09PWJ9ZSYmbS5maWx0ZXIoYixhLCEwKX0sIj4iOmZ1bmN0aW9uKGEsYil7dmFyIGMsZD10eXBlb2YgYj09InN0cmluZyIsZT0wLGY9YS5sZW5ndGg7aWYoZCYmIWwudGVzdChiKSl7Yj1iLnRvTG93ZXJDYXNlKCk7Zm9yKDtlPGY7ZSsrKXtjPWFbZV07aWYoYyl7dmFyIGc9Yy5wYXJlbnROb2RlO2FbZV09Zy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09Yj9nOiExfX19ZWxzZXtmb3IoO2U8ZjtlKyspYz1hW2VdLGMmJihhW2VdPWQ/Yy5wYXJlbnROb2RlOmMucGFyZW50Tm9kZT09PWIpO2QmJm0uZmlsdGVyKGIsYSwhMCl9fSwiIjpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZj1lKyssZz14O3R5cGVvZiBiPT0ic3RyaW5nIiYmIWwudGVzdChiKSYmKGI9Yi50b0xvd2VyQ2FzZSgpLGQ9YixnPXcpLGcoInBhcmVudE5vZGUiLGIsZixhLGQsYyl9LCJ+IjpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZj1lKyssZz14O3R5cGVvZiBiPT0ic3RyaW5nIiYmIWwudGVzdChiKSYmKGI9Yi50b0xvd2VyQ2FzZSgpLGQ9YixnPXcpLGcoInByZXZpb3VzU2libGluZyIsYixmLGEsZCxjKX19LGZpbmQ6e0lEOmZ1bmN0aW9uKGEsYixjKXtpZih0eXBlb2YgYi5nZXRFbGVtZW50QnlJZCE9InVuZGVmaW5lZCImJiFjKXt2YXIgZD1iLmdldEVsZW1lbnRCeUlkKGFbMV0pO3JldHVybiBkJiZkLnBhcmVudE5vZGU/W2RdOltdfX0sTkFNRTpmdW5jdGlvbihhLGIpe2lmKHR5cGVvZiBiLmdldEVsZW1lbnRzQnlOYW1lIT0idW5kZWZpbmVkIil7dmFyIGM9W10sZD1iLmdldEVsZW1lbnRzQnlOYW1lKGFbMV0pO2Zvcih2YXIgZT0wLGY9ZC5sZW5ndGg7ZTxmO2UrKylkW2VdLmdldEF0dHJpYnV0ZSgibmFtZSIpPT09YVsxXSYmYy5wdXNoKGRbZV0pO3JldHVybiBjLmxlbmd0aD09PTA/bnVsbDpjfX0sVEFHOmZ1bmN0aW9uKGEsYil7aWYodHlwZW9mIGIuZ2V0RWxlbWVudHNCeVRhZ05hbWUhPSJ1bmRlZmluZWQiKXJldHVybiBiLmdldEVsZW1lbnRzQnlUYWdOYW1lKGFbMV0pfX0scHJlRmlsdGVyOntDTEFTUzpmdW5jdGlvbihhLGIsYyxkLGUsZil7YT0iICIrYVsxXS5yZXBsYWNlKGosIiIpKyIgIjtpZihmKXJldHVybiBhO2Zvcih2YXIgZz0wLGg7KGg9YltnXSkhPW51bGw7ZysrKWgmJihlXihoLmNsYXNzTmFtZSYmKCIgIitoLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UoL1tcdFxuXHJdL2csIiAiKS5pbmRleE9mKGEpPj0wKT9jfHxkLnB1c2goaCk6YyYmKGJbZ109ITEpKTtyZXR1cm4hMX0sSUQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGFbMV0ucmVwbGFjZShqLCIiKX0sVEFHOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGFbMV0ucmVwbGFjZShqLCIiKS50b0xvd2VyQ2FzZSgpfSxDSElMRDpmdW5jdGlvbihhKXtpZihhWzFdPT09Im50aCIpe2FbMl18fG0uZXJyb3IoYVswXSksYVsyXT1hWzJdLnJlcGxhY2UoL15cK3xccyovZywiIik7dmFyIGI9LygtPykoXGQqKSg/Om4oWytcLV0/XGQqKSk/Ly5leGVjKGFbMl09PT0iZXZlbiImJiIybiJ8fGFbMl09PT0ib2RkIiYmIjJuKzEifHwhL1xELy50ZXN0KGFbMl0pJiYiMG4rIithWzJdfHxhWzJdKTthWzJdPWJbMV0rKGJbMl18fDEpLTAsYVszXT1iWzNdLTB9ZWxzZSBhWzJdJiZtLmVycm9yKGFbMF0pO2FbMF09ZSsrO3JldHVybiBhfSxBVFRSOmZ1bmN0aW9uKGEsYixjLGQsZSxmKXt2YXIgZz1hWzFdPWFbMV0ucmVwbGFjZShqLCIiKTshZiYmby5hdHRyTWFwW2ddJiYoYVsxXT1vLmF0dHJNYXBbZ10pLGFbNF09KGFbNF18fGFbNV18fCIiKS5yZXBsYWNlKGosIiIpLGFbMl09PT0ifj0iJiYoYVs0XT0iICIrYVs0XSsiICIpO3JldHVybiBhfSxQU0VVRE86ZnVuY3Rpb24oYixjLGQsZSxmKXtpZihiWzFdPT09Im5vdCIpaWYoKGEuZXhlYyhiWzNdKXx8IiIpLmxlbmd0aD4xfHwvXlx3Ly50ZXN0KGJbM10pKWJbM109bShiWzNdLG51bGwsbnVsbCxjKTtlbHNle3ZhciBnPW0uZmlsdGVyKGJbM10sYyxkLCEwXmYpO2R8fGUucHVzaC5hcHBseShlLGcpO3JldHVybiExfWVsc2UgaWYoby5tYXRjaC5QT1MudGVzdChiWzBdKXx8by5tYXRjaC5DSElMRC50ZXN0KGJbMF0pKXJldHVybiEwO3JldHVybiBifSxQT1M6ZnVuY3Rpb24oYSl7YS51bnNoaWZ0KCEwKTtyZXR1cm4gYX19LGZpbHRlcnM6e2VuYWJsZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZGlzYWJsZWQ9PT0hMSYmYS50eXBlIT09ImhpZGRlbiJ9LGRpc2FibGVkOmZ1bmN0aW9uKGEpe3JldHVybiBhLmRpc2FibGVkPT09ITB9LGNoZWNrZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuY2hlY2tlZD09PSEwfSxzZWxlY3RlZDpmdW5jdGlvbihhKXthLnBhcmVudE5vZGUmJmEucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O3JldHVybiBhLnNlbGVjdGVkPT09ITB9LHBhcmVudDpmdW5jdGlvbihhKXtyZXR1cm4hIWEuZmlyc3RDaGlsZH0sZW1wdHk6ZnVuY3Rpb24oYSl7cmV0dXJuIWEuZmlyc3RDaGlsZH0saGFzOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4hIW0oY1szXSxhKS5sZW5ndGh9LGhlYWRlcjpmdW5jdGlvbihhKXtyZXR1cm4vaFxkL2kudGVzdChhLm5vZGVOYW1lKX0sdGV4dDpmdW5jdGlvbihhKXt2YXIgYj1hLmdldEF0dHJpYnV0ZSgidHlwZSIpLGM9YS50eXBlO3JldHVybiBhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0iaW5wdXQiJiYidGV4dCI9PT1jJiYoYj09PWN8fGI9PT1udWxsKX0scmFkaW86ZnVuY3Rpb24oYSl7cmV0dXJuIGEubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PSJpbnB1dCImJiJyYWRpbyI9PT1hLnR5cGV9LGNoZWNrYm94OmZ1bmN0aW9uKGEpe3JldHVybiBhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0iaW5wdXQiJiYiY2hlY2tib3giPT09YS50eXBlfSxmaWxlOmZ1bmN0aW9uKGEpe3JldHVybiBhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0iaW5wdXQiJiYiZmlsZSI9PT1hLnR5cGV9LHBhc3N3b3JkOmZ1bmN0aW9uKGEpe3JldHVybiBhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0iaW5wdXQiJiYicGFzc3dvcmQiPT09YS50eXBlfSxzdWJtaXQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybihiPT09ImlucHV0Inx8Yj09PSJidXR0b24iKSYmInN1Ym1pdCI9PT1hLnR5cGV9LGltYWdlOmZ1bmN0aW9uKGEpe3JldHVybiBhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0iaW5wdXQiJiYiaW1hZ2UiPT09YS50eXBlfSxyZXNldDpmdW5jdGlvbihhKXt2YXIgYj1hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuKGI9PT0iaW5wdXQifHxiPT09ImJ1dHRvbiIpJiYicmVzZXQiPT09YS50eXBlfSxidXR0b246ZnVuY3Rpb24oYSl7dmFyIGI9YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiBiPT09ImlucHV0IiYmImJ1dHRvbiI9PT1hLnR5cGV8fGI9PT0iYnV0dG9uIn0saW5wdXQ6ZnVuY3Rpb24oYSl7cmV0dXJuL2lucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24vaS50ZXN0KGEubm9kZU5hbWUpfSxmb2N1czpmdW5jdGlvbihhKXtyZXR1cm4gYT09PWEub3duZXJEb2N1bWVudC5hY3RpdmVFbGVtZW50fX0sc2V0RmlsdGVyczp7Zmlyc3Q6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYj09PTB9LGxhc3Q6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIGI9PT1kLmxlbmd0aC0xfSxldmVuOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGIlMj09PTB9LG9kZDpmdW5jdGlvbihhLGIpe3JldHVybiBiJTI9PT0xfSxsdDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGI8Y1szXS0wfSxndDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGI+Y1szXS0wfSxudGg6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjWzNdLTA9PT1ifSxlcTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGNbM10tMD09PWJ9fSxmaWx0ZXI6e1BTRVVETzpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1iWzFdLGY9by5maWx0ZXJzW2VdO2lmKGYpcmV0dXJuIGYoYSxjLGIsZCk7aWYoZT09PSJjb250YWlucyIpcmV0dXJuKGEudGV4dENvbnRlbnR8fGEuaW5uZXJUZXh0fHxuKFthXSl8fCIiKS5pbmRleE9mKGJbM10pPj0wO2lmKGU9PT0ibm90Iil7dmFyIGc9YlszXTtmb3IodmFyIGg9MCxpPWcubGVuZ3RoO2g8aTtoKyspaWYoZ1toXT09PWEpcmV0dXJuITE7cmV0dXJuITB9bS5lcnJvcihlKX0sQ0hJTEQ6ZnVuY3Rpb24oYSxiKXt2YXIgYyxlLGYsZyxoLGksaixrPWJbMV0sbD1hO3N3aXRjaChrKXtjYXNlIm9ubHkiOmNhc2UiZmlyc3QiOndoaWxlKGw9bC5wcmV2aW91c1NpYmxpbmcpaWYobC5ub2RlVHlwZT09PTEpcmV0dXJuITE7aWYoaz09PSJmaXJzdCIpcmV0dXJuITA7bD1hO2Nhc2UibGFzdCI6d2hpbGUobD1sLm5leHRTaWJsaW5nKWlmKGwubm9kZVR5cGU9PT0xKXJldHVybiExO3JldHVybiEwO2Nhc2UibnRoIjpjPWJbMl0sZT1iWzNdO2lmKGM9PT0xJiZlPT09MClyZXR1cm4hMDtmPWJbMF0sZz1hLnBhcmVudE5vZGU7aWYoZyYmKGdbZF0hPT1mfHwhYS5ub2RlSW5kZXgpKXtpPTA7Zm9yKGw9Zy5maXJzdENoaWxkO2w7bD1sLm5leHRTaWJsaW5nKWwubm9kZVR5cGU9PT0xJiYobC5ub2RlSW5kZXg9KytpKTtnW2RdPWZ9aj1hLm5vZGVJbmRleC1lO3JldHVybiBjPT09MD9qPT09MDpqJWM9PT0wJiZqL2M+PTB9fSxJRDpmdW5jdGlvbihhLGIpe3JldHVybiBhLm5vZGVUeXBlPT09MSYmYS5nZXRBdHRyaWJ1dGUoImlkIik9PT1ifSxUQUc6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYj09PSIqIiYmYS5ub2RlVHlwZT09PTF8fCEhYS5ub2RlTmFtZSYmYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09Yn0sQ0xBU1M6ZnVuY3Rpb24oYSxiKXtyZXR1cm4oIiAiKyhhLmNsYXNzTmFtZXx8YS5nZXRBdHRyaWJ1dGUoImNsYXNzIikpKyIgIikuaW5kZXhPZihiKT4tMX0sQVRUUjpmdW5jdGlvbihhLGIpe3ZhciBjPWJbMV0sZD1tLmF0dHI/bS5hdHRyKGEsYyk6by5hdHRySGFuZGxlW2NdP28uYXR0ckhhbmRsZVtjXShhKTphW2NdIT1udWxsP2FbY106YS5nZXRBdHRyaWJ1dGUoYyksZT1kKyIiLGY9YlsyXSxnPWJbNF07cmV0dXJuIGQ9PW51bGw/Zj09PSIhPSI6IWYmJm0uYXR0cj9kIT1udWxsOmY9PT0iPSI/ZT09PWc6Zj09PSIqPSI/ZS5pbmRleE9mKGcpPj0wOmY9PT0ifj0iPygiICIrZSsiICIpLmluZGV4T2YoZyk+PTA6Zz9mPT09IiE9Ij9lIT09ZzpmPT09Il49Ij9lLmluZGV4T2YoZyk9PT0wOmY9PT0iJD0iP2Uuc3Vic3RyKGUubGVuZ3RoLWcubGVuZ3RoKT09PWc6Zj09PSJ8PSI/ZT09PWd8fGUuc3Vic3RyKDAsZy5sZW5ndGgrMSk9PT1nKyItIjohMTplJiZkIT09ITF9LFBPUzpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1iWzJdLGY9by5zZXRGaWx0ZXJzW2VdO2lmKGYpcmV0dXJuIGYoYSxjLGIsZCl9fX0scD1vLm1hdGNoLlBPUyxxPWZ1bmN0aW9uKGEsYil7cmV0dXJuIlxcIisoYi0wKzEpfTtmb3IodmFyIHIgaW4gby5tYXRjaClvLm1hdGNoW3JdPW5ldyBSZWdFeHAoby5tYXRjaFtyXS5zb3VyY2UrLyg/IVteXFtdKlxdKSg/IVteXChdKlwpKS8uc291cmNlKSxvLmxlZnRNYXRjaFtyXT1uZXcgUmVnRXhwKC8oXig/Oi58XHJ8XG4pKj8pLy5zb3VyY2Urby5tYXRjaFtyXS5zb3VyY2UucmVwbGFjZSgvXFwoXGQrKS9nLHEpKTtvLm1hdGNoLmdsb2JhbFBPUz1wO3ZhciBzPWZ1bmN0aW9uKGEsYil7YT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhLDApO2lmKGIpe2IucHVzaC5hcHBseShiLGEpO3JldHVybiBifXJldHVybiBhfTt0cnl7QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYy5kb2N1bWVudEVsZW1lbnQuY2hpbGROb2RlcywwKVswXS5ub2RlVHlwZX1jYXRjaCh0KXtzPWZ1bmN0aW9uKGEsYil7dmFyIGM9MCxkPWJ8fFtdO2lmKGcuY2FsbChhKT09PSJbb2JqZWN0IEFycmF5XSIpQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoZCxhKTtlbHNlIGlmKHR5cGVvZiBhLmxlbmd0aD09Im51bWJlciIpZm9yKHZhciBlPWEubGVuZ3RoO2M8ZTtjKyspZC5wdXNoKGFbY10pO2Vsc2UgZm9yKDthW2NdO2MrKylkLnB1c2goYVtjXSk7cmV0dXJuIGR9fXZhciB1LHY7Yy5kb2N1bWVudEVsZW1lbnQuY29tcGFyZURvY3VtZW50UG9zaXRpb24/dT1mdW5jdGlvbihhLGIpe2lmKGE9PT1iKXtoPSEwO3JldHVybiAwfWlmKCFhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9ufHwhYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbilyZXR1cm4gYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj8tMToxO3JldHVybiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGIpJjQ/LTE6MX06KHU9ZnVuY3Rpb24oYSxiKXtpZihhPT09Yil7aD0hMDtyZXR1cm4gMH1pZihhLnNvdXJjZUluZGV4JiZiLnNvdXJjZUluZGV4KXJldHVybiBhLnNvdXJjZUluZGV4LWIuc291cmNlSW5kZXg7dmFyIGMsZCxlPVtdLGY9W10sZz1hLnBhcmVudE5vZGUsaT1iLnBhcmVudE5vZGUsaj1nO2lmKGc9PT1pKXJldHVybiB2KGEsYik7aWYoIWcpcmV0dXJuLTE7aWYoIWkpcmV0dXJuIDE7d2hpbGUoaillLnVuc2hpZnQoaiksaj1qLnBhcmVudE5vZGU7aj1pO3doaWxlKGopZi51bnNoaWZ0KGopLGo9ai5wYXJlbnROb2RlO2M9ZS5sZW5ndGgsZD1mLmxlbmd0aDtmb3IodmFyIGs9MDtrPGMmJms8ZDtrKyspaWYoZVtrXSE9PWZba10pcmV0dXJuIHYoZVtrXSxmW2tdKTtyZXR1cm4gaz09PWM/dihhLGZba10sLTEpOnYoZVtrXSxiLDEpfSx2PWZ1bmN0aW9uKGEsYixjKXtpZihhPT09YilyZXR1cm4gYzt2YXIgZD1hLm5leHRTaWJsaW5nO3doaWxlKGQpe2lmKGQ9PT1iKXJldHVybi0xO2Q9ZC5uZXh0U2libGluZ31yZXR1cm4gMX0pLGZ1bmN0aW9uKCl7dmFyIGE9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKSxkPSJzY3JpcHQiKyhuZXcgRGF0ZSkuZ2V0VGltZSgpLGU9Yy5kb2N1bWVudEVsZW1lbnQ7YS5pbm5lckhUTUw9IjxhIG5hbWU9JyIrZCsiJy8+IixlLmluc2VydEJlZm9yZShhLGUuZmlyc3RDaGlsZCksYy5nZXRFbGVtZW50QnlJZChkKSYmKG8uZmluZC5JRD1mdW5jdGlvbihhLGMsZCl7aWYodHlwZW9mIGMuZ2V0RWxlbWVudEJ5SWQhPSJ1bmRlZmluZWQiJiYhZCl7dmFyIGU9Yy5nZXRFbGVtZW50QnlJZChhWzFdKTtyZXR1cm4gZT9lLmlkPT09YVsxXXx8dHlwZW9mIGUuZ2V0QXR0cmlidXRlTm9kZSE9InVuZGVmaW5lZCImJmUuZ2V0QXR0cmlidXRlTm9kZSgiaWQiKS5ub2RlVmFsdWU9PT1hWzFdP1tlXTpiOltdfX0sby5maWx0ZXIuSUQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz10eXBlb2YgYS5nZXRBdHRyaWJ1dGVOb2RlIT0idW5kZWZpbmVkIiYmYS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpO3JldHVybiBhLm5vZGVUeXBlPT09MSYmYyYmYy5ub2RlVmFsdWU9PT1ifSksZS5yZW1vdmVDaGlsZChhKSxlPWE9bnVsbH0oKSxmdW5jdGlvbigpe3ZhciBhPWMuY3JlYXRlRWxlbWVudCgiZGl2Iik7YS5hcHBlbmRDaGlsZChjLmNyZWF0ZUNvbW1lbnQoIiIpKSxhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikubGVuZ3RoPjAmJihvLmZpbmQuVEFHPWZ1bmN0aW9uKGEsYil7dmFyIGM9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZShhWzFdKTtpZihhWzFdPT09IioiKXt2YXIgZD1bXTtmb3IodmFyIGU9MDtjW2VdO2UrKyljW2VdLm5vZGVUeXBlPT09MSYmZC5wdXNoKGNbZV0pO2M9ZH1yZXR1cm4gY30pLGEuaW5uZXJIVE1MPSI8YSBocmVmPScjJz48L2E+IixhLmZpcnN0Q2hpbGQmJnR5cGVvZiBhLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlIT0idW5kZWZpbmVkIiYmYS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgiaHJlZiIpIT09IiMiJiYoby5hdHRySGFuZGxlLmhyZWY9ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZ2V0QXR0cmlidXRlKCJocmVmIiwyKX0pLGE9bnVsbH0oKSxjLnF1ZXJ5U2VsZWN0b3JBbGwmJmZ1bmN0aW9uKCl7dmFyIGE9bSxiPWMuY3JlYXRlRWxlbWVudCgiZGl2IiksZD0iX19zaXp6bGVfXyI7Yi5pbm5lckhUTUw9IjxwIGNsYXNzPSdURVNUJz48L3A+IjtpZighYi5xdWVyeVNlbGVjdG9yQWxsfHxiLnF1ZXJ5U2VsZWN0b3JBbGwoIi5URVNUIikubGVuZ3RoIT09MCl7bT1mdW5jdGlvbihiLGUsZixnKXtlPWV8fGM7aWYoIWcmJiFtLmlzWE1MKGUpKXt2YXIgaD0vXihcdyskKXxeXC4oW1x3XC1dKyQpfF4jKFtcd1wtXSskKS8uZXhlYyhiKTtpZihoJiYoZS5ub2RlVHlwZT09PTF8fGUubm9kZVR5cGU9PT05KSl7aWYoaFsxXSlyZXR1cm4gcyhlLmdldEVsZW1lbnRzQnlUYWdOYW1lKGIpLGYpO2lmKGhbMl0mJm8uZmluZC5DTEFTUyYmZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKXJldHVybiBzKGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShoWzJdKSxmKX1pZihlLm5vZGVUeXBlPT09OSl7aWYoYj09PSJib2R5IiYmZS5ib2R5KXJldHVybiBzKFtlLmJvZHldLGYpO2lmKGgmJmhbM10pe3ZhciBpPWUuZ2V0RWxlbWVudEJ5SWQoaFszXSk7aWYoIWl8fCFpLnBhcmVudE5vZGUpcmV0dXJuIHMoW10sZik7aWYoaS5pZD09PWhbM10pcmV0dXJuIHMoW2ldLGYpfXRyeXtyZXR1cm4gcyhlLnF1ZXJ5U2VsZWN0b3JBbGwoYiksZil9Y2F0Y2goail7fX1lbHNlIGlmKGUubm9kZVR5cGU9PT0xJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkhPT0ib2JqZWN0Iil7dmFyIGs9ZSxsPWUuZ2V0QXR0cmlidXRlKCJpZCIpLG49bHx8ZCxwPWUucGFyZW50Tm9kZSxxPS9eXHMqWyt+XS8udGVzdChiKTtsP249bi5yZXBsYWNlKC8nL2csIlxcJCYiKTplLnNldEF0dHJpYnV0ZSgiaWQiLG4pLHEmJnAmJihlPWUucGFyZW50Tm9kZSk7dHJ5e2lmKCFxfHxwKXJldHVybiBzKGUucXVlcnlTZWxlY3RvckFsbCgiW2lkPSciK24rIiddICIrYiksZil9Y2F0Y2gocil7fWZpbmFsbHl7bHx8ay5yZW1vdmVBdHRyaWJ1dGUoImlkIil9fX1yZXR1cm4gYShiLGUsZixnKX07Zm9yKHZhciBlIGluIGEpbVtlXT1hW2VdO2I9bnVsbH19KCksZnVuY3Rpb24oKXt2YXIgYT1jLmRvY3VtZW50RWxlbWVudCxiPWEubWF0Y2hlc1NlbGVjdG9yfHxhLm1vek1hdGNoZXNTZWxlY3Rvcnx8YS53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fGEubXNNYXRjaGVzU2VsZWN0b3I7aWYoYil7dmFyIGQ9IWIuY2FsbChjLmNyZWF0ZUVsZW1lbnQoImRpdiIpLCJkaXYiKSxlPSExO3RyeXtiLmNhbGwoYy5kb2N1bWVudEVsZW1lbnQsIlt0ZXN0IT0nJ106c2l6emxlIil9Y2F0Y2goZil7ZT0hMH1tLm1hdGNoZXNTZWxlY3Rvcj1mdW5jdGlvbihhLGMpe2M9Yy5yZXBsYWNlKC9cPVxzKihbXiciXF1dKilccypcXS9nLCI9JyQxJ10iKTtpZighbS5pc1hNTChhKSl0cnl7aWYoZXx8IW8ubWF0Y2guUFNFVURPLnRlc3QoYykmJiEvIT0vLnRlc3QoYykpe3ZhciBmPWIuY2FsbChhLGMpO2lmKGZ8fCFkfHxhLmRvY3VtZW50JiZhLmRvY3VtZW50Lm5vZGVUeXBlIT09MTEpcmV0dXJuIGZ9fWNhdGNoKGcpe31yZXR1cm4gbShjLG51bGwsbnVsbCxbYV0pLmxlbmd0aD4wfX19KCksZnVuY3Rpb24oKXt2YXIgYT1jLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2EuaW5uZXJIVE1MPSI8ZGl2IGNsYXNzPSd0ZXN0IGUnPjwvZGl2PjxkaXYgY2xhc3M9J3Rlc3QnPjwvZGl2PiI7aWYoISFhLmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJmEuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiZSIpLmxlbmd0aCE9PTApe2EubGFzdENoaWxkLmNsYXNzTmFtZT0iZSI7aWYoYS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJlIikubGVuZ3RoPT09MSlyZXR1cm47by5vcmRlci5zcGxpY2UoMSwwLCJDTEFTUyIpLG8uZmluZC5DTEFTUz1mdW5jdGlvbihhLGIsYyl7aWYodHlwZW9mIGIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSE9InVuZGVmaW5lZCImJiFjKXJldHVybiBiLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoYVsxXSl9LGE9bnVsbH19KCksYy5kb2N1bWVudEVsZW1lbnQuY29udGFpbnM/bS5jb250YWlucz1mdW5jdGlvbihhLGIpe3JldHVybiBhIT09YiYmKGEuY29udGFpbnM/YS5jb250YWlucyhiKTohMCl9OmMuZG9jdW1lbnRFbGVtZW50LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uP20uY29udGFpbnM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4hIShhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGIpJjE2KX06bS5jb250YWlucz1mdW5jdGlvbigpe3JldHVybiExfSxtLmlzWE1MPWZ1bmN0aW9uKGEpe3ZhciBiPShhP2Eub3duZXJEb2N1bWVudHx8YTowKS5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuIGI/Yi5ub2RlTmFtZSE9PSJIVE1MIjohMX07dmFyIHk9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGU9W10sZj0iIixnPWIubm9kZVR5cGU/W2JdOmI7d2hpbGUoZD1vLm1hdGNoLlBTRVVETy5leGVjKGEpKWYrPWRbMF0sYT1hLnJlcGxhY2Uoby5tYXRjaC5QU0VVRE8sIiIpO2E9by5yZWxhdGl2ZVthXT9hKyIqIjphO2Zvcih2YXIgaD0wLGk9Zy5sZW5ndGg7aDxpO2grKyltKGEsZ1toXSxlLGMpO3JldHVybiBtLmZpbHRlcihmLGUpfTttLmF0dHI9Zi5hdHRyLG0uc2VsZWN0b3JzLmF0dHJNYXA9e30sZi5maW5kPW0sZi5leHByPW0uc2VsZWN0b3JzLGYuZXhwclsiOiJdPWYuZXhwci5maWx0ZXJzLGYudW5pcXVlPW0udW5pcXVlU29ydCxmLnRleHQ9bS5nZXRUZXh0LGYuaXNYTUxEb2M9bS5pc1hNTCxmLmNvbnRhaW5zPW0uY29udGFpbnN9KCk7dmFyIEw9L1VudGlsJC8sTT0vXig/OnBhcmVudHN8cHJldlVudGlsfHByZXZBbGwpLyxOPS8sLyxPPS9eLlteOiNcW1wuLF0qJC8sUD1BcnJheS5wcm90b3R5cGUuc2xpY2UsUT1mLmV4cHIubWF0Y2guZ2xvYmFsUE9TLFI9e2NoaWxkcmVuOiEwLGNvbnRlbnRzOiEwLG5leHQ6ITAscHJldjohMH07Zi5mbi5leHRlbmQoe2ZpbmQ6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcyxjLGQ7aWYodHlwZW9mIGEhPSJzdHJpbmciKXJldHVybiBmKGEpLmZpbHRlcihmdW5jdGlvbigpe2ZvcihjPTAsZD1iLmxlbmd0aDtjPGQ7YysrKWlmKGYuY29udGFpbnMoYltjXSx0aGlzKSlyZXR1cm4hMH0pO3ZhciBlPXRoaXMucHVzaFN0YWNrKCIiLCJmaW5kIixhKSxnLGgsaTtmb3IoYz0wLGQ9dGhpcy5sZW5ndGg7YzxkO2MrKyl7Zz1lLmxlbmd0aCxmLmZpbmQoYSx0aGlzW2NdLGUpO2lmKGM+MClmb3IoaD1nO2g8ZS5sZW5ndGg7aCsrKWZvcihpPTA7aTxnO2krKylpZihlW2ldPT09ZVtoXSl7ZS5zcGxpY2UoaC0tLDEpO2JyZWFrfX1yZXR1cm4gZX0saGFzOmZ1bmN0aW9uKGEpe3ZhciBiPWYoYSk7cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKHZhciBhPTAsYz1iLmxlbmd0aDthPGM7YSsrKWlmKGYuY29udGFpbnModGhpcyxiW2FdKSlyZXR1cm4hMH0pfSxub3Q6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKFQodGhpcyxhLCExKSwibm90IixhKX0sZmlsdGVyOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnB1c2hTdGFjayhUKHRoaXMsYSwhMCksImZpbHRlciIsYSl9LGlzOmZ1bmN0aW9uKGEpe3JldHVybiEhYSYmKHR5cGVvZiBhPT0ic3RyaW5nIj9RLnRlc3QoYSk/ZihhLHRoaXMuY29udGV4dCkuaW5kZXgodGhpc1swXSk+PTA6Zi5maWx0ZXIoYSx0aGlzKS5sZW5ndGg+MDp0aGlzLmZpbHRlcihhKS5sZW5ndGg+MCl9LGNsb3Nlc3Q6ZnVuY3Rpb24oYSxiKXt2YXIgYz1bXSxkLGUsZz10aGlzWzBdO2lmKGYuaXNBcnJheShhKSl7dmFyIGg9MTt3aGlsZShnJiZnLm93bmVyRG9jdW1lbnQmJmchPT1iKXtmb3IoZD0wO2Q8YS5sZW5ndGg7ZCsrKWYoZykuaXMoYVtkXSkmJmMucHVzaCh7c2VsZWN0b3I6YVtkXSxlbGVtOmcsbGV2ZWw6aH0pO2c9Zy5wYXJlbnROb2RlLGgrK31yZXR1cm4gY312YXIgaT1RLnRlc3QoYSl8fHR5cGVvZiBhIT0ic3RyaW5nIj9mKGEsYnx8dGhpcy5jb250ZXh0KTowO2ZvcihkPTAsZT10aGlzLmxlbmd0aDtkPGU7ZCsrKXtnPXRoaXNbZF07d2hpbGUoZyl7aWYoaT9pLmluZGV4KGcpPi0xOmYuZmluZC5tYXRjaGVzU2VsZWN0b3IoZyxhKSl7Yy5wdXNoKGcpO2JyZWFrfWc9Zy5wYXJlbnROb2RlO2lmKCFnfHwhZy5vd25lckRvY3VtZW50fHxnPT09Ynx8Zy5ub2RlVHlwZT09PTExKWJyZWFrfX1jPWMubGVuZ3RoPjE/Zi51bmlxdWUoYyk6YztyZXR1cm4gdGhpcy5wdXNoU3RhY2soYywiY2xvc2VzdCIsYSl9LGluZGV4OmZ1bmN0aW9uKGEpe2lmKCFhKXJldHVybiB0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGU/dGhpcy5wcmV2QWxsKCkubGVuZ3RoOi0xO2lmKHR5cGVvZiBhPT0ic3RyaW5nIilyZXR1cm4gZi5pbkFycmF5KHRoaXNbMF0sZihhKSk7cmV0dXJuIGYuaW5BcnJheShhLmpxdWVyeT9hWzBdOmEsdGhpcyl9LGFkZDpmdW5jdGlvbihhLGIpe3ZhciBjPXR5cGVvZiBhPT0ic3RyaW5nIj9mKGEsYik6Zi5tYWtlQXJyYXkoYSYmYS5ub2RlVHlwZT9bYV06YSksZD1mLm1lcmdlKHRoaXMuZ2V0KCksYyk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKFMoY1swXSl8fFMoZFswXSk/ZDpmLnVuaXF1ZShkKSl9LGFuZFNlbGY6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hZGQodGhpcy5wcmV2T2JqZWN0KX19KSxmLmVhY2goe3BhcmVudDpmdW5jdGlvbihhKXt2YXIgYj1hLnBhcmVudE5vZGU7cmV0dXJuIGImJmIubm9kZVR5cGUhPT0xMT9iOm51bGx9LHBhcmVudHM6ZnVuY3Rpb24oYSl7cmV0dXJuIGYuZGlyKGEsInBhcmVudE5vZGUiKX0scGFyZW50c1VudGlsOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZi5kaXIoYSwicGFyZW50Tm9kZSIsYyl9LG5leHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGYubnRoKGEsMiwibmV4dFNpYmxpbmciKX0scHJldjpmdW5jdGlvbihhKXtyZXR1cm4gZi5udGgoYSwyLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dEFsbDpmdW5jdGlvbihhKXtyZXR1cm4gZi5kaXIoYSwibmV4dFNpYmxpbmciKX0scHJldkFsbDpmdW5jdGlvbihhKXtyZXR1cm4gZi5kaXIoYSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRVbnRpbDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGYuZGlyKGEsIm5leHRTaWJsaW5nIixjKX0scHJldlVudGlsOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZi5kaXIoYSwicHJldmlvdXNTaWJsaW5nIixjKX0sc2libGluZ3M6ZnVuY3Rpb24oYSl7cmV0dXJuIGYuc2libGluZygoYS5wYXJlbnROb2RlfHx7fSkuZmlyc3RDaGlsZCxhKX0sY2hpbGRyZW46ZnVuY3Rpb24oYSl7cmV0dXJuIGYuc2libGluZyhhLmZpcnN0Q2hpbGQpfSxjb250ZW50czpmdW5jdGlvbihhKXtyZXR1cm4gZi5ub2RlTmFtZShhLCJpZnJhbWUiKT9hLmNvbnRlbnREb2N1bWVudHx8YS5jb250ZW50V2luZG93LmRvY3VtZW50OmYubWFrZUFycmF5KGEuY2hpbGROb2Rlcyl9fSxmdW5jdGlvbihhLGIpe2YuZm5bYV09ZnVuY3Rpb24oYyxkKXt2YXIgZT1mLm1hcCh0aGlzLGIsYyk7TC50ZXN0KGEpfHwoZD1jKSxkJiZ0eXBlb2YgZD09InN0cmluZyImJihlPWYuZmlsdGVyKGQsZSkpLGU9dGhpcy5sZW5ndGg+MSYmIVJbYV0/Zi51bmlxdWUoZSk6ZSwodGhpcy5sZW5ndGg+MXx8Ti50ZXN0KGQpKSYmTS50ZXN0KGEpJiYoZT1lLnJldmVyc2UoKSk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGUsYSxQLmNhbGwoYXJndW1lbnRzKS5qb2luKCIsIikpfX0pLGYuZXh0ZW5kKHtmaWx0ZXI6ZnVuY3Rpb24oYSxiLGMpe2MmJihhPSI6bm90KCIrYSsiKSIpO3JldHVybiBiLmxlbmd0aD09PTE/Zi5maW5kLm1hdGNoZXNTZWxlY3RvcihiWzBdLGEpP1tiWzBdXTpbXTpmLmZpbmQubWF0Y2hlcyhhLGIpfSxkaXI6ZnVuY3Rpb24oYSxjLGQpe3ZhciBlPVtdLGc9YVtjXTt3aGlsZShnJiZnLm5vZGVUeXBlIT09OSYmKGQ9PT1ifHxnLm5vZGVUeXBlIT09MXx8IWYoZykuaXMoZCkpKWcubm9kZVR5cGU9PT0xJiZlLnB1c2goZyksZz1nW2NdO3JldHVybiBlfSxudGg6ZnVuY3Rpb24oYSxiLGMsZCl7Yj1ifHwxO3ZhciBlPTA7Zm9yKDthO2E9YVtjXSlpZihhLm5vZGVUeXBlPT09MSYmKytlPT09YilicmVhaztyZXR1cm4gYX0sc2libGluZzpmdW5jdGlvbihhLGIpe3ZhciBjPVtdO2Zvcig7YTthPWEubmV4dFNpYmxpbmcpYS5ub2RlVHlwZT09PTEmJmEhPT1iJiZjLnB1c2goYSk7cmV0dXJuIGN9fSk7dmFyIFY9ImFiYnJ8YXJ0aWNsZXxhc2lkZXxhdWRpb3xiZGl8Y2FudmFzfGRhdGF8ZGF0YWxpc3R8ZGV0YWlsc3xmaWdjYXB0aW9ufGZpZ3VyZXxmb290ZXJ8aGVhZGVyfGhncm91cHxtYXJrfG1ldGVyfG5hdnxvdXRwdXR8cHJvZ3Jlc3N8c2VjdGlvbnxzdW1tYXJ5fHRpbWV8dmlkZW8iLFc9LyBqUXVlcnlcZCs9Iig/OlxkK3xudWxsKSIvZyxYPS9eXHMrLyxZPS88KD8hYXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFtcdzpdKylbXj5dKilcLz4vaWcsWj0vPChbXHc6XSspLywkPS88dGJvZHkvaSxfPS88fCYjP1x3KzsvLGJhPS88KD86c2NyaXB0fHN0eWxlKS9pLGJiPS88KD86c2NyaXB0fG9iamVjdHxlbWJlZHxvcHRpb258c3R5bGUpL2ksYmM9bmV3IFJlZ0V4cCgiPCg/OiIrVisiKVtcXHMvPl0iLCJpIiksYmQ9L2NoZWNrZWRccyooPzpbXj1dfD1ccyouY2hlY2tlZC4pL2ksYmU9L1wvKGphdmF8ZWNtYSlzY3JpcHQvaSxiZj0vXlxzKjwhKD86XFtDREFUQVxbfFwtXC0pLyxiZz17b3B0aW9uOlsxLCI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+IiwiPC9zZWxlY3Q+Il0sbGVnZW5kOlsxLCI8ZmllbGRzZXQ+IiwiPC9maWVsZHNldD4iXSx0aGVhZDpbMSwiPHRhYmxlPiIsIjwvdGFibGU+Il0sdHI6WzIsIjx0YWJsZT48dGJvZHk+IiwiPC90Ym9keT48L3RhYmxlPiJdLHRkOlszLCI8dGFibGU+PHRib2R5Pjx0cj4iLCI8L3RyPjwvdGJvZHk+PC90YWJsZT4iXSxjb2w6WzIsIjx0YWJsZT48dGJvZHk+PC90Ym9keT48Y29sZ3JvdXA+IiwiPC9jb2xncm91cD48L3RhYmxlPiJdLGFyZWE6WzEsIjxtYXA+IiwiPC9tYXA+Il0sX2RlZmF1bHQ6WzAsIiIsIiJdfSxiaD1VKGMpO2JnLm9wdGdyb3VwPWJnLm9wdGlvbixiZy50Ym9keT1iZy50Zm9vdD1iZy5jb2xncm91cD1iZy5jYXB0aW9uPWJnLnRoZWFkLGJnLnRoPWJnLnRkLGYuc3VwcG9ydC5odG1sU2VyaWFsaXplfHwoYmcuX2RlZmF1bHQ9WzEsImRpdjxkaXY+IiwiPC9kaXY+Il0pLGYuZm4uZXh0ZW5kKHt0ZXh0OmZ1bmN0aW9uKGEpe3JldHVybiBmLmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKGEpe3JldHVybiBhPT09Yj9mLnRleHQodGhpcyk6dGhpcy5lbXB0eSgpLmFwcGVuZCgodGhpc1swXSYmdGhpc1swXS5vd25lckRvY3VtZW50fHxjKS5jcmVhdGVUZXh0Tm9kZShhKSl9LG51bGwsYSxhcmd1bWVudHMubGVuZ3RoKX0sd3JhcEFsbDpmdW5jdGlvbihhKXtpZihmLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtmKHRoaXMpLndyYXBBbGwoYS5jYWxsKHRoaXMsYikpfSk7aWYodGhpc1swXSl7dmFyIGI9ZihhLHRoaXNbMF0ub3duZXJEb2N1bWVudCkuZXEoMCkuY2xvbmUoITApO3RoaXNbMF0ucGFyZW50Tm9kZSYmYi5pbnNlcnRCZWZvcmUodGhpc1swXSksYi5tYXAoZnVuY3Rpb24oKXt2YXIgYT10aGlzO3doaWxlKGEuZmlyc3RDaGlsZCYmYS5maXJzdENoaWxkLm5vZGVUeXBlPT09MSlhPWEuZmlyc3RDaGlsZDtyZXR1cm4gYX0pLmFwcGVuZCh0aGlzKX1yZXR1cm4gdGhpc30sd3JhcElubmVyOmZ1bmN0aW9uKGEpe2lmKGYuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe2YodGhpcykud3JhcElubmVyKGEuY2FsbCh0aGlzLGIpKX0pO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYj1mKHRoaXMpLGM9Yi5jb250ZW50cygpO2MubGVuZ3RoP2Mud3JhcEFsbChhKTpiLmFwcGVuZChhKX0pfSx3cmFwOmZ1bmN0aW9uKGEpe3ZhciBiPWYuaXNGdW5jdGlvbihhKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGMpe2YodGhpcykud3JhcEFsbChiP2EuY2FsbCh0aGlzLGMpOmEpfSl9LHVud3JhcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVudCgpLmVhY2goZnVuY3Rpb24oKXtmLm5vZGVOYW1lKHRoaXMsImJvZHkiKXx8Zih0aGlzKS5yZXBsYWNlV2l0aCh0aGlzLmNoaWxkTm9kZXMpfSkuZW5kKCl9LGFwcGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywhMCxmdW5jdGlvbihhKXt0aGlzLm5vZGVUeXBlPT09MSYmdGhpcy5hcHBlbmRDaGlsZChhKX0pfSxwcmVwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCEwLGZ1bmN0aW9uKGEpe3RoaXMubm9kZVR5cGU9PT0xJiZ0aGlzLmluc2VydEJlZm9yZShhLHRoaXMuZmlyc3RDaGlsZCl9KX0sYmVmb3JlOmZ1bmN0aW9uKCl7aWYodGhpc1swXSYmdGhpc1swXS5wYXJlbnROb2RlKXJldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywhMSxmdW5jdGlvbihhKXt0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsdGhpcyl9KTtpZihhcmd1bWVudHMubGVuZ3RoKXt2YXIgYT1mCi5jbGVhbihhcmd1bWVudHMpO2EucHVzaC5hcHBseShhLHRoaXMudG9BcnJheSgpKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soYSwiYmVmb3JlIixhcmd1bWVudHMpfX0sYWZ0ZXI6ZnVuY3Rpb24oKXtpZih0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGUpcmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCExLGZ1bmN0aW9uKGEpe3RoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSx0aGlzLm5leHRTaWJsaW5nKX0pO2lmKGFyZ3VtZW50cy5sZW5ndGgpe3ZhciBhPXRoaXMucHVzaFN0YWNrKHRoaXMsImFmdGVyIixhcmd1bWVudHMpO2EucHVzaC5hcHBseShhLGYuY2xlYW4oYXJndW1lbnRzKSk7cmV0dXJuIGF9fSxyZW1vdmU6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9MCxkOyhkPXRoaXNbY10pIT1udWxsO2MrKylpZighYXx8Zi5maWx0ZXIoYSxbZF0pLmxlbmd0aCkhYiYmZC5ub2RlVHlwZT09PTEmJihmLmNsZWFuRGF0YShkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikpLGYuY2xlYW5EYXRhKFtkXSkpLGQucGFyZW50Tm9kZSYmZC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGQpO3JldHVybiB0aGlzfSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgYT0wLGI7KGI9dGhpc1thXSkhPW51bGw7YSsrKXtiLm5vZGVUeXBlPT09MSYmZi5jbGVhbkRhdGEoYi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpKTt3aGlsZShiLmZpcnN0Q2hpbGQpYi5yZW1vdmVDaGlsZChiLmZpcnN0Q2hpbGQpfXJldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbihhLGIpe2E9YT09bnVsbD8hMTphLGI9Yj09bnVsbD9hOmI7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIGYuY2xvbmUodGhpcyxhLGIpfSl9LGh0bWw6ZnVuY3Rpb24oYSl7cmV0dXJuIGYuYWNjZXNzKHRoaXMsZnVuY3Rpb24oYSl7dmFyIGM9dGhpc1swXXx8e30sZD0wLGU9dGhpcy5sZW5ndGg7aWYoYT09PWIpcmV0dXJuIGMubm9kZVR5cGU9PT0xP2MuaW5uZXJIVE1MLnJlcGxhY2UoVywiIik6bnVsbDtpZih0eXBlb2YgYT09InN0cmluZyImJiFiYS50ZXN0KGEpJiYoZi5zdXBwb3J0LmxlYWRpbmdXaGl0ZXNwYWNlfHwhWC50ZXN0KGEpKSYmIWJnWyhaLmV4ZWMoYSl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCldKXthPWEucmVwbGFjZShZLCI8JDE+PC8kMj4iKTt0cnl7Zm9yKDtkPGU7ZCsrKWM9dGhpc1tkXXx8e30sYy5ub2RlVHlwZT09PTEmJihmLmNsZWFuRGF0YShjLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikpLGMuaW5uZXJIVE1MPWEpO2M9MH1jYXRjaChnKXt9fWMmJnRoaXMuZW1wdHkoKS5hcHBlbmQoYSl9LG51bGwsYSxhcmd1bWVudHMubGVuZ3RoKX0scmVwbGFjZVdpdGg6ZnVuY3Rpb24oYSl7aWYodGhpc1swXSYmdGhpc1swXS5wYXJlbnROb2RlKXtpZihmLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXt2YXIgYz1mKHRoaXMpLGQ9Yy5odG1sKCk7Yy5yZXBsYWNlV2l0aChhLmNhbGwodGhpcyxiLGQpKX0pO3R5cGVvZiBhIT0ic3RyaW5nIiYmKGE9ZihhKS5kZXRhY2goKSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPXRoaXMubmV4dFNpYmxpbmcsYz10aGlzLnBhcmVudE5vZGU7Zih0aGlzKS5yZW1vdmUoKSxiP2YoYikuYmVmb3JlKGEpOmYoYykuYXBwZW5kKGEpfSl9cmV0dXJuIHRoaXMubGVuZ3RoP3RoaXMucHVzaFN0YWNrKGYoZi5pc0Z1bmN0aW9uKGEpP2EoKTphKSwicmVwbGFjZVdpdGgiLGEpOnRoaXN9LGRldGFjaDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5yZW1vdmUoYSwhMCl9LGRvbU1hbmlwOmZ1bmN0aW9uKGEsYyxkKXt2YXIgZSxnLGgsaSxqPWFbMF0saz1bXTtpZighZi5zdXBwb3J0LmNoZWNrQ2xvbmUmJmFyZ3VtZW50cy5sZW5ndGg9PT0zJiZ0eXBlb2Ygaj09InN0cmluZyImJmJkLnRlc3QoaikpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2YodGhpcykuZG9tTWFuaXAoYSxjLGQsITApfSk7aWYoZi5pc0Z1bmN0aW9uKGopKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oZSl7dmFyIGc9Zih0aGlzKTthWzBdPWouY2FsbCh0aGlzLGUsYz9nLmh0bWwoKTpiKSxnLmRvbU1hbmlwKGEsYyxkKX0pO2lmKHRoaXNbMF0pe2k9aiYmai5wYXJlbnROb2RlLGYuc3VwcG9ydC5wYXJlbnROb2RlJiZpJiZpLm5vZGVUeXBlPT09MTEmJmkuY2hpbGROb2Rlcy5sZW5ndGg9PT10aGlzLmxlbmd0aD9lPXtmcmFnbWVudDppfTplPWYuYnVpbGRGcmFnbWVudChhLHRoaXMsayksaD1lLmZyYWdtZW50LGguY2hpbGROb2Rlcy5sZW5ndGg9PT0xP2c9aD1oLmZpcnN0Q2hpbGQ6Zz1oLmZpcnN0Q2hpbGQ7aWYoZyl7Yz1jJiZmLm5vZGVOYW1lKGcsInRyIik7Zm9yKHZhciBsPTAsbT10aGlzLmxlbmd0aCxuPW0tMTtsPG07bCsrKWQuY2FsbChjP2JpKHRoaXNbbF0sZyk6dGhpc1tsXSxlLmNhY2hlYWJsZXx8bT4xJiZsPG4/Zi5jbG9uZShoLCEwLCEwKTpoKX1rLmxlbmd0aCYmZi5lYWNoKGssZnVuY3Rpb24oYSxiKXtiLnNyYz9mLmFqYXgoe3R5cGU6IkdFVCIsZ2xvYmFsOiExLHVybDpiLnNyYyxhc3luYzohMSxkYXRhVHlwZToic2NyaXB0In0pOmYuZ2xvYmFsRXZhbCgoYi50ZXh0fHxiLnRleHRDb250ZW50fHxiLmlubmVySFRNTHx8IiIpLnJlcGxhY2UoYmYsIi8qJDAqLyIpKSxiLnBhcmVudE5vZGUmJmIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChiKX0pfXJldHVybiB0aGlzfX0pLGYuYnVpbGRGcmFnbWVudD1mdW5jdGlvbihhLGIsZCl7dmFyIGUsZyxoLGksaj1hWzBdO2ImJmJbMF0mJihpPWJbMF0ub3duZXJEb2N1bWVudHx8YlswXSksaS5jcmVhdGVEb2N1bWVudEZyYWdtZW50fHwoaT1jKSxhLmxlbmd0aD09PTEmJnR5cGVvZiBqPT0ic3RyaW5nIiYmai5sZW5ndGg8NTEyJiZpPT09YyYmai5jaGFyQXQoMCk9PT0iPCImJiFiYi50ZXN0KGopJiYoZi5zdXBwb3J0LmNoZWNrQ2xvbmV8fCFiZC50ZXN0KGopKSYmKGYuc3VwcG9ydC5odG1sNUNsb25lfHwhYmMudGVzdChqKSkmJihnPSEwLGg9Zi5mcmFnbWVudHNbal0saCYmaCE9PTEmJihlPWgpKSxlfHwoZT1pLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxmLmNsZWFuKGEsaSxlLGQpKSxnJiYoZi5mcmFnbWVudHNbal09aD9lOjEpO3JldHVybntmcmFnbWVudDplLGNhY2hlYWJsZTpnfX0sZi5mcmFnbWVudHM9e30sZi5lYWNoKHthcHBlbmRUbzoiYXBwZW5kIixwcmVwZW5kVG86InByZXBlbmQiLGluc2VydEJlZm9yZToiYmVmb3JlIixpbnNlcnRBZnRlcjoiYWZ0ZXIiLHJlcGxhY2VBbGw6InJlcGxhY2VXaXRoIn0sZnVuY3Rpb24oYSxiKXtmLmZuW2FdPWZ1bmN0aW9uKGMpe3ZhciBkPVtdLGU9ZihjKSxnPXRoaXMubGVuZ3RoPT09MSYmdGhpc1swXS5wYXJlbnROb2RlO2lmKGcmJmcubm9kZVR5cGU9PT0xMSYmZy5jaGlsZE5vZGVzLmxlbmd0aD09PTEmJmUubGVuZ3RoPT09MSl7ZVtiXSh0aGlzWzBdKTtyZXR1cm4gdGhpc31mb3IodmFyIGg9MCxpPWUubGVuZ3RoO2g8aTtoKyspe3ZhciBqPShoPjA/dGhpcy5jbG9uZSghMCk6dGhpcykuZ2V0KCk7ZihlW2hdKVtiXShqKSxkPWQuY29uY2F0KGopfXJldHVybiB0aGlzLnB1c2hTdGFjayhkLGEsZS5zZWxlY3Rvcil9fSksZi5leHRlbmQoe2Nsb25lOmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGcsaD1mLnN1cHBvcnQuaHRtbDVDbG9uZXx8Zi5pc1hNTERvYyhhKXx8IWJjLnRlc3QoIjwiK2Eubm9kZU5hbWUrIj4iKT9hLmNsb25lTm9kZSghMCk6Ym8oYSk7aWYoKCFmLnN1cHBvcnQubm9DbG9uZUV2ZW50fHwhZi5zdXBwb3J0Lm5vQ2xvbmVDaGVja2VkKSYmKGEubm9kZVR5cGU9PT0xfHxhLm5vZGVUeXBlPT09MTEpJiYhZi5pc1hNTERvYyhhKSl7YmsoYSxoKSxkPWJsKGEpLGU9YmwoaCk7Zm9yKGc9MDtkW2ddOysrZyllW2ddJiZiayhkW2ddLGVbZ10pfWlmKGIpe2JqKGEsaCk7aWYoYyl7ZD1ibChhKSxlPWJsKGgpO2ZvcihnPTA7ZFtnXTsrK2cpYmooZFtnXSxlW2ddKX19ZD1lPW51bGw7cmV0dXJuIGh9LGNsZWFuOmZ1bmN0aW9uKGEsYixkLGUpe3ZhciBnLGgsaSxqPVtdO2I9Ynx8Yyx0eXBlb2YgYi5jcmVhdGVFbGVtZW50PT0idW5kZWZpbmVkIiYmKGI9Yi5vd25lckRvY3VtZW50fHxiWzBdJiZiWzBdLm93bmVyRG9jdW1lbnR8fGMpO2Zvcih2YXIgaz0wLGw7KGw9YVtrXSkhPW51bGw7aysrKXt0eXBlb2YgbD09Im51bWJlciImJihsKz0iIik7aWYoIWwpY29udGludWU7aWYodHlwZW9mIGw9PSJzdHJpbmciKWlmKCFfLnRlc3QobCkpbD1iLmNyZWF0ZVRleHROb2RlKGwpO2Vsc2V7bD1sLnJlcGxhY2UoWSwiPCQxPjwvJDI+Iik7dmFyIG09KFouZXhlYyhsKXx8WyIiLCIiXSlbMV0udG9Mb3dlckNhc2UoKSxuPWJnW21dfHxiZy5fZGVmYXVsdCxvPW5bMF0scD1iLmNyZWF0ZUVsZW1lbnQoImRpdiIpLHE9YmguY2hpbGROb2RlcyxyO2I9PT1jP2JoLmFwcGVuZENoaWxkKHApOlUoYikuYXBwZW5kQ2hpbGQocCkscC5pbm5lckhUTUw9blsxXStsK25bMl07d2hpbGUoby0tKXA9cC5sYXN0Q2hpbGQ7aWYoIWYuc3VwcG9ydC50Ym9keSl7dmFyIHM9JC50ZXN0KGwpLHQ9bT09PSJ0YWJsZSImJiFzP3AuZmlyc3RDaGlsZCYmcC5maXJzdENoaWxkLmNoaWxkTm9kZXM6blsxXT09PSI8dGFibGU+IiYmIXM/cC5jaGlsZE5vZGVzOltdO2ZvcihpPXQubGVuZ3RoLTE7aT49MDstLWkpZi5ub2RlTmFtZSh0W2ldLCJ0Ym9keSIpJiYhdFtpXS5jaGlsZE5vZGVzLmxlbmd0aCYmdFtpXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRbaV0pfSFmLnN1cHBvcnQubGVhZGluZ1doaXRlc3BhY2UmJlgudGVzdChsKSYmcC5pbnNlcnRCZWZvcmUoYi5jcmVhdGVUZXh0Tm9kZShYLmV4ZWMobClbMF0pLHAuZmlyc3RDaGlsZCksbD1wLmNoaWxkTm9kZXMscCYmKHAucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChwKSxxLmxlbmd0aD4wJiYocj1xW3EubGVuZ3RoLTFdLHImJnIucGFyZW50Tm9kZSYmci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHIpKSl9dmFyIHU7aWYoIWYuc3VwcG9ydC5hcHBlbmRDaGVja2VkKWlmKGxbMF0mJnR5cGVvZiAodT1sLmxlbmd0aCk9PSJudW1iZXIiKWZvcihpPTA7aTx1O2krKylibihsW2ldKTtlbHNlIGJuKGwpO2wubm9kZVR5cGU/ai5wdXNoKGwpOmo9Zi5tZXJnZShqLGwpfWlmKGQpe2c9ZnVuY3Rpb24oYSl7cmV0dXJuIWEudHlwZXx8YmUudGVzdChhLnR5cGUpfTtmb3Ioaz0wO2pba107aysrKXtoPWpba107aWYoZSYmZi5ub2RlTmFtZShoLCJzY3JpcHQiKSYmKCFoLnR5cGV8fGJlLnRlc3QoaC50eXBlKSkpZS5wdXNoKGgucGFyZW50Tm9kZT9oLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaCk6aCk7ZWxzZXtpZihoLm5vZGVUeXBlPT09MSl7dmFyIHY9Zi5ncmVwKGguZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNjcmlwdCIpLGcpO2ouc3BsaWNlLmFwcGx5KGosW2srMSwwXS5jb25jYXQodikpfWQuYXBwZW5kQ2hpbGQoaCl9fX1yZXR1cm4gan0sY2xlYW5EYXRhOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZD1mLmNhY2hlLGU9Zi5ldmVudC5zcGVjaWFsLGc9Zi5zdXBwb3J0LmRlbGV0ZUV4cGFuZG87Zm9yKHZhciBoPTAsaTsoaT1hW2hdKSE9bnVsbDtoKyspe2lmKGkubm9kZU5hbWUmJmYubm9EYXRhW2kubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0pY29udGludWU7Yz1pW2YuZXhwYW5kb107aWYoYyl7Yj1kW2NdO2lmKGImJmIuZXZlbnRzKXtmb3IodmFyIGogaW4gYi5ldmVudHMpZVtqXT9mLmV2ZW50LnJlbW92ZShpLGopOmYucmVtb3ZlRXZlbnQoaSxqLGIuaGFuZGxlKTtiLmhhbmRsZSYmKGIuaGFuZGxlLmVsZW09bnVsbCl9Zz9kZWxldGUgaVtmLmV4cGFuZG9dOmkucmVtb3ZlQXR0cmlidXRlJiZpLnJlbW92ZUF0dHJpYnV0ZShmLmV4cGFuZG8pLGRlbGV0ZSBkW2NdfX19fSk7dmFyIGJwPS9hbHBoYVwoW14pXSpcKS9pLGJxPS9vcGFjaXR5PShbXildKikvLGJyPS8oW0EtWl18Xm1zKS9nLGJzPS9eW1wtK10/KD86XGQqXC4pP1xkKyQvaSxidD0vXi0/KD86XGQqXC4pP1xkKyg/IXB4KVteXGRcc10rJC9pLGJ1PS9eKFtcLStdKT0oW1wtKy5cZGVdKykvLGJ2PS9ebWFyZ2luLyxidz17cG9zaXRpb246ImFic29sdXRlIix2aXNpYmlsaXR5OiJoaWRkZW4iLGRpc3BsYXk6ImJsb2NrIn0sYng9WyJUb3AiLCJSaWdodCIsIkJvdHRvbSIsIkxlZnQiXSxieSxieixiQTtmLmZuLmNzcz1mdW5jdGlvbihhLGMpe3JldHVybiBmLmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKGEsYyxkKXtyZXR1cm4gZCE9PWI/Zi5zdHlsZShhLGMsZCk6Zi5jc3MoYSxjKX0sYSxjLGFyZ3VtZW50cy5sZW5ndGg+MSl9LGYuZXh0ZW5kKHtjc3NIb29rczp7b3BhY2l0eTp7Z2V0OmZ1bmN0aW9uKGEsYil7aWYoYil7dmFyIGM9YnkoYSwib3BhY2l0eSIpO3JldHVybiBjPT09IiI/IjEiOmN9cmV0dXJuIGEuc3R5bGUub3BhY2l0eX19fSxjc3NOdW1iZXI6e2ZpbGxPcGFjaXR5OiEwLGZvbnRXZWlnaHQ6ITAsbGluZUhlaWdodDohMCxvcGFjaXR5OiEwLG9ycGhhbnM6ITAsd2lkb3dzOiEwLHpJbmRleDohMCx6b29tOiEwfSxjc3NQcm9wczp7ImZsb2F0IjpmLnN1cHBvcnQuY3NzRmxvYXQ/ImNzc0Zsb2F0Ijoic3R5bGVGbG9hdCJ9LHN0eWxlOmZ1bmN0aW9uKGEsYyxkLGUpe2lmKCEhYSYmYS5ub2RlVHlwZSE9PTMmJmEubm9kZVR5cGUhPT04JiYhIWEuc3R5bGUpe3ZhciBnLGgsaT1mLmNhbWVsQ2FzZShjKSxqPWEuc3R5bGUsaz1mLmNzc0hvb2tzW2ldO2M9Zi5jc3NQcm9wc1tpXXx8aTtpZihkPT09Yil7aWYoayYmImdldCJpbiBrJiYoZz1rLmdldChhLCExLGUpKSE9PWIpcmV0dXJuIGc7cmV0dXJuIGpbY119aD10eXBlb2YgZCxoPT09InN0cmluZyImJihnPWJ1LmV4ZWMoZCkpJiYoZD0rKGdbMV0rMSkqK2dbMl0rcGFyc2VGbG9hdChmLmNzcyhhLGMpKSxoPSJudW1iZXIiKTtpZihkPT1udWxsfHxoPT09Im51bWJlciImJmlzTmFOKGQpKXJldHVybjtoPT09Im51bWJlciImJiFmLmNzc051bWJlcltpXSYmKGQrPSJweCIpO2lmKCFrfHwhKCJzZXQiaW4gayl8fChkPWsuc2V0KGEsZCkpIT09Yil0cnl7altjXT1kfWNhdGNoKGwpe319fSxjc3M6ZnVuY3Rpb24oYSxjLGQpe3ZhciBlLGc7Yz1mLmNhbWVsQ2FzZShjKSxnPWYuY3NzSG9va3NbY10sYz1mLmNzc1Byb3BzW2NdfHxjLGM9PT0iY3NzRmxvYXQiJiYoYz0iZmxvYXQiKTtpZihnJiYiZ2V0ImluIGcmJihlPWcuZ2V0KGEsITAsZCkpIT09YilyZXR1cm4gZTtpZihieSlyZXR1cm4gYnkoYSxjKX0sc3dhcDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9e30sZSxmO2ZvcihmIGluIGIpZFtmXT1hLnN0eWxlW2ZdLGEuc3R5bGVbZl09YltmXTtlPWMuY2FsbChhKTtmb3IoZiBpbiBiKWEuc3R5bGVbZl09ZFtmXTtyZXR1cm4gZX19KSxmLmN1ckNTUz1mLmNzcyxjLmRlZmF1bHRWaWV3JiZjLmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUmJihiej1mdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxnLGg9YS5zdHlsZTtiPWIucmVwbGFjZShiciwiLSQxIikudG9Mb3dlckNhc2UoKSwoZD1hLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcpJiYoZT1kLmdldENvbXB1dGVkU3R5bGUoYSxudWxsKSkmJihjPWUuZ2V0UHJvcGVydHlWYWx1ZShiKSxjPT09IiImJiFmLmNvbnRhaW5zKGEub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsYSkmJihjPWYuc3R5bGUoYSxiKSkpLCFmLnN1cHBvcnQucGl4ZWxNYXJnaW4mJmUmJmJ2LnRlc3QoYikmJmJ0LnRlc3QoYykmJihnPWgud2lkdGgsaC53aWR0aD1jLGM9ZS53aWR0aCxoLndpZHRoPWcpO3JldHVybiBjfSksYy5kb2N1bWVudEVsZW1lbnQuY3VycmVudFN0eWxlJiYoYkE9ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGUsZj1hLmN1cnJlbnRTdHlsZSYmYS5jdXJyZW50U3R5bGVbYl0sZz1hLnN0eWxlO2Y9PW51bGwmJmcmJihlPWdbYl0pJiYoZj1lKSxidC50ZXN0KGYpJiYoYz1nLmxlZnQsZD1hLnJ1bnRpbWVTdHlsZSYmYS5ydW50aW1lU3R5bGUubGVmdCxkJiYoYS5ydW50aW1lU3R5bGUubGVmdD1hLmN1cnJlbnRTdHlsZS5sZWZ0KSxnLmxlZnQ9Yj09PSJmb250U2l6ZSI/IjFlbSI6ZixmPWcucGl4ZWxMZWZ0KyJweCIsZy5sZWZ0PWMsZCYmKGEucnVudGltZVN0eWxlLmxlZnQ9ZCkpO3JldHVybiBmPT09IiI/ImF1dG8iOmZ9KSxieT1ienx8YkEsZi5lYWNoKFsiaGVpZ2h0Iiwid2lkdGgiXSxmdW5jdGlvbihhLGIpe2YuY3NzSG9va3NbYl09e2dldDpmdW5jdGlvbihhLGMsZCl7aWYoYylyZXR1cm4gYS5vZmZzZXRXaWR0aCE9PTA/YkIoYSxiLGQpOmYuc3dhcChhLGJ3LGZ1bmN0aW9uKCl7cmV0dXJuIGJCKGEsYixkKX0pfSxzZXQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYnMudGVzdChiKT9iKyJweCI6Yn19fSksZi5zdXBwb3J0Lm9wYWNpdHl8fChmLmNzc0hvb2tzLm9wYWNpdHk9e2dldDpmdW5jdGlvbihhLGIpe3JldHVybiBicS50ZXN0KChiJiZhLmN1cnJlbnRTdHlsZT9hLmN1cnJlbnRTdHlsZS5maWx0ZXI6YS5zdHlsZS5maWx0ZXIpfHwiIik/cGFyc2VGbG9hdChSZWdFeHAuJDEpLzEwMCsiIjpiPyIxIjoiIn0sc2V0OmZ1bmN0aW9uKGEsYil7dmFyIGM9YS5zdHlsZSxkPWEuY3VycmVudFN0eWxlLGU9Zi5pc051bWVyaWMoYik/ImFscGhhKG9wYWNpdHk9IitiKjEwMCsiKSI6IiIsZz1kJiZkLmZpbHRlcnx8Yy5maWx0ZXJ8fCIiO2Muem9vbT0xO2lmKGI+PTEmJmYudHJpbShnLnJlcGxhY2UoYnAsIiIpKT09PSIiKXtjLnJlbW92ZUF0dHJpYnV0ZSgiZmlsdGVyIik7aWYoZCYmIWQuZmlsdGVyKXJldHVybn1jLmZpbHRlcj1icC50ZXN0KGcpP2cucmVwbGFjZShicCxlKTpnKyIgIitlfX0pLGYoZnVuY3Rpb24oKXtmLnN1cHBvcnQucmVsaWFibGVNYXJnaW5SaWdodHx8KGYuY3NzSG9va3MubWFyZ2luUmlnaHQ9e2dldDpmdW5jdGlvbihhLGIpe3JldHVybiBmLnN3YXAoYSx7ZGlzcGxheToiaW5saW5lLWJsb2NrIn0sZnVuY3Rpb24oKXtyZXR1cm4gYj9ieShhLCJtYXJnaW4tcmlnaHQiKTphLnN0eWxlLm1hcmdpblJpZ2h0fSl9fSl9KSxmLmV4cHImJmYuZXhwci5maWx0ZXJzJiYoZi5leHByLmZpbHRlcnMuaGlkZGVuPWZ1bmN0aW9uKGEpe3ZhciBiPWEub2Zmc2V0V2lkdGgsYz1hLm9mZnNldEhlaWdodDtyZXR1cm4gYj09PTAmJmM9PT0wfHwhZi5zdXBwb3J0LnJlbGlhYmxlSGlkZGVuT2Zmc2V0cyYmKGEuc3R5bGUmJmEuc3R5bGUuZGlzcGxheXx8Zi5jc3MoYSwiZGlzcGxheSIpKT09PSJub25lIn0sZi5leHByLmZpbHRlcnMudmlzaWJsZT1mdW5jdGlvbihhKXtyZXR1cm4hZi5leHByLmZpbHRlcnMuaGlkZGVuKGEpfSksZi5lYWNoKHttYXJnaW46IiIscGFkZGluZzoiIixib3JkZXI6IldpZHRoIn0sZnVuY3Rpb24oYSxiKXtmLmNzc0hvb2tzW2ErYl09e2V4cGFuZDpmdW5jdGlvbihjKXt2YXIgZCxlPXR5cGVvZiBjPT0ic3RyaW5nIj9jLnNwbGl0KCIgIik6W2NdLGY9e307Zm9yKGQ9MDtkPDQ7ZCsrKWZbYStieFtkXStiXT1lW2RdfHxlW2QtMl18fGVbMF07cmV0dXJuIGZ9fX0pO3ZhciBiQz0vJTIwL2csYkQ9L1xbXF0kLyxiRT0vXHI/XG4vZyxiRj0vIy4qJC8sYkc9L14oLio/KTpbIFx0XSooW15cclxuXSopXHI/JC9tZyxiSD0vXig/OmNvbG9yfGRhdGV8ZGF0ZXRpbWV8ZGF0ZXRpbWUtbG9jYWx8ZW1haWx8aGlkZGVufG1vbnRofG51bWJlcnxwYXNzd29yZHxyYW5nZXxzZWFyY2h8dGVsfHRleHR8dGltZXx1cmx8d2VlaykkL2ksYkk9L14oPzphYm91dHxhcHB8YXBwXC1zdG9yYWdlfC4rXC1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLyxiSj0vXig/OkdFVHxIRUFEKSQvLGJLPS9eXC9cLy8sYkw9L1w/LyxiTT0vPHNjcmlwdFxiW148XSooPzooPyE8XC9zY3JpcHQ+KTxbXjxdKikqPFwvc2NyaXB0Pi9naSxiTj0vXig/OnNlbGVjdHx0ZXh0YXJlYSkvaSxiTz0vXHMrLyxiUD0vKFs/Jl0pXz1bXiZdKi8sYlE9L14oW1x3XCtcLlwtXSs6KSg/OlwvXC8oW15cLz8jOl0qKSg/OjooXGQrKSk/KT8vLGJSPWYuZm4ubG9hZCxiUz17fSxiVD17fSxiVSxiVixiVz1bIiovIl0rWyIqIl07dHJ5e2JVPWUuaHJlZn1jYXRjaChiWCl7YlU9Yy5jcmVhdGVFbGVtZW50KCJhIiksYlUuaHJlZj0iIixiVT1iVS5ocmVmfWJWPWJRLmV4ZWMoYlUudG9Mb3dlckNhc2UoKSl8fFtdLGYuZm4uZXh0ZW5kKHtsb2FkOmZ1bmN0aW9uKGEsYyxkKXtpZih0eXBlb2YgYSE9InN0cmluZyImJmJSKXJldHVybiBiUi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoIXRoaXMubGVuZ3RoKXJldHVybiB0aGlzO3ZhciBlPWEuaW5kZXhPZigiICIpO2lmKGU+PTApe3ZhciBnPWEuc2xpY2UoZSxhLmxlbmd0aCk7YT1hLnNsaWNlKDAsZSl9dmFyIGg9IkdFVCI7YyYmKGYuaXNGdW5jdGlvbihjKT8oZD1jLGM9Yik6dHlwZW9mIGM9PSJvYmplY3QiJiYoYz1mLnBhcmFtKGMsZi5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWwpLGg9IlBPU1QiKSk7dmFyIGk9dGhpcztmLmFqYXgoe3VybDphLHR5cGU6aCxkYXRhVHlwZToiaHRtbCIsZGF0YTpjLGNvbXBsZXRlOmZ1bmN0aW9uKGEsYixjKXtjPWEucmVzcG9uc2VUZXh0LGEuaXNSZXNvbHZlZCgpJiYoYS5kb25lKGZ1bmN0aW9uKGEpe2M9YX0pLGkuaHRtbChnP2YoIjxkaXY+IikuYXBwZW5kKGMucmVwbGFjZShiTSwiIikpLmZpbmQoZyk6YykpLGQmJmkuZWFjaChkLFtjLGIsYV0pfX0pO3JldHVybiB0aGlzfSxzZXJpYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gZi5wYXJhbSh0aGlzLnNlcmlhbGl6ZUFycmF5KCkpfSxzZXJpYWxpemVBcnJheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3JldHVybiB0aGlzLmVsZW1lbnRzP2YubWFrZUFycmF5KHRoaXMuZWxlbWVudHMpOnRoaXN9KS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uYW1lJiYhdGhpcy5kaXNhYmxlZCYmKHRoaXMuY2hlY2tlZHx8Yk4udGVzdCh0aGlzLm5vZGVOYW1lKXx8YkgudGVzdCh0aGlzLnR5cGUpKX0pLm1hcChmdW5jdGlvbihhLGIpe3ZhciBjPWYodGhpcykudmFsKCk7cmV0dXJuIGM9PW51bGw/bnVsbDpmLmlzQXJyYXkoYyk/Zi5tYXAoYyxmdW5jdGlvbihhLGMpe3JldHVybntuYW1lOmIubmFtZSx2YWx1ZTphLnJlcGxhY2UoYkUsIlxyXG4iKX19KTp7bmFtZTpiLm5hbWUsdmFsdWU6Yy5yZXBsYWNlKGJFLCJcclxuIil9fSkuZ2V0KCl9fSksZi5lYWNoKCJhamF4U3RhcnQgYWpheFN0b3AgYWpheENvbXBsZXRlIGFqYXhFcnJvciBhamF4U3VjY2VzcyBhamF4U2VuZCIuc3BsaXQoIiAiKSxmdW5jdGlvbihhLGIpe2YuZm5bYl09ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMub24oYixhKX19KSxmLmVhY2goWyJnZXQiLCJwb3N0Il0sZnVuY3Rpb24oYSxjKXtmW2NdPWZ1bmN0aW9uKGEsZCxlLGcpe2YuaXNGdW5jdGlvbihkKSYmKGc9Z3x8ZSxlPWQsZD1iKTtyZXR1cm4gZi5hamF4KHt0eXBlOmMsdXJsOmEsZGF0YTpkLHN1Y2Nlc3M6ZSxkYXRhVHlwZTpnfSl9fSksZi5leHRlbmQoe2dldFNjcmlwdDpmdW5jdGlvbihhLGMpe3JldHVybiBmLmdldChhLGIsYywic2NyaXB0Iil9LGdldEpTT046ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBmLmdldChhLGIsYywianNvbiIpfSxhamF4U2V0dXA6ZnVuY3Rpb24oYSxiKXtiP2IkKGEsZi5hamF4U2V0dGluZ3MpOihiPWEsYT1mLmFqYXhTZXR0aW5ncyksYiQoYSxiKTtyZXR1cm4gYX0sYWpheFNldHRpbmdzOnt1cmw6YlUsaXNMb2NhbDpiSS50ZXN0KGJWWzFdKSxnbG9iYWw6ITAsdHlwZToiR0VUIixjb250ZW50VHlwZToiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04Iixwcm9jZXNzRGF0YTohMCxhc3luYzohMCxhY2NlcHRzOnt4bWw6ImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwiLGh0bWw6InRleHQvaHRtbCIsdGV4dDoidGV4dC9wbGFpbiIsanNvbjoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0IiwiKiI6Yld9LGNvbnRlbnRzOnt4bWw6L3htbC8saHRtbDovaHRtbC8sanNvbjovanNvbi99LHJlc3BvbnNlRmllbGRzOnt4bWw6InJlc3BvbnNlWE1MIix0ZXh0OiJyZXNwb25zZVRleHQifSxjb252ZXJ0ZXJzOnsiKiB0ZXh0IjphLlN0cmluZywidGV4dCBodG1sIjohMCwidGV4dCBqc29uIjpmLnBhcnNlSlNPTiwidGV4dCB4bWwiOmYucGFyc2VYTUx9LGZsYXRPcHRpb25zOntjb250ZXh0OiEwLHVybDohMH19LGFqYXhQcmVmaWx0ZXI6YlkoYlMpLGFqYXhUcmFuc3BvcnQ6YlkoYlQpLGFqYXg6ZnVuY3Rpb24oYSxjKXtmdW5jdGlvbiB3KGEsYyxsLG0pe2lmKHMhPT0yKXtzPTIscSYmY2xlYXJUaW1lb3V0KHEpLHA9YixuPW18fCIiLHYucmVhZHlTdGF0ZT1hPjA/NDowO3ZhciBvLHIsdSx3PWMseD1sP2NhKGQsdixsKTpiLHksejtpZihhPj0yMDAmJmE8MzAwfHxhPT09MzA0KXtpZihkLmlmTW9kaWZpZWQpe2lmKHk9di5nZXRSZXNwb25zZUhlYWRlcigiTGFzdC1Nb2RpZmllZCIpKWYubGFzdE1vZGlmaWVkW2tdPXk7aWYoej12LmdldFJlc3BvbnNlSGVhZGVyKCJFdGFnIikpZi5ldGFnW2tdPXp9aWYoYT09PTMwNCl3PSJub3Rtb2RpZmllZCIsbz0hMDtlbHNlIHRyeXtyPWNiKGQseCksdz0ic3VjY2VzcyIsbz0hMH1jYXRjaChBKXt3PSJwYXJzZXJlcnJvciIsdT1BfX1lbHNle3U9dztpZighd3x8YSl3PSJlcnJvciIsYTwwJiYoYT0wKX12LnN0YXR1cz1hLHYuc3RhdHVzVGV4dD0iIisoY3x8dyksbz9oLnJlc29sdmVXaXRoKGUsW3Isdyx2XSk6aC5yZWplY3RXaXRoKGUsW3Ysdyx1XSksdi5zdGF0dXNDb2RlKGopLGo9Yix0JiZnLnRyaWdnZXIoImFqYXgiKyhvPyJTdWNjZXNzIjoiRXJyb3IiKSxbdixkLG8/cjp1XSksaS5maXJlV2l0aChlLFt2LHddKSx0JiYoZy50cmlnZ2VyKCJhamF4Q29tcGxldGUiLFt2LGRdKSwtLWYuYWN0aXZlfHxmLmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIikpfX10eXBlb2YgYT09Im9iamVjdCImJihjPWEsYT1iKSxjPWN8fHt9O3ZhciBkPWYuYWpheFNldHVwKHt9LGMpLGU9ZC5jb250ZXh0fHxkLGc9ZSE9PWQmJihlLm5vZGVUeXBlfHxlIGluc3RhbmNlb2YgZik/ZihlKTpmLmV2ZW50LGg9Zi5EZWZlcnJlZCgpLGk9Zi5DYWxsYmFja3MoIm9uY2UgbWVtb3J5Iiksaj1kLnN0YXR1c0NvZGV8fHt9LGssbD17fSxtPXt9LG4sbyxwLHEscixzPTAsdCx1LHY9e3JlYWR5U3RhdGU6MCxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKGEsYil7aWYoIXMpe3ZhciBjPWEudG9Mb3dlckNhc2UoKTthPW1bY109bVtjXXx8YSxsW2FdPWJ9cmV0dXJuIHRoaXN9LGdldEFsbFJlc3BvbnNlSGVhZGVyczpmdW5jdGlvbigpe3JldHVybiBzPT09Mj9uOm51bGx9LGdldFJlc3BvbnNlSGVhZGVyOmZ1bmN0aW9uKGEpe3ZhciBjO2lmKHM9PT0yKXtpZighbyl7bz17fTt3aGlsZShjPWJHLmV4ZWMobikpb1tjWzFdLnRvTG93ZXJDYXNlKCldPWNbMl19Yz1vW2EudG9Mb3dlckNhc2UoKV19cmV0dXJuIGM9PT1iP251bGw6Y30sb3ZlcnJpZGVNaW1lVHlwZTpmdW5jdGlvbihhKXtzfHwoZC5taW1lVHlwZT1hKTtyZXR1cm4gdGhpc30sYWJvcnQ6ZnVuY3Rpb24oYSl7YT1hfHwiYWJvcnQiLHAmJnAuYWJvcnQoYSksdygwLGEpO3JldHVybiB0aGlzfX07aC5wcm9taXNlKHYpLHYuc3VjY2Vzcz12LmRvbmUsdi5lcnJvcj12LmZhaWwsdi5jb21wbGV0ZT1pLmFkZCx2LnN0YXR1c0NvZGU9ZnVuY3Rpb24oYSl7aWYoYSl7dmFyIGI7aWYoczwyKWZvcihiIGluIGEpaltiXT1baltiXSxhW2JdXTtlbHNlIGI9YVt2LnN0YXR1c10sdi50aGVuKGIsYil9cmV0dXJuIHRoaXN9LGQudXJsPSgoYXx8ZC51cmwpKyIiKS5yZXBsYWNlKGJGLCIiKS5yZXBsYWNlKGJLLGJWWzFdKyIvLyIpLGQuZGF0YVR5cGVzPWYudHJpbShkLmRhdGFUeXBlfHwiKiIpLnRvTG93ZXJDYXNlKCkuc3BsaXQoYk8pLGQuY3Jvc3NEb21haW49PW51bGwmJihyPWJRLmV4ZWMoZC51cmwudG9Mb3dlckNhc2UoKSksZC5jcm9zc0RvbWFpbj0hKCFyfHxyWzFdPT1iVlsxXSYmclsyXT09YlZbMl0mJihyWzNdfHwoclsxXT09PSJodHRwOiI/ODA6NDQzKSk9PShiVlszXXx8KGJWWzFdPT09Imh0dHA6Ij84MDo0NDMpKSkpLGQuZGF0YSYmZC5wcm9jZXNzRGF0YSYmdHlwZW9mIGQuZGF0YSE9InN0cmluZyImJihkLmRhdGE9Zi5wYXJhbShkLmRhdGEsZC50cmFkaXRpb25hbCkpLGJaKGJTLGQsYyx2KTtpZihzPT09MilyZXR1cm4hMTt0PWQuZ2xvYmFsLGQudHlwZT1kLnR5cGUudG9VcHBlckNhc2UoKSxkLmhhc0NvbnRlbnQ9IWJKLnRlc3QoZC50eXBlKSx0JiZmLmFjdGl2ZSsrPT09MCYmZi5ldmVudC50cmlnZ2VyKCJhamF4U3RhcnQiKTtpZighZC5oYXNDb250ZW50KXtkLmRhdGEmJihkLnVybCs9KGJMLnRlc3QoZC51cmwpPyImIjoiPyIpK2QuZGF0YSxkZWxldGUgZC5kYXRhKSxrPWQudXJsO2lmKGQuY2FjaGU9PT0hMSl7dmFyIHg9Zi5ub3coKSx5PWQudXJsLnJlcGxhY2UoYlAsIiQxXz0iK3gpO2QudXJsPXkrKHk9PT1kLnVybD8oYkwudGVzdChkLnVybCk/IiYiOiI/IikrIl89Iit4OiIiKX19KGQuZGF0YSYmZC5oYXNDb250ZW50JiZkLmNvbnRlbnRUeXBlIT09ITF8fGMuY29udGVudFR5cGUpJiZ2LnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsZC5jb250ZW50VHlwZSksZC5pZk1vZGlmaWVkJiYoaz1rfHxkLnVybCxmLmxhc3RNb2RpZmllZFtrXSYmdi5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Nb2RpZmllZC1TaW5jZSIsZi5sYXN0TW9kaWZpZWRba10pLGYuZXRhZ1trXSYmdi5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Ob25lLU1hdGNoIixmLmV0YWdba10pKSx2LnNldFJlcXVlc3RIZWFkZXIoIkFjY2VwdCIsZC5kYXRhVHlwZXNbMF0mJmQuYWNjZXB0c1tkLmRhdGFUeXBlc1swXV0/ZC5hY2NlcHRzW2QuZGF0YVR5cGVzWzBdXSsoZC5kYXRhVHlwZXNbMF0hPT0iKiI/IiwgIitiVysiOyBxPTAuMDEiOiIiKTpkLmFjY2VwdHNbIioiXSk7Zm9yKHUgaW4gZC5oZWFkZXJzKXYuc2V0UmVxdWVzdEhlYWRlcih1LGQuaGVhZGVyc1t1XSk7aWYoZC5iZWZvcmVTZW5kJiYoZC5iZWZvcmVTZW5kLmNhbGwoZSx2LGQpPT09ITF8fHM9PT0yKSl7di5hYm9ydCgpO3JldHVybiExfWZvcih1IGlue3N1Y2Nlc3M6MSxlcnJvcjoxLGNvbXBsZXRlOjF9KXZbdV0oZFt1XSk7cD1iWihiVCxkLGMsdik7aWYoIXApdygtMSwiTm8gVHJhbnNwb3J0Iik7ZWxzZXt2LnJlYWR5U3RhdGU9MSx0JiZnLnRyaWdnZXIoImFqYXhTZW5kIixbdixkXSksZC5hc3luYyYmZC50aW1lb3V0PjAmJihxPXNldFRpbWVvdXQoZnVuY3Rpb24oKXt2LmFib3J0KCJ0aW1lb3V0Iil9LGQudGltZW91dCkpO3RyeXtzPTEscC5zZW5kKGwsdyl9Y2F0Y2goeil7aWYoczwyKXcoLTEseik7ZWxzZSB0aHJvdyB6fX1yZXR1cm4gdn0scGFyYW06ZnVuY3Rpb24oYSxjKXt2YXIgZD1bXSxlPWZ1bmN0aW9uKGEsYil7Yj1mLmlzRnVuY3Rpb24oYik/YigpOmIsZFtkLmxlbmd0aF09ZW5jb2RlVVJJQ29tcG9uZW50KGEpKyI9IitlbmNvZGVVUklDb21wb25lbnQoYil9O2M9PT1iJiYoYz1mLmFqYXhTZXR0aW5ncy50cmFkaXRpb25hbCk7aWYoZi5pc0FycmF5KGEpfHxhLmpxdWVyeSYmIWYuaXNQbGFpbk9iamVjdChhKSlmLmVhY2goYSxmdW5jdGlvbigpe2UodGhpcy5uYW1lLHRoaXMudmFsdWUpfSk7ZWxzZSBmb3IodmFyIGcgaW4gYSliXyhnLGFbZ10sYyxlKTtyZXR1cm4gZC5qb2luKCImIikucmVwbGFjZShiQywiKyIpfX0pLGYuZXh0ZW5kKHthY3RpdmU6MCxsYXN0TW9kaWZpZWQ6e30sZXRhZzp7fX0pO3ZhciBjYz1mLm5vdygpLGNkPS8oXD0pXD8oJnwkKXxcP1w/L2k7Zi5hamF4U2V0dXAoe2pzb25wOiJjYWxsYmFjayIsanNvbnBDYWxsYmFjazpmdW5jdGlvbigpe3JldHVybiBmLmV4cGFuZG8rIl8iK2NjKyt9fSksZi5hamF4UHJlZmlsdGVyKCJqc29uIGpzb25wIixmdW5jdGlvbihiLGMsZCl7dmFyIGU9dHlwZW9mIGIuZGF0YT09InN0cmluZyImJi9eYXBwbGljYXRpb25cL3hcLXd3d1wtZm9ybVwtdXJsZW5jb2RlZC8udGVzdChiLmNvbnRlbnRUeXBlKTtpZihiLmRhdGFUeXBlc1swXT09PSJqc29ucCJ8fGIuanNvbnAhPT0hMSYmKGNkLnRlc3QoYi51cmwpfHxlJiZjZC50ZXN0KGIuZGF0YSkpKXt2YXIgZyxoPWIuanNvbnBDYWxsYmFjaz1mLmlzRnVuY3Rpb24oYi5qc29ucENhbGxiYWNrKT9iLmpzb25wQ2FsbGJhY2soKTpiLmpzb25wQ2FsbGJhY2ssaT1hW2hdLGo9Yi51cmwsaz1iLmRhdGEsbD0iJDEiK2grIiQyIjtiLmpzb25wIT09ITEmJihqPWoucmVwbGFjZShjZCxsKSxiLnVybD09PWomJihlJiYoaz1rLnJlcGxhY2UoY2QsbCkpLGIuZGF0YT09PWsmJihqKz0oL1w/Ly50ZXN0KGopPyImIjoiPyIpK2IuanNvbnArIj0iK2gpKSksYi51cmw9aixiLmRhdGE9ayxhW2hdPWZ1bmN0aW9uKGEpe2c9W2FdfSxkLmFsd2F5cyhmdW5jdGlvbigpe2FbaF09aSxnJiZmLmlzRnVuY3Rpb24oaSkmJmFbaF0oZ1swXSl9KSxiLmNvbnZlcnRlcnNbInNjcmlwdCBqc29uIl09ZnVuY3Rpb24oKXtnfHxmLmVycm9yKGgrIiB3YXMgbm90IGNhbGxlZCIpO3JldHVybiBnWzBdfSxiLmRhdGFUeXBlc1swXT0ianNvbiI7cmV0dXJuInNjcmlwdCJ9fSksZi5hamF4U2V0dXAoe2FjY2VwdHM6e3NjcmlwdDoidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHQifSxjb250ZW50czp7c2NyaXB0Oi9qYXZhc2NyaXB0fGVjbWFzY3JpcHQvfSxjb252ZXJ0ZXJzOnsidGV4dCBzY3JpcHQiOmZ1bmN0aW9uKGEpe2YuZ2xvYmFsRXZhbChhKTtyZXR1cm4gYX19fSksZi5hamF4UHJlZmlsdGVyKCJzY3JpcHQiLGZ1bmN0aW9uKGEpe2EuY2FjaGU9PT1iJiYoYS5jYWNoZT0hMSksYS5jcm9zc0RvbWFpbiYmKGEudHlwZT0iR0VUIixhLmdsb2JhbD0hMSl9KSxmLmFqYXhUcmFuc3BvcnQoInNjcmlwdCIsZnVuY3Rpb24oYSl7aWYoYS5jcm9zc0RvbWFpbil7dmFyIGQsZT1jLmhlYWR8fGMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXXx8Yy5kb2N1bWVudEVsZW1lbnQ7cmV0dXJue3NlbmQ6ZnVuY3Rpb24oZixnKXtkPWMuY3JlYXRlRWxlbWVudCgic2NyaXB0IiksZC5hc3luYz0iYXN5bmMiLGEuc2NyaXB0Q2hhcnNldCYmKGQuY2hhcnNldD1hLnNjcmlwdENoYXJzZXQpLGQuc3JjPWEudXJsLGQub25sb2FkPWQub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKGEsYyl7aWYoY3x8IWQucmVhZHlTdGF0ZXx8L2xvYWRlZHxjb21wbGV0ZS8udGVzdChkLnJlYWR5U3RhdGUpKWQub25sb2FkPWQub25yZWFkeXN0YXRlY2hhbmdlPW51bGwsZSYmZC5wYXJlbnROb2RlJiZlLnJlbW92ZUNoaWxkKGQpLGQ9YixjfHxnKDIwMCwic3VjY2VzcyIpfSxlLmluc2VydEJlZm9yZShkLGUuZmlyc3RDaGlsZCl9LGFib3J0OmZ1bmN0aW9uKCl7ZCYmZC5vbmxvYWQoMCwxKX19fX0pO3ZhciBjZT1hLkFjdGl2ZVhPYmplY3Q/ZnVuY3Rpb24oKXtmb3IodmFyIGEgaW4gY2cpY2dbYV0oMCwxKX06ITEsY2Y9MCxjZztmLmFqYXhTZXR0aW5ncy54aHI9YS5BY3RpdmVYT2JqZWN0P2Z1bmN0aW9uKCl7cmV0dXJuIXRoaXMuaXNMb2NhbCYmY2goKXx8Y2koKX06Y2gsZnVuY3Rpb24oYSl7Zi5leHRlbmQoZi5zdXBwb3J0LHthamF4OiEhYSxjb3JzOiEhYSYmIndpdGhDcmVkZW50aWFscyJpbiBhfSl9KGYuYWpheFNldHRpbmdzLnhocigpKSxmLnN1cHBvcnQuYWpheCYmZi5hamF4VHJhbnNwb3J0KGZ1bmN0aW9uKGMpe2lmKCFjLmNyb3NzRG9tYWlufHxmLnN1cHBvcnQuY29ycyl7dmFyIGQ7cmV0dXJue3NlbmQ6ZnVuY3Rpb24oZSxnKXt2YXIgaD1jLnhocigpLGksajtjLnVzZXJuYW1lP2gub3BlbihjLnR5cGUsYy51cmwsYy5hc3luYyxjLnVzZXJuYW1lLGMucGFzc3dvcmQpOmgub3BlbihjLnR5cGUsYy51cmwsYy5hc3luYyk7aWYoYy54aHJGaWVsZHMpZm9yKGogaW4gYy54aHJGaWVsZHMpaFtqXT1jLnhockZpZWxkc1tqXTtjLm1pbWVUeXBlJiZoLm92ZXJyaWRlTWltZVR5cGUmJmgub3ZlcnJpZGVNaW1lVHlwZShjLm1pbWVUeXBlKSwhYy5jcm9zc0RvbWFpbiYmIWVbIlgtUmVxdWVzdGVkLVdpdGgiXSYmKGVbIlgtUmVxdWVzdGVkLVdpdGgiXT0iWE1MSHR0cFJlcXVlc3QiKTt0cnl7Zm9yKGogaW4gZSloLnNldFJlcXVlc3RIZWFkZXIoaixlW2pdKX1jYXRjaChrKXt9aC5zZW5kKGMuaGFzQ29udGVudCYmYy5kYXRhfHxudWxsKSxkPWZ1bmN0aW9uKGEsZSl7dmFyIGosayxsLG0sbjt0cnl7aWYoZCYmKGV8fGgucmVhZHlTdGF0ZT09PTQpKXtkPWIsaSYmKGgub25yZWFkeXN0YXRlY2hhbmdlPWYubm9vcCxjZSYmZGVsZXRlIGNnW2ldKTtpZihlKWgucmVhZHlTdGF0ZSE9PTQmJmguYWJvcnQoKTtlbHNle2o9aC5zdGF0dXMsbD1oLmdldEFsbFJlc3BvbnNlSGVhZGVycygpLG09e30sbj1oLnJlc3BvbnNlWE1MLG4mJm4uZG9jdW1lbnRFbGVtZW50JiYobS54bWw9bik7dHJ5e20udGV4dD1oLnJlc3BvbnNlVGV4dH1jYXRjaChhKXt9dHJ5e2s9aC5zdGF0dXNUZXh0fWNhdGNoKG8pe2s9IiJ9IWomJmMuaXNMb2NhbCYmIWMuY3Jvc3NEb21haW4/aj1tLnRleHQ/MjAwOjQwNDpqPT09MTIyMyYmKGo9MjA0KX19fWNhdGNoKHApe2V8fGcoLTEscCl9bSYmZyhqLGssbSxsKX0sIWMuYXN5bmN8fGgucmVhZHlTdGF0ZT09PTQ/ZCgpOihpPSsrY2YsY2UmJihjZ3x8KGNnPXt9LGYoYSkudW5sb2FkKGNlKSksY2dbaV09ZCksaC5vbnJlYWR5c3RhdGVjaGFuZ2U9ZCl9LGFib3J0OmZ1bmN0aW9uKCl7ZCYmZCgwLDEpfX19fSk7dmFyIGNqPXt9LGNrLGNsLGNtPS9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLyxjbj0vXihbK1wtXT0pPyhbXGQrLlwtXSspKFthLXolXSopJC9pLGNvLGNwPVtbImhlaWdodCIsIm1hcmdpblRvcCIsIm1hcmdpbkJvdHRvbSIsInBhZGRpbmdUb3AiLCJwYWRkaW5nQm90dG9tIl0sWyJ3aWR0aCIsIm1hcmdpbkxlZnQiLCJtYXJnaW5SaWdodCIsInBhZGRpbmdMZWZ0IiwicGFkZGluZ1JpZ2h0Il0sWyJvcGFjaXR5Il1dLGNxO2YuZm4uZXh0ZW5kKHtzaG93OmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlO2lmKGF8fGE9PT0wKXJldHVybiB0aGlzLmFuaW1hdGUoY3QoInNob3ciLDMpLGEsYixjKTtmb3IodmFyIGc9MCxoPXRoaXMubGVuZ3RoO2c8aDtnKyspZD10aGlzW2ddLGQuc3R5bGUmJihlPWQuc3R5bGUuZGlzcGxheSwhZi5fZGF0YShkLCJvbGRkaXNwbGF5IikmJmU9PT0ibm9uZSImJihlPWQuc3R5bGUuZGlzcGxheT0iIiksKGU9PT0iIiYmZi5jc3MoZCwiZGlzcGxheSIpPT09Im5vbmUifHwhZi5jb250YWlucyhkLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGQpKSYmZi5fZGF0YShkLCJvbGRkaXNwbGF5IixjdShkLm5vZGVOYW1lKSkpO2ZvcihnPTA7ZzxoO2crKyl7ZD10aGlzW2ddO2lmKGQuc3R5bGUpe2U9ZC5zdHlsZS5kaXNwbGF5O2lmKGU9PT0iInx8ZT09PSJub25lIilkLnN0eWxlLmRpc3BsYXk9Zi5fZGF0YShkLCJvbGRkaXNwbGF5Iil8fCIifX1yZXR1cm4gdGhpc30saGlkZTpmdW5jdGlvbihhLGIsYyl7aWYoYXx8YT09PTApcmV0dXJuIHRoaXMuYW5pbWF0ZShjdCgiaGlkZSIsMyksYSxiLGMpO3ZhciBkLGUsZz0wLGg9dGhpcy5sZW5ndGg7Zm9yKDtnPGg7ZysrKWQ9dGhpc1tnXSxkLnN0eWxlJiYoZT1mLmNzcyhkLCJkaXNwbGF5IiksZSE9PSJub25lIiYmIWYuX2RhdGEoZCwib2xkZGlzcGxheSIpJiZmLl9kYXRhKGQsIm9sZGRpc3BsYXkiLGUpKTtmb3IoZz0wO2c8aDtnKyspdGhpc1tnXS5zdHlsZSYmKHRoaXNbZ10uc3R5bGUuZGlzcGxheT0ibm9uZSIpO3JldHVybiB0aGlzfSxfdG9nZ2xlOmYuZm4udG9nZ2xlLHRvZ2dsZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9dHlwZW9mIGE9PSJib29sZWFuIjtmLmlzRnVuY3Rpb24oYSkmJmYuaXNGdW5jdGlvbihiKT90aGlzLl90b2dnbGUuYXBwbHkodGhpcyxhcmd1bWVudHMpOmE9PW51bGx8fGQ/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9ZD9hOmYodGhpcykuaXMoIjpoaWRkZW4iKTtmKHRoaXMpW2I/InNob3ciOiJoaWRlIl0oKX0pOnRoaXMuYW5pbWF0ZShjdCgidG9nZ2xlIiwzKSxhLGIsYyk7cmV0dXJuIHRoaXN9LGZhZGVUbzpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy5maWx0ZXIoIjpoaWRkZW4iKS5jc3MoIm9wYWNpdHkiLDApLnNob3coKS5lbmQoKS5hbmltYXRlKHtvcGFjaXR5OmJ9LGEsYyxkKX0sYW5pbWF0ZTpmdW5jdGlvbihhLGIsYyxkKXtmdW5jdGlvbiBnKCl7ZS5xdWV1ZT09PSExJiZmLl9tYXJrKHRoaXMpO3ZhciBiPWYuZXh0ZW5kKHt9LGUpLGM9dGhpcy5ub2RlVHlwZT09PTEsZD1jJiZmKHRoaXMpLmlzKCI6aGlkZGVuIiksZyxoLGksaixrLGwsbSxuLG8scCxxO2IuYW5pbWF0ZWRQcm9wZXJ0aWVzPXt9O2ZvcihpIGluIGEpe2c9Zi5jYW1lbENhc2UoaSksaSE9PWcmJihhW2ddPWFbaV0sZGVsZXRlIGFbaV0pO2lmKChrPWYuY3NzSG9va3NbZ10pJiYiZXhwYW5kImluIGspe2w9ay5leHBhbmQoYVtnXSksZGVsZXRlIGFbZ107Zm9yKGkgaW4gbClpIGluIGF8fChhW2ldPWxbaV0pfX1mb3IoZyBpbiBhKXtoPWFbZ10sZi5pc0FycmF5KGgpPyhiLmFuaW1hdGVkUHJvcGVydGllc1tnXT1oWzFdLGg9YVtnXT1oWzBdKTpiLmFuaW1hdGVkUHJvcGVydGllc1tnXT1iLnNwZWNpYWxFYXNpbmcmJmIuc3BlY2lhbEVhc2luZ1tnXXx8Yi5lYXNpbmd8fCJzd2luZyI7aWYoaD09PSJoaWRlIiYmZHx8aD09PSJzaG93IiYmIWQpcmV0dXJuIGIuY29tcGxldGUuY2FsbCh0aGlzKTtjJiYoZz09PSJoZWlnaHQifHxnPT09IndpZHRoIikmJihiLm92ZXJmbG93PVt0aGlzLnN0eWxlLm92ZXJmbG93LHRoaXMuc3R5bGUub3ZlcmZsb3dYLHRoaXMuc3R5bGUub3ZlcmZsb3dZXSxmLmNzcyh0aGlzLCJkaXNwbGF5Iik9PT0iaW5saW5lIiYmZi5jc3ModGhpcywiZmxvYXQiKT09PSJub25lIiYmKCFmLnN1cHBvcnQuaW5saW5lQmxvY2tOZWVkc0xheW91dHx8Y3UodGhpcy5ub2RlTmFtZSk9PT0iaW5saW5lIj90aGlzLnN0eWxlLmRpc3BsYXk9ImlubGluZS1ibG9jayI6dGhpcy5zdHlsZS56b29tPTEpKX1iLm92ZXJmbG93IT1udWxsJiYodGhpcy5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIik7Zm9yKGkgaW4gYSlqPW5ldyBmLmZ4KHRoaXMsYixpKSxoPWFbaV0sY20udGVzdChoKT8ocT1mLl9kYXRhKHRoaXMsInRvZ2dsZSIraSl8fChoPT09InRvZ2dsZSI/ZD8ic2hvdyI6ImhpZGUiOjApLHE/KGYuX2RhdGEodGhpcywidG9nZ2xlIitpLHE9PT0ic2hvdyI/ImhpZGUiOiJzaG93IiksaltxXSgpKTpqW2hdKCkpOihtPWNuLmV4ZWMoaCksbj1qLmN1cigpLG0/KG89cGFyc2VGbG9hdChtWzJdKSxwPW1bM118fChmLmNzc051bWJlcltpXT8iIjoicHgiKSxwIT09InB4IiYmKGYuc3R5bGUodGhpcyxpLChvfHwxKStwKSxuPShvfHwxKS9qLmN1cigpKm4sZi5zdHlsZSh0aGlzLGksbitwKSksbVsxXSYmKG89KG1bMV09PT0iLT0iPy0xOjEpKm8rbiksai5jdXN0b20obixvLHApKTpqLmN1c3RvbShuLGgsIiIpKTtyZXR1cm4hMH12YXIgZT1mLnNwZWVkKGIsYyxkKTtpZihmLmlzRW1wdHlPYmplY3QoYSkpcmV0dXJuIHRoaXMuZWFjaChlLmNvbXBsZXRlLFshMV0pO2E9Zi5leHRlbmQoe30sYSk7cmV0dXJuIGUucXVldWU9PT0hMT90aGlzLmVhY2goZyk6dGhpcy5xdWV1ZShlLnF1ZXVlLGcpfSxzdG9wOmZ1bmN0aW9uKGEsYyxkKXt0eXBlb2YgYSE9InN0cmluZyImJihkPWMsYz1hLGE9YiksYyYmYSE9PSExJiZ0aGlzLnF1ZXVlKGF8fCJmeCIsW10pO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmdW5jdGlvbiBoKGEsYixjKXt2YXIgZT1iW2NdO2YucmVtb3ZlRGF0YShhLGMsITApLGUuc3RvcChkKX12YXIgYixjPSExLGU9Zi50aW1lcnMsZz1mLl9kYXRhKHRoaXMpO2R8fGYuX3VubWFyayghMCx0aGlzKTtpZihhPT1udWxsKWZvcihiIGluIGcpZ1tiXSYmZ1tiXS5zdG9wJiZiLmluZGV4T2YoIi5ydW4iKT09PWIubGVuZ3RoLTQmJmgodGhpcyxnLGIpO2Vsc2UgZ1tiPWErIi5ydW4iXSYmZ1tiXS5zdG9wJiZoKHRoaXMsZyxiKTtmb3IoYj1lLmxlbmd0aDtiLS07KWVbYl0uZWxlbT09PXRoaXMmJihhPT1udWxsfHxlW2JdLnF1ZXVlPT09YSkmJihkP2VbYl0oITApOmVbYl0uc2F2ZVN0YXRlKCksYz0hMCxlLnNwbGljZShiLDEpKTsoIWR8fCFjKSYmZi5kZXF1ZXVlKHRoaXMsYSl9KX19KSxmLmVhY2goe3NsaWRlRG93bjpjdCgic2hvdyIsMSksc2xpZGVVcDpjdCgiaGlkZSIsMSksc2xpZGVUb2dnbGU6Y3QoInRvZ2dsZSIsMSksZmFkZUluOntvcGFjaXR5OiJzaG93In0sZmFkZU91dDp7b3BhY2l0eToiaGlkZSJ9LGZhZGVUb2dnbGU6e29wYWNpdHk6InRvZ2dsZSJ9fSxmdW5jdGlvbihhLGIpe2YuZm5bYV09ZnVuY3Rpb24oYSxjLGQpe3JldHVybiB0aGlzLmFuaW1hdGUoYixhLGMsZCl9fSksZi5leHRlbmQoe3NwZWVkOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hJiZ0eXBlb2YgYT09Im9iamVjdCI/Zi5leHRlbmQoe30sYSk6e2NvbXBsZXRlOmN8fCFjJiZifHxmLmlzRnVuY3Rpb24oYSkmJmEsZHVyYXRpb246YSxlYXNpbmc6YyYmYnx8YiYmIWYuaXNGdW5jdGlvbihiKSYmYn07ZC5kdXJhdGlvbj1mLmZ4Lm9mZj8wOnR5cGVvZiBkLmR1cmF0aW9uPT0ibnVtYmVyIj9kLmR1cmF0aW9uOmQuZHVyYXRpb24gaW4gZi5meC5zcGVlZHM/Zi5meC5zcGVlZHNbZC5kdXJhdGlvbl06Zi5meC5zcGVlZHMuX2RlZmF1bHQ7aWYoZC5xdWV1ZT09bnVsbHx8ZC5xdWV1ZT09PSEwKWQucXVldWU9ImZ4IjtkLm9sZD1kLmNvbXBsZXRlLGQuY29tcGxldGU9ZnVuY3Rpb24oYSl7Zi5pc0Z1bmN0aW9uKGQub2xkKSYmZC5vbGQuY2FsbCh0aGlzKSxkLnF1ZXVlP2YuZGVxdWV1ZSh0aGlzLGQucXVldWUpOmEhPT0hMSYmZi5fdW5tYXJrKHRoaXMpfTtyZXR1cm4gZH0sZWFzaW5nOntsaW5lYXI6ZnVuY3Rpb24oYSl7cmV0dXJuIGF9LHN3aW5nOmZ1bmN0aW9uKGEpe3JldHVybi1NYXRoLmNvcyhhKk1hdGguUEkpLzIrLjV9fSx0aW1lcnM6W10sZng6ZnVuY3Rpb24oYSxiLGMpe3RoaXMub3B0aW9ucz1iLHRoaXMuZWxlbT1hLHRoaXMucHJvcD1jLGIub3JpZz1iLm9yaWd8fHt9fX0pLGYuZngucHJvdG90eXBlPXt1cGRhdGU6ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuc3RlcCYmdGhpcy5vcHRpb25zLnN0ZXAuY2FsbCh0aGlzLmVsZW0sdGhpcy5ub3csdGhpcyksKGYuZnguc3RlcFt0aGlzLnByb3BdfHxmLmZ4LnN0ZXAuX2RlZmF1bHQpKHRoaXMpfSxjdXI6ZnVuY3Rpb24oKXtpZih0aGlzLmVsZW1bdGhpcy5wcm9wXSE9bnVsbCYmKCF0aGlzLmVsZW0uc3R5bGV8fHRoaXMuZWxlbS5zdHlsZVt0aGlzLnByb3BdPT1udWxsKSlyZXR1cm4gdGhpcy5lbGVtW3RoaXMucHJvcF07dmFyIGEsYj1mLmNzcyh0aGlzLmVsZW0sdGhpcy5wcm9wKTtyZXR1cm4gaXNOYU4oYT1wYXJzZUZsb2F0KGIpKT8hYnx8Yj09PSJhdXRvIj8wOmI6YX0sY3VzdG9tOmZ1bmN0aW9uKGEsYyxkKXtmdW5jdGlvbiBoKGEpe3JldHVybiBlLnN0ZXAoYSl9dmFyIGU9dGhpcyxnPWYuZng7dGhpcy5zdGFydFRpbWU9Y3F8fGNyKCksdGhpcy5lbmQ9Yyx0aGlzLm5vdz10aGlzLnN0YXJ0PWEsdGhpcy5wb3M9dGhpcy5zdGF0ZT0wLHRoaXMudW5pdD1kfHx0aGlzLnVuaXR8fChmLmNzc051bWJlclt0aGlzLnByb3BdPyIiOiJweCIpLGgucXVldWU9dGhpcy5vcHRpb25zLnF1ZXVlLGguZWxlbT10aGlzLmVsZW0saC5zYXZlU3RhdGU9ZnVuY3Rpb24oKXtmLl9kYXRhKGUuZWxlbSwiZnhzaG93IitlLnByb3ApPT09YiYmKGUub3B0aW9ucy5oaWRlP2YuX2RhdGEoZS5lbGVtLCJmeHNob3ciK2UucHJvcCxlLnN0YXJ0KTplLm9wdGlvbnMuc2hvdyYmZi5fZGF0YShlLmVsZW0sImZ4c2hvdyIrZS5wcm9wLGUuZW5kKSl9LGgoKSYmZi50aW1lcnMucHVzaChoKSYmIWNvJiYoY289c2V0SW50ZXJ2YWwoZy50aWNrLGcuaW50ZXJ2YWwpKX0sc2hvdzpmdW5jdGlvbigpe3ZhciBhPWYuX2RhdGEodGhpcy5lbGVtLCJmeHNob3ciK3RoaXMucHJvcCk7dGhpcy5vcHRpb25zLm9yaWdbdGhpcy5wcm9wXT1hfHxmLnN0eWxlKHRoaXMuZWxlbSx0aGlzLnByb3ApLHRoaXMub3B0aW9ucy5zaG93PSEwLGEhPT1iP3RoaXMuY3VzdG9tKHRoaXMuY3VyKCksYSk6dGhpcy5jdXN0b20odGhpcy5wcm9wPT09IndpZHRoInx8dGhpcy5wcm9wPT09ImhlaWdodCI/MTowLHRoaXMuY3VyKCkpLGYodGhpcy5lbGVtKS5zaG93KCl9LGhpZGU6ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMub3JpZ1t0aGlzLnByb3BdPWYuX2RhdGEodGhpcy5lbGVtLCJmeHNob3ciK3RoaXMucHJvcCl8fGYuc3R5bGUodGhpcy5lbGVtLHRoaXMucHJvcCksdGhpcy5vcHRpb25zLmhpZGU9ITAsdGhpcy5jdXN0b20odGhpcy5jdXIoKSwwKX0sc3RlcDpmdW5jdGlvbihhKXt2YXIgYixjLGQsZT1jcXx8Y3IoKSxnPSEwLGg9dGhpcy5lbGVtLGk9dGhpcy5vcHRpb25zO2lmKGF8fGU+PWkuZHVyYXRpb24rdGhpcy5zdGFydFRpbWUpe3RoaXMubm93PXRoaXMuZW5kLHRoaXMucG9zPXRoaXMuc3RhdGU9MSx0aGlzLnVwZGF0ZSgpLGkuYW5pbWF0ZWRQcm9wZXJ0aWVzW3RoaXMucHJvcF09ITA7Zm9yKGIgaW4gaS5hbmltYXRlZFByb3BlcnRpZXMpaS5hbmltYXRlZFByb3BlcnRpZXNbYl0hPT0hMCYmKGc9ITEpO2lmKGcpe2kub3ZlcmZsb3chPW51bGwmJiFmLnN1cHBvcnQuc2hyaW5rV3JhcEJsb2NrcyYmZi5lYWNoKFsiIiwiWCIsIlkiXSxmdW5jdGlvbihhLGIpe2guc3R5bGVbIm92ZXJmbG93IitiXT1pLm92ZXJmbG93W2FdfSksaS5oaWRlJiZmKGgpLmhpZGUoKTtpZihpLmhpZGV8fGkuc2hvdylmb3IoYiBpbiBpLmFuaW1hdGVkUHJvcGVydGllcylmLnN0eWxlKGgsYixpLm9yaWdbYl0pLGYucmVtb3ZlRGF0YShoLCJmeHNob3ciK2IsITApLGYucmVtb3ZlRGF0YShoLCJ0b2dnbGUiK2IsITApO2Q9aS5jb21wbGV0ZSxkJiYoaS5jb21wbGV0ZT0hMSxkLmNhbGwoaCkpfXJldHVybiExfWkuZHVyYXRpb249PUluZmluaXR5P3RoaXMubm93PWU6KGM9ZS10aGlzLnN0YXJ0VGltZSx0aGlzLnN0YXRlPWMvaS5kdXJhdGlvbix0aGlzLnBvcz1mLmVhc2luZ1tpLmFuaW1hdGVkUHJvcGVydGllc1t0aGlzLnByb3BdXSh0aGlzLnN0YXRlLGMsMCwxLGkuZHVyYXRpb24pLHRoaXMubm93PXRoaXMuc3RhcnQrKHRoaXMuZW5kLXRoaXMuc3RhcnQpKnRoaXMucG9zKSx0aGlzLnVwZGF0ZSgpO3JldHVybiEwfX0sZi5leHRlbmQoZi5meCx7dGljazpmdW5jdGlvbigpe3ZhciBhLGI9Zi50aW1lcnMsYz0wO2Zvcig7YzxiLmxlbmd0aDtjKyspYT1iW2NdLCFhKCkmJmJbY109PT1hJiZiLnNwbGljZShjLS0sMSk7Yi5sZW5ndGh8fGYuZnguc3RvcCgpfSxpbnRlcnZhbDoxMyxzdG9wOmZ1bmN0aW9uKCl7Y2xlYXJJbnRlcnZhbChjbyksY289bnVsbH0sc3BlZWRzOntzbG93OjYwMCxmYXN0OjIwMCxfZGVmYXVsdDo0MDB9LHN0ZXA6e29wYWNpdHk6ZnVuY3Rpb24oYSl7Zi5zdHlsZShhLmVsZW0sIm9wYWNpdHkiLGEubm93KX0sX2RlZmF1bHQ6ZnVuY3Rpb24oYSl7YS5lbGVtLnN0eWxlJiZhLmVsZW0uc3R5bGVbYS5wcm9wXSE9bnVsbD9hLmVsZW0uc3R5bGVbYS5wcm9wXT1hLm5vdythLnVuaXQ6YS5lbGVtW2EucHJvcF09YS5ub3d9fX0pLGYuZWFjaChjcC5jb25jYXQuYXBwbHkoW10sY3ApLGZ1bmN0aW9uKGEsYil7Yi5pbmRleE9mKCJtYXJnaW4iKSYmKGYuZnguc3RlcFtiXT1mdW5jdGlvbihhKXtmLnN0eWxlKGEuZWxlbSxiLE1hdGgubWF4KDAsYS5ub3cpK2EudW5pdCl9KX0pLGYuZXhwciYmZi5leHByLmZpbHRlcnMmJihmLmV4cHIuZmlsdGVycy5hbmltYXRlZD1mdW5jdGlvbihhKXtyZXR1cm4gZi5ncmVwKGYudGltZXJzLGZ1bmN0aW9uKGIpe3JldHVybiBhPT09Yi5lbGVtfSkubGVuZ3RofSk7dmFyIGN2LGN3PS9edCg/OmFibGV8ZHxoKSQvaSxjeD0vXig/OmJvZHl8aHRtbCkkL2k7ImdldEJvdW5kaW5nQ2xpZW50UmVjdCJpbiBjLmRvY3VtZW50RWxlbWVudD9jdj1mdW5jdGlvbihhLGIsYyxkKXt0cnl7ZD1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfWNhdGNoKGUpe31pZighZHx8IWYuY29udGFpbnMoYyxhKSlyZXR1cm4gZD97dG9wOmQudG9wLGxlZnQ6ZC5sZWZ0fTp7dG9wOjAsbGVmdDowfTt2YXIgZz1iLmJvZHksaD1jeShiKSxpPWMuY2xpZW50VG9wfHxnLmNsaWVudFRvcHx8MCxqPWMuY2xpZW50TGVmdHx8Zy5jbGllbnRMZWZ0fHwwLGs9aC5wYWdlWU9mZnNldHx8Zi5zdXBwb3J0LmJveE1vZGVsJiZjLnNjcm9sbFRvcHx8Zy5zY3JvbGxUb3AsbD1oLnBhZ2VYT2Zmc2V0fHxmLnN1cHBvcnQuYm94TW9kZWwmJmMuc2Nyb2xsTGVmdHx8Zy5zY3JvbGxMZWZ0LG09ZC50b3Aray1pLG49ZC5sZWZ0K2wtajtyZXR1cm57dG9wOm0sbGVmdDpufX06Y3Y9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGU9YS5vZmZzZXRQYXJlbnQsZz1hLGg9Yi5ib2R5LGk9Yi5kZWZhdWx0VmlldyxqPWk/aS5nZXRDb21wdXRlZFN0eWxlKGEsbnVsbCk6YS5jdXJyZW50U3R5bGUsaz1hLm9mZnNldFRvcCxsPWEub2Zmc2V0TGVmdDt3aGlsZSgoYT1hLnBhcmVudE5vZGUpJiZhIT09aCYmYSE9PWMpe2lmKGYuc3VwcG9ydC5maXhlZFBvc2l0aW9uJiZqLnBvc2l0aW9uPT09ImZpeGVkIilicmVhaztkPWk/aS5nZXRDb21wdXRlZFN0eWxlKGEsbnVsbCk6YS5jdXJyZW50U3R5bGUsay09YS5zY3JvbGxUb3AsbC09YS5zY3JvbGxMZWZ0LGE9PT1lJiYoays9YS5vZmZzZXRUb3AsbCs9YS5vZmZzZXRMZWZ0LGYuc3VwcG9ydC5kb2VzTm90QWRkQm9yZGVyJiYoIWYuc3VwcG9ydC5kb2VzQWRkQm9yZGVyRm9yVGFibGVBbmRDZWxsc3x8IWN3LnRlc3QoYS5ub2RlTmFtZSkpJiYoays9cGFyc2VGbG9hdChkLmJvcmRlclRvcFdpZHRoKXx8MCxsKz1wYXJzZUZsb2F0KGQuYm9yZGVyTGVmdFdpZHRoKXx8MCksZz1lLGU9YS5vZmZzZXRQYXJlbnQpLGYuc3VwcG9ydC5zdWJ0cmFjdHNCb3JkZXJGb3JPdmVyZmxvd05vdFZpc2libGUmJmQub3ZlcmZsb3chPT0idmlzaWJsZSImJihrKz1wYXJzZUZsb2F0KGQuYm9yZGVyVG9wV2lkdGgpfHwwLGwrPXBhcnNlRmxvYXQoZC5ib3JkZXJMZWZ0V2lkdGgpfHwwKSxqPWR9aWYoai5wb3NpdGlvbj09PSJyZWxhdGl2ZSJ8fGoucG9zaXRpb249PT0ic3RhdGljIilrKz1oLm9mZnNldFRvcCxsKz1oLm9mZnNldExlZnQ7Zi5zdXBwb3J0LmZpeGVkUG9zaXRpb24mJmoucG9zaXRpb249PT0iZml4ZWQiJiYoays9TWF0aC5tYXgoYy5zY3JvbGxUb3AsaC5zY3JvbGxUb3ApLGwrPU1hdGgubWF4KGMuc2Nyb2xsTGVmdCxoLnNjcm9sbExlZnQpKTtyZXR1cm57dG9wOmssbGVmdDpsfX0sZi5mbi5vZmZzZXQ9ZnVuY3Rpb24oYSl7aWYoYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gYT09PWI/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oYil7Zi5vZmZzZXQuc2V0T2Zmc2V0KHRoaXMsYSxiKX0pO3ZhciBjPXRoaXNbMF0sZD1jJiZjLm93bmVyRG9jdW1lbnQ7aWYoIWQpcmV0dXJuIG51bGw7aWYoYz09PWQuYm9keSlyZXR1cm4gZi5vZmZzZXQuYm9keU9mZnNldChjKTtyZXR1cm4gY3YoYyxkLGQuZG9jdW1lbnRFbGVtZW50KX0sZi5vZmZzZXQ9e2JvZHlPZmZzZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5vZmZzZXRUb3AsYz1hLm9mZnNldExlZnQ7Zi5zdXBwb3J0LmRvZXNOb3RJbmNsdWRlTWFyZ2luSW5Cb2R5T2Zmc2V0JiYoYis9cGFyc2VGbG9hdChmLmNzcyhhLCJtYXJnaW5Ub3AiKSl8fDAsYys9cGFyc2VGbG9hdChmLmNzcyhhLCJtYXJnaW5MZWZ0IikpfHwwKTtyZXR1cm57dG9wOmIsbGVmdDpjfX0sc2V0T2Zmc2V0OmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1mLmNzcyhhLCJwb3NpdGlvbiIpO2Q9PT0ic3RhdGljIiYmKGEuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIik7dmFyIGU9ZihhKSxnPWUub2Zmc2V0KCksaD1mLmNzcyhhLCJ0b3AiKSxpPWYuY3NzKGEsImxlZnQiKSxqPShkPT09ImFic29sdXRlInx8ZD09PSJmaXhlZCIpJiZmLmluQXJyYXkoImF1dG8iLFtoLGldKT4tMSxrPXt9LGw9e30sbSxuO2o/KGw9ZS5wb3NpdGlvbigpLG09bC50b3Asbj1sLmxlZnQpOihtPXBhcnNlRmxvYXQoaCl8fDAsbj1wYXJzZUZsb2F0KGkpfHwwKSxmLmlzRnVuY3Rpb24oYikmJihiPWIuY2FsbChhLGMsZykpLGIudG9wIT1udWxsJiYoay50b3A9Yi50b3AtZy50b3ArbSksYi5sZWZ0IT1udWxsJiYoay5sZWZ0PWIubGVmdC1nLmxlZnQrbiksInVzaW5nImluIGI/Yi51c2luZy5jYWxsKGEsayk6ZS5jc3Moayl9fSxmLmZuLmV4dGVuZCh7cG9zaXRpb246ZnVuY3Rpb24oKXtpZighdGhpc1swXSlyZXR1cm4gbnVsbDt2YXIgYT10aGlzWzBdLGI9dGhpcy5vZmZzZXRQYXJlbnQoKSxjPXRoaXMub2Zmc2V0KCksZD1jeC50ZXN0KGJbMF0ubm9kZU5hbWUpP3t0b3A6MCxsZWZ0OjB9OmIub2Zmc2V0KCk7Yy50b3AtPXBhcnNlRmxvYXQoZi5jc3MoYSwibWFyZ2luVG9wIikpfHwwLGMubGVmdC09cGFyc2VGbG9hdChmLmNzcyhhLCJtYXJnaW5MZWZ0IikpfHwwLGQudG9wKz1wYXJzZUZsb2F0KGYuY3NzKGJbMF0sImJvcmRlclRvcFdpZHRoIikpfHwwLGQubGVmdCs9cGFyc2VGbG9hdChmLmNzcyhiWzBdLCJib3JkZXJMZWZ0V2lkdGgiKSl8fDA7cmV0dXJue3RvcDpjLnRvcC1kLnRvcCxsZWZ0OmMubGVmdC1kLmxlZnR9fSxvZmZzZXRQYXJlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9mZnNldFBhcmVudHx8Yy5ib2R5O3doaWxlKGEmJiFjeC50ZXN0KGEubm9kZU5hbWUpJiZmLmNzcyhhLCJwb3NpdGlvbiIpPT09InN0YXRpYyIpYT1hLm9mZnNldFBhcmVudDtyZXR1cm4gYX0pfX0pLGYuZWFjaCh7c2Nyb2xsTGVmdDoicGFnZVhPZmZzZXQiLHNjcm9sbFRvcDoicGFnZVlPZmZzZXQifSxmdW5jdGlvbihhLGMpe3ZhciBkPS9ZLy50ZXN0KGMpO2YuZm5bYV09ZnVuY3Rpb24oZSl7cmV0dXJuIGYuYWNjZXNzKHRoaXMsZnVuY3Rpb24oYSxlLGcpe3ZhciBoPWN5KGEpO2lmKGc9PT1iKXJldHVybiBoP2MgaW4gaD9oW2NdOmYuc3VwcG9ydC5ib3hNb2RlbCYmaC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbZV18fGguZG9jdW1lbnQuYm9keVtlXTphW2VdO2g/aC5zY3JvbGxUbyhkP2YoaCkuc2Nyb2xsTGVmdCgpOmcsZD9nOmYoaCkuc2Nyb2xsVG9wKCkpOmFbZV09Z30sYSxlLGFyZ3VtZW50cy5sZW5ndGgsbnVsbCl9fSksZi5lYWNoKHtIZWlnaHQ6ImhlaWdodCIsV2lkdGg6IndpZHRoIn0sZnVuY3Rpb24oYSxjKXt2YXIgZD0iY2xpZW50IithLGU9InNjcm9sbCIrYSxnPSJvZmZzZXQiK2E7Zi5mblsiaW5uZXIiK2FdPWZ1bmN0aW9uKCl7dmFyIGE9dGhpc1swXTtyZXR1cm4gYT9hLnN0eWxlP3BhcnNlRmxvYXQoZi5jc3MoYSxjLCJwYWRkaW5nIikpOnRoaXNbY10oKTpudWxsfSxmLmZuWyJvdXRlciIrYV09ZnVuY3Rpb24oYSl7dmFyIGI9dGhpc1swXTtyZXR1cm4gYj9iLnN0eWxlP3BhcnNlRmxvYXQoZi5jc3MoYixjLGE/Im1hcmdpbiI6ImJvcmRlciIpKTp0aGlzW2NdKCk6bnVsbH0sZi5mbltjXT1mdW5jdGlvbihhKXtyZXR1cm4gZi5hY2Nlc3ModGhpcyxmdW5jdGlvbihhLGMsaCl7dmFyIGksaixrLGw7aWYoZi5pc1dpbmRvdyhhKSl7aT1hLmRvY3VtZW50LGo9aS5kb2N1bWVudEVsZW1lbnRbZF07cmV0dXJuIGYuc3VwcG9ydC5ib3hNb2RlbCYmanx8aS5ib2R5JiZpLmJvZHlbZF18fGp9aWYoYS5ub2RlVHlwZT09PTkpe2k9YS5kb2N1bWVudEVsZW1lbnQ7aWYoaVtkXT49aVtlXSlyZXR1cm4gaVtkXTtyZXR1cm4gTWF0aC5tYXgoYS5ib2R5W2VdLGlbZV0sYS5ib2R5W2ddLGlbZ10pfWlmKGg9PT1iKXtrPWYuY3NzKGEsYyksbD1wYXJzZUZsb2F0KGspO3JldHVybiBmLmlzTnVtZXJpYyhsKT9sOmt9ZihhKS5jc3MoYyxoKX0sYyxhLGFyZ3VtZW50cy5sZW5ndGgsbnVsbCl9fSksYS5qUXVlcnk9YS4kPWYsdHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZCYmZGVmaW5lLmFtZC5qUXVlcnkmJmRlZmluZSgianF1ZXJ5IixbXSxmdW5jdGlvbigpe3JldHVybiBmfSl9KSh3aW5kb3cpOw==]]></data>
	</file>
	<file>
	  <filename>/lib/js/jquery.tooltip.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[I3Rvb2x0aXAgewoJcG9zaXRpb246IGFic29sdXRlOwoJei1pbmRleDogMTAwMDsKCWJvcmRlcjogMXB4IHNvbGlkICMwMDA7CgliYWNrZ3JvdW5kLWNvbG9yOiAjREREOwoJcGFkZGluZzogNXB4OwoJb3BhY2l0eTogMC44NTsKfQojdG9vbHRpcCBoMywgI3Rvb2x0aXAgZGl2IHsgbWFyZ2luOiAwOyBmb250LXNpemU6IDlwdDsgY29sb3I6ICM1ODU4NTg7fQo=]]></data>
	</file>
	<file>
	  <filename>/lib/js/jquery.tooltip.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKICogalF1ZXJ5IFRvb2x0aXAgcGx1Z2luIDEuMwogKgogKiBodHRwOi8vYmFzc2lzdGFuY2UuZGUvanF1ZXJ5LXBsdWdpbnMvanF1ZXJ5LXBsdWdpbi10b29sdGlwLwogKiBodHRwOi8vZG9jcy5qcXVlcnkuY29tL1BsdWdpbnMvVG9vbHRpcAogKgogKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA4IErDtnJuIFphZWZmZXJlcgogKgogKiAkSWQ6IGpxdWVyeS50b29sdGlwLmpzIDU3NDEgMjAwOC0wNi0yMSAxNToyMjoxNlogam9lcm4uemFlZmZlcmVyICQKICogCiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBhbmQgR1BMIGxpY2Vuc2VzOgogKiAgIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwCiAqICAgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC5odG1sCiAqLzsoZnVuY3Rpb24oJCl7dmFyIGhlbHBlcj17fSxjdXJyZW50LHRpdGxlLHRJRCxJRT0kLmJyb3dzZXIubXNpZSYmL01TSUVccyg1XC41fDZcLikvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksdHJhY2s9ZmFsc2U7JC50b29sdGlwPXtibG9ja2VkOmZhbHNlLGRlZmF1bHRzOntkZWxheToyMDAsZmFkZTpmYWxzZSxzaG93VVJMOnRydWUsZXh0cmFDbGFzczoiIix0b3A6MTUsbGVmdDoxNSxpZDoidG9vbHRpcCJ9LGJsb2NrOmZ1bmN0aW9uKCl7JC50b29sdGlwLmJsb2NrZWQ9ISQudG9vbHRpcC5ibG9ja2VkO319OyQuZm4uZXh0ZW5kKHt0b29sdGlwOmZ1bmN0aW9uKHNldHRpbmdzKXtzZXR0aW5ncz0kLmV4dGVuZCh7fSwkLnRvb2x0aXAuZGVmYXVsdHMsc2V0dGluZ3MpO2NyZWF0ZUhlbHBlcihzZXR0aW5ncyk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpeyQuZGF0YSh0aGlzLCJ0b29sdGlwIixzZXR0aW5ncyk7dGhpcy50T3BhY2l0eT1oZWxwZXIucGFyZW50LmNzcygib3BhY2l0eSIpO3RoaXMudG9vbHRpcFRleHQ9dGhpcy50aXRsZTskKHRoaXMpLnJlbW92ZUF0dHIoInRpdGxlIik7dGhpcy5hbHQ9IiI7fSkubW91c2VvdmVyKHNhdmUpLm1vdXNlb3V0KGhpZGUpLmNsaWNrKGhpZGUpO30sZml4UE5HOklFP2Z1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBpbWFnZT0kKHRoaXMpLmNzcygnYmFja2dyb3VuZEltYWdlJyk7aWYoaW1hZ2UubWF0Y2goL151cmxcKFsiJ10/KC4qXC5wbmcpWyInXT9cKSQvaSkpe2ltYWdlPVJlZ0V4cC4kMTskKHRoaXMpLmNzcyh7J2JhY2tncm91bmRJbWFnZSc6J25vbmUnLCdmaWx0ZXInOiJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGFJbWFnZUxvYWRlcihlbmFibGVkPXRydWUsIHNpemluZ01ldGhvZD1jcm9wLCBzcmM9JyIraW1hZ2UrIicpIn0pLmVhY2goZnVuY3Rpb24oKXt2YXIgcG9zaXRpb249JCh0aGlzKS5jc3MoJ3Bvc2l0aW9uJyk7aWYocG9zaXRpb24hPSdhYnNvbHV0ZScmJnBvc2l0aW9uIT0ncmVsYXRpdmUnKSQodGhpcykuY3NzKCdwb3NpdGlvbicsJ3JlbGF0aXZlJyk7fSk7fX0pO306ZnVuY3Rpb24oKXtyZXR1cm4gdGhpczt9LHVuZml4UE5HOklFP2Z1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpeyQodGhpcykuY3NzKHsnZmlsdGVyJzonJyxiYWNrZ3JvdW5kSW1hZ2U6Jyd9KTt9KTt9OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXM7fSxoaWRlV2hlbkVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpeyQodGhpcylbJCh0aGlzKS5odG1sKCk/InNob3ciOiJoaWRlIl0oKTt9KTt9LHVybDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmF0dHIoJ2hyZWYnKXx8dGhpcy5hdHRyKCdzcmMnKTt9fSk7ZnVuY3Rpb24gY3JlYXRlSGVscGVyKHNldHRpbmdzKXtpZihoZWxwZXIucGFyZW50KXJldHVybjtoZWxwZXIucGFyZW50PSQoJzxkaXYgaWQ9Iicrc2V0dGluZ3MuaWQrJyI+PGgzPjwvaDM+PGRpdiBjbGFzcz0iYm9keSI+PC9kaXY+PGRpdiBjbGFzcz0idXJsIj48L2Rpdj48L2Rpdj4nKS5hcHBlbmRUbyhkb2N1bWVudC5ib2R5KS5oaWRlKCk7aWYoJC5mbi5iZ2lmcmFtZSloZWxwZXIucGFyZW50LmJnaWZyYW1lKCk7aGVscGVyLnRpdGxlPSQoJ2gzJyxoZWxwZXIucGFyZW50KTtoZWxwZXIuYm9keT0kKCdkaXYuYm9keScsaGVscGVyLnBhcmVudCk7aGVscGVyLnVybD0kKCdkaXYudXJsJyxoZWxwZXIucGFyZW50KTt9ZnVuY3Rpb24gc2V0dGluZ3MoZWxlbWVudCl7cmV0dXJuICQuZGF0YShlbGVtZW50LCJ0b29sdGlwIik7fWZ1bmN0aW9uIGhhbmRsZShldmVudCl7aWYoc2V0dGluZ3ModGhpcykuZGVsYXkpdElEPXNldFRpbWVvdXQoc2hvdyxzZXR0aW5ncyh0aGlzKS5kZWxheSk7ZWxzZQpzaG93KCk7dHJhY2s9ISFzZXR0aW5ncyh0aGlzKS50cmFjazskKGRvY3VtZW50LmJvZHkpLmJpbmQoJ21vdXNlbW92ZScsdXBkYXRlKTt1cGRhdGUoZXZlbnQpO31mdW5jdGlvbiBzYXZlKCl7aWYoJC50b29sdGlwLmJsb2NrZWR8fHRoaXM9PWN1cnJlbnR8fCghdGhpcy50b29sdGlwVGV4dCYmIXNldHRpbmdzKHRoaXMpLmJvZHlIYW5kbGVyKSlyZXR1cm47Y3VycmVudD10aGlzO3RpdGxlPXRoaXMudG9vbHRpcFRleHQ7aWYoc2V0dGluZ3ModGhpcykuYm9keUhhbmRsZXIpe2hlbHBlci50aXRsZS5oaWRlKCk7dmFyIGJvZHlDb250ZW50PXNldHRpbmdzKHRoaXMpLmJvZHlIYW5kbGVyLmNhbGwodGhpcyk7aWYoYm9keUNvbnRlbnQubm9kZVR5cGV8fGJvZHlDb250ZW50LmpxdWVyeSl7aGVscGVyLmJvZHkuZW1wdHkoKS5hcHBlbmQoYm9keUNvbnRlbnQpfWVsc2V7aGVscGVyLmJvZHkuaHRtbChib2R5Q29udGVudCk7fWhlbHBlci5ib2R5LnNob3coKTt9ZWxzZSBpZihzZXR0aW5ncyh0aGlzKS5zaG93Qm9keSl7dmFyIHBhcnRzPXRpdGxlLnNwbGl0KHNldHRpbmdzKHRoaXMpLnNob3dCb2R5KTtoZWxwZXIudGl0bGUuaHRtbChwYXJ0cy5zaGlmdCgpKS5zaG93KCk7aGVscGVyLmJvZHkuZW1wdHkoKTtmb3IodmFyIGk9MCxwYXJ0OyhwYXJ0PXBhcnRzW2ldKTtpKyspe2lmKGk+MCloZWxwZXIuYm9keS5hcHBlbmQoIjxici8+Iik7aGVscGVyLmJvZHkuYXBwZW5kKHBhcnQpO31oZWxwZXIuYm9keS5oaWRlV2hlbkVtcHR5KCk7fWVsc2V7aGVscGVyLnRpdGxlLmh0bWwodGl0bGUpLnNob3coKTtoZWxwZXIuYm9keS5oaWRlKCk7fWlmKHNldHRpbmdzKHRoaXMpLnNob3dVUkwmJiQodGhpcykudXJsKCkpaGVscGVyLnVybC5odG1sKCQodGhpcykudXJsKCkucmVwbGFjZSgnaHR0cDovLycsJycpKS5zaG93KCk7ZWxzZQpoZWxwZXIudXJsLmhpZGUoKTtoZWxwZXIucGFyZW50LmFkZENsYXNzKHNldHRpbmdzKHRoaXMpLmV4dHJhQ2xhc3MpO2lmKHNldHRpbmdzKHRoaXMpLmZpeFBORyloZWxwZXIucGFyZW50LmZpeFBORygpO2hhbmRsZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7fWZ1bmN0aW9uIHNob3coKXt0SUQ9bnVsbDtpZigoIUlFfHwhJC5mbi5iZ2lmcmFtZSkmJnNldHRpbmdzKGN1cnJlbnQpLmZhZGUpe2lmKGhlbHBlci5wYXJlbnQuaXMoIjphbmltYXRlZCIpKWhlbHBlci5wYXJlbnQuc3RvcCgpLnNob3coKS5mYWRlVG8oc2V0dGluZ3MoY3VycmVudCkuZmFkZSxjdXJyZW50LnRPcGFjaXR5KTtlbHNlCmhlbHBlci5wYXJlbnQuaXMoJzp2aXNpYmxlJyk/aGVscGVyLnBhcmVudC5mYWRlVG8oc2V0dGluZ3MoY3VycmVudCkuZmFkZSxjdXJyZW50LnRPcGFjaXR5KTpoZWxwZXIucGFyZW50LmZhZGVJbihzZXR0aW5ncyhjdXJyZW50KS5mYWRlKTt9ZWxzZXtoZWxwZXIucGFyZW50LnNob3coKTt9dXBkYXRlKCk7fWZ1bmN0aW9uIHVwZGF0ZShldmVudCl7aWYoJC50b29sdGlwLmJsb2NrZWQpcmV0dXJuO2lmKGV2ZW50JiZldmVudC50YXJnZXQudGFnTmFtZT09Ik9QVElPTiIpe3JldHVybjt9aWYoIXRyYWNrJiZoZWxwZXIucGFyZW50LmlzKCI6dmlzaWJsZSIpKXskKGRvY3VtZW50LmJvZHkpLnVuYmluZCgnbW91c2Vtb3ZlJyx1cGRhdGUpfWlmKGN1cnJlbnQ9PW51bGwpeyQoZG9jdW1lbnQuYm9keSkudW5iaW5kKCdtb3VzZW1vdmUnLHVwZGF0ZSk7cmV0dXJuO31oZWxwZXIucGFyZW50LnJlbW92ZUNsYXNzKCJ2aWV3cG9ydC1yaWdodCIpLnJlbW92ZUNsYXNzKCJ2aWV3cG9ydC1ib3R0b20iKTt2YXIgbGVmdD1oZWxwZXIucGFyZW50WzBdLm9mZnNldExlZnQ7dmFyIHRvcD1oZWxwZXIucGFyZW50WzBdLm9mZnNldFRvcDtpZihldmVudCl7bGVmdD1ldmVudC5wYWdlWCtzZXR0aW5ncyhjdXJyZW50KS5sZWZ0O3RvcD1ldmVudC5wYWdlWStzZXR0aW5ncyhjdXJyZW50KS50b3A7dmFyIHJpZ2h0PSdhdXRvJztpZihzZXR0aW5ncyhjdXJyZW50KS5wb3NpdGlvbkxlZnQpe3JpZ2h0PSQod2luZG93KS53aWR0aCgpLWxlZnQ7bGVmdD0nYXV0byc7fWhlbHBlci5wYXJlbnQuY3NzKHtsZWZ0OmxlZnQscmlnaHQ6cmlnaHQsdG9wOnRvcH0pO312YXIgdj12aWV3cG9ydCgpLGg9aGVscGVyLnBhcmVudFswXTtpZih2Lngrdi5jeDxoLm9mZnNldExlZnQraC5vZmZzZXRXaWR0aCl7bGVmdC09aC5vZmZzZXRXaWR0aCsyMCtzZXR0aW5ncyhjdXJyZW50KS5sZWZ0O2hlbHBlci5wYXJlbnQuY3NzKHtsZWZ0OmxlZnQrJ3B4J30pLmFkZENsYXNzKCJ2aWV3cG9ydC1yaWdodCIpO31pZih2Lnkrdi5jeTxoLm9mZnNldFRvcCtoLm9mZnNldEhlaWdodCl7dG9wLT1oLm9mZnNldEhlaWdodCsyMCtzZXR0aW5ncyhjdXJyZW50KS50b3A7aGVscGVyLnBhcmVudC5jc3Moe3RvcDp0b3ArJ3B4J30pLmFkZENsYXNzKCJ2aWV3cG9ydC1ib3R0b20iKTt9fWZ1bmN0aW9uIHZpZXdwb3J0KCl7cmV0dXJue3g6JCh3aW5kb3cpLnNjcm9sbExlZnQoKSx5OiQod2luZG93KS5zY3JvbGxUb3AoKSxjeDokKHdpbmRvdykud2lkdGgoKSxjeTokKHdpbmRvdykuaGVpZ2h0KCl9O31mdW5jdGlvbiBoaWRlKGV2ZW50KXtpZigkLnRvb2x0aXAuYmxvY2tlZClyZXR1cm47aWYodElEKWNsZWFyVGltZW91dCh0SUQpO2N1cnJlbnQ9bnVsbDt2YXIgdHNldHRpbmdzPXNldHRpbmdzKHRoaXMpO2Z1bmN0aW9uIGNvbXBsZXRlKCl7aGVscGVyLnBhcmVudC5yZW1vdmVDbGFzcyh0c2V0dGluZ3MuZXh0cmFDbGFzcykuaGlkZSgpLmNzcygib3BhY2l0eSIsIiIpO31pZigoIUlFfHwhJC5mbi5iZ2lmcmFtZSkmJnRzZXR0aW5ncy5mYWRlKXtpZihoZWxwZXIucGFyZW50LmlzKCc6YW5pbWF0ZWQnKSloZWxwZXIucGFyZW50LnN0b3AoKS5mYWRlVG8odHNldHRpbmdzLmZhZGUsMCxjb21wbGV0ZSk7ZWxzZQpoZWxwZXIucGFyZW50LnN0b3AoKS5mYWRlT3V0KHRzZXR0aW5ncy5mYWRlLGNvbXBsZXRlKTt9ZWxzZQpjb21wbGV0ZSgpO2lmKHNldHRpbmdzKHRoaXMpLmZpeFBORyloZWxwZXIucGFyZW50LnVuZml4UE5HKCk7fX0pKGpRdWVyeSk7]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghaXNzZXQoJGdDbXMpKSBleGl0OwoKLy8gREIgQ29ubmVjdGlvbgokZGIgPSYgJHRoaXMtPkdldERiKCk7CiRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoICRkYiApOwoKLy9GYXEgdGFibGUKJGZsZHMgPSAiCglpZCBJIEtFWSwKCXRpdGxlIEMoMjU1KSwKCXBhdGggQygyNTUpLAoJd2lkdGggSU5UKDEwKSwKCWhlaWdodCBJTlQoMTApCiI7IAoKJHRhYm9wdGFycmF5ID0gYXJyYXkoJ215c3FsJyA9PiAnJyk7CiRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVUYWJsZVNRTChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9id2ltYWdlc19zZXR0aW5ncyIsICRmbGRzLCAkdGFib3B0YXJyYXkpOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CiRkYi0+Q3JlYXRlU2VxdWVuY2UoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfYndpbWFnZXNfc2V0dGluZ3Nfc2VxIik7CgoKLy9OZXdzIHNldHRpbmdzIHRhYmxlCiRmbGRzID0gIgoJd2lkdGggSU5UKDEwKSwKCWhlaWdodCBJTlQoMTApCiI7IAokdGFib3B0YXJyYXkgPSBhcnJheSgnbXlzcWwnID0+ICcnKTsKJHNxbGFycmF5ID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2J3aW1hZ2VzX25ld3NzZXR0aW5ncyIsICRmbGRzLCAkdGFib3B0YXJyYXkpOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgoKLy8gUGVybWlzc2lvbnMKJHRoaXMtPkNyZWF0ZVBlcm1pc3Npb24oJ1VwbG9hZCBpbWFnZXMgaW4gQldJbWFnZXMnLCAnVXBsb2FkIGltYWdlcyBpbiBCV0ltYWdlcycpOwokdGhpcy0+Q3JlYXRlUGVybWlzc2lvbignQWRkIHNldHRpbmdzIEJXSW1hZ2VzJywgJ0FkZCBzZXR0aW5ncyBCV0ltYWdlcycpOwoKLy8gR2VuZXJhbCBTZXR0aW5nczoKJHRoaXMtPlNldFByZWZlcmVuY2UoJ0NvbmZpZ1BhdGgnLCd1cGxvYWRzL2ltYWdlcycpOwoKPz4=]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgovLyBEQgokZGIgPSYgJHRoaXMtPkdldERiKCk7CiRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoICRkYiApOwoKLy8gVGFibGVzCi8vIEpvYnMKJHNxbGFycmF5ID0gJGRpY3QtPkRyb3BUYWJsZVNRTCggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfYndpbWFnZXNfc2V0dGluZ3MiICk7CiRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKJGRiLT5Ecm9wU2VxdWVuY2UoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2J3aW1hZ2VzX3NldHRpbmdzX3NlcSIgKTsKJHNxbGFycmF5ID0gJGRpY3QtPkRyb3BUYWJsZVNRTCggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfYndpbWFnZXNfbmV3c3NldHRpbmdzIiApOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgovLyBQcmVmZXJlbmNlcwokdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgpOwoKLyovLyBQZXJtaXNzaW9ucwokdGhpcy0+UmVtb3ZlUGVybWlzc2lvbignVXNlIEJXSm9icycpOwokdGhpcy0+UmVtb3ZlUGVybWlzc2lvbignQ2hhbmdlIEJXSm9icyBTZXR0aW5ncycpOwokdGhpcy0+UmVtb3ZlUGVybWlzc2lvbignQ2hhbmdlIEJXSm9icyBUZW1wbGF0ZXMnKTsKKi8=]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CiRkYiA9JiAkdGhpcy0+R2V0RGIoKTsKJGRpY3QgPSBOZXdEYXRhRGljdGlvbmFyeSgkZGIpOwoKCmlmKCRvbGR2ZXJzaW9uID09ICcxLjEuMScpewoJCgkvLyBHZW5lcmFsIFNldHRpbmdzOgoJJHRoaXMtPlNldFByZWZlcmVuY2UoJ0NvbmZpZ1BhdGgnLCd1cGxvYWRzL2ltYWdlcycpOwoJCQoJJG9sZHZlcnNpb24gPSAnMS4yJzsKfQoKPz4K]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/admin_addeditsetting.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2xpdGVyYWx9DQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQokKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpew0KCSQoIi5udW1lcmljIGlucHV0Iikua2V5dXAoZnVuY3Rpb24oKXsNCgkJdGhpcy52YWx1ZSA9IHRoaXMudmFsdWUucmVwbGFjZSgvXEQvZywgJycpOw0KCX0pOw0KfSk7DQoNCjwvc2NyaXB0Pg0Key9saXRlcmFsfQ0KPGRpdj4NCgk8aDM+eyRwYWdlX3RpdGxlfTwvaDM+DQoJeyRmb3JtX3N0YXJ0fQ0KCQk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KCQkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JGltYWdlX3RpdGxlfTo8L3A+DQoJCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGltYWdlX2lucHV0X3RpdGxlfSB7JGltYWdlX3RpdGxlX2hlbHB9PC9wPg0KCQk8L2Rpdj4NCgkJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCgkJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyRpbWFnZV9wYXRofTo8L3A+DQoJCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGltYWdlX2lucHV0X3BhdGh9IHskaW1hZ2VfcGF0aF9oZWxwfTwvcD4NCgkJPC9kaXY+DQoJCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQoJCQk8cCBjbGFzcz0icGFnZXRleHQiPnskaW1hZ2Vfd2lkdGh9OjwvcD4NCgkJCTxwIGNsYXNzPSJwYWdlaW5wdXQgbnVtZXJpYyI+eyRpbWFnZV9pbnB1dF93aWR0aH0geyRpbWFnZV93aWR0aF9oZWxwfTwvcD4NCgkJPC9kaXY+DQoJCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQoJCQk8cCBjbGFzcz0icGFnZXRleHQiPnskaW1hZ2VfaGVpZ2h0fTo8L3A+DQoJCQk8cCBjbGFzcz0icGFnZWlucHV0IG51bWVyaWMiPnskaW1hZ2VfaW5wdXRfaGVpZ2h0fSB7JGltYWdlX2hlaWdodF9oZWxwfTwvcD4NCgkJPC9kaXY+DQoJCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQoJCQk8cCBjbGFzcz0icGFnZXRleHQiPjwvcD4NCgkJCXtpZiAkY3JlYXRlfQ0KCQkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRjcmVhdGV9IHskY2FuY2VsfTwvcD4NCgkJCXtlbHNlfQ0KCQkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRzdWJtaXR9IHskY2FuY2VsfTwvcD4NCgkJCXsvaWZ9DQoJCTwvZGl2Pg0KCXskZm9ybV9lbmR9DQo8L2Rpdj4=]]></data>
	</file>
	<file>
	  <filename>/templates/admin_jcrop.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyRsb2FkRmFuY3lib3h9DQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQp2YXIgd2lkdGggPSB7JHdpZHRofTsNCnZhciBoZWlnaHQgPSB7JGhlaWdodH07DQo8L3NjcmlwdD4NCnskbG9hZEpjcm9wfQ0KDQo8ZGl2IGlkPSJlZGl0SW1hZ2VTZXR0aW5ncyI+DQoNCgk8ZGl2IGlkPSJvdXRlciI+DQoJCTxkaXYgY2xhc3M9ImpjRXhhbXBsZSI+DQoJCQk8ZGl2IGNsYXNzPSJhcnRpY2xlIj4NCgkJCQkNCgkJCQl7aWYgJHRtcGltYWdlIG5lcSAnJ30NCgkJCQk8IS0tIFRoaXMgaXMgdGhlIGltYWdlIHdlJ3JlIGF0dGFjaGluZyBKY3JvcCB0byAtLT4NCgkJCQk8aW1nIHNyYz0ieyR0bXBpbWFnZX0iIGlkPSJjcm9wYm94IiAvPg0KCQkJCXtlbHNlfQ0KCQkJCTxzdHJvbmc+RXJyb3IgdGhlcmUgaXMgbm8gaW1hZ2UgdXBsb2FkZWQ8L3N0cm9uZz4NCgkJCQl7L2lmfQ0KCQkJCQ0KCQkJCTwhLS0gVGhpcyBpcyB0aGUgZm9ybSB0aGF0IG91ciBldmVudCBoYW5kbGVyIGZpbGxzIC0tPg0KCQkJCXskc3RhcnRmb3JtfQ0KCQkJCXskaW5wdXRfeH0NCgkJCQl7JGlucHV0X3l9DQoJCQkJeyRpbnB1dF93aWR0aH0NCgkJCQl7JGlucHV0X2hlaWdodH0NCgkJCQk8cCBpZD0iYWJzb2x1dGVTdWJtaXQiPnskc3VibWl0fTxzcGFuIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij57JGNhbmNlbH08L3NwYW4+PC9wPg0KCQkJCXskZW5kZm9ybX0NCgkJCQkNCgkJCTwvZGl2Pg0KCQk8L2Rpdj4NCgk8L2Rpdj4NCjwvZGl2Pg==]]></data>
	</file>
	<file>
	  <filename>/templates/admin_newssettings.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2xpdGVyYWx9DQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQokKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpew0KCSQoIi5udW1lcmljIGlucHV0Iikua2V5dXAoZnVuY3Rpb24oKXsNCgkJdGhpcy52YWx1ZSA9IHRoaXMudmFsdWUucmVwbGFjZSgvXEQvZywgJycpOw0KCX0pOw0KfSk7DQoNCjwvc2NyaXB0Pg0Key9saXRlcmFsfQ0KPGRpdj4NCgk8aDM+eyRwYWdlX3RpdGxlfTwvaDM+DQoJeyRmb3JtX3N0YXJ0fQ0KCQk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KCQkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHdpZHRoX3RleHR9IDo8L3A+DQoJCQk8cCBjbGFzcz0icGFnZWlucHV0IG51bWVyaWMiPnskd2lkdGh9cHg8L3A+DQoJCTwvZGl2Pg0KCQk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KCQkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JGhlaWdodF90ZXh0fTo8L3A+DQoJCQk8cCBjbGFzcz0icGFnZWlucHV0IG51bWVyaWMiPnskaGVpZ2h0fXB4PC9wPg0KCQk8L2Rpdj4NCgkJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCgkJCTxwIGNsYXNzPSJwYWdldGV4dCI+PC9wPg0KCQkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRzdWJtaXR9IDwvcD4NCgkJPC9kaXY+DQoJeyRmb3JtX2VuZH0NCjwvZGl2Pg==]]></data>
	</file>
	<file>
	  <filename>/templates/admin_settings.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiPg0KCTxwIGNsYXNzPSJwYWdlb3B0aW9ucyI+eyRhZGRsaW5rfTwvcD4NCjwvZGl2Pg0KPHRhYmxlIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9InBhZ2V0YWJsZSI+DQoJPHRoZWFkPg0KCQkJPHRyPg0KCQkJCTx0aCB3aWR0aD0iMTUwIj48Yj57JGltYWdlX3RpdGxlfTwvYj48L3RoPg0KCQkJCTx0aCB3aWR0aD0iMjAwIj48Yj57JGltYWdlX3BhdGh9PC9iPjwvdGg+DQoJCQkJPHRoIHdpZHRoPSIxMDAiPjxiPnskaW1hZ2Vfd2lkdGh9PC9iPjwvdGg+DQoJCQkJPHRoIHdpZHRoPSIxMDAiPjxiPnskaW1hZ2VfaGVpZ2h0fTwvYj48L3RoPg0KCQkJCTx0aCB3aWR0aD0iMTAwIiBjb2xzcGFuPSIyIj48Yj57JGltYWdlX2VkaXR9PC9iPjwvdGg+DQoJCQkJPHRoPjwvdGg+DQoJCQk8L3RyPg0KCTwvdGhlYWQ+DQoJPHRib2R5Pg0KCQl7Zm9yZWFjaCBmcm9tPSRpdGVtcyBpdGVtPW9ian0NCgkJCTx0ciBjbGFzcz0icm93Ij4NCgkJCQk8dGQ+eyRvYmoudGl0bGVsaW5rfTwvdGQ+DQoJCQkJPHRkPnskb2JqLnBhdGh8c3RyaXBfdGFnczpmYWxzZXx0cnVuY2F0ZTo1MH08L3RkPg0KCQkJCTx0ZD57JG9iai53aWR0aH08L3RkPg0KCQkJCTx0ZD57JG9iai5oZWlnaHR9PC90ZD4NCgkJCQk8dGQgd2lkdGg9IjM1Ij57JG9iai5lZGl0bGlua308L3RkPjx0ZCB3aWR0aD0iMzUiPnskb2JqLmRlbGV0ZWxpbmt9PC90ZD4NCgkJCQk8dGQ+PC90ZD4NCgkJCTwvdHI+DQoJCXsvZm9yZWFjaH0NCgk8L3Rib2R5Pg0KPC90YWJsZT4NCjxkaXYgY2xhc3M9InBhZ2VvcHRpb25zIj4NCgk8cCBjbGFzcz0icGFnZW9wdGlvbnMiPnskYWRkbGlua308L3A+DQo8L2Rpdj4=]]></data>
	</file>
	<file>
	  <filename>/templates/admin_settingstab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBpZD0ibW9kdWxlX3NldHRpbmdzIj4NCg0KeyRzdGFydGZvcm19DQoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRpdGxlX0NvbmZpZ3BhdGh9OjwvcD4NCgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9Db25maWdwYXRofSB7JGlucHV0X0NvbmZpZ3BhdGhfaGVscH08L3A+DQoJPC9kaXY+DQoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij4mbmJzcDs8L3A+DQoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskc3VibWl0fTwvcD4NCgk8L2Rpdj4NCnskZW5kZm9ybX0NCg0KPC9kaXY+]]></data>
	</file>
	<file>
	  <filename>/templates/admin_upload.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdj4NCgk8aDM+eyRwYWdlX3RpdGxlfTwvaDM+DQoJeyRzdGFydGZvcm19DQoJCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQoJCQk8cCBjbGFzcz0icGFnZXRleHQiPnskdXBsb2FkX3RleHR9IDo8L3A+DQoJCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X3VwbG9hZF9pbWFnZX0geyRpbnB1dF91cGxvYWRfaGVscH08L3A+DQoJCTwvZGl2Pg0KCQk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KCQkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JGNob29zZV9zZXR0aW5nX3RleHR9OjwvcD4NCgkJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskZHJvcGRvd25fc2V0dGluZ3NfaW1hZ2V9IHskZHJvcGRvd25fc2V0dGluZ3NfaGVscH08L3A+DQoJCTwvZGl2Pg0KCQk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KCQkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij48L3A+DQoJCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JHN1Ym1pdH0gPC9wPg0KCQk8L2Rpdj4NCgl7JGVuZGZvcm19DQo8L2Rpdj4=]]></data>
	</file>
	<file>
	  <filename>/templates/admin_uploadnews.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdj4NCgk8aDM+eyRwYWdlX3RpdGxlfTwvaDM+DQoJeyRzdGFydGZvcm19DQoJCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQoJCQk8cCBjbGFzcz0icGFnZXRleHQiPnskdXBsb2FkX3RleHR9IDo8L3A+DQoJCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X3VwbG9hZF9pbWFnZX0geyRpbnB1dF91cGxvYWRfaGVscH08L3A+DQoJCTwvZGl2PgkJDQoJCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQoJCQk8cCBjbGFzcz0icGFnZXRleHQiPnskY2hvb3NlX25ld3NfdGV4dH06PC9wPg0KCQkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRkcm9wZG93bl9uZXdzaXRlbXN9IHskZHJvcGRvd25fc2V0dGluZ3NfaGVscH08L3A+DQoJCTwvZGl2Pg0KCQk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KCQkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij48L3A+DQoJCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JHN1Ym1pdH0gPC9wPg0KCQk8L2Rpdj4NCgl7JGVuZGZvcm19DQo8L2Rpdj4=]]></data>
	</file>
</module>
