<?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>CodeMirror</name>
	<version>2.2.2</version>
  <mincmsversion>1.9</mincmsversion>
	<help><![CDATA[PHN0cm9uZz5IdmFkIGcmb3NsYXNoO3IgZGV0dGUgbW9kdWw/PC9zdHJvbmc+DQo8YnIvPg0KQ29kZU1pcnJvci1tb2R1bGVzIGdpdmVyIGRpZyBtdWxpZ2hlZCBmb3IgYXQgcmVkaWdlcmUgaW5kaG9sZCwgc2thYmVsb25lciBvZyBzdHlsZXNoZWV0cyB2ZWQgaGomYWVsaWc7bHAgYWYgc3ludGFrcy1mcmVtaCZhZWxpZzt2ZW5kZSByZWRpZ2VyaW5nIGkgZGluIGJyb3dzZXIuDQo8YnIvPjxici8+DQo8c3Ryb25nPkh2b3JkYW4gYnJ1Z2VyIGplZyBkZXR0ZSBtb2R1bD88L3N0cm9uZz4NCkR1IGluc3RhbGxlcmVyIGRldCBvZyB2JmFlbGlnO2xnZXIgZGV0IGkgZGluZSBicnVnZXIgaW5kc3RpbGxpbmdlciBmb3IgYWRtaW5zaXRyYXRpb25lbi4gQmVtJmFlbGlnO3JrIGF0IGR1IGthbiB2JmFlbGlnO2xnZSBhdCBiZW55dHRlIGRldCBiJmFyaW5nO2RlIHNvbSBzeW50YWtzIGZyZW1oJmFlbGlnO3ZlciBvZyBXWVNJV1lHLjxoMz5QYXJhbWV0cmU8L2gzPjx1bD48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBsYW5nPSJlbl9VUyIgLSBQYXJhbWV0cmV0IGFuZ2l2ZXIgaHZpbGtldCBzcHJvZyBkZXIgc2thbCBicnVnZXMgdGlsIHZpc25pbmcgZm9yIGJlcyZvc2xhc2g7Z2VuZGUuIElra2UgYWxsZSBtb2R1bGVyIHVuZGVyc3Qmb3NsYXNoO3R0ZXIgZWxsZXIgYmVoJm9zbGFzaDt2ZXIgZGV0dGUuPC9saT48L3VsPg==]]></help>
	<about><![CDATA[PGJyIC8+TGF2ZXQgYWY6IE1vcnRlbiBQb3Vsc2VuICZsdDsmbHQ7bW9ydGVuQHBvdWxzZW4ub3JnJmd0OyZndDs8YnIgLz48YnIgLz5WZXJzaW9uOiAyLjIuMjxiciAvPjxiciAvPkhpc3RvcmlrIG92ZXIgJmFlbGlnO25kcmluZ2VyOjxiciAvPjx1bD4KICA8bGk+Mi4yLjIgLSBVcGRhdGVkIHRvIENNIDIuMi4xPC9saT4KICA8bGk+Mi4yLjEgLSBVcGRhdGVkIHRvIENNIDIuMi4wLCBhZGRlZCB0YWItd2lkdGggc2V0dGluZzwvbGk+CiAgPGxpPjIuMi4wIC0gVXBkYXRlZCB0byBDTSAyLjE1LCBhZGRlZCBvcHRpb25hbCBmdWxsc2NyZWVuIG1vZGU8L2xpPgogIDxsaT4yLjEuMiAtIFVwZGF0ZWQgdG8gQ00gMi4xMiwgY2xlYW5lciB3YXkgb2Ygc2F2aW5nIGVkaXRvciBjb250ZW50IHRvIHRleHRhcmVhPC9saT4KICA8bGk+Mi4xLjAgLSBVcGRhdGVkIHRvIENNIDIuMS4xLCBvbmNlIGFnYWluIGNoYW5nZSB0ZXN0bW9kZS4uLiA8L2xpPgogIDxsaT4yLjAuMSAtIFVwZGF0ZWQgdG8gQ00gMi4wLjE8L2xpPgogIDxsaT4yLjAgLSBVcGRhdGVkIHRvIENNIDIuMCBhbmQgcmV3b3JrZWQganVzdCBhYm91dCBldmVyeXRoaW5nIHRvIG1ha2UgdGhpcyB3b3JrPC9saT4KICA8bGk+MC4xLjkgLSBVcGRhdGVkIHRvIENNIDAuOTM8L2xpPgogIDxsaT4wLjEuOCAtIFVwZGF0ZWQgdG8gQ00gMC45LCBhZGRlZCBvcHRpb24gb24gaG93IHRvIGhhbmRsZSBUQUI8L2xpPgogIDxsaT4wLjEuNyAtIFVwZGF0ZWQgdG8gQ00gMC44MDwvbGk+CiAgPGxpPjAuMS42IC0gVXBkYXRlZCB0byBDTSAwLjcwLCBBZGRlZCBvcHRpb24gdG8gbWF0Y2ggcGFyZW50aGVzaXM8L2xpPgogIDxsaT4wLjEuNSAtIFVwZGF0ZWQgdG8gQ00gMC42NiwgcmVtb3ZlZCBhIHN0cmFuZ2UgXG4gY2hhciBmcm9tIGhlYWRlcm91dHB1dCwgbWFkZSB0YWJiaW5nIHdvcms8L2xpPgogIDxsaT4wLjEuNCAtIEZpeGVkIENQVSBob2dnaW5nIHByb2JsZW1zIGJ5IHJld3JpdGluZyB0ZXN0YXJlYS1jb2RlPC9saT4KICA8bGk+MC4xLjMgLSBVcGRhdGVkIHRvIENNIDAuNjUsIGFkZGVkIG9wdGlvbiB0byB0b2dnbGUgd29yZHdyYXA8L2xpPgogIDxsaT4wLjEuMiAtIFVwZGF0ZWQgdG8gQ00gMC42MzwvbGk+CiAgPGxpPjAuMS4xIC0gVXBkYXRlZCB0byBDTSAwLjYyLCBmaXhlZCBleGFtcGxlcyBhbmQgcHJvYmFibHkgZnVuY3Rpb25hbGl0eSBhcyB3ZWxsPC9saT4KICA8bGk+MC4xLjAgLSBJbml0aWFsIHJlbGVhc2UgPC9saT4KPC91bD48YnIgLz4=]]></about>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghZnVuY3Rpb25fZXhpc3RzKCJjbXNtcyIpKSBleGl0OwoKaWYgKCEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNb2RpZnkgU2l0ZSBQcmVmZXJlbmNlcycpKSB7CiAgZWNobyAkdGhpcy0+U2hvd0Vycm9ycygkdGhpcy0+TGFuZygnbmVlZHBlcm1pc3Npb24nLCBhcnJheSgnTW9kaWZ5IFNpdGUgUHJlZmVyZW5jZXMnKSkpOwogIHJldHVybjsKfQoKaWYgKGlzc2V0KCRwYXJhbXNbImV4YW1wbGVzeW50YXgiXSkpIHsKICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgiZXhhbXBsZXN5bnRheCIsJHBhcmFtc1siZXhhbXBsZXN5bnRheCJdKTsKfQoKZWNobyAkdGhpcy0+U3RhcnRUYWJIZWFkZXJzKCk7CmVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcigic2V0dGluZ3MiLCR0aGlzLT5MYW5nKCJzZXR0aW5nc3RhYiIpKTsKLyplY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoImh0bWwiLCR0aGlzLT5MYW5nKCJodG1sdGVzdCIpKTsKZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCJwaHAiLCR0aGlzLT5MYW5nKCJwaHB0ZXN0IikpOwplY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoImNzcyIsJHRoaXMtPkxhbmcoImNzc3Rlc3QiKSk7CmVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcigianMiLCR0aGlzLT5MYW5nKCJqc3Rlc3QiKSk7CiovCmVjaG8gJHRoaXMtPkVuZFRhYkhlYWRlcnMoKTsKZWNobyAkdGhpcy0+U3RhcnRUYWJDb250ZW50KCk7CgoKZWNobyAkdGhpcy0+U3RhcnRUYWIoInNldHRpbmdzIik7CiR0aGlzLT5zbWFydHktPmFzc2lnbignc3RhcnRmb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsICdzYXZlc2V0dGluZ3MnLCAkcmV0dXJuaWQpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdlbmRmb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7CgokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Nob3dsaW5lbnVtYmVyc3RleHQnLCAkdGhpcy0+TGFuZygic2hvd2xpbmVudW1iZXJzIikpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Nob3dsaW5lbnVtYmVyc2lucHV0JywgJHRoaXMtPkNyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCJzaG93bGluZW51bWJlcnMiLDEsJHRoaXMtPkdldFByZWZlcmVuY2UoInNob3dsaW5lbnVtYmVycyIsMSkpKTsKCiR0aGlzLT5zbWFydHktPmFzc2lnbignYWxsb3dmdWxsc2NyZWVudGV4dCcsICR0aGlzLT5MYW5nKCJhbGxvd2Z1bGxzY3JlZW4iKSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbignYWxsb3dmdWxsc2NyZWVuaW5wdXQnLCAkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsImFsbG93ZnVsbHNjcmVlbiIsMSwkdGhpcy0+R2V0UHJlZmVyZW5jZSgiYWxsb3dmdWxsc2NyZWVuIiwxKSkpOwoKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdjc3NhZGRpdGlvbnN0ZXh0JywgJHRoaXMtPkxhbmcoImNzc2FkZGl0aW9ucyIpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdjc3NhZGRpdGlvbnNpbnB1dCcsICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCJjc3NhZGRpdGlvbnMiLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCJjc3NhZGRpdGlvbnMiLCR0aGlzLT5fZGVmYXVsdGNzc2FkZGl0aW9ucyksIjYwIikpOwoKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0YWJzaXpldGV4dCcsICR0aGlzLT5MYW5nKCJ0YWJzaXplIikpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RhYnNpemVpbnB1dCcsICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCJ0YWJzaXplIiwkdGhpcy0+R2V0UHJlZmVyZW5jZSgidGFic2l6ZSIsMiksIjgiKSk7CgokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RoZW1ldGV4dCcsICR0aGlzLT5MYW5nKCJ0aGVtZSIpKTsKJHRoZW1lcz1hcnJheSgKICAnZGVmYXVsdCc9PiJkZWZhdWx0IiwKICAnY29iYWx0Jz0+J2NvYmFsdCcsCiAgJ2VjbGlwc2UnPT4nZWNsaXBzZScsCiAgImVsZWdhbnQiPT4iZWxlZ2FudCIsCiAgJ21vbm9rYWknPT4nbW9ub2thaScsCiAgIm5lYXQiPT4ibmVhdCIsCiAgIm5pZ2h0Ij0+Im5pZ2h0IiwKICAicnVieWJsdWUiPT4icnVieWJsdWUiCik7CiR0aGlzLT5zbWFydHktPmFzc2lnbigndGhlbWVpbnB1dCcsICR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwidGhlbWUiLCR0aGVtZXMsLTEsJHRoaXMtPkdldFByZWZlcmVuY2UoInRoZW1lIiwiZGVmYXVsdCIpKSk7CgovKiR0aGlzLT5zbWFydHktPmFzc2lnbigndGV4dHdyYXBwaW5ndGV4dCcsICR0aGlzLT5MYW5nKCJ0ZXh0d3JhcHBpbmciKSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbigndGV4dHdyYXBwaW5naW5wdXQnLCAkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsInRleHR3cmFwcGluZyIsMSwkdGhpcy0+R2V0UHJlZmVyZW5jZSgidGV4dHdyYXBwaW5nIiwxKSkpOwoqLwovKiR0aGlzLT5zbWFydHktPmFzc2lnbignYXV0b21hdGNocGFyZW5zdGV4dCcsICR0aGlzLT5MYW5nKCJhdXRvbWF0Y2hwYXJlbnMiKSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbignYXV0b21hdGNocGFyZW5zaW5wdXQnLCAkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsImF1dG9tYXRjaHBhcmVucyIsIjEiLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCJhdXRvbWF0Y2hwYXJlbnMiLCIwIikpKTsKKi8KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0YWJoYW5kbGluZ3RleHQnLCAkdGhpcy0+TGFuZygidGFiaGFuZGxpbmciKSk7CiR0YWJmdW5jdGlvbnM9YXJyYXkoCiAgJHRoaXMtPkxhbmcoInRhYmRlZmF1bHQiKT0+ImRlZmF1bHQiLAogICR0aGlzLT5MYW5nKCJ0YWJpbmRlbnQiKT0+ImluZGVudCIsCiAgJHRoaXMtPkxhbmcoInRhYnNwYWNlcyIpPT4iY2xhc3NpYyIsCiAgJHRoaXMtPkxhbmcoInRhYnNoaWZ0Iik9PiJzaGlmdCIKKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0YWJoYW5kbGluZ2lucHV0JywgJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24oJGlkLCJ0YWJoYW5kbGluZyIsJHRhYmZ1bmN0aW9ucywtMSwkdGhpcy0+R2V0UHJlZmVyZW5jZSgidGFiaGFuZGxpbmciLCJpbmRlbnQiKSkpOwoKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdWJtaXQnLCAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAnc3VibWl0JywgJHRoaXMtPkxhbmcoJ3NhdmVzZXR0aW5ncycpKSk7CgplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ3NldHRpbmdzLnRwbCcpOwoKZWNobyAkdGhpcy0+RW5kVGFiKCk7Ci8qCmVjaG8gJHRoaXMtPlN0YXJ0VGFiKCJodG1sIik7CgokY29udGVudD0iCjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPlRlc3RpbmcgaHRtbC1zeW50YXg8L3RpdGxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIEFuZCBkb2luZyBhYnNvbHV0ZWx5IG5vdGhpbmcgZWxzZQogIDwvYm9keT4KPC9odG1sPgoiOwplY2hvICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCJkZWZhdWx0YWRtaW4iKTsKZWNobyAkdGhpcy0+Q3JlYXRlVGV4dEFyZWEoZmFsc2UsJGlkLCRjb250ZW50LCJ0ZXN0aHRtbCIsJycsJycsJycsJycsJycsJycsJ0NvZGVNaXJyb3InLCJodG1sIik7CmVjaG8gJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKTsKCmVjaG8gJHRoaXMtPkVuZFRhYigpOwoKZWNobyAkdGhpcy0+U3RhcnRUYWIoInBocCIpOwokY29udGVudD0iCjw/cGhwCiAgZnVuY3Rpb24gdGVzdFBIUChcJHNvbWVwYXJhbSkgewogIGVjaG8gJ0RvIHlvdSB0aGluayB0aGlzIGxvb2tzIG5pY2U/JzsKfQo/PgoiOwplY2hvICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCJkZWZhdWx0YWRtaW4iKTsKZWNobyAkdGhpcy0+Q3JlYXRlVGV4dEFyZWEoZmFsc2UsJGlkLCRjb250ZW50LCJ0ZXN0cGhwIiwnJywnJywnJywnJywnJywnJywnQ29kZU1pcnJvcicsInBocCIpOwplY2hvICR0aGlzLT5DcmVhdGVGb3JtRW5kKCk7CgplY2hvICR0aGlzLT5FbmRUYWIoKTsKCmVjaG8gJHRoaXMtPlN0YXJ0VGFiKCJjc3MiKTsKJGNvbnRlbnQ9IgoudGVzdGNzcyB7CiAgZm9udC13ZWlnaHQ6Ym9sZDsKICBoZWlnaHQ6IDEwcHg7Cn0KIjsKZWNobyAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwiZGVmYXVsdGFkbWluIik7CmVjaG8gJHRoaXMtPkNyZWF0ZVRleHRBcmVhKGZhbHNlLCRpZCwkY29udGVudCwidGVzdGNzcyIsJycsJycsJycsJycsJycsJycsJ0NvZGVNaXJyb3InLCJjc3MiKTsKZWNobyAkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpOwplY2hvICR0aGlzLT5FbmRUYWIoKTsKCgplY2hvICR0aGlzLT5TdGFydFRhYigianMiKTsKICAgICRjb250ZW50PScKZnVuY3Rpb24gbXlqc2Z1bmN0aW9uKHBhcmFtcykgewogIHZhciBtc2cgPSAiVGhpcyBqYXZhc2NyaXB0IGlzIGZhbnRhc3RpYyEiCiAgZm9yICh2YXIgaT0wOyBpPDk5OTk7IGkrKykgewogICAgYWxlcnQobXNnKTsKICAgIC8qVGhpcyBtdXN0IGJlIHRoZSBtb3N0IGFubm95aW5nIGZ1bmN0aW9uIGV2ZXIhKi8KIC8qIH0KICByZXR1cm4gdHJ1ZQp9Cic7CmVjaG8gJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsImRlZmF1bHRhZG1pbiIpOwplY2hvICR0aGlzLT5DcmVhdGVUZXh0QXJlYShmYWxzZSwkaWQsJGNvbnRlbnQsInRlc3RqcyIsJycsJycsJycsJycsJycsJycsJ0NvZGVNaXJyb3InLCJqcyIpOwplY2hvICR0aGlzLT5DcmVhdGVGb3JtRW5kKCk7CmVjaG8gJHRoaXMtPkVuZFRhYigpOwoqLwoKZWNobyAkdGhpcy0+RW5kVGFiQ29udGVudCgpOwoKJGNvbnRlbnQ9IiI7CnN3aXRjaCAoJHRoaXMtPkdldFByZWZlcmVuY2UoImV4YW1wbGVzeW50YXgiLCJodG1sIikpIHsKICBjYXNlICJodG1sIiA6IHsKICAgICRjb250ZW50PSIKPGh0bWw+CiAgPGhlYWQ+CiAgICA8dGl0bGU+VGVzdGluZyBodG1sLXN5bnRheDwvdGl0bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgQW5kIGRvaW5nIGFic29sdXRlbHkgbm90aGluZyBlbHNlCiAgPC9ib2R5Pgo8L2h0bWw+CiI7CiAgYnJlYWs7CiAgfQogIGNhc2UgImNzcyIgOiB7CiAgICAkY29udGVudD0iCi50ZXN0Y3NzIHsKICBmb250LXdlaWdodDpib2xkOwogIGhlaWdodDogMTBweDsKfQoiOwogIGJyZWFrOwogIH0KICBjYXNlICJwaHAiIDogewogICAgJGNvbnRlbnQ9Igo8P3BocAogIGZ1bmN0aW9uIHRlc3RQSFAoXCRzb21lcGFyYW0pIHsKICAgIGVjaG8gJ0RvIHlvdSB0aGluayB0aGlzIGxvb2tzIG5pY2U/JzsKICB9Cj8+CiI7CiAgYnJlYWs7CiAgfQogIGNhc2UgImpzIiA6IHsKICAgICRjb250ZW50PScKZnVuY3Rpb24gbXlqc2Z1bnRpb24ocGFyYW1zKSB7CiAgdmFyIG1zZyA9ICJUaGlzIGphdmFzY3JpcHQgaXMgZmFudGFzdGljISIKICBmb3IgKHZhciBpPTA7IGk8OTk5OTsgaSsrKSB7CiAgICBhbGVydChtc2cpOwoKICB9CiAgcmV0dXJuIHRydWUKfQonOwogIGJyZWFrOwogIH0KfQoKZWNobyAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwiZGVmYXVsdGFkbWluIik7CmVjaG8gJHRoaXMtPkxhbmcoImV4YW1wbGVzeW50YXgiKS4iOiAiOwokc3ludGF4ZXM9YXJyYXkoJHRoaXMtPkxhbmcoImh0bWx0ZXN0Iik9PiJodG1sIiwkdGhpcy0+TGFuZygiY3NzdGVzdCIpPT4iY3NzIiwkdGhpcy0+TGFuZygicGhwdGVzdCIpPT4icGhwIiwkdGhpcy0+TGFuZygianN0ZXN0Iik9PiJqcyIpOwplY2hvICR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwiZXhhbXBsZXN5bnRheCIsJHN5bnRheGVzLC0xLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCJleGFtcGxlc3ludGF4IiwiaHRtbCIpLCJvbmNoYW5nZT0ndGhpcy5mb3JtLnN1Ym1pdCgpJyIpOwovL2VjaG8gJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwiZXhhbXBsZXN1Ym1pdCIsJHRoaXMtPkxhbmcoImNoYW5nZSIpKTsKZWNobyAiPGJyLz4iOwplY2hvICR0aGlzLT5DcmVhdGVUZXh0QXJlYShmYWxzZSwkaWQsJGNvbnRlbnQsInRlc3RhcmVhMSIsJycsJycsJycsJycsJycsJycsJ0NvZGVNaXJyb3InLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCJleGFtcGxlc3ludGF4IiwiaHRtbCIpKTsKZWNobyAkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpOwoKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.savesettings.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghZnVuY3Rpb25fZXhpc3RzKCJjbXNtcyIpKSBleGl0OwoKaWYgKCEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNb2RpZnkgU2l0ZSBQcmVmZXJlbmNlcycpKSB7CiAgZWNobyAkdGhpcy0+U2hvd0Vycm9ycygkdGhpcy0+TGFuZygnbmVlZHBlcm1pc3Npb24nLCBhcnJheSgnTW9kaWZ5IFNpdGUgUHJlZmVyZW5jZXMnKSkpOwogIHJldHVybjsKfQoKaWYoaXNzZXQoJHBhcmFtc1sic2hvd2xpbmVudW1iZXJzIl0pKSAKICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgic2hvd2xpbmVudW1iZXJzIiwgJHBhcmFtc1sic2hvd2xpbmVudW1iZXJzIl0pOwplbHNlCiAgJHRoaXMtPlNldFByZWZlcmVuY2UoInNob3dsaW5lbnVtYmVycyIsICcwJyk7CgppZihpc3NldCgkcGFyYW1zWyJhbGxvd2Z1bGxzY3JlZW4iXSkpCiAgJHRoaXMtPlNldFByZWZlcmVuY2UoImFsbG93ZnVsbHNjcmVlbiIsICRwYXJhbXNbImFsbG93ZnVsbHNjcmVlbiJdKTsKZWxzZQogICR0aGlzLT5TZXRQcmVmZXJlbmNlKCJhbGxvd2Z1bGxzY3JlZW4iLCAnMCcpOwoKLyppZihpc3NldCgkcGFyYW1zWyJ0ZXh0d3JhcHBpbmciXSkpCiAgJHRoaXMtPlNldFByZWZlcmVuY2UoInRleHR3cmFwcGluZyIsICRwYXJhbXNbInRleHR3cmFwcGluZyJdKTsKZWxzZQogICR0aGlzLT5TZXRQcmVmZXJlbmNlKCJ0ZXh0d3JhcHBpbmciLCAnMCcpOyovCiAgCi8qaWYoaXNzZXQoJHBhcmFtc1siYXV0b21hdGNocGFyZW5zIl0pKQogICR0aGlzLT5TZXRQcmVmZXJlbmNlKCJhdXRvbWF0Y2hwYXJlbnMiLCAkcGFyYW1zWyJhdXRvbWF0Y2hwYXJlbnMiXSk7CmVsc2UKICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgiYXV0b21hdGNocGFyZW5zIiwgJzAnKTsqLwoKaWYoaXNzZXQoJHBhcmFtc1sidGFiaGFuZGxpbmciXSkpCiAgJHRoaXMtPlNldFByZWZlcmVuY2UoInRhYmhhbmRsaW5nIiwgJHBhcmFtc1sidGFiaGFuZGxpbmciXSk7CgppZihpc3NldCgkcGFyYW1zWyJ0YWJzaXplIl0pKQogICR0aGlzLT5TZXRQcmVmZXJlbmNlKCJ0YWJzaXplIiwgJHBhcmFtc1sidGFic2l6ZSJdKTsKCmlmKGlzc2V0KCRwYXJhbXNbImNzc2FkZGl0aW9ucyJdKSkKICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgiY3NzYWRkaXRpb25zIiwgJHBhcmFtc1siY3NzYWRkaXRpb25zIl0pOwoKaWYoaXNzZXQoJHBhcmFtc1sidGhlbWUiXSkpCiAgJHRoaXMtPlNldFByZWZlcmVuY2UoInRoZW1lIiwgJHBhcmFtc1sidGhlbWUiXSk7CgoKJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCxhcnJheSgibW9kdWxlX21lc3NhZ2UiPT4kdGhpcy0+TGFuZygic2V0dGluZ3NzYXZlZCIpLCJ0YWIiPT4ic2V0dGluZ3MiKSk7Cj8+]]></data>
	</file>
	<file>
	  <filename>/CodeMirror.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiNDTVMgLSBDTVMgTWFkZSBTaW1wbGUNCiMoYykyMDA1LTA2IGJ5IE1vcnRlbiBQb3Vsc2VuIChtb3J0ZW5AcG91bHNlbi5vcmcpDQojVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcNCiMNCiNUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQ0KI2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQojdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3INCiMoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KIw0KI1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KI2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQojTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KI0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQojWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCiNhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0KI0ZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0ENCg0KDQpjbGFzcyBDb2RlTWlycm9yIGV4dGVuZHMgQ01TTW9kdWxlIHsNCgl2YXIgJG5vZWRpdG9ycz0wOw0KCXZhciAkaGVhZGVyaW5mb3NlbnQ9ZmFsc2U7DQogIHZhciAkX2h0bWxhY3RpdmUgPSBmYWxzZTsNCiAgdmFyICRfamF2YXNjcmlwdGFjdGl2ZSA9IGZhbHNlOw0KICB2YXIgJF9jc3NhY3RpdmUgPSBmYWxzZTsNCiAgdmFyICRfcGhwYWN0aXZlID0gZmFsc2U7DQogIHZhciAkX2RlZmF1bHRjc3NhZGRpdGlvbnMgPSAiLkNvZGVNaXJyb3Ige2xpbmUtaGVpZ2h0OiAxLjNlbTsgZm9udC1zaXplOjExcHh9IjsNCg0KDQoJZnVuY3Rpb24gR2V0TmFtZSgpIHsNCgkJcmV0dXJuICdDb2RlTWlycm9yJzsNCgl9DQoNCglmdW5jdGlvbiBJc1BsdWdpbk1vZHVsZSgpIHsNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCWZ1bmN0aW9uIEhhc0FkbWluKCkgew0KCQlyZXR1cm4gdHJ1ZTsNCgl9DQoNCglmdW5jdGlvbiBHZXRIZWxwKCkgew0KCQlyZXR1cm4gJHRoaXMtPkxhbmcoImhlbHAiKTsNCgl9DQoNCglmdW5jdGlvbiBHZXRBdXRob3IoKSB7DQoJCXJldHVybiAnTW9ydGVuIFBvdWxzZW4nOw0KCX0NCg0KCWZ1bmN0aW9uIEdldEF1dGhvckVtYWlsKCkgew0KCQlyZXR1cm4gJyZsdDttb3J0ZW5AcG91bHNlbi5vcmcmZ3Q7JzsNCgl9DQoNCglmdW5jdGlvbiBHZXRDaGFuZ2VMb2coKSB7DQoJCXJldHVybiAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdjaGFuZ2Vsb2cudHBsJyk7DQoJfQ0KDQoJZnVuY3Rpb24gR2V0VmVyc2lvbigpIHsNCgkJcmV0dXJuICcyLjIuMic7DQoJfQ0KCQ0KCWZ1bmN0aW9uIE1pbmltdW1DTVNWZXJzaW9uKCkgew0KCQlyZXR1cm4gIjEuOSI7DQoJfQ0KDQogIGZ1bmN0aW9uIEhhc0NhcGFiaWxpdHkoJGNhcGFiaWxpdHksICRwYXJhbXM9YXJyYXkoKSkgew0KICAgIGlmICgkY2FwYWJpbGl0eT09Ind5c2l3eWciKSByZXR1cm4gdHJ1ZTsNCiAgICBpZiAoJGNhcGFiaWxpdHk9PSJzeW50YXhoaWdobGlnaHRpbmciKSByZXR1cm4gdHJ1ZTsNCiAgICByZXR1cm4gZmFsc2U7DQogIH0NCg0KCWZ1bmN0aW9uIElzV1lTSVdZRygpIHsNCgkJcmV0dXJuIHRydWU7DQoJfQ0KDQoJZnVuY3Rpb24gSXNTeW50YXhIaWdobGlnaHRlcigpIHsNCgkJcmV0dXJuIHRydWU7DQoJfQ0KDQoJZnVuY3Rpb24gVmlzaWJsZVRvQWRtaW5Vc2VyKCkgew0KCQlyZXR1cm4gJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTW9kaWZ5IFNpdGUgUHJlZmVyZW5jZXMnKTsNCgl9DQoNCglmdW5jdGlvbiBTeW50YXhQYWdlRm9ybVN1Ym1pdCgpIHsNCgkJcmV0dXJuICJmb3IgKHZhciBjbnRFZGl0b3IgPSAwOyBjbnRFZGl0b3IgPCBudW1Db2RlTWlycm9yQXJlYXM7IGNudEVkaXRvcisrKSB7XG4iDQoJCS4gIlx0XHR2YXIgZWRpdG9yID0gZXZhbCgnY29kZW1pcnJvcmVkaXRvcicgKyBjbnRFZGl0b3IpO1xuIg0KICAgIC4iXHRcdGVkaXRvci5zYXZlKCkiDQogICAgLyouICJcdFx0dmFyIHRleHRhcmVhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvZGVtaXJyb3JhcmVhJyArIGNudEVkaXRvcik7XG4iDQogICAgICAvLy4iYWxlcnQoZWRpdG9yLmdldENvZGUoKSk7Ig0KCQkvLy4gIlx0XHRlZGl0b3IudGV4dGFyZWEudmFsdWUgPSBlZGl0b3IuZ2V0Q29kZSgpO1xuIg0KICAgICAgLiAiXHRcdHRleHRhcmVhLnZhbHVlID0gZWRpdG9yLmdldFZhbHVlKCk7XG4iKi8NCgkJLiAiXHR9XG4iOw0KCX0NCgkNCglmdW5jdGlvbiBXWVNJV1lHUGFnZUZvcm1TdWJtaXQoKSB7DQoJCXJldHVybiAkdGhpcy0+U3ludGF4UGFnZUZvcm1TdWJtaXQoKTsNCgl9DQoNCglmdW5jdGlvbiBXWVNJV1lHVGV4dEFyZWEoJG5hbWU9J3RleHRhcmVhJywkY29sdW1ucz0nODAnLCRyb3dzPScxNScsJGVuY29kaW5nPScnLCRjb250ZW50PScnLCRzdHlsZXNoZWV0PScnLCRhZGR0ZXh0PScnKSB7DQoJCSR0aGlzLT53eXNpd3lnYWN0aXZlPXRydWU7DQoJCXJldHVybiAkdGhpcy0+U3ludGF4VGV4dGFyZWEoJG5hbWUsImh0bWwiLCRjb2x1bW5zLCRyb3dzLCRlbmNvZGluZywkY29udGVudCk7DQoJfQ0KDQoJZnVuY3Rpb24gU3ludGF4VGV4dGFyZWEoJG5hbWU9J3RleHRhcmVhJywkc3ludGF4PSJodG1sIiwkY29sdW1ucz0nODAnLCRyb3dzPScxNScsJGVuY29kaW5nPScnLCRjb250ZW50PScnLCRzdHlsZXNoZWV0PScnLCRhZGR0ZXh0PScnKSB7DQoJCS8vJHRleHRhcmVhPSIiOw0KDQoJCSR0aGlzLT5zeW50YXhhY3RpdmU9dHJ1ZTsJDQoJCS8qaWYgKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCJ1c2VhdXRvY29tcGxldGUiLCIxIik9PSIwIikgJGNsYXNzLj0iIGF1dG9jb21wbGV0ZS1vZmYiOw0KCQlpZiAoJHRoaXMtPkdldFByZWZlcmVuY2UoInNob3dsaW5lbnVtYmVycyIsIjEiKT09IjAiKSAkY2xhc3MuPSIgbGluZW51bWJlcnMtb2ZmIjsNCgkJKi8NCiAgICAgIC8qaWYgKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCJzaG93dG9nZ2xlc3ludGF4IiwiMSIpPT0iMSIpIHsNCiAgICAgDQoJCQkkdGV4dGFyZWEuPSI8YnIvPjxpbnB1dCB0eXBlPSdjaGVja2JveCcgY2hlY2tlZD0nMScgb25jbGljaz0nY29kZXByZXNzIi4kdGhpcy0+bm9lZGl0b3JzLiIudG9nZ2xlRWRpdG9yKCk7JyBjaGVja2VkPSdjaGVja2VkJyBpZD0nY29kZXByZXNzY2hlY2siLiR0aGlzLT5ub2VkaXRvcnMuIic+PGxhYmVsIGZvcj0nY29kZXByZXNzY2hlY2siLiR0aGlzLT5ub2VkaXRvcnMuIic+Ii4kdGhpcy0+TGFuZygidG9nZ2xlc3ludGF4IikuIjwvbGFiZWw+IjsNCgkJfSovDQogICAgJHNtYXJ0eT0kdGhpcy0+c21hcnR5Ow0KICAgIGlmICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgic2hvd2xpbmVudW1iZXJzIiwiMSIpPT0iMSIpew0KICAgICAgJHNtYXJ0eS0+YXNzaWduKCdsaW5lbnVtYmVycycsICJ0cnVlIik7DQogICAgfSBlbHNlIHsNCiAgICAgICRzbWFydHktPmFzc2lnbignbGluZW51bWJlcnMnLCAiZmFsc2UiKTsNCiAgICB9DQogICAgaWYgKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCJ0ZXh0d3JhcHBpbmciLCIxIik9PSIxIil7DQogICAgICAkc21hcnR5LT5hc3NpZ24oJ3RleHR3cmFwcGluZycsICJ0cnVlIik7DQogICAgfSBlbHNlIHsNCiAgICAgICRzbWFydHktPmFzc2lnbigndGV4dHdyYXBwaW5nJywgImZhbHNlIik7DQogICAgfQ0KICAgIGlmICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgiYXV0b21hdGNocGFyZW5zIiwiMCIpPT0iMSIpew0KICAgICAgJHNtYXJ0eS0+YXNzaWduKCdhdXRvbWF0Y2hwYXJlbnMnLCAidHJ1ZSIpOw0KICAgIH0gZWxzZSB7DQogICAgICAkc21hcnR5LT5hc3NpZ24oJ2F1dG9tYXRjaHBhcmVucycsICJmYWxzZSIpOw0KICAgIH0NCg0KICAgICR0aGVtZT0kdGhpcy0+R2V0UHJlZmVyZW5jZSgidGhlbWUiLCJkZWZhdWx0Iik7DQogICAgJHNtYXJ0eS0+YXNzaWduKCd0aGVtZScsICR0aGVtZSk7DQogICAgJHRhYnNpemU9JHRoaXMtPkdldFByZWZlcmVuY2UoInRhYnNpemUiLCIyIik7DQogICAgJHNtYXJ0eS0+YXNzaWduKCd0YWJzaXplJywgJHRhYnNpemUpOw0KDQoNCiAgICAvL2xpbmVOdW1iZXJzOiB0cnVlLA0KICAgIC8vJGNvbmZpZz0kdGhpcy0+R2V0Q29uZmlnKCk7DQogICAgJGNvbmZpZz1jbXNtcygpLT5HZXRDb25maWcoKTsNCg0KICAgICRzbWFydHktPmFzc2lnbigndGV4dGFyZWFpZCcsICJjb2RlbWlycm9yYXJlYSIuJHRoaXMtPm5vZWRpdG9ycyk7DQogICAgJHNtYXJ0eS0+YXNzaWduKCd0ZXh0YXJlYW5hbWUnLCAkbmFtZSk7DQogICAgJHNtYXJ0eS0+YXNzaWduKCdjb250ZW50JywgJGNvbnRlbnQpOw0KICAgICRzbWFydHktPmFzc2lnbignaWQnLCAkdGhpcy0+bm9lZGl0b3JzKTsNCiAgICAvLyRwYXJzZXJmaWxlPSIiOyAkY3NzZmlsZT0iIjsNCiAgICAvKiRjbWRpcj0kY29uZmlnWyJyb290X3VybCJdLicvbW9kdWxlcy9Db2RlTWlycm9yL2NvZGVtaXJyb3InOw0KICAgIHN3aXRjaCgkc3ludGF4KSB7DQogICAgICANCiAgICAgIGNhc2UgImh0bWwiIDogDQogICAgICAgICRwYXJzZXJmaWxlPScicGFyc2V4bWwuanMiJzsgDQogICAgICAgICRjc3NmaWxlPSciJy4kY21kaXIuJy9tb2RlL3htbC94bWwuY3NzIic7DQogICAgICAgIGJyZWFrOw0KICAgICAgY2FzZSAiY3NzIiA6DQogICAgICAgICRwYXJzZXJmaWxlPScicGFyc2Vjc3MuanMiJzsNCiAgICAgICAgJGNzc2ZpbGU9JyInLiRjbWRpci4nL2Nzcy9jc3MuY3NzIic7DQogICAgICAgIGJyZWFrOw0KICAgICAgY2FzZSAiamF2YXNjcmlwdCIgOg0KICAgICAgY2FzZSAianMiIDoNCiAgICAgICAgJHBhcnNlcmZpbGU9J1sidG9rZW5pemVqYXZhc2NyaXB0LmpzIiwgInBhcnNlamF2YXNjcmlwdC5qcyJdJzsNCiAgICAgICAgJGNzc2ZpbGU9JyInLiRjbWRpci4nL2Nzcy9qc2NvbG9ycy5jc3MiJzsNCiAgICAgICAgYnJlYWs7DQogICAgICBjYXNlICJwaHAiIDoNCiAgICAgICAgJHBhcnNlcmZpbGU9J1sicGFyc2V4bWwuanMiLCAicGFyc2Vjc3MuanMiLCAidG9rZW5pemVqYXZhc2NyaXB0LmpzIiwgInBhcnNlamF2YXNjcmlwdC5qcyIsICJwYXJzZWh0bWxtaXhlZC5qcyIsIi4uL2NvbnRyaWIvcGhwL2pzL3Rva2VuaXplcGhwLmpzIiwgIi4uL2NvbnRyaWIvcGhwL2pzL3BhcnNlcGhwLmpzIiwgICAgICAgICAgICAgICAgICAgICAiLi4vY29udHJpYi9waHAvanMvcGFyc2VwaHBodG1sbWl4ZWQuanMiXSc7DQogICAgICAgICRjc3NmaWxlPSdbIicuJGNtZGlyLicvY3NzL3htbGNvbG9ycy5jc3MiLCInLiRjbWRpci4nL2Nzcy9qc2NvbG9ycy5jc3MiLCInLiRjbWRpci4nL2Nzcy9jc3Njb2xvcnMuY3NzIiwiJy4kY21kaXIuJy9jb250cmliL3BocC9jc3MvcGhwY29sb3JzLmNzcyJdJzsNCiAgICAgICAgYnJlYWs7DQogICAgfSovDQogICAgLy8kdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3BhcnNlcmZpbGUnLCAkcGFyc2VyZmlsZSk7DQogICAgLy8kdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2Nzc2ZpbGUnLCAkY3NzZmlsZSk7DQoNCiAgICAkc21hcnR5LT5hc3NpZ24oJ3RhYmhhbmRsaW5nJywgJHRoaXMtPkdldFByZWZlcmVuY2UoInRhYmhhbmRsaW5nIiwiaW5kZW50IikpOw0KICAgICRzbWFydHktPmFzc2lnbignYWxsb3dmdWxsc2NyZWVuJywgJHRoaXMtPkdldFByZWZlcmVuY2UoImFsbG93ZnVsbHNjcmVlbiIsIjAiKSk7DQogICAgDQogICAgJHNtYXJ0eS0+YXNzaWduKCdyb290X3VybCcsICRjb25maWdbInJvb3RfdXJsIl0pOw0KDQogICAgc3dpdGNoICgkc3ludGF4KSB7DQogICAgICBjYXNlICJodG1sIiA6ICRzbWFydHktPmFzc2lnbignbW9kZScsICJ0ZXh0L2h0bWwiKTsgJHRoaXMtPl9odG1sYWN0aXZlPXRydWU7IGJyZWFrOw0KICAgICAgY2FzZSAianMiOg0KICAgICAgY2FzZSAiamF2YXNjcmlwdCIgOiAkc21hcnR5LT5hc3NpZ24oJ21vZGUnLCAiamF2YXNjcmlwdCIpOyR0aGlzLT5famF2YXNjcmlwdGFjdGl2ZT10cnVlOyAgYnJlYWs7DQogICAgICBjYXNlICJjc3MiIDogJHNtYXJ0eS0+YXNzaWduKCdtb2RlJywgImNzcyIpOyAkdGhpcy0+X2Nzc2FjdGl2ZT10cnVlOyBicmVhazsNCiAgICAgIGNhc2UgInBocCIgOiAkc21hcnR5LT5hc3NpZ24oJ21vZGUnLCAicGhwIik7ICR0aGlzLT5fcGhwYWN0aXZlPXRydWU7IGJyZWFrOw0KICAgIH0NCg0KDQogICAgJHRleHRhcmVhPSR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2NvZGVtaXJyb3IyYXJlYS50cGwnKTsNCg0KCQkkdGhpcy0+bm9lZGl0b3JzKys7DQoNCgkJcmV0dXJuICR0ZXh0YXJlYTsNCgl9DQoNCglmdW5jdGlvbiBXWVNJV1lHR2VuZXJhdGVIZWFkZXIoJGh0bWxyZXN1bHQ9JycpIHsNCgkJcmV0dXJuICR0aGlzLT5TeW50YXhHZW5lcmF0ZUhlYWRlcigpOw0KCX0NCg0KCWZ1bmN0aW9uIFN5bnRheEdlbmVyYXRlSGVhZGVyKCRodG1scmVzdWx0PScnKSB7DQoJCWlmICgkdGhpcy0+aGVhZGVyaW5mb3NlbnQpIHJldHVybiAiIjsNCgkJaWYgKCR0aGlzLT5ub2VkaXRvcnM9PTApIHJldHVybiAnJzsNCgkJLy8kR0xPQkFMU1siY29uZmlnIl1bInJvb3RfcGF0aCJdLg0KICAgICRjb25maWc9Y21zbXMoKS0+R2V0Q29uZmlnKCk7DQogICAgJGFscmVhZHlpbj1hcnJheSgpOw0KDQogICAgJHRoZW1lPSR0aGlzLT5HZXRQcmVmZXJlbmNlKCJ0aGVtZSIsImRlZmF1bHQiKTsNCg0KCQkkc2NyaXB0cGF0aD0kY29uZmlnWyJyb290X3VybCJdLiIvbW9kdWxlcy9Db2RlTWlycm9yL2NvZGVtaXJyb3IyIjsNCgkJJGhlYWRlcj0iIjsNCiAgICAkaGVhZGVyLj0nDQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iJy4kc2NyaXB0cGF0aC4nL2xpYi9jb2RlbWlycm9yLmNzcyIvPic7DQoJCSRoZWFkZXIuPScNCgkgIDxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSInLiRzY3JpcHRwYXRoLicvbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0Pic7DQogICAgaWYgKCR0aGVtZSE9ImRlZmF1bHQiKSB7DQogICAgICAkaGVhZGVyLj0nDQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iJy4kc2NyaXB0cGF0aC4nL3RoZW1lLycuJHRoZW1lLicuY3NzIi8+JzsNCiAgICAgIC8qJGhlYWRlci49Jw0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IicuJHNjcmlwdHBhdGguJy90aGVtZS9kZWZhdWx0LmNzcyIvPic7Ki8NCiAgICB9DQogICAgaWYgKCR0aGlzLT5faHRtbGFjdGl2ZSkgew0KDQogICAgICAkaGVhZGVyLj0nDQogICAgICA8c2NyaXB0IGxhbmd1YWdlPSJKYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJy4kc2NyaXB0cGF0aC4nL21vZGUvY3NzL2Nzcy5qcyI+PC9zY3JpcHQ+JzsNCiAgICAgICRhbHJlYWR5aW5bXT0iY3NzLmpzIjsNCiAgICAgICRoZWFkZXIuPScNCiAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSInLiRzY3JpcHRwYXRoLicvbW9kZS9qYXZhc2NyaXB0L2phdmFzY3JpcHQuanMiPjwvc2NyaXB0Pic7DQogICAgICAkYWxyZWFkeWluW109ImphdmFzY3JpcHQuanMiOw0KICAgICAgJGhlYWRlci49Jw0KICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iSmF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IicuJHNjcmlwdHBhdGguJy9tb2RlL3htbC94bWwuanMiPjwvc2NyaXB0Pic7DQogICAgICAkYWxyZWFkeWluW109InhtbC5qcyI7DQogICAgICAkaGVhZGVyLj0nDQogICAgICA8c2NyaXB0IGxhbmd1YWdlPSJKYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJy4kc2NyaXB0cGF0aC4nL21vZGUvaHRtbG1peGVkL2h0bWxtaXhlZC5qcyI+PC9zY3JpcHQ+JzsNCiAgICAgICRhbHJlYWR5aW5bXT0iaHRtbG1peGVkLmpzIjsNCiAgICB9DQogICAgaWYgKCR0aGlzLT5famF2YXNjcmlwdGFjdGl2ZSkgew0KICAgICAgaWYgKCFpbl9hcnJheSgiamF2YXNjcmlwdC5qcyIsJGFscmVhZHlpbikpIHsNCiAgICAgICAgJGhlYWRlci49Jw0KICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iSmF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IicuJHNjcmlwdHBhdGguJy9tb2RlL2phdmFzY3JpcHQvamF2YXNjcmlwdC5qcyI+PC9zY3JpcHQ+JzsNCiAgICAgICAgJGFscmVhZHlpbltdPSJqYXZhc2NyaXB0LmpzIjsNCiAgICAgIH0NCiAgICAgICAgICAgIA0KDQogICAgfQ0KICAgIGlmICgkdGhpcy0+X2Nzc2FjdGl2ZSkgew0KICAgICAgaWYgKCFpbl9hcnJheSgiY3NzLmpzIiwkYWxyZWFkeWluKSkgew0KICAgICAgICAkaGVhZGVyLj0nDQogICAgICA8c2NyaXB0IGxhbmd1YWdlPSJKYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJy4kc2NyaXB0cGF0aC4nL21vZGUvY3NzL2Nzcy5qcyI+PC9zY3JpcHQ+JzsNCiAgICAgICAgJGFscmVhZHlpbltdPSJjc3MuanMiOw0KICAgICAgfQ0KDQogICAgfQ0KICAgIGlmICgkdGhpcy0+X3BocGFjdGl2ZSkgew0KICAgICAgaWYgKCFpbl9hcnJheSgiY3NzLmpzIiwkYWxyZWFkeWluKSkgew0KICAgICAgICAkaGVhZGVyLj0nDQogICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSInLiRzY3JpcHRwYXRoLicvbW9kZS9jc3MvY3NzLmpzIj48L3NjcmlwdD4nOw0KICAgICAgICAkYWxyZWFkeWluW109ImNzcy5qcyI7DQogICAgICB9DQogICAgICBpZiAoIWluX2FycmF5KCJqYXZhc2NyaXB0LmpzIiwkYWxyZWFkeWluKSkgew0KICAgICAgICAkaGVhZGVyLj0nDQogICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSInLiRzY3JpcHRwYXRoLicvbW9kZS9qYXZhc2NyaXB0L2phdmFzY3JpcHQuanMiPjwvc2NyaXB0Pic7DQogICAgICAgICRhbHJlYWR5aW5bXT0iamF2YXNjcmlwdC5qcyI7DQogICAgICB9DQogICAgICBpZiAoIWluX2FycmF5KCJ4bWwuanMiLCRhbHJlYWR5aW4pKSB7DQogICAgICAgICRoZWFkZXIuPScNCiAgICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iSmF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IicuJHNjcmlwdHBhdGguJy9tb2RlL3htbC94bWwuanMiPjwvc2NyaXB0Pic7DQogICAgICAgICRhbHJlYWR5aW5bXT0ieG1sLmpzIjsNCiAgICAgIH0NCiAgICAgIGlmICghaW5fYXJyYXkoImNsaWtlLmpzIiwkYWxyZWFkeWluKSkgew0KICAgICAgICAkaGVhZGVyLj0nDQogICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSInLiRzY3JpcHRwYXRoLicvbW9kZS9jbGlrZS9jbGlrZS5qcyI+PC9zY3JpcHQ+JzsNCiAgICAgICAgJGFscmVhZHlpbltdPSJjbGlrZS5qcyI7DQogICAgICB9DQogICAgICBpZiAoIWluX2FycmF5KCJjbGlrZS5jc3MiLCRhbHJlYWR5aW4pKSB7DQogICAgICAgICRoZWFkZXIuPScNCiAgICAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iJy4kc2NyaXB0cGF0aC4nL21vZGUvY2xpa2UvY2xpa2UuY3NzIiAvPic7DQogICAgICAgICRhbHJlYWR5aW5bXT0iY2xpa2UuY3NzIjsNCiAgICAgIH0NCiAgICAgIGlmICghaW5fYXJyYXkoInBocC5qcyIsJGFscmVhZHlpbikpIHsNCiAgICAgICAgJGhlYWRlci49Jw0KICAgICAgICA8c2NyaXB0IGxhbmd1YWdlPSJKYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJy4kc2NyaXB0cGF0aC4nL21vZGUvcGhwL3BocC5qcyI+PC9zY3JpcHQ+JzsNCiAgICAgICAgJGFscmVhZHlpbltdPSJwaHAuanMiOw0KICAgICAgfQ0KICAgIH0NCiAgICBpZiAoJHRoZW1lIT0iZGVmYXVsdCIpIHsNCiAgICAgICRoZWFkZXIuPScNCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSInLiRzY3JpcHRwYXRoLicvdGhlbWUvZGVmYXVsdC5jc3MiLz4nOw0KICAgIH0NCiAgICAkaGVhZGVyLj0nDQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iJy4kc2NyaXB0cGF0aC4nL3RoZW1lLycuJHRoZW1lLicuY3NzIi8+JzsNCiAgICAkaGVhZGVyLj0nDQoNCjxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQogIHZhciBudW1Db2RlTWlycm9yQXJlYXM9Jy4kdGhpcy0+bm9lZGl0b3JzLic7DQo8L3NjcmlwdD4NCg0KJzsNCg0KICAgICRoZWFkZXIuPScNCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQogICcuJHRoaXMtPkdldFByZWZlcmVuY2UoImNzc2FkZGl0aW9ucyIsJHRoaXMtPl9kZWZhdWx0Y3NzYWRkaXRpb25zKS4nDQo8L3N0eWxlPg0KICAgICc7DQoNCiAgICBpZiAoJHRoaXMtPkdldFByZWZlcmVuY2UoImFsbG93ZnVsbHNjcmVlbiIsMCk9PSIxIikgew0KICAgICRiZ2NvbG9yPSJ3aGl0ZSI7DQogICAgaWYgKCR0aGVtZT09Im5pZ2h0IikgJGJnY29sb3I9ImJsYWNrIjsNCiAgICAgICRoZWFkZXIuPScNCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQogICAgICAuZnVsbHNjcmVlbiB7DQogICAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jazsNCiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICAgICAgICAgICAgICAgIHRvcDogMDsNCiAgICAgICAgICAgICAgICAgIGxlZnQ6IDA7DQogICAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTsNCiAgICAgICAgICAgICAgICAgIGhlaWdodDogMTAwJTsNCiAgICAgICAgICAgICAgICAgIHotaW5kZXg6IDk5OTk7DQogICAgICAgICAgICAgICAgICBtYXJnaW46IDA7DQogICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwOw0KICAgICAgICAgICAgICAgICAgYm9yZGVyOiAwcHggc29saWQgI0JCQkJCQjsNCiAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDE7DQogICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOicuJGJnY29sb3IuJzsNCiAgICAgICAgICAgICAgfQ0KPC9zdHlsZT4NCjxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQogIGZ1bmN0aW9uIHRvZ2dsZUZ1bGxzY3JlZW5FZGl0aW5nKCkNCiAgICAgIHsNCiAgICAgICAgICB2YXIgZWRpdG9yRGl2ID0gJCgiLkNvZGVNaXJyb3Itc2Nyb2xsIik7DQogICAgICAgICAgaWYgKCFlZGl0b3JEaXYuaGFzQ2xhc3MoImZ1bGxzY3JlZW4iKSkgew0KICAgICAgICAgICAgICB0b2dnbGVGdWxsc2NyZWVuRWRpdGluZy5iZWZvcmVGdWxsc2NyZWVuID0geyBoZWlnaHQ6IGVkaXRvckRpdi5oZWlnaHQoKSwgd2lkdGg6IGVkaXRvckRpdi53aWR0aCgpIH0NCiAgICAgICAgICAgICAgZWRpdG9yRGl2LmFkZENsYXNzKCJmdWxsc2NyZWVuIik7DQogICAgICAgICAgICAgIGVkaXRvckRpdi5oZWlnaHQoIjEwMCUiKTsNCiAgICAgICAgICAgICAgZWRpdG9yRGl2LndpZHRoKCIxMDAlIik7DQogICAgICAgICAgICAgIGVkaXRvci5yZWZyZXNoKCk7DQogICAgICAgICAgfQ0KICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgICBlZGl0b3JEaXYucmVtb3ZlQ2xhc3MoImZ1bGxzY3JlZW4iKTsNCiAgICAgICAgICAgICAgZWRpdG9yRGl2LmhlaWdodCh0b2dnbGVGdWxsc2NyZWVuRWRpdGluZy5iZWZvcmVGdWxsc2NyZWVuLmhlaWdodCk7DQogICAgICAgICAgICAgIGVkaXRvckRpdi53aWR0aCh0b2dnbGVGdWxsc2NyZWVuRWRpdGluZy5iZWZvcmVGdWxsc2NyZWVuLndpZHRoKTsNCiAgICAgICAgICAgICAgZWRpdG9yLnJlZnJlc2goKTsNCiAgICAgICAgICB9DQogICAgICB9DQogIA0KPC9zY3JpcHQ+DQoNCiAgICAgICc7DQogICAgfQ0KDQoNCg0KCQkkdGhpcy0+aGVhZGVyaW5mb3NlbnQ9dHJ1ZTsNCgkJcmV0dXJuICRoZWFkZXI7DQoJfQ0KfQ0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/demo/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/demo/activeline.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEFjdGl2ZSBMaW5lIERlbW88L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9tb2RlL3htbC94bWwuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9kb2MvZG9jcy5jc3MiPgoKICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiAgICAgIC5Db2RlTWlycm9yIHtib3JkZXItdG9wOiAxcHggc29saWQgYmxhY2s7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazt9CiAgICAgIC5hY3RpdmVsaW5lIHtiYWNrZ3JvdW5kOiAjZThmMmZmICFpbXBvcnRhbnQ7fQogICAgPC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogQWN0aXZlIExpbmUgRGVtbzwvaDE+CgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHJzcyB4bWxuczphdG9tPSJodHRwOi8vd3d3LnczLm9yZy8yMDA1L0F0b20iIHZlcnNpb249IjIuMCIKICAgICB4bWxuczpnZW9yc3M9Imh0dHA6Ly93d3cuZ2VvcnNzLm9yZy9nZW9yc3MiCiAgICAgeG1sbnM6dHdpdHRlcj0iaHR0cDovL2FwaS50d2l0dGVyLmNvbSI+CiAgPGNoYW5uZWw+CiAgICA8dGl0bGU+VHdpdHRlciAvIGNvZGVtaXJyb3I8L3RpdGxlPgogICAgPGxpbms+aHR0cDovL3R3aXR0ZXIuY29tL2NvZGVtaXJyb3I8L2xpbms+CiAgICA8YXRvbTpsaW5rIHR5cGU9ImFwcGxpY2F0aW9uL3Jzcyt4bWwiCiAgICAgICAgICAgICAgIGhyZWY9Imh0dHA6Ly90d2l0dGVyLmNvbS9zdGF0dXNlcy91c2VyX3RpbWVsaW5lLzI0MjI4MzI4OC5yc3MiIHJlbD0ic2VsZiIvPgogICAgPGRlc2NyaXB0aW9uPlR3aXR0ZXIgdXBkYXRlcyBmcm9tIENvZGVNaXJyb3IgLyBjb2RlbWlycm9yLjwvZGVzY3JpcHRpb24+CiAgICA8bGFuZ3VhZ2U+ZW4tdXM8L2xhbmd1YWdlPgogICAgPHR0bD40MDwvdHRsPgogIDxpdGVtPgogICAgPHRpdGxlPmNvZGVtaXJyb3I6IGh0dHA6Ly9jbG91ZC1pZGUuY29tICYjODIxMjsgdGhleSdyZSBzcHJpbmdpbmcgdXAgbGlrZSBtdXNocm9vbXMuIFRoaXMgb25lCiAgICAgIHVzZXMgQ29kZU1pcnJvciBhcyBpdHMgZWRpdG9yLjwvdGl0bGU+CiAgICA8ZGVzY3JpcHRpb24+Y29kZW1pcnJvcjogaHR0cDovL2Nsb3VkLWlkZS5jb20gJiM4MjEyOyB0aGV5J3JlIHNwcmluZ2luZyB1cCBsaWtlIG11c2hyb29tcy4gVGhpcwogICAgICBvbmUgdXNlcyBDb2RlTWlycm9yIGFzIGl0cyBlZGl0b3IuPC9kZXNjcmlwdGlvbj4KICAgIDxwdWJEYXRlPlRodSwgMTcgTWFyIDIwMTEgMjM6MzQ6NDcgKzAwMDA8L3B1YkRhdGU+CiAgICA8Z3VpZD5odHRwOi8vdHdpdHRlci5jb20vY29kZW1pcnJvci9zdGF0dXNlcy80ODUyNzczMzcyMjA1ODc1MjwvZ3VpZD4KICAgIDxsaW5rPmh0dHA6Ly90d2l0dGVyLmNvbS9jb2RlbWlycm9yL3N0YXR1c2VzLzQ4NTI3NzMzNzIyMDU4NzUyPC9saW5rPgogICAgPHR3aXR0ZXI6c291cmNlPndlYjwvdHdpdHRlcjpzb3VyY2U+CiAgICA8dHdpdHRlcjpwbGFjZS8+CiAgPC9pdGVtPgogIDxpdGVtPgogICAgPHRpdGxlPmNvZGVtaXJyb3I6IFBvc3RlZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBDb2RlTWlycm9yIDIgaW50ZXJuYWxzIGF0CiAgICAgIGh0dHA6Ly9jb2RlbWlycm9yLm5ldC8yL2ludGVybmFscy5odG1sPC90aXRsZT4KICAgIDxkZXNjcmlwdGlvbj5jb2RlbWlycm9yOiBQb3N0ZWQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgQ29kZU1pcnJvciAyIGludGVybmFscyBhdAogICAgICBodHRwOi8vY29kZW1pcnJvci5uZXQvMi9pbnRlcm5hbHMuaHRtbDwvZGVzY3JpcHRpb24+CiAgICA8cHViRGF0ZT5XZWQsIDAyIE1hciAyMDExIDEyOjE1OjA5ICswMDAwPC9wdWJEYXRlPgogICAgPGd1aWQ+aHR0cDovL3R3aXR0ZXIuY29tL2NvZGVtaXJyb3Ivc3RhdHVzZXMvNDI5MjA4Nzk3ODg3ODk3NjA8L2d1aWQ+CiAgICA8bGluaz5odHRwOi8vdHdpdHRlci5jb20vY29kZW1pcnJvci9zdGF0dXNlcy80MjkyMDg3OTc4ODc4OTc2MDwvbGluaz4KICAgIDx0d2l0dGVyOnNvdXJjZT53ZWI8L3R3aXR0ZXI6c291cmNlPgogICAgPHR3aXR0ZXI6cGxhY2UvPgogIDwvaXRlbT4KICA8L2NoYW5uZWw+CjwvcnNzPjwvdGV4dGFyZWE+PC9mb3JtPgoKICAgIDxzY3JpcHQ+CnZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7CiAgbW9kZTogImFwcGxpY2F0aW9uL3htbCIsCiAgbGluZU51bWJlcnM6IHRydWUsCiAgbGluZVdyYXBwaW5nOiB0cnVlLAogIG9uQ3Vyc29yQWN0aXZpdHk6IGZ1bmN0aW9uKCkgewogICAgZWRpdG9yLnNldExpbmVDbGFzcyhobExpbmUsIG51bGwpOwogICAgaGxMaW5lID0gZWRpdG9yLnNldExpbmVDbGFzcyhlZGl0b3IuZ2V0Q3Vyc29yKCkubGluZSwgImFjdGl2ZWxpbmUiKTsKICB9Cn0pOwp2YXIgaGxMaW5lID0gZWRpdG9yLnNldExpbmVDbGFzcygwLCAiYWN0aXZlbGluZSIpOwo8L3NjcmlwdD4KCiAgICA8cD5TdHlsaW5nIHRoZSBjdXJyZW50IGN1cnNvciBsaW5lLjwvcD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/changemode.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IE1vZGUtQ2hhbmdpbmcgRGVtbzwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Ii4uL21vZGUvamF2YXNjcmlwdC9qYXZhc2NyaXB0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9tb2RlL3NjaGVtZS9zY2hlbWUuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9kb2MvZG9jcy5jc3MiPgoKICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiAgICAgIC5Db2RlTWlycm9yIHtib3JkZXI6IDFweCBzb2xpZCBibGFjazt9CiAgICA8L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBNb2RlLUNoYW5naW5nIGRlbW88L2gxPgoKICAgIDxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+Cjs7IElmIHRoZXJlIGlzIFNjaGVtZSBjb2RlIGluIGhlcmUsIHRoZSBlZGl0b3Igd2lsbCBiZSBpbiBTY2hlbWUgbW9kZS4KOzsgSWYgeW91IHB1dCBpbiBKUyBpbnN0ZWFkLCBpdCdsbCBzd2l0Y2ggdG8gSlMgbW9kZS4KCihkZWZpbmUgKGRvdWJsZSB4KQogICgqIHggeCkpCjwvdGV4dGFyZWE+PC9mb3JtPgoKPHA+T24gY2hhbmdlcyB0byB0aGUgY29udGVudCBvZiB0aGUgYWJvdmUgZWRpdG9yLCBhIChjcnVkZSkgc2NyaXB0CnRyaWVzIHRvIGF1dG8tZGV0ZWN0IHRoZSBsYW5ndWFnZSB1c2VkLCBhbmQgc3dpdGNoZXMgdGhlIGVkaXRvciB0bwplaXRoZXIgSmF2YVNjcmlwdCBvciBTY2hlbWUgbW9kZSBiYXNlZCBvbiB0aGF0LjwvcD4KCjxzY3JpcHQ+CiAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgIG1vZGU6ICJzY2hlbWUiLAogICAgbGluZU51bWJlcnM6IHRydWUsCiAgICBtYXRjaEJyYWNrZXRzOiB0cnVlLAogICAgdGFiTW9kZTogImluZGVudCIsCiAgICBvbkNoYW5nZTogZnVuY3Rpb24oKSB7CiAgICAgIGNsZWFyVGltZW91dChwZW5kaW5nKTsKICAgICAgc2V0VGltZW91dCh1cGRhdGUsIDQwMCk7CiAgICB9CiAgfSk7CiAgdmFyIHBlbmRpbmc7CiAgZnVuY3Rpb24gbG9va3NMaWtlU2NoZW1lKGNvZGUpIHsKICAgIHJldHVybiAhL15ccypcKFxzKmZ1bmN0aW9uXGIvLnRlc3QoY29kZSkgJiYgL15ccypbO1woXS8udGVzdChjb2RlKTsKICB9CiAgZnVuY3Rpb24gdXBkYXRlKCkgewogICAgZWRpdG9yLnNldE9wdGlvbigibW9kZSIsIGxvb2tzTGlrZVNjaGVtZShlZGl0b3IuZ2V0VmFsdWUoKSkgPyAic2NoZW1lIiA6ICJqYXZhc2NyaXB0Iik7CiAgfQo8L3NjcmlwdD4KICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/complete.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEF1dG9jb21wbGV0ZSBEZW1vPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vbGliL3V0aWwvc2ltcGxlLWhpbnQuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9saWIvdXRpbC9zaW1wbGUtaGludC5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi91dGlsL2phdmFzY3JpcHQtaGludC5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vbW9kZS9qYXZhc2NyaXB0L2phdmFzY3JpcHQuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9kb2MvZG9jcy5jc3MiPgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4uQ29kZU1pcnJvciB7Ym9yZGVyOiAxcHggc29saWQgI2VlZTt9PC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogQXV0b2NvbXBsZXRlIGRlbW88L2gxPgoKICAgIDxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+CmZ1bmN0aW9uIGdldENvbXBsZXRpb25zKHRva2VuLCBjb250ZXh0KSB7CiAgdmFyIGZvdW5kID0gW10sIHN0YXJ0ID0gdG9rZW4uc3RyaW5nOwogIGZ1bmN0aW9uIG1heWJlQWRkKHN0cikgewogICAgaWYgKHN0ci5pbmRleE9mKHN0YXJ0KSA9PSAwKSBmb3VuZC5wdXNoKHN0cik7CiAgfQogIGZ1bmN0aW9uIGdhdGhlckNvbXBsZXRpb25zKG9iaikgewogICAgaWYgKHR5cGVvZiBvYmogPT0gInN0cmluZyIpIGZvckVhY2goc3RyaW5nUHJvcHMsIG1heWJlQWRkKTsKICAgIGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIEFycmF5KSBmb3JFYWNoKGFycmF5UHJvcHMsIG1heWJlQWRkKTsKICAgIGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIEZ1bmN0aW9uKSBmb3JFYWNoKGZ1bmNQcm9wcywgbWF5YmVBZGQpOwogICAgZm9yICh2YXIgbmFtZSBpbiBvYmopIG1heWJlQWRkKG5hbWUpOwogIH0KCiAgaWYgKGNvbnRleHQpIHsKICAgIC8vIElmIHRoaXMgaXMgYSBwcm9wZXJ0eSwgc2VlIGlmIGl0IGJlbG9uZ3MgdG8gc29tZSBvYmplY3Qgd2UgY2FuCiAgICAvLyBmaW5kIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgdmFyIG9iaiA9IGNvbnRleHQucG9wKCksIGJhc2U7CiAgICBpZiAob2JqLmNsYXNzTmFtZSA9PSAianMtdmFyaWFibGUiKQogICAgICBiYXNlID0gd2luZG93W29iai5zdHJpbmddOwogICAgZWxzZSBpZiAob2JqLmNsYXNzTmFtZSA9PSAianMtc3RyaW5nIikKICAgICAgYmFzZSA9ICIiOwogICAgZWxzZSBpZiAob2JqLmNsYXNzTmFtZSA9PSAianMtYXRvbSIpCiAgICAgIGJhc2UgPSAxOwogICAgd2hpbGUgKGJhc2UgIT0gbnVsbCAmJiBjb250ZXh0Lmxlbmd0aCkKICAgICAgYmFzZSA9IGJhc2VbY29udGV4dC5wb3AoKS5zdHJpbmddOwogICAgaWYgKGJhc2UgIT0gbnVsbCkgZ2F0aGVyQ29tcGxldGlvbnMoYmFzZSk7CiAgfQogIGVsc2UgewogICAgLy8gSWYgbm90LCBqdXN0IGxvb2sgaW4gdGhlIHdpbmRvdyBvYmplY3QgYW5kIGFueSBsb2NhbCBzY29wZQogICAgLy8gKHJlYWRpbmcgaW50byBKUyBtb2RlIGludGVybmFscyB0byBnZXQgYXQgdGhlIGxvY2FsIHZhcmlhYmxlcykKICAgIGZvciAodmFyIHYgPSB0b2tlbi5zdGF0ZS5sb2NhbFZhcnM7IHY7IHYgPSB2Lm5leHQpIG1heWJlQWRkKHYubmFtZSk7CiAgICBnYXRoZXJDb21wbGV0aW9ucyh3aW5kb3cpOwogICAgZm9yRWFjaChrZXl3b3JkcywgbWF5YmVBZGQpOwogIH0KICByZXR1cm4gZm91bmQ7Cn0KPC90ZXh0YXJlYT48L2Zvcm0+Cgo8cD5QcmVzcyA8c3Ryb25nPmN0cmwtc3BhY2U8L3N0cm9uZz4gdG8gYWN0aXZhdGUgYXV0b2NvbXBsZXRpb24uIFNlZQp0aGUgY29kZSAoPGEgaHJlZj0iLi4vbGliL3V0aWwvc2ltcGxlLWhpbnQuanMiPmhlcmU8L2E+CmFuZCA8YSBocmVmPSIuLi9saWIvdXRpbC9qYXZhc2NyaXB0LWhpbnQuanMiPmhlcmU8L2E+KSB0byBmaWd1cmUgb3V0CmhvdyBpdCB3b3Jrcy48L3A+CgogICAgPHNjcmlwdD4KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgICAgICBleHRyYUtleXM6IHsiQ3RybC1TcGFjZSI6IGZ1bmN0aW9uKGNtKSB7Q29kZU1pcnJvci5zaW1wbGVIaW50KGNtLCBDb2RlTWlycm9yLmphdmFzY3JpcHRIaW50KTt9fQogICAgICB9KTsKICAgIDwvc2NyaXB0PgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/complete.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KGZ1bmN0aW9uICgpIHsKICAvLyBNaW5pbWFsIGV2ZW50LWhhbmRsaW5nIHdyYXBwZXIuCiAgZnVuY3Rpb24gc3RvcEV2ZW50KCkgewogICAgaWYgKHRoaXMucHJldmVudERlZmF1bHQpIHt0aGlzLnByZXZlbnREZWZhdWx0KCk7IHRoaXMuc3RvcFByb3BhZ2F0aW9uKCk7fQogICAgZWxzZSB7dGhpcy5yZXR1cm5WYWx1ZSA9IGZhbHNlOyB0aGlzLmNhbmNlbEJ1YmJsZSA9IHRydWU7fQogIH0KICBmdW5jdGlvbiBhZGRTdG9wKGV2ZW50KSB7CiAgICBpZiAoIWV2ZW50LnN0b3ApIGV2ZW50LnN0b3AgPSBzdG9wRXZlbnQ7CiAgICByZXR1cm4gZXZlbnQ7CiAgfQogIGZ1bmN0aW9uIGNvbm5lY3Qobm9kZSwgdHlwZSwgaGFuZGxlcikgewogICAgZnVuY3Rpb24gd3JhcEhhbmRsZXIoZXZlbnQpIHtoYW5kbGVyKGFkZFN0b3AoZXZlbnQgfHwgd2luZG93LmV2ZW50KSk7fQogICAgaWYgKHR5cGVvZiBub2RlLmFkZEV2ZW50TGlzdGVuZXIgPT0gImZ1bmN0aW9uIikKICAgICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKHR5cGUsIHdyYXBIYW5kbGVyLCBmYWxzZSk7CiAgICBlbHNlCiAgICAgIG5vZGUuYXR0YWNoRXZlbnQoIm9uIiArIHR5cGUsIHdyYXBIYW5kbGVyKTsKICB9CgogIGZ1bmN0aW9uIGZvckVhY2goYXJyLCBmKSB7CiAgICBmb3IgKHZhciBpID0gMCwgZSA9IGFyci5sZW5ndGg7IGkgPCBlOyArK2kpIGYoYXJyW2ldKTsKICB9CgogIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7CiAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgIHRoZW1lOiAibmlnaHQiLAogICAgb25LZXlFdmVudDogZnVuY3Rpb24oaSwgZSkgewogICAgICAvLyBIb29rIGludG8gY3RybC1zcGFjZQogICAgICBpZiAoZS5rZXlDb2RlID09IDMyICYmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5KSAmJiAhZS5hbHRLZXkpIHsKICAgICAgICBlLnN0b3AoKTsKICAgICAgICByZXR1cm4gc3RhcnRDb21wbGV0ZSgpOwogICAgICB9CiAgICB9CiAgfSk7CgogIGZ1bmN0aW9uIHN0YXJ0Q29tcGxldGUoKSB7CiAgICAvLyBXZSB3YW50IGEgc2luZ2xlIGN1cnNvciBwb3NpdGlvbi4KICAgIGlmIChlZGl0b3Iuc29tZXRoaW5nU2VsZWN0ZWQoKSkgcmV0dXJuOwogICAgLy8gRmluZCB0aGUgdG9rZW4gYXQgdGhlIGN1cnNvcgogICAgdmFyIGN1ciA9IGVkaXRvci5nZXRDdXJzb3IoZmFsc2UpLCB0b2tlbiA9IGVkaXRvci5nZXRUb2tlbkF0KGN1ciksIHRwcm9wID0gdG9rZW47CiAgICAvLyBJZiBpdCdzIG5vdCBhICd3b3JkLXN0eWxlJyB0b2tlbiwgaWdub3JlIHRoZSB0b2tlbi4KICAgIGlmICghL15bXHckX10qJC8udGVzdCh0b2tlbi5zdHJpbmcpKSB7CiAgICAgIHRva2VuID0gdHByb3AgPSB7c3RhcnQ6IGN1ci5jaCwgZW5kOiBjdXIuY2gsIHN0cmluZzogIiIsIHN0YXRlOiB0b2tlbi5zdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IHRva2VuLnN0cmluZyA9PSAiLiIgPyAicHJvcGVydHkiIDogbnVsbH07CiAgICB9CiAgICAvLyBJZiBpdCBpcyBhIHByb3BlcnR5LCBmaW5kIG91dCB3aGF0IGl0IGlzIGEgcHJvcGVydHkgb2YuCiAgICB3aGlsZSAodHByb3AuY2xhc3NOYW1lID09ICJwcm9wZXJ0eSIpIHsKICAgICAgdHByb3AgPSBlZGl0b3IuZ2V0VG9rZW5BdCh7bGluZTogY3VyLmxpbmUsIGNoOiB0cHJvcC5zdGFydH0pOwogICAgICBpZiAodHByb3Auc3RyaW5nICE9ICIuIikgcmV0dXJuOwogICAgICB0cHJvcCA9IGVkaXRvci5nZXRUb2tlbkF0KHtsaW5lOiBjdXIubGluZSwgY2g6IHRwcm9wLnN0YXJ0fSk7CiAgICAgIGlmICghY29udGV4dCkgdmFyIGNvbnRleHQgPSBbXTsKICAgICAgY29udGV4dC5wdXNoKHRwcm9wKTsKICAgIH0KICAgIHZhciBjb21wbGV0aW9ucyA9IGdldENvbXBsZXRpb25zKHRva2VuLCBjb250ZXh0KTsKICAgIGlmICghY29tcGxldGlvbnMubGVuZ3RoKSByZXR1cm47CiAgICBmdW5jdGlvbiBpbnNlcnQoc3RyKSB7CiAgICAgIGVkaXRvci5yZXBsYWNlUmFuZ2Uoc3RyLCB7bGluZTogY3VyLmxpbmUsIGNoOiB0b2tlbi5zdGFydH0sIHtsaW5lOiBjdXIubGluZSwgY2g6IHRva2VuLmVuZH0pOwogICAgfQogICAgLy8gV2hlbiB0aGVyZSBpcyBvbmx5IG9uZSBjb21wbGV0aW9uLCB1c2UgaXQgZGlyZWN0bHkuCiAgICBpZiAoY29tcGxldGlvbnMubGVuZ3RoID09IDEpIHtpbnNlcnQoY29tcGxldGlvbnNbMF0pOyByZXR1cm4gdHJ1ZTt9CgogICAgLy8gQnVpbGQgdGhlIHNlbGVjdCB3aWRnZXQKICAgIHZhciBjb21wbGV0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgY29tcGxldGUuY2xhc3NOYW1lID0gImNvbXBsZXRpb25zIjsKICAgIHZhciBzZWwgPSBjb21wbGV0ZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKSk7CiAgICBzZWwubXVsdGlwbGUgPSB0cnVlOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb21wbGV0aW9ucy5sZW5ndGg7ICsraSkgewogICAgICB2YXIgb3B0ID0gc2VsLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpKTsKICAgICAgb3B0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNvbXBsZXRpb25zW2ldKSk7CiAgICB9CiAgICBzZWwuZmlyc3RDaGlsZC5zZWxlY3RlZCA9IHRydWU7CiAgICBzZWwuc2l6ZSA9IE1hdGgubWluKDEwLCBjb21wbGV0aW9ucy5sZW5ndGgpOwogICAgdmFyIHBvcyA9IGVkaXRvci5jdXJzb3JDb29yZHMoKTsKICAgIGNvbXBsZXRlLnN0eWxlLmxlZnQgPSBwb3MueCArICJweCI7CiAgICBjb21wbGV0ZS5zdHlsZS50b3AgPSBwb3MueUJvdCArICJweCI7CiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNvbXBsZXRlKTsKICAgIC8vIEhhY2sgdG8gaGlkZSB0aGUgc2Nyb2xsYmFyLgogICAgaWYgKGNvbXBsZXRpb25zLmxlbmd0aCA8PSAxMCkKICAgICAgY29tcGxldGUuc3R5bGUud2lkdGggPSAoc2VsLmNsaWVudFdpZHRoIC0gMSkgKyAicHgiOwoKICAgIHZhciBkb25lID0gZmFsc2U7CiAgICBmdW5jdGlvbiBjbG9zZSgpIHsKICAgICAgaWYgKGRvbmUpIHJldHVybjsKICAgICAgZG9uZSA9IHRydWU7CiAgICAgIGNvbXBsZXRlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY29tcGxldGUpOwogICAgfQogICAgZnVuY3Rpb24gcGljaygpIHsKICAgICAgaW5zZXJ0KHNlbC5vcHRpb25zW3NlbC5zZWxlY3RlZEluZGV4XS50ZXh0KTsKICAgICAgY2xvc2UoKTsKICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpe2VkaXRvci5mb2N1cygpO30sIDUwKTsKICAgIH0KICAgIGNvbm5lY3Qoc2VsLCAiYmx1ciIsIGNsb3NlKTsKICAgIGNvbm5lY3Qoc2VsLCAia2V5ZG93biIsIGZ1bmN0aW9uKGV2ZW50KSB7CiAgICAgIHZhciBjb2RlID0gZXZlbnQua2V5Q29kZTsKICAgICAgLy8gRW50ZXIgYW5kIHNwYWNlCiAgICAgIGlmIChjb2RlID09IDEzIHx8IGNvZGUgPT0gMzIpIHtldmVudC5zdG9wKCk7IHBpY2soKTt9CiAgICAgIC8vIEVzY2FwZQogICAgICBlbHNlIGlmIChjb2RlID09IDI3KSB7ZXZlbnQuc3RvcCgpOyBjbG9zZSgpOyBlZGl0b3IuZm9jdXMoKTt9CiAgICAgIGVsc2UgaWYgKGNvZGUgIT0gMzggJiYgY29kZSAhPSA0MCkge2Nsb3NlKCk7IGVkaXRvci5mb2N1cygpOyBzZXRUaW1lb3V0KHN0YXJ0Q29tcGxldGUsIDUwKTt9CiAgICB9KTsKICAgIGNvbm5lY3Qoc2VsLCAiZGJsY2xpY2siLCBwaWNrKTsKCiAgICBzZWwuZm9jdXMoKTsKICAgIC8vIE9wZXJhIHNvbWV0aW1lcyBpZ25vcmVzIGZvY3VzaW5nIGEgZnJlc2hseSBjcmVhdGVkIG5vZGUKICAgIGlmICh3aW5kb3cub3BlcmEpIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtpZiAoIWRvbmUpIHNlbC5mb2N1cygpO30sIDEwMCk7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIHZhciBzdHJpbmdQcm9wcyA9ICgiY2hhckF0IGNoYXJDb2RlQXQgaW5kZXhPZiBsYXN0SW5kZXhPZiBzdWJzdHJpbmcgc3Vic3RyIHNsaWNlIHRyaW0gdHJpbUxlZnQgdHJpbVJpZ2h0ICIgKwogICAgICAgICAgICAgICAgICAgICAidG9VcHBlckNhc2UgdG9Mb3dlckNhc2Ugc3BsaXQgY29uY2F0IG1hdGNoIHJlcGxhY2Ugc2VhcmNoIikuc3BsaXQoIiAiKTsKICB2YXIgYXJyYXlQcm9wcyA9ICgibGVuZ3RoIGNvbmNhdCBqb2luIHNwbGljZSBwdXNoIHBvcCBzaGlmdCB1bnNoaWZ0IHNsaWNlIHJldmVyc2Ugc29ydCBpbmRleE9mICIgKwogICAgICAgICAgICAgICAgICAgICJsYXN0SW5kZXhPZiBldmVyeSBzb21lIGZpbHRlciBmb3JFYWNoIG1hcCByZWR1Y2UgcmVkdWNlUmlnaHQgIikuc3BsaXQoIiAiKTsKICB2YXIgZnVuY1Byb3BzID0gInByb3RvdHlwZSBhcHBseSBjYWxsIGJpbmQiLnNwbGl0KCIgIik7CiAgdmFyIGtleXdvcmRzID0gKCJicmVhayBjYXNlIGNhdGNoIGNvbnRpbnVlIGRlYnVnZ2VyIGRlZmF1bHQgZGVsZXRlIGRvIGVsc2UgZmFsc2UgZmluYWxseSBmb3IgZnVuY3Rpb24gIiArCiAgICAgICAgICAgICAgICAgICJpZiBpbiBpbnN0YW5jZW9mIG5ldyBudWxsIHJldHVybiBzd2l0Y2ggdGhyb3cgdHJ1ZSB0cnkgdHlwZW9mIHZhciB2b2lkIHdoaWxlIHdpdGgiKS5zcGxpdCgiICIpOwoKICBmdW5jdGlvbiBnZXRDb21wbGV0aW9ucyh0b2tlbiwgY29udGV4dCkgewogICAgdmFyIGZvdW5kID0gW10sIHN0YXJ0ID0gdG9rZW4uc3RyaW5nOwogICAgZnVuY3Rpb24gbWF5YmVBZGQoc3RyKSB7CiAgICAgIGlmIChzdHIuaW5kZXhPZihzdGFydCkgPT0gMCkgZm91bmQucHVzaChzdHIpOwogICAgfQogICAgZnVuY3Rpb24gZ2F0aGVyQ29tcGxldGlvbnMob2JqKSB7CiAgICAgIGlmICh0eXBlb2Ygb2JqID09ICJzdHJpbmciKSBmb3JFYWNoKHN0cmluZ1Byb3BzLCBtYXliZUFkZCk7CiAgICAgIGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIEFycmF5KSBmb3JFYWNoKGFycmF5UHJvcHMsIG1heWJlQWRkKTsKICAgICAgZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgRnVuY3Rpb24pIGZvckVhY2goZnVuY1Byb3BzLCBtYXliZUFkZCk7CiAgICAgIGZvciAodmFyIG5hbWUgaW4gb2JqKSBtYXliZUFkZChuYW1lKTsKICAgIH0KCiAgICBpZiAoY29udGV4dCkgewogICAgICAvLyBJZiB0aGlzIGlzIGEgcHJvcGVydHksIHNlZSBpZiBpdCBiZWxvbmdzIHRvIHNvbWUgb2JqZWN0IHdlIGNhbgogICAgICAvLyBmaW5kIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICB2YXIgb2JqID0gY29udGV4dC5wb3AoKSwgYmFzZTsKICAgICAgaWYgKG9iai5jbGFzc05hbWUgPT0gInZhcmlhYmxlIikKICAgICAgICBiYXNlID0gd2luZG93W29iai5zdHJpbmddOwogICAgICBlbHNlIGlmIChvYmouY2xhc3NOYW1lID09ICJzdHJpbmciKQogICAgICAgIGJhc2UgPSAiIjsKICAgICAgZWxzZSBpZiAob2JqLmNsYXNzTmFtZSA9PSAiYXRvbSIpCiAgICAgICAgYmFzZSA9IDE7CiAgICAgIHdoaWxlIChiYXNlICE9IG51bGwgJiYgY29udGV4dC5sZW5ndGgpCiAgICAgICAgYmFzZSA9IGJhc2VbY29udGV4dC5wb3AoKS5zdHJpbmddOwogICAgICBpZiAoYmFzZSAhPSBudWxsKSBnYXRoZXJDb21wbGV0aW9ucyhiYXNlKTsKICAgIH0KICAgIGVsc2UgewogICAgICAvLyBJZiBub3QsIGp1c3QgbG9vayBpbiB0aGUgd2luZG93IG9iamVjdCBhbmQgYW55IGxvY2FsIHNjb3BlCiAgICAgIC8vIChyZWFkaW5nIGludG8gSlMgbW9kZSBpbnRlcm5hbHMgdG8gZ2V0IGF0IHRoZSBsb2NhbCB2YXJpYWJsZXMpCiAgICAgIGZvciAodmFyIHYgPSB0b2tlbi5zdGF0ZS5sb2NhbFZhcnM7IHY7IHYgPSB2Lm5leHQpIG1heWJlQWRkKHYubmFtZSk7CiAgICAgIGdhdGhlckNvbXBsZXRpb25zKHdpbmRvdyk7CiAgICAgIGZvckVhY2goa2V5d29yZHMsIG1heWJlQWRkKTsKICAgIH0KICAgIHJldHVybiBmb3VuZDsKICB9Cn0pKCk7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/emacs.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEVtYWNzIGJpbmRpbmdzIGRlbW88L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9tb2RlL2NsaWtlL2NsaWtlLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9rZXltYXAvZW1hY3MuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9kb2MvZG9jcy5jc3MiPgoKICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiAgICAgIC5Db2RlTWlycm9yIHtib3JkZXItdG9wOiAxcHggc29saWQgI2VlZTsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlZWU7fQogICAgPC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogRW1hY3MgYmluZGluZ3MgZGVtbzwvaDE+CgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KI2luY2x1ZGUgInN5c2NhbGxzLmgiCi8qIGdldGNoYXI6ICBzaW1wbGUgYnVmZmVyZWQgdmVyc2lvbiAqLwppbnQgZ2V0Y2hhcih2b2lkKQp7CiAgc3RhdGljIGNoYXIgYnVmW0JVRlNJWl07CiAgc3RhdGljIGNoYXIgKmJ1ZnAgPSBidWY7CiAgc3RhdGljIGludCBuID0gMDsKICBpZiAobiA9PSAwKSB7ICAvKiBidWZmZXIgaXMgZW1wdHkgKi8KICAgIG4gPSByZWFkKDAsIGJ1Ziwgc2l6ZW9mIGJ1Zik7CiAgICBidWZwID0gYnVmOwogIH0KICByZXR1cm4gKC0tbiA+PSAwKSA/ICh1bnNpZ25lZCBjaGFyKSAqYnVmcCsrIDogRU9GOwp9CjwvdGV4dGFyZWE+PC9mb3JtPgoKPHA+VGhlIGVtYWNzIGtleWJpbmRpbmdzIGFyZSBlbmFibGVkIGJ5CmluY2x1ZGluZyA8YSBocmVmPSIuLi9rZXltYXAvZW1hY3MuanMiPmtleW1hcC9lbWFjcy5qczwvYT4gYW5kIHNldHRpbmcKdGhlIDxjb2RlPmtleU1hcDwvY29kZT4gb3B0aW9uIHRvIDxjb2RlPiJlbWFjcyI8L2NvZGU+LiBCZWNhdXNlCkNvZGVNaXJyb3IncyBpbnRlcm5hbCBBUEkgaXMgcXVpdGUgZGlmZmVyZW50IGZyb20gRW1hY3MsIHRoZXkgYXJlIG9ubHkKYSBsb29zZSBhcHByb3hpbWF0aW9uIG9mIGFjdHVhbCBlbWFjcyBiaW5kaW5ncywgdGhvdWdoLjwvcD4KCjxwPkFsc28gbm90ZSB0aGF0IGEgbG90IG9mIGJyb3dzZXJzIGRpc2FsbG93IGNlcnRhaW4ga2V5cyBmcm9tIGJlaW5nCmNhcHR1cmVkLiBGb3IgZXhhbXBsZSwgQ2hyb21lIGJsb2NrcyBib3RoIEN0cmwtVyBhbmQgQ3RybC1OLCB3aXRoIHRoZQpyZXN1bHQgdGhhdCBpZGlvbWF0aWMgdXNlIG9mIEVtYWNzIGtleXMgd2lsbCBjb25zdGFudGx5IGNsb3NlIHlvdXIgdGFiCm9yIG9wZW4gYSBuZXcgd2luZG93LjwvcD4KCiAgICA8c2NyaXB0PgogICAgICBDb2RlTWlycm9yLmNvbW1hbmRzLnNhdmUgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgZWx0ID0gZWRpdG9yLmdldFdyYXBwZXJFbGVtZW50KCk7CiAgICAgICAgZWx0LnN0eWxlLmJhY2tncm91bmQgPSAiI2RlZiI7CiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgZWx0LnN0eWxlLmJhY2tncm91bmQgPSAiIjsgfSwgMzAwKTsKICAgICAgfTsKICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgICAgICBtb2RlOiAidGV4dC94LWNzcmMiLAogICAgICAgIGtleU1hcDogImVtYWNzIgogICAgICB9KTsKICAgIDwvc2NyaXB0PgoKICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/folding.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IENvZGUgRm9sZGluZyBEZW1vPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vbGliL3V0aWwvZm9sZGNvZGUuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Ii4uL21vZGUvamF2YXNjcmlwdC9qYXZhc2NyaXB0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9tb2RlL3htbC94bWwuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9kb2MvZG9jcy5jc3MiPgoKICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiAgICAgIC5Db2RlTWlycm9yIHtib3JkZXItdG9wOiAxcHggc29saWQgYmxhY2s7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazt9CiAgICAgIC5Db2RlTWlycm9yLWd1dHRlciB7bWluLXdpZHRoOiAyLjZlbTsgY3Vyc29yOiBwb2ludGVyO30KICAgIDwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3I6IENvZGUgRm9sZGluZyBEZW1vPC9oMT4KCiAgICA8cD5EZW1vbnN0cmF0aW9uIG9mIGNvZGUgZm9sZGluZyB1c2luZyB0aGUgY29kZQogICAgaW4gPGEgaHJlZj0iLi4vbGliL3V0aWwvZm9sZGNvZGUuanMiPjxjb2RlPmZvbGRjb2RlLmpzPC9jb2RlPjwvYT4uCiAgICBQcmVzcyBjdHJsLXEgb3IgY2xpY2sgb24gdGhlIGd1dHRlciB0byBmb2xkIGEgYmxvY2ssIGFnYWluCiAgICB0byB1bmZvbGQuPC9wPgogICAgPGZvcm0+CiAgICAgIDxkaXYgc3R5bGU9Im1heC13aWR0aDogNTBlbTsgbWFyZ2luLWJvdHRvbTogMWVtIj5KYXZhU2NyaXB0Ojxicj48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPjwvdGV4dGFyZWE+PC9kaXY+CiAgICAgIDxkaXYgc3R5bGU9Im1heC13aWR0aDogNTBlbSI+SFRNTDo8YnI+PHRleHRhcmVhIGlkPSJjb2RlLWh0bWwiIG5hbWU9ImNvZGUtaHRtbCI+PC90ZXh0YXJlYT48L2Rpdj4KICAgIDwvZm9ybT4KICAgIDxzY3JpcHQgaWQ9InNjcmlwdCI+CndpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbigpIHsKICB2YXIgdGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpOwogIHZhciBzYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzY3JpcHQiKTsKICB0ZS52YWx1ZSA9IChzYy50ZXh0Q29udGVudCB8fCBzYy5pbm5lclRleHQgfHwgc2MuaW5uZXJIVE1MKS5yZXBsYWNlKC9eXHMqLywgIiIpOwogIHNjLmlubmVySFRNTCA9ICIiOwogIHZhciB0ZV9odG1sID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUtaHRtbCIpOwogIHRlX2h0bWwudmFsdWUgPSAiPGh0bWw+XG4gICIgKyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuaW5uZXJIVE1MICsgIlxuPC9odG1sPiI7CgogIHZhciBmb2xkRnVuYyA9IENvZGVNaXJyb3IubmV3Rm9sZEZ1bmN0aW9uKENvZGVNaXJyb3IuYnJhY2VSYW5nZUZpbmRlcik7CiAgd2luZG93LmVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKHRlLCB7CiAgICBtb2RlOiAiamF2YXNjcmlwdCIsCiAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgIGxpbmVXcmFwcGluZzogdHJ1ZSwKICAgIG9uR3V0dGVyQ2xpY2s6IGZvbGRGdW5jLAogICAgZXh0cmFLZXlzOiB7IkN0cmwtUSI6IGZ1bmN0aW9uKGNtKXtmb2xkRnVuYyhjbSwgY20uZ2V0Q3Vyc29yKCkubGluZSk7fX0KICB9KTsKICBmb2xkRnVuYyhlZGl0b3IsIDkpOwogIGZvbGRGdW5jKGVkaXRvciwgMjApOwoKICB2YXIgZm9sZEZ1bmNfaHRtbCA9IENvZGVNaXJyb3IubmV3Rm9sZEZ1bmN0aW9uKENvZGVNaXJyb3IudGFnUmFuZ2VGaW5kZXIpOwogIHdpbmRvdy5lZGl0b3JfaHRtbCA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKHRlX2h0bWwsIHsKICAgIG1vZGU6ICJ0ZXh0L2h0bWwiLAogICAgbGluZU51bWJlcnM6IHRydWUsCiAgICBsaW5lV3JhcHBpbmc6IHRydWUsCiAgICBvbkd1dHRlckNsaWNrOiBmb2xkRnVuY19odG1sLAogICAgZXh0cmFLZXlzOiB7IkN0cmwtUSI6IGZ1bmN0aW9uKGNtKXtmb2xkRnVuY19odG1sKGNtLCBjbS5nZXRDdXJzb3IoKS5saW5lKTt9fQogIH0pCiAgZm9sZEZ1bmNfaHRtbChlZGl0b3JfaHRtbCwgMSk7CiAgZm9sZEZ1bmNfaHRtbChlZGl0b3JfaHRtbCwgMTUpOwp9Owo8L3NjcmlwdD4KICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/formatting.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEZvcm1hdHRpbmcgRGVtbzwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi91dGlsL2Zvcm1hdHRpbmcuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Ii4uL21vZGUvY3NzL2Nzcy5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vbW9kZS94bWwveG1sLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9tb2RlL2phdmFzY3JpcHQvamF2YXNjcmlwdC5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vbW9kZS9odG1sbWl4ZWQvaHRtbG1peGVkLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vZG9jL2RvY3MuY3NzIj4KCiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgogICAgICAuQ29kZU1pcnJvciB7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2VlZTsKICAgICAgfQogICAgICB0ZCB7CiAgICAgICAgcGFkZGluZy1yaWdodDogMjBweDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogRm9ybWF0dGluZyBkZW1vPC9oMT4KCiAgICA8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPjxzY3JpcHQ+IGZ1bmN0aW9uIChzLGUpeyBmb3IodmFyIGk9MDsgaSA8IDE7IGkrKykgdGVzdCgidGVzdCgpO2E9MSIpO30gPC9zY3JpcHQ+CjxzY3JpcHQ+CmZ1bmN0aW9uIHRlc3QoYyl7ICBmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspewkgICAgICAgICAgcHJvY2VzcygiYS5iKCk7YyA9IG51bGw7IiwgMzAwKTt9Cn0KPC9zY3JpcHQ+Cjx0YWJsZT48dHI+PHRkPnRlc3QgMTwvdGQ+PC90cj48dHI+PHRkPnRlc3QgMjwvdGQ+PC90cj48L3RhYmxlPgo8c2NyaXB0PiBmdW5jdGlvbiB0ZXN0KCkgeyByZXR1cm4gMTt9IDwvc2NyaXB0Pgo8c3R5bGU+IC50ZXN0IHsgZm9udC1zaXplOiBtZWRpdW07IGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7IH0KPC9zdHlsZT48L3RleHRhcmVhPjwvZm9ybT4KCjxwPlNlbGVjdCBhIHBpZWNlIG9mIGNvZGUgYW5kIGNsaWNrIG9uZSBvZiB0aGUgbGlua3MgYmVsb3cgdG8gYXBwbHkgYXV0b21hdGljIGZvcm1hdHRpbmcgdG8gdGhlIHNlbGVjdGVkIHRleHQgb3IgY29tbWVudC91bmNvbW1lbnQgdGhlIHNlbGVjdGVkIHRleHQuIE5vdGUgdGhhdCB0aGUgZm9ybWF0dGluZyBiZWhhdmlvciBkZXBlbmRzIG9uIHRoZSBjdXJyZW50IGJsb2NrJ3MgbW9kZS4KICAgIDx0YWJsZT4KICAgICAgPHRyPgogICAgICAgIDx0ZD4KICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6YXV0b0Zvcm1hdFNlbGVjdGlvbigpIj4KICAgICAgICAgICAgQXV0b2Zvcm1hdCBTZWxlY3RlZAogICAgICAgICAgPC9hPgogICAgICAgIDwvdGQ+CiAgICAgICAgPHRkPgogICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpjb21tZW50U2VsZWN0aW9uKHRydWUpIj4KICAgICAgICAgICAgQ29tbWVudCBTZWxlY3RlZAogICAgICAgICAgPC9hPgogICAgICAgIDwvdGQ+CiAgICAgICAgPHRkPgogICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpjb21tZW50U2VsZWN0aW9uKGZhbHNlKSI+CiAgICAgICAgICAgIFVuY29tbWVudCBTZWxlY3RlZAogICAgICAgICAgPC9hPgogICAgICAgIDwvdGQ+CiAgICAgIDwvdHI+CiAgICA8L3RhYmxlPgo8L3A+ICAgIAogICAgPHNjcmlwdD4KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgICAgICBtb2RlOiAiaHRtbG1peGVkIgogICAgICB9KTsKICAgICAgQ29kZU1pcnJvci5jb21tYW5kc1sic2VsZWN0QWxsIl0oZWRpdG9yKTsKICAgICAgCiAgICAgIGZ1bmN0aW9uIGdldFNlbGVjdGVkUmFuZ2UoKSB7CiAgICAgICAgcmV0dXJuIHsgZnJvbTogZWRpdG9yLmdldEN1cnNvcih0cnVlKSwgdG86IGVkaXRvci5nZXRDdXJzb3IoZmFsc2UpIH07CiAgICAgIH0KICAgICAgCiAgICAgIGZ1bmN0aW9uIGF1dG9Gb3JtYXRTZWxlY3Rpb24oKSB7CiAgICAgICAgdmFyIHJhbmdlID0gZ2V0U2VsZWN0ZWRSYW5nZSgpOwogICAgICAgIGVkaXRvci5hdXRvRm9ybWF0UmFuZ2UocmFuZ2UuZnJvbSwgcmFuZ2UudG8pOwogICAgICB9CiAgICAgIAogICAgICBmdW5jdGlvbiBjb21tZW50U2VsZWN0aW9uKGlzQ29tbWVudCkgewogICAgICAgIHZhciByYW5nZSA9IGdldFNlbGVjdGVkUmFuZ2UoKTsKICAgICAgICBlZGl0b3IuY29tbWVudFJhbmdlKGlzQ29tbWVudCwgcmFuZ2UuZnJvbSwgcmFuZ2UudG8pOwogICAgICB9ICAgICAgCiAgICA8L3NjcmlwdD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/fullscreen.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEZ1bGwgU2NyZWVuIEVkaXRpbmc8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vdGhlbWUvbmlnaHQuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi9tb2RlL3htbC94bWwuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9kb2MvZG9jcy5jc3MiPgogICAgPHNjcmlwdCBzcmM9Imh0dHA6Ly9hamF4Lmdvb2dsZWFwaXMuY29tL2FqYXgvbGlicy9qcXVlcnkvMS42LjEvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KICAgICAgICAuQ29kZU1pcnJvciB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7fQogICAgICAgIC5mdWxsc2NyZWVuIHsKICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICAgICAgdG9wOiAwOwogICAgICAgICAgICBsZWZ0OiAwOwogICAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgICAgICB6LWluZGV4OiA5OTk5OwogICAgICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgICAgIGJvcmRlcjogMHB4IHNvbGlkICNCQkJCQkI7CiAgICAgICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgfQogICAgPC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogRnVsbCBTY3JlZW4gRWRpdGluZzwvaDE+CgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIiByb3dzPSI1Ij4KICA8ZHQgaWQ9Im9wdGlvbl9pbmRlbnRXaXRoVGFicyI+PGNvZGU+aW5kZW50V2l0aFRhYnMgKGJvb2xlYW4pPC9jb2RlPjwvZHQ+CiAgPGRkPldoZXRoZXIsIHdoZW4gaW5kZW50aW5nLCB0aGUgZmlyc3QgTio4IHNwYWNlcyBzaG91bGQgYmUKICByZXBsYWNlZCBieSBOIHRhYnMuIERlZmF1bHQgaXMgZmFsc2UuPC9kZD4KCiAgPGR0IGlkPSJvcHRpb25fdGFiTW9kZSI+PGNvZGU+dGFiTW9kZSAoc3RyaW5nKTwvY29kZT48L2R0PgogIDxkZD5EZXRlcm1pbmVzIHdoYXQgaGFwcGVucyB3aGVuIHRoZSB1c2VyIHByZXNzZXMgdGhlIHRhYiBrZXkuCiAgTXVzdCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKICAgIDxkbD4KICAgICAgPGR0Pjxjb2RlPiJjbGFzc2ljIiAodGhlIGRlZmF1bHQpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5XaGVuIG5vdGhpbmcgaXMgc2VsZWN0ZWQsIGluc2VydCBhIHRhYi4gT3RoZXJ3aXNlLAogICAgICBiZWhhdmUgbGlrZSB0aGUgPGNvZGU+InNoaWZ0IjwvY29kZT4gbW9kZS4gKFdoZW4gc2hpZnQgaXMKICAgICAgaGVsZCwgdGhpcyBiZWhhdmVzIGxpa2UgdGhlIDxjb2RlPiJpbmRlbnQiPC9jb2RlPiBtb2RlLik8L2RkPgogICAgICA8ZHQ+PGNvZGU+InNoaWZ0IjwvY29kZT48L2R0PgogICAgICA8ZGQ+SW5kZW50IGFsbCBzZWxlY3RlZCBsaW5lcyBieQogICAgICBvbmUgPGEgaHJlZj0iI29wdGlvbl9pbmRlbnRVbml0Ij48Y29kZT5pbmRlbnRVbml0PC9jb2RlPjwvYT4uCiAgICAgIElmIHNoaWZ0IHdhcyBoZWxkIHdoaWxlIHByZXNzaW5nIHRhYiwgdW4taW5kZW50IGFsbCBzZWxlY3RlZAogICAgICBsaW5lcyBvbmUgdW5pdC48L2RkPgogICAgICA8ZHQ+PGNvZGU+ImluZGVudCI8L2NvZGU+PC9kdD4KICAgICAgPGRkPkluZGVudCB0aGUgbGluZSB0aGUgJ2NvcnJlY3RseScsIGJhc2VkIG9uIGl0cyBzeW50YWN0aWMKICAgICAgY29udGV4dC4gT25seSB3b3JrcyBpZiB0aGUKICAgICAgbW9kZSA8YSBocmVmPSIjaW5kZW50Ij5zdXBwb3J0czwvYT4gaXQuPC9kZD4KICAgICAgPGR0Pjxjb2RlPiJkZWZhdWx0IjwvY29kZT48L2R0PgogICAgICA8ZGQ+RG8gbm90IGNhcHR1cmUgdGFiIHByZXNzZXMsIGxldCB0aGUgYnJvd3NlciBhcHBseSBpdHMKICAgICAgZGVmYXVsdCBiZWhhdmlvdXIgKHdoaWNoIHVzdWFsbHkgbWVhbnMgaXQgc2tpcHMgdG8gdGhlIG5leHQKICAgICAgY29udHJvbCkuPC9kZD4KICAgIDwvZGw+PC9kZD4KCiAgPGR0IGlkPSJvcHRpb25fZW50ZXJNb2RlIj48Y29kZT5lbnRlck1vZGUgKHN0cmluZyk8L2NvZGU+PC9kdD4KICA8ZGQ+RGV0ZXJtaW5lcyB3aGV0aGVyIGFuZCBob3cgbmV3IGxpbmVzIGFyZSBpbmRlbnRlZCB3aGVuIHRoZQogIGVudGVyIGtleSBpcyBwcmVzc2VkLiBUaGUgZm9sbG93aW5nIG1vZGVzIGFyZSBzdXBwb3J0ZWQ6CiAgICA8ZGw+CiAgICAgIDxkdD48Y29kZT4iaW5kZW50IiAodGhlIGRlZmF1bHQpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5Vc2UgdGhlIG1vZGUncyBpbmRlbnRhdGlvbiBydWxlcyB0byBnaXZlIHRoZSBuZXcgbGluZQogICAgICB0aGUgY29ycmVjdCBpbmRlbnRhdGlvbi48L2RkPgogICAgICA8ZHQ+PGNvZGU+ImtlZXAiPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5JbmRlbnQgdGhlIGxpbmUgdGhlIHNhbWUgYXMgdGhlIHByZXZpb3VzIGxpbmUuPC9kZD4KICAgICAgPGR0Pjxjb2RlPiJmbGF0IjwvY29kZT48L2R0PgogICAgICA8ZGQ+RG8gbm90IGluZGVudCB0aGUgbmV3IGxpbmUuPC9kZD4KICAgIDwvZGw+PC9kZD4KCiAgPGR0IGlkPSJvcHRpb25fZW50ZXJNb2RlIj48Y29kZT5lbnRlck1vZGUgKHN0cmluZyk8L2NvZGU+PC9kdD4KICA8ZGQ+RGV0ZXJtaW5lcyB3aGV0aGVyIGFuZCBob3cgbmV3IGxpbmVzIGFyZSBpbmRlbnRlZCB3aGVuIHRoZQogIGVudGVyIGtleSBpcyBwcmVzc2VkLiBUaGUgZm9sbG93aW5nIG1vZGVzIGFyZSBzdXBwb3J0ZWQ6CiAgICA8ZGw+CiAgICAgIDxkdD48Y29kZT4iaW5kZW50IiAodGhlIGRlZmF1bHQpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5Vc2UgdGhlIG1vZGUncyBpbmRlbnRhdGlvbiBydWxlcyB0byBnaXZlIHRoZSBuZXcgbGluZQogICAgICB0aGUgY29ycmVjdCBpbmRlbnRhdGlvbi48L2RkPgogICAgICA8ZHQ+PGNvZGU+ImtlZXAiPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5JbmRlbnQgdGhlIGxpbmUgdGhlIHNhbWUgYXMgdGhlIHByZXZpb3VzIGxpbmUuPC9kZD4KICAgICAgPGR0Pjxjb2RlPiJmbGF0IjwvY29kZT48L2R0PgogICAgICA8ZGQ+RG8gbm90IGluZGVudCB0aGUgbmV3IGxpbmUuPC9kZD4KICAgIDwvZGw+PC9kZD4KCiAgPGR0IGlkPSJvcHRpb25fZW50ZXJNb2RlIj48Y29kZT5lbnRlck1vZGUgKHN0cmluZyk8L2NvZGU+PC9kdD4KICA8ZGQ+RGV0ZXJtaW5lcyB3aGV0aGVyIGFuZCBob3cgbmV3IGxpbmVzIGFyZSBpbmRlbnRlZCB3aGVuIHRoZQogIGVudGVyIGtleSBpcyBwcmVzc2VkLiBUaGUgZm9sbG93aW5nIG1vZGVzIGFyZSBzdXBwb3J0ZWQ6CiAgICA8ZGw+CiAgICAgIDxkdD48Y29kZT4iaW5kZW50IiAodGhlIGRlZmF1bHQpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5Vc2UgdGhlIG1vZGUncyBpbmRlbnRhdGlvbiBydWxlcyB0byBnaXZlIHRoZSBuZXcgbGluZQogICAgICB0aGUgY29ycmVjdCBpbmRlbnRhdGlvbi48L2RkPgogICAgICA8ZHQ+PGNvZGU+ImtlZXAiPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5JbmRlbnQgdGhlIGxpbmUgdGhlIHNhbWUgYXMgdGhlIHByZXZpb3VzIGxpbmUuPC9kZD4KICAgICAgPGR0Pjxjb2RlPiJmbGF0IjwvY29kZT48L2R0PgogICAgICA8ZGQ+RG8gbm90IGluZGVudCB0aGUgbmV3IGxpbmUuPC9kZD4KICAgIDwvZGw+PC9kZD4KCiAgPGR0IGlkPSJvcHRpb25fZW50ZXJNb2RlIj48Y29kZT5lbnRlck1vZGUgKHN0cmluZyk8L2NvZGU+PC9kdD4KICA8ZGQ+RGV0ZXJtaW5lcyB3aGV0aGVyIGFuZCBob3cgbmV3IGxpbmVzIGFyZSBpbmRlbnRlZCB3aGVuIHRoZQogIGVudGVyIGtleSBpcyBwcmVzc2VkLiBUaGUgZm9sbG93aW5nIG1vZGVzIGFyZSBzdXBwb3J0ZWQ6CiAgICA8ZGw+CiAgICAgIDxkdD48Y29kZT4iaW5kZW50IiAodGhlIGRlZmF1bHQpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5Vc2UgdGhlIG1vZGUncyBpbmRlbnRhdGlvbiBydWxlcyB0byBnaXZlIHRoZSBuZXcgbGluZQogICAgICB0aGUgY29ycmVjdCBpbmRlbnRhdGlvbi48L2RkPgogICAgICA8ZHQ+PGNvZGU+ImtlZXAiPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5JbmRlbnQgdGhlIGxpbmUgdGhlIHNhbWUgYXMgdGhlIHByZXZpb3VzIGxpbmUuPC9kZD4KICAgICAgPGR0Pjxjb2RlPiJmbGF0IjwvY29kZT48L2R0PgogICAgICA8ZGQ+RG8gbm90IGluZGVudCB0aGUgbmV3IGxpbmUuPC9kZD4KICAgIDwvZGw+PC9kZD4KCjwvdGV4dGFyZWE+PC9mb3JtPgogPHNjcmlwdD4KCihmdW5jdGlvbiAoKSB7CgogICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgICAgICB0aGVtZTogIm5pZ2h0IiwKICAgICAgICBleHRyYUtleXM6IHsiRjExIjogdG9nZ2xlRnVsbHNjcmVlbkVkaXRpbmcsICJFc2MiOiB0b2dnbGVGdWxsc2NyZWVuRWRpdGluZ30KICAgIH0pOwoKICAgIGZ1bmN0aW9uIHRvZ2dsZUZ1bGxzY3JlZW5FZGl0aW5nKCkKICAgIHsKICAgICAgICB2YXIgZWRpdG9yRGl2ID0gJCgnLkNvZGVNaXJyb3Itc2Nyb2xsJyk7CiAgICAgICAgaWYgKCFlZGl0b3JEaXYuaGFzQ2xhc3MoJ2Z1bGxzY3JlZW4nKSkgewogICAgICAgICAgICB0b2dnbGVGdWxsc2NyZWVuRWRpdGluZy5iZWZvcmVGdWxsc2NyZWVuID0geyBoZWlnaHQ6IGVkaXRvckRpdi5oZWlnaHQoKSwgd2lkdGg6IGVkaXRvckRpdi53aWR0aCgpIH0KICAgICAgICAgICAgZWRpdG9yRGl2LmFkZENsYXNzKCdmdWxsc2NyZWVuJyk7CiAgICAgICAgICAgIGVkaXRvckRpdi5oZWlnaHQoJzEwMCUnKTsKICAgICAgICAgICAgZWRpdG9yRGl2LndpZHRoKCcxMDAlJyk7CiAgICAgICAgICAgIGVkaXRvci5yZWZyZXNoKCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBlZGl0b3JEaXYucmVtb3ZlQ2xhc3MoJ2Z1bGxzY3JlZW4nKTsKICAgICAgICAgICAgZWRpdG9yRGl2LmhlaWdodCh0b2dnbGVGdWxsc2NyZWVuRWRpdGluZy5iZWZvcmVGdWxsc2NyZWVuLmhlaWdodCk7CiAgICAgICAgICAgIGVkaXRvckRpdi53aWR0aCh0b2dnbGVGdWxsc2NyZWVuRWRpdGluZy5iZWZvcmVGdWxsc2NyZWVuLndpZHRoKTsKICAgICAgICAgICAgZWRpdG9yLnJlZnJlc2goKTsKICAgICAgICB9CiAgICB9Cgp9KSgpOwo8L3NjcmlwdD4KCiAgICA8cD5QcmVzcyA8c3Ryb25nPkYxMTwvc3Ryb25nPiAob3IgPHN0cm9uZz5FU0M8L3N0cm9uZz4gaW4gU2FmYXJpIG9uIE1hYyBPUyBYKSB3aGVuIGN1cnNvciBpcyBpbiB0aGUgZWRpdG9yIHRvIHRvZ2dsZSBmdWxsIHNjcmVlbiBlZGl0aW5nLjwvcD4KCiAgICA8cD48c3Ryb25nPk5vdGU6PC9zdHJvbmc+IERvZXMgbm90IGN1cnJlbnRseSB3b3JrIGNvcnJlY3RseSBpbiBJRQogICAgNiBhbmQgNywgd2hlcmUgc2V0dGluZyB0aGUgaGVpZ2h0IG9mIHNvbWV0aGluZwogICAgdG8gPGNvZGU+MTAwJTwvY29kZT4gZG9lc24ndCBtYWtlIGl0IGZ1bGwtc2NyZWVuLjwvcD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/marker.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEJyZWFrcG9pbnQgRGVtbzwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Ii4uL21vZGUvamF2YXNjcmlwdC9qYXZhc2NyaXB0LmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vZG9jL2RvY3MuY3NzIj4KCiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgogICAgICAuQ29kZU1pcnJvci1ndXR0ZXIgewogICAgICAgIHdpZHRoOiAzZW07CiAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7CiAgICAgIH0KICAgICAgLkNvZGVNaXJyb3IgewogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNhYWE7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3I6IEJyZWFrcG9pbnQgZGVtbzwvaDE+CgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogIGxpbmVOdW1iZXJzOiB0cnVlLAogIG9uR3V0dGVyQ2xpY2s6IGZ1bmN0aW9uKGNtLCBuKSB7CiAgICB2YXIgaW5mbyA9IGNtLmxpbmVJbmZvKG4pOwogICAgaWYgKGluZm8ubWFya2VyVGV4dCkKICAgICAgY20uY2xlYXJNYXJrZXIobik7CiAgICBlbHNlCiAgICAgIGNtLnNldE1hcmtlcihuLCAiPHNwYW4gc3R5bGU9XCJjb2xvcjogIzkwMFwiPuKXjzwvc3Bhbj4gJU4lIik7CiAgfQp9KTsKPC90ZXh0YXJlYT48L2Zvcm0+Cgo8cD5DbGljayB0aGUgbGluZS1udW1iZXIgZ3V0dGVyIHRvIGFkZCBvciByZW1vdmUgJ2JyZWFrcG9pbnRzJy48L3A+CgogICAgPHNjcmlwdD4KICAgICAgQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIG9uR3V0dGVyQ2xpY2s6IGZ1bmN0aW9uKGNtLCBuKSB7CiAgICAgICAgICB2YXIgaW5mbyA9IGNtLmxpbmVJbmZvKG4pOwogICAgICAgICAgaWYgKGluZm8ubWFya2VyVGV4dCkKICAgICAgICAgICAgY20uY2xlYXJNYXJrZXIobik7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGNtLnNldE1hcmtlcihuLCAiPHNwYW4gc3R5bGU9XCJjb2xvcjogIzkwMFwiPuKXjzwvc3Bhbj4gJU4lIik7CiAgICAgICAgfQogICAgICB9KTsKICAgIDwvc2NyaXB0PgoKICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/mustache.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IE92ZXJsYXkgUGFyc2VyIERlbW88L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9saWIvdXRpbC9vdmVybGF5LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9tb2RlL3htbC94bWwuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9kb2MvZG9jcy5jc3MiPgoKICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiAgICAgIC5Db2RlTWlycm9yIHtib3JkZXI6IDFweCBzb2xpZCBibGFjazt9CiAgICAgIC5jbS1tdXN0YWNoZSB7Y29sb3I6ICMwY2E7fQogICAgPC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogT3ZlcmxheSBQYXJzZXIgRGVtbzwvaDE+CgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KPGh0bWw+CiAgPGJvZHk+CiAgICA8aDE+e3t0aXRsZX19PC9oMT4KICAgIDxwPlRoZXNlIGFyZSBsaW5rcyB0byB7e3RoaW5nc319OjwvcD4KICAgIDx1bD57eyNsaW5rc319CiAgICAgIDxsaT48YSBocmVmPSJ7e3VybH19Ij57e3RleHR9fTwvYT48L2xpPgogICAge3svbGlua3N9fTwvdWw+CiAgPC9ib2R5Pgo8L2h0bWw+CjwvdGV4dGFyZWE+PC9mb3JtPgoKICAgIDxzY3JpcHQ+CkNvZGVNaXJyb3IuZGVmaW5lTW9kZSgibXVzdGFjaGUiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogIHZhciBtdXN0YWNoZU92ZXJsYXkgPSB7CiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICBpZiAoc3RyZWFtLm1hdGNoKCJ7eyIpKSB7CiAgICAgICAgd2hpbGUgKChjaCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpCiAgICAgICAgICBpZiAoY2ggPT0gIn0iICYmIHN0cmVhbS5uZXh0KCkgPT0gIn0iKSBicmVhazsKICAgICAgICByZXR1cm4gIm11c3RhY2hlIjsKICAgICAgfQogICAgICB3aGlsZSAoc3RyZWFtLm5leHQoKSAhPSBudWxsICYmICFzdHJlYW0ubWF0Y2goInt7IiwgZmFsc2UpKSB7fQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICB9OwogIHJldHVybiBDb2RlTWlycm9yLm92ZXJsYXlQYXJzZXIoQ29kZU1pcnJvci5nZXRNb2RlKGNvbmZpZywgcGFyc2VyQ29uZmlnLmJhY2tkcm9wIHx8ICJ0ZXh0L2h0bWwiKSwgbXVzdGFjaGVPdmVybGF5KTsKfSk7CnZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7bW9kZTogIm11c3RhY2hlIn0pOwo8L3NjcmlwdD4KCiAgICA8cD5EZW1vbnN0cmF0aW9uIG9mIGEgbW9kZSB0aGF0IHBhcnNlcyBIVE1MLCBoaWdobGlnaHRpbmcKICAgIHRoZSA8YSBocmVmPSJodHRwOi8vbXVzdGFjaGUuZ2l0aHViLmNvbS8iPk11c3RhY2hlPC9hPiB0ZW1wbGF0aW5nCiAgICBkaXJlY3RpdmVzIGluc2lkZSBvZiBpdCBieSB1c2luZyB0aGUgY29kZQogICAgaW4gPGEgaHJlZj0iLi4vbGliL3V0aWwvb3ZlcmxheS5qcyI+PGNvZGU+b3ZlcmxheS5qczwvY29kZT48L2E+LiBWaWV3CiAgICBzb3VyY2UgdG8gc2VlIHRoZSAxNSBsaW5lcyBvZiBjb2RlIG5lZWRlZCB0byBhY2NvbXBsaXNoIHRoaXMuPC9wPgoKICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/preview.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEhUTUw1IHByZXZpZXc8L3RpdGxlPgogICAgPG1ldGEgY2hhcnNldD11dGYtOD4KICAgIDxzY3JpcHQgc3JjPS4uL2xpYi9jb2RlbWlycm9yLmpzPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Li4vbW9kZS94bWwveG1sLmpzPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Li4vbW9kZS9qYXZhc2NyaXB0L2phdmFzY3JpcHQuanM+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0uLi9tb2RlL2Nzcy9jc3MuanM+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0uLi9tb2RlL2h0bWxtaXhlZC9odG1sbWl4ZWQuanM+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9c3R5bGVzaGVldCBocmVmPS4uL2xpYi9jb2RlbWlycm9yLmNzcz4KICAgIDxsaW5rIHJlbD1zdHlsZXNoZWV0IGhyZWY9Li4vZG9jL2RvY3MuY3NzPgogICAgPHN0eWxlIHR5cGU9dGV4dC9jc3M+CiAgICAgIC5Db2RlTWlycm9yIHsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgICB3aWR0aDogNTAlOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOwogICAgICB9CiAgICAgIGlmcmFtZSB7CiAgICAgICAgd2lkdGg6IDQ5JTsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgICBoZWlnaHQ6IDMwMHB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOwogICAgICAgIGJvcmRlci1sZWZ0OiAwcHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3I6IEhUTUw1IHByZXZpZXc8L2gxPgogICAgPHRleHRhcmVhIGlkPWNvZGUgbmFtZT1jb2RlPgo8IWRvY3R5cGUgaHRtbD4KPGh0bWw+CiAgPGhlYWQ+CiAgICA8bWV0YSBjaGFyc2V0PXV0Zi04PgogICAgPHRpdGxlPkhUTUw1IGNhbnZhcyBkZW1vPC90aXRsZT4KICAgIDxzdHlsZT5wIHtmb250LWZhbWlseTogbW9ub3NwYWNlO308L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxwPkNhbnZhcyBwYW5lIGdvZXMgaGVyZTo8L3A+CiAgICA8Y2FudmFzIGlkPXBhbmUgd2lkdGg9MzAwIGhlaWdodD0yMDA+PC9jYW52YXM+CiAgICA8c2NyaXB0PgogICAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhbmUnKTsKICAgICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTsKCiAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJ3JnYigyNTAsMCwwKSc7CiAgICAgIGNvbnRleHQuZmlsbFJlY3QoMTAsIDEwLCA1NSwgNTApOwoKICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAncmdiYSgwLCAwLCAyNTAsIDAuNSknOwogICAgICBjb250ZXh0LmZpbGxSZWN0KDMwLCAzMCwgNTUsIDUwKTsKICAgIDwvc2NyaXB0PgogIDwvYm9keT4KPC9odG1sPjwvdGV4dGFyZWE+CiAgICA8aWZyYW1lIGlkPXByZXZpZXc+PC9pZnJhbWU+CiAgICA8c2NyaXB0PgogICAgICB2YXIgZGVsYXk7CiAgICAgIC8vIEluaXRpYWxpemUgQ29kZU1pcnJvciBlZGl0b3Igd2l0aCBhIG5pY2UgaHRtbDUgY2FudmFzIGRlbW8uCiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29kZScpLCB7CiAgICAgICAgbW9kZTogJ3RleHQvaHRtbCcsCiAgICAgICAgdGFiTW9kZTogJ2luZGVudCcsCiAgICAgICAgb25DaGFuZ2U6IGZ1bmN0aW9uKCkgewogICAgICAgICAgY2xlYXJUaW1lb3V0KGRlbGF5KTsKICAgICAgICAgIGRlbGF5ID0gc2V0VGltZW91dCh1cGRhdGVQcmV2aWV3LCAzMDApOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIAogICAgICBmdW5jdGlvbiB1cGRhdGVQcmV2aWV3KCkgewogICAgICAgIHZhciBwcmV2aWV3RnJhbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHJldmlldycpOwogICAgICAgIHZhciBwcmV2aWV3ID0gIHByZXZpZXdGcmFtZS5jb250ZW50RG9jdW1lbnQgfHwgIHByZXZpZXdGcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50OwogICAgICAgIHByZXZpZXcub3BlbigpOwogICAgICAgIHByZXZpZXcud3JpdGUoZWRpdG9yLmdldFZhbHVlKCkpOwogICAgICAgIHByZXZpZXcuY2xvc2UoKTsKICAgICAgfQogICAgICBzZXRUaW1lb3V0KHVwZGF0ZVByZXZpZXcsIDMwMCk7CiAgICA8L3NjcmlwdD4KICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/resize.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEF1dG9yZXNpemUgRGVtbzwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Ii4uL21vZGUvY3NzL2Nzcy5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2RvYy9kb2NzLmNzcyI+CgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KICAgICAgLkNvZGVNaXJyb3IgewogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNlZWU7CiAgICAgIH0KICAgICAgLkNvZGVNaXJyb3Itc2Nyb2xsIHsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgb3ZlcmZsb3cteTogaGlkZGVuOwogICAgICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3I6IEF1dG9yZXNpemUgZGVtbzwvaDE+CgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KLkNvZGVNaXJyb3Itc2Nyb2xsIHsKICBoZWlnaHQ6IGF1dG87CiAgb3ZlcmZsb3cteTogaGlkZGVuOwogIG92ZXJmbG93LXg6IGF1dG87CiAgd2lkdGg6IDEwMCUKfTwvdGV4dGFyZWE+PC9mb3JtPgoKPHA+Qnkgc2V0dGluZyBhIGZldyBDU1MgcHJvcGVydGllcywgQ29kZU1pcnJvciBjYW4gYmUgbWFkZSB0bwphdXRvbWF0aWNhbGx5IHJlc2l6ZSB0byBmaXQgaXRzIGNvbnRlbnQuPC9wPgoKICAgIDxzY3JpcHQ+CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7CiAgICAgICAgbGluZU51bWJlcnM6IHRydWUKICAgICAgfSk7CiAgICA8L3NjcmlwdD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/runmode.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IE1vZGUgUnVubmVyIERlbW88L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9saWIvdXRpbC9ydW5tb2RlLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9tb2RlL3htbC94bWwuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9kb2MvZG9jcy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBNb2RlIFJ1bm5lciBEZW1vPC9oMT4KCiAgICA8dGV4dGFyZWEgaWQ9ImNvZGUiIHN0eWxlPSJ3aWR0aDogOTAlOyBoZWlnaHQ6IDdlbTsgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7IHBhZGRpbmc6IC4yZW0gLjRlbTsiPgo8Zm9vYmFyPgogIDxibGFoPkVudGVyIHlvdXIgeG1sIGhlcmUgYW5kIHByZXNzIHRoZSBidXR0b24gYmVsb3cgdG8gZGlzcGxheQogICAgaXQgYXMgaGlnaGxpZ2h0ZWQgYnkgdGhlIENvZGVNaXJyb3IgWE1MIG1vZGU8L2JsYWg+CiAgPHRhZzIgZm9vPSIyIiBiYXI9IiZhbXA7cXVvdDtiYXImYW1wO3F1b3Q7Ii8+CjwvZm9vYmFyPjwvdGV4dGFyZWE+PGJyPgogICAgPGJ1dHRvbiBvbmNsaWNrPSJkb0hpZ2hsaWdodCgpOyI+SGlnaGxpZ2h0ITwvYnV0dG9uPgogICAgPHByZSBpZD0ib3V0cHV0IiBjbGFzcz0iY20tcy1kZWZhdWx0Ij48L3ByZT4KCiAgICA8c2NyaXB0PgpmdW5jdGlvbiBkb0hpZ2hsaWdodCgpIHsKICBDb2RlTWlycm9yLnJ1bk1vZGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKS52YWx1ZSwgImFwcGxpY2F0aW9uL3htbCIsCiAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJvdXRwdXQiKSk7Cn0KPC9zY3JpcHQ+CgogICAgPHA+UnVubmluZyBhIENvZGVNaXJyb3IgbW9kZSBvdXRzaWRlIG9mIHRoZSBlZGl0b3IuCiAgICBUaGUgPGNvZGU+Q29kZU1pcnJvci5ydW5Nb2RlPC9jb2RlPiBmdW5jdGlvbiwgZGVmaW5lZAogICAgaW4gPGNvZGU+PGEgaHJlZj0iLi4vbGliL3V0aWwvcnVubW9kZS5qcyI+bGliL3J1bm1vZGUuanM8L2E+PC9jb2RlPiB0YWtlcyB0aGUgZm9sbG93aW5nIGFyZ3VtZW50czo8L3A+CgogICAgPGRsPgogICAgICA8ZHQ+PGNvZGU+dGV4dCAoc3RyaW5nKTwvY29kZT48L2R0PgogICAgICA8ZGQ+VGhlIGRvY3VtZW50IHRvIHJ1biB0aHJvdWdoIHRoZSBoaWdobGlnaHRlci48L2RkPgogICAgICA8ZHQ+PGNvZGU+bW9kZSAoPGEgaHJlZj0iLi4vZG9jL21hbnVhbC5odG1sI29wdGlvbl9tb2RlIj5tb2RlIHNwZWM8L2E+KTwvY29kZT48L2R0PgogICAgICA8ZGQ+VGhlIG1vZGUgdG8gdXNlIChtdXN0IGJlIGxvYWRlZCBhcyBub3JtYWwpLjwvZGQ+CiAgICAgIDxkdD48Y29kZT5vdXRwdXQgKGZ1bmN0aW9uIG9yIERPTSBub2RlKTwvY29kZT48L2R0PgogICAgICA8ZGQ+SWYgdGhpcyBpcyBhIGZ1bmN0aW9uLCBpdCB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaCB0b2tlbiB3aXRoCiAgICAgIHR3byBhcmd1bWVudHMsIHRoZSB0b2tlbidzIHRleHQgYW5kIHRoZSB0b2tlbidzIHN0eWxlIGNsYXNzIChtYXkKICAgICAgYmUgPGNvZGU+bnVsbDwvY29kZT4gZm9yIHVuc3R5bGVkIHRva2VucykuIElmIGl0IGlzIGEgRE9NIG5vZGUsCiAgICAgIHRoZSB0b2tlbnMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gPGNvZGU+c3BhbjwvY29kZT4gZWxlbWVudHMgYXMgaW4KICAgICAgYW4gZWRpdG9yLCBhbmQgaW5zZXJ0ZWQgaW50byB0aGUgbm9kZQogICAgICAodGhyb3VnaCA8Y29kZT5pbm5lckhUTUw8L2NvZGU+KS48L2RkPgogICAgPC9kbD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/search.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFNlYXJjaC9SZXBsYWNlIERlbW88L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9tb2RlL3htbC94bWwuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi91dGlsL2RpYWxvZy5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2xpYi91dGlsL2RpYWxvZy5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi91dGlsL3NlYXJjaGN1cnNvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vbGliL3V0aWwvc2VhcmNoLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vZG9jL2RvY3MuY3NzIj4KCiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgogICAgICAuQ29kZU1pcnJvciB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7fQogICAgICBkdCB7Zm9udC1mYW1pbHk6IG1vbm9zcGFjZTsgY29sb3I6ICM2NjY7fQogICAgPC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogU2VhcmNoL1JlcGxhY2UgRGVtbzwvaDE+CgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KICA8ZHQgaWQ9Im9wdGlvbl9pbmRlbnRXaXRoVGFicyI+PGNvZGU+aW5kZW50V2l0aFRhYnMgKGJvb2xlYW4pPC9jb2RlPjwvZHQ+CiAgPGRkPldoZXRoZXIsIHdoZW4gaW5kZW50aW5nLCB0aGUgZmlyc3QgTio4IHNwYWNlcyBzaG91bGQgYmUKICByZXBsYWNlZCBieSBOIHRhYnMuIERlZmF1bHQgaXMgZmFsc2UuPC9kZD4KCiAgPGR0IGlkPSJvcHRpb25fdGFiTW9kZSI+PGNvZGU+dGFiTW9kZSAoc3RyaW5nKTwvY29kZT48L2R0PgogIDxkZD5EZXRlcm1pbmVzIHdoYXQgaGFwcGVucyB3aGVuIHRoZSB1c2VyIHByZXNzZXMgdGhlIHRhYiBrZXkuCiAgTXVzdCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKICAgIDxkbD4KICAgICAgPGR0Pjxjb2RlPiJjbGFzc2ljIiAodGhlIGRlZmF1bHQpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5XaGVuIG5vdGhpbmcgaXMgc2VsZWN0ZWQsIGluc2VydCBhIHRhYi4gT3RoZXJ3aXNlLAogICAgICBiZWhhdmUgbGlrZSB0aGUgPGNvZGU+InNoaWZ0IjwvY29kZT4gbW9kZS4gKFdoZW4gc2hpZnQgaXMKICAgICAgaGVsZCwgdGhpcyBiZWhhdmVzIGxpa2UgdGhlIDxjb2RlPiJpbmRlbnQiPC9jb2RlPiBtb2RlLik8L2RkPgogICAgICA8ZHQ+PGNvZGU+InNoaWZ0IjwvY29kZT48L2R0PgogICAgICA8ZGQ+SW5kZW50IGFsbCBzZWxlY3RlZCBsaW5lcyBieQogICAgICBvbmUgPGEgaHJlZj0iI29wdGlvbl9pbmRlbnRVbml0Ij48Y29kZT5pbmRlbnRVbml0PC9jb2RlPjwvYT4uCiAgICAgIElmIHNoaWZ0IHdhcyBoZWxkIHdoaWxlIHByZXNzaW5nIHRhYiwgdW4taW5kZW50IGFsbCBzZWxlY3RlZAogICAgICBsaW5lcyBvbmUgdW5pdC48L2RkPgogICAgICA8ZHQ+PGNvZGU+ImluZGVudCI8L2NvZGU+PC9kdD4KICAgICAgPGRkPkluZGVudCB0aGUgbGluZSB0aGUgJ2NvcnJlY3RseScsIGJhc2VkIG9uIGl0cyBzeW50YWN0aWMKICAgICAgY29udGV4dC4gT25seSB3b3JrcyBpZiB0aGUKICAgICAgbW9kZSA8YSBocmVmPSIjaW5kZW50Ij5zdXBwb3J0czwvYT4gaXQuPC9kZD4KICAgICAgPGR0Pjxjb2RlPiJkZWZhdWx0IjwvY29kZT48L2R0PgogICAgICA8ZGQ+RG8gbm90IGNhcHR1cmUgdGFiIHByZXNzZXMsIGxldCB0aGUgYnJvd3NlciBhcHBseSBpdHMKICAgICAgZGVmYXVsdCBiZWhhdmlvdXIgKHdoaWNoIHVzdWFsbHkgbWVhbnMgaXQgc2tpcHMgdG8gdGhlIG5leHQKICAgICAgY29udHJvbCkuPC9kZD4KICAgIDwvZGw+PC9kZD4KCiAgPGR0IGlkPSJvcHRpb25fZW50ZXJNb2RlIj48Y29kZT5lbnRlck1vZGUgKHN0cmluZyk8L2NvZGU+PC9kdD4KICA8ZGQ+RGV0ZXJtaW5lcyB3aGV0aGVyIGFuZCBob3cgbmV3IGxpbmVzIGFyZSBpbmRlbnRlZCB3aGVuIHRoZQogIGVudGVyIGtleSBpcyBwcmVzc2VkLiBUaGUgZm9sbG93aW5nIG1vZGVzIGFyZSBzdXBwb3J0ZWQ6CiAgICA8ZGw+CiAgICAgIDxkdD48Y29kZT4iaW5kZW50IiAodGhlIGRlZmF1bHQpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5Vc2UgdGhlIG1vZGUncyBpbmRlbnRhdGlvbiBydWxlcyB0byBnaXZlIHRoZSBuZXcgbGluZQogICAgICB0aGUgY29ycmVjdCBpbmRlbnRhdGlvbi48L2RkPgogICAgICA8ZHQ+PGNvZGU+ImtlZXAiPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5JbmRlbnQgdGhlIGxpbmUgdGhlIHNhbWUgYXMgdGhlIHByZXZpb3VzIGxpbmUuPC9kZD4KICAgICAgPGR0Pjxjb2RlPiJmbGF0IjwvY29kZT48L2R0PgogICAgICA8ZGQ+RG8gbm90IGluZGVudCB0aGUgbmV3IGxpbmUuPC9kZD4KICAgIDwvZGw+PC9kZD4KPC90ZXh0YXJlYT48L2Zvcm0+CgogICAgPHNjcmlwdD4KdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHttb2RlOiAidGV4dC9odG1sIiwgbGluZU51bWJlcnM6IHRydWV9KTsKPC9zY3JpcHQ+CgogICAgPHA+RGVtb25zdHJhdGlvbiBvZiBwcmltaXRpdmUgc2VhcmNoL3JlcGxhY2UgZnVuY3Rpb25hbGl0eS4gVGhlCiAgICBrZXliaW5kaW5ncyAod2hpY2ggY2FuIGJlIG92ZXJyaWRkZW4gYnkgY3VzdG9tIGtleW1hcHMpIGFyZTo8L3A+CiAgICA8ZGw+CiAgICAgIDxkdD5DdHJsLUYgLyBDbWQtRjwvZHQ+PGRkPlN0YXJ0IHNlYXJjaGluZzwvZGQ+CiAgICAgIDxkdD5DdHJsLUcgLyBDbWQtRzwvZHQ+PGRkPkZpbmQgbmV4dDwvZGQ+CiAgICAgIDxkdD5TaGlmdC1DdHJsLUcgLyBTaGlmdC1DbWQtRzwvZHQ+PGRkPkZpbmQgcHJldmlvdXM8L2RkPgogICAgICA8ZHQ+U2hpZnQtQ3RybC1GIC8gQ21kLU9wdGlvbi1GPC9kdD48ZGQ+UmVwbGFjZTwvZGQ+CiAgICAgIDxkdD5TaGlmdC1DdHJsLVIgLyBTaGlmdC1DbWQtT3B0aW9uLUY8L2R0PjxkZD5SZXBsYWNlIGFsbDwvZGQ+CiAgICA8L2RsPgogICAgPHA+U2VhcmNoaW5nIGlzIGVuYWJsZWQgYnkKICAgIGluY2x1ZGluZyA8YSBocmVmPSIuLi9saWIvdXRpbC9zZWFyY2guanMiPmxpYi91dGlsL3NlYXJjaC5qczwvYT4uCiAgICBGb3IgZ29vZC1sb29raW5nIGlucHV0IGRpYWxvZ3MsIHlvdSBhbHNvIHdhbnQgdG8gaW5jbHVkZQogICAgPGEgaHJlZj0iLi4vbGliL3V0aWwvZGlhbG9nLmpzIj5saWIvdXRpbC9kaWFsb2cuanM8L2E+CiAgICBhbmQgPGEgaHJlZj0iLi4vbGliL3V0aWwvZGlhbG9nLmNzcyI+bGliL3V0aWwvZGlhbG9nLmNzczwvYT4uPC9wPgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/theme.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFRoZW1lIERlbW88L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vdGhlbWUvbmVhdC5jc3MiPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi90aGVtZS9lbGVnYW50LmNzcyI+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL3RoZW1lL25pZ2h0LmNzcyI+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL3RoZW1lL21vbm9rYWkuY3NzIj4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vdGhlbWUvY29iYWx0LmNzcyI+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL3RoZW1lL2VjbGlwc2UuY3NzIj4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vdGhlbWUvcnVieWJsdWUuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi9tb2RlL2phdmFzY3JpcHQvamF2YXNjcmlwdC5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2RvYy9kb2NzLmNzcyI+CgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KICAgICAgLkNvZGVNaXJyb3Ige2JvcmRlcjogMXB4IHNvbGlkIGJsYWNrO30KICAgIDwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3I6IFRoZW1lIGRlbW88L2gxPgoKICAgIDxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+CmZ1bmN0aW9uIGZpbmRTZXF1ZW5jZShnb2FsKSB7CiAgZnVuY3Rpb24gZmluZChzdGFydCwgaGlzdG9yeSkgewogICAgaWYgKHN0YXJ0ID09IGdvYWwpCiAgICAgIHJldHVybiBoaXN0b3J5OwogICAgZWxzZSBpZiAoc3RhcnQgPiBnb2FsKQogICAgICByZXR1cm4gbnVsbDsKICAgIGVsc2UKICAgICAgcmV0dXJuIGZpbmQoc3RhcnQgKyA1LCAiKCIgKyBoaXN0b3J5ICsgIiArIDUpIikgfHwKICAgICAgICAgICAgIGZpbmQoc3RhcnQgKiAzLCAiKCIgKyBoaXN0b3J5ICsgIiAqIDMpIik7CiAgfQogIHJldHVybiBmaW5kKDEsICIxIik7Cn08L3RleHRhcmVhPjwvZm9ybT4KCjxwPlNlbGVjdCBhIHRoZW1lOiA8c2VsZWN0IG9uY2hhbmdlPSJzZWxlY3RUaGVtZSh0aGlzKSI+CiAgICA8b3B0aW9uIHNlbGVjdGVkPmRlZmF1bHQ8L29wdGlvbj4KICAgIDxvcHRpb24+bmlnaHQ8L29wdGlvbj4KICAgIDxvcHRpb24+bW9ub2thaTwvb3B0aW9uPgogICAgPG9wdGlvbj5uZWF0PC9vcHRpb24+CiAgICA8b3B0aW9uPmVsZWdhbnQ8L29wdGlvbj4KICAgIDxvcHRpb24+Y29iYWx0PC9vcHRpb24+CiAgICA8b3B0aW9uPmVjbGlwc2U8L29wdGlvbj4KICAgIDxvcHRpb24+cnVieWJsdWU8L29wdGlvbj4KPC9zZWxlY3Q+CjwvcD4KCjxzY3JpcHQ+CiAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgIGxpbmVOdW1iZXJzOiB0cnVlCiAgfSk7CiAgZnVuY3Rpb24gc2VsZWN0VGhlbWUobm9kZSkgewogICAgdmFyIHRoZW1lID0gbm9kZS5vcHRpb25zW25vZGUuc2VsZWN0ZWRJbmRleF0uaW5uZXJIVE1MOwogICAgZWRpdG9yLnNldE9wdGlvbigidGhlbWUiLCB0aGVtZSk7CiAgfQo8L3NjcmlwdD4KICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/vim.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFZpbSBiaW5kaW5ncyBkZW1vPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vbW9kZS9jbGlrZS9jbGlrZS5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4va2V5bWFwL3ZpbS5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2RvYy9kb2NzLmNzcyI+CgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KICAgICAgLkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCAjZWVlOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VlZTt9CiAgICA8L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBWaW0gYmluZGluZ3MgZGVtbzwvaDE+CgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KI2luY2x1ZGUgInN5c2NhbGxzLmgiCi8qIGdldGNoYXI6ICBzaW1wbGUgYnVmZmVyZWQgdmVyc2lvbiAqLwppbnQgZ2V0Y2hhcih2b2lkKQp7CiAgc3RhdGljIGNoYXIgYnVmW0JVRlNJWl07CiAgc3RhdGljIGNoYXIgKmJ1ZnAgPSBidWY7CiAgc3RhdGljIGludCBuID0gMDsKICBpZiAobiA9PSAwKSB7ICAvKiBidWZmZXIgaXMgZW1wdHkgKi8KICAgIG4gPSByZWFkKDAsIGJ1Ziwgc2l6ZW9mIGJ1Zik7CiAgICBidWZwID0gYnVmOwogIH0KICByZXR1cm4gKC0tbiA+PSAwKSA/ICh1bnNpZ25lZCBjaGFyKSAqYnVmcCsrIDogRU9GOwp9CjwvdGV4dGFyZWE+PC9mb3JtPgoKPHA+VGhlIHZpbSBrZXliaW5kaW5ncyBhcmUgZW5hYmxlZCBieQppbmNsdWRpbmcgPGEgaHJlZj0iLi4va2V5bWFwL3ZpbS5qcyI+a2V5bWFwL3ZpbS5qczwvYT4gYW5kIHNldHRpbmcKdGhlIDxjb2RlPmtleU1hcDwvY29kZT4gb3B0aW9uIHRvIDxjb2RlPiJ2aW0iPC9jb2RlPi4gQmVjYXVzZQpDb2RlTWlycm9yJ3MgaW50ZXJuYWwgQVBJIGlzIHF1aXRlIGRpZmZlcmVudCBmcm9tIFZpbSwgdGhleSBhcmUgb25seQphIGxvb3NlIGFwcHJveGltYXRpb24gb2YgYWN0dWFsIHZpbSBiaW5kaW5ncywgdGhvdWdoLjwvcD4KCiAgICA8c2NyaXB0PgogICAgICBDb2RlTWlycm9yLmNvbW1hbmRzLnNhdmUgPSBmdW5jdGlvbigpe2FsZXJ0KCJTYXZpbmciKTt9OwogICAgICBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7CiAgICAgICAgbGluZU51bWJlcnM6IHRydWUsCiAgICAgICAgbW9kZTogInRleHQveC1jc3JjIiwKICAgICAgICBrZXlNYXA6ICJ2aW0iCiAgICAgIH0pOwogICAgPC9zY3JpcHQ+CgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/visibletabs.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFZpc2libGUgdGFicyBkZW1vPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vbW9kZS9jbGlrZS9jbGlrZS5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2RvYy9kb2NzLmNzcyI+CgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KICAgICAgLkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCAjZWVlOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VlZTt9CiAgICAgIC5jbS10YWI6YWZ0ZXIgewogICAgICAgIGNvbnRlbnQ6ICJcMjFlNSI7CiAgICAgICAgZGlzcGxheTogLW1vei1pbmxpbmUtYmxvY2s7CiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1pbmxpbmUtYmxvY2s7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHdpZHRoOiAwcHg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG92ZXJmbG93OiB2aXNpYmxlOwogICAgICAgIGxlZnQ6IC0xLjRlbTsKICAgICAgICBjb2xvcjogI2FhYTsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogVmlzaWJsZSB0YWJzIGRlbW88L2gxPgoKICAgIDxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+CiNpbmNsdWRlICJzeXNjYWxscy5oIgovKiBnZXRjaGFyOiAgc2ltcGxlIGJ1ZmZlcmVkIHZlcnNpb24gKi8KaW50IGdldGNoYXIodm9pZCkKewoJc3RhdGljIGNoYXIgYnVmW0JVRlNJWl07CglzdGF0aWMgY2hhciAqYnVmcCA9IGJ1ZjsKCXN0YXRpYyBpbnQgbiA9IDA7CglpZiAobiA9PSAwKSB7ICAvKiBidWZmZXIgaXMgZW1wdHkgKi8KCQluID0gcmVhZCgwLCBidWYsIHNpemVvZiBidWYpOwoJCWJ1ZnAgPSBidWY7Cgl9CglyZXR1cm4gKC0tbiA+PSAwKSA/ICh1bnNpZ25lZCBjaGFyKSAqYnVmcCsrIDogRU9GOwp9CjwvdGV4dGFyZWE+PC9mb3JtPgoKPHA+VGFicyBpbnNpZGUgdGhlIGVkaXRvciBhcmUgc3BhbnMgd2l0aCB0aGUKY2xhc3MgPGNvZGU+Y20tdGFiPC9jb2RlPiwgYW5kIGNhbiBiZSBzdHlsZWQuIFRoaXMgZGVtbyB1c2VzCmFuIDxjb2RlPjphZnRlcjwvY29kZT4gcHNldWRvLWNsYXNzIENTUyBoYWNrIHRoYXQgd2lsbCBub3Qgd29yayBvbiBvbGQKYnJvd3NlcnMuIFlvdSBjYW4gdXNlIGEgbW9yZSBjb25zZXJ2YXRpdmUgdGVjaG5pcXVlIGxpa2UgYSBiYWNrZ3JvdW5kCmltYWdlIGFzIGFuIGFsdGVybmF0aXZlLjwvcD4KCiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIHRhYlNpemU6IDQsCiAgICAgICAgaW5kZW50VW5pdDogNCwKICAgICAgICBpbmRlbnRXaXRoVGFiczogdHJ1ZSwKICAgICAgICBtb2RlOiAidGV4dC94LWNzcmMiCiAgICAgIH0pOwogICAgPC9zY3JpcHQ+CgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/doc/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/doc/baboon.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAXsAAADcCAYAAACRUAHpAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADVAAAA1QBkANg0QAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAACAASURBVHic7J13fBRV18d/d9MTkpBASKEkQCKhBpBAhFAEjKAgJXREelFRAUUExcKj74M8gkp/lEeKSBdQIkWQEjpSAgKhh04CIY20TbI57x+TXbJkd2dmd3Znk8z38zkSd285M3Pv2Tvn3nsuIyIoGIcxxgBUA+ALoKoZ0pyIrthecwUFBYWnOMqtgJwwxtwB1AQQVPLvs3/XBBAIwNmCapoCUIy9goKCrFRoY88YcwQQCqBhiYRB36BXtYEaTQH8aoN6FBQUFIxSIYw9Y8wDQAM8NepaCQXgJKNqANBE5voVSsEYqw7gZQBRRPSO3PooKNiKcmXsGWO+ABqhrFGvA4DJqJopmsqtQGWmZM7leQCvlEgkABWAI3LqpaBga+za2DPG/AF0BNCpRBrKqY+ZhDLG3IgoT25FKguMsaoAYsAZ924A/A0ku2xTpRQUZMaujD1jLAD6xj1cTn0kQgXubeSU3IpUZBhjEXg6en8BgANPFsXYK1QqZDX2jLFA6Bv3BnLqYy4uLi5Qq9WmkjSFYuwlhTHmBaArOOPeHdykuxgUY69QqbCpsS9xy3TGU+P+nC3rtxRfX1+0aNECnTp1QqtWrfDcc88hMDAQjo6OCA4OxoMHD4xlVfz2EsAYawzOsL8CIBqWTb5flUQpBYVygtWNPWOsDoC+AGIBtAXn1rBr/P39ERkZiY4dO6Jly5YICwtDjRo14OLiYjRPy5Yt8ccffxj7WjH2ZlCyyqoznrpn6khY/AnG2GkAx7VCRLclLF9Bwa6wirFnjIWCM+6x4FY/2CW1a9dGVFQUOnTogObNm6N+/fqoXr06nJzEDxg7depkytgryy9FwBjzBDAfwGAAxn9hLcMd3NtBdKl6kwGcwNMfgL+JKMtK9Sso2BTJjD1jrAk4494XQDOpyrUUlUqFkJAQREdHIzo6GhEREQgJCUG1atXg4MA3hyecli1bmvo6kDFWjYgeS1ZhBYUx1hLAOnAb4GxNAIDXSgQAiDF2CU+N/wkA54ioSAbdFBQsglkSG4cx9jyejuBl9b87OjoiLCwMHTp0QNu2bdG0aVPUqVMHPj4+UKnEeY6Kiopw7do1/PPPP7hw4QIuXryIwsJCzJ07F/Xq1TOY586dO6hTx6SX4UUi2i9KkUoGY+xdAP+BZeEprE0eAK375wQ4989NWTVSUBCAaGPPGAsHMBLAQADB1lCKj+DgYLz22mto164dGjdujNq1a8PLywvc/hnhqNVqXLlyRWfQL168iNzcXDRv3hxBQUHIyclBRkaGTlQqFWbPno3atWuXKaugoMCkTx/Au0S0QNyVVg5KNsstx9MRdXkjBcB4IvpNbkUUFIwhyNiXLHMbCM7Iv2BtpUqjUqnQokULDBo0CF27dkWDBg3g5uYmqoz8/HxcvnxZz6hfuHAB169fh0ajKZPe2dkZUVFReOmllzBmzBgEBAQIqsfPzw+pqanGvv6RiMaJUrwSwBiLBrAGQNlf0PLBbQBjiGi33IooKJjCqLEv2WbeCcAocH54d1so5O7ujhdffBEDBgxAdHQ0goODBfvW8/LykJiYqGfQL168iBs3bqC4uNgsfVxcXPD666/jgw8+QHi46T1eXbt2xV9//WXs62NEZNMfSnuGMaYCMB3AF+DfAGWPEIAfAEwloidyK6OgwEcZY88YCwYwAsBwAHWtrYC/vz969eqFXr16oVWrVvD29oazszOvS+bq1as4duwYLly4oDPqN2/eNNuo88EYw+uvv44FCxbA29vbYJp//etf+PTTT40V8QSAN8l4gECJgd0EoI9cOlQg1ADqEpHRzRUKCvYEIyIwxtzAjd5HglvXbLWgYg0bNsSAAQPQpUsXBAcHw8fHB56enibzFBUVISEhAYcOHdJJSkqKtVQ0SUhICFavXo127dqV+W7nzp3o3r27qex15Z7MK3nW+wG0llOPCsI8InpfbiUUFITAACwAMAyA4eGqBTg7O+OFF17Aq6++imbNmqFOnTqoU6cOPDw8TObLycnBsWPHdIb92LFjyM7Ollo9XhhjOtdNeno60tPToVar4eDggI8//hgzZ86Eo+PT1as3btxA/fr1TRX5GhFts67W/DDGagA4Bhu8uVVwcgCEEJHRiRoFBXvBEUAEJDL03t7eiIqKQnR0NBo1aoSwsDA0aNAAzs6mV9I9fPhQb9R+5swZFBXJv5Q5NDQUn3/+Ofr3769zK+Xm5iI9PR1paWlIS0tDjRo1dOkDAwP5imwKQHZjD24XsxKF03I8AEwG8LHciigo8MEAfApukkw0fn5+iIyMRIsWLdCoUSM8//zzaNCAP5bZ1atX9Yz7lSvCT+1zdHSEv78/cnNzkZ2djcLCQnNUF0Xnzp2xfPlyvnX0AICqVasiMzPT2NfriGiwpMqJpCR8xV/gDnZRsJwsAMFElCG3IgoKpmAA2gE4xJdQpVLBz88PERERaNasGV544QW0a9cO/v6GQoU/xRJ/u6+vL2JiYtCoUSM0atQIDRs2RFhYmF44g4KCAmRnZyMzMxMXL17EmTNnkJCQgISEBNy4cQNSzYd6eXlh3rx5GD16tMl00dHROHz4sLGvLxCRbKETSsJY/AVpY8woAJ8S0b/kVkJBgQ9HcKMTMiVfffUV5eTkEB/Z2dm0Z88e+vzzz6lr165UpUoVk+UakqioKFq5ciXl5eXx1meKzMxM2rFjB40ePZqqVasmWg9D0rdvXyooKDBa58cff2wqfyEAZyKCrQVAYwAPpLgHipSRVABV5HiuiigiVLj/cH5kkw168uTJZIiUlBT69ddfafLkyRQZGUmOjo5md5ohQ4ZQQkKCwXospbCwkHbt2kVjxowhX19fizr3oEGDSKPRGKxn69atfPmbGXsY1hJwx/Kl2oFRrMjyga2fqyKKiBHuP8B7fI05IiKCtOTl5dGoUaPoueeek6SjhISE0M6dO8lWZGZm0qRJkyz6YXrzzTcNln358mW+vEPIlg+Yc9Nl2IExrOjyAICrLZ+tIoqIEe4/XAhek42ZMUapqamkJTg42OIOolKp6L333qPs7GySg3/++Yc6duxotv4zZ84sU2Z2djZfvn+TrR4u0AVAth0YwsoiEw08AwcAL4ML2fwVgIng9rREgYstJYtbT5HKJ0//EODP3bhxI2kZMWKERR3D0dGRVq9eTfbA5MmTzb6O77//vkx57u7upvLEkS0eLNADQL4dGMDKJLcBOJXc/9YAvgeQLCBfKoBzAHaBCwhX+kfhBSg/CopIIE//AFbzNcrSrouVK1ea3SlcXFxo69atZC/k5eVReHi4Wdfi6OhIiYmJeuW1atXKVJ5bZO2HCgwAUGAHxq8yyq/gjjy0RtnP/ij8H7gfhVg8/VFwsXb7UqR8ytM/uHg4JhtbeHg4abl9+7bZjTYuLo7sjSNHjpBKpTLrel555RW9sqZMmcKXx5us9UC551hkB0ZPEfkkFTaeG1LE/uXpH1yIWd6GdO/ePdISGhoquiF6eHhQcXEx2SNjx441u4Pt2rVLV8769ev50rcjazxM4G0AxXZgbBSRV+4CcLNGG1Ok/IruCCciugOAdyvrvn37dH+/+OKLfMnLkJubi5ycHNH5bMGnn37KdwCJUebOnav7u3HjxnzJJT+AnDE2DcBCWDGInUK5YRYRKeEwFPR49ry+PXwZ9u7dq/vbHGNPRDh79qzofLagVq1aePPNNwWnDwsLQ1gYd1Tq3r17UVBQAAAGT7J6Bkl30TLGOgKYLWWZClw4kKpVq8qthliuAvhJbiUU7A+bG3sA+P33383KZwtmzJiBKlWqCEqrVqvxzz//4IcffkBAQAD++ecfAICnpydf8DepR/ZyHM5doXBxcUFUVBTee+89TJs2Df3794erqysyMspdyJuZpByIrmCI0j4dAFUBaMDjE7xx4wZpMWcVS/369cme4Ql5oCe///47EXErekqvymnSpImpfGkkoS8OXCA7uf3E5Urq1atHQ4YMoe+//56OHz9OiYmJ9OWXX1KjRo1k180C0R6QI7t/WBH7k7IfACf4GtWyZctIy1tvvWVWwzxz5gzZK+np6eTt7S3oOp5diaPlzTff5Mtbk6R6iNxru9yGxm7F29ubunbtSp988glt27aNHj58SEREycnJNH/+fIqKipJdRwnlBABfqdqWIhVHyn7Ard012aCGDBlCWjZu3GhWo/z444/JnpkxY4ag63BycqLMzMwy+X/++We+vN1IqocI7LYDI2MX4uDgQBERETRu3Dj66aef6MKFC3qrvzIzM2nFihUUExNDDg4OsutrJTkHwF+q9qVIxRBDZ9B2BhcG1yiBgYG4f/8+ACA1NRU1atTAs+XwERYWJiqOva1JTU1FcHAwcnNzedOuX78eAwYM0PssISEBLVq0MJXtQyL6j2VacjDGLgHgP0hAZlQqFVxcXKwirq6uqFWrFlq1aqV3ElpmZiYOHz6M+Ph4xMfH4+TJkzY5A8EOuAKgK3Gr7BQUDBp7FwDpANxMZbx48SIaNmwIAGjWrJluclIMe/bsQZcuXUTnE8uDBw+wf/9+HDhwAAcPHsSTJ0/g7OysMxTjxo3DhAkTyuSbMmUKvv32W97yhw4ditWrV+t9lp6eDl9fX1PZfiaiN0ReikEYYzkA3KUoy1xatGiB+fPnw9PT06AhdnFx0TvC0Vo8fPgQBw8eRHx8PA4ePIizZ89a7RD6csAtAF2I6LrciijIT5neR0RqxthhAF1NZdy7d6/O2L/44otmGfuFCxda3dgvWbIEb731lsk0R48eNWjsP/jgAyxevBhqtdpk/v3795f5rGrVqnBwcIBGozGWTZLll4yxapDZ0L/22mtYs2YNPDw8MG/ePKSnp0Oj0aC4uNjgv6a+syRNVlYWrl27JuetsDeCARxkjHUlootyK6MgM4Z8OwCmgccv2LdvX9IiIIa7Uf/qrVu3SEqK1foHi/z1119l6g0JCaEWLVpQ27ZtqWvXribnDyZMmCDoWkpHBNXCEwI6H4ADWeiHA9DcnHsvlbz//vt6sf0jIiLk9lcrUlYeAWhpaVtTpHyL4Q+5wy5MNiBfX1/dxFdaWprZcWWmT59OQsnMzKRDhw7R4sWLae7cuWW+f7JiPd2p1ZIKzl/SfZaRkUFeXl7Uq1cvWrJkCSUlJQmuj4goKSlJUNz7v/76q0xeAZFBww3dfzECoKccBsTR0ZF++OGHMtccExMjt2FTxLBkwEphOhQpH2L4Q26z1WO+BnT69GnS0rJlS7MaoZ+fH+Xn55MxMjMzacqUKRQSEqKXz8nJiTIyMoiIqDgvn1LfnkFJCKQkBNJt/2ZUcPGKrozCwkKj5QshNjaW9zrmzZtXJt+yZcv48vUX8pBMCYC3bG04qlatSnFxcXT9+nU6dOgQHTlyRHfNw4YNk9uoKWJcssFN2spueBSxvTy7gxYAQETFAPYZ+q40UuymffToETZs2GDwuzVr1iA8PBzz5s3DzZs39b4rLCzEjh07AAD5B4/jyaLluu80KY/waMhTP72lE4Nt2rThTXP+/PkynzVr1owvmxQ7aXljM0hNdnY2evTogfr16+Odd95BnTrc+eXHjx/Htm3bbK2OgnA8AMQxxnrKrYiC7TFo7EsQFTqhc+fOZiuhNdpaLl68iBdffBFDhw7FgwcP9L6rXbs2JkyYgLi4OPTq1QsA4BQeWqbMgoQLKLp9z2ydStO8eXPeNHfulF3hFhISwpetXBr7oiJuN37Pnj1x8OBB1KxZE/v370fXrl3LY3iByoYLgM2MsUFyK6JgY4wN+QGEgue10NPTU+ciycrKMvtM1/79+1Np+vXrVybN6NGj6ezZs2SQ4mK66VFf58bRStbiFQaTHz58mNasWWPSfVSahw8f8l5Do0aNyuQrKioixpipfNcsfTUDcMCce26pvPfee7qJ2e3bt5Orq6vcLgpFxIkGwChL258i5UdMfwnc5Gs0R48eJS1t2rQxq+HFxsZSaXbs2KH7rmbNmrRjxw7i416Ll8oY++RXXi+Tbu7cubqyo6KieMvVEhQUZPIaqlatajBf3bp1+Tqcu7H7L0QA3LClkXBwcKCFCxfqrm/Tpk3k5OQkt+FSxDwpBtDWkvanSPkRU24cgGcnLSCN3/7ZTS8xMTGoU6cOhg8fjvPnz6Nbt268ZRhy5eTvPQTK1Q/rXXrz07Fjx8rMBRiDz5WTkZFhcLdt69atTWVTAeANfm8MxhgDUMvc/GLx9PTEtm3b8PbbbwMAVq1ahYEDB1aWHakVEQZgntxKKNgGPmNvk5DHxI1QnyqlUuHw4cNYsWKF4Hjihow95auR99chvc+GDx+OTz75BN9++y0mTJggJPY8AGF+e20IidK0b9+eL5slfvsAAE4W5BdM7dq1cejQIXTv3h0At1ltxIgRpjaNKZQP2ij++0qCqWE/gBrgOebO1dVV5/vOyckx65X+tddeI7Fol11qyV7/Wxk3ThICKXX8h6LLNsS2bdt4r2P//v1l8h06dIgv37dk5msZgNZi77U58vzzz9P9+/d11zRnzhy53Q+KSCtJUA4qr/BicmRPRA8BmIyDkJ+fj6NHjwIA3N3dBS1TfBYxsUvy8vLQpUsX+Pj4oFOnTsjOzgYAOIUbPr8jN263YB20q0wM0a5dO3BeE+MYGtnXq1ePr2pLRvZWX4nTrVs3xMfHIzAwEADw2Wef4cMPP7R2tQq2JQTAe3IroWBd+Nw4gA1cOWKM/dq1a7F3714QEQ4cOIC1a9cCAJzC6gKqspejuZeMgoQLJsvMzs5G7969sXPnTqNpfHx8eM+WvXev7FJPPz8/k3lgx8Y+IiICGzduhLs7F3pnypQpmDVrljWrrDQ4ODjIrcKzzGCMVZdbCQXrIcTYW32SVoyxZ4whICAA0dHRCAoK0m2YYm6ucKxT02Ce1M1/aN0eZdizZw9atmyJbdu2Yf369Sbrjo6ONvm9oZG9o6MjatY0rFcJNRhjNUwWbByrGfuAgABs27YNVapUQXFxMcaPHy8oAqiCMBo0aCBkIGBLvAF8LrcSClaEz88DbtddAUz4/JycnCg7O5uIuOP5xK65fnadvbkkdxti0G8fH9KSQkNDafTo0TR9+nT69ttv6f/+7/+oRYsWenp4enpSXl6e0fJXr15t8jratWtnMN9rr73Gdw868z0HI89mg5j7LFTc3NzoxIkTRMSFmhg6dKjcPuUKKd988429HaBSCAniNSlinyLUqMTzNZTSa+FffPFFUY1s4sSJJAWPJ31q0NgnIZDCa9cRpMuvv/5qtPybN2/y5r9w4UKZfN988w1fvveEPAcDz+Wo1B2eMUYbN24kIiK1Wk29e/eWrFw7MGZ2JQMHDqSZM2fKrscz8rs5bVER+xchbhzAyn57f39/UemN4dSgvtHvXnbwMPpdaUy5coKDg3mXav7www9lPmvZsiVfteb67auZmc8oX375Jfr164fc3Fz07NkTW7dutbjM6Ohoe/RRy86mTZswaNAghIeHy6kGAfgZgPaAk56MMfPWUCvYNUKNvVX99gEBAbxpHjx4YHK1DAAUhBjfX9T55iNBusTFxSEnJ8fo93x++59//hn5+fl6n4WFGV4pVApzjX04gIbgQiZYzBtvvIEZM2bgyZMn6NatG/7880+LylOpVPj8889x9+5d3mdXGdFoNFiwYAGWLVvGu9JLCFWqVDEnGwPwGxGFgpsDGgagkcXKKNgfQob/4E60yoKJ1z+VSkXp6elERFRQUEDu7u6CXx1///134uPgwYMUExNDd+7cKfNdamoq/e9//6PQunXpKjPsxrmBQAp0ryJIn7Vr1xrVY9GiRbz5x44dq5dHrVbz5clGyRGR5giAmULvtTGJjo4mtVpNjx8/psjISIvdAW5ubrR582Yh8xWVWlxdXSk5OZnefPNNScrq0qWLOXnjrOE2UMS+RHhCYBtfo9myZQtpEXOIxfHjx4mPpKQkArhDM3r37k1TpkyhTz/9lDp16qQ3ybWlbgujfvs3HDxN6uHi4kIAqHfv3kb1OHfunKBrGjduHKnVal0+Pz8/vjz1zX6IQA9LjES9evXo0aNHlJycTE2bNrXY6Hh7e9ORI0do3rx5VjGQFU0++ugjun79uiRldezYkfr27Ss2XxGAQLmNkSLWFeEJuU0XJhvNO++8Q1r+/e9/C25sQo4mLCgoEHQa1rTW7Y0a+9XwLZO+dJm1atUigDP6mZmZBvXQaDTk61u2HEMyZswYXT4BP369zX6IQE1zjUPVqlUpMTGRbt++zXeMouDyTpw4QdeuXSM3NzfJDGJFFm9vb0pLS9MNNiyVRYsWiV4kAWCq3MZIEeuKUJ89YCW/vYODgyCfvZOTE2rU4F+OfjDrsdHv2sAFXioHXXkAt+vX1dUVAJCSkoKIiAio1WqjE5MqlQqxsbG8egDAkSNHdH+HhpaN3fMMZh9ATkT3wJ0zKgpHR0ds3LgRTk5OaN++Pa5cuYIaNWrAx8fHLD18fHywZ88eREZGYty4ccjLy+PPpIDMzEz8+OOPqF/f+AIDMXzyySdYunQpWrRoISbbSEkqV7BfxPwyAHgAnhFCSkoKEXHrsz09TbtNAFBERAQJRYgv2cHBgU7D3+jovje40SZjjKpWrUoAqGHDhrr8PXr0IAD0yiuvGNXjwIEDgkZLzs7Ounj/8+fP50u/3pJfbQC7hOhUWpYuXUpERPHx8XTq1CnKysqiwsJCqlmzpujRpIuLi25tvoDjGBV5RgIDA6l79+6SlTds2DC6d+8eBQYGisnXxpYjTUVsK2JG9oCA0f2+ffsAcKNGAREf+UIA61GrlvHVNtrVDBqNBvsDvY2miwE3iicieHl5AdAPaaDRaBAYGIjdu3fj8WPDbwnt27dHcHAwr74FBQW4fp1b0fb888/zJbf01KozYhJPmjQJ48ePB8BdT8uWLeHp6YmNGzcaDPvAx7x58xAZGYnk5GR88MEHovNXdh48eICTJ09KVt7q1avx4MEDbN68Gc7OzkKzKaP7CoxYYy/5UYVijL12jbuqVAwc7XIzX1/fp0q6kNEyOsIFLuB+GDw9PQFwHa1pU87W7tu3D4MGDUJhYSE+/vhjg2UwxjB8+HBefV1dXXUhmgWstX+OMebCW6hxBBv7Hj16YO7cuQCgCySnxZyQCAMGDMBbb3Fn/k6cOFE5mtBMHj0S7YkzChHh/fffR1RUFJYsWSI02yDGmKtkSijYF2JeA8CtwzX5KhgaGkpaTp06ZTItY4xu375NRNzySUPLKkujDa1bemVLSEgIAaAGDRroPnN3caFEBBh15QwEtyy0du3auhOoxo8fr8s/d+5ccnBwIMYYHThwwKAuGRkZVL16dd5X41WrVunyaN1GJqS5ua9oAJ7j0wUANW3alPbu3UszZ86kiIgImj9/vk6/w4cPm+UySEhIICKiY8eOye4OUURftCvk3n77baF5BtvCpaCI7UV8BuAyX4PRGnCNRkM+Pj5G03Xu3JmIiFauXEnVq1enM2fOkCl++eUXAkDPPfecLm5+q1atCAA1adKEvL29dWX/CB+jxv5P+BErSffSSy8RAJo8eTJ5eHgQABowYAD16dOHAO5HxNhZtQL88PT660+PRmzfvj1f+mFmP0huc8wTPn1Kr/ioUqWK3qojQ2f/8knVqlV1Z9F+8sknshs3RfQlLCyMCgoKKC8vj+rVqyckz59yGyVFrCNi3TiACFeOSqVChw4djKZr06YNOnfujOHDhyM1NZXXD6512WRlZel2pVavzkVlvXr1Kl544QVd2r+8jB/gFAZHdATnMdG6cvbs2YNBg7gDe7Zv344vvvgCXl5euHz5Mv71r38ZLGfChAlo1qyZSZ0TExN1f3fs2NFkWljgtyciApDAl06tVuv+HjZsmG7e4tatW9iyZYvoetu2batzq+3YsUN0fgXrcvXqVSxevBiurq6YP3++kCxdGGNWPydBwfZY1dgDpv32s2fP1k3oenp68i758/Dg4ts8fvwYDRs21OVzdnaGWq3Wm8DdXfAEpgInjwFXVn5ODqpVq4Z//vlHp2t2djZmz56NpUuXAgDmzJmDc+fOlSnDyckJv//+u8kloZcuXdKOvIUsMTV7+WUJoiZptWfJAsCCBQvMOmJQ+wObkpKC06dPi86vYH1mzZqF9PR0vPrqq+jZsydfchWAN2ygloKNMcfY7wNM2lHB6+21RhCAoDXG2kM0CgsLdZO1KSkpukNFtKN8AHicn4fTKDBaVju4oBGccHD/AQwePBgAcPr0ad1KkjVr1uDy5csYO3YsCgsLMWbMGINx94ODg7FlyxbdWv1nycnJwZ07dwBY/dQqQISx79Spk+6+ZWdnY9myZWZVqI3Vf+DAAb3nqWA/pKWlYeXKlQCA6dOnC8kywpr6KMiDaGNPRBkATplKc/fuXVy9ehUA0KRJEz0jbAxT7h4tWmMPQDeavnPnju4wcEdHR70Dyv+AfkCyZxkLDzxR5+PWlato164d5s6dC39/f/Tr1w8A8MUXX6B169Zo2LAh/v77b6xatcpgOW3btsX+/fuNRu+8ePEiAKBRI974UrUYY+btaOIQbOxLj+p/+uknZGZmmlWh9jmcOSPqpULBxvz1F7dqmu+0tRJCGWP866YVyhXmjOwBEa4cxhg6derEW2BMTAxvGq0bB3gaFvnevXuIiIgAwPnHS6/t/81BjUIYH232gBsC4IBtf+5Chw4dUK1aNUydOhWRkZE698T06dN1vvxFixYZLatNmzY4ceKEQR++1m9fp04dvWswgiWunLMAlvMlqlmzJnr37g2AOyVMoC/XINrnkJDAO12gICMHDhxAUVERvLy8EBQUJCTLCCurpGBjrG7sAf7QCU5OTkImL/VG9tqJxYKCAt1h2ImJiWjXrp0uTbqmCHughjEcAYwAV+a38+ZhypQpYIxh2rRpGDJkCAAg3H5yLgAAIABJREFUNTUVhYWFAICTJ0/i77//NlpenTp1cPjw4TJ+Ua2xZ4wJiV1u6STtWACbTKUbP3687jjHbdu26TZ+mYN2ZK8Ye/vmyZMnuk1bderUEZJlAGNM2CEQCuUCc439YQAmA5/s27dP58Pl21zVoUMHQbG4Sxt7R0dH3a5Zbd4bN26UiUGzAbkmyxwMd3iCIV+txurVq3W7Sg8ePKgbAV29elVXN98GlSpVqmDr1q348MMPdZ+VXpGj3bxlAov89kSkATAUgMHT052dnTFu3Djd/1t6rqyPjw9SUlKQnJxsUTkK1kfrynFxEbR3rwqAftbUR8G2mGXsiUgNzuAb5dGjRzh//jwAIDw83ORKlEmTJgmqt/QPglqt1v2/9t/8/PwyE6UHoUYyjK8y8YIKb4PLn5iYCCcnJ4SEhCAuLk7nktm+fbsuqNS6deuQnp5uUk+VSoWvv/4aK1asgLOzs85nD3AHTfNg6SQtiKgAQF8AB5/9LjY2Vud6OXPmDA4csOzcExcXF4MrlRTsD+3btkBjDyjhEyoU5o7sAYlcOc2aNUOPHj0EVejo6KhbF5+bm6ubjFWr1bpwCc+uCNEA+NX0SwhGwAM1wUXDXL58OVq0aIHc3FxdbJwnT57gyZMnAIC8vDysWLFCkL7Dhw/Hn3/+ifz8fDx8+BAAdEtGTWDp8ksAABHlgYtzrzeZPnHiRN3f3333ncX1ODs748qVK4LSCliNpGBFjhw5gvz8fDGxcjowxpSHVkGQ3djPmDFDVKXVqnHHrubm5sLbmwt4lpGRoVtjn5KSohfYDAA28hh7FzBMBfcjkp2drXO7aJdMAsD9+/d1fy9dulTwMsOOHTtiy5YtuHz5MgBBK3K8pdrUQkRZALoBuAgALVq0QNu2bQEAycnJWLdunUXla0eIQox9+/btERUVZVF9CpaRn5+PkydPilkiywAMt6JKCjbEEmN/BkCaqQTx8fG6jTqGjH1YWBiioqIQFxcnePemdgRfemSfnp6uM/bXr18vs2b/FopwwsSaewB4DW5oAW7XrdYwp6Sk6L4vHQHzypUrRiNiaklPT9ety4+JidHpV69ePSGv0Ra7crQQUSqAlxwdHe+UXm65ePFiFBSYvid8iDH2s2fP1t1XBfk4c+aMyTOWDTCcSXFAroLsmG3siagY3AYro2RkZOjWX4eGhuo2Qmm5fv06QkJC0LNnT723AFOUNvaGRvbXrl0zuEHrZ56JWgZgI6pjBXzRg1zhAqY3Air9t7Ozs+4NwxhpaWlo1qwZNm/eDCJC3bp1AXCHtTz33HN8lymZsQcAIrofGhr60pAhQ54A3AhPuzvYErTuAD5jX6dOHURFReHSpUsW16lgGadPny4T6ZSHYADCTiJSsGssGdkDFrpySu9IHTZsmKAK+Yz9+fPnDS7j3IE83C+ZqNWUyLM4gAuBPB9VcQI1MBFV4I6yg5qgoCDwDXbq168PFxcXxMbGIjIyEidOnNB9J8CVI6mxB4DExMTLbm5ucwEu1rkU4XRTU1Nx9OhR3Lp1y2S6AQMG4M6dO2JHlApW4MyZM2KNPaBM1FYIZDX2WhwcHIQc7gFA32df2o2jXTmTmJgINzc3vZj3AGfcpyETI5GGZkjGc3iA6chEnpFNV15Q4X14Yj9q4BXor/DhG9VrGTBgAADg1KlT6Nu3r+5zAbHtJTf2JcwloodSTMxqGTVqFG9MnYEDB+otP1WQj4sXL/K6IA0QyxjzsoY+CrbDImNPRNcAmBzWHTp0SLcpyZix9/f3h4ODg6A6tSP7rKwshISEAODWD3ft2lVn/H/88UeDk4GHoMZ+qOEFFZbAB/+GN9wMjNxL4wcV5sNHz+AnJCTg9u3bvLr2799f9wZw7949ZGVlARC0/DKcMebIW4F4svv163f8woULkhXI55oJCQlBq1at9JafKshHYWGhOW91bgAGWkEdBRti6cge4DmqMCcnB8ePHwfABQ0ztPxOG0xLCFpjv3XrVrz22mtwc3PD1atXsW7dOt1B4PHx8QZH3ypwyyz3wE93PKEh0lGMw1DjQYmzxwHA9/CBb8nt0mg0gnze9erV043ugaeGUcDh487gDiORFMZY2y1btrwidbmmaNWqFQAoI/vyzwi5FVCwDCmMvcWuHIGxOgBAN2LPysrC8uXLdb7+WbNm6Yw9AN2GLi2N4YStqI7P4AUPE6P5kyhAd6TidaShDx4jtSTApyOA+ng62F62bJlebHhjfPXVV3By4lb5aEe3YWFhunAFJpDUlVMSYG0tEQl7hZIIbeAtxdiXe9oyxnhfSRXsF6lG9iYX7vIZe60xFELbtm11IQcWLFiAQYMGgTGG27dv4/Lly7ofjqSkJJ0LJQrO2IJqaArT9WxFHgbjMWpAhcnwxH/grRvNA0C1Un8/evQI69ev59W3fv36mDBhAoCnBs/Z2VnI6F5qv/1PAAQFRZESrbFX3DgVAsNhXRXKBRYbeyJ6COAfU2mOHTuGvDxuY5MhY19UVCSqTq3xzM3NxZYtW9CtWzcA3Fru0hOhRARvqPBf+MCJxzd/GxosQTZWoRp+R3W8iypoDxe9G/QPCvXyLFy4UJC+M2fOhLe3t97oVsBOWsmMPWNsMIDeUpUnhiZNmiA/P583xISC3fMYPCFSFOwbKUb2AI/fXq1W4/Bhrp0EBQWVWWeuncAVyuuvv64LFfzf//4XQ4cOhaOjI1JSUrBr1y69lTj94Qavksu8Bw3eQwbeQjpmIBMbkYv8kpeSKmD4DdXxAgxvJU+GBveeWbD5999/C4oY6efnh6VLl+oZe1stvyzZEPOxFGWZg7e3t3KoScUgriTInkI5RSpjb9FRhWKNvZeXl85XX1BQgPfff18Xn/3q1at66/cH4GmkzK/xBHtKDjSpC0c8AeEauLcKX6jgamL0vxBl1yY3a9ZM0AlbADBo0CB06tRJ5+cXYOxDGGP8oUD56Q1A0IkV1uDgwYOKsa8YbJVbAQXLkMrYxwMwabFN+e3FGnuAc9loDa12RP9sgCc/qBBWalL1DbjjBPyxGD4YCw+Mggea8PjxAeAsCrHWwA7cadOmidL5+++/121AEuDGYZAmKJpso3qAe+6KsS/35AH4U24lFCxDEmNPRNkAjplKc/LkSd0682dPrhLrswc498CmTZt0IY2fPHlSJtZLG+jHoGkFZ5MrcQzxt1Mxxnvklzl0t27duhg4UNzSY3d3d93EbHh4eJmNXwawyNgzxroBELZbzUooxr5CsJuITMcbUbB7pBrZAzyuHI1Gg/j4eADc6Ualz8LMzzd9VqwxmjdvbvKowGsoMhHJ3jQPWDEWNqmJIcWPkZJT1oUzdepUwRvBdu3apXMtaQ28m5ubblOYCSz128s6qge4WEXKSpxyj+LCqQBIaexNTtICxl05fLFVTDFq1CiMGjXK4HeXUIifITwey0MUYyVyMLBqIdrhIeaeP4kiTdm3jpo1a2LkSOHhQl5++eUyo/hbt27xhhmABcaeMdYOQLS5+aVk5cqVcqugYD7FAOLkVkJBAohIEgG37ygL3Jp7gxIREUFaNm/erPddRkYGmUteXh41b97cYJ3uYDQVnnQBAZSEwDJyCv70JbwpCs6kAjOqOwByd3en6dOnU3p6utm63rhxg4YPH06Mma6rRB6JeQak/zx+FlC+TcTX11d2HRQxW+LNbYOK2JdIWxiwzVTDYYxRamoqERE9fvxYz+D9/fffZAnXrl0jb29v4wYHKhoAd5oBL/offGk2vCkaLuQgoME7OjrS+PHj6f79+2brl5KSQm+99RY5OTmJ7WwBYp4Bcc/BF9ykmtyGQpHyL++LbX+K2KdIWxjwHl/j2bRpE2kpPRr/5ZdfyFK2bNkiaUNXqVQ0cOBAunLlitk6FRQU0Pfff08eHh7m6JAJoAFZ4TkooohAqS+2/SlinyKlzx6wwG9/9epViyvv3bs3pk6danE5rq6uGD9+PBITE7Fu3TqEhYWJLqO4uBhr165FQEAA3nvvPXNiua8DEE5E5hzvNM6MPAoKz3KeiPh3DSqUD6T+9QDwACZGCuHh4aRl27Ztus+7dOlCUlBYWEjTpk2j6tWrix7FVKtWjT799FNKSUkxu/7i4mLauXMn1axZ09yR1GUAXcn8+x9tZr0VVkJDQ2XXoZzKl+a2Q0XsT6QvEFjN14ju3btHREQZGRnk4OBAAMjJycmiSdpnUavVtGbNGurXrx8FBAQY1aV69eo0cuRI+u233ygvL8+iOo8fP04NGzY0t2PlAZgJwIUsu/8mJ2bNdCeVa3n//fdl16GcSitL2qIi9iXSF8jFvTbZiFavXk1aIiMjdZ+vXbuWrMX169cpLi6O1q9fTz/99BMtXLiQDhw4QEVFRRaXfenSJXrhhRcs6VQ7IIFvFAImZjt06CC3AbG5HDhwQHYdyqHcAcAsbZOK2I9IXyBQm68hjRo1irR8+OGHus8HDRpE5Ym7d+9Sjx49LOlQdwH0I+nuPe/E7NSpU+U2IjaXvLw8k293ihiURVK1S0XsQ6SeoAUR3QFwxVQaY5O0O3bsMCtOjq1JT0/HqFGjUKtWLcTFmbXfpAjAPHATsJskVI13YrZ169YSVmf/ODo6wtXVtUzwPQVelF2zFQzJjX0JJkMn3Lx5E0lJSQCA9u3b6w4vyczMxKZNUto+acnJycG0adPg5+eH5cuXm1vMEQDPE9H7xMUUkgTGWDQAk6E0XV1ddQezVxbc3NwAAK+++qrMmpQrMgHsl1sJBWmRxdgDT0f3Hh4eiIyM1H0+d+5cK6lkPgUFBfjmm29QvXp1zJkzR0iYA0M8BjAWQDQRnZNWQwDAeL4E/v7+qFWrlhWqtl+0z6pnz55wcXHhSV154DkpbTsR2f8rtoIorGXs9wFlAkXqYcyVc+rUKezfv99KaolDo9FgxYoVqFGjBqZOnWpuwDYCdyRgOBEtoxLnupQwxmoA6MeXLj09He7u7vDx8ZFaBbtF6xb09PTUnWimALzxxhumvlZcOBURa00GADgBExNAgYGBpGXPnj163/Xo0YPkpLi4mLZt20b+/v6WTnKdA9COrDzxAuA/QnVKTU2lJk2ayD35Z1PRsnr1atl1sQdxc3OjS5cuGfteDcDT2m1WEdvL05M9pGcPgEhjXyYnJyMxMRENGzZE27Zt8fnnn8PX1xc+Pj7w9fVFbm4u3N3djWW3GkeOHMEbb7wh6LhBE+QA+BzAd0QkPli/CBhjfgDeEpo+KSkJtWrVwvnz562olX1RWFgIJycnnStHe1pYZcXDwwMNGjRA7dq1cefOnWe/PkpET+TQS8G6WNvYTzf2JRFh7969aNiwIdzc3PDZZ59ZUZWydRcWFkKtViM3NxfZ2dm4d+8epkyZglOnTlla/GYAk4hblWQLpgIQ/KuYlJSEmjVrSqqAj4+PXR8ofuvWLYSGhsLLywsxMTHYtm2b3CrJivb85kaNGhky9srERgXFmsb+MIB8AK7GEuzduxdvv/222RUUFRWhoKAAeXl5yM7OxpMnT5Ceno60tDQ8evQIKSkpuH//Pu7cuYO7d+8iNTUV6enpyM6WbBFMaZIATCSi7dYo3BBiR/XA05G9lIwcORLz588368QxW3D69GndhGT//v3t1tgPGzYMa9eutfp9LG3sd+3a9ezX0o4EFOwGqxl7IlIzxg4B6Goszf79+5GXl4eMjAydkdb+m5aWhuzsbLi5uSE5ORn37t3D7du38ejRI6SlpSEjI8PcVTFSUwDOZ/4VEeXZuO4PAHiIyZCUlITnn5f2pEJ/f3/ExsZi/fr1kpYrFadPn8aAAQMAAH369EGtWrVw9+5dmbUqS2RkJBo2bIgZM2ZYtZ4qVbhz7I2cgxzAGGNE3GSQQgXCmhMCAKbBDiakrCh/wYwQxBLd2+oAssXqHBMTQ9u3b5f0PkyaNImOHj0q97MwKuHh4ZSbm0taSgfgsyf59ttvSaPRUKtWraxaj3anelxcnLE0NeSeTFREerHW0kstvOvtyynJAIYSURcyLwSxFIge1QP6bpyQkBCTZ/gK5f79+4iKikJUVJTFZVmDS5cuYeLEibr/79GjBwYPHiyjRobRaDRQqVSYNWuWVetp1Ijbe/ftt98aSxJkVQUU5MGavyTg1vE/hh2MmiQSDYCFALzl/IUGN6p/Ys41ODs706NHj8jLy4vOnz9PhYWF1LRpU4vui7e3N924cYPWrVsn9/MxKcuXLyctDx8+NCsMtjXl66+/1ulnYWA9k7Jx40b67bffTKV5Ve5RqI37UxUAzQD0BjAFXB/fDm75+BkAF8CFgEkCF8/qIYB0cG/WqQBOAtgE4BsAEwG8CqAxAA+5r03vOm1wIzfJ3Ykkkr/BhTmQ/6EBSy25ljt37tDu3btpx44dtGHDBtq4caPF9ycyMpJycnKodu3aBr/38fGR+/mRm5sbnTt3jrRIcd1SyldffaXT7c8//7RaPfHx8RQcHGwqzVi527iV+08ggFEAfgWQYuXn+rCknhEA/GS9bhvc2AlydyIJJA+As9yNtOR+Pg/uDcOizl5YWEiNGjWinj17UnFxsSQbrSZNmkRff/21we969epl8RuEFBIaGkp3794lLRMnTpRdJ63MmjVLp9eNGzesUodKpaJOnTrxpftM7nZuhX4TCeBLAKfB7e6X4xlrwMXGGg/Azeb3wAY3OVTuTiSRtLGDBssAHLX0WlauXEkLFiwggDtM/eHDh5KNcmfNmmXwgJRu3brZzUg6JCSErl69SkTcITelz1SQUz777DPSsm/fPlvXnw0uGisB+K/cbV3CPtMdQLzcz9aAPAIwC0CAre6FNdfZAwCI6BpjbDM4v1ghuAZV+Iw8+5mQNJaUpQFwFYCYIDFdABwXfwcshzHWEEBHAK8AsHgW9NSpU1i9ejUAbq/CunXrMHHiRDRp0sTinbWfffYZ/Pz8ypy5e/PmTcTGxkpSh6XcvHkT7du3x65du9CsWTNs2LABLVu2lH1jWOn19bdu3bJ19ffAGZ+VKOdr7RljKgD9AXwEoLnM6hijOriT6T5kjH0H4Auy9tJtuX95ZfzF3wBxv8R/2VC3EABvl+gouU/R0dFR7/9btWpFREQbNmyw2kjGycmJCgsLrVqHWPHx8aGjR48SEfFNWNpEPvroI9Lyxhtv2Lr+eyVtbyiAv+Xunxb0nToADsn9LM2QGwC6WfXeyP1wZGwUo0U+jDwArlbUJwRc6AOTAeSsJYmJiZL57o3J5cuXqbi4mBo3bix3x9KJh4cH/fnnn0RENH36dFl1mTp1KhERFRQUWDyh7eXlJTZPZqm2GCN3/zSzD/UDt0pG9nZlgawDUNXAtflYfH/kfkAyNoxaZjyI9hLrEAIZDXxpmTFjBhFZd3Tfq1cv0mg0tH79erk7lJ44OTnR4sWLSaPR0KuvviqbHpMnTyYiop07d1pcVsuWLalu3bpi8hTJ3Sct6EcMwCK525GEkohSZ1KDm3dYaPF9kvtBydxILgh9AN26dbtbWFi46+OPP65rYZ0hsBMDX1rq1KlDxcXFVh/dT5kyxe5G91oZN24cPXr0iMLDw2Wp/9133yUiolGjRllcVoMGDfTOdxYoVntztXI/FhziuxxJKoCOJdd3AFzo6RCL7pPcD0rmRjJPyI0fOnQoFRUV0eXLl8nT0/MRgBdF1hMCOzTwz8q+ffuIyLqjewC0ZMkSu92AFR0dTQcPHqSqVavavO63336bsrKyDK5mEiu1atWikydPis1XTe4+aUYfflfuNmNFKYC+jVpu0b2S+2HJ3FBeNnajVSoVRUVF0Zw5c6ioqIiIyvh0twLoBANLpwA4AGgFbnVDgh00GkEycuRIIiKrj7xVKhUtWbKEGjVqJPs1G5LatWvTV199RSqVyqb1jh8/npYsWSLZNRARBQUFickXLHefFNl/W8PCPSflTIrAnXinGHszGosbuIlXAkBeXl4F/fr1oxUrVtDDhw9Jy507d+iTTz4xNemVBeAUgD/BbasusIOGIVo8PT11AcNs4Vdv3ry57NdsTNzc3Khly5Y2rXPMmDGS3ZOwsDAiIho8eLCYfI3l7pMi+2+cjZ6NBsB1cCfPnQJwDMBBcGESMmzcNjeYfb/kfmByy8SJE3/ZsGFDyq1bt6g0+fn59Mcff1CfPn3IwcHBpp1eTlmzZg0RSTe6r1WrluzXVF5Eyreppk2bEhHR0qVLxeRrLXd/FGy4gBZWeg654Nyt/wXwJrh9Le48ulQH0AbA6wCWA0izYjspBtDcrHsm90OzA/mLSrh//z79/PPP1K9fP6pSpYrsnV8OiYqKuqi9H1KM7keMGCH7NVVGiYyMJCKiw4cPi8nX2Q76o1Bj/4FE9+oJgJ/A7S9oBMBBAt2cwK2g+R+ssxQ0ziy95H5oMjYWdwCvxMbG7u3RowcFBgbK3kHtQLIBNCGib4iINBqNRaNNBwcHWrVqldzXVCmlQ4cORER08eJFMfl6yt0vRfRfS1bgaMCFXx8GnlG7BHr6gHtLkDoeT1vRusj90GRoJAzcYeC5cndIO5R+JfdJRUR/EJFFq2bq1q1Lx48fl/uaKqyY+iHW7sa9cuWKmDIHy90/RfTjOWbcs6sAZgCoLYO+UZB2scY+0TrI/dBkuOmvyN1J7VS+Kn2fGjRo8HJiYmKmRqMxe9VMQEAAPXjwQO7rqrBy7NgxcnJyMvjd6dOniYjo008/FVNmuQltDCAcwkfL18D501Uy6+wA7vQ+qVYQvSSqfrkfmgw3fIXcndQOZaO2IwAYCeAyAOrVq5eGyLLR/e7duyvt/Ic1pUuXLkREBjfAhYaGEhFRXl4e+fn5iSl3ktz9U2Rf/oHneu4AGAfAUW5dn9F7CLiAjJa2g+Oi6pX7wmW40dfl7qh2JpvBHTzvD2Bb6e8YY5SQkECWjO5Hjhxp1R25lVXi4uKIiCgqKqrMd9OnTycioo8++khsuZ/I3T/N6M8zUXaEnwJgEux4RzC406ykcCX3Elyn3Bctw022612sNpat4FYO1AUX4rZMmj59+hARN7p3cHCgbt260S+//ELx8fFGXQilxdvbm2JiYuS+zgol4eHhVFxcTERk8CCSM2fO0JEjR8xZMjxb7v5pZp/uC+70tqXgdqrb1XGAJvTuACDTwvbwDwS6p2S/YBlu8G9yd1Y7kQ3gDL0/OJ+mwXSMMTp79ixpNBpKTk6m0nz11VeC6lLW2ksnXl5elJCQQEREubm51LBhQ73vGzduTE+ePKGwsDBzyl8gd/+sbAJup322he1iCLj5gNEw8XYm+8XKcHOXyN1h7UD+BW5VkjcErBCIjY0lLWlpaTRv3jzKz88njUZD0dHRcl9LpRFnZ2fas2cPEXH++JdeeqlMmgULFlC/fv3MrWO53P2zMgq4NxNLlmbeBHC+5O81RuuR+0JluLEz5e60MkoegCGl7sUWIfkYY3T69GlauHAhVatWjQBQTEwM5eTkUFJSkjmx0xURKYwx+uWXX4iIaP/+/QbnUKpUqUIzZsywpB6zt+IrYjd2abvROuS+SBlu6mtyd1yZ5AFKnaML4B0x+Z2dnct81qFDB8rKyqKVK1fKfW0VXubMmUPXrl2jYcOGGU1Tr149S4O3GTUUitjENq2ToK0cMVq+3Bcoww31l7vjyiBnUGojCbi4IvlSlN2mTRtKT0+n/v37i8rn5uYm9z0pN9KlSxcaMmSItWM0ZaEcrbOviAIuMOPfFj7HC0bLl/sCZbqpSXJ3YBvKZpRanQDAE1xkTsnqaN68OV26dIlq1qwpOE+1atXMnURURFopBhe8q0yobkVksU01wR1cYu7zvGesbBUqJ4flVsAGZAAYTUR9iSin1OefAgiTsqKEhAT07dsX//73v8EYE5Tn8ePHiImJkVINBfEcBxBFRCOJKFluZRQAIroHYLIFRVQ1VXilEwDRkH9EZS0pAuf7CzRw3X6wfJmXUQkNDaW+ffsKTt+5c2caOnSo3PerUsrrr79+HwCTuy8qYtRG7bDg+ToZKpOVFFzpYIwdAfCCFGXVrl376p07d74FF9faz4BUB7em3ZrcBBeq9X9EdN9QAsbY1wA+tKYS/v7+yMrKQl5eHm9axhj279+Pnj17Iisry5pqKZSiffv22L59e0aVKlV85NZFwTCMsWBwyymrmJE9kAy8qVVmY98b3NJDs6lSpQq+/vprvPnmm5sYY/156qsK4z8EHuAmZ9xL/i0tpT8rAOfP08o1cBM6fxP3+meq/urgfhA8zLlWazFlyhTUqVMHkyZNkluVSkFQUBBOnz6NmTNnpvz444/1Sd/Fp2BHMMbeATDfjKxvEtHSMp/K/boi42sSA/ALzHxV6tatG2lPt7p+/fotSHDogZWvd4y512pNqVatGmVnZ1NERITsulQkqVu3Lrm7u+t95uzsTEeOHKF9+/YRY4wAhMrdLhUx2WdV4OYXxT7/BIPlyX1BMt9MBu5QcME3Mjo6mnbv3k1E3OEe3333HTk6OuYD6CT39fBc67/lNkDGZNWqVXTo0CGtASIA5OLiIrte5VWcnJzoxIkTNHnyZL3PlyxZQpmZmRQcHKz9rL3c7VIR3n7bENw8nNh20KZMWXJfjD0IgD7gDhM22nleeuklnZEnIjpz5gy1bt26dLqFcl8HzzWul9sIGZO2bdsSEekdYXjq1CkaO3as3g+AIsJk9uzZRET04MEDcnV1JYCLPkpENHz48NJpB8jdLhUR1HdXmdEOlpcpR+4LsScBF3Z0XXR09P1evXrR6NGjaePGjZSZmUlazp07R7GxsYaM0D3Y8eoGWL5Zw6py7tw5evjwIfn4+JC7u7suqmN8fHyZYF+KGJeuXbvq7l1+fj69++679Pzzz1NeXh5t3rz52fTlKn59ZRVwB7WIPfAkF0BVvXLkvhA7lXfpGUwY+dLSzg50N9ZgHsttiEzJW2+9RUREixcvplatWukF5X2OAAAaaElEQVTde7VaTZ9//rni2uERPz8/un//PhER/ec//6F+/frRvXv36ObNm5ScnEzVq1d/Ns/XcrdLRQT3X3NCKbyrV4bcF2GPEhkZ2aJatWqpzz//fOHLL79MXbt2FepOmCe37kYairfchohPvLy8KDs7mzQaDS1YsIC05Obm6v5OTEykDh06yK6rvYr2QJMffvhB99ny5cuJiKhHjx6G8qySu20qIrgPN4X4yJh6oRNkvwh7FHCz4OlmdLhbcutu5HrKRTygH374gZ6lT58+tGjRItJoNEREVFxcTD/++CP5+PhIWrc2mmd5lXff5V5G169frxcMzdPTkz7++GNj+fbI3TYVEdWPN5vRNlrp8st9AfYqeOaIPhESKbfuBq7FRW5jJETCwsIoKSmJSjN48GACQK1ataKTJ0/qPk9OTqZBgwZJVnerVq2oS5cust8DcyQiIoLy8/Np+/btgk4PKyVGg2YpYn8CoKUZ7eNTXX65L8BeBdzxZuZ0vi/k1t3I9UgS5dLa4uPjQ7/99htpKb18UKVS0dtvv00ZGRm677dv3156KSGvODs7GwzAplKp6OzZs1S1alXZ74EYcXd3p4sXL1J8fLw5kUTT5G6Xiojux3+JfMbHtHkrayA0IRwUkfYSgDkA2gH4wjrqWEyG3AoIIT09Hb169cIHH3yA4uJiBAYG6r4rLi7GokWL0KBBA/zyyy8AgO7du+PChQv46KOPUKUK/87ygoICeHt7Y/Xq1ejevbsucFtxcTGuXbuGRYsWWefCrEDbtm3x+++/Iy8vDz169BAUouIZfBhjrtbQTcFqbBKZPpIx5gcAsv9S2auAi2WTA8O/lkUA4gF8ACBMbl0FXs8lI9dil6Jdfrlq1SqjaV588UVKTEwkLWlpafTFF18I8r8HBwfThQsX6MKFCzRmzBhycXGhCRMmEBHRgAEDZL9+Y+Lg4ED9+/enffv20eXLl2nr1q3k5+dnSZl15W6biojqx4EQP1H7OhEpxp7nxu4pdcOyAfwKYDiA6nLrZsa1HJPbUImRiIgIIiJatmyZyXTOzs40Y8YMvVU72dnZ1LhxY946PD09datVUlJSdH8/fvyYgoKCZL8HhqRmzZoUFBQk5WaztnK3TUVE9+UjIp/xWiJSjD3PTZ0IYCmAVwC4yK2PhdeyU25DJUYGDBhARFRmy78xCQkJoW3btpGW1atXC64rNjaWUlNTqTQ7d+6U/R7YSPrJ3TYVEd2XPxD5jB8TVeIQx5UNxth6AAPk1kMoM2fOxKxZsxATE4Pdu3cLzvfOO+9g/vz50Gg0aNCgAa5fvy4oX1BQEJYvX653oEpqaiqSkpKQlJSEmzdv6v1769Yt5Ofni74uO+RdIlogtxIKwmGM1QcX8VYMQbL/Silis9HAfyHBSFDk0j6z5ZdffiEiosDAQNF5v/76ayIi+u9//ysqH2OM+vfvTwsXLqQTJ06QWq0mYxQXF9P9+/fpyJEjtGbNGpo+fToFBATIPUo3R/5P7rapiFn9+azI59xRGdlXEhhj/wbwkaXlNGjQAH5+fjh06JAEWhnn5MmTqFu3LqpVqyY6L2MMa9euRZ8+fVCvXj3cu2cy1L9RXFxcEBERgdatW+O5556Dq6sr3Nzc4OrqqpNbt25h69at2LNnT3kd6a8kohFyK6EgDsbYvwB8IiLLWNl/oRSx2UjgDUg0GoyPjxd1uLg5kpWVRfHx8Wbnd3Fxofj4eJo3b57cI2d7l11yt01FzOrPg0U+56+VdfaVh3+kKmjnzp349ddf4eLiIlWRegQFBcHT0xPnz583uwy1Wo3evXujY8eOqF69uoTaVTgC+ZMo2CFJItM/pxj7ysNFcGFSLWbOnDkoKirC4sWLpSiuDA0aNAAAi4w9AKSlpaFfv34YNGiQFGpVVILkVkDBLMQa+1DF2FcSiEgN4IoUZRUVFWHw4MHo1asX3nzzTSmK1ENr7C9cuGBxWUlJSdi1axccHR0tLquC4ssYc5ZbCQVxEFEKuJj1QvFUjH3lQjJXzp07dzBixAh89913iI6OlqpYAE+N/blz5yQp7+rVqygqKpKkrAoIAxAgtxIKZnFTRFqVYuwrF9JYzxLi4uIwf/58bNq0CTVr1pSs3AYNGiApKQnp6emSlalgEsWVUz65ISItU4x95UKykb2WGTNmICkpCZs3b5ZswjYgIABnzpyRpCwFQSiTtOUTMX57xdhXMiQd2QNAYWEhBg0ahLCwMMkmbG/fvi1456uCJCjGvnyiFpFWceNUMm4BeCJ5obduYeTIkRg1ahTeeusti8tTDL3NUdw45RMxz00Z2VcmiNuNccQaZf/222/47rvvJJmwvXHjBhwcHCTSTEEAWXIroGAWYoz9I8XYVz5WWavgadOmISEhweIJ2xs3bkClvHTaEmWCpHwixtjfUHpU5WMLgExrFFxQUICBAwfC1dXVognb69evKyN726IY+/KJYuwVjENEeQA2WKv8pKQkjB49Gq1btzZ7wvbmzZvSKqVgirtElCq3EgriYIx5AuA/h/Mp1xVjXzn5BtzRilbh119/xcKFC82esC0oKMD9+/etoJmCAZRRfflE7KS6MrKvjBDRFQA/WLOODz74AKdPnzZ7wlYZ3duMBLkVUDCL+iLTKyP7SswX4M7VtQpqtRoDBgxAXl6eWRO2irG3GcrIvnzyqoi0yQCuKsa+kkJEDwF8bs06rl+/jrFjx8Lf31/0hK1i7G2GYuzLGYwxBqCXiCx/EhEpxr5yMw/AX9asYMOGDVi6dKnoCduUlBQraqVQQjoR3ZRbCQXRtAIg5lV5FwAoxr4SU7LJ6g0AVl2NMXnyZJw9e1bUhG3JaTwK1kXx15dPxolISwB2A4qxr/QQ0X0Ao61ZR35+PgYMGIDs7Gx89913aN++vTWrUxCO4sIpZzDGggEMF5HlNBE9AhRjrwCAiH4HsMSadVy5cgXjx4+Hk5MTNm7cKGlI5MoOYwwxMTFwcnISm1UZ2Zc/ZgAQ86C3av9QjL2ClvfBHV1oNdasWYNly5aZNWGrYBwiwo0bN3Do0CEMHjwY3PydIJSRfTmCMVYfwAgRWQoBLNP9n9ynpCtiPwKgGYB8iDu1XpS4ubnRuXPniIjop59+slo9lVFat25Nt2/fplOnTtFLL71kMq2Tk1MhAEe525wigvumCkC8yDaxtnQZrKQgBQUAAGPsPQDfWbOO8PBwnDx5Eh4eHujZsyfi4uKsWV2lwtfXF0uXLkVsbCzy8vKQnJysk5SUFN3farX6zsqVK+vIra+CMBhjUwDMFZktmogO68pQjL1CaUrW8P4OoIc165k9ezamTZuGadOmYc6cOdasqlLi5+eHV155BV26dEFoaCjq1q2LgAC9o2YfAaghk3oKImCMhYNzubmKyJZARC1Kf+AoqVYK5R4iIsbYcHCTd7WtVc+tW7cAALVq1bJWFZWaR48eYeXKlVi5cqXuM3d3d4SEhKBu3bqoV6+e36+//jrz/v37G4josoyqKpiAMeYAYAXEGXoAWPDsB4qxVygDEaUxxgaC8xFapY1oA50pxt525Obm4uLFi7h4UTcPPwvALMbYaQBrAKwjonuyKahgiA8BtBGZ5wKAlc9+qKzGUTAIER0Ft8zLKjx48ACAYuzthJbgIqHeZoztY4yNZIwpS6VkhjHWFOaFNJlMRJpnP1SMvYIpvgHwhzUKVkb2dokKQCcAPwG4yRj7iDFWVV6VKieMsWoANgJwFpl1GxHtNlimMkGrYIqSRpcAQFKr7OTkBLVaDSKCi4sLioqsFl5fwTKegAuH/R0R3ZVbmcoAY8wdXMyqKJFZCwE0JqKrBstVjL0CH4yxdgD2Q2L/fUpKCmrUqIHg4GDcvn1byqIlxcPDAy+88AKCgoIQEBCAwMBABAQEICAgAK6urnrLG5OTk3Hr1i3s378f+fn5cqsuJYUA/gdgFhE9kFuZikrJhOwWAD3NyP4NEU01+q3cmwUUKR8CYBok3gSUkJBARERt27aVfUPSs+Lt7U1Dhw6lzZs3U25uLhmkqIiK89UGv3ry5AmtXbuWYmNjyd3dXfbrkVByAHwJwFvuNlkRBcCPZj6XfwC4mipbGdkrCKJk/f0fALpLVeb27dvRvXt3DBw4EBs2WO1YXMGoVCoMHjwYQ4YMQdeuXeHszLlLC85fQt5vu1B4/SY0yY+geZDC/fvoMaDRQOXlCQf/6nDw94PK3w8uLZrAvV+P/2/v3KOrKq8E/tvJDUmgEIjII7yuCAjIQysYooFZGPGxYIHOEKbYaWGYqQrRglQHLAGhESmDDFOGmqKCdWx1SRxQGJ1iwTorgTCRCvhMIEASwg15kYQANtwke/74LpQQIMm9JzlJOL+19rrcnHO+b9/Lvft+Z3/7QchtppnQ2bNnWbp0KevXr6e2ttbOl2glpcBLwK9VtcpuZdoDIrICWObHpd8BY1T1+uVO7P4lc6TtCNAdyMeiVeKmTZtUVfWZZ56xe7Wq0dHRmpGRoRep+vMXevr5lzR/yL16nN5+yckRE7Vs+ctaXVSiqqp79+7VYcOG2f5aLZZcTBXGILs/n21ZMGWL/f0/+Elj5nCicRwajaqWADOBemFd/tBawi+XLVtGeno6Y8eO5VzKDk4OvgfPXQ9Sseo/8B4+5ve4F77KpHz5Wk4Om8DZN7cQExPDgQMHWLJkCS5Xu0lx6Y9J+jkkIs2add1eEZEF+F91NkVVX2vMiY6xd2gSqpoKLLViLLvDL0NCQti8eTMrVqygJr+AU/fFUzzjCbzZOVe/IDiY0OjvE7FkPl2X/4yw2LuRRhjt2tIySmYv4FTcDIJOFPDiiy+yb98+evbsWe/cIUOGkJ6ezsyZMwN8dS3OCGCHiKSKyD12K9MWEBGXiCQD6/DPFh+hKY1M7L59caTtCSDADgJ0ATz66KOqqrpnzx5bXBDJycmqqlq1/5Dm9b7jqq6YnDC3Fv/TQj237X+0prxCr6TmTKWW/3KD5nYb2ijXTk6YW8++876qqmZmZmqfPn0u6TN69GgtLCy8NPYnn3yiI0aMsNtN469sB8ba/VltrQJEAB8H8P4WALc0aU67X7QjbVOArpiVhd8GITo6WlVVS0tLtXv37i1qjKZPn66qqlVffqs5nW6tZ5RzI27T04tXavWpIr2SmsqzWvnbd7X4H57SvF6jm+7PlyiteNn80Bw7dkzdbrfGxMRoWVmZ1lZd0KL4x7Xy9bcvzZeRkaELFy7Uvn372m3A/ZE/AhPt/ry2JgEGYnpH+PueVgB3NHVeJxrHwW986dz7gI7+XB8ZGcm3335Ljx49yMjIYOLEiZw/f95aJa9CREQEOTk5RHQIxTP2YbzfHK5zvNPMR7jpN6sJ6tK5zt/V6+Xsq7+j/BfrqCkKvG1vl4VPELn2BTweDxEREXQKD6f475/k3Hum5HNYXCzdX12Da+AAM78q6enp7N+/n8zMTLKyssjMzLzkDmvl7MNE7/y33sBGx5ez8j4m2MEfLgAPq+onTZ77Bn7fHSxARGZiimj5xciRI/n000+JjIzko48+Ytq0ac2eTZuQkMCGDRsoX7aG8qR19Y5HfbGbDiOH1fnbuZQdlP981bX9+X7S7V8TiXjONGEv/cmzVL5e960Ul4uwSRPoNPMROj7yEEGdv1dvjMrKSrKysjh69Ci5ubn1pLKy0lKdA+RLYBWwRa9Sv6W9IiIuTDe4FYC/dYdqgcdU9V2/dHCMvUOgiMg6YIG/148ZM4bdu3fTpUsX3njjDebMmWOhdvU5dOgQI4cPJ7/fGGpOFdU51mHUMKIO7b703JudQ8lj86j6rJnatQYF0XP7b/Eey+P0TxOve6qEh9FxyiQ6/WAaHe4cQXC/qEZtEGdmZpKWlsaePXtIS0sjOzvbKu0DIRtYDfynql6wW5nmRETGARsxneD8pQr4kaqm+K2HY+wdAsXX8f4LoIu/Y8TGxrJz5046duzIypUrSUy8vuHzl8GDB3P48GHOb/+Yommz6x3vtmYpEc/OBUAveCkYN5kLB75qFl0uEtSlM4hQW3GmaRcGB+OK6onL3Q/XgL643P0I9j26BvTF1b8PElq/jtapU6dISUlh8+bNHDxoe8/xk5iCe6+qavP78FoQEemCcV3NJbDIxwpgmqr+b0D6OMbewV98FREXAfOB8EDHi4uL48MPPyQ0NJSEhAReeeWVgHW8kunTp5OSkkLZkl9S8dL6ugeDguh34s8ER5mQyNM/W8GZf9touQ4tRlAQrj69cA26hZBB7kuPoTF3EdzbvMaDBw+ycuXKw++9995NwE02alsC/Ar4jZp8jjaNiPwdsB6ICnCokxgf/ZcB6+QYe4emIiJhwFPA80CklWNPmTKFrVu3EhwcTHx8PFu3brVyeJKSkkhMTKTo0Tmcf/8PdY6Fxd5Nr9T3Afhu56cUPvxDaKffj5DhQwi/fzxh908gbPzdB4K7dR0HTAX+EXgQCLZJtWrgD8DvgO2q+p1NeviFiNyFqUFvRYLZNxhDb0mVQMfYOzQaX0W+H2M2mZqtZWF8fDzvvPMOXq+XBx54gNTUVMvG/uCDD5g6dSonh9yL98jxOsfC4mLptWsLNUUleEbFUVNYbNm8rRqXq8Ttzbv54lMRiQJ+hDH8t9mmlymv/F8Yw/8nVW2VhYV8m69/i7nDtSqh7F1MGQTLdtedDFqHRiEi0zB++c00o6EHSElJYc6cOYSGhrJ9+3Zuv/12y8YePnw4+pcqvEdz6x3TikpQpWT2ghvH0ANUV9dxwamqR1VXq+pQYCImVt4OOgOzgV3ACRFZIyL3+Iyr7YjITSLyPHAcY5ytMPRVwDxV/YGVhh6clb1DA4hILCZqosVT4J988kmSk5PJz88nJiaG/PzAe2cUFhYS+Rcv+QPG1jsWMvgWOs+bzelnXgh4njaGutVz3YWfiIwFlmBcPdIiWl2bM5j+Cn8EdqlqZktNLCIdMD1hZwE/pOmNwK/HUWCGqn5u4ZiXcIy9w1URkRGYSAJ/mihYxsKFC1m7di1ff/0148ePp6ysLKDxzpw5Q8fK85zoc2e9YxIeBrW1aFW7jgS8Fh3d6mnQP+77XPwcmIF9fv0ryces/ndhjH+hVQP79qfGAX/jk3FYEIxwFX6PWdE3MSSr8TjG3qEOItIf+AXGZ9sq3HyJiYkkJSWRlpbGpEmTAuoAVV1dDSWnOdFrtIUatgvC3OppdF16ERkELMbs4YQ0m1b+cRzIuYacvDyZy7dS7wp0u+Lxdoxxvxv/k6AaQzYwV1V3NeMcgGPsHXyIyEAgwSfN+eH2i1WrVrF48WK2bdvG9OnT/WoC4nK58Hq91JaWkdfdun2AdkCJWz03N3xafUSkH/Ac8M80z4rXaryAB/MD1RU/S31YwAWMe/QlVW2R/pWOsb9BEZHuwH3A/T65xV6NGmb9+vU8/fTTJCcnM2/ePL/GqKiooHOHUHK/Nwhqbphs/YY46FZPfb9WExCRHsBCYB5mY9Xh2uwGElQ1qyUnbRW36Q4tg4j0F5HVIvI5UIQvvIs2YOgB5s+fz6ZNm5g7d67fGbZ5eXlIWCgdRg61WLs2TcBx3KpapKqLMZFaizGrZ4e6pAL3qer9LW3owTH2NwQi0kNEfgUcBv4FuBP7IyqajKry+OOP8/bbb5OUlORXDZ28PGPXQmPGWK1eW6bJFRSvhapWqOpqwI0Jmww487MdsBeYpKoTVPVPdinhGPt2jIh0FZEXgWPAT2mFvvimUltby6xZs9i2bRsbN25k8uTJTbo+N9fE14fe4xj7y9hh9YCq6lXVN1V1FPAQJlLmRkIxzUkeUtV7W2IDtiEcY98OEZFQEVmMMfJLgE42q2Qp1dXVxMfH16SmpmZs2bKlNjo6utHXXszGDY+LRUJaWxCJLXztVo//jXYbgaruVNVJwCAgCQvcRq2YAmAlcKuqPqiqO+1W6CLOBm07xJdh+Blwh926NCMHgBhV7Z2dnT1/ypQpT2VlZTWYWRkZGUlxcTFBQUGUzF7A2Te3tICqrZofu9XzVktOKCJBmOCA2ZgyA20hiud6XMAkeL2Oac7SvA0Z/MQx9u0UERkKpGFfJcNSTCXD/lj/Zf4ciFfVOivSRYsWxZWWlsYXFBTEHjt2bOCRI0fCa64ScbN3715iYmK48FUmnlFx7bbYWSP4ErjDrR7bas74ygDPACZjSjNE2KVLEykGPsS4wD5W1bM269MgjrFvx4hINKYC38XN2BpMEscXwHngEcyXLFA3TyVmk28nJuLguKqe8+kgQB/MLfzgKx5vpWlxzkcxTSDWNWb1tGzZsh7l5eWPFRcXP3zixInRmZmZN5eWlgYtX76cF14wJRGKps7i/A67Sr/YSg3woFs9uxs8s4XwFdobgwkFngTEAPUL8tvDaWA/8H+Yqpz7WmthtmvhGPsbHBEJx9xSjwW+75M+17mkFijEuIlSffK5qnr9nL83pgHzRelF3UihGsxKfpeq1q9e1kQWLVoU179//9iEhIQewLiagsJRnrsectUUWJZh31Z42q2eDXYrcT1EpCMwARgPDMEsEAYB9XszWkclpoZ8PmZR9BnwmaoebcY5WwTH2DvUw+fz74apVR+JKfZUjInNL2lrK5oGCD/97IpZZ/79tQ3U1LaWWi/Nzctu9TxntxL+IiK9+Ovd4cU7xa6A6zIJueK5CxOQUoTJATjpkzr/trrSZGvCMfYODkCORM0BXqVli3t9A7wBTAPupflzHyqBuW71/L6Z53FohTjG3sHBR45ETcRUH+zdzFNVA2uAFReLj+VI1ADgMUzZXKsL99RiNhKfdaunVXQbd2h5HGPv4HAZORLVE3gLs0FoNZXAa8B6t3quuf+QI1GDMCv9WN/jUPxb9R8HtgK/dqvneEMnO7RvHGPv4HAVciRqHPAEJiwwkMqIhcAeTLTSW271NLleeY5ERWJKXPTGbGD3vOyxK1CBCXU9jdlbOQiku9VzKgC9HdoZjrF3cLgOORLVFeNTH8ZfNwQHYsJVzwPlV5FSTNLXHsdt4tBa+H8nqYHN7SVqRQAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/doc/baboon_vector.svg</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICBpZD0ic3ZnMzE4MSIKICAgdmVyc2lvbj0iMS4xIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ4LjAgcjk2NTQiCiAgIHdpZHRoPSIxNzUwIgogICBoZWlnaHQ9Ijk2MCIKICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIKICAgc29kaXBvZGk6ZG9jbmFtZT0iYmFib29uX3ZlY3Rvci5zdmciPjxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTMxODciPjxyZGY6UkRGPjxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj48ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD48ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+PGRjOnRpdGxlPjwvZGM6dGl0bGU+PC9jYzpXb3JrPjwvcmRmOlJERj48L21ldGFkYXRhPjxkZWZzCiAgICAgaWQ9ImRlZnMzMTg1Ij48Y2xpcFBhdGgKICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgaWQ9ImNsaXBQYXRoMzE5NSI+PHBhdGgKICAgICAgICAgZD0iTSAwLDc2OCAxNDAwLDc2OCAxNDAwLDAgMCwwIDAsNzY4IHoiCiAgICAgICAgIGlkPSJwYXRoMzE5NyIgLz48L2NsaXBQYXRoPjxjbGlwUGF0aAogICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBpZD0iY2xpcFBhdGgzMjE1Ij48cGF0aAogICAgICAgICBkPSJNIDAsNzY4IDE0MDAsNzY4IDE0MDAsMCAwLDAgMCw3NjggeiIKICAgICAgICAgaWQ9InBhdGgzMjE3IiAvPjwvY2xpcFBhdGg+PC9kZWZzPjxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMSIKICAgICBvYmplY3R0b2xlcmFuY2U9IjEwIgogICAgIGdyaWR0b2xlcmFuY2U9IjEwIgogICAgIGd1aWRldG9sZXJhbmNlPSIxMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTQ0MCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI4NTEiCiAgICAgaWQ9Im5hbWVkdmlldzMxODMiCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIGlua3NjYXBlOnpvb209IjAuMjA1NTAyOTEiCiAgICAgaW5rc2NhcGU6Y3g9IjE1MzQuMTY2NyIKICAgICBpbmtzY2FwZTpjeT0iNzk1Ljc4MTU2IgogICAgIGlua3NjYXBlOndpbmRvdy14PSIwIgogICAgIGlua3NjYXBlOndpbmRvdy15PSIwIgogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0iZzMxODkiIC8+PGcKICAgICBpZD0iZzMxODkiCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAgICBpbmtzY2FwZTpsYWJlbD0iYmFib29uX3ZlY3RvciIKICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLjI1LDAsMCwtMS4yNSwwLDk2MCkiPjxnCiAgICAgICBpZD0iZzMxOTEiPjxnCiAgICAgICAgIGlkPSJnMzE5MyIKICAgICAgICAgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMzE5NSkiPjxnCiAgICAgICAgICAgaWQ9ImczMTk5IgogICAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ1OC45NTYxLDU2OS45Njc4KSI+PHBhdGgKICAgICAgICAgICAgIGQ9Im0gMCwwIDU5LjgzNSw2OS4zNTUgODcuMDM0LDI2LjUxOCAxMzMuOTQ5LC03LjQ3OSBjIDAsMCA3NC4xMTYsLTMyLjYzOSA3NC43OTUsLTM0LjY3OCAwLjY4LC0yLjA0IDg0LjMxNCwtNTkuMTU1IDg0LjMxNCwtNTkuMTU1IGwgMTIuMjM4LC03NC43OTUgNS40MzksLTk3LjkxMiAtMTMuNTk4LC0yNS4xNTkgLTQuNzYsLTQwLjc5NyAtMTguMzU4LC0yMy4xMTggMjQuMzksLTUuNTYxIDAuNTAxLC01LjE5MiAtMTQuMDEyLC02MC42NDEgMTYuNDc3LC05My4zNjggNy4yMjMsLTQ5Ljk3MiAtMjA4LjI5NSwtNTEuNzU0IC0xOC41NTIsNC4wMDUgLTM3LjQ2OCw4LjMyNSAtMTAuMDM2LDQuMDM2IC02Ni44ODUsMTAuMTAxIGMgMCwwIC0xNC45NTksNzQuNzkzIC0xNi45OTksNzMuNDMzIC0yLjAzOSwtMS4zNTkgLTQyLjgzNiw1Ni40MzcgLTQyLjgzNiw1Ni40MzcgbCAtMTkuNzE5LDY1LjI3NCAxMi40OCw3NC41NzEgLTcuOTYxLDkuNjQzIC0yNi40NzksMTYuMTg3IC0xMi43MTYsMzguMzA5IDQuMDgsNDguMjc3IDguNzY5LDM4Ljk4NSBMIDYuNjA4LC03NC4zMDggMCwwIHoiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICAgICAgaWQ9InBhdGgzMjAxIiAvPjwvZz48ZwogICAgICAgICAgIGlkPSJnMzIwMyIKICAgICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSg3OC44NjU3LDY4Mi4xNTgyKSI+PHBhdGgKICAgICAgICAgICAgIGQ9Ik0gMCwwIDE0Mi43ODksNDAuNzk3IDI1OS43NCw1Mi4zNTUgMzEzLjQ1NywtMjMyLjU0MyAyMDQuNjY1LC0yOTEuNjk4IDc4LjE5NCwtMjkzLjczOCAwLDAgeiIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiCiAgICAgICAgICAgICBpZD0icGF0aDMyMDUiIC8+PC9nPjxnCiAgICAgICAgICAgaWQ9ImczMjA3IgogICAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI2OS41MTIyLDM0NS4yMzQ0KSI+PHBhdGgKICAgICAgICAgICAgIGQ9Ik0gMCwwIDE4LjgwMSwtNzQuNDI1IDQwLjcyOCwtODUuNDA4IDU5LjUzOSwtNTkuNTQxIDQwLjI1OSwxMy41MDMgMzYuODIxLDE1LjY2OSAwLDAgeiIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiCiAgICAgICAgICAgICBpZD0icGF0aDMyMDkiIC8+PC9nPjwvZz48L2c+PGcKICAgICAgIGlkPSJnMzIyMyIKICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDc0MS45MTgsMTA5LjAzMzIpIj48cGF0aAogICAgICAgICBkPSJtIDAsMCAtMTcuMjM2LC05LjQwMSAtMTYuNDUyLC0yMi43MjEgLTAuNzgzLDEyLjUzNyA2LjI2OCwxNy4yMzQgMTMuMzE3LDYuMjY4IEwgMCw3LjgzMyAxNC44ODQsMy45MTcgMCwwIHogbSAxNzIuNjIyLC0yMS44MjQgYyAtMC4wMzEsMC4yNzEgLTAuMDgxLDAuNTM1IC0wLjExNywwLjgwNCAtMjAuODUsNy42NTMgLTQ5LjU5LDcuMzI3IC02Ni44NzQsMTAuOTI3IC0xMy44NDksMi44ODYgLTIzLjA0Nyw5LjExOSAtMjcuMDMyLDEyLjI5OCAtOS44NjMsLTguNDk0IC0xMi4wMjUsLTE0LjM3NyAtMTIuMDI1LC0xNC4zNzcgMCwwIC05LjgxNiwxNS4zMDkgLTMwLjE3LDI1Ljc2IC03LjA1LDMuNjIxIC0xNy43NjcsNS42OTEgLTI5LjM0MSw1LjY5MSAtMjQuMjk3LDAgLTUyLjM4NCwtOS4xNTUgLTU4LjMzOSwtMzIuMjIzIC0xMC40NTgsLTQwLjUxMSA5LjY5NywtNzYuNTk0IDQ5LjgxNCwtNzcuNjIzIDEuMzI1LC0wLjAzNCAyLjYyMywtMC4xMiAzLjg5NCwtMC4xMiAzNi4xMzEsMCA0OC44NTUsOC41NzIgNTguMzIzLDE1LjQ3OCAwLjAyNywwLjAyMSAwLjEwNCwwIDAuMTA0LDAgMCwwIDI1LjEyNiwtMTEuNTA2IDUzLjUyOSwtMTEuNTA2IDQuNDE5LDAgOS4xNTYsMC40MTUgMTQuMjQ5LDEuMDYzIDMxLjY0MSw0LjAxOCA0Ny45ODksMjguMTI0IDQzLjk4NSw2My44MjgiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNkZjAwMTk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiCiAgICAgICAgIGlkPSJwYXRoMzIyNSIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz48L2c+PGcKICAgICAgIGlkPSJnMzIyNyIKICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMwMC44NDgxLDI3MC4wMjU0KSI+PHBhdGgKICAgICAgICAgZD0ibSAwLDAgYyAtMy4wNjMsLTAuNjkxIC0xMi41MzUsMC43ODQgLTEyLjUzNSwwLjc4NCBsIDYuMjY3LC0yNS44NTMgNDMuNDgxLDEzLjMxOSAtOS4wMSwyNy40MTggQyAyOC4yMDMsMTUuNjY4IDcuODY3LDEuNzc3IDAsMCIKICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIKICAgICAgICAgaWQ9InBhdGgzMjI5IgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPjwvZz48ZwogICAgICAgaWQ9ImczMjMxIgogICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjExLjY2MDUyLDYxNS44NTk4NCkiPjxwYXRoCiAgICAgICAgIGQ9Im0gMCwwIC0xNi4yNDMsLTIuODcxIC0xNS40NjIsLTkuNCA0LjMyMywtMTAuOTM4IDE0LjU2OCw5Ljg5IEwgMi43NSwtOC43NzEgMCwwIHoiCiAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiCiAgICAgICAgIGlkPSJwYXRoMzIzMyIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz48L2c+PGcKICAgICAgIGlkPSJnMzIzNSIKICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI3NC4xNTczMiw2MjYuNDA4NCkiPjxwYXRoCiAgICAgICAgIGQ9Im0gMCwwIC0xNS42NCwwLjQwNyAtMTQuMjc5LC0zLjYwOCAyLjAwOCwtOS43NDcgMTQuNzU2LDQuMjA4IEwgMS4xMTEsLTguMjE1IDAsMCB6IgogICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICBpZD0icGF0aDMyMzciCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+PC9nPjxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgZD0iTSA0MzYuNjU2MjUgMjIuMjgxMjUgQyA0MzYuNjU2MjUgMjIuMjgxMjUgMzM4LjE4Mzc1IDI1LjM4NSAyNTEgNDIuODEyNSBDIDE2My4yNDg3NSA2MC4zNTM3NSA3MC40MDYyNSA5OS42NTYyNSA3MC40MDYyNSA5OS42NTYyNSBMIDE3NS4xODc1IDQ5NS4yODEyNSBMIDMyNy45Njg3NSA0OTIuMzQzNzUgTCAzMzcuNzUgNTI3LjU5Mzc1IEMgMzM3Ljc1IDUyNy41OTM3NSAzNjUuMDk1IDUyMy4yNTg3NSAzNzMgNTE4Ljc4MTI1IEMgMzc2LjMxMzc1IDUxNi45MDM3NSAzODMuNzgxMjUgNTA4IDM4My43ODEyNSA1MDggTCAzNzcuNzUgNDg0LjY1NjI1IEwgNTA0LjIxODc1IDQwNy4xNTYyNSBMIDQzNi42NTYyNSAyMi4yODEyNSB6IE0gNDEwLjUzMTI1IDU1LjE4NzUgTCA0NjUuNjg3NSAzOTMuMzEyNSBMIDM0Ni41OTM3NSA0NTYuNjI1IEwgMjAyLjc1IDQ2Ni40Njg3NSBMIDExMiAxMTQuNDA2MjUgTCAyNjMgNzkuMTg3NSBMIDQxMC41MzEyNSA1NS4xODc1IHogIgogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC44LDAsMCwtMC44LDAsNzY4KSIKICAgICAgIGlkPSJwYXRoMzI1MyIgLz48ZwogICAgICAgaWQ9ImczMjQ3IgogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMS4xOTkyMzgsLTAuMDI4NzkzMzEsMC4wMjY3MzA4NCwxLjA1MjA3NTYsMTcyLjQxOTM1LDQ5OC4zNzMzOSkiPjxwYXRoCiAgICAgICAgIGQ9Im0gMCwwIGMgMCwwIC0xLjg2MSwxLjQ4MSAtOS4xNDMsLTEuNDU3IDkuNzEyLDE4Ljg2NyA5LjQzOSwzOS45ODkgOS40MzksMzkuOTg5IDAsMCAtMy4xMDYsLTIuNDY1IC0xMS4zMTEsLTguNDcgOS4yNDEsMjMuMDQ0IDUuMzM4LDcyLjUyNSA1LjMzOCw3Mi41MjUgMCwwIC0xNy40OTMsNDAuNzQ2IC0xMy42NTcsNDUuNzk5IDguODQxLDExLjY1IDIzLjgzNCwyMy45NjggNDQuMjk1LDI1LjU5NCAxNy45MzUsMS40MjQgNDQuNjA2LC00Ljk1MyA1NS44NjUsLTE1LjI4NCA0LjUzNiwtNC4xNjEgMjMuMzY3LC00Ny40OTMgMjMuMzY3LC00Ny40OTMgMCwwIDYuMTA0LC0zNS4yNzEgMTEuNjE5LC01NC4xMDggNS41MTMsLTE4LjgzOSAxMS4wNTQsLTI2LjY3NCAyMS4yODQsLTM0LjgyNSAxNy44MzEsLTE0LjIwNyAyNy4wNzYsLTI5LjkzOCAyNy4wNzYsLTI5LjkzOCBMIDE0My4zOTksMy45NDUgYyAzLjY1NSwtMTcuMzU2IDE0Ljg3NSwtMzQuMjggMjcuMzksLTQ3LjY3MiAtMTIuODYzLDEuNTA3IC0xOS42MSw4Ljc4MyAtMTkuNjEsOC43ODMgMCwwIDIuMTUxLC0xMi42NjQgOS4xMDksLTI2LjU1NCBsIDI4LjcxMiwxNS4yNjQgLTEuNzYyLDEwLjgwNSBjIC01LjEyOCw5LjMwNCAtOS4zMzYsMTUuNTM0IC05LjMzNiwxNS41MzQgMCwwIDIuMDg5LDAuOTU2IDcuMzg1LC0zLjU3MiBsIC0yLjAwNSwxMi4yOTYgYyAtNC44MTQsOS4zOTEgLTExLjc3MywxNi43NTIgLTI1LjExNSwzMS4xMTMgNS45NDQsLTYuMDg3IDE1LjQzOCwtNS4zNzkgMjAuNzUxLC00LjM1NiBsIC0wLjU3MiwzLjUxMiBjIC0yLjIzMSwxLjI3OCAtNS40OTQsMy4xNzEgLTEwLjI0MSw1Ljk1NyAtMTIuNDMsNy4yOTkgLTIyLjMyNiwyMS4wNDkgLTIyLjMyNiwyMS4wNDkgMCwwIDEyLjg1LDEuODE1IDIwLjUxMywxMS4wMjIgLTcuMzE2LC0yLjY0MSAtMTguNTg1LDAuNzk5IC0xOC41ODUsMC43OTkgLTE3LjA4Niw2Ljc3MiAtMTUuMDIyLDMwLjIxNyAtMTcuNjg3LDUwLjU4NyAtMi42NjcsMjAuMzcgLTkuMjk5LDM0LjEyNSAtOS4yOTksMzQuMTI1IDAsMCAtMC4yNDMsMi4xNDkgMTEuOTEsLTUuOTA2IC03Ljc0NCwzMy4yMTUgLTM1LjU0NSw0NC45NCAtMzUuNTQ1LDQ0Ljk0IDAsMCAyLjIyMywyLjc5IDIyLjg0MywwLjA0NCAtMTYuNDY5LDE1LjgxNyAtMzIuMzAzLDE2Ljg5NiAtMzIuMzAzLDE2Ljg5NiAwLDAgMTAuMDc3LDIuMjUgMjMuNjExLDAuMjQgMCwwIC0zLjMyNywzLjUwOCAtNy41NDksNi40NTMgTCAzNS45ODUsMTk0LjI5MSAtNzcuNTQzLDE2Ny44MTUgLTguMjExLC0xMDEuMTcgMTcuNDgxLC05OS40MTMgQyA4LjYwMiwtODUuMTE0IC0wLjM3MSwtNjMuODM3IC0yLjE1LC00MC44NTcgLTQuOTExLC01LjIwOCAwLDAgMCwwIgogICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICBpZD0icGF0aDMyNDkiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+PC9nPjxnCiAgICAgICBpZD0iZzMyNTUiCiAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMDQuMjIxMzQsNTgwLjg4MzUzKSI+PHBhdGgKICAgICAgICAgZD0ibSAwLDAgYyAwLC0xLjQxOCAwLjQzLC0yLjczNiAxLjE2OCwtMy44MyAxLjUyMywwLjY3NyAzLjU1MSwxLjA5NCA1Ljc4NiwxLjA5NCAyLjE2NCwwIDQuMTMzLC0wLjM5IDUuNjM5LC0xLjAyOSAwLjcxMSwxLjA4MSAxLjEyOSwyLjM3NCAxLjEyOSwzLjc2NSAwLDMuNzkgLTMuMDcyLDYuODYxIC02Ljg2MSw2Ljg2MSBDIDMuMDcxLDYuODYxIDAsMy43OSAwLDAiCiAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiCiAgICAgICAgIGlkPSJwYXRoMzI1NyIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz48L2c+PGcKICAgICAgIGlkPSJnMzI1OSIKICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI1Ni4zMzExLDU5NS4zMTY0NikiPjxwYXRoCiAgICAgICAgIGQ9Im0gMCwwIGMgMCwtMS40MTggMC40MywtMi43MzYgMS4xNjgsLTMuODMgMS41MjQsMC42NzcgMy41NTIsMS4wOTQgNS43ODcsMS4wOTQgMi4xNjMsMCA0LjEzMiwtMC4zOSA1LjYzOCwtMS4wMjkgMC43MTIsMS4wODEgMS4xMjksMi4zNzMgMS4xMjksMy43NjUgMCwzLjc5IC0zLjA3Miw2Ljg2MSAtNi44NjEsNi44NjEgQyAzLjA3MSw2Ljg2MSAwLDMuNzkgMCwwIgogICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICBpZD0icGF0aDMyNjEiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+PC9nPjxnCiAgICAgICBpZD0iZzQxNzQiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjk5Njk0NTA5LDAuMDc4MTA1NjMsLTAuMDc4MTA1NjMsMC45OTY5NDUwOSw0Ny4zNDg3NDgsLTE1LjM0ODI5OSkiPjxnCiAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIyMi41MDk4LDYxMC4xNTU4KSIKICAgICAgICAgaWQ9ImczMjE5Ij48cGF0aAogICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgaWQ9InBhdGgzMjIxIgogICAgICAgICAgIHN0eWxlPSJmaWxsOiNkZjAwMTk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiCiAgICAgICAgICAgZD0ibSAwLDAgNC40NSwyLjc1MiA1LjM0LDMuNzg1IDcuMDUsLTguMjI2IDcuMDkzLC0zMy4zNTkgMTcuODAxLC01MS4yNTkgMTMuODYsLTMwLjIxNSAyNi4yNjEsLTEuNTUgLTYuNjg1LC0zNS42NTMgYyAwLDAgLTQ5Ljk4LC0yMS44NzEgLTQ5LjU0NSwtMjEuOTExIC00Mi42NTcsNC4wMDEgLTEyLjU1Myw0My4wNjYgLTguNjMxLDQ3LjMwMSBMIDMuNjY2LC00Ny44NjkgMCwwIHoiIC8+PC9nPjxnCiAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI0Ny42MjYsNDY3LjM1NDUpIgogICAgICAgICBpZD0iZzMyMzkiPjxwYXRoCiAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICBpZD0icGF0aDMyNDEiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIKICAgICAgICAgICBkPSJNIDAsMCBDIC0zLjA0NCwtMC4zNDUgLTUuMjMyLC0zLjA5MiAtNC44ODgsLTYuMTM2IC00LjU0MywtOS4xOCAxLjU3NiwtMi4yNTQgMTMuMzA4LC00Ljk2MSAxMy45NzEsLTEuOTcgMy4wNDQsMC4zNDQgMCwwIiAvPjwvZz48ZwogICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNzkuNDQxOSw0NzYuNTc2MikiCiAgICAgICAgIGlkPSJnMzI0MyI+PHBhdGgKICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgIGlkPSJwYXRoMzI0NSIKICAgICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICAgIGQ9Ik0gMCwwIEMgMy4yNzEsMS4wOCA2Ljc5OCwtMC42OTcgNy44OCwtMy45NjkgOC45NiwtNy4yNCAtMC41NSwtMy4wNDQgLTExLjI1OCwtMTEuMzI5IC0xMy4zNDUsLTguNTg2IC0zLjI3MiwtMS4wODEgMCwwIiAvPjwvZz48ZwogICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyODQuMTkyOSw1MjUuOTA4MikiCiAgICAgICAgIGlkPSJnMzI2MyI+PHBhdGgKICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgIGlkPSJwYXRoMzI2NSIKICAgICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICAgIGQ9Ik0gMCwwIEMgMCwwIC02Ljk3MiwyOC42NzEgLTYuOTcyLDI5LjM1NSBMIDEuNTg1LDIuODY0IDkuOTk5LC0xMC41NjQgMTMuNjM0LC0zMi42OTcgNy45MjIsLTExLjA5OCAwLDAgeiBNIC0wLjYzMywtMTUuMDM2IC05LjE5LC00Ljg2IC0xNi40NzgsMjUuNzc2IGMgLTAuMjAyLDAuNjg0IDkuMTA2LC0yOC44MTEgOS4xMDYsLTI4LjgxMSBsIDguNjQsLTExLjY0MiAyLjQ2OSwtMTcuMzM2IC00LjM3LDE2Ljk3NyB6IG0gLTYuMzM5LC02LjA4NSAtMTAuNDU3LDE2LjgyNiAtNS40NDQsMjguNjQ2IDYuNjE0LC0yNy44NDIgMTEuMzExLC0xOC4wMjYgMS40MTMsLTkuNTgzIC0zLjQzNyw5Ljk3OSB6IG0gLTUzLjQ2MiwtMTMuMjQ2IC0xLjQzNywyNC45NDQgLTIuNjgyLDI4Ljc1NCA1LjEwNiwtMjkuODk1IDEuMjEyLC0yMS42NzcgNC4xMzksLTE4LjIzNiAtNi4zMzgsMTYuMTEgeiBtIC00LjI2NSwtMTkuNTUgLTYuNjY1LDE1LjUxNiAwLjQwNCwyOS4yMDUgLTAuODgyLDI4LjE2OSAzLjEwNCwtMjguMzk2IDAuODA4LC0yNi42OTcgNC4yNDIsLTE1Ljk3MiAyLjQyMywtNi42MTcgLTMuNDM0LDQuNzkyIHogbSAtOS42OTUsLTIuOTY3IC03LjExNywxNi44ODUgMS4zMTgsMzIuMDEgMCwyNS4yMjMgMi4xMTUsLTI1LjA2MSAtMC41ODEsLTMxLjI1OSA1Ljg2OSwtMTYuNDI5IDUuMDU2LC04LjY3MSAtNi42Niw3LjMwMiB6IG0gMTAzLjE0NCwtNy45NyAtNi42NzYsMjAuMzggMi4xNDEsMTEuNTQgTCAxNi40OTksLTkuMzc2IDQuNTU3LDEzLjEwNCAtNS44NzksNTMuOTcgYyAwLDAgLTguMzI1LC03LjQxIC0xNi43ODEsLTguMDggLTguNDU1LC0wLjY3MSAtMTUuMDksNC4wMTggLTE1LjA5LDQuMDE4IDAsMCAzLjU5MiwtMTcuNzYxIDguNjU5LC0zNy41OTcgNS4wNjksLTE5LjgzNiAxNy41MjgsLTQ0Ljg2NiAxNy41MjgsLTQ0Ljg2NiAwLDAgMjEuNTc4LC04LjE5NyAyNC4zMDIsLTE2LjU4NyAyLjcyNCwtOC4zOTEgLTMuNTA4LC0yMi45MTEgLTE0LjEwMiwtMjYuNTUxIC0xMC41OTMsLTMuNjQgLTMyLjI4NCwtOC4yNjIgLTMyLjI4NCwtOC4yNjIgMCwwIC0xOSwxLjUxMiAtMjAuNDM4LDE0LjI2IDAsMCA0LjEzMSwxNi40MDYgMTAuNDE4LDE5LjIyNSA2LjI4NSwyLjgxOSAyMS4zNjIsMTEuMTc0IDIxLjM2MiwxMS4xNzQgbCAtOC4yNTQsMS4zMzIgLTcuNjY0LC0xLjMzMiBjIDAsMCAtNC43ODQsMTEuMjk1IC0xMC45NzMsMzUuMDg2IC02LjE5LDIzLjc5IC04Ljk2Nyw0Mi40ODUgLTguOTY3LDQyLjQ4NSAwLDAgLTMuOTEyLC00LjM5MSAtMTQuMTk5LC00Ljg4NSAtMTAuMjg2LC0wLjQ5NCAtMTYuMDMxLDcuOTg4IC0xNi4wMzEsNy45ODggbCAxLjAyNywtMzAuMTg1IC0xLjA0OSwtMjUuODMgLTAuMTUsLTI5LjIyIDUuMTAyLC0xNS45OSAxOS44MTgsLTMwLjQ0OCBjIDAsMCAxNC4xMDIsLTkuMjkzIDMxLjcyOCwtOS4yOTMgMTYuNDUzLDEuMzI4IDUxLjEzMSwxOC4wNDcgNTEuMTMxLDE4LjA0NyBsIDkuNTM2LDE2LjY4NyB6IiAvPjwvZz48L2c+PGcKICAgICAgIGlkPSJnMzI2NyIKICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDg0Ny4yNjM3LDMyMS41MDU5KSI+PHBhdGgKICAgICAgICAgZD0ibSAwLDAgYyAyLjI1MiwzLjUxNiA2LjY5MywxNS4zIDYuNjkzLDE1LjMgMCwwIDMuNzc4LC0xMy4zMDYgMS45MTIsLTE3LjIxMyAtMy4wNTYsLTYuNDA0IC0yMy45MDUsLTE1LjMgLTIzLjkwNSwtMTUuMyAwLDAgMTIuMTk2LDEyLjM2NCAxNS4zLDE3LjIxMyBtIC0zMy41MTQsMjMuMTYgLTAuNzU3LDU2LjM1MiBjIDAsMCAxMS4xMzYsLTE0LjAyOCAxMS44NDMsLTE5LjczOSAxLjE3NiwtOS40OTEgLTExLjA4NiwtMzYuNjEzIC0xMS4wODYsLTM2LjYxMyBtIC0xNy41NzUsMjM2LjkyMSBjIDAsMCAxMi40NTMsLTE1LjMzOCAxNC44NTQsLTIxLjM5IDEuNDI0LC0zLjU5MSAyLjI4NiwtMTUuMjg3IDIuMjg2LC0xNS4yODcgbCAtMTcuMTQsMzYuNjc3IHogTSAtOTguNTc0LC04Ni4xMzYgYyAtOS43NTcsLTAuOTA2IC0yOS44MzYsMS4wMTYgLTM4LjkxMiw0LjcwOCAtNy40OTksMy4wNSAtMjUuNzM0LDE5LjY1NiAtMjUuNzM0LDE5LjY1NiBsIDI0LjE4NywtMTAuODYgLTQuNzAxLDE3LjYyNyAxNS4yNzIsLTIyLjAwOSA0MS44MTMsLTUuMzU2IGMgMCwwIC04LjgxMiwtMy40NzcgLTExLjkyNSwtMy43NjYgbSAtNzQuNDI4LDE1Ny45NDEgYyAtNC41MTgsMTAuMDU3IC0xLjc2Myw0NC4wNjUgLTEuNzYzLDQ0LjA2NSAwLDAgNy41NDQsLTMxLjA5MyAxMi4zMzgsLTQwLjU0MSA2Ljk3OCwtMTMuNzU0IDM3LjAxNSwtNDkuMzUyIDM3LjAxNSwtNDkuMzUyIDAsMCAtNDAuODI0LDMwLjc1OSAtNDcuNTksNDUuODI4IG0gLTE3LjgzMywtMTQ5LjQ3IC00MC40MDcsMjQuNzI0IDEuNjM2LC0xNy41NzUgMC4wMjYsLTAuMDM1IC01LjE3OCwtMjkuODExIC0yLjA1NiwtMTAuNzAxIDAuMzgzLC0zMy4zNCAtNC45ODIsMzYuNDA2IDYuNDEsNDEuNDUgLTExLjA2Myw4LjMzOCAtMTcuNTMyLDQzLjE1OSAyMy41MDIsLTM4Ljc3OSAyLjM1MSwxNC4xMDEgNDAuNjM0LC0yNS42OTUgMTEuOTI0LC01LjY1MSAxMy44MDksLTI4Ljg3MSAtMTkuNDU3LDIyLjI4IHogbSAtODUuNTIyLDEzOC44NjMgMTcuMjEyLC0zNC40MjQgYyAwLDAgLTEyLjk3MiwxMS4xODUgLTE1LjI5OSwxNi4yNTcgLTEuOTA1LDQuMTUyIC0xLjkxMywxOC4xNjcgLTEuOTEzLDE4LjE2NyBtIC0yLjM2Nyw2Ni4wNDIgYyAwLDAgLTYuMjA2LDE1LjU4MSAtNi4zMjMsMjEuMDgyIC0wLjE2OCw3LjgxNyA0LjU2OCwyMy4xNDggNy42OTUsMzAuMzE1IDAuNzU1LDEuNzMgNC4xMDMsNi4zNDEgNC4xMDMsNi4zNDEgMCwwIC00LjY1NCwtMjQuNTQyIC01LjM0NywtMzIuODI5IC0wLjUxOCwtNi4yMDUgLTAuMTI4LC0yNC45MDkgLTAuMTI4LC0yNC45MDkgbSAtNy4xOTUsLTExNC44MDkgYyAtMC4zMzQsMy4zNjMgMS45MTIsMTMuMzg3IDEuOTEyLDEzLjM4NyBsIDMuODI1LC0yOS42NDMgYyAwLDAgLTUuMzEzLDExLjk2NyAtNS43MzcsMTYuMjU2IG0gLTIwLjA4Miw1My41NDkgYyAtMS4zOTQsMy41NzEgLTAuOTU2LDE1LjMwMSAtMC45NTYsMTUuMzAxIGwgMTMuMzg4LC0zMC42IGMgMCwwIC0xMC42MzksMTAuNzEgLTEyLjQzMiwxNS4yOTkgbSAtNi4wMywxMDYuNzk1IGMgMCwwIC0wLjMxNSwzNS44MzEgNC42MzcsNDYuMzc5IDQuNTMxLDkuNjQ3IDI5LjkzNiwzMC4zNTYgMjkuOTM2LDMwLjM1NiAwLDAgLTE3LjgyNCwtMjIuNDcgLTIxLjUwMywtMzEuMiAtNS4wODksLTEyLjA3NyAtMTAuMTE5LC01MS40MzcgLTEwLjExOSwtNTEuNDM3IGwgLTIuOTUxLDUuOTAyIHogTSA1MC4xMjEsMjA1LjAxIGMgMy4zMzUsLTkuMTU1IDEuMTY4LC0zOC45NTYgMS4xNjgsLTM4Ljk1NiAwLDAgLTUuNDUxLDI5Ljk4NyAtOS4yMjEsMzkuMzY2IC00LjIxNCwxMC40ODcgLTIzLjAxNCwzOC45MDcgLTIzLjAxNCwzOC45MDcgMCwwIDI2Ljc4LC0yNy41NDYgMzEuMDY3LC0zOS4zMTcgTSA1NC41MDYsOTUuNjI0IGMgMCwwIDYuODg0LC0xOC41ODYgNS43MzgsLTI0Ljg2MSAtMC43NzMsLTQuMjQxIC05LjU2MiwtMTQuMzQ1IC05LjU2MiwtMTQuMzQ1IDAsMCAyLjQxNCwxMi44NzQgMi44NjgsMTcuMjEyIDAuNTczLDUuNDc0IDAuOTU2LDIxLjk5NCAwLjk1NiwyMS45OTQgTSAxOS4xMjUsLTEzLjM4OSBjIDAsMCA5LjY1NiwyMi4xODMgMTEuMDYyLDMwLjA2OCAxLjIzNSw2Ljk0MSAwLDI4LjIwMyAwLDI4LjIwMyAwLDAgOC40NzcsLTIyLjgxOSA3LjEwNiwtMzAuNTM4IEMgMzUuODQ1LDYuMTgzIDE5LjEyNSwtMTMuMzg5IDE5LjEyNSwtMTMuMzg5IG0gNDQxLjQ4NywtNDAuOTY1IGMgLTMuMjQ5LDguOTM1IC02LjU4NywxNy4yMyAtMTAuMDEsMjQuOTI4IGwgLTEuODYyLDI4Ljg3MyAtOC44NTcsLTQuODc2IC0yNS44NjIsNDkuNDU3IC00LjgyOCwtMTAuMzQgYyAtMzIuNjksMzEuNDggLTcwLjQ1NywzNC4yODQgLTExMS45ODIsMzEuNjQ2IC02NS41NjgsLTQuMTYzIC05MS41ODcsLTQxLjYzIC03OS4wOTgsLTU3LjI0MSAxMi40OSwtMTUuNjEzIDE4LjczMywtNS4yMDUgNDAuNTg5LDUuMjAzIDIxLjg1OCwxMC40MDcgNzQuOTM3LDI2LjAxNyAxMTAuMzIzLC0yLjA4MiAzNS4zODYsLTI4LjEgODYuMzgzLC0xMDkuMjgxIDUwLjk5NywtMTY5LjY0NiAtMzUuMzg2LC02MC4zNjUgLTEwNS42MjYsLTEwNS4zODUgLTE4Mi4xMzUsLTg4LjQ2NSAtODYuNDIyLDE5LjExMiAtMTI2LjA3OCw2MC4wODIgLTE3Ny42NzUsNzQuODExIC04LjMxMSwxLjMzNCAtMTguMzQ3LDIuNzg5IC0yNC43OTEsMy4xOTEgLTEyLjY3MSwwLjc5MiAtMjEuNiwxNC43MjcgLTIxLjYsMTQuNzI3IGwgMTcuMTgxLC05LjMyNyAyNS43NjMsLTIuMzYgYyAyLjMzMSwxNCA5LjM5NSw0OS4wNTQgOS4zOTUsNDkuMDU0IGwgLTguNjg4LDg3LjI5IC0xOC42NjgsLTI3LjA2IC03LjI0NiwxMC4xODQgLTIxLjM0OSwtMjIuOTE1IC0xNS40NzMsLTEuOTU5IDE0LjY3LDYuNTk2IDIxLjM4LDI5LjQwOSA2LjcsLTEzLjc1NCAxOS40ODUsMjQuNjkxIDAuMDA0LC0wLjAxMSAxNi40Nyw5LjUyNSAtMy4xMjMsNjguNjkgMTAuNDA3LC0xMC40MDcgLTQuMTYzLDQwLjU5IDIyLjE3Myw3MS41MDIgLTM0LjY2Miw5MS44OTkgMTYuNjUyLC00LjE2MiAtMTkuNzczLDM1LjM4NiAtNDAuNTkxLDM4LjUwOSA5LjM2OCwxNy42OTMgLTkzLjY3MSw5LjM2OCAtMjAuMjI5LC03LjE2NSAtMTguNDM3LDM4LjI5MiAxMy4yMiw4LjgxMyAtNjkuMDM5LDE0LjY5IDIuOTM4LDE5LjA5NSAtODAuNzkxLC0yMy4zMDMgLTI2LjE0NywtMTkuMTkxIC0xMTYuMzM5LDAgOC44MTQsLTEwLjE4OCAtNDIuNTAxLC00MC42NDEgLTguOTExLC03OC40OTEgNy4zNDQsLTEuNDk0IDguODE0LC00NS41NDggMjMuNTAyLC0yNC45NzggMTkuMDk2LDQ1LjUzMyAtMTQuNjg5LC00LjQwOSA0MS4xMyw0OC40NzQgMzAuODQ4LDI2LjQ0IC0xNC42OSwtMS40NjkgMTkuMDk2LDE2LjE1OCAxMDUuNzYzLDIuOTM4IDcyLjkxNywxNS43OTkgLTQxLjYyMywtMTQuNzQyIC0zMC4xODEsLTcuMjg1IC0xMDQuMDc5LC0xLjA0MyAxLjA0LC0xMS40NDkgLTY0LjUyNiwtNjEuNDAzIDE0LjU3MSwyLjA4MSAtMjcuODQ0LC02My4yOCBjIC0xNS4wMTcsLTEzLjcxOSAtMjguMDYsLTU1LjAxNiAtMzYuNjg3LC03NS4xNDUgLTkuMzY3LC0yMS44NTYgLTIwLjgxNiwtMzkuNTUgLTIwLjgxNiwtMzkuNTUgMCwwIC0zMC4xODIsLTYuMjQ0IC02MS40MDUsLTE4LjczNCAtMzEuMjI0LC0xMi40ODkgLTQzLjcxMyw0LjE2MyAtNDMuNzEzLDQuMTYzIGwgLTMuMTIyLC04LjMyNiBjIDAsMCAtMTguMjgsLTkuMDU3IC0zOS4zMDMsLTExLjgyNSAtMTYuNDMsLTIuMTYyIC05Ljk2NywtMjAuOTQ2IC05LjYxMywtMjYuNjg0IDAuNDA1LC02LjU3IDQuMjk0LC0xOS43NzQgOC4zMjUsLTI0Ljk3OCAzLjIyNywtNC4xNjUgMTIuNTI1LC0xMC40MjUgMTcuNjk0LC0xMS40NDggMTIuMDM5LC0yLjM4NSAyOC4xMDEsNS4yMDQgNDUuNzk0LDE3LjY5MyA3NC45MzYsLTYuMjQ1IDEwMy4yNDEsLTEwLjMyMSAxMjYuOTc0LDguMzI2IDE0LjU3MiwxMS40NDggMjkuMTQyLDIyLjg5NyA0MS42MzEsNDAuNTkgbCAtMTUuNjExLDQyLjY3MSAtOC4zMjcsLTE0LjU2OSAtNS44MDcsNDQuOTMxIDEuODQxLDE3Ljg2MyA1LjU0NywtNTEuMjM0IDcuNzg5LDkuMjU3IDM1LjM4NywtNzAuNzcyIDExLjQ0OCw0LjE2NCBjIDAsMCAxMy41MTUsLTE4LjU4MyAyMy4wNTcsLTMyLjg4MSBsIC0yNi4wMiwyNS4wMDYgLTEwLjIyNCwtNS45NjQgLTExLjA3NiwyMi4xNTIgYyAwLDAgLTEzLjM4MywtMi4zNTMgLTI0LjcyNywtMTguMDI3IC0xNS44NjIsLTIxLjkxNSAtMjMuNTAzLC0yNC42NzggLTE3LjYyNywtNzguNzM1IDUuODc2LC01NC4wNTUgMTYuNDUyLC01NC4wNTUgNjQuNjMyLC0xMjEuMDM5IDExLjc1MiwtMTYuNDUyIDE0LjYwMSwtMTguNDY1IDE0LjYwMSwtMTguNDY1IGwgLTUxLjAzLC0yNy4zNjUgLTIyLjMyNywtNS44NzYgLTIxLjM4NCwtMTEuMjggYyAwLDAgNC43NDQsLTguMTc0IDcuNDk1LC05LjM2OSA0LjczOSwtMi4wNjIgMjAuNjEzLDEuNTYgMjAuNjEzLDEuNTYgMCwwIDE1LjYwMywtNi43NjMgMzYuNzU2LC02Ljc2MyAyMS4xNTIsMCAzMi45MDMsOC4yMjUgNDcuMDA1LDguMjI1IDE0LjEwMSwwIDM4Ljc4LC04LjIyNSA1Ny41ODIsLTUuODc2IDE4LjgwMiwyLjM1MSAyMi4zMjgsMTIuOTI3IDIyLjMyOCwxMi45MjcgbCAtNTEuNzA2LDU0LjA1NyAtNC42NzUsNDcuMDk2IC01Ni42MDUsNzUuNzY5IC0zLjAzOCw5LjQzNyA2NS43OTEsLTgyLjI0IDUuMTA3LC00Ni43NSA1NS4xNjEsLTYxLjQwNSAzNy40NjgsLTguMzI1IGMgMCwwIC0wLjI1NywxLjIyNiAtMC42MjUsMy4xMTQgLTYuMTQ2LDE1LjY2NCAtNi45ODYsMzQuODk0IC0xLjk5OSw1NC4yMTQgNi45NzUsMjcuMDEyIDM4Ljg1LDM2LjU5NiA2NC4wMjksMzYuNTk2IDEyLjUwNiwwIDI0LjE3OSwtMi4zMTIgMzIuMDI1LC02LjM0MSAxMi45MTIsLTYuNjMgMjEuODUxLC0xNS4wNzYgMjcuMDI5LC0yMC45MTcgMy42NzMsNC41MTYgNy4xMzMsNy4xOTQgMTEuODMzLDExLjExIDAsMCAxMi4xNDMsLTExLjc1MSA0NS4wNDcsLTE0LjEwMSAyNy4xNCwtMS45MzkgNDUuMDQ4LC04LjIyNiA3MC45MDEsLTE5LjU4NSA1My42NzYsLTIzLjU4NCAxMDIuNSwtNjEuNzg1IDIwNy42MTgsLTQ1LjEzMiAxMDUuMTE5LDE2LjY1MSAyMDYuMDczLDExMy40NDQgMTY0LjQ0MiwyMjcuOTI5IgogICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICBpZD0icGF0aDMyNjkiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+PC9nPjxwYXRoCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIKICAgICAgIGQ9Im0gMzI5LjI2Mzk4LDcyMy4zMDgyIC0xMTguMDI1LC0xOS4yIC0xMjAuODAwMDAzLC0yOC4xNzUgNzIuNjAwMDAzLC0yODEuNjUgMTE1LjA3NSw3Ljg3NSA5NS4yNzUsNTAuNjUgLTQ0LjEyNSwyNzAuNSB6IG0gLTYuNTUsLTEwLjU3NSA0MC42NzUsLTI1Mi40IC04Ny44NSwtNDcuMjc1IC0xMDYuMTI1LC03LjMyNSAtNjYuOTUsMjYyLjggMTExLjQsMjYuMjc1IDEwOC44NSwxNy45MjUgeiIKICAgICAgIGlkPSJwYXRoMzI1My0zIiAvPjwvZz48L3N2Zz4=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/doc/compress.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IENvbXByZXNzaW9uIEhlbHBlcjwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJodHRwOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1Ecm9pZCtTYW5zfERyb2lkK1NhbnM6Ym9sZCIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iZG9jcy5jc3MiLz4KICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ii8+CiAgPC9oZWFkPgogIDxib2R5PgoKPGgxPjxzcGFuIGNsYXNzPSJsb2dvLWJyYWNlcyI+eyB9PC9zcGFuPiA8YSBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvIj5Db2RlTWlycm9yPC9hPjwvaDE+Cgo8cHJlIGNsYXNzPSJncmV5Ij4KPGltZyBzcmM9ImJhYm9vbi5wbmciIGNsYXNzPSJsb2dvIiBhbHQ9ImxvZ28iLz4vKiBTY3JpcHQgY29tcHJlc3Npb24KICAgaGVscGVyICovCjwvcHJlPgoKICAgIDxwPlRvIG9wdGltaXplIGxvYWRpbmcgQ29kZU1pcnJvciwgZXNwZWNpYWxseSB3aGVuIGluY2x1ZGluZyBhCiAgICBidW5jaCBvZiBkaWZmZXJlbnQgbW9kZXMsIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IGNvbWJpbmUgYW5kCiAgICBtaW5pZnkgKGFuZCBwcmVmZXJhYmx5IGFsc28gZ3ppcCkgdGhlIHNjcmlwdHMuIFRoaXMgcGFnZSBtYWtlcwogICAgdGhvc2UgZmlyc3QgdHdvIHN0ZXBzIHZlcnkgZWFzeS4gU2ltcGx5IHNlbGVjdCB0aGUgdmVyc2lvbiBhbmQKICAgIHNjcmlwdHMgeW91IG5lZWQgaW4gdGhlIGZvcm0gYmVsb3csIGFuZAogICAgY2xpY2sgPHN0cm9uZz5Db21wcmVzczwvc3Ryb25nPiB0byBkb3dubG9hZCB0aGUgbWluaWZpZWQgc2NyaXB0CiAgICBmaWxlLjwvcD4KCiAgICA8Zm9ybSBpZD0iZm9ybSIgYWN0aW9uPSJodHRwOi8vbWFyaWpuaGF2ZXJiZWtlLm5sL3VnbGlmeWpzIiBtZXRob2Q9InBvc3QiPgogICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBpZD0iZG93bmxvYWQiIG5hbWU9ImRvd25sb2FkIiB2YWx1ZT0iY29kZW1pcnJvci1jb21wcmVzc2VkLmpzIi8+CiAgICAgIDxwPlZlcnNpb246IDxzZWxlY3QgaWQ9InZlcnNpb24iIG9uY2hhbmdlPSJzZXRWZXJzaW9uKHRoaXMpOyIgc3R5bGU9InBhZGRpbmc6IDFweCI+CiAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0LyI+SEVBRDwvb3B0aW9uPgogICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9tYXJpam5oYXZlcmJla2UubmwvZ2l0L2NvZGVtaXJyb3IyP2E9YmxvYl9wbGFpbjtoYj12Mi4yMTtmPSI+Mi4yMTwvb3B0aW9uPgogICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9tYXJpam5oYXZlcmJla2UubmwvZ2l0L2NvZGVtaXJyb3IyP2E9YmxvYl9wbGFpbjtoYj12Mi4yO2Y9Ij4yLjI8L29wdGlvbj4KICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vbWFyaWpuaGF2ZXJiZWtlLm5sL2dpdC9jb2RlbWlycm9yMj9hPWJsb2JfcGxhaW47aGI9djIuMTg7Zj0iPjIuMTg8L29wdGlvbj4KICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vbWFyaWpuaGF2ZXJiZWtlLm5sL2dpdC9jb2RlbWlycm9yMj9hPWJsb2JfcGxhaW47aGI9djIuMTY7Zj0iPjIuMTY8L29wdGlvbj4KICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vbWFyaWpuaGF2ZXJiZWtlLm5sL2dpdC9jb2RlbWlycm9yMj9hPWJsb2JfcGxhaW47aGI9djIuMTU7Zj0iPjIuMTU8L29wdGlvbj4KICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vbWFyaWpuaGF2ZXJiZWtlLm5sL2dpdC9jb2RlbWlycm9yMj9hPWJsb2JfcGxhaW47aGI9djIuMTM7Zj0iPjIuMTM8L29wdGlvbj4KICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vbWFyaWpuaGF2ZXJiZWtlLm5sL2dpdC9jb2RlbWlycm9yMj9hPWJsb2JfcGxhaW47aGI9djIuMTI7Zj0iPjIuMTI8L29wdGlvbj4KICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vbWFyaWpuaGF2ZXJiZWtlLm5sL2dpdC9jb2RlbWlycm9yMj9hPWJsb2JfcGxhaW47aGI9djIuMTE7Zj0iPjIuMTE8L29wdGlvbj4KICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vbWFyaWpuaGF2ZXJiZWtlLm5sL2dpdC9jb2RlbWlycm9yMj9hPWJsb2JfcGxhaW47aGI9djIuMTtmPSI+Mi4xPC9vcHRpb24+CiAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL21hcmlqbmhhdmVyYmVrZS5ubC9naXQvY29kZW1pcnJvcjI/YT1ibG9iX3BsYWluO2hiPXYyLjAyO2Y9Ij4yLjAyPC9vcHRpb24+CiAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL21hcmlqbmhhdmVyYmVrZS5ubC9naXQvY29kZW1pcnJvcjI/YT1ibG9iX3BsYWluO2hiPXYyLjAxO2Y9Ij4yLjAxPC9vcHRpb24+CiAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL21hcmlqbmhhdmVyYmVrZS5ubC9naXQvY29kZW1pcnJvcjI/YT1ibG9iX3BsYWluO2hiPXYyLjA7Zj0iPjIuMDwvb3B0aW9uPgogICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9tYXJpam5oYXZlcmJla2UubmwvZ2l0L2NvZGVtaXJyb3IyP2E9YmxvYl9wbGFpbjtoYj1iZXRhMjtmPSI+YmV0YTI8L29wdGlvbj4KICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vbWFyaWpuaGF2ZXJiZWtlLm5sL2dpdC9jb2RlbWlycm9yMj9hPWJsb2JfcGxhaW47aGI9YmV0YTE7Zj0iPmJldGExPC9vcHRpb24+CiAgICAgIDwvc2VsZWN0PjwvcD4KCiAgICAgIDxzZWxlY3QgbXVsdGlwbGU9Im11bHRpcGxlIiBuYW1lPSJjb2RlX3VybCIgc3R5bGU9IndpZHRoOiA0MGVtOyIgY2xhc3M9ImZpZWxkIiBpZD0iZmlsZXMiPgogICAgICAgIDxvcHRncm91cCBsYWJlbD0iQ29kZU1pcnJvciBMaWJyYXJ5Ij4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9saWIvY29kZW1pcnJvci5qcyIgc2VsZWN0ZWQ+Y29kZW1pcnJvci5qczwvb3B0aW9uPgogICAgICAgIDwvb3B0Z3JvdXA+CiAgICAgICAgPG9wdGdyb3VwIGxhYmVsPSJNb2RlcyI+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS9jbGlrZS9jbGlrZS5qcyI+Y2xpa2UuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL2Nsb2p1cmUvY2xvanVyZS5qcyI+Y2xvanVyZS5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvY29mZmVlc2NyaXB0L2NvZmZlZXNjcmlwdC5qcyI+Y29mZmVlc2NyaXB0LmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS9jc3MvY3NzLmpzIj5jc3MuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL2RpZmYvZGlmZi5qcyI+ZGlmZi5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvZ2ZtL2dmbS5qcyI+Z2ZtLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS9nby9nby5qcyI+Z28uanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL2dyb292eS9ncm9vdnkuanMiPmdyb292eS5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvaGFza2VsbC9oYXNrZWxsLmpzIj5oYXNrZWxsLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS9odG1sZW1iZWRkZWQvaHRtbGVtYmVkZGVkLmpzIj5odG1sZW1iZWRkZWQuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL2h0bWxtaXhlZC9odG1sbWl4ZWQuanMiPmh0bWxtaXhlZC5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvamF2YXNjcmlwdC9qYXZhc2NyaXB0LmpzIj5qYXZhc2NyaXB0LmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS9qaW5qYTIvamluamEyLmpzIj5qaW5qYTIuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL2xlc3MvbGVzcy5qcyI+bGVzcy5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvbHVhL2x1YS5qcyI+bHVhLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS9tYXJrZG93bi9tYXJrZG93bi5qcyI+bWFya2Rvd24uanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL215c3FsL215c3FsLmpzIj5teXNxbC5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvbnRyaXBsZXMvbnRyaXBsZXMuanMiPm50cmlwbGVzLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS9wYXNjYWwvcGFzY2FsLmpzIj5wYXNjYWwuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL3BlcmwvcGVybC5qcyI+cGVybC5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvcGhwL3BocC5qcyI+cGhwLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS9wbHNxbC9wbHNxbC5qcyI+cGxzcWwuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL3B5dGhvbi9weXRob24uanMiPnB5dGhvbi5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvci9yLmpzIj5yLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS9ycG0vY2hhbmdlcy9jaGFuZ2VzLmpzIj5ycG0vY2hhbmdlcy5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvcnBtL3NwZWMvc3BlYy5qcyI+cnBtL3NwZWMuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL3JzdC9yc3QuanMiPnJzdC5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvcnVieS9ydWJ5LmpzIj5ydWJ5LmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS9ydXN0L3J1c3QuanMiPnJ1c3QuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL3NjaGVtZS9zY2hlbWUuanMiPnNjaGVtZS5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvc21hbGx0YWxrL3NtYWxsdGFsay5qcyI+c21hbGx0YWxrLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS9zcGFycWwvc3BhcnFsLmpzIj5zcGFycWwuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL3N0ZXgvc3RleC5qcyI+c3RleC5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvdGlkZGx5d2lraS90aWRkbHl3aWtpLmpzIj50aWRkbHl3aWtpLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS92ZWxvY2l0eS92ZWxvY2l0eS5qcyI+dmVsb2NpdHkuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL3Zlcmlsb2cvdmVyaWxvZy5qcyI+dmVyaWxvZy5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUveG1sL3htbC5qcyI+eG1sLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS95YW1sL3lhbWwuanMiPnlhbWwuanM8L29wdGlvbj4KICAgICAgICA8L29wdGdyb3VwPgogICAgICAgIDxvcHRncm91cCBsYWJlbD0iVXRpbGl0aWVzIGFuZCBhZGQtb25zIj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9saWIvdXRpbC9vdmVybGF5LmpzIj5vdmVybGF5LmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbGliL3V0aWwvcnVubW9kZS5qcyI+cnVubW9kZS5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2xpYi91dGlsL3NpbXBsZS1oaW50LmpzIj5zaW1wbGUtaGludC5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2xpYi91dGlsL2phdmFzY3JpcHQtaGludC5qcyI+amF2YXNjcmlwdC1oaW50LmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbGliL3V0aWwvZm9sZGNvZGUuanMiPmNvZGVmb2xkLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbGliL3V0aWwvZGlhbG9nLmpzIj5kaWFsb2cuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9saWIvdXRpbC9zZWFyY2guanMiPnNlYXJjaC5qczwvb3B0aW9uPgogICAgICAgIDwvb3B0Z3JvdXA+CiAgICAgICAgPG9wdGdyb3VwIGxhYmVsPSJLZXltYXBzIj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9rZXltYXAvZW1hY3MuanMiPmVtYWNzLmpzPC9vcHRpb24+CiAgICAgICAgPC9vcHRncm91cD4KICAgICAgPC9zZWxlY3Q+PC9wPgoKICAgICAgPHA+CiAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiPkNvbXByZXNzPC9idXR0b24+IHdpdGggPGEgaHJlZj0iaHR0cDovL2dpdGh1Yi5jb20vbWlzaG9vL1VnbGlmeUpTLyI+VWdsaWZ5SlM8L2E+CiAgICAgIDwvcD4KCiAgICAgIDxwPkN1c3RvbSBjb2RlIHRvIGFkZCB0byB0aGUgY29tcHJlc3NlZCBmaWxlOjx0ZXh0YXJlYSBuYW1lPSJqc19jb2RlIiBzdHlsZT0id2lkdGg6IDEwMCU7IGhlaWdodDogMTVlbTsiIGNsYXNzPSJmaWVsZCI+PC90ZXh0YXJlYT48L3A+CiAgICA8L2Zvcm0+CgogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogICAgICBmdW5jdGlvbiBzZXRWZXJzaW9uKHZlcikgewogICAgICAgIHZhciB1cmxwcmVmaXggPSB2ZXIub3B0aW9uc1t2ZXIuc2VsZWN0ZWRJbmRleF0udmFsdWU7CiAgICAgICAgdmFyIHNlbGVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmaWxlcyIpLCBtOwogICAgICAgIGZvciAodmFyIG9wdGdyID0gc2VsZWN0LmZpcnN0Q2hpbGQ7IG9wdGdyOyBvcHRnciA9IG9wdGdyLm5leHRTaWJsaW5nKQogICAgICAgICAgZm9yICh2YXIgb3B0ID0gb3B0Z3IuZmlyc3RDaGlsZDsgb3B0OyBvcHQgPSBvcHQubmV4dFNpYmxpbmcpIHsKICAgICAgICAgICAgaWYgKG9wdC5ub2RlTmFtZSAhPSAiT1BUSU9OIikKICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgZWxzZSBpZiAobSA9IG9wdC52YWx1ZS5tYXRjaCgvXmh0dHA6XC9cL2NvZGVtaXJyb3IubmV0XC8oLiopJC8pKQogICAgICAgICAgICAgIG9wdC52YWx1ZSA9IHVybHByZWZpeCArIG1bMV07CiAgICAgICAgICAgIGVsc2UgaWYgKG0gPSBvcHQudmFsdWUubWF0Y2goL2h0dHA6XC9cL21hcmlqbmhhdmVyYmVrZS5ubFwvZ2l0XC9jb2RlbWlycm9yXD9hPWJsb2JfcGxhaW47aGI9W147XSs7Zj0oLiopJC8pKQogICAgICAgICAgICAgIG9wdC52YWx1ZSA9IHVybHByZWZpeCArIG1bMV07CiAgICAgICAgICB9CiAgICAgICB9CiAgICA8L3NjcmlwdD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/doc/docs.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ym9keSB7CiAgZm9udC1mYW1pbHk6IERyb2lkIFNhbnMsIEFyaWFsLCBzYW5zLXNlcmlmOwogIGxpbmUtaGVpZ2h0OiAxLjU7CiAgbWF4LXdpZHRoOiA2NC4zZW07CiAgbWFyZ2luOiAzZW0gYXV0bzsKICBwYWRkaW5nOiAwIDFlbTsKfQoKaDEgewogIGxldHRlci1zcGFjaW5nOiAtM3B4OwogIGZvbnQtc2l6ZTogMy4yM2VtOwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIG1hcmdpbjogMDsKfQoKaDIgewogIGZvbnQtc2l6ZTogMS4yM2VtOwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIG1hcmdpbjogLjVlbSAwOwogIGxldHRlci1zcGFjaW5nOiAtMXB4Owp9CgpoMyB7CiAgZm9udC1zaXplOiAxZW07CiAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgbWFyZ2luOiAuNGVtIDA7Cn0KCnByZSB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKICAtbW96LWJvcmRlci1yYWRpdXM6IDZweDsKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDZweDsKICBib3JkZXItcmFkaXVzOiA2cHg7CiAgcGFkZGluZzogMWVtOwp9CgpwcmUuY29kZSB7CiAgbWFyZ2luOiAwIDFlbTsKfQoKLmdyZXkgewogIGZvbnQtc2l6ZTogMi4yZW07CiAgcGFkZGluZzogLjVlbSAxZW07CiAgbGluZS1oZWlnaHQ6IDEuMmVtOwogIG1hcmdpbi10b3A6IC41ZW07CiAgcG9zaXRpb246IHJlbGF0aXZlOwp9CgppbWcubG9nbyB7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHJpZ2h0OiAtMjVweDsKICBib3R0b206IDRweDsKfQoKYTpsaW5rLCBhOnZpc2l0ZWQsIC5xdWFzaWxpbmsgewogIGNvbG9yOiAjZGYwMDE5OwogIGN1cnNvcjogcG9pbnRlcjsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cn0KCmE6aG92ZXIsIC5xdWFzaWxpbms6aG92ZXIgewogIGNvbG9yOiAjODAwMDA0Owp9CgpoMSBhOmxpbmssIGgxIGE6dmlzaXRlZCwgaDEgYTpob3ZlciB7CiAgY29sb3I6IGJsYWNrOwp9Cgp1bCB7CiAgbWFyZ2luOiAwOwogIHBhZGRpbmctbGVmdDogMS4yZW07Cn0KCmEuZG93bmxvYWQgewogIGNvbG9yOiB3aGl0ZTsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGYwMDE5OwogIHdpZHRoOiAxMDAlOwogIGRpc3BsYXk6IGJsb2NrOwogIHRleHQtYWxpZ246IGNlbnRlcjsKICBmb250LXNpemU6IDEuMjNlbTsKICBmb250LXdlaWdodDogYm9sZDsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgLW1vei1ib3JkZXItcmFkaXVzOiA2cHg7CiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA2cHg7CiAgYm9yZGVyLXJhZGl1czogNnB4OwogIHBhZGRpbmc6IC41ZW0gMDsKICBtYXJnaW4tYm90dG9tOiAxZW07Cn0KCmEuZG93bmxvYWQ6aG92ZXIgewogIGJhY2tncm91bmQtY29sb3I6ICNiYjAwMTA7Cn0KCi5yZWwgewogIG1hcmdpbi1ib3R0b206IDA7Cn0KCi5yZWwtbm90ZSB7CiAgY29sb3I6ICM3Nzc7CiAgZm9udC1zaXplOiAuOWVtOwogIG1hcmdpbi10b3A6IC4xZW07Cn0KCi5sb2dvLWJyYWNlcyB7CiAgY29sb3I6ICNkZjAwMTk7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIHRvcDogLTRweDsKfQoKLmJsayB7CiAgZmxvYXQ6IGxlZnQ7Cn0KCi5sZWZ0IHsKICB3aWR0aDogMzdlbTsKICBwYWRkaW5nLXJpZ2h0OiA2LjUzZW07CiAgcGFkZGluZy1ib3R0b206IDFlbTsKfQoKLmxlZnQxIHsKICB3aWR0aDogMTUuMjRlbTsKICBwYWRkaW5nLXJpZ2h0OiA2LjQ1ZW07Cn0KCi5sZWZ0MiB7CiAgd2lkdGg6IDE1LjI0ZW07Cn0KCi5yaWdodCB7CiAgd2lkdGg6IDIwLjY4ZW07Cn0KCi5sZWZ0YmlnIHsKICB3aWR0aDogNDIuNDRlbTsKICBwYWRkaW5nLXJpZ2h0OiA2LjUzZW07Cn0KCi5yaWdodHNtYWxsIHsKICB3aWR0aDogMTUuMjRlbTsKfQoKLmNsZWFyOmFmdGVyIHsKICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgZGlzcGxheTogYmxvY2s7CiAgZm9udC1zaXplOiAwOwogIGNvbnRlbnQ6ICIgIjsKICBjbGVhcjogYm90aDsKICBoZWlnaHQ6IDA7Cn0KLmNsZWFyIHsgZGlzcGxheTogaW5saW5lLWJsb2NrOyB9Ci8qIHN0YXJ0IGNvbW1lbnRlZCBiYWNrc2xhc2ggaGFjayBcKi8KKiBodG1sIC5jbGVhciB7IGhlaWdodDogMSU7IH0KLmNsZWFyIHsgZGlzcGxheTogYmxvY2s7IH0KLyogY2xvc2UgY29tbWVudGVkIGJhY2tzbGFzaCBoYWNrICovCg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/doc/internals.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEludGVybmFsczwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJodHRwOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1Ecm9pZCtTYW5zfERyb2lkK1NhbnM6Ym9sZCIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iZG9jcy5jc3MiLz4KICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ii8+CiAgICA8c3R5bGU+ZGwgZGwge21hcmdpbjogMDt9IC51cGRhdGUge2NvbG9yOiAjZDQwICFpbXBvcnRhbnR9PC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+Cgo8aDE+PHNwYW4gY2xhc3M9ImxvZ28tYnJhY2VzIj57IH08L3NwYW4+IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC8iPkNvZGVNaXJyb3I8L2E+PC9oMT4KCjxwcmUgY2xhc3M9ImdyZXkiPgo8aW1nIHNyYz0iYmFib29uLnBuZyIgY2xhc3M9ImxvZ28iIGFsdD0ibG9nbyIvPi8qIChSZS0pIEltcGxlbWVudGluZyBBIFN5bnRheC0KICAgSGlnaGxpZ2h0aW5nIEVkaXRvciBpbiBKYXZhU2NyaXB0ICovCjwvcHJlPgoKPGRpdiBjbGFzcz0iY2xlYXIiPjxkaXYgY2xhc3M9ImxlZnRiaWcgYmxrIj4KCjxwIHN0eWxlPSJmb250LXNpemU6IDg1JSIgaWQ9ImludHJvIj4KICA8c3Ryb25nPlRvcGljOjwvc3Ryb25nPiBKYXZhU2NyaXB0LCBjb2RlIGVkaXRvciBpbXBsZW1lbnRhdGlvbjxicj4KICA8c3Ryb25nPkF1dGhvcjo8L3N0cm9uZz4gTWFyaWpuIEhhdmVyYmVrZTxicj4KICA8c3Ryb25nPkRhdGU6PC9zdHJvbmc+IE1hcmNoIDJuZCAyMDExICh1cGRhdGVkIE5vdmVtYmVyIDEzdGggMjAxMSkKPC9wPgoKPHA+VGhpcyBpcyBhIGZvbGxvd3VwIHRvCm15IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9zdG9yeS5odG1sIj5CcnV0YWwgT2R5c3NleSB0byB0aGUKRGFyayBTaWRlIG9mIHRoZSBET00gVHJlZTwvYT4gc3RvcnkuIFRoYXQgb25lIGRlc2NyaWJlcyB0aGUKbWluZC1iZW5kaW5nIHByb2Nlc3Mgb2YgaW1wbGVtZW50aW5nICh3aGF0IHdvdWxkIGJlY29tZSkgQ29kZU1pcnJvciAxLgpUaGlzIG9uZSBkZXNjcmliZXMgdGhlIGludGVybmFscyBvZiBDb2RlTWlycm9yIDIsIGEgY29tcGxldGUgcmV3cml0ZQphbmQgcmV0aGluayBvZiB0aGUgb2xkIGNvZGUgYmFzZS4gSSB3YW50ZWQgdG8gZ2l2ZSB0aGlzIHBpZWNlIGFub3RoZXIKSHVudGVyIFRob21wc29uIGNvcHljYXQgc3VidGl0bGUsIGJ1dCBzb21laG93IHRoYXQgd291bGQgYmUgb3V0IG9mCnBsYWNl4oCUdGhlIHByb2Nlc3MgdGhpcyB0aW1lIGFyb3VuZCB3YXMgb25lIG9mIHN0cmFpZ2h0Zm9yd2FyZAplbmdpbmVlcmluZywgcmVxdWlyaW5nIG5vIHNlcmlvdXMgbWluZC1iZW5kaW5nIHdoYXRzb2V2ZXIuPC9wPgoKPHA+U28sIHdoYXQgaXMgd3Jvbmcgd2l0aCBDb2RlTWlycm9yIDE/IEknZCBlc3RpbWF0ZSwgYnkgbWFpbGluZyBsaXN0CmFjdGl2aXR5IGFuZCBnZW5lcmFsIHNlYXJjaC1lbmdpbmUgcHJlc2VuY2UsIHRoYXQgaXQgaGFzIGJlZW4KaW50ZWdyYXRlZCBpbnRvIGFib3V0IGEgdGhvdXNhbmQgc3lzdGVtcyBieSBub3cuIFRoZSBtb3N0IHByb21pbmVudApvbmUsIHNpbmNlIGEgZmV3IHdlZWtzLApiZWluZyA8YSBocmVmPSJodHRwOi8vZ29vZ2xlY29kZS5ibG9nc3BvdC5jb20vMjAxMS8wMS9tYWtlLXF1aWNrLWZpeGVzLXF1aWNrZXItb24tZ29vZ2xlLmh0bWwiPkdvb2dsZQpjb2RlJ3MgcHJvamVjdCBob3N0aW5nPC9hPi4gSXQgd29ya3MsIGFuZCBpdCdzIGJlaW5nIHVzZWQgd2lkZWx5LjwvYT4KCjxwPlN0aWxsLCBJIGRpZCBub3Qgc3RhcnQgcmVwbGFjaW5nIGl0IGJlY2F1c2UgSSB3YXMgYm9yZWQuIENvZGVNaXJyb3IKMSB3YXMgaGVhdmlseSByZWxpYW50IG9uIDxjb2RlPmRlc2lnbk1vZGU8L2NvZGU+Cm9yIDxjb2RlPmNvbnRlbnRFZGl0YWJsZTwvY29kZT4gKGRlcGVuZGluZyBvbiB0aGUgYnJvd3NlcikuIE5laXRoZXIgb2YKdGhlc2UgYXJlIHdlbGwgc3BlY2lmaWVkIChIVE1MNSB0cmllcwp0byA8YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNS9lZGl0aW5nLmh0bWwjY29udGVudGVkaXRhYmxlIj5zcGVjaWZ5PC9hPgp0aGVpciBiYXNpY3MpLCBhbmQsIG1vcmUgaW1wb3J0YW50bHksIHRoZXkgdGVuZCB0byBiZSBvbmUgb2YgdGhlIG1vcmUKb2JzY3VyZSBhbmQgYnVnZ3kgYXJlYXMgb2YgYnJvd3NlciBmdW5jdGlvbmFsaXR54oCUQ29kZU1pcnJvciwgYnkgdXNpbmcKdGhpcyBmdW5jdGlvbmFsaXR5IGluIGEgbm9uLXR5cGljYWwgd2F5LCB3YXMgY29uc3RhbnRseSBydW5uaW5nIHVwCmFnYWluc3QgYnJvd3NlciBidWdzLiBXZWJLaXQgd291bGRuJ3Qgc2hvdyBhbiBlbXB0eSBsaW5lIGF0IHRoZSBlbmQgb2YKdGhlIGRvY3VtZW50LCBhbmQgaW4gc29tZSByZWxlYXNlcyB3b3VsZCBzdWRkZW5seSBnZXQgdW5iZWFyYWJseSBzbG93LgpGaXJlZm94IHdvdWxkIHNob3cgdGhlIGN1cnNvciBpbiB0aGUgd3JvbmcgcGxhY2UuIEludGVybmV0IEV4cGxvcmVyCndvdWxkIGluc2lzdCBvbiBsaW5raWZ5aW5nIGV2ZXJ5dGhpbmcgdGhhdCBsb29rZWQgbGlrZSBhIFVSTCBvciBlbWFpbAphZGRyZXNzLCBhIGJlaGF2aW91ciB0aGF0IGNhbid0IGJlIHR1cm5lZCBvZmYuIFNvbWUgYnVncyBJIG1hbmFnZWQgdG8Kd29yayBhcm91bmQgKHdoaWNoIHdhcyBvZnRlbiBhIGZydXN0cmF0aW5nLCBwYWluZnVsIHByb2Nlc3MpLCBvdGhlcnMsCnN1Y2ggYXMgdGhlIEZpcmVmb3ggY3Vyc29yIHBsYWNlbWVudCwgSSBnYXZlIHVwIG9uLCBhbmQgaGFkIHRvIHRlbGwKdXNlciBhZnRlciB1c2VyIHRoYXQgdGhleSB3ZXJlIGtub3duIHByb2JsZW1zLCBidXQgbm90IHNvbWV0aGluZyBJCmNvdWxkIGhlbHAuPC9wPgoKPHA+QWxzbywgdGhlcmUgaXMgdGhlIGZhY3QgdGhhdCA8Y29kZT5kZXNpZ25Nb2RlPC9jb2RlPiAod2hpY2ggc2VlbWVkCnRvIGJlIGxlc3MgYnVnZ3kgdGhhbiA8Y29kZT5jb250ZW50RWRpdGFibGU8L2NvZGU+IGluIFdlYmtpdCBhbmQKRmlyZWZveCwgYW5kIHdhcyB0aHVzIHVzZWQgYnkgQ29kZU1pcnJvciAxIGluIHRob3NlIGJyb3dzZXJzKSByZXF1aXJlcwphIGZyYW1lLiBGcmFtZXMgYXJlIGFub3RoZXIgdHJpY2t5IGFyZWEuIEl0IHRha2VzIHNvbWUgZWZmb3J0IHRvCnByZXZlbnQgZ2V0dGluZyB0cmlwcGVkIHVwIGJ5IGRvbWFpbiByZXN0cmljdGlvbnMsIHRoZXkgZG9uJ3QKaW5pdGlhbGl6ZSBzeW5jaHJvbm91c2x5LCBiZWhhdmUgc3RyYW5nZWx5IGluIHJlc3BvbnNlIHRvIHRoZSBiYWNrCmJ1dHRvbiwgYW5kLCBvbiBzZXZlcmFsIGJyb3dzZXJzLCBjYW4ndCBiZSBtb3ZlZCBhcm91bmQgdGhlIERPTQp3aXRob3V0IGhhdmluZyB0aGVtIHJlLWluaXRpYWxpemUuIFRoZXkgZGlkIHByb3ZpZGUgYSB2ZXJ5IG5pY2Ugd2F5IHRvCm5hbWVzcGFjZSB0aGUgbGlicmFyeSwgdGhvdWdo4oCUQ29kZU1pcnJvciAxIGNvdWxkIGZyZWVseSBwb2xsdXRlIHRoZQpuYW1lc3BhY2UgaW5zaWRlIHRoZSBmcmFtZS48L3A+Cgo8cD5GaW5hbGx5LCB3b3JraW5nIHdpdGggYW4gZWRpdGFibGUgZG9jdW1lbnQgbWVhbnMgd29ya2luZyB3aXRoCnNlbGVjdGlvbiBpbiBhcmJpdHJhcnkgRE9NIHN0cnVjdHVyZXMuIEludGVybmV0IEV4cGxvcmVyICg4IGFuZApiZWZvcmUpIGhhcyBhbiB1dHRlcmx5IGRpZmZlcmVudCAoYW5kIGF3a3dhcmQpIHNlbGVjdGlvbiBBUEkgdGhhbiBhbGwKb2YgdGhlIG90aGVyIGJyb3dzZXJzLCBhbmQgZXZlbiBhbW9uZyB0aGUgZGlmZmVyZW50IGltcGxlbWVudGF0aW9ucyBvZgo8Y29kZT5kb2N1bWVudC5zZWxlY3Rpb248L2NvZGU+LCBkZXRhaWxzIGFib3V0IGhvdyBleGFjdGx5IGEgc2VsZWN0aW9uCmlzIHJlcHJlc2VudGVkIHZhcnkgcXVpdGUgYSBiaXQuIEFkZCB0byB0aGF0IHRoZSBmYWN0IHRoYXQgT3BlcmEncwpzZWxlY3Rpb24gc3VwcG9ydCB0ZW5kZWQgdG8gYmUgdmVyeSBidWdneSB1bnRpbCByZWNlbnRseSwgYW5kIHlvdSBjYW4KaW1hZ2luZSB3aHkgQ29kZU1pcnJvciAxIGNvbnRhaW5zIDcwMCBsaW5lcyBvZiBzZWxlY3Rpb24taGFuZGxpbmcKY29kZS48L3A+Cgo8cD5BbmQgdGhhdCBicmluZ3MgdXMgdG8gdGhlIG1haW4gaXNzdWUgd2l0aCB0aGUgQ29kZU1pcnJvciAxCmNvZGUgYmFzZTogVGhlIHByb3BvcnRpb24gb2YgYnJvd3Nlci1idWctd29ya2Fyb3VuZHMgdG8gcmVhbAphcHBsaWNhdGlvbiBjb2RlIHdhcyBnZXR0aW5nIGRhbmdlcm91c2x5IGhpZ2guIEJ5IGJ1aWxkaW5nIG9uIHRvcCBvZiBhCmZldyBkb2RneSBmZWF0dXJlcywgSSBwdXQgdGhlIHN5c3RlbSBpbiBhIHZ1bG5lcmFibGUgcG9zaXRpb27igJRhbnkKaW5jb21wYXRpYmlsaXR5IGFuZCBidWdnaW5lc3MgaW4gdGhlc2UgZmVhdHVyZXMsIEkgaGFkIHRvIHBhcGVyIG92ZXIKd2l0aCBteSBvd24gY29kZS4gTm90IG9ubHkgZGlkIEkgaGF2ZSB0byBkbyBzb21lIHNlcmlvdXMgc3R1bnQtd29yayB0bwpnZXQgaXQgdG8gd29yayBvbiBvbGRlciBicm93c2VycyAoYXMgZGV0YWlsZWQgaW4gdGhlCnByZXZpb3VzIDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9zdG9yeS5odG1sIj5zdG9yeTwvYT4pLCB0aGluZ3MKYWxzbyBrZXB0IGJyZWFraW5nIGluIG5ld2x5IHJlbGVhc2VkIHZlcnNpb25zLCByZXF1aXJpbmcgbWUgdG8gY29tZSB1cAp3aXRoIDxlbT5uZXc8L2VtPiBzY2FyeSBoYWNrcyBpbiBvcmRlciB0byBrZWVwIHVwLiBUaGlzIHdhcyBzdGFydGluZwp0byBsb3NlIGl0cyBhcHBlYWwuPC9wPgoKPGgyIGlkPSJhcHByb2FjaCI+R2VuZXJhbCBBcHByb2FjaDwvaDI+Cgo8cD5XaGF0IENvZGVNaXJyb3IgMiBkb2VzIGlzIHRyeSB0byBzaWRlc3RlcCBtb3N0IG9mIHRoZSBoYWlyeSBoYWNrcwp0aGF0IGNhbWUgdXAgaW4gdmVyc2lvbiAxLiBJIG93ZSBhIGxvdCB0byB0aGUKPGEgaHJlZj0iaHR0cDovL2FjZS5hamF4Lm9yZyI+QUNFPC9hPiBlZGl0b3IgZm9yIGluc3BpcmF0aW9uIG9uIGhvdyB0bwphcHByb2FjaCB0aGlzLjwvcD4KCjxwPkkgYWJzb2x1dGVseSBkaWQgbm90IHdhbnQgdG8gYmUgY29tcGxldGVseSByZWxpYW50IG9uIGtleSBldmVudHMgdG8KZ2VuZXJhdGUgbXkgaW5wdXQuIEV2ZXJ5IEphdmFTY3JpcHQgcHJvZ3JhbW1lciBrbm93cyB0aGF0IGtleSBldmVudAppbmZvcm1hdGlvbiBpcyBob3JyaWJsZSBhbmQgaW5jb21wbGV0ZS4gU29tZSBwZW9wbGUgKG1vc3QgYXdlc29tZWx5Ck1paGFpIEJhem9uIHdpdGggPGEgaHJlZj0iaHR0cDovL3ltYWNzLm9yZyI+WW1hY3M8L2E+KSBoYXZlIGJlZW4gYWJsZQp0byBidWlsZCBtb3JlIG9yIGxlc3MgZnVuY3Rpb25pbmcgZWRpdG9ycyBieSBkaXJlY3RseSByZWFkaW5nIGtleQpldmVudHMsIGJ1dCBpdCB0YWtlcyBhIGxvdCBvZiB3b3JrICh0aGUga2luZCBvZiBuZXZlci1lbmRpbmcsIGZyYWdpbGUKd29yayBJIGRlc2NyaWJlZCBlYXJsaWVyKSwgYW5kIHdpbGwgbmV2ZXIgYmUgYWJsZSB0byBwcm9wZXJseSBzdXBwb3J0CnRoaW5ncyBsaWtlIG11bHRpLWtleXN0b2tlIGludGVybmF0aW9uYWwgY2hhcmFjdGVyCmlucHV0LiA8YSBocmVmPSIja2V5bWFwIiBjbGFzcz0idXBkYXRlIj5bc2VlIGJlbG93IGZvciBjYXZlYXRdPC9hPjwvcD4KCjxwPlNvIHdoYXQgSSBkbyBpcyBmb2N1cyBhIGhpZGRlbiB0ZXh0YXJlYSwgYW5kIGxldCB0aGUgYnJvd3NlcgpiZWxpZXZlIHRoYXQgdGhlIHVzZXIgaXMgdHlwaW5nIGludG8gdGhhdC4gV2hhdCB3ZSBzaG93IHRvIHRoZSB1c2VyIGlzCmEgRE9NIHN0cnVjdHVyZSB3ZSBidWlsdCB0byByZXByZXNlbnQgaGlzIGRvY3VtZW50LiBJZiB0aGlzIGlzIHVwZGF0ZWQKcXVpY2tseSBlbm91Z2gsIGFuZCBzaG93cyBzb21lIGtpbmQgb2YgYmVsaWV2YWJsZSBjdXJzb3IsIGl0IGZlZWxzCmxpa2UgYSByZWFsIHRleHQtaW5wdXQgY29udHJvbC48L3A+Cgo8cD5Bbm90aGVyIGJpZyB3aW4gaXMgdGhhdCB0aGlzIERPTSByZXByZXNlbnRhdGlvbiBkb2VzIG5vdCBoYXZlIHRvCnNwYW4gdGhlIHdob2xlIGRvY3VtZW50LiBTb21lIENvZGVNaXJyb3IgMSB1c2VycyBpbnNpc3RlZCB0aGF0IHRoZXkKbmVlZGVkIHRvIHB1dCBhIDMwIHRob3VzYW5kIGxpbmUgWE1MIGRvY3VtZW50IGludG8gQ29kZU1pcnJvci4gUHV0dGluZwphbGwgdGhhdCBpbnRvIHRoZSBET00gdGFrZXMgYSB3aGlsZSwgZXNwZWNpYWxseSBzaW5jZSwgZm9yIHNvbWUKcmVhc29uLCBhbiBlZGl0YWJsZSBET00gdHJlZSBpcyBzbG93ZXIgdGhhbiBhIG5vcm1hbCBvbmUgb24gbW9zdApicm93c2Vycy4gSWYgd2UgaGF2ZSBmdWxsIGNvbnRyb2wgb3ZlciB3aGF0IHdlIHNob3csIHdlIG11c3Qgb25seQplbnN1cmUgdGhhdCB0aGUgdmlzaWJsZSBwYXJ0IG9mIHRoZSBkb2N1bWVudCBoYXMgYmVlbiBhZGRlZCwgYW5kIGNhbgpkbyB0aGUgcmVzdCBvbmx5IHdoZW4gbmVlZGVkLiAoRm9ydHVuYXRlbHksIHRoZSA8Y29kZT5vbnNjcm9sbDwvY29kZT4KZXZlbnQgd29ya3MgYWxtb3N0IHRoZSBzYW1lIG9uIGFsbCBicm93c2VycywgYW5kIGxlbmRzIGl0c2VsZiB3ZWxsIHRvCmRpc3BsYXlpbmcgdGhpbmdzIG9ubHkgYXMgdGhleSBhcmUgc2Nyb2xsZWQgaW50byB2aWV3Lik8L3A+Cgo8aDIgaWQ9ImlucHV0Ij5JbnB1dDwvaDI+Cgo8cD5BQ0UgdXNlcyBpdHMgaGlkZGVuIHRleHRhcmVhIG9ubHkgYXMgYSB0ZXh0IGlucHV0IHNoaW0sIGFuZCBkb2VzCmFsbCBjdXJzb3IgbW92ZW1lbnQgYW5kIHRoaW5ncyBsaWtlIHRleHQgZGVsZXRpb24gaXRzZWxmIGJ5IGRpcmVjdGx5CmhhbmRsaW5nIGtleSBldmVudHMuIENvZGVNaXJyb3IncyB3YXkgaXMgdG8gbGV0IHRoZSBicm93c2VyIGRvIGl0cwp0aGluZyBhcyBtdWNoIGFzIHBvc3NpYmxlLCBhbmQgbm90LCBmb3IgZXhhbXBsZSwgZGVmaW5lIGl0cyBvd24gc2V0IG9mCmtleSBiaW5kaW5ncy4gT25lIHdheSB0byBkbyB0aGlzIHdvdWxkIGhhdmUgYmVlbiB0byBoYXZlIHRoZSB3aG9sZQpkb2N1bWVudCBpbnNpZGUgdGhlIGhpZGRlbiB0ZXh0YXJlYSwgYW5kIGFmdGVyIGVhY2gga2V5IGV2ZW50IHVwZGF0ZQp0aGUgZGlzcGxheSBET00gdG8gcmVmbGVjdCB3aGF0J3MgaW4gdGhhdCB0ZXh0YXJlYS48L3A+Cgo8cD5UaGF0J2QgYmUgc2ltcGxlLCBidXQgaXQgaXMgbm90IHJlYWxpc3RpYy4gRm9yIGV2ZW4gbWVkaXVtLXNpemVkCmRvY3VtZW50IHRoZSBlZGl0b3Igd291bGQgYmUgY29uc3RhbnRseSBtdW5naW5nIGh1Z2Ugc3RyaW5ncywgYW5kIGdldAp0ZXJyaWJseSBzbG93LiBXaGF0IENvZGVNaXJyb3IgMiBkb2VzIGlzIHB1dCB0aGUgY3VycmVudCBzZWxlY3Rpb24sCmFsb25nIHdpdGggYW4gZXh0cmEgbGluZSBvbiB0aGUgdG9wIGFuZCBvbiB0aGUgYm90dG9tLCBpbnRvIHRoZQp0ZXh0YXJlYS48L3A+Cgo8cD5UaGlzIG1lYW5zIHRoYXQgdGhlIGFycm93IGtleXMgKGFuZCB0aGVpciBjdHJsLXZhcmlhdGlvbnMpLCBob21lLAplbmQsIGV0Y2V0ZXJhLCBkbyBub3QgaGF2ZSB0byBiZSBoYW5kbGVkIHNwZWNpYWxseS4gV2UganVzdCByZWFkIHRoZQpjdXJzb3IgcG9zaXRpb24gaW4gdGhlIHRleHRhcmVhLCBhbmQgdXBkYXRlIG91ciBjdXJzb3IgdG8gbWF0Y2ggaXQuCkFsc28sIGNvcHkgYW5kIHBhc3RlIHdvcmsgcHJldHR5IG11Y2ggZm9yIGZyZWUsIGFuZCBwZW9wbGUgZ2V0IHRoZWlyCm5hdGl2ZSBrZXkgYmluZGluZ3MsIHdpdGhvdXQgYW55IHNwZWNpYWwgd29yayBvbiBteSBwYXJ0LiBGb3IgZXhhbXBsZSwKSSBoYXZlIGVtYWNzIGtleSBiaW5kaW5ncyBjb25maWd1cmVkIGZvciBDaHJvbWUgYW5kIEZpcmVmb3guIFRoZXJlIGlzCm5vIHdheSBmb3IgYSBzY3JpcHQgdG8gZGV0ZWN0IHRoaXMuIDxhIGNsYXNzPSJ1cGRhdGUiCmhyZWY9IiNrZXltYXAiPltubyBsb25nZXIgdGhlIGNhc2VdPC9hPjwvcD4KCjxwPk9mIGNvdXJzZSwgc2luY2Ugb25seSBhIHNtYWxsIHBhcnQgb2YgdGhlIGRvY3VtZW50IHNpdHMgaW4gdGhlCnRleHRhcmVhLCBrZXlzIGxpa2UgcGFnZSB1cCBhbmQgY3RybC1lbmQgd29uJ3QgZG8gdGhlIHJpZ2h0IHRoaW5nLgpDb2RlTWlycm9yIGlzIGNhdGNoaW5nIHRob3NlIGV2ZW50cyBhbmQgaGFuZGxpbmcgdGhlbSBpdHNlbGYuPC9wPgoKPGgyIGlkPSJzZWxlY3Rpb24iPlNlbGVjdGlvbjwvaDI+Cgo8cD5HZXR0aW5nIGFuZCBzZXR0aW5nIHRoZSBzZWxlY3Rpb24gcmFuZ2Ugb2YgYSB0ZXh0YXJlYSBpbiBtb2Rlcm4KYnJvd3NlcnMgaXMgdHJpdmlhbOKAlHlvdSBqdXN0IHVzZSB0aGUgPGNvZGU+c2VsZWN0aW9uU3RhcnQ8L2NvZGU+CmFuZCA8Y29kZT5zZWxlY3Rpb25FbmQ8L2NvZGU+IHByb3BlcnRpZXMuIE9uIElFIHlvdSBoYXZlIHRvIGRvIHNvbWUKaW5zYW5lIHN0dWZmIHdpdGggdGVtcG9yYXJ5IHJhbmdlcyBhbmQgY29tcGVuc2F0aW5nIGZvciB0aGUgZmFjdCB0aGF0Cm1vdmluZyB0aGUgc2VsZWN0aW9uIGJ5IGEgJ2NoYXJhY3Rlcicgd2lsbCB0cmVhdCBcclxuIGFzIGEgc2luZ2xlCmNoYXJhY3RlciwgYnV0IGV2ZW4gdGhlcmUgaXQgaXMgcG9zc2libGUgdG8gYnVpbGQgZnVuY3Rpb25zIHRoYXQKcmVsaWFibHkgc2V0IGFuZCBnZXQgdGhlIHNlbGVjdGlvbiByYW5nZS48L3A+Cgo8cD5CdXQgY29uc2lkZXIgdGhpcyB0eXBpY2FsIGNhc2U6IFdoZW4gSSdtIHNvbWV3aGVyZSBpbiBteSBkb2N1bWVudCwKcHJlc3Mgc2hpZnQsIGFuZCBwcmVzcyB0aGUgdXAgYXJyb3csIHNvbWV0aGluZyBnZXRzIHNlbGVjdGVkLiBUaGVuLCBpZgpJLCBzdGlsbCBob2xkaW5nIHNoaWZ0LCBwcmVzcyB0aGUgdXAgYXJyb3cgYWdhaW4sIHRoZSB0b3Agb2YgbXkKc2VsZWN0aW9uIGlzIGFkanVzdGVkLiBUaGUgc2VsZWN0aW9uIHJlbWVtYmVycyB3aGVyZSBpdHMgPGVtPmhlYWQ8L2VtPgphbmQgaXRzIDxlbT5hbmNob3I8L2VtPiBhcmUsIGFuZCBtb3ZlcyB0aGUgaGVhZCB3aGVuIHdlIHNoaWZ0LW1vdmUuClRoaXMgaXMgYSBnZW5lcmFsbHkgYWNjZXB0ZWQgcHJvcGVydHkgb2Ygc2VsZWN0aW9ucywgYW5kIGRvbmUgcmlnaHQgYnkKZXZlcnkgZWRpdGluZyBjb21wb25lbnQgYnVpbHQgaW4gdGhlIHBhc3QgdHdlbnR5IHllYXJzLjwvcD4KCjxwPkJ1dCBub3Qgc29tZXRoaW5nIHRoYXQgdGhlIGJyb3dzZXIgc2VsZWN0aW9uIEFQSXMgZXhwb3NlLjwvcD4KCjxwPkdyZWF0LiBTbyB3aGVuIHNvbWVvbmUgY3JlYXRlcyBhbiAndXBzaWRlLWRvd24nIHNlbGVjdGlvbiwgdGhlIG5leHQKdGltZSBDb2RlTWlycm9yIGhhcyB0byB1cGRhdGUgdGhlIHRleHRhcmVhLCBpdCdsbCByZS1jcmVhdGUgdGhlCnNlbGVjdGlvbiBhcyBhbiAndXBzaWRlLXVwJyBzZWxlY3Rpb24sIHdpdGggdGhlIGFuY2hvciBhdCB0aGUgdG9wLCBhbmQKdGhlIG5leHQgY3Vyc29yIG1vdGlvbiB3aWxsIGJlaGF2ZSBpbiBhbiB1bmV4cGVjdGVkIHdheeKAlG91ciBzZWNvbmQKdXAtYXJyb3cgcHJlc3MgaW4gdGhlIGV4YW1wbGUgYWJvdmUgd2lsbCBub3QgZG8gYW55dGhpbmcsIHNpbmNlIGl0IGlzCmludGVycHJldGVkIGluIGV4YWN0bHkgdGhlIHNhbWUgd2F5IGFzIHRoZSBmaXJzdC48L3A+Cgo8cD5ObyBwcm9ibGVtLiBXZSdsbCBqdXN0LCBlaG0sIGRldGVjdCB0aGF0IHRoZSBzZWxlY3Rpb24gaXMKdXBzaWRlLWRvd24gKHlvdSBjYW4gdGVsbCBieSB0aGUgd2F5IGl0IHdhcyBjcmVhdGVkKSwgYW5kIHRoZW4sIHdoZW4KYW4gdXBzaWRlLWRvd24gc2VsZWN0aW9uIGlzIHByZXNlbnQsIGFuZCBhIGN1cnNvci1tb3Zpbmcga2V5IGlzCnByZXNzZWQgaW4gY29tYmluYXRpb24gd2l0aCBzaGlmdCwgd2UgcXVpY2tseSBjb2xsYXBzZSB0aGUgc2VsZWN0aW9uCmluIHRoZSB0ZXh0YXJlYSB0byBpdHMgc3RhcnQsIGFsbG93IHRoZSBrZXkgdG8gdGFrZSBlZmZlY3QsIGFuZCB0aGVuCmNvbWJpbmUgaXRzIG5ldyBoZWFkIHdpdGggaXRzIG9sZCBhbmNob3IgdG8gZ2V0IHRoZSA8ZW0+cmVhbDwvZW0+CnNlbGVjdGlvbi48L3A+Cgo8cD5JbiBzaG9ydCwgc2NhcnkgaGFja3MgY291bGQgbm90IGJlIGF2b2lkZWQgZW50aXJlbHkgaW4gQ29kZU1pcnJvcgoyLjwvcD4KCjxwPkFuZCwgdGhlIG9ic2VydmFudCByZWFkZXIgbWlnaHQgYXNrLCBob3cgZG8geW91IGV2ZW4ga25vdyB0aGF0IGEKa2V5IGNvbWJvIGlzIGEgY3Vyc29yLW1vdmluZyBjb21ibywgaWYgeW91IGNsYWltIHlvdSBzdXBwb3J0IGFueQpuYXRpdmUga2V5IGJpbmRpbmdzPyBXZWxsLCB3ZSBkb24ndCwgYnV0IHdlIGNhbiBsZWFybi4gVGhlIGVkaXRvcgprZWVwcyBhIHNldCBrbm93biBjdXJzb3ItbW92ZW1lbnQgY29tYm9zIChpbml0aWFsaXplZCB0byB0aGUKcHJlZGljdGFibGUgZGVmYXVsdHMpLCBhbmQgdXBkYXRlcyB0aGlzIHNldCB3aGVuIGl0IG9ic2VydmVzIHRoYXQKcHJlc3NpbmcgYSBjZXJ0YWluIGtleSBoYWQgKG9ubHkpIHRoZSBlZmZlY3Qgb2YgbW92aW5nIHRoZSBjdXJzb3IuClRoaXMsIG9mIGNvdXJzZSwgZG9lc24ndCB3b3JrIGlmIHRoZSBmaXJzdCB0aW1lIHRoZSBrZXkgaXMgdXNlZCB3YXMKZm9yIGV4dGVuZGluZyBhbiBpbnZlcnRlZCBzZWxlY3Rpb24sIGJ1dCBpdCB3b3JrcyBtb3N0IG9mIHRoZQp0aW1lLjwvcD4KCjxoMiBpZD0idXBkYXRlIj5JbnRlbGxpZ2VudCBVcGRhdGluZzwvaDI+Cgo8cD5PbmUgdGhpbmcgdGhhdCBhbHdheXMgY29tZXMgdXAgd2hlbiB5b3UgaGF2ZSBhIGNvbXBsaWNhdGVkIGludGVybmFsCnN0YXRlIHRoYXQncyByZWZsZWN0ZWQgaW4gc29tZSB1c2VyLXZpc2libGUgZXh0ZXJuYWwgcmVwcmVzZW50YXRpb24KKGluIHRoaXMgY2FzZSwgdGhlIGRpc3BsYXllZCBjb2RlIGFuZCB0aGUgdGV4dGFyZWEncyBjb250ZW50KSBpcwprZWVwaW5nIHRoZSB0d28gaW4gc3luYy4gVGhlIG5haXZlIHdheSBpcyB0byBqdXN0IHVwZGF0ZSB0aGUgZGlzcGxheQpldmVyeSB0aW1lIHlvdSBjaGFuZ2UgeW91ciBzdGF0ZSwgYnV0IHRoaXMgaXMgbm90IG9ubHkgZXJyb3IgcHJvbmUKKHlvdSdsbCBmb3JnZXQpLCBpdCBhbHNvIGVhc2lseSBsZWFkcyB0byBkdXBsaWNhdGUgd29yayBvbiBiaWcsCmNvbXBvc2l0ZSBvcGVyYXRpb25zLiBUaGVuIHlvdSBzdGFydCBwYXNzaW5nIGFyb3VuZCBmbGFncyBpbmRpY2F0aW5nCndoZXRoZXIgdGhlIGRpc3BsYXkgc2hvdWxkIGJlIHVwZGF0ZWQgaW4gYW4gYXR0ZW1wdCB0byBiZSBlZmZpY2llbnQKYWdhaW4gYW5kLCB3ZWxsLCBhdCB0aGF0IHBvaW50IHlvdSBtaWdodCBhcyB3ZWxsIGdpdmUgdXAgY29tcGxldGVseS48L3A+Cgo8cD5JIGRpZCBnbyBkb3duIHRoYXQgcm9hZCwgYnV0IHRoZW4gc3dpdGNoZWQgdG8gYSBtdWNoIHNpbXBsZXIgbW9kZWw6CnNpbXBseSBrZWVwIHRyYWNrIG9mIGFsbCB0aGUgdGhpbmdzIHRoYXQgaGF2ZSBiZWVuIGNoYW5nZWQgZHVyaW5nIGFuCmFjdGlvbiwgYW5kIHRoZW4sIG9ubHkgYXQgdGhlIGVuZCwgdXNlIHRoaXMgaW5mb3JtYXRpb24gdG8gdXBkYXRlIHRoZQp1c2VyLXZpc2libGUgZGlzcGxheS48L3A+Cgo8cD5Db2RlTWlycm9yIHVzZXMgYSBjb25jZXB0IG9mIDxlbT5vcGVyYXRpb25zPC9lbT4sIHdoaWNoIHN0YXJ0IGJ5CmNhbGxpbmcgYSBzcGVjaWZpYyBzZXQtdXAgZnVuY3Rpb24gdGhhdCBjbGVhcnMgdGhlIHN0YXRlIGFuZCBlbmQgYnkKY2FsbGluZyBhbm90aGVyIGZ1bmN0aW9uIHRoYXQgcmVhZHMgdGhpcyBzdGF0ZSBhbmQgZG9lcyB0aGUgcmVxdWlyZWQKdXBkYXRpbmcuIE1vc3QgZXZlbnQgaGFuZGxlcnMsIGFuZCBhbGwgdGhlIHVzZXItdmlzaWJsZSBtZXRob2RzIHRoYXQKY2hhbmdlIHN0YXRlIGFyZSB3cmFwcGVkIGxpa2UgdGhpcy4gVGhlcmUncyBhIG1ldGhvZApjYWxsZWQgPGNvZGU+b3BlcmF0aW9uPC9jb2RlPiB0aGF0IGFjY2VwdHMgYSBmdW5jdGlvbiwgYW5kIHJldHVybnMKYW5vdGhlciBmdW5jdGlvbiB0aGF0IHdyYXBzIHRoZSBnaXZlbiBmdW5jdGlvbiBhcyBhbiBvcGVyYXRpb24uPC9wPgoKPHA+SXQncyB0cml2aWFsIHRvIGV4dGVuZCB0aGlzIChhcyBDb2RlTWlycm9yIGRvZXMpIHRvIGRldGVjdCBuZXN0aW5nLAphbmQsIHdoZW4gYW4gb3BlcmF0aW9uIGlzIHN0YXJ0ZWQgaW5zaWRlIGFuIG9wZXJhdGlvbiwgc2ltcGx5CmluY3JlbWVudCB0aGUgbmVzdGluZyBjb3VudCwgYW5kIG9ubHkgZG8gdGhlIHVwZGF0aW5nIHdoZW4gdGhpcyBjb3VudApyZWFjaGVzIHplcm8gYWdhaW4uPC9wPgoKPHA+SWYgd2UgaGF2ZSBhIHNldCBvZiBjaGFuZ2VkIHJhbmdlcyBhbmQga25vdyB0aGUgY3VycmVudGx5IHNob3duCnJhbmdlLCB3ZSBjYW4gKHdpdGggc29tZSBhd2t3YXJkIGNvZGUgdG8gZGVhbCB3aXRoIHRoZSBmYWN0IHRoYXQKY2hhbmdlcyBjYW4gYWRkIGFuZCByZW1vdmUgbGluZXMsIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGNoYW5naW5nCmNvb3JkaW5hdGUgc3lzdGVtKSBjb25zdHJ1Y3QgYSBtYXAgb2YgdGhlIHJhbmdlcyB0aGF0IHdlcmUgbGVmdAppbnRhY3QuIFdlIGNhbiB0aGVuIGNvbXBhcmUgdGhpcyBtYXAgd2l0aCB0aGUgcGFydCBvZiB0aGUgZG9jdW1lbnQKdGhhdCdzIGN1cnJlbnRseSB2aXNpYmxlIChiYXNlZCBvbiBzY3JvbGwgb2Zmc2V0IGFuZCBlZGl0b3IgaGVpZ2h0KSB0bwpkZXRlcm1pbmUgd2hldGhlciBzb21ldGhpbmcgbmVlZHMgdG8gYmUgdXBkYXRlZC48L3A+Cgo8cD5Db2RlTWlycm9yIHVzZXMgdHdvIHVwZGF0ZSBhbGdvcml0aG1z4oCUYSBmdWxsIHJlZnJlc2gsIHdoZXJlIGl0IGp1c3QKZGlzY2FyZHMgdGhlIHdob2xlIHBhcnQgb2YgdGhlIERPTSB0aGF0IGNvbnRhaW5zIHRoZSBlZGl0ZWQgdGV4dCBhbmQKcmVidWlsZHMgaXQsIGFuZCBhIHBhdGNoIGFsZ29yaXRobSwgd2hlcmUgaXQgdXNlcyB0aGUgaW5mb3JtYXRpb24KYWJvdXQgY2hhbmdlZCBhbmQgaW50YWN0IHJhbmdlcyB0byB1cGRhdGUgb25seSB0aGUgb3V0LW9mLWRhdGUgcGFydHMKb2YgdGhlIERPTS4gV2hlbiBtb3JlIHRoYW4gMzAgcGVyY2VudCAod2hpY2ggaXMgdGhlIGN1cnJlbnQgaGV1cmlzdGljLAptaWdodCBjaGFuZ2UpIG9mIHRoZSBsaW5lcyBuZWVkIHRvIGJlIHVwZGF0ZWQsIHRoZSBmdWxsIHJlZnJlc2ggaXMKY2hvc2VuIChzaW5jZSBpdCdzIGZhc3RlciB0byBkbyB0aGFuIHBhaW5zdGFraW5nbHkgZmluZGluZyBhbmQKdXBkYXRpbmcgYWxsIHRoZSBjaGFuZ2VkIGxpbmVzKSwgaW4gdGhlIG90aGVyIGNhc2UgaXQgZG9lcyB0aGUKcGF0Y2hpbmcgKHNvIHRoYXQsIGlmIHlvdSBzY3JvbGwgYSBsaW5lIG9yIHNlbGVjdCBhbm90aGVyIGNoYXJhY3RlciwKdGhlIHdob2xlIHNjcmVlbiBkb2Vzbid0IGhhdmUgdG8gYmUKcmUtcmVuZGVyZWQpLiA8c3BhbiBjbGFzcz0idXBkYXRlIj5bdGhlIGZ1bGwtcmVmcmVzaAphbGdvcml0aG0gd2FzIGRyb3BwZWQsIGl0IHdhc24ndCByZWFsbHkgZmFzdGVyIHRoYW4gdGhlIHBhdGNoaW5nCm9uZV08L3NwYW4+PC9wPgoKPHA+QWxsIHVwZGF0aW5nIHVzZXMgPGNvZGU+aW5uZXJIVE1MPC9jb2RlPiByYXRoZXIgdGhhbiBkaXJlY3QgRE9NCm1hbmlwdWxhdGlvbiwgc2luY2UgdGhhdCBzdGlsbCBzZWVtcyB0byBiZSBieSBmYXIgdGhlIGZhc3Rlc3Qgd2F5IHRvCmJ1aWxkIGRvY3VtZW50cy4gVGhlcmUncyBhIHBlci1saW5lIGZ1bmN0aW9uIHRoYXQgY29tYmluZXMgdGhlCmhpZ2hsaWdodGluZywgPGEgaHJlZj0ibWFudWFsLmh0bWwjbWFya1RleHQiPm1hcmtpbmc8L2E+LCBhbmQKc2VsZWN0aW9uIGluZm8gZm9yIHRoYXQgbGluZSBpbnRvIGEgc25pcHBldCBvZiBIVE1MLiBUaGUgcGF0Y2ggdXBkYXRlcgp1c2VzIHRoaXMgdG8gcmVzZXQgaW5kaXZpZHVhbCBsaW5lcywgdGhlIHJlZnJlc2ggdXBkYXRlciBidWlsZHMgYW4KSFRNTCBjaHVuayBmb3IgdGhlIHdob2xlIHZpc2libGUgZG9jdW1lbnQgYXQgb25jZSwgYW5kIHRoZW4gdXNlcyBhCnNpbmdsZSA8Y29kZT5pbm5lckhUTUw8L2NvZGU+IHVwZGF0ZSB0byBkbyB0aGUgcmVmcmVzaC48L3A+Cgo8aDIgaWQ9InBhcnNlIj5QYXJzZXJzIGNhbiBiZSBTaW1wbGU8L2gyPgoKPHA+V2hlbiBJIHdyb3RlIENvZGVNaXJyb3IgMSwgSQp0aG91Z2h0IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9zdG9yeS5odG1sI3BhcnNlciI+aW50ZXJydXB0YWJsZQpwYXJzZXJzPC9hPiB3ZXJlIGEgaHVnZWx5IHNjYXJ5IGFuZCBjb21wbGljYXRlZCB0aGluZywgYW5kIEkgdXNlZCBhCmJ1bmNoIG9mIGhlYXZ5d2VpZ2h0IGFic3RyYWN0aW9ucyB0byBrZWVwIHRoaXMgc3VwcG9zZWQgY29tcGxleGl0eQp1bmRlciBjb250cm9sOiBwYXJzZXJzCndlcmUgPGEgaHJlZj0iaHR0cDovL2JvYi5weXRob25tYWMub3JnL2FyY2hpdmVzLzIwMDUvMDcvMDYvaXRlcmF0aW9uLWluLWphdmFzY3JpcHQvIj5pdGVyYXRvcnM8L2E+CnRoYXQgY29uc3VtZWQgaW5wdXQgZnJvbSBhbm90aGVyIGl0ZXJhdG9yLCBhbmQgdXNlZCBmdW5ueQpjbG9zdXJlLXJlc2V0dGluZyB0cmlja3MgdG8gY29weSBhbmQgcmVzdW1lIHRoZW1zZWx2ZXMuPC9wPgoKPHA+VGhpcyBtYWRlIGZvciBhIHJhdGhlciBuaWNlIHN5c3RlbSwgaW4gdGhhdCBwYXJzZXJzIGZvcm1lZCBzdHJpY3RseQpzZXBhcmF0ZSBtb2R1bGVzLCBhbmQgY291bGQgYmUgY29tcG9zZWQgaW4gcHJlZGljdGFibGUgd2F5cy4KVW5mb3J0dW5hdGVseSwgaXQgd2FzIHF1aXRlIHNsb3cgKHN0YWNraW5nIHRocmVlIG9yIGZvdXIgaXRlcmF0b3JzIG9uCnRvcCBvZiBlYWNoIG90aGVyKSwgYW5kIGV4dHJlbWVseSBpbnRpbWlkYXRpbmcgdG8gcGVvcGxlIG5vdCB1c2VkIHRvIGEKZnVuY3Rpb25hbCBwcm9ncmFtbWluZyBzdHlsZS48L3A+Cgo8cD5XaXRoIGEgZmV3IHNtYWxsIGNoYW5nZXMsIGhvd2V2ZXIsIHdlIGNhbiBrZWVwIGFsbCB0aG9zZQphZHZhbnRhZ2VzLCBidXQgc2ltcGxpZnkgdGhlIEFQSSBhbmQgbWFrZSB0aGUgd2hvbGUgdGhpbmcgbGVzcwppbmRpcmVjdCBhbmQgaW5lZmZpY2llbnQuIENvZGVNaXJyb3IKMidzIDxhIGhyZWY9Im1hbnVhbC5odG1sI21vZGVhcGkiPm1vZGUgQVBJPC9hPiB1c2VzIGV4cGxpY2l0IHN0YXRlCm9iamVjdHMsIGFuZCBtYWtlcyB0aGUgcGFyc2VyL3Rva2VuaXplciBhIGZ1bmN0aW9uIHRoYXQgc2ltcGx5IHRha2VzIGEKc3RhdGUgYW5kIGEgY2hhcmFjdGVyIHN0cmVhbSBhYnN0cmFjdGlvbiwgYWR2YW5jZXMgdGhlIHN0cmVhbSBvbmUKdG9rZW4sIGFuZCByZXR1cm5zIHRoZSB3YXkgdGhlIHRva2VuIHNob3VsZCBiZSBzdHlsZWQuIFRoaXMgc3RhdGUgbWF5CmJlIGNvcGllZCwgb3B0aW9uYWxseSBpbiBhIG1vZGUtZGVmaW5lZCB3YXksIGluIG9yZGVyIHRvIGJlIGFibGUgdG8KY29udGludWUgYSBwYXJzZSBhdCBhIGdpdmVuIHBvaW50LiBFdmVuIHNvbWVvbmUgd2hvJ3MgbmV2ZXIgdG91Y2hlZCBhCmxhbWJkYSBpbiBoaXMgbGlmZSBjYW4gdW5kZXJzdGFuZCB0aGlzIGFwcHJvYWNoLiBBZGRpdGlvbmFsbHksIGZhcgpmZXdlciBvYmplY3RzIGFyZSBhbGxvY2F0ZWQgaW4gdGhlIGNvdXJzZSBvZiBwYXJzaW5nIG5vdy48L3A+Cgo8cD5UaGUgYmlnZ2VzdCBzcGVlZHVwIGNvbWVzIGZyb20gdGhlIGZhY3QgdGhhdCB0aGUgcGFyc2luZyBubyBsb25nZXIKaGFzIHRvIHRvdWNoIHRoZSBET00gdGhvdWdoLiBJbiBDb2RlTWlycm9yIDEsIG9uIGFuIG9sZGVyIGJyb3dzZXIsIHlvdQpjb3VsZCA8ZW0+c2VlPC9lbT4gdGhlIHBhcnNlciB3b3JrIGl0cyB3YXkgdGhyb3VnaCB0aGUgZG9jdW1lbnQsCm1hbmFnaW5nIHNvbWUgdHdlbnR5IGxpbmVzIGluIGVhY2ggNTAtbWlsbGlzZWNvbmQgdGltZSBzbGljZSBpdCBnb3QuIEl0CndhcyByZWFkaW5nIGl0cyBpbnB1dCBmcm9tIHRoZSBET00sIGFuZCB1cGRhdGluZyB0aGUgRE9NIGFzIGl0IHdlbnQKYWxvbmcsIHdoaWNoIGFueSBleHBlcmllbmNlZCBKYXZhU2NyaXB0IHByb2dyYW1tZXIgd2lsbCBpbW1lZGlhdGVseQpzcG90IGFzIGEgcmVjaXBlIGZvciBzbG93bmVzcy4gSW4gQ29kZU1pcnJvciAyLCB0aGUgcGFyc2VyIHVzdWFsbHkKZmluaXNoZXMgdGhlIHdob2xlIGRvY3VtZW50IGluIGEgc2luZ2xlIDEwMC1taWxsaXNlY29uZCB0aW1lIHNsaWNl4oCUaXQKbWFuYWdlcyBzb21lIDE1MDAgbGluZXMgZHVyaW5nIHRoYXQgdGltZSBvbiBDaHJvbWUuIEFsbCBpdCBoYXMgdG8gZG8KaXMgbXVuZ2Ugc3RyaW5ncywgc28gdGhlcmUgaXMgbm8gcmVhbCByZWFzb24gZm9yIGl0IHRvIGJlIHNsb3cKYW55bW9yZS48L3A+Cgo8aDIgaWQ9InN1bW1hcnkiPldoYXQgR2l2ZXM/PC9oMj4KCjxwPkdpdmVuIGFsbCB0aGlzLCB3aGF0IGNhbiB5b3UgZXhwZWN0IGZyb20gQ29kZU1pcnJvciAyPzwvcD4KCjx1bD4KCjxsaT48c3Ryb25nPlNtYWxsLjwvc3Ryb25nPiB0aGUgYmFzZSBsaWJyYXJ5IGlzCnNvbWUgPHNwYW4gY2xhc3M9InVwZGF0ZSI+NDVrPC9zcGFuPiB3aGVuIG1pbmlmaWVkCm5vdywgPHNwYW4gY2xhc3M9InVwZGF0ZSI+MTdrPC9zcGFuPiB3aGVuIGd6aXBwZWQuIEl0J3Mgc21hbGxlciB0aGFuCml0cyBvd24gbG9nby48L2xpPgoKPGxpPjxzdHJvbmc+TGlnaHR3ZWlnaHQuPC9zdHJvbmc+IENvZGVNaXJyb3IgMiBpbml0aWFsaXplcyB2ZXJ5CnF1aWNrbHksIGFuZCBkb2VzIGFsbW9zdCBubyB3b3JrIHdoZW4gaXQgaXMgbm90IGZvY3VzZWQuIFRoaXMgbWVhbnMKeW91IGNhbiB0cmVhdCBpdCBhbG1vc3QgbGlrZSBhIHRleHRhcmVhLCBoYXZlIG11bHRpcGxlIGluc3RhbmNlcyBvbiBhCnBhZ2Ugd2l0aG91dCB0cm91YmxlLjwvbGk+Cgo8bGk+PHN0cm9uZz5IdWdlIGRvY3VtZW50IHN1cHBvcnQuPC9zdHJvbmc+IFNpbmNlIGhpZ2hsaWdodGluZyBpcwpyZWFsbHkgZmFzdCwgYW5kIG5vIERPTSBzdHJ1Y3R1cmUgaXMgYmVpbmcgYnVpbHQgZm9yIG5vbi12aXNpYmxlCmNvbnRlbnQsIHlvdSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IGxvY2tpbmcgdXAgeW91ciBicm93c2VyIHdoZW4gYQp1c2VyIGVudGVycyBhIG1lZ2FieXRlLXNpemVkIGRvY3VtZW50LjwvbGk+Cgo8bGk+PHN0cm9uZz5FeHRlbmRlZCBBUEkuPC9zdHJvbmc+IFNvbWUgdGhpbmdzIGtlcHQgY29taW5nIHVwIGluIHRoZQptYWlsaW5nIGxpc3QsIHN1Y2ggYXMgbWFya2luZyBwaWVjZXMgb2YgdGV4dCBvciBsaW5lcywgd2hpY2ggd2VyZQpleHRyZW1lbHkgaGFyZCB0byBkbyB3aXRoIENvZGVNaXJyb3IgMS4gVGhlIG5ldyB2ZXJzaW9uIGhhcyBwcm9wZXIKc3VwcG9ydCBmb3IgdGhlc2UgYnVpbHQgaW4uPC9saT4KCjxsaT48c3Ryb25nPlRhYiBzdXBwb3J0Ljwvc3Ryb25nPiBUYWJzIGluc2lkZSBlZGl0YWJsZSBkb2N1bWVudHMgd2VyZSwKZm9yIHNvbWUgcmVhc29uLCBhIG5vLWdvLiBBdCBsZWFzdCBzaXggZGlmZmVyZW50IHBlb3BsZSBhbm5vdW5jZWQgdGhleQp3ZXJlIGdvaW5nIHRvIGFkZCB0YWIgc3VwcG9ydCB0byBDb2RlTWlycm9yIDEsIG5vbmUgc3Vydml2ZWQgKEkgbWVhbiwKbm9uZSBkZWxpdmVyZWQgYSB3b3JraW5nIHZlcnNpb24pLiBDb2RlTWlycm9yIDIgbm8gbG9uZ2VyIHJlbW92ZXMgdGFicwpmcm9tIHlvdXIgZG9jdW1lbnQuPC9saT4KCjxsaT48c3Ryb25nPlNhbmUgc3R5bGluZy48L3N0cm9uZz4gPGNvZGU+aWZyYW1lPC9jb2RlPiBub2RlcyBhcmVuJ3QKcmVhbGx5IGtub3duIGZvciByZXNwZWN0aW5nIGRvY3VtZW50IGZsb3cuIE5vdyB0aGF0IGFuIGVkaXRvciBpbnN0YW5jZQppcyBhIHBsYWluIDxjb2RlPmRpdjwvY29kZT4gZWxlbWVudCwgaXQgaXMgbXVjaCBlYXNpZXIgdG8gc2l6ZSBpdCB0bwpmaXQgdGhlIHN1cnJvdW5kaW5nIGVsZW1lbnRzLiBZb3UgZG9uJ3QgZXZlbiBoYXZlIHRvIG1ha2UgaXQgc2Nyb2xsIGlmCnlvdSBkbyBub3QgPGEgaHJlZj0iLi4vZGVtby9yZXNpemUuaHRtbCI+d2FudCB0bzwvYT4uPC9saT4KCjwvdWw+Cgo8cD5PbiB0aGUgZG93bnNpZGUsIGEgQ29kZU1pcnJvciAyIGluc3RhbmNlIGlzIDxlbT5ub3Q8L2VtPiBhIG5hdGl2ZQplZGl0YWJsZSBjb21wb25lbnQuIFRob3VnaCBpdCBkb2VzIGl0cyBiZXN0IHRvIGVtdWxhdGUgc3VjaCBhCmNvbXBvbmVudCBhcyBtdWNoIGFzIHBvc3NpYmxlLCB0aGVyZSBpcyBmdW5jdGlvbmFsaXR5IHRoYXQgYnJvd3NlcnMKanVzdCBkbyBub3QgYWxsb3cgdXMgdG8gaG9vayBpbnRvLiBEb2luZyBzZWxlY3QtYWxsIGZyb20gdGhlIGNvbnRleHQKbWVudSwgZm9yIGV4YW1wbGUsIGlzIG5vdCBjdXJyZW50bHkgZGV0ZWN0ZWQgYnkgQ29kZU1pcnJvci48L3A+Cgo8cCBpZD0iY2hhbmdlcyIgc3R5bGU9Im1hcmdpbi10b3A6IDJlbTsiPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDoKYm9sZCI+W1VwZGF0ZXMgZnJvbSBOb3ZlbWJlciAxM3RoIDIwMTFdPC9zcGFuPiBSZWNlbnRseSwgSSd2ZSBtYWRlCnNvbWUgY2hhbmdlcyB0byB0aGUgY29kZWJhc2UgdGhhdCBjYXVzZSBzb21lIG9mIHRoZSB0ZXh0IGFib3ZlIHRvIG5vCmxvbmdlciBiZSBjdXJyZW50LiBJJ3ZlIGxlZnQgdGhlIHRleHQgaW50YWN0LCBidXQgYWRkZWQgbWFya2VycyBhdCB0aGUKcGFzc2FnZXMgdGhhdCBhcmUgbm93IGluYWNjdXJhdGUuIFRoZSBuZXcgc2l0dWF0aW9uIGlzIGRlc2NyaWJlZApiZWxvdy48L3A+Cgo8aDIgaWQ9ImJ0cmVlIj5Db250ZW50IFJlcHJlc2VudGF0aW9uPC9oMj4KCjxwPlRoZSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiBvZiBDb2RlTWlycm9yIDIgcmVwcmVzZW50ZWQgdGhlCmRvY3VtZW50IGFzIGEgZmxhdCBhcnJheSBvZiBsaW5lIG9iamVjdHMuIFRoaXMgd29ya2VkIHdlbGzigJRzcGxpY2luZwphcnJheXMgd2lsbCByZXF1aXJlIHRoZSBwYXJ0IG9mIHRoZSBhcnJheSBhZnRlciB0aGUgc3BsaWNlIHRvIGJlCm1vdmVkLCBidXQgdGhpcyBpcyBiYXNpY2FsbHkganVzdCBhIHNpbXBsZSA8Y29kZT5tZW1tb3ZlPC9jb2RlPiBvZiBhCmJ1bmNoIG9mIHBvaW50ZXJzLCBzbyBpdCBpcyBjaGVhcCBldmVuIGZvciBodWdlIGRvY3VtZW50cy48L3A+Cgo8cD5Ib3dldmVyLCBJIHJlY2VudGx5IGFkZGVkIGxpbmUgd3JhcHBpbmcgYW5kIGNvZGUgZm9sZGluZyAobGluZQpjb2xsYXBzaW5nLCBiYXNpY2FsbHkpLiBPbmNlIGxpbmVzIHN0YXJ0IHRha2luZyB1cCBhIG5vbi1jb25zdGFudAphbW91bnQgb2YgdmVydGljYWwgc3BhY2UsIGxvb2tpbmcgdXAgYSBsaW5lIGJ5IHZlcnRpY2FsIHBvc2l0aW9uCih3aGljaCBpcyBuZWVkZWQgd2hlbiBzb21lb25lIGNsaWNrcyB0aGUgZG9jdW1lbnQsIGFuZCB0byBkZXRlcm1pbmUKdGhlIHZpc2libGUgcGFydCBvZiB0aGUgZG9jdW1lbnQgZHVyaW5nIHNjcm9sbGluZykgY2FuIG9ubHkgYmUgZG9uZQp3aXRoIGEgbGluZWFyIHNjYW4gdGhyb3VnaCB0aGUgd2hvbGUgYXJyYXksIHN1bW1pbmcgdXAgbGluZSBoZWlnaHRzIGFzCnlvdSBnby4gU2VlaW5nIGhvdyBJJ3ZlIGJlZW4gZ29pbmcgb3V0IG9mIG15IHdheSB0byBtYWtlIGJpZyBkb2N1bWVudHMKZmFzdCwgdGhpcyBpcyBub3QgYWNjZXB0YWJsZS48L3A+Cgo8cD5UaGUgbmV3IHJlcHJlc2VudGF0aW9uIGlzIGJhc2VkIG9uIGEgQi10cmVlLiBUaGUgbGVhdmVzIG9mIHRoZSB0cmVlCmNvbnRhaW4gYXJyYXlzIG9mIGxpbmUgb2JqZWN0cywgd2l0aCBhIGZpeGVkIG1pbmltdW0gYW5kIG1heGltdW0gc2l6ZSwKYW5kIHRoZSBub24tbGVhZiBub2RlcyBzaW1wbHkgaG9sZCBhcnJheXMgb2YgY2hpbGQgbm9kZXMuIEVhY2ggbm9kZQpzdG9yZXMgYm90aCB0aGUgYW1vdW50IG9mIGxpbmVzIHRoYXQgbGl2ZSBiZWxvdyB0aGVtIGFuZCB0aGUgdmVydGljYWwKc3BhY2UgdGFrZW4gdXAgYnkgdGhlc2UgbGluZXMuIFRoaXMgYWxsb3dzIHRoZSB0cmVlIHRvIGJlIGluZGV4ZWQgYm90aApieSBsaW5lIG51bWJlciBhbmQgYnkgdmVydGljYWwgcG9zaXRpb24sIGFuZCBhbGwgYWNjZXNzIGhhcwpsb2dhcml0aG1pYyBjb21wbGV4aXR5IGluIHJlbGF0aW9uIHRvIHRoZSBkb2N1bWVudCBzaXplLjwvcD4KCjxwPkkgZ2F2ZSBsaW5lIG9iamVjdHMgYW5kIHRyZWUgbm9kZXMgcGFyZW50IHBvaW50ZXJzLCB0byB0aGUgbm9kZQphYm92ZSB0aGVtLiBXaGVuIGEgbGluZSBoYXMgdG8gdXBkYXRlIGl0cyBoZWlnaHQsIGl0IGNhbiBzaW1wbHkgd2Fsawp0aGVzZSBwb2ludGVycyB0byB0aGUgdG9wIG9mIHRoZSB0cmVlLCBhZGRpbmcgb3Igc3VidHJhY3RpbmcgdGhlCmRpZmZlcmVuY2UgaW4gaGVpZ2h0IGZyb20gZWFjaCBub2RlIGl0IGVuY291bnRlcnMuIFRoZSBwYXJlbnQgcG9pbnRlcnMKYWxzbyBtYWtlIGl0IGNoZWFwZXIgKGluIGNvbXBsZXhpdHkgdGVybXMsIHRoZSBkaWZmZXJlbmNlIGlzIHByb2JhYmx5CnRpbnkgaW4gbm9ybWFsLXNpemVkIGRvY3VtZW50cykgdG8gZmluZCB0aGUgY3VycmVudCBsaW5lIG51bWJlciB3aGVuCmdpdmVuIGEgbGluZSBvYmplY3QuIEluIHRoZSBvbGQgYXBwcm9hY2gsIHRoZSB3aG9sZSBkb2N1bWVudCBhcnJheSBoYWQKdG8gYmUgc2VhcmNoZWQuIE5vdywgd2UgY2FuIGp1c3Qgd2FsayB1cCB0aGUgdHJlZSBhbmQgY291bnQgdGhlIHNpemVzCm9mIHRoZSBub2RlcyBjb21pbmcgYmVmb3JlIHVzIGF0IGVhY2ggbGV2ZWwuPC9wPgoKPHA+SSBjaG9zZSBCLXRyZWVzLCBub3QgcmVndWxhciBiaW5hcnkgdHJlZXMsIG1vc3RseSBiZWNhdXNlIHRoZXkKYWxsb3cgZm9yIHZlcnkgZmFzdCBidWxrIGluc2VydGlvbnMgYW5kIGRlbGV0aW9ucy4gV2hlbiB0aGVyZSBpcyBhIGJpZwpjaGFuZ2UgdG8gYSBkb2N1bWVudCwgaXQgdHlwaWNhbGx5IGludm9sdmVzIGFkZGluZywgZGVsZXRpbmcsIG9yCnJlcGxhY2luZyBhIGNodW5rIG9mIHN1YnNlcXVlbnQgbGluZXMuIEluIGEgcmVndWxhciBiYWxhbmNlZCB0cmVlLCBhbGwKdGhlc2UgaW5zZXJ0cyBvciBkZWxldGVzIHdvdWxkIGhhdmUgdG8gYmUgZG9uZSBzZXBhcmF0ZWx5LCB3aGljaCBjb3VsZApiZSByZWFsbHkgZXhwZW5zaXZlLiBJbiBhIEItdHJlZSwgdG8gaW5zZXJ0IGEgY2h1bmssIHlvdSBqdXN0IHdhbGsKZG93biB0aGUgdHJlZSBvbmNlIHRvIGZpbmQgd2hlcmUgaXQgc2hvdWxkIGdvLCBpbnNlcnQgdGhlbSBhbGwgaW4gb25lCnNob3QsIGFuZCB0aGVuIGJyZWFrIHVwIHRoZSBub2RlIGlmIG5lZWRlZC4gVGhpcyBicmVha2luZyB1cCBtaWdodAppbnZvbHZlIGJyZWFraW5nIHVwIG5vZGVzIGZ1cnRoZXIgdXAsIGJ1dCBvbmx5IHJlcXVpcmVzIGEgc2luZ2xlIHBhc3MKYmFjayB1cCB0aGUgdHJlZS4gRm9yIGRlbGV0aW9uLCBJJ20gc29tZXdoYXQgbGF4IGluIGtlZXBpbmcgdGhpbmdzCmJhbGFuY2Vk4oCUSSBqdXN0IGNvbGxhcHNlIG5vZGVzIGludG8gYSBsZWFmIHdoZW4gdGhlaXIgY2hpbGQgY291bnQgZ29lcwpiZWxvdyBhIGdpdmVuIG51bWJlci4gVGhpcyBtZWFucyB0aGF0IHRoZXJlIGFyZSBzb21lIHdlaXJkIGVkaXRpbmcKcGF0dGVybnMgdGhhdCBtYXkgcmVzdWx0IGluIGEgc2VyaW91c2x5IHVuYmFsYW5jZWQgdHJlZSwgYnV0IGV2ZW4gc3VjaAphbiB1bmJhbGFuY2VkIHRyZWUgd2lsbCBwZXJmb3JtIHdlbGwsIHVubGVzcyB5b3Ugc3BlbmQgYSBkYXkgbWFraW5nCnN0cmFuZ2VseSByZXBlYXRpbmcgZWRpdHMgdG8gYSByZWFsbHkgYmlnIGRvY3VtZW50LjwvcD4KCjxoMiBpZD0ia2V5bWFwIj5LZXltYXBzPC9oMj4KCjxwPjxhIGhyZWY9IiNhcHByb2FjaCI+QWJvdmU8L2E+LCBJIGNsYWltZWQgdGhhdCBkaXJlY3RseSBjYXRjaGluZyBrZXkKZXZlbnRzIGZvciB0aGluZ3MgbGlrZSBjdXJzb3IgbW92ZW1lbnQgaXMgaW1wcmFjdGljYWwgYmVjYXVzZSBpdApyZXF1aXJlcyBzb21lIGJyb3dzZXItc3BlY2lmaWMga2x1ZGdlcy4gSSB0aGVuIHByb2NlZWRlZCB0byBleHBsYWluCnNvbWUgYXdmdWwgPGEgaHJlZj0iI3NlbGVjdGlvbiI+aGFja3M8L2E+IHRoYXQgd2VyZSBuZWVkZWQgdG8gbWFrZSBpdApwb3NzaWJsZSBmb3IgdGhlIHNlbGVjdGlvbiBjaGFuZ2VzIHRvIGJlIGRldGVjdGVkIHRocm91Z2ggdGhlCnRleHRhcmVhLiBJbiBmYWN0LCB0aGUgc2Vjb25kIGhhY2sgaXMgYWJvdXQgYXMgYmFkIGFzIHRoZSBmaXJzdC48L3A+Cgo8cD5PbiB0b3Agb2YgdGhhdCwgaW4gdGhlIHByZXNlbmNlIG9mIHVzZXItY29uZmlndXJhYmxlIHRhYiBzaXplcyBhbmQKY29sbGFwc2VkIGFuZCB3cmFwcGVkIGxpbmVzLCBsaW5pbmcgdXAgY3Vyc29yIG1vdmVtZW50IGluIHRoZSB0ZXh0YXJlYQp3aXRoIHdoYXQncyB2aXNpYmxlIG9uIHRoZSBzY3JlZW4gYmVjb21lcyBhIG5pZ2h0bWFyZS4gVGh1cywgSSd2ZQpkZWNpZGVkIHRvIG1vdmUgdG8gYSBtb2RlbCB3aGVyZSB0aGUgdGV4dGFyZWEncyBzZWxlY3Rpb24gaXMgbm8gbG9uZ2VyCmRlcGVuZGVkIG9uLjwvcD4KCjxwPlNvIEkgbW92ZWQgdG8gYSBtb2RlbCB3aGVyZSBhbGwgY3Vyc29yIG1vdmVtZW50IGlzIGhhbmRsZWQgYnkgbXkKb3duIGNvZGUuIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBhIGdvYWwgY29sdW1uLCBwcm9wZXIgaW50ZXJhY3Rpb24gb2YKY3Vyc29yIG1vdmVtZW50IHdpdGggY29sbGFwc2VkIGxpbmVzLCBhbmQgbWFrZXMgaXQgcG9zc2libGUgZm9yCnZlcnRpY2FsIG1vdmVtZW50IHRvIG1vdmUgdGhyb3VnaCB3cmFwcGVkIGxpbmVzIHByb3Blcmx5LCBpbnN0ZWFkIG9mCmp1c3QgdHJlYXRpbmcgdGhlbSBsaWtlIG5vbi13cmFwcGVkIGxpbmVzLjwvcD4KCjxwPlRoZSBrZXkgZXZlbnQgaGFuZGxlcnMgbm93IHRyYW5zbGF0ZSB0aGUga2V5IGV2ZW50IGludG8gYSBzdHJpbmcsCnNvbWV0aGluZyBsaWtlIDxjb2RlPkN0cmwtSG9tZTwvY29kZT4gb3IgPGNvZGU+U2hpZnQtQ21kLVI8L2NvZGU+LCBhbmQKdXNlIHRoYXQgc3RyaW5nIHRvIGxvb2sgdXAgYW4gYWN0aW9uIHRvIHBlcmZvcm0uIFRvIG1ha2Uga2V5YmluZGluZwpjdXN0b21pemFibGUsIHRoaXMgbG9va3VwIGdvZXMgdGhyb3VnaAphIDxhIGhyZWY9Im1hbnVhbC5odG1sI29wdGlvbl9rZXlNYXAiPnRhYmxlPC9hPiwgdXNpbmcgYSBzY2hlbWUgdGhhdAphbGxvd3Mgc3VjaCB0YWJsZXMgdG8gYmUgY2hhaW5lZCB0b2dldGhlciAoZm9yIGV4YW1wbGUsIHRoZSBkZWZhdWx0Ck1hYyBiaW5kaW5ncyBmYWxsIHRocm91Z2ggdG8gYSB0YWJsZSBuYW1lZCAnZW1hY3N5Jywgd2hpY2ggZGVmaW5lcwpiYXNpYyBFbWFjcy1zdHlsZSBiaW5kaW5ncyBsaWtlIDxjb2RlPkN0cmwtRjwvY29kZT4sIGFuZCB3aGljaCBpcyBhbHNvCnVzZWQgYnkgdGhlIGN1c3RvbSBFbWFjcyBiaW5kaW5ncykuPC9wPgoKPHA+QSBuZXcKb3B0aW9uIDxhIGhyZWY9Im1hbnVhbC5odG1sI29wdGlvbl9leHRyYUtleXMiPjxjb2RlPmV4dHJhS2V5czwvY29kZT48L2E+CmFsbG93cyBhZC1ob2Mga2V5YmluZGluZ3MgdG8gYmUgZGVmaW5lZCBpbiBhIG11Y2ggbmljZXIgd2F5IHRoYW4gd2hhdAp3YXMgcG9zc2libGUgd2l0aCB0aGUKb2xkIDxhIGhyZWY9Im1hbnVhbC5odG1sI29wdGlvbl9vbktleUV2ZW50Ij48Y29kZT5vbktleUV2ZW50PC9jb2RlPjwvYT4KY2FsbGJhY2suIFlvdSBzaW1wbHkgcHJvdmlkZSBhbiBvYmplY3QgbWFwcGluZyBrZXkgaWRlbnRpZmllcnMgdG8KZnVuY3Rpb25zLCBpbnN0ZWFkIG9mIHBhaW5zdGFraW5nbHkgbG9va2luZyBhdCByYXcga2V5IGV2ZW50cy48L3A+Cgo8cD5CdWlsdC1pbiBjb21tYW5kcyBtYXAgdG8gc3RyaW5ncywgcmF0aGVyIHRoYW4gZnVuY3Rpb25zLCBmb3IKZXhhbXBsZSA8Y29kZT4iZ29MaW5lVXAiPC9jb2RlPiBpcyB0aGUgZGVmYXVsdCBhY3Rpb24gYm91bmQgdG8gdGhlIHVwCmFycm93IGtleS4gVGhpcyBhbGxvd3MgbmV3IGtleW1hcHMgdG8gcmVmZXIgdG8gdGhlbSB3aXRob3V0CmR1cGxpY2F0aW5nIGFueSBjb2RlLiBOZXcgY29tbWFuZHMgY2FuIGJlIGRlZmluZWQgYnkgYXNzaWduaW5nIHRvCnRoZSA8Y29kZT5Db2RlTWlycm9yLmNvbW1hbmRzPC9jb2RlPiBvYmplY3QsIHdoaWNoIG1hcHMgc3VjaCBjb21tYW5kcwp0byBmdW5jdGlvbnMuPC9wPgoKPHA+VGhlIGhpZGRlbiB0ZXh0YXJlYSBub3cgb25seSBob2xkcyB0aGUgY3VycmVudCBzZWxlY3Rpb24sIHdpdGggbm8KZXh0cmEgY2hhcmFjdGVycyBhcm91bmQgaXQuIFRoaXMgaGFzIGEgbmljZSBhZHZhbnRhZ2U6IHBvbGxpbmcgZm9yCmlucHV0IGJlY29tZXMgbXVjaCwgbXVjaCBmYXN0ZXIuIElmIHRoZXJlJ3MgYSBiaWcgc2VsZWN0aW9uLCB0aGlzIHRleHQKZG9lcyBub3QgaGF2ZSB0byBiZSByZWFkIGZyb20gdGhlIHRleHRhcmVhIGV2ZXJ5IHRpbWXigJR3aGVuIHdlIHBvbGwsCmp1c3Qgbm90aWNpbmcgdGhhdCBzb21ldGhpbmcgaXMgc3RpbGwgc2VsZWN0ZWQgaXMgZW5vdWdoIHRvIHRlbGwgdXMKdGhhdCBubyBuZXcgdGV4dCB3YXMgdHlwZWQuPC9wPgoKPHA+VGhlIHJlYXNvbiB0aGF0IGNoZWFwIHBvbGxpbmcgaXMgaW1wb3J0YW50IGlzIHRoYXQgbWFueSBicm93c2VycyBkbwpub3QgZmlyZSB1c2VmdWwgZXZlbnRzIG9uIElNRSAoaW5wdXQgbWV0aG9kIGVuZ2luZSkgaW5wdXQsIHdoaWNoIGlzCnRoZSB0aGluZyB3aGVyZSBwZW9wbGUgaW5wdXR0aW5nIGEgbGFuZ3VhZ2UgbGlrZSBKYXBhbmVzZSBvciBDaGluZXNlCnVzZSBtdWx0aXBsZSBrZXlzdHJva2VzIHRvIGNyZWF0ZSBhIGNoYXJhY3RlciBvciBzZXF1ZW5jZSBvZgpjaGFyYWN0ZXJzLiBNb3N0IG1vZGVybiBicm93c2VycyBmaXJlIDxjb2RlPmlucHV0PC9jb2RlPiB3aGVuIHRoZQpjb21wb3NpbmcgaXMgZmluaXNoZWQsIGJ1dCBtYW55IGRvbid0IGZpcmUgYW55dGhpbmcgd2hlbiB0aGUgY2hhcmFjdGVyCmlzIHVwZGF0ZWQgPGVtPmR1cmluZzwvZW0+IGNvbXBvc2l0aW9uLiBTbyB3ZSBwb2xsLCB3aGVuZXZlciB0aGUKZWRpdG9yIGlzIGZvY3VzZWQsIHRvIHByb3ZpZGUgaW1tZWRpYXRlIHVwZGF0ZXMgb2YgdGhlIGRpc3BsYXkuPC9wPgoKPC9kaXY+PGRpdiBjbGFzcz0icmlnaHRzbWFsbCBibGsiPgoKICAgIDxoMj5Db250ZW50czwvaDI+CgogICAgPHVsPgogICAgICA8bGk+PGEgaHJlZj0iI2ludHJvIj5JbnRyb2R1Y3Rpb248L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9IiNhcHByb2FjaCI+R2VuZXJhbCBBcHByb2FjaDwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iI2lucHV0Ij5JbnB1dDwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iI3NlbGVjdGlvbiI+U2VsZWN0aW9uPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSIjdXBkYXRlIj5JbnRlbGxpZ2VudCBVcGRhdGluZzwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iI3BhcnNlIj5QYXJzaW5nPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSIjc3VtbWFyeSI+V2hhdCBHaXZlcz88L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9IiNidHJlZSI+Q29udGVudCBSZXByZXNlbnRhdGlvbjwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iI2tleW1hcCI+S2V5IE1hcHM8L2E+PC9saT4KICAgIDwvdWw+Cgo8L2Rpdj48L2Rpdj4KCjxkaXYgc3R5bGU9ImhlaWdodDogMmVtIj4mbmJzcDs8L2Rpdj4KCjwvYm9keT48L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/doc/manual.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFVzZXIgTWFudWFsPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Imh0dHA6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PURyb2lkK1NhbnN8RHJvaWQrU2Fuczpib2xkIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJkb2NzLmNzcyIvPgogICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiLz4KICAgIDxzdHlsZT5kbCBkbCB7bWFyZ2luOiAwO308L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KCjxoMT48c3BhbiBjbGFzcz0ibG9nby1icmFjZXMiPnsgfTwvc3Bhbj4gPGEgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0LyI+Q29kZU1pcnJvcjwvYT48L2gxPgoKPHByZSBjbGFzcz0iZ3JleSI+CjxpbWcgc3JjPSJiYWJvb24ucG5nIiBjbGFzcz0ibG9nbyIgYWx0PSJsb2dvIi8+LyogVXNlciBtYW51YWwgYW5kCiAgIHJlZmVyZW5jZSBndWlkZSAqLwo8L3ByZT4KCjxkaXYgY2xhc3M9ImNsZWFyIj48ZGl2IGNsYXNzPSJsZWZ0YmlnIGJsayI+CgogICAgPGgyIGlkPSJvdmVydmlldyI+T3ZlcnZpZXc8L2gyPgoKICAgIDxwPkNvZGVNaXJyb3IgaXMgYSBjb2RlLWVkaXRvciBjb21wb25lbnQgdGhhdCBjYW4gYmUgZW1iZWRkZWQgaW4KICAgIFdlYiBwYWdlcy4gVGhlIGNvZGUgbGlicmFyeSBwcm92aWRlcyA8ZW0+b25seTwvZW0+IHRoZSBlZGl0b3IKICAgIGNvbXBvbmVudCwgbm8gYWNjb21wYW55aW5nIGJ1dHRvbnMsIGF1dG8tY29tcGxldGlvbiwgb3Igb3RoZXIgSURFCiAgICBmdW5jdGlvbmFsaXR5LiBJdCBkb2VzIHByb3ZpZGUgYSByaWNoIEFQSSBvbiB0b3Agb2Ygd2hpY2ggc3VjaAogICAgZnVuY3Rpb25hbGl0eSBjYW4gYmUgc3RyYWlnaHRmb3J3YXJkbHkgaW1wbGVtZW50ZWQuIFNlZQogICAgdGhlIDxhIGhyZWY9IiNhZGRvbnMiPmFkZC1vbnM8L2E+IGluY2x1ZGVkIGluIHRoZSBkaXN0cmlidXRpb24sCiAgICBhbmQKICAgIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9jdG9sYWJzLmNvbS9qYXZhc2NyaXB0cy9jb2RlbWlycm9yLXVpLyI+Q29kZU1pcnJvcgogICAgVUk8L2E+IHByb2plY3QsIGZvciByZXVzYWJsZSBpbXBsZW1lbnRhdGlvbnMgb2YgZXh0cmEgZmVhdHVyZXMuPC9wPgoKICAgIDxwPkNvZGVNaXJyb3Igd29ya3Mgd2l0aCBsYW5ndWFnZS1zcGVjaWZpYyBtb2Rlcy4gTW9kZXMgYXJlCiAgICBKYXZhU2NyaXB0IHByb2dyYW1zIHRoYXQgaGVscCBjb2xvciAoYW5kIG9wdGlvbmFsbHkgaW5kZW50KSB0ZXh0CiAgICB3cml0dGVuIGluIGEgZ2l2ZW4gbGFuZ3VhZ2UuIFRoZSBkaXN0cmlidXRpb24gY29tZXMgd2l0aCBhIGZldwogICAgbW9kZXMgKHNlZSB0aGUgPGNvZGU+bW9kZS88L2NvZGU+IGRpcmVjdG9yeSksIGFuZCBpdCBpc24ndCBoYXJkCiAgICB0byA8YSBocmVmPSIjbW9kZWFwaSI+d3JpdGUgbmV3IG9uZXM8L2E+IGZvciBvdGhlciBsYW5ndWFnZXMuPC9wPgoKICAgIDxoMiBpZD0idXNhZ2UiPkJhc2ljIFVzYWdlPC9oMj4KCiAgICA8cD5UaGUgZWFzaWVzdCB3YXkgdG8gdXNlIENvZGVNaXJyb3IgaXMgdG8gc2ltcGx5IGxvYWQgdGhlIHNjcmlwdAogICAgYW5kIHN0eWxlIHNoZWV0IGZvdW5kIHVuZGVyIDxjb2RlPmxpYi88L2NvZGU+IGluIHRoZSBkaXN0cmlidXRpb24sCiAgICBwbHVzIGEgbW9kZSBzY3JpcHQgZnJvbSBvbmUgb2YgdGhlIDxjb2RlPm1vZGUvPC9jb2RlPiBkaXJlY3RvcmllcwogICAgYW5kIGEgdGhlbWUgc3R5bGVzaGVldCBmcm9tIDxjb2RlPnRoZW1lLzwvY29kZT4uIChTZWUKICAgIGFsc28gPGEgaHJlZj0iY29tcHJlc3MuaHRtbCI+dGhlIGNvbXByZXNzaW9uIGhlbHBlcjwvYT4uKSBGb3IKICAgIGV4YW1wbGU6PC9wPgoKICAgIDxwcmU+Jmx0O3NjcmlwdCBzcmM9ImxpYi9jb2RlbWlycm9yLmpzIj4mbHQ7L3NjcmlwdD4KJmx0O2xpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9saWIvY29kZW1pcnJvci5jc3MiPgombHQ7c2NyaXB0IHNyYz0ibW9kZS9qYXZhc2NyaXB0L2phdmFzY3JpcHQuanMiPiZsdDsvc2NyaXB0PjwvcHJlPgoKICAgIDxwPkhhdmluZyBkb25lIHRoaXMsIGFuIGVkaXRvciBpbnN0YW5jZSBjYW4gYmUgY3JlYXRlZCBsaWtlCiAgICB0aGlzOjwvcD4KCiAgICA8cHJlPnZhciBteUNvZGVNaXJyb3IgPSBDb2RlTWlycm9yKGRvY3VtZW50LmJvZHkpOzwvcHJlPgoKICAgIDxwPlRoZSBlZGl0b3Igd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgZG9jdW1lbnQgYm9keSwgd2lsbCBzdGFydAogICAgZW1wdHksIGFuZCB3aWxsIHVzZSB0aGUgbW9kZSB0aGF0IHdlIGxvYWRlZC4gVG8gaGF2ZSBtb3JlIGNvbnRyb2wKICAgIG92ZXIgdGhlIG5ldyBlZGl0b3IsIGEgY29uZmlndXJhdGlvbiBvYmplY3QgY2FuIGJlIHBhc3NlZAogICAgdG8gPGNvZGU+Q29kZU1pcnJvcjwvY29kZT4gYXMgYSBzZWNvbmQgYXJndW1lbnQ6PC9wPgoKICAgIDxwcmU+dmFyIG15Q29kZU1pcnJvciA9IENvZGVNaXJyb3IoZG9jdW1lbnQuYm9keSwgewogIHZhbHVlOiAiZnVuY3Rpb24gbXlTY3JpcHQoKXtyZXR1cm4gMTAwO31cbiIsCiAgbW9kZTogICJqYXZhc2NyaXB0Igp9KTs8L3ByZT4KCiAgICA8cD5UaGlzIHdpbGwgaW5pdGlhbGl6ZSB0aGUgZWRpdG9yIHdpdGggYSBwaWVjZSBvZiBjb2RlIGFscmVhZHkgaW4KICAgIGl0LCBhbmQgZXhwbGljaXRseSB0ZWxsIGl0IHRvIHVzZSB0aGUgSmF2YVNjcmlwdCBtb2RlICh3aGljaCBpcwogICAgdXNlZnVsIHdoZW4gbXVsdGlwbGUgbW9kZXMgYXJlIGxvYWRlZCkuCiAgICBTZWUgPGEgaHJlZj0iI2NvbmZpZyI+YmVsb3c8L2E+IGZvciBhIGZ1bGwgZGlzY3Vzc2lvbiBvZiB0aGUKICAgIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IENvZGVNaXJyb3IgYWNjZXB0cy48L3A+CgogICAgPHA+SW4gY2FzZXMgd2hlcmUgeW91IGRvbid0IHdhbnQgdG8gYXBwZW5kIHRoZSBlZGl0b3IgdG8gYW4KICAgIGVsZW1lbnQsIGFuZCBuZWVkIG1vcmUgY29udHJvbCBvdmVyIHRoZSB3YXkgaXQgaXMgaW5zZXJ0ZWQsIHRoZQogICAgZmlyc3QgYXJndW1lbnQgdG8gdGhlIDxjb2RlPkNvZGVNaXJyb3I8L2NvZGU+IGZ1bmN0aW9uIGNhbiBhbHNvCiAgICBiZSBhIGZ1bmN0aW9uIHRoYXQsIHdoZW4gZ2l2ZW4gYSBET00gZWxlbWVudCwgaW5zZXJ0cyBpdCBpbnRvIHRoZQogICAgZG9jdW1lbnQgc29tZXdoZXJlLiBUaGlzIGNvdWxkIGJlIHVzZWQgdG8sIGZvciBleGFtcGxlLCByZXBsYWNlIGEKICAgIHRleHRhcmVhIHdpdGggYSByZWFsIGVkaXRvcjo8L3A+CgogICAgPHByZT52YXIgbXlDb2RlTWlycm9yID0gQ29kZU1pcnJvcihmdW5jdGlvbihlbHQpIHsKICBteVRleHRBcmVhLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGVsdCwgbXlUZXh0QXJlYSk7Cn0sIHt2YWx1ZTogbXlUZXh0QXJlYS52YWx1ZX0pOzwvcHJlPgoKICAgIDxwPkhvd2V2ZXIsIGZvciB0aGlzIHVzZSBjYXNlLCB3aGljaCBpcyBhIGNvbW1vbiB3YXkgdG8gdXNlCiAgICBDb2RlTWlycm9yLCB0aGUgbGlicmFyeSBwcm92aWRlcyBhIG11Y2ggbW9yZSBwb3dlcmZ1bAogICAgc2hvcnRjdXQ6PC9wPgoKICAgIDxwcmU+dmFyIG15Q29kZU1pcnJvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKG15VGV4dEFyZWEpOzwvcHJlPgoKICAgIDxwPlRoaXMgd2lsbCwgYW1vbmcgb3RoZXIgdGhpbmdzLCBlbnN1cmUgdGhhdCB0aGUgdGV4dGFyZWEncyB2YWx1ZQogICAgaXMgdXBkYXRlZCB3aGVuIHRoZSBmb3JtIChpZiBpdCBpcyBwYXJ0IG9mIGEgZm9ybSkgaXMgc3VibWl0dGVkLgogICAgU2VlIHRoZSA8YSBocmVmPSIjZnJvbVRleHRBcmVhIj5BUEkgcmVmZXJlbmNlPC9hPiBmb3IgYSBmdWxsCiAgICBkZXNjcmlwdGlvbiBvZiB0aGlzIG1ldGhvZC48L3A+CgogICAgPGgyIGlkPSJjb25maWciPkNvbmZpZ3VyYXRpb248L2gyPgoKICAgIDxwPkJvdGggdGhlIDxjb2RlPkNvZGVNaXJyb3I8L2NvZGU+IGZ1bmN0aW9uIGFuZAogICAgaXRzIDxjb2RlPmZyb21UZXh0QXJlYTwvY29kZT4gbWV0aG9kIHRha2UgYXMgc2Vjb25kIChvcHRpb25hbCkKICAgIGFyZ3VtZW50IGFuIG9iamVjdCBjb250YWluaW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gQW55IG9wdGlvbgogICAgbm90IHN1cHBsaWVkIGxpa2UgdGhpcyB3aWxsIGJlIHRha2VuCiAgICBmcm9tIDxjb2RlPkNvZGVNaXJyb3IuZGVmYXVsdHM8L2NvZGU+LCBhbiBvYmplY3QgY29udGFpbmluZyB0aGUKICAgIGRlZmF1bHQgb3B0aW9ucy4gWW91IGNhbiB1cGRhdGUgdGhpcyBvYmplY3QgdG8gY2hhbmdlIHRoZSBkZWZhdWx0cwogICAgb24geW91ciBwYWdlLjwvcD4KCiAgICA8cD5PcHRpb25zIGFyZSBub3QgY2hlY2tlZCBpbiBhbnkgd2F5LCBzbyBzZXR0aW5nIGJvZ3VzIG9wdGlvbgogICAgdmFsdWVzIGlzIGJvdW5kIHRvIGxlYWQgdG8gb2RkIGVycm9ycy48L3A+CgogICAgPHA+VGhlc2UgYXJlIHRoZSBzdXBwb3J0ZWQgb3B0aW9uczo8L3A+CgogICAgPGRsPgogICAgICA8ZHQgaWQ9Im9wdGlvbl92YWx1ZSI+PGNvZGU+dmFsdWUgKHN0cmluZyk8L2NvZGU+PC9kdD4KICAgICAgPGRkPlRoZSBzdGFydGluZyB2YWx1ZSBvZiB0aGUgZWRpdG9yLjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl9tb2RlIj48Y29kZT5tb2RlIChzdHJpbmcgb3Igb2JqZWN0KTwvY29kZT48L2R0PgogICAgICA8ZGQ+VGhlIG1vZGUgdG8gdXNlLiBXaGVuIG5vdCBnaXZlbiwgdGhpcyB3aWxsIGRlZmF1bHQgdG8gdGhlCiAgICAgIGZpcnN0IG1vZGUgdGhhdCB3YXMgbG9hZGVkLiBJdCBtYXkgYmUgYSBzdHJpbmcsIHdoaWNoIGVpdGhlcgogICAgICBzaW1wbHkgbmFtZXMgdGhlIG1vZGUgb3IgaXMKICAgICAgYSA8YSBocmVmPSJodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL01JTUUiPk1JTUU8L2E+IHR5cGUKICAgICAgYXNzb2NpYXRlZCB3aXRoIHRoZSBtb2RlLiBBbHRlcm5hdGl2ZWx5LCBpdCBtYXkgYmUgYW4gb2JqZWN0CiAgICAgIGNvbnRhaW5pbmcgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgbW9kZSwgd2l0aAogICAgICBhIDxjb2RlPm5hbWU8L2NvZGU+IHByb3BlcnR5IHRoYXQgbmFtZXMgdGhlIG1vZGUgKGZvcgogICAgICBleGFtcGxlIDxjb2RlPntuYW1lOiAiamF2YXNjcmlwdCIsIGpzb246IHRydWV9PC9jb2RlPikuIFRoZSBkZW1vCiAgICAgIHBhZ2VzIGZvciBlYWNoIG1vZGUgY29udGFpbiBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IGNvbmZpZ3VyYXRpb24KICAgICAgcGFyYW1ldGVycyB0aGUgbW9kZSBzdXBwb3J0cy4gWW91IGNhbiBhc2sgQ29kZU1pcnJvciB3aGljaCBtb2RlcwogICAgICBhbmQgTUlNRSB0eXBlcyBhcmUgbG9hZGVkIHdpdGgKICAgICAgdGhlIDxjb2RlPkNvZGVNaXJyb3IubGlzdE1vZGVzPC9jb2RlPgogICAgICBhbmQgPGNvZGU+Q29kZU1pcnJvci5saXN0TUlNRXM8L2NvZGU+IGZ1bmN0aW9ucy48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25fdGhlbWUiPjxjb2RlPnRoZW1lIChzdHJpbmcpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5UaGUgdGhlbWUgdG8gc3R5bGUgdGhlIGVkaXRvciB3aXRoLiBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlCiAgICAgIENTUyBmaWxlIGRlZmluaW5nIHRoZSBjb3JyZXNwb25kaW5nIDxjb2RlPi5jbS1zLVtuYW1lXTwvY29kZT4KICAgICAgc3R5bGVzIGlzIGxvYWRlZCAoc2VlCiAgICAgIHRoZSA8YSBocmVmPSIuLi90aGVtZS8iPjxjb2RlPnRoZW1lPC9jb2RlPjwvYT4gZGlyZWN0b3J5IGluIHRoZQogICAgICBkaXN0cmlidXRpb24pLiBUaGUgZGVmYXVsdCBpcyA8Y29kZT4iZGVmYXVsdCI8L2NvZGU+LCBmb3Igd2hpY2gKICAgICAgY29sb3JzIGFyZSBpbmNsdWRlZCBpbiA8Y29kZT5jb2RlbWlycm9yLmNzczwvY29kZT4uIEl0IGlzCiAgICAgIHBvc3NpYmxlIHRvIHVzZSBtdWx0aXBsZSB0aGVtaW5nIGNsYXNzZXMgYXQgb25jZeKAlGZvcgogICAgICBleGFtcGxlIDxjb2RlPiJmb28gYmFyIjwvY29kZT4gd2lsbCBhc3NpZ24gYm90aAogICAgICB0aGUgPGNvZGU+Y20tcy1mb288L2NvZGU+IGFuZCB0aGUgPGNvZGU+Y20tcy1iYXI8L2NvZGU+IGNsYXNzZXMKICAgICAgdG8gdGhlIGVkaXRvci48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25faW5kZW50VW5pdCI+PGNvZGU+aW5kZW50VW5pdCAoaW50ZWdlcik8L2NvZGU+PC9kdD4KICAgICAgPGRkPkhvdyBtYW55IHNwYWNlcyBhIGJsb2NrICh3aGF0ZXZlciB0aGF0IG1lYW5zIGluIHRoZSBlZGl0ZWQKICAgICAgbGFuZ3VhZ2UpIHNob3VsZCBiZSBpbmRlbnRlZC4gVGhlIGRlZmF1bHQgaXMgMi48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25fc21hcnRJbmRlbnQiPjxjb2RlPnNtYXJ0SW5kZW50IChib29sZWFuKTwvY29kZT48L2R0PgogICAgICA8ZGQ+V2hldGhlciB0byB1c2UgdGhlIGNvbnRleHQtc2Vuc2l0aXZlIGluZGVudGF0aW9uIHRoYXQgdGhlCiAgICAgIG1vZGUgcHJvdmlkZXMgKG9yIGp1c3QgaW5kZW50IHRoZSBzYW1lIGFzIHRoZSBsaW5lIGJlZm9yZSkuCiAgICAgIERlZmF1bHRzIHRvIHRydWUuPC9kZD4KCiAgICAgIDxkdCBpZD0ib3B0aW9uX3RhYlNpemUiPjxjb2RlPnRhYlNpemUgKGludGVnZXIpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5UaGUgd2lkdGggb2YgYSB0YWIgY2hhcmFjdGVyLiBEZWZhdWx0cyB0byA0LjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl9pbmRlbnRXaXRoVGFicyI+PGNvZGU+aW5kZW50V2l0aFRhYnMgKGJvb2xlYW4pPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5XaGV0aGVyLCB3aGVuIGluZGVudGluZywgdGhlIGZpcnN0IE4qPGNvZGU+dGFiU2l6ZTwvY29kZT4KICAgICAgc3BhY2VzIHNob3VsZCBiZSByZXBsYWNlZCBieSBOIHRhYnMuIERlZmF1bHQgaXMgZmFsc2UuPC9kZD4KCiAgICAgIDxkdCBpZD0ib3B0aW9uX2VsZWN0cmljQ2hhcnMiPjxjb2RlPmVsZWN0cmljQ2hhcnMgKGJvb2xlYW4pPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5Db25maWd1cmVzIHdoZXRoZXIgdGhlIGVkaXRvciBzaG91bGQgcmUtaW5kZW50IHRoZSBjdXJyZW50CiAgICAgIGxpbmUgd2hlbiBhIGNoYXJhY3RlciBpcyB0eXBlZCB0aGF0IG1pZ2h0IGNoYW5nZSBpdHMgcHJvcGVyCiAgICAgIGluZGVudGF0aW9uIChvbmx5IHdvcmtzIGlmIHRoZSBtb2RlIHN1cHBvcnRzIGluZGVudGF0aW9uKS4KICAgICAgRGVmYXVsdCBpcyB0cnVlLjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl9rZXlNYXAiPjxjb2RlPmtleU1hcCAoc3RyaW5nKTwvY29kZT48L2R0PgogICAgICA8ZGQ+Q29uZmlndXJlcyB0aGUga2V5bWFwIHRvIHVzZS4gVGhlIGRlZmF1bHQKICAgICAgaXMgPGNvZGU+ImRlZmF1bHQiPC9jb2RlPiwgd2hpY2ggaXMgdGhlIG9ubHkga2V5bWFwIGRlZmluZWQKICAgICAgaW4gPGNvZGU+Y29kZW1pcnJvci5qczwvY29kZT4gaXRzZWxmLiBFeHRyYSBrZXltYXBzIGFyZSBmb3VuZCBpbgogICAgICB0aGUgPGEgaHJlZj0iLi4va2V5bWFwLyI+PGNvZGU+a2V5bWFwPC9jb2RlPjwvYT4gZGlyZWN0b3J5LjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl9leHRyYUtleXMiPjxjb2RlPmV4dHJhS2V5cyAob2JqZWN0KTwvY29kZT48L2R0PgogICAgICA8ZGQ+Q2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBleHRyYSBrZXliaW5kaW5ncyBmb3IgdGhlIGVkaXRvci4KICAgICAgV2hlbiBnaXZlbiwgc2hvdWxkIGJlIGFuIG9iamVjdCB3aXRoIHByb3BlcnR5IG5hbWVzCiAgICAgIGxpa2UgPGNvZGU+Q3RybC1BPC9jb2RlPiwgPGNvZGU+SG9tZTwvY29kZT4sCiAgICAgIGFuZCA8Y29kZT5DdHJsLUFsdC1MZWZ0PC9jb2RlPi4gU2VlCiAgICAgIHRoZSA8Y29kZT5Db2RlTWlycm9yLmtleU5hbWVzPC9jb2RlPiBvYmplY3QgZm9yIHRoZSBuYW1lcyBvZiBhbGwKICAgICAgdGhlIGtleXMuIFRoZSB2YWx1ZXMgaW4gdGhpcyBvYmplY3QgY2FuIGVpdGhlciBiZSBmdW5jdGlvbnMsCiAgICAgIHdoaWNoIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIENvZGVNaXJyb3IgaW5zdGFuY2Ugd2hlbiB0aGUga2V5CiAgICAgIGlzIHByZXNzZWQsIG9yIHN0cmluZ3MsIHdoaWNoIHNob3VsZCBuYW1lIGNvbW1hbmRzIGRlZmluZWQKICAgICAgaW4gPGNvZGU+Q29kZU1pcnJvci5jb21tYW5kczwvY29kZT4gKG5vdCBkb2N1bWVudGVkIHByb3Blcmx5LAogICAgICBidXQgbG9va2luZyBhdCB0aGUgc291cmNlIGFuZCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgYnVpbHQtaW4KICAgICAga2V5bWFwcywgdGhleSBzaG91bGQgYmUgcmF0aGVyIG9idmlvdXMpLjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl9saW5lV3JhcHBpbmciPjxjb2RlPmxpbmVXcmFwcGluZyAoYm9vbGVhbik8L2NvZGU+PC9kdD4KICAgICAgPGRkPldoZXRoZXIgQ29kZU1pcnJvciBzaG91bGQgc2Nyb2xsIG9yIHdyYXAgZm9yIGxvbmcgbGluZXMuCiAgICAgIERlZmF1bHRzIHRvIDxjb2RlPmZhbHNlPC9jb2RlPiAoc2Nyb2xsKS48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25fbGluZU51bWJlcnMiPjxjb2RlPmxpbmVOdW1iZXJzIChib29sZWFuKTwvY29kZT48L2R0PgogICAgICA8ZGQ+V2hldGhlciB0byBzaG93IGxpbmUgbnVtYmVycyB0byB0aGUgbGVmdCBvZiB0aGUgZWRpdG9yLjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl9maXJzdExpbmVOdW1iZXIiPjxjb2RlPmZpcnN0TGluZU51bWJlciAoaW50ZWdlcik8L2NvZGU+PC9kdD4KICAgICAgPGRkPkF0IHdoaWNoIG51bWJlciB0byBzdGFydCBjb3VudGluZyBsaW5lcy4gRGVmYXVsdCBpcyAxLjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl9ndXR0ZXIiPjxjb2RlPmd1dHRlciAoYm9vbGVhbik8L2NvZGU+PC9kdD4KICAgICAgPGRkPkNhbiBiZSB1c2VkIHRvIGZvcmNlIGEgJ2d1dHRlcicgKGVtcHR5IHNwYWNlIG9uIHRoZSBsZWZ0IG9mCiAgICAgIHRoZSBlZGl0b3IpIHRvIGJlIHNob3duIGV2ZW4gd2hlbiBubyBsaW5lIG51bWJlcnMgYXJlIGFjdGl2ZS4KICAgICAgVGhpcyBpcyB1c2VmdWwgZm9yIHNldHRpbmcgPGEgaHJlZj0iI3NldE1hcmtlciI+bWFya2VyczwvYT4uPC9kZD4KCiAgICAgIDxkdCBpZD0ib3B0aW9uX2ZpeGVkR3V0dGVyIj48Y29kZT5maXhlZEd1dHRlciAoYm9vbGVhbik8L2NvZGU+PC9kdD4KICAgICAgPGRkPldoZW4gZW5hYmxlZCAob2ZmIGJ5IGRlZmF1bHQpLCB0aGlzIHdpbGwgbWFrZSB0aGUgZ3V0dGVyCiAgICAgIHN0YXkgdmlzaWJsZSB3aGVuIHRoZSBkb2N1bWVudCBpcyBzY3JvbGxlZCBob3Jpem9udGFsbHkuPC9kZD4KCiAgICAgIDxkdCBpZD0ib3B0aW9uX3JlYWRPbmx5Ij48Y29kZT5yZWFkT25seSAoYm9vbGVhbik8L2NvZGU+PC9kdD4KICAgICAgPGRkPlRoaXMgZGlzYWJsZXMgZWRpdGluZyBvZiB0aGUgZWRpdG9yIGNvbnRlbnQgYnkgdGhlIHVzZXIuIElmCiAgICAgIHRoZSBzcGVjaWFsIHZhbHVlIDxjb2RlPiJub2N1cnNvciI8L2NvZGU+IGlzIGdpdmVuIChpbnN0ZWFkIG9mCiAgICAgIHNpbXBseSA8Y29kZT50cnVlPC9jb2RlPiksIGZvY3VzaW5nIG9mIHRoZSBlZGl0b3IgaXMgYWxzbwogICAgICBkaXNhbGxvd2VkLjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl9vbkNoYW5nZSI+PGNvZGU+b25DaGFuZ2UgKGZ1bmN0aW9uKTwvY29kZT48L2R0PgogICAgICA8ZGQ+V2hlbiBnaXZlbiwgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBldmVyeSB0aW1lIHRoZQogICAgICBjb250ZW50IG9mIHRoZSBlZGl0b3IgaXMgY2hhbmdlZC4gSXQgd2lsbCBiZSBnaXZlbiB0aGUgZWRpdG9yCiAgICAgIGluc3RhbmNlIGFzIGZpcnN0IGFyZ3VtZW50LCBhbmQgYW4gPGNvZGU+e2Zyb20sIHRvLCB0ZXh0LCBuZXh0fTwvY29kZT4KICAgICAgb2JqZWN0IGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNoYW5nZXMKICAgICAgdGhhdCBvY2N1cnJlZCBhcyBzZWNvbmQgYXJndW1lbnQuIDxjb2RlPmZyb208L2NvZGU+CiAgICAgIGFuZCA8Y29kZT50bzwvY29kZT4gYXJlIHRoZSBwb3NpdGlvbnMgKGluIHRoZSBwcmUtY2hhbmdlCiAgICAgIGNvb3JkaW5hdGUgc3lzdGVtKSB3aGVyZSB0aGUgY2hhbmdlIHN0YXJ0ZWQgYW5kCiAgICAgIGVuZGVkIChmb3IgZXhhbXBsZSwgaXQgbWlnaHQgYmUgPGNvZGU+e2NoOjAsIGxpbmU6MTh9PC9jb2RlPiBpZiB0aGUKICAgICAgcG9zaXRpb24gaXMgYXQgbGluZSAjMTksIGF0IHRoZSBmaXJzdCBjaGFyYWN0ZXIuIDxjb2RlPnRleHQ8L2NvZGU+IGlzIGFuCiAgICAgIGFycmF5IG9mIHN0cmluZ3MgcmVwcmVzZW50aW5nIHRoZSB0ZXh0IHRoYXQgcmVwbGFjZWQgdGhlIGNoYW5nZWQgcmFuZ2UKICAgICAgKHNwbGl0IGJ5IGxpbmUpLiBJZiBtdWx0aXBsZSBjaGFuZ2VzIGhhcHBlbmVkIGR1cmluZyBhIHNpbmdsZSBvcGVyYXRpb24sCiAgICAgIHRoZSBvYmplY3Qgd2lsbCBoYXZlIGEgPGNvZGU+bmV4dDwvY29kZT4gcHJvcGVydHkgcG9pbnRpbmcgdG8gYW5vdGhlcgogICAgICBjaGFuZ2Ugb2JqZWN0ICh3aGljaCBtYXkgcG9pbnQgdG8gYW5vdGhlciwgZXRjKS48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25fb25DdXJzb3JBY3Rpdml0eSI+PGNvZGU+b25DdXJzb3JBY3Rpdml0eSAoZnVuY3Rpb24pPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5XaWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBjdXJzb3Igb3Igc2VsZWN0aW9uIG1vdmVzLCBvciBhbnkKICAgICAgY2hhbmdlIGlzIG1hZGUgdG8gdGhlIGVkaXRvciBjb250ZW50LjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl9vbkd1dHRlckNsaWNrIj48Y29kZT5vbkd1dHRlckNsaWNrIChmdW5jdGlvbik8L2NvZGU+PC9kdD4KICAgICAgPGRkPldoZW4gZ2l2ZW4sIHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSBlZGl0b3IgZ3V0dGVyICh0aGUKICAgICAgbGluZS1udW1iZXIgYXJlYSkgaXMgY2xpY2tlZC4gV2lsbCBiZSBnaXZlbiB0aGUgZWRpdG9yIGluc3RhbmNlCiAgICAgIGFzIGZpcnN0IGFyZ3VtZW50LCB0aGUgKHplcm8tYmFzZWQpIG51bWJlciBvZiB0aGUgbGluZSB0aGF0IHdhcwogICAgICBjbGlja2VkIGFzIHNlY29uZCBhcmd1bWVudCwgYW5kIHRoZSByYXcgPGNvZGU+bW91c2Vkb3duPC9jb2RlPgogICAgICBldmVudCBvYmplY3QgYXMgdGhpcmQgYXJndW1lbnQuPC9kZD4KCiAgICAgIDxkdCBpZD0ib3B0aW9uX29uRm9jdXMiPjxjb2RlPm9uRm9jdXMsIG9uQmx1ciAoZnVuY3Rpb24pPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5UaGUgZ2l2ZW4gZnVuY3Rpb25zIHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSBlZGl0b3IgaXMKICAgICAgZm9jdXNlZCBvciB1bmZvY3VzZWQuPC9kZD4KCiAgICAgIDxkdCBpZD0ib3B0aW9uX29uU2Nyb2xsIj48Y29kZT5vblNjcm9sbCAoZnVuY3Rpb24pPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5XaGVuIGdpdmVuLCB3aWxsIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgZWRpdG9yIGlzCiAgICAgIHNjcm9sbGVkLjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl9vbkhpZ2hsaWdodENvbXBsZXRlIj48Y29kZT5vbkhpZ2hsaWdodENvbXBsZXRlIChmdW5jdGlvbik8L2NvZGU+PC9kdD4KICAgICAgPGRkPldoZW5ldmVyIHRoZSBlZGl0b3IncyBjb250ZW50IGhhcyBiZWVuIGZ1bGx5IGhpZ2hsaWdodGVkLAogICAgICB0aGlzIGZ1bmN0aW9uIChpZiBnaXZlbikgd2lsbCBiZSBjYWxsZWQuIEl0J2xsIGJlIGdpdmVuIGEgc2luZ2xlCiAgICAgIGFyZ3VtZW50LCB0aGUgZWRpdG9yIGluc3RhbmNlLjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl9vblVwZGF0ZSI+PGNvZGU+b25VcGRhdGUgKGZ1bmN0aW9uKTwvY29kZT48L2R0PgogICAgICA8ZGQ+V2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgQ29kZU1pcnJvciB1cGRhdGVzIGl0cyBET00gZGlzcGxheS48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25fbWF0Y2hCcmFja2V0cyI+PGNvZGU+bWF0Y2hCcmFja2V0cyAoYm9vbGVhbik8L2NvZGU+PC9kdD4KICAgICAgPGRkPkRldGVybWluZXMgd2hldGhlciBicmFja2V0cyBhcmUgbWF0Y2hlZCB3aGVuZXZlciB0aGUgY3Vyc29yCiAgICAgIGlzIG1vdmVkIG5leHQgdG8gYSBicmFja2V0LjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl93b3JrVGltZSI+PGNvZGU+d29ya1RpbWUsIHdvcmtEZWxheSAobnVtYmVyKTwvY29kZT48L2R0PgogICAgICA8ZGQ+SGlnaGxpZ2h0aW5nIGlzIGRvbmUgYnkgYSBwc2V1ZG8gYmFja2dyb3VuZC10aHJlYWQgdGhhdCB3aWxsCiAgICAgIHdvcmsgZm9yIDxjb2RlPndvcmtUaW1lPC9jb2RlPiBtaWxsaXNlY29uZHMsIGFuZCB0aGVuIHVzZQogICAgICB0aW1lb3V0IHRvIHNsZWVwIGZvciA8Y29kZT53b3JrRGVsYXk8L2NvZGU+IG1pbGxpc2Vjb25kcy4gVGhlCiAgICAgIGRlZmF1bHRzIGFyZSAyMDAgYW5kIDMwMCwgeW91IGNhbiBjaGFuZ2UgdGhlc2Ugb3B0aW9ucyB0byBtYWtlCiAgICAgIHRoZSBoaWdobGlnaHRpbmcgbW9yZSBvciBsZXNzIGFnZ3Jlc3NpdmUuPC9kZD4KCiAgICAgIDxkdCBpZD0ib3B0aW9uX3BvbGxJbnRlcnZhbCI+PGNvZGU+cG9sbEludGVydmFsIChudW1iZXIpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5JbmRpY2F0ZXMgaG93IHF1aWNrbHkgQ29kZU1pcnJvciBzaG91bGQgcG9sbCBpdHMgaW5wdXQKICAgICAgdGV4dGFyZWEgZm9yIGNoYW5nZXMuIE1vc3QgaW5wdXQgaXMgY2FwdHVyZWQgYnkgZXZlbnRzLCBidXQgc29tZQogICAgICB0aGluZ3MsIGxpa2UgSU1FIGlucHV0IG9uIHNvbWUgYnJvd3NlcnMsIGRvZXNuJ3QgZ2VuZXJhdGUgZXZlbnRzCiAgICAgIHRoYXQgYWxsb3cgQ29kZU1pcnJvciB0byBwcm9wZXJseSBkZXRlY3QgaXQuIFRodXMsIGl0IHBvbGxzLgogICAgICBEZWZhdWx0IGlzIDEwMCBtaWxsaXNlY29uZHMuPC9kZD4KCiAgICAgIDxkdCBpZD0ib3B0aW9uX3VuZG9EZXB0aCI+PGNvZGU+dW5kb0RlcHRoIChpbnRlZ2VyKTwvY29kZT48L2R0PgogICAgICA8ZGQ+VGhlIG1heGltdW0gbnVtYmVyIG9mIHVuZG8gbGV2ZWxzIHRoYXQgdGhlIGVkaXRvciBzdG9yZXMuCiAgICAgIERlZmF1bHRzIHRvIDQwLjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl90YWJpbmRleCI+PGNvZGU+dGFiaW5kZXggKGludGVnZXIpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5UaGUgPGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQwMS9pbnRlcmFjdC9mb3Jtcy5odG1sI2FkZWYtdGFiaW5kZXgiPnRhYgogICAgICBpbmRleDwvYT4gdG8gYXNzaWduIHRvIHRoZSBlZGl0b3IuIElmIG5vdCBnaXZlbiwgbm8gdGFiIGluZGV4CiAgICAgIHdpbGwgYmUgYXNzaWduZWQuPC9kZD4KCiAgICAgIDxkdCBpZD0ib3B0aW9uX2RvY3VtZW50Ij48Y29kZT5kb2N1bWVudCAoRE9NIGRvY3VtZW50KTwvY29kZT48L2R0PgogICAgICA8ZGQ+VXNlIHRoaXMgaWYgeW91IHdhbnQgdG8gZGlzcGxheSB0aGUgZWRpdG9yIGluIGFub3RoZXIgRE9NLgogICAgICBCeSBkZWZhdWx0IGl0IHdpbGwgdXNlIHRoZSBnbG9iYWwgPGNvZGU+ZG9jdW1lbnQ8L2NvZGU+CiAgICAgIG9iamVjdC48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25fb25LZXlFdmVudCI+PGNvZGU+b25LZXlFdmVudCAoZnVuY3Rpb24pPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5UaGlzIHByb3ZpZGVzIGEgcmF0aGVyIGxvdy1sZXZlbCBob29rIGludG8gQ29kZU1pcnJvcidzIGtleQogICAgICBoYW5kbGluZy4gSWYgcHJvdmlkZWQsIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgb24KICAgICAgZXZlcnkgPGNvZGU+a2V5ZG93bjwvY29kZT4sIDxjb2RlPmtleXVwPC9jb2RlPiwKICAgICAgYW5kIDxjb2RlPmtleXByZXNzPC9jb2RlPiBldmVudCB0aGF0IENvZGVNaXJyb3IgY2FwdHVyZXMuIEl0CiAgICAgIHdpbGwgYmUgcGFzc2VkIHR3byBhcmd1bWVudHMsIHRoZSBlZGl0b3IgaW5zdGFuY2UgYW5kIHRoZSBrZXkKICAgICAgZXZlbnQuIFRoaXMga2V5IGV2ZW50IGlzIHByZXR0eSBtdWNoIHRoZSByYXcga2V5IGV2ZW50LCBleGNlcHQKICAgICAgdGhhdCBhIDxjb2RlPnN0b3AoKTwvY29kZT4gbWV0aG9kIGlzIGFsd2F5cyBhZGRlZCB0byBpdC4gWW91CiAgICAgIGNvdWxkIGZlZWQgaXQgdG8sIGZvciBleGFtcGxlLCA8Y29kZT5qUXVlcnkuRXZlbnQ8L2NvZGU+IHRvCiAgICAgIGZ1cnRoZXIgbm9ybWFsaXplIGl0Ljxicj5UaGlzIGZ1bmN0aW9uIGNhbiBpbnNwZWN0IHRoZSBrZXkKICAgICAgZXZlbnQsIGFuZCBoYW5kbGUgaXQgaWYgaXQgd2FudHMgdG8uIEl0IG1heSByZXR1cm4gdHJ1ZSB0byB0ZWxsCiAgICAgIENvZGVNaXJyb3IgdG8gaWdub3JlIHRoZSBldmVudC4gQmUgd2FyeSB0aGF0LCBvbiBzb21lIGJyb3dzZXJzLAogICAgICBzdG9wcGluZyBhIDxjb2RlPmtleWRvd248L2NvZGU+IGRvZXMgbm90IHN0b3AKICAgICAgdGhlIDxjb2RlPmtleXByZXNzPC9jb2RlPiBmcm9tIGZpcmluZywgd2hlcmVhcyBvbiBvdGhlcnMgaXQKICAgICAgZG9lcy4gSWYgeW91IHJlc3BvbmQgdG8gYW4gZXZlbnQsIHlvdSBzaG91bGQgcHJvYmFibHkgaW5zcGVjdAogICAgICBpdHMgPGNvZGU+dHlwZTwvY29kZT4gcHJvcGVydHkgYW5kIG9ubHkgZG8gc29tZXRoaW5nIHdoZW4gaXQKICAgICAgaXMgPGNvZGU+a2V5ZG93bjwvY29kZT4gKG9yIDxjb2RlPmtleXByZXNzPC9jb2RlPiBmb3IgYWN0aW9ucwogICAgICB0aGF0IG5lZWQgY2hhcmFjdGVyIGRhdGEpLjwvZGQ+CiAgICA8L2RsPgoKICAgIDxoMiBpZD0ic3R5bGluZyI+Q3VzdG9taXplZCBTdHlsaW5nPC9oMj4KCiAgICA8cD5VcCB0byBhIGNlcnRhaW4gZXh0ZW50LCBDb2RlTWlycm9yJ3MgbG9vayBjYW4gYmUgY2hhbmdlZCBieQogICAgbW9kaWZ5aW5nIHN0eWxlIHNoZWV0IGZpbGVzLiBUaGUgc3R5bGUgc2hlZXRzIHN1cHBsaWVkIGJ5IG1vZGVzCiAgICBzaW1wbHkgcHJvdmlkZSB0aGUgY29sb3JzIGZvciB0aGF0IG1vZGUsIGFuZCBjYW4gYmUgYWRhcHRlZCBpbiBhCiAgICB2ZXJ5IHN0cmFpZ2h0Zm9yd2FyZCB3YXkuIFRvIHN0eWxlIHRoZSBlZGl0b3IgaXRzZWxmLCBpdCBpcwogICAgcG9zc2libGUgdG8gYWx0ZXIgb3Igb3ZlcnJpZGUgdGhlIHN0eWxlcyBkZWZpbmVkCiAgICBpbiA8YSBocmVmPSIuLi9saWIvY29kZW1pcnJvci5jc3MiPjxjb2RlPmNvZGVtaXJyb3IuY3NzPC9jb2RlPjwvYT4uPC9wPgoKICAgIDxwPlNvbWUgY2FyZSBtdXN0IGJlIHRha2VuIHRoZXJlLCBzaW5jZSBhIGxvdCBvZiB0aGUgcnVsZXMgaW4gdGhpcwogICAgZmlsZSBhcmUgbmVjZXNzYXJ5IHRvIGhhdmUgQ29kZU1pcnJvciBmdW5jdGlvbiBwcm9wZXJseS4gQWRqdXN0aW5nCiAgICBjb2xvcnMgc2hvdWxkIGJlIHNhZmUsIG9mIGNvdXJzZSwgYW5kIHdpdGggc29tZSBjYXJlIGEgbG90IG9mCiAgICBvdGhlciB0aGluZ3MgY2FuIGJlIGNoYW5nZWQgYXMgd2VsbC4gVGhlIENTUyBjbGFzc2VzIGRlZmluZWQgaW4KICAgIHRoaXMgZmlsZSBzZXJ2ZSB0aGUgZm9sbG93aW5nIHJvbGVzOjwvcD4KCiAgICA8ZGw+CiAgICAgIDxkdCBpZD0iY2xhc3NfQ29kZU1pcnJvciI+PGNvZGU+Q29kZU1pcnJvcjwvY29kZT48L2R0PgogICAgICA8ZGQ+VGhlIG91dGVyIGVsZW1lbnQgb2YgdGhlIGVkaXRvci4gVGhpcyBzaG91bGQgYmUgdXNlZCBmb3IKICAgICAgYm9yZGVycyBhbmQgcG9zaXRpb25pbmcuIENhbiBhbHNvIGJlIHVzZWQgdG8gc2V0IHN0eWxlcyB0aGF0CiAgICAgIHNob3VsZCBob2xkIGZvciBldmVyeXRoaW5nIGluc2lkZSB0aGUgZWRpdG9yIChzdWNoIGFzIGZvbnQKICAgICAgYW5kIGZvbnQgc2l6ZSksIG9yIHRvIHNldCBhIGJhY2tncm91bmQuPC9kZD4KCiAgICAgIDxkdCBpZD0iY2xhc3NfQ29kZU1pcnJvcl9zY3JvbGwiPjxjb2RlPkNvZGVNaXJyb3Itc2Nyb2xsPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5UaGlzIGRldGVybWluZXMgd2hldGhlciB0aGUgZWRpdG9yIHNjcm9sbHMgKDxjb2RlPm92ZXJmbG93OgogICAgICBhdXRvPC9jb2RlPiArIGZpeGVkIGhlaWdodCkuIEJ5IGRlZmF1bHQsIGl0IGRvZXMuIEdpdmluZwogICAgICB0aGlzIDxjb2RlPmhlaWdodDogYXV0bzsgb3ZlcmZsb3c6IHZpc2libGU7PC9jb2RlPiB3aWxsIGNhdXNlCiAgICAgIHRoZSBlZGl0b3IgdG8gcmVzaXplIHRvIGZpdCBpdHMgY29udGVudC48L2RkPgoKICAgICAgPGR0IGlkPSJjbGFzc19Db2RlTWlycm9yX2ZvY3VzZWQiPjxjb2RlPkNvZGVNaXJyb3ItZm9jdXNlZDwvY29kZT48L2R0PgogICAgICA8ZGQ+V2hlbmV2ZXIgdGhlIGVkaXRvciBpcyBmb2N1c2VkLCB0aGUgdG9wIGVsZW1lbnQgZ2V0cyB0aGlzCiAgICAgIGNsYXNzLiBUaGlzIGlzIHVzZWQgdG8gaGlkZSB0aGUgY3Vyc29yIGFuZCBnaXZlIHRoZSBzZWxlY3Rpb24gYQogICAgICBkaWZmZXJlbnQgY29sb3Igd2hlbiB0aGUgZWRpdG9yIGlzIG5vdCBmb2N1c2VkLjwvZGQ+CgogICAgICA8ZHQgaWQ9ImNsYXNzX0NvZGVNaXJyb3JfZ3V0dGVyIj48Y29kZT5Db2RlTWlycm9yLWd1dHRlcjwvY29kZT48L2R0PgogICAgICA8ZGQ+VXNlIHRoaXMgZm9yIGdpdmluZyBhIGJhY2tncm91bmQgb3IgYSBib3JkZXIgdG8gdGhlIGVkaXRvcgogICAgICBndXR0ZXIuIERvbid0IHNldCBhbnkgcGFkZGluZyBoZXJlLAogICAgICB1c2UgPGNvZGU+Q29kZU1pcnJvci1ndXR0ZXItdGV4dDwvY29kZT4gZm9yIHRoYXQuIEJ5IGRlZmF1bHQsCiAgICAgIHRoZSBndXR0ZXIgaXMgJ2ZsdWlkJywgbWVhbmluZyBpdCB3aWxsIGFkanVzdCBpdHMgd2lkdGggdG8gdGhlCiAgICAgIG1heGltdW0gbGluZSBudW1iZXIgb3IgbGluZSBtYXJrZXIgd2lkdGguIFlvdSBjYW4gYWxzbyBzZXQgYQogICAgICBmaXhlZCB3aWR0aCBpZiB5b3Ugd2FudC48L2RkPgoKICAgICAgPGR0IGlkPSJjbGFzc19Db2RlTWlycm9yX2d1dHRlcl90ZXh0Ij48Y29kZT5Db2RlTWlycm9yLWd1dHRlci10ZXh0PC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5Vc2VkIHRvIHN0eWxlIHRoZSBhY3R1YWwgbGluZSBudW1iZXJzLiBGb3IgdGhlIG51bWJlcnMgdG8KICAgICAgbGluZSB1cCwgeW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhlIGZvbnQgaW4gdGhlIGd1dHRlciBpcyB0aGUKICAgICAgc2FtZSBhcyB0aGUgb25lIGluIHRoZSByZXN0IG9mIHRoZSBlZGl0b3IsIHNvIHlvdSBzaG91bGQKICAgICAgcHJvYmFibHkgb25seSBzZXQgZm9udCBzdHlsZSBhbmQgc2l6ZSBpbgogICAgICB0aGUgPGNvZGU+Q29kZU1pcnJvcjwvY29kZT4gY2xhc3MuPC9kZD4KCiAgICAgIDxkdCBpZD0iY2xhc3NfQ29kZU1pcnJvcl9saW5lcyI+PGNvZGU+Q29kZU1pcnJvci1saW5lczwvY29kZT48L2R0PgogICAgICA8ZGQ+VGhlIHZpc2libGUgbGluZXMuIElmIHRoaXMgaGFzIHZlcnRpY2FsCiAgICAgIHBhZGRpbmcsIDxjb2RlPkNvZGVNaXJyb3ItZ3V0dGVyPC9jb2RlPiBzaG91bGQgaGF2ZSB0aGUgc2FtZQogICAgICBwYWRkaW5nLjwvZGQ+CgogICAgICA8ZHQgaWQ9ImNsYXNzX0NvZGVNaXJyb3JfY3Vyc29yIj48Y29kZT5Db2RlTWlycm9yLWN1cnNvcjwvY29kZT48L2R0PgogICAgICA8ZGQ+VGhlIGN1cnNvciBpcyBhIGJsb2NrIGVsZW1lbnQgdGhhdCBpcyBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQuCiAgICAgIFlvdSBjYW4gbWFrZSBpdCBsb29rIHdoaWNoZXZlciB3YXkgeW91IHdhbnQuPC9kZD4KCiAgICAgIDxkdCBpZD0iY2xhc3NfQ29kZU1pcnJvcl9zZWxlY3RlZCI+PGNvZGU+Q29kZU1pcnJvci1zZWxlY3RlZDwvY29kZT48L2R0PgogICAgICA8ZGQ+VGhlIHNlbGVjdGlvbiBpcyByZXByZXNlbnRlZCBieSA8Y29kZT5zcGFuPC9jb2RlPiBlbGVtZW50cwogICAgICB3aXRoIHRoaXMgY2xhc3MuPC9kZD4KCiAgICAgIDxkdCBpZD0iY2xhc3NfQ29kZU1pcnJvcl9tYXRjaGluZ2JyYWNrZXQiPjxjb2RlPkNvZGVNaXJyb3ItbWF0Y2hpbmdicmFja2V0PC9jb2RlPiwKICAgICAgICA8Y29kZT5Db2RlTWlycm9yLW5vbm1hdGNoaW5nYnJhY2tldDwvY29kZT48L2R0PgogICAgICA8ZGQ+VGhlc2UgYXJlIHVzZWQgdG8gc3R5bGUgbWF0Y2hlZCAob3IgdW5tYXRjaGVkKSBicmFja2V0cy48L2RkPgogICAgPC9kbD4KCiAgICA8cD5UaGUgYWN0dWFsIGxpbmVzLCBhcyB3ZWxsIGFzIHRoZSBjdXJzb3IsIGFyZSByZXByZXNlbnRlZAogICAgYnkgPGNvZGU+cHJlPC9jb2RlPiBlbGVtZW50cy4gQnkgZGVmYXVsdCBubyB0ZXh0IHN0eWxpbmcgKHN1Y2ggYXMKICAgIGJvbGQpIHRoYXQgbWlnaHQgY2hhbmdlIGxpbmUgaGVpZ2h0IGlzIGFwcGxpZWQuIElmIHlvdSBkbyB3YW50CiAgICBzdWNoIGVmZmVjdHMsIHlvdSdsbCBoYXZlIHRvIGdpdmUgPGNvZGU+Q29kZU1pcnJvciBwcmU8L2NvZGU+IGEKICAgIGZpeGVkIGhlaWdodC4gQWxzbywgeW91IG11c3Qgc3RpbGwgdGFrZSBjYXJlIHRoYXQgY2hhcmFjdGVyIHdpZHRoCiAgICBpcyBjb25zdGFudC48L3A+CgogICAgPHA+SWYgeW91ciBwYWdlJ3Mgc3R5bGUgc2hlZXRzIGRvIGZ1bmt5IHRoaW5ncyB0bwogICAgYWxsIDxjb2RlPmRpdjwvY29kZT4gb3IgPGNvZGU+cHJlPC9jb2RlPiBlbGVtZW50cyAoeW91IHByb2JhYmx5CiAgICBzaG91bGRuJ3QgZG8gdGhhdCksIHlvdSdsbCBoYXZlIHRvIGRlZmluZSBydWxlcyB0byBjYW5jZWwgdGhlc2UKICAgIGVmZmVjdHMgb3V0IGFnYWluIGZvciBlbGVtZW50cyB1bmRlciB0aGUgPGNvZGU+Q29kZU1pcnJvcjwvY29kZT4KICAgIGNsYXNzLjwvcD4KCiAgICA8cD5UaGVtZXMgYXJlIGFsc28gc2ltcGx5IENTUyBmaWxlcywgd2hpY2ggZGVmaW5lIGNvbG9ycyBmb3IKICAgIHZhcmlvdXMgc3ludGFjdGljIGVsZW1lbnRzLiBTZWUgdGhlIGZpbGVzIGluCiAgICB0aGUgPGEgaHJlZj0iLi4vdGhlbWUvIj48Y29kZT50aGVtZTwvY29kZT48L2E+IGRpcmVjdG9yeS48L3A+CgogICAgPGgyIGlkPSJhcGkiPlByb2dyYW1taW5nIEFQSTwvaDI+CgogICAgPHA+QSBsb3Qgb2YgQ29kZU1pcnJvciBmZWF0dXJlcyBhcmUgb25seSBhdmFpbGFibGUgdGhyb3VnaCBpdHMgQVBJLgogICAgVGhpcyBoYXMgdGhlIGRpc2FkdmFudGFnZSB0aGF0IHlvdSBuZWVkIHRvIGRvIHdvcmsgdG8gZW5hYmxlIHRoZW0sCiAgICBhbmQgdGhlIGFkdmFudGFnZSB0aGF0IENvZGVNaXJyb3Igd2lsbCBmaXQgc2VhbWxlc3NseSBpbnRvIHlvdXIKICAgIGFwcGxpY2F0aW9uLjwvcD4KCiAgICA8cD5XaGVuZXZlciBwb2ludHMgaW4gdGhlIGRvY3VtZW50IGFyZSByZXByZXNlbnRlZCwgdGhlIEFQSSB1c2VzCiAgICBvYmplY3RzIHdpdGggPGNvZGU+bGluZTwvY29kZT4gYW5kIDxjb2RlPmNoPC9jb2RlPiBwcm9wZXJ0aWVzLgogICAgQm90aCBhcmUgemVyby1iYXNlZC4gQ29kZU1pcnJvciBtYWtlcyBzdXJlIHRvICdjbGlwJyBhbnkgcG9zaXRpb25zCiAgICBwYXNzZWQgYnkgY2xpZW50IGNvZGUgc28gdGhhdCB0aGV5IGZpdCBpbnNpZGUgdGhlIGRvY3VtZW50LCBzbyB5b3UKICAgIHNob3VsZG4ndCB3b3JyeSB0b28gbXVjaCBhYm91dCBzYW5pdGl6aW5nIHlvdXIgY29vcmRpbmF0ZXMuIElmIHlvdQogICAgZ2l2ZSA8Y29kZT5jaDwvY29kZT4gYSB2YWx1ZSBvZiA8Y29kZT5udWxsPC9jb2RlPiwgb3IgZG9uJ3QKICAgIHNwZWNpZnkgaXQsIGl0IHdpbGwgYmUgcmVwbGFjZWQgd2l0aCB0aGUgbGVuZ3RoIG9mIHRoZSBzcGVjaWZpZWQKICAgIGxpbmUuPC9wPgoKICAgIDxkbD4KICAgICAgPGR0IGlkPSJnZXRWYWx1ZSI+PGNvZGU+Z2V0VmFsdWUoKSDihpIgc3RyaW5nPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5HZXQgdGhlIGN1cnJlbnQgZWRpdG9yIGNvbnRlbnQuPC9kZD4KICAgICAgPGR0IGlkPSJzZXRWYWx1ZSI+PGNvZGU+c2V0VmFsdWUoc3RyaW5nKTwvY29kZT48L2R0PgogICAgICA8ZGQ+U2V0IHRoZSBlZGl0b3IgY29udGVudC48L2RkPgoKICAgICAgPGR0IGlkPSJnZXRTZWxlY3Rpb24iPjxjb2RlPmdldFNlbGVjdGlvbigpIOKGkiBzdHJpbmc8L2NvZGU+PC9kdD4KICAgICAgPGRkPkdldCB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGNvZGUuPC9kZD4KICAgICAgPGR0IGlkPSJyZXBsYWNlU2VsZWN0aW9uIj48Y29kZT5yZXBsYWNlU2VsZWN0aW9uKHN0cmluZyk8L2NvZGU+PC9kdD4KICAgICAgPGRkPlJlcGxhY2UgdGhlIHNlbGVjdGlvbiB3aXRoIHRoZSBnaXZlbiBzdHJpbmcuPC9kZD4KCiAgICAgIDxkdCBpZD0iZm9jdXMiPjxjb2RlPmZvY3VzKCk8L2NvZGU+PC9kdD4KICAgICAgPGRkPkdpdmUgdGhlIGVkaXRvciBmb2N1cy48L2RkPgogICAgICA8ZHQgaWQ9InNjcm9sbFRvIj48Y29kZT5zY3JvbGxUbyh4LCB5KTwvY29kZT48L2R0PgogICAgICA8ZGQ+U2Nyb2xsIHRoZSBlZGl0b3IgdG8gYSBnaXZlbiAocGl4ZWwpIHBvc2l0aW9uLiBCb3RoCiAgICAgIGFyZ3VtZW50cyBtYXkgYmUgbGVmdCBhcyA8Y29kZT5udWxsPC9jb2RlPgogICAgICBvciA8Y29kZT51bmRlZmluZWQ8L2NvZGU+IHRvIGhhdmUgbm8gZWZmZWN0LjwvZGQ+CgogICAgICA8ZHQgaWQ9InNldE9wdGlvbiI+PGNvZGU+c2V0T3B0aW9uKG9wdGlvbiwgdmFsdWUpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5DaGFuZ2UgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGVkaXRvci4gPGNvZGU+b3B0aW9uPC9jb2RlPgogICAgICBzaG91bGQgdGhlIG5hbWUgb2YgYW4gPGEgaHJlZj0iI2NvbmZpZyI+b3B0aW9uPC9hPiwKICAgICAgYW5kIDxjb2RlPnZhbHVlPC9jb2RlPiBzaG91bGQgYmUgYSB2YWxpZCB2YWx1ZSBmb3IgdGhhdAogICAgICBvcHRpb24uPC9kZD4KICAgICAgPGR0IGlkPSJnZXRPcHRpb24iPjxjb2RlPmdldE9wdGlvbihvcHRpb24pIOKGkiB2YWx1ZTwvY29kZT48L2R0PgogICAgICA8ZGQ+UmV0cmlldmVzIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBnaXZlbiBvcHRpb24gZm9yIHRoaXMKICAgICAgZWRpdG9yIGluc3RhbmNlLjwvZGQ+CgogICAgICA8ZHQgaWQ9ImN1cnNvckNvb3JkcyI+PGNvZGU+Y3Vyc29yQ29vcmRzKHN0YXJ0KSDihpIgb2JqZWN0PC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5SZXR1cm5zIGFuIDxjb2RlPnt4LCB5LCB5Qm90fTwvY29kZT4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlCiAgICAgIGNvb3JkaW5hdGVzIG9mIHRoZSBjdXJzb3IgcmVsYXRpdmUgdG8gdGhlIHRvcC1sZWZ0IGNvcm5lciBvZiB0aGUKICAgICAgcGFnZS4gPGNvZGU+eUJvdDwvY29kZT4gaXMgdGhlIGNvb3JkaW5hdGUgb2YgdGhlIGJvdHRvbSBvZiB0aGUKICAgICAgY3Vyc29yLiA8Y29kZT5zdGFydDwvY29kZT4gaXMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB5b3UKICAgICAgd2FudCB0aGUgc3RhcnQgb3IgdGhlIGVuZCBvZiB0aGUgc2VsZWN0aW9uLjwvZGQ+CiAgICAgIDxkdCBpZD0iY2hhckNvb3JkcyI+PGNvZGU+Y2hhckNvb3Jkcyhwb3MpIOKGkiBvYmplY3Q8L2NvZGU+PC9kdD4KICAgICAgPGRkPkxpa2UgPGNvZGU+Y3Vyc29yQ29vcmRzPC9jb2RlPiwgYnV0IHJldHVybnMgdGhlIHBvc2l0aW9uIG9mCiAgICAgIGFuIGFyYml0cmFyeSBjaGFyYWN0ZXJzLiA8Y29kZT5wb3M8L2NvZGU+IHNob3VsZCBiZQogICAgICBhIDxjb2RlPntsaW5lLCBjaH08L2NvZGU+IG9iamVjdC48L2RkPgogICAgICA8ZHQgaWQ9ImNvb3Jkc0NoYXIiPjxjb2RlPmNvb3Jkc0NoYXIob2JqZWN0KSDihpIgcG9zPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5HaXZlbiBhbiA8Y29kZT57eCwgeX08L2NvZGU+IG9iamVjdCAoaW4gcGFnZSBjb29yZGluYXRlcyksCiAgICAgIHJldHVybnMgdGhlIDxjb2RlPntsaW5lLCBjaH08L2NvZGU+IHBvc2l0aW9uIHRoYXQgY29ycmVzcG9uZHMgdG8KICAgICAgaXQuPC9kZD4KCiAgICAgIDxkdCBpZD0idW5kbyI+PGNvZGU+dW5kbygpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5VbmRvIG9uZSBlZGl0IChpZiBhbnkgdW5kbyBldmVudHMgYXJlIHN0b3JlZCkuPC9kZD4KICAgICAgPGR0IGlkPSJyZWRvIj48Y29kZT5yZWRvKCk8L2NvZGU+PC9kdD4KICAgICAgPGRkPlJlZG8gb25lIHVuZG9uZSBlZGl0LjwvZGQ+CiAgICAgIDxkdCBpZD0iaGlzdG9yeVNpemUiPjxjb2RlPmhpc3RvcnlTaXplKCkg4oaSIG9iamVjdDwvY29kZT48L2R0PgogICAgICA8ZGQ+UmV0dXJucyBhbiBvYmplY3Qgd2l0aCA8Y29kZT57dW5kbywgcmVkb308L2NvZGU+IHByb3BlcnRpZXMsCiAgICAgIGJvdGggb2Ygd2hpY2ggaG9sZCBpbnRlZ2VycywgaW5kaWNhdGluZyB0aGUgYW1vdW50IG9mIHN0b3JlZAogICAgICB1bmRvIGFuZCByZWRvIG9wZXJhdGlvbnMuPC9kZD4KICAgICAgPGR0IGlkPSJjbGVhckhpc3RvcnkiPjxjb2RlPmNsZWFySGlzdG9yeSgpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5DbGVhcnMgdGhlIGVkaXRvcidzIHVuZG8gaGlzdG9yeS48L2RkPgoKICAgICAgPGR0IGlkPSJpbmRlbnRMaW5lIj48Y29kZT5pbmRlbnRMaW5lKGxpbmUsIGRpcik8L2NvZGU+PC9kdD4KICAgICAgPGRkPlJlc2V0IHRoZSBnaXZlbiBsaW5lJ3MgaW5kZW50YXRpb24gdG8gdGhlIGluZGVudGF0aW9uCiAgICAgIHByZXNjcmliZWQgYnkgdGhlIG1vZGUuIElmIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgZ2l2ZW4sCiAgICAgIGluZGVudGF0aW9uIHdpbGwgYmUgaW5jcmVhc2VkIChpZiA8Y29kZT5kaXI8L2NvZGU+IGlzIHRydWUpIG9yCiAgICAgIGRlY3JlYXNlZCAoaWYgZmFsc2UpIGJ5IGFuIDxhIGhyZWY9IiNvcHRpb25faW5kZW50VW5pdCI+aW5kZW50CiAgICAgIHVuaXQ8L2E+IGluc3RlYWQuPC9kZD4KCiAgICAgIDxkdCBpZD0iZ2V0VG9rZW5BdCI+PGNvZGU+Z2V0VG9rZW5BdChwb3MpIOKGkiBvYmplY3Q8L2NvZGU+PC9kdD4KICAgICAgPGRkPlJldHJpZXZlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdG9rZW4gdGhlIGN1cnJlbnQgbW9kZSBmb3VuZAogICAgICBhdCB0aGUgZ2l2ZW4gcG9zaXRpb24gKGEgPGNvZGU+e2xpbmUsIGNofTwvY29kZT4gb2JqZWN0KS4gVGhlCiAgICAgIHJldHVybmVkIG9iamVjdCBoYXMgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgogICAgICA8ZGw+CiAgICAgICAgPGR0Pjxjb2RlPnN0YXJ0PC9jb2RlPjwvZHQ+PGRkPlRoZSBjaGFyYWN0ZXIgKG9uIHRoZSBnaXZlbiBsaW5lKSBhdCB3aGljaCB0aGUgdG9rZW4gc3RhcnRzLjwvZGQ+CiAgICAgICAgPGR0Pjxjb2RlPmVuZDwvY29kZT48L2R0PjxkZD5UaGUgY2hhcmFjdGVyIGF0IHdoaWNoIHRoZSB0b2tlbiBlbmRzLjwvZGQ+CiAgICAgICAgPGR0Pjxjb2RlPnN0cmluZzwvY29kZT48L2R0PjxkZD5UaGUgdG9rZW4ncyBzdHJpbmcuPC9kZD4KICAgICAgICA8ZHQ+PGNvZGU+Y2xhc3NOYW1lPC9jb2RlPjwvZHQ+PGRkPlRoZSBjbGFzcyB0aGUgbW9kZSBhc3NpZ25lZAogICAgICAgIHRvIHRoZSB0b2tlbi4gKENhbiBiZSBudWxsIHdoZW4gbm8gY2xhc3Mgd2FzIGFzc2lnbmVkLik8L2RkPgogICAgICAgIDxkdD48Y29kZT5zdGF0ZTwvY29kZT48L2R0PjxkZD5UaGUgbW9kZSdzIHN0YXRlIGF0IHRoZSBlbmQgb2YgdGhpcyB0b2tlbi48L2RkPgogICAgICA8L2RsPjwvZGQ+CgogICAgICA8ZHQgaWQ9Im1hcmtUZXh0Ij48Y29kZT5tYXJrVGV4dChmcm9tLCB0bywgY2xhc3NOYW1lKSDihpIgb2JqZWN0PC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5DYW4gYmUgdXNlZCB0byBtYXJrIGEgcmFuZ2Ugb2YgdGV4dCB3aXRoIGEgc3BlY2lmaWMgQ1NTCiAgICAgIGNsYXNzIG5hbWUuIDxjb2RlPmZyb208L2NvZGU+IGFuZCA8Y29kZT50bzwvY29kZT4gc2hvdWxkCiAgICAgIGJlIDxjb2RlPntsaW5lLCBjaH08L2NvZGU+IG9iamVjdHMuIFRoZSBtZXRob2Qgd2lsbCByZXR1cm4gYW4KICAgICAgb2JqZWN0IHdpdGggdHdvIG1ldGhvZHMsIDxjb2RlPmNsZWFyKCk8L2NvZGU+LCB3aGljaCByZW1vdmVzIHRoZQogICAgICBtYXJrLCBhbmQgPGNvZGU+ZmluZCgpPC9jb2RlPiwgd2hpY2ggcmV0dXJucyBhIDxjb2RlPntmcm9tLAogICAgICB0b308L2NvZGU+IChib3RoIGRvY3VtZW50IHBvc2l0aW9ucyksIGluZGljYXRpbmcgdGhlIGN1cnJlbnQKICAgICAgcG9zaXRpb24gb2YgdGhlIG1hcmtlZCByYW5nZS48L2RkPgoKICAgICAgPGR0IGlkPSJzZXRCb29rbWFyayI+PGNvZGU+c2V0Qm9va21hcmsocG9zKSDihpIgb2JqZWN0PC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5JbnNlcnRzIGEgYm9va21hcmssIGEgaGFuZGxlIHRoYXQgZm9sbG93cyB0aGUgdGV4dCBhcm91bmQgaXQKICAgICAgYXMgaXQgaXMgYmVpbmcgZWRpdGVkLCBhdCB0aGUgZ2l2ZW4gcG9zaXRpb24uIEEgYm9va21hcmsgaGFzIHR3bwogICAgICBtZXRob2RzIDxjb2RlPmZpbmQoKTwvY29kZT4gYW5kIDxjb2RlPmNsZWFyKCk8L2NvZGU+LiBUaGUgZmlyc3QKICAgICAgcmV0dXJucyB0aGUgY3VycmVudCBwb3NpdGlvbiBvZiB0aGUgYm9va21hcmssIGlmIGl0IGlzIHN0aWxsIGluCiAgICAgIHRoZSBkb2N1bWVudCwgYW5kIHRoZSBzZWNvbmQgZXhwbGljaXRseSByZW1vdmVzIHRoZQogICAgICBib29rbWFyay48L2RkPgoKICAgICAgPGR0IGlkPSJzZXRNYXJrZXIiPjxjb2RlPnNldE1hcmtlcihsaW5lLCB0ZXh0LCBjbGFzc05hbWUpIOKGkiBsaW5lSGFuZGxlPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5BZGQgYSBndXR0ZXIgbWFya2VyIGZvciB0aGUgZ2l2ZW4gbGluZS4gR3V0dGVyIG1hcmtlcnMgYXJlCiAgICAgIHNob3duIGluIHRoZSBsaW5lLW51bWJlciBhcmVhIChpbnN0ZWFkIG9mIHRoZSBudW1iZXIgZm9yIHRoaXMKICAgICAgbGluZSkuIEJvdGggPGNvZGU+dGV4dDwvY29kZT4gYW5kIDxjb2RlPmNsYXNzTmFtZTwvY29kZT4gYXJlCiAgICAgIG9wdGlvbmFsLiBTZXR0aW5nIDxjb2RlPnRleHQ8L2NvZGU+IHRvIGEgVW5pY29kZSBjaGFyYWN0ZXIgbGlrZQogICAgICDil48gdGVuZHMgdG8gZ2l2ZSBhIG5pY2UgZWZmZWN0LiBUbyBwdXQgYSBwaWN0dXJlIGluIHRoZSBndXR0ZXIsCiAgICAgIHNldCA8Y29kZT50ZXh0PC9jb2RlPiB0byBhIHNwYWNlIGFuZCA8Y29kZT5jbGFzc05hbWU8L2NvZGU+IHRvCiAgICAgIHNvbWV0aGluZyB0aGF0IHNldHMgYSBiYWNrZ3JvdW5kIGltYWdlLiBJZiB5b3UKICAgICAgc3BlY2lmeSA8Y29kZT50ZXh0PC9jb2RlPiwgdGhlIGdpdmVuIHRleHQgKHdoaWNoIG1heSBjb250YWluCiAgICAgIEhUTUwpIHdpbGwsIGJ5IGRlZmF1bHQsIHJlcGxhY2UgdGhlIGxpbmUgbnVtYmVyIGZvciB0aGF0IGxpbmUuCiAgICAgIElmIHRoaXMgaXMgbm90IHdoYXQgeW91IHdhbnQsIHlvdSBjYW4gaW5jbHVkZSB0aGUKICAgICAgc3RyaW5nIDxjb2RlPiVOJTwvY29kZT4gaW4gdGhlIHRleHQsIHdoaWNoIHdpbGwgYmUgcmVwbGFjZWQgYnkKICAgICAgdGhlIGxpbmUgbnVtYmVyLjwvZGQ+CiAgICAgIDxkdCBpZD0iY2xlYXJNYXJrZXIiPjxjb2RlPmNsZWFyTWFya2VyKGxpbmUpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5DbGVhcnMgYSBtYXJrZXIgY3JlYXRlZAogICAgICB3aXRoIDxjb2RlPnNldE1hcmtlcjwvY29kZT4uIDxjb2RlPmxpbmU8L2NvZGU+IGNhbiBiZSBlaXRoZXIgYQogICAgICBudW1iZXIgb3IgYSBoYW5kbGUgcmV0dXJuZWQgYnkgPGNvZGU+c2V0TWFya2VyPC9jb2RlPiAoc2luY2UgYQogICAgICBudW1iZXIgbWF5IG5vdyByZWZlciB0byBhIGRpZmZlcmVudCBsaW5lIGlmIHNvbWV0aGluZyB3YXMgYWRkZWQKICAgICAgb3IgZGVsZXRlZCkuPC9kZD4KICAgICAgPGR0IGlkPSJzZXRMaW5lQ2xhc3MiPjxjb2RlPnNldExpbmVDbGFzcyhsaW5lLCBjbGFzc05hbWUpIOKGkiBsaW5lSGFuZGxlPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5TZXQgYSBDU1MgY2xhc3MgbmFtZSBmb3IgdGhlIGdpdmVuIGxpbmUuIDxjb2RlPmxpbmU8L2NvZGU+CiAgICAgIGNhbiBiZSBhIG51bWJlciBvciBhIGxpbmUgaGFuZGxlIChhcyByZXR1cm5lZAogICAgICBieSA8Y29kZT5zZXRNYXJrZXI8L2NvZGU+IG9yIHRoaXMgZnVuY3Rpb24pLgogICAgICBQYXNzIDxjb2RlPm51bGw8L2NvZGU+IHRvIGNsZWFyIHRoZSBjbGFzcyBmb3IgYSBsaW5lLjwvZGQ+CiAgICAgIDxkdCBpZD0iaGlkZUxpbmUiPjxjb2RlPmhpZGVMaW5lKGxpbmUpIOKGkiBsaW5lSGFuZGxlPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5IaWRlIHRoZSBnaXZlbiBsaW5lIChlaXRoZXIgYnkgbnVtYmVyIG9yIGJ5IGhhbmRsZSkuIEhpZGRlbgogICAgICBsaW5lcyBkb24ndCBzaG93IHVwIGluIHRoZSBlZGl0b3IsIGFuZCB0aGVpciBudW1iZXJzIGFyZSBza2lwcGVkCiAgICAgIHdoZW4gPGEgaHJlZj0iI29wdGlvbl9saW5lTnVtYmVycyI+bGluZSBudW1iZXJzPC9hPiBhcmUgZW5hYmxlZC4KICAgICAgRGVsZXRpbmcgYSByZWdpb24gYXJvdW5kIHRoZW0gZG9lcyBkZWxldGUgdGhlbSwgYW5kIGNvcGluZyBhCiAgICAgIHJlZ2lvbiBhcm91bmQgd2lsbCBpbmNsdWRlIHRoZW0gaW4gdGhlIGNvcGllZCB0ZXh0LjwvZGQ+CiAgICAgIDxkdCBpZD0ic2hvd0xpbmUiPjxjb2RlPnNob3dMaW5lKGxpbmUpIOKGkiBsaW5lSGFuZGxlPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5UaGUgaW52ZXJzZSBvZiA8Y29kZT5oaWRlTGluZTwvY29kZT7igJRyZS1zaG93cyBhIHByZXZpb3VzbHkKICAgICAgaGlkZGVuIGxpbmUsIGJ5IG51bWJlciBvciBieSBoYW5kbGUuPC9kZD4KCiAgICAgIDxkdCBpZD0ib25EZWxldGVMaW5lIj48Y29kZT5vbkRlbGV0ZUxpbmUobGluZSwgZnVuYyk8L2NvZGU+PC9kdD4KICAgICAgPGRkPlJlZ2lzdGVyIGEgZnVuY3Rpb24gdGhhdCBzaG91bGQgYmUgY2FsbGVkIHdoZW4gdGhlIGxpbmUgaXMKICAgICAgZGVsZXRlZCBmcm9tIHRoZSBkb2N1bWVudC48L2RkPgoKICAgICAgPGR0IGlkPSJsaW5lSW5mbyI+PGNvZGU+bGluZUluZm8obGluZSkg4oaSIG9iamVjdDwvY29kZT48L2R0PgogICAgICA8ZGQ+UmV0dXJucyB0aGUgbGluZSBudW1iZXIsIHRleHQgY29udGVudCwgYW5kIG1hcmtlciBzdGF0dXMgb2YKICAgICAgdGhlIGdpdmVuIGxpbmUsIHdoaWNoIGNhbiBiZSBlaXRoZXIgYSBudW1iZXIgb3IgYSBoYW5kbGUKICAgICAgcmV0dXJuZWQgYnkgPGNvZGU+c2V0TWFya2VyPC9jb2RlPi4gVGhlIHJldHVybmVkIG9iamVjdCBoYXMgdGhlCiAgICAgIHN0cnVjdHVyZSA8Y29kZT57bGluZSwgaGFuZGxlLCB0ZXh0LCBtYXJrZXJUZXh0LCBtYXJrZXJDbGFzc308L2NvZGU+LjwvZGQ+CgogICAgICA8ZHQgaWQ9ImdldExpbmVIYW5kbGUiPjxjb2RlPmdldExpbmVIYW5kbGUobnVtKSDihpIgbGluZUhhbmRsZTwvY29kZT48L2R0PgogICAgICA8ZGQ+RmV0Y2hlcyB0aGUgbGluZSBoYW5kbGUgZm9yIHRoZSBnaXZlbiBsaW5lIG51bWJlci48L2RkPgoKICAgICAgPGR0IGlkPSJhZGRXaWRnZXQiPjxjb2RlPmFkZFdpZGdldChwb3MsIG5vZGUsIHNjcm9sbEludG9WaWV3KTwvY29kZT48L2R0PgogICAgICA8ZGQ+UHV0cyA8Y29kZT5ub2RlPC9jb2RlPiwgd2hpY2ggc2hvdWxkIGJlIGFuIGFic29sdXRlbHkKICAgICAgcG9zaXRpb25lZCBET00gbm9kZSwgaW50byB0aGUgZWRpdG9yLCBwb3NpdGlvbmVkIHJpZ2h0IGJlbG93IHRoZQogICAgICBnaXZlbiA8Y29kZT57bGluZSwgY2h9PC9jb2RlPiBwb3NpdGlvbi4KICAgICAgV2hlbiA8Y29kZT5zY3JvbGxJbnRvVmlldzwvY29kZT4gaXMgdHJ1ZSwgdGhlIGVkaXRvciB3aWxsIGVuc3VyZQogICAgICB0aGF0IHRoZSBlbnRpcmUgbm9kZSBpcyB2aXNpYmxlIChpZiBwb3NzaWJsZSkuIFRvIHJlbW92ZSB0aGUKICAgICAgd2lkZ2V0IGFnYWluLCBzaW1wbHkgdXNlIERPTSBtZXRob2RzIChtb3ZlIGl0IHNvbWV3aGVyZSBlbHNlLCBvcgogICAgICBjYWxsIDxjb2RlPnJlbW92ZUNoaWxkPC9jb2RlPiBvbiBpdHMgcGFyZW50KS48L2RkPgoKICAgICAgPGR0IGlkPSJtYXRjaEJyYWNrZXRzIj48Y29kZT5tYXRjaEJyYWNrZXRzKCk8L2NvZGU+PC9kdD4KICAgICAgPGRkPkZvcmNlIG1hdGNoaW5nLWJyYWNrZXQtaGlnaGxpZ2h0aW5nIHRvIGhhcHBlbi48L2RkPgoKICAgICAgPGR0IGlkPSJsaW5lQ291bnQiPjxjb2RlPmxpbmVDb3VudCgpIOKGkiBudW1iZXI8L2NvZGU+PC9kdD4KICAgICAgPGRkPkdldCB0aGUgbnVtYmVyIG9mIGxpbmVzIGluIHRoZSBlZGl0b3IuPC9kZD4KCiAgICAgIDxkdCBpZD0iZ2V0Q3Vyc29yIj48Y29kZT5nZXRDdXJzb3Ioc3RhcnQpIOKGkiBvYmplY3Q8L2NvZGU+PC9kdD4KICAgICAgPGRkPjxjb2RlPnN0YXJ0PC9jb2RlPiBpcyBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBzdGFydAogICAgICBvciB0aGUgZW5kIG9mIHRoZSBzZWxlY3Rpb24gbXVzdCBiZSByZXRyaWV2ZWQuIElmIGl0IGlzIG5vdAogICAgICBnaXZlbiwgdGhlIGN1cnJlbnQgY3Vyc29yIHBvcywgaS5lLiB0aGUgc2lkZSBvZiB0aGUgc2VsZWN0aW9uCiAgICAgIHRoYXQgd291bGQgbW92ZSBpZiB5b3UgcHJlc3NlZCBhbiBhcnJvdyBrZXksIGlzIGNob3Nlbi4KICAgICAgQSA8Y29kZT57bGluZSwgY2h9PC9jb2RlPiBvYmplY3Qgd2lsbCBiZSByZXR1cm5lZC48L2RkPgogICAgICA8ZHQgaWQ9InNvbWV0aGluZ1NlbGVjdGVkIj48Y29kZT5zb21ldGhpbmdTZWxlY3RlZCgpIOKGkiBib29sZWFuPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5SZXR1cm4gdHJ1ZSBpZiBhbnkgdGV4dCBpcyBzZWxlY3RlZC48L2RkPgogICAgICA8ZHQgaWQ9InNldEN1cnNvciI+PGNvZGU+c2V0Q3Vyc29yKHBvcyk8L2NvZGU+PC9kdD4KICAgICAgPGRkPlNldCB0aGUgY3Vyc29yIHBvc2l0aW9uLiBZb3UgY2FuIGVpdGhlciBwYXNzIGEKICAgICAgc2luZ2xlIDxjb2RlPntsaW5lLCBjaH08L2NvZGU+IG9iamVjdCwgb3IgdGhlIGxpbmUgYW5kIHRoZQogICAgICBjaGFyYWN0ZXIgYXMgdHdvIHNlcGFyYXRlIHBhcmFtZXRlcnMuPC9kZD4KICAgICAgPGR0IGlkPSJzZXRTZWxlY3Rpb24iPjxjb2RlPnNldFNlbGVjdGlvbihzdGFydCwgZW5kKTwvY29kZT48L2R0PgogICAgICA8ZGQ+U2V0IHRoZSBzZWxlY3Rpb24gcmFuZ2UuIDxjb2RlPnN0YXJ0PC9jb2RlPgogICAgICBhbmQgPGNvZGU+ZW5kPC9jb2RlPiBzaG91bGQgYmUgPGNvZGU+e2xpbmUsIGNofTwvY29kZT4gb2JqZWN0cy48L2RkPgoKICAgICAgPGR0IGlkPSJnZXRMaW5lIj48Y29kZT5nZXRMaW5lKG4pIOKGkiBzdHJpbmc8L2NvZGU+PC9kdD4KICAgICAgPGRkPkdldCB0aGUgY29udGVudCBvZiBsaW5lIDxjb2RlPm48L2NvZGU+LjwvZGQ+CiAgICAgIDxkdCBpZD0ic2V0TGluZSI+PGNvZGU+c2V0TGluZShuLCB0ZXh0KTwvY29kZT48L2R0PgogICAgICA8ZGQ+U2V0IHRoZSBjb250ZW50IG9mIGxpbmUgPGNvZGU+bjwvY29kZT4uPC9kZD4KICAgICAgPGR0IGlkPSJyZW1vdmVMaW5lIj48Y29kZT5yZW1vdmVMaW5lKG4pPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5SZW1vdmUgdGhlIGdpdmVuIGxpbmUgZnJvbSB0aGUgZG9jdW1lbnQuPC9kZD4KCiAgICAgIDxkdCBpZD0iZ2V0UmFuZ2UiPjxjb2RlPmdldFJhbmdlKGZyb20sIHRvKSDihpIgc3RyaW5nPC9jb2RlPjwvdGQ+CiAgICAgIDxkZD5HZXQgdGhlIHRleHQgYmV0d2VlbiB0aGUgZ2l2ZW4gcG9pbnRzIGluIHRoZSBlZGl0b3IsIHdoaWNoCiAgICAgIHNob3VsZCBiZSA8Y29kZT57bGluZSwgY2h9PC9jb2RlPiBvYmplY3RzLjwvZGQ+CiAgICAgIDxkdCBpZD0icmVwbGFjZVJhbmdlIj48Y29kZT5yZXBsYWNlUmFuZ2Uoc3RyaW5nLCBmcm9tLCB0byk8L2NvZGU+PC9kdD4KICAgICAgPGRkPlJlcGxhY2UgdGhlIHBhcnQgb2YgdGhlIGRvY3VtZW50IGJldHdlZW4gPGNvZGU+ZnJvbTwvY29kZT4KICAgICAgYW5kIDxjb2RlPnRvPC9jb2RlPiB3aXRoIHRoZSBnaXZlbiBzdHJpbmcuIDxjb2RlPmZyb208L2NvZGU+CiAgICAgIGFuZCA8Y29kZT50bzwvY29kZT4gbXVzdCBiZSA8Y29kZT57bGluZSwgY2h9PC9jb2RlPgogICAgICBvYmplY3RzLiA8Y29kZT50bzwvY29kZT4gY2FuIGJlIGxlZnQgb2ZmIHRvIHNpbXBseSBpbnNlcnQgdGhlCiAgICAgIHN0cmluZyBhdCBwb3NpdGlvbiA8Y29kZT5mcm9tPC9jb2RlPi48L2RkPgogICAgICAKICAgICAgPGR0IGlkPSJwb3NGcm9tSW5kZXgiPjxjb2RlPnBvc0Zyb21JbmRleChpbmRleCkg4oaSIG9iamVjdDwvY29kZT48L2R0PgogICAgICA8ZGQ+Q2FsY3VsYXRlcyBhbmQgcmV0dXJucyBhIDxjb2RlPntsaW5lLCBjaH08L2NvZGU+IG9iamVjdCBmb3IgYQogICAgICB6ZXJvLWJhc2VkIDxjb2RlPmluZGV4PC9jb2RlPiB3aG8ncyB2YWx1ZSBpcyByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlCiAgICAgIGVkaXRvcidzIHRleHQuIElmIHRoZSA8Y29kZT5pbmRleDwvY29kZT4gaXMgb3V0IG9mIHJhbmdlIG9mIHRoZSB0ZXh0IHRoZW4KICAgICAgdGhlIHJldHVybmVkIG9iamVjdCBpcyBjbGlwcGVkIHRvIHN0YXJ0IG9yIGVuZCBvZiB0aGUgdGV4dAogICAgICByZXNwZWN0aXZlbHkuPC9kZD4KICAgICAgPGR0IGlkPSJpbmRleEZyb21Qb3MiPjxjb2RlPmluZGV4RnJvbVBvcyhvYmplY3QpIOKGkiBudW1iZXI8L2NvZGU+PC9kdD4KICAgICAgPGRkPlRoZSByZXZlcnNlIG9mIDxhIGhyZWY9IiNwb3NGcm9tSW5kZXgiPjxjb2RlPnBvc0Zyb21JbmRleDwvY29kZT48L2E+LjwvZGQ+CiAgICA8L2RsPgoKICAgIDxwPlRoZSBmb2xsb3dpbmcgYXJlIG1vcmUgbG93LWxldmVsIG1ldGhvZHM6PC9wPgoKICAgIDxkbD4KICAgICAgPGR0IGlkPSJvcGVyYXRpb24iPjxjb2RlPm9wZXJhdGlvbihmdW5jKSDihpIgcmVzdWx0PC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5Db2RlTWlycm9yIGludGVybmFsbHkgYnVmZmVycyBjaGFuZ2VzIGFuZCBvbmx5IHVwZGF0ZXMgaXRzCiAgICAgIERPTSBzdHJ1Y3R1cmUgYWZ0ZXIgaXQgaGFzIGZpbmlzaGVkIHBlcmZvcm1pbmcgc29tZSBvcGVyYXRpb24uCiAgICAgIElmIHlvdSBuZWVkIHRvIHBlcmZvcm0gYSBsb3Qgb2Ygb3BlcmF0aW9ucyBvbiBhIENvZGVNaXJyb3IKICAgICAgaW5zdGFuY2UsIHlvdSBjYW4gY2FsbCB0aGlzIG1ldGhvZCB3aXRoIGEgZnVuY3Rpb24gYXJndW1lbnQuIEl0CiAgICAgIHdpbGwgY2FsbCB0aGUgZnVuY3Rpb24sIGJ1ZmZlcmluZyB1cCBhbGwgY2hhbmdlcywgYW5kIG9ubHkgZG9pbmcKICAgICAgdGhlIGV4cGVuc2l2ZSB1cGRhdGUgYWZ0ZXIgdGhlIGZ1bmN0aW9uIHJldHVybnMuIFRoaXMgY2FuIGJlIGEKICAgICAgbG90IGZhc3Rlci4gVGhlIHJldHVybiB2YWx1ZSBmcm9tIHRoaXMgbWV0aG9kIHdpbGwgYmUgdGhlIHJldHVybgogICAgICB2YWx1ZSBvZiB5b3VyIGZ1bmN0aW9uLjwvZGQ+CgogICAgICA8ZHQgaWQ9InJlZnJlc2giPjxjb2RlPnJlZnJlc2goKTwvY29kZT48L2R0PgogICAgICA8ZGQ+SWYgeW91ciBjb2RlIGRvZXMgc29tZXRoaW5nIHRvIGNoYW5nZSB0aGUgc2l6ZSBvZiB0aGUgZWRpdG9yCiAgICAgIGVsZW1lbnQgKHdpbmRvdyByZXNpemVzIGFyZSBhbHJlYWR5IGxpc3RlbmVkIGZvciksIG9yIHVuaGlkZXMKICAgICAgaXQsIHlvdSBzaG91bGQgcHJvYmFibHkgZm9sbG93IHVwIGJ5IGNhbGxpbmcgdGhpcyBtZXRob2QgdG8KICAgICAgZW5zdXJlIENvZGVNaXJyb3IgaXMgc3RpbGwgbG9va2luZyBhcyBpbnRlbmRlZC48L2RkPgoKICAgICAgPGR0IGlkPSJnZXRJbnB1dEZpZWxkIj48Y29kZT5nZXRJbnB1dEZpZWxkKCkg4oaSIHRleHRhcmVhPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5SZXR1cm5zIHRoZSBoaWRlbiB0ZXh0YXJlYSB1c2VkIHRvIHJlYWQgaW5wdXQuPC9kZD4KICAgICAgPGR0IGlkPSJnZXRXcmFwcGVyRWxlbWVudCI+PGNvZGU+Z2V0V3JhcHBlckVsZW1lbnQoKSDihpIgbm9kZTwvY29kZT48L2R0PgogICAgICA8ZGQ+UmV0dXJucyB0aGUgRE9NIG5vZGUgdGhhdCByZXByZXNlbnRzIHRoZSBlZGl0b3IuIFJlbW92ZSB0aGlzCiAgICAgIGZyb20geW91ciB0cmVlIHRvIGRlbGV0ZSBhbiBlZGl0b3IgaW5zdGFuY2UuPC9kZD4KICAgICAgPGR0IGlkPSJnZXRTY3JvbGxlckVsZW1lbnQiPjxjb2RlPmdldFNjcm9sbGVyRWxlbWVudCgpIOKGkiBub2RlPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5SZXR1cm5zIHRoZSBET00gbm9kZSB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgc2l6aW5nIGFuZAogICAgICB0aGUgc2Nyb2xsaW5nIG9mIHRoZSBlZGl0b3IuIFlvdSBjYW4gY2hhbmdlCiAgICAgIHRoZSA8Y29kZT5oZWlnaHQ8L2NvZGU+IGFuZCA8Y29kZT53aWR0aDwvY29kZT4gc3R5bGVzIG9mIHRoaXMKICAgICAgZWxlbWVudCB0byByZXNpemUgYW4gZWRpdG9yLiAoWW91IG1pZ2h0IGhhdmUgdG8gY2FsbAogICAgICB0aGUgPGEgaHJlZj0iI3JlZnJlc2giPjxjb2RlPnJlZnJlc2g8L2NvZGU+PC9hPiBtZXRob2QKICAgICAgYWZ0ZXJ3YXJkcy4pPC9kZD4KICAgICAgPGR0IGlkPSJnZXRHdXR0ZXJFbGVtZW50Ij48Y29kZT5nZXRHdXR0ZXJFbGVtZW50KCkg4oaSIG5vZGU8L2NvZGU+PC9kdD4KICAgICAgPGRkPkZldGNoZXMgdGhlIERPTSBub2RlIHRoYXQgcmVwcmVzZW50cyB0aGUgZWRpdG9yIGd1dHRlci48L2RkPgoKICAgICAgPGR0IGlkPSJnZXRTdGF0ZUFmdGVyIj48Y29kZT5nZXRTdGF0ZUFmdGVyKGxpbmUpIOKGkiBzdGF0ZTwvY29kZT48L2R0PgogICAgICA8ZGQ+UmV0dXJucyB0aGUgbW9kZSdzIHBhcnNlciBzdGF0ZSwgaWYgYW55LCBhdCB0aGUgZW5kIG9mIHRoZQogICAgICBnaXZlbiBsaW5lIG51bWJlci4gSWYgbm8gbGluZSBudW1iZXIgaXMgZ2l2ZW4sIHRoZSBzdGF0ZSBhdCB0aGUKICAgICAgZW5kIG9mIHRoZSBkb2N1bWVudCBpcyByZXR1cm5lZC4gVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBzdG9yaW5nCiAgICAgIHBhcnNpbmcgZXJyb3JzIGluIHRoZSBzdGF0ZSwgb3IgZ2V0dGluZyBvdGhlciBraW5kcyBvZgogICAgICBjb250ZXh0dWFsIGluZm9ybWF0aW9uIGZvciBhIGxpbmUuPC9kZD4KICAgIDwvZGw+CgogICAgPHAgaWQ9ImZyb21UZXh0QXJlYSI+RmluYWxseSwgdGhlIDxjb2RlPkNvZGVNaXJyb3I8L2NvZGU+IG9iamVjdAogICAgaXRzZWxmIGhhcyBhIG1ldGhvZCA8Y29kZT5mcm9tVGV4dEFyZWE8L2NvZGU+LiBUaGlzIHRha2VzIGEKICAgIHRleHRhcmVhIERPTSBub2RlIGFzIGZpcnN0IGFyZ3VtZW50IGFuZCBhbiBvcHRpb25hbCBjb25maWd1cmF0aW9uCiAgICBvYmplY3QgYXMgc2Vjb25kLiBJdCB3aWxsIHJlcGxhY2UgdGhlIHRleHRhcmVhIHdpdGggYSBDb2RlTWlycm9yCiAgICBpbnN0YW5jZSwgYW5kIHdpcmUgdXAgdGhlIGZvcm0gb2YgdGhhdCB0ZXh0YXJlYSAoaWYgYW55KSB0byBtYWtlCiAgICBzdXJlIHRoZSBlZGl0b3IgY29udGVudHMgYXJlIHB1dCBpbnRvIHRoZSB0ZXh0YXJlYSB3aGVuIHRoZSBmb3JtCiAgICBpcyBzdWJtaXR0ZWQuIEEgQ29kZU1pcnJvciBpbnN0YW5jZSBjcmVhdGVkIHRoaXMgd2F5IGhhcyB0d28KICAgIGFkZGl0aW9uYWwgbWV0aG9kczo8L3A+CgogICAgPGRsPgogICAgICA8ZHQgaWQ9InNhdmUiPjxjb2RlPnNhdmUoKTwvY29kZT48L2R0PgogICAgICA8ZGQ+Q29weSB0aGUgY29udGVudCBvZiB0aGUgZWRpdG9yIGludG8gdGhlIHRleHRhcmVhLjwvZGQ+CgogICAgICA8ZHQgaWQ9InRvVGV4dEFyZWEiPjxjb2RlPnRvVGV4dEFyZWEoKTwvY29kZT48L2R0PgogICAgICA8ZGQ+UmVtb3ZlIHRoZSBlZGl0b3IsIGFuZCByZXN0b3JlIHRoZSBvcmlnaW5hbCB0ZXh0YXJlYSAod2l0aAogICAgICB0aGUgZWRpdG9yJ3MgY3VycmVudCBjb250ZW50KS48L2RkPgoKICAgICAgPGR0IGlkPSJnZXRUZXh0QXJlYSI+PGNvZGU+Z2V0VGV4dEFyZWEoKSDihpIgdGV4dGFyZWE8L2NvZGU+PC9kdD4KICAgICAgPGRkPlJldHVybnMgdGhlIHRleHRhcmVhIHRoYXQgdGhlIGluc3RhbmNlIHdhcyBiYXNlZCBvbi48L2RkPgogICAgPC9kbD4KCiAgICA8cCBpZD0iZGVmaW5lRXh0ZW5zaW9uIj5JZiB5b3Ugd2FudCB0byBkZWZpbmUgZXh0cmEgbWV0aG9kcyBpbiB0ZXJtcwogICAgb2YgdGhlIENvZGVNaXJyb3IgQVBJLCBpdCBpcyBwb3NzaWJsZSB0bwogICAgdXNlIDxjb2RlPkNvZGVNaXJyb3IuZGVmaW5lRXh0ZW5zaW9uKG5hbWUsIHZhbHVlKTwvY29kZT4uIFRoaXMKICAgIHdpbGwgY2F1c2UgdGhlIGdpdmVuIHZhbHVlICh1c3VhbGx5IGEgbWV0aG9kKSB0byBiZSBhZGRlZCB0byBhbGwKICAgIENvZGVNaXJyb3IgaW5zdGFuY2VzIGNyZWF0ZWQgZnJvbSB0aGVuIG9uLjwvcD4KCiAgICA8aDIgaWQ9ImFkZG9ucyI+QWRkLW9uczwvaDI+CgogICAgPHA+VGhlIDxjb2RlPmxpYi91dGlsPC9jb2RlPiBkaXJlY3RvcnkgaW4gdGhlIGRpc3RyaWJ1dGlvbgogICAgY29udGFpbnMgYSBudW1iZXIgb2YgcmV1c2FibGUgY29tcG9uZW50cyB0aGF0IGltcGxlbWVudCBleHRyYQogICAgZWRpdG9yIGZ1bmN0aW9uYWxpdHkuIEluIGJyaWVmLCB0aGV5IGFyZTo8L3A+CgogICAgPGRsPgogICAgICA8ZHQgaWQ9InV0aWxfZGlhbG9nIj48YSBocmVmPSIuLi9saWIvdXRpbC9kaWFsb2cuanMiPjxjb2RlPmRpYWxvZy5qczwvY29kZT48L2E+PC9kdD4KICAgICAgPGRkPlByb3ZpZGVzIGEgdmVyeSBzaW1wbGUgd2F5IHRvIHF1ZXJ5IHVzZXJzIGZvciB0ZXh0IGlucHV0LgogICAgICBBZGRzIGFuIDxjb2RlPm9wZW5EaWFsb2c8L2NvZGU+IG1ldGhvZCB0byBDb2RlTWlycm9yIGluc3RhbmNlcywKICAgICAgd2hpY2ggY2FuIGJlIGNhbGxlZCB3aXRoIGFuIEhUTUwgZnJhZ21lbnQgdGhhdCBwcm92aWRlcyB0aGUKICAgICAgcHJvbXB0IChzaG91bGQgaW5jbHVkZSBhbiA8Y29kZT5pbnB1dDwvY29kZT4gdGFnKSwgYW5kIGEKICAgICAgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbiB0ZXh0IGhhcyBiZWVuIGVudGVyZWQuCiAgICAgIERlcGVuZHMgb24gPGNvZGU+bGliL3V0aWwvZGlhbG9nLmNzczwvY29kZT4uPC9kZD4KICAgICAgPGR0IGlkPSJ1dGlsX3NlYXJjaGN1cnNvciI+PGEgaHJlZj0iLi4vbGliL3V0aWwvc2VhcmNoY3Vyc29yLmpzIj48Y29kZT5zZWFyY2hjdXJzb3IuanM8L2NvZGU+PC9hPjwvZHQ+CiAgICAgIDxkZD5BZGRzIHRoZSA8Y29kZT5nZXRTZWFyY2hDdXJzb3IocXVlcnksIHN0YXJ0LCBjYXNlRm9sZCkg4oaSCiAgICAgIGN1cnNvcjwvY29kZT4gbWV0aG9kIHRvIENvZGVNaXJyb3IgaW5zdGFuY2VzLCB3aGljaCBjYW4gYmUgdXNlZAogICAgICB0byBpbXBsZW1lbnQgc2VhcmNoL3JlcGxhY2UgZnVuY3Rpb25hbGl0eS4gPGNvZGU+cXVlcnk8L2NvZGU+CiAgICAgIGNhbiBiZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBvciBhIHN0cmluZyAob25seSBzdHJpbmdzIHdpbGwgbWF0Y2gKICAgICAgYWNyb3NzIGxpbmVz4oCUaWYgdGhleSBjb250YWluIG5ld2xpbmVzKS4gPGNvZGU+c3RhcnQ8L2NvZGU+CiAgICAgIHByb3ZpZGVzIHRoZSBzdGFydGluZyBwb3NpdGlvbiBvZiB0aGUgc2VhcmNoLiBJdCBjYW4gYmUKICAgICAgYSA8Y29kZT57bGluZSwgY2h9PC9jb2RlPiBvYmplY3QsIG9yIGNhbiBiZSBsZWZ0IG9mZiB0byBkZWZhdWx0CiAgICAgIHRvIHRoZSBzdGFydCBvZiB0aGUgZG9jdW1lbnQuIDxjb2RlPmNhc2VGb2xkPC9jb2RlPiBpcyBvbmx5CiAgICAgIHJlbGV2YW50IHdoZW4gbWF0Y2hpbmcgYSBzdHJpbmcuIEl0IHdpbGwgY2F1c2UgdGhlIHNlYXJjaCB0byBiZQogICAgICBjYXNlLWluc2Vuc2l0aXZlLiBBIHNlYXJjaCBjdXJzb3IgaGFzIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoKICAgICAgICA8ZGw+CiAgICAgICAgICA8ZHQ+PGNvZGU+ZmluZE5leHQoKSwgZmluZFByZXZpb3VzKCkg4oaSIGJvb2xlYW48L2NvZGU+PC9kdD4KICAgICAgICAgIDxkZD5TZWFyY2ggZm9yd2FyZCBvciBiYWNrd2FyZCBmcm9tIHRoZSBjdXJyZW50IHBvc2l0aW9uLgogICAgICAgICAgVGhlIHJldHVybiB2YWx1ZSBpbmRpY2F0ZXMgd2hldGhlciBhIG1hdGNoIHdhcyBmb3VuZC4gSWYKICAgICAgICAgIG1hdGNoaW5nIGEgcmVndWxhciBleHByZXNzaW9uLCB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgdGhlCiAgICAgICAgICBhcnJheSByZXR1cm5lZCBieSB0aGUgPGNvZGU+bWF0Y2g8L2NvZGU+IG1ldGhvZCwgaW4gY2FzZSB5b3UKICAgICAgICAgIHdhbnQgdG8gZXh0cmFjdCBtYXRjaGVkIGdyb3Vwcy48L2RkPgogICAgICAgICAgPGR0Pjxjb2RlPmZyb20oKSwgdG8oKSDihpIgb2JqZWN0PC9jb2RlPjwvZHQ+CiAgICAgICAgICA8ZGQ+VGhlc2UgYXJlIG9ubHkgdmFsaWQgd2hlbiB0aGUgbGFzdCBjYWxsCiAgICAgICAgICB0byA8Y29kZT5maW5kTmV4dDwvY29kZT4gb3IgPGNvZGU+ZmluZFByZXZpb3VzPC9jb2RlPiBkaWQKICAgICAgICAgIG5vdCByZXR1cm4gZmFsc2UuIFRoZXkgd2lsbCByZXR1cm4gPGNvZGU+e2xpbmUsIGNofTwvY29kZT4KICAgICAgICAgIG9iamVjdHMgcG9pbnRpbmcgYXQgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIG1hdGNoLjwvZGQ+CiAgICAgICAgICA8ZHQ+PGNvZGU+cmVwbGFjZSh0ZXh0KTwvY29kZT48L2R0PgogICAgICAgICAgPGRkPlJlcGxhY2VzIHRoZSBjdXJyZW50bHkgZm91bmQgbWF0Y2ggd2l0aCB0aGUgZ2l2ZW4gdGV4dAogICAgICAgICAgYW5kIGFkanVzdHMgdGhlIGN1cnNvciBwb3NpdGlvbiB0byByZWZsZWN0IHRoZQogICAgICAgICAgcmVwbGFjZW1lbnQuPC9kZD4KICAgICAgICA8L2RsPjwvZGQ+CgogICAgICA8ZHQgaWQ9InV0aWxfc2VhcmNoIj48YSBocmVmPSIuLi9saWIvdXRpbC9zZWFyY2guanMiPjxjb2RlPnNlYXJjaC5qczwvY29kZT48L2E+PC9kdD4KICAgICAgPGRkPkltcGxlbWVudHMgdGhlIHNlYXJjaCBjb21tYW5kcy4gQ29kZU1pcnJvciBoYXMga2V5cyBib3VuZCB0bwogICAgICB0aGVzZSBieSBkZWZhdWx0LCBidXQgd2lsbCBub3QgZG8gYW55dGhpbmcgd2l0aCB0aGVtIHVubGVzcyBhbgogICAgICBpbXBsZW1lbnRhdGlvbiBpcyBwcm92aWRlZC4gRGVwZW5kcwogICAgICBvbiA8Y29kZT5zZWFyY2hjdXJzb3IuanM8L2NvZGU+LCBhbmQgd2lsbCBtYWtlIHVzZQogICAgICBvZiA8YSBocmVmPSIjdXRpbF9kaWFsb2ciPjxjb2RlPm9wZW5EaWFsb2c8L2NvZGU+PC9hPiB3aGVuCiAgICAgIGF2YWlsYWJsZSB0byBtYWtlIHByb21wdGluZyBmb3Igc2VhcmNoIHF1ZXJpZXMgbGVzcyB1Z2x5LjwvZGQ+CiAgICAgIDxkdCBpZD0idXRpbF9mb2xkY29kZSI+PGEgaHJlZj0iLi4vbGliL3V0aWwvZm9sZGNvZGUuanMiPjxjb2RlPmZvbGRjb2RlLmpzPC9jb2RlPjwvYT48L2R0PgogICAgICA8ZGQ+SGVscHMgd2l0aCBjb2RlIGZvbGRpbmcuIFNlZSA8YSBocmVmPSIuLi9kZW1vL2ZvbGRpbmcuaHRtbCI+dGhlCiAgICAgIGRlbW88L2E+IGZvciBhbiBleGFtcGxlLgogICAgICBDYWxsIDxjb2RlPkNvZGVNaXJyb3IubmV3Rm9sZEZ1bmN0aW9uPC9jb2RlPiB3aXRoIGEgcmFuZ2UtZmluZGVyCiAgICAgIGhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgYSBmdW5jdGlvbiB0aGF0IHdpbGwsIHdoZW4gYXBwbGllZCB0bwogICAgICBhIENvZGVNaXJyb3IgaW5zdGFuY2UgYW5kIGEgbGluZSBudW1iZXIsIGF0dGVtcHQgdG8gZm9sZCBvcgogICAgICB1bmZvbGQgdGhlIGJsb2NrIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiBsaW5lLiBBIHJhbmdlLWZpbmRlciBpcyBhCiAgICAgIGxhbmd1YWdlLXNwZWNpZmljIGZ1bmN0b2luIHRoYXQgYWxzbyB0YWtlcyBhbiBpbnN0YW5jZSBhbmQgYQogICAgICBsaW5lIG51bWJlciwgYW5kIHJldHVybnMgYW4gZW5kIGxpbmUgZm9yIHRoZSBibG9jaywgb3IgbnVsbCBpZgogICAgICBubyBibG9jayBpcyBzdGFydGVkIG9uIHRoYXQgbGluZS4gVGhpcyBmaWxlCiAgICAgIHByb3ZpZGVzIDxjb2RlPkNvZGVNaXJyb3IuYnJhY2VSYW5nZUZpbmRlcjwvY29kZT4sIHdoaWNoIGZpbmRzCiAgICAgIGJsb2NrcyBpbiBicmFjZSBsYW5ndWFnZXMgKEphdmFTY3JpcHQsIEMsIEphdmEsIGV0YykuPC9kZD4KICAgICAgPGR0IGlkPSJ1dGlsX3J1bm1vZGUiPjxhIGhyZWY9Ii4uL2xpYi91dGlsL3J1bm1vZGUuanMiPjxjb2RlPnJ1bm1vZGUuanM8L2NvZGU+PC9hPjwvZHQ+CiAgICAgIDxkZD5DYW4gYmUgdXNlZCB0byBydW4gYSBDb2RlTWlycm9yIG1vZGUgb3ZlciB0ZXh0IHdpdGhvdXQKICAgICAgYWN0dWFsbHkgb3BlbmluZyBhbiBlZGl0b3IgaW5zdGFuY2UuCiAgICAgIFNlZSA8YSBocmVmPSIuLi9kZW1vL3J1bm1vZGUuaHRtbCI+dGhlIGRlbW88L2E+IGZvciBhbgogICAgICBleGFtcGxlLjwvZGQ+CiAgICAgIDxkdCBpZD0idXRpbF9zaW1wbGUtaGludCI+PGEgaHJlZj0iLi4vbGliL3V0aWwvc2ltcGxlLWhpbnQuanMiPjxjb2RlPnNpbXBsZS1oaW50LmpzPC9jb2RlPjwvYT48L2R0PgogICAgICA8ZGQ+UHJvdmlkZXMgYSBmcmFtZXdvcmsgZm9yIHNob3dpbmcgYXV0b2NvbXBsZXRpb24gaGludHMuCiAgICAgIERlZmluZXMgPGNvZGU+Q29kZU1pcnJvci5zaW1wbGVIaW50PC9jb2RlPiwgd2hpY2ggdGFrZXMgYQogICAgICBDb2RlTWlycm9yIGluc3RhbmNlIGFuZCBhIGhpbnRpbmcgZnVuY3Rpb24sIGFuZCBwb3BzIHVwIGEgd2lkZ2V0CiAgICAgIHRoYXQgYWxsb3dzIHRoZSB1c2VyIHRvIHNlbGVjdCBhIGNvbXBsZXRpb24uIEhpbnRpbmcgZnVuY3Rpb25zCiAgICAgIGFyZSBmdW5jdGlvbiB0aGF0IHRha2UgYW4gZWRpdG9yIGluc3RhbmNlLCBhbmQgcmV0dXJuCiAgICAgIGEgPGNvZGU+e2xpc3QsIGZyb20sIHRvfTwvY29kZT4gb2JqZWN0LCB3aGVyZSA8Y29kZT5saXN0PC9jb2RlPgogICAgICBpcyBhbiBhcnJheSBvZiBzdHJpbmdzICh0aGUgY29tcGxldGlvbnMpLCBhbmQgPGNvZGU+ZnJvbTwvY29kZT4KICAgICAgYW5kIDxjb2RlPnRvPC9jb2RlPiBnaXZlIHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZSB0b2tlbiB0aGF0IGlzCiAgICAgIGJlaW5nIGNvbXBsZXRlZC4gRGVwZW5kcwogICAgICBvbiA8Y29kZT5saWIvdXRpbC9zaW1wbGUtaGludC5jc3M8L2NvZGU+LjwvZGQ+CiAgICAgIDxkdCBpZD0idXRpbF9qYXZhc2NyaXB0LWhpbnQiPjxhIGhyZWY9Ii4uL2xpYi91dGlsL2phdmFzY3JpcHQtaGludC5qcyI+PGNvZGU+amF2YXNjcmlwdC1oaW50LmpzPC9jb2RlPjwvYT48L2R0PgogICAgICA8ZGQ+RGVmaW5lcyA8Y29kZT5Db2RlTWlycm9yLmphdmFTY3JpcHRIaW50PC9jb2RlPiwgd2hpY2ggaXMgYQogICAgICBzaW1wbGUgaGludGluZyBmdW5jdGlvbiBmb3IgdGhlIEphdmFTY3JpcHQgbW9kZS48L2RkPgogICAgPC9kbD4KCiAgICA8aDIgaWQ9Im1vZGVhcGkiPldyaXRpbmcgQ29kZU1pcnJvciBNb2RlczwvaDI+CgogICAgPHA+TW9kZXMgdHlwaWNhbGx5IGNvbnNpc3Qgb2YgYSBzaW5nbGUgSmF2YVNjcmlwdCBmaWxlLiBUaGlzIGZpbGUKICAgIGRlZmluZXMsIGluIHRoZSBzaW1wbGVzdCBjYXNlLCBhIGxleGVyICh0b2tlbml6ZXIpIGZvciB5b3VyCiAgICBsYW5ndWFnZeKAlGEgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIGNoYXJhY3RlciBzdHJlYW0gYXMgaW5wdXQsCiAgICBhZHZhbmNlcyBpdCBwYXN0IGEgdG9rZW4sIGFuZCByZXR1cm5zIGEgc3R5bGUgZm9yIHRoYXQgdG9rZW4uIE1vcmUKICAgIGFkdmFuY2VkIG1vZGVzIGNhbiBhbHNvIGhhbmRsZSBpbmRlbnRhdGlvbiBmb3IgdGhlIGxhbmd1YWdlLjwvcD4KCiAgICA8cCBpZD0iZGVmaW5lTW9kZSI+VGhlIG1vZGUgc2NyaXB0IHNob3VsZAogICAgY2FsbCA8Y29kZT5Db2RlTWlycm9yLmRlZmluZU1vZGU8L2NvZGU+IHRvIHJlZ2lzdGVyIGl0c2VsZiB3aXRoCiAgICBDb2RlTWlycm9yLiBUaGlzIGZ1bmN0aW9uIHRha2VzIHR3byBhcmd1bWVudHMuIFRoZSBmaXJzdCBzaG91bGQgYmUKICAgIHRoZSBuYW1lIG9mIHRoZSBtb2RlLCBmb3Igd2hpY2ggeW91IHNob3VsZCB1c2UgYSBsb3dlcmNhc2Ugc3RyaW5nLAogICAgcHJlZmVyYWJseSBvbmUgdGhhdCBpcyBhbHNvIHRoZSBuYW1lIG9mIHRoZSBmaWxlcyB0aGF0IGRlZmluZSB0aGUKICAgIG1vZGUgKGkuZS4gPGNvZGU+InhtbCI8L2NvZGU+IGlzIGRlZmluZWQgPGNvZGU+eG1sLmpzPC9jb2RlPikuIFRoZQogICAgc2Vjb25kIGFyZ3VtZW50IHNob3VsZCBiZSBhIGZ1bmN0aW9uIHRoYXQsIGdpdmVuIGEgQ29kZU1pcnJvcgogICAgY29uZmlndXJhdGlvbiBvYmplY3QgKHRoZSB0aGluZyBwYXNzZWQgdG8KICAgIHRoZSA8Y29kZT5Db2RlTWlycm9yPC9jb2RlPiBmdW5jdGlvbikgYW5kIGFuIG9wdGlvbmFsIG1vZGUKICAgIGNvbmZpZ3VyYXRpb24gb2JqZWN0IChhcyBpbgogICAgdGhlIDxhIGhyZWY9IiNvcHRpb25fbW9kZSI+PGNvZGU+bW9kZTwvY29kZT48L2E+IG9wdGlvbiksIHJldHVybnMKICAgIGEgbW9kZSBvYmplY3QuPC9wPgoKICAgIDxwPlR5cGljYWxseSwgeW91IHNob3VsZCB1c2UgdGhpcyBzZWNvbmQgYXJndW1lbnQKICAgIHRvIDxjb2RlPmRlZmluZU1vZGU8L2NvZGU+IGFzIHlvdXIgbW9kdWxlIHNjb3BlIGZ1bmN0aW9uIChtb2RlcwogICAgc2hvdWxkIG5vdCBsZWFrIGFueXRoaW5nIGludG8gdGhlIGdsb2JhbCBzY29wZSEpLCBpLmUuIHdyaXRlIHlvdXIKICAgIHdob2xlIG1vZGUgaW5zaWRlIHRoaXMgZnVuY3Rpb24uPC9wPgoKICAgIDxwPlRoZSBtYWluIHJlc3BvbnNpYmlsaXR5IG9mIGEgbW9kZSBzY3JpcHQgaXMgPGVtPnBhcnNpbmc8L2VtPgogICAgdGhlIGNvbnRlbnQgb2YgdGhlIGVkaXRvci4gRGVwZW5kaW5nIG9uIHRoZSBsYW5ndWFnZSBhbmQgdGhlCiAgICBhbW91bnQgb2YgZnVuY3Rpb25hbGl0eSBkZXNpcmVkLCB0aGlzIGNhbiBiZSBkb25lIGluIHJlYWxseSBlYXN5CiAgICBvciBleHRyZW1lbHkgY29tcGxpY2F0ZWQgd2F5cy4gU29tZSBwYXJzZXJzIGNhbiBiZSBzdGF0ZWxlc3MsCiAgICBtZWFuaW5nIHRoYXQgdGhleSBsb29rIGF0IG9uZSBlbGVtZW50ICg8ZW0+dG9rZW48L2VtPikgb2YgdGhlIGNvZGUKICAgIGF0IGEgdGltZSwgd2l0aCBubyBtZW1vcnkgb2Ygd2hhdCBjYW1lIGJlZm9yZS4gTW9zdCwgaG93ZXZlciwgd2lsbAogICAgbmVlZCB0byByZW1lbWJlciBzb21ldGhpbmcuIFRoaXMgaXMgZG9uZSBieSB1c2luZyBhIDxlbT5zdGF0ZQogICAgb2JqZWN0PC9lbT4sIHdoaWNoIGlzIGFuIG9iamVjdCB0aGF0IGlzIGFsd2F5cyBwYXNzZWQgd2hlbgogICAgcmVhZGluZyBhIHRva2VuLCBhbmQgd2hpY2ggY2FuIGJlIG11dGF0ZWQgYnkgdGhlIHRva2VuaXplci48L3A+CgogICAgPHAgaWQ9InN0YXJ0U3RhdGUiPk1vZGVzIHRoYXQgdXNlIGEgc3RhdGUgbXVzdCBkZWZpbmUKICAgIGEgPGNvZGU+c3RhcnRTdGF0ZTwvY29kZT4gbWV0aG9kIG9uIHRoZWlyIG1vZGUgb2JqZWN0LiBUaGlzIGlzIGEKICAgIGZ1bmN0aW9uIG9mIG5vIGFyZ3VtZW50cyB0aGF0IHByb2R1Y2VzIGEgc3RhdGUgb2JqZWN0IHRvIGJlIHVzZWQKICAgIGF0IHRoZSBzdGFydCBvZiBhIGRvY3VtZW50LjwvcD4KCiAgICA8cCBpZD0idG9rZW4iPlRoZSBtb3N0IGltcG9ydGFudCBwYXJ0IG9mIGEgbW9kZSBvYmplY3QgaXMKICAgIGl0cyA8Y29kZT50b2tlbihzdHJlYW0sIHN0YXRlKTwvY29kZT4gbWV0aG9kLiBBbGwgbW9kZXMgbXVzdAogICAgZGVmaW5lIHRoaXMgbWV0aG9kLiBJdCBzaG91bGQgcmVhZCBvbmUgdG9rZW4gZnJvbSB0aGUgc3RyZWFtIGl0IGlzCiAgICBnaXZlbiBhcyBhbiBhcmd1bWVudCwgb3B0aW9uYWxseSB1cGRhdGUgaXRzIHN0YXRlLCBhbmQgcmV0dXJuIGEKICAgIHN0eWxlIHN0cmluZywgb3IgPGNvZGU+bnVsbDwvY29kZT4gZm9yIHRva2VucyB0aGF0IGRvIG5vdCBoYXZlIHRvCiAgICBiZSBzdHlsZWQuIEZvciB5b3VyIHN0eWxlcywgeW91IGNhbiBlaXRoZXIgdXNlIHRoZSAnc3RhbmRhcmQnIG9uZXMKICAgIGRlZmluZWQgaW4gdGhlIHRoZW1lcyAod2l0aG91dCB0aGUgPGNvZGU+Y20tPC9jb2RlPiBwcmVmaXgpLCBvcgogICAgZGVmaW5lIHlvdXIgb3duIChhcyB0aGUgPGEgaHJlZj0iLi4vbW9kZS9kaWZmL2luZGV4Lmh0bWwiPmRpZmY8L2E+CiAgICBtb2RlIGRvZXMpIGFuZCBoYXZlIHBlb3BsZSBpbmNsdWRlIGEgY3VzdG9tIENTUyBmaWxlIGZvciB5b3VyCiAgICBtb2RlLjxwPgoKICAgIDxwIGlkPSJTdHJpbmdTdHJlYW0iPlRoZSBzdHJlYW0gb2JqZWN0IGVuY2Fwc3VsYXRlcyBhIGxpbmUgb2YgY29kZQogICAgKHRva2VucyBtYXkgbmV2ZXIgc3BhbiBsaW5lcykgYW5kIG91ciBjdXJyZW50IHBvc2l0aW9uIGluIHRoYXQKICAgIGxpbmUuIEl0IGhhcyB0aGUgZm9sbG93aW5nIEFQSTo8L3A+CgogICAgPGRsPgogICAgICA8ZHQ+PGNvZGU+ZW9sKCkg4oaSIGJvb2xlYW48L2NvZGU+PC9kdD4KICAgICAgPGRkPlJldHVybnMgdHJ1ZSBvbmx5IGlmIHRoZSBzdHJlYW0gaXMgYXQgdGhlIGVuZCBvZiB0aGUKICAgICAgbGluZS48L2RkPgogICAgICA8ZHQ+PGNvZGU+c29sKCkg4oaSIGJvb2xlYW48L2NvZGU+PC9kdD4KICAgICAgPGRkPlJldHVybnMgdHJ1ZSBvbmx5IGlmIHRoZSBzdHJlYW0gaXMgYXQgdGhlIHN0YXJ0IG9mIHRoZQogICAgICBsaW5lLjwvZGQ+CgogICAgICA8ZHQ+PGNvZGU+cGVlaygpIOKGkiBjaGFyYWN0ZXI8L2NvZGU+PC9kdD4KICAgICAgPGRkPlJldHVybnMgdGhlIG5leHQgY2hhcmFjdGVyIGluIHRoZSBzdHJlYW0gd2l0aG91dCBhZHZhbmNpbmcKICAgICAgaXQuIFdpbGwgcmV0dXJuIDxjb2RlPnVuZGVmaW5lZDwvY29kZT4gYXQgdGhlIGVuZCBvZiB0aGUKICAgICAgbGluZS48L2RkPgogICAgICA8ZHQ+PGNvZGU+bmV4dCgpIOKGkiBjaGFyYWN0ZXI8L2NvZGU+PC9kdD4KICAgICAgPGRkPlJldHVybnMgdGhlIG5leHQgY2hhcmFjdGVyIGluIHRoZSBzdHJlYW0gYW5kIGFkdmFuY2VzIGl0LgogICAgICBBbHNvIHJldHVybnMgPGNvZGU+dW5kZWZpbmVkPC9jb2RlPiB3aGVuIG5vIG1vcmUgY2hhcmFjdGVycyBhcmUKICAgICAgYXZhaWxhYmxlLjwvZGQ+CgogICAgICA8ZHQ+PGNvZGU+ZWF0KG1hdGNoKSDihpIgY2hhcmFjdGVyPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD48Y29kZT5tYXRjaDwvY29kZT4gY2FuIGJlIGEgY2hhcmFjdGVyLCBhIHJlZ3VsYXIgZXhwcmVzc2lvbiwKICAgICAgb3IgYSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgY2hhcmFjdGVyIGFuZCByZXR1cm5zIGEgYm9vbGVhbi4gSWYKICAgICAgdGhlIG5leHQgY2hhcmFjdGVyIGluIHRoZSBzdHJlYW0gJ21hdGNoZXMnIHRoZSBnaXZlbiBhcmd1bWVudCwKICAgICAgaXQgaXMgY29uc3VtZWQgYW5kIHJldHVybmVkLiBPdGhlcndpc2UsIDxjb2RlPnVuZGVmaW5lZDwvY29kZT4KICAgICAgaXMgcmV0dXJuZWQuPC9kZD4KICAgICAgPGR0Pjxjb2RlPmVhdFdoaWxlKG1hdGNoKSDihpIgYm9vbGVhbjwvY29kZT48L2R0PgogICAgICA8ZGQ+UmVwZWF0ZWRseSBjYWxscyA8Y29kZT5lYXQ8L2NvZGU+IHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50LAogICAgICB1bnRpbCBpdCBmYWlscy4gUmV0dXJucyB0cnVlIGlmIGFueSBjaGFyYWN0ZXJzIHdlcmUgZWF0ZW4uPC9kZD4KICAgICAgPGR0Pjxjb2RlPmVhdFNwYWNlKCkg4oaSIGJvb2xlYW48L2NvZGU+PC9kdD4KICAgICAgPGRkPlNob3J0Y3V0IGZvciA8Y29kZT5lYXRXaGlsZTwvY29kZT4gd2hlbiBtYXRjaGluZwogICAgICB3aGl0ZS1zcGFjZS48L2RkPgogICAgICA8ZHQ+PGNvZGU+c2tpcFRvRW5kKCk8L2NvZGU+PC9kdD4KICAgICAgPGRkPk1vdmVzIHRoZSBwb3NpdGlvbiB0byB0aGUgZW5kIG9mIHRoZSBsaW5lLjwvZGQ+CiAgICAgIDxkdD48Y29kZT5za2lwVG8oY2gpIOKGkiBib29sZWFuPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5Ta2lwcyB0byB0aGUgbmV4dCBvY2N1cnJlbmNlIG9mIHRoZSBnaXZlbiBjaGFyYWN0ZXIsIGlmCiAgICAgIGZvdW5kIG9uIHRoZSBjdXJyZW50IGxpbmUgKGRvZXNuJ3QgYWR2YW5jZSB0aGUgc3RyZWFtIGlmIHRoZQogICAgICBjaGFyYWN0ZXIgZG9lcyBub3Qgb2NjdXIgb24gdGhlIGxpbmUpLiBSZXR1cm5zIHRydWUgaWYgdGhlCiAgICAgIGNoYXJhY3RlciB3YXMgZm91bmQuPC9kZD4KICAgICAgPGR0Pjxjb2RlPm1hdGNoKHBhdHRlcm4sIGNvbnN1bWUsIGNhc2VGb2xkKSDihpIgYm9vbGVhbjwvY29kZT48L2R0PgogICAgICA8ZGQ+QWN0IGxpa2UgYQogICAgICBtdWx0aS1jaGFyYWN0ZXIgPGNvZGU+ZWF0PC9jb2RlPuKAlGlmIDxjb2RlPmNvbnN1bWU8L2NvZGU+IGlzIHRydWUKICAgICAgb3Igbm90IGdpdmVu4oCUb3IgYSBsb29rLWFoZWFkIHRoYXQgZG9lc24ndCB1cGRhdGUgdGhlIHN0cmVhbQogICAgICBwb3NpdGlvbuKAlGlmIGl0IGlzIGZhbHNlLiA8Y29kZT5wYXR0ZXJuPC9jb2RlPiBjYW4gYmUgZWl0aGVyIGEKICAgICAgc3RyaW5nIG9yIGEgcmVndWxhciBleHByZXNzaW9uIHN0YXJ0aW5nIHdpdGggPGNvZGU+XjwvY29kZT4uCiAgICAgIFdoZW4gaXQgaXMgYSBzdHJpbmcsIDxjb2RlPmNhc2VGb2xkPC9jb2RlPiBjYW4gYmUgc2V0IHRvIHRydWUgdG8KICAgICAgbWFrZSB0aGUgbWF0Y2ggY2FzZS1pbnNlbnNpdGl2ZS4gV2hlbiBzdWNjZXNzZnVsbHkgbWF0Y2hpbmcgYQogICAgICByZWd1bGFyIGV4cHJlc3Npb24sIHRoZSByZXR1cm5lZCB2YWx1ZSB3aWxsIGJlIHRoZSBhcnJheQogICAgICByZXR1cm5lZCBieSA8Y29kZT5tYXRjaDwvY29kZT4sIGluIGNhc2UgeW91IG5lZWQgdG8gZXh0cmFjdAogICAgICBtYXRjaGVkIGdyb3Vwcy48L2RkPgoKICAgICAgPGR0Pjxjb2RlPmJhY2tVcChuKTwvY29kZT48L2R0PgogICAgICA8ZGQ+QmFja3MgdXAgdGhlIHN0cmVhbSA8Y29kZT5uPC9jb2RlPiBjaGFyYWN0ZXJzLiBCYWNraW5nIGl0IHVwCiAgICAgIGZ1cnRoZXIgdGhhbiB0aGUgc3RhcnQgb2YgdGhlIGN1cnJlbnQgdG9rZW4gd2lsbCBjYXVzZSB0aGluZ3MgdG8KICAgICAgYnJlYWssIHNvIGJlIGNhcmVmdWwuPC9kZD4KICAgICAgPGR0Pjxjb2RlPmNvbHVtbigpIOKGkiBpbnRlZ2VyPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5SZXR1cm5zIHRoZSBjb2x1bW4gKHRha2luZyBpbnRvIGFjY291bnQgdGFicykgYXQgd2hpY2ggdGhlCiAgICAgIGN1cnJlbnQgdG9rZW4gc3RhcnRzLiBDYW4gYmUgdXNlZCB0byBmaW5kIG91dCB3aGV0aGVyIGEgdG9rZW4KICAgICAgc3RhcnRzIGEgbmV3IGxpbmUuPC9kZD4KICAgICAgPGR0Pjxjb2RlPmluZGVudGF0aW9uKCkg4oaSIGludGVnZXI8L2NvZGU+PC9kdD4KICAgICAgPGRkPlRlbGxzIHlvdSBob3cgZmFyIHRoZSBjdXJyZW50IGxpbmUgaGFzIGJlZW4gaW5kZW50ZWQsIGluCiAgICAgIHNwYWNlcy4gQ29ycmVjdHMgZm9yIHRhYiBjaGFyYWN0ZXJzLjwvZGQ+CgogICAgICA8ZHQ+PGNvZGU+Y3VycmVudCgpIOKGkiBzdHJpbmc8L2NvZGU+PC9kdD4KICAgICAgPGRkPkdldCB0aGUgc3RyaW5nIGJldHdlZW4gdGhlIHN0YXJ0IG9mIHRoZSBjdXJyZW50IHRva2VuIGFuZAogICAgICB0aGUgY3VycmVudCBzdHJlYW0gcG9zaXRpb24uPC9kZD4KICAgIDwvZGw+CgogICAgPHAgaWQ9ImJsYW5rTGluZSI+QnkgZGVmYXVsdCwgYmxhbmsgbGluZXMgYXJlIHNpbXBseSBza2lwcGVkIHdoZW4KICAgIHRva2VuaXppbmcgYSBkb2N1bWVudC4gRm9yIGxhbmd1YWdlcyB0aGF0IGhhdmUgc2lnbmlmaWNhbnQgYmxhbmsKICAgIGxpbmVzLCB5b3UgY2FuIGRlZmluZSBhIDxjb2RlPmJsYW5rTGluZShzdGF0ZSk8L2NvZGU+IG1ldGhvZCBvbgogICAgeW91ciBtb2RlIHRoYXQgd2lsbCBnZXQgY2FsbGVkIHdoZW5ldmVyIGEgYmxhbmsgbGluZSBpcyBwYXNzZWQKICAgIG92ZXIsIHNvIHRoYXQgaXQgY2FuIHVwZGF0ZSB0aGUgcGFyc2VyIHN0YXRlLjwvcD4KCiAgICA8cCBpZD0iY29weVN0YXRlIj5CZWNhdXNlIHN0YXRlIG9iamVjdCBhcmUgbXV0YXRlZCwgYW5kIENvZGVNaXJyb3IKICAgIG5lZWRzIHRvIGtlZXAgdmFsaWQgdmVyc2lvbnMgb2YgYSBzdGF0ZSBhcm91bmQgc28gdGhhdCBpdCBjYW4KICAgIHJlc3RhcnQgYSBwYXJzZSBhdCBhbnkgbGluZSwgY29waWVzIG11c3QgYmUgbWFkZSBvZiBzdGF0ZSBvYmplY3RzLgogICAgVGhlIGRlZmF1bHQgYWxnb3JpdGhtIHVzZWQgaXMgdGhhdCBhIG5ldyBzdGF0ZSBvYmplY3QgaXMgY3JlYXRlZCwKICAgIHdoaWNoIGdldHMgYWxsIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBvbGQgb2JqZWN0LiBBbnkgcHJvcGVydGllcwogICAgd2hpY2ggaG9sZCBhcnJheXMgZ2V0IGEgY29weSBvZiB0aGVzZSBhcnJheXMgKHNpbmNlIGFycmF5cyB0ZW5kIHRvCiAgICBiZSB1c2VkIGFzIG11dGFibGUgc3RhY2tzKS4gV2hlbiB0aGlzIGlzIG5vdCBjb3JyZWN0LCBmb3IgZXhhbXBsZQogICAgYmVjYXVzZSBhIG1vZGUgbXV0YXRlcyBub24tYXJyYXkgcHJvcGVydGllcyBvZiBpdHMgc3RhdGUgb2JqZWN0LCBhCiAgICBtb2RlIG9iamVjdCBzaG91bGQgZGVmaW5lIGEgPGNvZGU+Y29weVN0YXRlPC9jb2RlPiBtZXRob2QsCiAgICB3aGljaCBpcyBnaXZlbiBhIHN0YXRlIGFuZCBzaG91bGQgcmV0dXJuIGEgc2FmZSBjb3B5IG9mIHRoYXQKICAgIHN0YXRlLjwvcD4KCiAgICA8cCBpZD0iY29tcGFyZVN0YXRlcyI+QnkgZGVmYXVsdCwgQ29kZU1pcnJvciB3aWxsIHN0b3AgcmUtcGFyc2luZwogICAgYSBkb2N1bWVudCBhcyBzb29uIGFzIGl0IGVuY291bnRlcnMgYSBmZXcgbGluZXMgdGhhdCB3ZXJlCiAgICBoaWdobGlnaHRlZCB0aGUgc2FtZSBpbiB0aGUgb2xkIHBhcnNlIGFzIGluIHRoZSBuZXcgb25lLiBJdCBpcwogICAgcG9zc2libGUgdG8gcHJvdmlkZSBhbiBleHBsaWNpdCB3YXkgdG8gdGVzdCB3aGV0aGVyIGEgc3RhdGUgaXMKICAgIGVxdWl2YWxlbnQgdG8gYW5vdGhlciBvbmUsIHdoaWNoIENvZGVNaXJyb3Igd2lsbCB1c2UgKGluc3RlYWQgb2YKICAgIHRoZSB1bmNoYW5nZWQtbGluZXMgaGV1cmlzdGljKSB0byBkZWNpZGUgd2hlbiB0byBzdG9wCiAgICBoaWdobGlnaHRpbmcuIFlvdSBkbyB0aGlzIGJ5IHByb3ZpZGluZwogICAgYSA8Y29kZT5jb21wYXJlU3RhdGVzPC9jb2RlPiBtZXRob2Qgb24geW91ciBtb2RlIG9iamVjdCwgd2hpY2gKICAgIHRha2VzIHR3byBzdGF0ZSBhcmd1bWVudHMgYW5kIHJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlcgogICAgdGhleSBhcmUgZXF1aXZhbGVudC4gU2VlIHRoZSBYTUwgbW9kZSwgd2hpY2ggdXNlcyB0aGlzIHRvIHByb3ZpZGUKICAgIHJlbGlhYmxlIGhpZ2hsaWdodGluZyBvZiBiYWQgY2xvc2luZyB0YWdzLCBhcyBhbiBleGFtcGxlLjwvcD4KCiAgICA8cCBpZD0iaW5kZW50Ij5JZiB5b3Ugd2FudCB5b3VyIG1vZGUgdG8gcHJvdmlkZSBzbWFydCBpbmRlbnRhdGlvbgogICAgKHRob3VnaCB0aGUgPGEgaHJlZj0iI2luZGVudExpbmUiPjxjb2RlPmluZGVudExpbmU8L2NvZGU+PC9hPgogICAgbWV0aG9kIGFuZCB0aGUgPGNvZGU+aW5kZW50QXV0bzwvY29kZT4KICAgIGFuZCA8Y29kZT5uZXdsaW5lQW5kSW5kZW50PC9jb2RlPiBjb21tYW5kcywgd2hpY2gga2V5cyBjYW4gYmUKICAgIDxhIGhyZWY9IiNvcHRpb25fZXh0cmFLZXlzIj5ib3VuZDwvYT4gdG8pLCB5b3UgbXVzdCBkZWZpbmUKICAgIGFuIDxjb2RlPmluZGVudChzdGF0ZSwgdGV4dEFmdGVyKTwvY29kZT4gbWV0aG9kIG9uIHlvdXIgbW9kZQogICAgb2JqZWN0LjwvcD4KCiAgICA8cD5UaGUgaW5kZW50YXRpb24gbWV0aG9kIHNob3VsZCBpbnNwZWN0IHRoZSBnaXZlbiBzdGF0ZSBvYmplY3QsCiAgICBhbmQgb3B0aW9uYWxseSB0aGUgPGNvZGU+dGV4dEFmdGVyPC9jb2RlPiBzdHJpbmcsIHdoaWNoIGNvbnRhaW5zCiAgICB0aGUgdGV4dCBvbiB0aGUgbGluZSB0aGF0IGlzIGJlaW5nIGluZGVudGVkLCBhbmQgcmV0dXJuIGFuCiAgICBpbnRlZ2VyLCB0aGUgYW1vdW50IG9mIHNwYWNlcyB0byBpbmRlbnQuIEl0IHNob3VsZCB1c3VhbGx5IHRha2UKICAgIHRoZSA8YSBocmVmPSIjb3B0aW9uX2luZGVudFVuaXQiPjxjb2RlPmluZGVudFVuaXQ8L2NvZGU+PC9hPgogICAgb3B0aW9uIGludG8gYWNjb3VudC48L3A+CgogICAgPHAgaWQ9ImVsZWN0cmljQ2hhcnMiPkZpbmFsbHksIGEgbW9kZSBtYXkgZGVmaW5lCiAgICBhbiA8Y29kZT5lbGVjdHJpY0NoYXJzPC9jb2RlPiBwcm9wZXJ0eSwgd2hpY2ggc2hvdWxkIGhvbGQgYSBzdHJpbmcKICAgIGNvbnRhaW5pbmcgYWxsIHRoZSBjaGFyYWN0ZXJzIHRoYXQgc2hvdWxkIHRyaWdnZXIgdGhlIGJlaGF2aW91cgogICAgZGVzY3JpYmVkIGZvcgogICAgdGhlIDxhIGhyZWY9IiNvcHRpb25fZWxlY3RyaWNDaGFycyI+PGNvZGU+ZWxlY3RyaWNDaGFyczwvY29kZT48L2E+CiAgICBvcHRpb24uPC9wPgoKICAgIDxwPlNvLCB0byBzdW1tYXJpemUsIGEgbW9kZSA8ZW0+bXVzdDwvZW0+IHByb3ZpZGUKICAgIGEgPGNvZGU+dG9rZW48L2NvZGU+IG1ldGhvZCwgYW5kIGl0IDxlbT5tYXk8L2VtPgogICAgcHJvdmlkZSA8Y29kZT5zdGFydFN0YXRlPC9jb2RlPiwgPGNvZGU+Y29weVN0YXRlPC9jb2RlPiwKICAgIDxjb2RlPmNvbXBhcmVTdGF0ZXM8L2NvZGU+LCBhbmQgPGNvZGU+aW5kZW50PC9jb2RlPiBtZXRob2RzLiBGb3IKICAgIGFuIGV4YW1wbGUgb2YgYSB0cml2aWFsIG1vZGUsIHNlZQogICAgdGhlIDxhIGhyZWY9Ii4uL21vZGUvZGlmZi9kaWZmLmpzIj5kaWZmIG1vZGU8L2E+LCBmb3IgYSBtb3JlIGludm9sdmVkCiAgICBleGFtcGxlLCBzZWUgdGhlIDxhIGhyZWY9Ii4uL21vZGUvY2xpa2UvY2xpa2UuanMiPkMtbGlrZQogICAgbW9kZTwvYT4uPC9wPgoKICAgIDxwPlNvbWV0aW1lcywgaXQgaXMgdXNlZnVsIGZvciBtb2RlcyB0byA8ZW0+bmVzdDwvZW0+4oCUdG8gaGF2ZSBvbmUKICAgIG1vZGUgZGVsZWdhdGUgd29yayB0byBhbm90aGVyIG1vZGUuIEFuIGV4YW1wbGUgb2YgdGhpcyBraW5kIG9mCiAgICBtb2RlIGlzIHRoZSA8YSBocmVmPSIuLi9tb2RlL2h0bWxtaXhlZC9odG1sbWl4ZWQuanMiPm1peGVkLW1vZGUgSFRNTAogICAgbW9kZTwvYT4uIFRvIGltcGxlbWVudCBzdWNoIG5lc3RpbmcsIGl0IGlzIHVzdWFsbHkgbmVjZXNzYXJ5IHRvCiAgICBjcmVhdGUgbW9kZSBvYmplY3RzIGFuZCBjb3B5IHN0YXRlcyB5b3Vyc2VsZi4gVG8gY3JlYXRlIGEgbW9kZQogICAgb2JqZWN0LCB0aGVyZSBhcmUgPGNvZGU+Q29kZU1pcnJvci5nZXRNb2RlKG9wdGlvbnMsCiAgICBwYXJzZXJDb25maWcpPC9jb2RlPiwgd2hlcmUgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGEgY29uZmlndXJhdGlvbgogICAgb2JqZWN0IGFzIHBhc3NlZCB0byB0aGUgbW9kZSBjb25zdHJ1Y3RvciBmdW5jdGlvbiwgYW5kIHRoZSBzZWNvbmQKICAgIGFyZ3VtZW50IGlzIGEgbW9kZSBzcGVjaWZpY2F0aW9uIGFzIGluCiAgICB0aGUgPGEgaHJlZj0iI29wdGlvbl9tb2RlIj48Y29kZT5tb2RlPC9jb2RlPjwvYT4gb3B0aW9uLiBUbyBjb3B5IGEKICAgIHN0YXRlIG9iamVjdCwgY2FsbCA8Y29kZT5Db2RlTWlycm9yLmNvcHlTdGF0ZShtb2RlLCBzdGF0ZSk8L2NvZGU+LAogICAgd2hlcmUgPGNvZGU+bW9kZTwvY29kZT4gaXMgdGhlIG1vZGUgdGhhdCBjcmVhdGVkIHRoZSBnaXZlbgogICAgc3RhdGUuPC9wPgoKICAgIDxwPlRvIG1ha2UgaW5kZW50YXRpb24gd29yayBwcm9wZXJseSBpbiBhIG5lc3RlZCBwYXJzZXIsIGl0IGlzCiAgICBhZHZpc2FibGUgdG8gZ2l2ZSB0aGUgPGNvZGU+c3RhcnRTdGF0ZTwvY29kZT4gbWV0aG9kIG9mIG1vZGVzIHRoYXQKICAgIGFyZSBpbnRlbmRlZCB0byBiZSBuZXN0ZWQgYW4gb3B0aW9uYWwgYXJndW1lbnQgdGhhdCBwcm92aWRlcyB0aGUKICAgIGJhc2UgaW5kZW50YXRpb24gZm9yIHRoZSBibG9jayBvZiBjb2RlLiBUaGUgSmF2YVNjcmlwdCBhbmQgQ1NTCiAgICBwYXJzZXIgZG8gdGhpcywgZm9yIGV4YW1wbGUsIHRvIGFsbG93IEphdmFTY3JpcHQgYW5kIENTUyBjb2RlCiAgICBpbnNpZGUgdGhlIG1peGVkLW1vZGUgSFRNTCBtb2RlIHRvIGJlIHByb3Blcmx5IGluZGVudGVkLjwvcD4KCiAgICA8cD5GaW5hbGx5LCBpdCBpcyBwb3NzaWJsZSB0byBhc3NvY2lhdGUgeW91ciBtb2RlLCBvciBhIGNlcnRhaW4KICAgIGNvbmZpZ3VyYXRpb24gb2YgeW91ciBtb2RlLCB3aXRoCiAgICBhIDxhIGhyZWY9Imh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTUlNRSI+TUlNRTwvYT4gdHlwZS4gRm9yCiAgICBleGFtcGxlLCB0aGUgSmF2YVNjcmlwdCBtb2RlIGFzc29jaWF0ZXMgaXRzZWxmCiAgICB3aXRoIDxjb2RlPnRleHQvamF2YXNjcmlwdDwvY29kZT4sIGFuZCBpdHMgSlNPTiB2YXJpYW50CiAgICB3aXRoIDxjb2RlPmFwcGxpY2F0aW9uL2pzb248L2NvZGU+LiBUbyBkbyB0aGlzLAogICAgY2FsbCA8Y29kZT5Db2RlTWlycm9yLmRlZmluZU1JTUUobWltZSwgbW9kZVNwZWMpPC9jb2RlPiwKICAgIHdoZXJlIDxjb2RlPm1vZGVTcGVjPC9jb2RlPiBjYW4gYmUgYSBzdHJpbmcgb3Igb2JqZWN0IHNwZWNpZnlpbmcgYQogICAgbW9kZSwgYXMgaW4gdGhlIDxhIGhyZWY9IiNvcHRpb25fbW9kZSI+PGNvZGU+bW9kZTwvY29kZT48L2E+CiAgICBvcHRpb24uPC9wPgoKPC9kaXY+PGRpdiBjbGFzcz0icmlnaHRzbWFsbCBibGsiPgoKICAgIDxoMj5Db250ZW50czwvaDI+CgogICAgPHVsPgogICAgICA8bGk+PGEgaHJlZj0iI292ZXJ2aWV3Ij5PdmVydmlldzwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iI3VzYWdlIj5CYXNpYyBVc2FnZTwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iI2NvbmZpZyI+Q29uZmlndXJhdGlvbjwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iI3N0eWxpbmciPkN1c3RvbWl6ZWQgU3R5bGluZzwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iI2FwaSI+UHJvZ3JhbW1pbmcgQVBJPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSIjYWRkb25zIj5BZGQtb25zPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSIjbW9kZWFwaSI+V3JpdGluZyBDb2RlTWlycm9yIE1vZGVzPC9hPjwvbGk+CiAgICA8L3VsPgoKPC9kaXY+PC9kaXY+Cgo8ZGl2IHN0eWxlPSJoZWlnaHQ6IDJlbSI+Jm5ic3A7PC9kaXY+CgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/doc/oldrelease.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iaHR0cDovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2Nzcz9mYW1pbHk9RHJvaWQrU2Fuc3xEcm9pZCtTYW5zOmJvbGQiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9ImRvY3MuY3NzIi8+CiAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIvPgogICAgPGxpbmsgcmVsPSJhbHRlcm5hdGUiIGhyZWY9Imh0dHA6Ly90d2l0dGVyLmNvbS9zdGF0dXNlcy91c2VyX3RpbWVsaW5lLzI0MjI4MzI4OC5yc3MiIHR5cGU9ImFwcGxpY2F0aW9uL3Jzcyt4bWwiLz4KICA8L2hlYWQ+CiAgPGJvZHk+Cgo8aDE+PHNwYW4gY2xhc3M9ImxvZ28tYnJhY2VzIj57IH08L3NwYW4+IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC8iPkNvZGVNaXJyb3I8L2E+PC9oMT4KCjxwcmUgY2xhc3M9ImdyZXkiPgo8aW1nIHNyYz0iYmFib29uLnBuZyIgY2xhc3M9ImxvZ28iIGFsdD0ibG9nbyIvPi8qIE9sZCByZWxlYXNlIGhpc3RvcnkgKi8KCjwvcHJlPgogIDxwIGNsYXNzPSJyZWwiPjA3LTA2LTIwMTE6IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTIuMS56aXAiPlZlcnNpb24gMi4xPC9hPjo8L3A+CiAgPHAgY2xhc3M9InJlbC1ub3RlIj5BZGQKICBhIDxhIGhyZWY9Im1hbnVhbC5odG1sI29wdGlvbl90aGVtZSI+dGhlbWU8L2E+IHN5c3RlbQogICg8YSBocmVmPSIuLi9kZW1vL3RoZW1lLmh0bWwiPmRlbW88L2E+KS4gTm90ZSB0aGF0IHRoaXMgaXMgbm90CiAgYmFja3dhcmRzLWNvbXBhdGlibGXigJR5b3UnbGwgaGF2ZSB0byB1cGRhdGUgeW91ciBzdHlsZXMgYW5kCiAgbW9kZXMhPC9wPgoKICA8cCBjbGFzcz0icmVsIj4wNy0wNi0yMDExOiA8YSBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvY29kZW1pcnJvci0yLjAyLnppcCI+VmVyc2lvbiAyLjAyPC9hPjo8L3A+CiAgPHVsIGNsYXNzPSJyZWwtbm90ZSI+CiAgICA8bGk+QWRkIGEgPGEgaHJlZj0iLi4vbW9kZS9sdWEvaW5kZXguaHRtbCI+THVhIG1vZGU8L2E+LjwvbGk+CiAgICA8bGk+Rml4IHJldmVyc2Utc2VhcmNoaW5nIGZvciBhIHJlZ2V4cC48L2xpPgogICAgPGxpPkVtcHR5IGxpbmVzIGNhbiBubyBsb25nZXIgYnJlYWsgaGlnaGxpZ2h0aW5nLjwvbGk+CiAgICA8bGk+UmV3b3JrIHNjcm9sbGluZyBtb2RlbCAodGhlIG91dGVyIHdyYXBwZXIgbm8gbG9uZ2VyIGRvZXMgdGhlIHNjcm9sbGluZykuPC9saT4KICAgIDxsaT5Tb2x2ZSBob3Jpem9udGFsIGppdHRlcmluZyBvbiBsb25nIGxpbmVzLjwvbGk+CiAgICA8bGk+QWRkIDxhIGhyZWY9Ii4uL2RlbW8vcnVubW9kZS5odG1sIj5ydW5tb2RlLmpzPC9hPi48L2xpPgogICAgPGxpPkltbWVkaWF0ZWx5IHJlLWhpZ2hsaWdodCB0ZXh0IHdoZW4gdHlwaW5nLjwvbGk+CiAgICA8bGk+Rml4IHByb2JsZW0gd2l0aCAnc3RpY2tpbmcnIGhvcml6b250YWwgc2Nyb2xsYmFyLjwvbGk+CiAgPC91bD4KCiAgPHAgY2xhc3M9InJlbCI+MjYtMDUtMjAxMTogPGEgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2NvZGVtaXJyb3ItMi4wMS56aXAiPlZlcnNpb24gMi4wMTwvYT46PC9wPgogIDx1bCBjbGFzcz0icmVsLW5vdGUiPgogICAgPGxpPkFkZCBhIDxhIGhyZWY9Ii4uL21vZGUvc21hbGx0YWxrL2luZGV4Lmh0bWwiPlNtYWxsdGFsayBtb2RlPC9hPi48L2xpPgogICAgPGxpPkFkZCBhIDxhIGhyZWY9Ii4uL21vZGUvcnN0L2luZGV4Lmh0bWwiPnJlU3RydWN0dXJlZFRleHQgbW9kZTwvYT4uPC9saT4KICAgIDxsaT5BZGQgYSA8YSBocmVmPSIuLi9tb2RlL3B5dGhvbi9pbmRleC5odG1sIj5QeXRob24gbW9kZTwvYT4uPC9saT4KICAgIDxsaT5BZGQgYSA8YSBocmVmPSIuLi9tb2RlL3Bsc3FsL2luZGV4Lmh0bWwiPlBML1NRTCBtb2RlPC9hPi48L2xpPgogICAgPGxpPjxjb2RlPmNvb3Jkc0NoYXI8L2NvZGU+IG5vdyB3b3JrczwvbGk+CiAgICA8bGk+Rml4IGEgcHJvYmxlbSB3aGVyZSA8Y29kZT5vbkN1cnNvckFjdGl2aXR5PC9jb2RlPiBpbnRlcmZlcmVkIHdpdGggPGNvZGU+b25DaGFuZ2U8L2NvZGU+LjwvbGk+CiAgICA8bGk+Rml4IGEgbnVtYmVyIG9mIHNjcm9sbGluZyBhbmQgbW91c2UtY2xpY2stcG9zaXRpb24gZ2xpdGNoZXMuPC9saT4KICAgIDxsaT5QYXNzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjaGFuZ2VkIGxpbmVzIHRvIDxjb2RlPm9uQ2hhbmdlPC9jb2RlPi48L2xpPgogICAgPGxpPlN1cHBvcnQgY21kLXVwL2Rvd24gb24gT1MgWC48L2xpPgogICAgPGxpPkFkZCB0cmlwbGUtY2xpY2sgbGluZSBzZWxlY3Rpb24uPC9saT4KICAgIDxsaT5Eb24ndCBoYW5kbGUgc2hpZnQgd2hlbiBjaGFuZ2luZyB0aGUgc2VsZWN0aW9uIHRocm91Z2ggdGhlIEFQSS48L2xpPgogICAgPGxpPlN1cHBvcnQgPGNvZGU+Im5vY3Vyc29yIjwvY29kZT4gbW9kZSBmb3IgPGNvZGU+cmVhZE9ubHk8L2NvZGU+IG9wdGlvbi48L2xpPgogICAgPGxpPkFkZCBhbiA8Y29kZT5vbkhpZ2hsaWdodENvbXBsZXRlPC9jb2RlPiBvcHRpb24uPC9saT4KICAgIDxsaT5GaXggdGhlIGNvbnRleHQgbWVudSBmb3IgRmlyZWZveC48L2xpPgogIDwvdWw+CgogIDxwIGNsYXNzPSJyZWwiPjI4LTAzLTIwMTE6IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTIuMC56aXAiPlZlcnNpb24gMi4wPC9hPjo8L3A+CiAgPHAgY2xhc3M9InJlbC1ub3RlIj5Db2RlTWlycm9yIDIgaXMgYSBjb21wbGV0ZSByZXdyaXRlIHRoYXQncwogIGZhc3Rlciwgc21hbGxlciwgc2ltcGxlciB0byB1c2UsIGFuZCBsZXNzIGRlcGVuZGVudCBvbiBicm93c2VyCiAgcXVpcmtzLiBTZWUgPGEgaHJlZj0iaW50ZXJuYWxzLmh0bWwiPnRoaXM8L2E+CiAgYW5kIDxhIGhyZWY9Imh0dHA6Ly9ncm91cHMuZ29vZ2xlLmNvbS9ncm91cC9jb2RlbWlycm9yL2Jyb3dzZV90aHJlYWQvdGhyZWFkLzVhOGU4OTQwMjRhOWY1ODAiPnRoaXM8L2E+CiAgZm9yIG1vcmUgaW5mb3JtYXRpb24uPC9hPgoKICA8cCBjbGFzcz0icmVsIj4yOC0wMy0yMDExOiA8YSBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvY29kZW1pcnJvci0xLjAuemlwIj5WZXJzaW9uIDEuMDwvYT46PC9wPgogIDx1bCBjbGFzcz0icmVsLW5vdGUiPgogICAgPGxpPkZpeCBlcnJvciB3aGVuIGRlYnVnIGhpc3Rvcnkgb3ZlcmZsb3dzLjwvbGk+CiAgICA8bGk+UmVmaW5lIGhhbmRsaW5nIG9mIEMjIHZlcmJhdGltIHN0cmluZ3MuPC9saT4KICAgIDxsaT5GaXggc29tZSBpc3N1ZXMgd2l0aCBKYXZhU2NyaXB0IGluZGVudGF0aW9uLjwvbGk+CiAgPC91bD4KCiAgPHAgY2xhc3M9InJlbCI+MjItMDItMjAxMTogPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL21hcmlqbmgvY29kZW1pcnJvcjIvdHJlZS9iZXRhMiI+VmVyc2lvbiAyLjAgYmV0YSAyPC9hPjo8L3A+CiAgPHAgY2xhc3M9InJlbC1ub3RlIj5Tb21ld2hhdGUgbW9yZSBtYXR1cmUgQVBJLCBsb3RzIG9mIGJ1Z3Mgc2hha2VuIG91dC48L2E+CgogIDxwIGNsYXNzPSJyZWwiPjE3LTAyLTIwMTE6IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTAuOTQuemlwIj5WZXJzaW9uIDAuOTQ8L2E+OjwvcD4KICA8dWwgY2xhc3M9InJlbC1ub3RlIj4KICAgIDxsaT48Y29kZT50YWJNb2RlOiAic3BhY2VzIjwvY29kZT4gd2FzIG1vZGlmaWVkIHNsaWdodGx5IChub3cgaW5kZW50cyB3aGVuIHNvbWV0aGluZyBpcyBzZWxlY3RlZCkuPC9saT4KICAgIDxsaT5GaXhlcyBhIGJ1ZyB0aGF0IHdvdWxkIGNhdXNlIHRoZSBzZWxlY3Rpb24gY29kZSB0byBicmVhayBvbiBzb21lIElFIHZlcnNpb25zLjwvbGk+CiAgICA8bGk+RGlzYWJsaW5nIHNwZWxsLWNoZWNrIG9uIFdlYktpdCBicm93c2VycyBub3cgd29ya3MuPC9saT4KICA8L3VsPgoKICA8cCBjbGFzcz0icmVsIj4wOC0wMi0yMDExOiA8YSBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvIj5WZXJzaW9uIDIuMCBiZXRhIDE8L2E+OjwvcD4KICA8cCBjbGFzcz0icmVsLW5vdGUiPkNvZGVNaXJyb3IgMiBpcyBhIGNvbXBsZXRlIHJld3JpdGUgb2YKICBDb2RlTWlycm9yLCBubyBsb25nZXIgZGVwZW5kaW5nIG9uIGFuIGVkaXRhYmxlIGZyYW1lLjwvcD4KCiAgPHAgY2xhc3M9InJlbCI+MTktMDEtMjAxMTogPGEgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2NvZGVtaXJyb3ItMC45My56aXAiPlZlcnNpb24gMC45MzwvYT46PC9wPgogIDx1bCBjbGFzcz0icmVsLW5vdGUiPgogICAgPGxpPkFkZGVkIGEgPGEgaHJlZj0iY29udHJpYi9yZWdleC9pbmRleC5odG1sIj5SZWd1bGFyIEV4cHJlc3Npb248L2E+IHBhcnNlci48L2xpPgogICAgPGxpPkZpeGVzIHRvIHRoZSBQSFAgcGFyc2VyLjwvbGk+CiAgICA8bGk+U3VwcG9ydCBmb3IgcmVndWxhciBleHByZXNzaW9uIGluIHNlYXJjaC9yZXBsYWNlLjwvbGk+CiAgICA8bGk+QWRkIDxjb2RlPnNhdmU8L2NvZGU+IG1ldGhvZCB0byBpbnN0YW5jZXMgY3JlYXRlZCB3aXRoIDxjb2RlPmZyb21UZXh0QXJlYTwvY29kZT4uPC9saT4KICAgIDxsaT5BZGQgc3VwcG9ydCBmb3IgTVMgVC1TUUwgaW4gdGhlIFNRTCBwYXJzZXIuPC9saT4KICAgIDxsaT5TdXBwb3J0IHVzZSBvZiBDU1MgY2xhc3NlcyBmb3IgaGlnaGxpZ2h0aW5nIGJyYWNrZXRzLjwvbGk+CiAgICA8bGk+Rml4IHlldCBhbm90aGVyIGhhbmcgd2l0aCBsaW5lLW51bWJlcmluZyBpbiBoaWRkZW4gZWRpdG9ycy48L2xpPgogIDwvdWw+CgogIDxwIGNsYXNzPSJyZWwiPjE3LTEyLTIwMTA6IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTAuOTIuemlwIj5WZXJzaW9uIDAuOTI8L2E+OjwvcD4KICA8dWwgY2xhc3M9InJlbC1ub3RlIj4KICAgIDxsaT5NYWtlIENvZGVNaXJyb3Igd29yayBpbiBYSFRNTCBkb2N1bWVudHMuPC9saT4KICAgIDxsaT5GaXggYnVnIGluIGhhbmRsaW5nIG9mIGJhY2tzbGFzaGVzIGluIFB5dGhvbiBzdHJpbmdzLjwvbGk+CiAgICA8bGk+VGhlIDxjb2RlPnN0eWxlTnVtYmVyczwvY29kZT4gb3B0aW9uIGlzIG5vdyBvZmZpY2lhbGx5CiAgICBzdXBwb3J0ZWQgYW5kIGRvY3VtZW50ZWQuPC9saT4KICAgIDxsaT48Y29kZT5vbkxpbmVOdW1iZXJDbGljazwvY29kZT4gb3B0aW9uIGFkZGVkLjwvbGk+CiAgICA8bGk+TW9yZSBjb25zaXN0ZW50IG5hbWVzIDxjb2RlPm9uTG9hZDwvY29kZT4gYW5kCiAgICA8Y29kZT5vbkN1cnNvckFjdGl2aXR5PC9jb2RlPiBjYWxsYmFja3MuIE9sZCBuYW1lcyBzdGlsbCB3b3JrLCBidXQKICAgIGFyZSBkZXByZWNhdGVkLjwvbGk+CiAgICA8bGk+QWRkIGEgPGEgaHJlZj0iY29udHJpYi9mcmVlbWFya2VyL2luZGV4Lmh0bWwiPkZyZWVtYXJrZXI8L2E+IG1vZGUuPC9saT4KICA8L3VsPgoKICA8cCBjbGFzcz0icmVsIj4xMS0xMS0yMDEwOiA8YQogIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTAuOTEuemlwIj5WZXJzaW9uIDAuOTE8L2E+OjwvcD4KICA8dWwgY2xhc3M9InJlbC1ub3RlIj4KICAgIDxsaT5BZGRzIHN1cHBvcnQgZm9yIDxhIGhyZWY9ImNvbnRyaWIvamF2YSI+SmF2YTwvYT4uPC9saT4KICAgIDxsaT5TbWFsbCBhZGRpdGlvbnMgdG8gdGhlIDxhIGhyZWY9ImNvbnRyaWIvcGhwIj5QSFA8L2E+IGFuZCA8YSBocmVmPSJjb250cmliL3NxbCI+U1FMPC9hPiBwYXJzZXJzLjwvbGk+CiAgICA8bGk+V29yayBhcm91bmQgdmFyaW91cyA8YSBocmVmPSJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDc4MDYiPldlYmtpdDwvYT4gPGEgaHJlZj0iaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDc0Ij5pc3N1ZXM8L2E+LjwvbGk+CiAgICA8bGk+Rml4IDxjb2RlPnRvVGV4dEFyZWE8L2NvZGU+IHRvIHVwZGF0ZSB0aGUgY29kZSBpbiB0aGUgdGV4dGFyZWEuPC9saT4KICAgIDxsaT5BZGQgYSA8Y29kZT5ub1NjcmlwdENhY2hpbmc8L2NvZGU+IG9wdGlvbiAoaGFjayB0byBlYXNlIGRldmVsb3BtZW50KS48L2xpPgogICAgPGxpPk1ha2Ugc3ViLW1vZGVzIG9mIDxhIGhyZWY9Im1peGVkdGVzdC5odG1sIj5IVE1MIG1peGVkPC9hPiBtb2RlIGNvbmZpZ3VyYWJsZS48L2xpPgogIDwvdWw+CgogIDxwIGNsYXNzPSJyZWwiPjAyLTEwLTIwMTA6IDxhCiAgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2NvZGVtaXJyb3ItMC45LnppcCI+VmVyc2lvbiAwLjk8L2E+OjwvcD4KICA8dWwgY2xhc3M9InJlbC1ub3RlIj4KICAgIDxsaT5BZGQgc3VwcG9ydCBmb3Igc2VhcmNoaW5nIGJhY2t3YXJkcy48L2xpPgogICAgPGxpPlRoZXJlIGFyZSBub3cgcGFyc2VycyBmb3IgPGEgaHJlZj0iY29udHJpYi9zY2hlbWUvaW5kZXguaHRtbCI+U2NoZW1lPC9hPiwgPGEgaHJlZj0iY29udHJpYi94cXVlcnkvaW5kZXguaHRtbCI+WFF1ZXJ5PC9hPiwgYW5kIDxhIGhyZWY9ImNvbnRyaWIvb21ldGEvaW5kZXguaHRtbCI+T21ldGFKUzwvYT4uPC9saT4KICAgIDxsaT5NYWtlcyA8Y29kZT5oZWlnaHQ6ICJkeW5hbWljIjwvY29kZT4gbW9yZSByb2J1c3QuPC9saT4KICAgIDxsaT5GaXhlcyBidWcgd2hlcmUgcGFzdGUgZGlkIG5vdCB3b3JrIG9uIE9TIFguPC9saT4KICAgIDxsaT5BZGQgYSA8Y29kZT5lbnRlck1vZGU8L2NvZGU+IGFuZCA8Y29kZT5lbGVjdHJpY0NoYXJzPC9jb2RlPiBvcHRpb25zIHRvIG1ha2UgaW5kZW50YXRpb24gZXZlbiBtb3JlIGN1c3RvbWl6YWJsZS48L2xpPgogICAgPGxpPkFkZCA8Y29kZT5maXJzdExpbmVOdW1iZXI8L2NvZGU+IG9wdGlvbi48L2xpPgogICAgPGxpPkZpeCBiYWQgaGFuZGxpbmcgb2YgPGNvZGU+QG1lZGlhPC9jb2RlPiBydWxlcyBieSB0aGUgQ1NTIHBhcnNlci48L2xpPgogICAgPGxpPlRha2UgYSBuZXcsIG1vcmUgcm9idXN0IGFwcHJvYWNoIHRvIHdvcmtpbmcgYXJvdW5kIHRoZSBpbnZpc2libGUtbGFzdC1saW5lIGJ1ZyBpbiBXZWJLaXQuPC9saT4KICA8L3VsPgoKICA8cCBjbGFzcz0icmVsIj4yMi0wNy0yMDEwOiA8YQogIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTAuOC56aXAiPlZlcnNpb24gMC44PC9hPjo8L3A+CiAgPHVsIGNsYXNzPSJyZWwtbm90ZSI+CiAgICA8bGk+QWRkIGEgPGNvZGU+Y3Vyc29yQ29vcmRzPC9jb2RlPiBtZXRob2QgdG8gZmluZCB0aGUgc2NyZWVuCiAgICBjb29yZGluYXRlcyBvZiB0aGUgY3Vyc29yLjwvbGk+CiAgICA8bGk+QSBudW1iZXIgb2YgZml4ZXMgYW5kIHN1cHBvcnQgZm9yIG1vcmUgc3ludGF4IGluIHRoZSBQSFAgcGFyc2VyLjwvbGk+CiAgICA8bGk+Rml4IGluZGVudGF0aW9uIHByb2JsZW0gd2l0aCBKU09OLW1vZGUgSlMgcGFyc2VyIGluIFdlYmtpdC48L2xpPgogICAgPGxpPkFkZCBhIDxhIGhyZWY9ImNvbXByZXNzLmh0bWwiPm1pbmlmaWNhdGlvbjwvYT4gVUkuPC9saT4KICAgIDxsaT5TdXBwb3J0IGEgPGNvZGU+aGVpZ2h0OiBkeW5hbWljPC9jb2RlPiBtb2RlLCB3aGVyZSB0aGUgZWRpdG9yJ3MKICAgIGhlaWdodCB3aWxsIGFkanVzdCB0byB0aGUgc2l6ZSBvZiBpdHMgY29udGVudC48L2xpPgogICAgPGxpPkJldHRlciBzdXBwb3J0IGZvciBJTUUgaW5wdXQgbW9kZS48L2xpPgogICAgPGxpPkZpeCBKYXZhU2NyaXB0IHBhcnNlciBnZXR0aW5nIGNvbmZ1c2VkIHdoZW4gc2VlaW5nIGEgbm8tYXJndW1lbnQKICAgIGZ1bmN0aW9uIGNhbGwuPC9saT4KICAgIDxsaT5IYXZlIENTUyBwYXJzZXIgc2VlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gc2VsZWN0b3JzIGFuZCBvdGhlcgogICAgaWRlbnRpZmllcnMuPC9saT4KICAgIDxsaT5GaXggc2Nyb2xsaW5nIGJ1ZyB3aGVuIHBhc3RpbmcgaW4gYSBob3Jpem9udGFsbHktc2Nyb2xsZWQKICAgIGVkaXRvci48L2xpPgogICAgPGxpPlN1cHBvcnQgPGNvZGU+dG9UZXh0QXJlYTwvY29kZT4gbWV0aG9kIGluIGluc3RhbmNlcyBjcmVhdGVkIHdpdGgKICAgIDxjb2RlPmZyb21UZXh0QXJlYTwvY29kZT4uPC9saT4KICAgIDxsaT5Xb3JrIGFyb3VuZCBuZXcgT3BlcmEgY3Vyc29yIGJ1ZyB0aGF0IGNhdXNlcyB0aGUgY3Vyc29yIHRvIGp1bXAKICAgIHdoZW4gcHJlc3NpbmcgYmFja3NwYWNlIGF0IHRoZSBlbmQgb2YgYSBsaW5lLjwvbGk+CiAgPC91bD4KCiAgPHAgY2xhc3M9InJlbCI+MjctMDQtMjAxMDogPGEKICBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvY29kZW1pcnJvci0wLjY3LnppcCI+VmVyc2lvbgogIDAuNjc8L2E+OjwvcD4KICA8cCBjbGFzcz0icmVsLW5vdGUiPk1vcmUgY29uc2lzdGVudCBwYWdlLXVwL3BhZ2UtZG93biBiZWhhdmlvdXIKICBhY3Jvc3MgYnJvd3NlcnMuIEZpeCBzb21lIGlzc3VlcyB3aXRoIGhpZGRlbiBlZGl0b3JzIGxvb3BpbmcgZm9yZXZlcgogIHdoZW4gbGluZS1udW1iZXJzIHdlcmUgZW5hYmxlZC4gTWFrZSBQSFAgcGFyc2VyIHBhcnNlCiAgPGNvZGU+IlxcIjwvY29kZT4gY29ycmVjdGx5LiBIYXZlIDxjb2RlPmp1bXBUb0xpbmU8L2NvZGU+IHdvcmsgb24KICBsaW5lIGhhbmRsZXMsIGFuZCBhZGQgPGNvZGU+Y3Vyc29yTGluZTwvY29kZT4gZnVuY3Rpb24gdG8gZmV0Y2ggdGhlCiAgbGluZSBoYW5kbGUgd2hlcmUgdGhlIGN1cnNvciBjdXJyZW50bHkgaXMuIEFkZCBuZXcKICA8Y29kZT5zZXRTdHlsZXNoZWV0PC9jb2RlPiBmdW5jdGlvbiB0byBzd2l0Y2ggc3R5bGUtc2hlZXRzIGluIGEKICBydW5uaW5nIGVkaXRvci48L3A+CgogIDxwIGNsYXNzPSJyZWwiPjAxLTAzLTIwMTA6IDxhCiAgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2NvZGVtaXJyb3ItMC42Ni56aXAiPlZlcnNpb24KICAwLjY2PC9hPjo8L3A+CiAgPHAgY2xhc3M9InJlbC1ub3RlIj5BZGRzIDxjb2RlPnJlbW92ZUxpbmU8L2NvZGU+IG1ldGhvZCB0byBBUEkuCiAgSW50cm9kdWNlcyB0aGUgPGEgaHJlZj0iY29udHJpYi9wbHNxbC9pbmRleC5odG1sIj5QTFNRTCBwYXJzZXI8L2E+LgogIE1hcmtzIFhNTCBlcnJvcnMgYnkgYWRkaW5nIChyYXRoZXIgdGhhbiByZXBsYWNpbmcpIGEgQ1NTIGNsYXNzLCBzbwogIHRoYXQgdGhleSBjYW4gYmUgZGlzYWJsZWQgYnkgbW9kaWZ5aW5nIHRoZWlyIHN0eWxlLiBGaXhlcyBzZXZlcmFsCiAgc2VsZWN0aW9uIGJ1Z3MsIGFuZCBhIG51bWJlciBvZiBzbWFsbCBnbGl0Y2hlcy48L3A+CgogIDxwIGNsYXNzPSJyZWwiPjEyLTExLTIwMDk6IDxhCiAgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2NvZGVtaXJyb3ItMC42NS56aXAiPlZlcnNpb24KICAwLjY1PC9hPjo8L3A+CiAgPHAgY2xhc3M9InJlbC1ub3RlIj5BZGQgc3VwcG9ydCBmb3IgaGF2aW5nIGJvdGggbGluZS13cmFwcGluZyBhbmQKICBsaW5lLW51bWJlcnMgdHVybmVkIG9uLCBtYWtlIHBhcmVuLWhpZ2hsaWdodGluZyBzdHlsZSBjdXN0b21pc2FibGUKICAoPGNvZGU+bWFya1BhcmVuPC9jb2RlPiBhbmQgPGNvZGU+dW5tYXJrUGFyZW48L2NvZGU+IGNvbmZpZwogIG9wdGlvbnMpLCB3b3JrIGFyb3VuZCBhIHNlbGVjdGlvbiBidWcgdGhhdCBPcGVyYQogIDxlbT5yZTwvZW0+aW50cm9kdWNlZCBpbiB2ZXJzaW9uIDEwLjwvcD4KCiAgPHAgY2xhc3M9InJlbCI+MjMtMTAtMjAwOTogPGEKICBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvY29kZW1pcnJvci0wLjY0LnppcCI+VmVyc2lvbgogIDAuNjQ8L2E+OjwvcD4KICA8cCBjbGFzcz0icmVsLW5vdGUiPlNvbHZlcyBzb21lIGlzc3VlcyBpbnRyb2R1Y2VkIGJ5IHRoZQogIHBhc3RlLWhhbmRsaW5nIGNoYW5nZXMgZnJvbSB0aGUgcHJldmlvdXMgcmVsZWFzZS4gQWRkcwogIDxjb2RlPnNldFNwZWxsY2hlY2s8L2NvZGU+LCA8Y29kZT5zZXRUZXh0V3JhcHBpbmc8L2NvZGU+LAogIDxjb2RlPnNldEluZGVudFVuaXQ8L2NvZGU+LCA8Y29kZT5zZXRVbmRvRGVwdGg8L2NvZGU+LAogIDxjb2RlPnNldFRhYk1vZGU8L2NvZGU+LCBhbmQgPGNvZGU+c2V0TGluZU51bWJlcnM8L2NvZGU+IHRvCiAgY3VzdG9taXNlIGEgcnVubmluZyBlZGl0b3IuIEludHJvZHVjZXMgYW4gPGEKICBocmVmPSJjb250cmliL3NxbC9pbmRleC5odG1sIj5TUUw8L2E+IHBhcnNlci4gRml4ZXMgYSBmZXcgc21hbGwKICBwcm9ibGVtcyBpbiB0aGUgPGEgaHJlZj0iY29udHJpYi9weXRob24vaW5kZXguaHRtbCI+UHl0aG9uPC9hPgogIHBhcnNlci4gQW5kLCBhcyB1c3VhbCwgYWRkIHdvcmthcm91bmRzIGZvciB2YXJpb3VzIG5ld2x5IGRpc2NvdmVyZWQKICBicm93c2VyIGluY29tcGF0aWJpbGl0aWVzLjwvcD4KCjxwIGNsYXNzPSJyZWwiPjxlbT4zMS0wOC0yMDA5PC9lbT46IDxhCmhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTAuNjMuemlwIj5WZXJzaW9uCjAuNjM8L2E+OjwvcD4KPHAgY2xhc3M9InJlbC1ub3RlIj4gT3ZlcmhhdWwgb2YgcGFzdGUtaGFuZGxpbmcgKGxlc3MgZnJhZ2lsZSksIGZpeGVzIGZvciBzZXZlcmFsCnNlcmlvdXMgSUU4IGlzc3VlcyAoY3Vyc29yIGp1bXBpbmcsIGVuZC1vZi1kb2N1bWVudCBidWdzKSBhbmQgYSBudW1iZXIKb2Ygc21hbGwgcHJvYmxlbXMuPC9wPgoKPHAgY2xhc3M9InJlbCI+PGVtPjMwLTA1LTIwMDk8L2VtPjogPGEKaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2NvZGVtaXJyb3ItMC42Mi56aXAiPlZlcnNpb24KMC42MjwvYT46PC9wPgo8cCBjbGFzcz0icmVsLW5vdGUiPkludHJvZHVjZXMgPGEgaHJlZj0iY29udHJpYi9weXRob24vaW5kZXguaHRtbCI+UHl0aG9uPC9hPgphbmQgPGEgaHJlZj0iY29udHJpYi9sdWEvaW5kZXguaHRtbCI+THVhPC9hPiBwYXJzZXJzLiBBZGQKPGNvZGU+c2V0UGFyc2VyPC9jb2RlPiAob24tdGhlLWZseSBtb2RlIGNoYW5naW5nKSBhbmQKPGNvZGU+Y2xlYXJIaXN0b3J5PC9jb2RlPiBtZXRob2RzLiBNYWtlIHBhcnNpbmcgcGFzc2VzIHRpbWUtYmFzZWQKaW5zdGVhZCBvZiBsaW5lcy1iYXNlZCAoc2VlIHRoZSA8Y29kZT5wYXNzVGltZTwvY29kZT4gb3B0aW9uKS48L3A+Cgo8L2JvZHk+PC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/doc/reporting.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFJlcG9ydGluZyBCdWdzPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Imh0dHA6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PURyb2lkK1NhbnN8RHJvaWQrU2Fuczpib2xkIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJkb2NzLmNzcyIvPgogICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiLz4KICAgIDxzdHlsZT5saSB7IG1hcmdpbi10b3A6IDFlbTsgfTwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgoKPGgxPjxzcGFuIGNsYXNzPSJsb2dvLWJyYWNlcyI+eyB9PC9zcGFuPiA8YSBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvIj5Db2RlTWlycm9yPC9hPjwvaDE+Cgo8cHJlIGNsYXNzPSJncmV5Ij4KPGltZyBzcmM9ImJhYm9vbi5wbmciIGNsYXNzPSJsb2dvIiBhbHQ9ImxvZ28iLz4vKiBSZXBvcnRpbmcgYnVncwogICBlZmZlY3RpdmVseSAqLwo8L3ByZT4KCjxkaXYgY2xhc3M9ImxlZnQiPgoKPHA+U28geW91IGZvdW5kIGEgcHJvYmxlbSBpbiBDb2RlTWlycm9yLiBCeSBhbGwgbWVhbnMsIHJlcG9ydCBpdCEgQnVnCnJlcG9ydHMgZnJvbSB1c2VycyBhcmUgdGhlIG1haW4gZHJpdmUgYmVoaW5kIGltcHJvdmVtZW50cyB0bwpDb2RlTWlycm9yLiBCdXQgZmlyc3QsIHBsZWFzZSByZWFkIG92ZXIgdGhlc2UgcG9pbnRzOjwvcD4KCjxvbD4KICA8bGk+Q29kZU1pcnJvciBpcyBtYWludGFpbmVkIGJ5IHZvbHVudGVlcnMuIFRoZXkgZG9uJ3Qgb3dlIHlvdQogIGFueXRoaW5nLCBzbyBiZSBwb2xpdGUuIFJlcG9ydHMgd2l0aCBhbiBpbmRpZ25hbnQgb3IgYmVsbGlnZXJlbnQKICB0b25lIHRlbmQgdG8gYmUgbW92ZWQgdG8gdGhlIGJvdHRvbSBvZiB0aGUgcGlsZS48L2xpPgoKICA8bGk+SW5jbHVkZSBpbmZvcm1hdGlvbiBhYm91dCA8c3Ryb25nPnRoZSBicm93c2VyIGluIHdoaWNoIHRoZQogIHByb2JsZW0gb2NjdXJyZWQ8L3N0cm9uZz4uIEV2ZW4gaWYgeW91IHRlc3RlZCBzZXZlcmFsIGJyb3dzZXJzLCBhbmQKICB0aGUgcHJvYmxlbSBvY2N1cnJlZCBpbiBhbGwgb2YgdGhlbSwgbWVudGlvbiB0aGlzIGZhY3QgaW4gdGhlIGJ1ZwogIHJlcG9ydC4gQWxzbyBpbmNsdWRlIGJyb3dzZXIgdmVyc2lvbiBudW1iZXJzIGFuZCB0aGUgb3BlcmF0aW5nCiAgc3lzdGVtIHRoYXQgeW91J3JlIG9uLjwvbGk+CgogIDxsaT5NZW50aW9uIHdoaWNoIHJlbGVhc2Ugb2YgQ29kZU1pcnJvciB5b3UncmUgdXNpbmcuIFByZWZlcmFibHksCiAgdHJ5IGFsc28gd2l0aCB0aGUgY3VycmVudCBkZXZlbG9wbWVudCBzbmFwc2hvdCwgdG8gZW5zdXJlIHRoZQogIHByb2JsZW0gaGFzIG5vdCBhbHJlYWR5IGJlZW4gZml4ZWQuPC9saT4KCiAgPGxpPk1lbnRpb24gdmVyeSBwcmVjaXNlbHkgd2hhdCB3ZW50IHdyb25nLiAiWCBpcyBicm9rZW4iIGlzIG5vdCBhCiAgZ29vZCBidWcgcmVwb3J0LiBXaGF0IGRpZCB5b3UgZXhwZWN0IHRvIGhhcHBlbj8gV2hhdCBoYXBwZW5lZAogIGluc3RlYWQ/IERlc2NyaWJlIHRoZSBleGFjdCBzdGVwcyBhIG1haW50YWluZXIgaGFzIHRvIHRha2UgdG8gbWFrZQogIHRoZSBwcm9ibGVtIG9jY3VyLiBXZSBjYW4gbm90IGZpeCBzb21ldGhpbmcgdGhhdCB3ZSBjYW4gbm90CiAgb2JzZXJ2ZS48L2xpPgoKICA8bGk+SWYgdGhlIHByb2JsZW0gY2FuIG5vdCBiZSByZXByb2R1Y2VkIGluIGFueSBvZiB0aGUgZGVtb3MKICBpbmNsdWRlZCBpbiB0aGUgQ29kZU1pcnJvciBkaXN0cmlidXRpb24sIHBsZWFzZSBwcm92aWRlIGFuIEhUTUwKICBkb2N1bWVudCB0aGF0IGRlbW9uc3RyYXRlcyB0aGUgcHJvYmxlbS4gVGhlIGJlc3Qgd2F5IHRvIGRvIHRoaXMgaXMKICB0byBnbyB0byA8YSBocmVmPSJodHRwOi8vanNiaW4uY29tL2lodW5pbi9lZGl0Ij5qc2Jpbi5jb208L2E+LCBlbnRlcgogIGl0IHRoZXJlLCBwcmVzcyBzYXZlLCBhbmQgaW5jbHVkZSB0aGUgcmVzdWx0aW5nIGxpbmsgaW4geW91ciBidWcKICByZXBvcnQuPC9saT4KPC9vbD4KCjwvZGl2PgoKICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/doc/upgrade_v2.2.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFVwZ3JhZGluZyB0byB2Mi4yPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Imh0dHA6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PURyb2lkK1NhbnN8RHJvaWQrU2Fuczpib2xkIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJkb2NzLmNzcyIvPgogICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiLz4KICA8L2hlYWQ+CiAgPGJvZHk+Cgo8aDE+PHNwYW4gY2xhc3M9ImxvZ28tYnJhY2VzIj57IH08L3NwYW4+IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC8iPkNvZGVNaXJyb3I8L2E+PC9oMT4KCjxwcmUgY2xhc3M9ImdyZXkiPgo8aW1nIHNyYz0iYmFib29uLnBuZyIgY2xhc3M9ImxvZ28iIGFsdD0ibG9nbyIvPi8qIFVwZ3JhZGluZyB0byB2Mi4yCiAqLwo8L3ByZT4KCjxkaXYgY2xhc3M9ImxlZnQiPgoKPHA+VGhlcmUgYXJlIGEgZmV3IHRoaW5ncyBpbiB0aGUgMi4yIHJlbGVhc2UgdGhhdCByZXF1aXJlIHNvbWUgY2FyZQp3aGVuIHVwZ3JhZGluZy48L3A+Cgo8aDI+Tm8gbW9yZSBkZWZhdWx0LmNzczwvaDI+Cgo8cD5UaGUgZGVmYXVsdCB0aGVtZSBpcyBub3cgaW5jbHVkZWQKaW4gPGEgaHJlZj0iLi4vbGliL2NvZGVtaXJyb3IuY3NzIj48Y29kZT5jb2RlbWlycm9yLmNzczwvY29kZT48L2E+LCBzbwp5b3UgZG8gbm90IGhhdmUgdG8gaW5jbHVkZWQgaXQgc2VwYXJhdGVseSBhbnltb3JlLiAoSXQgd2FzIHRpbnksIHNvCmV2ZW4gaWYgeW91J3JlIG5vdCB1c2luZyBpdCwgdGhlIGV4dHJhIGRhdGEgb3ZlcmhlYWQgaXMgbmVnbGlnaWJsZS4pCgo8aDI+RGlmZmVyZW50IGtleSBjdXN0b21pemF0aW9uPC9oMj4KCjxwPkNvZGVNaXJyb3IgaGFzIG1vdmVkIHRvIGEgc3lzdGVtCndoZXJlIDxhIGhyZWY9Im1hbnVhbC5odG1sI29wdGlvbl9rZXlNYXAiPmtleW1hcHM8L2E+IGFyZSB1c2VkIHRvCmJpbmQgYmVoYXZpb3IgdG8ga2V5cy4gVGhpcyBtZWFucyA8YSBocmVmPSIuLi9kZW1vL2VtYWNzLmh0bWwiPmN1c3RvbQpiaW5kaW5nczwvYT4gYXJlIG5vdyBwb3NzaWJsZS48L3A+Cgo8cD5UaHJlZSBvcHRpb25zIHRoYXQgaW5mbHVlbmNlZCBrZXkKYmVoYXZpb3IsIDxjb2RlPnRhYk1vZGU8L2NvZGU+LCA8Y29kZT5lbnRlck1vZGU8L2NvZGU+LAphbmQgPGNvZGU+c21hcnRIb21lPC9jb2RlPiwgYXJlIG5vIGxvbmdlciBzdXBwb3J0ZWQuIEluc3RlYWQsIHlvdSBjYW4KcHJvdmlkZSBjdXN0b20gYmluZGluZ3MgdG8gaW5mbHVlbmNlIHRoZSB3YXkgdGhlc2Uga2V5cyBhY3QuIFRoaXMgaXMKZG9uZSB0aHJvdWdoIHRoZQpuZXcgPGEgaHJlZj0ibWFudWFsLmh0bWwjb3B0aW9uX2V4dHJhS2V5cyI+PGNvZGU+ZXh0cmFLZXlzPC9jb2RlPjwvYT4Kb3B0aW9uLCB3aGljaCBjYW4gaG9sZCBhbiBvYmplY3QgbWFwcGluZyBrZXkgbmFtZXMgdG8gZnVuY3Rpb25hbGl0eS4gQQpzaW1wbGUgZXhhbXBsZSB3b3VsZCBiZTo8L3A+Cgo8cHJlPiAgZXh0cmFLZXlzOiB7CiAgICAiQ3RybC1TIjogZnVuY3Rpb24oaW5zdGFuY2UpIHsgc2F2ZVRleHQoaW5zdGFuY2UuZ2V0VmFsdWUoKSk7IH0sCiAgICAiQ3RybC0vIjogInVuZG8iCiAgfTwvcHJlPgoKPHA+S2V5cyBjYW4gYmUgbWFwcGVkIGVpdGhlciB0byBmdW5jdGlvbnMsIHdoaWNoIHdpbGwgYmUgZ2l2ZW4gdGhlCmVkaXRvciBpbnN0YW5jZSBhcyBhcmd1bWVudCwgb3IgdG8gc3RyaW5ncywgd2hpY2ggYXJlIG1hcHBlZCB0aHJvdWdoCmZ1bmN0aW9ucyB0aHJvdWdoIHRoZSA8Y29kZT5Db2RlTWlycm9yLmNvbW1hbmRzPC9jb2RlPiB0YWJsZSwgd2hpY2gKY29udGFpbnMgYWxsIHRoZSBidWlsdC1pbiBlZGl0aW5nIGNvbW1hbmRzLCBhbmQgY2FuIGJlIGluc3BlY3RlZCBhbmQKZXh0ZW5kZWQgYnkgZXh0ZXJuYWwgY29kZS48L3A+Cgo8cD5CeSBkZWZhdWx0LCB0aGUgPGNvZGU+SG9tZTwvY29kZT4ga2V5IGlzIGJvdW5kIHRvCnRoZSA8Y29kZT4iZ29MaW5lU3RhcnRTbWFydCI8L2NvZGU+IGNvbW1hbmQsIHdoaWNoIG1vdmVzIHRoZSBjdXJzb3IgdG8KdGhlIGZpcnN0IG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlciBvbiB0aGUgbGluZS4gWW91IGNhbiBzZXQgZG8gdGhpcyB0bwptYWtlIGl0IGFsd2F5cyBnbyB0byB0aGUgdmVyeSBzdGFydCBpbnN0ZWFkOjwvcD4KCjxwcmU+ICBleHRyYUtleXM6IHsiSG9tZSI6ICJnb0xpbmVTdGFydCJ9PC9wcmU+Cgo8cD5TaW1pbGFybHksIDxjb2RlPkVudGVyPC9jb2RlPiBpcyBib3VuZAp0byA8Y29kZT4ibmV3bGluZUFuZEluZGVudCI8L2NvZGU+IGJ5IGRlZmF1bHQuIFlvdSBjYW4gYmluZCBpdCB0bwpzb21ldGhpbmcgZWxzZSB0byBnZXQgZGlmZmVyZW50IGJlaGF2aW9yLiBUbyBkaXNhYmxlIHNwZWNpYWwgaGFuZGxpbmcKY29tcGxldGVseSBhbmQgb25seSBnZXQgYSBuZXdsaW5lIGNoYXJhY3RlciBpbnNlcnRlZCwgeW91IGNhbiBiaW5kIGl0CnRvIDxjb2RlPmZhbHNlPC9jb2RlPjo8L3A+Cgo8cHJlPiAgZXh0cmFLZXlzOiB7IkVudGVyIjogZmFsc2V9PC9wcmU+Cgo8cD5UaGUgc2FtZSB3b3JrcyBmb3IgPGNvZGU+VGFiPC9jb2RlPi4gSWYgeW91IGRvbid0IHdhbnQgQ29kZU1pcnJvcgp0byBoYW5kbGUgaXQsIGJpbmQgaXQgdG8gPGNvZGU+ZmFsc2U8L2NvZGU+LiBUaGUgZGVmYXVsdCBiZWhhdmlvdXIgaXMKdG8gaW5kZW50IHRoZSBjdXJyZW50IGxpbmUgbW9yZSAoPGNvZGU+ImluZGVudE1vcmUiPC9jb2RlPiBjb21tYW5kKSwKYW5kIGluZGVudCBpdCBsZXNzIHdoZW4gc2hpZnQgaXMgaGVsZCAoPGNvZGU+ImluZGVudExlc3MiPC9jb2RlPikuClRoZXJlIGFyZSBhbHNvIDxjb2RlPiJpbmRlbnRBdXRvIjwvY29kZT4gKHNtYXJ0IGluZGVudCkKYW5kIDxjb2RlPiJpbnNlcnRUYWIiPC9jb2RlPiBjb21tYW5kcyBwcm92aWRlZCBmb3IgYWx0ZXJuYXRlCmJlaGF2aW9ycy4gT3IgeW91IGNhbiB3cml0ZSB5b3VyIG93biBoYW5kbGVyIGZ1bmN0aW9uIHRvIGRvIHNvbWV0aGluZwpkaWZmZXJlbnQgYWx0b2dldGhlci48L3A+Cgo8aDI+VGFiczwvaDI+Cgo8cD5IYW5kbGluZyBvZiB0YWJzIGNoYW5nZWQgY29tcGxldGVseS4gVGhlIGRpc3BsYXkgd2lkdGggb2YgdGFicyBjYW4Kbm93IGJlIHNldCB3aXRoIHRoZSA8Y29kZT50YWJTaXplPC9jb2RlPiBvcHRpb24sIGFuZCB0YWJzIGNhbgpiZSA8YSBocmVmPSIuLi9kZW1vL3Zpc2libGV0YWJzLmh0bWwiPnN0eWxlZDwvYT4gYnkgc2V0dGluZyBDU1MgcnVsZXMKZm9yIHRoZSA8Y29kZT5jbS10YWI8L2NvZGU+IGNsYXNzLjwvcD4KCjxwPlRoZSBkZWZhdWx0IHdpZHRoIGZvciB0YWJzIGlzIG5vdyA0LCBhcyBvcHBvc2VkIHRvIHRoZSA4IHRoYXQgaXMKaGFyZC13aXJlZCBpbnRvIGJyb3dzZXJzLiBJZiB5b3UgYXJlIHJlbHlpbmcgb24gOC1zcGFjZSB0YWJzLCBtYWtlCnN1cmUgeW91IGV4cGxpY2l0bHkgc2V0IDxjb2RlPnRhYlNpemU6IDg8L2NvZGU+IGluIHlvdXIgb3B0aW9ucy48L3A+Cgo8L2Rpdj4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iaHR0cDovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2Nzcz9mYW1pbHk9RHJvaWQrU2Fuc3xEcm9pZCtTYW5zOmJvbGQiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9ImRvYy9kb2NzLmNzcyIvPgogICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiLz4KICAgIDxsaW5rIHJlbD0iYWx0ZXJuYXRlIiBocmVmPSJodHRwOi8vdHdpdHRlci5jb20vc3RhdHVzZXMvdXNlcl90aW1lbGluZS8yNDIyODMyODgucnNzIiB0eXBlPSJhcHBsaWNhdGlvbi9yc3MreG1sIi8+CiAgPC9oZWFkPgogIDxib2R5PgoKPGgxPjxzcGFuIGNsYXNzPSJsb2dvLWJyYWNlcyI+eyB9PC9zcGFuPiA8YSBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvIj5Db2RlTWlycm9yPC9hPjwvaDE+Cgo8cHJlIGNsYXNzPSJncmV5Ij4KPGltZyBzcmM9ImRvYy9iYWJvb24ucG5nIiBjbGFzcz0ibG9nbyIgYWx0PSJsb2dvIi8+LyogSW4tYnJvd3NlciBjb2RlIGVkaXRpbmcKICAgbWFkZSBiZWFyYWJsZSAqLwo8L3ByZT4KCjxkaXYgY2xhc3M9ImNsZWFyIj48ZGl2IGNsYXNzPSJsZWZ0IGJsayI+CgogIDxwIHN0eWxlPSJtYXJnaW4tdG9wOiAwIj5Db2RlTWlycm9yIGlzIGEgSmF2YVNjcmlwdCBsaWJyYXJ5IHRoYXQgY2FuCiAgYmUgdXNlZCB0byBjcmVhdGUgYSByZWxhdGl2ZWx5IHBsZWFzYW50IGVkaXRvciBpbnRlcmZhY2UgZm9yCiAgY29kZS1saWtlIGNvbnRlbnQgJiN4MjAxNTsgY29tcHV0ZXIgcHJvZ3JhbXMsIEhUTUwgbWFya3VwLCBhbmQKICBzaW1pbGFyLiBJZiBhIG1vZGUgaGFzIGJlZW4gd3JpdHRlbiBmb3IgdGhlIGxhbmd1YWdlIHlvdSBhcmUKICBlZGl0aW5nLCB0aGUgY29kZSB3aWxsIGJlIGNvbG91cmVkLCBhbmQgdGhlIGVkaXRvciB3aWxsIG9wdGlvbmFsbHkKICBoZWxwIHlvdSB3aXRoIGluZGVudGF0aW9uLjwvcD4KCiAgPHA+VGhpcyBpcyB0aGUgcHJvamVjdCBwYWdlIGZvciBDb2RlTWlycm9yIDIsIHRoZSBjdXJyZW50bHkgbW9yZQogIGFjdGl2ZWx5IGRldmVsb3BlZCwgYW5kIHJlY29tbWVuZGVkCiAgdmVyc2lvbi4gPGEgaHJlZj0iMS9pbmRleC5odG1sIj5Db2RlTWlycm9yIDE8L2E+IGlzIHN0aWxsIGF2YWlsYWJsZQogIGZyb20gaGVyZS48L3A+CgogIDxkaXYgY2xhc3M9ImNsZWFyIj48ZGl2IGNsYXNzPSJsZWZ0MSBibGsiPgoKICAgIDxoMiBzdHlsZT0ibWFyZ2luLXRvcDogMCI+U3VwcG9ydGVkIG1vZGVzOjwvaDI+CgogICAgPHVsPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9jbGlrZS9pbmRleC5odG1sIj5DLCBDKyssIEphdmEsIGFuZCBzaW1pbGFyPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJtb2RlL2Nsb2p1cmUvaW5kZXguaHRtbCI+Q2xvanVyZTwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9jb2ZmZWVzY3JpcHQvaW5kZXguaHRtbCI+Q29mZmVlU2NyaXB0PC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJtb2RlL2Nzcy9pbmRleC5odG1sIj5DU1M8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvZGlmZi9pbmRleC5odG1sIj5kaWZmPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJtb2RlL2dvL2luZGV4Lmh0bWwiPkdvPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJtb2RlL2dyb292eS9pbmRleC5odG1sIj5Hcm9vdnk8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvaGFza2VsbC9pbmRleC5odG1sIj5IYXNrZWxsPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJtb2RlL2h0bWxlbWJlZGRlZC9pbmRleC5odG1sIj5IVE1MIGVtYmVkZGVkIHNjcmlwdHM8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvaHRtbG1peGVkL2luZGV4Lmh0bWwiPkhUTUwgbWl4ZWQtbW9kZTwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9qYXZhc2NyaXB0L2luZGV4Lmh0bWwiPkphdmFTY3JpcHQ8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvamluamEyL2luZGV4Lmh0bWwiPkppbmphMjwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9sZXNzL2luZGV4Lmh0bWwiPkxFU1M8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvbHVhL2luZGV4Lmh0bWwiPkx1YTwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9tYXJrZG93bi9pbmRleC5odG1sIj5NYXJrZG93bjwvYT4gKDxhIGhyZWY9Im1vZGUvZ2ZtL2luZGV4Lmh0bWwiPkdpdGh1Yi1mbGF2b3VyPC9hPik8L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9teXNxbC9pbmRleC5odG1sIj5NeVNRTDwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9udHJpcGxlcy9pbmRleC5odG1sIj5OVHJpcGxlczwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9wYXNjYWwvaW5kZXguaHRtbCI+UGFzY2FsPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJtb2RlL3BlcmwvaW5kZXguaHRtbCI+UGVybDwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9waHAvaW5kZXguaHRtbCI+UEhQPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJtb2RlL3Bsc3FsL2luZGV4Lmh0bWwiPlBML1NRTDwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9weXRob24vaW5kZXguaHRtbCI+UHl0aG9uPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJtb2RlL3IvaW5kZXguaHRtbCI+UjwvYT48L2xpPgogICAgICA8bGk+UlBNIDxhIGhyZWY9Im1vZGUvcnBtL3NwZWMvaW5kZXguaHRtbCI+c3BlYzwvYT4gYW5kIDxhIGhyZWY9Im1vZGUvcnBtL2NoYW5nZXMvaW5kZXguaHRtbCI+Y2hhbmdlbG9nPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJtb2RlL3JzdC9pbmRleC5odG1sIj5yZVN0cnVjdHVyZWRUZXh0PC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJtb2RlL3J1YnkvaW5kZXguaHRtbCI+UnVieTwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9ydXN0L2luZGV4Lmh0bWwiPlJ1c3Q8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvc2NoZW1lL2luZGV4Lmh0bWwiPlNjaGVtZTwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9zbWFsbHRhbGsvaW5kZXguaHRtbCI+U21hbGx0YWxrPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJtb2RlL3NwYXJxbC9pbmRleC5odG1sIj5TUEFSUUw8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvc3RleC9pbmRleC5odG1sIj5zVGVYLCBMYVRlWDwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS90aWRkbHl3aWtpL2luZGV4Lmh0bWwiPlRpZGRseXdpa2k8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvdmVsb2NpdHkvaW5kZXguaHRtbCI+VmVsb2NpdHk8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvdmVyaWxvZy9pbmRleC5odG1sIj5WZXJpbG9nPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJtb2RlL3htbC9pbmRleC5odG1sIj5YTUwvSFRNTDwvYT4gKDxhIGhyZWY9Im1vZGUveG1scHVyZS9pbmRleC5odG1sIj5hbHRlcm5hdGl2ZSBYTUw8L2E+KTwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJtb2RlL3lhbWwvaW5kZXguaHRtbCI+WUFNTDwvYT48L2xpPgogICAgPC91bD4KCiAgPC9kaXY+PGRpdiBjbGFzcz0ibGVmdDIgYmxrIj4KCiAgICA8aDIgc3R5bGU9Im1hcmdpbi10b3A6IDAiPlVzYWdlIGRlbW9zOjwvaDI+CgogICAgPHVsPgogICAgICA8bGk+PGEgaHJlZj0iZGVtby9jb21wbGV0ZS5odG1sIj5BdXRvY29tcGxldGlvbjwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iZGVtby9tdXN0YWNoZS5odG1sIj5Nb2RlIG92ZXJsYXlzPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJkZW1vL3NlYXJjaC5odG1sIj5TZWFyY2gvcmVwbGFjZTwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iZGVtby9mb2xkaW5nLmh0bWwiPkNvZGUgZm9sZGluZzwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iZGVtby9wcmV2aWV3Lmh0bWwiPkhUTUwgZWRpdG9yIHdpdGggcHJldmlldzwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iZGVtby9yZXNpemUuaHRtbCI+QXV0by1yZXNpemluZyBlZGl0b3I8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9ImRlbW8vbWFya2VyLmh0bWwiPlNldHRpbmcgYnJlYWtwb2ludHM8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9ImRlbW8vYWN0aXZlbGluZS5odG1sIj5IaWdobGlnaHRpbmcgdGhlIGN1cnJlbnQgbGluZTwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iZGVtby90aGVtZS5odG1sIj5UaGVtaW5nPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJkZW1vL3J1bm1vZGUuaHRtbCI+U3RhbmQtYWxvbmUgaGlnaGxpZ2h0aW5nPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJkZW1vL2Z1bGxzY3JlZW4uaHRtbCI+RnVsbC1zY3JlZW4gZWRpdGluZzwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iZGVtby9jaGFuZ2Vtb2RlLmh0bWwiPk1vZGUgYXV0by1jaGFuZ2luZzwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iZGVtby92aXNpYmxldGFicy5odG1sIj5WaXNpYmxlIHRhYnM8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9ImRlbW8vZm9ybWF0dGluZy5odG1sIj5BdXRvZm9ybWF0dGluZyBvZiBjb2RlPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJkZW1vL2VtYWNzLmh0bWwiPkVtYWNzIGtleWJpbmRpbmdzPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJkZW1vL3ZpbS5odG1sIj5WaW0ga2V5YmluZGluZ3M8L2E+PC9saT4KICAgIDwvdWw+CgogICAgPGgyPlJlYWwtd29ybGQgdXNlczo8L2gyPgoKICAgIDx1bD4KICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9qc2Jpbi5jb20iPmpzYmluLmNvbTwvYT4gKEpTIHBsYXlncm91bmQpPC9saT4KICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9idXp6YXJkLnVwcy5lZHUvIj5TYWdlIGRlbW88L2E+IChtYXRoIHN5c3RlbSk8L2xpPgogICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5zb3VyY2VsYWlyLmNvbS8iPnNvdXJjZUxhaXI8L2E+IChvbmxpbmUgSURFKTwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vZWxvcXVlbnRqYXZhc2NyaXB0Lm5ldC9jaGFwdGVyMS5odG1sIj5FbG9xdWVudCBKYXZhU2NyaXB0PC9hPiAoYm9vayk8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cubWVyZ2VseS5jb20vIj5NZXJnZWx5PC9hPiAoaW50ZXJhY3RpdmUgZGlmZmluZyk8L2xpPgogICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3BhcGVyanMub3JnLyI+UGFwZXIuanM8L2E+IChncmFwaGljcyBzY3JpcHRpbmcpPC9saT4KICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cud2VzY2hlbWUub3JnLyI+V2VTY2hlbWU8L2E+IChsZWFybmluZyB0b29sKTwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vd2ViZ2xwbGF5Z3JvdW5kLm5ldC8iPldlYkdMIHBsYXlncm91bmQ8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9xbC5pby8iPnFsLmlvPC9hPiAoaHR0cCBBUEkgcXVlcnkgaGVscGVyKTwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vZWxtLWxhbmcub3JnL0V4YW1wbGVzLmVsbSI+RWxtIGxhbmd1YWdlIGV4YW1wbGVzPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vYmx1ZWdyaWZmb24ub3JnLyI+Qmx1ZUdyaWZmb248L2E+IChIVE1MIGVkaXRvcik8L2xpPgogICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5qc2hpbnQuY29tLyI+SlNIaW50PC9hPiAoSlMgbGludGVyKTwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJodHRwOi8va2wxcC5jb20vY210ZXN0LzEiPmtsMXA8L2E+IChwYXN0ZSBzZXJ2aWNlKTwvbGk+CiAgICAgPC91bD4KCiAgPC9kaXY+PC9kaXY+CgogIDxoMiBpZD0iY29kZSI+R2V0dGluZyB0aGUgY29kZTwvaDI+CgogIDxwPkFsbCBvZiBDb2RlTWlycm9yIGlzIHJlbGVhc2VkIHVuZGVyIGEgPGEKICBocmVmPSJMSUNFTlNFIj5NSVQtc3R5bGU8L2E+IGxpY2Vuc2UuIFRvIGdldCBpdCwgeW91IGNhbiBkb3dubG9hZAogIHRoZSA8YSBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvY29kZW1pcnJvci56aXAiPmxhdGVzdAogIHJlbGVhc2U8L2E+IG9yIHRoZSBjdXJyZW50IDxhCiAgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2NvZGVtaXJyb3IyLWxhdGVzdC56aXAiPmRldmVsb3BtZW50CiAgc25hcHNob3Q8L2E+IGFzIHppcCBmaWxlcy4gVG8gY3JlYXRlIGEgY3VzdG9tIG1pbmlmaWVkIHNjcmlwdCBmaWxlLAogIHlvdSBjYW4gdXNlIHRoZSA8YSBocmVmPSJkb2MvY29tcHJlc3MuaHRtbCI+Y29tcHJlc3Npb24gQVBJPC9hPi48L3A+CgogIDxwPldlIHVzZSA8YSBocmVmPSJodHRwOi8vZ2l0LXNjbS5jb20vIj5naXQ8L2E+IGZvciB2ZXJzaW9uIGNvbnRyb2wuCiAgVGhlIG1haW4gcmVwb3NpdG9yeSBjYW4gYmUgZmV0Y2hlZCBpbiB0aGlzIHdheTo8L3A+CgogIDxwcmUgY2xhc3M9ImNvZGUiPmdpdCBjbG9uZSBodHRwOi8vbWFyaWpuaGF2ZXJiZWtlLm5sL2dpdC9jb2RlbWlycm9yMjwvcHJlPgoKICA8cD5Db2RlTWlycm9yIGNhbiBhbHNvIGJlIGZvdW5kIG9uIEdpdEh1YiBhdCA8YQogIGhyZWY9Imh0dHA6Ly9naXRodWIuY29tL21hcmlqbmgvQ29kZU1pcnJvcjIiPm1hcmlqbmgvQ29kZU1pcnJvcjI8L2E+LgogIElmIHlvdSBwbGFuIHRvIGhhY2sgb24gdGhlIGNvZGUgYW5kIGNvbnRyaWJ1dGUgcGF0Y2hlcywgdGhlIGJlc3Qgd2F5CiAgdG8gZG8gaXQgaXMgdG8gY3JlYXRlIGEgR2l0SHViIGZvcmssIGFuZCBzZW5kIHB1bGwgcmVxdWVzdHMuPC9wPgoKICA8aDIgaWQ9ImRvY3VtZW50aW9uIj5Eb2N1bWVudGF0aW9uPC9oMj4KCiAgPHA+VGhlIDxhIGhyZWY9ImRvYy9tYW51YWwuaHRtbCI+bWFudWFsPC9hPiBpcyB5b3VyIGZpcnN0IHN0b3AgZm9yCiAgbGVhcm5pbmcgaG93IHRvIHVzZSB0aGlzIGxpYnJhcnkuIEl0IHN0YXJ0cyB3aXRoIGEgcXVpY2sgZXhwbGFuYXRpb24KICBvZiBob3cgdG8gdXNlIHRoZSBlZGl0b3IsIGFuZCB0aGVuIGRlc2NyaWJlcyB0aGUgQVBJIGluIGRldGFpbC48L3A+CgogIDxwPkZvciB0aG9zZSB3aG8gd2FudCB0byBsZWFybiBtb3JlIGFib3V0IHRoZSBjb2RlLCB0aGVyZSBpcwogIGFuIDxhIGhyZWY9ImRvYy9pbnRlcm5hbHMuaHRtbCI+b3ZlcnZpZXcgb2YgdGhlIGludGVybmFsczwvYT4gYXZhaWxhYmxlLgogIFRoZSA8YSBocmVmPSJodHRwOi8vZ2l0aHViLmNvbS9tYXJpam5oL0NvZGVNaXJyb3IyIj5zb3VyY2UgY29kZTwvYT4KICBpdHNlbGYgaXMsIGZvciB0aGUgbW9zdCBwYXJ0LCBhbHNvIHdlbGwgY29tbWVudGVkLjwvcD4KCiAgPGgyIGlkPSJzdXBwb3J0Ij5TdXBwb3J0IGFuZCBidWcgcmVwb3J0czwvaDI+CgogIDxwPlRoZXJlIGlzCiAgYSA8YSBocmVmPSJodHRwOi8vZ3JvdXBzLmdvb2dsZS5jb20vZ3JvdXAvY29kZW1pcnJvciI+R29vZ2xlCiAgZ3JvdXA8L2E+IChhIHNvcnQgb2YgbWFpbGluZyBsaXN0L25ld3Nncm91cCB0aGluZykgZm9yIGRpc2N1c3Npb24KICBhbmQgbmV3cyByZWxhdGVkIHRvIENvZGVNaXJyb3IuIFdoZW4gcmVwb3J0aW5nIGEgYnVnLAogIDxhIGhyZWY9ImRvYy9yZXBvcnRpbmcuaHRtbCI+cmVhZCB0aGlzIGZpcnN0PC9hPi4gSWYgeW91IGhhdmUKICBhIDxhIGhyZWY9Imh0dHA6Ly9naXRodWIuY29tIj5naXRodWI8L2E+IGFjY291bnQsCiAgc2ltcGx5IDxhIGhyZWY9Imh0dHA6Ly9naXRodWIuY29tL21hcmlqbmgvQ29kZU1pcnJvcjIvaXNzdWVzIj5vcGVuCiAgYW4gaXNzdWUgdGhlcmU8L2E+LiBPdGhlcndpc2UsIHBvc3Qgc29tZXRoaW5nIHRvCiAgdGhlIDxhIGhyZWY9Imh0dHA6Ly9ncm91cHMuZ29vZ2xlLmNvbS9ncm91cC9jb2RlbWlycm9yIj5ncm91cDwvYT4sCiAgb3IgZS1tYWlsIG1lIGRpcmVjdGx5OiA8YSBocmVmPSJtYWlsdG86bWFyaWpuaEBnbWFpbC5jb20iPk1hcmlqbgogIEhhdmVyYmVrZTwvYT4uPC9wPgoKICA8aDIgaWQ9InN1cHBvcnRlZCI+U3VwcG9ydGVkIGJyb3dzZXJzPC9oMj4KCiAgPHA+VGhlIGZvbGxvd2luZyBicm93c2VycyBhcmUgYWJsZSB0byBydW4gQ29kZU1pcnJvcjo8L3A+CgogIDx1bD4KICAgIDxsaT5GaXJlZm94IDIgb3IgaGlnaGVyPC9saT4KICAgIDxsaT5DaHJvbWUsIGFueSB2ZXJzaW9uPC9saT4KICAgIDxsaT5TYWZhcmkgMyBvciBoaWdoZXI8L2xpPgogICAgPGxpPkludGVybmV0IEV4cGxvcmVyIDYgb3IgaGlnaGVyPC9saT4KICAgIDxsaT5PcGVyYSA5IG9yIGhpZ2hlciAod2l0aCBzb21lIGtleS1oYW5kbGluZyBwcm9ibGVtcyBvbiBPUyBYKTwvbGk+CiAgPC91bD4KCiAgPHA+SSBhbSBub3QgYWN0aXZlbHkgdGVzdGluZyBhZ2FpbnN0IGV2ZXJ5IG5ldyBicm93c2VyIHJlbGVhc2UsIGFuZAogIHZlbmRvcnMgaGF2ZSBhIGhhYml0IG9mIGludHJvZHVjaW5nIGJ1Z3MgYWxsIHRoZSB0aW1lLCBzbyBJIGFtCiAgcmVseWluZyBvbiB0aGUgY29tbXVuaXR5IHRvIHRlbGwgbWUgd2hlbiBzb21ldGhpbmcgYnJlYWtzLgogIFNlZSA8YSBocmVmPSIjc3VwcG9ydCI+aGVyZTwvYT4gZm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0CiAgbWUuPC9wPgoKICA8aDIgaWQ9ImNvbW1lcmNpYWwiPkNvbW1lcmNpYWwgc3VwcG9ydDwvaDI+CgogIDxwPkNvZGVNaXJyb3IgaXMgZGV2ZWxvcGVkIGFuZCBtYWludGFpbmVkIGJ5IG1lLCBNYXJpam4gSGF2ZXJiZWtlLAogIGluIG15IG93biB0aW1lLiBJZiB5b3VyIGNvbXBhbnkgaXMgZ2V0dGluZyB2YWx1ZSBvdXQgb2YgQ29kZU1pcnJvciwKICBwbGVhc2UgY29uc2lkZXIgcHVyY2hhc2luZyBhIHN1cHBvcnQgY29udHJhY3QuPC9wPgoKICA8dWw+CiAgICA8bGk+WW91J2xsIGJlIGZ1bmRpbmcgZnVydGhlciB3b3JrIG9uIENvZGVNaXJyb3IuPC9saT4KICAgIDxsaT5Zb3UgZW5zdXJlIHRoYXQgeW91IGdldCBhIHF1aWNrIHJlc3BvbnNlIHdoZW4geW91IGhhdmUgYQogICAgcHJvYmxlbSwgZXZlbiB3aGVuIEkgYW0gb3RoZXJ3aXNlIGJ1c3kuPC9saT4KICA8L3VsPgoKICA8cD5Db2RlTWlycm9yIHN1cHBvcnQgY29udHJhY3RzIGV4aXN0IGluIHR3bwogIGZvcm1z4oCUPHN0cm9uZz5iYXNpYzwvc3Ryb25nPiBhdCDigqwxMDAgcGVyIG1vbnRoLAogIGFuZCA8c3Ryb25nPnByZW1pdW08L3N0cm9uZz4gYXQg4oKsNTAwIHBlcgogIG1vbnRoLiA8YSBocmVmPSJtYWlsdG86bWFyaWpuaEBnbWFpbC5jb20iPkNvbnRhY3QgbWU8L2E+IGZvciBmdXJ0aGVyCiAgaW5mb3JtYXRpb24uPC9wPgoKPC9kaXY+Cgo8ZGl2IGNsYXNzPSJyaWdodCBibGsiPgoKICA8YSBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvY29kZW1pcnJvci56aXAiIGNsYXNzPSJkb3dubG9hZCI+RG93bmxvYWQgdGhlIGxhdGVzdCByZWxlYXNlPC9hPgoKICA8aDI+U3VwcG9ydCBDb2RlTWlycm9yPC9oMj4KCiAgPHVsPgogICAgPGxpPkRvbmF0ZQogICAgKDxzcGFuIG9uY2xpY2s9ImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYXlwYWwnKS5zdWJtaXQoKTsiCiAgICBjbGFzcz0icXVhc2lsaW5rIj5QYXlwYWw8L3NwYW4+CiAgICBvciA8c3BhbiBvbmNsaWNrPSJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYmFua2luZm8nKS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsiCiAgICAgICAgICAgICBjbGFzcz0icXVhc2lsaW5rIj5iYW5rPC9zcGFuPik8L2xpPgogICAgPGxpPlB1cmNoYXNlIDxhIGhyZWY9IiNjb21tZXJjaWFsIj5jb21tZXJjaWFsIHN1cHBvcnQ8L2E+PC9saT4KICA8L3VsPgoKICA8cCBpZD0iYmFua2luZm8iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+CiAgICBCYW5rOiA8aT5SYWJvYmFuazwvaT48YnIvPgogICAgQ291bnRyeTogPGk+TmV0aGVybGFuZHM8L2k+PGJyLz4KICAgIFNXSUZUOiA8aT5SQUJPTkwyVTwvaT48YnIvPgogICAgQWNjb3VudDogPGk+MTQ3ODUwNzcwPC9pPjxici8+CiAgICBOYW1lOiA8aT5NYXJpam4gSGF2ZXJiZWtlPC9pPjxici8+CiAgICBJQkFOOiA8aT5OTDI2IFJBQk8gMDE0NyA4NTA3IDcwPC9pPgogIDwvcD4KCiAgPGgyPlJlbGVhc2VzOjwvaDI+CgogIDxwIGNsYXNzPSJyZWwiPjI3LTAxLTIwMTI6IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTIuMjEuemlwIj5WZXJzaW9uIDIuMjE8L2E+OjwvcD4KCiAgPHVsIGNsYXNzPSJyZWwtbm90ZSI+CiAgICA8bGk+QWRkZWQgPGEgaHJlZj0ibW9kZS9sZXNzL2luZGV4Lmh0bWwiPkxFU1M8L2E+LCA8YSBocmVmPSJtb2RlL215c3FsL2luZGV4Lmh0bWwiPk15U1FMPC9hPiwKICAgIDxhIGhyZWY9Im1vZGUvZ28vaW5kZXguaHRtbCI+R288L2E+LCBhbmQgPGEgaHJlZj0ibW9kZS92ZXJpbG9nL2luZGV4Lmh0bWwiPlZlcmlsb2c8L2E+IG1vZGVzLjwvbGk+CiAgICA8bGk+QWRkIDxhIGhyZWY9ImRvYy9tYW51YWwuaHRtbCNvcHRpb25fc21hcnRJbmRlbnQiPjxjb2RlPnNtYXJ0SW5kZW50PC9jb2RlPjwvYT4KICAgIG9wdGlvbi48L2xpPgogICAgPGxpPlN1cHBvcnQgYSBjdXJzb3IgaW4gPGEgaHJlZj0iZG9jL21hbnVhbC5odG1sI29wdGlvbl9yZWFkT25seSI+PGNvZGU+cmVhZE9ubHk8L2NvZGU+PC9hPi1tb2RlLjwvbGk+CiAgICA8bGk+U3VwcG9ydCBhc3NpZ25pbmcgbXVsdGlwbGUgc3R5bGVzIHRvIGEgdG9rZW4uPC9saT4KICAgIDxsaT5Vc2UgYSBuZXcgYXBwcm9hY2ggdG8gZHJhd2luZyB0aGUgc2VsZWN0aW9uLjwvbGk+CiAgICA8bGk+QWRkIDxhIGhyZWY9ImRvYy9tYW51YWwuaHRtbCNzY3JvbGxUbyI+PGNvZGU+c2Nyb2xsVG88L2NvZGU+PC9hPiBtZXRob2QuPC9saT4KICAgIDxsaT5BbGxvdyB1bmRvL3JlZG8gZXZlbnRzIHRvIHNwYW4gbm9uLWFkamFjZW50IGxpbmVzLjwvbGk+CiAgICA8bGk+TG90cyBhbmQgbG90cyBvZiBidWdmaXhlcy48L2xpPgogIDwvdWw+CgogIDxwIGNsYXNzPSJyZWwiPjIwLTEyLTIwMTE6IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTIuMi56aXAiPlZlcnNpb24gMi4yPC9hPjo8L3A+CgogIDx1bCBjbGFzcz0icmVsLW5vdGUiPgogICAgPGxpPlNsaWdodGx5IGluY29tcGF0aWJsZSBBUEkgY2hhbmdlcy4gUmVhZCA8YSBocmVmPSJkb2MvdXBncmFkZV92Mi4yLmh0bWwiPnRoaXM8L2E+LjwvbGk+CiAgICA8bGk+TmV3IGFwcHJvYWNoCiAgICB0byA8YSBocmVmPSJkb2MvbWFudWFsLmh0bWwjb3B0aW9uX2V4dHJhS2V5cyI+YmluZGluZzwvYT4ga2V5cywKICAgIHN1cHBvcnQgZm9yIDxhIGhyZWY9ImRvYy9tYW51YWwuaHRtbCNvcHRpb25fa2V5TWFwIj5jdXN0b20KICAgIGJpbmRpbmdzPC9hPi48L2xpPgogICAgPGxpPlN1cHBvcnQgZm9yIG92ZXJ3cml0ZSAoaW5zZXJ0KS48L2xpPgogICAgPGxpPjxhIGhyZWY9ImRvYy9tYW51YWwuaHRtbCNvcHRpb25fdGFiU2l6ZSI+Q3VzdG9tLXdpZHRoPC9hPgogICAgYW5kIDxhIGhyZWY9ImRlbW8vdmlzaWJsZXRhYnMuaHRtbCI+c3R5bGFibGU8L2E+IHRhYnMuPC9saT4KICAgIDxsaT5Nb3ZlZCBtb3JlIGNvZGUgaW50byA8YSBocmVmPSJkb2MvbWFudWFsLmh0bWwjYWRkb25zIj5hZGQtb24gc2NyaXB0czwvYT4uPC9saT4KICAgIDxsaT5TdXBwb3J0IGZvciBzYW5lIHZlcnRpY2FsIGN1cnNvciBtb3ZlbWVudCBpbiB3cmFwcGVkIGxpbmVzLjwvbGk+CiAgICA8bGk+TW9yZSByZWxpYWJsZSBoYW5kbGluZyBvZgogICAgZWRpdGluZyA8YSBocmVmPSJkb2MvbWFudWFsLmh0bWwjbWFya1RleHQiPm1hcmtlZCB0ZXh0PC9hPi48L2xpPgogICAgPGxpPkFkZCBtaW5pbWFsIDxhIGhyZWY9ImRlbW8vZW1hY3MuaHRtbCI+ZW1hY3M8L2E+CiAgICBhbmQgPGEgaHJlZj0iZGVtby92aW0uaHRtbCI+dmltPC9hPiBiaW5kaW5ncy48L2xpPgogICAgPGxpPlJlbmFtZSA8Y29kZT5jb29yZHNGcm9tSW5kZXg8L2NvZGU+CiAgICB0byA8YSBocmVmPSJkb2MvbWFudWFsLmh0bWwjcG9zRnJvbUluZGV4Ij48Y29kZT5wb3NGcm9tSW5kZXg8L2NvZGU+PC9hPiwKICAgIGFkZCA8YSBocmVmPSJkb2MvbWFudWFsLmh0bWwjaW5kZXhGcm9tUG9zIj48Y29kZT5pbmRleEZyb21Qb3M8L2NvZGU+PC9hPgogICAgbWV0aG9kLjwvbGk+CiAgPC91bD4KCiAgPHAgY2xhc3M9InJlbCI+MjEtMTEtMjAxMTogPGEgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2NvZGVtaXJyb3ItMi4xOC56aXAiPlZlcnNpb24gMi4xODwvYT46PC9wPgogIDxwIGNsYXNzPSJyZWwtbm90ZSI+Rml4ZXMgPGNvZGU+VGV4dE1hcmtlci5jbGVhcjwvY29kZT4sIHdoaWNoIGlzIGJyb2tlbiBpbiAyLjE3LjwvcD4KCiAgPHAgY2xhc3M9InJlbCI+MjEtMTEtMjAxMTogPGEgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2NvZGVtaXJyb3ItMi4xNy56aXAiPlZlcnNpb24gMi4xNzwvYT46PC9wPgogIDx1bCBjbGFzcz0icmVsLW5vdGUiPgogICAgPGxpPkFkZCBzdXBwb3J0IGZvciA8YSBocmVmPSJkb2MvbWFudWFsLmh0bWwjb3B0aW9uX2xpbmVXcmFwcGluZyI+bGluZQogICAgd3JhcHBpbmc8L2E+IGFuZCA8YSBocmVmPSJkb2MvbWFudWFsLmh0bWwjaGlkZUxpbmUiPmNvZGUKICAgIGZvbGRpbmc8L2E+LjwvbGk+CiAgICA8bGk+QWRkIDxhIGhyZWY9Im1vZGUvZ2ZtL2luZGV4Lmh0bWwiPkdpdGh1Yi1zdHlsZSBNYXJrZG93bjwvYT4gbW9kZS48L2xpPgogICAgPGxpPkFkZCA8YSBocmVmPSJ0aGVtZS9tb25va2FpLmNzcyI+TW9ub2thaTwvYT4KICAgIGFuZCA8YSBocmVmPSJ0aGVtZS9ydWJ5Ymx1ZS5jc3MiPlJ1YnlibHVlPC9hPiB0aGVtZXMuPC9saT4KICAgIDxsaT5BZGQgPGEgaHJlZj0iZG9jL21hbnVhbC5odG1sI3NldEJvb2ttYXJrIj48Y29kZT5zZXRCb29rbWFyazwvY29kZT48L2E+IG1ldGhvZC48L2xpPgogICAgPGxpPk1vdmUgc29tZSBvZiB0aGUgZGVtbyBjb2RlIGludG8gcmV1c2FibGUgY29tcG9uZW50cwogICAgdW5kZXIgPGEgaHJlZj0ibGliL3V0aWwvIj48Y29kZT5saWIvdXRpbDwvY29kZT48L2E+LjwvbGk+CiAgICA8bGk+TWFrZSBzY3JlZW4tY29vcmQtZmluZGluZyBjb2RlIGZhc3RlciBhbmQgbW9yZSByZWxpYWJsZS48L2xpPgogICAgPGxpPkZpeCBkcmFnLWFuZC1kcm9wIGluIEZpcmVmb3guPC9saT4KICAgIDxsaT5JbXByb3ZlIHN1cHBvcnQgZm9yIElNRS48L2xpPgogICAgPGxpPlNwZWVkIHVwIGNvbnRlbnQgcmVuZGVyaW5nLjwvbGk+CiAgICA8bGk+Rml4IGJyb3dzZXIncyBidWlsdC1pbiBzZWFyY2ggaW4gV2Via2l0LjwvbGk+CiAgICA8bGk+TWFrZSBkb3VibGUtIGFuZCB0cmlwbGUtY2xpY2sgd29yayBpbiBJRS48L2xpPgogICAgPGxpPlZhcmlvdXMgZml4ZXMgdG8gbW9kZXMuPC9saT4KICA8L3VsPgoKICA8cCBjbGFzcz0icmVsIj4yNy0xMC0yMDExOiA8YSBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvY29kZW1pcnJvci0yLjE2LnppcCI+VmVyc2lvbiAyLjE2PC9hPjo8L3A+CiAgPHVsIGNsYXNzPSJyZWwtbm90ZSI+CiAgICA8bGk+QWRkIDxhIGhyZWY9Im1vZGUvcGVybC9pbmRleC5odG1sIj5QZXJsPC9hPiwgPGEgaHJlZj0ibW9kZS9ydXN0L2luZGV4Lmh0bWwiPlJ1c3Q8L2E+LCA8YSBocmVmPSJtb2RlL3RpZGRseXdpa2kvaW5kZXguaHRtbCI+VGlkZGx5V2lraTwvYT4sIGFuZCA8YSBocmVmPSJtb2RlL2dyb292eS9pbmRleC5odG1sIj5Hcm9vdnk8L2E+IG1vZGVzLjwvbGk+CiAgICA8bGk+RHJhZ2dpbmcgdGV4dCBpbnNpZGUgdGhlIGVkaXRvciBub3cgbW92ZXMsIHJhdGhlciB0aGFuIGNvcGllcy48L2xpPgogICAgPGxpPkFkZCBhIDxhIGhyZWY9ImRvYy9tYW51YWwuaHRtbCNjb29yZHNGcm9tSW5kZXgiPjxjb2RlPmNvb3Jkc0Zyb21JbmRleDwvY29kZT48L2E+IG1ldGhvZC48L2xpPgogICAgPGxpPjxzdHJvbmc+QVBJIGNoYW5nZTwvc3Ryb25nPjogPGNvZGU+c2V0VmFsdWU8L2NvZGU+IG5vdyBubyBsb25nZXIgY2xlYXJzIGhpc3RvcnkuIFVzZSA8YSBocmVmPSJkb2MvbWFudWFsLmh0bWwjY2xlYXJIaXN0b3J5Ij48Y29kZT5jbGVhckhpc3Rvcnk8L2NvZGU+PC9hPiBmb3IgdGhhdC48L2xpPgogICAgPGxpPjxzdHJvbmc+QVBJIGNoYW5nZTwvc3Ryb25nPjogPGEgaHJlZj0iZG9jL21hbnVhbC5odG1sI21hcmtUZXh0Ij48Y29kZT5tYXJrVGV4dDwvY29kZT48L2E+IG5vdwogICAgcmV0dXJucyBhbiBvYmplY3Qgd2l0aCA8Y29kZT5jbGVhcjwvY29kZT4gYW5kIDxjb2RlPmZpbmQ8L2NvZGU+CiAgICBtZXRob2RzLiBNYXJrZWQgdGV4dCBpcyBub3cgbW9yZSByb2J1c3Qgd2hlbiBlZGl0ZWQuPC9saT4KICAgIDxsaT5GaXggZWRpdGluZyBjb2RlIHdpdGggdGFicyBpbiBJbnRlcm5ldCBFeHBsb3Jlci48L2xpPgogIDwvdWw+CgogIDxwIGNsYXNzPSJyZWwiPjI2LTA5LTIwMTE6IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTIuMTUuemlwIj5WZXJzaW9uIDIuMTU8L2E+OjwvcD4KICA8cCBjbGFzcz0icmVsLW5vdGUiPkZpeCBidWcgdGhhdCBzbnVjayBpbnRvIDIuMTQ6IENsaWNraW5nIHRoZQogIGNoYXJhY3RlciB0aGF0IGN1cnJlbnRseSBoYXMgdGhlIGN1cnNvciBkaWRuJ3QgcmUtZm9jdXMgdGhlCiAgZWRpdG9yLjwvcD4KCiAgPHAgY2xhc3M9InJlbCI+MjYtMDktMjAxMTogPGEgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2NvZGVtaXJyb3ItMi4xNC56aXAiPlZlcnNpb24gMi4xNDwvYT46PC9wPgogIDx1bCBjbGFzcz0icmVsLW5vdGUiPgogICAgPGxpPkFkZCA8YSBocmVmPSJtb2RlL2Nsb2p1cmUvaW5kZXguaHRtbCI+Q2xvanVyZTwvYT4sIDxhIGhyZWY9Im1vZGUvcGFzY2FsL2luZGV4Lmh0bWwiPlBhc2NhbDwvYT4sIDxhIGhyZWY9Im1vZGUvbnRyaXBsZXMvaW5kZXguaHRtbCI+TlRyaXBsZXM8L2E+LCA8YSBocmVmPSJtb2RlL2ppbmphMi9pbmRleC5odG1sIj5KaW5qYTI8L2E+LCBhbmQgPGEgaHJlZj0ibW9kZS9tYXJrZG93bi9pbmRleC5odG1sIj5NYXJrZG93bjwvYT4gbW9kZXMuPC9saT4KICAgIDxsaT5BZGQgPGEgaHJlZj0idGhlbWUvY29iYWx0LmNzcyI+Q29iYWx0PC9hPiBhbmQgPGEgaHJlZj0idGhlbWUvZWNsaXBzZS5jc3MiPkVjbGlwc2U8L2E+IHRoZW1lcy48L2xpPgogICAgPGxpPkFkZCBhIDxhIGhyZWY9ImRvYy9tYW51YWwuaHRtbCNvcHRpb25fZml4ZWRHdXR0ZXIiPjxjb2RlPmZpeGVkR3V0dGVyPC9jb2RlPjwvYT4gb3B0aW9uLjwvbGk+CiAgICA8bGk+Rml4IGJ1ZyB3aXRoIDxjb2RlPnNldFZhbHVlPC9jb2RlPiBicmVha2luZyBjdXJzb3IgbW92ZW1lbnQuPC9saT4KICAgIDxsaT5NYWtlIGd1dHRlciB1cGRhdGVzIG11Y2ggbW9yZSBlZmZpY2llbnQuPC9saT4KICAgIDxsaT5BbGxvdyBkcmFnZ2luZyBvZiB0ZXh0IG91dCBvZiB0aGUgZWRpdG9yIChvbiBtb2Rlcm4gYnJvd3NlcnMpLjwvbGk+CiAgPC91bD4KCiAgPHAgY2xhc3M9InJlbCI+MjMtMDgtMjAxMTogPGEgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2NvZGVtaXJyb3ItMi4xMy56aXAiPlZlcnNpb24gMi4xMzwvYT46PC9wPgogIDx1bCBjbGFzcz0icmVsLW5vdGUiPgogICAgPGxpPkFkZCA8YSBocmVmPSJtb2RlL3J1YnkvaW5kZXguaHRtbCI+UnVieTwvYT4sIDxhIGhyZWY9Im1vZGUvci9pbmRleC5odG1sIj5SPC9hPiwgPGEgaHJlZj0ibW9kZS9jb2ZmZWVzY3JpcHQvaW5kZXguaHRtbCI+Q29mZmVlU2NyaXB0PC9hPiwgYW5kIDxhIGhyZWY9Im1vZGUvdmVsb2NpdHkvaW5kZXguaHRtbCI+VmVsb2NpdHk8L2E+IG1vZGVzLjwvbGk+CiAgICA8bGk+QWRkIDxhIGhyZWY9ImRvYy9tYW51YWwuaHRtbCNnZXRHdXR0ZXJFbGVtZW50Ij48Y29kZT5nZXRHdXR0ZXJFbGVtZW50PC9jb2RlPjwvYT4gdG8gQVBJLjwvbGk+CiAgICA8bGk+U2V2ZXJhbCBmaXhlcyB0byBzY3JvbGxpbmcgYW5kIHBvc2l0aW9uaW5nLjwvbGk+CiAgICA8bGk+QWRkIDxhIGhyZWY9ImRvYy9tYW51YWwuaHRtbCNvcHRpb25fc21hcnRIb21lIj48Y29kZT5zbWFydEhvbWU8L2NvZGU+PC9hPiBvcHRpb24uPC9saT4KICAgIDxsaT5BZGQgYW4gZXhwZXJpbWVudGFsIDxhIGhyZWY9Im1vZGUveG1scHVyZS9pbmRleC5odG1sIj5wdXJlIFhNTDwvYT4gbW9kZS48L2xpPgogIDwvdWw+CgogIDxwIGNsYXNzPSJyZWwiPjI1LTA3LTIwMTE6IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTIuMTIuemlwIj5WZXJzaW9uIDIuMTI8L2E+OjwvcD4KICA8dWwgY2xhc3M9InJlbC1ub3RlIj4KICAgIDxsaT5BZGQgYSA8YSBocmVmPSJtb2RlL3NwYXJxbC9pbmRleC5odG1sIj5TUEFSUUw8L2E+IG1vZGUuPC9saT4KICAgIDxsaT5GaXggYnVnIHdpdGggY3Vyc29yIGp1bXBpbmcgYXJvdW5kIGluIGFuIHVuZm9jdXNlZCBlZGl0b3IgaW4gSUUuPC9saT4KICAgIDxsaT5BbGxvdyBrZXkgYW5kIG1vdXNlIGV2ZW50cyB0byBidWJibGUgb3V0IG9mIHRoZSBlZGl0b3IuIElnbm9yZSB3aWRnZXQgY2xpY2tzLjwvbGk+CiAgICA8bGk+U29sdmUgY3Vyc29yIGZsYWtpbmVzcyBhZnRlciB1bmRvL3JlZG8uPC9saT4KICAgIDxsaT5GaXggYmxvY2stcmVpbmRlbnQgaWdub3JpbmcgdGhlIGxhc3QgZmV3IGxpbmVzLjwvbGk+CiAgICA8bGk+Rml4IHBhcnNpbmcgb2YgbXVsdGktbGluZSBhdHRycyBpbiBYTUwgbW9kZS48L2xpPgogICAgPGxpPlVzZSA8Y29kZT5pbm5lckhUTUw8L2NvZGU+IGZvciBIVE1MLWVzY2FwaW5nLjwvbGk+CiAgICA8bGk+U29tZSBmaXhlcyB0byBpbmRlbnRhdGlvbiBpbiBDLWxpa2UgbW9kZS48L2xpPgogICAgPGxpPlNocmluayBob3JpeiBzY3JvbGxiYXJzIHdoZW4gbG9uZyBsaW5lcyByZW1vdmVkLjwvbGk+CiAgICA8bGk+Rml4IHdpZHRoIGZlZWRiYWNrIGxvb3AgYnVnIHRoYXQgY2F1c2VkIHRoZSB3aWR0aCBvZiBhbiBpbm5lciBESVYgdG8gc2hyaW5rLjwvbGk+CiAgPC91bD4KCiAgPHAgY2xhc3M9InJlbCI+MDQtMDctMjAxMTogPGEgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2NvZGVtaXJyb3ItMi4xMS56aXAiPlZlcnNpb24gMi4xMTwvYT46PC9wPgogIDx1bCBjbGFzcz0icmVsLW5vdGUiPgogICAgPGxpPkFkZCBhIDxhIGhyZWY9Im1vZGUvc2NoZW1lL2luZGV4Lmh0bWwiPlNjaGVtZSBtb2RlPC9hPi48L2xpPgogICAgPGxpPkFkZCBhIDxjb2RlPnJlcGxhY2U8L2NvZGU+IG1ldGhvZCB0byBzZWFyY2ggY3Vyc29ycywgZm9yIGN1cnNvci1wcmVzZXJ2aW5nIHJlcGxhY2VtZW50cy48L2xpPgogICAgPGxpPk1ha2UgdGhlIDxhIGhyZWY9Im1vZGUvY2xpa2UvaW5kZXguaHRtbCI+Qy1saWtlIG1vZGU8L2E+IG1vZGUgbW9yZSBjdXN0b21pemVhYmxlLjwvbGk+CiAgICA8bGk+VXBkYXRlIFhNTCBtb2RlIHRvIHNwb3QgbWlzbWF0Y2hlZCB0YWdzLjwvbGk+CiAgICA8bGk+QWRkIDxjb2RlPmdldFN0YXRlQWZ0ZXI8L2NvZGU+IEFQSSBhbmQgPGNvZGU+Y29tcGFyZVN0YXRlPC9jb2RlPiBtb2RlIEFQSSBtZXRob2RzIGZvciBmaW5lci1ncmFpbmVkIG1vZGUgbWFnaWMuPC9saT4KICAgIDxsaT5BZGQgYSA8Y29kZT5nZXRTY3JvbGxlckVsZW1lbnQ8L2NvZGU+IEFQSSBtZXRob2QgdG8gbWFuaXB1bGF0ZSB0aGUgc2Nyb2xsaW5nIERJVi48L2xpPgogICAgPGxpPkZpeCBkcmFnLWFuZC1kcm9wIGZvciBGaXJlZm94LjwvbGk+CiAgICA8bGk+QWRkIGEgQyMgY29uZmlndXJhdGlvbiBmb3IgdGhlIDxhIGhyZWY9Im1vZGUvY2xpa2UvaW5kZXguaHRtbCI+Qy1saWtlIG1vZGU8L2E+LjwvbGk+CiAgICA8bGk+QWRkIDxhIGhyZWY9ImRlbW8vZnVsbHNjcmVlbi5odG1sIj5mdWxsLXNjcmVlbiBlZGl0aW5nPC9hPiBhbmQgPGEgaHJlZj0iZGVtby9jaGFuZ2Vtb2RlLmh0bWwiPm1vZGUtY2hhbmdpbmc8L2E+IGRlbW9zLjwvbGk+CiAgPC91bD4KCiAgPHA+PGEgaHJlZj0iZG9jL29sZHJlbGVhc2UuaHRtbCI+T2xkZXIgcmVsZWFzZXMuLi48L2E+PC9wPgoKPC9kaXY+PC9kaXY+Cgo8ZGl2IHN0eWxlPSJoZWlnaHQ6IDJlbSI+Jm5ic3A7PC9kaXY+CgogIDxmb3JtIGFjdGlvbj0iaHR0cHM6Ly93d3cucGF5cGFsLmNvbS9jZ2ktYmluL3dlYnNjciIgbWV0aG9kPSJwb3N0IiBpZD0icGF5cGFsIj4KICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImNtZCIgdmFsdWU9Il9zLXhjbGljayIvPgogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iaG9zdGVkX2J1dHRvbl9pZCIgdmFsdWU9IjNGVkhTNUZHVVk3Q0MiLz4KICA8L2Zvcm0+CgogIDwvYm9keT4KPC9odG1sPgoK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/keymap/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/keymap/emacs.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gVE9ETyBudW1iZXIgcHJlZml4ZXMKKGZ1bmN0aW9uKCkgewogIC8vIFJlYWxseSBwcmltaXRpdmUga2lsbC1yaW5nIGltcGxlbWVudGF0aW9uLgogIHZhciBraWxsUmluZyA9IFtdOwogIGZ1bmN0aW9uIGFkZFRvUmluZyhzdHIpIHsKICAgIGtpbGxSaW5nLnB1c2goc3RyKTsKICAgIGlmIChraWxsUmluZy5sZW5ndGggPiA1MCkga2lsbFJpbmcuc2hpZnQoKTsKICB9CiAgZnVuY3Rpb24gZ2V0RnJvbVJpbmcoKSB7IHJldHVybiBraWxsUmluZ1traWxsUmluZy5sZW5ndGggLSAxXSB8fCAiIjsgfQogIGZ1bmN0aW9uIHBvcEZyb21SaW5nKCkgeyBpZiAoa2lsbFJpbmcubGVuZ3RoID4gMSkga2lsbFJpbmcucG9wKCk7IHJldHVybiBnZXRGcm9tUmluZygpOyB9CgogIENvZGVNaXJyb3Iua2V5TWFwLmVtYWNzID0gewogICAgIkN0cmwtWCI6IGZ1bmN0aW9uKGNtKSB7Y20uc2V0T3B0aW9uKCJrZXlNYXAiLCAiZW1hY3MtQ3RybC1YIik7fSwKICAgICJDdHJsLVciOiBmdW5jdGlvbihjbSkge2FkZFRvUmluZyhjbS5nZXRTZWxlY3Rpb24oKSk7IGNtLnJlcGxhY2VTZWxlY3Rpb24oIiIpO30sCiAgICAiQ3RybC1BbHQtVyI6IGZ1bmN0aW9uKGNtKSB7YWRkVG9SaW5nKGNtLmdldFNlbGVjdGlvbigpKTsgY20ucmVwbGFjZVNlbGVjdGlvbigiIik7fSwKICAgICJBbHQtVyI6IGZ1bmN0aW9uKGNtKSB7YWRkVG9SaW5nKGNtLmdldFNlbGVjdGlvbigpKTt9LAogICAgIkN0cmwtWSI6IGZ1bmN0aW9uKGNtKSB7Y20ucmVwbGFjZVNlbGVjdGlvbihnZXRGcm9tUmluZygpKTt9LAogICAgIkFsdC1ZIjogZnVuY3Rpb24oY20pIHtjbS5yZXBsYWNlU2VsZWN0aW9uKHBvcEZyb21SaW5nKCkpO30sCiAgICAiQ3RybC0vIjogInVuZG8iLCAiU2hpZnQtQ3RybC0tIjogInVuZG8iLCAiU2hpZnQtQWx0LSwiOiAiZ29Eb2NTdGFydCIsICJTaGlmdC1BbHQtLiI6ICJnb0RvY0VuZCIsCiAgICAiQ3RybC1TIjogImZpbmROZXh0IiwgIkN0cmwtUiI6ICJmaW5kUHJldiIsICJDdHJsLUciOiAiY2xlYXJTZWFyY2giLCAiU2hpZnQtQWx0LTUiOiAicmVwbGFjZSIsCiAgICAiQ3RybC1aIjogInVuZG8iLCAiQ21kLVoiOiAidW5kbyIsCiAgICBmYWxsdGhyb3VnaDogWyJiYXNpYyIsICJlbWFjc3kiXQogIH07CgogIENvZGVNaXJyb3Iua2V5TWFwWyJlbWFjcy1DdHJsLVgiXSA9IHsKICAgICJDdHJsLVMiOiAic2F2ZSIsICJDdHJsLVciOiAic2F2ZSIsICJTIjogInNhdmVBbGwiLCAiRiI6ICJvcGVuIiwgIlUiOiAidW5kbyIsICJLIjogImNsb3NlIiwKICAgIGF1dG86ICJlbWFjcyIsIGNhdGNoYWxsOiBmdW5jdGlvbihjbSkgey8qaWdub3JlKi99CiAgfTsKfSkoKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/keymap/vim.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KGZ1bmN0aW9uKCkgewogIHZhciBjb3VudCA9ICIiOwogIHZhciBzZGlyID0gImYiOwogIHZhciBidWYgPSAiIjsKICB2YXIgeWFuayA9IDA7CiAgdmFyIG1hcmsgPSBbXTsKICBmdW5jdGlvbiBlbXB0eUJ1ZmZlcigpIHsgYnVmID0gIiI7IH0KICBmdW5jdGlvbiBwdXNoSW5CdWZmZXIoc3RyKSB7IGJ1ZiArPSBzdHI7IH07CiAgZnVuY3Rpb24gcHVzaENvdW50RGlnaXQoZGlnaXQpIHsgcmV0dXJuIGZ1bmN0aW9uKGNtKSB7Y291bnQgKz0gZGlnaXQ7fSB9CiAgZnVuY3Rpb24gcG9wQ291bnQoKSB7IHZhciBpID0gcGFyc2VJbnQoY291bnQpOyBjb3VudCA9ICIiOyByZXR1cm4gaSB8fCAxOyB9CiAgZnVuY3Rpb24gY291bnRUaW1lcyhmdW5jKSB7CiAgICBpZiAodHlwZW9mIGZ1bmMgPT0gInN0cmluZyIpIGZ1bmMgPSBDb2RlTWlycm9yLmNvbW1hbmRzW2Z1bmNdOwogICAgcmV0dXJuIGZ1bmN0aW9uKGNtKSB7IGZvciAodmFyIGkgPSAwLCBjID0gcG9wQ291bnQoKTsgaSA8IGM7ICsraSkgZnVuYyhjbSk7IH0KICB9CgogIGZ1bmN0aW9uIGl0ZXJPYmoobywgZikgewogICAgZm9yICh2YXIgcHJvcCBpbiBvKSBpZiAoby5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgZihwcm9wLCBvW3Byb3BdKTsKICB9CgogIHZhciB3b3JkID0gWy9cdy8sIC9bXlx3XHNdL10sIGJpZ1dvcmQgPSBbL1xTL107CiAgZnVuY3Rpb24gZmluZFdvcmQobGluZSwgcG9zLCBkaXIsIHJlZ2V4cHMpIHsKICAgIHZhciBzdG9wID0gMCwgbmV4dCA9IC0xOwogICAgaWYgKGRpciA+IDApIHsgc3RvcCA9IGxpbmUubGVuZ3RoOyBuZXh0ID0gMDsgfQogICAgdmFyIHN0YXJ0ID0gc3RvcCwgZW5kID0gc3RvcDsKICAgIC8vIEZpbmQgYm91bmRzIG9mIG5leHQgb25lLgogICAgb3V0ZXI6IGZvciAoOyBwb3MgIT0gc3RvcDsgcG9zICs9IGRpcikgewogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlZ2V4cHMubGVuZ3RoOyArK2kpIHsKICAgICAgICBpZiAocmVnZXhwc1tpXS50ZXN0KGxpbmUuY2hhckF0KHBvcyArIG5leHQpKSkgewogICAgICAgICAgc3RhcnQgPSBwb3M7CiAgICAgICAgICBmb3IgKDsgcG9zICE9IHN0b3A7IHBvcyArPSBkaXIpIHsKICAgICAgICAgICAgaWYgKCFyZWdleHBzW2ldLnRlc3QobGluZS5jaGFyQXQocG9zICsgbmV4dCkpKSBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGVuZCA9IHBvczsKICAgICAgICAgIGJyZWFrIG91dGVyOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHtmcm9tOiBNYXRoLm1pbihzdGFydCwgZW5kKSwgdG86IE1hdGgubWF4KHN0YXJ0LCBlbmQpfTsKICB9CiAgZnVuY3Rpb24gbW92ZVRvV29yZChjbSwgcmVnZXhwcywgZGlyLCB3aGVyZSkgewogICAgdmFyIGN1ciA9IGNtLmdldEN1cnNvcigpLCBjaCA9IGN1ci5jaCwgbGluZSA9IGNtLmdldExpbmUoY3VyLmxpbmUpLCB3b3JkOwogICAgd2hpbGUgKHRydWUpIHsKICAgICAgd29yZCA9IGZpbmRXb3JkKGxpbmUsIGNoLCBkaXIsIHJlZ2V4cHMpOwogICAgICBjaCA9IHdvcmRbd2hlcmUgPT0gImVuZCIgPyAidG8iIDogImZyb20iXTsKICAgICAgaWYgKGNoID09IGN1ci5jaCAmJiB3b3JkLmZyb20gIT0gd29yZC50bykgY2ggPSB3b3JkW2RpciA8IDAgPyAiZnJvbSIgOiAidG8iXTsKICAgICAgZWxzZSBicmVhazsKICAgIH0KICAgIGNtLnNldEN1cnNvcihjdXIubGluZSwgd29yZFt3aGVyZSA9PSAiZW5kIiA/ICJ0byIgOiAiZnJvbSJdLCB0cnVlKTsKICB9CiAgZnVuY3Rpb24gam9pbkxpbmVOZXh0KGNtKSB7CiAgICB2YXIgY3VyID0gY20uZ2V0Q3Vyc29yKCksIGNoID0gY3VyLmNoLCBsaW5lID0gY20uZ2V0TGluZShjdXIubGluZSk7CiAgICBDb2RlTWlycm9yLmNvbW1hbmRzLmdvTGluZUVuZChjbSk7IAogICAgaWYgKGN1ci5saW5lICE9IGNtLmxpbmVDb3VudCgpKSB7CiAgICAgIENvZGVNaXJyb3IuY29tbWFuZHMuZ29MaW5lRW5kKGNtKTsKICAgICAgY20ucmVwbGFjZVNlbGVjdGlvbigiICIsICJlbmQiKTsKICAgICAgQ29kZU1pcnJvci5jb21tYW5kcy5kZWxDaGFyUmlnaHQoY20pOwogICAgfSAKICB9CiAgZnVuY3Rpb24gZWRpdEN1cnNvcihtb2RlKSB7CiAgICBpZiAobW9kZSA9PSAidmltLWluc2VydCIpIHsgIAogICAgICAvLyBwdXQgaW4geW91ciBjdXJzb3IgY3NzIGNoYW5naW5nIGNvZGUKICAgIH0gZWxzZSBpZiAobW9kZSA9PSAidmltIikgewogICAgICAvLyBwdXQgaW4geW91ciBjdXJzb3IgY3NzIGNoYW5naW5nIGNvZGUKICAgIH0KICB9CiAgZnVuY3Rpb24gZGVsVGlsbE1hcmsoY20sIGNIYXIpIHsgCiAgICB2YXIgaSA9IG1hcmtbY0hhcl0sIGwgPSBjbS5nZXRDdXJzb3IoKS5saW5lLCBzdGFydCA9IGkgPiBsID8gbCA6IGksIGVuZCA9IGkgPiBsID8gaSA6IGw7CiAgICBjbS5zZXRDdXJzb3Ioc3RhcnQpOwogICAgZm9yICh2YXIgYyA9IHN0YXJ0OyBjIDw9IGVuZDsgYysrKSB7CiAgICAgIHB1c2hJbkJ1ZmZlcigiXG4iK2NtLmdldExpbmUoc3RhcnQpKTsgCiAgICAgIGNtLnJlbW92ZUxpbmUoc3RhcnQpOwogICAgfQogIH0KICBmdW5jdGlvbiB5YW5rVGlsbE1hcmsoY20sIGNIYXIpIHsgCiAgICB2YXIgaSA9IG1hcmtbY0hhcl0sIGwgPSBjbS5nZXRDdXJzb3IoKS5saW5lLCBzdGFydCA9IGkgPiBsID8gbCA6IGksIGVuZCA9IGkgPiBsID8gaSA6IGw7CiAgICBmb3IgKHZhciBjID0gc3RhcnQ7IGMgPD0gZW5kOyBjKyspIHsKICAgICAgcHVzaEluQnVmZmVyKCJcbiIrY20uZ2V0TGluZShjKSk7CiAgICB9CiAgICBjbS5zZXRDdXJzb3Ioc3RhcnQpOwogIH0KCiAgdmFyIG1hcCA9IENvZGVNaXJyb3Iua2V5TWFwLnZpbSA9IHsKICAgICIwIjogZnVuY3Rpb24oY20pIHtjb3VudC5sZW5ndGggPiAwID8gcHVzaENvdW50RGlnaXQoIjAiKShjbSkgOiBDb2RlTWlycm9yLmNvbW1hbmRzLmdvTGluZVN0YXJ0KGNtKTt9LAogICAgIkEiOiBmdW5jdGlvbihjbSkge3BvcENvdW50KCk7IGNtLnNldEN1cnNvcihjbS5nZXRDdXJzb3IoKS5saW5lLCBjbS5nZXRDdXJzb3IoKS5jaCsxLCB0cnVlKTsgY20uc2V0T3B0aW9uKCJrZXlNYXAiLCAidmltLWluc2VydCIpOyBlZGl0Q3Vyc29yKCJ2aW0taW5zZXJ0Iik7fSwKICAgICJTaGlmdC1BIjogZnVuY3Rpb24oY20pIHtwb3BDb3VudCgpOyBDb2RlTWlycm9yLmNvbW1hbmRzLmdvTGluZUVuZChjbSk7IGNtLnNldE9wdGlvbigia2V5TWFwIiwgInZpbS1pbnNlcnQiKTsgZWRpdEN1cnNvcigidmltLWluc2VydCIpO30sCiAgICAiSSI6IGZ1bmN0aW9uKGNtKSB7cG9wQ291bnQoKTsgY20uc2V0T3B0aW9uKCJrZXlNYXAiLCAidmltLWluc2VydCIpOyBlZGl0Q3Vyc29yKCJ2aW0taW5zZXJ0Iik7fSwKICAgICJTaGlmdC1JIjogZnVuY3Rpb24oY20pIHtwb3BDb3VudCgpOyBDb2RlTWlycm9yLmNvbW1hbmRzLmdvTGluZVN0YXJ0U21hcnQoY20pOyBjbS5zZXRPcHRpb24oImtleU1hcCIsICJ2aW0taW5zZXJ0Iik7IGVkaXRDdXJzb3IoInZpbS1pbnNlcnQiKTt9LAogICAgIk8iOiBmdW5jdGlvbihjbSkge3BvcENvdW50KCk7IENvZGVNaXJyb3IuY29tbWFuZHMuZ29MaW5lRW5kKGNtKTsgY20ucmVwbGFjZVNlbGVjdGlvbigiXG4iLCAiZW5kIik7IGNtLnNldE9wdGlvbigia2V5TWFwIiwgInZpbS1pbnNlcnQiKTsgZWRpdEN1cnNvcigidmltLWluc2VydCIpO30sCiAgICAiU2hpZnQtTyI6IGZ1bmN0aW9uKGNtKSB7cG9wQ291bnQoKTsgQ29kZU1pcnJvci5jb21tYW5kcy5nb0xpbmVTdGFydChjbSk7IGNtLnJlcGxhY2VTZWxlY3Rpb24oIlxuIiwgInN0YXJ0Iik7IGNtLnNldE9wdGlvbigia2V5TWFwIiwgInZpbS1pbnNlcnQiKTsgZWRpdEN1cnNvcigidmltLWluc2VydCIpO30sCiAgICAiRyI6IGZ1bmN0aW9uKGNtKSB7Y20uc2V0T3B0aW9uKCJrZXlNYXAiLCAidmltLXByZWZpeC1nIik7fSwKICAgICJEIjogZnVuY3Rpb24oY20pIHtjbS5zZXRPcHRpb24oImtleU1hcCIsICJ2aW0tcHJlZml4LWQiKTsgZW1wdHlCdWZmZXIoKTt9LAogICAgIk0iOiBmdW5jdGlvbihjbSkge2NtLnNldE9wdGlvbigia2V5TWFwIiwgInZpbS1wcmVmaXgtbSIpOyBtYXJrID0gW107fSwKICAgICJZIjogZnVuY3Rpb24oY20pIHtjbS5zZXRPcHRpb24oImtleU1hcCIsICJ2aW0tcHJlZml4LXkiKTsgZW1wdHlCdWZmZXIoKTsgeWFuayA9IDA7fSwKICAgICIvIjogZnVuY3Rpb24oY20pIHt2YXIgZiA9IENvZGVNaXJyb3IuY29tbWFuZHMuZmluZDsgZiAmJiBmKGNtKTsgc2RpciA9ICJmIn0sCiAgICAiU2hpZnQtLyI6IGZ1bmN0aW9uKGNtKSB7CiAgICAgIHZhciBmID0gQ29kZU1pcnJvci5jb21tYW5kcy5maW5kOwogICAgICBpZiAoZikgeyBmKGNtKTsgQ29kZU1pcnJvci5jb21tYW5kcy5maW5kUHJldihjbSk7IHNkaXIgPSAiciI7IH0KICAgIH0sCiAgICAiTiI6IGZ1bmN0aW9uKGNtKSB7CiAgICAgIHZhciBmbiA9IENvZGVNaXJyb3IuY29tbWFuZHMuZmluZE5leHQ7CiAgICAgIGlmIChmbikgc2RpciAhPSAiciIgPyBmbihjbSkgOiBDb2RlTWlycm9yLmNvbW1hbmRzLmZpbmRQcmV2KGNtKTsKICAgIH0sCiAgICAiU2hpZnQtTiI6IGZ1bmN0aW9uKGNtKSB7CiAgICAgIHZhciBmbiA9IENvZGVNaXJyb3IuY29tbWFuZHMuZmluZE5leHQ7CiAgICAgIGlmIChmbikgc2RpciAhPSAiciIgPyBDb2RlTWlycm9yLmNvbW1hbmRzLmZpbmRQcmV2KGNtKSA6IGZuLmZpbmROZXh0KGNtKTsKICAgIH0sCiAgICAiU2hpZnQtRyI6IGZ1bmN0aW9uKGNtKSB7Y291bnQgPT0gIiIgPyBjbS5zZXRDdXJzb3IoY20ubGluZUNvdW50KCkpIDogY20uc2V0Q3Vyc29yKHBhcnNlSW50KGNvdW50KS0xKTsgcG9wQ291bnQoKTsgQ29kZU1pcnJvci5jb21tYW5kcy5nb0xpbmVTdGFydChjbSk7fSwKICAgIGNhdGNoYWxsOiBmdW5jdGlvbihjbSkgey8qaWdub3JlKi99CiAgfTsKICAvLyBBZGQgYmluZGluZ3MgZm9yIG51bWJlciBrZXlzCiAgZm9yICh2YXIgaSA9IDE7IGkgPCAxMDsgKytpKSBtYXBbaV0gPSBwdXNoQ291bnREaWdpdChpKTsKICAvLyBBZGQgYmluZGluZ3MgdGhhdCBhcmUgaW5mbHVlbmNlZCBieSBudW1iZXIga2V5cwogIGl0ZXJPYmooeyJIIjogImdvQ29sdW1uTGVmdCIsICJMIjogImdvQ29sdW1uUmlnaHQiLCAiSiI6ICJnb0xpbmVEb3duIiwgIksiOiAiZ29MaW5lVXAiLAoJCSAgICAgICAiTGVmdCI6ICJnb0NvbHVtbkxlZnQiLCAiUmlnaHQiOiAiZ29Db2x1bW5SaWdodCIsICJEb3duIjogImdvTGluZURvd24iLCAiVXAiOiAiZ29MaW5lVXAiLAogICAgICAgICAgICJCYWNrc3BhY2UiOiAiZ29DaGFyTGVmdCIsICJTcGFjZSI6ICJnb0NoYXJSaWdodCIsCiAgICAgICAgICAgIkIiOiBmdW5jdGlvbihjbSkge21vdmVUb1dvcmQoY20sIHdvcmQsIC0xLCAiZW5kIik7fSwKICAgICAgICAgICAiRSI6IGZ1bmN0aW9uKGNtKSB7bW92ZVRvV29yZChjbSwgd29yZCwgMSwgImVuZCIpO30sCiAgICAgICAgICAgIlciOiBmdW5jdGlvbihjbSkge21vdmVUb1dvcmQoY20sIHdvcmQsIDEsICJzdGFydCIpO30sCiAgICAgICAgICAgIlNoaWZ0LUIiOiBmdW5jdGlvbihjbSkge21vdmVUb1dvcmQoY20sIGJpZ1dvcmQsIC0xLCAiZW5kIik7fSwKICAgICAgICAgICAiU2hpZnQtRSI6IGZ1bmN0aW9uKGNtKSB7bW92ZVRvV29yZChjbSwgYmlnV29yZCwgMSwgImVuZCIpO30sCiAgICAgICAgICAgIlNoaWZ0LVciOiBmdW5jdGlvbihjbSkge21vdmVUb1dvcmQoY20sIGJpZ1dvcmQsIDEsICJzdGFydCIpO30sCiAgICAgICAgICAgIlgiOiBmdW5jdGlvbihjbSkge0NvZGVNaXJyb3IuY29tbWFuZHMuZGVsQ2hhclJpZ2h0KGNtKX0sCiAgICAgICAgICAgIlAiOiBmdW5jdGlvbihjbSkgewoJCSAgdmFyIGN1ciA9IGNtLmdldEN1cnNvcigpLmxpbmU7CgkJICBpZiAoYnVmIT0gIiIpIHsKICAgICAgICAgICAgICAgICAgICBDb2RlTWlycm9yLmNvbW1hbmRzLmdvTGluZUVuZChjbSk7IAoJCSAgICBjbS5yZXBsYWNlU2VsZWN0aW9uKGJ1ZiwgImVuZCIpOwoJCSAgfQoJCSAgY20uc2V0Q3Vyc29yKGN1cisxKTsKCSAgICAgICAgfSwKICAgICAgICAgICAiU2hpZnQtWCI6IGZ1bmN0aW9uKGNtKSB7Q29kZU1pcnJvci5jb21tYW5kcy5kZWxDaGFyTGVmdChjbSl9LAogICAgICAgICAgICJTaGlmdC1KIjogZnVuY3Rpb24oY20pIHtqb2luTGluZU5leHQoY20pfSwKICAgICAgICAgICAiU2hpZnQtYCI6IGZ1bmN0aW9uKGNtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXIgPSBjbS5nZXRDdXJzb3IoKSwgY0hhciA9IGNtLmdldFJhbmdlKHtsaW5lOiBjdXIubGluZSwgY2g6IGN1ci5jaH0sIHtsaW5lOiBjdXIubGluZSwgY2g6IGN1ci5jaCsxfSk7CgkJCWNIYXIgPSBjSGFyICE9IGNIYXIudG9Mb3dlckNhc2UoKSA/IGNIYXIudG9Mb3dlckNhc2UoKSA6IGNIYXIudG9VcHBlckNhc2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY20ucmVwbGFjZVJhbmdlKGNIYXIsIHtsaW5lOiBjdXIubGluZSwgY2g6IGN1ci5jaH0sIHtsaW5lOiBjdXIubGluZSwgY2g6IGN1ci5jaCsxfSk7CgkJCWNtLnNldEN1cnNvcihjdXIubGluZSwgY3VyLmNoKzEpOwoJICAgICAgICAgICAgICB9LAogICAgICAgICAgICJDdHJsLUIiOiBmdW5jdGlvbihjbSkge0NvZGVNaXJyb3IuY29tbWFuZHMuZ29QYWdlVXAoY20pfSwKICAgICAgICAgICAiQ3RybC1GIjogZnVuY3Rpb24oY20pIHtDb2RlTWlycm9yLmNvbW1hbmRzLmdvUGFnZURvd24oY20pfSwKCSAgICJDdHJsLVAiOiAiZ29MaW5lVXAiLCAiQ3RybC1OIjogImdvTGluZURvd24iLAogICAgICAgICAgICJVIjogInVuZG8iLCAiQ3RybC1SIjogInJlZG8iLCAiU2hpZnQtNCI6ICJnb0xpbmVFbmQifSwKICAgICAgICAgIGZ1bmN0aW9uKGtleSwgY21kKSB7IG1hcFtrZXldID0gY291bnRUaW1lcyhjbWQpOyB9KTsKCiAgQ29kZU1pcnJvci5rZXlNYXBbInZpbS1wcmVmaXgtZyJdID0gewogICAgIkUiOiBjb3VudFRpbWVzKGZ1bmN0aW9uKGNtKSB7IG1vdmVUb1dvcmQoY20sIHdvcmQsIC0xLCAic3RhcnQiKTt9KSwKICAgICJTaGlmdC1FIjogY291bnRUaW1lcyhmdW5jdGlvbihjbSkgeyBtb3ZlVG9Xb3JkKGNtLCBiaWdXb3JkLCAtMSwgInN0YXJ0Iik7fSksCiAgICBhdXRvOiAidmltIiwgCiAgICBjYXRjaGFsbDogZnVuY3Rpb24oY20pIHsvKmlnbm9yZSovfQogIH07CgogIENvZGVNaXJyb3Iua2V5TWFwWyJ2aW0tcHJlZml4LW0iXSA9IHsKICAgICJBIjogZnVuY3Rpb24oY20pIHttYXJrWyJBIl0gPSBjbS5nZXRDdXJzb3IoKS5saW5lO30sCiAgICAiU2hpZnQtQSI6IGZ1bmN0aW9uKGNtKSB7bWFya1siU2hpZnQtQSJdID0gY20uZ2V0Q3Vyc29yKCkubGluZTt9LAogICAgIkIiOiBmdW5jdGlvbihjbSkge21hcmtbIkIiXSA9IGNtLmdldEN1cnNvcigpLmxpbmU7fSwKICAgICJTaGlmdC1CIjogZnVuY3Rpb24oY20pIHttYXJrWyJTaGlmdC1CIl0gPSBjbS5nZXRDdXJzb3IoKS5saW5lO30sCiAgICAiQyI6IGZ1bmN0aW9uKGNtKSB7bWFya1siQyJdID0gY20uZ2V0Q3Vyc29yKCkubGluZTt9LAogICAgIlNoaWZ0LUMiOiBmdW5jdGlvbihjbSkge21hcmtbIlNoaWZ0LUMiXSA9IGNtLmdldEN1cnNvcigpLmxpbmU7fSwKICAgICJEIjogZnVuY3Rpb24oY20pIHttYXJrWyJEIl0gPSBjbS5nZXRDdXJzb3IoKS5saW5lO30sCiAgICAiU2hpZnQtRCI6IGZ1bmN0aW9uKGNtKSB7bWFya1siU2hpZnQtRCJdID0gY20uZ2V0Q3Vyc29yKCkubGluZTt9LAogICAgIkUiOiBmdW5jdGlvbihjbSkge21hcmtbIkUiXSA9IGNtLmdldEN1cnNvcigpLmxpbmU7fSwKICAgICJTaGlmdC1FIjogZnVuY3Rpb24oY20pIHttYXJrWyJTaGlmdC1FIl0gPSBjbS5nZXRDdXJzb3IoKS5saW5lO30sCiAgICAiRiI6IGZ1bmN0aW9uKGNtKSB7bWFya1siRiJdID0gY20uZ2V0Q3Vyc29yKCkubGluZTt9LAogICAgIlNoaWZ0LUYiOiBmdW5jdGlvbihjbSkge21hcmtbIlNoaWZ0LUYiXSA9IGNtLmdldEN1cnNvcigpLmxpbmU7fSwKICAgICJHIjogZnVuY3Rpb24oY20pIHttYXJrWyJHIl0gPSBjbS5nZXRDdXJzb3IoKS5saW5lO30sCiAgICAiU2hpZnQtRyI6IGZ1bmN0aW9uKGNtKSB7bWFya1siU2hpZnQtRyJdID0gY20uZ2V0Q3Vyc29yKCkubGluZTt9LAogICAgIkgiOiBmdW5jdGlvbihjbSkge21hcmtbIkgiXSA9IGNtLmdldEN1cnNvcigpLmxpbmU7fSwKICAgICJTaGlmdC1IIjogZnVuY3Rpb24oY20pIHttYXJrWyJTaGlmdC1IIl0gPSBjbS5nZXRDdXJzb3IoKS5saW5lO30sCiAgICAiSSI6IGZ1bmN0aW9uKGNtKSB7bWFya1siSSJdID0gY20uZ2V0Q3Vyc29yKCkubGluZTt9LAogICAgIlNoaWZ0LUkiOiBmdW5jdGlvbihjbSkge21hcmtbIlNoaWZ0LUkiXSA9IGNtLmdldEN1cnNvcigpLmxpbmU7fSwKICAgICJKIjogZnVuY3Rpb24oY20pIHttYXJrWyJKIl0gPSBjbS5nZXRDdXJzb3IoKS5saW5lO30sCiAgICAiU2hpZnQtSiI6IGZ1bmN0aW9uKGNtKSB7bWFya1siU2hpZnQtSiJdID0gY20uZ2V0Q3Vyc29yKCkubGluZTt9LAogICAgIksiOiBmdW5jdGlvbihjbSkge21hcmtbIksiXSA9IGNtLmdldEN1cnNvcigpLmxpbmU7fSwKICAgICJTaGlmdC1LIjogZnVuY3Rpb24oY20pIHttYXJrWyJTaGlmdC1LIl0gPSBjbS5nZXRDdXJzb3IoKS5saW5lO30sCiAgICAiTCI6IGZ1bmN0aW9uKGNtKSB7bWFya1siTCJdID0gY20uZ2V0Q3Vyc29yKCkubGluZTt9LAogICAgIlNoaWZ0LUwiOiBmdW5jdGlvbihjbSkge21hcmtbIlNoaWZ0LUwiXSA9IGNtLmdldEN1cnNvcigpLmxpbmU7fSwKICAgICJNIjogZnVuY3Rpb24oY20pIHttYXJrWyJNIl0gPSBjbS5nZXRDdXJzb3IoKS5saW5lO30sCiAgICAiU2hpZnQtTSI6IGZ1bmN0aW9uKGNtKSB7bWFya1siU2hpZnQtTSJdID0gY20uZ2V0Q3Vyc29yKCkubGluZTt9LAogICAgIk4iOiBmdW5jdGlvbihjbSkge21hcmtbIk4iXSA9IGNtLmdldEN1cnNvcigpLmxpbmU7fSwKICAgICJTaGlmdC1OIjogZnVuY3Rpb24oY20pIHttYXJrWyJTaGlmdC1OIl0gPSBjbS5nZXRDdXJzb3IoKS5saW5lO30sCiAgICAiTyI6IGZ1bmN0aW9uKGNtKSB7bWFya1siTyJdID0gY20uZ2V0Q3Vyc29yKCkubGluZTt9LAogICAgIlNoaWZ0LU8iOiBmdW5jdGlvbihjbSkge21hcmtbIlNoaWZ0LU8iXSA9IGNtLmdldEN1cnNvcigpLmxpbmU7fSwKICAgICJQIjogZnVuY3Rpb24oY20pIHttYXJrWyJQIl0gPSBjbS5nZXRDdXJzb3IoKS5saW5lO30sCiAgICAiU2hpZnQtUCI6IGZ1bmN0aW9uKGNtKSB7bWFya1siU2hpZnQtUCJdID0gY20uZ2V0Q3Vyc29yKCkubGluZTt9LAogICAgIlEiOiBmdW5jdGlvbihjbSkge21hcmtbIlEiXSA9IGNtLmdldEN1cnNvcigpLmxpbmU7fSwKICAgICJTaGlmdC1RIjogZnVuY3Rpb24oY20pIHttYXJrWyJTaGlmdC1RIl0gPSBjbS5nZXRDdXJzb3IoKS5saW5lO30sCiAgICAiUiI6IGZ1bmN0aW9uKGNtKSB7bWFya1siUiJdID0gY20uZ2V0Q3Vyc29yKCkubGluZTt9LAogICAgIlNoaWZ0LVIiOiBmdW5jdGlvbihjbSkge21hcmtbIlNoaWZ0LVIiXSA9IGNtLmdldEN1cnNvcigpLmxpbmU7fSwKICAgICJTIjogZnVuY3Rpb24oY20pIHttYXJrWyJTIl0gPSBjbS5nZXRDdXJzb3IoKS5saW5lO30sCiAgICAiU2hpZnQtUyI6IGZ1bmN0aW9uKGNtKSB7bWFya1siU2hpZnQtUyJdID0gY20uZ2V0Q3Vyc29yKCkubGluZTt9LAogICAgIlQiOiBmdW5jdGlvbihjbSkge21hcmtbIlQiXSA9IGNtLmdldEN1cnNvcigpLmxpbmU7fSwKICAgICJTaGlmdC1UIjogZnVuY3Rpb24oY20pIHttYXJrWyJTaGlmdC1UIl0gPSBjbS5nZXRDdXJzb3IoKS5saW5lO30sCiAgICAiVSI6IGZ1bmN0aW9uKGNtKSB7bWFya1siVSJdID0gY20uZ2V0Q3Vyc29yKCkubGluZTt9LAogICAgIlNoaWZ0LVUiOiBmdW5jdGlvbihjbSkge21hcmtbIlNoaWZ0LVUiXSA9IGNtLmdldEN1cnNvcigpLmxpbmU7fSwKICAgICJWIjogZnVuY3Rpb24oY20pIHttYXJrWyJWIl0gPSBjbS5nZXRDdXJzb3IoKS5saW5lO30sCiAgICAiU2hpZnQtViI6IGZ1bmN0aW9uKGNtKSB7bWFya1siU2hpZnQtViJdID0gY20uZ2V0Q3Vyc29yKCkubGluZTt9LAogICAgIlciOiBmdW5jdGlvbihjbSkge21hcmtbIlciXSA9IGNtLmdldEN1cnNvcigpLmxpbmU7fSwKICAgICJTaGlmdC1XIjogZnVuY3Rpb24oY20pIHttYXJrWyJTaGlmdC1XIl0gPSBjbS5nZXRDdXJzb3IoKS5saW5lO30sCiAgICAiWCI6IGZ1bmN0aW9uKGNtKSB7bWFya1siWCJdID0gY20uZ2V0Q3Vyc29yKCkubGluZTt9LAogICAgIlNoaWZ0LVgiOiBmdW5jdGlvbihjbSkge21hcmtbIlNoaWZ0LVgiXSA9IGNtLmdldEN1cnNvcigpLmxpbmU7fSwKICAgICJZIjogZnVuY3Rpb24oY20pIHttYXJrWyJZIl0gPSBjbS5nZXRDdXJzb3IoKS5saW5lO30sCiAgICAiU2hpZnQtWSI6IGZ1bmN0aW9uKGNtKSB7bWFya1siU2hpZnQtWSJdID0gY20uZ2V0Q3Vyc29yKCkubGluZTt9LAogICAgIloiOiBmdW5jdGlvbihjbSkge21hcmtbIloiXSA9IGNtLmdldEN1cnNvcigpLmxpbmU7fSwKICAgICJTaGlmdC1aIjogZnVuY3Rpb24oY20pIHttYXJrWyJTaGlmdC1aIl0gPSBjbS5nZXRDdXJzb3IoKS5saW5lO30sCiAgICBhdXRvOiAidmltIiwgCiAgICBjYXRjaGFsbDogZnVuY3Rpb24oY20pIHsvKmlnbm9yZSovfQogIH0KICAKICBDb2RlTWlycm9yLmtleU1hcFsidmltLXByZWZpeC1kIl0gPSB7CiAgICAiRCI6IGNvdW50VGltZXMoZnVuY3Rpb24oY20pIHsgcHVzaEluQnVmZmVyKCJcbiIrY20uZ2V0TGluZShjbS5nZXRDdXJzb3IoKS5saW5lKSk7IGNtLnJlbW92ZUxpbmUoY20uZ2V0Q3Vyc29yKCkubGluZSk7IH0pLAogICAgIiciOiBmdW5jdGlvbihjbSkge2NtLnNldE9wdGlvbigia2V5TWFwIiwgInZpbS1wcmVmaXgtZCciKTsgZW1wdHlCdWZmZXIoKTt9LAogICAgYXV0bzogInZpbSIsIAogICAgY2F0Y2hhbGw6IGZ1bmN0aW9uKGNtKSB7LyppZ25vcmUqL30KICB9OwoKICBDb2RlTWlycm9yLmtleU1hcFsidmltLXByZWZpeC1kJyJdID0gewogICAgIkEiOiBmdW5jdGlvbihjbSkge2RlbFRpbGxNYXJrKGNtLCJBIik7fSwKICAgICJTaGlmdC1BIjogZnVuY3Rpb24oY20pIHtkZWxUaWxsTWFyayhjbSwiU2hpZnQtQSIpO30sCiAgICAiQiI6IGZ1bmN0aW9uKGNtKSB7ZGVsVGlsbE1hcmsoY20sIkIiKTt9LAogICAgIlNoaWZ0LUIiOiBmdW5jdGlvbihjbSkge2RlbFRpbGxNYXJrKGNtLCJTaGlmdC1CIik7fSwKICAgICJDIjogZnVuY3Rpb24oY20pIHtkZWxUaWxsTWFyayhjbSwiQyIpO30sCiAgICAiU2hpZnQtQyI6IGZ1bmN0aW9uKGNtKSB7ZGVsVGlsbE1hcmsoY20sIlNoaWZ0LUMiKTt9LAogICAgIkQiOiBmdW5jdGlvbihjbSkge2RlbFRpbGxNYXJrKGNtLCJEIik7fSwKICAgICJTaGlmdC1EIjogZnVuY3Rpb24oY20pIHtkZWxUaWxsTWFyayhjbSwiU2hpZnQtRCIpO30sCiAgICAiRSI6IGZ1bmN0aW9uKGNtKSB7ZGVsVGlsbE1hcmsoY20sIkUiKTt9LAogICAgIlNoaWZ0LUUiOiBmdW5jdGlvbihjbSkge2RlbFRpbGxNYXJrKGNtLCJTaGlmdC1FIik7fSwKICAgICJGIjogZnVuY3Rpb24oY20pIHtkZWxUaWxsTWFyayhjbSwiRiIpO30sCiAgICAiU2hpZnQtRiI6IGZ1bmN0aW9uKGNtKSB7ZGVsVGlsbE1hcmsoY20sIlNoaWZ0LUYiKTt9LAogICAgIkciOiBmdW5jdGlvbihjbSkge2RlbFRpbGxNYXJrKGNtLCJHIik7fSwKICAgICJTaGlmdC1HIjogZnVuY3Rpb24oY20pIHtkZWxUaWxsTWFyayhjbSwiU2hpZnQtRyIpO30sCiAgICAiSCI6IGZ1bmN0aW9uKGNtKSB7ZGVsVGlsbE1hcmsoY20sIkgiKTt9LAogICAgIlNoaWZ0LUgiOiBmdW5jdGlvbihjbSkge2RlbFRpbGxNYXJrKGNtLCJTaGlmdC1IIik7fSwKICAgICJJIjogZnVuY3Rpb24oY20pIHtkZWxUaWxsTWFyayhjbSwiSSIpO30sCiAgICAiU2hpZnQtSSI6IGZ1bmN0aW9uKGNtKSB7ZGVsVGlsbE1hcmsoY20sIlNoaWZ0LUkiKTt9LAogICAgIkoiOiBmdW5jdGlvbihjbSkge2RlbFRpbGxNYXJrKGNtLCJKIik7fSwKICAgICJTaGlmdC1KIjogZnVuY3Rpb24oY20pIHtkZWxUaWxsTWFyayhjbSwiU2hpZnQtSiIpO30sCiAgICAiSyI6IGZ1bmN0aW9uKGNtKSB7ZGVsVGlsbE1hcmsoY20sIksiKTt9LAogICAgIlNoaWZ0LUsiOiBmdW5jdGlvbihjbSkge2RlbFRpbGxNYXJrKGNtLCJTaGlmdC1LIik7fSwKICAgICJMIjogZnVuY3Rpb24oY20pIHtkZWxUaWxsTWFyayhjbSwiTCIpO30sCiAgICAiU2hpZnQtTCI6IGZ1bmN0aW9uKGNtKSB7ZGVsVGlsbE1hcmsoY20sIlNoaWZ0LUwiKTt9LAogICAgIk0iOiBmdW5jdGlvbihjbSkge2RlbFRpbGxNYXJrKGNtLCJNIik7fSwKICAgICJTaGlmdC1NIjogZnVuY3Rpb24oY20pIHtkZWxUaWxsTWFyayhjbSwiU2hpZnQtTSIpO30sCiAgICAiTiI6IGZ1bmN0aW9uKGNtKSB7ZGVsVGlsbE1hcmsoY20sIk4iKTt9LAogICAgIlNoaWZ0LU4iOiBmdW5jdGlvbihjbSkge2RlbFRpbGxNYXJrKGNtLCJTaGlmdC1OIik7fSwKICAgICJPIjogZnVuY3Rpb24oY20pIHtkZWxUaWxsTWFyayhjbSwiTyIpO30sCiAgICAiU2hpZnQtTyI6IGZ1bmN0aW9uKGNtKSB7ZGVsVGlsbE1hcmsoY20sIlNoaWZ0LU8iKTt9LAogICAgIlAiOiBmdW5jdGlvbihjbSkge2RlbFRpbGxNYXJrKGNtLCJQIik7fSwKICAgICJTaGlmdC1QIjogZnVuY3Rpb24oY20pIHtkZWxUaWxsTWFyayhjbSwiU2hpZnQtUCIpO30sCiAgICAiUSI6IGZ1bmN0aW9uKGNtKSB7ZGVsVGlsbE1hcmsoY20sIlEiKTt9LAogICAgIlNoaWZ0LVEiOiBmdW5jdGlvbihjbSkge2RlbFRpbGxNYXJrKGNtLCJTaGlmdC1RIik7fSwKICAgICJSIjogZnVuY3Rpb24oY20pIHtkZWxUaWxsTWFyayhjbSwiUiIpO30sCiAgICAiU2hpZnQtUiI6IGZ1bmN0aW9uKGNtKSB7ZGVsVGlsbE1hcmsoY20sIlNoaWZ0LVIiKTt9LAogICAgIlMiOiBmdW5jdGlvbihjbSkge2RlbFRpbGxNYXJrKGNtLCJTIik7fSwKICAgICJTaGlmdC1TIjogZnVuY3Rpb24oY20pIHtkZWxUaWxsTWFyayhjbSwiU2hpZnQtUyIpO30sCiAgICAiVCI6IGZ1bmN0aW9uKGNtKSB7ZGVsVGlsbE1hcmsoY20sIlQiKTt9LAogICAgIlNoaWZ0LVQiOiBmdW5jdGlvbihjbSkge2RlbFRpbGxNYXJrKGNtLCJTaGlmdC1UIik7fSwKICAgICJVIjogZnVuY3Rpb24oY20pIHtkZWxUaWxsTWFyayhjbSwiVSIpO30sCiAgICAiU2hpZnQtVSI6IGZ1bmN0aW9uKGNtKSB7ZGVsVGlsbE1hcmsoY20sIlNoaWZ0LVUiKTt9LAogICAgIlYiOiBmdW5jdGlvbihjbSkge2RlbFRpbGxNYXJrKGNtLCJWIik7fSwKICAgICJTaGlmdC1WIjogZnVuY3Rpb24oY20pIHtkZWxUaWxsTWFyayhjbSwiU2hpZnQtViIpO30sCiAgICAiVyI6IGZ1bmN0aW9uKGNtKSB7ZGVsVGlsbE1hcmsoY20sIlciKTt9LAogICAgIlNoaWZ0LVciOiBmdW5jdGlvbihjbSkge2RlbFRpbGxNYXJrKGNtLCJTaGlmdC1XIik7fSwKICAgICJYIjogZnVuY3Rpb24oY20pIHtkZWxUaWxsTWFyayhjbSwiWCIpO30sCiAgICAiU2hpZnQtWCI6IGZ1bmN0aW9uKGNtKSB7ZGVsVGlsbE1hcmsoY20sIlNoaWZ0LVgiKTt9LAogICAgIlkiOiBmdW5jdGlvbihjbSkge2RlbFRpbGxNYXJrKGNtLCJZIik7fSwKICAgICJTaGlmdC1ZIjogZnVuY3Rpb24oY20pIHtkZWxUaWxsTWFyayhjbSwiU2hpZnQtWSIpO30sCiAgICAiWiI6IGZ1bmN0aW9uKGNtKSB7ZGVsVGlsbE1hcmsoY20sIloiKTt9LAogICAgIlNoaWZ0LVoiOiBmdW5jdGlvbihjbSkge2RlbFRpbGxNYXJrKGNtLCJTaGlmdC1aIik7fSwKICAgIGF1dG86ICJ2aW0iLCAKICAgIGNhdGNoYWxsOiBmdW5jdGlvbihjbSkgey8qaWdub3JlKi99CiAgfTsKCiAgQ29kZU1pcnJvci5rZXlNYXBbInZpbS1wcmVmaXgteSciXSA9IHsKICAgICJBIjogZnVuY3Rpb24oY20pIHt5YW5rVGlsbE1hcmsoY20sIkEiKTt9LAogICAgIlNoaWZ0LUEiOiBmdW5jdGlvbihjbSkge3lhbmtUaWxsTWFyayhjbSwiU2hpZnQtQSIpO30sCiAgICAiQiI6IGZ1bmN0aW9uKGNtKSB7eWFua1RpbGxNYXJrKGNtLCJCIik7fSwKICAgICJTaGlmdC1CIjogZnVuY3Rpb24oY20pIHt5YW5rVGlsbE1hcmsoY20sIlNoaWZ0LUIiKTt9LAogICAgIkMiOiBmdW5jdGlvbihjbSkge3lhbmtUaWxsTWFyayhjbSwiQyIpO30sCiAgICAiU2hpZnQtQyI6IGZ1bmN0aW9uKGNtKSB7eWFua1RpbGxNYXJrKGNtLCJTaGlmdC1DIik7fSwKICAgICJEIjogZnVuY3Rpb24oY20pIHt5YW5rVGlsbE1hcmsoY20sIkQiKTt9LAogICAgIlNoaWZ0LUQiOiBmdW5jdGlvbihjbSkge3lhbmtUaWxsTWFyayhjbSwiU2hpZnQtRCIpO30sCiAgICAiRSI6IGZ1bmN0aW9uKGNtKSB7eWFua1RpbGxNYXJrKGNtLCJFIik7fSwKICAgICJTaGlmdC1FIjogZnVuY3Rpb24oY20pIHt5YW5rVGlsbE1hcmsoY20sIlNoaWZ0LUUiKTt9LAogICAgIkYiOiBmdW5jdGlvbihjbSkge3lhbmtUaWxsTWFyayhjbSwiRiIpO30sCiAgICAiU2hpZnQtRiI6IGZ1bmN0aW9uKGNtKSB7eWFua1RpbGxNYXJrKGNtLCJTaGlmdC1GIik7fSwKICAgICJHIjogZnVuY3Rpb24oY20pIHt5YW5rVGlsbE1hcmsoY20sIkciKTt9LAogICAgIlNoaWZ0LUciOiBmdW5jdGlvbihjbSkge3lhbmtUaWxsTWFyayhjbSwiU2hpZnQtRyIpO30sCiAgICAiSCI6IGZ1bmN0aW9uKGNtKSB7eWFua1RpbGxNYXJrKGNtLCJIIik7fSwKICAgICJTaGlmdC1IIjogZnVuY3Rpb24oY20pIHt5YW5rVGlsbE1hcmsoY20sIlNoaWZ0LUgiKTt9LAogICAgIkkiOiBmdW5jdGlvbihjbSkge3lhbmtUaWxsTWFyayhjbSwiSSIpO30sCiAgICAiU2hpZnQtSSI6IGZ1bmN0aW9uKGNtKSB7eWFua1RpbGxNYXJrKGNtLCJTaGlmdC1JIik7fSwKICAgICJKIjogZnVuY3Rpb24oY20pIHt5YW5rVGlsbE1hcmsoY20sIkoiKTt9LAogICAgIlNoaWZ0LUoiOiBmdW5jdGlvbihjbSkge3lhbmtUaWxsTWFyayhjbSwiU2hpZnQtSiIpO30sCiAgICAiSyI6IGZ1bmN0aW9uKGNtKSB7eWFua1RpbGxNYXJrKGNtLCJLIik7fSwKICAgICJTaGlmdC1LIjogZnVuY3Rpb24oY20pIHt5YW5rVGlsbE1hcmsoY20sIlNoaWZ0LUsiKTt9LAogICAgIkwiOiBmdW5jdGlvbihjbSkge3lhbmtUaWxsTWFyayhjbSwiTCIpO30sCiAgICAiU2hpZnQtTCI6IGZ1bmN0aW9uKGNtKSB7eWFua1RpbGxNYXJrKGNtLCJTaGlmdC1MIik7fSwKICAgICJNIjogZnVuY3Rpb24oY20pIHt5YW5rVGlsbE1hcmsoY20sIk0iKTt9LAogICAgIlNoaWZ0LU0iOiBmdW5jdGlvbihjbSkge3lhbmtUaWxsTWFyayhjbSwiU2hpZnQtTSIpO30sCiAgICAiTiI6IGZ1bmN0aW9uKGNtKSB7eWFua1RpbGxNYXJrKGNtLCJOIik7fSwKICAgICJTaGlmdC1OIjogZnVuY3Rpb24oY20pIHt5YW5rVGlsbE1hcmsoY20sIlNoaWZ0LU4iKTt9LAogICAgIk8iOiBmdW5jdGlvbihjbSkge3lhbmtUaWxsTWFyayhjbSwiTyIpO30sCiAgICAiU2hpZnQtTyI6IGZ1bmN0aW9uKGNtKSB7eWFua1RpbGxNYXJrKGNtLCJTaGlmdC1PIik7fSwKICAgICJQIjogZnVuY3Rpb24oY20pIHt5YW5rVGlsbE1hcmsoY20sIlAiKTt9LAogICAgIlNoaWZ0LVAiOiBmdW5jdGlvbihjbSkge3lhbmtUaWxsTWFyayhjbSwiU2hpZnQtUCIpO30sCiAgICAiUSI6IGZ1bmN0aW9uKGNtKSB7eWFua1RpbGxNYXJrKGNtLCJRIik7fSwKICAgICJTaGlmdC1RIjogZnVuY3Rpb24oY20pIHt5YW5rVGlsbE1hcmsoY20sIlNoaWZ0LVEiKTt9LAogICAgIlIiOiBmdW5jdGlvbihjbSkge3lhbmtUaWxsTWFyayhjbSwiUiIpO30sCiAgICAiU2hpZnQtUiI6IGZ1bmN0aW9uKGNtKSB7eWFua1RpbGxNYXJrKGNtLCJTaGlmdC1SIik7fSwKICAgICJTIjogZnVuY3Rpb24oY20pIHt5YW5rVGlsbE1hcmsoY20sIlMiKTt9LAogICAgIlNoaWZ0LVMiOiBmdW5jdGlvbihjbSkge3lhbmtUaWxsTWFyayhjbSwiU2hpZnQtUyIpO30sCiAgICAiVCI6IGZ1bmN0aW9uKGNtKSB7eWFua1RpbGxNYXJrKGNtLCJUIik7fSwKICAgICJTaGlmdC1UIjogZnVuY3Rpb24oY20pIHt5YW5rVGlsbE1hcmsoY20sIlNoaWZ0LVQiKTt9LAogICAgIlUiOiBmdW5jdGlvbihjbSkge3lhbmtUaWxsTWFyayhjbSwiVSIpO30sCiAgICAiU2hpZnQtVSI6IGZ1bmN0aW9uKGNtKSB7eWFua1RpbGxNYXJrKGNtLCJTaGlmdC1VIik7fSwKICAgICJWIjogZnVuY3Rpb24oY20pIHt5YW5rVGlsbE1hcmsoY20sIlYiKTt9LAogICAgIlNoaWZ0LVYiOiBmdW5jdGlvbihjbSkge3lhbmtUaWxsTWFyayhjbSwiU2hpZnQtViIpO30sCiAgICAiVyI6IGZ1bmN0aW9uKGNtKSB7eWFua1RpbGxNYXJrKGNtLCJXIik7fSwKICAgICJTaGlmdC1XIjogZnVuY3Rpb24oY20pIHt5YW5rVGlsbE1hcmsoY20sIlNoaWZ0LVciKTt9LAogICAgIlgiOiBmdW5jdGlvbihjbSkge3lhbmtUaWxsTWFyayhjbSwiWCIpO30sCiAgICAiU2hpZnQtWCI6IGZ1bmN0aW9uKGNtKSB7eWFua1RpbGxNYXJrKGNtLCJTaGlmdC1YIik7fSwKICAgICJZIjogZnVuY3Rpb24oY20pIHt5YW5rVGlsbE1hcmsoY20sIlkiKTt9LAogICAgIlNoaWZ0LVkiOiBmdW5jdGlvbihjbSkge3lhbmtUaWxsTWFyayhjbSwiU2hpZnQtWSIpO30sCiAgICAiWiI6IGZ1bmN0aW9uKGNtKSB7eWFua1RpbGxNYXJrKGNtLCJaIik7fSwKICAgICJTaGlmdC1aIjogZnVuY3Rpb24oY20pIHt5YW5rVGlsbE1hcmsoY20sIlNoaWZ0LVoiKTt9LAogICAgYXV0bzogInZpbSIsIAogICAgY2F0Y2hhbGw6IGZ1bmN0aW9uKGNtKSB7LyppZ25vcmUqL30KICB9OwoKICBDb2RlTWlycm9yLmtleU1hcFsidmltLXByZWZpeC15Il0gPSB7CiAgICAiWSI6IGNvdW50VGltZXMoZnVuY3Rpb24oY20pIHsgcHVzaEluQnVmZmVyKCJcbiIrY20uZ2V0TGluZShjbS5nZXRDdXJzb3IoKS5saW5lK3lhbmspKTsgeWFuaysrOyB9KSwKICAgICInIjogZnVuY3Rpb24oY20pIHtjbS5zZXRPcHRpb24oImtleU1hcCIsICJ2aW0tcHJlZml4LXknIik7IGVtcHR5QnVmZmVyKCk7fSwKICAgIGF1dG86ICJ2aW0iLCAKICAgIGNhdGNoYWxsOiBmdW5jdGlvbihjbSkgey8qaWdub3JlKi99CiAgfTsKCiAgQ29kZU1pcnJvci5rZXlNYXBbInZpbS1pbnNlcnQiXSA9IHsKICAgICJFc2MiOiBmdW5jdGlvbihjbSkgewoJICAgICBjbS5zZXRDdXJzb3IoY20uZ2V0Q3Vyc29yKCkubGluZSwgY20uZ2V0Q3Vyc29yKCkuY2gtMSwgdHJ1ZSk7IAoJICAgICBjbS5zZXRPcHRpb24oImtleU1hcCIsICJ2aW0iKTsKCSAgICAgZWRpdEN1cnNvcigidmltIik7CiAgICAgICAgICAgfSwKICAgICJDdHJsLU4iOiBmdW5jdGlvbihjbSkgey8qIENvZGUgdG8gYnJpbmcgdXAgYXV0b2NvbXBsZXRlIGhpbnQgKi99LAogICAgIkN0cmwtUCI6IGZ1bmN0aW9uKGNtKSB7LyogQ29kZSB0byBicmluZyB1cCBhdXRvY29tcGxldGUgaGludCAqL30sCiAgICBmYWxsdGhyb3VnaDogWyJkZWZhdWx0Il0KICB9Owp9KSgpOwo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/lib/codemirror.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LkNvZGVNaXJyb3IgewogIGxpbmUtaGVpZ2h0OiAxZW07CiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKfQoKLkNvZGVNaXJyb3Itc2Nyb2xsIHsKICBvdmVyZmxvdzogYXV0bzsKICBoZWlnaHQ6IDMwMHB4OwogIC8qIFRoaXMgaXMgbmVlZGVkIHRvIHByZXZlbnQgYW4gSUVbNjddIGJ1ZyB3aGVyZSB0aGUgc2Nyb2xsZWQgY29udGVudAogICAgIGlzIHZpc2libGUgb3V0c2lkZSBvZiB0aGUgc2Nyb2xsaW5nIGJveC4gKi8KICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi5Db2RlTWlycm9yLWd1dHRlciB7CiAgcG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAwOyB0b3A6IDA7CiAgei1pbmRleDogMTA7CiAgYmFja2dyb3VuZC1jb2xvcjogI2Y3ZjdmNzsKICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjZWVlOwogIG1pbi13aWR0aDogMmVtOwogIGhlaWdodDogMTAwJTsKfQouQ29kZU1pcnJvci1ndXR0ZXItdGV4dCB7CiAgY29sb3I6ICNhYWE7CiAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgcGFkZGluZzogLjRlbSAuMmVtIC40ZW0gLjRlbTsKICB3aGl0ZS1zcGFjZTogcHJlICFpbXBvcnRhbnQ7Cn0KLkNvZGVNaXJyb3ItbGluZXMgewogIHBhZGRpbmc6IC40ZW07Cn0KCi5Db2RlTWlycm9yIHByZSB7CiAgLW1vei1ib3JkZXItcmFkaXVzOiAwOwogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMDsKICAtby1ib3JkZXItcmFkaXVzOiAwOwogIGJvcmRlci1yYWRpdXM6IDA7CiAgYm9yZGVyLXdpZHRoOiAwOyBtYXJnaW46IDA7IHBhZGRpbmc6IDA7IGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogIGZvbnQtc2l6ZTogaW5oZXJpdDsKICBwYWRkaW5nOiAwOyBtYXJnaW46IDA7CiAgd2hpdGUtc3BhY2U6IHByZTsKICB3b3JkLXdyYXA6IG5vcm1hbDsKfQoKLkNvZGVNaXJyb3Itd3JhcCBwcmUgewogIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7Cn0KLkNvZGVNaXJyb3Itd3JhcCAuQ29kZU1pcnJvci1zY3JvbGwgewogIG92ZXJmbG93LXg6IGhpZGRlbjsKfQoKLkNvZGVNaXJyb3IgdGV4dGFyZWEgewogIG91dGxpbmU6IG5vbmUgIWltcG9ydGFudDsKfQoKLkNvZGVNaXJyb3IgcHJlLkNvZGVNaXJyb3ItY3Vyc29yIHsKICB6LWluZGV4OiAxMDsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdmlzaWJpbGl0eTogaGlkZGVuOwogIGJvcmRlci1sZWZ0OiAxcHggc29saWQgYmxhY2s7Cn0KLkNvZGVNaXJyb3ItZm9jdXNlZCBwcmUuQ29kZU1pcnJvci1jdXJzb3IgewogIHZpc2liaWxpdHk6IHZpc2libGU7Cn0KCmRpdi5Db2RlTWlycm9yLXNlbGVjdGVkIHsgYmFja2dyb3VuZDogI2Q5ZDlkOTsgfQouQ29kZU1pcnJvci1mb2N1c2VkIGRpdi5Db2RlTWlycm9yLXNlbGVjdGVkIHsgYmFja2dyb3VuZDogI2Q3ZDRmMDsgfQoKLkNvZGVNaXJyb3Itc2VhcmNoaW5nIHsKICBiYWNrZ3JvdW5kOiAjZmZhOwogIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDAsIC40KTsKfQoKLyogRGVmYXVsdCB0aGVtZSAqLwoKLmNtLXMtZGVmYXVsdCBzcGFuLmNtLWtleXdvcmQge2NvbG9yOiAjNzA4O30KLmNtLXMtZGVmYXVsdCBzcGFuLmNtLWF0b20ge2NvbG9yOiAjMjE5O30KLmNtLXMtZGVmYXVsdCBzcGFuLmNtLW51bWJlciB7Y29sb3I6ICMxNjQ7fQouY20tcy1kZWZhdWx0IHNwYW4uY20tZGVmIHtjb2xvcjogIzAwZjt9Ci5jbS1zLWRlZmF1bHQgc3Bhbi5jbS12YXJpYWJsZSB7Y29sb3I6IGJsYWNrO30KLmNtLXMtZGVmYXVsdCBzcGFuLmNtLXZhcmlhYmxlLTIge2NvbG9yOiAjMDVhO30KLmNtLXMtZGVmYXVsdCBzcGFuLmNtLXZhcmlhYmxlLTMge2NvbG9yOiAjMDg1O30KLmNtLXMtZGVmYXVsdCBzcGFuLmNtLXByb3BlcnR5IHtjb2xvcjogYmxhY2s7fQouY20tcy1kZWZhdWx0IHNwYW4uY20tb3BlcmF0b3Ige2NvbG9yOiBibGFjazt9Ci5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1jb21tZW50IHtjb2xvcjogI2E1MDt9Ci5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1zdHJpbmcge2NvbG9yOiAjYTExO30KLmNtLXMtZGVmYXVsdCBzcGFuLmNtLXN0cmluZy0yIHtjb2xvcjogI2Y1MDt9Ci5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1tZXRhIHtjb2xvcjogIzU1NTt9Ci5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1lcnJvciB7Y29sb3I6ICNmMDA7fQouY20tcy1kZWZhdWx0IHNwYW4uY20tcXVhbGlmaWVyIHtjb2xvcjogIzU1NTt9Ci5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1idWlsdGluIHtjb2xvcjogIzMwYTt9Ci5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1icmFja2V0IHtjb2xvcjogI2NjNzt9Ci5jbS1zLWRlZmF1bHQgc3Bhbi5jbS10YWcge2NvbG9yOiAjMTcwO30KLmNtLXMtZGVmYXVsdCBzcGFuLmNtLWF0dHJpYnV0ZSB7Y29sb3I6ICMwMGM7fQouY20tcy1kZWZhdWx0IHNwYW4uY20taGVhZGVyIHtjb2xvcjogI2EwYTt9Ci5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1xdW90ZSB7Y29sb3I6ICMwOTA7fQouY20tcy1kZWZhdWx0IHNwYW4uY20taHIge2NvbG9yOiAjOTk5O30KLmNtLXMtZGVmYXVsdCBzcGFuLmNtLWxpbmsge2NvbG9yOiAjMDBjO30KCnNwYW4uY20taGVhZGVyLCBzcGFuLmNtLXN0cm9uZyB7Zm9udC13ZWlnaHQ6IGJvbGQ7fQpzcGFuLmNtLWVtIHtmb250LXN0eWxlOiBpdGFsaWM7fQpzcGFuLmNtLWVtc3Ryb25nIHtmb250LXN0eWxlOiBpdGFsaWM7IGZvbnQtd2VpZ2h0OiBib2xkO30Kc3Bhbi5jbS1saW5rIHt0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTt9CgpkaXYuQ29kZU1pcnJvciBzcGFuLkNvZGVNaXJyb3ItbWF0Y2hpbmdicmFja2V0IHtjb2xvcjogIzBmMDt9CmRpdi5Db2RlTWlycm9yIHNwYW4uQ29kZU1pcnJvci1ub25tYXRjaGluZ2JyYWNrZXQge2NvbG9yOiAjZjIyO30K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/codemirror.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gQ29kZU1pcnJvciB2ZXJzaW9uIDIuMjEKLy8KLy8gQWxsIGZ1bmN0aW9ucyB0aGF0IG5lZWQgYWNjZXNzIHRvIHRoZSBlZGl0b3IncyBzdGF0ZSBsaXZlIGluc2lkZQovLyB0aGUgQ29kZU1pcnJvciBmdW5jdGlvbi4gQmVsb3cgdGhhdCwgYXQgdGhlIGJvdHRvbSBvZiB0aGUgZmlsZSwKLy8gc29tZSB1dGlsaXRpZXMgYXJlIGRlZmluZWQuCgovLyBDb2RlTWlycm9yIGlzIHRoZSBvbmx5IGdsb2JhbCB2YXIgd2UgY2xhaW0KdmFyIENvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgLy8gVGhpcyBpcyB0aGUgZnVuY3Rpb24gdGhhdCBwcm9kdWNlcyBhbiBlZGl0b3IgaW5zdGFuY2UuIEl0J3MKICAvLyBjbG9zdXJlIGlzIHVzZWQgdG8gc3RvcmUgdGhlIGVkaXRvciBzdGF0ZS4KICBmdW5jdGlvbiBDb2RlTWlycm9yKHBsYWNlLCBnaXZlbk9wdGlvbnMpIHsKICAgIC8vIERldGVybWluZSBlZmZlY3RpdmUgb3B0aW9ucyBiYXNlZCBvbiBnaXZlbiB2YWx1ZXMgYW5kIGRlZmF1bHRzLgogICAgdmFyIG9wdGlvbnMgPSB7fSwgZGVmYXVsdHMgPSBDb2RlTWlycm9yLmRlZmF1bHRzOwogICAgZm9yICh2YXIgb3B0IGluIGRlZmF1bHRzKQogICAgICBpZiAoZGVmYXVsdHMuaGFzT3duUHJvcGVydHkob3B0KSkKICAgICAgICBvcHRpb25zW29wdF0gPSAoZ2l2ZW5PcHRpb25zICYmIGdpdmVuT3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShvcHQpID8gZ2l2ZW5PcHRpb25zIDogZGVmYXVsdHMpW29wdF07CgogICAgdmFyIHRhcmdldERvY3VtZW50ID0gb3B0aW9uc1siZG9jdW1lbnQiXTsKICAgIC8vIFRoZSBlbGVtZW50IGluIHdoaWNoIHRoZSBlZGl0b3IgbGl2ZXMuCiAgICB2YXIgd3JhcHBlciA9IHRhcmdldERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgd3JhcHBlci5jbGFzc05hbWUgPSAiQ29kZU1pcnJvciIgKyAob3B0aW9ucy5saW5lV3JhcHBpbmcgPyAiIENvZGVNaXJyb3Itd3JhcCIgOiAiIik7CiAgICAvLyBUaGlzIG1lc3MgY3JlYXRlcyB0aGUgYmFzZSBET00gc3RydWN0dXJlIGZvciB0aGUgZWRpdG9yLgogICAgd3JhcHBlci5pbm5lckhUTUwgPQogICAgICAnPGRpdiBzdHlsZT0ib3ZlcmZsb3c6IGhpZGRlbjsgcG9zaXRpb246IHJlbGF0aXZlOyB3aWR0aDogM3B4OyBoZWlnaHQ6IDBweDsiPicgKyAvLyBXcmFwcyBhbmQgaGlkZXMgaW5wdXQgdGV4dGFyZWEKICAgICAgICAnPHRleHRhcmVhIHN0eWxlPSJwb3NpdGlvbjogYWJzb2x1dGU7IHBhZGRpbmc6IDA7IHdpZHRoOiAxcHg7IGhlaWdodDogMWVtIiB3cmFwPSJvZmYiICcgKwogICAgICAgICAgJ2F1dG9jb3JyZWN0PSJvZmYiIGF1dG9jYXBpdGFsaXplPSJvZmYiPjwvdGV4dGFyZWE+PC9kaXY+JyArCiAgICAgICc8ZGl2IGNsYXNzPSJDb2RlTWlycm9yLXNjcm9sbCIgdGFiaW5kZXg9Ii0xIj4nICsKICAgICAgICAnPGRpdiBzdHlsZT0icG9zaXRpb246IHJlbGF0aXZlIj4nICsgLy8gU2V0IHRvIHRoZSBoZWlnaHQgb2YgdGhlIHRleHQsIGNhdXNlcyBzY3JvbGxpbmcKICAgICAgICAgICc8ZGl2IHN0eWxlPSJwb3NpdGlvbjogcmVsYXRpdmUiPicgKyAvLyBNb3ZlZCBhcm91bmQgaXRzIHBhcmVudCB0byBjb3ZlciB2aXNpYmxlIHZpZXcKICAgICAgICAgICAgJzxkaXYgY2xhc3M9IkNvZGVNaXJyb3ItZ3V0dGVyIj48ZGl2IGNsYXNzPSJDb2RlTWlycm9yLWd1dHRlci10ZXh0Ij48L2Rpdj48L2Rpdj4nICsKICAgICAgICAgICAgLy8gUHJvdmlkZXMgcG9zaXRpb25pbmcgcmVsYXRpdmUgdG8gKHZpc2libGUpIHRleHQgb3JpZ2luCiAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJDb2RlTWlycm9yLWxpbmVzIj48ZGl2IHN0eWxlPSJwb3NpdGlvbjogcmVsYXRpdmU7IHotaW5kZXg6IDAiPicgKwogICAgICAgICAgICAgICc8ZGl2IHN0eWxlPSJwb3NpdGlvbjogYWJzb2x1dGU7IHdpZHRoOiAxMDAlOyBoZWlnaHQ6IDA7IG92ZXJmbG93OiBoaWRkZW47IHZpc2liaWxpdHk6IGhpZGRlbjsgb3V0bGluZTogNXB4IGF1dG8gbm9uZSI+PC9kaXY+JyArCiAgICAgICAgICAgICAgJzxwcmUgY2xhc3M9IkNvZGVNaXJyb3ItY3Vyc29yIj4mIzE2MDs8L3ByZT4nICsgLy8gQWJzb2x1dGVseSBwb3NpdGlvbmVkIGJsaW5reSBjdXJzb3IKICAgICAgICAgICAgICAnPGRpdiBzdHlsZT0icG9zaXRpb246IHJlbGF0aXZlOyB6LWluZGV4OiAtMSI+PC9kaXY+PGRpdj48L2Rpdj4nICsgLy8gRElWcyBjb250YWluaW5nIHRoZSBzZWxlY3Rpb24gYW5kIHRoZSBhY3R1YWwgY29kZQogICAgICAgICAgICAnPC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+JzsKICAgIGlmIChwbGFjZS5hcHBlbmRDaGlsZCkgcGxhY2UuYXBwZW5kQ2hpbGQod3JhcHBlcik7IGVsc2UgcGxhY2Uod3JhcHBlcik7CiAgICAvLyBJJ3ZlIG5ldmVyIHNlZW4gbW9yZSBlbGVnYW50IGNvZGUgaW4gbXkgbGlmZS4KICAgIHZhciBpbnB1dERpdiA9IHdyYXBwZXIuZmlyc3RDaGlsZCwgaW5wdXQgPSBpbnB1dERpdi5maXJzdENoaWxkLAogICAgICAgIHNjcm9sbGVyID0gd3JhcHBlci5sYXN0Q2hpbGQsIGNvZGUgPSBzY3JvbGxlci5maXJzdENoaWxkLAogICAgICAgIG1vdmVyID0gY29kZS5maXJzdENoaWxkLCBndXR0ZXIgPSBtb3Zlci5maXJzdENoaWxkLCBndXR0ZXJUZXh0ID0gZ3V0dGVyLmZpcnN0Q2hpbGQsCiAgICAgICAgbGluZVNwYWNlID0gZ3V0dGVyLm5leHRTaWJsaW5nLmZpcnN0Q2hpbGQsIG1lYXN1cmUgPSBsaW5lU3BhY2UuZmlyc3RDaGlsZCwKICAgICAgICBjdXJzb3IgPSBtZWFzdXJlLm5leHRTaWJsaW5nLCBzZWxlY3Rpb25EaXYgPSBjdXJzb3IubmV4dFNpYmxpbmcsCiAgICAgICAgbGluZURpdiA9IHNlbGVjdGlvbkRpdi5uZXh0U2libGluZzsKICAgIHRoZW1lQ2hhbmdlZCgpOwogICAgLy8gTmVlZGVkIHRvIGhpZGUgYmlnIGJsdWUgYmxpbmtpbmcgY3Vyc29yIG9uIE1vYmlsZSBTYWZhcmkKICAgIGlmIChpb3MpIGlucHV0LnN0eWxlLndpZHRoID0gIjBweCI7CiAgICBpZiAoIXdlYmtpdCkgbGluZVNwYWNlLmRyYWdnYWJsZSA9IHRydWU7CiAgICBsaW5lU3BhY2Uuc3R5bGUub3V0bGluZSA9ICJub25lIjsKICAgIGlmIChvcHRpb25zLnRhYmluZGV4ICE9IG51bGwpIGlucHV0LnRhYkluZGV4ID0gb3B0aW9ucy50YWJpbmRleDsKICAgIGlmICghb3B0aW9ucy5ndXR0ZXIgJiYgIW9wdGlvbnMubGluZU51bWJlcnMpIGd1dHRlci5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwoKICAgIC8vIENoZWNrIGZvciBwcm9ibGVtIHdpdGggSUUgaW5uZXJIVE1MIG5vdCB3b3JraW5nIHdoZW4gd2UgaGF2ZSBhCiAgICAvLyBQIChvciBzaW1pbGFyKSBwYXJlbnQgbm9kZS4KICAgIHRyeSB7IHN0cmluZ1dpZHRoKCJ4Iik7IH0KICAgIGNhdGNoIChlKSB7CiAgICAgIGlmIChlLm1lc3NhZ2UubWF0Y2goL3J1bnRpbWUvaSkpCiAgICAgICAgZSA9IG5ldyBFcnJvcigiQSBDb2RlTWlycm9yIGluc2lkZSBhIFAtc3R5bGUgZWxlbWVudCBkb2VzIG5vdCB3b3JrIGluIEludGVybmV0IEV4cGxvcmVyLiAoaW5uZXJIVE1MIGJ1ZykiKTsKICAgICAgdGhyb3cgZTsKICAgIH0KCiAgICAvLyBEZWxheWVkIG9iamVjdCB3cmFwIHRpbWVvdXRzLCBtYWtpbmcgc3VyZSBvbmx5IG9uZSBpcyBhY3RpdmUuIGJsaW5rZXIgaG9sZHMgYW4gaW50ZXJ2YWwuCiAgICB2YXIgcG9sbCA9IG5ldyBEZWxheWVkKCksIGhpZ2hsaWdodCA9IG5ldyBEZWxheWVkKCksIGJsaW5rZXI7CgogICAgLy8gbW9kZSBob2xkcyBhIG1vZGUgQVBJIG9iamVjdC4gZG9jIGlzIHRoZSB0cmVlIG9mIExpbmUgb2JqZWN0cywKICAgIC8vIHdvcmsgYW4gYXJyYXkgb2YgbGluZXMgdGhhdCBzaG91bGQgYmUgcGFyc2VkLCBhbmQgaGlzdG9yeSB0aGUKICAgIC8vIHVuZG8gaGlzdG9yeSAoaW5zdGFuY2Ugb2YgSGlzdG9yeSBjb25zdHJ1Y3RvcikuCiAgICB2YXIgbW9kZSwgZG9jID0gbmV3IEJyYW5jaENodW5rKFtuZXcgTGVhZkNodW5rKFtuZXcgTGluZSgiIildKV0pLCB3b3JrLCBmb2N1c2VkOwogICAgbG9hZE1vZGUoKTsKICAgIC8vIFRoZSBzZWxlY3Rpb24uIFRoZXNlIGFyZSBhbHdheXMgbWFpbnRhaW5lZCB0byBwb2ludCBhdCB2YWxpZAogICAgLy8gcG9zaXRpb25zLiBJbnZlcnRlZCBpcyB1c2VkIHRvIHJlbWVtYmVyIHRoYXQgdGhlIHVzZXIgaXMKICAgIC8vIHNlbGVjdGluZyBib3R0b20tdG8tdG9wLgogICAgdmFyIHNlbCA9IHtmcm9tOiB7bGluZTogMCwgY2g6IDB9LCB0bzoge2xpbmU6IDAsIGNoOiAwfSwgaW52ZXJ0ZWQ6IGZhbHNlfTsKICAgIC8vIFNlbGVjdGlvbi1yZWxhdGVkIGZsYWdzLiBzaGlmdFNlbGVjdGluZyBvYnZpb3VzbHkgdHJhY2tzCiAgICAvLyB3aGV0aGVyIHRoZSB1c2VyIGlzIGhvbGRpbmcgc2hpZnQuCiAgICB2YXIgc2hpZnRTZWxlY3RpbmcsIGxhc3RDbGljaywgbGFzdERvdWJsZUNsaWNrLCBsYXN0U2Nyb2xsUG9zID0gMCwgZHJhZ2dpbmdUZXh0LAogICAgICAgIG92ZXJ3cml0ZSA9IGZhbHNlLCBzdXBwcmVzc0VkaXRzID0gZmFsc2U7CiAgICAvLyBWYXJpYWJsZXMgdXNlZCBieSBzdGFydE9wZXJhdGlvbi9lbmRPcGVyYXRpb24gdG8gdHJhY2sgd2hhdAogICAgLy8gaGFwcGVuZWQgZHVyaW5nIHRoZSBvcGVyYXRpb24uCiAgICB2YXIgdXBkYXRlSW5wdXQsIHVzZXJTZWxDaGFuZ2UsIGNoYW5nZXMsIHRleHRDaGFuZ2VkLCBzZWxlY3Rpb25DaGFuZ2VkLCBsZWF2ZUlucHV0QWxvbmUsCiAgICAgICAgZ3V0dGVyRGlydHksIGNhbGxiYWNrczsKICAgIC8vIEN1cnJlbnQgdmlzaWJsZSByYW5nZSAobWF5IGJlIGJpZ2dlciB0aGFuIHRoZSB2aWV3IHdpbmRvdykuCiAgICB2YXIgZGlzcGxheU9mZnNldCA9IDAsIHNob3dpbmdGcm9tID0gMCwgc2hvd2luZ1RvID0gMCwgbGFzdFNpemVDID0gMDsKICAgIC8vIGJyYWNrZXRIaWdobGlnaHRlZCBpcyB1c2VkIHRvIHJlbWVtYmVyIHRoYXQgYSBiYWNrZXQgaGFzIGJlZW4KICAgIC8vIG1hcmtlZC4KICAgIHZhciBicmFja2V0SGlnaGxpZ2h0ZWQ7CiAgICAvLyBUcmFja3MgdGhlIG1heGltdW0gbGluZSBsZW5ndGggc28gdGhhdCB0aGUgaG9yaXpvbnRhbCBzY3JvbGxiYXIKICAgIC8vIGNhbiBiZSBrZXB0IHN0YXRpYyB3aGVuIHNjcm9sbGluZy4KICAgIHZhciBtYXhMaW5lID0gIiIsIG1heFdpZHRoLCB0YWJUZXh0ID0gY29tcHV0ZVRhYlRleHQoKTsKCiAgICAvLyBJbml0aWFsaXplIHRoZSBjb250ZW50LgogICAgb3BlcmF0aW9uKGZ1bmN0aW9uKCl7c2V0VmFsdWUob3B0aW9ucy52YWx1ZSB8fCAiIik7IHVwZGF0ZUlucHV0ID0gZmFsc2U7fSkoKTsKICAgIHZhciBoaXN0b3J5ID0gbmV3IEhpc3RvcnkoKTsKCiAgICAvLyBSZWdpc3RlciBvdXIgZXZlbnQgaGFuZGxlcnMuCiAgICBjb25uZWN0KHNjcm9sbGVyLCAibW91c2Vkb3duIiwgb3BlcmF0aW9uKG9uTW91c2VEb3duKSk7CiAgICBjb25uZWN0KHNjcm9sbGVyLCAiZGJsY2xpY2siLCBvcGVyYXRpb24ob25Eb3VibGVDbGljaykpOwogICAgY29ubmVjdChsaW5lU3BhY2UsICJkcmFnc3RhcnQiLCBvbkRyYWdTdGFydCk7CiAgICBjb25uZWN0KGxpbmVTcGFjZSwgInNlbGVjdHN0YXJ0IiwgZV9wcmV2ZW50RGVmYXVsdCk7CiAgICAvLyBHZWNrbyBicm93c2VycyBmaXJlIGNvbnRleHRtZW51ICphZnRlciogb3BlbmluZyB0aGUgbWVudSwgYXQKICAgIC8vIHdoaWNoIHBvaW50IHdlIGNhbid0IG1lc3Mgd2l0aCBpdCBhbnltb3JlLiBDb250ZXh0IG1lbnUgaXMKICAgIC8vIGhhbmRsZWQgaW4gb25Nb3VzZURvd24gZm9yIEdlY2tvLgogICAgaWYgKCFnZWNrbykgY29ubmVjdChzY3JvbGxlciwgImNvbnRleHRtZW51Iiwgb25Db250ZXh0TWVudSk7CiAgICBjb25uZWN0KHNjcm9sbGVyLCAic2Nyb2xsIiwgZnVuY3Rpb24oKSB7CiAgICAgIGxhc3RTY3JvbGxQb3MgPSBzY3JvbGxlci5zY3JvbGxUb3A7CiAgICAgIHVwZGF0ZURpc3BsYXkoW10pOwogICAgICBpZiAob3B0aW9ucy5maXhlZEd1dHRlcikgZ3V0dGVyLnN0eWxlLmxlZnQgPSBzY3JvbGxlci5zY3JvbGxMZWZ0ICsgInB4IjsKICAgICAgaWYgKG9wdGlvbnMub25TY3JvbGwpIG9wdGlvbnMub25TY3JvbGwoaW5zdGFuY2UpOwogICAgfSk7CiAgICBjb25uZWN0KHdpbmRvdywgInJlc2l6ZSIsIGZ1bmN0aW9uKCkge3VwZGF0ZURpc3BsYXkodHJ1ZSk7fSk7CiAgICBjb25uZWN0KGlucHV0LCAia2V5dXAiLCBvcGVyYXRpb24ob25LZXlVcCkpOwogICAgY29ubmVjdChpbnB1dCwgImlucHV0IiwgZmFzdFBvbGwpOwogICAgY29ubmVjdChpbnB1dCwgImtleWRvd24iLCBvcGVyYXRpb24ob25LZXlEb3duKSk7CiAgICBjb25uZWN0KGlucHV0LCAia2V5cHJlc3MiLCBvcGVyYXRpb24ob25LZXlQcmVzcykpOwogICAgY29ubmVjdChpbnB1dCwgImZvY3VzIiwgb25Gb2N1cyk7CiAgICBjb25uZWN0KGlucHV0LCAiYmx1ciIsIG9uQmx1cik7CgogICAgY29ubmVjdChzY3JvbGxlciwgImRyYWdlbnRlciIsIGVfc3RvcCk7CiAgICBjb25uZWN0KHNjcm9sbGVyLCAiZHJhZ292ZXIiLCBlX3N0b3ApOwogICAgY29ubmVjdChzY3JvbGxlciwgImRyb3AiLCBvcGVyYXRpb24ob25Ecm9wKSk7CiAgICBjb25uZWN0KHNjcm9sbGVyLCAicGFzdGUiLCBmdW5jdGlvbigpe2ZvY3VzSW5wdXQoKTsgZmFzdFBvbGwoKTt9KTsKICAgIGNvbm5lY3QoaW5wdXQsICJwYXN0ZSIsIGZhc3RQb2xsKTsKICAgIGNvbm5lY3QoaW5wdXQsICJjdXQiLCBvcGVyYXRpb24oZnVuY3Rpb24oKXsKICAgICAgaWYgKCFvcHRpb25zLnJlYWRPbmx5KSByZXBsYWNlU2VsZWN0aW9uKCIiKTsKICAgIH0pKTsKCiAgICAvLyBJRSB0aHJvd3MgdW5zcGVjaWZpZWQgZXJyb3IgaW4gY2VydGFpbiBjYXNlcywgd2hlbgogICAgLy8gdHJ5aW5nIHRvIGFjY2VzcyBhY3RpdmVFbGVtZW50IGJlZm9yZSBvbmxvYWQKICAgIHZhciBoYXNGb2N1czsgdHJ5IHsgaGFzRm9jdXMgPSAodGFyZ2V0RG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PSBpbnB1dCk7IH0gY2F0Y2goZSkgeyB9CiAgICBpZiAoaGFzRm9jdXMpIHNldFRpbWVvdXQob25Gb2N1cywgMjApOwogICAgZWxzZSBvbkJsdXIoKTsKCiAgICBmdW5jdGlvbiBpc0xpbmUobCkge3JldHVybiBsID49IDAgJiYgbCA8IGRvYy5zaXplO30KICAgIC8vIFRoZSBpbnN0YW5jZSBvYmplY3QgdGhhdCB3ZSdsbCByZXR1cm4uIE1vc3RseSBjYWxscyBvdXQgdG8KICAgIC8vIGxvY2FsIGZ1bmN0aW9ucyBpbiB0aGUgQ29kZU1pcnJvciBmdW5jdGlvbi4gU29tZSBkbyBzb21lIGV4dHJhCiAgICAvLyByYW5nZSBjaGVja2luZyBhbmQvb3IgY2xpcHBpbmcuIG9wZXJhdGlvbiBpcyB1c2VkIHRvIHdyYXAgdGhlCiAgICAvLyBjYWxsIHNvIHRoYXQgY2hhbmdlcyBpdCBtYWtlcyBhcmUgdHJhY2tlZCwgYW5kIHRoZSBkaXNwbGF5IGlzCiAgICAvLyB1cGRhdGVkIGFmdGVyd2FyZHMuCiAgICB2YXIgaW5zdGFuY2UgPSB3cmFwcGVyLkNvZGVNaXJyb3IgPSB7CiAgICAgIGdldFZhbHVlOiBnZXRWYWx1ZSwKICAgICAgc2V0VmFsdWU6IG9wZXJhdGlvbihzZXRWYWx1ZSksCiAgICAgIGdldFNlbGVjdGlvbjogZ2V0U2VsZWN0aW9uLAogICAgICByZXBsYWNlU2VsZWN0aW9uOiBvcGVyYXRpb24ocmVwbGFjZVNlbGVjdGlvbiksCiAgICAgIGZvY3VzOiBmdW5jdGlvbigpe2ZvY3VzSW5wdXQoKTsgb25Gb2N1cygpOyBmYXN0UG9sbCgpO30sCiAgICAgIHNldE9wdGlvbjogZnVuY3Rpb24ob3B0aW9uLCB2YWx1ZSkgewogICAgICAgIHZhciBvbGRWYWwgPSBvcHRpb25zW29wdGlvbl07CiAgICAgICAgb3B0aW9uc1tvcHRpb25dID0gdmFsdWU7CiAgICAgICAgaWYgKG9wdGlvbiA9PSAibW9kZSIgfHwgb3B0aW9uID09ICJpbmRlbnRVbml0IikgbG9hZE1vZGUoKTsKICAgICAgICBlbHNlIGlmIChvcHRpb24gPT0gInJlYWRPbmx5IiAmJiB2YWx1ZSA9PSAibm9jdXJzb3IiKSB7b25CbHVyKCk7IGlucHV0LmJsdXIoKTt9CiAgICAgICAgZWxzZSBpZiAob3B0aW9uID09ICJyZWFkT25seSIgJiYgIXZhbHVlKSB7cmVzZXRJbnB1dCh0cnVlKTt9CiAgICAgICAgZWxzZSBpZiAob3B0aW9uID09ICJ0aGVtZSIpIHRoZW1lQ2hhbmdlZCgpOwogICAgICAgIGVsc2UgaWYgKG9wdGlvbiA9PSAibGluZVdyYXBwaW5nIiAmJiBvbGRWYWwgIT0gdmFsdWUpIG9wZXJhdGlvbih3cmFwcGluZ0NoYW5nZWQpKCk7CiAgICAgICAgZWxzZSBpZiAob3B0aW9uID09ICJ0YWJTaXplIikgb3BlcmF0aW9uKHRhYnNDaGFuZ2VkKSgpOwogICAgICAgIGlmIChvcHRpb24gPT0gImxpbmVOdW1iZXJzIiB8fCBvcHRpb24gPT0gImd1dHRlciIgfHwgb3B0aW9uID09ICJmaXJzdExpbmVOdW1iZXIiIHx8IG9wdGlvbiA9PSAidGhlbWUiKQogICAgICAgICAgdXBkYXRlRGlzcGxheSh0cnVlKTsKICAgICAgfSwKICAgICAgZ2V0T3B0aW9uOiBmdW5jdGlvbihvcHRpb24pIHtyZXR1cm4gb3B0aW9uc1tvcHRpb25dO30sCiAgICAgIHVuZG86IG9wZXJhdGlvbih1bmRvKSwKICAgICAgcmVkbzogb3BlcmF0aW9uKHJlZG8pLAogICAgICBpbmRlbnRMaW5lOiBvcGVyYXRpb24oZnVuY3Rpb24obiwgZGlyKSB7CiAgICAgICAgaWYgKHR5cGVvZiBkaXIgIT0gInN0cmluZyIpIHsKICAgICAgICAgIGlmIChkaXIgPT0gbnVsbCkgZGlyID0gb3B0aW9ucy5zbWFydEluZGVudCA/ICJzbWFydCIgOiAicHJldiI7CiAgICAgICAgICBlbHNlIGRpciA9IGRpciA/ICJhZGQiIDogInN1YnRyYWN0IjsKICAgICAgICB9CiAgICAgICAgaWYgKGlzTGluZShuKSkgaW5kZW50TGluZShuLCBkaXIpOwogICAgICB9KSwKICAgICAgaW5kZW50U2VsZWN0aW9uOiBvcGVyYXRpb24oaW5kZW50U2VsZWN0ZWQpLAogICAgICBoaXN0b3J5U2l6ZTogZnVuY3Rpb24oKSB7cmV0dXJuIHt1bmRvOiBoaXN0b3J5LmRvbmUubGVuZ3RoLCByZWRvOiBoaXN0b3J5LnVuZG9uZS5sZW5ndGh9O30sCiAgICAgIGNsZWFySGlzdG9yeTogZnVuY3Rpb24oKSB7aGlzdG9yeSA9IG5ldyBIaXN0b3J5KCk7fSwKICAgICAgbWF0Y2hCcmFja2V0czogb3BlcmF0aW9uKGZ1bmN0aW9uKCl7bWF0Y2hCcmFja2V0cyh0cnVlKTt9KSwKICAgICAgZ2V0VG9rZW5BdDogb3BlcmF0aW9uKGZ1bmN0aW9uKHBvcykgewogICAgICAgIHBvcyA9IGNsaXBQb3MocG9zKTsKICAgICAgICByZXR1cm4gZ2V0TGluZShwb3MubGluZSkuZ2V0VG9rZW5BdChtb2RlLCBnZXRTdGF0ZUJlZm9yZShwb3MubGluZSksIHBvcy5jaCk7CiAgICAgIH0pLAogICAgICBnZXRTdGF0ZUFmdGVyOiBmdW5jdGlvbihsaW5lKSB7CiAgICAgICAgbGluZSA9IGNsaXBMaW5lKGxpbmUgPT0gbnVsbCA/IGRvYy5zaXplIC0gMTogbGluZSk7CiAgICAgICAgcmV0dXJuIGdldFN0YXRlQmVmb3JlKGxpbmUgKyAxKTsKICAgICAgfSwKICAgICAgY3Vyc29yQ29vcmRzOiBmdW5jdGlvbihzdGFydCl7CiAgICAgICAgaWYgKHN0YXJ0ID09IG51bGwpIHN0YXJ0ID0gc2VsLmludmVydGVkOwogICAgICAgIHJldHVybiBwYWdlQ29vcmRzKHN0YXJ0ID8gc2VsLmZyb20gOiBzZWwudG8pOwogICAgICB9LAogICAgICBjaGFyQ29vcmRzOiBmdW5jdGlvbihwb3Mpe3JldHVybiBwYWdlQ29vcmRzKGNsaXBQb3MocG9zKSk7fSwKICAgICAgY29vcmRzQ2hhcjogZnVuY3Rpb24oY29vcmRzKSB7CiAgICAgICAgdmFyIG9mZiA9IGVsdE9mZnNldChsaW5lU3BhY2UpOwogICAgICAgIHJldHVybiBjb29yZHNDaGFyKGNvb3Jkcy54IC0gb2ZmLmxlZnQsIGNvb3Jkcy55IC0gb2ZmLnRvcCk7CiAgICAgIH0sCiAgICAgIG1hcmtUZXh0OiBvcGVyYXRpb24obWFya1RleHQpLAogICAgICBzZXRCb29rbWFyazogc2V0Qm9va21hcmssCiAgICAgIHNldE1hcmtlcjogb3BlcmF0aW9uKGFkZEd1dHRlck1hcmtlciksCiAgICAgIGNsZWFyTWFya2VyOiBvcGVyYXRpb24ocmVtb3ZlR3V0dGVyTWFya2VyKSwKICAgICAgc2V0TGluZUNsYXNzOiBvcGVyYXRpb24oc2V0TGluZUNsYXNzKSwKICAgICAgaGlkZUxpbmU6IG9wZXJhdGlvbihmdW5jdGlvbihoKSB7cmV0dXJuIHNldExpbmVIaWRkZW4oaCwgdHJ1ZSk7fSksCiAgICAgIHNob3dMaW5lOiBvcGVyYXRpb24oZnVuY3Rpb24oaCkge3JldHVybiBzZXRMaW5lSGlkZGVuKGgsIGZhbHNlKTt9KSwKICAgICAgb25EZWxldGVMaW5lOiBmdW5jdGlvbihsaW5lLCBmKSB7CiAgICAgICAgaWYgKHR5cGVvZiBsaW5lID09ICJudW1iZXIiKSB7CiAgICAgICAgICBpZiAoIWlzTGluZShsaW5lKSkgcmV0dXJuIG51bGw7CiAgICAgICAgICBsaW5lID0gZ2V0TGluZShsaW5lKTsKICAgICAgICB9CiAgICAgICAgKGxpbmUuaGFuZGxlcnMgfHwgKGxpbmUuaGFuZGxlcnMgPSBbXSkpLnB1c2goZik7CiAgICAgICAgcmV0dXJuIGxpbmU7CiAgICAgIH0sCiAgICAgIGxpbmVJbmZvOiBsaW5lSW5mbywKICAgICAgYWRkV2lkZ2V0OiBmdW5jdGlvbihwb3MsIG5vZGUsIHNjcm9sbCwgdmVydCwgaG9yaXopIHsKICAgICAgICBwb3MgPSBsb2NhbENvb3JkcyhjbGlwUG9zKHBvcykpOwogICAgICAgIHZhciB0b3AgPSBwb3MueUJvdCwgbGVmdCA9IHBvcy54OwogICAgICAgIG5vZGUuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOwogICAgICAgIGNvZGUuYXBwZW5kQ2hpbGQobm9kZSk7CiAgICAgICAgaWYgKHZlcnQgPT0gIm92ZXIiKSB0b3AgPSBwb3MueTsKICAgICAgICBlbHNlIGlmICh2ZXJ0ID09ICJuZWFyIikgewogICAgICAgICAgdmFyIHZzcGFjZSA9IE1hdGgubWF4KHNjcm9sbGVyLm9mZnNldEhlaWdodCwgZG9jLmhlaWdodCAqIHRleHRIZWlnaHQoKSksCiAgICAgICAgICAgICAgaHNwYWNlID0gTWF0aC5tYXgoY29kZS5jbGllbnRXaWR0aCwgbGluZVNwYWNlLmNsaWVudFdpZHRoKSAtIHBhZGRpbmdMZWZ0KCk7CiAgICAgICAgICBpZiAocG9zLnlCb3QgKyBub2RlLm9mZnNldEhlaWdodCA+IHZzcGFjZSAmJiBwb3MueSA+IG5vZGUub2Zmc2V0SGVpZ2h0KQogICAgICAgICAgICB0b3AgPSBwb3MueSAtIG5vZGUub2Zmc2V0SGVpZ2h0OwogICAgICAgICAgaWYgKGxlZnQgKyBub2RlLm9mZnNldFdpZHRoID4gaHNwYWNlKQogICAgICAgICAgICBsZWZ0ID0gaHNwYWNlIC0gbm9kZS5vZmZzZXRXaWR0aDsKICAgICAgICB9CiAgICAgICAgbm9kZS5zdHlsZS50b3AgPSAodG9wICsgcGFkZGluZ1RvcCgpKSArICJweCI7CiAgICAgICAgbm9kZS5zdHlsZS5sZWZ0ID0gbm9kZS5zdHlsZS5yaWdodCA9ICIiOwogICAgICAgIGlmIChob3JpeiA9PSAicmlnaHQiKSB7CiAgICAgICAgICBsZWZ0ID0gY29kZS5jbGllbnRXaWR0aCAtIG5vZGUub2Zmc2V0V2lkdGg7CiAgICAgICAgICBub2RlLnN0eWxlLnJpZ2h0ID0gIjBweCI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmIChob3JpeiA9PSAibGVmdCIpIGxlZnQgPSAwOwogICAgICAgICAgZWxzZSBpZiAoaG9yaXogPT0gIm1pZGRsZSIpIGxlZnQgPSAoY29kZS5jbGllbnRXaWR0aCAtIG5vZGUub2Zmc2V0V2lkdGgpIC8gMjsKICAgICAgICAgIG5vZGUuc3R5bGUubGVmdCA9IChsZWZ0ICsgcGFkZGluZ0xlZnQoKSkgKyAicHgiOwogICAgICAgIH0KICAgICAgICBpZiAoc2Nyb2xsKQogICAgICAgICAgc2Nyb2xsSW50b1ZpZXcobGVmdCwgdG9wLCBsZWZ0ICsgbm9kZS5vZmZzZXRXaWR0aCwgdG9wICsgbm9kZS5vZmZzZXRIZWlnaHQpOwogICAgICB9LAoKICAgICAgbGluZUNvdW50OiBmdW5jdGlvbigpIHtyZXR1cm4gZG9jLnNpemU7fSwKICAgICAgY2xpcFBvczogY2xpcFBvcywKICAgICAgZ2V0Q3Vyc29yOiBmdW5jdGlvbihzdGFydCkgewogICAgICAgIGlmIChzdGFydCA9PSBudWxsKSBzdGFydCA9IHNlbC5pbnZlcnRlZDsKICAgICAgICByZXR1cm4gY29weVBvcyhzdGFydCA/IHNlbC5mcm9tIDogc2VsLnRvKTsKICAgICAgfSwKICAgICAgc29tZXRoaW5nU2VsZWN0ZWQ6IGZ1bmN0aW9uKCkge3JldHVybiAhcG9zRXEoc2VsLmZyb20sIHNlbC50byk7fSwKICAgICAgc2V0Q3Vyc29yOiBvcGVyYXRpb24oZnVuY3Rpb24obGluZSwgY2gsIHVzZXIpIHsKICAgICAgICBpZiAoY2ggPT0gbnVsbCAmJiB0eXBlb2YgbGluZS5saW5lID09ICJudW1iZXIiKSBzZXRDdXJzb3IobGluZS5saW5lLCBsaW5lLmNoLCB1c2VyKTsKICAgICAgICBlbHNlIHNldEN1cnNvcihsaW5lLCBjaCwgdXNlcik7CiAgICAgIH0pLAogICAgICBzZXRTZWxlY3Rpb246IG9wZXJhdGlvbihmdW5jdGlvbihmcm9tLCB0bywgdXNlcikgewogICAgICAgICh1c2VyID8gc2V0U2VsZWN0aW9uVXNlciA6IHNldFNlbGVjdGlvbikoY2xpcFBvcyhmcm9tKSwgY2xpcFBvcyh0byB8fCBmcm9tKSk7CiAgICAgIH0pLAogICAgICBnZXRMaW5lOiBmdW5jdGlvbihsaW5lKSB7aWYgKGlzTGluZShsaW5lKSkgcmV0dXJuIGdldExpbmUobGluZSkudGV4dDt9LAogICAgICBnZXRMaW5lSGFuZGxlOiBmdW5jdGlvbihsaW5lKSB7aWYgKGlzTGluZShsaW5lKSkgcmV0dXJuIGdldExpbmUobGluZSk7fSwKICAgICAgc2V0TGluZTogb3BlcmF0aW9uKGZ1bmN0aW9uKGxpbmUsIHRleHQpIHsKICAgICAgICBpZiAoaXNMaW5lKGxpbmUpKSByZXBsYWNlUmFuZ2UodGV4dCwge2xpbmU6IGxpbmUsIGNoOiAwfSwge2xpbmU6IGxpbmUsIGNoOiBnZXRMaW5lKGxpbmUpLnRleHQubGVuZ3RofSk7CiAgICAgIH0pLAogICAgICByZW1vdmVMaW5lOiBvcGVyYXRpb24oZnVuY3Rpb24obGluZSkgewogICAgICAgIGlmIChpc0xpbmUobGluZSkpIHJlcGxhY2VSYW5nZSgiIiwge2xpbmU6IGxpbmUsIGNoOiAwfSwgY2xpcFBvcyh7bGluZTogbGluZSsxLCBjaDogMH0pKTsKICAgICAgfSksCiAgICAgIHJlcGxhY2VSYW5nZTogb3BlcmF0aW9uKHJlcGxhY2VSYW5nZSksCiAgICAgIGdldFJhbmdlOiBmdW5jdGlvbihmcm9tLCB0bykge3JldHVybiBnZXRSYW5nZShjbGlwUG9zKGZyb20pLCBjbGlwUG9zKHRvKSk7fSwKCiAgICAgIGV4ZWNDb21tYW5kOiBmdW5jdGlvbihjbWQpIHtyZXR1cm4gY29tbWFuZHNbY21kXShpbnN0YW5jZSk7fSwKICAgICAgLy8gU3R1ZmYgdXNlZCBieSBjb21tYW5kcywgcHJvYmFibHkgbm90IG11Y2ggdXNlIHRvIG91dHNpZGUgY29kZS4KICAgICAgbW92ZUg6IG9wZXJhdGlvbihtb3ZlSCksCiAgICAgIGRlbGV0ZUg6IG9wZXJhdGlvbihkZWxldGVIKSwKICAgICAgbW92ZVY6IG9wZXJhdGlvbihtb3ZlViksCiAgICAgIHRvZ2dsZU92ZXJ3cml0ZTogZnVuY3Rpb24oKSB7b3ZlcndyaXRlID0gIW92ZXJ3cml0ZTt9LAoKICAgICAgcG9zRnJvbUluZGV4OiBmdW5jdGlvbihvZmYpIHsKICAgICAgICB2YXIgbGluZU5vID0gMCwgY2g7CiAgICAgICAgZG9jLml0ZXIoMCwgZG9jLnNpemUsIGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgICAgIHZhciBzeiA9IGxpbmUudGV4dC5sZW5ndGggKyAxOwogICAgICAgICAgaWYgKHN6ID4gb2ZmKSB7IGNoID0gb2ZmOyByZXR1cm4gdHJ1ZTsgfQogICAgICAgICAgb2ZmIC09IHN6OwogICAgICAgICAgKytsaW5lTm87CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIGNsaXBQb3Moe2xpbmU6IGxpbmVObywgY2g6IGNofSk7CiAgICAgIH0sCiAgICAgIGluZGV4RnJvbVBvczogZnVuY3Rpb24gKGNvb3JkcykgewogICAgICAgIGlmIChjb29yZHMubGluZSA8IDAgfHwgY29vcmRzLmNoIDwgMCkgcmV0dXJuIDA7CiAgICAgICAgdmFyIGluZGV4ID0gY29vcmRzLmNoOwogICAgICAgIGRvYy5pdGVyKDAsIGNvb3Jkcy5saW5lLCBmdW5jdGlvbiAobGluZSkgewogICAgICAgICAgaW5kZXggKz0gbGluZS50ZXh0Lmxlbmd0aCArIDE7CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIGluZGV4OwogICAgICB9LAogICAgICBzY3JvbGxUbzogZnVuY3Rpb24oeCwgeSkgewogICAgICAgIGlmICh4ICE9IG51bGwpIHNjcm9sbGVyLnNjcm9sbFRvcCA9IHg7CiAgICAgICAgaWYgKHkgIT0gbnVsbCkgc2Nyb2xsZXIuc2Nyb2xsTGVmdCA9IHk7CiAgICAgICAgdXBkYXRlRGlzcGxheShbXSk7CiAgICAgIH0sCgogICAgICBvcGVyYXRpb246IGZ1bmN0aW9uKGYpe3JldHVybiBvcGVyYXRpb24oZikoKTt9LAogICAgICByZWZyZXNoOiBmdW5jdGlvbigpewogICAgICAgIHVwZGF0ZURpc3BsYXkodHJ1ZSk7CiAgICAgICAgaWYgKHNjcm9sbGVyLnNjcm9sbEhlaWdodCA+IGxhc3RTY3JvbGxQb3MpCiAgICAgICAgICBzY3JvbGxlci5zY3JvbGxUb3AgPSBsYXN0U2Nyb2xsUG9zOwogICAgICB9LAogICAgICBnZXRJbnB1dEZpZWxkOiBmdW5jdGlvbigpe3JldHVybiBpbnB1dDt9LAogICAgICBnZXRXcmFwcGVyRWxlbWVudDogZnVuY3Rpb24oKXtyZXR1cm4gd3JhcHBlcjt9LAogICAgICBnZXRTY3JvbGxlckVsZW1lbnQ6IGZ1bmN0aW9uKCl7cmV0dXJuIHNjcm9sbGVyO30sCiAgICAgIGdldEd1dHRlckVsZW1lbnQ6IGZ1bmN0aW9uKCl7cmV0dXJuIGd1dHRlcjt9CiAgICB9OwoKICAgIGZ1bmN0aW9uIGdldExpbmUobikgeyByZXR1cm4gZ2V0TGluZUF0KGRvYywgbik7IH0KICAgIGZ1bmN0aW9uIHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgaGVpZ2h0KSB7CiAgICAgIGd1dHRlckRpcnR5ID0gdHJ1ZTsKICAgICAgdmFyIGRpZmYgPSBoZWlnaHQgLSBsaW5lLmhlaWdodDsKICAgICAgZm9yICh2YXIgbiA9IGxpbmU7IG47IG4gPSBuLnBhcmVudCkgbi5oZWlnaHQgKz0gZGlmZjsKICAgIH0KCiAgICBmdW5jdGlvbiBzZXRWYWx1ZShjb2RlKSB7CiAgICAgIHZhciB0b3AgPSB7bGluZTogMCwgY2g6IDB9OwogICAgICB1cGRhdGVMaW5lcyh0b3AsIHtsaW5lOiBkb2Muc2l6ZSAtIDEsIGNoOiBnZXRMaW5lKGRvYy5zaXplLTEpLnRleHQubGVuZ3RofSwKICAgICAgICAgICAgICAgICAgc3BsaXRMaW5lcyhjb2RlKSwgdG9wLCB0b3ApOwogICAgICB1cGRhdGVJbnB1dCA9IHRydWU7CiAgICB9CiAgICBmdW5jdGlvbiBnZXRWYWx1ZShjb2RlKSB7CiAgICAgIHZhciB0ZXh0ID0gW107CiAgICAgIGRvYy5pdGVyKDAsIGRvYy5zaXplLCBmdW5jdGlvbihsaW5lKSB7IHRleHQucHVzaChsaW5lLnRleHQpOyB9KTsKICAgICAgcmV0dXJuIHRleHQuam9pbigiXG4iKTsKICAgIH0KCiAgICBmdW5jdGlvbiBvbk1vdXNlRG93bihlKSB7CiAgICAgIHNldFNoaWZ0KGVfcHJvcChlLCAic2hpZnRLZXkiKSk7CiAgICAgIC8vIENoZWNrIHdoZXRoZXIgdGhpcyBpcyBhIGNsaWNrIGluIGEgd2lkZ2V0CiAgICAgIGZvciAodmFyIG4gPSBlX3RhcmdldChlKTsgbiAhPSB3cmFwcGVyOyBuID0gbi5wYXJlbnROb2RlKQogICAgICAgIGlmIChuLnBhcmVudE5vZGUgPT0gY29kZSAmJiBuICE9IG1vdmVyKSByZXR1cm47CgogICAgICAvLyBTZWUgaWYgdGhpcyBpcyBhIGNsaWNrIGluIHRoZSBndXR0ZXIKICAgICAgZm9yICh2YXIgbiA9IGVfdGFyZ2V0KGUpOyBuICE9IHdyYXBwZXI7IG4gPSBuLnBhcmVudE5vZGUpCiAgICAgICAgaWYgKG4ucGFyZW50Tm9kZSA9PSBndXR0ZXJUZXh0KSB7CiAgICAgICAgICBpZiAob3B0aW9ucy5vbkd1dHRlckNsaWNrKQogICAgICAgICAgICBvcHRpb25zLm9uR3V0dGVyQ2xpY2soaW5zdGFuY2UsIGluZGV4T2YoZ3V0dGVyVGV4dC5jaGlsZE5vZGVzLCBuKSArIHNob3dpbmdGcm9tLCBlKTsKICAgICAgICAgIHJldHVybiBlX3ByZXZlbnREZWZhdWx0KGUpOwogICAgICAgIH0KCiAgICAgIHZhciBzdGFydCA9IHBvc0Zyb21Nb3VzZShlKTsKCiAgICAgIHN3aXRjaCAoZV9idXR0b24oZSkpIHsKICAgICAgY2FzZSAzOgogICAgICAgIGlmIChnZWNrbyAmJiAhbWFjKSBvbkNvbnRleHRNZW51KGUpOwogICAgICAgIHJldHVybjsKICAgICAgY2FzZSAyOgogICAgICAgIGlmIChzdGFydCkgc2V0Q3Vyc29yKHN0YXJ0LmxpbmUsIHN0YXJ0LmNoLCB0cnVlKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgLy8gRm9yIGJ1dHRvbiAxLCBpZiBpdCB3YXMgY2xpY2tlZCBpbnNpZGUgdGhlIGVkaXRvcgogICAgICAvLyAocG9zRnJvbU1vdXNlIHJldHVybmluZyBub24tbnVsbCksIHdlIGhhdmUgdG8gYWRqdXN0IHRoZQogICAgICAvLyBzZWxlY3Rpb24uCiAgICAgIGlmICghc3RhcnQpIHtpZiAoZV90YXJnZXQoZSkgPT0gc2Nyb2xsZXIpIGVfcHJldmVudERlZmF1bHQoZSk7IHJldHVybjt9CgogICAgICBpZiAoIWZvY3VzZWQpIG9uRm9jdXMoKTsKCiAgICAgIHZhciBub3cgPSArbmV3IERhdGU7CiAgICAgIGlmIChsYXN0RG91YmxlQ2xpY2sgJiYgbGFzdERvdWJsZUNsaWNrLnRpbWUgPiBub3cgLSA0MDAgJiYgcG9zRXEobGFzdERvdWJsZUNsaWNrLnBvcywgc3RhcnQpKSB7CiAgICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKICAgICAgICBzZXRUaW1lb3V0KGZvY3VzSW5wdXQsIDIwKTsKICAgICAgICByZXR1cm4gc2VsZWN0TGluZShzdGFydC5saW5lKTsKICAgICAgfSBlbHNlIGlmIChsYXN0Q2xpY2sgJiYgbGFzdENsaWNrLnRpbWUgPiBub3cgLSA0MDAgJiYgcG9zRXEobGFzdENsaWNrLnBvcywgc3RhcnQpKSB7CiAgICAgICAgbGFzdERvdWJsZUNsaWNrID0ge3RpbWU6IG5vdywgcG9zOiBzdGFydH07CiAgICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKICAgICAgICByZXR1cm4gc2VsZWN0V29yZEF0KHN0YXJ0KTsKICAgICAgfSBlbHNlIHsgbGFzdENsaWNrID0ge3RpbWU6IG5vdywgcG9zOiBzdGFydH07IH0KCiAgICAgIHZhciBsYXN0ID0gc3RhcnQsIGdvaW5nOwogICAgICBpZiAoZHJhZ0FuZERyb3AgJiYgIW9wdGlvbnMucmVhZE9ubHkgJiYgIXBvc0VxKHNlbC5mcm9tLCBzZWwudG8pICYmCiAgICAgICAgICAhcG9zTGVzcyhzdGFydCwgc2VsLmZyb20pICYmICFwb3NMZXNzKHNlbC50bywgc3RhcnQpKSB7CiAgICAgICAgLy8gTGV0IHRoZSBkcmFnIGhhbmRsZXIgaGFuZGxlIHRoaXMuCiAgICAgICAgaWYgKHdlYmtpdCkgbGluZVNwYWNlLmRyYWdnYWJsZSA9IHRydWU7CiAgICAgICAgdmFyIHVwID0gY29ubmVjdCh0YXJnZXREb2N1bWVudCwgIm1vdXNldXAiLCBvcGVyYXRpb24oZnVuY3Rpb24oZTIpIHsKICAgICAgICAgIGlmICh3ZWJraXQpIGxpbmVTcGFjZS5kcmFnZ2FibGUgPSBmYWxzZTsKICAgICAgICAgIGRyYWdnaW5nVGV4dCA9IGZhbHNlOwogICAgICAgICAgdXAoKTsKICAgICAgICAgIGlmIChNYXRoLmFicyhlLmNsaWVudFggLSBlMi5jbGllbnRYKSArIE1hdGguYWJzKGUuY2xpZW50WSAtIGUyLmNsaWVudFkpIDwgMTApIHsKICAgICAgICAgICAgZV9wcmV2ZW50RGVmYXVsdChlMik7CiAgICAgICAgICAgIHNldEN1cnNvcihzdGFydC5saW5lLCBzdGFydC5jaCwgdHJ1ZSk7CiAgICAgICAgICAgIGZvY3VzSW5wdXQoKTsKICAgICAgICAgIH0KICAgICAgICB9KSwgdHJ1ZSk7CiAgICAgICAgZHJhZ2dpbmdUZXh0ID0gdHJ1ZTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKICAgICAgc2V0Q3Vyc29yKHN0YXJ0LmxpbmUsIHN0YXJ0LmNoLCB0cnVlKTsKCiAgICAgIGZ1bmN0aW9uIGV4dGVuZChlKSB7CiAgICAgICAgdmFyIGN1ciA9IHBvc0Zyb21Nb3VzZShlLCB0cnVlKTsKICAgICAgICBpZiAoY3VyICYmICFwb3NFcShjdXIsIGxhc3QpKSB7CiAgICAgICAgICBpZiAoIWZvY3VzZWQpIG9uRm9jdXMoKTsKICAgICAgICAgIGxhc3QgPSBjdXI7CiAgICAgICAgICBzZXRTZWxlY3Rpb25Vc2VyKHN0YXJ0LCBjdXIpOwogICAgICAgICAgdXBkYXRlSW5wdXQgPSBmYWxzZTsKICAgICAgICAgIHZhciB2aXNpYmxlID0gdmlzaWJsZUxpbmVzKCk7CiAgICAgICAgICBpZiAoY3VyLmxpbmUgPj0gdmlzaWJsZS50byB8fCBjdXIubGluZSA8IHZpc2libGUuZnJvbSkKICAgICAgICAgICAgZ29pbmcgPSBzZXRUaW1lb3V0KG9wZXJhdGlvbihmdW5jdGlvbigpe2V4dGVuZChlKTt9KSwgMTUwKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHZhciBtb3ZlID0gY29ubmVjdCh0YXJnZXREb2N1bWVudCwgIm1vdXNlbW92ZSIsIG9wZXJhdGlvbihmdW5jdGlvbihlKSB7CiAgICAgICAgY2xlYXJUaW1lb3V0KGdvaW5nKTsKICAgICAgICBlX3ByZXZlbnREZWZhdWx0KGUpOwogICAgICAgIGV4dGVuZChlKTsKICAgICAgfSksIHRydWUpOwogICAgICB2YXIgdXAgPSBjb25uZWN0KHRhcmdldERvY3VtZW50LCAibW91c2V1cCIsIG9wZXJhdGlvbihmdW5jdGlvbihlKSB7CiAgICAgICAgY2xlYXJUaW1lb3V0KGdvaW5nKTsKICAgICAgICB2YXIgY3VyID0gcG9zRnJvbU1vdXNlKGUpOwogICAgICAgIGlmIChjdXIpIHNldFNlbGVjdGlvblVzZXIoc3RhcnQsIGN1cik7CiAgICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKICAgICAgICBmb2N1c0lucHV0KCk7CiAgICAgICAgdXBkYXRlSW5wdXQgPSB0cnVlOwogICAgICAgIG1vdmUoKTsgdXAoKTsKICAgICAgfSksIHRydWUpOwogICAgfQogICAgZnVuY3Rpb24gb25Eb3VibGVDbGljayhlKSB7CiAgICAgIGZvciAodmFyIG4gPSBlX3RhcmdldChlKTsgbiAhPSB3cmFwcGVyOyBuID0gbi5wYXJlbnROb2RlKQogICAgICAgIGlmIChuLnBhcmVudE5vZGUgPT0gZ3V0dGVyVGV4dCkgcmV0dXJuIGVfcHJldmVudERlZmF1bHQoZSk7CiAgICAgIHZhciBzdGFydCA9IHBvc0Zyb21Nb3VzZShlKTsKICAgICAgaWYgKCFzdGFydCkgcmV0dXJuOwogICAgICBsYXN0RG91YmxlQ2xpY2sgPSB7dGltZTogK25ldyBEYXRlLCBwb3M6IHN0YXJ0fTsKICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKICAgICAgc2VsZWN0V29yZEF0KHN0YXJ0KTsKICAgIH0KICAgIGZ1bmN0aW9uIG9uRHJvcChlKSB7CiAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgdmFyIHBvcyA9IHBvc0Zyb21Nb3VzZShlLCB0cnVlKSwgZmlsZXMgPSBlLmRhdGFUcmFuc2Zlci5maWxlczsKICAgICAgaWYgKCFwb3MgfHwgb3B0aW9ucy5yZWFkT25seSkgcmV0dXJuOwogICAgICBpZiAoZmlsZXMgJiYgZmlsZXMubGVuZ3RoICYmIHdpbmRvdy5GaWxlUmVhZGVyICYmIHdpbmRvdy5GaWxlKSB7CiAgICAgICAgZnVuY3Rpb24gbG9hZEZpbGUoZmlsZSwgaSkgewogICAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyOwogICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICB0ZXh0W2ldID0gcmVhZGVyLnJlc3VsdDsKICAgICAgICAgICAgaWYgKCsrcmVhZCA9PSBuKSB7CgkgICAgICBwb3MgPSBjbGlwUG9zKHBvcyk7CgkgICAgICBvcGVyYXRpb24oZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB2YXIgZW5kID0gcmVwbGFjZVJhbmdlKHRleHQuam9pbigiIiksIHBvcywgcG9zKTsKICAgICAgICAgICAgICAgIHNldFNlbGVjdGlvblVzZXIocG9zLCBlbmQpOwogICAgICAgICAgICAgIH0pKCk7CgkgICAgfQogICAgICAgICAgfTsKICAgICAgICAgIHJlYWRlci5yZWFkQXNUZXh0KGZpbGUpOwogICAgICAgIH0KICAgICAgICB2YXIgbiA9IGZpbGVzLmxlbmd0aCwgdGV4dCA9IEFycmF5KG4pLCByZWFkID0gMDsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkgbG9hZEZpbGUoZmlsZXNbaV0sIGkpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIHRyeSB7CiAgICAgICAgICB2YXIgdGV4dCA9IGUuZGF0YVRyYW5zZmVyLmdldERhdGEoIlRleHQiKTsKICAgICAgICAgIGlmICh0ZXh0KSB7CiAgICAgICAgICAgIHZhciBjdXJGcm9tID0gc2VsLmZyb20sIGN1clRvID0gc2VsLnRvOwogICAgICAgICAgICBzZXRTZWxlY3Rpb25Vc2VyKHBvcywgcG9zKTsKICAgICAgICAgICAgaWYgKGRyYWdnaW5nVGV4dCkgcmVwbGFjZVJhbmdlKCIiLCBjdXJGcm9tLCBjdXJUbyk7CiAgICAgICAgICAgIHJlcGxhY2VTZWxlY3Rpb24odGV4dCk7CgkgICAgZm9jdXNJbnB1dCgpOwoJICB9CiAgICAgICAgfQogICAgICAgIGNhdGNoKGUpe30KICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gb25EcmFnU3RhcnQoZSkgewogICAgICB2YXIgdHh0ID0gZ2V0U2VsZWN0aW9uKCk7CiAgICAgIC8vIFRoaXMgd2lsbCByZXNldCBlc2NhcGVFbGVtZW50CiAgICAgIGh0bWxFc2NhcGUodHh0KTsKICAgICAgZS5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlKGVzY2FwZUVsZW1lbnQsIDAsIDApOwogICAgICBlLmRhdGFUcmFuc2Zlci5zZXREYXRhKCJUZXh0IiwgdHh0KTsKICAgIH0KICAgIGZ1bmN0aW9uIGhhbmRsZUtleUJpbmRpbmcoZSkgewogICAgICB2YXIgbmFtZSA9IGtleU5hbWVzW2VfcHJvcChlLCAia2V5Q29kZSIpXSwgbmV4dCA9IGtleU1hcFtvcHRpb25zLmtleU1hcF0uYXV0bywgYm91bmQsIGRyb3BTaGlmdDsKICAgICAgZnVuY3Rpb24gaGFuZGxlTmV4dCgpIHsKICAgICAgICByZXR1cm4gbmV4dC5jYWxsID8gbmV4dC5jYWxsKG51bGwsIGluc3RhbmNlKSA6IG5leHQ7CiAgICAgIH0KICAgICAgaWYgKG5hbWUgPT0gbnVsbCB8fCBlLmFsdEdyYXBoS2V5KSB7CiAgICAgICAgaWYgKG5leHQpIG9wdGlvbnMua2V5TWFwID0gaGFuZGxlTmV4dCgpOwogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIGlmIChlX3Byb3AoZSwgImFsdEtleSIpKSBuYW1lID0gIkFsdC0iICsgbmFtZTsKICAgICAgaWYgKGVfcHJvcChlLCAiY3RybEtleSIpKSBuYW1lID0gIkN0cmwtIiArIG5hbWU7CiAgICAgIGlmIChlX3Byb3AoZSwgIm1ldGFLZXkiKSkgbmFtZSA9ICJDbWQtIiArIG5hbWU7CiAgICAgIGlmIChlX3Byb3AoZSwgInNoaWZ0S2V5IikgJiYKICAgICAgICAgIChib3VuZCA9IGxvb2t1cEtleSgiU2hpZnQtIiArIG5hbWUsIG9wdGlvbnMuZXh0cmFLZXlzLCBvcHRpb25zLmtleU1hcCkpKSB7CiAgICAgICAgZHJvcFNoaWZ0ID0gdHJ1ZTsKICAgICAgfSBlbHNlIHsKICAgICAgICBib3VuZCA9IGxvb2t1cEtleShuYW1lLCBvcHRpb25zLmV4dHJhS2V5cywgb3B0aW9ucy5rZXlNYXApOwogICAgICB9CiAgICAgIGlmICh0eXBlb2YgYm91bmQgPT0gInN0cmluZyIpIHsKICAgICAgICBpZiAoY29tbWFuZHMucHJvcGVydHlJc0VudW1lcmFibGUoYm91bmQpKSBib3VuZCA9IGNvbW1hbmRzW2JvdW5kXTsKICAgICAgICBlbHNlIGJvdW5kID0gbnVsbDsKICAgICAgfQogICAgICBpZiAobmV4dCAmJiAoYm91bmQgfHwgIWlzTW9kaWZpZXJLZXkoZSkpKSBvcHRpb25zLmtleU1hcCA9IGhhbmRsZU5leHQoKTsKICAgICAgaWYgKCFib3VuZCkgcmV0dXJuIGZhbHNlOwogICAgICB2YXIgcHJldlNoaWZ0ID0gc2hpZnRTZWxlY3Rpbmc7CiAgICAgIHRyeSB7CiAgICAgICAgaWYgKG9wdGlvbnMucmVhZE9ubHkpIHN1cHByZXNzRWRpdHMgPSB0cnVlOwogICAgICAgIGlmIChkcm9wU2hpZnQpIHNoaWZ0U2VsZWN0aW5nID0gbnVsbDsKICAgICAgICBib3VuZChpbnN0YW5jZSk7CiAgICAgIH0gZmluYWxseSB7CiAgICAgICAgc2hpZnRTZWxlY3RpbmcgPSBwcmV2U2hpZnQ7CiAgICAgICAgc3VwcHJlc3NFZGl0cyA9IGZhbHNlOwogICAgICB9CiAgICAgIGVfcHJldmVudERlZmF1bHQoZSk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgdmFyIGxhc3RTdG9wcGVkS2V5ID0gbnVsbDsKICAgIGZ1bmN0aW9uIG9uS2V5RG93bihlKSB7CiAgICAgIGlmICghZm9jdXNlZCkgb25Gb2N1cygpOwogICAgICBpZiAoaWUgJiYgZS5rZXlDb2RlID09IDI3KSB7IGUucmV0dXJuVmFsdWUgPSBmYWxzZTsgfQogICAgICBpZiAob3B0aW9ucy5vbktleUV2ZW50ICYmIG9wdGlvbnMub25LZXlFdmVudChpbnN0YW5jZSwgYWRkU3RvcChlKSkpIHJldHVybjsKICAgICAgdmFyIGNvZGUgPSBlX3Byb3AoZSwgImtleUNvZGUiKTsKICAgICAgLy8gSUUgZG9lcyBzdHJhbmdlIHRoaW5ncyB3aXRoIGVzY2FwZS4KICAgICAgc2V0U2hpZnQoY29kZSA9PSAxNiB8fCBlX3Byb3AoZSwgInNoaWZ0S2V5IikpOwogICAgICAvLyBGaXJzdCBnaXZlIG9uS2V5RXZlbnQgb3B0aW9uIGEgY2hhbmNlIHRvIGhhbmRsZSB0aGlzLgogICAgICB2YXIgaGFuZGxlZCA9IGhhbmRsZUtleUJpbmRpbmcoZSk7CiAgICAgIGlmICh3aW5kb3cub3BlcmEpIHsKICAgICAgICBsYXN0U3RvcHBlZEtleSA9IGhhbmRsZWQgPyBjb2RlIDogbnVsbDsKICAgICAgICAvLyBPcGVyYSBoYXMgbm8gY3V0IGV2ZW50Li4uIHdlIHRyeSB0byBhdCBsZWFzdCBjYXRjaCB0aGUga2V5IGNvbWJvCiAgICAgICAgaWYgKCFoYW5kbGVkICYmIGNvZGUgPT0gODggJiYgZV9wcm9wKGUsIG1hYyA/ICJtZXRhS2V5IiA6ICJjdHJsS2V5IikpCiAgICAgICAgICByZXBsYWNlU2VsZWN0aW9uKCIiKTsKICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gb25LZXlQcmVzcyhlKSB7CiAgICAgIHZhciBrZXlDb2RlID0gZV9wcm9wKGUsICJrZXlDb2RlIiksIGNoYXJDb2RlID0gZV9wcm9wKGUsICJjaGFyQ29kZSIpOwogICAgICBpZiAod2luZG93Lm9wZXJhICYmIGtleUNvZGUgPT0gbGFzdFN0b3BwZWRLZXkpIHtsYXN0U3RvcHBlZEtleSA9IG51bGw7IGVfcHJldmVudERlZmF1bHQoZSk7IHJldHVybjt9CiAgICAgIGlmIChvcHRpb25zLm9uS2V5RXZlbnQgJiYgb3B0aW9ucy5vbktleUV2ZW50KGluc3RhbmNlLCBhZGRTdG9wKGUpKSkgcmV0dXJuOwogICAgICBpZiAod2luZG93Lm9wZXJhICYmICFlLndoaWNoICYmIGhhbmRsZUtleUJpbmRpbmcoZSkpIHJldHVybjsKICAgICAgaWYgKG9wdGlvbnMuZWxlY3RyaWNDaGFycyAmJiBtb2RlLmVsZWN0cmljQ2hhcnMgJiYgb3B0aW9ucy5zbWFydEluZGVudCAmJiAhb3B0aW9ucy5yZWFkT25seSkgewogICAgICAgIHZhciBjaCA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2hhckNvZGUgPT0gbnVsbCA/IGtleUNvZGUgOiBjaGFyQ29kZSk7CiAgICAgICAgaWYgKG1vZGUuZWxlY3RyaWNDaGFycy5pbmRleE9mKGNoKSA+IC0xKQogICAgICAgICAgc2V0VGltZW91dChvcGVyYXRpb24oZnVuY3Rpb24oKSB7aW5kZW50TGluZShzZWwudG8ubGluZSwgInNtYXJ0Iik7fSksIDc1KTsKICAgICAgfQogICAgICBmYXN0UG9sbCgpOwogICAgfQogICAgZnVuY3Rpb24gb25LZXlVcChlKSB7CiAgICAgIGlmIChvcHRpb25zLm9uS2V5RXZlbnQgJiYgb3B0aW9ucy5vbktleUV2ZW50KGluc3RhbmNlLCBhZGRTdG9wKGUpKSkgcmV0dXJuOwogICAgICBpZiAoZV9wcm9wKGUsICJrZXlDb2RlIikgPT0gMTYpIHNoaWZ0U2VsZWN0aW5nID0gbnVsbDsKICAgIH0KCiAgICBmdW5jdGlvbiBvbkZvY3VzKCkgewogICAgICBpZiAob3B0aW9ucy5yZWFkT25seSA9PSAibm9jdXJzb3IiKSByZXR1cm47CiAgICAgIGlmICghZm9jdXNlZCkgewogICAgICAgIGlmIChvcHRpb25zLm9uRm9jdXMpIG9wdGlvbnMub25Gb2N1cyhpbnN0YW5jZSk7CiAgICAgICAgZm9jdXNlZCA9IHRydWU7CiAgICAgICAgaWYgKHdyYXBwZXIuY2xhc3NOYW1lLnNlYXJjaCgvXGJDb2RlTWlycm9yLWZvY3VzZWRcYi8pID09IC0xKQogICAgICAgICAgd3JhcHBlci5jbGFzc05hbWUgKz0gIiBDb2RlTWlycm9yLWZvY3VzZWQiOwogICAgICAgIGlmICghbGVhdmVJbnB1dEFsb25lKSByZXNldElucHV0KHRydWUpOwogICAgICB9CiAgICAgIHNsb3dQb2xsKCk7CiAgICAgIHJlc3RhcnRCbGluaygpOwogICAgfQogICAgZnVuY3Rpb24gb25CbHVyKCkgewogICAgICBpZiAoZm9jdXNlZCkgewogICAgICAgIGlmIChvcHRpb25zLm9uQmx1cikgb3B0aW9ucy5vbkJsdXIoaW5zdGFuY2UpOwogICAgICAgIGZvY3VzZWQgPSBmYWxzZTsKICAgICAgICBpZiAoYnJhY2tldEhpZ2hsaWdodGVkKQogICAgICAgICAgb3BlcmF0aW9uKGZ1bmN0aW9uKCl7CiAgICAgICAgICAgIGlmIChicmFja2V0SGlnaGxpZ2h0ZWQpIHsgYnJhY2tldEhpZ2hsaWdodGVkKCk7IGJyYWNrZXRIaWdobGlnaHRlZCA9IG51bGw7IH0KICAgICAgICAgIH0pKCk7CiAgICAgICAgd3JhcHBlci5jbGFzc05hbWUgPSB3cmFwcGVyLmNsYXNzTmFtZS5yZXBsYWNlKCIgQ29kZU1pcnJvci1mb2N1c2VkIiwgIiIpOwogICAgICB9CiAgICAgIGNsZWFySW50ZXJ2YWwoYmxpbmtlcik7CiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7aWYgKCFmb2N1c2VkKSBzaGlmdFNlbGVjdGluZyA9IG51bGw7fSwgMTUwKTsKICAgIH0KCiAgICAvLyBSZXBsYWNlIHRoZSByYW5nZSBmcm9tIGZyb20gdG8gdG8gYnkgdGhlIHN0cmluZ3MgaW4gbmV3VGV4dC4KICAgIC8vIEFmdGVyd2FyZHMsIHNldCB0aGUgc2VsZWN0aW9uIHRvIHNlbEZyb20sIHNlbFRvLgogICAgZnVuY3Rpb24gdXBkYXRlTGluZXMoZnJvbSwgdG8sIG5ld1RleHQsIHNlbEZyb20sIHNlbFRvKSB7CiAgICAgIGlmIChzdXBwcmVzc0VkaXRzKSByZXR1cm47CiAgICAgIGlmIChoaXN0b3J5KSB7CiAgICAgICAgdmFyIG9sZCA9IFtdOwogICAgICAgIGRvYy5pdGVyKGZyb20ubGluZSwgdG8ubGluZSArIDEsIGZ1bmN0aW9uKGxpbmUpIHsgb2xkLnB1c2gobGluZS50ZXh0KTsgfSk7CiAgICAgICAgaGlzdG9yeS5hZGRDaGFuZ2UoZnJvbS5saW5lLCBuZXdUZXh0Lmxlbmd0aCwgb2xkKTsKICAgICAgICB3aGlsZSAoaGlzdG9yeS5kb25lLmxlbmd0aCA+IG9wdGlvbnMudW5kb0RlcHRoKSBoaXN0b3J5LmRvbmUuc2hpZnQoKTsKICAgICAgfQogICAgICB1cGRhdGVMaW5lc05vVW5kbyhmcm9tLCB0bywgbmV3VGV4dCwgc2VsRnJvbSwgc2VsVG8pOwogICAgfQogICAgZnVuY3Rpb24gdW5yZWRvSGVscGVyKGZyb20sIHRvLCBkaXIpIHsKICAgICAgdmFyIHNldCA9IGZyb20ucG9wKCksIGxlbiA9IHNldCA/IHNldC5sZW5ndGggOiAwLCBvdXQgPSBbXTsKICAgICAgZm9yICh2YXIgaSA9IGRpciA+IDAgPyAwIDogbGVuIC0gMSwgZSA9IGRpciA+IDAgPyBsZW4gOiAtMTsgaSAhPSBlOyBpICs9IGRpcikgewogICAgICAgIHZhciBjaGFuZ2UgPSBzZXRbaV07CiAgICAgICAgdmFyIHJlcGxhY2VkID0gW10sIGVuZCA9IGNoYW5nZS5zdGFydCArIGNoYW5nZS5hZGRlZDsKICAgICAgICBkb2MuaXRlcihjaGFuZ2Uuc3RhcnQsIGVuZCwgZnVuY3Rpb24obGluZSkgeyByZXBsYWNlZC5wdXNoKGxpbmUudGV4dCk7IH0pOwogICAgICAgIG91dC5wdXNoKHtzdGFydDogY2hhbmdlLnN0YXJ0LCBhZGRlZDogY2hhbmdlLm9sZC5sZW5ndGgsIG9sZDogcmVwbGFjZWR9KTsKICAgICAgICB2YXIgcG9zID0gY2xpcFBvcyh7bGluZTogY2hhbmdlLnN0YXJ0ICsgY2hhbmdlLm9sZC5sZW5ndGggLSAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjaDogZWRpdEVuZChyZXBsYWNlZFtyZXBsYWNlZC5sZW5ndGgtMV0sIGNoYW5nZS5vbGRbY2hhbmdlLm9sZC5sZW5ndGgtMV0pfSk7CiAgICAgICAgdXBkYXRlTGluZXNOb1VuZG8oe2xpbmU6IGNoYW5nZS5zdGFydCwgY2g6IDB9LCB7bGluZTogZW5kIC0gMSwgY2g6IGdldExpbmUoZW5kLTEpLnRleHQubGVuZ3RofSwgY2hhbmdlLm9sZCwgcG9zLCBwb3MpOwogICAgICB9CiAgICAgIHVwZGF0ZUlucHV0ID0gdHJ1ZTsKICAgICAgdG8ucHVzaChvdXQpOwogICAgfQogICAgZnVuY3Rpb24gdW5kbygpIHt1bnJlZG9IZWxwZXIoaGlzdG9yeS5kb25lLCBoaXN0b3J5LnVuZG9uZSwgLTEpO30KICAgIGZ1bmN0aW9uIHJlZG8oKSB7dW5yZWRvSGVscGVyKGhpc3RvcnkudW5kb25lLCBoaXN0b3J5LmRvbmUsIDEpO30KCiAgICBmdW5jdGlvbiB1cGRhdGVMaW5lc05vVW5kbyhmcm9tLCB0bywgbmV3VGV4dCwgc2VsRnJvbSwgc2VsVG8pIHsKICAgICAgaWYgKHN1cHByZXNzRWRpdHMpIHJldHVybjsKICAgICAgdmFyIHJlY29tcHV0ZU1heExlbmd0aCA9IGZhbHNlLCBtYXhMaW5lTGVuZ3RoID0gbWF4TGluZS5sZW5ndGg7CiAgICAgIGlmICghb3B0aW9ucy5saW5lV3JhcHBpbmcpCiAgICAgICAgZG9jLml0ZXIoZnJvbS5saW5lLCB0by5saW5lLCBmdW5jdGlvbihsaW5lKSB7CiAgICAgICAgICBpZiAobGluZS50ZXh0Lmxlbmd0aCA9PSBtYXhMaW5lTGVuZ3RoKSB7cmVjb21wdXRlTWF4TGVuZ3RoID0gdHJ1ZTsgcmV0dXJuIHRydWU7fQogICAgICAgIH0pOwogICAgICBpZiAoZnJvbS5saW5lICE9IHRvLmxpbmUgfHwgbmV3VGV4dC5sZW5ndGggPiAxKSBndXR0ZXJEaXJ0eSA9IHRydWU7CgogICAgICB2YXIgbmxpbmVzID0gdG8ubGluZSAtIGZyb20ubGluZSwgZmlyc3RMaW5lID0gZ2V0TGluZShmcm9tLmxpbmUpLCBsYXN0TGluZSA9IGdldExpbmUodG8ubGluZSk7CiAgICAgIC8vIEZpcnN0IGFkanVzdCB0aGUgbGluZSBzdHJ1Y3R1cmUsIHRha2luZyBzb21lIGNhcmUgdG8gbGVhdmUgaGlnaGxpZ2h0aW5nIGludGFjdC4KICAgICAgaWYgKGZyb20uY2ggPT0gMCAmJiB0by5jaCA9PSAwICYmIG5ld1RleHRbbmV3VGV4dC5sZW5ndGggLSAxXSA9PSAiIikgewogICAgICAgIC8vIFRoaXMgaXMgYSB3aG9sZS1saW5lIHJlcGxhY2UuIFRyZWF0ZWQgc3BlY2lhbGx5IHRvIG1ha2UKICAgICAgICAvLyBzdXJlIGxpbmUgb2JqZWN0cyBtb3ZlIHRoZSB3YXkgdGhleSBhcmUgc3VwcG9zZWQgdG8uCiAgICAgICAgdmFyIGFkZGVkID0gW10sIHByZXZMaW5lID0gbnVsbDsKICAgICAgICBpZiAoZnJvbS5saW5lKSB7CiAgICAgICAgICBwcmV2TGluZSA9IGdldExpbmUoZnJvbS5saW5lIC0gMSk7CiAgICAgICAgICBwcmV2TGluZS5maXhNYXJrRW5kcyhsYXN0TGluZSk7CiAgICAgICAgfSBlbHNlIGxhc3RMaW5lLmZpeE1hcmtTdGFydHMoKTsKICAgICAgICBmb3IgKHZhciBpID0gMCwgZSA9IG5ld1RleHQubGVuZ3RoIC0gMTsgaSA8IGU7ICsraSkKICAgICAgICAgIGFkZGVkLnB1c2goTGluZS5pbmhlcml0TWFya3MobmV3VGV4dFtpXSwgcHJldkxpbmUpKTsKICAgICAgICBpZiAobmxpbmVzKSBkb2MucmVtb3ZlKGZyb20ubGluZSwgbmxpbmVzLCBjYWxsYmFja3MpOwogICAgICAgIGlmIChhZGRlZC5sZW5ndGgpIGRvYy5pbnNlcnQoZnJvbS5saW5lLCBhZGRlZCk7CiAgICAgIH0gZWxzZSBpZiAoZmlyc3RMaW5lID09IGxhc3RMaW5lKSB7CiAgICAgICAgaWYgKG5ld1RleHQubGVuZ3RoID09IDEpCiAgICAgICAgICBmaXJzdExpbmUucmVwbGFjZShmcm9tLmNoLCB0by5jaCwgbmV3VGV4dFswXSk7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBsYXN0TGluZSA9IGZpcnN0TGluZS5zcGxpdCh0by5jaCwgbmV3VGV4dFtuZXdUZXh0Lmxlbmd0aC0xXSk7CiAgICAgICAgICBmaXJzdExpbmUucmVwbGFjZShmcm9tLmNoLCBudWxsLCBuZXdUZXh0WzBdKTsKICAgICAgICAgIGZpcnN0TGluZS5maXhNYXJrRW5kcyhsYXN0TGluZSk7CiAgICAgICAgICB2YXIgYWRkZWQgPSBbXTsKICAgICAgICAgIGZvciAodmFyIGkgPSAxLCBlID0gbmV3VGV4dC5sZW5ndGggLSAxOyBpIDwgZTsgKytpKQogICAgICAgICAgICBhZGRlZC5wdXNoKExpbmUuaW5oZXJpdE1hcmtzKG5ld1RleHRbaV0sIGZpcnN0TGluZSkpOwogICAgICAgICAgYWRkZWQucHVzaChsYXN0TGluZSk7CiAgICAgICAgICBkb2MuaW5zZXJ0KGZyb20ubGluZSArIDEsIGFkZGVkKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAobmV3VGV4dC5sZW5ndGggPT0gMSkgewogICAgICAgIGZpcnN0TGluZS5yZXBsYWNlKGZyb20uY2gsIG51bGwsIG5ld1RleHRbMF0pOwogICAgICAgIGxhc3RMaW5lLnJlcGxhY2UobnVsbCwgdG8uY2gsICIiKTsKICAgICAgICBmaXJzdExpbmUuYXBwZW5kKGxhc3RMaW5lKTsKICAgICAgICBkb2MucmVtb3ZlKGZyb20ubGluZSArIDEsIG5saW5lcywgY2FsbGJhY2tzKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB2YXIgYWRkZWQgPSBbXTsKICAgICAgICBmaXJzdExpbmUucmVwbGFjZShmcm9tLmNoLCBudWxsLCBuZXdUZXh0WzBdKTsKICAgICAgICBsYXN0TGluZS5yZXBsYWNlKG51bGwsIHRvLmNoLCBuZXdUZXh0W25ld1RleHQubGVuZ3RoLTFdKTsKICAgICAgICBmaXJzdExpbmUuZml4TWFya0VuZHMobGFzdExpbmUpOwogICAgICAgIGZvciAodmFyIGkgPSAxLCBlID0gbmV3VGV4dC5sZW5ndGggLSAxOyBpIDwgZTsgKytpKQogICAgICAgICAgYWRkZWQucHVzaChMaW5lLmluaGVyaXRNYXJrcyhuZXdUZXh0W2ldLCBmaXJzdExpbmUpKTsKICAgICAgICBpZiAobmxpbmVzID4gMSkgZG9jLnJlbW92ZShmcm9tLmxpbmUgKyAxLCBubGluZXMgLSAxLCBjYWxsYmFja3MpOwogICAgICAgIGRvYy5pbnNlcnQoZnJvbS5saW5lICsgMSwgYWRkZWQpOwogICAgICB9CiAgICAgIGlmIChvcHRpb25zLmxpbmVXcmFwcGluZykgewogICAgICAgIHZhciBwZXJMaW5lID0gc2Nyb2xsZXIuY2xpZW50V2lkdGggLyBjaGFyV2lkdGgoKSAtIDM7CiAgICAgICAgZG9jLml0ZXIoZnJvbS5saW5lLCBmcm9tLmxpbmUgKyBuZXdUZXh0Lmxlbmd0aCwgZnVuY3Rpb24obGluZSkgewogICAgICAgICAgaWYgKGxpbmUuaGlkZGVuKSByZXR1cm47CiAgICAgICAgICB2YXIgZ3Vlc3MgPSBNYXRoLmNlaWwobGluZS50ZXh0Lmxlbmd0aCAvIHBlckxpbmUpIHx8IDE7CiAgICAgICAgICBpZiAoZ3Vlc3MgIT0gbGluZS5oZWlnaHQpIHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgZ3Vlc3MpOwogICAgICAgIH0pOwogICAgICB9IGVsc2UgewogICAgICAgIGRvYy5pdGVyKGZyb20ubGluZSwgaSArIG5ld1RleHQubGVuZ3RoLCBmdW5jdGlvbihsaW5lKSB7CiAgICAgICAgICB2YXIgbCA9IGxpbmUudGV4dDsKICAgICAgICAgIGlmIChsLmxlbmd0aCA+IG1heExpbmVMZW5ndGgpIHsKICAgICAgICAgICAgbWF4TGluZSA9IGw7IG1heExpbmVMZW5ndGggPSBsLmxlbmd0aDsgbWF4V2lkdGggPSBudWxsOwogICAgICAgICAgICByZWNvbXB1dGVNYXhMZW5ndGggPSBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBpZiAocmVjb21wdXRlTWF4TGVuZ3RoKSB7CiAgICAgICAgICBtYXhMaW5lTGVuZ3RoID0gMDsgbWF4TGluZSA9ICIiOyBtYXhXaWR0aCA9IG51bGw7CiAgICAgICAgICBkb2MuaXRlcigwLCBkb2Muc2l6ZSwgZnVuY3Rpb24obGluZSkgewogICAgICAgICAgICB2YXIgbCA9IGxpbmUudGV4dDsKICAgICAgICAgICAgaWYgKGwubGVuZ3RoID4gbWF4TGluZUxlbmd0aCkgewogICAgICAgICAgICAgIG1heExpbmVMZW5ndGggPSBsLmxlbmd0aDsgbWF4TGluZSA9IGw7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLy8gQWRkIHRoZXNlIGxpbmVzIHRvIHRoZSB3b3JrIGFycmF5LCBzbyB0aGF0IHRoZXkgd2lsbCBiZQogICAgICAvLyBoaWdobGlnaHRlZC4gQWRqdXN0IHdvcmsgbGluZXMgaWYgbGluZXMgd2VyZSBhZGRlZC9yZW1vdmVkLgogICAgICB2YXIgbmV3V29yayA9IFtdLCBsZW5kaWZmID0gbmV3VGV4dC5sZW5ndGggLSBubGluZXMgLSAxOwogICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHdvcmsubGVuZ3RoOyBpIDwgbDsgKytpKSB7CiAgICAgICAgdmFyIHRhc2sgPSB3b3JrW2ldOwogICAgICAgIGlmICh0YXNrIDwgZnJvbS5saW5lKSBuZXdXb3JrLnB1c2godGFzayk7CiAgICAgICAgZWxzZSBpZiAodGFzayA+IHRvLmxpbmUpIG5ld1dvcmsucHVzaCh0YXNrICsgbGVuZGlmZik7CiAgICAgIH0KICAgICAgdmFyIGhsRW5kID0gZnJvbS5saW5lICsgTWF0aC5taW4obmV3VGV4dC5sZW5ndGgsIDUwMCk7CiAgICAgIGhpZ2hsaWdodExpbmVzKGZyb20ubGluZSwgaGxFbmQpOwogICAgICBuZXdXb3JrLnB1c2goaGxFbmQpOwogICAgICB3b3JrID0gbmV3V29yazsKICAgICAgc3RhcnRXb3JrZXIoMTAwKTsKICAgICAgLy8gUmVtZW1iZXIgdGhhdCB0aGVzZSBsaW5lcyBjaGFuZ2VkLCBmb3IgdXBkYXRpbmcgdGhlIGRpc3BsYXkKICAgICAgY2hhbmdlcy5wdXNoKHtmcm9tOiBmcm9tLmxpbmUsIHRvOiB0by5saW5lICsgMSwgZGlmZjogbGVuZGlmZn0pOwogICAgICB2YXIgY2hhbmdlT2JqID0ge2Zyb206IGZyb20sIHRvOiB0bywgdGV4dDogbmV3VGV4dH07CiAgICAgIGlmICh0ZXh0Q2hhbmdlZCkgewogICAgICAgIGZvciAodmFyIGN1ciA9IHRleHRDaGFuZ2VkOyBjdXIubmV4dDsgY3VyID0gY3VyLm5leHQpIHt9CiAgICAgICAgY3VyLm5leHQgPSBjaGFuZ2VPYmo7CiAgICAgIH0gZWxzZSB0ZXh0Q2hhbmdlZCA9IGNoYW5nZU9iajsKCiAgICAgIC8vIFVwZGF0ZSB0aGUgc2VsZWN0aW9uCiAgICAgIGZ1bmN0aW9uIHVwZGF0ZUxpbmUobikge3JldHVybiBuIDw9IE1hdGgubWluKHRvLmxpbmUsIHRvLmxpbmUgKyBsZW5kaWZmKSA/IG4gOiBuICsgbGVuZGlmZjt9CiAgICAgIHNldFNlbGVjdGlvbihzZWxGcm9tLCBzZWxUbywgdXBkYXRlTGluZShzZWwuZnJvbS5saW5lKSwgdXBkYXRlTGluZShzZWwudG8ubGluZSkpOwoKICAgICAgLy8gTWFrZSBzdXJlIHRoZSBzY3JvbGwtc2l6ZSBkaXYgaGFzIHRoZSBjb3JyZWN0IGhlaWdodC4KICAgICAgaWYgKHNjcm9sbGVyLmNsaWVudEhlaWdodCkKICAgICAgICBjb2RlLnN0eWxlLmhlaWdodCA9IChkb2MuaGVpZ2h0ICogdGV4dEhlaWdodCgpICsgMiAqIHBhZGRpbmdUb3AoKSkgKyAicHgiOwogICAgfQoKICAgIGZ1bmN0aW9uIHJlcGxhY2VSYW5nZShjb2RlLCBmcm9tLCB0bykgewogICAgICBmcm9tID0gY2xpcFBvcyhmcm9tKTsKICAgICAgaWYgKCF0bykgdG8gPSBmcm9tOyBlbHNlIHRvID0gY2xpcFBvcyh0byk7CiAgICAgIGNvZGUgPSBzcGxpdExpbmVzKGNvZGUpOwogICAgICBmdW5jdGlvbiBhZGp1c3RQb3MocG9zKSB7CiAgICAgICAgaWYgKHBvc0xlc3MocG9zLCBmcm9tKSkgcmV0dXJuIHBvczsKICAgICAgICBpZiAoIXBvc0xlc3ModG8sIHBvcykpIHJldHVybiBlbmQ7CiAgICAgICAgdmFyIGxpbmUgPSBwb3MubGluZSArIGNvZGUubGVuZ3RoIC0gKHRvLmxpbmUgLSBmcm9tLmxpbmUpIC0gMTsKICAgICAgICB2YXIgY2ggPSBwb3MuY2g7CiAgICAgICAgaWYgKHBvcy5saW5lID09IHRvLmxpbmUpCiAgICAgICAgICBjaCArPSBjb2RlW2NvZGUubGVuZ3RoLTFdLmxlbmd0aCAtICh0by5jaCAtICh0by5saW5lID09IGZyb20ubGluZSA/IGZyb20uY2ggOiAwKSk7CiAgICAgICAgcmV0dXJuIHtsaW5lOiBsaW5lLCBjaDogY2h9OwogICAgICB9CiAgICAgIHZhciBlbmQ7CiAgICAgIHJlcGxhY2VSYW5nZTEoY29kZSwgZnJvbSwgdG8sIGZ1bmN0aW9uKGVuZDEpIHsKICAgICAgICBlbmQgPSBlbmQxOwogICAgICAgIHJldHVybiB7ZnJvbTogYWRqdXN0UG9zKHNlbC5mcm9tKSwgdG86IGFkanVzdFBvcyhzZWwudG8pfTsKICAgICAgfSk7CiAgICAgIHJldHVybiBlbmQ7CiAgICB9CiAgICBmdW5jdGlvbiByZXBsYWNlU2VsZWN0aW9uKGNvZGUsIGNvbGxhcHNlKSB7CiAgICAgIHJlcGxhY2VSYW5nZTEoc3BsaXRMaW5lcyhjb2RlKSwgc2VsLmZyb20sIHNlbC50bywgZnVuY3Rpb24oZW5kKSB7CiAgICAgICAgaWYgKGNvbGxhcHNlID09ICJlbmQiKSByZXR1cm4ge2Zyb206IGVuZCwgdG86IGVuZH07CiAgICAgICAgZWxzZSBpZiAoY29sbGFwc2UgPT0gInN0YXJ0IikgcmV0dXJuIHtmcm9tOiBzZWwuZnJvbSwgdG86IHNlbC5mcm9tfTsKICAgICAgICBlbHNlIHJldHVybiB7ZnJvbTogc2VsLmZyb20sIHRvOiBlbmR9OwogICAgICB9KTsKICAgIH0KICAgIGZ1bmN0aW9uIHJlcGxhY2VSYW5nZTEoY29kZSwgZnJvbSwgdG8sIGNvbXB1dGVTZWwpIHsKICAgICAgdmFyIGVuZGNoID0gY29kZS5sZW5ndGggPT0gMSA/IGNvZGVbMF0ubGVuZ3RoICsgZnJvbS5jaCA6IGNvZGVbY29kZS5sZW5ndGgtMV0ubGVuZ3RoOwogICAgICB2YXIgbmV3U2VsID0gY29tcHV0ZVNlbCh7bGluZTogZnJvbS5saW5lICsgY29kZS5sZW5ndGggLSAxLCBjaDogZW5kY2h9KTsKICAgICAgdXBkYXRlTGluZXMoZnJvbSwgdG8sIGNvZGUsIG5ld1NlbC5mcm9tLCBuZXdTZWwudG8pOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldFJhbmdlKGZyb20sIHRvKSB7CiAgICAgIHZhciBsMSA9IGZyb20ubGluZSwgbDIgPSB0by5saW5lOwogICAgICBpZiAobDEgPT0gbDIpIHJldHVybiBnZXRMaW5lKGwxKS50ZXh0LnNsaWNlKGZyb20uY2gsIHRvLmNoKTsKICAgICAgdmFyIGNvZGUgPSBbZ2V0TGluZShsMSkudGV4dC5zbGljZShmcm9tLmNoKV07CiAgICAgIGRvYy5pdGVyKGwxICsgMSwgbDIsIGZ1bmN0aW9uKGxpbmUpIHsgY29kZS5wdXNoKGxpbmUudGV4dCk7IH0pOwogICAgICBjb2RlLnB1c2goZ2V0TGluZShsMikudGV4dC5zbGljZSgwLCB0by5jaCkpOwogICAgICByZXR1cm4gY29kZS5qb2luKCJcbiIpOwogICAgfQogICAgZnVuY3Rpb24gZ2V0U2VsZWN0aW9uKCkgewogICAgICByZXR1cm4gZ2V0UmFuZ2Uoc2VsLmZyb20sIHNlbC50byk7CiAgICB9CgogICAgdmFyIHBvbGxpbmdGYXN0ID0gZmFsc2U7IC8vIEVuc3VyZXMgc2xvd1BvbGwgZG9lc24ndCBjYW5jZWwgZmFzdFBvbGwKICAgIGZ1bmN0aW9uIHNsb3dQb2xsKCkgewogICAgICBpZiAocG9sbGluZ0Zhc3QpIHJldHVybjsKICAgICAgcG9sbC5zZXQob3B0aW9ucy5wb2xsSW50ZXJ2YWwsIGZ1bmN0aW9uKCkgewogICAgICAgIHN0YXJ0T3BlcmF0aW9uKCk7CiAgICAgICAgcmVhZElucHV0KCk7CiAgICAgICAgaWYgKGZvY3VzZWQpIHNsb3dQb2xsKCk7CiAgICAgICAgZW5kT3BlcmF0aW9uKCk7CiAgICAgIH0pOwogICAgfQogICAgZnVuY3Rpb24gZmFzdFBvbGwoKSB7CiAgICAgIHZhciBtaXNzZWQgPSBmYWxzZTsKICAgICAgcG9sbGluZ0Zhc3QgPSB0cnVlOwogICAgICBmdW5jdGlvbiBwKCkgewogICAgICAgIHN0YXJ0T3BlcmF0aW9uKCk7CiAgICAgICAgdmFyIGNoYW5nZWQgPSByZWFkSW5wdXQoKTsKICAgICAgICBpZiAoIWNoYW5nZWQgJiYgIW1pc3NlZCkge21pc3NlZCA9IHRydWU7IHBvbGwuc2V0KDYwLCBwKTt9CiAgICAgICAgZWxzZSB7cG9sbGluZ0Zhc3QgPSBmYWxzZTsgc2xvd1BvbGwoKTt9CiAgICAgICAgZW5kT3BlcmF0aW9uKCk7CiAgICAgIH0KICAgICAgcG9sbC5zZXQoMjAsIHApOwogICAgfQoKICAgIC8vIFByZXZpbnB1dCBpcyBhIGhhY2sgdG8gd29yayB3aXRoIElNRS4gSWYgd2UgcmVzZXQgdGhlIHRleHRhcmVhCiAgICAvLyBvbiBldmVyeSBjaGFuZ2UsIHRoYXQgYnJlYWtzIElNRS4gU28gd2UgbG9vayBmb3IgY2hhbmdlcwogICAgLy8gY29tcGFyZWQgdG8gdGhlIHByZXZpb3VzIGNvbnRlbnQgaW5zdGVhZC4gKE1vZGVybiBicm93c2VycyBoYXZlCiAgICAvLyBldmVudHMgdGhhdCBpbmRpY2F0ZSBJTUUgdGFraW5nIHBsYWNlLCBidXQgdGhlc2UgYXJlIG5vdCB3aWRlbHkKICAgIC8vIHN1cHBvcnRlZCBvciBjb21wYXRpYmxlIGVub3VnaCB5ZXQgdG8gcmVseSBvbi4pCiAgICB2YXIgcHJldklucHV0ID0gIiI7CiAgICBmdW5jdGlvbiByZWFkSW5wdXQoKSB7CiAgICAgIGlmIChsZWF2ZUlucHV0QWxvbmUgfHwgIWZvY3VzZWQgfHwgaGFzU2VsZWN0aW9uKGlucHV0KSB8fCBvcHRpb25zLnJlYWRPbmx5KSByZXR1cm4gZmFsc2U7CiAgICAgIHZhciB0ZXh0ID0gaW5wdXQudmFsdWU7CiAgICAgIGlmICh0ZXh0ID09IHByZXZJbnB1dCkgcmV0dXJuIGZhbHNlOwogICAgICBzaGlmdFNlbGVjdGluZyA9IG51bGw7CiAgICAgIHZhciBzYW1lID0gMCwgbCA9IE1hdGgubWluKHByZXZJbnB1dC5sZW5ndGgsIHRleHQubGVuZ3RoKTsKICAgICAgd2hpbGUgKHNhbWUgPCBsICYmIHByZXZJbnB1dFtzYW1lXSA9PSB0ZXh0W3NhbWVdKSArK3NhbWU7CiAgICAgIGlmIChzYW1lIDwgcHJldklucHV0Lmxlbmd0aCkKICAgICAgICBzZWwuZnJvbSA9IHtsaW5lOiBzZWwuZnJvbS5saW5lLCBjaDogc2VsLmZyb20uY2ggLSAocHJldklucHV0Lmxlbmd0aCAtIHNhbWUpfTsKICAgICAgZWxzZSBpZiAob3ZlcndyaXRlICYmIHBvc0VxKHNlbC5mcm9tLCBzZWwudG8pKQogICAgICAgIHNlbC50byA9IHtsaW5lOiBzZWwudG8ubGluZSwgY2g6IE1hdGgubWluKGdldExpbmUoc2VsLnRvLmxpbmUpLnRleHQubGVuZ3RoLCBzZWwudG8uY2ggKyAodGV4dC5sZW5ndGggLSBzYW1lKSl9OwogICAgICByZXBsYWNlU2VsZWN0aW9uKHRleHQuc2xpY2Uoc2FtZSksICJlbmQiKTsKICAgICAgcHJldklucHV0ID0gdGV4dDsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBmdW5jdGlvbiByZXNldElucHV0KHVzZXIpIHsKICAgICAgaWYgKCFwb3NFcShzZWwuZnJvbSwgc2VsLnRvKSkgewogICAgICAgIHByZXZJbnB1dCA9ICIiOwogICAgICAgIGlucHV0LnZhbHVlID0gZ2V0U2VsZWN0aW9uKCk7CiAgICAgICAgaW5wdXQuc2VsZWN0KCk7CiAgICAgIH0gZWxzZSBpZiAodXNlcikgcHJldklucHV0ID0gaW5wdXQudmFsdWUgPSAiIjsKICAgIH0KCiAgICBmdW5jdGlvbiBmb2N1c0lucHV0KCkgewogICAgICBpZiAob3B0aW9ucy5yZWFkT25seSAhPSAibm9jdXJzb3IiKSBpbnB1dC5mb2N1cygpOwogICAgfQoKICAgIGZ1bmN0aW9uIHNjcm9sbEVkaXRvckludG9WaWV3KCkgewogICAgICBpZiAoIWN1cnNvci5nZXRCb3VuZGluZ0NsaWVudFJlY3QpIHJldHVybjsKICAgICAgdmFyIHJlY3QgPSBjdXJzb3IuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgIC8vIElFIHJldHVybnMgYm9ndXMgY29vcmRpbmF0ZXMgd2hlbiB0aGUgaW5zdGFuY2Ugc2l0cyBpbnNpZGUgb2YgYW4gaWZyYW1lIGFuZCB0aGUgY3Vyc29yIGlzIGhpZGRlbgogICAgICBpZiAoaWUgJiYgcmVjdC50b3AgPT0gcmVjdC5ib3R0b20pIHJldHVybjsKICAgICAgdmFyIHdpbkggPSB3aW5kb3cuaW5uZXJIZWlnaHQgfHwgTWF0aC5tYXgoZG9jdW1lbnQuYm9keS5vZmZzZXRIZWlnaHQsIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5vZmZzZXRIZWlnaHQpOwogICAgICBpZiAocmVjdC50b3AgPCAwIHx8IHJlY3QuYm90dG9tID4gd2luSCkgY3Vyc29yLnNjcm9sbEludG9WaWV3KCk7CiAgICB9CiAgICBmdW5jdGlvbiBzY3JvbGxDdXJzb3JJbnRvVmlldygpIHsKICAgICAgdmFyIGN1cnNvciA9IGxvY2FsQ29vcmRzKHNlbC5pbnZlcnRlZCA/IHNlbC5mcm9tIDogc2VsLnRvKTsKICAgICAgdmFyIHggPSBvcHRpb25zLmxpbmVXcmFwcGluZyA/IE1hdGgubWluKGN1cnNvci54LCBsaW5lU3BhY2Uub2Zmc2V0V2lkdGgpIDogY3Vyc29yLng7CiAgICAgIHJldHVybiBzY3JvbGxJbnRvVmlldyh4LCBjdXJzb3IueSwgeCwgY3Vyc29yLnlCb3QpOwogICAgfQogICAgZnVuY3Rpb24gc2Nyb2xsSW50b1ZpZXcoeDEsIHkxLCB4MiwgeTIpIHsKICAgICAgdmFyIHBsID0gcGFkZGluZ0xlZnQoKSwgcHQgPSBwYWRkaW5nVG9wKCksIGxoID0gdGV4dEhlaWdodCgpOwogICAgICB5MSArPSBwdDsgeTIgKz0gcHQ7IHgxICs9IHBsOyB4MiArPSBwbDsKICAgICAgdmFyIHNjcmVlbiA9IHNjcm9sbGVyLmNsaWVudEhlaWdodCwgc2NyZWVudG9wID0gc2Nyb2xsZXIuc2Nyb2xsVG9wLCBzY3JvbGxlZCA9IGZhbHNlLCByZXN1bHQgPSB0cnVlOwogICAgICBpZiAoeTEgPCBzY3JlZW50b3ApIHtzY3JvbGxlci5zY3JvbGxUb3AgPSBNYXRoLm1heCgwLCB5MSAtIDIqbGgpOyBzY3JvbGxlZCA9IHRydWU7fQogICAgICBlbHNlIGlmICh5MiA+IHNjcmVlbnRvcCArIHNjcmVlbikge3Njcm9sbGVyLnNjcm9sbFRvcCA9IHkyICsgbGggLSBzY3JlZW47IHNjcm9sbGVkID0gdHJ1ZTt9CgogICAgICB2YXIgc2NyZWVudyA9IHNjcm9sbGVyLmNsaWVudFdpZHRoLCBzY3JlZW5sZWZ0ID0gc2Nyb2xsZXIuc2Nyb2xsTGVmdDsKICAgICAgdmFyIGd1dHRlcncgPSBvcHRpb25zLmZpeGVkR3V0dGVyID8gZ3V0dGVyLmNsaWVudFdpZHRoIDogMDsKICAgICAgaWYgKHgxIDwgc2NyZWVubGVmdCArIGd1dHRlcncpIHsKICAgICAgICBpZiAoeDEgPCA1MCkgeDEgPSAwOwogICAgICAgIHNjcm9sbGVyLnNjcm9sbExlZnQgPSBNYXRoLm1heCgwLCB4MSAtIDEwIC0gZ3V0dGVydyk7CiAgICAgICAgc2Nyb2xsZWQgPSB0cnVlOwogICAgICB9CiAgICAgIGVsc2UgaWYgKHgyID4gc2NyZWVudyArIHNjcmVlbmxlZnQgLSAzKSB7CiAgICAgICAgc2Nyb2xsZXIuc2Nyb2xsTGVmdCA9IHgyICsgMTAgLSBzY3JlZW53OwogICAgICAgIHNjcm9sbGVkID0gdHJ1ZTsKICAgICAgICBpZiAoeDIgPiBjb2RlLmNsaWVudFdpZHRoKSByZXN1bHQgPSBmYWxzZTsKICAgICAgfQogICAgICBpZiAoc2Nyb2xsZWQgJiYgb3B0aW9ucy5vblNjcm9sbCkgb3B0aW9ucy5vblNjcm9sbChpbnN0YW5jZSk7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CgogICAgZnVuY3Rpb24gdmlzaWJsZUxpbmVzKCkgewogICAgICB2YXIgbGggPSB0ZXh0SGVpZ2h0KCksIHRvcCA9IHNjcm9sbGVyLnNjcm9sbFRvcCAtIHBhZGRpbmdUb3AoKTsKICAgICAgdmFyIGZyb21faGVpZ2h0ID0gTWF0aC5tYXgoMCwgTWF0aC5mbG9vcih0b3AgLyBsaCkpOwogICAgICB2YXIgdG9faGVpZ2h0ID0gTWF0aC5jZWlsKCh0b3AgKyBzY3JvbGxlci5jbGllbnRIZWlnaHQpIC8gbGgpOwogICAgICByZXR1cm4ge2Zyb206IGxpbmVBdEhlaWdodChkb2MsIGZyb21faGVpZ2h0KSwKICAgICAgICAgICAgICB0bzogbGluZUF0SGVpZ2h0KGRvYywgdG9faGVpZ2h0KX07CiAgICB9CiAgICAvLyBVc2VzIGEgc2V0IG9mIGNoYW5nZXMgcGx1cyB0aGUgY3VycmVudCBzY3JvbGwgcG9zaXRpb24gdG8KICAgIC8vIGRldGVybWluZSB3aGljaCBET00gdXBkYXRlcyBoYXZlIHRvIGJlIG1hZGUsIGFuZCBtYWtlcyB0aGUKICAgIC8vIHVwZGF0ZXMuCiAgICBmdW5jdGlvbiB1cGRhdGVEaXNwbGF5KGNoYW5nZXMsIHN1cHByZXNzQ2FsbGJhY2spIHsKICAgICAgaWYgKCFzY3JvbGxlci5jbGllbnRXaWR0aCkgewogICAgICAgIHNob3dpbmdGcm9tID0gc2hvd2luZ1RvID0gZGlzcGxheU9mZnNldCA9IDA7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIC8vIENvbXB1dGUgdGhlIG5ldyB2aXNpYmxlIHdpbmRvdwogICAgICB2YXIgdmlzaWJsZSA9IHZpc2libGVMaW5lcygpOwogICAgICAvLyBCYWlsIG91dCBpZiB0aGUgdmlzaWJsZSBhcmVhIGlzIGFscmVhZHkgcmVuZGVyZWQgYW5kIG5vdGhpbmcgY2hhbmdlZC4KICAgICAgaWYgKGNoYW5nZXMgIT09IHRydWUgJiYgY2hhbmdlcy5sZW5ndGggPT0gMCAmJiB2aXNpYmxlLmZyb20gPiBzaG93aW5nRnJvbSAmJiB2aXNpYmxlLnRvIDwgc2hvd2luZ1RvKSByZXR1cm47CiAgICAgIHZhciBmcm9tID0gTWF0aC5tYXgodmlzaWJsZS5mcm9tIC0gMTAwLCAwKSwgdG8gPSBNYXRoLm1pbihkb2Muc2l6ZSwgdmlzaWJsZS50byArIDEwMCk7CiAgICAgIGlmIChzaG93aW5nRnJvbSA8IGZyb20gJiYgZnJvbSAtIHNob3dpbmdGcm9tIDwgMjApIGZyb20gPSBzaG93aW5nRnJvbTsKICAgICAgaWYgKHNob3dpbmdUbyA+IHRvICYmIHNob3dpbmdUbyAtIHRvIDwgMjApIHRvID0gTWF0aC5taW4oZG9jLnNpemUsIHNob3dpbmdUbyk7CgogICAgICAvLyBDcmVhdGUgYSByYW5nZSBvZiB0aGVvcmV0aWNhbGx5IGludGFjdCBsaW5lcywgYW5kIHB1bmNoIGhvbGVzCiAgICAgIC8vIGluIHRoYXQgdXNpbmcgdGhlIGNoYW5nZSBpbmZvLgogICAgICB2YXIgaW50YWN0ID0gY2hhbmdlcyA9PT0gdHJ1ZSA/IFtdIDoKICAgICAgICBjb21wdXRlSW50YWN0KFt7ZnJvbTogc2hvd2luZ0Zyb20sIHRvOiBzaG93aW5nVG8sIGRvbVN0YXJ0OiAwfV0sIGNoYW5nZXMpOwogICAgICAvLyBDbGlwIG9mZiB0aGUgcGFydHMgdGhhdCB3b24ndCBiZSB2aXNpYmxlCiAgICAgIHZhciBpbnRhY3RMaW5lcyA9IDA7CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW50YWN0Lmxlbmd0aDsgKytpKSB7CiAgICAgICAgdmFyIHJhbmdlID0gaW50YWN0W2ldOwogICAgICAgIGlmIChyYW5nZS5mcm9tIDwgZnJvbSkge3JhbmdlLmRvbVN0YXJ0ICs9IChmcm9tIC0gcmFuZ2UuZnJvbSk7IHJhbmdlLmZyb20gPSBmcm9tO30KICAgICAgICBpZiAocmFuZ2UudG8gPiB0bykgcmFuZ2UudG8gPSB0bzsKICAgICAgICBpZiAocmFuZ2UuZnJvbSA+PSByYW5nZS50bykgaW50YWN0LnNwbGljZShpLS0sIDEpOwogICAgICAgIGVsc2UgaW50YWN0TGluZXMgKz0gcmFuZ2UudG8gLSByYW5nZS5mcm9tOwogICAgICB9CiAgICAgIGlmIChpbnRhY3RMaW5lcyA9PSB0byAtIGZyb20pIHJldHVybjsKICAgICAgaW50YWN0LnNvcnQoZnVuY3Rpb24oYSwgYikge3JldHVybiBhLmRvbVN0YXJ0IC0gYi5kb21TdGFydDt9KTsKCiAgICAgIHZhciB0aCA9IHRleHRIZWlnaHQoKSwgZ3V0dGVyRGlzcGxheSA9IGd1dHRlci5zdHlsZS5kaXNwbGF5OwogICAgICBsaW5lRGl2LnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICAgIHBhdGNoRGlzcGxheShmcm9tLCB0bywgaW50YWN0KTsKICAgICAgbGluZURpdi5zdHlsZS5kaXNwbGF5ID0gZ3V0dGVyLnN0eWxlLmRpc3BsYXkgPSAiIjsKCiAgICAgIC8vIFBvc2l0aW9uIHRoZSBtb3ZlciBkaXYgdG8gYWxpZ24gd2l0aCB0aGUgbGluZXMgaXQncyBzdXBwb3NlZAogICAgICAvLyB0byBiZSBzaG93aW5nICh3aGljaCB3aWxsIGNvdmVyIHRoZSB2aXNpYmxlIGRpc3BsYXkpCiAgICAgIHZhciBkaWZmZXJlbnQgPSBmcm9tICE9IHNob3dpbmdGcm9tIHx8IHRvICE9IHNob3dpbmdUbyB8fCBsYXN0U2l6ZUMgIT0gc2Nyb2xsZXIuY2xpZW50SGVpZ2h0ICsgdGg7CiAgICAgIC8vIFRoaXMgaXMganVzdCBhIGJvZ3VzIGZvcm11bGEgdGhhdCBkZXRlY3RzIHdoZW4gdGhlIGVkaXRvciBpcwogICAgICAvLyByZXNpemVkIG9yIHRoZSBmb250IHNpemUgY2hhbmdlcy4KICAgICAgaWYgKGRpZmZlcmVudCkgbGFzdFNpemVDID0gc2Nyb2xsZXIuY2xpZW50SGVpZ2h0ICsgdGg7CiAgICAgIHNob3dpbmdGcm9tID0gZnJvbTsgc2hvd2luZ1RvID0gdG87CiAgICAgIGRpc3BsYXlPZmZzZXQgPSBoZWlnaHRBdExpbmUoZG9jLCBmcm9tKTsKICAgICAgbW92ZXIuc3R5bGUudG9wID0gKGRpc3BsYXlPZmZzZXQgKiB0aCkgKyAicHgiOwogICAgICBpZiAoc2Nyb2xsZXIuY2xpZW50SGVpZ2h0KQogICAgICAgIGNvZGUuc3R5bGUuaGVpZ2h0ID0gKGRvYy5oZWlnaHQgKiB0aCArIDIgKiBwYWRkaW5nVG9wKCkpICsgInB4IjsKCiAgICAgIC8vIFNpbmNlIHRoaXMgaXMgYWxsIHJhdGhlciBlcnJvciBwcm9uZSwgaXQgaXMgaG9ub3VyZWQgd2l0aCB0aGUKICAgICAgLy8gb25seSBhc3NlcnRpb24gaW4gdGhlIHdob2xlIGZpbGUuCiAgICAgIGlmIChsaW5lRGl2LmNoaWxkTm9kZXMubGVuZ3RoICE9IHNob3dpbmdUbyAtIHNob3dpbmdGcm9tKQogICAgICAgIHRocm93IG5ldyBFcnJvcigiQkFEIFBBVENIISAiICsgSlNPTi5zdHJpbmdpZnkoaW50YWN0KSArICIgc2l6ZT0iICsgKHNob3dpbmdUbyAtIHNob3dpbmdGcm9tKSArCiAgICAgICAgICAgICAgICAgICAgICAgICIgbm9kZXM9IiArIGxpbmVEaXYuY2hpbGROb2Rlcy5sZW5ndGgpOwoKICAgICAgaWYgKG9wdGlvbnMubGluZVdyYXBwaW5nKSB7CiAgICAgICAgbWF4V2lkdGggPSBzY3JvbGxlci5jbGllbnRXaWR0aDsKICAgICAgICB2YXIgY3VyTm9kZSA9IGxpbmVEaXYuZmlyc3RDaGlsZCwgaGVpZ2h0Q2hhbmdlZCA9IGZhbHNlOwogICAgICAgIGRvYy5pdGVyKHNob3dpbmdGcm9tLCBzaG93aW5nVG8sIGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgICAgIGlmICghbGluZS5oaWRkZW4pIHsKICAgICAgICAgICAgdmFyIGhlaWdodCA9IE1hdGgucm91bmQoY3VyTm9kZS5vZmZzZXRIZWlnaHQgLyB0aCkgfHwgMTsKICAgICAgICAgICAgaWYgKGxpbmUuaGVpZ2h0ICE9IGhlaWdodCkgewogICAgICAgICAgICAgIHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgaGVpZ2h0KTsKICAgICAgICAgICAgICBndXR0ZXJEaXJ0eSA9IGhlaWdodENoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBjdXJOb2RlID0gY3VyTm9kZS5uZXh0U2libGluZzsKICAgICAgICB9KTsKICAgICAgICBpZiAoaGVpZ2h0Q2hhbmdlZCkKICAgICAgICAgIGNvZGUuc3R5bGUuaGVpZ2h0ID0gKGRvYy5oZWlnaHQgKiB0aCArIDIgKiBwYWRkaW5nVG9wKCkpICsgInB4IjsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAobWF4V2lkdGggPT0gbnVsbCkgbWF4V2lkdGggPSBzdHJpbmdXaWR0aChtYXhMaW5lKTsKICAgICAgICBpZiAobWF4V2lkdGggPiBzY3JvbGxlci5jbGllbnRXaWR0aCkgewogICAgICAgICAgbGluZVNwYWNlLnN0eWxlLndpZHRoID0gbWF4V2lkdGggKyAicHgiOwogICAgICAgICAgLy8gTmVlZGVkIHRvIHByZXZlbnQgb2RkIHdyYXBwaW5nL2hpZGluZyBvZiB3aWRnZXRzIHBsYWNlZCBpbiBoZXJlLgogICAgICAgICAgY29kZS5zdHlsZS53aWR0aCA9ICIiOwogICAgICAgICAgY29kZS5zdHlsZS53aWR0aCA9IHNjcm9sbGVyLnNjcm9sbFdpZHRoICsgInB4IjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbGluZVNwYWNlLnN0eWxlLndpZHRoID0gY29kZS5zdHlsZS53aWR0aCA9ICIiOwogICAgICAgIH0KICAgICAgfQogICAgICBndXR0ZXIuc3R5bGUuZGlzcGxheSA9IGd1dHRlckRpc3BsYXk7CiAgICAgIGlmIChkaWZmZXJlbnQgfHwgZ3V0dGVyRGlydHkpIHVwZGF0ZUd1dHRlcigpOwogICAgICB1cGRhdGVTZWxlY3Rpb24oKTsKICAgICAgaWYgKCFzdXBwcmVzc0NhbGxiYWNrICYmIG9wdGlvbnMub25VcGRhdGUpIG9wdGlvbnMub25VcGRhdGUoaW5zdGFuY2UpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICBmdW5jdGlvbiBjb21wdXRlSW50YWN0KGludGFjdCwgY2hhbmdlcykgewogICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGNoYW5nZXMubGVuZ3RoIHx8IDA7IGkgPCBsOyArK2kpIHsKICAgICAgICB2YXIgY2hhbmdlID0gY2hhbmdlc1tpXSwgaW50YWN0MiA9IFtdLCBkaWZmID0gY2hhbmdlLmRpZmYgfHwgMDsKICAgICAgICBmb3IgKHZhciBqID0gMCwgbDIgPSBpbnRhY3QubGVuZ3RoOyBqIDwgbDI7ICsraikgewogICAgICAgICAgdmFyIHJhbmdlID0gaW50YWN0W2pdOwogICAgICAgICAgaWYgKGNoYW5nZS50byA8PSByYW5nZS5mcm9tICYmIGNoYW5nZS5kaWZmKQogICAgICAgICAgICBpbnRhY3QyLnB1c2goe2Zyb206IHJhbmdlLmZyb20gKyBkaWZmLCB0bzogcmFuZ2UudG8gKyBkaWZmLAogICAgICAgICAgICAgICAgICAgICAgICAgIGRvbVN0YXJ0OiByYW5nZS5kb21TdGFydH0pOwogICAgICAgICAgZWxzZSBpZiAoY2hhbmdlLnRvIDw9IHJhbmdlLmZyb20gfHwgY2hhbmdlLmZyb20gPj0gcmFuZ2UudG8pCiAgICAgICAgICAgIGludGFjdDIucHVzaChyYW5nZSk7CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgaWYgKGNoYW5nZS5mcm9tID4gcmFuZ2UuZnJvbSkKICAgICAgICAgICAgICBpbnRhY3QyLnB1c2goe2Zyb206IHJhbmdlLmZyb20sIHRvOiBjaGFuZ2UuZnJvbSwgZG9tU3RhcnQ6IHJhbmdlLmRvbVN0YXJ0fSk7CiAgICAgICAgICAgIGlmIChjaGFuZ2UudG8gPCByYW5nZS50bykKICAgICAgICAgICAgICBpbnRhY3QyLnB1c2goe2Zyb206IGNoYW5nZS50byArIGRpZmYsIHRvOiByYW5nZS50byArIGRpZmYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21TdGFydDogcmFuZ2UuZG9tU3RhcnQgKyAoY2hhbmdlLnRvIC0gcmFuZ2UuZnJvbSl9KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaW50YWN0ID0gaW50YWN0MjsKICAgICAgfQogICAgICByZXR1cm4gaW50YWN0OwogICAgfQoKICAgIGZ1bmN0aW9uIHBhdGNoRGlzcGxheShmcm9tLCB0bywgaW50YWN0KSB7CiAgICAgIC8vIFRoZSBmaXJzdCBwYXNzIHJlbW92ZXMgdGhlIERPTSBub2RlcyB0aGF0IGFyZW4ndCBpbnRhY3QuCiAgICAgIGlmICghaW50YWN0Lmxlbmd0aCkgbGluZURpdi5pbm5lckhUTUwgPSAiIjsKICAgICAgZWxzZSB7CiAgICAgICAgZnVuY3Rpb24ga2lsbE5vZGUobm9kZSkgewogICAgICAgICAgdmFyIHRtcCA9IG5vZGUubmV4dFNpYmxpbmc7CiAgICAgICAgICBub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobm9kZSk7CiAgICAgICAgICByZXR1cm4gdG1wOwogICAgICAgIH0KICAgICAgICB2YXIgZG9tUG9zID0gMCwgY3VyTm9kZSA9IGxpbmVEaXYuZmlyc3RDaGlsZCwgbjsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGludGFjdC5sZW5ndGg7ICsraSkgewogICAgICAgICAgdmFyIGN1ciA9IGludGFjdFtpXTsKICAgICAgICAgIHdoaWxlIChjdXIuZG9tU3RhcnQgPiBkb21Qb3MpIHtjdXJOb2RlID0ga2lsbE5vZGUoY3VyTm9kZSk7IGRvbVBvcysrO30KICAgICAgICAgIGZvciAodmFyIGogPSAwLCBlID0gY3VyLnRvIC0gY3VyLmZyb207IGogPCBlOyArK2opIHtjdXJOb2RlID0gY3VyTm9kZS5uZXh0U2libGluZzsgZG9tUG9zKys7fQogICAgICAgIH0KICAgICAgICB3aGlsZSAoY3VyTm9kZSkgY3VyTm9kZSA9IGtpbGxOb2RlKGN1ck5vZGUpOwogICAgICB9CiAgICAgIC8vIFRoaXMgcGFzcyBmaWxscyBpbiB0aGUgbGluZXMgdGhhdCBhY3R1YWxseSBjaGFuZ2VkLgogICAgICB2YXIgbmV4dEludGFjdCA9IGludGFjdC5zaGlmdCgpLCBjdXJOb2RlID0gbGluZURpdi5maXJzdENoaWxkLCBqID0gZnJvbTsKICAgICAgdmFyIHNjcmF0Y2ggPSB0YXJnZXREb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSwgbmV3RWx0OwogICAgICBkb2MuaXRlcihmcm9tLCB0bywgZnVuY3Rpb24obGluZSkgewogICAgICAgIGlmIChuZXh0SW50YWN0ICYmIG5leHRJbnRhY3QudG8gPT0gaikgbmV4dEludGFjdCA9IGludGFjdC5zaGlmdCgpOwogICAgICAgIGlmICghbmV4dEludGFjdCB8fCBuZXh0SW50YWN0LmZyb20gPiBqKSB7CiAgICAgICAgICBpZiAobGluZS5oaWRkZW4pIHZhciBodG1sID0gc2NyYXRjaC5pbm5lckhUTUwgPSAiPHByZT48L3ByZT4iOwogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHZhciBodG1sID0gJzxwcmU+JyArIGxpbmUuZ2V0SFRNTCh0YWJUZXh0KSArICc8L3ByZT4nOwogICAgICAgICAgICAvLyBLbHVkZ2UgdG8gbWFrZSBzdXJlIHRoZSBzdHlsZWQgZWxlbWVudCBsaWVzIGJlaGluZCB0aGUgc2VsZWN0aW9uIChieSB6LWluZGV4KQogICAgICAgICAgICBpZiAobGluZS5jbGFzc05hbWUpCiAgICAgICAgICAgICAgaHRtbCA9ICc8ZGl2IHN0eWxlPSJwb3NpdGlvbjogcmVsYXRpdmUiPjxwcmUgY2xhc3M9IicgKyBsaW5lLmNsYXNzTmFtZSArCiAgICAgICAgICAgICAgJyIgc3R5bGU9InBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogMDsgcmlnaHQ6IDA7IHRvcDogMDsgYm90dG9tOiAwOyB6LWluZGV4OiAtMiI+JiMxNjA7PC9wcmU+JyArIGh0bWwgKyAiPC9kaXY+IjsKICAgICAgICAgIH0KICAgICAgICAgIHNjcmF0Y2guaW5uZXJIVE1MID0gaHRtbDsKICAgICAgICAgIGxpbmVEaXYuaW5zZXJ0QmVmb3JlKHNjcmF0Y2guZmlyc3RDaGlsZCwgY3VyTm9kZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGN1ck5vZGUgPSBjdXJOb2RlLm5leHRTaWJsaW5nOwogICAgICAgIH0KICAgICAgICArK2o7CiAgICAgIH0pOwogICAgfQoKICAgIGZ1bmN0aW9uIHVwZGF0ZUd1dHRlcigpIHsKICAgICAgaWYgKCFvcHRpb25zLmd1dHRlciAmJiAhb3B0aW9ucy5saW5lTnVtYmVycykgcmV0dXJuOwogICAgICB2YXIgaFRleHQgPSBtb3Zlci5vZmZzZXRIZWlnaHQsIGhFZGl0b3IgPSBzY3JvbGxlci5jbGllbnRIZWlnaHQ7CiAgICAgIGd1dHRlci5zdHlsZS5oZWlnaHQgPSAoaFRleHQgLSBoRWRpdG9yIDwgMiA/IGhFZGl0b3IgOiBoVGV4dCkgKyAicHgiOwogICAgICB2YXIgaHRtbCA9IFtdLCBpID0gc2hvd2luZ0Zyb207CiAgICAgIGRvYy5pdGVyKHNob3dpbmdGcm9tLCBNYXRoLm1heChzaG93aW5nVG8sIHNob3dpbmdGcm9tICsgMSksIGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgICBpZiAobGluZS5oaWRkZW4pIHsKICAgICAgICAgIGh0bWwucHVzaCgiPHByZT48L3ByZT4iKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdmFyIG1hcmtlciA9IGxpbmUuZ3V0dGVyTWFya2VyOwogICAgICAgICAgdmFyIHRleHQgPSBvcHRpb25zLmxpbmVOdW1iZXJzID8gaSArIG9wdGlvbnMuZmlyc3RMaW5lTnVtYmVyIDogbnVsbDsKICAgICAgICAgIGlmIChtYXJrZXIgJiYgbWFya2VyLnRleHQpCiAgICAgICAgICAgIHRleHQgPSBtYXJrZXIudGV4dC5yZXBsYWNlKCIlTiUiLCB0ZXh0ICE9IG51bGwgPyB0ZXh0IDogIiIpOwogICAgICAgICAgZWxzZSBpZiAodGV4dCA9PSBudWxsKQogICAgICAgICAgICB0ZXh0ID0gIlx1MDBhMCI7CiAgICAgICAgICBodG1sLnB1c2goKG1hcmtlciAmJiBtYXJrZXIuc3R5bGUgPyAnPHByZSBjbGFzcz0iJyArIG1hcmtlci5zdHlsZSArICciPicgOiAiPHByZT4iKSwgdGV4dCk7CiAgICAgICAgICBmb3IgKHZhciBqID0gMTsgaiA8IGxpbmUuaGVpZ2h0OyArK2opIGh0bWwucHVzaCgiPGJyLz4mIzE2MDsiKTsKICAgICAgICAgIGh0bWwucHVzaCgiPC9wcmU+Iik7CiAgICAgICAgfQogICAgICAgICsraTsKICAgICAgfSk7CiAgICAgIGd1dHRlci5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgICBndXR0ZXJUZXh0LmlubmVySFRNTCA9IGh0bWwuam9pbigiIik7CiAgICAgIHZhciBtaW53aWR0aCA9IFN0cmluZyhkb2Muc2l6ZSkubGVuZ3RoLCBmaXJzdE5vZGUgPSBndXR0ZXJUZXh0LmZpcnN0Q2hpbGQsIHZhbCA9IGVsdFRleHQoZmlyc3ROb2RlKSwgcGFkID0gIiI7CiAgICAgIHdoaWxlICh2YWwubGVuZ3RoICsgcGFkLmxlbmd0aCA8IG1pbndpZHRoKSBwYWQgKz0gIlx1MDBhMCI7CiAgICAgIGlmIChwYWQpIGZpcnN0Tm9kZS5pbnNlcnRCZWZvcmUodGFyZ2V0RG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocGFkKSwgZmlyc3ROb2RlLmZpcnN0Q2hpbGQpOwogICAgICBndXR0ZXIuc3R5bGUuZGlzcGxheSA9ICIiOwogICAgICBsaW5lU3BhY2Uuc3R5bGUubWFyZ2luTGVmdCA9IGd1dHRlci5vZmZzZXRXaWR0aCArICJweCI7CiAgICAgIGd1dHRlckRpcnR5ID0gZmFsc2U7CiAgICB9CiAgICBmdW5jdGlvbiB1cGRhdGVTZWxlY3Rpb24oKSB7CiAgICAgIHZhciBjb2xsYXBzZWQgPSBwb3NFcShzZWwuZnJvbSwgc2VsLnRvKTsKICAgICAgdmFyIGZyb21Qb3MgPSBsb2NhbENvb3JkcyhzZWwuZnJvbSwgdHJ1ZSk7CiAgICAgIHZhciB0b1BvcyA9IGNvbGxhcHNlZCA/IGZyb21Qb3MgOiBsb2NhbENvb3JkcyhzZWwudG8sIHRydWUpOwogICAgICB2YXIgaGVhZFBvcyA9IHNlbC5pbnZlcnRlZCA/IGZyb21Qb3MgOiB0b1BvcywgdGggPSB0ZXh0SGVpZ2h0KCk7CiAgICAgIHZhciB3cmFwT2ZmID0gZWx0T2Zmc2V0KHdyYXBwZXIpLCBsaW5lT2ZmID0gZWx0T2Zmc2V0KGxpbmVEaXYpOwogICAgICBpbnB1dERpdi5zdHlsZS50b3AgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihzY3JvbGxlci5vZmZzZXRIZWlnaHQsIGhlYWRQb3MueSArIGxpbmVPZmYudG9wIC0gd3JhcE9mZi50b3ApKSArICJweCI7CiAgICAgIGlucHV0RGl2LnN0eWxlLmxlZnQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihzY3JvbGxlci5vZmZzZXRXaWR0aCwgaGVhZFBvcy54ICsgbGluZU9mZi5sZWZ0IC0gd3JhcE9mZi5sZWZ0KSkgKyAicHgiOwogICAgICBpZiAoY29sbGFwc2VkKSB7CiAgICAgICAgY3Vyc29yLnN0eWxlLnRvcCA9IGhlYWRQb3MueSArICJweCI7CiAgICAgICAgY3Vyc29yLnN0eWxlLmxlZnQgPSAob3B0aW9ucy5saW5lV3JhcHBpbmcgPyBNYXRoLm1pbihoZWFkUG9zLngsIGxpbmVTcGFjZS5vZmZzZXRXaWR0aCkgOiBoZWFkUG9zLngpICsgInB4IjsKICAgICAgICBjdXJzb3Iuc3R5bGUuZGlzcGxheSA9ICIiOwogICAgICAgIHNlbGVjdGlvbkRpdi5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgICB9IGVsc2UgewogICAgICAgIHZhciBzYW1lTGluZSA9IGZyb21Qb3MueSA9PSB0b1Bvcy55LCBodG1sID0gIiI7CiAgICAgICAgZnVuY3Rpb24gYWRkKGxlZnQsIHRvcCwgcmlnaHQsIGhlaWdodCkgewogICAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0iQ29kZU1pcnJvci1zZWxlY3RlZCIgc3R5bGU9InBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogJyArIGxlZnQgKwogICAgICAgICAgICAncHg7IHRvcDogJyArIHRvcCArICdweDsgcmlnaHQ6ICcgKyByaWdodCArICdweDsgaGVpZ2h0OiAnICsgaGVpZ2h0ICsgJ3B4Ij48L2Rpdj4nOwogICAgICAgIH0KICAgICAgICBpZiAoc2VsLmZyb20uY2ggJiYgZnJvbVBvcy55ID49IDApIHsKICAgICAgICAgIHZhciByaWdodCA9IHNhbWVMaW5lID8gbGluZVNwYWNlLmNsaWVudFdpZHRoIC0gdG9Qb3MueCA6IDA7CiAgICAgICAgICBhZGQoZnJvbVBvcy54LCBmcm9tUG9zLnksIHJpZ2h0LCB0aCk7CiAgICAgICAgfQogICAgICAgIHZhciBtaWRkbGVTdGFydCA9IE1hdGgubWF4KDAsIGZyb21Qb3MueSArIChzZWwuZnJvbS5jaCA/IHRoIDogMCkpOwogICAgICAgIHZhciBtaWRkbGVIZWlnaHQgPSBNYXRoLm1pbih0b1Bvcy55LCBsaW5lU3BhY2UuY2xpZW50SGVpZ2h0KSAtIG1pZGRsZVN0YXJ0OwogICAgICAgIGlmIChtaWRkbGVIZWlnaHQgPiAwLjIgKiB0aCkKICAgICAgICAgIGFkZCgwLCBtaWRkbGVTdGFydCwgMCwgbWlkZGxlSGVpZ2h0KTsKICAgICAgICBpZiAoKCFzYW1lTGluZSB8fCAhc2VsLmZyb20uY2gpICYmIHRvUG9zLnkgPCBsaW5lU3BhY2UuY2xpZW50SGVpZ2h0IC0gLjUgKiB0aCkKICAgICAgICAgIGFkZCgwLCB0b1Bvcy55LCBsaW5lU3BhY2UuY2xpZW50V2lkdGggLSB0b1Bvcy54LCB0aCk7CiAgICAgICAgc2VsZWN0aW9uRGl2LmlubmVySFRNTCA9IGh0bWw7CiAgICAgICAgY3Vyc29yLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICAgICAgc2VsZWN0aW9uRGl2LnN0eWxlLmRpc3BsYXkgPSAiIjsKICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIHNldFNoaWZ0KHZhbCkgewogICAgICBpZiAodmFsKSBzaGlmdFNlbGVjdGluZyA9IHNoaWZ0U2VsZWN0aW5nIHx8IChzZWwuaW52ZXJ0ZWQgPyBzZWwudG8gOiBzZWwuZnJvbSk7CiAgICAgIGVsc2Ugc2hpZnRTZWxlY3RpbmcgPSBudWxsOwogICAgfQogICAgZnVuY3Rpb24gc2V0U2VsZWN0aW9uVXNlcihmcm9tLCB0bykgewogICAgICB2YXIgc2ggPSBzaGlmdFNlbGVjdGluZyAmJiBjbGlwUG9zKHNoaWZ0U2VsZWN0aW5nKTsKICAgICAgaWYgKHNoKSB7CiAgICAgICAgaWYgKHBvc0xlc3Moc2gsIGZyb20pKSBmcm9tID0gc2g7CiAgICAgICAgZWxzZSBpZiAocG9zTGVzcyh0bywgc2gpKSB0byA9IHNoOwogICAgICB9CiAgICAgIHNldFNlbGVjdGlvbihmcm9tLCB0byk7CiAgICAgIHVzZXJTZWxDaGFuZ2UgPSB0cnVlOwogICAgfQogICAgLy8gVXBkYXRlIHRoZSBzZWxlY3Rpb24uIExhc3QgdHdvIGFyZ3MgYXJlIG9ubHkgdXNlZCBieQogICAgLy8gdXBkYXRlTGluZXMsIHNpbmNlIHRoZXkgaGF2ZSB0byBiZSBleHByZXNzZWQgaW4gdGhlIGxpbmUKICAgIC8vIG51bWJlcnMgYmVmb3JlIHRoZSB1cGRhdGUuCiAgICBmdW5jdGlvbiBzZXRTZWxlY3Rpb24oZnJvbSwgdG8sIG9sZEZyb20sIG9sZFRvKSB7CiAgICAgIGdvYWxDb2x1bW4gPSBudWxsOwogICAgICBpZiAob2xkRnJvbSA9PSBudWxsKSB7b2xkRnJvbSA9IHNlbC5mcm9tLmxpbmU7IG9sZFRvID0gc2VsLnRvLmxpbmU7fQogICAgICBpZiAocG9zRXEoc2VsLmZyb20sIGZyb20pICYmIHBvc0VxKHNlbC50bywgdG8pKSByZXR1cm47CiAgICAgIGlmIChwb3NMZXNzKHRvLCBmcm9tKSkge3ZhciB0bXAgPSB0bzsgdG8gPSBmcm9tOyBmcm9tID0gdG1wO30KCiAgICAgIC8vIFNraXAgb3ZlciBoaWRkZW4gbGluZXMuCiAgICAgIGlmIChmcm9tLmxpbmUgIT0gb2xkRnJvbSkgZnJvbSA9IHNraXBIaWRkZW4oZnJvbSwgb2xkRnJvbSwgc2VsLmZyb20uY2gpOwogICAgICBpZiAodG8ubGluZSAhPSBvbGRUbykgdG8gPSBza2lwSGlkZGVuKHRvLCBvbGRUbywgc2VsLnRvLmNoKTsKCiAgICAgIGlmIChwb3NFcShmcm9tLCB0bykpIHNlbC5pbnZlcnRlZCA9IGZhbHNlOwogICAgICBlbHNlIGlmIChwb3NFcShmcm9tLCBzZWwudG8pKSBzZWwuaW52ZXJ0ZWQgPSBmYWxzZTsKICAgICAgZWxzZSBpZiAocG9zRXEodG8sIHNlbC5mcm9tKSkgc2VsLmludmVydGVkID0gdHJ1ZTsKCiAgICAgIHNlbC5mcm9tID0gZnJvbTsgc2VsLnRvID0gdG87CiAgICAgIHNlbGVjdGlvbkNoYW5nZWQgPSB0cnVlOwogICAgfQogICAgZnVuY3Rpb24gc2tpcEhpZGRlbihwb3MsIG9sZExpbmUsIG9sZENoKSB7CiAgICAgIGZ1bmN0aW9uIGdldE5vbkhpZGRlbihkaXIpIHsKICAgICAgICB2YXIgbE5vID0gcG9zLmxpbmUgKyBkaXIsIGVuZCA9IGRpciA9PSAxID8gZG9jLnNpemUgOiAtMTsKICAgICAgICB3aGlsZSAobE5vICE9IGVuZCkgewogICAgICAgICAgdmFyIGxpbmUgPSBnZXRMaW5lKGxObyk7CiAgICAgICAgICBpZiAoIWxpbmUuaGlkZGVuKSB7CiAgICAgICAgICAgIHZhciBjaCA9IHBvcy5jaDsKICAgICAgICAgICAgaWYgKGNoID4gb2xkQ2ggfHwgY2ggPiBsaW5lLnRleHQubGVuZ3RoKSBjaCA9IGxpbmUudGV4dC5sZW5ndGg7CiAgICAgICAgICAgIHJldHVybiB7bGluZTogbE5vLCBjaDogY2h9OwogICAgICAgICAgfQogICAgICAgICAgbE5vICs9IGRpcjsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFyIGxpbmUgPSBnZXRMaW5lKHBvcy5saW5lKTsKICAgICAgaWYgKCFsaW5lLmhpZGRlbikgcmV0dXJuIHBvczsKICAgICAgaWYgKHBvcy5saW5lID49IG9sZExpbmUpIHJldHVybiBnZXROb25IaWRkZW4oMSkgfHwgZ2V0Tm9uSGlkZGVuKC0xKTsKICAgICAgZWxzZSByZXR1cm4gZ2V0Tm9uSGlkZGVuKC0xKSB8fCBnZXROb25IaWRkZW4oMSk7CiAgICB9CiAgICBmdW5jdGlvbiBzZXRDdXJzb3IobGluZSwgY2gsIHVzZXIpIHsKICAgICAgdmFyIHBvcyA9IGNsaXBQb3Moe2xpbmU6IGxpbmUsIGNoOiBjaCB8fCAwfSk7CiAgICAgICh1c2VyID8gc2V0U2VsZWN0aW9uVXNlciA6IHNldFNlbGVjdGlvbikocG9zLCBwb3MpOwogICAgfQoKICAgIGZ1bmN0aW9uIGNsaXBMaW5lKG4pIHtyZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5taW4obiwgZG9jLnNpemUtMSkpO30KICAgIGZ1bmN0aW9uIGNsaXBQb3MocG9zKSB7CiAgICAgIGlmIChwb3MubGluZSA8IDApIHJldHVybiB7bGluZTogMCwgY2g6IDB9OwogICAgICBpZiAocG9zLmxpbmUgPj0gZG9jLnNpemUpIHJldHVybiB7bGluZTogZG9jLnNpemUtMSwgY2g6IGdldExpbmUoZG9jLnNpemUtMSkudGV4dC5sZW5ndGh9OwogICAgICB2YXIgY2ggPSBwb3MuY2gsIGxpbmVsZW4gPSBnZXRMaW5lKHBvcy5saW5lKS50ZXh0Lmxlbmd0aDsKICAgICAgaWYgKGNoID09IG51bGwgfHwgY2ggPiBsaW5lbGVuKSByZXR1cm4ge2xpbmU6IHBvcy5saW5lLCBjaDogbGluZWxlbn07CiAgICAgIGVsc2UgaWYgKGNoIDwgMCkgcmV0dXJuIHtsaW5lOiBwb3MubGluZSwgY2g6IDB9OwogICAgICBlbHNlIHJldHVybiBwb3M7CiAgICB9CgogICAgZnVuY3Rpb24gZmluZFBvc0goZGlyLCB1bml0KSB7CiAgICAgIHZhciBlbmQgPSBzZWwuaW52ZXJ0ZWQgPyBzZWwuZnJvbSA6IHNlbC50bywgbGluZSA9IGVuZC5saW5lLCBjaCA9IGVuZC5jaDsKICAgICAgdmFyIGxpbmVPYmogPSBnZXRMaW5lKGxpbmUpOwogICAgICBmdW5jdGlvbiBmaW5kTmV4dExpbmUoKSB7CiAgICAgICAgZm9yICh2YXIgbCA9IGxpbmUgKyBkaXIsIGUgPSBkaXIgPCAwID8gLTEgOiBkb2Muc2l6ZTsgbCAhPSBlOyBsICs9IGRpcikgewogICAgICAgICAgdmFyIGxvID0gZ2V0TGluZShsKTsKICAgICAgICAgIGlmICghbG8uaGlkZGVuKSB7IGxpbmUgPSBsOyBsaW5lT2JqID0gbG87IHJldHVybiB0cnVlOyB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGZ1bmN0aW9uIG1vdmVPbmNlKGJvdW5kVG9MaW5lKSB7CiAgICAgICAgaWYgKGNoID09IChkaXIgPCAwID8gMCA6IGxpbmVPYmoudGV4dC5sZW5ndGgpKSB7CiAgICAgICAgICBpZiAoIWJvdW5kVG9MaW5lICYmIGZpbmROZXh0TGluZSgpKSBjaCA9IGRpciA8IDAgPyBsaW5lT2JqLnRleHQubGVuZ3RoIDogMDsKICAgICAgICAgIGVsc2UgcmV0dXJuIGZhbHNlOwogICAgICAgIH0gZWxzZSBjaCArPSBkaXI7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgaWYgKHVuaXQgPT0gImNoYXIiKSBtb3ZlT25jZSgpOwogICAgICBlbHNlIGlmICh1bml0ID09ICJjb2x1bW4iKSBtb3ZlT25jZSh0cnVlKTsKICAgICAgZWxzZSBpZiAodW5pdCA9PSAid29yZCIpIHsKICAgICAgICB2YXIgc2F3V29yZCA9IGZhbHNlOwogICAgICAgIGZvciAoOzspIHsKICAgICAgICAgIGlmIChkaXIgPCAwKSBpZiAoIW1vdmVPbmNlKCkpIGJyZWFrOwogICAgICAgICAgaWYgKGlzV29yZENoYXIobGluZU9iai50ZXh0LmNoYXJBdChjaCkpKSBzYXdXb3JkID0gdHJ1ZTsKICAgICAgICAgIGVsc2UgaWYgKHNhd1dvcmQpIHtpZiAoZGlyIDwgMCkge2RpciA9IDE7IG1vdmVPbmNlKCk7fSBicmVhazt9CiAgICAgICAgICBpZiAoZGlyID4gMCkgaWYgKCFtb3ZlT25jZSgpKSBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHtsaW5lOiBsaW5lLCBjaDogY2h9OwogICAgfQogICAgZnVuY3Rpb24gbW92ZUgoZGlyLCB1bml0KSB7CiAgICAgIHZhciBwb3MgPSBkaXIgPCAwID8gc2VsLmZyb20gOiBzZWwudG87CiAgICAgIGlmIChzaGlmdFNlbGVjdGluZyB8fCBwb3NFcShzZWwuZnJvbSwgc2VsLnRvKSkgcG9zID0gZmluZFBvc0goZGlyLCB1bml0KTsKICAgICAgc2V0Q3Vyc29yKHBvcy5saW5lLCBwb3MuY2gsIHRydWUpOwogICAgfQogICAgZnVuY3Rpb24gZGVsZXRlSChkaXIsIHVuaXQpIHsKICAgICAgaWYgKCFwb3NFcShzZWwuZnJvbSwgc2VsLnRvKSkgcmVwbGFjZVJhbmdlKCIiLCBzZWwuZnJvbSwgc2VsLnRvKTsKICAgICAgZWxzZSBpZiAoZGlyIDwgMCkgcmVwbGFjZVJhbmdlKCIiLCBmaW5kUG9zSChkaXIsIHVuaXQpLCBzZWwudG8pOwogICAgICBlbHNlIHJlcGxhY2VSYW5nZSgiIiwgc2VsLmZyb20sIGZpbmRQb3NIKGRpciwgdW5pdCkpOwogICAgICB1c2VyU2VsQ2hhbmdlID0gdHJ1ZTsKICAgIH0KICAgIHZhciBnb2FsQ29sdW1uID0gbnVsbDsKICAgIGZ1bmN0aW9uIG1vdmVWKGRpciwgdW5pdCkgewogICAgICB2YXIgZGlzdCA9IDAsIHBvcyA9IGxvY2FsQ29vcmRzKHNlbC5pbnZlcnRlZCA/IHNlbC5mcm9tIDogc2VsLnRvLCB0cnVlKTsKICAgICAgaWYgKGdvYWxDb2x1bW4gIT0gbnVsbCkgcG9zLnggPSBnb2FsQ29sdW1uOwogICAgICBpZiAodW5pdCA9PSAicGFnZSIpIGRpc3QgPSBNYXRoLm1pbihzY3JvbGxlci5jbGllbnRIZWlnaHQsIHdpbmRvdy5pbm5lckhlaWdodCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KTsKICAgICAgZWxzZSBpZiAodW5pdCA9PSAibGluZSIpIGRpc3QgPSB0ZXh0SGVpZ2h0KCk7CiAgICAgIHZhciB0YXJnZXQgPSBjb29yZHNDaGFyKHBvcy54LCBwb3MueSArIGRpc3QgKiBkaXIgKyAyKTsKICAgICAgc2V0Q3Vyc29yKHRhcmdldC5saW5lLCB0YXJnZXQuY2gsIHRydWUpOwogICAgICBnb2FsQ29sdW1uID0gcG9zLng7CiAgICB9CgogICAgZnVuY3Rpb24gc2VsZWN0V29yZEF0KHBvcykgewogICAgICB2YXIgbGluZSA9IGdldExpbmUocG9zLmxpbmUpLnRleHQ7CiAgICAgIHZhciBzdGFydCA9IHBvcy5jaCwgZW5kID0gcG9zLmNoOwogICAgICB3aGlsZSAoc3RhcnQgPiAwICYmIGlzV29yZENoYXIobGluZS5jaGFyQXQoc3RhcnQgLSAxKSkpIC0tc3RhcnQ7CiAgICAgIHdoaWxlIChlbmQgPCBsaW5lLmxlbmd0aCAmJiBpc1dvcmRDaGFyKGxpbmUuY2hhckF0KGVuZCkpKSArK2VuZDsKICAgICAgc2V0U2VsZWN0aW9uVXNlcih7bGluZTogcG9zLmxpbmUsIGNoOiBzdGFydH0sIHtsaW5lOiBwb3MubGluZSwgY2g6IGVuZH0pOwogICAgfQogICAgZnVuY3Rpb24gc2VsZWN0TGluZShsaW5lKSB7CiAgICAgIHNldFNlbGVjdGlvblVzZXIoe2xpbmU6IGxpbmUsIGNoOiAwfSwge2xpbmU6IGxpbmUsIGNoOiBnZXRMaW5lKGxpbmUpLnRleHQubGVuZ3RofSk7CiAgICB9CiAgICBmdW5jdGlvbiBpbmRlbnRTZWxlY3RlZChtb2RlKSB7CiAgICAgIGlmIChwb3NFcShzZWwuZnJvbSwgc2VsLnRvKSkgcmV0dXJuIGluZGVudExpbmUoc2VsLmZyb20ubGluZSwgbW9kZSk7CiAgICAgIHZhciBlID0gc2VsLnRvLmxpbmUgLSAoc2VsLnRvLmNoID8gMCA6IDEpOwogICAgICBmb3IgKHZhciBpID0gc2VsLmZyb20ubGluZTsgaSA8PSBlOyArK2kpIGluZGVudExpbmUoaSwgbW9kZSk7CiAgICB9CgogICAgZnVuY3Rpb24gaW5kZW50TGluZShuLCBob3cpIHsKICAgICAgaWYgKCFob3cpIGhvdyA9ICJhZGQiOwogICAgICBpZiAoaG93ID09ICJzbWFydCIpIHsKICAgICAgICBpZiAoIW1vZGUuaW5kZW50KSBob3cgPSAicHJldiI7CiAgICAgICAgZWxzZSB2YXIgc3RhdGUgPSBnZXRTdGF0ZUJlZm9yZShuKTsKICAgICAgfQoKICAgICAgdmFyIGxpbmUgPSBnZXRMaW5lKG4pLCBjdXJTcGFjZSA9IGxpbmUuaW5kZW50YXRpb24ob3B0aW9ucy50YWJTaXplKSwKICAgICAgICAgIGN1clNwYWNlU3RyaW5nID0gbGluZS50ZXh0Lm1hdGNoKC9eXHMqLylbMF0sIGluZGVudGF0aW9uOwogICAgICBpZiAoaG93ID09ICJwcmV2IikgewogICAgICAgIGlmIChuKSBpbmRlbnRhdGlvbiA9IGdldExpbmUobi0xKS5pbmRlbnRhdGlvbihvcHRpb25zLnRhYlNpemUpOwogICAgICAgIGVsc2UgaW5kZW50YXRpb24gPSAwOwogICAgICB9CiAgICAgIGVsc2UgaWYgKGhvdyA9PSAic21hcnQiKSBpbmRlbnRhdGlvbiA9IG1vZGUuaW5kZW50KHN0YXRlLCBsaW5lLnRleHQuc2xpY2UoY3VyU3BhY2VTdHJpbmcubGVuZ3RoKSwgbGluZS50ZXh0KTsKICAgICAgZWxzZSBpZiAoaG93ID09ICJhZGQiKSBpbmRlbnRhdGlvbiA9IGN1clNwYWNlICsgb3B0aW9ucy5pbmRlbnRVbml0OwogICAgICBlbHNlIGlmIChob3cgPT0gInN1YnRyYWN0IikgaW5kZW50YXRpb24gPSBjdXJTcGFjZSAtIG9wdGlvbnMuaW5kZW50VW5pdDsKICAgICAgaW5kZW50YXRpb24gPSBNYXRoLm1heCgwLCBpbmRlbnRhdGlvbik7CiAgICAgIHZhciBkaWZmID0gaW5kZW50YXRpb24gLSBjdXJTcGFjZTsKCiAgICAgIGlmICghZGlmZikgewogICAgICAgIGlmIChzZWwuZnJvbS5saW5lICE9IG4gJiYgc2VsLnRvLmxpbmUgIT0gbikgcmV0dXJuOwogICAgICAgIHZhciBpbmRlbnRTdHJpbmcgPSBjdXJTcGFjZVN0cmluZzsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICB2YXIgaW5kZW50U3RyaW5nID0gIiIsIHBvcyA9IDA7CiAgICAgICAgaWYgKG9wdGlvbnMuaW5kZW50V2l0aFRhYnMpCiAgICAgICAgICBmb3IgKHZhciBpID0gTWF0aC5mbG9vcihpbmRlbnRhdGlvbiAvIG9wdGlvbnMudGFiU2l6ZSk7IGk7IC0taSkge3BvcyArPSBvcHRpb25zLnRhYlNpemU7IGluZGVudFN0cmluZyArPSAiXHQiO30KICAgICAgICB3aGlsZSAocG9zIDwgaW5kZW50YXRpb24pIHsrK3BvczsgaW5kZW50U3RyaW5nICs9ICIgIjt9CiAgICAgIH0KCiAgICAgIHJlcGxhY2VSYW5nZShpbmRlbnRTdHJpbmcsIHtsaW5lOiBuLCBjaDogMH0sIHtsaW5lOiBuLCBjaDogY3VyU3BhY2VTdHJpbmcubGVuZ3RofSk7CiAgICB9CgogICAgZnVuY3Rpb24gbG9hZE1vZGUoKSB7CiAgICAgIG1vZGUgPSBDb2RlTWlycm9yLmdldE1vZGUob3B0aW9ucywgb3B0aW9ucy5tb2RlKTsKICAgICAgZG9jLml0ZXIoMCwgZG9jLnNpemUsIGZ1bmN0aW9uKGxpbmUpIHsgbGluZS5zdGF0ZUFmdGVyID0gbnVsbDsgfSk7CiAgICAgIHdvcmsgPSBbMF07CiAgICAgIHN0YXJ0V29ya2VyKCk7CiAgICB9CiAgICBmdW5jdGlvbiBndXR0ZXJDaGFuZ2VkKCkgewogICAgICB2YXIgdmlzaWJsZSA9IG9wdGlvbnMuZ3V0dGVyIHx8IG9wdGlvbnMubGluZU51bWJlcnM7CiAgICAgIGd1dHRlci5zdHlsZS5kaXNwbGF5ID0gdmlzaWJsZSA/ICIiIDogIm5vbmUiOwogICAgICBpZiAodmlzaWJsZSkgZ3V0dGVyRGlydHkgPSB0cnVlOwogICAgICBlbHNlIGxpbmVEaXYucGFyZW50Tm9kZS5zdHlsZS5tYXJnaW5MZWZ0ID0gMDsKICAgIH0KICAgIGZ1bmN0aW9uIHdyYXBwaW5nQ2hhbmdlZChmcm9tLCB0bykgewogICAgICBpZiAob3B0aW9ucy5saW5lV3JhcHBpbmcpIHsKICAgICAgICB3cmFwcGVyLmNsYXNzTmFtZSArPSAiIENvZGVNaXJyb3Itd3JhcCI7CiAgICAgICAgdmFyIHBlckxpbmUgPSBzY3JvbGxlci5jbGllbnRXaWR0aCAvIGNoYXJXaWR0aCgpIC0gMzsKICAgICAgICBkb2MuaXRlcigwLCBkb2Muc2l6ZSwgZnVuY3Rpb24obGluZSkgewogICAgICAgICAgaWYgKGxpbmUuaGlkZGVuKSByZXR1cm47CiAgICAgICAgICB2YXIgZ3Vlc3MgPSBNYXRoLmNlaWwobGluZS50ZXh0Lmxlbmd0aCAvIHBlckxpbmUpIHx8IDE7CiAgICAgICAgICBpZiAoZ3Vlc3MgIT0gMSkgdXBkYXRlTGluZUhlaWdodChsaW5lLCBndWVzcyk7CiAgICAgICAgfSk7CiAgICAgICAgbGluZVNwYWNlLnN0eWxlLndpZHRoID0gY29kZS5zdHlsZS53aWR0aCA9ICIiOwogICAgICB9IGVsc2UgewogICAgICAgIHdyYXBwZXIuY2xhc3NOYW1lID0gd3JhcHBlci5jbGFzc05hbWUucmVwbGFjZSgiIENvZGVNaXJyb3Itd3JhcCIsICIiKTsKICAgICAgICBtYXhXaWR0aCA9IG51bGw7IG1heExpbmUgPSAiIjsKICAgICAgICBkb2MuaXRlcigwLCBkb2Muc2l6ZSwgZnVuY3Rpb24obGluZSkgewogICAgICAgICAgaWYgKGxpbmUuaGVpZ2h0ICE9IDEgJiYgIWxpbmUuaGlkZGVuKSB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIDEpOwogICAgICAgICAgaWYgKGxpbmUudGV4dC5sZW5ndGggPiBtYXhMaW5lLmxlbmd0aCkgbWF4TGluZSA9IGxpbmUudGV4dDsKICAgICAgICB9KTsKICAgICAgfQogICAgICBjaGFuZ2VzLnB1c2goe2Zyb206IDAsIHRvOiBkb2Muc2l6ZX0pOwogICAgfQogICAgZnVuY3Rpb24gY29tcHV0ZVRhYlRleHQoKSB7CiAgICAgIGZvciAodmFyIHN0ciA9ICc8c3BhbiBjbGFzcz0iY20tdGFiIj4nLCBpID0gMDsgaSA8IG9wdGlvbnMudGFiU2l6ZTsgKytpKSBzdHIgKz0gIiAiOwogICAgICByZXR1cm4gc3RyICsgIjwvc3Bhbj4iOwogICAgfQogICAgZnVuY3Rpb24gdGFic0NoYW5nZWQoKSB7CiAgICAgIHRhYlRleHQgPSBjb21wdXRlVGFiVGV4dCgpOwogICAgICB1cGRhdGVEaXNwbGF5KHRydWUpOwogICAgfQogICAgZnVuY3Rpb24gdGhlbWVDaGFuZ2VkKCkgewogICAgICBzY3JvbGxlci5jbGFzc05hbWUgPSBzY3JvbGxlci5jbGFzc05hbWUucmVwbGFjZSgvXHMqY20tcy1cdysvZywgIiIpICsKICAgICAgICBvcHRpb25zLnRoZW1lLnJlcGxhY2UoLyhefFxzKVxzKi9nLCAiIGNtLXMtIik7CiAgICB9CgogICAgZnVuY3Rpb24gVGV4dE1hcmtlcigpIHsgdGhpcy5zZXQgPSBbXTsgfQogICAgVGV4dE1hcmtlci5wcm90b3R5cGUuY2xlYXIgPSBvcGVyYXRpb24oZnVuY3Rpb24oKSB7CiAgICAgIHZhciBtaW4gPSBJbmZpbml0eSwgbWF4ID0gLUluZmluaXR5OwogICAgICBmb3IgKHZhciBpID0gMCwgZSA9IHRoaXMuc2V0Lmxlbmd0aDsgaSA8IGU7ICsraSkgewogICAgICAgIHZhciBsaW5lID0gdGhpcy5zZXRbaV0sIG1rID0gbGluZS5tYXJrZWQ7CiAgICAgICAgaWYgKCFtayB8fCAhbGluZS5wYXJlbnQpIGNvbnRpbnVlOwogICAgICAgIHZhciBsaW5lTiA9IGxpbmVObyhsaW5lKTsKICAgICAgICBtaW4gPSBNYXRoLm1pbihtaW4sIGxpbmVOKTsgbWF4ID0gTWF0aC5tYXgobWF4LCBsaW5lTik7CiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtay5sZW5ndGg7ICsraikKICAgICAgICAgIGlmIChta1tqXS5zZXQgPT0gdGhpcy5zZXQpIG1rLnNwbGljZShqLS0sIDEpOwogICAgICB9CiAgICAgIGlmIChtaW4gIT0gSW5maW5pdHkpCiAgICAgICAgY2hhbmdlcy5wdXNoKHtmcm9tOiBtaW4sIHRvOiBtYXggKyAxfSk7CiAgICB9KTsKICAgIFRleHRNYXJrZXIucHJvdG90eXBlLmZpbmQgPSBmdW5jdGlvbigpIHsKICAgICAgdmFyIGZyb20sIHRvOwogICAgICBmb3IgKHZhciBpID0gMCwgZSA9IHRoaXMuc2V0Lmxlbmd0aDsgaSA8IGU7ICsraSkgewogICAgICAgIHZhciBsaW5lID0gdGhpcy5zZXRbaV0sIG1rID0gbGluZS5tYXJrZWQ7CiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtay5sZW5ndGg7ICsraikgewogICAgICAgICAgdmFyIG1hcmsgPSBta1tqXTsKICAgICAgICAgIGlmIChtYXJrLnNldCA9PSB0aGlzLnNldCkgewogICAgICAgICAgICBpZiAobWFyay5mcm9tICE9IG51bGwgfHwgbWFyay50byAhPSBudWxsKSB7CiAgICAgICAgICAgICAgdmFyIGZvdW5kID0gbGluZU5vKGxpbmUpOwogICAgICAgICAgICAgIGlmIChmb3VuZCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICBpZiAobWFyay5mcm9tICE9IG51bGwpIGZyb20gPSB7bGluZTogZm91bmQsIGNoOiBtYXJrLmZyb219OwogICAgICAgICAgICAgICAgaWYgKG1hcmsudG8gIT0gbnVsbCkgdG8gPSB7bGluZTogZm91bmQsIGNoOiBtYXJrLnRvfTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHtmcm9tOiBmcm9tLCB0bzogdG99OwogICAgfTsKCiAgICBmdW5jdGlvbiBtYXJrVGV4dChmcm9tLCB0bywgY2xhc3NOYW1lKSB7CiAgICAgIGZyb20gPSBjbGlwUG9zKGZyb20pOyB0byA9IGNsaXBQb3ModG8pOwogICAgICB2YXIgdG0gPSBuZXcgVGV4dE1hcmtlcigpOwogICAgICBmdW5jdGlvbiBhZGQobGluZSwgZnJvbSwgdG8sIGNsYXNzTmFtZSkgewogICAgICAgIGdldExpbmUobGluZSkuYWRkTWFyayhuZXcgTWFya2VkVGV4dChmcm9tLCB0bywgY2xhc3NOYW1lLCB0bS5zZXQpKTsKICAgICAgfQogICAgICBpZiAoZnJvbS5saW5lID09IHRvLmxpbmUpIGFkZChmcm9tLmxpbmUsIGZyb20uY2gsIHRvLmNoLCBjbGFzc05hbWUpOwogICAgICBlbHNlIHsKICAgICAgICBhZGQoZnJvbS5saW5lLCBmcm9tLmNoLCBudWxsLCBjbGFzc05hbWUpOwogICAgICAgIGZvciAodmFyIGkgPSBmcm9tLmxpbmUgKyAxLCBlID0gdG8ubGluZTsgaSA8IGU7ICsraSkKICAgICAgICAgIGFkZChpLCBudWxsLCBudWxsLCBjbGFzc05hbWUpOwogICAgICAgIGFkZCh0by5saW5lLCBudWxsLCB0by5jaCwgY2xhc3NOYW1lKTsKICAgICAgfQogICAgICBjaGFuZ2VzLnB1c2goe2Zyb206IGZyb20ubGluZSwgdG86IHRvLmxpbmUgKyAxfSk7CiAgICAgIHJldHVybiB0bTsKICAgIH0KCiAgICBmdW5jdGlvbiBzZXRCb29rbWFyayhwb3MpIHsKICAgICAgcG9zID0gY2xpcFBvcyhwb3MpOwogICAgICB2YXIgYm0gPSBuZXcgQm9va21hcmsocG9zLmNoKTsKICAgICAgZ2V0TGluZShwb3MubGluZSkuYWRkTWFyayhibSk7CiAgICAgIHJldHVybiBibTsKICAgIH0KCiAgICBmdW5jdGlvbiBhZGRHdXR0ZXJNYXJrZXIobGluZSwgdGV4dCwgY2xhc3NOYW1lKSB7CiAgICAgIGlmICh0eXBlb2YgbGluZSA9PSAibnVtYmVyIikgbGluZSA9IGdldExpbmUoY2xpcExpbmUobGluZSkpOwogICAgICBsaW5lLmd1dHRlck1hcmtlciA9IHt0ZXh0OiB0ZXh0LCBzdHlsZTogY2xhc3NOYW1lfTsKICAgICAgZ3V0dGVyRGlydHkgPSB0cnVlOwogICAgICByZXR1cm4gbGluZTsKICAgIH0KICAgIGZ1bmN0aW9uIHJlbW92ZUd1dHRlck1hcmtlcihsaW5lKSB7CiAgICAgIGlmICh0eXBlb2YgbGluZSA9PSAibnVtYmVyIikgbGluZSA9IGdldExpbmUoY2xpcExpbmUobGluZSkpOwogICAgICBsaW5lLmd1dHRlck1hcmtlciA9IG51bGw7CiAgICAgIGd1dHRlckRpcnR5ID0gdHJ1ZTsKICAgIH0KCiAgICBmdW5jdGlvbiBjaGFuZ2VMaW5lKGhhbmRsZSwgb3ApIHsKICAgICAgdmFyIG5vID0gaGFuZGxlLCBsaW5lID0gaGFuZGxlOwogICAgICBpZiAodHlwZW9mIGhhbmRsZSA9PSAibnVtYmVyIikgbGluZSA9IGdldExpbmUoY2xpcExpbmUoaGFuZGxlKSk7CiAgICAgIGVsc2Ugbm8gPSBsaW5lTm8oaGFuZGxlKTsKICAgICAgaWYgKG5vID09IG51bGwpIHJldHVybiBudWxsOwogICAgICBpZiAob3AobGluZSwgbm8pKSBjaGFuZ2VzLnB1c2goe2Zyb206IG5vLCB0bzogbm8gKyAxfSk7CiAgICAgIGVsc2UgcmV0dXJuIG51bGw7CiAgICAgIHJldHVybiBsaW5lOwogICAgfQogICAgZnVuY3Rpb24gc2V0TGluZUNsYXNzKGhhbmRsZSwgY2xhc3NOYW1lKSB7CiAgICAgIHJldHVybiBjaGFuZ2VMaW5lKGhhbmRsZSwgZnVuY3Rpb24obGluZSkgewogICAgICAgIGlmIChsaW5lLmNsYXNzTmFtZSAhPSBjbGFzc05hbWUpIHsKICAgICAgICAgIGxpbmUuY2xhc3NOYW1lID0gY2xhc3NOYW1lOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICAgIGZ1bmN0aW9uIHNldExpbmVIaWRkZW4oaGFuZGxlLCBoaWRkZW4pIHsKICAgICAgcmV0dXJuIGNoYW5nZUxpbmUoaGFuZGxlLCBmdW5jdGlvbihsaW5lLCBubykgewogICAgICAgIGlmIChsaW5lLmhpZGRlbiAhPSBoaWRkZW4pIHsKICAgICAgICAgIGxpbmUuaGlkZGVuID0gaGlkZGVuOwogICAgICAgICAgdXBkYXRlTGluZUhlaWdodChsaW5lLCBoaWRkZW4gPyAwIDogMSk7CiAgICAgICAgICB2YXIgZmxpbmUgPSBzZWwuZnJvbS5saW5lLCB0bGluZSA9IHNlbC50by5saW5lOwogICAgICAgICAgaWYgKGhpZGRlbiAmJiAoZmxpbmUgPT0gbm8gfHwgdGxpbmUgPT0gbm8pKSB7CiAgICAgICAgICAgIHZhciBmcm9tID0gZmxpbmUgPT0gbm8gPyBza2lwSGlkZGVuKHtsaW5lOiBmbGluZSwgY2g6IDB9LCBmbGluZSwgMCkgOiBzZWwuZnJvbTsKICAgICAgICAgICAgdmFyIHRvID0gdGxpbmUgPT0gbm8gPyBza2lwSGlkZGVuKHtsaW5lOiB0bGluZSwgY2g6IDB9LCB0bGluZSwgMCkgOiBzZWwudG87CiAgICAgICAgICAgIHNldFNlbGVjdGlvbihmcm9tLCB0byk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gKGd1dHRlckRpcnR5ID0gdHJ1ZSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KCiAgICBmdW5jdGlvbiBsaW5lSW5mbyhsaW5lKSB7CiAgICAgIGlmICh0eXBlb2YgbGluZSA9PSAibnVtYmVyIikgewogICAgICAgIGlmICghaXNMaW5lKGxpbmUpKSByZXR1cm4gbnVsbDsKICAgICAgICB2YXIgbiA9IGxpbmU7CiAgICAgICAgbGluZSA9IGdldExpbmUobGluZSk7CiAgICAgICAgaWYgKCFsaW5lKSByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICB2YXIgbiA9IGxpbmVObyhsaW5lKTsKICAgICAgICBpZiAobiA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICB2YXIgbWFya2VyID0gbGluZS5ndXR0ZXJNYXJrZXI7CiAgICAgIHJldHVybiB7bGluZTogbiwgaGFuZGxlOiBsaW5lLCB0ZXh0OiBsaW5lLnRleHQsIG1hcmtlclRleHQ6IG1hcmtlciAmJiBtYXJrZXIudGV4dCwKICAgICAgICAgICAgICBtYXJrZXJDbGFzczogbWFya2VyICYmIG1hcmtlci5zdHlsZSwgbGluZUNsYXNzOiBsaW5lLmNsYXNzTmFtZX07CiAgICB9CgogICAgZnVuY3Rpb24gc3RyaW5nV2lkdGgoc3RyKSB7CiAgICAgIG1lYXN1cmUuaW5uZXJIVE1MID0gIjxwcmU+PHNwYW4+eDwvc3Bhbj48L3ByZT4iOwogICAgICBtZWFzdXJlLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZC5maXJzdENoaWxkLm5vZGVWYWx1ZSA9IHN0cjsKICAgICAgcmV0dXJuIG1lYXN1cmUuZmlyc3RDaGlsZC5maXJzdENoaWxkLm9mZnNldFdpZHRoIHx8IDEwOwogICAgfQogICAgLy8gVGhlc2UgYXJlIHVzZWQgdG8gZ28gZnJvbSBwaXhlbCBwb3NpdGlvbnMgdG8gY2hhcmFjdGVyCiAgICAvLyBwb3NpdGlvbnMsIHRha2luZyB2YXJ5aW5nIGNoYXJhY3RlciB3aWR0aHMgaW50byBhY2NvdW50LgogICAgZnVuY3Rpb24gY2hhckZyb21YKGxpbmUsIHgpIHsKICAgICAgaWYgKHggPD0gMCkgcmV0dXJuIDA7CiAgICAgIHZhciBsaW5lT2JqID0gZ2V0TGluZShsaW5lKSwgdGV4dCA9IGxpbmVPYmoudGV4dDsKICAgICAgZnVuY3Rpb24gZ2V0WChsZW4pIHsKICAgICAgICBtZWFzdXJlLmlubmVySFRNTCA9ICI8cHJlPjxzcGFuPiIgKyBsaW5lT2JqLmdldEhUTUwodGFiVGV4dCwgbGVuKSArICI8L3NwYW4+PC9wcmU+IjsKICAgICAgICByZXR1cm4gbWVhc3VyZS5maXJzdENoaWxkLmZpcnN0Q2hpbGQub2Zmc2V0V2lkdGg7CiAgICAgIH0KICAgICAgdmFyIGZyb20gPSAwLCBmcm9tWCA9IDAsIHRvID0gdGV4dC5sZW5ndGgsIHRvWDsKICAgICAgLy8gR3Vlc3MgYSBzdWl0YWJsZSB1cHBlciBib3VuZCBmb3Igb3VyIHNlYXJjaC4KICAgICAgdmFyIGVzdGltYXRlZCA9IE1hdGgubWluKHRvLCBNYXRoLmNlaWwoeCAvIGNoYXJXaWR0aCgpKSk7CiAgICAgIGZvciAoOzspIHsKICAgICAgICB2YXIgZXN0WCA9IGdldFgoZXN0aW1hdGVkKTsKICAgICAgICBpZiAoZXN0WCA8PSB4ICYmIGVzdGltYXRlZCA8IHRvKSBlc3RpbWF0ZWQgPSBNYXRoLm1pbih0bywgTWF0aC5jZWlsKGVzdGltYXRlZCAqIDEuMikpOwogICAgICAgIGVsc2Uge3RvWCA9IGVzdFg7IHRvID0gZXN0aW1hdGVkOyBicmVhazt9CiAgICAgIH0KICAgICAgaWYgKHggPiB0b1gpIHJldHVybiB0bzsKICAgICAgLy8gVHJ5IHRvIGd1ZXNzIGEgc3VpdGFibGUgbG93ZXIgYm91bmQgYXMgd2VsbC4KICAgICAgZXN0aW1hdGVkID0gTWF0aC5mbG9vcih0byAqIDAuOCk7IGVzdFggPSBnZXRYKGVzdGltYXRlZCk7CiAgICAgIGlmIChlc3RYIDwgeCkge2Zyb20gPSBlc3RpbWF0ZWQ7IGZyb21YID0gZXN0WDt9CiAgICAgIC8vIERvIGEgYmluYXJ5IHNlYXJjaCBiZXR3ZWVuIHRoZXNlIGJvdW5kcy4KICAgICAgZm9yICg7OykgewogICAgICAgIGlmICh0byAtIGZyb20gPD0gMSkgcmV0dXJuICh0b1ggLSB4ID4geCAtIGZyb21YKSA/IGZyb20gOiB0bzsKICAgICAgICB2YXIgbWlkZGxlID0gTWF0aC5jZWlsKChmcm9tICsgdG8pIC8gMiksIG1pZGRsZVggPSBnZXRYKG1pZGRsZSk7CiAgICAgICAgaWYgKG1pZGRsZVggPiB4KSB7dG8gPSBtaWRkbGU7IHRvWCA9IG1pZGRsZVg7fQogICAgICAgIGVsc2Uge2Zyb20gPSBtaWRkbGU7IGZyb21YID0gbWlkZGxlWDt9CiAgICAgIH0KICAgIH0KCiAgICB2YXIgdGVtcElkID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMHhmZmZmZmYpLnRvU3RyaW5nKDE2KTsKICAgIGZ1bmN0aW9uIG1lYXN1cmVMaW5lKGxpbmUsIGNoKSB7CiAgICAgIGlmIChjaCA9PSAwKSByZXR1cm4ge3RvcDogMCwgbGVmdDogMH07CiAgICAgIHZhciBleHRyYSA9ICIiOwogICAgICAvLyBJbmNsdWRlIGV4dHJhIHRleHQgYXQgdGhlIGVuZCB0byBtYWtlIHN1cmUgdGhlIG1lYXN1cmVkIGxpbmUgaXMgd3JhcHBlZCBpbiB0aGUgcmlnaHQgd2F5LgogICAgICBpZiAob3B0aW9ucy5saW5lV3JhcHBpbmcpIHsKICAgICAgICB2YXIgZW5kID0gbGluZS50ZXh0LmluZGV4T2YoIiAiLCBjaCArIDIpOwogICAgICAgIGV4dHJhID0gaHRtbEVzY2FwZShsaW5lLnRleHQuc2xpY2UoY2ggKyAxLCBlbmQgPCAwID8gbGluZS50ZXh0Lmxlbmd0aCA6IGVuZCArIChpZSA/IDUgOiAwKSkpOwogICAgICB9CiAgICAgIG1lYXN1cmUuaW5uZXJIVE1MID0gIjxwcmU+IiArIGxpbmUuZ2V0SFRNTCh0YWJUZXh0LCBjaCkgKwogICAgICAgICc8c3BhbiBpZD0iQ29kZU1pcnJvci10ZW1wLScgKyB0ZW1wSWQgKyAnIj4nICsgaHRtbEVzY2FwZShsaW5lLnRleHQuY2hhckF0KGNoKSB8fCAiICIpICsgIjwvc3Bhbj4iICsKICAgICAgICBleHRyYSArICI8L3ByZT4iOwogICAgICB2YXIgZWx0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkNvZGVNaXJyb3ItdGVtcC0iICsgdGVtcElkKTsKICAgICAgdmFyIHRvcCA9IGVsdC5vZmZzZXRUb3AsIGxlZnQgPSBlbHQub2Zmc2V0TGVmdDsKICAgICAgLy8gT2xkZXIgSUVzIHJlcG9ydCB6ZXJvIG9mZnNldHMgZm9yIHNwYW5zIGRpcmVjdGx5IGFmdGVyIGEgd3JhcAogICAgICBpZiAoaWUgJiYgdG9wID09IDAgJiYgbGVmdCA9PSAwKSB7CiAgICAgICAgdmFyIGJhY2t1cCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKICAgICAgICBiYWNrdXAuaW5uZXJIVE1MID0gIngiOwogICAgICAgIGVsdC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShiYWNrdXAsIGVsdC5uZXh0U2libGluZyk7CiAgICAgICAgdG9wID0gYmFja3VwLm9mZnNldFRvcDsKICAgICAgfQogICAgICByZXR1cm4ge3RvcDogdG9wLCBsZWZ0OiBsZWZ0fTsKICAgIH0KICAgIGZ1bmN0aW9uIGxvY2FsQ29vcmRzKHBvcywgaW5MaW5lV3JhcCkgewogICAgICB2YXIgeCwgbGggPSB0ZXh0SGVpZ2h0KCksIHkgPSBsaCAqIChoZWlnaHRBdExpbmUoZG9jLCBwb3MubGluZSkgLSAoaW5MaW5lV3JhcCA/IGRpc3BsYXlPZmZzZXQgOiAwKSk7CiAgICAgIGlmIChwb3MuY2ggPT0gMCkgeCA9IDA7CiAgICAgIGVsc2UgewogICAgICAgIHZhciBzcCA9IG1lYXN1cmVMaW5lKGdldExpbmUocG9zLmxpbmUpLCBwb3MuY2gpOwogICAgICAgIHggPSBzcC5sZWZ0OwogICAgICAgIGlmIChvcHRpb25zLmxpbmVXcmFwcGluZykgeSArPSBNYXRoLm1heCgwLCBzcC50b3ApOwogICAgICB9CiAgICAgIHJldHVybiB7eDogeCwgeTogeSwgeUJvdDogeSArIGxofTsKICAgIH0KICAgIC8vIENvb3JkcyBtdXN0IGJlIGxpbmVTcGFjZS1sb2NhbAogICAgZnVuY3Rpb24gY29vcmRzQ2hhcih4LCB5KSB7CiAgICAgIGlmICh5IDwgMCkgeSA9IDA7CiAgICAgIHZhciB0aCA9IHRleHRIZWlnaHQoKSwgY3cgPSBjaGFyV2lkdGgoKSwgaGVpZ2h0UG9zID0gZGlzcGxheU9mZnNldCArIE1hdGguZmxvb3IoeSAvIHRoKTsKICAgICAgdmFyIGxpbmVObyA9IGxpbmVBdEhlaWdodChkb2MsIGhlaWdodFBvcyk7CiAgICAgIGlmIChsaW5lTm8gPj0gZG9jLnNpemUpIHJldHVybiB7bGluZTogZG9jLnNpemUgLSAxLCBjaDogZ2V0TGluZShkb2Muc2l6ZSAtIDEpLnRleHQubGVuZ3RofTsKICAgICAgdmFyIGxpbmVPYmogPSBnZXRMaW5lKGxpbmVObyksIHRleHQgPSBsaW5lT2JqLnRleHQ7CiAgICAgIHZhciB0dyA9IG9wdGlvbnMubGluZVdyYXBwaW5nLCBpbm5lck9mZiA9IHR3ID8gaGVpZ2h0UG9zIC0gaGVpZ2h0QXRMaW5lKGRvYywgbGluZU5vKSA6IDA7CiAgICAgIGlmICh4IDw9IDAgJiYgaW5uZXJPZmYgPT0gMCkgcmV0dXJuIHtsaW5lOiBsaW5lTm8sIGNoOiAwfTsKICAgICAgZnVuY3Rpb24gZ2V0WChsZW4pIHsKICAgICAgICB2YXIgc3AgPSBtZWFzdXJlTGluZShsaW5lT2JqLCBsZW4pOwogICAgICAgIGlmICh0dykgewogICAgICAgICAgdmFyIG9mZiA9IE1hdGgucm91bmQoc3AudG9wIC8gdGgpOwogICAgICAgICAgcmV0dXJuIE1hdGgubWF4KDAsIHNwLmxlZnQgKyAob2ZmIC0gaW5uZXJPZmYpICogc2Nyb2xsZXIuY2xpZW50V2lkdGgpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc3AubGVmdDsKICAgICAgfQogICAgICB2YXIgZnJvbSA9IDAsIGZyb21YID0gMCwgdG8gPSB0ZXh0Lmxlbmd0aCwgdG9YOwogICAgICAvLyBHdWVzcyBhIHN1aXRhYmxlIHVwcGVyIGJvdW5kIGZvciBvdXIgc2VhcmNoLgogICAgICB2YXIgZXN0aW1hdGVkID0gTWF0aC5taW4odG8sIE1hdGguY2VpbCgoeCArIGlubmVyT2ZmICogc2Nyb2xsZXIuY2xpZW50V2lkdGggKiAuOSkgLyBjdykpOwogICAgICBmb3IgKDs7KSB7CiAgICAgICAgdmFyIGVzdFggPSBnZXRYKGVzdGltYXRlZCk7CiAgICAgICAgaWYgKGVzdFggPD0geCAmJiBlc3RpbWF0ZWQgPCB0bykgZXN0aW1hdGVkID0gTWF0aC5taW4odG8sIE1hdGguY2VpbChlc3RpbWF0ZWQgKiAxLjIpKTsKICAgICAgICBlbHNlIHt0b1ggPSBlc3RYOyB0byA9IGVzdGltYXRlZDsgYnJlYWs7fQogICAgICB9CiAgICAgIGlmICh4ID4gdG9YKSByZXR1cm4ge2xpbmU6IGxpbmVObywgY2g6IHRvfTsKICAgICAgLy8gVHJ5IHRvIGd1ZXNzIGEgc3VpdGFibGUgbG93ZXIgYm91bmQgYXMgd2VsbC4KICAgICAgZXN0aW1hdGVkID0gTWF0aC5mbG9vcih0byAqIDAuOCk7IGVzdFggPSBnZXRYKGVzdGltYXRlZCk7CiAgICAgIGlmIChlc3RYIDwgeCkge2Zyb20gPSBlc3RpbWF0ZWQ7IGZyb21YID0gZXN0WDt9CiAgICAgIC8vIERvIGEgYmluYXJ5IHNlYXJjaCBiZXR3ZWVuIHRoZXNlIGJvdW5kcy4KICAgICAgZm9yICg7OykgewogICAgICAgIGlmICh0byAtIGZyb20gPD0gMSkgcmV0dXJuIHtsaW5lOiBsaW5lTm8sIGNoOiAodG9YIC0geCA+IHggLSBmcm9tWCkgPyBmcm9tIDogdG99OwogICAgICAgIHZhciBtaWRkbGUgPSBNYXRoLmNlaWwoKGZyb20gKyB0bykgLyAyKSwgbWlkZGxlWCA9IGdldFgobWlkZGxlKTsKICAgICAgICBpZiAobWlkZGxlWCA+IHgpIHt0byA9IG1pZGRsZTsgdG9YID0gbWlkZGxlWDt9CiAgICAgICAgZWxzZSB7ZnJvbSA9IG1pZGRsZTsgZnJvbVggPSBtaWRkbGVYO30KICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gcGFnZUNvb3Jkcyhwb3MpIHsKICAgICAgdmFyIGxvY2FsID0gbG9jYWxDb29yZHMocG9zLCB0cnVlKSwgb2ZmID0gZWx0T2Zmc2V0KGxpbmVTcGFjZSk7CiAgICAgIHJldHVybiB7eDogb2ZmLmxlZnQgKyBsb2NhbC54LCB5OiBvZmYudG9wICsgbG9jYWwueSwgeUJvdDogb2ZmLnRvcCArIGxvY2FsLnlCb3R9OwogICAgfQoKICAgIHZhciBjYWNoZWRIZWlnaHQsIGNhY2hlZEhlaWdodEZvciwgbWVhc3VyZVRleHQ7CiAgICBmdW5jdGlvbiB0ZXh0SGVpZ2h0KCkgewogICAgICBpZiAobWVhc3VyZVRleHQgPT0gbnVsbCkgewogICAgICAgIG1lYXN1cmVUZXh0ID0gIjxwcmU+IjsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ5OyArK2kpIG1lYXN1cmVUZXh0ICs9ICJ4PGJyLz4iOwogICAgICAgIG1lYXN1cmVUZXh0ICs9ICJ4PC9wcmU+IjsKICAgICAgfQogICAgICB2YXIgb2Zmc2V0SGVpZ2h0ID0gbGluZURpdi5jbGllbnRIZWlnaHQ7CiAgICAgIGlmIChvZmZzZXRIZWlnaHQgPT0gY2FjaGVkSGVpZ2h0Rm9yKSByZXR1cm4gY2FjaGVkSGVpZ2h0OwogICAgICBjYWNoZWRIZWlnaHRGb3IgPSBvZmZzZXRIZWlnaHQ7CiAgICAgIG1lYXN1cmUuaW5uZXJIVE1MID0gbWVhc3VyZVRleHQ7CiAgICAgIGNhY2hlZEhlaWdodCA9IG1lYXN1cmUuZmlyc3RDaGlsZC5vZmZzZXRIZWlnaHQgLyA1MCB8fCAxOwogICAgICBtZWFzdXJlLmlubmVySFRNTCA9ICIiOwogICAgICByZXR1cm4gY2FjaGVkSGVpZ2h0OwogICAgfQogICAgdmFyIGNhY2hlZFdpZHRoLCBjYWNoZWRXaWR0aEZvciA9IDA7CiAgICBmdW5jdGlvbiBjaGFyV2lkdGgoKSB7CiAgICAgIGlmIChzY3JvbGxlci5jbGllbnRXaWR0aCA9PSBjYWNoZWRXaWR0aEZvcikgcmV0dXJuIGNhY2hlZFdpZHRoOwogICAgICBjYWNoZWRXaWR0aEZvciA9IHNjcm9sbGVyLmNsaWVudFdpZHRoOwogICAgICByZXR1cm4gKGNhY2hlZFdpZHRoID0gc3RyaW5nV2lkdGgoIngiKSk7CiAgICB9CiAgICBmdW5jdGlvbiBwYWRkaW5nVG9wKCkge3JldHVybiBsaW5lU3BhY2Uub2Zmc2V0VG9wO30KICAgIGZ1bmN0aW9uIHBhZGRpbmdMZWZ0KCkge3JldHVybiBsaW5lU3BhY2Uub2Zmc2V0TGVmdDt9CgogICAgZnVuY3Rpb24gcG9zRnJvbU1vdXNlKGUsIGxpYmVyYWwpIHsKICAgICAgdmFyIG9mZlcgPSBlbHRPZmZzZXQoc2Nyb2xsZXIsIHRydWUpLCB4LCB5OwogICAgICAvLyBGYWlscyB1bnByZWRpY3RhYmx5IG9uIElFWzY3XSB3aGVuIG1vdXNlIGlzIGRyYWdnZWQgYXJvdW5kIHF1aWNrbHkuCiAgICAgIHRyeSB7IHggPSBlLmNsaWVudFg7IHkgPSBlLmNsaWVudFk7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIG51bGw7IH0KICAgICAgLy8gVGhpcyBpcyBhIG1lc3Mgb2YgYSBoZXVyaXN0aWMgdG8gdHJ5IGFuZCBkZXRlcm1pbmUgd2hldGhlciBhCiAgICAgIC8vIHNjcm9sbC1iYXIgd2FzIGNsaWNrZWQgb3Igbm90LCBhbmQgdG8gcmV0dXJuIG51bGwgaWYgb25lIHdhcwogICAgICAvLyAoYW5kICFsaWJlcmFsKS4KICAgICAgaWYgKCFsaWJlcmFsICYmICh4IC0gb2ZmVy5sZWZ0ID4gc2Nyb2xsZXIuY2xpZW50V2lkdGggfHwgeSAtIG9mZlcudG9wID4gc2Nyb2xsZXIuY2xpZW50SGVpZ2h0KSkKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgdmFyIG9mZkwgPSBlbHRPZmZzZXQobGluZVNwYWNlLCB0cnVlKTsKICAgICAgcmV0dXJuIGNvb3Jkc0NoYXIoeCAtIG9mZkwubGVmdCwgeSAtIG9mZkwudG9wKTsKICAgIH0KICAgIGZ1bmN0aW9uIG9uQ29udGV4dE1lbnUoZSkgewogICAgICB2YXIgcG9zID0gcG9zRnJvbU1vdXNlKGUpOwogICAgICBpZiAoIXBvcyB8fCB3aW5kb3cub3BlcmEpIHJldHVybjsgLy8gT3BlcmEgaXMgZGlmZmljdWx0LgogICAgICBpZiAocG9zRXEoc2VsLmZyb20sIHNlbC50bykgfHwgcG9zTGVzcyhwb3MsIHNlbC5mcm9tKSB8fCAhcG9zTGVzcyhwb3MsIHNlbC50bykpCiAgICAgICAgb3BlcmF0aW9uKHNldEN1cnNvcikocG9zLmxpbmUsIHBvcy5jaCk7CgogICAgICB2YXIgb2xkQ1NTID0gaW5wdXQuc3R5bGUuY3NzVGV4dDsKICAgICAgaW5wdXREaXYuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOwogICAgICBpbnB1dC5zdHlsZS5jc3NUZXh0ID0gInBvc2l0aW9uOiBmaXhlZDsgd2lkdGg6IDMwcHg7IGhlaWdodDogMzBweDsgdG9wOiAiICsgKGUuY2xpZW50WSAtIDUpICsKICAgICAgICAicHg7IGxlZnQ6ICIgKyAoZS5jbGllbnRYIC0gNSkgKyAicHg7IHotaW5kZXg6IDEwMDA7IGJhY2tncm91bmQ6IHdoaXRlOyAiICsKICAgICAgICAiYm9yZGVyLXdpZHRoOiAwOyBvdXRsaW5lOiBub25lOyBvdmVyZmxvdzogaGlkZGVuOyBvcGFjaXR5OiAuMDU7IGZpbHRlcjogYWxwaGEob3BhY2l0eT01KTsiOwogICAgICBsZWF2ZUlucHV0QWxvbmUgPSB0cnVlOwogICAgICB2YXIgdmFsID0gaW5wdXQudmFsdWUgPSBnZXRTZWxlY3Rpb24oKTsKICAgICAgZm9jdXNJbnB1dCgpOwogICAgICBpbnB1dC5zZWxlY3QoKTsKICAgICAgZnVuY3Rpb24gcmVoaWRlKCkgewogICAgICAgIHZhciBuZXdWYWwgPSBzcGxpdExpbmVzKGlucHV0LnZhbHVlKS5qb2luKCJcbiIpOwogICAgICAgIGlmIChuZXdWYWwgIT0gdmFsKSBvcGVyYXRpb24ocmVwbGFjZVNlbGVjdGlvbikobmV3VmFsLCAiZW5kIik7CiAgICAgICAgaW5wdXREaXYuc3R5bGUucG9zaXRpb24gPSAicmVsYXRpdmUiOwogICAgICAgIGlucHV0LnN0eWxlLmNzc1RleHQgPSBvbGRDU1M7CiAgICAgICAgbGVhdmVJbnB1dEFsb25lID0gZmFsc2U7CiAgICAgICAgcmVzZXRJbnB1dCh0cnVlKTsKICAgICAgICBzbG93UG9sbCgpOwogICAgICB9CgogICAgICBpZiAoZ2Vja28pIHsKICAgICAgICBlX3N0b3AoZSk7CiAgICAgICAgdmFyIG1vdXNldXAgPSBjb25uZWN0KHdpbmRvdywgIm1vdXNldXAiLCBmdW5jdGlvbigpIHsKICAgICAgICAgIG1vdXNldXAoKTsKICAgICAgICAgIHNldFRpbWVvdXQocmVoaWRlLCAyMCk7CiAgICAgICAgfSwgdHJ1ZSk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgc2V0VGltZW91dChyZWhpZGUsIDUwKTsKICAgICAgfQogICAgfQoKICAgIC8vIEN1cnNvci1ibGlua2luZwogICAgZnVuY3Rpb24gcmVzdGFydEJsaW5rKCkgewogICAgICBjbGVhckludGVydmFsKGJsaW5rZXIpOwogICAgICB2YXIgb24gPSB0cnVlOwogICAgICBjdXJzb3Iuc3R5bGUudmlzaWJpbGl0eSA9ICIiOwogICAgICBibGlua2VyID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7CiAgICAgICAgY3Vyc29yLnN0eWxlLnZpc2liaWxpdHkgPSAob24gPSAhb24pID8gIiIgOiAiaGlkZGVuIjsKICAgICAgfSwgNjUwKTsKICAgIH0KCiAgICB2YXIgbWF0Y2hpbmcgPSB7IigiOiAiKT4iLCAiKSI6ICIoPCIsICJbIjogIl0+IiwgIl0iOiAiWzwiLCAieyI6ICJ9PiIsICJ9IjogIns8In07CiAgICBmdW5jdGlvbiBtYXRjaEJyYWNrZXRzKGF1dG9jbGVhcikgewogICAgICB2YXIgaGVhZCA9IHNlbC5pbnZlcnRlZCA/IHNlbC5mcm9tIDogc2VsLnRvLCBsaW5lID0gZ2V0TGluZShoZWFkLmxpbmUpLCBwb3MgPSBoZWFkLmNoIC0gMTsKICAgICAgdmFyIG1hdGNoID0gKHBvcyA+PSAwICYmIG1hdGNoaW5nW2xpbmUudGV4dC5jaGFyQXQocG9zKV0pIHx8IG1hdGNoaW5nW2xpbmUudGV4dC5jaGFyQXQoKytwb3MpXTsKICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuOwogICAgICB2YXIgY2ggPSBtYXRjaC5jaGFyQXQoMCksIGZvcndhcmQgPSBtYXRjaC5jaGFyQXQoMSkgPT0gIj4iLCBkID0gZm9yd2FyZCA/IDEgOiAtMSwgc3QgPSBsaW5lLnN0eWxlczsKICAgICAgZm9yICh2YXIgb2ZmID0gcG9zICsgMSwgaSA9IDAsIGUgPSBzdC5sZW5ndGg7IGkgPCBlOyBpKz0yKQogICAgICAgIGlmICgob2ZmIC09IHN0W2ldLmxlbmd0aCkgPD0gMCkge3ZhciBzdHlsZSA9IHN0W2krMV07IGJyZWFrO30KCiAgICAgIHZhciBzdGFjayA9IFtsaW5lLnRleHQuY2hhckF0KHBvcyldLCByZSA9IC9bKCl7fVtcXV0vOwogICAgICBmdW5jdGlvbiBzY2FuKGxpbmUsIGZyb20sIHRvKSB7CiAgICAgICAgaWYgKCFsaW5lLnRleHQpIHJldHVybjsKICAgICAgICB2YXIgc3QgPSBsaW5lLnN0eWxlcywgcG9zID0gZm9yd2FyZCA/IDAgOiBsaW5lLnRleHQubGVuZ3RoIC0gMSwgY3VyOwogICAgICAgIGZvciAodmFyIGkgPSBmb3J3YXJkID8gMCA6IHN0Lmxlbmd0aCAtIDIsIGUgPSBmb3J3YXJkID8gc3QubGVuZ3RoIDogLTI7IGkgIT0gZTsgaSArPSAyKmQpIHsKICAgICAgICAgIHZhciB0ZXh0ID0gc3RbaV07CiAgICAgICAgICBpZiAoc3RbaSsxXSAhPSBudWxsICYmIHN0W2krMV0gIT0gc3R5bGUpIHtwb3MgKz0gZCAqIHRleHQubGVuZ3RoOyBjb250aW51ZTt9CiAgICAgICAgICBmb3IgKHZhciBqID0gZm9yd2FyZCA/IDAgOiB0ZXh0Lmxlbmd0aCAtIDEsIHRlID0gZm9yd2FyZCA/IHRleHQubGVuZ3RoIDogLTE7IGogIT0gdGU7IGogKz0gZCwgcG9zKz1kKSB7CiAgICAgICAgICAgIGlmIChwb3MgPj0gZnJvbSAmJiBwb3MgPCB0byAmJiByZS50ZXN0KGN1ciA9IHRleHQuY2hhckF0KGopKSkgewogICAgICAgICAgICAgIHZhciBtYXRjaCA9IG1hdGNoaW5nW2N1cl07CiAgICAgICAgICAgICAgaWYgKG1hdGNoLmNoYXJBdCgxKSA9PSAiPiIgPT0gZm9yd2FyZCkgc3RhY2sucHVzaChjdXIpOwogICAgICAgICAgICAgIGVsc2UgaWYgKHN0YWNrLnBvcCgpICE9IG1hdGNoLmNoYXJBdCgwKSkgcmV0dXJuIHtwb3M6IHBvcywgbWF0Y2g6IGZhbHNlfTsKICAgICAgICAgICAgICBlbHNlIGlmICghc3RhY2subGVuZ3RoKSByZXR1cm4ge3BvczogcG9zLCBtYXRjaDogdHJ1ZX07CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgZm9yICh2YXIgaSA9IGhlYWQubGluZSwgZSA9IGZvcndhcmQgPyBNYXRoLm1pbihpICsgMTAwLCBkb2Muc2l6ZSkgOiBNYXRoLm1heCgtMSwgaSAtIDEwMCk7IGkgIT0gZTsgaSs9ZCkgewogICAgICAgIHZhciBsaW5lID0gZ2V0TGluZShpKSwgZmlyc3QgPSBpID09IGhlYWQubGluZTsKICAgICAgICB2YXIgZm91bmQgPSBzY2FuKGxpbmUsIGZpcnN0ICYmIGZvcndhcmQgPyBwb3MgKyAxIDogMCwgZmlyc3QgJiYgIWZvcndhcmQgPyBwb3MgOiBsaW5lLnRleHQubGVuZ3RoKTsKICAgICAgICBpZiAoZm91bmQpIGJyZWFrOwogICAgICB9CiAgICAgIGlmICghZm91bmQpIGZvdW5kID0ge3BvczogbnVsbCwgbWF0Y2g6IGZhbHNlfTsKICAgICAgdmFyIHN0eWxlID0gZm91bmQubWF0Y2ggPyAiQ29kZU1pcnJvci1tYXRjaGluZ2JyYWNrZXQiIDogIkNvZGVNaXJyb3Itbm9ubWF0Y2hpbmdicmFja2V0IjsKICAgICAgdmFyIG9uZSA9IG1hcmtUZXh0KHtsaW5lOiBoZWFkLmxpbmUsIGNoOiBwb3N9LCB7bGluZTogaGVhZC5saW5lLCBjaDogcG9zKzF9LCBzdHlsZSksCiAgICAgICAgICB0d28gPSBmb3VuZC5wb3MgIT0gbnVsbCAmJiBtYXJrVGV4dCh7bGluZTogaSwgY2g6IGZvdW5kLnBvc30sIHtsaW5lOiBpLCBjaDogZm91bmQucG9zICsgMX0sIHN0eWxlKTsKICAgICAgdmFyIGNsZWFyID0gb3BlcmF0aW9uKGZ1bmN0aW9uKCl7b25lLmNsZWFyKCk7IHR3byAmJiB0d28uY2xlYXIoKTt9KTsKICAgICAgaWYgKGF1dG9jbGVhcikgc2V0VGltZW91dChjbGVhciwgODAwKTsKICAgICAgZWxzZSBicmFja2V0SGlnaGxpZ2h0ZWQgPSBjbGVhcjsKICAgIH0KCiAgICAvLyBGaW5kcyB0aGUgbGluZSB0byBzdGFydCB3aXRoIHdoZW4gc3RhcnRpbmcgYSBwYXJzZS4gVHJpZXMgdG8KICAgIC8vIGZpbmQgYSBsaW5lIHdpdGggYSBzdGF0ZUFmdGVyLCBzbyB0aGF0IGl0IGNhbiBzdGFydCB3aXRoIGEKICAgIC8vIHZhbGlkIHN0YXRlLiBJZiB0aGF0IGZhaWxzLCBpdCByZXR1cm5zIHRoZSBsaW5lIHdpdGggdGhlCiAgICAvLyBzbWFsbGVzdCBpbmRlbnRhdGlvbiwgd2hpY2ggdGVuZHMgdG8gbmVlZCB0aGUgbGVhc3QgY29udGV4dCB0bwogICAgLy8gcGFyc2UgY29ycmVjdGx5LgogICAgZnVuY3Rpb24gZmluZFN0YXJ0TGluZShuKSB7CiAgICAgIHZhciBtaW5pbmRlbnQsIG1pbmxpbmU7CiAgICAgIGZvciAodmFyIHNlYXJjaCA9IG4sIGxpbSA9IG4gLSA0MDsgc2VhcmNoID4gbGltOyAtLXNlYXJjaCkgewogICAgICAgIGlmIChzZWFyY2ggPT0gMCkgcmV0dXJuIDA7CiAgICAgICAgdmFyIGxpbmUgPSBnZXRMaW5lKHNlYXJjaC0xKTsKICAgICAgICBpZiAobGluZS5zdGF0ZUFmdGVyKSByZXR1cm4gc2VhcmNoOwogICAgICAgIHZhciBpbmRlbnRlZCA9IGxpbmUuaW5kZW50YXRpb24ob3B0aW9ucy50YWJTaXplKTsKICAgICAgICBpZiAobWlubGluZSA9PSBudWxsIHx8IG1pbmluZGVudCA+IGluZGVudGVkKSB7CiAgICAgICAgICBtaW5saW5lID0gc2VhcmNoIC0gMTsKICAgICAgICAgIG1pbmluZGVudCA9IGluZGVudGVkOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gbWlubGluZTsKICAgIH0KICAgIGZ1bmN0aW9uIGdldFN0YXRlQmVmb3JlKG4pIHsKICAgICAgdmFyIHN0YXJ0ID0gZmluZFN0YXJ0TGluZShuKSwgc3RhdGUgPSBzdGFydCAmJiBnZXRMaW5lKHN0YXJ0LTEpLnN0YXRlQWZ0ZXI7CiAgICAgIGlmICghc3RhdGUpIHN0YXRlID0gc3RhcnRTdGF0ZShtb2RlKTsKICAgICAgZWxzZSBzdGF0ZSA9IGNvcHlTdGF0ZShtb2RlLCBzdGF0ZSk7CiAgICAgIGRvYy5pdGVyKHN0YXJ0LCBuLCBmdW5jdGlvbihsaW5lKSB7CiAgICAgICAgbGluZS5oaWdobGlnaHQobW9kZSwgc3RhdGUsIG9wdGlvbnMudGFiU2l6ZSk7CiAgICAgICAgbGluZS5zdGF0ZUFmdGVyID0gY29weVN0YXRlKG1vZGUsIHN0YXRlKTsKICAgICAgfSk7CiAgICAgIGlmIChzdGFydCA8IG4pIGNoYW5nZXMucHVzaCh7ZnJvbTogc3RhcnQsIHRvOiBufSk7CiAgICAgIGlmIChuIDwgZG9jLnNpemUgJiYgIWdldExpbmUobikuc3RhdGVBZnRlcikgd29yay5wdXNoKG4pOwogICAgICByZXR1cm4gc3RhdGU7CiAgICB9CiAgICBmdW5jdGlvbiBoaWdobGlnaHRMaW5lcyhzdGFydCwgZW5kKSB7CiAgICAgIHZhciBzdGF0ZSA9IGdldFN0YXRlQmVmb3JlKHN0YXJ0KTsKICAgICAgZG9jLml0ZXIoc3RhcnQsIGVuZCwgZnVuY3Rpb24obGluZSkgewogICAgICAgIGxpbmUuaGlnaGxpZ2h0KG1vZGUsIHN0YXRlLCBvcHRpb25zLnRhYlNpemUpOwogICAgICAgIGxpbmUuc3RhdGVBZnRlciA9IGNvcHlTdGF0ZShtb2RlLCBzdGF0ZSk7CiAgICAgIH0pOwogICAgfQogICAgZnVuY3Rpb24gaGlnaGxpZ2h0V29ya2VyKCkgewogICAgICB2YXIgZW5kID0gK25ldyBEYXRlICsgb3B0aW9ucy53b3JrVGltZTsKICAgICAgdmFyIGZvdW5kV29yayA9IHdvcmsubGVuZ3RoOwogICAgICB3aGlsZSAod29yay5sZW5ndGgpIHsKICAgICAgICBpZiAoIWdldExpbmUoc2hvd2luZ0Zyb20pLnN0YXRlQWZ0ZXIpIHZhciB0YXNrID0gc2hvd2luZ0Zyb207CiAgICAgICAgZWxzZSB2YXIgdGFzayA9IHdvcmsucG9wKCk7CiAgICAgICAgaWYgKHRhc2sgPj0gZG9jLnNpemUpIGNvbnRpbnVlOwogICAgICAgIHZhciBzdGFydCA9IGZpbmRTdGFydExpbmUodGFzayksIHN0YXRlID0gc3RhcnQgJiYgZ2V0TGluZShzdGFydC0xKS5zdGF0ZUFmdGVyOwogICAgICAgIGlmIChzdGF0ZSkgc3RhdGUgPSBjb3B5U3RhdGUobW9kZSwgc3RhdGUpOwogICAgICAgIGVsc2Ugc3RhdGUgPSBzdGFydFN0YXRlKG1vZGUpOwoKICAgICAgICB2YXIgdW5jaGFuZ2VkID0gMCwgY29tcGFyZSA9IG1vZGUuY29tcGFyZVN0YXRlcywgcmVhbENoYW5nZSA9IGZhbHNlLAogICAgICAgICAgICBpID0gc3RhcnQsIGJhaWwgPSBmYWxzZTsKICAgICAgICBkb2MuaXRlcihpLCBkb2Muc2l6ZSwgZnVuY3Rpb24obGluZSkgewogICAgICAgICAgdmFyIGhhZFN0YXRlID0gbGluZS5zdGF0ZUFmdGVyOwogICAgICAgICAgaWYgKCtuZXcgRGF0ZSA+IGVuZCkgewogICAgICAgICAgICB3b3JrLnB1c2goaSk7CiAgICAgICAgICAgIHN0YXJ0V29ya2VyKG9wdGlvbnMud29ya0RlbGF5KTsKICAgICAgICAgICAgaWYgKHJlYWxDaGFuZ2UpIGNoYW5nZXMucHVzaCh7ZnJvbTogdGFzaywgdG86IGkgKyAxfSk7CiAgICAgICAgICAgIHJldHVybiAoYmFpbCA9IHRydWUpOwogICAgICAgICAgfQogICAgICAgICAgdmFyIGNoYW5nZWQgPSBsaW5lLmhpZ2hsaWdodChtb2RlLCBzdGF0ZSwgb3B0aW9ucy50YWJTaXplKTsKICAgICAgICAgIGlmIChjaGFuZ2VkKSByZWFsQ2hhbmdlID0gdHJ1ZTsKICAgICAgICAgIGxpbmUuc3RhdGVBZnRlciA9IGNvcHlTdGF0ZShtb2RlLCBzdGF0ZSk7CiAgICAgICAgICBpZiAoY29tcGFyZSkgewogICAgICAgICAgICBpZiAoaGFkU3RhdGUgJiYgY29tcGFyZShoYWRTdGF0ZSwgc3RhdGUpKSByZXR1cm4gdHJ1ZTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmIChjaGFuZ2VkICE9PSBmYWxzZSB8fCAhaGFkU3RhdGUpIHVuY2hhbmdlZCA9IDA7CiAgICAgICAgICAgIGVsc2UgaWYgKCsrdW5jaGFuZ2VkID4gMyAmJiAoIW1vZGUuaW5kZW50IHx8IG1vZGUuaW5kZW50KGhhZFN0YXRlLCAiIikgPT0gbW9kZS5pbmRlbnQoc3RhdGUsICIiKSkpCiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICB9CiAgICAgICAgICArK2k7CiAgICAgICAgfSk7CiAgICAgICAgaWYgKGJhaWwpIHJldHVybjsKICAgICAgICBpZiAocmVhbENoYW5nZSkgY2hhbmdlcy5wdXNoKHtmcm9tOiB0YXNrLCB0bzogaSArIDF9KTsKICAgICAgfQogICAgICBpZiAoZm91bmRXb3JrICYmIG9wdGlvbnMub25IaWdobGlnaHRDb21wbGV0ZSkKICAgICAgICBvcHRpb25zLm9uSGlnaGxpZ2h0Q29tcGxldGUoaW5zdGFuY2UpOwogICAgfQogICAgZnVuY3Rpb24gc3RhcnRXb3JrZXIodGltZSkgewogICAgICBpZiAoIXdvcmsubGVuZ3RoKSByZXR1cm47CiAgICAgIGhpZ2hsaWdodC5zZXQodGltZSwgb3BlcmF0aW9uKGhpZ2hsaWdodFdvcmtlcikpOwogICAgfQoKICAgIC8vIE9wZXJhdGlvbnMgYXJlIHVzZWQgdG8gd3JhcCBjaGFuZ2VzIGluIHN1Y2ggYSB3YXkgdGhhdCBlYWNoCiAgICAvLyBjaGFuZ2Ugd29uJ3QgaGF2ZSB0byB1cGRhdGUgdGhlIGN1cnNvciBhbmQgZGlzcGxheSAod2hpY2ggd291bGQKICAgIC8vIGJlIGF3a3dhcmQsIHNsb3csIGFuZCBlcnJvci1wcm9uZSksIGJ1dCBpbnN0ZWFkIHVwZGF0ZXMgYXJlCiAgICAvLyBiYXRjaGVkIGFuZCB0aGVuIGFsbCBjb21iaW5lZCBhbmQgZXhlY3V0ZWQgYXQgb25jZS4KICAgIGZ1bmN0aW9uIHN0YXJ0T3BlcmF0aW9uKCkgewogICAgICB1cGRhdGVJbnB1dCA9IHVzZXJTZWxDaGFuZ2UgPSB0ZXh0Q2hhbmdlZCA9IG51bGw7CiAgICAgIGNoYW5nZXMgPSBbXTsgc2VsZWN0aW9uQ2hhbmdlZCA9IGZhbHNlOyBjYWxsYmFja3MgPSBbXTsKICAgIH0KICAgIGZ1bmN0aW9uIGVuZE9wZXJhdGlvbigpIHsKICAgICAgdmFyIHJlU2Nyb2xsID0gZmFsc2UsIHVwZGF0ZWQ7CiAgICAgIGlmIChzZWxlY3Rpb25DaGFuZ2VkKSByZVNjcm9sbCA9ICFzY3JvbGxDdXJzb3JJbnRvVmlldygpOwogICAgICBpZiAoY2hhbmdlcy5sZW5ndGgpIHVwZGF0ZWQgPSB1cGRhdGVEaXNwbGF5KGNoYW5nZXMsIHRydWUpOwogICAgICBlbHNlIHsKICAgICAgICBpZiAoc2VsZWN0aW9uQ2hhbmdlZCkgdXBkYXRlU2VsZWN0aW9uKCk7CiAgICAgICAgaWYgKGd1dHRlckRpcnR5KSB1cGRhdGVHdXR0ZXIoKTsKICAgICAgfQogICAgICBpZiAocmVTY3JvbGwpIHNjcm9sbEN1cnNvckludG9WaWV3KCk7CiAgICAgIGlmIChzZWxlY3Rpb25DaGFuZ2VkKSB7c2Nyb2xsRWRpdG9ySW50b1ZpZXcoKTsgcmVzdGFydEJsaW5rKCk7fQoKICAgICAgaWYgKGZvY3VzZWQgJiYgIWxlYXZlSW5wdXRBbG9uZSAmJgogICAgICAgICAgKHVwZGF0ZUlucHV0ID09PSB0cnVlIHx8ICh1cGRhdGVJbnB1dCAhPT0gZmFsc2UgJiYgc2VsZWN0aW9uQ2hhbmdlZCkpKQogICAgICAgIHJlc2V0SW5wdXQodXNlclNlbENoYW5nZSk7CgogICAgICBpZiAoc2VsZWN0aW9uQ2hhbmdlZCAmJiBvcHRpb25zLm1hdGNoQnJhY2tldHMpCiAgICAgICAgc2V0VGltZW91dChvcGVyYXRpb24oZnVuY3Rpb24oKSB7CiAgICAgICAgICBpZiAoYnJhY2tldEhpZ2hsaWdodGVkKSB7YnJhY2tldEhpZ2hsaWdodGVkKCk7IGJyYWNrZXRIaWdobGlnaHRlZCA9IG51bGw7fQogICAgICAgICAgaWYgKHBvc0VxKHNlbC5mcm9tLCBzZWwudG8pKSBtYXRjaEJyYWNrZXRzKGZhbHNlKTsKICAgICAgICB9KSwgMjApOwogICAgICB2YXIgdGMgPSB0ZXh0Q2hhbmdlZCwgY2JzID0gY2FsbGJhY2tzOyAvLyB0aGVzZSBjYW4gYmUgcmVzZXQgYnkgY2FsbGJhY2tzCiAgICAgIGlmIChzZWxlY3Rpb25DaGFuZ2VkICYmIG9wdGlvbnMub25DdXJzb3JBY3Rpdml0eSkKICAgICAgICBvcHRpb25zLm9uQ3Vyc29yQWN0aXZpdHkoaW5zdGFuY2UpOwogICAgICBpZiAodGMgJiYgb3B0aW9ucy5vbkNoYW5nZSAmJiBpbnN0YW5jZSkKICAgICAgICBvcHRpb25zLm9uQ2hhbmdlKGluc3RhbmNlLCB0Yyk7CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2JzLmxlbmd0aDsgKytpKSBjYnNbaV0oaW5zdGFuY2UpOwogICAgICBpZiAodXBkYXRlZCAmJiBvcHRpb25zLm9uVXBkYXRlKSBvcHRpb25zLm9uVXBkYXRlKGluc3RhbmNlKTsKICAgIH0KICAgIHZhciBuZXN0ZWRPcGVyYXRpb24gPSAwOwogICAgZnVuY3Rpb24gb3BlcmF0aW9uKGYpIHsKICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAgICAgIGlmICghbmVzdGVkT3BlcmF0aW9uKyspIHN0YXJ0T3BlcmF0aW9uKCk7CiAgICAgICAgdHJ5IHt2YXIgcmVzdWx0ID0gZi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO30KICAgICAgICBmaW5hbGx5IHtpZiAoIS0tbmVzdGVkT3BlcmF0aW9uKSBlbmRPcGVyYXRpb24oKTt9CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfTsKICAgIH0KCiAgICBmb3IgKHZhciBleHQgaW4gZXh0ZW5zaW9ucykKICAgICAgaWYgKGV4dGVuc2lvbnMucHJvcGVydHlJc0VudW1lcmFibGUoZXh0KSAmJgogICAgICAgICAgIWluc3RhbmNlLnByb3BlcnR5SXNFbnVtZXJhYmxlKGV4dCkpCiAgICAgICAgaW5zdGFuY2VbZXh0XSA9IGV4dGVuc2lvbnNbZXh0XTsKICAgIHJldHVybiBpbnN0YW5jZTsKICB9IC8vIChlbmQgb2YgZnVuY3Rpb24gQ29kZU1pcnJvcikKCiAgLy8gVGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBvcHRpb25zLgogIENvZGVNaXJyb3IuZGVmYXVsdHMgPSB7CiAgICB2YWx1ZTogIiIsCiAgICBtb2RlOiBudWxsLAogICAgdGhlbWU6ICJkZWZhdWx0IiwKICAgIGluZGVudFVuaXQ6IDIsCiAgICBpbmRlbnRXaXRoVGFiczogZmFsc2UsCiAgICBzbWFydEluZGVudDogdHJ1ZSwKICAgIHRhYlNpemU6IDQsCiAgICBrZXlNYXA6ICJkZWZhdWx0IiwKICAgIGV4dHJhS2V5czogbnVsbCwKICAgIGVsZWN0cmljQ2hhcnM6IHRydWUsCiAgICBvbktleUV2ZW50OiBudWxsLAogICAgbGluZVdyYXBwaW5nOiBmYWxzZSwKICAgIGxpbmVOdW1iZXJzOiBmYWxzZSwKICAgIGd1dHRlcjogZmFsc2UsCiAgICBmaXhlZEd1dHRlcjogZmFsc2UsCiAgICBmaXJzdExpbmVOdW1iZXI6IDEsCiAgICByZWFkT25seTogZmFsc2UsCiAgICBvbkNoYW5nZTogbnVsbCwKICAgIG9uQ3Vyc29yQWN0aXZpdHk6IG51bGwsCiAgICBvbkd1dHRlckNsaWNrOiBudWxsLAogICAgb25IaWdobGlnaHRDb21wbGV0ZTogbnVsbCwKICAgIG9uVXBkYXRlOiBudWxsLAogICAgb25Gb2N1czogbnVsbCwgb25CbHVyOiBudWxsLCBvblNjcm9sbDogbnVsbCwKICAgIG1hdGNoQnJhY2tldHM6IGZhbHNlLAogICAgd29ya1RpbWU6IDEwMCwKICAgIHdvcmtEZWxheTogMjAwLAogICAgcG9sbEludGVydmFsOiAxMDAsCiAgICB1bmRvRGVwdGg6IDQwLAogICAgdGFiaW5kZXg6IG51bGwsCiAgICBkb2N1bWVudDogd2luZG93LmRvY3VtZW50CiAgfTsKCiAgdmFyIGlvcyA9IC9BcHBsZVdlYktpdC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSAmJiAvTW9iaWxlXC9cdysvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7CiAgdmFyIG1hYyA9IGlvcyB8fCAvTWFjLy50ZXN0KG5hdmlnYXRvci5wbGF0Zm9ybSk7CiAgdmFyIHdpbiA9IC9XaW4vLnRlc3QobmF2aWdhdG9yLnBsYXRmb3JtKTsKCiAgLy8gS25vd24gbW9kZXMsIGJ5IG5hbWUgYW5kIGJ5IE1JTUUKICB2YXIgbW9kZXMgPSB7fSwgbWltZU1vZGVzID0ge307CiAgQ29kZU1pcnJvci5kZWZpbmVNb2RlID0gZnVuY3Rpb24obmFtZSwgbW9kZSkgewogICAgaWYgKCFDb2RlTWlycm9yLmRlZmF1bHRzLm1vZGUgJiYgbmFtZSAhPSAibnVsbCIpIENvZGVNaXJyb3IuZGVmYXVsdHMubW9kZSA9IG5hbWU7CiAgICBtb2Rlc1tuYW1lXSA9IG1vZGU7CiAgfTsKICBDb2RlTWlycm9yLmRlZmluZU1JTUUgPSBmdW5jdGlvbihtaW1lLCBzcGVjKSB7CiAgICBtaW1lTW9kZXNbbWltZV0gPSBzcGVjOwogIH07CiAgQ29kZU1pcnJvci5nZXRNb2RlID0gZnVuY3Rpb24ob3B0aW9ucywgc3BlYykgewogICAgaWYgKHR5cGVvZiBzcGVjID09ICJzdHJpbmciICYmIG1pbWVNb2Rlcy5oYXNPd25Qcm9wZXJ0eShzcGVjKSkKICAgICAgc3BlYyA9IG1pbWVNb2Rlc1tzcGVjXTsKICAgIGlmICh0eXBlb2Ygc3BlYyA9PSAic3RyaW5nIikKICAgICAgdmFyIG1uYW1lID0gc3BlYywgY29uZmlnID0ge307CiAgICBlbHNlIGlmIChzcGVjICE9IG51bGwpCiAgICAgIHZhciBtbmFtZSA9IHNwZWMubmFtZSwgY29uZmlnID0gc3BlYzsKICAgIHZhciBtZmFjdG9yeSA9IG1vZGVzW21uYW1lXTsKICAgIGlmICghbWZhY3RvcnkpIHsKICAgICAgaWYgKHdpbmRvdy5jb25zb2xlKSBjb25zb2xlLndhcm4oIk5vIG1vZGUgIiArIG1uYW1lICsgIiBmb3VuZCwgZmFsbGluZyBiYWNrIHRvIHBsYWluIHRleHQuIik7CiAgICAgIHJldHVybiBDb2RlTWlycm9yLmdldE1vZGUob3B0aW9ucywgInRleHQvcGxhaW4iKTsKICAgIH0KICAgIHJldHVybiBtZmFjdG9yeShvcHRpb25zLCBjb25maWcgfHwge30pOwogIH07CiAgQ29kZU1pcnJvci5saXN0TW9kZXMgPSBmdW5jdGlvbigpIHsKICAgIHZhciBsaXN0ID0gW107CiAgICBmb3IgKHZhciBtIGluIG1vZGVzKQogICAgICBpZiAobW9kZXMucHJvcGVydHlJc0VudW1lcmFibGUobSkpIGxpc3QucHVzaChtKTsKICAgIHJldHVybiBsaXN0OwogIH07CiAgQ29kZU1pcnJvci5saXN0TUlNRXMgPSBmdW5jdGlvbigpIHsKICAgIHZhciBsaXN0ID0gW107CiAgICBmb3IgKHZhciBtIGluIG1pbWVNb2RlcykKICAgICAgaWYgKG1pbWVNb2Rlcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShtKSkgbGlzdC5wdXNoKHttaW1lOiBtLCBtb2RlOiBtaW1lTW9kZXNbbV19KTsKICAgIHJldHVybiBsaXN0OwogIH07CgogIHZhciBleHRlbnNpb25zID0gQ29kZU1pcnJvci5leHRlbnNpb25zID0ge307CiAgQ29kZU1pcnJvci5kZWZpbmVFeHRlbnNpb24gPSBmdW5jdGlvbihuYW1lLCBmdW5jKSB7CiAgICBleHRlbnNpb25zW25hbWVdID0gZnVuYzsKICB9OwoKICB2YXIgY29tbWFuZHMgPSBDb2RlTWlycm9yLmNvbW1hbmRzID0gewogICAgc2VsZWN0QWxsOiBmdW5jdGlvbihjbSkge2NtLnNldFNlbGVjdGlvbih7bGluZTogMCwgY2g6IDB9LCB7bGluZTogY20ubGluZUNvdW50KCkgLSAxfSk7fSwKICAgIGtpbGxMaW5lOiBmdW5jdGlvbihjbSkgewogICAgICB2YXIgZnJvbSA9IGNtLmdldEN1cnNvcih0cnVlKSwgdG8gPSBjbS5nZXRDdXJzb3IoZmFsc2UpLCBzZWwgPSAhcG9zRXEoZnJvbSwgdG8pOwogICAgICBpZiAoIXNlbCAmJiBjbS5nZXRMaW5lKGZyb20ubGluZSkubGVuZ3RoID09IGZyb20uY2gpIGNtLnJlcGxhY2VSYW5nZSgiIiwgZnJvbSwge2xpbmU6IGZyb20ubGluZSArIDEsIGNoOiAwfSk7CiAgICAgIGVsc2UgY20ucmVwbGFjZVJhbmdlKCIiLCBmcm9tLCBzZWwgPyB0byA6IHtsaW5lOiBmcm9tLmxpbmV9KTsKICAgIH0sCiAgICBkZWxldGVMaW5lOiBmdW5jdGlvbihjbSkge3ZhciBsID0gY20uZ2V0Q3Vyc29yKCkubGluZTsgY20ucmVwbGFjZVJhbmdlKCIiLCB7bGluZTogbCwgY2g6IDB9LCB7bGluZTogbH0pO30sCiAgICB1bmRvOiBmdW5jdGlvbihjbSkge2NtLnVuZG8oKTt9LAogICAgcmVkbzogZnVuY3Rpb24oY20pIHtjbS5yZWRvKCk7fSwKICAgIGdvRG9jU3RhcnQ6IGZ1bmN0aW9uKGNtKSB7Y20uc2V0Q3Vyc29yKDAsIDAsIHRydWUpO30sCiAgICBnb0RvY0VuZDogZnVuY3Rpb24oY20pIHtjbS5zZXRTZWxlY3Rpb24oe2xpbmU6IGNtLmxpbmVDb3VudCgpIC0gMX0sIG51bGwsIHRydWUpO30sCiAgICBnb0xpbmVTdGFydDogZnVuY3Rpb24oY20pIHtjbS5zZXRDdXJzb3IoY20uZ2V0Q3Vyc29yKCkubGluZSwgMCwgdHJ1ZSk7fSwKICAgIGdvTGluZVN0YXJ0U21hcnQ6IGZ1bmN0aW9uKGNtKSB7CiAgICAgIHZhciBjdXIgPSBjbS5nZXRDdXJzb3IoKTsKICAgICAgdmFyIHRleHQgPSBjbS5nZXRMaW5lKGN1ci5saW5lKSwgZmlyc3ROb25XUyA9IE1hdGgubWF4KDAsIHRleHQuc2VhcmNoKC9cUy8pKTsKICAgICAgY20uc2V0Q3Vyc29yKGN1ci5saW5lLCBjdXIuY2ggPD0gZmlyc3ROb25XUyAmJiBjdXIuY2ggPyAwIDogZmlyc3ROb25XUywgdHJ1ZSk7CiAgICB9LAogICAgZ29MaW5lRW5kOiBmdW5jdGlvbihjbSkge2NtLnNldFNlbGVjdGlvbih7bGluZTogY20uZ2V0Q3Vyc29yKCkubGluZX0sIG51bGwsIHRydWUpO30sCiAgICBnb0xpbmVVcDogZnVuY3Rpb24oY20pIHtjbS5tb3ZlVigtMSwgImxpbmUiKTt9LAogICAgZ29MaW5lRG93bjogZnVuY3Rpb24oY20pIHtjbS5tb3ZlVigxLCAibGluZSIpO30sCiAgICBnb1BhZ2VVcDogZnVuY3Rpb24oY20pIHtjbS5tb3ZlVigtMSwgInBhZ2UiKTt9LAogICAgZ29QYWdlRG93bjogZnVuY3Rpb24oY20pIHtjbS5tb3ZlVigxLCAicGFnZSIpO30sCiAgICBnb0NoYXJMZWZ0OiBmdW5jdGlvbihjbSkge2NtLm1vdmVIKC0xLCAiY2hhciIpO30sCiAgICBnb0NoYXJSaWdodDogZnVuY3Rpb24oY20pIHtjbS5tb3ZlSCgxLCAiY2hhciIpO30sCiAgICBnb0NvbHVtbkxlZnQ6IGZ1bmN0aW9uKGNtKSB7Y20ubW92ZUgoLTEsICJjb2x1bW4iKTt9LAogICAgZ29Db2x1bW5SaWdodDogZnVuY3Rpb24oY20pIHtjbS5tb3ZlSCgxLCAiY29sdW1uIik7fSwKICAgIGdvV29yZExlZnQ6IGZ1bmN0aW9uKGNtKSB7Y20ubW92ZUgoLTEsICJ3b3JkIik7fSwKICAgIGdvV29yZFJpZ2h0OiBmdW5jdGlvbihjbSkge2NtLm1vdmVIKDEsICJ3b3JkIik7fSwKICAgIGRlbENoYXJMZWZ0OiBmdW5jdGlvbihjbSkge2NtLmRlbGV0ZUgoLTEsICJjaGFyIik7fSwKICAgIGRlbENoYXJSaWdodDogZnVuY3Rpb24oY20pIHtjbS5kZWxldGVIKDEsICJjaGFyIik7fSwKICAgIGRlbFdvcmRMZWZ0OiBmdW5jdGlvbihjbSkge2NtLmRlbGV0ZUgoLTEsICJ3b3JkIik7fSwKICAgIGRlbFdvcmRSaWdodDogZnVuY3Rpb24oY20pIHtjbS5kZWxldGVIKDEsICJ3b3JkIik7fSwKICAgIGluZGVudEF1dG86IGZ1bmN0aW9uKGNtKSB7Y20uaW5kZW50U2VsZWN0aW9uKCJzbWFydCIpO30sCiAgICBpbmRlbnRNb3JlOiBmdW5jdGlvbihjbSkge2NtLmluZGVudFNlbGVjdGlvbigiYWRkIik7fSwKICAgIGluZGVudExlc3M6IGZ1bmN0aW9uKGNtKSB7Y20uaW5kZW50U2VsZWN0aW9uKCJzdWJ0cmFjdCIpO30sCiAgICBpbnNlcnRUYWI6IGZ1bmN0aW9uKGNtKSB7Y20ucmVwbGFjZVNlbGVjdGlvbigiXHQiLCAiZW5kIik7fSwKICAgIHRyYW5zcG9zZUNoYXJzOiBmdW5jdGlvbihjbSkgewogICAgICB2YXIgY3VyID0gY20uZ2V0Q3Vyc29yKCksIGxpbmUgPSBjbS5nZXRMaW5lKGN1ci5saW5lKTsKICAgICAgaWYgKGN1ci5jaCA+IDAgJiYgY3VyLmNoIDwgbGluZS5sZW5ndGggLSAxKQogICAgICAgIGNtLnJlcGxhY2VSYW5nZShsaW5lLmNoYXJBdChjdXIuY2gpICsgbGluZS5jaGFyQXQoY3VyLmNoIC0gMSksCiAgICAgICAgICAgICAgICAgICAgICAgIHtsaW5lOiBjdXIubGluZSwgY2g6IGN1ci5jaCAtIDF9LCB7bGluZTogY3VyLmxpbmUsIGNoOiBjdXIuY2ggKyAxfSk7CiAgICB9LAogICAgbmV3bGluZUFuZEluZGVudDogZnVuY3Rpb24oY20pIHsKICAgICAgY20ucmVwbGFjZVNlbGVjdGlvbigiXG4iLCAiZW5kIik7CiAgICAgIGNtLmluZGVudExpbmUoY20uZ2V0Q3Vyc29yKCkubGluZSk7CiAgICB9LAogICAgdG9nZ2xlT3ZlcndyaXRlOiBmdW5jdGlvbihjbSkge2NtLnRvZ2dsZU92ZXJ3cml0ZSgpO30KICB9OwoKICB2YXIga2V5TWFwID0gQ29kZU1pcnJvci5rZXlNYXAgPSB7fTsKICBrZXlNYXAuYmFzaWMgPSB7CiAgICAiTGVmdCI6ICJnb0NoYXJMZWZ0IiwgIlJpZ2h0IjogImdvQ2hhclJpZ2h0IiwgIlVwIjogImdvTGluZVVwIiwgIkRvd24iOiAiZ29MaW5lRG93biIsCiAgICAiRW5kIjogImdvTGluZUVuZCIsICJIb21lIjogImdvTGluZVN0YXJ0U21hcnQiLCAiUGFnZVVwIjogImdvUGFnZVVwIiwgIlBhZ2VEb3duIjogImdvUGFnZURvd24iLAogICAgIkRlbGV0ZSI6ICJkZWxDaGFyUmlnaHQiLCAiQmFja3NwYWNlIjogImRlbENoYXJMZWZ0IiwgIlRhYiI6ICJpbmRlbnRNb3JlIiwgIlNoaWZ0LVRhYiI6ICJpbmRlbnRMZXNzIiwKICAgICJFbnRlciI6ICJuZXdsaW5lQW5kSW5kZW50IiwgIkluc2VydCI6ICJ0b2dnbGVPdmVyd3JpdGUiCiAgfTsKICAvLyBOb3RlIHRoYXQgdGhlIHNhdmUgYW5kIGZpbmQtcmVsYXRlZCBjb21tYW5kcyBhcmVuJ3QgZGVmaW5lZCBieQogIC8vIGRlZmF1bHQuIFVua25vd24gY29tbWFuZHMgYXJlIHNpbXBseSBpZ25vcmVkLgogIGtleU1hcC5wY0RlZmF1bHQgPSB7CiAgICAiQ3RybC1BIjogInNlbGVjdEFsbCIsICJDdHJsLUQiOiAiZGVsZXRlTGluZSIsICJDdHJsLVoiOiAidW5kbyIsICJTaGlmdC1DdHJsLVoiOiAicmVkbyIsICJDdHJsLVkiOiAicmVkbyIsCiAgICAiQ3RybC1Ib21lIjogImdvRG9jU3RhcnQiLCAiQWx0LVVwIjogImdvRG9jU3RhcnQiLCAiQ3RybC1FbmQiOiAiZ29Eb2NFbmQiLCAiQ3RybC1Eb3duIjogImdvRG9jRW5kIiwKICAgICJDdHJsLUxlZnQiOiAiZ29Xb3JkTGVmdCIsICJDdHJsLVJpZ2h0IjogImdvV29yZFJpZ2h0IiwgIkFsdC1MZWZ0IjogImdvTGluZVN0YXJ0IiwgIkFsdC1SaWdodCI6ICJnb0xpbmVFbmQiLAogICAgIkN0cmwtQmFja3NwYWNlIjogImRlbFdvcmRMZWZ0IiwgIkN0cmwtRGVsZXRlIjogImRlbFdvcmRSaWdodCIsICJDdHJsLVMiOiAic2F2ZSIsICJDdHJsLUYiOiAiZmluZCIsCiAgICAiQ3RybC1HIjogImZpbmROZXh0IiwgIlNoaWZ0LUN0cmwtRyI6ICJmaW5kUHJldiIsICJTaGlmdC1DdHJsLUYiOiAicmVwbGFjZSIsICJTaGlmdC1DdHJsLVIiOiAicmVwbGFjZUFsbCIsCiAgICBmYWxsdGhyb3VnaDogImJhc2ljIgogIH07CiAga2V5TWFwLm1hY0RlZmF1bHQgPSB7CiAgICAiQ21kLUEiOiAic2VsZWN0QWxsIiwgIkNtZC1EIjogImRlbGV0ZUxpbmUiLCAiQ21kLVoiOiAidW5kbyIsICJTaGlmdC1DbWQtWiI6ICJyZWRvIiwgIkNtZC1ZIjogInJlZG8iLAogICAgIkNtZC1VcCI6ICJnb0RvY1N0YXJ0IiwgIkNtZC1FbmQiOiAiZ29Eb2NFbmQiLCAiQ21kLURvd24iOiAiZ29Eb2NFbmQiLCAiQWx0LUxlZnQiOiAiZ29Xb3JkTGVmdCIsCiAgICAiQWx0LVJpZ2h0IjogImdvV29yZFJpZ2h0IiwgIkNtZC1MZWZ0IjogImdvTGluZVN0YXJ0IiwgIkNtZC1SaWdodCI6ICJnb0xpbmVFbmQiLCAiQWx0LUJhY2tzcGFjZSI6ICJkZWxXb3JkTGVmdCIsCiAgICAiQ3RybC1BbHQtQmFja3NwYWNlIjogImRlbFdvcmRSaWdodCIsICJBbHQtRGVsZXRlIjogImRlbFdvcmRSaWdodCIsICJDbWQtUyI6ICJzYXZlIiwgIkNtZC1GIjogImZpbmQiLAogICAgIkNtZC1HIjogImZpbmROZXh0IiwgIlNoaWZ0LUNtZC1HIjogImZpbmRQcmV2IiwgIkNtZC1BbHQtRiI6ICJyZXBsYWNlIiwgIlNoaWZ0LUNtZC1BbHQtRiI6ICJyZXBsYWNlQWxsIiwKICAgIGZhbGx0aHJvdWdoOiBbImJhc2ljIiwgImVtYWNzeSJdCiAgfTsKICBrZXlNYXBbImRlZmF1bHQiXSA9IG1hYyA/IGtleU1hcC5tYWNEZWZhdWx0IDoga2V5TWFwLnBjRGVmYXVsdDsKICBrZXlNYXAuZW1hY3N5ID0gewogICAgIkN0cmwtRiI6ICJnb0NoYXJSaWdodCIsICJDdHJsLUIiOiAiZ29DaGFyTGVmdCIsICJDdHJsLVAiOiAiZ29MaW5lVXAiLCAiQ3RybC1OIjogImdvTGluZURvd24iLAogICAgIkFsdC1GIjogImdvV29yZFJpZ2h0IiwgIkFsdC1CIjogImdvV29yZExlZnQiLCAiQ3RybC1BIjogImdvTGluZVN0YXJ0IiwgIkN0cmwtRSI6ICJnb0xpbmVFbmQiLAogICAgIkN0cmwtViI6ICJnb1BhZ2VVcCIsICJTaGlmdC1DdHJsLVYiOiAiZ29QYWdlRG93biIsICJDdHJsLUQiOiAiZGVsQ2hhclJpZ2h0IiwgIkN0cmwtSCI6ICJkZWxDaGFyTGVmdCIsCiAgICAiQWx0LUQiOiAiZGVsV29yZFJpZ2h0IiwgIkFsdC1CYWNrc3BhY2UiOiAiZGVsV29yZExlZnQiLCAiQ3RybC1LIjogImtpbGxMaW5lIiwgIkN0cmwtVCI6ICJ0cmFuc3Bvc2VDaGFycyIKICB9OwoKICBmdW5jdGlvbiBsb29rdXBLZXkobmFtZSwgZXh0cmFNYXAsIG1hcCkgewogICAgZnVuY3Rpb24gbG9va3VwKG5hbWUsIG1hcCwgZnQpIHsKICAgICAgdmFyIGZvdW5kID0gbWFwW25hbWVdOwogICAgICBpZiAoZm91bmQgIT0gbnVsbCkgcmV0dXJuIGZvdW5kOwogICAgICBpZiAoZnQgPT0gbnVsbCkgZnQgPSBtYXAuZmFsbHRocm91Z2g7CiAgICAgIGlmIChmdCA9PSBudWxsKSByZXR1cm4gbWFwLmNhdGNoYWxsOwogICAgICBpZiAodHlwZW9mIGZ0ID09ICJzdHJpbmciKSByZXR1cm4gbG9va3VwKG5hbWUsIGtleU1hcFtmdF0pOwogICAgICBmb3IgKHZhciBpID0gMCwgZSA9IGZ0Lmxlbmd0aDsgaSA8IGU7ICsraSkgewogICAgICAgIGZvdW5kID0gbG9va3VwKG5hbWUsIGtleU1hcFtmdFtpXV0pOwogICAgICAgIGlmIChmb3VuZCAhPSBudWxsKSByZXR1cm4gZm91bmQ7CiAgICAgIH0KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICByZXR1cm4gZXh0cmFNYXAgPyBsb29rdXAobmFtZSwgZXh0cmFNYXAsIG1hcCkgOiBsb29rdXAobmFtZSwga2V5TWFwW21hcF0pOwogIH0KICBmdW5jdGlvbiBpc01vZGlmaWVyS2V5KGV2ZW50KSB7CiAgICB2YXIgbmFtZSA9IGtleU5hbWVzW2VfcHJvcChldmVudCwgImtleUNvZGUiKV07CiAgICByZXR1cm4gbmFtZSA9PSAiQ3RybCIgfHwgbmFtZSA9PSAiQWx0IiB8fCBuYW1lID09ICJTaGlmdCIgfHwgbmFtZSA9PSAiTW9kIjsKICB9CgogIENvZGVNaXJyb3IuZnJvbVRleHRBcmVhID0gZnVuY3Rpb24odGV4dGFyZWEsIG9wdGlvbnMpIHsKICAgIGlmICghb3B0aW9ucykgb3B0aW9ucyA9IHt9OwogICAgb3B0aW9ucy52YWx1ZSA9IHRleHRhcmVhLnZhbHVlOwogICAgaWYgKCFvcHRpb25zLnRhYmluZGV4ICYmIHRleHRhcmVhLnRhYmluZGV4KQogICAgICBvcHRpb25zLnRhYmluZGV4ID0gdGV4dGFyZWEudGFiaW5kZXg7CgogICAgZnVuY3Rpb24gc2F2ZSgpIHt0ZXh0YXJlYS52YWx1ZSA9IGluc3RhbmNlLmdldFZhbHVlKCk7fQogICAgaWYgKHRleHRhcmVhLmZvcm0pIHsKICAgICAgLy8gRGVwbG9yYWJsZSBoYWNrIHRvIG1ha2UgdGhlIHN1Ym1pdCBtZXRob2QgZG8gdGhlIHJpZ2h0IHRoaW5nLgogICAgICB2YXIgcm1TdWJtaXQgPSBjb25uZWN0KHRleHRhcmVhLmZvcm0sICJzdWJtaXQiLCBzYXZlLCB0cnVlKTsKICAgICAgaWYgKHR5cGVvZiB0ZXh0YXJlYS5mb3JtLnN1Ym1pdCA9PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgdmFyIHJlYWxTdWJtaXQgPSB0ZXh0YXJlYS5mb3JtLnN1Ym1pdDsKICAgICAgICBmdW5jdGlvbiB3cmFwcGVkU3VibWl0KCkgewogICAgICAgICAgc2F2ZSgpOwogICAgICAgICAgdGV4dGFyZWEuZm9ybS5zdWJtaXQgPSByZWFsU3VibWl0OwogICAgICAgICAgdGV4dGFyZWEuZm9ybS5zdWJtaXQoKTsKICAgICAgICAgIHRleHRhcmVhLmZvcm0uc3VibWl0ID0gd3JhcHBlZFN1Ym1pdDsKICAgICAgICB9CiAgICAgICAgdGV4dGFyZWEuZm9ybS5zdWJtaXQgPSB3cmFwcGVkU3VibWl0OwogICAgICB9CiAgICB9CgogICAgdGV4dGFyZWEuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgIHZhciBpbnN0YW5jZSA9IENvZGVNaXJyb3IoZnVuY3Rpb24obm9kZSkgewogICAgICB0ZXh0YXJlYS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShub2RlLCB0ZXh0YXJlYS5uZXh0U2libGluZyk7CiAgICB9LCBvcHRpb25zKTsKICAgIGluc3RhbmNlLnNhdmUgPSBzYXZlOwogICAgaW5zdGFuY2UuZ2V0VGV4dEFyZWEgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRleHRhcmVhOyB9OwogICAgaW5zdGFuY2UudG9UZXh0QXJlYSA9IGZ1bmN0aW9uKCkgewogICAgICBzYXZlKCk7CiAgICAgIHRleHRhcmVhLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaW5zdGFuY2UuZ2V0V3JhcHBlckVsZW1lbnQoKSk7CiAgICAgIHRleHRhcmVhLnN0eWxlLmRpc3BsYXkgPSAiIjsKICAgICAgaWYgKHRleHRhcmVhLmZvcm0pIHsKICAgICAgICBybVN1Ym1pdCgpOwogICAgICAgIGlmICh0eXBlb2YgdGV4dGFyZWEuZm9ybS5zdWJtaXQgPT0gImZ1bmN0aW9uIikKICAgICAgICAgIHRleHRhcmVhLmZvcm0uc3VibWl0ID0gcmVhbFN1Ym1pdDsKICAgICAgfQogICAgfTsKICAgIHJldHVybiBpbnN0YW5jZTsKICB9OwoKICAvLyBVdGlsaXR5IGZ1bmN0aW9ucyBmb3Igd29ya2luZyB3aXRoIHN0YXRlLiBFeHBvcnRlZCBiZWNhdXNlIG1vZGVzCiAgLy8gc29tZXRpbWVzIG5lZWQgdG8gZG8gdGhpcy4KICBmdW5jdGlvbiBjb3B5U3RhdGUobW9kZSwgc3RhdGUpIHsKICAgIGlmIChzdGF0ZSA9PT0gdHJ1ZSkgcmV0dXJuIHN0YXRlOwogICAgaWYgKG1vZGUuY29weVN0YXRlKSByZXR1cm4gbW9kZS5jb3B5U3RhdGUoc3RhdGUpOwogICAgdmFyIG5zdGF0ZSA9IHt9OwogICAgZm9yICh2YXIgbiBpbiBzdGF0ZSkgewogICAgICB2YXIgdmFsID0gc3RhdGVbbl07CiAgICAgIGlmICh2YWwgaW5zdGFuY2VvZiBBcnJheSkgdmFsID0gdmFsLmNvbmNhdChbXSk7CiAgICAgIG5zdGF0ZVtuXSA9IHZhbDsKICAgIH0KICAgIHJldHVybiBuc3RhdGU7CiAgfQogIENvZGVNaXJyb3IuY29weVN0YXRlID0gY29weVN0YXRlOwogIGZ1bmN0aW9uIHN0YXJ0U3RhdGUobW9kZSwgYTEsIGEyKSB7CiAgICByZXR1cm4gbW9kZS5zdGFydFN0YXRlID8gbW9kZS5zdGFydFN0YXRlKGExLCBhMikgOiB0cnVlOwogIH0KICBDb2RlTWlycm9yLnN0YXJ0U3RhdGUgPSBzdGFydFN0YXRlOwoKICAvLyBUaGUgY2hhcmFjdGVyIHN0cmVhbSB1c2VkIGJ5IGEgbW9kZSdzIHBhcnNlci4KICBmdW5jdGlvbiBTdHJpbmdTdHJlYW0oc3RyaW5nLCB0YWJTaXplKSB7CiAgICB0aGlzLnBvcyA9IHRoaXMuc3RhcnQgPSAwOwogICAgdGhpcy5zdHJpbmcgPSBzdHJpbmc7CiAgICB0aGlzLnRhYlNpemUgPSB0YWJTaXplIHx8IDg7CiAgfQogIFN0cmluZ1N0cmVhbS5wcm90b3R5cGUgPSB7CiAgICBlb2w6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLnBvcyA+PSB0aGlzLnN0cmluZy5sZW5ndGg7fSwKICAgIHNvbDogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMucG9zID09IDA7fSwKICAgIHBlZWs6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLnN0cmluZy5jaGFyQXQodGhpcy5wb3MpO30sCiAgICBuZXh0OiBmdW5jdGlvbigpIHsKICAgICAgaWYgKHRoaXMucG9zIDwgdGhpcy5zdHJpbmcubGVuZ3RoKQogICAgICAgIHJldHVybiB0aGlzLnN0cmluZy5jaGFyQXQodGhpcy5wb3MrKyk7CiAgICB9LAogICAgZWF0OiBmdW5jdGlvbihtYXRjaCkgewogICAgICB2YXIgY2ggPSB0aGlzLnN0cmluZy5jaGFyQXQodGhpcy5wb3MpOwogICAgICBpZiAodHlwZW9mIG1hdGNoID09ICJzdHJpbmciKSB2YXIgb2sgPSBjaCA9PSBtYXRjaDsKICAgICAgZWxzZSB2YXIgb2sgPSBjaCAmJiAobWF0Y2gudGVzdCA/IG1hdGNoLnRlc3QoY2gpIDogbWF0Y2goY2gpKTsKICAgICAgaWYgKG9rKSB7Kyt0aGlzLnBvczsgcmV0dXJuIGNoO30KICAgIH0sCiAgICBlYXRXaGlsZTogZnVuY3Rpb24obWF0Y2gpIHsKICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5wb3M7CiAgICAgIHdoaWxlICh0aGlzLmVhdChtYXRjaCkpe30KICAgICAgcmV0dXJuIHRoaXMucG9zID4gc3RhcnQ7CiAgICB9LAogICAgZWF0U3BhY2U6IGZ1bmN0aW9uKCkgewogICAgICB2YXIgc3RhcnQgPSB0aGlzLnBvczsKICAgICAgd2hpbGUgKC9bXHNcdTAwYTBdLy50ZXN0KHRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcykpKSArK3RoaXMucG9zOwogICAgICByZXR1cm4gdGhpcy5wb3MgPiBzdGFydDsKICAgIH0sCiAgICBza2lwVG9FbmQ6IGZ1bmN0aW9uKCkge3RoaXMucG9zID0gdGhpcy5zdHJpbmcubGVuZ3RoO30sCiAgICBza2lwVG86IGZ1bmN0aW9uKGNoKSB7CiAgICAgIHZhciBmb3VuZCA9IHRoaXMuc3RyaW5nLmluZGV4T2YoY2gsIHRoaXMucG9zKTsKICAgICAgaWYgKGZvdW5kID4gLTEpIHt0aGlzLnBvcyA9IGZvdW5kOyByZXR1cm4gdHJ1ZTt9CiAgICB9LAogICAgYmFja1VwOiBmdW5jdGlvbihuKSB7dGhpcy5wb3MgLT0gbjt9LAogICAgY29sdW1uOiBmdW5jdGlvbigpIHtyZXR1cm4gY291bnRDb2x1bW4odGhpcy5zdHJpbmcsIHRoaXMuc3RhcnQsIHRoaXMudGFiU2l6ZSk7fSwKICAgIGluZGVudGF0aW9uOiBmdW5jdGlvbigpIHtyZXR1cm4gY291bnRDb2x1bW4odGhpcy5zdHJpbmcsIG51bGwsIHRoaXMudGFiU2l6ZSk7fSwKICAgIG1hdGNoOiBmdW5jdGlvbihwYXR0ZXJuLCBjb25zdW1lLCBjYXNlSW5zZW5zaXRpdmUpIHsKICAgICAgaWYgKHR5cGVvZiBwYXR0ZXJuID09ICJzdHJpbmciKSB7CiAgICAgICAgZnVuY3Rpb24gY2FzZWQoc3RyKSB7cmV0dXJuIGNhc2VJbnNlbnNpdGl2ZSA/IHN0ci50b0xvd2VyQ2FzZSgpIDogc3RyO30KICAgICAgICBpZiAoY2FzZWQodGhpcy5zdHJpbmcpLmluZGV4T2YoY2FzZWQocGF0dGVybiksIHRoaXMucG9zKSA9PSB0aGlzLnBvcykgewogICAgICAgICAgaWYgKGNvbnN1bWUgIT09IGZhbHNlKSB0aGlzLnBvcyArPSBwYXR0ZXJuLmxlbmd0aDsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICB2YXIgbWF0Y2ggPSB0aGlzLnN0cmluZy5zbGljZSh0aGlzLnBvcykubWF0Y2gocGF0dGVybik7CiAgICAgICAgaWYgKG1hdGNoICYmIGNvbnN1bWUgIT09IGZhbHNlKSB0aGlzLnBvcyArPSBtYXRjaFswXS5sZW5ndGg7CiAgICAgICAgcmV0dXJuIG1hdGNoOwogICAgICB9CiAgICB9LAogICAgY3VycmVudDogZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdHJpbmcuc2xpY2UodGhpcy5zdGFydCwgdGhpcy5wb3MpO30KICB9OwogIENvZGVNaXJyb3IuU3RyaW5nU3RyZWFtID0gU3RyaW5nU3RyZWFtOwoKICBmdW5jdGlvbiBNYXJrZWRUZXh0KGZyb20sIHRvLCBjbGFzc05hbWUsIHNldCkgewogICAgdGhpcy5mcm9tID0gZnJvbTsgdGhpcy50byA9IHRvOyB0aGlzLnN0eWxlID0gY2xhc3NOYW1lOyB0aGlzLnNldCA9IHNldDsKICB9CiAgTWFya2VkVGV4dC5wcm90b3R5cGUgPSB7CiAgICBhdHRhY2g6IGZ1bmN0aW9uKGxpbmUpIHsgdGhpcy5zZXQucHVzaChsaW5lKTsgfSwKICAgIGRldGFjaDogZnVuY3Rpb24obGluZSkgewogICAgICB2YXIgaXggPSBpbmRleE9mKHRoaXMuc2V0LCBsaW5lKTsKICAgICAgaWYgKGl4ID4gLTEpIHRoaXMuc2V0LnNwbGljZShpeCwgMSk7CiAgICB9LAogICAgc3BsaXQ6IGZ1bmN0aW9uKHBvcywgbGVuQmVmb3JlKSB7CiAgICAgIGlmICh0aGlzLnRvIDw9IHBvcyAmJiB0aGlzLnRvICE9IG51bGwpIHJldHVybiBudWxsOwogICAgICB2YXIgZnJvbSA9IHRoaXMuZnJvbSA8IHBvcyB8fCB0aGlzLmZyb20gPT0gbnVsbCA/IG51bGwgOiB0aGlzLmZyb20gLSBwb3MgKyBsZW5CZWZvcmU7CiAgICAgIHZhciB0byA9IHRoaXMudG8gPT0gbnVsbCA/IG51bGwgOiB0aGlzLnRvIC0gcG9zICsgbGVuQmVmb3JlOwogICAgICByZXR1cm4gbmV3IE1hcmtlZFRleHQoZnJvbSwgdG8sIHRoaXMuc3R5bGUsIHRoaXMuc2V0KTsKICAgIH0sCiAgICBkdXA6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbmV3IE1hcmtlZFRleHQobnVsbCwgbnVsbCwgdGhpcy5zdHlsZSwgdGhpcy5zZXQpOyB9LAogICAgY2xpcFRvOiBmdW5jdGlvbihmcm9tT3BlbiwgZnJvbSwgdG9PcGVuLCB0bywgZGlmZikgewogICAgICBpZiAodGhpcy5mcm9tICE9IG51bGwgJiYgdGhpcy5mcm9tID49IGZyb20pCiAgICAgICAgdGhpcy5mcm9tID0gTWF0aC5tYXgodG8sIHRoaXMuZnJvbSkgKyBkaWZmOwogICAgICBpZiAodGhpcy50byAhPSBudWxsICYmIHRoaXMudG8gPiBmcm9tKQogICAgICAgIHRoaXMudG8gPSB0byA8IHRoaXMudG8gPyB0aGlzLnRvICsgZGlmZiA6IGZyb207CiAgICAgIGlmIChmcm9tT3BlbiAmJiB0byA+IHRoaXMuZnJvbSAmJiAodG8gPCB0aGlzLnRvIHx8IHRoaXMudG8gPT0gbnVsbCkpCiAgICAgICAgdGhpcy5mcm9tID0gbnVsbDsKICAgICAgaWYgKHRvT3BlbiAmJiAoZnJvbSA8IHRoaXMudG8gfHwgdGhpcy50byA9PSBudWxsKSAmJiAoZnJvbSA+IHRoaXMuZnJvbSB8fCB0aGlzLmZyb20gPT0gbnVsbCkpCiAgICAgICAgdGhpcy50byA9IG51bGw7CiAgICB9LAogICAgaXNEZWFkOiBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuZnJvbSAhPSBudWxsICYmIHRoaXMudG8gIT0gbnVsbCAmJiB0aGlzLmZyb20gPj0gdGhpcy50bzsgfSwKICAgIHNhbWVTZXQ6IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIHRoaXMuc2V0ID09IHguc2V0OyB9CiAgfTsKCiAgZnVuY3Rpb24gQm9va21hcmsocG9zKSB7CiAgICB0aGlzLmZyb20gPSBwb3M7IHRoaXMudG8gPSBwb3M7IHRoaXMubGluZSA9IG51bGw7CiAgfQogIEJvb2ttYXJrLnByb3RvdHlwZSA9IHsKICAgIGF0dGFjaDogZnVuY3Rpb24obGluZSkgeyB0aGlzLmxpbmUgPSBsaW5lOyB9LAogICAgZGV0YWNoOiBmdW5jdGlvbihsaW5lKSB7IGlmICh0aGlzLmxpbmUgPT0gbGluZSkgdGhpcy5saW5lID0gbnVsbDsgfSwKICAgIHNwbGl0OiBmdW5jdGlvbihwb3MsIGxlbkJlZm9yZSkgewogICAgICBpZiAocG9zIDwgdGhpcy5mcm9tKSB7CiAgICAgICAgdGhpcy5mcm9tID0gdGhpcy50byA9ICh0aGlzLmZyb20gLSBwb3MpICsgbGVuQmVmb3JlOwogICAgICAgIHJldHVybiB0aGlzOwogICAgICB9CiAgICB9LAogICAgaXNEZWFkOiBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuZnJvbSA+IHRoaXMudG87IH0sCiAgICBjbGlwVG86IGZ1bmN0aW9uKGZyb21PcGVuLCBmcm9tLCB0b09wZW4sIHRvLCBkaWZmKSB7CiAgICAgIGlmICgoZnJvbU9wZW4gfHwgZnJvbSA8IHRoaXMuZnJvbSkgJiYgKHRvT3BlbiB8fCB0byA+IHRoaXMudG8pKSB7CiAgICAgICAgdGhpcy5mcm9tID0gMDsgdGhpcy50byA9IC0xOwogICAgICB9IGVsc2UgaWYgKHRoaXMuZnJvbSA+IGZyb20pIHsKICAgICAgICB0aGlzLmZyb20gPSB0aGlzLnRvID0gTWF0aC5tYXgodG8sIHRoaXMuZnJvbSkgKyBkaWZmOwogICAgICB9CiAgICB9LAogICAgc2FtZVNldDogZnVuY3Rpb24oeCkgeyByZXR1cm4gZmFsc2U7IH0sCiAgICBmaW5kOiBmdW5jdGlvbigpIHsKICAgICAgaWYgKCF0aGlzLmxpbmUgfHwgIXRoaXMubGluZS5wYXJlbnQpIHJldHVybiBudWxsOwogICAgICByZXR1cm4ge2xpbmU6IGxpbmVObyh0aGlzLmxpbmUpLCBjaDogdGhpcy5mcm9tfTsKICAgIH0sCiAgICBjbGVhcjogZnVuY3Rpb24oKSB7CiAgICAgIGlmICh0aGlzLmxpbmUpIHsKICAgICAgICB2YXIgZm91bmQgPSBpbmRleE9mKHRoaXMubGluZS5tYXJrZWQsIHRoaXMpOwogICAgICAgIGlmIChmb3VuZCAhPSAtMSkgdGhpcy5saW5lLm1hcmtlZC5zcGxpY2UoZm91bmQsIDEpOwogICAgICAgIHRoaXMubGluZSA9IG51bGw7CiAgICAgIH0KICAgIH0KICB9OwoKICAvLyBMaW5lIG9iamVjdHMuIFRoZXNlIGhvbGQgc3RhdGUgcmVsYXRlZCB0byBhIGxpbmUsIGluY2x1ZGluZwogIC8vIGhpZ2hsaWdodGluZyBpbmZvICh0aGUgc3R5bGVzIGFycmF5KS4KICBmdW5jdGlvbiBMaW5lKHRleHQsIHN0eWxlcykgewogICAgdGhpcy5zdHlsZXMgPSBzdHlsZXMgfHwgW3RleHQsIG51bGxdOwogICAgdGhpcy50ZXh0ID0gdGV4dDsKICAgIHRoaXMuaGVpZ2h0ID0gMTsKICAgIHRoaXMubWFya2VkID0gdGhpcy5ndXR0ZXJNYXJrZXIgPSB0aGlzLmNsYXNzTmFtZSA9IHRoaXMuaGFuZGxlcnMgPSBudWxsOwogICAgdGhpcy5zdGF0ZUFmdGVyID0gdGhpcy5wYXJlbnQgPSB0aGlzLmhpZGRlbiA9IG51bGw7CiAgfQogIExpbmUuaW5oZXJpdE1hcmtzID0gZnVuY3Rpb24odGV4dCwgb3JpZykgewogICAgdmFyIGxuID0gbmV3IExpbmUodGV4dCksIG1rID0gb3JpZyAmJiBvcmlnLm1hcmtlZDsKICAgIGlmIChtaykgewogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1rLmxlbmd0aDsgKytpKSB7CiAgICAgICAgaWYgKG1rW2ldLnRvID09IG51bGwgJiYgbWtbaV0uc3R5bGUpIHsKICAgICAgICAgIHZhciBuZXdtayA9IGxuLm1hcmtlZCB8fCAobG4ubWFya2VkID0gW10pLCBtYXJrID0gbWtbaV07CiAgICAgICAgICB2YXIgbm1hcmsgPSBtYXJrLmR1cCgpOyBuZXdtay5wdXNoKG5tYXJrKTsgbm1hcmsuYXR0YWNoKGxuKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBsbjsKICB9CiAgTGluZS5wcm90b3R5cGUgPSB7CiAgICAvLyBSZXBsYWNlIGEgcGllY2Ugb2YgYSBsaW5lLCBrZWVwaW5nIHRoZSBzdHlsZXMgYXJvdW5kIGl0IGludGFjdC4KICAgIHJlcGxhY2U6IGZ1bmN0aW9uKGZyb20sIHRvXywgdGV4dCkgewogICAgICB2YXIgc3QgPSBbXSwgbWsgPSB0aGlzLm1hcmtlZCwgdG8gPSB0b18gPT0gbnVsbCA/IHRoaXMudGV4dC5sZW5ndGggOiB0b187CiAgICAgIGNvcHlTdHlsZXMoMCwgZnJvbSwgdGhpcy5zdHlsZXMsIHN0KTsKICAgICAgaWYgKHRleHQpIHN0LnB1c2godGV4dCwgbnVsbCk7CiAgICAgIGNvcHlTdHlsZXModG8sIHRoaXMudGV4dC5sZW5ndGgsIHRoaXMuc3R5bGVzLCBzdCk7CiAgICAgIHRoaXMuc3R5bGVzID0gc3Q7CiAgICAgIHRoaXMudGV4dCA9IHRoaXMudGV4dC5zbGljZSgwLCBmcm9tKSArIHRleHQgKyB0aGlzLnRleHQuc2xpY2UodG8pOwogICAgICB0aGlzLnN0YXRlQWZ0ZXIgPSBudWxsOwogICAgICBpZiAobWspIHsKICAgICAgICB2YXIgZGlmZiA9IHRleHQubGVuZ3RoIC0gKHRvIC0gZnJvbSk7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtay5sZW5ndGg7ICsraSkgewogICAgICAgICAgdmFyIG1hcmsgPSBta1tpXTsKICAgICAgICAgIG1hcmsuY2xpcFRvKGZyb20gPT0gbnVsbCwgZnJvbSB8fCAwLCB0b18gPT0gbnVsbCwgdG8sIGRpZmYpOwogICAgICAgICAgaWYgKG1hcmsuaXNEZWFkKCkpIHttYXJrLmRldGFjaCh0aGlzKTsgbWsuc3BsaWNlKGktLSwgMSk7fQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIC8vIFNwbGl0IGEgcGFydCBvZmYgYSBsaW5lLCBrZWVwaW5nIHN0eWxlcyBhbmQgbWFya2VycyBpbnRhY3QuCiAgICBzcGxpdDogZnVuY3Rpb24ocG9zLCB0ZXh0QmVmb3JlKSB7CiAgICAgIHZhciBzdCA9IFt0ZXh0QmVmb3JlLCBudWxsXSwgbWsgPSB0aGlzLm1hcmtlZDsKICAgICAgY29weVN0eWxlcyhwb3MsIHRoaXMudGV4dC5sZW5ndGgsIHRoaXMuc3R5bGVzLCBzdCk7CiAgICAgIHZhciB0YWtlbiA9IG5ldyBMaW5lKHRleHRCZWZvcmUgKyB0aGlzLnRleHQuc2xpY2UocG9zKSwgc3QpOwogICAgICBpZiAobWspIHsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1rLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICB2YXIgbWFyayA9IG1rW2ldOwogICAgICAgICAgdmFyIG5ld21hcmsgPSBtYXJrLnNwbGl0KHBvcywgdGV4dEJlZm9yZS5sZW5ndGgpOwogICAgICAgICAgaWYgKG5ld21hcmspIHsKICAgICAgICAgICAgaWYgKCF0YWtlbi5tYXJrZWQpIHRha2VuLm1hcmtlZCA9IFtdOwogICAgICAgICAgICB0YWtlbi5tYXJrZWQucHVzaChuZXdtYXJrKTsgbmV3bWFyay5hdHRhY2godGFrZW4pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gdGFrZW47CiAgICB9LAogICAgYXBwZW5kOiBmdW5jdGlvbihsaW5lKSB7CiAgICAgIHZhciBteWxlbiA9IHRoaXMudGV4dC5sZW5ndGgsIG1rID0gbGluZS5tYXJrZWQsIG15bWsgPSB0aGlzLm1hcmtlZDsKICAgICAgdGhpcy50ZXh0ICs9IGxpbmUudGV4dDsKICAgICAgY29weVN0eWxlcygwLCBsaW5lLnRleHQubGVuZ3RoLCBsaW5lLnN0eWxlcywgdGhpcy5zdHlsZXMpOwogICAgICBpZiAobXltaykgewogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXltay5sZW5ndGg7ICsraSkKICAgICAgICAgIGlmIChteW1rW2ldLnRvID09IG51bGwpIG15bWtbaV0udG8gPSBteWxlbjsKICAgICAgfQogICAgICBpZiAobWsgJiYgbWsubGVuZ3RoKSB7CiAgICAgICAgaWYgKCFteW1rKSB0aGlzLm1hcmtlZCA9IG15bWsgPSBbXTsKICAgICAgICBvdXRlcjogZm9yICh2YXIgaSA9IDA7IGkgPCBtay5sZW5ndGg7ICsraSkgewogICAgICAgICAgdmFyIG1hcmsgPSBta1tpXTsKICAgICAgICAgIGlmICghbWFyay5mcm9tKSB7CiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbXltay5sZW5ndGg7ICsraikgewogICAgICAgICAgICAgIHZhciBteW1hcmsgPSBteW1rW2pdOwogICAgICAgICAgICAgIGlmIChteW1hcmsudG8gPT0gbXlsZW4gJiYgbXltYXJrLnNhbWVTZXQobWFyaykpIHsKICAgICAgICAgICAgICAgIG15bWFyay50byA9IG1hcmsudG8gPT0gbnVsbCA/IG51bGwgOiBtYXJrLnRvICsgbXlsZW47CiAgICAgICAgICAgICAgICBpZiAobXltYXJrLmlzRGVhZCgpKSB7CiAgICAgICAgICAgICAgICAgIG15bWFyay5kZXRhY2godGhpcyk7CiAgICAgICAgICAgICAgICAgIG1rLnNwbGljZShpLS0sIDEpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY29udGludWUgb3V0ZXI7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBteW1rLnB1c2gobWFyayk7CiAgICAgICAgICBtYXJrLmF0dGFjaCh0aGlzKTsKICAgICAgICAgIG1hcmsuZnJvbSArPSBteWxlbjsKICAgICAgICAgIGlmIChtYXJrLnRvICE9IG51bGwpIG1hcmsudG8gKz0gbXlsZW47CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgZml4TWFya0VuZHM6IGZ1bmN0aW9uKG90aGVyKSB7CiAgICAgIHZhciBtayA9IHRoaXMubWFya2VkLCBvbWsgPSBvdGhlci5tYXJrZWQ7CiAgICAgIGlmICghbWspIHJldHVybjsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtay5sZW5ndGg7ICsraSkgewogICAgICAgIHZhciBtYXJrID0gbWtbaV0sIGNsb3NlID0gbWFyay50byA9PSBudWxsOwogICAgICAgIGlmIChjbG9zZSAmJiBvbWspIHsKICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgb21rLmxlbmd0aDsgKytqKQogICAgICAgICAgICBpZiAob21rW2pdLnNhbWVTZXQobWFyaykpIHtjbG9zZSA9IGZhbHNlOyBicmVhazt9CiAgICAgICAgfQogICAgICAgIGlmIChjbG9zZSkgbWFyay50byA9IHRoaXMudGV4dC5sZW5ndGg7CiAgICAgIH0KICAgIH0sCiAgICBmaXhNYXJrU3RhcnRzOiBmdW5jdGlvbigpIHsKICAgICAgdmFyIG1rID0gdGhpcy5tYXJrZWQ7CiAgICAgIGlmICghbWspIHJldHVybjsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtay5sZW5ndGg7ICsraSkKICAgICAgICBpZiAobWtbaV0uZnJvbSA9PSBudWxsKSBta1tpXS5mcm9tID0gMDsKICAgIH0sCiAgICBhZGRNYXJrOiBmdW5jdGlvbihtYXJrKSB7CiAgICAgIG1hcmsuYXR0YWNoKHRoaXMpOwogICAgICBpZiAodGhpcy5tYXJrZWQgPT0gbnVsbCkgdGhpcy5tYXJrZWQgPSBbXTsKICAgICAgdGhpcy5tYXJrZWQucHVzaChtYXJrKTsKICAgICAgdGhpcy5tYXJrZWQuc29ydChmdW5jdGlvbihhLCBiKXtyZXR1cm4gKGEuZnJvbSB8fCAwKSAtIChiLmZyb20gfHwgMCk7fSk7CiAgICB9LAogICAgLy8gUnVuIHRoZSBnaXZlbiBtb2RlJ3MgcGFyc2VyIG92ZXIgYSBsaW5lLCB1cGRhdGUgdGhlIHN0eWxlcwogICAgLy8gYXJyYXksIHdoaWNoIGNvbnRhaW5zIGFsdGVybmF0aW5nIGZyYWdtZW50cyBvZiB0ZXh0IGFuZCBDU1MKICAgIC8vIGNsYXNzZXMuCiAgICBoaWdobGlnaHQ6IGZ1bmN0aW9uKG1vZGUsIHN0YXRlLCB0YWJTaXplKSB7CiAgICAgIHZhciBzdHJlYW0gPSBuZXcgU3RyaW5nU3RyZWFtKHRoaXMudGV4dCwgdGFiU2l6ZSksIHN0ID0gdGhpcy5zdHlsZXMsIHBvcyA9IDA7CiAgICAgIHZhciBjaGFuZ2VkID0gZmFsc2UsIGN1cldvcmQgPSBzdFswXSwgcHJldldvcmQ7CiAgICAgIGlmICh0aGlzLnRleHQgPT0gIiIgJiYgbW9kZS5ibGFua0xpbmUpIG1vZGUuYmxhbmtMaW5lKHN0YXRlKTsKICAgICAgd2hpbGUgKCFzdHJlYW0uZW9sKCkpIHsKICAgICAgICB2YXIgc3R5bGUgPSBtb2RlLnRva2VuKHN0cmVhbSwgc3RhdGUpOwogICAgICAgIHZhciBzdWJzdHIgPSB0aGlzLnRleHQuc2xpY2Uoc3RyZWFtLnN0YXJ0LCBzdHJlYW0ucG9zKTsKICAgICAgICBzdHJlYW0uc3RhcnQgPSBzdHJlYW0ucG9zOwogICAgICAgIGlmIChwb3MgJiYgc3RbcG9zLTFdID09IHN0eWxlKQogICAgICAgICAgc3RbcG9zLTJdICs9IHN1YnN0cjsKICAgICAgICBlbHNlIGlmIChzdWJzdHIpIHsKICAgICAgICAgIGlmICghY2hhbmdlZCAmJiAoc3RbcG9zKzFdICE9IHN0eWxlIHx8IChwb3MgJiYgc3RbcG9zLTJdICE9IHByZXZXb3JkKSkpIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgc3RbcG9zKytdID0gc3Vic3RyOyBzdFtwb3MrK10gPSBzdHlsZTsKICAgICAgICAgIHByZXZXb3JkID0gY3VyV29yZDsgY3VyV29yZCA9IHN0W3Bvc107CiAgICAgICAgfQogICAgICAgIC8vIEdpdmUgdXAgd2hlbiBsaW5lIGlzIHJpZGljdWxvdXNseSBsb25nCiAgICAgICAgaWYgKHN0cmVhbS5wb3MgPiA1MDAwKSB7CiAgICAgICAgICBzdFtwb3MrK10gPSB0aGlzLnRleHQuc2xpY2Uoc3RyZWFtLnBvcyk7IHN0W3BvcysrXSA9IG51bGw7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHN0Lmxlbmd0aCAhPSBwb3MpIHtzdC5sZW5ndGggPSBwb3M7IGNoYW5nZWQgPSB0cnVlO30KICAgICAgaWYgKHBvcyAmJiBzdFtwb3MtMl0gIT0gcHJldldvcmQpIGNoYW5nZWQgPSB0cnVlOwogICAgICAvLyBTaG9ydCBsaW5lcyB3aXRoIHNpbXBsZSBoaWdobGlnaHRzIHJldHVybiBudWxsLCBhbmQgYXJlCiAgICAgIC8vIGNvdW50ZWQgYXMgY2hhbmdlZCBieSB0aGUgZHJpdmVyIGJlY2F1c2UgdGhleSBhcmUgbGlrZWx5IHRvCiAgICAgIC8vIGhpZ2hsaWdodCB0aGUgc2FtZSB3YXkgaW4gdmFyaW91cyBjb250ZXh0cy4KICAgICAgcmV0dXJuIGNoYW5nZWQgfHwgKHN0Lmxlbmd0aCA8IDUgJiYgdGhpcy50ZXh0Lmxlbmd0aCA8IDEwID8gbnVsbCA6IGZhbHNlKTsKICAgIH0sCiAgICAvLyBGZXRjaCB0aGUgcGFyc2VyIHRva2VuIGZvciBhIGdpdmVuIGNoYXJhY3Rlci4gVXNlZnVsIGZvciBoYWNrcwogICAgLy8gdGhhdCB3YW50IHRvIGluc3BlY3QgdGhlIG1vZGUgc3RhdGUgKHNheSwgZm9yIGNvbXBsZXRpb24pLgogICAgZ2V0VG9rZW5BdDogZnVuY3Rpb24obW9kZSwgc3RhdGUsIGNoKSB7CiAgICAgIHZhciB0eHQgPSB0aGlzLnRleHQsIHN0cmVhbSA9IG5ldyBTdHJpbmdTdHJlYW0odHh0KTsKICAgICAgd2hpbGUgKHN0cmVhbS5wb3MgPCBjaCAmJiAhc3RyZWFtLmVvbCgpKSB7CiAgICAgICAgc3RyZWFtLnN0YXJ0ID0gc3RyZWFtLnBvczsKICAgICAgICB2YXIgc3R5bGUgPSBtb2RlLnRva2VuKHN0cmVhbSwgc3RhdGUpOwogICAgICB9CiAgICAgIHJldHVybiB7c3RhcnQ6IHN0cmVhbS5zdGFydCwKICAgICAgICAgICAgICBlbmQ6IHN0cmVhbS5wb3MsCiAgICAgICAgICAgICAgc3RyaW5nOiBzdHJlYW0uY3VycmVudCgpLAogICAgICAgICAgICAgIGNsYXNzTmFtZTogc3R5bGUgfHwgbnVsbCwKICAgICAgICAgICAgICBzdGF0ZTogc3RhdGV9OwogICAgfSwKICAgIGluZGVudGF0aW9uOiBmdW5jdGlvbih0YWJTaXplKSB7cmV0dXJuIGNvdW50Q29sdW1uKHRoaXMudGV4dCwgbnVsbCwgdGFiU2l6ZSk7fSwKICAgIC8vIFByb2R1Y2VzIGFuIEhUTUwgZnJhZ21lbnQgZm9yIHRoZSBsaW5lLCB0YWtpbmcgc2VsZWN0aW9uLAogICAgLy8gbWFya2luZywgYW5kIGhpZ2hsaWdodGluZyBpbnRvIGFjY291bnQuCiAgICBnZXRIVE1MOiBmdW5jdGlvbih0YWJUZXh0LCBlbmRBdCkgewogICAgICB2YXIgaHRtbCA9IFtdLCBmaXJzdCA9IHRydWU7CiAgICAgIGZ1bmN0aW9uIHNwYW4odGV4dCwgc3R5bGUpIHsKICAgICAgICBpZiAoIXRleHQpIHJldHVybjsKICAgICAgICAvLyBXb3JrIGFyb3VuZCBhIGJ1ZyB3aGVyZSwgaW4gc29tZSBjb21wYXQgbW9kZXMsIElFIGlnbm9yZXMgbGVhZGluZyBzcGFjZXMKICAgICAgICBpZiAoZmlyc3QgJiYgaWUgJiYgdGV4dC5jaGFyQXQoMCkgPT0gIiAiKSB0ZXh0ID0gIlx1MDBhMCIgKyB0ZXh0LnNsaWNlKDEpOwogICAgICAgIGZpcnN0ID0gZmFsc2U7CiAgICAgICAgaWYgKHN0eWxlKSBodG1sLnB1c2goJzxzcGFuIGNsYXNzPSInLCBzdHlsZSwgJyI+JywgaHRtbEVzY2FwZSh0ZXh0KS5yZXBsYWNlKC9cdC9nLCB0YWJUZXh0KSwgIjwvc3Bhbj4iKTsKICAgICAgICBlbHNlIGh0bWwucHVzaChodG1sRXNjYXBlKHRleHQpLnJlcGxhY2UoL1x0L2csIHRhYlRleHQpKTsKICAgICAgfQogICAgICB2YXIgc3QgPSB0aGlzLnN0eWxlcywgYWxsVGV4dCA9IHRoaXMudGV4dCwgbWFya2VkID0gdGhpcy5tYXJrZWQ7CiAgICAgIHZhciBsZW4gPSBhbGxUZXh0Lmxlbmd0aDsKICAgICAgaWYgKGVuZEF0ICE9IG51bGwpIGxlbiA9IE1hdGgubWluKGVuZEF0LCBsZW4pOwogICAgICBmdW5jdGlvbiBzdHlsZVRvQ2xhc3Moc3R5bGUpIHsKICAgICAgICBpZiAoIXN0eWxlKSByZXR1cm4gbnVsbDsKICAgICAgICByZXR1cm4gImNtLSIgKyBzdHlsZS5yZXBsYWNlKC8gKy9nLCAiIGNtLSIpOwogICAgICB9CgogICAgICBpZiAoIWFsbFRleHQgJiYgZW5kQXQgPT0gbnVsbCkKICAgICAgICBzcGFuKCIgIik7CiAgICAgIGVsc2UgaWYgKCFtYXJrZWQgfHwgIW1hcmtlZC5sZW5ndGgpCiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGNoID0gMDsgY2ggPCBsZW47IGkrPTIpIHsKICAgICAgICAgIHZhciBzdHIgPSBzdFtpXSwgc3R5bGUgPSBzdFtpKzFdLCBsID0gc3RyLmxlbmd0aDsKICAgICAgICAgIGlmIChjaCArIGwgPiBsZW4pIHN0ciA9IHN0ci5zbGljZSgwLCBsZW4gLSBjaCk7CiAgICAgICAgICBjaCArPSBsOwogICAgICAgICAgc3BhbihzdHIsIHN0eWxlVG9DbGFzcyhzdHlsZSkpOwogICAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgdmFyIHBvcyA9IDAsIGkgPSAwLCB0ZXh0ID0gIiIsIHN0eWxlLCBzZyA9IDA7CiAgICAgICAgdmFyIG5leHRDaGFuZ2UgPSBtYXJrZWRbMF0uZnJvbSB8fCAwLCBtYXJrcyA9IFtdLCBtYXJrcG9zID0gMDsKICAgICAgICBmdW5jdGlvbiBhZHZhbmNlTWFya3MoKSB7CiAgICAgICAgICB2YXIgbTsKICAgICAgICAgIHdoaWxlIChtYXJrcG9zIDwgbWFya2VkLmxlbmd0aCAmJgogICAgICAgICAgICAgICAgICgobSA9IG1hcmtlZFttYXJrcG9zXSkuZnJvbSA9PSBwb3MgfHwgbS5mcm9tID09IG51bGwpKSB7CiAgICAgICAgICAgIGlmIChtLnN0eWxlICE9IG51bGwpIG1hcmtzLnB1c2gobSk7CiAgICAgICAgICAgICsrbWFya3BvczsKICAgICAgICAgIH0KICAgICAgICAgIG5leHRDaGFuZ2UgPSBtYXJrcG9zIDwgbWFya2VkLmxlbmd0aCA/IG1hcmtlZFttYXJrcG9zXS5mcm9tIDogSW5maW5pdHk7CiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hcmtzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgIHZhciB0byA9IG1hcmtzW2ldLnRvIHx8IEluZmluaXR5OwogICAgICAgICAgICBpZiAodG8gPT0gcG9zKSBtYXJrcy5zcGxpY2UoaS0tLCAxKTsKICAgICAgICAgICAgZWxzZSBuZXh0Q2hhbmdlID0gTWF0aC5taW4odG8sIG5leHRDaGFuZ2UpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB2YXIgbSA9IDA7CiAgICAgICAgd2hpbGUgKHBvcyA8IGxlbikgewogICAgICAgICAgaWYgKG5leHRDaGFuZ2UgPT0gcG9zKSBhZHZhbmNlTWFya3MoKTsKICAgICAgICAgIHZhciB1cHRvID0gTWF0aC5taW4obGVuLCBuZXh0Q2hhbmdlKTsKICAgICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgIGlmICh0ZXh0KSB7CiAgICAgICAgICAgICAgdmFyIGVuZCA9IHBvcyArIHRleHQubGVuZ3RoOwogICAgICAgICAgICAgIHZhciBhcHBsaWVkU3R5bGUgPSBzdHlsZTsKICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1hcmtzLmxlbmd0aDsgKytqKQogICAgICAgICAgICAgICAgYXBwbGllZFN0eWxlID0gKGFwcGxpZWRTdHlsZSA/IGFwcGxpZWRTdHlsZSArICIgIiA6ICIiKSArIG1hcmtzW2pdLnN0eWxlOwogICAgICAgICAgICAgIHNwYW4oZW5kID4gdXB0byA/IHRleHQuc2xpY2UoMCwgdXB0byAtIHBvcykgOiB0ZXh0LCBhcHBsaWVkU3R5bGUpOwogICAgICAgICAgICAgIGlmIChlbmQgPj0gdXB0bykge3RleHQgPSB0ZXh0LnNsaWNlKHVwdG8gLSBwb3MpOyBwb3MgPSB1cHRvOyBicmVhazt9CiAgICAgICAgICAgICAgcG9zID0gZW5kOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRleHQgPSBzdFtpKytdOyBzdHlsZSA9IHN0eWxlVG9DbGFzcyhzdFtpKytdKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIGh0bWwuam9pbigiIik7CiAgICB9LAogICAgY2xlYW5VcDogZnVuY3Rpb24oKSB7CiAgICAgIHRoaXMucGFyZW50ID0gbnVsbDsKICAgICAgaWYgKHRoaXMubWFya2VkKQogICAgICAgIGZvciAodmFyIGkgPSAwLCBlID0gdGhpcy5tYXJrZWQubGVuZ3RoOyBpIDwgZTsgKytpKSB0aGlzLm1hcmtlZFtpXS5kZXRhY2godGhpcyk7CiAgICB9CiAgfTsKICAvLyBVdGlsaXR5IHVzZWQgYnkgcmVwbGFjZSBhbmQgc3BsaXQgYWJvdmUKICBmdW5jdGlvbiBjb3B5U3R5bGVzKGZyb20sIHRvLCBzb3VyY2UsIGRlc3QpIHsKICAgIGZvciAodmFyIGkgPSAwLCBwb3MgPSAwLCBzdGF0ZSA9IDA7IHBvcyA8IHRvOyBpKz0yKSB7CiAgICAgIHZhciBwYXJ0ID0gc291cmNlW2ldLCBlbmQgPSBwb3MgKyBwYXJ0Lmxlbmd0aDsKICAgICAgaWYgKHN0YXRlID09IDApIHsKICAgICAgICBpZiAoZW5kID4gZnJvbSkgZGVzdC5wdXNoKHBhcnQuc2xpY2UoZnJvbSAtIHBvcywgTWF0aC5taW4ocGFydC5sZW5ndGgsIHRvIC0gcG9zKSksIHNvdXJjZVtpKzFdKTsKICAgICAgICBpZiAoZW5kID49IGZyb20pIHN0YXRlID0gMTsKICAgICAgfQogICAgICBlbHNlIGlmIChzdGF0ZSA9PSAxKSB7CiAgICAgICAgaWYgKGVuZCA+IHRvKSBkZXN0LnB1c2gocGFydC5zbGljZSgwLCB0byAtIHBvcyksIHNvdXJjZVtpKzFdKTsKICAgICAgICBlbHNlIGRlc3QucHVzaChwYXJ0LCBzb3VyY2VbaSsxXSk7CiAgICAgIH0KICAgICAgcG9zID0gZW5kOwogICAgfQogIH0KCiAgLy8gRGF0YSBzdHJ1Y3R1cmUgdGhhdCBob2xkcyB0aGUgc2VxdWVuY2Ugb2YgbGluZXMuCiAgZnVuY3Rpb24gTGVhZkNodW5rKGxpbmVzKSB7CiAgICB0aGlzLmxpbmVzID0gbGluZXM7CiAgICB0aGlzLnBhcmVudCA9IG51bGw7CiAgICBmb3IgKHZhciBpID0gMCwgZSA9IGxpbmVzLmxlbmd0aCwgaGVpZ2h0ID0gMDsgaSA8IGU7ICsraSkgewogICAgICBsaW5lc1tpXS5wYXJlbnQgPSB0aGlzOwogICAgICBoZWlnaHQgKz0gbGluZXNbaV0uaGVpZ2h0OwogICAgfQogICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7CiAgfQogIExlYWZDaHVuay5wcm90b3R5cGUgPSB7CiAgICBjaHVua1NpemU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5saW5lcy5sZW5ndGg7IH0sCiAgICByZW1vdmU6IGZ1bmN0aW9uKGF0LCBuLCBjYWxsYmFja3MpIHsKICAgICAgZm9yICh2YXIgaSA9IGF0LCBlID0gYXQgKyBuOyBpIDwgZTsgKytpKSB7CiAgICAgICAgdmFyIGxpbmUgPSB0aGlzLmxpbmVzW2ldOwogICAgICAgIHRoaXMuaGVpZ2h0IC09IGxpbmUuaGVpZ2h0OwogICAgICAgIGxpbmUuY2xlYW5VcCgpOwogICAgICAgIGlmIChsaW5lLmhhbmRsZXJzKQogICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBsaW5lLmhhbmRsZXJzLmxlbmd0aDsgKytqKSBjYWxsYmFja3MucHVzaChsaW5lLmhhbmRsZXJzW2pdKTsKICAgICAgfQogICAgICB0aGlzLmxpbmVzLnNwbGljZShhdCwgbik7CiAgICB9LAogICAgY29sbGFwc2U6IGZ1bmN0aW9uKGxpbmVzKSB7CiAgICAgIGxpbmVzLnNwbGljZS5hcHBseShsaW5lcywgW2xpbmVzLmxlbmd0aCwgMF0uY29uY2F0KHRoaXMubGluZXMpKTsKICAgIH0sCiAgICBpbnNlcnRIZWlnaHQ6IGZ1bmN0aW9uKGF0LCBsaW5lcywgaGVpZ2h0KSB7CiAgICAgIHRoaXMuaGVpZ2h0ICs9IGhlaWdodDsKICAgICAgdGhpcy5saW5lcy5zcGxpY2UuYXBwbHkodGhpcy5saW5lcywgW2F0LCAwXS5jb25jYXQobGluZXMpKTsKICAgICAgZm9yICh2YXIgaSA9IDAsIGUgPSBsaW5lcy5sZW5ndGg7IGkgPCBlOyArK2kpIGxpbmVzW2ldLnBhcmVudCA9IHRoaXM7CiAgICB9LAogICAgaXRlck46IGZ1bmN0aW9uKGF0LCBuLCBvcCkgewogICAgICBmb3IgKHZhciBlID0gYXQgKyBuOyBhdCA8IGU7ICsrYXQpCiAgICAgICAgaWYgKG9wKHRoaXMubGluZXNbYXRdKSkgcmV0dXJuIHRydWU7CiAgICB9CiAgfTsKICBmdW5jdGlvbiBCcmFuY2hDaHVuayhjaGlsZHJlbikgewogICAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuOwogICAgdmFyIHNpemUgPSAwLCBoZWlnaHQgPSAwOwogICAgZm9yICh2YXIgaSA9IDAsIGUgPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBlOyArK2kpIHsKICAgICAgdmFyIGNoID0gY2hpbGRyZW5baV07CiAgICAgIHNpemUgKz0gY2guY2h1bmtTaXplKCk7IGhlaWdodCArPSBjaC5oZWlnaHQ7CiAgICAgIGNoLnBhcmVudCA9IHRoaXM7CiAgICB9CiAgICB0aGlzLnNpemUgPSBzaXplOwogICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7CiAgICB0aGlzLnBhcmVudCA9IG51bGw7CiAgfQogIEJyYW5jaENodW5rLnByb3RvdHlwZSA9IHsKICAgIGNodW5rU2l6ZTogZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLnNpemU7IH0sCiAgICByZW1vdmU6IGZ1bmN0aW9uKGF0LCBuLCBjYWxsYmFja3MpIHsKICAgICAgdGhpcy5zaXplIC09IG47CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7ICsraSkgewogICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV0sIHN6ID0gY2hpbGQuY2h1bmtTaXplKCk7CiAgICAgICAgaWYgKGF0IDwgc3opIHsKICAgICAgICAgIHZhciBybSA9IE1hdGgubWluKG4sIHN6IC0gYXQpLCBvbGRIZWlnaHQgPSBjaGlsZC5oZWlnaHQ7CiAgICAgICAgICBjaGlsZC5yZW1vdmUoYXQsIHJtLCBjYWxsYmFja3MpOwogICAgICAgICAgdGhpcy5oZWlnaHQgLT0gb2xkSGVpZ2h0IC0gY2hpbGQuaGVpZ2h0OwogICAgICAgICAgaWYgKHN6ID09IHJtKSB7IHRoaXMuY2hpbGRyZW4uc3BsaWNlKGktLSwgMSk7IGNoaWxkLnBhcmVudCA9IG51bGw7IH0KICAgICAgICAgIGlmICgobiAtPSBybSkgPT0gMCkgYnJlYWs7CiAgICAgICAgICBhdCA9IDA7CiAgICAgICAgfSBlbHNlIGF0IC09IHN6OwogICAgICB9CiAgICAgIGlmICh0aGlzLnNpemUgLSBuIDwgMjUpIHsKICAgICAgICB2YXIgbGluZXMgPSBbXTsKICAgICAgICB0aGlzLmNvbGxhcHNlKGxpbmVzKTsKICAgICAgICB0aGlzLmNoaWxkcmVuID0gW25ldyBMZWFmQ2h1bmsobGluZXMpXTsKICAgICAgICB0aGlzLmNoaWxkcmVuWzBdLnBhcmVudCA9IHRoaXM7CiAgICAgIH0KICAgIH0sCiAgICBjb2xsYXBzZTogZnVuY3Rpb24obGluZXMpIHsKICAgICAgZm9yICh2YXIgaSA9IDAsIGUgPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGU7ICsraSkgdGhpcy5jaGlsZHJlbltpXS5jb2xsYXBzZShsaW5lcyk7CiAgICB9LAogICAgaW5zZXJ0OiBmdW5jdGlvbihhdCwgbGluZXMpIHsKICAgICAgdmFyIGhlaWdodCA9IDA7CiAgICAgIGZvciAodmFyIGkgPSAwLCBlID0gbGluZXMubGVuZ3RoOyBpIDwgZTsgKytpKSBoZWlnaHQgKz0gbGluZXNbaV0uaGVpZ2h0OwogICAgICB0aGlzLmluc2VydEhlaWdodChhdCwgbGluZXMsIGhlaWdodCk7CiAgICB9LAogICAgaW5zZXJ0SGVpZ2h0OiBmdW5jdGlvbihhdCwgbGluZXMsIGhlaWdodCkgewogICAgICB0aGlzLnNpemUgKz0gbGluZXMubGVuZ3RoOwogICAgICB0aGlzLmhlaWdodCArPSBoZWlnaHQ7CiAgICAgIGZvciAodmFyIGkgPSAwLCBlID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBlOyArK2kpIHsKICAgICAgICB2YXIgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW2ldLCBzeiA9IGNoaWxkLmNodW5rU2l6ZSgpOwogICAgICAgIGlmIChhdCA8PSBzeikgewogICAgICAgICAgY2hpbGQuaW5zZXJ0SGVpZ2h0KGF0LCBsaW5lcywgaGVpZ2h0KTsKICAgICAgICAgIGlmIChjaGlsZC5saW5lcyAmJiBjaGlsZC5saW5lcy5sZW5ndGggPiA1MCkgewogICAgICAgICAgICB3aGlsZSAoY2hpbGQubGluZXMubGVuZ3RoID4gNTApIHsKICAgICAgICAgICAgICB2YXIgc3BpbGxlZCA9IGNoaWxkLmxpbmVzLnNwbGljZShjaGlsZC5saW5lcy5sZW5ndGggLSAyNSwgMjUpOwogICAgICAgICAgICAgIHZhciBuZXdsZWFmID0gbmV3IExlYWZDaHVuayhzcGlsbGVkKTsKICAgICAgICAgICAgICBjaGlsZC5oZWlnaHQgLT0gbmV3bGVhZi5oZWlnaHQ7CiAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaSArIDEsIDAsIG5ld2xlYWYpOwogICAgICAgICAgICAgIG5ld2xlYWYucGFyZW50ID0gdGhpczsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLm1heWJlU3BpbGwoKTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBhdCAtPSBzejsKICAgICAgfQogICAgfSwKICAgIG1heWJlU3BpbGw6IGZ1bmN0aW9uKCkgewogICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPD0gMTApIHJldHVybjsKICAgICAgdmFyIG1lID0gdGhpczsKICAgICAgZG8gewogICAgICAgIHZhciBzcGlsbGVkID0gbWUuY2hpbGRyZW4uc3BsaWNlKG1lLmNoaWxkcmVuLmxlbmd0aCAtIDUsIDUpOwogICAgICAgIHZhciBzaWJsaW5nID0gbmV3IEJyYW5jaENodW5rKHNwaWxsZWQpOwogICAgICAgIGlmICghbWUucGFyZW50KSB7IC8vIEJlY29tZSB0aGUgcGFyZW50IG5vZGUKICAgICAgICAgIHZhciBjb3B5ID0gbmV3IEJyYW5jaENodW5rKG1lLmNoaWxkcmVuKTsKICAgICAgICAgIGNvcHkucGFyZW50ID0gbWU7CiAgICAgICAgICBtZS5jaGlsZHJlbiA9IFtjb3B5LCBzaWJsaW5nXTsKICAgICAgICAgIG1lID0gY29weTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbWUuc2l6ZSAtPSBzaWJsaW5nLnNpemU7CiAgICAgICAgICBtZS5oZWlnaHQgLT0gc2libGluZy5oZWlnaHQ7CiAgICAgICAgICB2YXIgbXlJbmRleCA9IGluZGV4T2YobWUucGFyZW50LmNoaWxkcmVuLCBtZSk7CiAgICAgICAgICBtZS5wYXJlbnQuY2hpbGRyZW4uc3BsaWNlKG15SW5kZXggKyAxLCAwLCBzaWJsaW5nKTsKICAgICAgICB9CiAgICAgICAgc2libGluZy5wYXJlbnQgPSBtZS5wYXJlbnQ7CiAgICAgIH0gd2hpbGUgKG1lLmNoaWxkcmVuLmxlbmd0aCA+IDEwKTsKICAgICAgbWUucGFyZW50Lm1heWJlU3BpbGwoKTsKICAgIH0sCiAgICBpdGVyOiBmdW5jdGlvbihmcm9tLCB0bywgb3ApIHsgdGhpcy5pdGVyTihmcm9tLCB0byAtIGZyb20sIG9wKTsgfSwKICAgIGl0ZXJOOiBmdW5jdGlvbihhdCwgbiwgb3ApIHsKICAgICAgZm9yICh2YXIgaSA9IDAsIGUgPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGU7ICsraSkgewogICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV0sIHN6ID0gY2hpbGQuY2h1bmtTaXplKCk7CiAgICAgICAgaWYgKGF0IDwgc3opIHsKICAgICAgICAgIHZhciB1c2VkID0gTWF0aC5taW4obiwgc3ogLSBhdCk7CiAgICAgICAgICBpZiAoY2hpbGQuaXRlck4oYXQsIHVzZWQsIG9wKSkgcmV0dXJuIHRydWU7CiAgICAgICAgICBpZiAoKG4gLT0gdXNlZCkgPT0gMCkgYnJlYWs7CiAgICAgICAgICBhdCA9IDA7CiAgICAgICAgfSBlbHNlIGF0IC09IHN6OwogICAgICB9CiAgICB9CiAgfTsKCiAgZnVuY3Rpb24gZ2V0TGluZUF0KGNodW5rLCBuKSB7CiAgICB3aGlsZSAoIWNodW5rLmxpbmVzKSB7CiAgICAgIGZvciAodmFyIGkgPSAwOzsgKytpKSB7CiAgICAgICAgdmFyIGNoaWxkID0gY2h1bmsuY2hpbGRyZW5baV0sIHN6ID0gY2hpbGQuY2h1bmtTaXplKCk7CiAgICAgICAgaWYgKG4gPCBzeikgeyBjaHVuayA9IGNoaWxkOyBicmVhazsgfQogICAgICAgIG4gLT0gc3o7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBjaHVuay5saW5lc1tuXTsKICB9CiAgZnVuY3Rpb24gbGluZU5vKGxpbmUpIHsKICAgIGlmIChsaW5lLnBhcmVudCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIHZhciBjdXIgPSBsaW5lLnBhcmVudCwgbm8gPSBpbmRleE9mKGN1ci5saW5lcywgbGluZSk7CiAgICBmb3IgKHZhciBjaHVuayA9IGN1ci5wYXJlbnQ7IGNodW5rOyBjdXIgPSBjaHVuaywgY2h1bmsgPSBjaHVuay5wYXJlbnQpIHsKICAgICAgZm9yICh2YXIgaSA9IDAsIGUgPSBjaHVuay5jaGlsZHJlbi5sZW5ndGg7IDsgKytpKSB7CiAgICAgICAgaWYgKGNodW5rLmNoaWxkcmVuW2ldID09IGN1cikgYnJlYWs7CiAgICAgICAgbm8gKz0gY2h1bmsuY2hpbGRyZW5baV0uY2h1bmtTaXplKCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBubzsKICB9CiAgZnVuY3Rpb24gbGluZUF0SGVpZ2h0KGNodW5rLCBoKSB7CiAgICB2YXIgbiA9IDA7CiAgICBvdXRlcjogZG8gewogICAgICBmb3IgKHZhciBpID0gMCwgZSA9IGNodW5rLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGU7ICsraSkgewogICAgICAgIHZhciBjaGlsZCA9IGNodW5rLmNoaWxkcmVuW2ldLCBjaCA9IGNoaWxkLmhlaWdodDsKICAgICAgICBpZiAoaCA8IGNoKSB7IGNodW5rID0gY2hpbGQ7IGNvbnRpbnVlIG91dGVyOyB9CiAgICAgICAgaCAtPSBjaDsKICAgICAgICBuICs9IGNoaWxkLmNodW5rU2l6ZSgpOwogICAgICB9CiAgICAgIHJldHVybiBuOwogICAgfSB3aGlsZSAoIWNodW5rLmxpbmVzKTsKICAgIGZvciAodmFyIGkgPSAwLCBlID0gY2h1bmsubGluZXMubGVuZ3RoOyBpIDwgZTsgKytpKSB7CiAgICAgIHZhciBsaW5lID0gY2h1bmsubGluZXNbaV0sIGxoID0gbGluZS5oZWlnaHQ7CiAgICAgIGlmIChoIDwgbGgpIGJyZWFrOwogICAgICBoIC09IGxoOwogICAgfQogICAgcmV0dXJuIG4gKyBpOwogIH0KICBmdW5jdGlvbiBoZWlnaHRBdExpbmUoY2h1bmssIG4pIHsKICAgIHZhciBoID0gMDsKICAgIG91dGVyOiBkbyB7CiAgICAgIGZvciAodmFyIGkgPSAwLCBlID0gY2h1bmsuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgZTsgKytpKSB7CiAgICAgICAgdmFyIGNoaWxkID0gY2h1bmsuY2hpbGRyZW5baV0sIHN6ID0gY2hpbGQuY2h1bmtTaXplKCk7CiAgICAgICAgaWYgKG4gPCBzeikgeyBjaHVuayA9IGNoaWxkOyBjb250aW51ZSBvdXRlcjsgfQogICAgICAgIG4gLT0gc3o7CiAgICAgICAgaCArPSBjaGlsZC5oZWlnaHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIGg7CiAgICB9IHdoaWxlICghY2h1bmsubGluZXMpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpIGggKz0gY2h1bmsubGluZXNbaV0uaGVpZ2h0OwogICAgcmV0dXJuIGg7CiAgfQoKICAvLyBUaGUgaGlzdG9yeSBvYmplY3QgJ2NodW5rcycgY2hhbmdlcyB0aGF0IGFyZSBtYWRlIGNsb3NlIHRvZ2V0aGVyCiAgLy8gYW5kIGF0IGFsbW9zdCB0aGUgc2FtZSB0aW1lIGludG8gYmlnZ2VyIHVuZG9hYmxlIHVuaXRzLgogIGZ1bmN0aW9uIEhpc3RvcnkoKSB7CiAgICB0aGlzLnRpbWUgPSAwOwogICAgdGhpcy5kb25lID0gW107IHRoaXMudW5kb25lID0gW107CiAgfQogIEhpc3RvcnkucHJvdG90eXBlID0gewogICAgYWRkQ2hhbmdlOiBmdW5jdGlvbihzdGFydCwgYWRkZWQsIG9sZCkgewogICAgICB0aGlzLnVuZG9uZS5sZW5ndGggPSAwOwogICAgICB2YXIgdGltZSA9ICtuZXcgRGF0ZSwgY3VyID0gdGhpcy5kb25lW3RoaXMuZG9uZS5sZW5ndGggLSAxXSwgbGFzdCA9IGN1ciAmJiBjdXJbY3VyLmxlbmd0aCAtIDFdOwogICAgICB2YXIgZHRpbWUgPSB0aW1lIC0gdGhpcy50aW1lOwogICAgICBpZiAoZHRpbWUgPiA0MDAgfHwgIWxhc3QpIHsKICAgICAgICB0aGlzLmRvbmUucHVzaChbe3N0YXJ0OiBzdGFydCwgYWRkZWQ6IGFkZGVkLCBvbGQ6IG9sZH1dKTsKICAgICAgfSBlbHNlIGlmIChsYXN0LnN0YXJ0ID4gc3RhcnQgKyBhZGRlZCB8fCBsYXN0LnN0YXJ0ICsgbGFzdC5hZGRlZCA8IHN0YXJ0IC0gbGFzdC5hZGRlZCArIGxhc3Qub2xkLmxlbmd0aCkgewogICAgICAgIGN1ci5wdXNoKHtzdGFydDogc3RhcnQsIGFkZGVkOiBhZGRlZCwgb2xkOiBvbGR9KTsKICAgICAgfSBlbHNlIHsKICAgICAgICB2YXIgb2xkb2ZmID0gMDsKICAgICAgICBpZiAoc3RhcnQgPCBsYXN0LnN0YXJ0KSB7CiAgICAgICAgICBmb3IgKHZhciBpID0gbGFzdC5zdGFydCAtIHN0YXJ0IC0gMTsgaSA+PSAwOyAtLWkpCiAgICAgICAgICAgIGxhc3Qub2xkLnVuc2hpZnQob2xkW2ldKTsKICAgICAgICAgIGxhc3QuYWRkZWQgKz0gbGFzdC5zdGFydCAtIHN0YXJ0OwogICAgICAgICAgbGFzdC5zdGFydCA9IHN0YXJ0OwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChsYXN0LnN0YXJ0IDwgc3RhcnQpIHsKICAgICAgICAgIG9sZG9mZiA9IHN0YXJ0IC0gbGFzdC5zdGFydDsKICAgICAgICAgIGFkZGVkICs9IG9sZG9mZjsKICAgICAgICB9CiAgICAgICAgZm9yICh2YXIgaSA9IGxhc3QuYWRkZWQgLSBvbGRvZmYsIGUgPSBvbGQubGVuZ3RoOyBpIDwgZTsgKytpKQogICAgICAgICAgbGFzdC5vbGQucHVzaChvbGRbaV0pOwogICAgICAgIGlmIChsYXN0LmFkZGVkIDwgYWRkZWQpIGxhc3QuYWRkZWQgPSBhZGRlZDsKICAgICAgfQogICAgICB0aGlzLnRpbWUgPSB0aW1lOwogICAgfQogIH07CgogIGZ1bmN0aW9uIHN0b3BNZXRob2QoKSB7ZV9zdG9wKHRoaXMpO30KICAvLyBFbnN1cmUgYW4gZXZlbnQgaGFzIGEgc3RvcCBtZXRob2QuCiAgZnVuY3Rpb24gYWRkU3RvcChldmVudCkgewogICAgaWYgKCFldmVudC5zdG9wKSBldmVudC5zdG9wID0gc3RvcE1ldGhvZDsKICAgIHJldHVybiBldmVudDsKICB9CgogIGZ1bmN0aW9uIGVfcHJldmVudERlZmF1bHQoZSkgewogICAgaWYgKGUucHJldmVudERlZmF1bHQpIGUucHJldmVudERlZmF1bHQoKTsKICAgIGVsc2UgZS5yZXR1cm5WYWx1ZSA9IGZhbHNlOwogIH0KICBmdW5jdGlvbiBlX3N0b3BQcm9wYWdhdGlvbihlKSB7CiAgICBpZiAoZS5zdG9wUHJvcGFnYXRpb24pIGUuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICBlbHNlIGUuY2FuY2VsQnViYmxlID0gdHJ1ZTsKICB9CiAgZnVuY3Rpb24gZV9zdG9wKGUpIHtlX3ByZXZlbnREZWZhdWx0KGUpOyBlX3N0b3BQcm9wYWdhdGlvbihlKTt9CiAgQ29kZU1pcnJvci5lX3N0b3AgPSBlX3N0b3A7CiAgQ29kZU1pcnJvci5lX3ByZXZlbnREZWZhdWx0ID0gZV9wcmV2ZW50RGVmYXVsdDsKICBDb2RlTWlycm9yLmVfc3RvcFByb3BhZ2F0aW9uID0gZV9zdG9wUHJvcGFnYXRpb247CgogIGZ1bmN0aW9uIGVfdGFyZ2V0KGUpIHtyZXR1cm4gZS50YXJnZXQgfHwgZS5zcmNFbGVtZW50O30KICBmdW5jdGlvbiBlX2J1dHRvbihlKSB7CiAgICBpZiAoZS53aGljaCkgcmV0dXJuIGUud2hpY2g7CiAgICBlbHNlIGlmIChlLmJ1dHRvbiAmIDEpIHJldHVybiAxOwogICAgZWxzZSBpZiAoZS5idXR0b24gJiAyKSByZXR1cm4gMzsKICAgIGVsc2UgaWYgKGUuYnV0dG9uICYgNCkgcmV0dXJuIDI7CiAgfQoKICAvLyBBbGxvdyAzcmQtcGFydHkgY29kZSB0byBvdmVycmlkZSBldmVudCBwcm9wZXJ0aWVzIGJ5IGFkZGluZyBhbiBvdmVycmlkZQogIC8vIG9iamVjdCB0byBhbiBldmVudCBvYmplY3QuCiAgZnVuY3Rpb24gZV9wcm9wKGUsIHByb3ApIHsKICAgIHZhciBvdmVycmlkZGVuID0gZS5vdmVycmlkZSAmJiBlLm92ZXJyaWRlLmhhc093blByb3BlcnR5KHByb3ApOwogICAgcmV0dXJuIG92ZXJyaWRkZW4gPyBlLm92ZXJyaWRlW3Byb3BdIDogZVtwcm9wXTsKICB9CgogIC8vIEV2ZW50IGhhbmRsZXIgcmVnaXN0cmF0aW9uLiBJZiBkaXNjb25uZWN0IGlzIHRydWUsIGl0J2xsIHJldHVybiBhCiAgLy8gZnVuY3Rpb24gdGhhdCB1bnJlZ2lzdGVycyB0aGUgaGFuZGxlci4KICBmdW5jdGlvbiBjb25uZWN0KG5vZGUsIHR5cGUsIGhhbmRsZXIsIGRpc2Nvbm5lY3QpIHsKICAgIGlmICh0eXBlb2Ygbm9kZS5hZGRFdmVudExpc3RlbmVyID09ICJmdW5jdGlvbiIpIHsKICAgICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRsZXIsIGZhbHNlKTsKICAgICAgaWYgKGRpc2Nvbm5lY3QpIHJldHVybiBmdW5jdGlvbigpIHtub2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgaGFuZGxlciwgZmFsc2UpO307CiAgICB9CiAgICBlbHNlIHsKICAgICAgdmFyIHdyYXBIYW5kbGVyID0gZnVuY3Rpb24oZXZlbnQpIHtoYW5kbGVyKGV2ZW50IHx8IHdpbmRvdy5ldmVudCk7fTsKICAgICAgbm9kZS5hdHRhY2hFdmVudCgib24iICsgdHlwZSwgd3JhcEhhbmRsZXIpOwogICAgICBpZiAoZGlzY29ubmVjdCkgcmV0dXJuIGZ1bmN0aW9uKCkge25vZGUuZGV0YWNoRXZlbnQoIm9uIiArIHR5cGUsIHdyYXBIYW5kbGVyKTt9OwogICAgfQogIH0KICBDb2RlTWlycm9yLmNvbm5lY3QgPSBjb25uZWN0OwoKICBmdW5jdGlvbiBEZWxheWVkKCkge3RoaXMuaWQgPSBudWxsO30KICBEZWxheWVkLnByb3RvdHlwZSA9IHtzZXQ6IGZ1bmN0aW9uKG1zLCBmKSB7Y2xlYXJUaW1lb3V0KHRoaXMuaWQpOyB0aGlzLmlkID0gc2V0VGltZW91dChmLCBtcyk7fX07CgogIC8vIERldGVjdCBkcmFnLWFuZC1kcm9wCiAgdmFyIGRyYWdBbmREcm9wID0gZnVuY3Rpb24oKSB7CiAgICAvLyBJRTggaGFzIG9uZHJhZ3N0YXJ0IGFuZCBvbmRyb3AgcHJvcGVydGllcywgYnV0IGRvZXNuJ3Qgc2VlbSB0bwogICAgLy8gYWN0dWFsbHkgc3VwcG9ydCBvbmRyYWdzdGFydCB0aGUgd2F5IGl0J3Mgc3VwcG9zZWQgdG8gd29yay4KICAgIGlmICgvTVNJRSBbMS04XVxiLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKSByZXR1cm4gZmFsc2U7CiAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICByZXR1cm4gImRyYWdnYWJsZSIgaW4gZGl2OwogIH0oKTsKCiAgdmFyIGdlY2tvID0gL2dlY2tvXC9cZHs3fS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7CiAgdmFyIGllID0gL01TSUUgXGQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7CiAgdmFyIHdlYmtpdCA9IC9XZWJLaXRcLy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTsKCiAgdmFyIGxpbmVTZXAgPSAiXG4iOwogIC8vIEZlYXR1cmUtZGV0ZWN0IHdoZXRoZXIgbmV3bGluZXMgaW4gdGV4dGFyZWFzIGFyZSBjb252ZXJ0ZWQgdG8gXHJcbgogIChmdW5jdGlvbiAoKSB7CiAgICB2YXIgdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpOwogICAgdGUudmFsdWUgPSAiZm9vXG5iYXIiOwogICAgaWYgKHRlLnZhbHVlLmluZGV4T2YoIlxyIikgPiAtMSkgbGluZVNlcCA9ICJcclxuIjsKICB9KCkpOwoKICAvLyBDb3VudHMgdGhlIGNvbHVtbiBvZmZzZXQgaW4gYSBzdHJpbmcsIHRha2luZyB0YWJzIGludG8gYWNjb3VudC4KICAvLyBVc2VkIG1vc3RseSB0byBmaW5kIGluZGVudGF0aW9uLgogIGZ1bmN0aW9uIGNvdW50Q29sdW1uKHN0cmluZywgZW5kLCB0YWJTaXplKSB7CiAgICBpZiAoZW5kID09IG51bGwpIHsKICAgICAgZW5kID0gc3RyaW5nLnNlYXJjaCgvW15cc1x1MDBhMF0vKTsKICAgICAgaWYgKGVuZCA9PSAtMSkgZW5kID0gc3RyaW5nLmxlbmd0aDsKICAgIH0KICAgIGZvciAodmFyIGkgPSAwLCBuID0gMDsgaSA8IGVuZDsgKytpKSB7CiAgICAgIGlmIChzdHJpbmcuY2hhckF0KGkpID09ICJcdCIpIG4gKz0gdGFiU2l6ZSAtIChuICUgdGFiU2l6ZSk7CiAgICAgIGVsc2UgKytuOwogICAgfQogICAgcmV0dXJuIG47CiAgfQoKICBmdW5jdGlvbiBjb21wdXRlZFN0eWxlKGVsdCkgewogICAgaWYgKGVsdC5jdXJyZW50U3R5bGUpIHJldHVybiBlbHQuY3VycmVudFN0eWxlOwogICAgcmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsdCwgbnVsbCk7CiAgfQoKICAvLyBGaW5kIHRoZSBwb3NpdGlvbiBvZiBhbiBlbGVtZW50IGJ5IGZvbGxvd2luZyB0aGUgb2Zmc2V0UGFyZW50IGNoYWluLgogIC8vIElmIHNjcmVlbj09dHJ1ZSwgaXQgcmV0dXJucyBzY3JlZW4gKHJhdGhlciB0aGFuIHBhZ2UpIGNvb3JkaW5hdGVzLgogIGZ1bmN0aW9uIGVsdE9mZnNldChub2RlLCBzY3JlZW4pIHsKICAgIHZhciBib2QgPSBub2RlLm93bmVyRG9jdW1lbnQuYm9keTsKICAgIHZhciB4ID0gMCwgeSA9IDAsIHNraXBCb2R5ID0gZmFsc2U7CiAgICBmb3IgKHZhciBuID0gbm9kZTsgbjsgbiA9IG4ub2Zmc2V0UGFyZW50KSB7CiAgICAgIHZhciBvbCA9IG4ub2Zmc2V0TGVmdCwgb3QgPSBuLm9mZnNldFRvcDsKICAgICAgLy8gRmlyZWZveCByZXBvcnRzIHdlaXJkIGludmVydGVkIG9mZnNldHMgd2hlbiB0aGUgYm9keSBoYXMgYSBib3JkZXIuCiAgICAgIGlmIChuID09IGJvZCkgeyB4ICs9IE1hdGguYWJzKG9sKTsgeSArPSBNYXRoLmFicyhvdCk7IH0KICAgICAgZWxzZSB7IHggKz0gb2wsIHkgKz0gb3Q7IH0KICAgICAgaWYgKHNjcmVlbiAmJiBjb21wdXRlZFN0eWxlKG4pLnBvc2l0aW9uID09ICJmaXhlZCIpCiAgICAgICAgc2tpcEJvZHkgPSB0cnVlOwogICAgfQogICAgdmFyIGUgPSBzY3JlZW4gJiYgIXNraXBCb2R5ID8gbnVsbCA6IGJvZDsKICAgIGZvciAodmFyIG4gPSBub2RlLnBhcmVudE5vZGU7IG4gIT0gZTsgbiA9IG4ucGFyZW50Tm9kZSkKICAgICAgaWYgKG4uc2Nyb2xsTGVmdCAhPSBudWxsKSB7IHggLT0gbi5zY3JvbGxMZWZ0OyB5IC09IG4uc2Nyb2xsVG9wO30KICAgIHJldHVybiB7bGVmdDogeCwgdG9wOiB5fTsKICB9CiAgLy8gVXNlIHRoZSBmYXN0ZXIgYW5kIHNhbmVyIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBtZXRob2Qgd2hlbiBwb3NzaWJsZS4KICBpZiAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCAhPSBudWxsKSBlbHRPZmZzZXQgPSBmdW5jdGlvbihub2RlLCBzY3JlZW4pIHsKICAgIC8vIFRha2UgdGhlIHBhcnRzIG9mIGJvdW5kaW5nIGNsaWVudCByZWN0IHRoYXQgd2UgYXJlIGludGVyZXN0ZWQgaW4gc28gd2UgYXJlIGFibGUgdG8gZWRpdCBpZiBuZWVkIGJlLAogICAgLy8gc2luY2UgdGhlIHJldHVybmVkIHZhbHVlIGNhbm5vdCBiZSBjaGFuZ2VkIGV4dGVybmFsbHkgKHRoZXkgYXJlIGtlcHQgaW4gc3luYyBhcyB0aGUgZWxlbWVudCBtb3ZlcyB3aXRoaW4gdGhlIHBhZ2UpCiAgICB0cnkgeyB2YXIgYm94ID0gbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsgYm94ID0geyB0b3A6IGJveC50b3AsIGxlZnQ6IGJveC5sZWZ0IH07IH0KICAgIGNhdGNoKGUpIHsgYm94ID0ge3RvcDogMCwgbGVmdDogMH07IH0KICAgIGlmICghc2NyZWVuKSB7CiAgICAgIC8vIEdldCB0aGUgdG9wbGV2ZWwgc2Nyb2xsLCB3b3JraW5nIGFyb3VuZCBicm93c2VyIGRpZmZlcmVuY2VzLgogICAgICBpZiAod2luZG93LnBhZ2VZT2Zmc2V0ID09IG51bGwpIHsKICAgICAgICB2YXIgdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCB8fCBkb2N1bWVudC5ib2R5LnBhcmVudE5vZGU7CiAgICAgICAgaWYgKHQuc2Nyb2xsVG9wID09IG51bGwpIHQgPSBkb2N1bWVudC5ib2R5OwogICAgICAgIGJveC50b3AgKz0gdC5zY3JvbGxUb3A7IGJveC5sZWZ0ICs9IHQuc2Nyb2xsTGVmdDsKICAgICAgfSBlbHNlIHsKICAgICAgICBib3gudG9wICs9IHdpbmRvdy5wYWdlWU9mZnNldDsgYm94LmxlZnQgKz0gd2luZG93LnBhZ2VYT2Zmc2V0OwogICAgICB9CiAgICB9CiAgICByZXR1cm4gYm94OwogIH07CgogIC8vIEdldCBhIG5vZGUncyB0ZXh0IGNvbnRlbnQuCiAgZnVuY3Rpb24gZWx0VGV4dChub2RlKSB7CiAgICByZXR1cm4gbm9kZS50ZXh0Q29udGVudCB8fCBub2RlLmlubmVyVGV4dCB8fCBub2RlLm5vZGVWYWx1ZSB8fCAiIjsKICB9CiAgZnVuY3Rpb24gc2VsZWN0SW5wdXQobm9kZSkgewogICAgaWYgKGlvcykgeyAvLyBNb2JpbGUgU2FmYXJpIGFwcGFyZW50bHkgaGFzIGEgYnVnIHdoZXJlIHNlbGVjdCgpIGlzIGJyb2tlbi4KICAgICAgbm9kZS5zZWxlY3Rpb25TdGFydCA9IDA7CiAgICAgIG5vZGUuc2VsZWN0aW9uRW5kID0gbm9kZS52YWx1ZS5sZW5ndGg7CiAgICB9IGVsc2Ugbm9kZS5zZWxlY3QoKTsKICB9CgogIC8vIE9wZXJhdGlvbnMgb24ge2xpbmUsIGNofSBvYmplY3RzLgogIGZ1bmN0aW9uIHBvc0VxKGEsIGIpIHtyZXR1cm4gYS5saW5lID09IGIubGluZSAmJiBhLmNoID09IGIuY2g7fQogIGZ1bmN0aW9uIHBvc0xlc3MoYSwgYikge3JldHVybiBhLmxpbmUgPCBiLmxpbmUgfHwgKGEubGluZSA9PSBiLmxpbmUgJiYgYS5jaCA8IGIuY2gpO30KICBmdW5jdGlvbiBjb3B5UG9zKHgpIHtyZXR1cm4ge2xpbmU6IHgubGluZSwgY2g6IHguY2h9O30KCiAgdmFyIGVzY2FwZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwcmUiKTsKICBmdW5jdGlvbiBodG1sRXNjYXBlKHN0cikgewogICAgZXNjYXBlRWxlbWVudC50ZXh0Q29udGVudCA9IHN0cjsKICAgIHJldHVybiBlc2NhcGVFbGVtZW50LmlubmVySFRNTDsKICB9CiAgLy8gUmVjZW50IChsYXRlIDIwMTEpIE9wZXJhIGJldGFzIGluc2VydCBib2d1cyBuZXdsaW5lcyBhdCB0aGUgc3RhcnQKICAvLyBvZiB0aGUgdGV4dENvbnRlbnQsIHNvIHdlIHN0cmlwIHRob3NlLgogIGlmIChodG1sRXNjYXBlKCJhIikgPT0gIlxuYSIpCiAgICBodG1sRXNjYXBlID0gZnVuY3Rpb24oc3RyKSB7CiAgICAgIGVzY2FwZUVsZW1lbnQudGV4dENvbnRlbnQgPSBzdHI7CiAgICAgIHJldHVybiBlc2NhcGVFbGVtZW50LmlubmVySFRNTC5zbGljZSgxKTsKICAgIH07CiAgLy8gU29tZSBJRXMgZG9uJ3QgcHJlc2VydmUgdGFicyB0aHJvdWdoIGlubmVySFRNTAogIGVsc2UgaWYgKGh0bWxFc2NhcGUoIlx0IikgIT0gIlx0IikKICAgIGh0bWxFc2NhcGUgPSBmdW5jdGlvbihzdHIpIHsKICAgICAgZXNjYXBlRWxlbWVudC5pbm5lckhUTUwgPSAiIjsKICAgICAgZXNjYXBlRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzdHIpKTsKICAgICAgcmV0dXJuIGVzY2FwZUVsZW1lbnQuaW5uZXJIVE1MOwogICAgfTsKICBDb2RlTWlycm9yLmh0bWxFc2NhcGUgPSBodG1sRXNjYXBlOwoKICAvLyBVc2VkIHRvIHBvc2l0aW9uIHRoZSBjdXJzb3IgYWZ0ZXIgYW4gdW5kby9yZWRvIGJ5IGZpbmRpbmcgdGhlCiAgLy8gbGFzdCBlZGl0ZWQgY2hhcmFjdGVyLgogIGZ1bmN0aW9uIGVkaXRFbmQoZnJvbSwgdG8pIHsKICAgIGlmICghdG8pIHJldHVybiAwOwogICAgaWYgKCFmcm9tKSByZXR1cm4gdG8ubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IGZyb20ubGVuZ3RoLCBqID0gdG8ubGVuZ3RoOyBpID49IDAgJiYgaiA+PSAwOyAtLWksIC0taikKICAgICAgaWYgKGZyb20uY2hhckF0KGkpICE9IHRvLmNoYXJBdChqKSkgYnJlYWs7CiAgICByZXR1cm4gaiArIDE7CiAgfQoKICBmdW5jdGlvbiBpbmRleE9mKGNvbGxlY3Rpb24sIGVsdCkgewogICAgaWYgKGNvbGxlY3Rpb24uaW5kZXhPZikgcmV0dXJuIGNvbGxlY3Rpb24uaW5kZXhPZihlbHQpOwogICAgZm9yICh2YXIgaSA9IDAsIGUgPSBjb2xsZWN0aW9uLmxlbmd0aDsgaSA8IGU7ICsraSkKICAgICAgaWYgKGNvbGxlY3Rpb25baV0gPT0gZWx0KSByZXR1cm4gaTsKICAgIHJldHVybiAtMTsKICB9CiAgZnVuY3Rpb24gaXNXb3JkQ2hhcihjaCkgewogICAgcmV0dXJuIC9cdy8udGVzdChjaCkgfHwgY2gudG9VcHBlckNhc2UoKSAhPSBjaC50b0xvd2VyQ2FzZSgpOwogIH0KCiAgLy8gU2VlIGlmICIiLnNwbGl0IGlzIHRoZSBicm9rZW4gSUUgdmVyc2lvbiwgaWYgc28sIHByb3ZpZGUgYW4KICAvLyBhbHRlcm5hdGl2ZSB3YXkgdG8gc3BsaXQgbGluZXMuCiAgdmFyIHNwbGl0TGluZXMgPSAiXG5cbmIiLnNwbGl0KC9cbi8pLmxlbmd0aCAhPSAzID8gZnVuY3Rpb24oc3RyaW5nKSB7CiAgICB2YXIgcG9zID0gMCwgbmwsIHJlc3VsdCA9IFtdOwogICAgd2hpbGUgKChubCA9IHN0cmluZy5pbmRleE9mKCJcbiIsIHBvcykpID4gLTEpIHsKICAgICAgcmVzdWx0LnB1c2goc3RyaW5nLnNsaWNlKHBvcywgc3RyaW5nLmNoYXJBdChubC0xKSA9PSAiXHIiID8gbmwgLSAxIDogbmwpKTsKICAgICAgcG9zID0gbmwgKyAxOwogICAgfQogICAgcmVzdWx0LnB1c2goc3RyaW5nLnNsaWNlKHBvcykpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9IDogZnVuY3Rpb24oc3RyaW5nKXtyZXR1cm4gc3RyaW5nLnNwbGl0KC9ccj9cbi8pO307CiAgQ29kZU1pcnJvci5zcGxpdExpbmVzID0gc3BsaXRMaW5lczsKCiAgdmFyIGhhc1NlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24gPyBmdW5jdGlvbih0ZSkgewogICAgdHJ5IHsgcmV0dXJuIHRlLnNlbGVjdGlvblN0YXJ0ICE9IHRlLnNlbGVjdGlvbkVuZDsgfQogICAgY2F0Y2goZSkgeyByZXR1cm4gZmFsc2U7IH0KICB9IDogZnVuY3Rpb24odGUpIHsKICAgIHRyeSB7dmFyIHJhbmdlID0gdGUub3duZXJEb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTt9CiAgICBjYXRjaChlKSB7fQogICAgaWYgKCFyYW5nZSB8fCByYW5nZS5wYXJlbnRFbGVtZW50KCkgIT0gdGUpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiByYW5nZS5jb21wYXJlRW5kUG9pbnRzKCJTdGFydFRvRW5kIiwgcmFuZ2UpICE9IDA7CiAgfTsKCiAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJudWxsIiwgZnVuY3Rpb24oKSB7CiAgICByZXR1cm4ge3Rva2VuOiBmdW5jdGlvbihzdHJlYW0pIHtzdHJlYW0uc2tpcFRvRW5kKCk7fX07CiAgfSk7CiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3BsYWluIiwgIm51bGwiKTsKCiAgdmFyIGtleU5hbWVzID0gezM6ICJFbnRlciIsIDg6ICJCYWNrc3BhY2UiLCA5OiAiVGFiIiwgMTM6ICJFbnRlciIsIDE2OiAiU2hpZnQiLCAxNzogIkN0cmwiLCAxODogIkFsdCIsCiAgICAgICAgICAgICAgICAgIDE5OiAiUGF1c2UiLCAyMDogIkNhcHNMb2NrIiwgMjc6ICJFc2MiLCAzMjogIlNwYWNlIiwgMzM6ICJQYWdlVXAiLCAzNDogIlBhZ2VEb3duIiwgMzU6ICJFbmQiLAogICAgICAgICAgICAgICAgICAzNjogIkhvbWUiLCAzNzogIkxlZnQiLCAzODogIlVwIiwgMzk6ICJSaWdodCIsIDQwOiAiRG93biIsIDQ0OiAiUHJpbnRTY3JuIiwgNDU6ICJJbnNlcnQiLAogICAgICAgICAgICAgICAgICA0NjogIkRlbGV0ZSIsIDU5OiAiOyIsIDkxOiAiTW9kIiwgOTI6ICJNb2QiLCA5MzogIk1vZCIsIDE4NjogIjsiLCAxODc6ICI9IiwgMTg4OiAiLCIsCiAgICAgICAgICAgICAgICAgIDE4OTogIi0iLCAxOTA6ICIuIiwgMTkxOiAiLyIsIDE5MjogImAiLCAyMTk6ICJbIiwgMjIwOiAiXFwiLCAyMjE6ICJdIiwgMjIyOiAiJyIsIDYzMjc2OiAiUGFnZVVwIiwKICAgICAgICAgICAgICAgICAgNjMyNzc6ICJQYWdlRG93biIsIDYzMjc1OiAiRW5kIiwgNjMyNzM6ICJIb21lIiwgNjMyMzQ6ICJMZWZ0IiwgNjMyMzI6ICJVcCIsIDYzMjM1OiAiUmlnaHQiLAogICAgICAgICAgICAgICAgICA2MzIzMzogIkRvd24iLCA2MzMwMjogIkluc2VydCIsIDYzMjcyOiAiRGVsZXRlIn07CiAgQ29kZU1pcnJvci5rZXlOYW1lcyA9IGtleU5hbWVzOwogIChmdW5jdGlvbigpIHsKICAgIC8vIE51bWJlciBrZXlzCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspIGtleU5hbWVzW2kgKyA0OF0gPSBTdHJpbmcoaSk7CiAgICAvLyBBbHBoYWJldGljIGtleXMKICAgIGZvciAodmFyIGkgPSA2NTsgaSA8PSA5MDsgaSsrKSBrZXlOYW1lc1tpXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoaSk7CiAgICAvLyBGdW5jdGlvbiBrZXlzCiAgICBmb3IgKHZhciBpID0gMTsgaSA8PSAxMjsgaSsrKSBrZXlOYW1lc1tpICsgMTExXSA9IGtleU5hbWVzW2kgKyA2MzIzNV0gPSAiRiIgKyBpOwogIH0pKCk7CgogIHJldHVybiBDb2RlTWlycm9yOwp9KSgpOwo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/util/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/lib/util/dialog.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LkNvZGVNaXJyb3ItZGlhbG9nIHsKICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi5Db2RlTWlycm9yLWRpYWxvZyA+IGRpdiB7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRvcDogMDsgbGVmdDogMDsgcmlnaHQ6IDA7CiAgYmFja2dyb3VuZDogd2hpdGU7CiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlZWU7CiAgei1pbmRleDogMTU7CiAgcGFkZGluZzogLjFlbSAuOGVtOwogIG92ZXJmbG93OiBoaWRkZW47CiAgY29sb3I6ICMzMzM7Cn0KCi5Db2RlTWlycm9yLWRpYWxvZyBpbnB1dCB7CiAgYm9yZGVyOiBub25lOwogIG91dGxpbmU6IG5vbmU7CiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgd2lkdGg6IDIwZW07CiAgY29sb3I6IGluaGVyaXQ7CiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKfQo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/util/dialog.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gT3BlbiBzaW1wbGUgZGlhbG9ncyBvbiB0b3Agb2YgYW4gZWRpdG9yLiBSZWxpZXMgb24gZGlhbG9nLmNzcy4KCihmdW5jdGlvbigpIHsKICBmdW5jdGlvbiBkaWFsb2dEaXYoY20sIHRlbXBsYXRlKSB7CiAgICB2YXIgd3JhcCA9IGNtLmdldFdyYXBwZXJFbGVtZW50KCk7CiAgICB2YXIgZGlhbG9nID0gd3JhcC5pbnNlcnRCZWZvcmUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksIHdyYXAuZmlyc3RDaGlsZCk7CiAgICBkaWFsb2cuY2xhc3NOYW1lID0gIkNvZGVNaXJyb3ItZGlhbG9nIjsKICAgIGRpYWxvZy5pbm5lckhUTUwgPSAnPGRpdj4nICsgdGVtcGxhdGUgKyAnPC9kaXY+JzsKICAgIHJldHVybiBkaWFsb2c7CiAgfQoKICBDb2RlTWlycm9yLmRlZmluZUV4dGVuc2lvbigib3BlbkRpYWxvZyIsIGZ1bmN0aW9uKHRlbXBsYXRlLCBjYWxsYmFjaykgewogICAgdmFyIGRpYWxvZyA9IGRpYWxvZ0Rpdih0aGlzLCB0ZW1wbGF0ZSk7CiAgICB2YXIgY2xvc2VkID0gZmFsc2UsIG1lID0gdGhpczsKICAgIGZ1bmN0aW9uIGNsb3NlKCkgewogICAgICBpZiAoY2xvc2VkKSByZXR1cm47CiAgICAgIGNsb3NlZCA9IHRydWU7CiAgICAgIGRpYWxvZy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGRpYWxvZyk7CiAgICB9CiAgICB2YXIgaW5wID0gZGlhbG9nLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpWzBdOwogICAgaWYgKGlucCkgewogICAgICBDb2RlTWlycm9yLmNvbm5lY3QoaW5wLCAia2V5ZG93biIsIGZ1bmN0aW9uKGUpIHsKICAgICAgICBpZiAoZS5rZXlDb2RlID09IDEzIHx8IGUua2V5Q29kZSA9PSAyNykgewogICAgICAgICAgQ29kZU1pcnJvci5lX3N0b3AoZSk7CiAgICAgICAgICBjbG9zZSgpOwogICAgICAgICAgbWUuZm9jdXMoKTsKICAgICAgICAgIGlmIChlLmtleUNvZGUgPT0gMTMpIGNhbGxiYWNrKGlucC52YWx1ZSk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgaW5wLmZvY3VzKCk7CiAgICAgIENvZGVNaXJyb3IuY29ubmVjdChpbnAsICJibHVyIiwgY2xvc2UpOwogICAgfQogICAgcmV0dXJuIGNsb3NlOwogIH0pOwoKICBDb2RlTWlycm9yLmRlZmluZUV4dGVuc2lvbigib3BlbkNvbmZpcm0iLCBmdW5jdGlvbih0ZW1wbGF0ZSwgY2FsbGJhY2tzKSB7CiAgICB2YXIgZGlhbG9nID0gZGlhbG9nRGl2KHRoaXMsIHRlbXBsYXRlKTsKICAgIHZhciBidXR0b25zID0gZGlhbG9nLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJidXR0b24iKTsKICAgIHZhciBjbG9zZWQgPSBmYWxzZSwgbWUgPSB0aGlzLCBibHVycmluZyA9IDE7CiAgICBmdW5jdGlvbiBjbG9zZSgpIHsKICAgICAgaWYgKGNsb3NlZCkgcmV0dXJuOwogICAgICBjbG9zZWQgPSB0cnVlOwogICAgICBkaWFsb2cucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChkaWFsb2cpOwogICAgICBtZS5mb2N1cygpOwogICAgfQogICAgYnV0dG9uc1swXS5mb2N1cygpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidXR0b25zLmxlbmd0aDsgKytpKSB7CiAgICAgIHZhciBiID0gYnV0dG9uc1tpXTsKICAgICAgKGZ1bmN0aW9uKGNhbGxiYWNrKSB7CiAgICAgICAgQ29kZU1pcnJvci5jb25uZWN0KGIsICJjbGljayIsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgIENvZGVNaXJyb3IuZV9wcmV2ZW50RGVmYXVsdChlKTsKICAgICAgICAgIGNsb3NlKCk7CiAgICAgICAgICBpZiAoY2FsbGJhY2spIGNhbGxiYWNrKG1lKTsKICAgICAgICB9KTsKICAgICAgfSkoY2FsbGJhY2tzW2ldKTsKICAgICAgQ29kZU1pcnJvci5jb25uZWN0KGIsICJibHVyIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgLS1ibHVycmluZzsKICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBpZiAoYmx1cnJpbmcgPD0gMCkgY2xvc2UoKTsgfSwgMjAwKTsKICAgICAgfSk7CiAgICAgIENvZGVNaXJyb3IuY29ubmVjdChiLCAiZm9jdXMiLCBmdW5jdGlvbigpIHsgKytibHVycmluZzsgfSk7CiAgICB9CiAgfSk7Cn0pKCk7]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/util/foldcode.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gdGhlIHRhZ1JhbmdlRmluZGVyIGZ1bmN0aW9uIGlzCi8vICAgQ29weXJpZ2h0IChDKSAyMDExIGJ5IERhbmllbCBHbGF6bWFuIDxkYW5pZWxAZ2xhem1hbi5vcmc+Ci8vIHJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoLi4vLi4vTElDRU5TRSkgbGlrZSB0aGUgcmVzdCBvZiBDb2RlTWlycm9yCkNvZGVNaXJyb3IudGFnUmFuZ2VGaW5kZXIgPSBmdW5jdGlvbihjbSwgbGluZSkgewogIHZhciBuYW1lU3RhcnRDaGFyID0gIkEtWl9hLXpcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAyRkZcXHUwMzcwLVxcdTAzN0RcXHUwMzdGLVxcdTFGRkZcXHUyMDBDLVxcdTIwMERcXHUyMDcwLVxcdTIxOEZcXHUyQzAwLVxcdTJGRUZcXHUzMDAxLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRkQiOwogIHZhciBuYW1lQ2hhciA9IG5hbWVTdGFydENoYXIgKyAiXC1cLjAtOVxcdTAwQjdcXHUwMzAwLVxcdTAzNkZcXHUyMDNGLVxcdTIwNDAiOwogIHZhciB4bWxOQU1FUmVnRXhwID0gbmV3IFJlZ0V4cCgiXlsiICsgbmFtZVN0YXJ0Q2hhciArICJdWyIgKyBuYW1lQ2hhciArICJdKiIpOwoKICB2YXIgbGluZVRleHQgPSBjbS5nZXRMaW5lKGxpbmUpOwogIHZhciBmb3VuZCA9IGZhbHNlOwogIHZhciB0YWcgPSBudWxsOwogIHZhciBwb3MgPSAwOwogIHdoaWxlICghZm91bmQpIHsKICAgIHBvcyA9IGxpbmVUZXh0LmluZGV4T2YoIjwiLCBwb3MpOwogICAgaWYgKC0xID09IHBvcykgLy8gbm8gdGFnIG9uIGxpbmUKICAgICAgcmV0dXJuOwogICAgaWYgKHBvcyArIDEgPCBsaW5lVGV4dC5sZW5ndGggJiYgbGluZVRleHRbcG9zICsgMV0gPT0gIi8iKSB7IC8vIGNsb3NpbmcgdGFnCiAgICAgIHBvcysrOwogICAgICBjb250aW51ZTsKICAgIH0KICAgIC8vIG9rIHdlIHdlZW0gdG8gaGF2ZSBhIHN0YXJ0IHRhZwogICAgaWYgKCFsaW5lVGV4dC5zdWJzdHIocG9zICsgMSkubWF0Y2goeG1sTkFNRVJlZ0V4cCkpIHsgLy8gbm90IGEgdGFnIG5hbWUuLi4KICAgICAgcG9zKys7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgdmFyIGd0UG9zID0gbGluZVRleHQuaW5kZXhPZigiPiIsIHBvcyArIDEpOwogICAgaWYgKC0xID09IGd0UG9zKSB7IC8vIGVuZCBvZiBzdGFydCB0YWcgbm90IGluIGxpbmUKICAgICAgdmFyIGwgPSBsaW5lICsgMTsKICAgICAgdmFyIGZvdW5kR3QgPSBmYWxzZTsKICAgICAgdmFyIGxhc3RMaW5lID0gY20ubGluZUNvdW50KCk7CiAgICAgIHdoaWxlIChsIDwgbGFzdExpbmUgJiYgIWZvdW5kR3QpIHsKICAgICAgICB2YXIgbHQgPSBjbS5nZXRMaW5lKGwpOwogICAgICAgIHZhciBndCA9IGx0LmluZGV4T2YoIj4iKTsKICAgICAgICBpZiAoLTEgIT0gZ3QpIHsgLy8gZm91bmQgYSA+CiAgICAgICAgICBmb3VuZEd0ID0gdHJ1ZTsKICAgICAgICAgIHZhciBzbGFzaCA9IGx0Lmxhc3RJbmRleE9mKCIvIiwgZ3QpOwogICAgICAgICAgaWYgKC0xICE9IHNsYXNoICYmIHNsYXNoIDwgZ3QpIHsKICAgICAgICAgICAgdmFyIHN0ciA9IGxpbmVUZXh0LnN1YnN0cihzbGFzaCwgZ3QgLSBzbGFzaCArIDEpOwogICAgICAgICAgICBpZiAoIXN0ci5tYXRjaCggL1wvXHMqXD4vICkpIC8vIHllcCwgdGhhdCdzIHRoZSBlbmQgb2YgZW1wdHkgdGFnCiAgICAgICAgICAgICAgcmV0dXJuIGwrMTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgbCsrOwogICAgICB9CiAgICAgIGZvdW5kID0gdHJ1ZTsKICAgIH0KICAgIGVsc2UgewogICAgICB2YXIgc2xhc2hQb3MgPSBsaW5lVGV4dC5sYXN0SW5kZXhPZigiLyIsIGd0UG9zKTsKICAgICAgaWYgKC0xID09IHNsYXNoUG9zKSB7IC8vIGNhbm5vdCBiZSBlbXB0eSB0YWcKICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgLy8gZG9uJ3QgY29udGludWUKICAgICAgfQogICAgICBlbHNlIHsgLy8gZW1wdHkgdGFnPwogICAgICAgIC8vIGNoZWNrIGlmIHJlYWxseSBlbXB0eSB0YWcKICAgICAgICB2YXIgc3RyID0gbGluZVRleHQuc3Vic3RyKHNsYXNoUG9zLCBndFBvcyAtIHNsYXNoUG9zICsgMSk7CiAgICAgICAgaWYgKCFzdHIubWF0Y2goIC9cL1xzKlw+LyApKSB7IC8vIGZpbmFsbHkgbm90IGVtcHR5CiAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAvLyBkb24ndCBjb250aW51ZQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgaWYgKGZvdW5kKSB7CiAgICAgIHZhciBzdWJMaW5lID0gbGluZVRleHQuc3Vic3RyKHBvcyArIDEpOwogICAgICB0YWcgPSBzdWJMaW5lLm1hdGNoKHhtbE5BTUVSZWdFeHApOwogICAgICBpZiAodGFnKSB7CiAgICAgICAgLy8gd2UgaGF2ZSBhbiBlbGVtZW50IG5hbWUsIHdvb29ob29vICEKICAgICAgICB0YWcgPSB0YWdbMF07CiAgICAgICAgLy8gZG8gd2UgaGF2ZSB0aGUgY2xvc2UgdGFnIG9uIHNhbWUgbGluZSA/Pz8KICAgICAgICBpZiAoLTEgIT0gbGluZVRleHQuaW5kZXhPZigiPC8iICsgdGFnICsgIj4iLCBwb3MpKSAvLyB5ZXAKICAgICAgICB7CiAgICAgICAgICBmb3VuZCA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICAvLyB3ZSBkb24ndCwgc28gd2UgaGF2ZSBhIGNhbmRpZGF0ZS4uLgogICAgICB9CiAgICAgIGVsc2UKICAgICAgICBmb3VuZCA9IGZhbHNlOwogICAgfQogICAgaWYgKCFmb3VuZCkKICAgICAgcG9zKys7CiAgfQoKICBpZiAoZm91bmQpIHsKICAgIHZhciBzdGFydFRhZyA9ICIoXFw8XFwvIiArIHRhZyArICJcXD4pfChcXDwiICsgdGFnICsgIlxcPil8KFxcPCIgKyB0YWcgKyAiXHMpfChcXDwiICsgdGFnICsgIiQpIjsKICAgIHZhciBzdGFydFRhZ1JlZ0V4cCA9IG5ldyBSZWdFeHAoc3RhcnRUYWcsICJnIik7CiAgICB2YXIgZW5kVGFnID0gIjwvIiArIHRhZyArICI+IjsKICAgIHZhciBkZXB0aCA9IDE7CiAgICB2YXIgbCA9IGxpbmUgKyAxOwogICAgdmFyIGxhc3RMaW5lID0gY20ubGluZUNvdW50KCk7CiAgICB3aGlsZSAobCA8IGxhc3RMaW5lKSB7CiAgICAgIGxpbmVUZXh0ID0gY20uZ2V0TGluZShsKTsKICAgICAgdmFyIG1hdGNoID0gbGluZVRleHQubWF0Y2goc3RhcnRUYWdSZWdFeHApOwogICAgICBpZiAobWF0Y2gpIHsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hdGNoLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBpZiAobWF0Y2hbaV0gPT0gZW5kVGFnKQogICAgICAgICAgICBkZXB0aC0tOwogICAgICAgICAgZWxzZQogICAgICAgICAgICBkZXB0aCsrOwogICAgICAgICAgaWYgKCFkZXB0aCkKICAgICAgICAgICAgcmV0dXJuIGwrMTsKICAgICAgICB9CiAgICAgIH0KICAgICAgbCsrOwogICAgfQogICAgcmV0dXJuOwogIH0KfTsKCkNvZGVNaXJyb3IuYnJhY2VSYW5nZUZpbmRlciA9IGZ1bmN0aW9uKGNtLCBsaW5lKSB7CiAgdmFyIGxpbmVUZXh0ID0gY20uZ2V0TGluZShsaW5lKTsKICB2YXIgc3RhcnRDaGFyID0gbGluZVRleHQubGFzdEluZGV4T2YoInsiKTsKICBpZiAoc3RhcnRDaGFyIDwgMCB8fCBsaW5lVGV4dC5sYXN0SW5kZXhPZigifSIpID4gc3RhcnRDaGFyKSByZXR1cm47CiAgdmFyIHRva2VuVHlwZSA9IGNtLmdldFRva2VuQXQoe2xpbmU6IGxpbmUsIGNoOiBzdGFydENoYXJ9KS5jbGFzc05hbWU7CiAgdmFyIGNvdW50ID0gMSwgbGFzdExpbmUgPSBjbS5saW5lQ291bnQoKSwgZW5kOwogIG91dGVyOiBmb3IgKHZhciBpID0gbGluZSArIDE7IGkgPCBsYXN0TGluZTsgKytpKSB7CiAgICB2YXIgdGV4dCA9IGNtLmdldExpbmUoaSksIHBvcyA9IDA7CiAgICBmb3IgKDs7KSB7CiAgICAgIHZhciBuZXh0T3BlbiA9IHRleHQuaW5kZXhPZigieyIsIHBvcyksIG5leHRDbG9zZSA9IHRleHQuaW5kZXhPZigifSIsIHBvcyk7CiAgICAgIGlmIChuZXh0T3BlbiA8IDApIG5leHRPcGVuID0gdGV4dC5sZW5ndGg7CiAgICAgIGlmIChuZXh0Q2xvc2UgPCAwKSBuZXh0Q2xvc2UgPSB0ZXh0Lmxlbmd0aDsKICAgICAgcG9zID0gTWF0aC5taW4obmV4dE9wZW4sIG5leHRDbG9zZSk7CiAgICAgIGlmIChwb3MgPT0gdGV4dC5sZW5ndGgpIGJyZWFrOwogICAgICBpZiAoY20uZ2V0VG9rZW5BdCh7bGluZTogaSwgY2g6IHBvcyArIDF9KS5jbGFzc05hbWUgPT0gdG9rZW5UeXBlKSB7CiAgICAgICAgaWYgKHBvcyA9PSBuZXh0T3BlbikgKytjb3VudDsKICAgICAgICBlbHNlIGlmICghLS1jb3VudCkgeyBlbmQgPSBpOyBicmVhayBvdXRlcjsgfQogICAgICB9CiAgICAgICsrcG9zOwogICAgfQogIH0KICBpZiAoZW5kID09IG51bGwgfHwgZW5kID09IGxpbmUgKyAxKSByZXR1cm47CiAgcmV0dXJuIGVuZDsKfTsKCgpDb2RlTWlycm9yLm5ld0ZvbGRGdW5jdGlvbiA9IGZ1bmN0aW9uKHJhbmdlRmluZGVyLCBtYXJrVGV4dCkgewogIHZhciBmb2xkZWQgPSBbXTsKICBpZiAobWFya1RleHQgPT0gbnVsbCkgbWFya1RleHQgPSAnPGRpdiBzdHlsZT0icG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAycHg7IGNvbG9yOiM2MDAiPiYjeDI1YmM7PC9kaXY+JU4lJzsKCiAgZnVuY3Rpb24gaXNGb2xkZWQoY20sIG4pIHsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZm9sZGVkLmxlbmd0aDsgKytpKSB7CiAgICAgIHZhciBzdGFydCA9IGNtLmxpbmVJbmZvKGZvbGRlZFtpXS5zdGFydCk7CiAgICAgIGlmICghc3RhcnQpIGZvbGRlZC5zcGxpY2UoaS0tLCAxKTsKICAgICAgZWxzZSBpZiAoc3RhcnQubGluZSA9PSBuKSByZXR1cm4ge3BvczogaSwgcmVnaW9uOiBmb2xkZWRbaV19OwogICAgfQogIH0KCiAgZnVuY3Rpb24gZXhwYW5kKGNtLCByZWdpb24pIHsKICAgIGNtLmNsZWFyTWFya2VyKHJlZ2lvbi5zdGFydCk7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlZ2lvbi5oaWRkZW4ubGVuZ3RoOyArK2kpCiAgICAgIGNtLnNob3dMaW5lKHJlZ2lvbi5oaWRkZW5baV0pOwogIH0KCiAgcmV0dXJuIGZ1bmN0aW9uKGNtLCBsaW5lKSB7CiAgICBjbS5vcGVyYXRpb24oZnVuY3Rpb24oKSB7CiAgICAgIHZhciBrbm93biA9IGlzRm9sZGVkKGNtLCBsaW5lKTsKICAgICAgaWYgKGtub3duKSB7CiAgICAgICAgZm9sZGVkLnNwbGljZShrbm93bi5wb3MsIDEpOwogICAgICAgIGV4cGFuZChjbSwga25vd24ucmVnaW9uKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB2YXIgZW5kID0gcmFuZ2VGaW5kZXIoY20sIGxpbmUpOwogICAgICAgIGlmIChlbmQgPT0gbnVsbCkgcmV0dXJuOwogICAgICAgIHZhciBoaWRkZW4gPSBbXTsKICAgICAgICBmb3IgKHZhciBpID0gbGluZSArIDE7IGkgPCBlbmQ7ICsraSkgewogICAgICAgICAgdmFyIGhhbmRsZSA9IGNtLmhpZGVMaW5lKGkpOwogICAgICAgICAgaWYgKGhhbmRsZSkgaGlkZGVuLnB1c2goaGFuZGxlKTsKICAgICAgICB9CiAgICAgICAgdmFyIGZpcnN0ID0gY20uc2V0TWFya2VyKGxpbmUsIG1hcmtUZXh0KTsKICAgICAgICB2YXIgcmVnaW9uID0ge3N0YXJ0OiBmaXJzdCwgaGlkZGVuOiBoaWRkZW59OwogICAgICAgIGNtLm9uRGVsZXRlTGluZShmaXJzdCwgZnVuY3Rpb24oKSB7IGV4cGFuZChjbSwgcmVnaW9uKTsgfSk7CiAgICAgICAgZm9sZGVkLnB1c2gocmVnaW9uKTsKICAgICAgfQogICAgfSk7CiAgfTsKfTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/util/formatting.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[77u/Ly8gPT09PT09PT09PT09PT0gRm9ybWF0dGluZyBleHRlbnNpb25zID09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLy8gQSBjb21tb24gc3RvcmFnZSBmb3IgYWxsIG1vZGUtc3BlY2lmaWMgZm9ybWF0dGluZyBmZWF0dXJlcwppZiAoIUNvZGVNaXJyb3IubW9kZUV4dGVuc2lvbnMpIENvZGVNaXJyb3IubW9kZUV4dGVuc2lvbnMgPSB7fTsKCi8vIFJldHVybnMgdGhlIGV4dGVuc2lvbiBvZiB0aGUgZWRpdG9yJ3MgY3VycmVudCBtb2RlCkNvZGVNaXJyb3IuZGVmaW5lRXh0ZW5zaW9uKCJnZXRNb2RlRXh0IiwgZnVuY3Rpb24gKCkgewogIHJldHVybiBDb2RlTWlycm9yLm1vZGVFeHRlbnNpb25zW3RoaXMuZ2V0T3B0aW9uKCJtb2RlIildOwp9KTsKCi8vIElmIHRoZSBjdXJyZW50IG1vZGUgaXMgJ2h0bWxtaXhlZCcsIHJldHVybnMgdGhlIGV4dGVuc2lvbiBvZiBhIG1vZGUgbG9jYXRlZCBhdAovLyB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uIChjYW4gYmUgaHRtbG1peGVkLCBjc3Mgb3IgamF2YXNjcmlwdCkuIE90aGVyd2lzZSwgc2ltcGx5Ci8vIHJldHVybnMgdGhlIGV4dGVuc2lvbiBvZiB0aGUgZWRpdG9yJ3MgY3VycmVudCBtb2RlLgpDb2RlTWlycm9yLmRlZmluZUV4dGVuc2lvbigiZ2V0TW9kZUV4dEF0UG9zIiwgZnVuY3Rpb24gKHBvcykgewogIHZhciB0b2tlbiA9IHRoaXMuZ2V0VG9rZW5BdChwb3MpOwogIGlmICh0b2tlbiAmJiB0b2tlbi5zdGF0ZSAmJiB0b2tlbi5zdGF0ZS5tb2RlKQogICAgcmV0dXJuIENvZGVNaXJyb3IubW9kZUV4dGVuc2lvbnNbdG9rZW4uc3RhdGUubW9kZSA9PSAiaHRtbCIgPyAiaHRtbG1peGVkIiA6IHRva2VuLnN0YXRlLm1vZGVdOwogIGVsc2UKICAgIHJldHVybiB0aGlzLmdldE1vZGVFeHQoKTsKfSk7CgovLyBDb21tZW50L3VuY29tbWVudCB0aGUgc3BlY2lmaWVkIHJhbmdlCkNvZGVNaXJyb3IuZGVmaW5lRXh0ZW5zaW9uKCJjb21tZW50UmFuZ2UiLCBmdW5jdGlvbiAoaXNDb21tZW50LCBmcm9tLCB0bykgewogIHZhciBjdXJNb2RlID0gdGhpcy5nZXRNb2RlRXh0QXRQb3ModGhpcy5nZXRDdXJzb3IoKSk7CiAgaWYgKGlzQ29tbWVudCkgeyAvLyBDb21tZW50IHJhbmdlCiAgICB2YXIgY29tbWVudGVkVGV4dCA9IHRoaXMuZ2V0UmFuZ2UoZnJvbSwgdG8pOwogICAgdGhpcy5yZXBsYWNlUmFuZ2UoY3VyTW9kZS5jb21tZW50U3RhcnQgKyB0aGlzLmdldFJhbmdlKGZyb20sIHRvKSArIGN1ck1vZGUuY29tbWVudEVuZAogICAgICAsIGZyb20sIHRvKTsKICAgIGlmIChmcm9tLmxpbmUgPT0gdG8ubGluZSAmJiBmcm9tLmNoID09IHRvLmNoKSB7IC8vIEFuIGVtcHR5IGNvbW1lbnQgaW5zZXJ0ZWQgLSBwdXQgY3Vyc29yIGluc2lkZQogICAgICB0aGlzLnNldEN1cnNvcihmcm9tLmxpbmUsIGZyb20uY2ggKyBjdXJNb2RlLmNvbW1lbnRTdGFydC5sZW5ndGgpOwogICAgfQogIH0KICBlbHNlIHsgLy8gVW5jb21tZW50IHJhbmdlCiAgICB2YXIgc2VsVGV4dCA9IHRoaXMuZ2V0UmFuZ2UoZnJvbSwgdG8pOwogICAgdmFyIHN0YXJ0SW5kZXggPSBzZWxUZXh0LmluZGV4T2YoY3VyTW9kZS5jb21tZW50U3RhcnQpOwogICAgdmFyIGVuZEluZGV4ID0gc2VsVGV4dC5sYXN0SW5kZXhPZihjdXJNb2RlLmNvbW1lbnRFbmQpOwogICAgaWYgKHN0YXJ0SW5kZXggPiAtMSAmJiBlbmRJbmRleCA+IC0xICYmIGVuZEluZGV4ID4gc3RhcnRJbmRleCkgewogICAgICAvLyBUYWtlIHN0cmluZyB0aWxsIGNvbW1lbnQgc3RhcnQKICAgICAgc2VsVGV4dCA9IHNlbFRleHQuc3Vic3RyKDAsIHN0YXJ0SW5kZXgpCiAgICAgIC8vIEZyb20gY29tbWVudCBzdGFydCB0aWxsIGNvbW1lbnQgZW5kCiAgICAgICAgKyBzZWxUZXh0LnN1YnN0cmluZyhzdGFydEluZGV4ICsgY3VyTW9kZS5jb21tZW50U3RhcnQubGVuZ3RoLCBlbmRJbmRleCkKICAgICAgLy8gRnJvbSBjb21tZW50IGVuZCB0aWxsIHN0cmluZyBlbmQKICAgICAgICArIHNlbFRleHQuc3Vic3RyKGVuZEluZGV4ICsgY3VyTW9kZS5jb21tZW50RW5kLmxlbmd0aCk7CiAgICB9CiAgICB0aGlzLnJlcGxhY2VSYW5nZShzZWxUZXh0LCBmcm9tLCB0byk7CiAgfQp9KTsKCi8vIEFwcGxpZXMgYXV0b21hdGljIG1vZGUtYXdhcmUgaW5kZW50YXRpb24gdG8gdGhlIHNwZWNpZmllZCByYW5nZQpDb2RlTWlycm9yLmRlZmluZUV4dGVuc2lvbigiYXV0b0luZGVudFJhbmdlIiwgZnVuY3Rpb24gKGZyb20sIHRvKSB7CiAgdmFyIGNtSW5zdGFuY2UgPSB0aGlzOwogIHRoaXMub3BlcmF0aW9uKGZ1bmN0aW9uICgpIHsKICAgIGZvciAodmFyIGkgPSBmcm9tLmxpbmU7IGkgPD0gdG8ubGluZTsgaSsrKSB7CiAgICAgIGNtSW5zdGFuY2UuaW5kZW50TGluZShpLCAic21hcnQiKTsKICAgIH0KICB9KTsKfSk7CgovLyBBcHBsaWVzIGF1dG9tYXRpYyBmb3JtYXR0aW5nIHRvIHRoZSBzcGVjaWZpZWQgcmFuZ2UKQ29kZU1pcnJvci5kZWZpbmVFeHRlbnNpb24oImF1dG9Gb3JtYXRSYW5nZSIsIGZ1bmN0aW9uIChmcm9tLCB0bykgewogIHZhciBhYnNTdGFydCA9IHRoaXMuaW5kZXhGcm9tUG9zKGZyb20pOwogIHZhciBhYnNFbmQgPSB0aGlzLmluZGV4RnJvbVBvcyh0byk7CiAgLy8gSW5zZXJ0IGFkZGl0aW9uYWwgbGluZSBicmVha3Mgd2hlcmUgbmVjZXNzYXJ5IGFjY29yZGluZyB0byB0aGUKICAvLyBtb2RlJ3Mgc3ludGF4CiAgdmFyIHJlcyA9IHRoaXMuZ2V0TW9kZUV4dCgpLmF1dG9Gb3JtYXRMaW5lQnJlYWtzKHRoaXMuZ2V0VmFsdWUoKSwgYWJzU3RhcnQsIGFic0VuZCk7CiAgdmFyIGNtSW5zdGFuY2UgPSB0aGlzOwoKICAvLyBSZXBsYWNlIGFuZCBhdXRvLWluZGVudCB0aGUgcmFuZ2UKICB0aGlzLm9wZXJhdGlvbihmdW5jdGlvbiAoKSB7CiAgICBjbUluc3RhbmNlLnJlcGxhY2VSYW5nZShyZXMsIGZyb20sIHRvKTsKICAgIHZhciBzdGFydExpbmUgPSBjbUluc3RhbmNlLnBvc0Zyb21JbmRleChhYnNTdGFydCkubGluZTsKICAgIHZhciBlbmRMaW5lID0gY21JbnN0YW5jZS5wb3NGcm9tSW5kZXgoYWJzU3RhcnQgKyByZXMubGVuZ3RoKS5saW5lOwogICAgZm9yICh2YXIgaSA9IHN0YXJ0TGluZTsgaSA8PSBlbmRMaW5lOyBpKyspIHsKICAgICAgY21JbnN0YW5jZS5pbmRlbnRMaW5lKGksICJzbWFydCIpOwogICAgfQogIH0pOwp9KTsKCi8vIERlZmluZSBleHRlbnNpb25zIGZvciBhIGZldyBtb2RlcwoKQ29kZU1pcnJvci5tb2RlRXh0ZW5zaW9uc1siY3NzIl0gPSB7CiAgY29tbWVudFN0YXJ0OiAiLyoiLAogIGNvbW1lbnRFbmQ6ICIqLyIsCiAgd29yZFdyYXBDaGFyczogWyI7IiwgIlxceyIsICJcXH0iXSwKICBhdXRvRm9ybWF0TGluZUJyZWFrczogZnVuY3Rpb24gKHRleHQpIHsKICAgIHJldHVybiB0ZXh0LnJlcGxhY2UobmV3IFJlZ0V4cCgiKDt8XFx7fFxcfSkoW15cclxuXSkiLCAiZyIpLCAiJDFcbiQyIik7CiAgfQp9OwoKQ29kZU1pcnJvci5tb2RlRXh0ZW5zaW9uc1siamF2YXNjcmlwdCJdID0gewogIGNvbW1lbnRTdGFydDogIi8qIiwKICBjb21tZW50RW5kOiAiKi8iLAogIHdvcmRXcmFwQ2hhcnM6IFsiOyIsICJcXHsiLCAiXFx9Il0sCgogIGdldE5vbkJyZWFrYWJsZUJsb2NrczogZnVuY3Rpb24gKHRleHQpIHsKICAgIHZhciBub25CcmVha2FibGVSZWdleGVzID0gWwogICAgICAgIG5ldyBSZWdFeHAoImZvclxccyo/XFwoKFtcXHNcXFNdKj8pXFwpIiksCiAgICAgICAgbmV3IFJlZ0V4cCgiJyhbXFxzXFxTXSo/KSgnfCQpIiksCiAgICAgICAgbmV3IFJlZ0V4cCgiXCIoW1xcc1xcU10qPykoXCJ8JCkiKSwKICAgICAgICBuZXcgUmVnRXhwKCIvLy4qKFtcclxuXXwkKSIpCiAgICAgIF07CiAgICB2YXIgbm9uQnJlYWthYmxlQmxvY2tzID0gbmV3IEFycmF5KCk7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vbkJyZWFrYWJsZVJlZ2V4ZXMubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGN1clBvcyA9IDA7CiAgICAgIHdoaWxlIChjdXJQb3MgPCB0ZXh0Lmxlbmd0aCkgewogICAgICAgIHZhciBtID0gdGV4dC5zdWJzdHIoY3VyUG9zKS5tYXRjaChub25CcmVha2FibGVSZWdleGVzW2ldKTsKICAgICAgICBpZiAobSAhPSBudWxsKSB7CiAgICAgICAgICBub25CcmVha2FibGVCbG9ja3MucHVzaCh7CiAgICAgICAgICAgIHN0YXJ0OiBjdXJQb3MgKyBtLmluZGV4LAogICAgICAgICAgICBlbmQ6IGN1clBvcyArIG0uaW5kZXggKyBtWzBdLmxlbmd0aAogICAgICAgICAgfSk7CiAgICAgICAgICBjdXJQb3MgKz0gbS5pbmRleCArIE1hdGgubWF4KDEsIG1bMF0ubGVuZ3RoKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7IC8vIE5vIG1vcmUgbWF0Y2hlcwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBub25CcmVha2FibGVCbG9ja3Muc29ydChmdW5jdGlvbiAoYSwgYikgewogICAgICByZXR1cm4gYS5zdGFydCAtIGIuc3RhcnQ7CiAgICB9KTsKCiAgICByZXR1cm4gbm9uQnJlYWthYmxlQmxvY2tzOwogIH0sCgogIGF1dG9Gb3JtYXRMaW5lQnJlYWtzOiBmdW5jdGlvbiAodGV4dCkgewogICAgdmFyIGN1clBvcyA9IDA7CiAgICB2YXIgcmVMaW5lc1NwbGl0dGVyID0gbmV3IFJlZ0V4cCgiKDt8XFx7fFxcfSkoW15cclxuXSkiLCAiZyIpOwogICAgdmFyIG5vbkJyZWFrYWJsZUJsb2NrcyA9IHRoaXMuZ2V0Tm9uQnJlYWthYmxlQmxvY2tzKHRleHQpOwogICAgaWYgKG5vbkJyZWFrYWJsZUJsb2NrcyAhPSBudWxsKSB7CiAgICAgIHZhciByZXMgPSAiIjsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub25CcmVha2FibGVCbG9ja3MubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAobm9uQnJlYWthYmxlQmxvY2tzW2ldLnN0YXJ0ID4gY3VyUG9zKSB7IC8vIEJyZWFrIGxpbmVzIHRpbGwgdGhlIGJsb2NrCiAgICAgICAgICByZXMgKz0gdGV4dC5zdWJzdHJpbmcoY3VyUG9zLCBub25CcmVha2FibGVCbG9ja3NbaV0uc3RhcnQpLnJlcGxhY2UocmVMaW5lc1NwbGl0dGVyLCAiJDFcbiQyIik7CiAgICAgICAgICBjdXJQb3MgPSBub25CcmVha2FibGVCbG9ja3NbaV0uc3RhcnQ7CiAgICAgICAgfQogICAgICAgIGlmIChub25CcmVha2FibGVCbG9ja3NbaV0uc3RhcnQgPD0gY3VyUG9zCiAgICAgICAgICAmJiBub25CcmVha2FibGVCbG9ja3NbaV0uZW5kID49IGN1clBvcykgeyAvLyBTa2lwIG5vbi1icmVha2FibGUgYmxvY2sKICAgICAgICAgIHJlcyArPSB0ZXh0LnN1YnN0cmluZyhjdXJQb3MsIG5vbkJyZWFrYWJsZUJsb2Nrc1tpXS5lbmQpOwogICAgICAgICAgY3VyUG9zID0gbm9uQnJlYWthYmxlQmxvY2tzW2ldLmVuZDsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGN1clBvcyA8IHRleHQubGVuZ3RoIC0gMSkgewogICAgICAgIHJlcyArPSB0ZXh0LnN1YnN0cihjdXJQb3MpLnJlcGxhY2UocmVMaW5lc1NwbGl0dGVyLCAiJDFcbiQyIik7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlczsKICAgIH0KICAgIGVsc2UgewogICAgICByZXR1cm4gdGV4dC5yZXBsYWNlKHJlTGluZXNTcGxpdHRlciwgIiQxXG4kMiIpOwogICAgfQogIH0KfTsKCkNvZGVNaXJyb3IubW9kZUV4dGVuc2lvbnNbInhtbCJdID0gewogIGNvbW1lbnRTdGFydDogIjwhLS0iLAogIGNvbW1lbnRFbmQ6ICItLT4iLAogIHdvcmRXcmFwQ2hhcnM6IFsiPiJdLAoKICBhdXRvRm9ybWF0TGluZUJyZWFrczogZnVuY3Rpb24gKHRleHQpIHsKICAgIHZhciBsaW5lcyA9IHRleHQuc3BsaXQoIlxuIik7CiAgICB2YXIgcmVQcm9jZXNzZWRQb3J0aW9uID0gbmV3IFJlZ0V4cCgiKF5cXHMqPzx8XltePF0qPykoLispKD5cXHMqPyR8W14+XSo/JCkiKTsKICAgIHZhciByZU9wZW5CcmFja2V0cyA9IG5ldyBSZWdFeHAoIjwiLCAiZyIpOwogICAgdmFyIHJlQ2xvc2VCcmFja2V0cyA9IG5ldyBSZWdFeHAoIig+KShbXlxyXG5dKSIsICJnIik7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBtVG9Qcm9jZXNzID0gbGluZXNbaV0ubWF0Y2gocmVQcm9jZXNzZWRQb3J0aW9uKTsKICAgICAgaWYgKG1Ub1Byb2Nlc3MgIT0gbnVsbCAmJiBtVG9Qcm9jZXNzLmxlbmd0aCA+IDMpIHsgLy8gVGhlIGxpbmUgc3RhcnRzIHdpdGggd2hpdGVzcGFjZXMgYW5kIGVuZHMgd2l0aCB3aGl0ZXNwYWNlcwogICAgICAgIGxpbmVzW2ldID0gbVRvUHJvY2Vzc1sxXQogICAgICAgICAgICArIG1Ub1Byb2Nlc3NbMl0ucmVwbGFjZShyZU9wZW5CcmFja2V0cywgIlxuJCYiKS5yZXBsYWNlKHJlQ2xvc2VCcmFja2V0cywgIiQxXG4kMiIpCiAgICAgICAgICAgICsgbVRvUHJvY2Vzc1szXTsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBsaW5lcy5qb2luKCJcbiIpOwogIH0KfTsKCkNvZGVNaXJyb3IubW9kZUV4dGVuc2lvbnNbImh0bWxtaXhlZCJdID0gewogIGNvbW1lbnRTdGFydDogIjwhLS0iLAogIGNvbW1lbnRFbmQ6ICItLT4iLAogIHdvcmRXcmFwQ2hhcnM6IFsiPiIsICI7IiwgIlxceyIsICJcXH0iXSwKCiAgZ2V0TW9kZUluZm9zOiBmdW5jdGlvbiAodGV4dCwgYWJzUG9zKSB7CiAgICB2YXIgbW9kZUluZm9zID0gbmV3IEFycmF5KCk7CiAgICBtb2RlSW5mb3NbMF0gPQogICAgICB7CiAgICAgICAgcG9zOiAwLAogICAgICAgIG1vZGVFeHQ6IENvZGVNaXJyb3IubW9kZUV4dGVuc2lvbnNbInhtbCJdLAogICAgICAgIG1vZGVOYW1lOiAieG1sIgogICAgICB9OwoKICAgIHZhciBtb2RlTWF0Y2hlcnMgPSBuZXcgQXJyYXkoKTsKICAgIG1vZGVNYXRjaGVyc1swXSA9CiAgICAgIHsKICAgICAgICByZWdleDogbmV3IFJlZ0V4cCgiPHN0eWxlW14+XSo+KFtcXHNcXFNdKj8pKDwvc3R5bGVbXj5dKj58JCkiLCAiaSIpLAogICAgICAgIG1vZGVFeHQ6IENvZGVNaXJyb3IubW9kZUV4dGVuc2lvbnNbImNzcyJdLAogICAgICAgIG1vZGVOYW1lOiAiY3NzIgogICAgICB9OwogICAgbW9kZU1hdGNoZXJzWzFdID0KICAgICAgewogICAgICAgIHJlZ2V4OiBuZXcgUmVnRXhwKCI8c2NyaXB0W14+XSo+KFtcXHNcXFNdKj8pKDwvc2NyaXB0W14+XSo+fCQpIiwgImkiKSwKICAgICAgICBtb2RlRXh0OiBDb2RlTWlycm9yLm1vZGVFeHRlbnNpb25zWyJqYXZhc2NyaXB0Il0sCiAgICAgICAgbW9kZU5hbWU6ICJqYXZhc2NyaXB0IgogICAgICB9OwoKICAgIHZhciBsYXN0Q2hhclBvcyA9ICh0eXBlb2YgKGFic1BvcykgIT09ICJ1bmRlZmluZWQiID8gYWJzUG9zIDogdGV4dC5sZW5ndGggLSAxKTsKICAgIC8vIERldGVjdCBtb2RlcyBmb3IgdGhlIGVudGlyZSB0ZXh0CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1vZGVNYXRjaGVycy5sZW5ndGg7IGkrKykgewogICAgICB2YXIgY3VyUG9zID0gMDsKICAgICAgd2hpbGUgKGN1clBvcyA8PSBsYXN0Q2hhclBvcykgewogICAgICAgIHZhciBtID0gdGV4dC5zdWJzdHIoY3VyUG9zKS5tYXRjaChtb2RlTWF0Y2hlcnNbaV0ucmVnZXgpOwogICAgICAgIGlmIChtICE9IG51bGwpIHsKICAgICAgICAgIGlmIChtLmxlbmd0aCA+IDEgJiYgbVsxXS5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIC8vIFB1c2ggYmxvY2sgYmVnaW4gcG9zCiAgICAgICAgICAgIHZhciBibG9ja0JlZ2luID0gY3VyUG9zICsgbS5pbmRleCArIG1bMF0uaW5kZXhPZihtWzFdKTsKICAgICAgICAgICAgbW9kZUluZm9zLnB1c2goCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcG9zOiBibG9ja0JlZ2luLAogICAgICAgICAgICAgICAgbW9kZUV4dDogbW9kZU1hdGNoZXJzW2ldLm1vZGVFeHQsCiAgICAgICAgICAgICAgICBtb2RlTmFtZTogbW9kZU1hdGNoZXJzW2ldLm1vZGVOYW1lCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIC8vIFB1c2ggYmxvY2sgZW5kIHBvcwogICAgICAgICAgICBtb2RlSW5mb3MucHVzaCgKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBwb3M6IGJsb2NrQmVnaW4gKyBtWzFdLmxlbmd0aCwKICAgICAgICAgICAgICAgIG1vZGVFeHQ6IG1vZGVJbmZvc1swXS5tb2RlRXh0LAogICAgICAgICAgICAgICAgbW9kZU5hbWU6IG1vZGVJbmZvc1swXS5tb2RlTmFtZQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICBjdXJQb3MgKz0gbS5pbmRleCArIG1bMF0ubGVuZ3RoOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgewogICAgICAgICAgICBjdXJQb3MgKz0gbS5pbmRleCArIE1hdGgubWF4KG1bMF0ubGVuZ3RoLCAxKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7IC8vIE5vIG1vcmUgbWF0Y2hlcwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICAvLyBTb3J0IG1vZGUgaW5mb3MKICAgIG1vZGVJbmZvcy5zb3J0KGZ1bmN0aW9uIHNvcnRNb2RlSW5mbyhhLCBiKSB7CiAgICAgIHJldHVybiBhLnBvcyAtIGIucG9zOwogICAgfSk7CgogICAgcmV0dXJuIG1vZGVJbmZvczsKICB9LAoKICBhdXRvRm9ybWF0TGluZUJyZWFrczogZnVuY3Rpb24gKHRleHQsIHN0YXJ0UG9zLCBlbmRQb3MpIHsKICAgIHZhciBtb2RlSW5mb3MgPSB0aGlzLmdldE1vZGVJbmZvcyh0ZXh0KTsKICAgIHZhciByZUJsb2NrU3RhcnRzV2l0aE5ld2xpbmUgPSBuZXcgUmVnRXhwKCJeXFxzKj9cbiIpOwogICAgdmFyIHJlQmxvY2tFbmRzV2l0aE5ld2xpbmUgPSBuZXcgUmVnRXhwKCJcblxccyo/JCIpOwogICAgdmFyIHJlcyA9ICIiOwogICAgLy8gVXNlIG1vZGVzIGluZm8gdG8gYnJlYWsgbGluZXMgY29ycmVzcG9uZGluZ2x5CiAgICBpZiAobW9kZUluZm9zLmxlbmd0aCA+IDEpIHsgLy8gRGVhbCB3aXRoIG11bHRpLW1vZGUgdGV4dAogICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSBtb2RlSW5mb3MubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YXIgc2VsU3RhcnQgPSBtb2RlSW5mb3NbaSAtIDFdLnBvczsKICAgICAgICB2YXIgc2VsRW5kID0gKGkgPCBtb2RlSW5mb3MubGVuZ3RoID8gbW9kZUluZm9zW2ldLnBvcyA6IGVuZFBvcyk7CgogICAgICAgIGlmIChzZWxTdGFydCA+PSBlbmRQb3MpIHsgLy8gVGhlIGJsb2NrIHN0YXJ0cyBsYXRlciB0aGFuIHRoZSBuZWVkZWQgZnJhZ21lbnQKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBpZiAoc2VsU3RhcnQgPCBzdGFydFBvcykgewogICAgICAgICAgaWYgKHNlbEVuZCA8PSBzdGFydFBvcykgeyAvLyBUaGUgYmxvY2sgc3RhcnRzIGVhcmxpZXIgdGhhbiB0aGUgbmVlZGVkIGZyYWdtZW50CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgc2VsU3RhcnQgPSBzdGFydFBvczsKICAgICAgICB9CiAgICAgICAgaWYgKHNlbEVuZCA+IGVuZFBvcykgewogICAgICAgICAgc2VsRW5kID0gZW5kUG9zOwogICAgICAgIH0KICAgICAgICB2YXIgdGV4dFBvcnRpb24gPSB0ZXh0LnN1YnN0cmluZyhzZWxTdGFydCwgc2VsRW5kKTsKICAgICAgICBpZiAobW9kZUluZm9zW2kgLSAxXS5tb2RlTmFtZSAhPSAieG1sIikgeyAvLyBTdGFydGluZyBhIENTUyBvciBKYXZhU2NyaXB0IGJsb2NrCiAgICAgICAgICBpZiAoIXJlQmxvY2tTdGFydHNXaXRoTmV3bGluZS50ZXN0KHRleHRQb3J0aW9uKQogICAgICAgICAgICAgICYmIHNlbFN0YXJ0ID4gMCkgeyAvLyBUaGUgYmxvY2sgZG9lcyBub3Qgc3RhcnQgd2l0aCBhIGxpbmUgYnJlYWsKICAgICAgICAgICAgdGV4dFBvcnRpb24gPSAiXG4iICsgdGV4dFBvcnRpb247CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoIXJlQmxvY2tFbmRzV2l0aE5ld2xpbmUudGVzdCh0ZXh0UG9ydGlvbikKICAgICAgICAgICAgICAmJiBzZWxFbmQgPCB0ZXh0Lmxlbmd0aCAtIDEpIHsgLy8gVGhlIGJsb2NrIGRvZXMgbm90IGVuZCB3aXRoIGEgbGluZSBicmVhawogICAgICAgICAgICB0ZXh0UG9ydGlvbiArPSAiXG4iOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXMgKz0gbW9kZUluZm9zW2kgLSAxXS5tb2RlRXh0LmF1dG9Gb3JtYXRMaW5lQnJlYWtzKHRleHRQb3J0aW9uKTsKICAgICAgfQogICAgfQogICAgZWxzZSB7IC8vIFNpbmdsZS1tb2RlIHRleHQKICAgICAgcmVzID0gbW9kZUluZm9zWzBdLm1vZGVFeHQuYXV0b0Zvcm1hdExpbmVCcmVha3ModGV4dC5zdWJzdHJpbmcoc3RhcnRQb3MsIGVuZFBvcykpOwogICAgfQoKICAgIHJldHVybiByZXM7CiAgfQp9Owo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/util/javascript-hint.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KGZ1bmN0aW9uICgpIHsKICBmdW5jdGlvbiBmb3JFYWNoKGFyciwgZikgewogICAgZm9yICh2YXIgaSA9IDAsIGUgPSBhcnIubGVuZ3RoOyBpIDwgZTsgKytpKSBmKGFycltpXSk7CiAgfQogIAogIGZ1bmN0aW9uIGFycmF5Q29udGFpbnMoYXJyLCBpdGVtKSB7CiAgICBpZiAoIUFycmF5LnByb3RvdHlwZS5pbmRleE9mKSB7CiAgICAgIHZhciBpID0gYXJyLmxlbmd0aDsKICAgICAgd2hpbGUgKGktLSkgewogICAgICAgIGlmIChhcnJbaV0gPT09IGl0ZW0pIHsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gYXJyLmluZGV4T2YoaXRlbSkgIT0gLTE7CiAgfQogIAogIENvZGVNaXJyb3IuamF2YXNjcmlwdEhpbnQgPSBmdW5jdGlvbihlZGl0b3IpIHsKICAgIC8vIEZpbmQgdGhlIHRva2VuIGF0IHRoZSBjdXJzb3IKICAgIHZhciBjdXIgPSBlZGl0b3IuZ2V0Q3Vyc29yKCksIHRva2VuID0gZWRpdG9yLmdldFRva2VuQXQoY3VyKSwgdHByb3AgPSB0b2tlbjsKICAgIC8vIElmIGl0J3Mgbm90IGEgJ3dvcmQtc3R5bGUnIHRva2VuLCBpZ25vcmUgdGhlIHRva2VuLgogICAgaWYgKCEvXltcdyRfXSokLy50ZXN0KHRva2VuLnN0cmluZykpIHsKICAgICAgdG9rZW4gPSB0cHJvcCA9IHtzdGFydDogY3VyLmNoLCBlbmQ6IGN1ci5jaCwgc3RyaW5nOiAiIiwgc3RhdGU6IHRva2VuLnN0YXRlLAogICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogdG9rZW4uc3RyaW5nID09ICIuIiA/ICJwcm9wZXJ0eSIgOiBudWxsfTsKICAgIH0KICAgIC8vIElmIGl0IGlzIGEgcHJvcGVydHksIGZpbmQgb3V0IHdoYXQgaXQgaXMgYSBwcm9wZXJ0eSBvZi4KICAgIHdoaWxlICh0cHJvcC5jbGFzc05hbWUgPT0gInByb3BlcnR5IikgewogICAgICB0cHJvcCA9IGVkaXRvci5nZXRUb2tlbkF0KHtsaW5lOiBjdXIubGluZSwgY2g6IHRwcm9wLnN0YXJ0fSk7CiAgICAgIGlmICh0cHJvcC5zdHJpbmcgIT0gIi4iKSByZXR1cm47CiAgICAgIHRwcm9wID0gZWRpdG9yLmdldFRva2VuQXQoe2xpbmU6IGN1ci5saW5lLCBjaDogdHByb3Auc3RhcnR9KTsKICAgICAgaWYgKCFjb250ZXh0KSB2YXIgY29udGV4dCA9IFtdOwogICAgICBjb250ZXh0LnB1c2godHByb3ApOwogICAgfQogICAgcmV0dXJuIHtsaXN0OiBnZXRDb21wbGV0aW9ucyh0b2tlbiwgY29udGV4dCksCiAgICAgICAgICAgIGZyb206IHtsaW5lOiBjdXIubGluZSwgY2g6IHRva2VuLnN0YXJ0fSwKICAgICAgICAgICAgdG86IHtsaW5lOiBjdXIubGluZSwgY2g6IHRva2VuLmVuZH19OwogIH0KCiAgdmFyIHN0cmluZ1Byb3BzID0gKCJjaGFyQXQgY2hhckNvZGVBdCBpbmRleE9mIGxhc3RJbmRleE9mIHN1YnN0cmluZyBzdWJzdHIgc2xpY2UgdHJpbSB0cmltTGVmdCB0cmltUmlnaHQgIiArCiAgICAgICAgICAgICAgICAgICAgICJ0b1VwcGVyQ2FzZSB0b0xvd2VyQ2FzZSBzcGxpdCBjb25jYXQgbWF0Y2ggcmVwbGFjZSBzZWFyY2giKS5zcGxpdCgiICIpOwogIHZhciBhcnJheVByb3BzID0gKCJsZW5ndGggY29uY2F0IGpvaW4gc3BsaWNlIHB1c2ggcG9wIHNoaWZ0IHVuc2hpZnQgc2xpY2UgcmV2ZXJzZSBzb3J0IGluZGV4T2YgIiArCiAgICAgICAgICAgICAgICAgICAgImxhc3RJbmRleE9mIGV2ZXJ5IHNvbWUgZmlsdGVyIGZvckVhY2ggbWFwIHJlZHVjZSByZWR1Y2VSaWdodCAiKS5zcGxpdCgiICIpOwogIHZhciBmdW5jUHJvcHMgPSAicHJvdG90eXBlIGFwcGx5IGNhbGwgYmluZCIuc3BsaXQoIiAiKTsKICB2YXIga2V5d29yZHMgPSAoImJyZWFrIGNhc2UgY2F0Y2ggY29udGludWUgZGVidWdnZXIgZGVmYXVsdCBkZWxldGUgZG8gZWxzZSBmYWxzZSBmaW5hbGx5IGZvciBmdW5jdGlvbiAiICsKICAgICAgICAgICAgICAgICAgImlmIGluIGluc3RhbmNlb2YgbmV3IG51bGwgcmV0dXJuIHN3aXRjaCB0aHJvdyB0cnVlIHRyeSB0eXBlb2YgdmFyIHZvaWQgd2hpbGUgd2l0aCIpLnNwbGl0KCIgIik7CgogIGZ1bmN0aW9uIGdldENvbXBsZXRpb25zKHRva2VuLCBjb250ZXh0KSB7CiAgICB2YXIgZm91bmQgPSBbXSwgc3RhcnQgPSB0b2tlbi5zdHJpbmc7CiAgICBmdW5jdGlvbiBtYXliZUFkZChzdHIpIHsKICAgICAgaWYgKHN0ci5pbmRleE9mKHN0YXJ0KSA9PSAwICYmICFhcnJheUNvbnRhaW5zKGZvdW5kLCBzdHIpKSBmb3VuZC5wdXNoKHN0cik7CiAgICB9CiAgICBmdW5jdGlvbiBnYXRoZXJDb21wbGV0aW9ucyhvYmopIHsKICAgICAgaWYgKHR5cGVvZiBvYmogPT0gInN0cmluZyIpIGZvckVhY2goc3RyaW5nUHJvcHMsIG1heWJlQWRkKTsKICAgICAgZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgQXJyYXkpIGZvckVhY2goYXJyYXlQcm9wcywgbWF5YmVBZGQpOwogICAgICBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBGdW5jdGlvbikgZm9yRWFjaChmdW5jUHJvcHMsIG1heWJlQWRkKTsKICAgICAgZm9yICh2YXIgbmFtZSBpbiBvYmopIG1heWJlQWRkKG5hbWUpOwogICAgfQoKICAgIGlmIChjb250ZXh0KSB7CiAgICAgIC8vIElmIHRoaXMgaXMgYSBwcm9wZXJ0eSwgc2VlIGlmIGl0IGJlbG9uZ3MgdG8gc29tZSBvYmplY3Qgd2UgY2FuCiAgICAgIC8vIGZpbmQgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgIHZhciBvYmogPSBjb250ZXh0LnBvcCgpLCBiYXNlOwogICAgICBpZiAob2JqLmNsYXNzTmFtZSA9PSAidmFyaWFibGUiKQogICAgICAgIGJhc2UgPSB3aW5kb3dbb2JqLnN0cmluZ107CiAgICAgIGVsc2UgaWYgKG9iai5jbGFzc05hbWUgPT0gInN0cmluZyIpCiAgICAgICAgYmFzZSA9ICIiOwogICAgICBlbHNlIGlmIChvYmouY2xhc3NOYW1lID09ICJhdG9tIikKICAgICAgICBiYXNlID0gMTsKICAgICAgd2hpbGUgKGJhc2UgIT0gbnVsbCAmJiBjb250ZXh0Lmxlbmd0aCkKICAgICAgICBiYXNlID0gYmFzZVtjb250ZXh0LnBvcCgpLnN0cmluZ107CiAgICAgIGlmIChiYXNlICE9IG51bGwpIGdhdGhlckNvbXBsZXRpb25zKGJhc2UpOwogICAgfQogICAgZWxzZSB7CiAgICAgIC8vIElmIG5vdCwganVzdCBsb29rIGluIHRoZSB3aW5kb3cgb2JqZWN0IGFuZCBhbnkgbG9jYWwgc2NvcGUKICAgICAgLy8gKHJlYWRpbmcgaW50byBKUyBtb2RlIGludGVybmFscyB0byBnZXQgYXQgdGhlIGxvY2FsIHZhcmlhYmxlcykKICAgICAgZm9yICh2YXIgdiA9IHRva2VuLnN0YXRlLmxvY2FsVmFyczsgdjsgdiA9IHYubmV4dCkgbWF5YmVBZGQodi5uYW1lKTsKICAgICAgZ2F0aGVyQ29tcGxldGlvbnMod2luZG93KTsKICAgICAgZm9yRWFjaChrZXl3b3JkcywgbWF5YmVBZGQpOwogICAgfQogICAgcmV0dXJuIGZvdW5kOwogIH0KfSkoKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/util/overlay.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gVXRpbGl0eSBmdW5jdGlvbiB0aGF0IGFsbG93cyBtb2RlcyB0byBiZSBjb21iaW5lZC4gVGhlIG1vZGUgZ2l2ZW4KLy8gYXMgdGhlIGJhc2UgYXJndW1lbnQgdGFrZXMgY2FyZSBvZiBtb3N0IG9mIHRoZSBub3JtYWwgbW9kZQovLyBmdW5jdGlvbmFsaXR5LCBidXQgYSBzZWNvbmQgKHR5cGljYWxseSBzaW1wbGUpIG1vZGUgaXMgdXNlZCwgd2hpY2gKLy8gY2FuIG92ZXJyaWRlIHRoZSBzdHlsZSBvZiB0ZXh0LiBCb3RoIG1vZGVzIGdldCB0byBwYXJzZSBhbGwgb2YgdGhlCi8vIHRleHQsIGJ1dCB3aGVuIGJvdGggYXNzaWduIGEgbm9uLW51bGwgc3R5bGUgdG8gYSBwaWVjZSBvZiBjb2RlLCB0aGUKLy8gb3ZlcmxheSB3aW5zLCB1bmxlc3MgdGhlIGNvbWJpbmUgYXJndW1lbnQgd2FzIHRydWUsIGluIHdoaWNoIGNhc2UKLy8gdGhlIHN0eWxlcyBhcmUgY29tYmluZWQuCgpDb2RlTWlycm9yLm92ZXJsYXlQYXJzZXIgPSBmdW5jdGlvbihiYXNlLCBvdmVybGF5LCBjb21iaW5lKSB7CiAgcmV0dXJuIHsKICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gewogICAgICAgIGJhc2U6IENvZGVNaXJyb3Iuc3RhcnRTdGF0ZShiYXNlKSwKICAgICAgICBvdmVybGF5OiBDb2RlTWlycm9yLnN0YXJ0U3RhdGUob3ZlcmxheSksCiAgICAgICAgYmFzZVBvczogMCwgYmFzZUN1cjogbnVsbCwKICAgICAgICBvdmVybGF5UG9zOiAwLCBvdmVybGF5Q3VyOiBudWxsCiAgICAgIH07CiAgICB9LAogICAgY29weVN0YXRlOiBmdW5jdGlvbihzdGF0ZSkgewogICAgICByZXR1cm4gewogICAgICAgIGJhc2U6IENvZGVNaXJyb3IuY29weVN0YXRlKGJhc2UsIHN0YXRlLmJhc2UpLAogICAgICAgIG92ZXJsYXk6IENvZGVNaXJyb3IuY29weVN0YXRlKG92ZXJsYXksIHN0YXRlLm92ZXJsYXkpLAogICAgICAgIGJhc2VQb3M6IHN0YXRlLmJhc2VQb3MsIGJhc2VDdXI6IG51bGwsCiAgICAgICAgb3ZlcmxheVBvczogc3RhdGUub3ZlcmxheVBvcywgb3ZlcmxheUN1cjogbnVsbAogICAgICB9OwogICAgfSwKCiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICBpZiAoc3RyZWFtLnN0YXJ0ID09IHN0YXRlLmJhc2VQb3MpIHsKICAgICAgICBzdGF0ZS5iYXNlQ3VyID0gYmFzZS50b2tlbihzdHJlYW0sIHN0YXRlLmJhc2UpOwogICAgICAgIHN0YXRlLmJhc2VQb3MgPSBzdHJlYW0ucG9zOwogICAgICB9CiAgICAgIGlmIChzdHJlYW0uc3RhcnQgPT0gc3RhdGUub3ZlcmxheVBvcykgewogICAgICAgIHN0cmVhbS5wb3MgPSBzdHJlYW0uc3RhcnQ7CiAgICAgICAgc3RhdGUub3ZlcmxheUN1ciA9IG92ZXJsYXkudG9rZW4oc3RyZWFtLCBzdGF0ZS5vdmVybGF5KTsKICAgICAgICBzdGF0ZS5vdmVybGF5UG9zID0gc3RyZWFtLnBvczsKICAgICAgfQogICAgICBzdHJlYW0ucG9zID0gTWF0aC5taW4oc3RhdGUuYmFzZVBvcywgc3RhdGUub3ZlcmxheVBvcyk7CiAgICAgIGlmIChzdHJlYW0uZW9sKCkpIHN0YXRlLmJhc2VQb3MgPSBzdGF0ZS5vdmVybGF5UG9zID0gMDsKCiAgICAgIGlmIChzdGF0ZS5vdmVybGF5Q3VyID09IG51bGwpIHJldHVybiBzdGF0ZS5iYXNlQ3VyOwogICAgICBpZiAoc3RhdGUuYmFzZUN1ciAhPSBudWxsICYmIGNvbWJpbmUpIHJldHVybiBzdGF0ZS5iYXNlQ3VyICsgIiAiICsgc3RhdGUub3ZlcmxheUN1cjsKICAgICAgZWxzZSByZXR1cm4gc3RhdGUub3ZlcmxheUN1cjsKICAgIH0sCiAgICAKICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlcikgewogICAgICByZXR1cm4gYmFzZS5pbmRlbnQoc3RhdGUuYmFzZSwgdGV4dEFmdGVyKTsKICAgIH0sCiAgICBlbGVjdHJpY0NoYXJzOiBiYXNlLmVsZWN0cmljQ2hhcnMKICB9Owp9Owo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/util/runmode.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5ydW5Nb2RlID0gZnVuY3Rpb24oc3RyaW5nLCBtb2Rlc3BlYywgY2FsbGJhY2spIHsKICB2YXIgbW9kZSA9IENvZGVNaXJyb3IuZ2V0TW9kZSh7aW5kZW50VW5pdDogMn0sIG1vZGVzcGVjKTsKICB2YXIgaXNOb2RlID0gY2FsbGJhY2subm9kZVR5cGUgPT0gMTsKICBpZiAoaXNOb2RlKSB7CiAgICB2YXIgbm9kZSA9IGNhbGxiYWNrLCBhY2N1bSA9IFtdOwogICAgY2FsbGJhY2sgPSBmdW5jdGlvbihzdHJpbmcsIHN0eWxlKSB7CiAgICAgIGlmIChzdHJpbmcgPT0gIlxuIikKICAgICAgICBhY2N1bS5wdXNoKCI8YnI+Iik7CiAgICAgIGVsc2UgaWYgKHN0eWxlKQogICAgICAgIGFjY3VtLnB1c2goIjxzcGFuIGNsYXNzPVwiY20tIiArIENvZGVNaXJyb3IuaHRtbEVzY2FwZShzdHlsZSkgKyAiXCI+IiArIENvZGVNaXJyb3IuaHRtbEVzY2FwZShzdHJpbmcpICsgIjwvc3Bhbj4iKTsKICAgICAgZWxzZQogICAgICAgIGFjY3VtLnB1c2goQ29kZU1pcnJvci5odG1sRXNjYXBlKHN0cmluZykpOwogICAgfQogIH0KICB2YXIgbGluZXMgPSBDb2RlTWlycm9yLnNwbGl0TGluZXMoc3RyaW5nKSwgc3RhdGUgPSBDb2RlTWlycm9yLnN0YXJ0U3RhdGUobW9kZSk7CiAgZm9yICh2YXIgaSA9IDAsIGUgPSBsaW5lcy5sZW5ndGg7IGkgPCBlOyArK2kpIHsKICAgIGlmIChpKSBjYWxsYmFjaygiXG4iKTsKICAgIHZhciBzdHJlYW0gPSBuZXcgQ29kZU1pcnJvci5TdHJpbmdTdHJlYW0obGluZXNbaV0pOwogICAgd2hpbGUgKCFzdHJlYW0uZW9sKCkpIHsKICAgICAgdmFyIHN0eWxlID0gbW9kZS50b2tlbihzdHJlYW0sIHN0YXRlKTsKICAgICAgY2FsbGJhY2soc3RyZWFtLmN1cnJlbnQoKSwgc3R5bGUsIGksIHN0cmVhbS5zdGFydCk7CiAgICAgIHN0cmVhbS5zdGFydCA9IHN0cmVhbS5wb3M7CiAgICB9CiAgfQogIGlmIChpc05vZGUpCiAgICBub2RlLmlubmVySFRNTCA9IGFjY3VtLmpvaW4oIiIpOwp9Owo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/util/search.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gRGVmaW5lIHNlYXJjaCBjb21tYW5kcy4gRGVwZW5kcyBvbiBkaWFsb2cuanMgb3IgYW5vdGhlcgovLyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgb3BlbkRpYWxvZyBtZXRob2QuCgovLyBSZXBsYWNlIHdvcmtzIGEgbGl0dGxlIG9kZGx5IC0tIGl0IHdpbGwgZG8gdGhlIHJlcGxhY2Ugb24gdGhlIG5leHQKLy8gQ3RybC1HIChvciB3aGF0ZXZlciBpcyBib3VuZCB0byBmaW5kTmV4dCkgcHJlc3MuIFlvdSBwcmV2ZW50IGEKLy8gcmVwbGFjZSBieSBtYWtpbmcgc3VyZSB0aGUgbWF0Y2ggaXMgbm8gbG9uZ2VyIHNlbGVjdGVkIHdoZW4gaGl0dGluZwovLyBDdHJsLUcuCgooZnVuY3Rpb24oKSB7CiAgZnVuY3Rpb24gU2VhcmNoU3RhdGUoKSB7CiAgICB0aGlzLnBvc0Zyb20gPSB0aGlzLnBvc1RvID0gdGhpcy5xdWVyeSA9IG51bGw7CiAgICB0aGlzLm1hcmtlZCA9IFtdOwogIH0KICBmdW5jdGlvbiBnZXRTZWFyY2hTdGF0ZShjbSkgewogICAgcmV0dXJuIGNtLl9zZWFyY2hTdGF0ZSB8fCAoY20uX3NlYXJjaFN0YXRlID0gbmV3IFNlYXJjaFN0YXRlKCkpOwogIH0KICBmdW5jdGlvbiBkaWFsb2coY20sIHRleHQsIHNob3J0VGV4dCwgZikgewogICAgaWYgKGNtLm9wZW5EaWFsb2cpIGNtLm9wZW5EaWFsb2codGV4dCwgZik7CiAgICBlbHNlIGYocHJvbXB0KHNob3J0VGV4dCwgIiIpKTsKICB9CiAgZnVuY3Rpb24gY29uZmlybURpYWxvZyhjbSwgdGV4dCwgc2hvcnRUZXh0LCBmcykgewogICAgaWYgKGNtLm9wZW5Db25maXJtKSBjbS5vcGVuQ29uZmlybSh0ZXh0LCBmcyk7CiAgICBlbHNlIGlmIChjb25maXJtKHNob3J0VGV4dCkpIGZzWzBdKCk7CiAgfQogIGZ1bmN0aW9uIHBhcnNlUXVlcnkocXVlcnkpIHsKICAgIHZhciBpc1JFID0gcXVlcnkubWF0Y2goL15cLyguKilcLyQvKTsKICAgIHJldHVybiBpc1JFID8gbmV3IFJlZ0V4cChpc1JFWzFdKSA6IHF1ZXJ5OwogIH0KICB2YXIgcXVlcnlEaWFsb2cgPQogICAgJ1NlYXJjaDogPGlucHV0IHR5cGU9InRleHQiIHN0eWxlPSJ3aWR0aDogMTBlbSI+IDxzcGFuIHN0eWxlPSJjb2xvcjogIzg4OCI+KFVzZSAvcmUvIHN5bnRheCBmb3IgcmVnZXhwIHNlYXJjaCk8L3NwYW4+JzsKICBmdW5jdGlvbiBkb1NlYXJjaChjbSwgcmV2KSB7CiAgICB2YXIgc3RhdGUgPSBnZXRTZWFyY2hTdGF0ZShjbSk7CiAgICBpZiAoc3RhdGUucXVlcnkpIHJldHVybiBmaW5kTmV4dChjbSwgcmV2KTsKICAgIGRpYWxvZyhjbSwgcXVlcnlEaWFsb2csICJTZWFyY2ggZm9yOiIsIGZ1bmN0aW9uKHF1ZXJ5KSB7CiAgICAgIGNtLm9wZXJhdGlvbihmdW5jdGlvbigpIHsKICAgICAgICBpZiAoIXF1ZXJ5IHx8IHN0YXRlLnF1ZXJ5KSByZXR1cm47CiAgICAgICAgc3RhdGUucXVlcnkgPSBwYXJzZVF1ZXJ5KHF1ZXJ5KTsKICAgICAgICBpZiAoY20ubGluZUNvdW50KCkgPCAyMDAwKSB7IC8vIFRoaXMgaXMgdG9vIGV4cGVuc2l2ZSBvbiBiaWcgZG9jdW1lbnRzLgogICAgICAgICAgZm9yICh2YXIgY3Vyc29yID0gY20uZ2V0U2VhcmNoQ3Vyc29yKHF1ZXJ5KTsgY3Vyc29yLmZpbmROZXh0KCk7KQogICAgICAgICAgICBzdGF0ZS5tYXJrZWQucHVzaChjbS5tYXJrVGV4dChjdXJzb3IuZnJvbSgpLCBjdXJzb3IudG8oKSwgIkNvZGVNaXJyb3Itc2VhcmNoaW5nIikpOwogICAgICAgIH0KICAgICAgICBzdGF0ZS5wb3NGcm9tID0gc3RhdGUucG9zVG8gPSBjbS5nZXRDdXJzb3IoKTsKICAgICAgICBmaW5kTmV4dChjbSwgcmV2KTsKICAgICAgfSk7CiAgICB9KTsKICB9CiAgZnVuY3Rpb24gZmluZE5leHQoY20sIHJldikge2NtLm9wZXJhdGlvbihmdW5jdGlvbigpIHsKICAgIHZhciBzdGF0ZSA9IGdldFNlYXJjaFN0YXRlKGNtKTsKICAgIHZhciBjdXJzb3IgPSBjbS5nZXRTZWFyY2hDdXJzb3Ioc3RhdGUucXVlcnksIHJldiA/IHN0YXRlLnBvc0Zyb20gOiBzdGF0ZS5wb3NUbyk7CiAgICBpZiAoIWN1cnNvci5maW5kKHJldikpIHsKICAgICAgY3Vyc29yID0gY20uZ2V0U2VhcmNoQ3Vyc29yKHN0YXRlLnF1ZXJ5LCByZXYgPyB7bGluZTogY20ubGluZUNvdW50KCkgLSAxfSA6IHtsaW5lOiAwLCBjaDogMH0pOwogICAgICBpZiAoIWN1cnNvci5maW5kKHJldikpIHJldHVybjsKICAgIH0KICAgIGNtLnNldFNlbGVjdGlvbihjdXJzb3IuZnJvbSgpLCBjdXJzb3IudG8oKSk7CiAgICBzdGF0ZS5wb3NGcm9tID0gY3Vyc29yLmZyb20oKTsgc3RhdGUucG9zVG8gPSBjdXJzb3IudG8oKTsKICB9KX0KICBmdW5jdGlvbiBjbGVhclNlYXJjaChjbSkge2NtLm9wZXJhdGlvbihmdW5jdGlvbigpIHsKICAgIHZhciBzdGF0ZSA9IGdldFNlYXJjaFN0YXRlKGNtKTsKICAgIGlmICghc3RhdGUucXVlcnkpIHJldHVybjsKICAgIHN0YXRlLnF1ZXJ5ID0gbnVsbDsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhdGUubWFya2VkLmxlbmd0aDsgKytpKSBzdGF0ZS5tYXJrZWRbaV0uY2xlYXIoKTsKICAgIHN0YXRlLm1hcmtlZC5sZW5ndGggPSAwOwogIH0pfQoKICB2YXIgcmVwbGFjZVF1ZXJ5RGlhbG9nID0KICAgICdSZXBsYWNlOiA8aW5wdXQgdHlwZT0idGV4dCIgc3R5bGU9IndpZHRoOiAxMGVtIj4gPHNwYW4gc3R5bGU9ImNvbG9yOiAjODg4Ij4oVXNlIC9yZS8gc3ludGF4IGZvciByZWdleHAgc2VhcmNoKTwvc3Bhbj4nOwogIHZhciByZXBsYWNlbWVudFF1ZXJ5RGlhbG9nID0gJ1dpdGg6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBzdHlsZT0id2lkdGg6IDEwZW0iPic7CiAgdmFyIGRvUmVwbGFjZUNvbmZpcm0gPSAiUmVwbGFjZT8gPGJ1dHRvbj5ZZXM8L2J1dHRvbj4gPGJ1dHRvbj5ObzwvYnV0dG9uPiA8YnV0dG9uPlN0b3A8L2J1dHRvbj4iOwogIGZ1bmN0aW9uIHJlcGxhY2UoY20sIGFsbCkgewogICAgZGlhbG9nKGNtLCByZXBsYWNlUXVlcnlEaWFsb2csICJSZXBsYWNlOiIsIGZ1bmN0aW9uKHF1ZXJ5KSB7CiAgICAgIGlmICghcXVlcnkpIHJldHVybjsKICAgICAgcXVlcnkgPSBwYXJzZVF1ZXJ5KHF1ZXJ5KTsKICAgICAgZGlhbG9nKGNtLCByZXBsYWNlbWVudFF1ZXJ5RGlhbG9nLCAiUmVwbGFjZSB3aXRoOiIsIGZ1bmN0aW9uKHRleHQpIHsKICAgICAgICBpZiAoYWxsKSB7CiAgICAgICAgICBjbS5vcGVyYXRpb24oZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGZvciAodmFyIGN1cnNvciA9IGNtLmdldFNlYXJjaEN1cnNvcihxdWVyeSk7IGN1cnNvci5maW5kTmV4dCgpOykgewogICAgICAgICAgICAgIGlmICh0eXBlb2YgcXVlcnkgIT0gInN0cmluZyIpIHsKICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IGNtLmdldFJhbmdlKGN1cnNvci5mcm9tKCksIGN1cnNvci50bygpKS5tYXRjaChxdWVyeSk7CiAgICAgICAgICAgICAgICBjdXJzb3IucmVwbGFjZSh0ZXh0LnJlcGxhY2UoL1wkKFxkKS8sIGZ1bmN0aW9uKHcsIGkpIHtyZXR1cm4gbWF0Y2hbaV07fSkpOwogICAgICAgICAgICAgIH0gZWxzZSBjdXJzb3IucmVwbGFjZSh0ZXh0KTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNsZWFyU2VhcmNoKGNtKTsKICAgICAgICAgIHZhciBjdXJzb3IgPSBjbS5nZXRTZWFyY2hDdXJzb3IocXVlcnksIGNtLmdldEN1cnNvcigpKTsKICAgICAgICAgIGZ1bmN0aW9uIGFkdmFuY2UoKSB7CiAgICAgICAgICAgIHZhciBzdGFydCA9IGN1cnNvci5mcm9tKCksIG1hdGNoOwogICAgICAgICAgICBpZiAoIShtYXRjaCA9IGN1cnNvci5maW5kTmV4dCgpKSkgewogICAgICAgICAgICAgIGN1cnNvciA9IGNtLmdldFNlYXJjaEN1cnNvcihxdWVyeSk7CiAgICAgICAgICAgICAgaWYgKCEobWF0Y2ggPSBjdXJzb3IuZmluZE5leHQoKSkgfHwKICAgICAgICAgICAgICAgICAgKGN1cnNvci5mcm9tKCkubGluZSA9PSBzdGFydC5saW5lICYmIGN1cnNvci5mcm9tKCkuY2ggPT0gc3RhcnQuY2gpKSByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY20uc2V0U2VsZWN0aW9uKGN1cnNvci5mcm9tKCksIGN1cnNvci50bygpKTsKICAgICAgICAgICAgY29uZmlybURpYWxvZyhjbSwgZG9SZXBsYWNlQ29uZmlybSwgIlJlcGxhY2U/IiwKICAgICAgICAgICAgICAgICAgICAgICAgICBbZnVuY3Rpb24oKSB7ZG9SZXBsYWNlKG1hdGNoKTt9LCBhZHZhbmNlXSk7CiAgICAgICAgICB9CiAgICAgICAgICBmdW5jdGlvbiBkb1JlcGxhY2UobWF0Y2gpIHsKICAgICAgICAgICAgY3Vyc29yLnJlcGxhY2UodHlwZW9mIHF1ZXJ5ID09ICJzdHJpbmciID8gdGV4dCA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQucmVwbGFjZSgvXCQoXGQpLywgZnVuY3Rpb24odywgaSkge3JldHVybiBtYXRjaFtpXTt9KSk7CiAgICAgICAgICAgIGFkdmFuY2UoKTsKICAgICAgICAgIH0KICAgICAgICAgIGFkdmFuY2UoKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSk7CiAgfQoKICBDb2RlTWlycm9yLmNvbW1hbmRzLmZpbmQgPSBmdW5jdGlvbihjbSkge2NsZWFyU2VhcmNoKGNtKTsgZG9TZWFyY2goY20pO307CiAgQ29kZU1pcnJvci5jb21tYW5kcy5maW5kTmV4dCA9IGRvU2VhcmNoOwogIENvZGVNaXJyb3IuY29tbWFuZHMuZmluZFByZXYgPSBmdW5jdGlvbihjbSkge2RvU2VhcmNoKGNtLCB0cnVlKTt9OwogIENvZGVNaXJyb3IuY29tbWFuZHMuY2xlYXJTZWFyY2ggPSBjbGVhclNlYXJjaDsKICBDb2RlTWlycm9yLmNvbW1hbmRzLnJlcGxhY2UgPSByZXBsYWNlOwogIENvZGVNaXJyb3IuY29tbWFuZHMucmVwbGFjZUFsbCA9IGZ1bmN0aW9uKGNtKSB7cmVwbGFjZShjbSwgdHJ1ZSk7fTsKfSkoKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/util/searchcursor.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KGZ1bmN0aW9uKCl7CiAgZnVuY3Rpb24gU2VhcmNoQ3Vyc29yKGNtLCBxdWVyeSwgcG9zLCBjYXNlRm9sZCkgewogICAgdGhpcy5hdE9jY3VycmVuY2UgPSBmYWxzZTsgdGhpcy5jbSA9IGNtOwogICAgaWYgKGNhc2VGb2xkID09IG51bGwpIGNhc2VGb2xkID0gdHlwZW9mIHF1ZXJ5ID09ICJzdHJpbmciICYmIHF1ZXJ5ID09IHF1ZXJ5LnRvTG93ZXJDYXNlKCk7CgogICAgcG9zID0gcG9zID8gY20uY2xpcFBvcyhwb3MpIDoge2xpbmU6IDAsIGNoOiAwfTsKICAgIHRoaXMucG9zID0ge2Zyb206IHBvcywgdG86IHBvc307CgogICAgLy8gVGhlIG1hdGNoZXMgbWV0aG9kIGlzIGZpbGxlZCBpbiBiYXNlZCBvbiB0aGUgdHlwZSBvZiBxdWVyeS4KICAgIC8vIEl0IHRha2VzIGEgcG9zaXRpb24gYW5kIGEgZGlyZWN0aW9uLCBhbmQgcmV0dXJucyBhbiBvYmplY3QKICAgIC8vIGRlc2NyaWJpbmcgdGhlIG5leHQgb2NjdXJyZW5jZSBvZiB0aGUgcXVlcnksIG9yIG51bGwgaWYgbm8KICAgIC8vIG1vcmUgbWF0Y2hlcyB3ZXJlIGZvdW5kLgogICAgaWYgKHR5cGVvZiBxdWVyeSAhPSAic3RyaW5nIikgLy8gUmVnZXhwIG1hdGNoCiAgICAgIHRoaXMubWF0Y2hlcyA9IGZ1bmN0aW9uKHJldmVyc2UsIHBvcykgewogICAgICAgIGlmIChyZXZlcnNlKSB7CiAgICAgICAgICB2YXIgbGluZSA9IGNtLmdldExpbmUocG9zLmxpbmUpLnNsaWNlKDAsIHBvcy5jaCksIG1hdGNoID0gbGluZS5tYXRjaChxdWVyeSksIHN0YXJ0ID0gMDsKICAgICAgICAgIHdoaWxlIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaW5kID0gbGluZS5pbmRleE9mKG1hdGNoWzBdKTsKICAgICAgICAgICAgc3RhcnQgKz0gaW5kOwogICAgICAgICAgICBsaW5lID0gbGluZS5zbGljZShpbmQgKyAxKTsKICAgICAgICAgICAgdmFyIG5ld21hdGNoID0gbGluZS5tYXRjaChxdWVyeSk7CiAgICAgICAgICAgIGlmIChuZXdtYXRjaCkgbWF0Y2ggPSBuZXdtYXRjaDsKICAgICAgICAgICAgZWxzZSBicmVhazsKICAgICAgICAgICAgc3RhcnQrKzsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICB2YXIgbGluZSA9IGNtLmdldExpbmUocG9zLmxpbmUpLnNsaWNlKHBvcy5jaCksIG1hdGNoID0gbGluZS5tYXRjaChxdWVyeSksCiAgICAgICAgICBzdGFydCA9IG1hdGNoICYmIHBvcy5jaCArIGxpbmUuaW5kZXhPZihtYXRjaFswXSk7CiAgICAgICAgfQogICAgICAgIGlmIChtYXRjaCkKICAgICAgICAgIHJldHVybiB7ZnJvbToge2xpbmU6IHBvcy5saW5lLCBjaDogc3RhcnR9LAogICAgICAgICAgICAgICAgICB0bzoge2xpbmU6IHBvcy5saW5lLCBjaDogc3RhcnQgKyBtYXRjaFswXS5sZW5ndGh9LAogICAgICAgICAgICAgICAgICBtYXRjaDogbWF0Y2h9OwogICAgICB9OwogICAgZWxzZSB7IC8vIFN0cmluZyBxdWVyeQogICAgICBpZiAoY2FzZUZvbGQpIHF1ZXJ5ID0gcXVlcnkudG9Mb3dlckNhc2UoKTsKICAgICAgdmFyIGZvbGQgPSBjYXNlRm9sZCA/IGZ1bmN0aW9uKHN0cil7cmV0dXJuIHN0ci50b0xvd2VyQ2FzZSgpO30gOiBmdW5jdGlvbihzdHIpe3JldHVybiBzdHI7fTsKICAgICAgdmFyIHRhcmdldCA9IHF1ZXJ5LnNwbGl0KCJcbiIpOwogICAgICAvLyBEaWZmZXJlbnQgbWV0aG9kcyBmb3Igc2luZ2xlLWxpbmUgYW5kIG11bHRpLWxpbmUgcXVlcmllcwogICAgICBpZiAodGFyZ2V0Lmxlbmd0aCA9PSAxKQogICAgICAgIHRoaXMubWF0Y2hlcyA9IGZ1bmN0aW9uKHJldmVyc2UsIHBvcykgewogICAgICAgICAgdmFyIGxpbmUgPSBmb2xkKGNtLmdldExpbmUocG9zLmxpbmUpKSwgbGVuID0gcXVlcnkubGVuZ3RoLCBtYXRjaDsKICAgICAgICAgIGlmIChyZXZlcnNlID8gKHBvcy5jaCA+PSBsZW4gJiYgKG1hdGNoID0gbGluZS5sYXN0SW5kZXhPZihxdWVyeSwgcG9zLmNoIC0gbGVuKSkgIT0gLTEpCiAgICAgICAgICAgICAgOiAobWF0Y2ggPSBsaW5lLmluZGV4T2YocXVlcnksIHBvcy5jaCkpICE9IC0xKQogICAgICAgICAgICByZXR1cm4ge2Zyb206IHtsaW5lOiBwb3MubGluZSwgY2g6IG1hdGNofSwKICAgICAgICAgICAgICAgICAgICB0bzoge2xpbmU6IHBvcy5saW5lLCBjaDogbWF0Y2ggKyBsZW59fTsKICAgICAgICB9OwogICAgICBlbHNlCiAgICAgICAgdGhpcy5tYXRjaGVzID0gZnVuY3Rpb24ocmV2ZXJzZSwgcG9zKSB7CiAgICAgICAgICB2YXIgbG4gPSBwb3MubGluZSwgaWR4ID0gKHJldmVyc2UgPyB0YXJnZXQubGVuZ3RoIC0gMSA6IDApLCBtYXRjaCA9IHRhcmdldFtpZHhdLCBsaW5lID0gZm9sZChjbS5nZXRMaW5lKGxuKSk7CiAgICAgICAgICB2YXIgb2Zmc2V0QSA9IChyZXZlcnNlID8gbGluZS5pbmRleE9mKG1hdGNoKSArIG1hdGNoLmxlbmd0aCA6IGxpbmUubGFzdEluZGV4T2YobWF0Y2gpKTsKICAgICAgICAgIGlmIChyZXZlcnNlID8gb2Zmc2V0QSA+PSBwb3MuY2ggfHwgb2Zmc2V0QSAhPSBtYXRjaC5sZW5ndGgKICAgICAgICAgICAgICA6IG9mZnNldEEgPD0gcG9zLmNoIHx8IG9mZnNldEEgIT0gbGluZS5sZW5ndGggLSBtYXRjaC5sZW5ndGgpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIGZvciAoOzspIHsKICAgICAgICAgICAgaWYgKHJldmVyc2UgPyAhbG4gOiBsbiA9PSBjbS5saW5lQ291bnQoKSAtIDEpIHJldHVybjsKICAgICAgICAgICAgbGluZSA9IGZvbGQoY20uZ2V0TGluZShsbiArPSByZXZlcnNlID8gLTEgOiAxKSk7CiAgICAgICAgICAgIG1hdGNoID0gdGFyZ2V0W3JldmVyc2UgPyAtLWlkeCA6ICsraWR4XTsKICAgICAgICAgICAgaWYgKGlkeCA+IDAgJiYgaWR4IDwgdGFyZ2V0Lmxlbmd0aCAtIDEpIHsKICAgICAgICAgICAgICBpZiAobGluZSAhPSBtYXRjaCkgcmV0dXJuOwogICAgICAgICAgICAgIGVsc2UgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIG9mZnNldEIgPSAocmV2ZXJzZSA/IGxpbmUubGFzdEluZGV4T2YobWF0Y2gpIDogbGluZS5pbmRleE9mKG1hdGNoKSArIG1hdGNoLmxlbmd0aCk7CiAgICAgICAgICAgIGlmIChyZXZlcnNlID8gb2Zmc2V0QiAhPSBsaW5lLmxlbmd0aCAtIG1hdGNoLmxlbmd0aCA6IG9mZnNldEIgIT0gbWF0Y2gubGVuZ3RoKQogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgdmFyIHN0YXJ0ID0ge2xpbmU6IHBvcy5saW5lLCBjaDogb2Zmc2V0QX0sIGVuZCA9IHtsaW5lOiBsbiwgY2g6IG9mZnNldEJ9OwogICAgICAgICAgICByZXR1cm4ge2Zyb206IHJldmVyc2UgPyBlbmQgOiBzdGFydCwgdG86IHJldmVyc2UgPyBzdGFydCA6IGVuZH07CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgIH0KICB9CgogIFNlYXJjaEN1cnNvci5wcm90b3R5cGUgPSB7CiAgICBmaW5kTmV4dDogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMuZmluZChmYWxzZSk7fSwKICAgIGZpbmRQcmV2aW91czogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMuZmluZCh0cnVlKTt9LAoKICAgIGZpbmQ6IGZ1bmN0aW9uKHJldmVyc2UpIHsKICAgICAgdmFyIHNlbGYgPSB0aGlzLCBwb3MgPSB0aGlzLmNtLmNsaXBQb3MocmV2ZXJzZSA/IHRoaXMucG9zLmZyb20gOiB0aGlzLnBvcy50byk7CiAgICAgIGZ1bmN0aW9uIHNhdmVQb3NBbmRGYWlsKGxpbmUpIHsKICAgICAgICB2YXIgcG9zID0ge2xpbmU6IGxpbmUsIGNoOiAwfTsKICAgICAgICBzZWxmLnBvcyA9IHtmcm9tOiBwb3MsIHRvOiBwb3N9OwogICAgICAgIHNlbGYuYXRPY2N1cnJlbmNlID0gZmFsc2U7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CgogICAgICBmb3IgKDs7KSB7CiAgICAgICAgaWYgKHRoaXMucG9zID0gdGhpcy5tYXRjaGVzKHJldmVyc2UsIHBvcykpIHsKICAgICAgICAgIHRoaXMuYXRPY2N1cnJlbmNlID0gdHJ1ZTsKICAgICAgICAgIHJldHVybiB0aGlzLnBvcy5tYXRjaCB8fCB0cnVlOwogICAgICAgIH0KICAgICAgICBpZiAocmV2ZXJzZSkgewogICAgICAgICAgaWYgKCFwb3MubGluZSkgcmV0dXJuIHNhdmVQb3NBbmRGYWlsKDApOwogICAgICAgICAgcG9zID0ge2xpbmU6IHBvcy5saW5lLTEsIGNoOiB0aGlzLmNtLmdldExpbmUocG9zLmxpbmUtMSkubGVuZ3RofTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICB2YXIgbWF4TGluZSA9IHRoaXMuY20ubGluZUNvdW50KCk7CiAgICAgICAgICBpZiAocG9zLmxpbmUgPT0gbWF4TGluZSAtIDEpIHJldHVybiBzYXZlUG9zQW5kRmFpbChtYXhMaW5lKTsKICAgICAgICAgIHBvcyA9IHtsaW5lOiBwb3MubGluZSsxLCBjaDogMH07CiAgICAgICAgfQogICAgICB9CiAgICB9LAoKICAgIGZyb206IGZ1bmN0aW9uKCkge2lmICh0aGlzLmF0T2NjdXJyZW5jZSkgcmV0dXJuIHRoaXMucG9zLmZyb207fSwKICAgIHRvOiBmdW5jdGlvbigpIHtpZiAodGhpcy5hdE9jY3VycmVuY2UpIHJldHVybiB0aGlzLnBvcy50bzt9LAoKICAgIHJlcGxhY2U6IGZ1bmN0aW9uKG5ld1RleHQpIHsKICAgICAgdmFyIHNlbGYgPSB0aGlzOwogICAgICBpZiAodGhpcy5hdE9jY3VycmVuY2UpCiAgICAgICAgc2VsZi5wb3MudG8gPSB0aGlzLmNtLnJlcGxhY2VSYW5nZShuZXdUZXh0LCBzZWxmLnBvcy5mcm9tLCBzZWxmLnBvcy50byk7CiAgICB9CiAgfTsKCiAgQ29kZU1pcnJvci5kZWZpbmVFeHRlbnNpb24oImdldFNlYXJjaEN1cnNvciIsIGZ1bmN0aW9uKHF1ZXJ5LCBwb3MsIGNhc2VGb2xkKSB7CiAgICByZXR1cm4gbmV3IFNlYXJjaEN1cnNvcih0aGlzLCBxdWVyeSwgcG9zLCBjYXNlRm9sZCk7CiAgfSk7Cn0pKCk7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/util/simple-hint.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LkNvZGVNaXJyb3ItY29tcGxldGlvbnMgewogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB6LWluZGV4OiAxMDsKICBvdmVyZmxvdzogaGlkZGVuOwogIC13ZWJraXQtYm94LXNoYWRvdzogMnB4IDNweCA1cHggcmdiYSgwLDAsMCwuMik7CiAgLW1vei1ib3gtc2hhZG93OiAycHggM3B4IDVweCByZ2JhKDAsMCwwLC4yKTsKICBib3gtc2hhZG93OiAycHggM3B4IDVweCByZ2JhKDAsMCwwLC4yKTsKfQouQ29kZU1pcnJvci1jb21wbGV0aW9ucyBzZWxlY3QgewogIGJhY2tncm91bmQ6ICNmYWZhZmE7CiAgb3V0bGluZTogbm9uZTsKICBib3JkZXI6IG5vbmU7CiAgcGFkZGluZzogMDsKICBtYXJnaW46IDA7CiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKfQo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/util/simple-hint.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KGZ1bmN0aW9uKCkgewogIENvZGVNaXJyb3Iuc2ltcGxlSGludCA9IGZ1bmN0aW9uKGVkaXRvciwgZ2V0SGludHMpIHsKICAgIC8vIFdlIHdhbnQgYSBzaW5nbGUgY3Vyc29yIHBvc2l0aW9uLgogICAgaWYgKGVkaXRvci5zb21ldGhpbmdTZWxlY3RlZCgpKSByZXR1cm47CiAgICB2YXIgcmVzdWx0ID0gZ2V0SGludHMoZWRpdG9yKTsKICAgIGlmICghcmVzdWx0IHx8ICFyZXN1bHQubGlzdC5sZW5ndGgpIHJldHVybjsKICAgIHZhciBjb21wbGV0aW9ucyA9IHJlc3VsdC5saXN0OwogICAgZnVuY3Rpb24gaW5zZXJ0KHN0cikgewogICAgICBlZGl0b3IucmVwbGFjZVJhbmdlKHN0ciwgcmVzdWx0LmZyb20sIHJlc3VsdC50byk7CiAgICB9CiAgICAvLyBXaGVuIHRoZXJlIGlzIG9ubHkgb25lIGNvbXBsZXRpb24sIHVzZSBpdCBkaXJlY3RseS4KICAgIGlmIChjb21wbGV0aW9ucy5sZW5ndGggPT0gMSkge2luc2VydChjb21wbGV0aW9uc1swXSk7IHJldHVybiB0cnVlO30KCiAgICAvLyBCdWlsZCB0aGUgc2VsZWN0IHdpZGdldAogICAgdmFyIGNvbXBsZXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICBjb21wbGV0ZS5jbGFzc05hbWUgPSAiQ29kZU1pcnJvci1jb21wbGV0aW9ucyI7CiAgICB2YXIgc2VsID0gY29tcGxldGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2VsZWN0IikpOwogICAgLy8gT3BlcmEgZG9lc24ndCBtb3ZlIHRoZSBzZWxlY3Rpb24gd2hlbiBwcmVzc2luZyB1cC9kb3duIGluIGEKICAgIC8vIG11bHRpLXNlbGVjdCwgYnV0IGl0IGRvZXMgcHJvcGVybHkgc3VwcG9ydCB0aGUgc2l6ZSBwcm9wZXJ0eSBvbgogICAgLy8gc2luZ2xlLXNlbGVjdHMsIHNvIG5vIG11bHRpLXNlbGVjdCBpcyBuZWNlc3NhcnkuCiAgICBpZiAoIXdpbmRvdy5vcGVyYSkgc2VsLm11bHRpcGxlID0gdHJ1ZTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29tcGxldGlvbnMubGVuZ3RoOyArK2kpIHsKICAgICAgdmFyIG9wdCA9IHNlbC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJvcHRpb24iKSk7CiAgICAgIG9wdC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjb21wbGV0aW9uc1tpXSkpOwogICAgfQogICAgc2VsLmZpcnN0Q2hpbGQuc2VsZWN0ZWQgPSB0cnVlOwogICAgc2VsLnNpemUgPSBNYXRoLm1pbigxMCwgY29tcGxldGlvbnMubGVuZ3RoKTsKICAgIHZhciBwb3MgPSBlZGl0b3IuY3Vyc29yQ29vcmRzKCk7CiAgICBjb21wbGV0ZS5zdHlsZS5sZWZ0ID0gcG9zLnggKyAicHgiOwogICAgY29tcGxldGUuc3R5bGUudG9wID0gcG9zLnlCb3QgKyAicHgiOwogICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjb21wbGV0ZSk7CiAgICAvLyBIYWNrIHRvIGhpZGUgdGhlIHNjcm9sbGJhci4KICAgIGlmIChjb21wbGV0aW9ucy5sZW5ndGggPD0gMTApCiAgICAgIGNvbXBsZXRlLnN0eWxlLndpZHRoID0gKHNlbC5jbGllbnRXaWR0aCAtIDEpICsgInB4IjsKCiAgICB2YXIgZG9uZSA9IGZhbHNlOwogICAgZnVuY3Rpb24gY2xvc2UoKSB7CiAgICAgIGlmIChkb25lKSByZXR1cm47CiAgICAgIGRvbmUgPSB0cnVlOwogICAgICBjb21wbGV0ZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGNvbXBsZXRlKTsKICAgIH0KICAgIGZ1bmN0aW9uIHBpY2soKSB7CiAgICAgIGluc2VydChjb21wbGV0aW9uc1tzZWwuc2VsZWN0ZWRJbmRleF0pOwogICAgICBjbG9zZSgpOwogICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZWRpdG9yLmZvY3VzKCk7fSwgNTApOwogICAgfQogICAgQ29kZU1pcnJvci5jb25uZWN0KHNlbCwgImJsdXIiLCBjbG9zZSk7CiAgICBDb2RlTWlycm9yLmNvbm5lY3Qoc2VsLCAia2V5ZG93biIsIGZ1bmN0aW9uKGV2ZW50KSB7CiAgICAgIHZhciBjb2RlID0gZXZlbnQua2V5Q29kZTsKICAgICAgLy8gRW50ZXIKICAgICAgaWYgKGNvZGUgPT0gMTMpIHtDb2RlTWlycm9yLmVfc3RvcChldmVudCk7IHBpY2soKTt9CiAgICAgIC8vIEVzY2FwZQogICAgICBlbHNlIGlmIChjb2RlID09IDI3KSB7Q29kZU1pcnJvci5lX3N0b3AoZXZlbnQpOyBjbG9zZSgpOyBlZGl0b3IuZm9jdXMoKTt9CiAgICAgIGVsc2UgaWYgKGNvZGUgIT0gMzggJiYgY29kZSAhPSA0MCkgewogICAgICAgIGNsb3NlKCk7IGVkaXRvci5mb2N1cygpOwogICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtDb2RlTWlycm9yLnNpbXBsZUhpbnQoZWRpdG9yLCBnZXRIaW50cyk7fSwgNTApOwogICAgICB9CiAgICB9KTsKICAgIENvZGVNaXJyb3IuY29ubmVjdChzZWwsICJkYmxjbGljayIsIHBpY2spOwoKICAgIHNlbC5mb2N1cygpOwogICAgLy8gT3BlcmEgc29tZXRpbWVzIGlnbm9yZXMgZm9jdXNpbmcgYSBmcmVzaGx5IGNyZWF0ZWQgbm9kZQogICAgaWYgKHdpbmRvdy5vcGVyYSkgc2V0VGltZW91dChmdW5jdGlvbigpe2lmICghZG9uZSkgc2VsLmZvY3VzKCk7fSwgMTAwKTsKICAgIHJldHVybiB0cnVlOwogIH07Cn0pKCk7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChDKSAyMDExIGJ5IE1hcmlqbiBIYXZlcmJla2UgPG1hcmlqbmhAZ21haWwuY29tPgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgphbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOClRIRSBTT0ZUV0FSRS4KClBsZWFzZSBub3RlIHRoYXQgc29tZSBzdWJkaXJlY3RvcmllcyBvZiB0aGUgQ29kZU1pcnJvciBkaXN0cmlidXRpb24KaW5jbHVkZSB0aGVpciBvd24gTElDRU5TRSBmaWxlcywgYW5kIGFyZSByZWxlYXNlZCB1bmRlciBkaWZmZXJlbnQKbGljZW5jZXMuCg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/clike/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/clike/clike.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[c3Bhbi5jLWxpa2Uta2V5d29yZCB7Y29sb3I6ICM5MGI7fQpzcGFuLmMtbGlrZS1udW1iZXIge2NvbG9yOiAjMjkxO30Kc3Bhbi5jLWxpa2UtY29tbWVudCB7Y29sb3I6ICNhNzA7fQpzcGFuLmMtbGlrZS1zdHJpbmcge2NvbG9yOiAjYTIyO30Kc3Bhbi5jLWxpa2UtcHJlcHJvY2Vzc29yIHtjb2xvcjogIzA0OTt9CnNwYW4uYy1saWtlLXZhciB7Y29sb3I6ICMyMmI7fQpzcGFuLmMtbGlrZS1hbm5vdGF0aW9uIHtjb2xvcjogIzY2Njt9Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/clike/clike.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJjbGlrZSIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgdmFyIGluZGVudFVuaXQgPSBjb25maWcuaW5kZW50VW5pdCwKICAgICAga2V5d29yZHMgPSBwYXJzZXJDb25maWcua2V5d29yZHMgfHwge30sCiAgICAgIGJsb2NrS2V5d29yZHMgPSBwYXJzZXJDb25maWcuYmxvY2tLZXl3b3JkcyB8fCB7fSwKICAgICAgYXRvbXMgPSBwYXJzZXJDb25maWcuYXRvbXMgfHwge30sCiAgICAgIGhvb2tzID0gcGFyc2VyQ29uZmlnLmhvb2tzIHx8IHt9LAogICAgICBtdWx0aUxpbmVTdHJpbmdzID0gcGFyc2VyQ29uZmlnLm11bHRpTGluZVN0cmluZ3M7CiAgdmFyIGlzT3BlcmF0b3JDaGFyID0gL1srXC0qJiU9PD4hP3xcL10vOwoKICB2YXIgY3VyUHVuYzsKCiAgZnVuY3Rpb24gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpIHsKICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7CiAgICBpZiAoaG9va3NbY2hdKSB7CiAgICAgIHZhciByZXN1bHQgPSBob29rc1tjaF0oc3RyZWFtLCBzdGF0ZSk7CiAgICAgIGlmIChyZXN1bHQgIT09IGZhbHNlKSByZXR1cm4gcmVzdWx0OwogICAgfQogICAgaWYgKGNoID09ICciJyB8fCBjaCA9PSAiJyIpIHsKICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblN0cmluZyhjaCk7CiAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgIH0KICAgIGlmICgvW1xbXF17fVwoXCksO1w6XC5dLy50ZXN0KGNoKSkgewogICAgICBjdXJQdW5jID0gY2g7CiAgICAgIHJldHVybiBudWxsCiAgICB9CiAgICBpZiAoL1xkLy50ZXN0KGNoKSkgewogICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1wuXS8pOwogICAgICByZXR1cm4gIm51bWJlciI7CiAgICB9CiAgICBpZiAoY2ggPT0gIi8iKSB7CiAgICAgIGlmIChzdHJlYW0uZWF0KCIqIikpIHsKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQ29tbWVudDsKICAgICAgICByZXR1cm4gdG9rZW5Db21tZW50KHN0cmVhbSwgc3RhdGUpOwogICAgICB9CiAgICAgIGlmIChzdHJlYW0uZWF0KCIvIikpIHsKICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgICAgcmV0dXJuICJjb21tZW50IjsKICAgICAgfQogICAgfQogICAgaWYgKGlzT3BlcmF0b3JDaGFyLnRlc3QoY2gpKSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZShpc09wZXJhdG9yQ2hhcik7CiAgICAgIHJldHVybiAib3BlcmF0b3IiOwogICAgfQogICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcJF9dLyk7CiAgICB2YXIgY3VyID0gc3RyZWFtLmN1cnJlbnQoKTsKICAgIGlmIChrZXl3b3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShjdXIpKSB7CiAgICAgIGlmIChibG9ja0tleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKGN1cikpIGN1clB1bmMgPSAibmV3c3RhdGVtZW50IjsKICAgICAgcmV0dXJuICJrZXl3b3JkIjsKICAgIH0KICAgIGlmIChhdG9tcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShjdXIpKSByZXR1cm4gImF0b20iOwogICAgcmV0dXJuICJ3b3JkIjsKICB9CgogIGZ1bmN0aW9uIHRva2VuU3RyaW5nKHF1b3RlKSB7CiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICB2YXIgZXNjYXBlZCA9IGZhbHNlLCBuZXh0LCBlbmQgPSBmYWxzZTsKICAgICAgd2hpbGUgKChuZXh0ID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkgewogICAgICAgIGlmIChuZXh0ID09IHF1b3RlICYmICFlc2NhcGVkKSB7ZW5kID0gdHJ1ZTsgYnJlYWs7fQogICAgICAgIGVzY2FwZWQgPSAhZXNjYXBlZCAmJiBuZXh0ID09ICJcXCI7CiAgICAgIH0KICAgICAgaWYgKGVuZCB8fCAhKGVzY2FwZWQgfHwgbXVsdGlMaW5lU3RyaW5ncykpCiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7CiAgICAgIHJldHVybiAic3RyaW5nIjsKICAgIH07CiAgfQoKICBmdW5jdGlvbiB0b2tlbkNvbW1lbnQoc3RyZWFtLCBzdGF0ZSkgewogICAgdmFyIG1heWJlRW5kID0gZmFsc2UsIGNoOwogICAgd2hpbGUgKGNoID0gc3RyZWFtLm5leHQoKSkgewogICAgICBpZiAoY2ggPT0gIi8iICYmIG1heWJlRW5kKSB7CiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgbWF5YmVFbmQgPSAoY2ggPT0gIioiKTsKICAgIH0KICAgIHJldHVybiAiY29tbWVudCI7CiAgfQoKICBmdW5jdGlvbiBDb250ZXh0KGluZGVudGVkLCBjb2x1bW4sIHR5cGUsIGFsaWduLCBwcmV2KSB7CiAgICB0aGlzLmluZGVudGVkID0gaW5kZW50ZWQ7CiAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjsKICAgIHRoaXMudHlwZSA9IHR5cGU7CiAgICB0aGlzLmFsaWduID0gYWxpZ247CiAgICB0aGlzLnByZXYgPSBwcmV2OwogIH0KICBmdW5jdGlvbiBwdXNoQ29udGV4dChzdGF0ZSwgY29sLCB0eXBlKSB7CiAgICByZXR1cm4gc3RhdGUuY29udGV4dCA9IG5ldyBDb250ZXh0KHN0YXRlLmluZGVudGVkLCBjb2wsIHR5cGUsIG51bGwsIHN0YXRlLmNvbnRleHQpOwogIH0KICBmdW5jdGlvbiBwb3BDb250ZXh0KHN0YXRlKSB7CiAgICB2YXIgdCA9IHN0YXRlLmNvbnRleHQudHlwZTsKICAgIGlmICh0ID09ICIpIiB8fCB0ID09ICJdIiB8fCB0ID09ICJ9IikKICAgICAgc3RhdGUuaW5kZW50ZWQgPSBzdGF0ZS5jb250ZXh0LmluZGVudGVkOwogICAgcmV0dXJuIHN0YXRlLmNvbnRleHQgPSBzdGF0ZS5jb250ZXh0LnByZXY7CiAgfQoKICAvLyBJbnRlcmZhY2UKCiAgcmV0dXJuIHsKICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKGJhc2Vjb2x1bW4pIHsKICAgICAgcmV0dXJuIHsKICAgICAgICB0b2tlbml6ZTogbnVsbCwKICAgICAgICBjb250ZXh0OiBuZXcgQ29udGV4dCgoYmFzZWNvbHVtbiB8fCAwKSAtIGluZGVudFVuaXQsIDAsICJ0b3AiLCBmYWxzZSksCiAgICAgICAgaW5kZW50ZWQ6IDAsCiAgICAgICAgc3RhcnRPZkxpbmU6IHRydWUKICAgICAgfTsKICAgIH0sCgogICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgdmFyIGN0eCA9IHN0YXRlLmNvbnRleHQ7CiAgICAgIGlmIChzdHJlYW0uc29sKCkpIHsKICAgICAgICBpZiAoY3R4LmFsaWduID09IG51bGwpIGN0eC5hbGlnbiA9IGZhbHNlOwogICAgICAgIHN0YXRlLmluZGVudGVkID0gc3RyZWFtLmluZGVudGF0aW9uKCk7CiAgICAgICAgc3RhdGUuc3RhcnRPZkxpbmUgPSB0cnVlOwogICAgICB9CiAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7CiAgICAgIGN1clB1bmMgPSBudWxsOwogICAgICB2YXIgc3R5bGUgPSAoc3RhdGUudG9rZW5pemUgfHwgdG9rZW5CYXNlKShzdHJlYW0sIHN0YXRlKTsKICAgICAgaWYgKHN0eWxlID09ICJjb21tZW50IiB8fCBzdHlsZSA9PSAibWV0YSIpIHJldHVybiBzdHlsZTsKICAgICAgaWYgKGN0eC5hbGlnbiA9PSBudWxsKSBjdHguYWxpZ24gPSB0cnVlOwoKICAgICAgaWYgKChjdXJQdW5jID09ICI7IiB8fCBjdXJQdW5jID09ICI6IikgJiYgY3R4LnR5cGUgPT0gInN0YXRlbWVudCIpIHBvcENvbnRleHQoc3RhdGUpOwogICAgICBlbHNlIGlmIChjdXJQdW5jID09ICJ7IikgcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbS5jb2x1bW4oKSwgIn0iKTsKICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSAiWyIpIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0uY29sdW1uKCksICJdIik7CiAgICAgIGVsc2UgaWYgKGN1clB1bmMgPT0gIigiKSBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLmNvbHVtbigpLCAiKSIpOwogICAgICBlbHNlIGlmIChjdXJQdW5jID09ICJ9IikgewogICAgICAgIHdoaWxlIChjdHgudHlwZSA9PSAic3RhdGVtZW50IikgY3R4ID0gcG9wQ29udGV4dChzdGF0ZSk7CiAgICAgICAgaWYgKGN0eC50eXBlID09ICJ9IikgY3R4ID0gcG9wQ29udGV4dChzdGF0ZSk7CiAgICAgICAgd2hpbGUgKGN0eC50eXBlID09ICJzdGF0ZW1lbnQiKSBjdHggPSBwb3BDb250ZXh0KHN0YXRlKTsKICAgICAgfQogICAgICBlbHNlIGlmIChjdXJQdW5jID09IGN0eC50eXBlKSBwb3BDb250ZXh0KHN0YXRlKTsKICAgICAgZWxzZSBpZiAoY3R4LnR5cGUgPT0gIn0iIHx8IGN0eC50eXBlID09ICJ0b3AiIHx8IChjdHgudHlwZSA9PSAic3RhdGVtZW50IiAmJiBjdXJQdW5jID09ICJuZXdzdGF0ZW1lbnQiKSkKICAgICAgICBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLmNvbHVtbigpLCAic3RhdGVtZW50Iik7CiAgICAgIHN0YXRlLnN0YXJ0T2ZMaW5lID0gZmFsc2U7CiAgICAgIHJldHVybiBzdHlsZTsKICAgIH0sCgogICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7CiAgICAgIGlmIChzdGF0ZS50b2tlbml6ZSAhPSB0b2tlbkJhc2UgJiYgc3RhdGUudG9rZW5pemUgIT0gbnVsbCkgcmV0dXJuIDA7CiAgICAgIHZhciBjdHggPSBzdGF0ZS5jb250ZXh0LCBmaXJzdENoYXIgPSB0ZXh0QWZ0ZXIgJiYgdGV4dEFmdGVyLmNoYXJBdCgwKTsKICAgICAgaWYgKGN0eC50eXBlID09ICJzdGF0ZW1lbnQiICYmIGZpcnN0Q2hhciA9PSAifSIpIGN0eCA9IGN0eC5wcmV2OwogICAgICB2YXIgY2xvc2luZyA9IGZpcnN0Q2hhciA9PSBjdHgudHlwZTsKICAgICAgaWYgKGN0eC50eXBlID09ICJzdGF0ZW1lbnQiKSByZXR1cm4gY3R4LmluZGVudGVkICsgKGZpcnN0Q2hhciA9PSAieyIgPyAwIDogaW5kZW50VW5pdCk7CiAgICAgIGVsc2UgaWYgKGN0eC5hbGlnbikgcmV0dXJuIGN0eC5jb2x1bW4gKyAoY2xvc2luZyA/IDAgOiAxKTsKICAgICAgZWxzZSByZXR1cm4gY3R4LmluZGVudGVkICsgKGNsb3NpbmcgPyAwIDogaW5kZW50VW5pdCk7CiAgICB9LAoKICAgIGVsZWN0cmljQ2hhcnM6ICJ7fSIKICB9Owp9KTsKCihmdW5jdGlvbigpIHsKICBmdW5jdGlvbiB3b3JkcyhzdHIpIHsKICAgIHZhciBvYmogPSB7fSwgd29yZHMgPSBzdHIuc3BsaXQoIiAiKTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd29yZHMubGVuZ3RoOyArK2kpIG9ialt3b3Jkc1tpXV0gPSB0cnVlOwogICAgcmV0dXJuIG9iajsKICB9CiAgdmFyIGNLZXl3b3JkcyA9ICJhdXRvIGlmIGJyZWFrIGludCBjYXNlIGxvbmcgY2hhciByZWdpc3RlciBjb250aW51ZSByZXR1cm4gZGVmYXVsdCBzaG9ydCBkbyBzaXplb2YgIiArCiAgICAiZG91YmxlIHN0YXRpYyBlbHNlIHN0cnVjdCBlbnRyeSBzd2l0Y2ggZXh0ZXJuIHR5cGVkZWYgZmxvYXQgdW5pb24gZm9yIHVuc2lnbmVkICIgKwogICAgImdvdG8gd2hpbGUgZW51bSB2b2lkIGNvbnN0IHNpZ25lZCB2b2xhdGlsZSI7CgogIGZ1bmN0aW9uIGNwcEhvb2soc3RyZWFtLCBzdGF0ZSkgewogICAgaWYgKCFzdGF0ZS5zdGFydE9mTGluZSkgcmV0dXJuIGZhbHNlOwogICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgcmV0dXJuICJtZXRhIjsKICB9CgogIC8vIEMjLXN0eWxlIHN0cmluZ3Mgd2hlcmUgIiIgZXNjYXBlcyBhIHF1b3RlLgogIGZ1bmN0aW9uIHRva2VuQXRTdHJpbmcoc3RyZWFtLCBzdGF0ZSkgewogICAgdmFyIG5leHQ7CiAgICB3aGlsZSAoKG5leHQgPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgIGlmIChuZXh0ID09ICciJyAmJiAhc3RyZWFtLmVhdCgnIicpKSB7CiAgICAgICAgc3RhdGUudG9rZW5pemUgPSBudWxsOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gInN0cmluZyI7CiAgfQoKICBDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1jc3JjIiwgewogICAgbmFtZTogImNsaWtlIiwKICAgIGtleXdvcmRzOiB3b3JkcyhjS2V5d29yZHMpLAogICAgYmxvY2tLZXl3b3Jkczogd29yZHMoImNhc2UgZG8gZWxzZSBmb3IgaWYgc3dpdGNoIHdoaWxlIHN0cnVjdCIpLAogICAgYXRvbXM6IHdvcmRzKCJudWxsIiksCiAgICBob29rczogeyIjIjogY3BwSG9va30KICB9KTsKICBDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1jKytzcmMiLCB7CiAgICBuYW1lOiAiY2xpa2UiLAogICAga2V5d29yZHM6IHdvcmRzKGNLZXl3b3JkcyArICIgYXNtIGR5bmFtaWNfY2FzdCBuYW1lc3BhY2UgcmVpbnRlcnByZXRfY2FzdCB0cnkgYm9vbCBleHBsaWNpdCBuZXcgIiArCiAgICAgICAgICAgICAgICAgICAgInN0YXRpY19jYXN0IHR5cGVpZCBjYXRjaCBvcGVyYXRvciB0ZW1wbGF0ZSB0eXBlbmFtZSBjbGFzcyBmcmllbmQgcHJpdmF0ZSAiICsKICAgICAgICAgICAgICAgICAgICAidGhpcyB1c2luZyBjb25zdF9jYXN0IGlubGluZSBwdWJsaWMgdGhyb3cgdmlydHVhbCBkZWxldGUgbXV0YWJsZSBwcm90ZWN0ZWQgIiArCiAgICAgICAgICAgICAgICAgICAgIndjaGFyX3QiKSwKICAgIGJsb2NrS2V5d29yZHM6IHdvcmRzKCJjYXRjaCBjbGFzcyBkbyBlbHNlIGZpbmFsbHkgZm9yIGlmIHN0cnVjdCBzd2l0Y2ggdHJ5IHdoaWxlIiksCiAgICBhdG9tczogd29yZHMoInRydWUgZmFsc2UgbnVsbCIpLAogICAgaG9va3M6IHsiIyI6IGNwcEhvb2t9CiAgfSk7CiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtamF2YSIsIHsKICAgIG5hbWU6ICJjbGlrZSIsCiAgICBrZXl3b3Jkczogd29yZHMoImFic3RyYWN0IGFzc2VydCBib29sZWFuIGJyZWFrIGJ5dGUgY2FzZSBjYXRjaCBjaGFyIGNsYXNzIGNvbnN0IGNvbnRpbnVlIGRlZmF1bHQgIiArIAogICAgICAgICAgICAgICAgICAgICJkbyBkb3VibGUgZWxzZSBlbnVtIGV4dGVuZHMgZmluYWwgZmluYWxseSBmbG9hdCBmb3IgZ290byBpZiBpbXBsZW1lbnRzIGltcG9ydCAiICsKICAgICAgICAgICAgICAgICAgICAiaW5zdGFuY2VvZiBpbnQgaW50ZXJmYWNlIGxvbmcgbmF0aXZlIG5ldyBwYWNrYWdlIHByaXZhdGUgcHJvdGVjdGVkIHB1YmxpYyAiICsKICAgICAgICAgICAgICAgICAgICAicmV0dXJuIHNob3J0IHN0YXRpYyBzdHJpY3RmcCBzdXBlciBzd2l0Y2ggc3luY2hyb25pemVkIHRoaXMgdGhyb3cgdGhyb3dzIHRyYW5zaWVudCAiICsKICAgICAgICAgICAgICAgICAgICAidHJ5IHZvaWQgdm9sYXRpbGUgd2hpbGUiKSwKICAgIGJsb2NrS2V5d29yZHM6IHdvcmRzKCJjYXRjaCBjbGFzcyBkbyBlbHNlIGZpbmFsbHkgZm9yIGlmIHN3aXRjaCB0cnkgd2hpbGUiKSwKICAgIGF0b21zOiB3b3JkcygidHJ1ZSBmYWxzZSBudWxsIiksCiAgICBob29rczogewogICAgICAiQCI6IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1wkX10vKTsKICAgICAgICByZXR1cm4gIm1ldGEiOwogICAgICB9CiAgICB9CiAgfSk7CiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtY3NoYXJwIiwgewogICAgbmFtZTogImNsaWtlIiwKICAgIGtleXdvcmRzOiB3b3JkcygiYWJzdHJhY3QgYXMgYmFzZSBib29sIGJyZWFrIGJ5dGUgY2FzZSBjYXRjaCBjaGFyIGNoZWNrZWQgY2xhc3MgY29uc3QgY29udGludWUgZGVjaW1hbCIgKyAKICAgICAgICAgICAgICAgICAgICAiIGRlZmF1bHQgZGVsZWdhdGUgZG8gZG91YmxlIGVsc2UgZW51bSBldmVudCBleHBsaWNpdCBleHRlcm4gZmluYWxseSBmaXhlZCBmbG9hdCBmb3IiICsgCiAgICAgICAgICAgICAgICAgICAgIiBmb3JlYWNoIGdvdG8gaWYgaW1wbGljaXQgaW4gaW50IGludGVyZmFjZSBpbnRlcm5hbCBpcyBsb2NrIGxvbmcgbmFtZXNwYWNlIG5ldyBvYmplY3QiICsgCiAgICAgICAgICAgICAgICAgICAgIiBvcGVyYXRvciBvdXQgb3ZlcnJpZGUgcGFyYW1zIHByaXZhdGUgcHJvdGVjdGVkIHB1YmxpYyByZWFkb25seSByZWYgcmV0dXJuIHNieXRlIHNlYWxlZCBzaG9ydCIgKyAKICAgICAgICAgICAgICAgICAgICAiIHNpemVvZiBzdGFja2FsbG9jIHN0YXRpYyBzdHJpbmcgc3RydWN0IHN3aXRjaCB0aGlzIHRocm93IHRyeSB0eXBlb2YgdWludCB1bG9uZyB1bmNoZWNrZWQiICsgCiAgICAgICAgICAgICAgICAgICAgIiB1bnNhZmUgdXNob3J0IHVzaW5nIHZpcnR1YWwgdm9pZCB2b2xhdGlsZSB3aGlsZSBhZGQgYWxpYXMgYXNjZW5kaW5nIGRlc2NlbmRpbmcgZHluYW1pYyBmcm9tIGdldCIgKyAKICAgICAgICAgICAgICAgICAgICAiIGdsb2JhbCBncm91cCBpbnRvIGpvaW4gbGV0IG9yZGVyYnkgcGFydGlhbCByZW1vdmUgc2VsZWN0IHNldCB2YWx1ZSB2YXIgeWllbGQiKSwKICAgIGJsb2NrS2V5d29yZHM6IHdvcmRzKCJjYXRjaCBjbGFzcyBkbyBlbHNlIGZpbmFsbHkgZm9yIGZvcmVhY2ggaWYgc3RydWN0IHN3aXRjaCB0cnkgd2hpbGUiKSwKICAgIGF0b21zOiB3b3JkcygidHJ1ZSBmYWxzZSBudWxsIiksCiAgICBob29rczogewogICAgICAiQCI6IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICBpZiAoc3RyZWFtLmVhdCgnIicpKSB7CiAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQXRTdHJpbmc7CiAgICAgICAgICByZXR1cm4gdG9rZW5BdFN0cmluZyhzdHJlYW0sIHN0YXRlKTsKICAgICAgICB9CiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcJF9dLyk7CiAgICAgICAgcmV0dXJuICJtZXRhIjsKICAgICAgfQogICAgfQogIH0pOwp9KCkpOwo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/clike/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEMtbGlrZSBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iY2xpa2UuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogICAgPHN0eWxlPi5Db2RlTWlycm9yIHtib3JkZXI6IDJweCBpbnNldCAjZGVlO308L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBDLWxpa2UgbW9kZTwvaDE+Cgo8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgovKiBDIGRlbW8gY29kZSAqLwoKI2luY2x1ZGUgPHptcS5oPgojaW5jbHVkZSA8cHRocmVhZC5oPgojaW5jbHVkZSA8c2VtYXBob3JlLmg+CiNpbmNsdWRlIDx0aW1lLmg+CiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8ZmNudGwuaD4KI2luY2x1ZGUgPG1hbGxvYy5oPgoKdHlwZWRlZiBzdHJ1Y3QgewogIHZvaWQqIGFyZ19zb2NrZXQ7CiAgem1xX21zZ190KiBhcmdfbXNnOwogIGNoYXIqIGFyZ19zdHJpbmc7CiAgdW5zaWduZWQgbG9uZyBhcmdfbGVuOwogIGludCBhcmdfaW50LCBhcmdfY29tbWFuZDsKCiAgaW50IHNpZ25hbF9mZDsKICBpbnQgcGFkOwogIHZvaWQqIGNvbnRleHQ7CiAgc2VtX3Qgc2VtOwp9IGFjbF96bXFfY29udGV4dDsKCiNkZWZpbmUgcChYKSAoY29udGV4dC0+YXJnXyMjWCkKCnZvaWQqIHptcV90aHJlYWQodm9pZCogY29udGV4dF9wb2ludGVyKSB7CiAgYWNsX3ptcV9jb250ZXh0KiBjb250ZXh0ID0gKGFjbF96bXFfY29udGV4dCopY29udGV4dF9wb2ludGVyOwogIGNoYXIgb2sgPSAnSycsIGVyciA9ICdYJzsKICBpbnQgcmVzOwoKICB3aGlsZSAoMSkgewogICAgd2hpbGUgKChyZXMgPSBzZW1fd2FpdCgmYW1wO2NvbnRleHQtPnNlbSkpID09IEVJTlRSKTsKICAgIGlmIChyZXMpIHt3cml0ZShjb250ZXh0LT5zaWduYWxfZmQsICZhbXA7ZXJyLCAxKTsgZ290byBjbGVhbnVwO30KICAgIHN3aXRjaChwKGNvbW1hbmQpKSB7CiAgICBjYXNlIDA6IGdvdG8gY2xlYW51cDsKICAgIGNhc2UgMTogcChzb2NrZXQpID0gem1xX3NvY2tldChjb250ZXh0LT5jb250ZXh0LCBwKGludCkpOyBicmVhazsKICAgIGNhc2UgMjogcChpbnQpID0gem1xX2Nsb3NlKHAoc29ja2V0KSk7IGJyZWFrOwogICAgY2FzZSAzOiBwKGludCkgPSB6bXFfYmluZChwKHNvY2tldCksIHAoc3RyaW5nKSk7IGJyZWFrOwogICAgY2FzZSA0OiBwKGludCkgPSB6bXFfY29ubmVjdChwKHNvY2tldCksIHAoc3RyaW5nKSk7IGJyZWFrOwogICAgY2FzZSA1OiBwKGludCkgPSB6bXFfZ2V0c29ja29wdChwKHNvY2tldCksIHAoaW50KSwgKHZvaWQqKXAoc3RyaW5nKSwgJmFtcDtwKGxlbikpOyBicmVhazsKICAgIGNhc2UgNjogcChpbnQpID0gem1xX3NldHNvY2tvcHQocChzb2NrZXQpLCBwKGludCksICh2b2lkKilwKHN0cmluZyksIHAobGVuKSk7IGJyZWFrOwogICAgY2FzZSA3OiBwKGludCkgPSB6bXFfc2VuZChwKHNvY2tldCksIHAobXNnKSwgcChpbnQpKTsgYnJlYWs7CiAgICBjYXNlIDg6IHAoaW50KSA9IHptcV9yZWN2KHAoc29ja2V0KSwgcChtc2cpLCBwKGludCkpOyBicmVhazsKICAgIGNhc2UgOTogcChpbnQpID0gem1xX3BvbGwocChzb2NrZXQpLCBwKGludCksIHAobGVuKSk7IGJyZWFrOwogICAgfQogICAgcChjb21tYW5kKSA9IGVycm5vOwogICAgd3JpdGUoY29udGV4dC0+c2lnbmFsX2ZkLCAmYW1wO29rLCAxKTsKICB9CiBjbGVhbnVwOgogIGNsb3NlKGNvbnRleHQtPnNpZ25hbF9mZCk7CiAgZnJlZShjb250ZXh0X3BvaW50ZXIpOwogIHJldHVybiAwOwp9Cgp2b2lkKiB6bXFfdGhyZWFkX2luaXQodm9pZCogem1xX2NvbnRleHQsIGludCBzaWduYWxfZmQpIHsKICBhY2xfem1xX2NvbnRleHQqIGNvbnRleHQgPSBtYWxsb2Moc2l6ZW9mKGFjbF96bXFfY29udGV4dCkpOwogIHB0aHJlYWRfdCB0aHJlYWQ7CgogIGNvbnRleHQtPmNvbnRleHQgPSB6bXFfY29udGV4dDsKICBjb250ZXh0LT5zaWduYWxfZmQgPSBzaWduYWxfZmQ7CiAgc2VtX2luaXQoJmFtcDtjb250ZXh0LT5zZW0sIDEsIDApOwogIHB0aHJlYWRfY3JlYXRlKCZhbXA7dGhyZWFkLCAwLCAmYW1wO3ptcV90aHJlYWQsIGNvbnRleHQpOwogIHB0aHJlYWRfZGV0YWNoKHRocmVhZCk7CiAgcmV0dXJuIGNvbnRleHQ7Cn0KPC90ZXh0YXJlYT48L2Zvcm0+CgogICAgPHNjcmlwdD4KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgICAgICBtYXRjaEJyYWNrZXRzOiB0cnVlLAogICAgICAgIG1vZGU6ICJ0ZXh0L3gtY3NyYyIKICAgICAgfSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD5TaW1wbGUgbW9kZSB0aGF0IHRyaWVzIHRvIGhhbmRsZSBDLWxpa2UgbGFuZ3VhZ2VzIGFzIHdlbGwgYXMgaXQKICAgIGNhbi4gVGFrZXMgdHdvIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyczogPGNvZGU+a2V5d29yZHM8L2NvZGU+LCBhbgogICAgb2JqZWN0IHdob3NlIHByb3BlcnR5IG5hbWVzIGFyZSB0aGUga2V5d29yZHMgaW4gdGhlIGxhbmd1YWdlLAogICAgYW5kIDxjb2RlPnVzZUNQUDwvY29kZT4sIHdoaWNoIGRldGVybWluZXMgd2hldGhlciBDIHByZXByb2Nlc3NvcgogICAgZGlyZWN0aXZlcyBhcmUgcmVjb2duaXplZC48L3A+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQveC1jc3JjPC9jb2RlPgogICAgKEMgY29kZSksIDxjb2RlPnRleHQveC1jKytzcmM8L2NvZGU+IChDKysKICAgIGNvZGUpLCA8Y29kZT50ZXh0L3gtamF2YTwvY29kZT4gKEphdmEKICAgIGNvZGUpLjwvcD4KICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/clojure/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/clojure/clojure.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIEF1dGhvcjogSGFucyBFbmdlbAogKiBCcmFuY2hlZCBmcm9tIENvZGVNaXJyb3IncyBTY2hlbWUgbW9kZSAoYnkgS29oIFppIEhhbiwgYmFzZWQgb24gaW1wbGVtZW50YXRpb24gYnkgS29oIFppIENodW4pCiAqLwpDb2RlTWlycm9yLmRlZmluZU1vZGUoImNsb2p1cmUiLCBmdW5jdGlvbiAoY29uZmlnLCBtb2RlKSB7CiAgICB2YXIgQlVJTFRJTiA9ICJidWlsdGluIiwgQ09NTUVOVCA9ICJjb21tZW50IiwgU1RSSU5HID0gInN0cmluZyIsIFRBRyA9ICJ0YWciLAogICAgICAgIEFUT00gPSAiYXRvbSIsIE5VTUJFUiA9ICJudW1iZXIiLCBCUkFDS0VUID0gImJyYWNrZXQiLCBLRVlXT1JEPSJrZXl3b3JkIjsKICAgIHZhciBJTkRFTlRfV09SRF9TS0lQID0gMiwgS0VZV09SRFNfU0tJUCA9IDE7CgogICAgZnVuY3Rpb24gbWFrZUtleXdvcmRzKHN0cikgewogICAgICAgIHZhciBvYmogPSB7fSwgd29yZHMgPSBzdHIuc3BsaXQoIiAiKTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHdvcmRzLmxlbmd0aDsgKytpKSBvYmpbd29yZHNbaV1dID0gdHJ1ZTsKICAgICAgICByZXR1cm4gb2JqOwogICAgfQoKICAgIHZhciBhdG9tcyA9IG1ha2VLZXl3b3JkcygidHJ1ZSBmYWxzZSBuaWwiKTsKCiAgICB2YXIga2V5d29yZHMgPSBtYWtlS2V5d29yZHMoCiAgICAgICAgLy8gQ29udHJvbCBzdHJ1Y3R1cmVzCiAgICAgICAgImRlZm4gZGVmbi0gZGVmIGRlZi0gZGVmb25jZSBkZWZtdWx0aSBkZWZtZXRob2QgZGVmbWFjcm8gZGVmc3RydWN0IGRlZnR5cGUgZGVmcHJvdG9jb2wgZGVmcmVjb3JkIGRlZnRlc3Qgc2xpY2UgZGVmYWxpYXMgZGVmaGludGVkIGRlZm1hY3JvLSBkZWZuLW1lbW8gZGVmbmsgZGVmbmsgZGVmb25jZS0gZGVmdW5ib3VuZCBkZWZ1bmJvdW5kLSBkZWZ2YXIgZGVmdmFyLSBsZXQgbGV0Zm4gZG8gY2FzZSBjb25kIGNvbmRwIGZvciBsb29wIHJlY3VyIHdoZW4gd2hlbi1ub3Qgd2hlbi1sZXQgd2hlbi1maXJzdCBpZiBpZi1sZXQgaWYtbm90IC4gLi4gLT4gLT4+IGRvdG8gYW5kIG9yIGRvc3luYyBkb3NlcSBkb3RpbWVzIGRvcnVuIGRvYWxsIGxvYWQgaW1wb3J0IHVuaW1wb3J0IG5zIGluLW5zIHJlZmVyIHRyeSBjYXRjaCBmaW5hbGx5IHRocm93IHdpdGgtb3BlbiB3aXRoLWxvY2FsLXZhcnMgYmluZGluZyBnZW4tY2xhc3MgZ2VuLWFuZC1sb2FkLWNsYXNzIGdlbi1hbmQtc2F2ZS1jbGFzcyBoYW5kbGVyLWNhc2UgaGFuZGxlIiArCgogICAgICAgIC8vIEJ1aWx0LWlucwogICAgICAgICIqICoxICoyICozICphZ2VudCogKmFsbG93LXVucmVzb2x2ZWQtdmFycyogKmFzc2VydCAqY2xvanVyZS12ZXJzaW9uKiAqY29tbWFuZC1saW5lLWFyZ3MqICpjb21waWxlLWZpbGVzKiAqY29tcGlsZS1wYXRoKiAqZSAqZXJyKiAqZmlsZSogKmZsdXNoLW9uLW5ld2xpbmUqICppbiogKm1hY3JvLW1ldGEqICptYXRoLWNvbnRleHQqICpucyogKm91dCogKnByaW50LWR1cCogKnByaW50LWxlbmd0aCogKnByaW50LWxldmVsKiAqcHJpbnQtbWV0YSogKnByaW50LXJlYWRhYmx5KiAqcmVhZC1ldmFsKiAqc291cmNlLXBhdGgqICp1c2UtY29udGV4dC1jbGFzc2xvYWRlciogKndhcm4tb24tcmVmbGVjdGlvbiogKyAtIC8gPCA8PSA9ID09ID4gPj0gYWNjZXNzb3IgYWNsb25lIGFnZW50IGFnZW50LWVycm9ycyBhZ2V0IGFsZW5ndGggYWxpYXMgYWxsLW5zIGFsdGVyIGFsdGVyLW1ldGEhIGFsdGVyLXZhci1yb290IGFtYXAgYW5jZXN0b3JzIGFuZCBhcHBseSBhcmVkdWNlIGFycmF5LW1hcCBhc2V0IGFzZXQtYm9vbGVhbiBhc2V0LWJ5dGUgYXNldC1jaGFyIGFzZXQtZG91YmxlIGFzZXQtZmxvYXQgYXNldC1pbnQgYXNldC1sb25nIGFzZXQtc2hvcnQgYXNzZXJ0IGFzc29jIGFzc29jISBhc3NvYy1pbiBhc3NvY2lhdGl2ZT8gYXRvbSBhd2FpdCBhd2FpdC1mb3IgYXdhaXQxIGJhc2VzIGJlYW4gYmlnZGVjIGJpZ2ludCBiaW5kaW5nIGJpdC1hbmQgYml0LWFuZC1ub3QgYml0LWNsZWFyIGJpdC1mbGlwIGJpdC1ub3QgYml0LW9yIGJpdC1zZXQgYml0LXNoaWZ0LWxlZnQgYml0LXNoaWZ0LXJpZ2h0IGJpdC10ZXN0IGJpdC14b3IgYm9vbGVhbiBib29sZWFuLWFycmF5IGJvb2xlYW5zIGJvdW5kLWZuIGJvdW5kLWZuKiBidXRsYXN0IGJ5dGUgYnl0ZS1hcnJheSBieXRlcyBjYXNlIGNhc3QgY2hhciBjaGFyLWFycmF5IGNoYXItZXNjYXBlLXN0cmluZyBjaGFyLW5hbWUtc3RyaW5nIGNoYXI/IGNoYXJzIGNodW5rIGNodW5rLWFwcGVuZCBjaHVuay1idWZmZXIgY2h1bmstY29ucyBjaHVuay1maXJzdCBjaHVuay1uZXh0IGNodW5rLXJlc3QgY2h1bmtlZC1zZXE/IGNsYXNzIGNsYXNzPyBjbGVhci1hZ2VudC1lcnJvcnMgY2xvanVyZS12ZXJzaW9uIGNvbGw/IGNvbW1lbnQgY29tbXV0ZSBjb21wIGNvbXBhcmF0b3IgY29tcGFyZSBjb21wYXJlLWFuZC1zZXQhIGNvbXBpbGUgY29tcGxlbWVudCBjb25jYXQgY29uZCBjb25kcCBjb25qIGNvbmohIGNvbnMgY29uc3RhbnRseSBjb25zdHJ1Y3QtcHJveHkgY29udGFpbnM/IGNvdW50IGNvdW50ZWQ/IGNyZWF0ZS1ucyBjcmVhdGUtc3RydWN0IGN5Y2xlIGRlYyBkZWNpbWFsPyBkZWNsYXJlIGRlZmlubGluZSBkZWZtYWNybyBkZWZtZXRob2QgZGVmbXVsdGkgZGVmbiBkZWZuLSBkZWZvbmNlIGRlZnN0cnVjdCBkZWxheSBkZWxheT8gZGVsaXZlciBkZXJlZiBkZXJpdmUgZGVzY2VuZGFudHMgZGVzdHJ1Y3R1cmUgZGlzaiBkaXNqISBkaXNzb2MgZGlzc29jISBkaXN0aW5jdCBkaXN0aW5jdD8gZG9hbGwgZG9jIGRvcnVuIGRvc2VxIGRvc3luYyBkb3RpbWVzIGRvdG8gZG91YmxlIGRvdWJsZS1hcnJheSBkb3VibGVzIGRyb3AgZHJvcC1sYXN0IGRyb3Atd2hpbGUgZW1wdHkgZW1wdHk/IGVuc3VyZSBlbnVtZXJhdGlvbi1zZXEgZXZhbCBldmVuPyBldmVyeT8gZXh0ZW5kIGV4dGVuZC1wcm90b2NvbCBleHRlbmQtdHlwZSBleHRlbmRzPyBleHRlbmRlcnMgZmFsc2U/IGZmaXJzdCBmaWxlLXNlcSBmaWx0ZXIgZmluZCBmaW5kLWRvYyBmaW5kLW5zIGZpbmQtdmFyIGZpcnN0IGZsb2F0IGZsb2F0LWFycmF5IGZsb2F0PyBmbG9hdHMgZmx1c2ggZm4gZm4/IGZuZXh0IGZvciBmb3JjZSBmb3JtYXQgZnV0dXJlIGZ1dHVyZS1jYWxsIGZ1dHVyZS1jYW5jZWwgZnV0dXJlLWNhbmNlbGxlZD8gZnV0dXJlLWRvbmU/IGZ1dHVyZT8gZ2VuLWNsYXNzIGdlbi1pbnRlcmZhY2UgZ2Vuc3ltIGdldCBnZXQtaW4gZ2V0LW1ldGhvZCBnZXQtcHJveHktY2xhc3MgZ2V0LXRocmVhZC1iaW5kaW5ncyBnZXQtdmFsaWRhdG9yIGhhc2ggaGFzaC1tYXAgaGFzaC1zZXQgaWRlbnRpY2FsPyBpZGVudGl0eSBpZi1sZXQgaWYtbm90IGlmbj8gaW1wb3J0IGluLW5zIGluYyBpbml0LXByb3h5IGluc3RhbmNlPyBpbnQgaW50LWFycmF5IGludGVnZXI/IGludGVybGVhdmUgaW50ZXJuIGludGVycG9zZSBpbnRvIGludG8tYXJyYXkgaW50cyBpbyEgaXNhPyBpdGVyYXRlIGl0ZXJhdG9yLXNlcSBqdXh0IGtleSBrZXlzIGtleXdvcmQga2V5d29yZD8gbGFzdCBsYXp5LWNhdCBsYXp5LXNlcSBsZXQgbGV0Zm4gbGluZS1zZXEgbGlzdCBsaXN0KiBsaXN0PyBsb2FkIGxvYWQtZmlsZSBsb2FkLXJlYWRlciBsb2FkLXN0cmluZyBsb2FkZWQtbGlicyBsb2NraW5nIGxvbmcgbG9uZy1hcnJheSBsb25ncyBsb29wIG1hY3JvZXhwYW5kIG1hY3JvZXhwYW5kLTEgbWFrZS1hcnJheSBtYWtlLWhpZXJhcmNoeSBtYXAgbWFwPyBtYXBjYXQgbWF4IG1heC1rZXkgbWVtZm4gbWVtb2l6ZSBtZXJnZSBtZXJnZS13aXRoIG1ldGEgbWV0aG9kLXNpZyBtZXRob2RzIG1pbiBtaW4ta2V5IG1vZCBuYW1lIG5hbWVzcGFjZSBuZWc/IG5ld2xpbmUgbmV4dCBuZmlyc3QgbmlsPyBubmV4dCBub3Qgbm90LWFueT8gbm90LWVtcHR5IG5vdC1ldmVyeT8gbm90PSBucyBucy1hbGlhc2VzIG5zLWltcG9ydHMgbnMtaW50ZXJucyBucy1tYXAgbnMtbmFtZSBucy1wdWJsaWNzIG5zLXJlZmVycyBucy1yZXNvbHZlIG5zLXVuYWxpYXMgbnMtdW5tYXAgbnRoIG50aG5leHQgbnVtIG51bWJlcj8gb2RkPyBvciBwYXJlbnRzIHBhcnRpYWwgcGFydGl0aW9uIHBjYWxscyBwZWVrIHBlcnNpc3RlbnQhIHBtYXAgcG9wIHBvcCEgcG9wLXRocmVhZC1iaW5kaW5ncyBwb3M/IHByIHByLXN0ciBwcmVmZXItbWV0aG9kIHByZWZlcnMgcHJpbWl0aXZlcy1jbGFzc25hbWVzIHByaW50IHByaW50LWN0b3IgcHJpbnQtZG9jIHByaW50LWR1cCBwcmludC1tZXRob2QgcHJpbnQtbmFtZXNwYWNlLWRvYyBwcmludC1zaW1wbGUgcHJpbnQtc3BlY2lhbC1kb2MgcHJpbnQtc3RyIHByaW50ZiBwcmludGxuIHByaW50bG4tc3RyIHBybiBwcm4tc3RyIHByb21pc2UgcHJveHkgcHJveHktY2FsbC13aXRoLXN1cGVyIHByb3h5LW1hcHBpbmdzIHByb3h5LW5hbWUgcHJveHktc3VwZXIgcHVzaC10aHJlYWQtYmluZGluZ3MgcHZhbHVlcyBxdW90IHJhbmQgcmFuZC1pbnQgcmFuZ2UgcmF0aW8/IHJhdGlvbmFsPyByYXRpb25hbGl6ZSByZS1maW5kIHJlLWdyb3VwcyByZS1tYXRjaGVyIHJlLW1hdGNoZXMgcmUtcGF0dGVybiByZS1zZXEgcmVhZCByZWFkLWxpbmUgcmVhZC1zdHJpbmcgcmVpZnkgcmVkdWNlIHJlZiByZWYtaGlzdG9yeS1jb3VudCByZWYtbWF4LWhpc3RvcnkgcmVmLW1pbi1oaXN0b3J5IHJlZi1zZXQgcmVmZXIgcmVmZXItY2xvanVyZSByZWxlYXNlLXBlbmRpbmctc2VuZHMgcmVtIHJlbW92ZSByZW1vdmUtbWV0aG9kIHJlbW92ZS1ucyByZXBlYXQgcmVwZWF0ZWRseSByZXBsYWNlIHJlcGxpY2F0ZSByZXF1aXJlIHJlc2V0ISByZXNldC1tZXRhISByZXNvbHZlIHJlc3QgcmVzdWx0c2V0LXNlcSByZXZlcnNlIHJldmVyc2libGU/IHJzZXEgcnN1YnNlcSBzYXRpc2ZpZXM/IHNlY29uZCBzZWxlY3Qta2V5cyBzZW5kIHNlbmQtb2ZmIHNlcSBzZXE/IHNlcXVlIHNlcXVlbmNlIHNlcXVlbnRpYWw/IHNldCBzZXQtdmFsaWRhdG9yISBzZXQ/IHNob3J0IHNob3J0LWFycmF5IHNob3J0cyBzaHV0ZG93bi1hZ2VudHMgc2x1cnAgc29tZSBzb3J0IHNvcnQtYnkgc29ydGVkLW1hcCBzb3J0ZWQtbWFwLWJ5IHNvcnRlZC1zZXQgc29ydGVkLXNldC1ieSBzb3J0ZWQ/IHNwZWNpYWwtZm9ybS1hbmNob3Igc3BlY2lhbC1zeW1ib2w/IHNwbGl0LWF0IHNwbGl0LXdpdGggc3RyIHN0cmVhbT8gc3RyaW5nPyBzdHJ1Y3Qgc3RydWN0LW1hcCBzdWJzIHN1YnNlcSBzdWJ2ZWMgc3VwZXJzIHN3YXAhIHN5bWJvbCBzeW1ib2w/IHN5bmMgc3ludGF4LXN5bWJvbC1hbmNob3IgdGFrZSB0YWtlLWxhc3QgdGFrZS1udGggdGFrZS13aGlsZSB0ZXN0IHRoZS1ucyB0aW1lIHRvLWFycmF5IHRvLWFycmF5LTJkIHRyYW1wb2xpbmUgdHJhbnNpZW50IHRyZWUtc2VxIHRydWU/IHR5cGUgdW5jaGVja2VkLWFkZCB1bmNoZWNrZWQtZGVjIHVuY2hlY2tlZC1kaXZpZGUgdW5jaGVja2VkLWluYyB1bmNoZWNrZWQtbXVsdGlwbHkgdW5jaGVja2VkLW5lZ2F0ZSB1bmNoZWNrZWQtcmVtYWluZGVyIHVuY2hlY2tlZC1zdWJ0cmFjdCB1bmRlcml2ZSB1bnF1b3RlIHVucXVvdGUtc3BsaWNpbmcgdXBkYXRlLWluIHVwZGF0ZS1wcm94eSB1c2UgdmFsIHZhbHMgdmFyLWdldCB2YXItc2V0IHZhcj8gdmFyeS1tZXRhIHZlYyB2ZWN0b3IgdmVjdG9yPyB3aGVuIHdoZW4tZmlyc3Qgd2hlbi1sZXQgd2hlbi1ub3Qgd2hpbGUgd2l0aC1iaW5kaW5ncyB3aXRoLWJpbmRpbmdzKiB3aXRoLWluLXN0ciB3aXRoLWxvYWRpbmctY29udGV4dCB3aXRoLWxvY2FsLXZhcnMgd2l0aC1tZXRhIHdpdGgtb3BlbiB3aXRoLW91dC1zdHIgd2l0aC1wcmVjaXNpb24geG1sLXNlcSIpOwoKICAgIHZhciBpbmRlbnRLZXlzID0gbWFrZUtleXdvcmRzKAogICAgICAgIC8vIEJ1aWx0LWlucwogICAgICAgICJucyBmbiBkZWYgZGVmbiBkZWZtZXRob2QgYm91bmQtZm4gaWYgaWYtbm90IGNhc2UgY29uZHAgd2hlbiB3aGlsZSB3aGVuLW5vdCB3aGVuLWZpcnN0IGRvIGZ1dHVyZSBjb21tZW50IGRvdG8gbG9ja2luZyBwcm94eSB3aXRoLW9wZW4gd2l0aC1wcmVjaXNpb24gcmVpZnkgZGVmdHlwZSBkZWZyZWNvcmQgZGVmcHJvdG9jb2wgZXh0ZW5kIGV4dGVuZC1wcm90b2NvbCBleHRlbmQtdHlwZSB0cnkgY2F0Y2giICsKCiAgICAgICAgLy8gQmluZGluZyBmb3JtcwogICAgICAgICJsZXQgbGV0Zm4gYmluZGluZyBsb29wIGZvciBkb3NlcSBkb3RpbWVzIHdoZW4tbGV0IGlmLWxldCIgKwoKICAgICAgICAvLyBEYXRhIHN0cnVjdHVyZXMKICAgICAgICAiZGVmc3RydWN0IHN0cnVjdC1tYXAgYXNzb2MiICsKCiAgICAgICAgLy8gY2xvanVyZS50ZXN0CiAgICAgICAgInRlc3RpbmcgZGVmdGVzdCIgKwoKICAgICAgICAvLyBjb250cmliCiAgICAgICAgImhhbmRsZXItY2FzZSBoYW5kbGUgZG90cmFjZSBkZWZ0cmFjZSIpOwoKICAgIHZhciB0ZXN0cyA9IHsKICAgICAgICBkaWdpdDogL1xkLywKICAgICAgICBkaWdpdF9vcl9jb2xvbjogL1tcZDpdLywKICAgICAgICBoZXg6IC9bMC05YS1mQS1GXS8sCiAgICAgICAgc2lnbjogL1srLV0vLAogICAgICAgIGV4cG9uZW50OiAvW2VFXS8sCiAgICAgICAga2V5d29yZF9jaGFyOiAvW15cc1woXFtcO1wpXF1dLywKICAgICAgICBiYXNpYzogL1tcd1wkX1wtXS8sCiAgICAgICAgbGFuZ19rZXl3b3JkOiAvW1x3KishXC1fPzpcL10vCiAgICB9OwoKICAgIGZ1bmN0aW9uIHN0YXRlU3RhY2soaW5kZW50LCB0eXBlLCBwcmV2KSB7IC8vIHJlcHJlc2VudHMgYSBzdGF0ZSBzdGFjayBvYmplY3QKICAgICAgICB0aGlzLmluZGVudCA9IGluZGVudDsKICAgICAgICB0aGlzLnR5cGUgPSB0eXBlOwogICAgICAgIHRoaXMucHJldiA9IHByZXY7CiAgICB9CgogICAgZnVuY3Rpb24gcHVzaFN0YWNrKHN0YXRlLCBpbmRlbnQsIHR5cGUpIHsKICAgICAgICBzdGF0ZS5pbmRlbnRTdGFjayA9IG5ldyBzdGF0ZVN0YWNrKGluZGVudCwgdHlwZSwgc3RhdGUuaW5kZW50U3RhY2spOwogICAgfQoKICAgIGZ1bmN0aW9uIHBvcFN0YWNrKHN0YXRlKSB7CiAgICAgICAgc3RhdGUuaW5kZW50U3RhY2sgPSBzdGF0ZS5pbmRlbnRTdGFjay5wcmV2OwogICAgfQoKICAgIGZ1bmN0aW9uIGlzTnVtYmVyKGNoLCBzdHJlYW0pewogICAgICAgIC8vIGhleAogICAgICAgIGlmICggY2ggPT09ICcwJyAmJiAneCcgPT0gc3RyZWFtLnBlZWsoKS50b0xvd2VyQ2FzZSgpICkgewogICAgICAgICAgICBzdHJlYW0uZWF0KCd4Jyk7CiAgICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZSh0ZXN0cy5oZXgpOwogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIC8vIGxlYWRpbmcgc2lnbgogICAgICAgIGlmICggY2ggPT0gJysnIHx8IGNoID09ICctJyApIHsKICAgICAgICAgIHN0cmVhbS5lYXQodGVzdHMuc2lnbik7CiAgICAgICAgICBjaCA9IHN0cmVhbS5uZXh0KCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoIHRlc3RzLmRpZ2l0LnRlc3QoY2gpICkgewogICAgICAgICAgICBzdHJlYW0uZWF0KGNoKTsKICAgICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKHRlc3RzLmRpZ2l0KTsKCiAgICAgICAgICAgIGlmICggJy4nID09IHN0cmVhbS5wZWVrKCkgKSB7CiAgICAgICAgICAgICAgICBzdHJlYW0uZWF0KCcuJyk7CiAgICAgICAgICAgICAgICBzdHJlYW0uZWF0V2hpbGUodGVzdHMuZGlnaXQpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoICdlJyA9PSBzdHJlYW0ucGVlaygpLnRvTG93ZXJDYXNlKCkgKSB7CiAgICAgICAgICAgICAgICBzdHJlYW0uZWF0KHRlc3RzLmV4cG9uZW50KTsKICAgICAgICAgICAgICAgIHN0cmVhbS5lYXQodGVzdHMuc2lnbik7CiAgICAgICAgICAgICAgICBzdHJlYW0uZWF0V2hpbGUodGVzdHMuZGlnaXQpOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICByZXR1cm4gewogICAgICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIGluZGVudFN0YWNrOiBudWxsLAogICAgICAgICAgICAgICAgaW5kZW50YXRpb246IDAsCiAgICAgICAgICAgICAgICBtb2RlOiBmYWxzZSwKICAgICAgICAgICAgfTsKICAgICAgICB9LAoKICAgICAgICB0b2tlbjogZnVuY3Rpb24gKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICAgICAgaWYgKHN0YXRlLmluZGVudFN0YWNrID09IG51bGwgJiYgc3RyZWFtLnNvbCgpKSB7CiAgICAgICAgICAgICAgICAvLyB1cGRhdGUgaW5kZW50YXRpb24sIGJ1dCBvbmx5IGlmIGluZGVudFN0YWNrIGlzIGVtcHR5CiAgICAgICAgICAgICAgICBzdGF0ZS5pbmRlbnRhdGlvbiA9IHN0cmVhbS5pbmRlbnRhdGlvbigpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBza2lwIHNwYWNlcwogICAgICAgICAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciByZXR1cm5UeXBlID0gbnVsbDsKCiAgICAgICAgICAgIHN3aXRjaChzdGF0ZS5tb2RlKXsKICAgICAgICAgICAgICAgIGNhc2UgInN0cmluZyI6IC8vIG11bHRpLWxpbmUgc3RyaW5nIHBhcnNpbmcgbW9kZQogICAgICAgICAgICAgICAgICAgIHZhciBuZXh0LCBlc2NhcGVkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChuZXh0ID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCA9PSAiXCIiICYmICFlc2NhcGVkKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkICYmIG5leHQgPT0gIlxcIjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IFNUUklORzsgLy8gY29udGludWUgb24gaW4gc3RyaW5nIG1vZGUKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGRlZmF1bHQ6IC8vIGRlZmF1bHQgcGFyc2luZyBtb2RlCiAgICAgICAgICAgICAgICAgICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09ICJcIiIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9ICJzdHJpbmciOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gU1RSSU5HOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gIiciICYmICEoIHRlc3RzLmRpZ2l0X29yX2NvbG9uLnRlc3Qoc3RyZWFtLnBlZWsoKSkgKSkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gQVRPTTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICI7IikgeyAvLyBjb21tZW50CiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTsgLy8gcmVzdCBvZiB0aGUgbGluZSBpcyBhIGNvbW1lbnQKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IENPTU1FTlQ7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc051bWJlcihjaCxzdHJlYW0pKXsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IE5VTUJFUjsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICIoIiB8fCBjaCA9PSAiWyIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGtleVdvcmQgPSAnJzsgdmFyIGluZGVudFRlbXAgPSBzdHJlYW0uY29sdW1uKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgICAgICAgICAgICBFaXRoZXIKICAgICAgICAgICAgICAgICAgICAgICAgKGluZGVudC13b3JkIC4uCiAgICAgICAgICAgICAgICAgICAgICAgIChub24taW5kZW50LXdvcmQgLi4KICAgICAgICAgICAgICAgICAgICAgICAgKDtzb21ldGhpbmcgZWxzZSwgYnJhY2tldCwgZXRjLgogICAgICAgICAgICAgICAgICAgICAgICAqLwoKICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChsZXR0ZXIgPSBzdHJlYW0uZWF0KHRlc3RzLmtleXdvcmRfY2hhcikpICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleVdvcmQgKz0gbGV0dGVyOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5V29yZC5sZW5ndGggPiAwICYmIGluZGVudEtleXMucHJvcGVydHlJc0VudW1lcmFibGUoa2V5V29yZCkpIHsgLy8gaW5kZW50LXdvcmQKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoU3RhY2soc3RhdGUsIGluZGVudFRlbXAgKyBJTkRFTlRfV09SRF9TS0lQLCBjaCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7IC8vIG5vbi1pbmRlbnQgd29yZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgY29udGludWUgZWF0aW5nIHRoZSBzcGFjZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5lYXRTcGFjZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5lb2woKSB8fCBzdHJlYW0ucGVlaygpID09ICI7IikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vdGhpbmcgc2lnbmlmaWNhbnQgYWZ0ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSByZXN0YXJ0IGluZGVudGF0aW9uIDEgc3BhY2UgYWZ0ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoU3RhY2soc3RhdGUsIGluZGVudFRlbXAgKyAxLCBjaCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2hTdGFjayhzdGF0ZSwgaW5kZW50VGVtcCArIHN0cmVhbS5jdXJyZW50KCkubGVuZ3RoLCBjaCk7IC8vIGVsc2Ugd2UgbWF0Y2gKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uYmFja1VwKHN0cmVhbS5jdXJyZW50KCkubGVuZ3RoIC0gMSk7IC8vIHVuZG8gYWxsIHRoZSBlYXRpbmcKCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblR5cGUgPSBCUkFDS0VUOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gIikiIHx8IGNoID09ICJdIikgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gQlJBQ0tFVDsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLmluZGVudFN0YWNrICE9IG51bGwgJiYgc3RhdGUuaW5kZW50U3RhY2sudHlwZSA9PSAoY2ggPT0gIikiID8gIigiIDogIlsiKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wU3RhY2soc3RhdGUpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggY2ggPT0gIjoiICkgewogICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uZWF0V2hpbGUodGVzdHMubGFuZ19rZXl3b3JkKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRBRzsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uZWF0V2hpbGUodGVzdHMuYmFzaWMpOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtleXdvcmRzICYmIGtleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKHN0cmVhbS5jdXJyZW50KCkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gQlVJTFRJTjsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggYXRvbXMgJiYgYXRvbXMucHJvcGVydHlJc0VudW1lcmFibGUoc3RyZWFtLmN1cnJlbnQoKSkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gQVRPTTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHJldHVyblR5cGUgPSBudWxsOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJldHVyblR5cGU7CiAgICAgICAgfSwKCiAgICAgICAgaW5kZW50OiBmdW5jdGlvbiAoc3RhdGUsIHRleHRBZnRlcikgewogICAgICAgICAgICBpZiAoc3RhdGUuaW5kZW50U3RhY2sgPT0gbnVsbCkgcmV0dXJuIHN0YXRlLmluZGVudGF0aW9uOwogICAgICAgICAgICByZXR1cm4gc3RhdGUuaW5kZW50U3RhY2suaW5kZW50OwogICAgICAgIH0KICAgIH07Cn0pOwoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtY2xvanVyZSIsICJjbG9qdXJlIik7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/clojure/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IENsb2p1cmUgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9ImNsb2p1cmUuanMiPjwvc2NyaXB0PgogICAgPHN0eWxlPi5Db2RlTWlycm9yIHtiYWNrZ3JvdW5kOiAjZjhmOGY4O308L3N0eWxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBDbG9qdXJlIG1vZGU8L2gxPgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KOyBDb253YXkncyBHYW1lIG9mIExpZmUsIGJhc2VkIG9uIHRoZSB3b3JrIG9mOgo7OyBMYXVyZW50IFBldGl0IGh0dHBzOi8vZ2lzdC5naXRodWIuY29tLzEyMDAzNDMKOzsgQ2hyaXN0b3BoZSBHcmFuZCBodHRwOi8vY2xqLW1lLmNncmFuZC5uZXQvMjAxMS8wOC8xOS9jb253YXlzLWdhbWUtb2YtbGlmZQoKKG5zIF57OmRvYyAiQ29ud2F5J3MgR2FtZSBvZiBMaWZlLiJ9CiBnYW1lLW9mLWxpZmUpCgo7OyBDb3JlIGdhbWUgb2YgbGlmZSdzIGFsZ29yaXRobSBmdW5jdGlvbnMKCihkZWZuIG5laWdoYm91cnMgCiAgIkdpdmVuIGEgY2VsbCdzIGNvb3JkaW5hdGVzLCByZXR1cm5zIHRoZSBjb29yZGluYXRlcyBvZiBpdHMgbmVpZ2hib3Vycy4iCiAgW1t4IHldXQogIChmb3IgW2R4IFstMSAwIDFdIGR5IChpZiAoemVybz8gZHgpIFstMSAxXSBbLTEgMCAxXSldCiAgICBbKCsgZHggeCkgKCsgZHkgeSldKSkKCihkZWZuIHN0ZXAgCiAgIkdpdmVuIGEgc2V0IG9mIGxpdmluZyBjZWxscywgY29tcHV0ZXMgdGhlIG5ldyBzZXQgb2YgbGl2aW5nIGNlbGxzLiIKICBbY2VsbHNdCiAgKHNldCAoZm9yIFtbY2VsbCBuXSAoZnJlcXVlbmNpZXMgKG1hcGNhdCBuZWlnaGJvdXJzIGNlbGxzKSkKICAgICAgICAgICAgIDp3aGVuIChvciAoPSBuIDMpIChhbmQgKD0gbiAyKSAoY2VsbHMgY2VsbCkpKV0KICAgICAgICAgY2VsbCkpKQoKOzsgVXRpbGl0eSBtZXRob2RzIGZvciBkaXNwbGF5aW5nIGdhbWUgb24gYSB0ZXh0IHRlcm1pbmFsCgooZGVmbiBwcmludC1ib2FyZCAKICAiUHJpbnRzIGEgYm9hcmQgb24gKm91dCosIHJlcHJlc2VudGluZyBhIHN0ZXAgaW4gdGhlIGdhbWUuIgogIFtib2FyZCB3IGhdCiAgKGRvc2VxIFt4IChyYW5nZSAoaW5jIHcpKSB5IChyYW5nZSAoaW5jIGgpKV0KICAgIChpZiAoPSB5IDApIChwcmludCAiXG4iKSkgCiAgICAocHJpbnQgKGlmIChib2FyZCBbeCB5XSkgIltYXSIgIiAuICIpKSkpCgooZGVmbiBkaXNwbGF5LWdyaWRzIAogICJQcmludHMgYSBzcXVlbmNlIG9mIGJvYXJkcyBvbiAqb3V0KiwgcmVwcmVzZW50aW5nIHNldmVyYWwgc3RlcHMuIgogIFtncmlkcyB3IGhdCiAgKGRvc2VxIFtib2FyZCBncmlkc10KICAgIChwcmludC1ib2FyZCBib2FyZCB3IGgpCiAgICAocHJpbnQgIlxuIikpKQoKOzsgTGF1bmNoZXMgYW4gZXhhbXBsZSBib2FyZAoKKGRlZiAKICBeezpkb2MgImJvYXJkIHJlcHJlc2VudHMgdGhlIGluaXRpYWwgc2V0IG9mIGxpdmluZyBjZWxscyJ9CiAgIGJvYXJkICN7WzIgMV0gWzIgMl0gWzIgM119KQoKKGRpc3BsYXktZ3JpZHMgKHRha2UgMyAoaXRlcmF0ZSBzdGVwIGJvYXJkKSkgNSA1KSA8L3RleHRhcmVhPjwvZm9ybT4KICAgIDxzY3JpcHQ+CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7fSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD48c3Ryb25nPk1JTUUgdHlwZXMgZGVmaW5lZDo8L3N0cm9uZz4gPGNvZGU+dGV4dC94LWNsb2p1cmU8L2NvZGU+LjwvcD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/coffeescript/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/coffeescript/coffeescript.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIExpbmsgdG8gdGhlIHByb2plY3QncyBHaXRIdWIgcGFnZToKICogaHR0cHM6Ly9naXRodWIuY29tL3BpY2toYXJkdC9jb2ZmZWVzY3JpcHQtY29kZW1pcnJvci1tb2RlCiAqLwpDb2RlTWlycm9yLmRlZmluZU1vZGUoJ2NvZmZlZXNjcmlwdCcsIGZ1bmN0aW9uKGNvbmYpIHsKICAgIHZhciBFUlJPUkNMQVNTID0gJ2Vycm9yJzsKCiAgICBmdW5jdGlvbiB3b3JkUmVnZXhwKHdvcmRzKSB7CiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoIl4oKCIgKyB3b3Jkcy5qb2luKCIpfCgiKSArICIpKVxcYiIpOwogICAgfQoKICAgIHZhciBzaW5nbGVPcGVyYXRvcnMgPSBuZXcgUmVnRXhwKCJeW1xcK1xcLVxcKi8lJnxcXF5+PD4hXD9dIik7CiAgICB2YXIgc2luZ2xlRGVsaW1pdGVycyA9IG5ldyBSZWdFeHAoJ15bXFwoXFwpXFxbXFxdXFx7XFx9QCw6YD07XFwuXScpOwogICAgdmFyIGRvdWJsZU9wZXJhdG9ycyA9IG5ldyBSZWdFeHAoIl4oKFwtPil8KFw9Pil8KFxcK1xcKyl8KFxcK1xcPSl8KFxcLVxcLSl8KFxcLVxcPSl8KFxcKlxcKil8KFxcKlxcPSl8KFxcL1xcLyl8KFxcL1xcPSl8KD09KXwoIT0pfCg8PSl8KD49KXwoPD4pfCg8PCl8KD4+KXwoLy8pKSIpOwogICAgdmFyIGRvdWJsZURlbGltaXRlcnMgPSBuZXcgUmVnRXhwKCJeKChcXC5cXC4pfChcXCs9KXwoXFwtPSl8KFxcKj0pfCglPSl8KC89KXwoJj0pfChcXHw9KXwoXFxePSkpIik7CiAgICB2YXIgdHJpcGxlRGVsaW1pdGVycyA9IG5ldyBSZWdFeHAoIl4oKFxcLlxcLlxcLil8KC8vPSl8KD4+PSl8KDw8PSl8KFxcKlxcKj0pKSIpOwogICAgdmFyIGlkZW50aWZpZXJzID0gbmV3IFJlZ0V4cCgiXltfQS1aYS16JF1bX0EtWmEteiQwLTldKiIpOwoKICAgIHZhciB3b3JkT3BlcmF0b3JzID0gd29yZFJlZ2V4cChbJ2FuZCcsICdvcicsICdub3QnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXMnLCAnaXNudCcsICdpbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbnN0YW5jZW9mJywgJ3R5cGVvZiddKTsKICAgIHZhciBpbmRlbnRLZXl3b3JkcyA9IFsnZm9yJywgJ3doaWxlJywgJ2xvb3AnLCAnaWYnLCAndW5sZXNzJywgJ2Vsc2UnLAogICAgICAgICAgICAgICAgICAgICAgICAgICdzd2l0Y2gnLCAndHJ5JywgJ2NhdGNoJywgJ2ZpbmFsbHknLCAnY2xhc3MnXTsKICAgIHZhciBjb21tb25LZXl3b3JkcyA9IFsnYnJlYWsnLCAnYnknLCAnY29udGludWUnLCAnZGVidWdnZXInLCAnZGVsZXRlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAnZG8nLCAnaW4nLCAnb2YnLCAnbmV3JywgJ3JldHVybicsICd0aGVuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAndGhpcycsICd0aHJvdycsICd3aGVuJywgJ3VudGlsJ107CgogICAgdmFyIGtleXdvcmRzID0gd29yZFJlZ2V4cChpbmRlbnRLZXl3b3Jkcy5jb25jYXQoY29tbW9uS2V5d29yZHMpKTsKCiAgICBpbmRlbnRLZXl3b3JkcyA9IHdvcmRSZWdleHAoaW5kZW50S2V5d29yZHMpOwoKCiAgICB2YXIgc3RyaW5nUHJlZml4ZXMgPSBuZXcgUmVnRXhwKCJeKCd7M318XCJ7M318WydcIl0pIik7CiAgICB2YXIgcmVnZXhQcmVmaXhlcyA9IG5ldyBSZWdFeHAoIl4oL3szfXwvKSIpOwogICAgdmFyIGNvbW1vbkNvbnN0YW50cyA9IFsnSW5maW5pdHknLCAnTmFOJywgJ3VuZGVmaW5lZCcsICdudWxsJywgJ3RydWUnLCAnZmFsc2UnLCAnb24nLCAnb2ZmJywgJ3llcycsICdubyddOwogICAgdmFyIGNvbnN0YW50cyA9IHdvcmRSZWdleHAoY29tbW9uQ29uc3RhbnRzKTsKCiAgICAvLyBUb2tlbml6ZXJzCiAgICBmdW5jdGlvbiB0b2tlbkJhc2Uoc3RyZWFtLCBzdGF0ZSkgewogICAgICAgIC8vIEhhbmRsZSBzY29wZSBjaGFuZ2VzCiAgICAgICAgaWYgKHN0cmVhbS5zb2woKSkgewogICAgICAgICAgICB2YXIgc2NvcGVPZmZzZXQgPSBzdGF0ZS5zY29wZXNbMF0ub2Zmc2V0OwogICAgICAgICAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHsKICAgICAgICAgICAgICAgIHZhciBsaW5lT2Zmc2V0ID0gc3RyZWFtLmluZGVudGF0aW9uKCk7CiAgICAgICAgICAgICAgICBpZiAobGluZU9mZnNldCA+IHNjb3BlT2Zmc2V0KSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdpbmRlbnQnOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsaW5lT2Zmc2V0IDwgc2NvcGVPZmZzZXQpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2RlZGVudCc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGlmIChzY29wZU9mZnNldCA+IDApIHsKICAgICAgICAgICAgICAgICAgICBkZWRlbnQoc3RyZWFtLCBzdGF0ZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgdmFyIGNoID0gc3RyZWFtLnBlZWsoKTsKCiAgICAgICAgLy8gSGFuZGxlIG11bHRpIGxpbmUgY29tbWVudHMKICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKCIjIyMiKSkgewogICAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGxvbmdDb21tZW50OwogICAgICAgICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICAgICAgfQoKICAgICAgICAvLyBTaW5nbGUgbGluZSBjb21tZW50CiAgICAgICAgaWYgKGNoID09PSAnIycpIHsKICAgICAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICAgICAgICByZXR1cm4gJ2NvbW1lbnQnOwogICAgICAgIH0KCiAgICAgICAgLy8gSGFuZGxlIG51bWJlciBsaXRlcmFscwogICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL14tP1swLTlcLl0vLCBmYWxzZSkpIHsKICAgICAgICAgICAgdmFyIGZsb2F0TGl0ZXJhbCA9IGZhbHNlOwogICAgICAgICAgICAvLyBGbG9hdHMKICAgICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXi0/XGQqXC5cZCsoZVtcK1wtXT9cZCspPy9pKSkgewogICAgICAgICAgICAgIGZsb2F0TGl0ZXJhbCA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXi0/XGQrXC5cZCovKSkgewogICAgICAgICAgICAgIGZsb2F0TGl0ZXJhbCA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXi0/XC5cZCsvKSkgewogICAgICAgICAgICAgIGZsb2F0TGl0ZXJhbCA9IHRydWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChmbG9hdExpdGVyYWwpIHsKICAgICAgICAgICAgICAgIC8vIHByZXZlbnQgZnJvbSBnZXR0aW5nIGV4dHJhIC4gb24gMS4uCiAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLnBlZWsoKSA9PSAiLiIpewogICAgICAgICAgICAgICAgICAgIHN0cmVhbS5iYWNrVXAoMSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gJ251bWJlcic7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gSW50ZWdlcnMKICAgICAgICAgICAgdmFyIGludExpdGVyYWwgPSBmYWxzZTsKICAgICAgICAgICAgLy8gSGV4CiAgICAgICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL14tPzB4WzAtOWEtZl0rL2kpKSB7CiAgICAgICAgICAgICAgaW50TGl0ZXJhbCA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gRGVjaW1hbAogICAgICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eLT9bMS05XVxkKihlW1wrXC1dP1xkKyk/LykpIHsKICAgICAgICAgICAgICAgIGludExpdGVyYWwgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIFplcm8gYnkgaXRzZWxmIHdpdGggbm8gb3RoZXIgcGllY2Ugb2YgbnVtYmVyLgogICAgICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eLT8wKD8hW1xkeF0pL2kpKSB7CiAgICAgICAgICAgICAgaW50TGl0ZXJhbCA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGludExpdGVyYWwpIHsKICAgICAgICAgICAgICAgIHJldHVybiAnbnVtYmVyJzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gSGFuZGxlIHN0cmluZ3MKICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKHN0cmluZ1ByZWZpeGVzKSkgewogICAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuRmFjdG9yeShzdHJlYW0uY3VycmVudCgpLCAnc3RyaW5nJyk7CiAgICAgICAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgICAgICB9CiAgICAgICAgLy8gSGFuZGxlIHJlZ2V4IGxpdGVyYWxzCiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChyZWdleFByZWZpeGVzKSkgewogICAgICAgICAgICBpZiAoc3RyZWFtLmN1cnJlbnQoKSAhPSAnLycgfHwgc3RyZWFtLm1hdGNoKC9eLipcLy8sIGZhbHNlKSkgeyAvLyBwcmV2ZW50IGhpZ2hsaWdodCBvZiBkaXZpc2lvbgogICAgICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkZhY3Rvcnkoc3RyZWFtLmN1cnJlbnQoKSwgJ3N0cmluZy0yJyk7CiAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBzdHJlYW0uYmFja1VwKDEpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBIYW5kbGUgb3BlcmF0b3JzIGFuZCBkZWxpbWl0ZXJzCiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCh0cmlwbGVEZWxpbWl0ZXJzKSB8fCBzdHJlYW0ubWF0Y2goZG91YmxlRGVsaW1pdGVycykpIHsKICAgICAgICAgICAgcmV0dXJuICdwdW5jdHVhdGlvbic7CiAgICAgICAgfQogICAgICAgIGlmIChzdHJlYW0ubWF0Y2goZG91YmxlT3BlcmF0b3JzKQogICAgICAgICAgICB8fCBzdHJlYW0ubWF0Y2goc2luZ2xlT3BlcmF0b3JzKQogICAgICAgICAgICB8fCBzdHJlYW0ubWF0Y2god29yZE9wZXJhdG9ycykpIHsKICAgICAgICAgICAgcmV0dXJuICdvcGVyYXRvcic7CiAgICAgICAgfQogICAgICAgIGlmIChzdHJlYW0ubWF0Y2goc2luZ2xlRGVsaW1pdGVycykpIHsKICAgICAgICAgICAgcmV0dXJuICdwdW5jdHVhdGlvbic7CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKGNvbnN0YW50cykpIHsKICAgICAgICAgICAgcmV0dXJuICdhdG9tJzsKICAgICAgICB9CgogICAgICAgIGlmIChzdHJlYW0ubWF0Y2goa2V5d29yZHMpKSB7CiAgICAgICAgICAgIHJldHVybiAna2V5d29yZCc7CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKGlkZW50aWZpZXJzKSkgewogICAgICAgICAgICByZXR1cm4gJ3ZhcmlhYmxlJzsKICAgICAgICB9CgogICAgICAgIC8vIEhhbmRsZSBub24tZGV0ZWN0ZWQgaXRlbXMKICAgICAgICBzdHJlYW0ubmV4dCgpOwogICAgICAgIHJldHVybiBFUlJPUkNMQVNTOwogICAgfQoKICAgIGZ1bmN0aW9uIHRva2VuRmFjdG9yeShkZWxpbWl0ZXIsIG91dGNsYXNzKSB7CiAgICAgICAgdmFyIHNpbmdsZWxpbmUgPSBkZWxpbWl0ZXIubGVuZ3RoID09IDE7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHRva2VuU3RyaW5nKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICAgICAgd2hpbGUgKCFzdHJlYW0uZW9sKCkpIHsKICAgICAgICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW14nIlwvXFxdLyk7CiAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLmVhdCgnXFwnKSkgewogICAgICAgICAgICAgICAgICAgIHN0cmVhbS5uZXh0KCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHNpbmdsZWxpbmUgJiYgc3RyZWFtLmVvbCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvdXRjbGFzczsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5tYXRjaChkZWxpbWl0ZXIpKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG91dGNsYXNzOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBzdHJlYW0uZWF0KC9bJyJcL10vKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoc2luZ2xlbGluZSkgewogICAgICAgICAgICAgICAgaWYgKGNvbmYubW9kZS5zaW5nbGVMaW5lU3RyaW5nRXJyb3JzKSB7CiAgICAgICAgICAgICAgICAgICAgb3V0Y2xhc3MgPSBFUlJPUkNMQVNTCiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBvdXRjbGFzczsKICAgICAgICB9OwogICAgfQoKICAgIGZ1bmN0aW9uIGxvbmdDb21tZW50KHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICB3aGlsZSAoIXN0cmVhbS5lb2woKSkgewogICAgICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1teI10vKTsKICAgICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgiIyMjIikpIHsKICAgICAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKCIjIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiAiY29tbWVudCIKICAgIH0KCiAgICBmdW5jdGlvbiBpbmRlbnQoc3RyZWFtLCBzdGF0ZSwgdHlwZSkgewogICAgICAgIHR5cGUgPSB0eXBlIHx8ICdjb2ZmZWUnOwogICAgICAgIHZhciBpbmRlbnRVbml0ID0gMDsKICAgICAgICBpZiAodHlwZSA9PT0gJ2NvZmZlZScpIHsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGF0ZS5zY29wZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5zY29wZXNbaV0udHlwZSA9PT0gJ2NvZmZlZScpIHsKICAgICAgICAgICAgICAgICAgICBpbmRlbnRVbml0ID0gc3RhdGUuc2NvcGVzW2ldLm9mZnNldCArIGNvbmYuaW5kZW50VW5pdDsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGluZGVudFVuaXQgPSBzdHJlYW0uY29sdW1uKCkgKyBzdHJlYW0uY3VycmVudCgpLmxlbmd0aDsKICAgICAgICB9CiAgICAgICAgc3RhdGUuc2NvcGVzLnVuc2hpZnQoewogICAgICAgICAgICBvZmZzZXQ6IGluZGVudFVuaXQsCiAgICAgICAgICAgIHR5cGU6IHR5cGUKICAgICAgICB9KTsKICAgIH0KCiAgICBmdW5jdGlvbiBkZWRlbnQoc3RyZWFtLCBzdGF0ZSkgewogICAgICAgIGlmIChzdGF0ZS5zY29wZXMubGVuZ3RoID09IDEpIHJldHVybjsKICAgICAgICBpZiAoc3RhdGUuc2NvcGVzWzBdLnR5cGUgPT09ICdjb2ZmZWUnKSB7CiAgICAgICAgICAgIHZhciBfaW5kZW50ID0gc3RyZWFtLmluZGVudGF0aW9uKCk7CiAgICAgICAgICAgIHZhciBfaW5kZW50X2luZGV4ID0gLTE7CiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhdGUuc2NvcGVzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICAgICBpZiAoX2luZGVudCA9PT0gc3RhdGUuc2NvcGVzW2ldLm9mZnNldCkgewogICAgICAgICAgICAgICAgICAgIF9pbmRlbnRfaW5kZXggPSBpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChfaW5kZW50X2luZGV4ID09PSAtMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgd2hpbGUgKHN0YXRlLnNjb3Blc1swXS5vZmZzZXQgIT09IF9pbmRlbnQpIHsKICAgICAgICAgICAgICAgIHN0YXRlLnNjb3Blcy5zaGlmdCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBmYWxzZQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHN0YXRlLnNjb3Blcy5zaGlmdCgpOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIHRva2VuTGV4ZXIoc3RyZWFtLCBzdGF0ZSkgewogICAgICAgIHZhciBzdHlsZSA9IHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwogICAgICAgIHZhciBjdXJyZW50ID0gc3RyZWFtLmN1cnJlbnQoKTsKCiAgICAgICAgLy8gSGFuZGxlICcuJyBjb25uZWN0ZWQgaWRlbnRpZmllcnMKICAgICAgICBpZiAoY3VycmVudCA9PT0gJy4nKSB7CiAgICAgICAgICAgIHN0eWxlID0gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICAgICAgICAgIGN1cnJlbnQgPSBzdHJlYW0uY3VycmVudCgpOwogICAgICAgICAgICBpZiAoc3R5bGUgPT09ICd2YXJpYWJsZScpIHsKICAgICAgICAgICAgICAgIHJldHVybiAndmFyaWFibGUnOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIEVSUk9SQ0xBU1M7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIEhhbmRsZSBwcm9wZXJ0aWVzCiAgICAgICAgaWYgKGN1cnJlbnQgPT09ICdAJykgewogICAgICAgICAgICBzdHJlYW0uZWF0KCdAJyk7CiAgICAgICAgICAgIHJldHVybiAna2V5d29yZCc7CiAgICAgICAgfQoKICAgICAgICAvLyBIYW5kbGUgc2NvcGUgY2hhbmdlcy4KICAgICAgICBpZiAoY3VycmVudCA9PT0gJ3JldHVybicpIHsKICAgICAgICAgICAgc3RhdGUuZGVkZW50ICs9IDE7CiAgICAgICAgfQogICAgICAgIGlmICgoKGN1cnJlbnQgPT09ICctPicgfHwgY3VycmVudCA9PT0gJz0+JykgJiYKICAgICAgICAgICAgICAgICAgIXN0YXRlLmxhbWJkYSAmJgogICAgICAgICAgICAgICAgICBzdGF0ZS5zY29wZXNbMF0udHlwZSA9PSAnY29mZmVlJyAmJgogICAgICAgICAgICAgICAgICBzdHJlYW0ucGVlaygpID09PSAnJykKICAgICAgICAgICAgICAgfHwgc3R5bGUgPT09ICdpbmRlbnQnKSB7CiAgICAgICAgICAgIGluZGVudChzdHJlYW0sIHN0YXRlKTsKICAgICAgICB9CiAgICAgICAgdmFyIGRlbGltaXRlcl9pbmRleCA9ICdbKHsnLmluZGV4T2YoY3VycmVudCk7CiAgICAgICAgaWYgKGRlbGltaXRlcl9pbmRleCAhPT0gLTEpIHsKICAgICAgICAgICAgaW5kZW50KHN0cmVhbSwgc3RhdGUsICddKX0nLnNsaWNlKGRlbGltaXRlcl9pbmRleCwgZGVsaW1pdGVyX2luZGV4KzEpKTsKICAgICAgICB9CiAgICAgICAgaWYgKGluZGVudEtleXdvcmRzLmV4ZWMoY3VycmVudCkpewogICAgICAgICAgICBpbmRlbnQoc3RyZWFtLCBzdGF0ZSk7CiAgICAgICAgfQogICAgICAgIGlmIChjdXJyZW50ID09ICd0aGVuJyl7CiAgICAgICAgICAgIGRlZGVudChzdHJlYW0sIHN0YXRlKTsKICAgICAgICB9CgoKICAgICAgICBpZiAoc3R5bGUgPT09ICdkZWRlbnQnKSB7CiAgICAgICAgICAgIGlmIChkZWRlbnQoc3RyZWFtLCBzdGF0ZSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUkNMQVNTOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGRlbGltaXRlcl9pbmRleCA9ICddKX0nLmluZGV4T2YoY3VycmVudCk7CiAgICAgICAgaWYgKGRlbGltaXRlcl9pbmRleCAhPT0gLTEpIHsKICAgICAgICAgICAgaWYgKGRlZGVudChzdHJlYW0sIHN0YXRlKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIEVSUk9SQ0xBU1M7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHN0YXRlLmRlZGVudCA+IDAgJiYgc3RyZWFtLmVvbCgpICYmIHN0YXRlLnNjb3Blc1swXS50eXBlID09ICdjb2ZmZWUnKSB7CiAgICAgICAgICAgIGlmIChzdGF0ZS5zY29wZXMubGVuZ3RoID4gMSkgc3RhdGUuc2NvcGVzLnNoaWZ0KCk7CiAgICAgICAgICAgIHN0YXRlLmRlZGVudCAtPSAxOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHN0eWxlOwogICAgfQoKICAgIHZhciBleHRlcm5hbCA9IHsKICAgICAgICBzdGFydFN0YXRlOiBmdW5jdGlvbihiYXNlY29sdW1uKSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgdG9rZW5pemU6IHRva2VuQmFzZSwKICAgICAgICAgICAgICBzY29wZXM6IFt7b2Zmc2V0OmJhc2Vjb2x1bW4gfHwgMCwgdHlwZTonY29mZmVlJ31dLAogICAgICAgICAgICAgIGxhc3RUb2tlbjogbnVsbCwKICAgICAgICAgICAgICBsYW1iZGE6IGZhbHNlLAogICAgICAgICAgICAgIGRlZGVudDogMAogICAgICAgICAgfTsKICAgICAgICB9LAoKICAgICAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICAgICAgICB2YXIgc3R5bGUgPSB0b2tlbkxleGVyKHN0cmVhbSwgc3RhdGUpOwoKICAgICAgICAgICAgc3RhdGUubGFzdFRva2VuID0ge3N0eWxlOnN0eWxlLCBjb250ZW50OiBzdHJlYW0uY3VycmVudCgpfTsKCiAgICAgICAgICAgIGlmIChzdHJlYW0uZW9sKCkgJiYgc3RyZWFtLmxhbWJkYSkgewogICAgICAgICAgICAgICAgc3RhdGUubGFtYmRhID0gZmFsc2U7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBzdHlsZTsKICAgICAgICB9LAoKICAgICAgICBpbmRlbnQ6IGZ1bmN0aW9uKHN0YXRlLCB0ZXh0QWZ0ZXIpIHsKICAgICAgICAgICAgaWYgKHN0YXRlLnRva2VuaXplICE9IHRva2VuQmFzZSkgewogICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBzdGF0ZS5zY29wZXNbMF0ub2Zmc2V0OwogICAgICAgIH0KCiAgICB9OwogICAgcmV0dXJuIGV4dGVybmFsOwp9KTsKCkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgndGV4dC94LWNvZmZlZXNjcmlwdCcsICdjb2ZmZWVzY3JpcHQnKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/coffeescript/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IENvZmZlZVNjcmlwdCBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iY29mZmVlc2NyaXB0LmpzIj48L3NjcmlwdD4KICAgIDxzdHlsZT4uQ29kZU1pcnJvciB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkIHNpbHZlcjsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHNpbHZlcjt9PC9zdHlsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogQ29mZmVlU2NyaXB0IG1vZGU8L2gxPgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KIyBDb2ZmZWVTY3JpcHQgbW9kZSBmb3IgQ29kZU1pcnJvcgojIENvcHlyaWdodCAoYykgMjAxMSBKZWZmIFBpY2toYXJkdCwgcmVsZWFzZWQgdW5kZXIKIyB0aGUgTUlUIExpY2Vuc2UuCiMKIyBNb2RpZmllZCBmcm9tIHRoZSBQeXRob24gQ29kZU1pcnJvciBtb2RlLCB3aGljaCBhbHNvIGlzIAojIHVuZGVyIHRoZSBNSVQgTGljZW5zZSBDb3B5cmlnaHQgKGMpIDIwMTAgVGltb3RoeSBGYXJyZWxsLgojCiMgVGhlIGZvbGxvd2luZyBzY3JpcHQsIFVuZGVyc2NvcmUuY29mZmVlLCBpcyB1c2VkIHRvIAojIGRlbW9uc3RyYXRlIENvZmZlZVNjcmlwdCBtb2RlIGZvciBDb2RlTWlycm9yLgojCiMgVG8gZG93bmxvYWQgQ29mZmVlU2NyaXB0IG1vZGUgZm9yIENvZGVNaXJyb3IsIGdvIHRvOgojIGh0dHBzOi8vZ2l0aHViLmNvbS9waWNraGFyZHQvY29mZmVlc2NyaXB0LWNvZGVtaXJyb3ItbW9kZQoKIyAqKlVuZGVyc2NvcmUuY29mZmVlCiMgKGMpIDIwMTEgSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIEluYy4qKgojIFVuZGVyc2NvcmUgaXMgZnJlZWx5IGRpc3RyaWJ1dGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQojIFtNSVQgbGljZW5zZV0oaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NSVRfTGljZW5zZSkuCiMgUG9ydGlvbnMgb2YgVW5kZXJzY29yZSBhcmUgaW5zcGlyZWQgYnkgb3IgYm9ycm93ZWQgZnJvbQojIFtQcm90b3R5cGUuanNdKGh0dHA6Ly9wcm90b3R5cGVqcy5vcmcvYXBpKSwgT2xpdmVyIFN0ZWVsZSdzCiMgW0Z1bmN0aW9uYWxdKGh0dHA6Ly9vc3RlZWxlLmNvbSksIGFuZCBKb2huIFJlc2lnJ3MKIyBbTWljcm8tVGVtcGxhdGluZ10oaHR0cDovL2Vqb2huLm9yZykuCiMgRm9yIGFsbCBkZXRhaWxzIGFuZCBkb2N1bWVudGF0aW9uOgojIGh0dHA6Ly9kb2N1bWVudGNsb3VkLmdpdGh1Yi5jb20vdW5kZXJzY29yZS8KCgojIEJhc2VsaW5lIHNldHVwCiMgLS0tLS0tLS0tLS0tLS0KCiMgRXN0YWJsaXNoIHRoZSByb290IG9iamVjdCwgYHdpbmRvd2AgaW4gdGhlIGJyb3dzZXIsIG9yIGBnbG9iYWxgIG9uIHRoZSBzZXJ2ZXIuCnJvb3QgPSB0aGlzCgoKIyBTYXZlIHRoZSBwcmV2aW91cyB2YWx1ZSBvZiB0aGUgYF9gIHZhcmlhYmxlLgpwcmV2aW91c1VuZGVyc2NvcmUgPSByb290Ll8KCgojIEVzdGFibGlzaCB0aGUgb2JqZWN0IHRoYXQgZ2V0cyB0aHJvd24gdG8gYnJlYWsgb3V0IG9mIGEgbG9vcCBpdGVyYXRpb24uCiMgYFN0b3BJdGVyYXRpb25gIGlzIFNPUCBvbiBNb3ppbGxhLgpicmVha2VyID0gaWYgdHlwZW9mKFN0b3BJdGVyYXRpb24pIGlzICd1bmRlZmluZWQnIHRoZW4gJ19fYnJlYWtfXycgZWxzZSBTdG9wSXRlcmF0aW9uCgoKIyBIZWxwZXIgZnVuY3Rpb24gdG8gZXNjYXBlICoqUmVnRXhwKiogY29udGVudHMsIGJlY2F1c2UgSlMgZG9lc24ndCBoYXZlIG9uZS4KZXNjYXBlUmVnRXhwID0gKHN0cmluZykgLT4gc3RyaW5nLnJlcGxhY2UoLyhbLiorP14ke30oKXxbXF1cL1xcXSkvZywgJ1xcJDEnKQoKCiMgU2F2ZSBieXRlcyBpbiB0aGUgbWluaWZpZWQgKGJ1dCBub3QgZ3ppcHBlZCkgdmVyc2lvbjoKQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZQpPYmpQcm90byA9IE9iamVjdC5wcm90b3R5cGUKCgojIENyZWF0ZSBxdWljayByZWZlcmVuY2UgdmFyaWFibGVzIGZvciBzcGVlZCBhY2Nlc3MgdG8gY29yZSBwcm90b3R5cGVzLgpzbGljZSA9IEFycmF5UHJvdG8uc2xpY2UKdW5zaGlmdCA9IEFycmF5UHJvdG8udW5zaGlmdAp0b1N0cmluZyA9IE9ialByb3RvLnRvU3RyaW5nCmhhc093blByb3BlcnR5ID0gT2JqUHJvdG8uaGFzT3duUHJvcGVydHkKcHJvcGVydHlJc0VudW1lcmFibGUgPSBPYmpQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZQoKCiMgQWxsICoqRUNNQTUqKiBuYXRpdmUgaW1wbGVtZW50YXRpb25zIHdlIGhvcGUgdG8gdXNlIGFyZSBkZWNsYXJlZCBoZXJlLgpuYXRpdmVGb3JFYWNoID0gQXJyYXlQcm90by5mb3JFYWNoCm5hdGl2ZU1hcCA9IEFycmF5UHJvdG8ubWFwCm5hdGl2ZVJlZHVjZSA9IEFycmF5UHJvdG8ucmVkdWNlCm5hdGl2ZVJlZHVjZVJpZ2h0ID0gQXJyYXlQcm90by5yZWR1Y2VSaWdodApuYXRpdmVGaWx0ZXIgPSBBcnJheVByb3RvLmZpbHRlcgpuYXRpdmVFdmVyeSA9IEFycmF5UHJvdG8uZXZlcnkKbmF0aXZlU29tZSA9IEFycmF5UHJvdG8uc29tZQpuYXRpdmVJbmRleE9mID0gQXJyYXlQcm90by5pbmRleE9mCm5hdGl2ZUxhc3RJbmRleE9mID0gQXJyYXlQcm90by5sYXN0SW5kZXhPZgpuYXRpdmVJc0FycmF5ID0gQXJyYXkuaXNBcnJheQpuYXRpdmVLZXlzID0gT2JqZWN0LmtleXMKCgojIENyZWF0ZSBhIHNhZmUgcmVmZXJlbmNlIHRvIHRoZSBVbmRlcnNjb3JlIG9iamVjdCBmb3IgdXNlIGJlbG93LgpfID0gKG9iaikgLT4gbmV3IHdyYXBwZXIob2JqKQoKCiMgRXhwb3J0IHRoZSBVbmRlcnNjb3JlIG9iamVjdCBmb3IgKipDb21tb25KUyoqLgppZiB0eXBlb2YoZXhwb3J0cykgIT0gJ3VuZGVmaW5lZCcgdGhlbiBleHBvcnRzLl8gPSBfCgoKIyBFeHBvcnQgVW5kZXJzY29yZSB0byBnbG9iYWwgc2NvcGUuCnJvb3QuXyA9IF8KCgojIEN1cnJlbnQgdmVyc2lvbi4KXy5WRVJTSU9OID0gJzEuMS4wJwoKCiMgQ29sbGVjdGlvbiBGdW5jdGlvbnMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLQoKIyBUaGUgY29ybmVyc3RvbmUsIGFuICoqZWFjaCoqIGltcGxlbWVudGF0aW9uLgojIEhhbmRsZXMgb2JqZWN0cyBpbXBsZW1lbnRpbmcgKipmb3JFYWNoKiosIGFycmF5cywgYW5kIHJhdyBvYmplY3RzLgpfLmVhY2ggPSAob2JqLCBpdGVyYXRvciwgY29udGV4dCkgLT4KICB0cnkKICAgIGlmIG5hdGl2ZUZvckVhY2ggYW5kIG9iai5mb3JFYWNoIGlzIG5hdGl2ZUZvckVhY2gKICAgICAgb2JqLmZvckVhY2ggaXRlcmF0b3IsIGNvbnRleHQKICAgIGVsc2UgaWYgXy5pc051bWJlciBvYmoubGVuZ3RoCiAgICAgIGl0ZXJhdG9yLmNhbGwgY29udGV4dCwgb2JqW2ldLCBpLCBvYmogZm9yIGkgaW4gWzAuLi5vYmoubGVuZ3RoXQogICAgZWxzZQogICAgICBpdGVyYXRvci5jYWxsIGNvbnRleHQsIHZhbCwga2V5LCBvYmogZm9yIG93biBrZXksIHZhbCBvZiBvYmoKICBjYXRjaCBlCiAgICB0aHJvdyBlIGlmIGUgaXNudCBicmVha2VyCiAgb2JqCgoKIyBSZXR1cm4gdGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgdGhlIGl0ZXJhdG9yIHRvIGVhY2ggZWxlbWVudC4gVXNlIEphdmFTY3JpcHQKIyAxLjYncyB2ZXJzaW9uIG9mICoqbWFwKiosIGlmIHBvc3NpYmxlLgpfLm1hcCA9IChvYmosIGl0ZXJhdG9yLCBjb250ZXh0KSAtPgogIHJldHVybiBvYmoubWFwKGl0ZXJhdG9yLCBjb250ZXh0KSBpZiBuYXRpdmVNYXAgYW5kIG9iai5tYXAgaXMgbmF0aXZlTWFwCiAgcmVzdWx0cyA9IFtdCiAgXy5lYWNoIG9iaiwgKHZhbHVlLCBpbmRleCwgbGlzdCkgLT4KICAgIHJlc3VsdHMucHVzaCBpdGVyYXRvci5jYWxsIGNvbnRleHQsIHZhbHVlLCBpbmRleCwgbGlzdAogIHJlc3VsdHMKCgojICoqUmVkdWNlKiogYnVpbGRzIHVwIGEgc2luZ2xlIHJlc3VsdCBmcm9tIGEgbGlzdCBvZiB2YWx1ZXMuIEFsc28ga25vd24gYXMKIyAqKmluamVjdCoqLCBvciAqKmZvbGRsKiouIFVzZXMgSmF2YVNjcmlwdCAxLjgncyB2ZXJzaW9uIG9mICoqcmVkdWNlKiosIGlmIHBvc3NpYmxlLgpfLnJlZHVjZSA9IChvYmosIGl0ZXJhdG9yLCBtZW1vLCBjb250ZXh0KSAtPgogIGlmIG5hdGl2ZVJlZHVjZSBhbmQgb2JqLnJlZHVjZSBpcyBuYXRpdmVSZWR1Y2UKICAgIGl0ZXJhdG9yID0gXy5iaW5kIGl0ZXJhdG9yLCBjb250ZXh0IGlmIGNvbnRleHQKICAgIHJldHVybiBvYmoucmVkdWNlIGl0ZXJhdG9yLCBtZW1vCiAgXy5lYWNoIG9iaiwgKHZhbHVlLCBpbmRleCwgbGlzdCkgLT4KICAgIG1lbW8gPSBpdGVyYXRvci5jYWxsIGNvbnRleHQsIG1lbW8sIHZhbHVlLCBpbmRleCwgbGlzdAogIG1lbW8KCgojIFRoZSByaWdodC1hc3NvY2lhdGl2ZSB2ZXJzaW9uIG9mICoqcmVkdWNlKiosIGFsc28ga25vd24gYXMgKipmb2xkcioqLiBVc2VzCiMgSmF2YVNjcmlwdCAxLjgncyB2ZXJzaW9uIG9mICoqcmVkdWNlUmlnaHQqKiwgaWYgYXZhaWxhYmxlLgpfLnJlZHVjZVJpZ2h0ID0gKG9iaiwgaXRlcmF0b3IsIG1lbW8sIGNvbnRleHQpIC0+CiAgaWYgbmF0aXZlUmVkdWNlUmlnaHQgYW5kIG9iai5yZWR1Y2VSaWdodCBpcyBuYXRpdmVSZWR1Y2VSaWdodAogICAgaXRlcmF0b3IgPSBfLmJpbmQgaXRlcmF0b3IsIGNvbnRleHQgaWYgY29udGV4dAogICAgcmV0dXJuIG9iai5yZWR1Y2VSaWdodCBpdGVyYXRvciwgbWVtbwogIHJldmVyc2VkID0gXy5jbG9uZShfLnRvQXJyYXkob2JqKSkucmV2ZXJzZSgpCiAgXy5yZWR1Y2UgcmV2ZXJzZWQsIGl0ZXJhdG9yLCBtZW1vLCBjb250ZXh0CgoKIyBSZXR1cm4gdGhlIGZpcnN0IHZhbHVlIHdoaWNoIHBhc3NlcyBhIHRydXRoIHRlc3QuCl8uZGV0ZWN0ID0gKG9iaiwgaXRlcmF0b3IsIGNvbnRleHQpIC0+CiAgcmVzdWx0ID0gbnVsbAogIF8uZWFjaCBvYmosICh2YWx1ZSwgaW5kZXgsIGxpc3QpIC0+CiAgICBpZiBpdGVyYXRvci5jYWxsIGNvbnRleHQsIHZhbHVlLCBpbmRleCwgbGlzdAogICAgICByZXN1bHQgPSB2YWx1ZQogICAgICBfLmJyZWFrTG9vcCgpCiAgcmVzdWx0CgoKIyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyB0aGF0IHBhc3MgYSB0cnV0aCB0ZXN0LiBVc2UgSmF2YVNjcmlwdCAxLjYncwojICoqZmlsdGVyKiosIGlmIGl0IGV4aXN0cy4KXy5maWx0ZXIgPSAob2JqLCBpdGVyYXRvciwgY29udGV4dCkgLT4KICByZXR1cm4gb2JqLmZpbHRlciBpdGVyYXRvciwgY29udGV4dCBpZiBuYXRpdmVGaWx0ZXIgYW5kIG9iai5maWx0ZXIgaXMgbmF0aXZlRmlsdGVyCiAgcmVzdWx0cyA9IFtdCiAgXy5lYWNoIG9iaiwgKHZhbHVlLCBpbmRleCwgbGlzdCkgLT4KICAgIHJlc3VsdHMucHVzaCB2YWx1ZSBpZiBpdGVyYXRvci5jYWxsIGNvbnRleHQsIHZhbHVlLCBpbmRleCwgbGlzdAogIHJlc3VsdHMKCgojIFJldHVybiBhbGwgdGhlIGVsZW1lbnRzIGZvciB3aGljaCBhIHRydXRoIHRlc3QgZmFpbHMuCl8ucmVqZWN0ID0gKG9iaiwgaXRlcmF0b3IsIGNvbnRleHQpIC0+CiAgcmVzdWx0cyA9IFtdCiAgXy5lYWNoIG9iaiwgKHZhbHVlLCBpbmRleCwgbGlzdCkgLT4KICAgIHJlc3VsdHMucHVzaCB2YWx1ZSBpZiBub3QgaXRlcmF0b3IuY2FsbCBjb250ZXh0LCB2YWx1ZSwgaW5kZXgsIGxpc3QKICByZXN1bHRzCgoKIyBEZXRlcm1pbmUgd2hldGhlciBhbGwgb2YgdGhlIGVsZW1lbnRzIG1hdGNoIGEgdHJ1dGggdGVzdC4gRGVsZWdhdGUgdG8KIyBKYXZhU2NyaXB0IDEuNidzICoqZXZlcnkqKiwgaWYgaXQgaXMgcHJlc2VudC4KXy5ldmVyeSA9IChvYmosIGl0ZXJhdG9yLCBjb250ZXh0KSAtPgogIGl0ZXJhdG9yIHx8PSBfLmlkZW50aXR5CiAgcmV0dXJuIG9iai5ldmVyeSBpdGVyYXRvciwgY29udGV4dCBpZiBuYXRpdmVFdmVyeSBhbmQgb2JqLmV2ZXJ5IGlzIG5hdGl2ZUV2ZXJ5CiAgcmVzdWx0ID0gdHJ1ZQogIF8uZWFjaCBvYmosICh2YWx1ZSwgaW5kZXgsIGxpc3QpIC0+CiAgICBfLmJyZWFrTG9vcCgpIHVubGVzcyAocmVzdWx0ID0gcmVzdWx0IGFuZCBpdGVyYXRvci5jYWxsKGNvbnRleHQsIHZhbHVlLCBpbmRleCwgbGlzdCkpCiAgcmVzdWx0CgoKIyBEZXRlcm1pbmUgaWYgYXQgbGVhc3Qgb25lIGVsZW1lbnQgaW4gdGhlIG9iamVjdCBtYXRjaGVzIGEgdHJ1dGggdGVzdC4gVXNlCiMgSmF2YVNjcmlwdCAxLjYncyAqKnNvbWUqKiwgaWYgaXQgZXhpc3RzLgpfLnNvbWUgPSAob2JqLCBpdGVyYXRvciwgY29udGV4dCkgLT4KICBpdGVyYXRvciB8fD0gXy5pZGVudGl0eQogIHJldHVybiBvYmouc29tZSBpdGVyYXRvciwgY29udGV4dCBpZiBuYXRpdmVTb21lIGFuZCBvYmouc29tZSBpcyBuYXRpdmVTb21lCiAgcmVzdWx0ID0gZmFsc2UKICBfLmVhY2ggb2JqLCAodmFsdWUsIGluZGV4LCBsaXN0KSAtPgogICAgXy5icmVha0xvb3AoKSBpZiAocmVzdWx0ID0gaXRlcmF0b3IuY2FsbChjb250ZXh0LCB2YWx1ZSwgaW5kZXgsIGxpc3QpKQogIHJlc3VsdAoKCiMgRGV0ZXJtaW5lIGlmIGEgZ2l2ZW4gdmFsdWUgaXMgaW5jbHVkZWQgaW4gdGhlIGFycmF5IG9yIG9iamVjdCwKIyBiYXNlZCBvbiBgPT09YC4KXy5pbmNsdWRlID0gKG9iaiwgdGFyZ2V0KSAtPgogIHJldHVybiBfLmluZGV4T2Yob2JqLCB0YXJnZXQpIGlzbnQgLTEgaWYgbmF0aXZlSW5kZXhPZiBhbmQgb2JqLmluZGV4T2YgaXMgbmF0aXZlSW5kZXhPZgogIHJldHVybiB0cnVlIGZvciBvd24ga2V5LCB2YWwgb2Ygb2JqIHdoZW4gdmFsIGlzIHRhcmdldAogIGZhbHNlCgoKIyBJbnZva2UgYSBtZXRob2Qgd2l0aCBhcmd1bWVudHMgb24gZXZlcnkgaXRlbSBpbiBhIGNvbGxlY3Rpb24uCl8uaW52b2tlID0gKG9iaiwgbWV0aG9kKSAtPgogIGFyZ3MgPSBfLnJlc3QgYXJndW1lbnRzLCAyCiAgKGlmIG1ldGhvZCB0aGVuIHZhbFttZXRob2RdIGVsc2UgdmFsKS5hcHBseSh2YWwsIGFyZ3MpIGZvciB2YWwgaW4gb2JqCgoKIyBDb252ZW5pZW5jZSB2ZXJzaW9uIG9mIGEgY29tbW9uIHVzZSBjYXNlIG9mICoqbWFwKio6IGZldGNoaW5nIGEgcHJvcGVydHkuCl8ucGx1Y2sgPSAob2JqLCBrZXkpIC0+CiAgXy5tYXAob2JqLCAodmFsKSAtPiB2YWxba2V5XSkKCgojIFJldHVybiB0aGUgbWF4aW11bSBpdGVtIG9yIChpdGVtLWJhc2VkIGNvbXB1dGF0aW9uKS4KXy5tYXggPSAob2JqLCBpdGVyYXRvciwgY29udGV4dCkgLT4KICByZXR1cm4gTWF0aC5tYXguYXBwbHkoTWF0aCwgb2JqKSBpZiBub3QgaXRlcmF0b3IgYW5kIF8uaXNBcnJheShvYmopCiAgcmVzdWx0ID0gY29tcHV0ZWQ6IC1JbmZpbml0eQogIF8uZWFjaCBvYmosICh2YWx1ZSwgaW5kZXgsIGxpc3QpIC0+CiAgICBjb21wdXRlZCA9IGlmIGl0ZXJhdG9yIHRoZW4gaXRlcmF0b3IuY2FsbChjb250ZXh0LCB2YWx1ZSwgaW5kZXgsIGxpc3QpIGVsc2UgdmFsdWUKICAgIGNvbXB1dGVkID49IHJlc3VsdC5jb21wdXRlZCBhbmQgKHJlc3VsdCA9IHt2YWx1ZTogdmFsdWUsIGNvbXB1dGVkOiBjb21wdXRlZH0pCiAgcmVzdWx0LnZhbHVlCgoKIyBSZXR1cm4gdGhlIG1pbmltdW0gZWxlbWVudCAob3IgZWxlbWVudC1iYXNlZCBjb21wdXRhdGlvbikuCl8ubWluID0gKG9iaiwgaXRlcmF0b3IsIGNvbnRleHQpIC0+CiAgcmV0dXJuIE1hdGgubWluLmFwcGx5KE1hdGgsIG9iaikgaWYgbm90IGl0ZXJhdG9yIGFuZCBfLmlzQXJyYXkob2JqKQogIHJlc3VsdCA9IGNvbXB1dGVkOiBJbmZpbml0eQogIF8uZWFjaCBvYmosICh2YWx1ZSwgaW5kZXgsIGxpc3QpIC0+CiAgICBjb21wdXRlZCA9IGlmIGl0ZXJhdG9yIHRoZW4gaXRlcmF0b3IuY2FsbChjb250ZXh0LCB2YWx1ZSwgaW5kZXgsIGxpc3QpIGVsc2UgdmFsdWUKICAgIGNvbXB1dGVkIDwgcmVzdWx0LmNvbXB1dGVkIGFuZCAocmVzdWx0ID0ge3ZhbHVlOiB2YWx1ZSwgY29tcHV0ZWQ6IGNvbXB1dGVkfSkKICByZXN1bHQudmFsdWUKCgojIFNvcnQgdGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbiBwcm9kdWNlZCBieSBhbiBpdGVyYXRvci4KXy5zb3J0QnkgPSAob2JqLCBpdGVyYXRvciwgY29udGV4dCkgLT4KICBfLnBsdWNrKCgoXy5tYXAgb2JqLCAodmFsdWUsIGluZGV4LCBsaXN0KSAtPgogICAge3ZhbHVlOiB2YWx1ZSwgY3JpdGVyaWE6IGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgdmFsdWUsIGluZGV4LCBsaXN0KX0KICApLnNvcnQoKGxlZnQsIHJpZ2h0KSAtPgogICAgYSA9IGxlZnQuY3JpdGVyaWE7IGIgPSByaWdodC5jcml0ZXJpYQogICAgaWYgYSA8IGIgdGhlbiAtMSBlbHNlIGlmIGEgPiBiIHRoZW4gMSBlbHNlIDAKICApKSwgJ3ZhbHVlJykKCgojIFVzZSBhIGNvbXBhcmF0b3IgZnVuY3Rpb24gdG8gZmlndXJlIG91dCBhdCB3aGF0IGluZGV4IGFuIG9iamVjdCBzaG91bGQKIyBiZSBpbnNlcnRlZCBzbyBhcyB0byBtYWludGFpbiBvcmRlci4gVXNlcyBiaW5hcnkgc2VhcmNoLgpfLnNvcnRlZEluZGV4ID0gKGFycmF5LCBvYmosIGl0ZXJhdG9yKSAtPgogIGl0ZXJhdG9yIHx8PSBfLmlkZW50aXR5CiAgbG93ID0gMAogIGhpZ2ggPSBhcnJheS5sZW5ndGgKICB3aGlsZSBsb3cgPCBoaWdoCiAgICBtaWQgPSAobG93ICsgaGlnaCkgPj4gMQogICAgaWYgaXRlcmF0b3IoYXJyYXlbbWlkXSkgPCBpdGVyYXRvcihvYmopIHRoZW4gbG93ID0gbWlkICsgMSBlbHNlIGhpZ2ggPSBtaWQKICBsb3cKCgojIENvbnZlcnQgYW55dGhpbmcgaXRlcmFibGUgaW50byBhIHJlYWwsIGxpdmUgYXJyYXkuCl8udG9BcnJheSA9IChpdGVyYWJsZSkgLT4KICByZXR1cm4gW10gaWYgKCFpdGVyYWJsZSkKICByZXR1cm4gaXRlcmFibGUudG9BcnJheSgpIGlmIChpdGVyYWJsZS50b0FycmF5KQogIHJldHVybiBpdGVyYWJsZSBpZiAoXy5pc0FycmF5KGl0ZXJhYmxlKSkKICByZXR1cm4gc2xpY2UuY2FsbChpdGVyYWJsZSkgaWYgKF8uaXNBcmd1bWVudHMoaXRlcmFibGUpKQogIF8udmFsdWVzKGl0ZXJhYmxlKQoKCiMgUmV0dXJuIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gYW4gb2JqZWN0LgpfLnNpemUgPSAob2JqKSAtPiBfLnRvQXJyYXkob2JqKS5sZW5ndGgKCgojIEFycmF5IEZ1bmN0aW9ucwojIC0tLS0tLS0tLS0tLS0tLQoKIyBHZXQgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYW4gYXJyYXkuIFBhc3NpbmcgYG5gIHdpbGwgcmV0dXJuIHRoZSBmaXJzdCBOCiMgdmFsdWVzIGluIHRoZSBhcnJheS4gQWxpYXNlZCBhcyAqKmhlYWQqKi4gVGhlIGBndWFyZGAgY2hlY2sgYWxsb3dzIGl0IHRvIHdvcmsKIyB3aXRoICoqbWFwKiouCl8uZmlyc3QgPSAoYXJyYXksIG4sIGd1YXJkKSAtPgogIGlmIG4gYW5kIG5vdCBndWFyZCB0aGVuIHNsaWNlLmNhbGwoYXJyYXksIDAsIG4pIGVsc2UgYXJyYXlbMF0KCgojIFJldHVybnMgZXZlcnl0aGluZyBidXQgdGhlIGZpcnN0IGVudHJ5IG9mIHRoZSBhcnJheS4gQWxpYXNlZCBhcyAqKnRhaWwqKi4KIyBFc3BlY2lhbGx5IHVzZWZ1bCBvbiB0aGUgYXJndW1lbnRzIG9iamVjdC4gUGFzc2luZyBhbiBgaW5kZXhgIHdpbGwgcmV0dXJuCiMgdGhlIHJlc3Qgb2YgdGhlIHZhbHVlcyBpbiB0aGUgYXJyYXkgZnJvbSB0aGF0IGluZGV4IG9ud2FyZC4gVGhlIGBndWFyZGAKIyBjaGVjayBhbGxvd3MgaXQgdG8gd29yayB3aXRoICoqbWFwKiouCl8ucmVzdCA9IChhcnJheSwgaW5kZXgsIGd1YXJkKSAtPgogIHNsaWNlLmNhbGwoYXJyYXksIGlmIF8uaXNVbmRlZmluZWQoaW5kZXgpIG9yIGd1YXJkIHRoZW4gMSBlbHNlIGluZGV4KQoKCiMgR2V0IHRoZSBsYXN0IGVsZW1lbnQgb2YgYW4gYXJyYXkuCl8ubGFzdCA9IChhcnJheSkgLT4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMV0KCgojIFRyaW0gb3V0IGFsbCBmYWxzeSB2YWx1ZXMgZnJvbSBhbiBhcnJheS4KXy5jb21wYWN0ID0gKGFycmF5KSAtPiBpdGVtIGZvciBpdGVtIGluIGFycmF5IHdoZW4gaXRlbQoKCiMgUmV0dXJuIGEgY29tcGxldGVseSBmbGF0dGVuZWQgdmVyc2lvbiBvZiBhbiBhcnJheS4KXy5mbGF0dGVuID0gKGFycmF5KSAtPgogIF8ucmVkdWNlIGFycmF5LCAobWVtbywgdmFsdWUpIC0+CiAgICByZXR1cm4gbWVtby5jb25jYXQoXy5mbGF0dGVuKHZhbHVlKSkgaWYgXy5pc0FycmF5IHZhbHVlCiAgICBtZW1vLnB1c2ggdmFsdWUKICAgIG1lbW8KICAsIFtdCgoKIyBSZXR1cm4gYSB2ZXJzaW9uIG9mIHRoZSBhcnJheSB0aGF0IGRvZXMgbm90IGNvbnRhaW4gdGhlIHNwZWNpZmllZCB2YWx1ZShzKS4KXy53aXRob3V0ID0gKGFycmF5KSAtPgogIHZhbHVlcyA9IF8ucmVzdCBhcmd1bWVudHMKICB2YWwgZm9yIHZhbCBpbiBfLnRvQXJyYXkoYXJyYXkpIHdoZW4gbm90IF8uaW5jbHVkZSB2YWx1ZXMsIHZhbAoKCiMgUHJvZHVjZSBhIGR1cGxpY2F0ZS1mcmVlIHZlcnNpb24gb2YgdGhlIGFycmF5LiBJZiB0aGUgYXJyYXkgaGFzIGFscmVhZHkKIyBiZWVuIHNvcnRlZCwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiB1c2luZyBhIGZhc3RlciBhbGdvcml0aG0uCl8udW5pcSA9IChhcnJheSwgaXNTb3J0ZWQpIC0+CiAgbWVtbyA9IFtdCiAgZm9yIGVsLCBpIGluIF8udG9BcnJheSBhcnJheQogICAgbWVtby5wdXNoIGVsIGlmIGkgaXMgMCB8fCAoaWYgaXNTb3J0ZWQgaXMgdHJ1ZSB0aGVuIF8ubGFzdChtZW1vKSBpc250IGVsIGVsc2Ugbm90IF8uaW5jbHVkZShtZW1vLCBlbCkpCiAgbWVtbwoKCiMgUHJvZHVjZSBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIGV2ZXJ5IGl0ZW0gc2hhcmVkIGJldHdlZW4gYWxsIHRoZQojIHBhc3NlZC1pbiBhcnJheXMuCl8uaW50ZXJzZWN0ID0gKGFycmF5KSAtPgogIHJlc3QgPSBfLnJlc3QgYXJndW1lbnRzCiAgXy5zZWxlY3QgXy51bmlxKGFycmF5KSwgKGl0ZW0pIC0+CiAgICBfLmFsbCByZXN0LCAob3RoZXIpIC0+CiAgICAgIF8uaW5kZXhPZihvdGhlciwgaXRlbSkgPj0gMAoKCiMgWmlwIHRvZ2V0aGVyIG11bHRpcGxlIGxpc3RzIGludG8gYSBzaW5nbGUgYXJyYXkgLS0gZWxlbWVudHMgdGhhdCBzaGFyZQojIGFuIGluZGV4IGdvIHRvZ2V0aGVyLgpfLnppcCA9IC0+CiAgbGVuZ3RoID0gXy5tYXggXy5wbHVjayBhcmd1bWVudHMsICdsZW5ndGgnCiAgcmVzdWx0cyA9IG5ldyBBcnJheSBsZW5ndGgKICBmb3IgaSBpbiBbMC4uLmxlbmd0aF0KICAgIHJlc3VsdHNbaV0gPSBfLnBsdWNrIGFyZ3VtZW50cywgU3RyaW5nIGkKICByZXN1bHRzCgoKIyBJZiB0aGUgYnJvd3NlciBkb2Vzbid0IHN1cHBseSB1cyB3aXRoICoqaW5kZXhPZioqIChJJ20gbG9va2luZyBhdCB5b3UsIE1TSUUpLAojIHdlIG5lZWQgdGhpcyBmdW5jdGlvbi4gUmV0dXJuIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhbgojIGl0ZW0gaW4gYW4gYXJyYXksIG9yIC0xIGlmIHRoZSBpdGVtIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgYXJyYXkuCl8uaW5kZXhPZiA9IChhcnJheSwgaXRlbSkgLT4KICByZXR1cm4gYXJyYXkuaW5kZXhPZiBpdGVtIGlmIG5hdGl2ZUluZGV4T2YgYW5kIGFycmF5LmluZGV4T2YgaXMgbmF0aXZlSW5kZXhPZgogIGkgPSAwOyBsID0gYXJyYXkubGVuZ3RoCiAgd2hpbGUgbCAtIGkKICAgIGlmIGFycmF5W2ldIGlzIGl0ZW0gdGhlbiByZXR1cm4gaSBlbHNlIGkrKwogIC0xCgoKIyBQcm92aWRlIEphdmFTY3JpcHQgMS42J3MgKipsYXN0SW5kZXhPZioqLCBkZWxlZ2F0aW5nIHRvIHRoZSBuYXRpdmUgZnVuY3Rpb24sCiMgaWYgcG9zc2libGUuCl8ubGFzdEluZGV4T2YgPSAoYXJyYXksIGl0ZW0pIC0+CiAgcmV0dXJuIGFycmF5Lmxhc3RJbmRleE9mKGl0ZW0pIGlmIG5hdGl2ZUxhc3RJbmRleE9mIGFuZCBhcnJheS5sYXN0SW5kZXhPZiBpcyBuYXRpdmVMYXN0SW5kZXhPZgogIGkgPSBhcnJheS5sZW5ndGgKICB3aGlsZSBpCiAgICBpZiBhcnJheVtpXSBpcyBpdGVtIHRoZW4gcmV0dXJuIGkgZWxzZSBpLS0KICAtMQoKCiMgR2VuZXJhdGUgYW4gaW50ZWdlciBBcnJheSBjb250YWluaW5nIGFuIGFyaXRobWV0aWMgcHJvZ3Jlc3Npb24uIEEgcG9ydCBvZgojIFt0aGUgbmF0aXZlIFB5dGhvbiAqKnJhbmdlKiogZnVuY3Rpb25dKGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNyYW5nZSkuCl8ucmFuZ2UgPSAoc3RhcnQsIHN0b3AsIHN0ZXApIC0+CiAgYSA9IGFyZ3VtZW50cwogIHNvbG8gPSBhLmxlbmd0aCA8PSAxCiAgaSA9IHN0YXJ0ID0gaWYgc29sbyB0aGVuIDAgZWxzZSBhWzBdCiAgc3RvcCA9IGlmIHNvbG8gdGhlbiBhWzBdIGVsc2UgYVsxXQogIHN0ZXAgPSBhWzJdIG9yIDEKICBsZW4gPSBNYXRoLmNlaWwoKHN0b3AgLSBzdGFydCkgLyBzdGVwKQogIHJldHVybiBbXSBpZiBsZW4gPD0gMAogIHJhbmdlID0gbmV3IEFycmF5IGxlbgogIGlkeCA9IDAKICBsb29wCiAgICByZXR1cm4gcmFuZ2UgaWYgKGlmIHN0ZXAgPiAwIHRoZW4gaSAtIHN0b3AgZWxzZSBzdG9wIC0gaSkgPj0gMAogICAgcmFuZ2VbaWR4XSA9IGkKICAgIGlkeCsrCiAgICBpKz0gc3RlcAoKCiMgRnVuY3Rpb24gRnVuY3Rpb25zCiMgLS0tLS0tLS0tLS0tLS0tLS0tCgojIENyZWF0ZSBhIGZ1bmN0aW9uIGJvdW5kIHRvIGEgZ2l2ZW4gb2JqZWN0IChhc3NpZ25pbmcgYHRoaXNgLCBhbmQgYXJndW1lbnRzLAojIG9wdGlvbmFsbHkpLiBCaW5kaW5nIHdpdGggYXJndW1lbnRzIGlzIGFsc28ga25vd24gYXMgKipjdXJyeSoqLgpfLmJpbmQgPSAoZnVuYywgb2JqKSAtPgogIGFyZ3MgPSBfLnJlc3QgYXJndW1lbnRzLCAyCiAgLT4gZnVuYy5hcHBseSBvYmogb3Igcm9vdCwgYXJncy5jb25jYXQgYXJndW1lbnRzCgoKIyBCaW5kIGFsbCBvZiBhbiBvYmplY3QncyBtZXRob2RzIHRvIHRoYXQgb2JqZWN0LiBVc2VmdWwgZm9yIGVuc3VyaW5nIHRoYXQKIyBhbGwgY2FsbGJhY2tzIGRlZmluZWQgb24gYW4gb2JqZWN0IGJlbG9uZyB0byBpdC4KXy5iaW5kQWxsID0gKG9iaikgLT4KICBmdW5jcyA9IGlmIGFyZ3VtZW50cy5sZW5ndGggPiAxIHRoZW4gXy5yZXN0KGFyZ3VtZW50cykgZWxzZSBfLmZ1bmN0aW9ucyhvYmopCiAgXy5lYWNoIGZ1bmNzLCAoZikgLT4gb2JqW2ZdID0gXy5iaW5kIG9ialtmXSwgb2JqCiAgb2JqCgoKIyBEZWxheXMgYSBmdW5jdGlvbiBmb3IgdGhlIGdpdmVuIG51bWJlciBvZiBtaWxsaXNlY29uZHMsIGFuZCB0aGVuIGNhbGxzCiMgaXQgd2l0aCB0aGUgYXJndW1lbnRzIHN1cHBsaWVkLgpfLmRlbGF5ID0gKGZ1bmMsIHdhaXQpIC0+CiAgYXJncyA9IF8ucmVzdCBhcmd1bWVudHMsIDIKICBzZXRUaW1lb3V0KCgtPiBmdW5jLmFwcGx5KGZ1bmMsIGFyZ3MpKSwgd2FpdCkKCgojIE1lbW9pemUgYW4gZXhwZW5zaXZlIGZ1bmN0aW9uIGJ5IHN0b3JpbmcgaXRzIHJlc3VsdHMuCl8ubWVtb2l6ZSA9IChmdW5jLCBoYXNoZXIpIC0+CiAgbWVtbyA9IHt9CiAgaGFzaGVyIG9yPSBfLmlkZW50aXR5CiAgLT4KICAgIGtleSA9IGhhc2hlci5hcHBseSB0aGlzLCBhcmd1bWVudHMKICAgIHJldHVybiBtZW1vW2tleV0gaWYga2V5IG9mIG1lbW8KICAgIG1lbW9ba2V5XSA9IGZ1bmMuYXBwbHkgdGhpcywgYXJndW1lbnRzCgoKIyBEZWZlcnMgYSBmdW5jdGlvbiwgc2NoZWR1bGluZyBpdCB0byBydW4gYWZ0ZXIgdGhlIGN1cnJlbnQgY2FsbCBzdGFjayBoYXMKIyBjbGVhcmVkLgpfLmRlZmVyID0gKGZ1bmMpIC0+CiAgXy5kZWxheS5hcHBseSBfLCBbZnVuYywgMV0uY29uY2F0IF8ucmVzdCBhcmd1bWVudHMKCgojIFJldHVybnMgdGhlIGZpcnN0IGZ1bmN0aW9uIHBhc3NlZCBhcyBhbiBhcmd1bWVudCB0byB0aGUgc2Vjb25kLAojIGFsbG93aW5nIHlvdSB0byBhZGp1c3QgYXJndW1lbnRzLCBydW4gY29kZSBiZWZvcmUgYW5kIGFmdGVyLCBhbmQKIyBjb25kaXRpb25hbGx5IGV4ZWN1dGUgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uLgpfLndyYXAgPSAoZnVuYywgd3JhcHBlcikgLT4KICAtPiB3cmFwcGVyLmFwcGx5IHdyYXBwZXIsIFtmdW5jXS5jb25jYXQgYXJndW1lbnRzCgoKIyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBpcyB0aGUgY29tcG9zaXRpb24gb2YgYSBsaXN0IG9mIGZ1bmN0aW9ucywgZWFjaAojIGNvbnN1bWluZyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiB0aGF0IGZvbGxvd3MuCl8uY29tcG9zZSA9IC0+CiAgZnVuY3MgPSBhcmd1bWVudHMKICAtPgogICAgYXJncyA9IGFyZ3VtZW50cwogICAgZm9yIGkgaW4gW2Z1bmNzLmxlbmd0aCAtIDEuLjBdIGJ5IC0xCiAgICAgIGFyZ3MgPSBbZnVuY3NbaV0uYXBwbHkodGhpcywgYXJncyldCiAgICBhcmdzWzBdCgoKIyBPYmplY3QgRnVuY3Rpb25zCiMgLS0tLS0tLS0tLS0tLS0tLQoKIyBSZXRyaWV2ZSB0aGUgbmFtZXMgb2YgYW4gb2JqZWN0J3MgcHJvcGVydGllcy4KXy5rZXlzID0gbmF0aXZlS2V5cyBvciAob2JqKSAtPgogIHJldHVybiBfLnJhbmdlIDAsIG9iai5sZW5ndGggaWYgXy5pc0FycmF5KG9iaikKICBrZXkgZm9yIGtleSwgdmFsIG9mIG9iagoKCiMgUmV0cmlldmUgdGhlIHZhbHVlcyBvZiBhbiBvYmplY3QncyBwcm9wZXJ0aWVzLgpfLnZhbHVlcyA9IChvYmopIC0+CiAgXy5tYXAgb2JqLCBfLmlkZW50aXR5CgoKIyBSZXR1cm4gYSBzb3J0ZWQgbGlzdCBvZiB0aGUgZnVuY3Rpb24gbmFtZXMgYXZhaWxhYmxlIGluIFVuZGVyc2NvcmUuCl8uZnVuY3Rpb25zID0gKG9iaikgLT4KICBfLmZpbHRlcihfLmtleXMob2JqKSwgKGtleSkgLT4gXy5pc0Z1bmN0aW9uKG9ialtrZXldKSkuc29ydCgpCgoKIyBFeHRlbmQgYSBnaXZlbiBvYmplY3Qgd2l0aCBhbGwgb2YgdGhlIHByb3BlcnRpZXMgaW4gYSBzb3VyY2Ugb2JqZWN0LgpfLmV4dGVuZCA9IChvYmopIC0+CiAgZm9yIHNvdXJjZSBpbiBfLnJlc3QoYXJndW1lbnRzKQogICAgb2JqW2tleV0gPSB2YWwgZm9yIGtleSwgdmFsIG9mIHNvdXJjZQogIG9iagoKCiMgQ3JlYXRlIGEgKHNoYWxsb3ctY2xvbmVkKSBkdXBsaWNhdGUgb2YgYW4gb2JqZWN0LgpfLmNsb25lID0gKG9iaikgLT4KICByZXR1cm4gb2JqLnNsaWNlIDAgaWYgXy5pc0FycmF5IG9iagogIF8uZXh0ZW5kIHt9LCBvYmoKCgojIEludm9rZXMgaW50ZXJjZXB0b3Igd2l0aCB0aGUgb2JqLCBhbmQgdGhlbiByZXR1cm5zIG9iai4KIyBUaGUgcHJpbWFyeSBwdXJwb3NlIG9mIHRoaXMgbWV0aG9kIGlzIHRvICJ0YXAgaW50byIgYSBtZXRob2QgY2hhaW4sCiMgaW4gb3JkZXIgdG8gcGVyZm9ybSBvcGVyYXRpb25zIG9uIGludGVybWVkaWF0ZSByZXN1bHRzIHdpdGhpbgogdGhlIGNoYWluLgpfLnRhcCA9IChvYmosIGludGVyY2VwdG9yKSAtPgogIGludGVyY2VwdG9yIG9iagogIG9iagoKCiMgUGVyZm9ybSBhIGRlZXAgY29tcGFyaXNvbiB0byBjaGVjayBpZiB0d28gb2JqZWN0cyBhcmUgZXF1YWwuCl8uaXNFcXVhbCA9IChhLCBiKSAtPgogICMgQ2hlY2sgb2JqZWN0IGlkZW50aXR5LgogIHJldHVybiB0cnVlIGlmIGEgaXMgYgogICMgRGlmZmVyZW50IHR5cGVzPwogIGF0eXBlID0gdHlwZW9mKGEpOyBidHlwZSA9IHR5cGVvZihiKQogIHJldHVybiBmYWxzZSBpZiBhdHlwZSBpc250IGJ0eXBlCiAgIyBCYXNpYyBlcXVhbGl0eSB0ZXN0ICh3YXRjaCBvdXQgZm9yIGNvZXJjaW9ucykuCiAgcmV0dXJuIHRydWUgaWYgYGEgPT0gYmAKICAjIE9uZSBpcyBmYWxzeSBhbmQgdGhlIG90aGVyIHRydXRoeS4KICByZXR1cm4gZmFsc2UgaWYgKCFhIGFuZCBiKSBvciAoYSBhbmQgIWIpCiAgIyBPbmUgb2YgdGhlbSBpbXBsZW1lbnRzIGFuIGBpc0VxdWFsKClgPwogIHJldHVybiBhLmlzRXF1YWwoYikgaWYgYS5pc0VxdWFsCiAgIyBDaGVjayBkYXRlcycgaW50ZWdlciB2YWx1ZXMuCiAgcmV0dXJuIGEuZ2V0VGltZSgpIGlzIGIuZ2V0VGltZSgpIGlmIF8uaXNEYXRlKGEpIGFuZCBfLmlzRGF0ZShiKQogICMgQm90aCBhcmUgTmFOPwogIHJldHVybiBmYWxzZSBpZiBfLmlzTmFOKGEpIGFuZCBfLmlzTmFOKGIpCiAgIyBDb21wYXJlIHJlZ3VsYXIgZXhwcmVzc2lvbnMuCiAgaWYgXy5pc1JlZ0V4cChhKSBhbmQgXy5pc1JlZ0V4cChiKQogICAgcmV0dXJuIGEuc291cmNlIGlzIGIuc291cmNlIGFuZAogICAgICAgICAgIGEuZ2xvYmFsIGlzIGIuZ2xvYmFsIGFuZAogICAgICAgICAgIGEuaWdub3JlQ2FzZSBpcyBiLmlnbm9yZUNhc2UgYW5kCiAgICAgICAgICAgYS5tdWx0aWxpbmUgaXMgYi5tdWx0aWxpbmUKICAjIElmIGEgaXMgbm90IGFuIG9iamVjdCBieSB0aGlzIHBvaW50LCB3ZSBjYW4ndCBoYW5kbGUgaXQuCiAgcmV0dXJuIGZhbHNlIGlmIGF0eXBlIGlzbnQgJ29iamVjdCcKICAjIENoZWNrIGZvciBkaWZmZXJlbnQgYXJyYXkgbGVuZ3RocyBiZWZvcmUgY29tcGFyaW5nIGNvbnRlbnRzLgogIHJldHVybiBmYWxzZSBpZiBhLmxlbmd0aCBhbmQgKGEubGVuZ3RoIGlzbnQgYi5sZW5ndGgpCiAgIyBOb3RoaW5nIGVsc2Ugd29ya2VkLCBkZWVwIGNvbXBhcmUgdGhlIGNvbnRlbnRzLgogIGFLZXlzID0gXy5rZXlzKGEpOyBiS2V5cyA9IF8ua2V5cyhiKQogICMgRGlmZmVyZW50IG9iamVjdCBzaXplcz8KICByZXR1cm4gZmFsc2UgaWYgYUtleXMubGVuZ3RoIGlzbnQgYktleXMubGVuZ3RoCiAgIyBSZWN1cnNpdmUgY29tcGFyaXNvbiBvZiBjb250ZW50cy4KICByZXR1cm4gZmFsc2UgZm9yIGtleSwgdmFsIG9mIGEgd2hlbiAhKGtleSBvZiBiKSBvciAhXy5pc0VxdWFsKHZhbCwgYltrZXldKQogIHRydWUKCgojIElzIGEgZ2l2ZW4gYXJyYXkgb3Igb2JqZWN0IGVtcHR5PwpfLmlzRW1wdHkgPSAob2JqKSAtPgogIHJldHVybiBvYmoubGVuZ3RoIGlzIDAgaWYgXy5pc0FycmF5KG9iaikgb3IgXy5pc1N0cmluZyhvYmopCiAgcmV0dXJuIGZhbHNlIGZvciBvd24ga2V5IG9mIG9iagogIHRydWUKCgojIElzIGEgZ2l2ZW4gdmFsdWUgYSBET00gZWxlbWVudD8KXy5pc0VsZW1lbnQgPSAob2JqKSAtPiBvYmogYW5kIG9iai5ub2RlVHlwZSBpcyAxCgoKIyBJcyBhIGdpdmVuIHZhbHVlIGFuIGFycmF5PwpfLmlzQXJyYXkgPSBuYXRpdmVJc0FycmF5IG9yIChvYmopIC0+ICEhKG9iaiBhbmQgb2JqLmNvbmNhdCBhbmQgb2JqLnVuc2hpZnQgYW5kIG5vdCBvYmouY2FsbGVlKQoKCiMgSXMgYSBnaXZlbiB2YXJpYWJsZSBhbiBhcmd1bWVudHMgb2JqZWN0PwpfLmlzQXJndW1lbnRzID0gKG9iaikgLT4gb2JqIGFuZCBvYmouY2FsbGVlCgoKIyBJcyB0aGUgZ2l2ZW4gdmFsdWUgYSBmdW5jdGlvbj8KXy5pc0Z1bmN0aW9uID0gKG9iaikgLT4gISEob2JqIGFuZCBvYmouY29uc3RydWN0b3IgYW5kIG9iai5jYWxsIGFuZCBvYmouYXBwbHkpCgoKIyBJcyB0aGUgZ2l2ZW4gdmFsdWUgYSBzdHJpbmc/Cl8uaXNTdHJpbmcgPSAob2JqKSAtPiAhIShvYmogaXMgJycgb3IgKG9iaiBhbmQgb2JqLmNoYXJDb2RlQXQgYW5kIG9iai5zdWJzdHIpKQoKCiMgSXMgYSBnaXZlbiB2YWx1ZSBhIG51bWJlcj8KXy5pc051bWJlciA9IChvYmopIC0+IChvYmogaXMgK29iaikgb3IgdG9TdHJpbmcuY2FsbChvYmopIGlzICdbb2JqZWN0IE51bWJlcl0nCgoKIyBJcyBhIGdpdmVuIHZhbHVlIGEgYm9vbGVhbj8KXy5pc0Jvb2xlYW4gPSAob2JqKSAtPiBvYmogaXMgdHJ1ZSBvciBvYmogaXMgZmFsc2UKCgojIElzIGEgZ2l2ZW4gdmFsdWUgYSBEYXRlPwpfLmlzRGF0ZSA9IChvYmopIC0+ICEhKG9iaiBhbmQgb2JqLmdldFRpbWV6b25lT2Zmc2V0IGFuZCBvYmouc2V0VVRDRnVsbFllYXIpCgoKIyBJcyB0aGUgZ2l2ZW4gdmFsdWUgYSByZWd1bGFyIGV4cHJlc3Npb24/Cl8uaXNSZWdFeHAgPSAob2JqKSAtPiAhIShvYmogYW5kIG9iai5leGVjIGFuZCAob2JqLmlnbm9yZUNhc2Ugb3Igb2JqLmlnbm9yZUNhc2UgaXMgZmFsc2UpKQoKCiMgSXMgdGhlIGdpdmVuIHZhbHVlIE5hTiAtLSB0aGlzIG9uZSBpcyBpbnRlcmVzdGluZy4gYE5hTiAhPSBOYU5gLCBhbmQKIyBgaXNOYU4odW5kZWZpbmVkKSA9PSB0cnVlYCwgc28gd2UgbWFrZSBzdXJlIGl0J3MgYSBudW1iZXIgZmlyc3QuCl8uaXNOYU4gPSAob2JqKSAtPiBfLmlzTnVtYmVyKG9iaikgYW5kIHdpbmRvdy5pc05hTihvYmopCgoKIyBJcyBhIGdpdmVuIHZhbHVlIGVxdWFsIHRvIG51bGw/Cl8uaXNOdWxsID0gKG9iaikgLT4gb2JqIGlzIG51bGwKCgojIElzIGEgZ2l2ZW4gdmFyaWFibGUgdW5kZWZpbmVkPwpfLmlzVW5kZWZpbmVkID0gKG9iaikgLT4gdHlwZW9mIG9iaiBpcyAndW5kZWZpbmVkJwoKCiMgVXRpbGl0eSBGdW5jdGlvbnMKIyAtLS0tLS0tLS0tLS0tLS0tLQoKIyBSdW4gVW5kZXJzY29yZS5qcyBpbiBub0NvbmZsaWN0IG1vZGUsIHJldHVybmluZyB0aGUgYF9gIHZhcmlhYmxlIHRvIGl0cwojIHByZXZpb3VzIG93bmVyLiBSZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBVbmRlcnNjb3JlIG9iamVjdC4KXy5ub0NvbmZsaWN0ID0gLT4KICByb290Ll8gPSBwcmV2aW91c1VuZGVyc2NvcmUKICB0aGlzCgoKIyBLZWVwIHRoZSBpZGVudGl0eSBmdW5jdGlvbiBhcm91bmQgZm9yIGRlZmF1bHQgaXRlcmF0b3JzLgpfLmlkZW50aXR5ID0gKHZhbHVlKSAtPiB2YWx1ZQoKCiMgUnVuIGEgZnVuY3Rpb24gYG5gIHRpbWVzLgpfLnRpbWVzID0gKG4sIGl0ZXJhdG9yLCBjb250ZXh0KSAtPgogIGl0ZXJhdG9yLmNhbGwgY29udGV4dCwgaSBmb3IgaSBpbiBbMC4uLm5dCgoKIyBCcmVhayBvdXQgb2YgdGhlIG1pZGRsZSBvZiBhbiBpdGVyYXRpb24uCl8uYnJlYWtMb29wID0gLT4gdGhyb3cgYnJlYWtlcgoKCiMgQWRkIHlvdXIgb3duIGN1c3RvbSBmdW5jdGlvbnMgdG8gdGhlIFVuZGVyc2NvcmUgb2JqZWN0LCBlbnN1cmluZyB0aGF0CiMgdGhleSdyZSBjb3JyZWN0bHkgYWRkZWQgdG8gdGhlIE9PUCB3cmFwcGVyIGFzIHdlbGwuCl8ubWl4aW4gPSAob2JqKSAtPgogIGZvciBuYW1lIGluIF8uZnVuY3Rpb25zKG9iaikKICAgIGFkZFRvV3JhcHBlciBuYW1lLCBfW25hbWVdID0gb2JqW25hbWVdCgoKIyBHZW5lcmF0ZSBhIHVuaXF1ZSBpbnRlZ2VyIGlkICh1bmlxdWUgd2l0aGluIHRoZSBlbnRpcmUgY2xpZW50IHNlc3Npb24pLgojIFVzZWZ1bCBmb3IgdGVtcG9yYXJ5IERPTSBpZHMuCmlkQ291bnRlciA9IDAKXy51bmlxdWVJZCA9IChwcmVmaXgpIC0+CiAgKHByZWZpeCBvciAnJykgKyBpZENvdW50ZXIrKwoKCiMgQnkgZGVmYXVsdCwgVW5kZXJzY29yZSB1c2VzICoqRVJCKiotc3R5bGUgdGVtcGxhdGUgZGVsaW1pdGVycywgY2hhbmdlIHRoZQojIGZvbGxvd2luZyB0ZW1wbGF0ZSBzZXR0aW5ncyB0byB1c2UgYWx0ZXJuYXRpdmUgZGVsaW1pdGVycy4KXy50ZW1wbGF0ZVNldHRpbmdzID0gewogIHN0YXJ0OiAnPCUnCiAgZW5kOiAnJT4nCiAgaW50ZXJwb2xhdGU6IC88JT0oLis/KSU+L2cKfQoKCiMgSmF2YVNjcmlwdCB0ZW1wbGF0aW5nIGEtbGEgKipFUkIqKiwgcGlsZmVyZWQgZnJvbSBKb2huIFJlc2lnJ3MKIyAqU2VjcmV0cyBvZiB0aGUgSmF2YVNjcmlwdCBOaW5qYSosIHBhZ2UgODMuCiMgU2luZ2xlLXF1b3RlIGZpeCBmcm9tIFJpY2sgU3RyYWhsLgojIFdpdGggYWx0ZXJhdGlvbnMgZm9yIGFyYml0cmFyeSBkZWxpbWl0ZXJzLCBhbmQgdG8gcHJlc2VydmUgd2hpdGVzcGFjZS4KXy50ZW1wbGF0ZSA9IChzdHIsIGRhdGEpIC0+CiAgYyA9IF8udGVtcGxhdGVTZXR0aW5ncwogIGVuZE1hdGNoID0gbmV3IFJlZ0V4cCgiJyg/PVteIitjLmVuZC5zdWJzdHIoMCwgMSkrIl0qIitlc2NhcGVSZWdFeHAoYy5lbmQpKyIpIiwiZyIpCiAgZm4gPSBuZXcgRnVuY3Rpb24gJ29iaicsCiAgICAndmFyIHA9W10scHJpbnQ9ZnVuY3Rpb24oKXtwLnB1c2guYXBwbHkocCxhcmd1bWVudHMpO307JyArCiAgICAnd2l0aChvYmp8fHt9KXtwLnB1c2goXCcnICsKICAgIHN0ci5yZXBsYWNlKC9cci9nLCAnXFxyJykKICAgICAgIC5yZXBsYWNlKC9cbi9nLCAnXFxuJykKICAgICAgIC5yZXBsYWNlKC9cdC9nLCAnXFx0JykKICAgICAgIC5yZXBsYWNlKGVuZE1hdGNoLCLvv73vv73vv70iKQogICAgICAgLnNwbGl0KCInIikuam9pbigiXFwnIikKICAgICAgIC5zcGxpdCgi77+977+977+9Iikuam9pbigiJyIpCiAgICAgICAucmVwbGFjZShjLmludGVycG9sYXRlLCAiJywkMSwnIikKICAgICAgIC5zcGxpdChjLnN0YXJ0KS5qb2luKCInKTsiKQogICAgICAgLnNwbGl0KGMuZW5kKS5qb2luKCJwLnB1c2goJyIpICsKICAgICAgICInKTt9cmV0dXJuIHAuam9pbignJyk7IgogIGlmIGRhdGEgdGhlbiBmbihkYXRhKSBlbHNlIGZuCgoKIyBBbGlhc2VzCiMgLS0tLS0tLQoKXy5mb3JFYWNoID0gXy5lYWNoCl8uZm9sZGwgPSBfLmluamVjdCA9IF8ucmVkdWNlCl8uZm9sZHIgPSBfLnJlZHVjZVJpZ2h0Cl8uc2VsZWN0ID0gXy5maWx0ZXIKXy5hbGwgPSBfLmV2ZXJ5Cl8uYW55ID0gXy5zb21lCl8uY29udGFpbnMgPSBfLmluY2x1ZGUKXy5oZWFkID0gXy5maXJzdApfLnRhaWwgPSBfLnJlc3QKXy5tZXRob2RzID0gXy5mdW5jdGlvbnMKCgojIFNldHVwIHRoZSBPT1AgV3JhcHBlcgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKIyBJZiBVbmRlcnNjb3JlIGlzIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLCBpdCByZXR1cm5zIGEgd3JhcHBlZCBvYmplY3QgdGhhdAojIGNhbiBiZSB1c2VkIE9PLXN0eWxlLiBUaGlzIHdyYXBwZXIgaG9sZHMgYWx0ZXJlZCB2ZXJzaW9ucyBvZiBhbGwgdGhlCiMgdW5kZXJzY29yZSBmdW5jdGlvbnMuIFdyYXBwZWQgb2JqZWN0cyBtYXkgYmUgY2hhaW5lZC4Kd3JhcHBlciA9IChvYmopIC0+CiAgdGhpcy5fd3JhcHBlZCA9IG9iagogIHRoaXMKCgojIEhlbHBlciBmdW5jdGlvbiB0byBjb250aW51ZSBjaGFpbmluZyBpbnRlcm1lZGlhdGUgcmVzdWx0cy4KcmVzdWx0ID0gKG9iaiwgY2hhaW4pIC0+CiAgaWYgY2hhaW4gdGhlbiBfKG9iaikuY2hhaW4oKSBlbHNlIG9iagoKCiMgQSBtZXRob2QgdG8gZWFzaWx5IGFkZCBmdW5jdGlvbnMgdG8gdGhlIE9PUCB3cmFwcGVyLgphZGRUb1dyYXBwZXIgPSAobmFtZSwgZnVuYykgLT4KICB3cmFwcGVyLnByb3RvdHlwZVtuYW1lXSA9IC0+CiAgICBhcmdzID0gXy50b0FycmF5IGFyZ3VtZW50cwogICAgdW5zaGlmdC5jYWxsIGFyZ3MsIHRoaXMuX3dyYXBwZWQKICAgIHJlc3VsdCBmdW5jLmFwcGx5KF8sIGFyZ3MpLCB0aGlzLl9jaGFpbgoKCiMgQWRkIGFsbCBvZnRoZSBVbmRlcnNjb3JlIGZ1bmN0aW9ucyB0byB0aGUgd3JhcHBlciBvYmplY3QuCl8ubWl4aW4gXwoKCiMgQWRkIGFsbCBtdXRhdG9yIEFycmF5IGZ1bmN0aW9ucyB0byB0aGUgd3JhcHBlci4KXy5lYWNoIFsncG9wJywgJ3B1c2gnLCAncmV2ZXJzZScsICdzaGlmdCcsICdzb3J0JywgJ3NwbGljZScsICd1bnNoaWZ0J10sIChuYW1lKSAtPgogIG1ldGhvZCA9IEFycmF5LnByb3RvdHlwZVtuYW1lXQogIHdyYXBwZXIucHJvdG90eXBlW25hbWVdID0gLT4KICAgIG1ldGhvZC5hcHBseSh0aGlzLl93cmFwcGVkLCBhcmd1bWVudHMpCiAgICByZXN1bHQodGhpcy5fd3JhcHBlZCwgdGhpcy5fY2hhaW4pCgoKIyBBZGQgYWxsIGFjY2Vzc29yIEFycmF5IGZ1bmN0aW9ucyB0byB0aGUgd3JhcHBlci4KXy5lYWNoIFsnY29uY2F0JywgJ2pvaW4nLCAnc2xpY2UnXSwgKG5hbWUpIC0+CiAgbWV0aG9kID0gQXJyYXkucHJvdG90eXBlW25hbWVdCiAgd3JhcHBlci5wcm90b3R5cGVbbmFtZV0gPSAtPgogICAgcmVzdWx0KG1ldGhvZC5hcHBseSh0aGlzLl93cmFwcGVkLCBhcmd1bWVudHMpLCB0aGlzLl9jaGFpbikKCgojIFN0YXJ0IGNoYWluaW5nIGEgd3JhcHBlZCBVbmRlcnNjb3JlIG9iamVjdC4Kd3JhcHBlcjo6Y2hhaW4gPSAtPgogIHRoaXMuX2NoYWluID0gdHJ1ZQogIHRoaXMKCgojIEV4dHJhY3RzIHRoZSByZXN1bHQgZnJvbSBhIHdyYXBwZWQgYW5kIGNoYWluZWQgb2JqZWN0Lgp3cmFwcGVyOjp2YWx1ZSA9IC0+IHRoaXMuX3dyYXBwZWQKPC90ZXh0YXJlYT48L2Zvcm0+CiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwge30pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQveC1jb2ZmZWVzY3JpcHQ8L2NvZGU+LjwvcD4KCiAgICA8cD5UaGUgQ29mZmVlU2NyaXB0IG1vZGUgd2FzIHdyaXR0ZW4gYnkgSmVmZiBQaWNraGFyZHQgKDxhIGhyZWY9IkxJQ0VOU0UiPmxpY2Vuc2U8L2E+KS48L3A+CgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/coffeescript/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[VGhlIE1JVCBMaWNlbnNlCgpDb3B5cmlnaHQgKGMpIDIwMTEgSmVmZiBQaWNraGFyZHQKTW9kaWZpZWQgZnJvbSB0aGUgUHl0aG9uIENvZGVNaXJyb3IgbW9kZSwgQ29weXJpZ2h0IChjKSAyMDEwIFRpbW90aHkgRmFycmVsbAoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgphbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOClRIRSBTT0ZUV0FSRS4=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/css/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/css/css.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJjc3MiLCBmdW5jdGlvbihjb25maWcpIHsKICB2YXIgaW5kZW50VW5pdCA9IGNvbmZpZy5pbmRlbnRVbml0LCB0eXBlOwogIGZ1bmN0aW9uIHJldChzdHlsZSwgdHApIHt0eXBlID0gdHA7IHJldHVybiBzdHlsZTt9CgogIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgaWYgKGNoID09ICJAIikge3N0cmVhbS5lYXRXaGlsZSgvW1x3XFxcLV0vKTsgcmV0dXJuIHJldCgibWV0YSIsIHN0cmVhbS5jdXJyZW50KCkpO30KICAgIGVsc2UgaWYgKGNoID09ICIvIiAmJiBzdHJlYW0uZWF0KCIqIikpIHsKICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkNDb21tZW50OwogICAgICByZXR1cm4gdG9rZW5DQ29tbWVudChzdHJlYW0sIHN0YXRlKTsKICAgIH0KICAgIGVsc2UgaWYgKGNoID09ICI8IiAmJiBzdHJlYW0uZWF0KCIhIikpIHsKICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblNHTUxDb21tZW50OwogICAgICByZXR1cm4gdG9rZW5TR01MQ29tbWVudChzdHJlYW0sIHN0YXRlKTsKICAgIH0KICAgIGVsc2UgaWYgKGNoID09ICI9IikgcmV0KG51bGwsICJjb21wYXJlIik7CiAgICBlbHNlIGlmICgoY2ggPT0gIn4iIHx8IGNoID09ICJ8IikgJiYgc3RyZWFtLmVhdCgiPSIpKSByZXR1cm4gcmV0KG51bGwsICJjb21wYXJlIik7CiAgICBlbHNlIGlmIChjaCA9PSAiXCIiIHx8IGNoID09ICInIikgewogICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuU3RyaW5nKGNoKTsKICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwogICAgfQogICAgZWxzZSBpZiAoY2ggPT0gIiMiKSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XFxcLV0vKTsKICAgICAgcmV0dXJuIHJldCgiYXRvbSIsICJoYXNoIik7CiAgICB9CiAgICBlbHNlIGlmIChjaCA9PSAiISIpIHsKICAgICAgc3RyZWFtLm1hdGNoKC9eXHMqXHcqLyk7CiAgICAgIHJldHVybiByZXQoImtleXdvcmQiLCAiaW1wb3J0YW50Iik7CiAgICB9CiAgICBlbHNlIGlmICgvXGQvLnRlc3QoY2gpKSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3LiVdLyk7CiAgICAgIHJldHVybiByZXQoIm51bWJlciIsICJ1bml0Iik7CiAgICB9CiAgICBlbHNlIGlmICgvWywuKz4qXC9dLy50ZXN0KGNoKSkgewogICAgICByZXR1cm4gcmV0KG51bGwsICJzZWxlY3Qtb3AiKTsKICAgIH0KICAgIGVsc2UgaWYgKC9bO3t9OlxbXF1dLy50ZXN0KGNoKSkgewogICAgICByZXR1cm4gcmV0KG51bGwsIGNoKTsKICAgIH0KICAgIGVsc2UgewogICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1xcXC1dLyk7CiAgICAgIHJldHVybiByZXQoInZhcmlhYmxlIiwgInZhcmlhYmxlIik7CiAgICB9CiAgfQoKICBmdW5jdGlvbiB0b2tlbkNDb21tZW50KHN0cmVhbSwgc3RhdGUpIHsKICAgIHZhciBtYXliZUVuZCA9IGZhbHNlLCBjaDsKICAgIHdoaWxlICgoY2ggPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgIGlmIChtYXliZUVuZCAmJiBjaCA9PSAiLyIpIHsKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBtYXliZUVuZCA9IChjaCA9PSAiKiIpOwogICAgfQogICAgcmV0dXJuIHJldCgiY29tbWVudCIsICJjb21tZW50Iik7CiAgfQoKICBmdW5jdGlvbiB0b2tlblNHTUxDb21tZW50KHN0cmVhbSwgc3RhdGUpIHsKICAgIHZhciBkYXNoZXMgPSAwLCBjaDsKICAgIHdoaWxlICgoY2ggPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgIGlmIChkYXNoZXMgPj0gMiAmJiBjaCA9PSAiPiIpIHsKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBkYXNoZXMgPSAoY2ggPT0gIi0iKSA/IGRhc2hlcyArIDEgOiAwOwogICAgfQogICAgcmV0dXJuIHJldCgiY29tbWVudCIsICJjb21tZW50Iik7CiAgfQoKICBmdW5jdGlvbiB0b2tlblN0cmluZyhxdW90ZSkgewogICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgY2g7CiAgICAgIHdoaWxlICgoY2ggPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgICAgaWYgKGNoID09IHF1b3RlICYmICFlc2NhcGVkKQogICAgICAgICAgYnJlYWs7CiAgICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkICYmIGNoID09ICJcXCI7CiAgICAgIH0KICAgICAgaWYgKCFlc2NhcGVkKSBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsKICAgICAgcmV0dXJuIHJldCgic3RyaW5nIiwgInN0cmluZyIpOwogICAgfTsKICB9CgogIHJldHVybiB7CiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbihiYXNlKSB7CiAgICAgIHJldHVybiB7dG9rZW5pemU6IHRva2VuQmFzZSwKICAgICAgICAgICAgICBiYXNlSW5kZW50OiBiYXNlIHx8IDAsCiAgICAgICAgICAgICAgc3RhY2s6IFtdfTsKICAgIH0sCgogICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDsKICAgICAgdmFyIHN0eWxlID0gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CgogICAgICB2YXIgY29udGV4dCA9IHN0YXRlLnN0YWNrW3N0YXRlLnN0YWNrLmxlbmd0aC0xXTsKICAgICAgaWYgKHR5cGUgPT0gImhhc2giICYmIGNvbnRleHQgPT0gInJ1bGUiKSBzdHlsZSA9ICJhdG9tIjsKICAgICAgZWxzZSBpZiAoc3R5bGUgPT0gInZhcmlhYmxlIikgewogICAgICAgIGlmIChjb250ZXh0ID09ICJydWxlIikgc3R5bGUgPSAibnVtYmVyIjsKICAgICAgICBlbHNlIGlmICghY29udGV4dCB8fCBjb250ZXh0ID09ICJAbWVkaWF7Iikgc3R5bGUgPSAidGFnIjsKICAgICAgfQoKICAgICAgaWYgKGNvbnRleHQgPT0gInJ1bGUiICYmIC9eW1x7XH07XSQvLnRlc3QodHlwZSkpCiAgICAgICAgc3RhdGUuc3RhY2sucG9wKCk7CiAgICAgIGlmICh0eXBlID09ICJ7IikgewogICAgICAgIGlmIChjb250ZXh0ID09ICJAbWVkaWEiKSBzdGF0ZS5zdGFja1tzdGF0ZS5zdGFjay5sZW5ndGgtMV0gPSAiQG1lZGlheyI7CiAgICAgICAgZWxzZSBzdGF0ZS5zdGFjay5wdXNoKCJ7Iik7CiAgICAgIH0KICAgICAgZWxzZSBpZiAodHlwZSA9PSAifSIpIHN0YXRlLnN0YWNrLnBvcCgpOwogICAgICBlbHNlIGlmICh0eXBlID09ICJAbWVkaWEiKSBzdGF0ZS5zdGFjay5wdXNoKCJAbWVkaWEiKTsKICAgICAgZWxzZSBpZiAoY29udGV4dCA9PSAieyIgJiYgdHlwZSAhPSAiY29tbWVudCIpIHN0YXRlLnN0YWNrLnB1c2goInJ1bGUiKTsKICAgICAgcmV0dXJuIHN0eWxlOwogICAgfSwKCiAgICBpbmRlbnQ6IGZ1bmN0aW9uKHN0YXRlLCB0ZXh0QWZ0ZXIpIHsKICAgICAgdmFyIG4gPSBzdGF0ZS5zdGFjay5sZW5ndGg7CiAgICAgIGlmICgvXlx9Ly50ZXN0KHRleHRBZnRlcikpCiAgICAgICAgbiAtPSBzdGF0ZS5zdGFja1tzdGF0ZS5zdGFjay5sZW5ndGgtMV0gPT0gInJ1bGUiID8gMiA6IDE7CiAgICAgIHJldHVybiBzdGF0ZS5iYXNlSW5kZW50ICsgbiAqIGluZGVudFVuaXQ7CiAgICB9LAoKICAgIGVsZWN0cmljQ2hhcnM6ICJ9IgogIH07Cn0pOwoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L2NzcyIsICJjc3MiKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/css/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IENTUyBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iY3NzLmpzIj48L3NjcmlwdD4KICAgIDxzdHlsZT4uQ29kZU1pcnJvciB7YmFja2dyb3VuZDogI2Y4ZjhmODt9PC9zdHlsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogQ1NTIG1vZGU8L2gxPgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KLyogU29tZSBleGFtcGxlIENTUyAqLwoKQGltcG9ydCB1cmwoInNvbWV0aGluZy5jc3MiKTsKCmJvZHkgewogIG1hcmdpbjogMDsKICBwYWRkaW5nOiAzZW0gNmVtOwogIGZvbnQtZmFtaWx5OiB0YWhvbWEsIGFyaWFsLCBzYW5zLXNlcmlmOwogIGNvbG9yOiAjMDAwOwp9CgojbmF2aWdhdGlvbiBhIHsKICBmb250LXdlaWdodDogYm9sZDsKICB0ZXh0LWRlY29yYXRpb246IG5vbmUgIWltcG9ydGFudDsKfQoKaDEgewogIGZvbnQtc2l6ZTogMi41ZW07Cn0KCmgyIHsKICBmb250LXNpemU6IDEuN2VtOwp9CgpoMTpiZWZvcmUsIGgyOmJlZm9yZSB7CiAgY29udGVudDogIjo6IjsKfQoKY29kZSB7CiAgZm9udC1mYW1pbHk6IGNvdXJpZXIsIG1vbm9zcGFjZTsKICBmb250LXNpemU6IDgwJTsKICBjb2xvcjogIzQxOEE4QTsKfQo8L3RleHRhcmVhPjwvZm9ybT4KICAgIDxzY3JpcHQ+CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7fSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD48c3Ryb25nPk1JTUUgdHlwZXMgZGVmaW5lZDo8L3N0cm9uZz4gPGNvZGU+dGV4dC9jc3M8L2NvZGU+LjwvcD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/diff/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/diff/diff.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[c3Bhbi5jbS1yYW5nZWluZm8ge2NvbG9yOiAjYTBiO30Kc3Bhbi5jbS1taW51cyB7Y29sb3I6IHJlZDt9CnNwYW4uY20tcGx1cyB7Y29sb3I6ICMyYjI7fQo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/diff/diff.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJkaWZmIiwgZnVuY3Rpb24oKSB7CiAgcmV0dXJuIHsKICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0pIHsKICAgICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICBpZiAoY2ggPT0gIisiKSByZXR1cm4gInBsdXMiOwogICAgICBpZiAoY2ggPT0gIi0iKSByZXR1cm4gIm1pbnVzIjsKICAgICAgaWYgKGNoID09ICJAIikgcmV0dXJuICJyYW5nZWluZm8iOwogICAgfQogIH07Cn0pOwoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtZGlmZiIsICJkaWZmIik7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/diff/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IERpZmYgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9ImRpZmYuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJkaWZmLmNzcyI+CiAgICA8c3R5bGU+LkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCAjZGRkOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RkZDt9PC9zdHlsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogRGlmZiBtb2RlPC9oMT4KICAgIDxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+CmRpZmYgLS1naXQgYS9pbmRleC5odG1sIGIvaW5kZXguaHRtbAppbmRleCBjMWQ5MTU2Li43NzY0NzQ0IDEwMDY0NAotLS0gYS9pbmRleC5odG1sCisrKyBiL2luZGV4Lmh0bWwKQEAgLTk1LDcgKzk1LDggQEAgU3RyaW5nU3RyZWFtLnByb3RvdHlwZSA9IHsKICAgICA8c2NyaXB0PgogICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICAgbGluZU51bWJlcnM6IHRydWUsCi0gICAgICAgIGF1dG9NYXRjaEJyYWNrZXRzOiB0cnVlCisgICAgICAgIGF1dG9NYXRjaEJyYWNrZXRzOiB0cnVlLAorICAgICAgb25HdXR0ZXJDbGljazogZnVuY3Rpb24oeCl7Y29uc29sZS5sb2coeCk7fQogICAgICAgfSk7CiAgICAgPC9zY3JpcHQ+CiAgIDwvYm9keT4KZGlmZiAtLWdpdCBhL2xpYi9jb2RlbWlycm9yLmpzIGIvbGliL2NvZGVtaXJyb3IuanMKaW5kZXggMDQ2NDZhOS4uOWEzOWNjNyAxMDA2NDQKLS0tIGEvbGliL2NvZGVtaXJyb3IuanMKKysrIGIvbGliL2NvZGVtaXJyb3IuanMKQEAgLTM5OSwxMCArMzk5LDE2IEBAIHZhciBDb2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIH0KIAogICAgIGZ1bmN0aW9uIG9uTW91c2VEb3duKGUpIHsKLSAgICAgIHZhciBzdGFydCA9IHBvc0Zyb21Nb3VzZShlKSwgbGFzdCA9IHN0YXJ0OworICAgICAgdmFyIHN0YXJ0ID0gcG9zRnJvbU1vdXNlKGUpLCBsYXN0ID0gc3RhcnQsIHRhcmdldCA9IGUudGFyZ2V0KCk7CiAgICAgICBpZiAoIXN0YXJ0KSByZXR1cm47CiAgICAgICBzZXRDdXJzb3Ioc3RhcnQubGluZSwgc3RhcnQuY2gsIGZhbHNlKTsKICAgICAgIGlmIChlLmJ1dHRvbigpICE9IDEpIHJldHVybjsKKyAgICAgIGlmICh0YXJnZXQucGFyZW50Tm9kZSA9PSBndXR0ZXIpIHsKKyAgICAgICAgaWYgKG9wdGlvbnMub25HdXR0ZXJDbGljaykKKyAgICAgICAgICBvcHRpb25zLm9uR3V0dGVyQ2xpY2soaW5kZXhPZihndXR0ZXIuY2hpbGROb2RlcywgdGFyZ2V0KSArIHNob3dpbmdGcm9tKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorCiAgICAgICBpZiAoIWZvY3VzZWQpIG9uRm9jdXMoKTsKIAogICAgICAgZS5zdG9wKCk7CkBAIC04MDgsNyArODE0LDcgQEAgdmFyIENvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICBmb3IgKHZhciBpID0gc2hvd2luZ0Zyb207IGkgPCBzaG93aW5nVG87ICsraSkgewogICAgICAgICB2YXIgbWFya2VyID0gbGluZXNbaV0uZ3V0dGVyTWFya2VyOwogICAgICAgICBpZiAobWFya2VyKSBodG1sLnB1c2goJzxkaXYgY2xhc3M9IicgKyBtYXJrZXIuc3R5bGUgKyAnIj4nICsgaHRtbEVzY2FwZShtYXJrZXIudGV4dCkgKyAnPC9kaXY+Jyk7Ci0gICAgICAgIGVsc2UgaHRtbC5wdXNoKCI8ZGl2PiIgKyAob3B0aW9ucy5saW5lTnVtYmVycyA/IGkgKyAxIDogIlx1MDBhMCIpICsgIjwvZGl2PiIpOworICAgICAgICBlbHNlIGh0bWwucHVzaCgiPGRpdj4iICsgKG9wdGlvbnMubGluZU51bWJlcnMgPyBpICsgb3B0aW9ucy5maXJzdExpbmVOdW1iZXIgOiAiXHUwMGEwIikgKyAiPC9kaXY+Iik7CiAgICAgICB9CiAgICAgICBndXR0ZXIuc3R5bGUuZGlzcGxheSA9ICJub25lIjsgLy8gVE9ETyB0ZXN0IHdoZXRoZXIgdGhpcyBhY3R1YWxseSBoZWxwcwogICAgICAgZ3V0dGVyLmlubmVySFRNTCA9IGh0bWwuam9pbigiIik7CkBAIC0xMzcxLDEwICsxMzc3LDggQEAgdmFyIENvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgIGlmIChvcHRpb24gPT0gInBhcnNlciIpIHNldFBhcnNlcih2YWx1ZSk7CiAgICAgICAgIGVsc2UgaWYgKG9wdGlvbiA9PT0gImxpbmVOdW1iZXJzIikgc2V0TGluZU51bWJlcnModmFsdWUpOwogICAgICAgICBlbHNlIGlmIChvcHRpb24gPT09ICJndXR0ZXIiKSBzZXRHdXR0ZXIodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChvcHRpb24gPT09ICJyZWFkT25seSIpIG9wdGlvbnMucmVhZE9ubHkgPSB2YWx1ZTsKLSAgICAgICAgZWxzZSBpZiAob3B0aW9uID09PSAiaW5kZW50VW5pdCIpIHtvcHRpb25zLmluZGVudFVuaXQgPSBpbmRlbnRVbml0ID0gdmFsdWU7IHNldFBhcnNlcihvcHRpb25zLnBhcnNlcik7fQotICAgICAgICBlbHNlIGlmICgvXig/OmVudGVyTW9kZXx0YWJNb2RlfGluZGVudFdpdGhUYWJzfHJlYWRPbmx5fGF1dG9NYXRjaEJyYWNrZXRzfHVuZG9EZXB0aCkkLy50ZXN0KG9wdGlvbikpIG9wdGlvbnNbb3B0aW9uXSA9IHZhbHVlOwotICAgICAgICBlbHNlIHRocm93IG5ldyBFcnJvcigiQ2FuJ3Qgc2V0IG9wdGlvbiAiICsgb3B0aW9uKTsKKyAgICAgICAgZWxzZSBpZiAob3B0aW9uID09PSAiaW5kZW50VW5pdCIpIHtvcHRpb25zLmluZGVudFVuaXQgPSB2YWx1ZTsgc2V0UGFyc2VyKG9wdGlvbnMucGFyc2VyKTt9CisgICAgICAgIGVsc2Ugb3B0aW9uc1tvcHRpb25dID0gdmFsdWU7CiAgICAgICB9LAogICAgICAgY3Vyc29yQ29vcmRzOiBjdXJzb3JDb29yZHMsCiAgICAgICB1bmRvOiBvcGVyYXRpb24odW5kbyksCkBAIC0xNDAyLDcgKzE0MDYsOCBAQCB2YXIgQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIHJlcGxhY2VSYW5nZTogb3BlcmF0aW9uKHJlcGxhY2VSYW5nZSksCiAKICAgICAgIG9wZXJhdGlvbjogZnVuY3Rpb24oZil7cmV0dXJuIG9wZXJhdGlvbihmKSgpO30sCi0gICAgICByZWZyZXNoOiBmdW5jdGlvbigpe3VwZGF0ZURpc3BsYXkoW3tmcm9tOiAwLCB0bzogbGluZXMubGVuZ3RofV0pO30KKyAgICAgIHJlZnJlc2g6IGZ1bmN0aW9uKCl7dXBkYXRlRGlzcGxheShbe2Zyb206IDAsIHRvOiBsaW5lcy5sZW5ndGh9XSk7fSwKKyAgICAgIGdldElucHV0RmllbGQ6IGZ1bmN0aW9uKCl7cmV0dXJuIGlucHV0O30KICAgICB9OwogICAgIHJldHVybiBpbnN0YW5jZTsKICAgfQpAQCAtMTQyMCw2ICsxNDI1LDcgQEAgdmFyIENvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgcmVhZE9ubHk6IGZhbHNlLAogICAgIG9uQ2hhbmdlOiBudWxsLAogICAgIG9uQ3Vyc29yQWN0aXZpdHk6IG51bGwsCisgICAgb25HdXR0ZXJDbGljazogbnVsbCwKICAgICBhdXRvTWF0Y2hCcmFja2V0czogZmFsc2UsCiAgICAgd29ya1RpbWU6IDIwMCwKICAgICB3b3JrRGVsYXk6IDMwMCwKPC90ZXh0YXJlYT48L2Zvcm0+CiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwge30pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQveC1kaWZmPC9jb2RlPi48L3A+CgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/gfm/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/gfm/gfm.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJnZm0iLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogIHZhciBtZE1vZGUgPSBDb2RlTWlycm9yLmdldE1vZGUoY29uZmlnLCAibWFya2Rvd24iKTsKICB2YXIgYWxpYXNlcyA9IHsKICAgIGh0bWw6ICJodG1sbWl4ZWQiLAogICAganM6ICJqYXZhc2NyaXB0IiwKICAgIGpzb246ICJhcHBsaWNhdGlvbi9qc29uIiwKICAgIGM6ICJ0ZXh0L3gtY3NyYyIsCiAgICAiYysrIjogInRleHQveC1jKytzcmMiLAogICAgamF2YTogInRleHQveC1qYXZhIiwKICAgIGNzaGFycDogInRleHQveC1jc2hhcnAiLAogICAgImMjIjogInRleHQveC1jc2hhcnAiLAogIH07CgogIC8vIG1ha2UgdGhpcyBsYXp5IHNvIHRoYXQgd2UgZG9uJ3QgbmVlZCB0byBsb2FkIEdGTSBsYXN0CiAgdmFyIGdldE1vZGUgPSAoZnVuY3Rpb24gKCkgewogICAgdmFyIGksIG1vZGVzID0ge30sIG1pbWVzID0ge30sIG1pbWU7CgogICAgdmFyIGxpc3QgPSBDb2RlTWlycm9yLmxpc3RNb2RlcygpOwogICAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgbW9kZXNbbGlzdFtpXV0gPSBsaXN0W2ldOwogICAgfQogICAgdmFyIG1pbWVzTGlzdCA9IENvZGVNaXJyb3IubGlzdE1JTUVzKCk7CiAgICBmb3IgKGkgPSAwOyBpIDwgbWltZXNMaXN0Lmxlbmd0aDsgaSsrKSB7CiAgICAgIG1pbWUgPSBtaW1lc0xpc3RbaV0ubWltZTsKICAgICAgbWltZXNbbWltZV0gPSBtaW1lc0xpc3RbaV0ubWltZTsKICAgIH0KCiAgICBmb3IgKHZhciBhIGluIGFsaWFzZXMpIHsKICAgICAgaWYgKGFsaWFzZXNbYV0gaW4gbW9kZXMgfHwgYWxpYXNlc1thXSBpbiBtaW1lcykKICAgICAgICBtb2Rlc1thXSA9IGFsaWFzZXNbYV07CiAgICB9CiAgICAKICAgIHJldHVybiBmdW5jdGlvbiAobGFuZykgewogICAgICByZXR1cm4gbW9kZXNbbGFuZ10gPyBDb2RlTWlycm9yLmdldE1vZGUoY29uZmlnLCBtb2Rlc1tsYW5nXSkgOiBudWxsOwogICAgfQogIH0oKSk7CgogIGZ1bmN0aW9uIG1hcmtkb3duKHN0cmVhbSwgc3RhdGUpIHsKICAgIC8vIGludGVyY2VwdCBmZW5jZWQgY29kZSBibG9ja3MKICAgIGlmIChzdHJlYW0uc29sKCkgJiYgc3RyZWFtLm1hdGNoKC9eYGBgKFtcdysjXSopLykpIHsKICAgICAgLy8gdHJ5IHN3aXRjaGluZyBtb2RlCiAgICAgIHN0YXRlLmxvY2FsTW9kZSA9IGdldE1vZGUoUmVnRXhwLiQxKQogICAgICBpZiAoc3RhdGUubG9jYWxNb2RlKQogICAgICAgIHN0YXRlLmxvY2FsU3RhdGUgPSBzdGF0ZS5sb2NhbE1vZGUuc3RhcnRTdGF0ZSgpOwoKICAgICAgc3RhdGUudG9rZW4gPSBsb2NhbDsKICAgICAgcmV0dXJuICdjb2RlJzsKICAgIH0KCiAgICByZXR1cm4gbWRNb2RlLnRva2VuKHN0cmVhbSwgc3RhdGUubWRTdGF0ZSk7CiAgfQoKICBmdW5jdGlvbiBsb2NhbChzdHJlYW0sIHN0YXRlKSB7CiAgICBpZiAoc3RyZWFtLnNvbCgpICYmIHN0cmVhbS5tYXRjaCgvXmBgYC8pKSB7CiAgICAgIHN0YXRlLmxvY2FsTW9kZSA9IHN0YXRlLmxvY2FsU3RhdGUgPSBudWxsOwogICAgICBzdGF0ZS50b2tlbiA9IG1hcmtkb3duOwogICAgICByZXR1cm4gJ2NvZGUnOwogICAgfQogICAgZWxzZSBpZiAoc3RhdGUubG9jYWxNb2RlKSB7CiAgICAgIHJldHVybiBzdGF0ZS5sb2NhbE1vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZS5sb2NhbFN0YXRlKTsKICAgIH0gZWxzZSB7CiAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTsKICAgICAgcmV0dXJuICdjb2RlJzsKICAgIH0KICB9CgogIC8vIGN1c3RvbSBoYW5kbGVUZXh0IHRvIHByZXZlbnQgZW1waGFzaXMgaW4gdGhlIG1pZGRsZSBvZiBhIHdvcmQKICAvLyBhbmQgYWRkIGF1dG9saW5raW5nCiAgZnVuY3Rpb24gaGFuZGxlVGV4dChzdHJlYW0sIG1kU3RhdGUpIHsKICAgIHZhciBtYXRjaDsKICAgIGlmIChzdHJlYW0ubWF0Y2goL15cdys6XC9cL1xTKy8pKSB7CiAgICAgIHJldHVybiAnbGlua2hyZWYnOwogICAgfQogICAgaWYgKHN0cmVhbS5tYXRjaCgvXlteXFsqXFw8PmAgX11bXlxbKlxcPD5gIF0qW15cWypcXDw+YCBfXS8pKSB7CiAgICAgIHJldHVybiBtZE1vZGUuZ2V0VHlwZShtZFN0YXRlKTsKICAgIH0KICAgIGlmIChtYXRjaCA9IHN0cmVhbS5tYXRjaCgvXlteXFsqXFw8PmAgXSsvKSkgewogICAgICB2YXIgd29yZCA9IG1hdGNoWzBdOwogICAgICBpZiAod29yZFswXSA9PT0gJ18nICYmIHdvcmRbd29yZC5sZW5ndGgtMV0gPT09ICdfJykgewogICAgICAgIHN0cmVhbS5iYWNrVXAod29yZC5sZW5ndGgpOwogICAgICAgIHJldHVybiB1bmRlZmluZWQ7CiAgICAgIH0KICAgICAgcmV0dXJuIG1kTW9kZS5nZXRUeXBlKG1kU3RhdGUpOwogICAgfQogICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0KCiAgcmV0dXJuIHsKICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkgewogICAgICB2YXIgbWRTdGF0ZSA9IG1kTW9kZS5zdGFydFN0YXRlKCk7CiAgICAgIG1kU3RhdGUudGV4dCA9IGhhbmRsZVRleHQ7CiAgICAgIHJldHVybiB7dG9rZW46IG1hcmtkb3duLCBtb2RlOiAibWFya2Rvd24iLCBtZFN0YXRlOiBtZFN0YXRlLAogICAgICAgICAgICAgIGxvY2FsTW9kZTogbnVsbCwgbG9jYWxTdGF0ZTogbnVsbH07CiAgICB9LAoKICAgIGNvcHlTdGF0ZTogZnVuY3Rpb24oc3RhdGUpIHsKICAgICAgcmV0dXJuIHt0b2tlbjogc3RhdGUudG9rZW4sIG1vZGU6IHN0YXRlLm1vZGUsIG1kU3RhdGU6IENvZGVNaXJyb3IuY29weVN0YXRlKG1kTW9kZSwgc3RhdGUubWRTdGF0ZSksCiAgICAgICAgICAgICAgbG9jYWxNb2RlOiBzdGF0ZS5sb2NhbE1vZGUsCiAgICAgICAgICAgICAgbG9jYWxTdGF0ZTogc3RhdGUubG9jYWxNb2RlID8gQ29kZU1pcnJvci5jb3B5U3RhdGUoc3RhdGUubG9jYWxNb2RlLCBzdGF0ZS5sb2NhbFN0YXRlKSA6IG51bGx9OwogICAgfSwKCiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICByZXR1cm4gc3RhdGUudG9rZW4oc3RyZWFtLCBzdGF0ZSk7CiAgICB9CiAgfQp9KTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/gfm/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEdGTSBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4veG1sL3htbC5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vbWFya2Rvd24vbWFya2Rvd24uanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9ImdmbS5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vamF2YXNjcmlwdC9qYXZhc2NyaXB0LmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vbWFya2Rvd24vbWFya2Rvd24uY3NzIj4KICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO308L3N0eWxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBHRk0gbW9kZTwvaDE+Cgo8IS0tIHNvdXJjZTogaHR0cDovL2RhcmluZ2ZpcmViYWxsLm5ldC9wcm9qZWN0cy9tYXJrZG93bi9iYXNpY3MudGV4dCAtLT4KPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KR2l0aHViIEZsYXZvcmVkIE1hcmtkb3duCj09PT09PT09PT09PT09PT09PT09PT09PQoKRXZlcnl0aGluZyBmcm9tIG1hcmtkb3duIHBsdXMgR0ZNIGZlYXR1cmVzOgoKIyMgRmVuY2VkIGNvZGUgYmxvY2tzCgpgYGBqYXZhc2NyaXB0CmZvciAodmFyIGkgPSAwOyBpICZsdDsgaXRlbXMubGVuZ3RoOyBpKyspIHsKICAgIGNvbnNvbGUubG9nKGl0ZW1zW2ldLCBpKTsgLy8gbG9nIHRoZW0KfQpgYGAKClNlZSBodHRwOi8vZ2l0aHViLmdpdGh1Yi5jb20vZ2l0aHViLWZsYXZvcmVkLW1hcmtkb3duLwoKPC90ZXh0YXJlYT48L2Zvcm0+CgogICAgPHNjcmlwdD4KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICBtb2RlOiAnZ2ZtJywKICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgICAgICBtYXRjaEJyYWNrZXRzOiB0cnVlLAogICAgICAgIHRoZW1lOiAiZGVmYXVsdCIKICAgICAgfSk7CiAgICA8L3NjcmlwdD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/go/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/go/go.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJnbyIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgdmFyIGluZGVudFVuaXQgPSBjb25maWcuaW5kZW50VW5pdDsKCiAgdmFyIGtleXdvcmRzID0gewogICAgImJyZWFrIjp0cnVlLCAiY2FzZSI6dHJ1ZSwgImNoYW4iOnRydWUsICJjb25zdCI6dHJ1ZSwgImNvbnRpbnVlIjp0cnVlLAogICAgImRlZmF1bHQiOnRydWUsICJkZWZlciI6dHJ1ZSwgImVsc2UiOnRydWUsICJmYWxsdGhyb3VnaCI6dHJ1ZSwgImZvciI6dHJ1ZSwKICAgICJmdW5jIjp0cnVlLCAiZ28iOnRydWUsICJnb3RvIjp0cnVlLCAiaWYiOnRydWUsICJpbXBvcnQiOnRydWUsICJpbnRlcmZhY2UiOnRydWUsCiAgICAibWFwIjp0cnVlLCAicGFja2FnZSI6dHJ1ZSwgInJhbmdlIjp0cnVlLCAicmV0dXJuIjp0cnVlLCAic2VsZWN0Ijp0cnVlLAogICAgInN0cnVjdCI6dHJ1ZSwgInN3aXRjaCI6dHJ1ZSwgInR5cGUiOnRydWUsICJ2YXIiOnRydWUsICJib29sIjp0cnVlLCAiYnl0ZSI6dHJ1ZSwKICAgICJjb21wbGV4NjQiOnRydWUsICJjb21wbGV4MTI4Ijp0cnVlLCAiZmxvYXQzMiI6dHJ1ZSwgImZsb2F0NjQiOnRydWUsCiAgICAiaW50OCI6dHJ1ZSwgImludDE2Ijp0cnVlLCAiaW50MzIiOnRydWUsICJpbnQ2NCI6dHJ1ZSwgInN0cmluZyI6dHJ1ZSwKICAgICJ1aW50OCI6dHJ1ZSwgInVpbnQxNiI6dHJ1ZSwgInVpbnQzMiI6dHJ1ZSwgInVpbnQ2NCI6dHJ1ZSwgImludCI6dHJ1ZSwKICAgICJ1aW50Ijp0cnVlLCAidWludHB0ciI6dHJ1ZQogIH07CgogIHZhciBhdG9tcyA9IHsKICAgICJ0cnVlIjp0cnVlLCAiZmFsc2UiOnRydWUsICJpb3RhIjp0cnVlLCAibmlsIjp0cnVlLCAiYXBwZW5kIjp0cnVlLAogICAgImNhcCI6dHJ1ZSwgImNsb3NlIjp0cnVlLCAiY29tcGxleCI6dHJ1ZSwgImNvcHkiOnRydWUsICJpbWFnIjp0cnVlLCAibGVuIjp0cnVlLAogICAgIm1ha2UiOnRydWUsICJuZXciOnRydWUsICJwYW5pYyI6dHJ1ZSwgInByaW50Ijp0cnVlLCAicHJpbnRsbiI6dHJ1ZSwKICAgICJyZWFsIjp0cnVlLCAicmVjb3ZlciI6dHJ1ZQogIH07CgogIHZhciBibG9ja0tleXdvcmRzID0gewogICAgImVsc2UiOnRydWUsICJmb3IiOnRydWUsICJmdW5jIjp0cnVlLCAiaWYiOnRydWUsICJpbnRlcmZhY2UiOnRydWUsCiAgICAic2VsZWN0Ijp0cnVlLCAic3RydWN0Ijp0cnVlLCAic3dpdGNoIjp0cnVlCiAgfTsKCiAgdmFyIGlzT3BlcmF0b3JDaGFyID0gL1srXC0qJl4lOj08PiF8XC9dLzsKCiAgdmFyIGN1clB1bmM7CgogIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgaWYgKGNoID09ICciJyB8fCBjaCA9PSAiJyIgfHwgY2ggPT0gImAiKSB7CiAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5TdHJpbmcoY2gpOwogICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICB9CiAgICBpZiAoL1tcZFwuXS8udGVzdChjaCkpIHsKICAgICAgaWYgKGNoID09ICIuIikgewogICAgICAgIHN0cmVhbS5tYXRjaCgvXlswLTldKyhbZUVdW1wtK10/WzAtOV0rKT8vKTsKICAgICAgfSBlbHNlIGlmIChjaCA9PSAiMCIpIHsKICAgICAgICBzdHJlYW0ubWF0Y2goL15beFhdWzAtOWEtZkEtRl0rLykgfHwgc3RyZWFtLm1hdGNoKC9eMFswLTddKy8pOwogICAgICB9IGVsc2UgewogICAgICAgIHN0cmVhbS5tYXRjaCgvXlswLTldKlwuP1swLTldKihbZUVdW1wtK10/WzAtOV0rKT8vKTsKICAgICAgfQogICAgICByZXR1cm4gIm51bWJlciI7CiAgICB9CiAgICBpZiAoL1tcW1xde31cKFwpLDtcOlwuXS8udGVzdChjaCkpIHsKICAgICAgY3VyUHVuYyA9IGNoOwogICAgICByZXR1cm4gbnVsbAogICAgfQogICAgaWYgKGNoID09ICIvIikgewogICAgICBpZiAoc3RyZWFtLmVhdCgiKiIpKSB7CiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkNvbW1lbnQ7CiAgICAgICAgcmV0dXJuIHRva2VuQ29tbWVudChzdHJlYW0sIHN0YXRlKTsKICAgICAgfQogICAgICBpZiAoc3RyZWFtLmVhdCgiLyIpKSB7CiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICAgIHJldHVybiAiY29tbWVudCI7CiAgICAgIH0KICAgIH0KICAgIGlmIChpc09wZXJhdG9yQ2hhci50ZXN0KGNoKSkgewogICAgICBzdHJlYW0uZWF0V2hpbGUoaXNPcGVyYXRvckNoYXIpOwogICAgICByZXR1cm4gIm9wZXJhdG9yIjsKICAgIH0KICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XCRfXS8pOwogICAgdmFyIGN1ciA9IHN0cmVhbS5jdXJyZW50KCk7CiAgICBpZiAoa2V5d29yZHMucHJvcGVydHlJc0VudW1lcmFibGUoY3VyKSkgewogICAgICBpZiAoYmxvY2tLZXl3b3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShjdXIpKSBjdXJQdW5jID0gIm5ld3N0YXRlbWVudCI7CiAgICAgIHJldHVybiAia2V5d29yZCI7CiAgICB9CiAgICBpZiAoYXRvbXMucHJvcGVydHlJc0VudW1lcmFibGUoY3VyKSkgcmV0dXJuICJhdG9tIjsKICAgIHJldHVybiAid29yZCI7CiAgfQoKICBmdW5jdGlvbiB0b2tlblN0cmluZyhxdW90ZSkgewogICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgbmV4dCwgZW5kID0gZmFsc2U7CiAgICAgIHdoaWxlICgobmV4dCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHsKICAgICAgICBpZiAobmV4dCA9PSBxdW90ZSAmJiAhZXNjYXBlZCkge2VuZCA9IHRydWU7IGJyZWFrO30KICAgICAgICBlc2NhcGVkID0gIWVzY2FwZWQgJiYgbmV4dCA9PSAiXFwiOwogICAgICB9CiAgICAgIGlmIChlbmQgfHwgIShlc2NhcGVkIHx8IHF1b3RlID09ICJgIikpCiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7CiAgICAgIHJldHVybiAic3RyaW5nIjsKICAgIH07CiAgfQoKICBmdW5jdGlvbiB0b2tlbkNvbW1lbnQoc3RyZWFtLCBzdGF0ZSkgewogICAgdmFyIG1heWJlRW5kID0gZmFsc2UsIGNoOwogICAgd2hpbGUgKGNoID0gc3RyZWFtLm5leHQoKSkgewogICAgICBpZiAoY2ggPT0gIi8iICYmIG1heWJlRW5kKSB7CiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgbWF5YmVFbmQgPSAoY2ggPT0gIioiKTsKICAgIH0KICAgIHJldHVybiAiY29tbWVudCI7CiAgfQoKICBmdW5jdGlvbiBDb250ZXh0KGluZGVudGVkLCBjb2x1bW4sIHR5cGUsIGFsaWduLCBwcmV2KSB7CiAgICB0aGlzLmluZGVudGVkID0gaW5kZW50ZWQ7CiAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjsKICAgIHRoaXMudHlwZSA9IHR5cGU7CiAgICB0aGlzLmFsaWduID0gYWxpZ247CiAgICB0aGlzLnByZXYgPSBwcmV2OwogIH0KICBmdW5jdGlvbiBwdXNoQ29udGV4dChzdGF0ZSwgY29sLCB0eXBlKSB7CiAgICByZXR1cm4gc3RhdGUuY29udGV4dCA9IG5ldyBDb250ZXh0KHN0YXRlLmluZGVudGVkLCBjb2wsIHR5cGUsIG51bGwsIHN0YXRlLmNvbnRleHQpOwogIH0KICBmdW5jdGlvbiBwb3BDb250ZXh0KHN0YXRlKSB7CiAgICB2YXIgdCA9IHN0YXRlLmNvbnRleHQudHlwZTsKICAgIGlmICh0ID09ICIpIiB8fCB0ID09ICJdIiB8fCB0ID09ICJ9IikKICAgICAgc3RhdGUuaW5kZW50ZWQgPSBzdGF0ZS5jb250ZXh0LmluZGVudGVkOwogICAgcmV0dXJuIHN0YXRlLmNvbnRleHQgPSBzdGF0ZS5jb250ZXh0LnByZXY7CiAgfQoKICAvLyBJbnRlcmZhY2UKCiAgcmV0dXJuIHsKICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKGJhc2Vjb2x1bW4pIHsKICAgICAgcmV0dXJuIHsKICAgICAgICB0b2tlbml6ZTogbnVsbCwKICAgICAgICBjb250ZXh0OiBuZXcgQ29udGV4dCgoYmFzZWNvbHVtbiB8fCAwKSAtIGluZGVudFVuaXQsIDAsICJ0b3AiLCBmYWxzZSksCiAgICAgICAgaW5kZW50ZWQ6IDAsCiAgICAgICAgc3RhcnRPZkxpbmU6IHRydWUKICAgICAgfTsKICAgIH0sCgogICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgdmFyIGN0eCA9IHN0YXRlLmNvbnRleHQ7CiAgICAgIGlmIChzdHJlYW0uc29sKCkpIHsKICAgICAgICBpZiAoY3R4LmFsaWduID09IG51bGwpIGN0eC5hbGlnbiA9IGZhbHNlOwogICAgICAgIHN0YXRlLmluZGVudGVkID0gc3RyZWFtLmluZGVudGF0aW9uKCk7CiAgICAgICAgc3RhdGUuc3RhcnRPZkxpbmUgPSB0cnVlOwogICAgICB9CiAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7CiAgICAgIGN1clB1bmMgPSBudWxsOwogICAgICB2YXIgc3R5bGUgPSAoc3RhdGUudG9rZW5pemUgfHwgdG9rZW5CYXNlKShzdHJlYW0sIHN0YXRlKTsKICAgICAgaWYgKHN0eWxlID09ICJjb21tZW50IikgcmV0dXJuIHN0eWxlOwogICAgICBpZiAoY3R4LmFsaWduID09IG51bGwpIGN0eC5hbGlnbiA9IHRydWU7CgogICAgICBpZiAoY3VyUHVuYyA9PSAieyIpIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0uY29sdW1uKCksICJ9Iik7CiAgICAgIGVsc2UgaWYgKGN1clB1bmMgPT0gIlsiKSBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLmNvbHVtbigpLCAiXSIpOwogICAgICBlbHNlIGlmIChjdXJQdW5jID09ICIoIikgcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbS5jb2x1bW4oKSwgIikiKTsKICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSAifSIpIHsKICAgICAgICB3aGlsZSAoY3R4LnR5cGUgPT0gInN0YXRlbWVudCIpIGN0eCA9IHBvcENvbnRleHQoc3RhdGUpOwogICAgICAgIGlmIChjdHgudHlwZSA9PSAifSIpIGN0eCA9IHBvcENvbnRleHQoc3RhdGUpOwogICAgICAgIHdoaWxlIChjdHgudHlwZSA9PSAic3RhdGVtZW50IikgY3R4ID0gcG9wQ29udGV4dChzdGF0ZSk7CiAgICAgIH0KICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSBjdHgudHlwZSkgcG9wQ29udGV4dChzdGF0ZSk7CiAgICAgIGVsc2UgaWYgKGN0eC50eXBlID09ICJ9IiB8fCBjdHgudHlwZSA9PSAidG9wIiB8fCAoY3R4LnR5cGUgPT0gInN0YXRlbWVudCIgJiYgY3VyUHVuYyA9PSAibmV3c3RhdGVtZW50IikpCiAgICAgICAgcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbS5jb2x1bW4oKSwgInN0YXRlbWVudCIpOwogICAgICBzdGF0ZS5zdGFydE9mTGluZSA9IGZhbHNlOwogICAgICByZXR1cm4gc3R5bGU7CiAgICB9LAoKICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlcikgewogICAgICBpZiAoc3RhdGUudG9rZW5pemUgIT0gdG9rZW5CYXNlICYmIHN0YXRlLnRva2VuaXplICE9IG51bGwpIHJldHVybiAwOwogICAgICB2YXIgY3R4ID0gc3RhdGUuY29udGV4dCwgZmlyc3RDaGFyID0gdGV4dEFmdGVyICYmIHRleHRBZnRlci5jaGFyQXQoMCk7CiAgICAgIGlmIChjdHgudHlwZSA9PSAic3RhdGVtZW50IiAmJiBmaXJzdENoYXIgPT0gIn0iKSBjdHggPSBjdHgucHJldjsKICAgICAgdmFyIGNsb3NpbmcgPSBmaXJzdENoYXIgPT0gY3R4LnR5cGU7CiAgICAgIGlmIChjdHgudHlwZSA9PSAic3RhdGVtZW50IikgcmV0dXJuIGN0eC5pbmRlbnRlZDsKICAgICAgZWxzZSBpZiAoY3R4LmFsaWduKSByZXR1cm4gY3R4LmNvbHVtbiArIChjbG9zaW5nID8gMCA6IDEpOwogICAgICBlbHNlIHJldHVybiBjdHguaW5kZW50ZWQgKyAoY2xvc2luZyA/IDAgOiBpbmRlbnRVbml0KTsKICAgIH0sCgogICAgZWxlY3RyaWNDaGFyczogInt9IgogIH07Cn0pOwoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtZ28iLCAiZ28iKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/go/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEdvIG1vZGU8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi90aGVtZS9lbGVnYW50LmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9ImdvLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICAgIDxzdHlsZT4uQ29kZU1pcnJvciB7Ym9yZGVyOjFweCBzb2xpZCAjOTk5OyBiYWNrZ3JvdW5kOiNmZmN9PC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogR28gbW9kZTwvaDE+Cgo8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgovLyBQcmltZSBTaWV2ZSBpbiBHby4KLy8gVGFrZW4gZnJvbSB0aGUgR28gc3BlY2lmaWNhdGlvbi4KLy8gQ29weXJpZ2h0IMKpIFRoZSBHbyBBdXRob3JzLgoKcGFja2FnZSBtYWluCgppbXBvcnQgImZtdCIKCi8vIFNlbmQgdGhlIHNlcXVlbmNlIDIsIDMsIDQsIC4uLiB0byBjaGFubmVsICdjaCcuCmZ1bmMgZ2VuZXJhdGUoY2ggY2hhbiZsdDstIGludCkgewoJZm9yIGkgOj0gMjsgOyBpKysgewoJCWNoICZsdDstIGkgIC8vIFNlbmQgJ2knIHRvIGNoYW5uZWwgJ2NoJwoJfQp9CgovLyBDb3B5IHRoZSB2YWx1ZXMgZnJvbSBjaGFubmVsICdzcmMnIHRvIGNoYW5uZWwgJ2RzdCcsCi8vIHJlbW92aW5nIHRob3NlIGRpdmlzaWJsZSBieSAncHJpbWUnLgpmdW5jIGZpbHRlcihzcmMgJmx0Oy1jaGFuIGludCwgZHN0IGNoYW4mbHQ7LSBpbnQsIHByaW1lIGludCkgewoJZm9yIGkgOj0gcmFuZ2Ugc3JjIHsgICAgLy8gTG9vcCBvdmVyIHZhbHVlcyByZWNlaXZlZCBmcm9tICdzcmMnLgoJCWlmIGklcHJpbWUgIT0gMCB7CgkJCWRzdCAmbHQ7LSBpICAvLyBTZW5kICdpJyB0byBjaGFubmVsICdkc3QnLgoJCX0KCX0KfQoKLy8gVGhlIHByaW1lIHNpZXZlOiBEYWlzeS1jaGFpbiBmaWx0ZXIgcHJvY2Vzc2VzIHRvZ2V0aGVyLgpmdW5jIHNpZXZlKCkgewoJY2ggOj0gbWFrZShjaGFuIGludCkgIC8vIENyZWF0ZSBhIG5ldyBjaGFubmVsLgoJZ28gZ2VuZXJhdGUoY2gpICAgICAgIC8vIFN0YXJ0IGdlbmVyYXRlKCkgYXMgYSBzdWJwcm9jZXNzLgoJZm9yIHsKCQlwcmltZSA6PSAmbHQ7LWNoCgkJZm10LlByaW50KHByaW1lLCAiXG4iKQoJCWNoMSA6PSBtYWtlKGNoYW4gaW50KQoJCWdvIGZpbHRlcihjaCwgY2gxLCBwcmltZSkKCQljaCA9IGNoMQoJfQp9CgpmdW5jIG1haW4oKSB7CglzaWV2ZSgpCn0KPC90ZXh0YXJlYT48L2Zvcm0+CgogICAgPHNjcmlwdD4KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICB0aGVtZTogImVsZWdhbnQiLAogICAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUsCiAgICAgICAgaW5kZW50VW5pdDogOCwKICAgICAgICB0YWJTaXplOiA4LAogICAgICAgIGluZGVudFdpdGhUYWJzOiB0cnVlLAogICAgICAgIG1vZGU6ICJ0ZXh0L3gtZ28iCiAgICAgIH0pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGU6PC9zdHJvbmc+IDxjb2RlPnRleHQveC1nbzwvY29kZT48L3A+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/groovy/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/groovy/groovy.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJncm9vdnkiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogIGZ1bmN0aW9uIHdvcmRzKHN0cikgewogICAgdmFyIG9iaiA9IHt9LCB3b3JkcyA9IHN0ci5zcGxpdCgiICIpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3b3Jkcy5sZW5ndGg7ICsraSkgb2JqW3dvcmRzW2ldXSA9IHRydWU7CiAgICByZXR1cm4gb2JqOwogIH0KICB2YXIga2V5d29yZHMgPSB3b3JkcygKICAgICJhYnN0cmFjdCBhcyBhc3NlcnQgYm9vbGVhbiBicmVhayBieXRlIGNhc2UgY2F0Y2ggY2hhciBjbGFzcyBjb25zdCBjb250aW51ZSBkZWYgZGVmYXVsdCAiICsKICAgICJkbyBkb3VibGUgZWxzZSBlbnVtIGV4dGVuZHMgZmluYWwgZmluYWxseSBmbG9hdCBmb3IgZ290byBpZiBpbXBsZW1lbnRzIGltcG9ydCBpbiAiICsKICAgICJpbnN0YW5jZW9mIGludCBpbnRlcmZhY2UgbG9uZyBuYXRpdmUgbmV3IHBhY2thZ2UgcHJpdmF0ZSBwcm90ZWN0ZWQgcHVibGljIHJldHVybiAiICsKICAgICJzaG9ydCBzdGF0aWMgc3RyaWN0ZnAgc3VwZXIgc3dpdGNoIHN5bmNocm9uaXplZCB0aHJlYWRzYWZlIHRocm93IHRocm93cyB0cmFuc2llbnQgIiArCiAgICAidHJ5IHZvaWQgdm9sYXRpbGUgd2hpbGUiKTsKICB2YXIgYmxvY2tLZXl3b3JkcyA9IHdvcmRzKCJjYXRjaCBjbGFzcyBkbyBlbHNlIGZpbmFsbHkgZm9yIGlmIHN3aXRjaCB0cnkgd2hpbGUgZW51bSBpbnRlcmZhY2UgZGVmIik7CiAgdmFyIGF0b21zID0gd29yZHMoIm51bGwgdHJ1ZSBmYWxzZSB0aGlzIik7CgogIHZhciBjdXJQdW5jOwogIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgaWYgKGNoID09ICciJyB8fCBjaCA9PSAiJyIpIHsKICAgICAgcmV0dXJuIHN0YXJ0U3RyaW5nKGNoLCBzdHJlYW0sIHN0YXRlKTsKICAgIH0KICAgIGlmICgvW1xbXF17fVwoXCksO1w6XC5dLy50ZXN0KGNoKSkgewogICAgICBjdXJQdW5jID0gY2g7CiAgICAgIHJldHVybiBudWxsCiAgICB9CiAgICBpZiAoL1xkLy50ZXN0KGNoKSkgewogICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1wuXS8pOwogICAgICBpZiAoc3RyZWFtLmVhdCgvZUUvKSkgeyBzdHJlYW0uZWF0KC9cK1wtLyk7IHN0cmVhbS5lYXRXaGlsZSgvXGQvKTsgfQogICAgICByZXR1cm4gIm51bWJlciI7CiAgICB9CiAgICBpZiAoY2ggPT0gIi8iKSB7CiAgICAgIGlmIChzdHJlYW0uZWF0KCIqIikpIHsKICAgICAgICBzdGF0ZS50b2tlbml6ZS5wdXNoKHRva2VuQ29tbWVudCk7CiAgICAgICAgcmV0dXJuIHRva2VuQ29tbWVudChzdHJlYW0sIHN0YXRlKTsKICAgICAgfQogICAgICBpZiAoc3RyZWFtLmVhdCgiLyIpKSB7CiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICAgIHJldHVybiAiY29tbWVudCI7CiAgICAgIH0KICAgICAgaWYgKGV4cGVjdEV4cHJlc3Npb24oc3RhdGUubGFzdFRva2VuKSkgewogICAgICAgIHJldHVybiBzdGFydFN0cmluZyhjaCwgc3RyZWFtLCBzdGF0ZSk7CiAgICAgIH0KICAgIH0KICAgIGlmIChjaCA9PSAiLSIgJiYgc3RyZWFtLmVhdCgiPiIpKSB7CiAgICAgIGN1clB1bmMgPSAiLT4iOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGlmICgvWytcLSomJT08PiE/fFwvfl0vLnRlc3QoY2gpKSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvWytcLSomJT08Pnx+XS8pOwogICAgICByZXR1cm4gIm9wZXJhdG9yIjsKICAgIH0KICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XCRfXS8pOwogICAgaWYgKGNoID09ICJAIikgeyBzdHJlYW0uZWF0V2hpbGUoL1tcd1wkX1wuXS8pOyByZXR1cm4gIm1ldGEiOyB9CiAgICBpZiAoc3RhdGUubGFzdFRva2VuID09ICIuIikgcmV0dXJuICJwcm9wZXJ0eSI7CiAgICBpZiAoc3RyZWFtLmVhdCgiOiIpKSB7IGN1clB1bmMgPSAicHJvcGxhYmVsIjsgcmV0dXJuICJwcm9wZXJ0eSI7IH0KICAgIHZhciBjdXIgPSBzdHJlYW0uY3VycmVudCgpOwogICAgaWYgKGF0b21zLnByb3BlcnR5SXNFbnVtZXJhYmxlKGN1cikpIHsgcmV0dXJuICJhdG9tIjsgfQogICAgaWYgKGtleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKGN1cikpIHsKICAgICAgaWYgKGJsb2NrS2V5d29yZHMucHJvcGVydHlJc0VudW1lcmFibGUoY3VyKSkgY3VyUHVuYyA9ICJuZXdzdGF0ZW1lbnQiOwogICAgICByZXR1cm4gImtleXdvcmQiOwogICAgfQogICAgcmV0dXJuICJ3b3JkIjsKICB9CiAgdG9rZW5CYXNlLmlzQmFzZSA9IHRydWU7CgogIGZ1bmN0aW9uIHN0YXJ0U3RyaW5nKHF1b3RlLCBzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgdHJpcGxlUXVvdGVkID0gZmFsc2U7CiAgICBpZiAocXVvdGUgIT0gIi8iICYmIHN0cmVhbS5lYXQocXVvdGUpKSB7CiAgICAgIGlmIChzdHJlYW0uZWF0KHF1b3RlKSkgdHJpcGxlUXVvdGVkID0gdHJ1ZTsKICAgICAgZWxzZSByZXR1cm4gInN0cmluZyI7CiAgICB9CiAgICBmdW5jdGlvbiB0KHN0cmVhbSwgc3RhdGUpIHsKICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgbmV4dCwgZW5kID0gIXRyaXBsZVF1b3RlZDsKICAgICAgd2hpbGUgKChuZXh0ID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkgewogICAgICAgIGlmIChuZXh0ID09IHF1b3RlICYmICFlc2NhcGVkKSB7CiAgICAgICAgICBpZiAoIXRyaXBsZVF1b3RlZCkgeyBicmVhazsgfQogICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChxdW90ZSArIHF1b3RlKSkgeyBlbmQgPSB0cnVlOyBicmVhazsgfQogICAgICAgIH0KICAgICAgICBpZiAocXVvdGUgPT0gJyInICYmIG5leHQgPT0gIiQiICYmICFlc2NhcGVkICYmIHN0cmVhbS5lYXQoInsiKSkgewogICAgICAgICAgc3RhdGUudG9rZW5pemUucHVzaCh0b2tlbkJhc2VVbnRpbEJyYWNlKCkpOwogICAgICAgICAgcmV0dXJuICJzdHJpbmciOwogICAgICAgIH0KICAgICAgICBlc2NhcGVkID0gIWVzY2FwZWQgJiYgbmV4dCA9PSAiXFwiOwogICAgICB9CiAgICAgIGlmIChlbmQpIHN0YXRlLnRva2VuaXplLnBvcCgpOwogICAgICByZXR1cm4gInN0cmluZyI7CiAgICB9CiAgICBzdGF0ZS50b2tlbml6ZS5wdXNoKHQpOwogICAgcmV0dXJuIHQoc3RyZWFtLCBzdGF0ZSk7CiAgfQoKICBmdW5jdGlvbiB0b2tlbkJhc2VVbnRpbEJyYWNlKCkgewogICAgdmFyIGRlcHRoID0gMTsKICAgIGZ1bmN0aW9uIHQoc3RyZWFtLCBzdGF0ZSkgewogICAgICBpZiAoc3RyZWFtLnBlZWsoKSA9PSAifSIpIHsKICAgICAgICBkZXB0aC0tOwogICAgICAgIGlmIChkZXB0aCA9PSAwKSB7CiAgICAgICAgICBzdGF0ZS50b2tlbml6ZS5wb3AoKTsKICAgICAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZVtzdGF0ZS50b2tlbml6ZS5sZW5ndGgtMV0oc3RyZWFtLCBzdGF0ZSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHN0cmVhbS5wZWVrKCkgPT0gInsiKSB7CiAgICAgICAgZGVwdGgrKzsKICAgICAgfQogICAgICByZXR1cm4gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpOwogICAgfQogICAgdC5pc0Jhc2UgPSB0cnVlOwogICAgcmV0dXJuIHQ7CiAgfQoKICBmdW5jdGlvbiB0b2tlbkNvbW1lbnQoc3RyZWFtLCBzdGF0ZSkgewogICAgdmFyIG1heWJlRW5kID0gZmFsc2UsIGNoOwogICAgd2hpbGUgKGNoID0gc3RyZWFtLm5leHQoKSkgewogICAgICBpZiAoY2ggPT0gIi8iICYmIG1heWJlRW5kKSB7CiAgICAgICAgc3RhdGUudG9rZW5pemUucG9wKCk7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgbWF5YmVFbmQgPSAoY2ggPT0gIioiKTsKICAgIH0KICAgIHJldHVybiAiY29tbWVudCI7CiAgfQoKICBmdW5jdGlvbiBleHBlY3RFeHByZXNzaW9uKGxhc3QpIHsKICAgIHJldHVybiAhbGFzdCB8fCBsYXN0ID09ICJvcGVyYXRvciIgfHwgbGFzdCA9PSAiLT4iIHx8IC9bXC5cW1x7XCgsOzpdLy50ZXN0KGxhc3QpIHx8CiAgICAgIGxhc3QgPT0gIm5ld3N0YXRlbWVudCIgfHwgbGFzdCA9PSAia2V5d29yZCIgfHwgbGFzdCA9PSAicHJvcGxhYmVsIjsKICB9CgogIGZ1bmN0aW9uIENvbnRleHQoaW5kZW50ZWQsIGNvbHVtbiwgdHlwZSwgYWxpZ24sIHByZXYpIHsKICAgIHRoaXMuaW5kZW50ZWQgPSBpbmRlbnRlZDsKICAgIHRoaXMuY29sdW1uID0gY29sdW1uOwogICAgdGhpcy50eXBlID0gdHlwZTsKICAgIHRoaXMuYWxpZ24gPSBhbGlnbjsKICAgIHRoaXMucHJldiA9IHByZXY7CiAgfQogIGZ1bmN0aW9uIHB1c2hDb250ZXh0KHN0YXRlLCBjb2wsIHR5cGUpIHsKICAgIHJldHVybiBzdGF0ZS5jb250ZXh0ID0gbmV3IENvbnRleHQoc3RhdGUuaW5kZW50ZWQsIGNvbCwgdHlwZSwgbnVsbCwgc3RhdGUuY29udGV4dCk7CiAgfQogIGZ1bmN0aW9uIHBvcENvbnRleHQoc3RhdGUpIHsKICAgIHZhciB0ID0gc3RhdGUuY29udGV4dC50eXBlOwogICAgaWYgKHQgPT0gIikiIHx8IHQgPT0gIl0iIHx8IHQgPT0gIn0iKQogICAgICBzdGF0ZS5pbmRlbnRlZCA9IHN0YXRlLmNvbnRleHQuaW5kZW50ZWQ7CiAgICByZXR1cm4gc3RhdGUuY29udGV4dCA9IHN0YXRlLmNvbnRleHQucHJldjsKICB9CgogIC8vIEludGVyZmFjZQoKICByZXR1cm4gewogICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oYmFzZWNvbHVtbikgewogICAgICByZXR1cm4gewogICAgICAgIHRva2VuaXplOiBbdG9rZW5CYXNlXSwKICAgICAgICBjb250ZXh0OiBuZXcgQ29udGV4dCgoYmFzZWNvbHVtbiB8fCAwKSAtIGNvbmZpZy5pbmRlbnRVbml0LCAwLCAidG9wIiwgZmFsc2UpLAogICAgICAgIGluZGVudGVkOiAwLAogICAgICAgIHN0YXJ0T2ZMaW5lOiB0cnVlLAogICAgICAgIGxhc3RUb2tlbjogbnVsbAogICAgICB9OwogICAgfSwKCiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICB2YXIgY3R4ID0gc3RhdGUuY29udGV4dDsKICAgICAgaWYgKHN0cmVhbS5zb2woKSkgewogICAgICAgIGlmIChjdHguYWxpZ24gPT0gbnVsbCkgY3R4LmFsaWduID0gZmFsc2U7CiAgICAgICAgc3RhdGUuaW5kZW50ZWQgPSBzdHJlYW0uaW5kZW50YXRpb24oKTsKICAgICAgICBzdGF0ZS5zdGFydE9mTGluZSA9IHRydWU7CiAgICAgICAgLy8gQXV0b21hdGljIHNlbWljb2xvbiBpbnNlcnRpb24KICAgICAgICBpZiAoY3R4LnR5cGUgPT0gInN0YXRlbWVudCIgJiYgIWV4cGVjdEV4cHJlc3Npb24oc3RhdGUubGFzdFRva2VuKSkgewogICAgICAgICAgcG9wQ29udGV4dChzdGF0ZSk7IGN0eCA9IHN0YXRlLmNvbnRleHQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7CiAgICAgIGN1clB1bmMgPSBudWxsOwogICAgICB2YXIgc3R5bGUgPSBzdGF0ZS50b2tlbml6ZVtzdGF0ZS50b2tlbml6ZS5sZW5ndGgtMV0oc3RyZWFtLCBzdGF0ZSk7CiAgICAgIGlmIChzdHlsZSA9PSAiY29tbWVudCIpIHJldHVybiBzdHlsZTsKICAgICAgaWYgKGN0eC5hbGlnbiA9PSBudWxsKSBjdHguYWxpZ24gPSB0cnVlOwoKICAgICAgaWYgKChjdXJQdW5jID09ICI7IiB8fCBjdXJQdW5jID09ICI6IikgJiYgY3R4LnR5cGUgPT0gInN0YXRlbWVudCIpIHBvcENvbnRleHQoc3RhdGUpOwogICAgICAvLyBIYW5kbGUgaW5kZW50YXRpb24gZm9yIHt4IC0+IFxuIC4uLiB9CiAgICAgIGVsc2UgaWYgKGN1clB1bmMgPT0gIi0+IiAmJiBjdHgudHlwZSA9PSAic3RhdGVtZW50IiAmJiBjdHgucHJldi50eXBlID09ICJ9IikgewogICAgICAgIHBvcENvbnRleHQoc3RhdGUpOwogICAgICAgIHN0YXRlLmNvbnRleHQuYWxpZ24gPSBmYWxzZTsKICAgICAgfQogICAgICBlbHNlIGlmIChjdXJQdW5jID09ICJ7IikgcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbS5jb2x1bW4oKSwgIn0iKTsKICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSAiWyIpIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0uY29sdW1uKCksICJdIik7CiAgICAgIGVsc2UgaWYgKGN1clB1bmMgPT0gIigiKSBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLmNvbHVtbigpLCAiKSIpOwogICAgICBlbHNlIGlmIChjdXJQdW5jID09ICJ9IikgewogICAgICAgIHdoaWxlIChjdHgudHlwZSA9PSAic3RhdGVtZW50IikgY3R4ID0gcG9wQ29udGV4dChzdGF0ZSk7CiAgICAgICAgaWYgKGN0eC50eXBlID09ICJ9IikgY3R4ID0gcG9wQ29udGV4dChzdGF0ZSk7CiAgICAgICAgd2hpbGUgKGN0eC50eXBlID09ICJzdGF0ZW1lbnQiKSBjdHggPSBwb3BDb250ZXh0KHN0YXRlKTsKICAgICAgfQogICAgICBlbHNlIGlmIChjdXJQdW5jID09IGN0eC50eXBlKSBwb3BDb250ZXh0KHN0YXRlKTsKICAgICAgZWxzZSBpZiAoY3R4LnR5cGUgPT0gIn0iIHx8IGN0eC50eXBlID09ICJ0b3AiIHx8IChjdHgudHlwZSA9PSAic3RhdGVtZW50IiAmJiBjdXJQdW5jID09ICJuZXdzdGF0ZW1lbnQiKSkKICAgICAgICBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLmNvbHVtbigpLCAic3RhdGVtZW50Iik7CiAgICAgIHN0YXRlLnN0YXJ0T2ZMaW5lID0gZmFsc2U7CiAgICAgIHN0YXRlLmxhc3RUb2tlbiA9IGN1clB1bmMgfHwgc3R5bGU7CiAgICAgIHJldHVybiBzdHlsZTsKICAgIH0sCgogICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7CiAgICAgIGlmICghc3RhdGUudG9rZW5pemVbc3RhdGUudG9rZW5pemUubGVuZ3RoLTFdLmlzQmFzZSkgcmV0dXJuIDA7CiAgICAgIHZhciBmaXJzdENoYXIgPSB0ZXh0QWZ0ZXIgJiYgdGV4dEFmdGVyLmNoYXJBdCgwKSwgY3R4ID0gc3RhdGUuY29udGV4dDsKICAgICAgaWYgKGN0eC50eXBlID09ICJzdGF0ZW1lbnQiICYmICFleHBlY3RFeHByZXNzaW9uKHN0YXRlLmxhc3RUb2tlbikpIGN0eCA9IGN0eC5wcmV2OwogICAgICB2YXIgY2xvc2luZyA9IGZpcnN0Q2hhciA9PSBjdHgudHlwZTsKICAgICAgaWYgKGN0eC50eXBlID09ICJzdGF0ZW1lbnQiKSByZXR1cm4gY3R4LmluZGVudGVkICsgKGZpcnN0Q2hhciA9PSAieyIgPyAwIDogY29uZmlnLmluZGVudFVuaXQpOwogICAgICBlbHNlIGlmIChjdHguYWxpZ24pIHJldHVybiBjdHguY29sdW1uICsgKGNsb3NpbmcgPyAwIDogMSk7CiAgICAgIGVsc2UgcmV0dXJuIGN0eC5pbmRlbnRlZCArIChjbG9zaW5nID8gMCA6IGNvbmZpZy5pbmRlbnRVbml0KTsKICAgIH0sCgogICAgZWxlY3RyaWNDaGFyczogInt9IgogIH07Cn0pOwoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtZ3Jvb3Z5IiwgImdyb292eSIpOwo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/groovy/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEdyb292eSBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iZ3Jvb3Z5LmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICAgIDxzdHlsZT4uQ29kZU1pcnJvciB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkICM1MDA7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjNTAwO308L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBHcm9vdnkgbW9kZTwvaDE+Cgo8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgovL1BhdHRlcm4gZm9yIGdyb292eSBzY3JpcHQKZGVmIHAgPSB+Ly4qXC5ncm9vdnkvCm5ldyBGaWxlKCAnZDpcXHNjcmlwdHMnICkuZWFjaEZpbGVNYXRjaChwKSB7ZiAtPgogIC8vIGltcG9ydHMgbGlzdAogIGRlZiBpbXBvcnRzID0gW10KICBmLmVhY2hMaW5lIHsKICAgIC8vIGNvbmRpdGlvbiB0byBkZXRlY3QgYW4gaW1wb3J0IGluc3RydWN0aW9uCiAgICBsbiAtPiBpZiAoIGxuID1+ICdeaW1wb3J0IC4qJyApIHsKICAgICAgaW1wb3J0cyA8PCAiJHtsbiAtICdpbXBvcnQgJ30iCiAgICB9CiAgfQogIC8vIHByaW50IHRobWVuCiAgaWYgKCAhIGltcG9ydHMuZW1wdHkgKSB7CiAgICBwcmludGxuIGYKICAgIGltcG9ydHMuZWFjaHsgcHJpbnRsbiAiICAgJGl0IiB9CiAgfQp9CgovKiBDb2luIGNoYW5nZXIgZGVtbyBjb2RlIGZyb20gaHR0cDovL2dyb292eS5jb2RlaGF1cy5vcmcgKi8KCmVudW0gVXNDb2luIHsKICBxdWFydGVyKDI1KSwgZGltZSgxMCksIG5pY2tlbCg1KSwgcGVubnkoMSkKICBVc0NvaW4odikgeyB2YWx1ZSA9IHYgfQogIGZpbmFsIHZhbHVlCn0KCmVudW0gT3p6aWVDb2luIHsKICBmaWZ0eSg1MCksIHR3ZW50eSgyMCksIHRlbigxMCksIGZpdmUoNSkKICBPenppZUNvaW4odikgeyB2YWx1ZSA9IHYgfQogIGZpbmFsIHZhbHVlCn0KCmRlZiBwbHVyYWwod29yZCwgY291bnQpIHsKICBpZiAoY291bnQgPT0gMSkgcmV0dXJuIHdvcmQKICB3b3JkWy0xXSA9PSAneScgPyB3b3JkWzAuLi0yXSArICJpZXMiIDogd29yZCArICJzIgp9CgpkZWYgY2hhbmdlKGN1cnJlbmN5LCBhbW91bnQpIHsKICBjdXJyZW5jeS52YWx1ZXMoKS5pbmplY3QoW10peyBsaXN0LCBjb2luIC0+CiAgICAgaW50IGNvdW50ID0gYW1vdW50IC8gY29pbi52YWx1ZQogICAgIGFtb3VudCA9IGFtb3VudCAlIGNvaW4udmFsdWUKICAgICBsaXN0ICs9ICIkY291bnQgJHtwbHVyYWwoY29pbi50b1N0cmluZygpLCBjb3VudCl9IgogIH0KfQo8L3RleHRhcmVhPjwvZm9ybT4KCiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUsCiAgICAgICAgbW9kZTogInRleHQveC1ncm9vdnkiCiAgICAgIH0pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQveC1ncm9vdnk8L2NvZGU+PC9wPgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/haskell/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/haskell/haskell.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJoYXNrZWxsIiwgZnVuY3Rpb24oY21DZmcsIG1vZGVDZmcpIHsKCiAgZnVuY3Rpb24gc3dpdGNoU3RhdGUoc291cmNlLCBzZXRTdGF0ZSwgZikgewogICAgc2V0U3RhdGUoZik7CiAgICByZXR1cm4gZihzb3VyY2UsIHNldFN0YXRlKTsKICB9CiAgCiAgLy8gVGhlc2Ugc2hvdWxkIGFsbCBiZSBVbmljb2RlIGV4dGVuZGVkLCBhcyBwZXIgdGhlIEhhc2tlbGwgMjAxMCByZXBvcnQKICB2YXIgc21hbGxSRSA9IC9bYS16X10vOwogIHZhciBsYXJnZVJFID0gL1tBLVpdLzsKICB2YXIgZGlnaXRSRSA9IC9bMC05XS87CiAgdmFyIGhleGl0UkUgPSAvWzAtOUEtRmEtZl0vOwogIHZhciBvY3RpdFJFID0gL1swLTddLzsKICB2YXIgaWRSRSA9IC9bYS16X0EtWjAtOSddLzsKICB2YXIgc3ltYm9sUkUgPSAvWy0hIyQlJiorLlwvPD0+P0BcXF58fjpdLzsKICB2YXIgc3BlY2lhbFJFID0gL1soKSw7W1xdYHt9XS87CiAgdmFyIHdoaXRlQ2hhclJFID0gL1sgXHRcdlxmXS87IC8vIG5ld2xpbmVzIGFyZSBoYW5kbGVkIGluIHRva2VuaXplcgogICAgCiAgZnVuY3Rpb24gbm9ybWFsKHNvdXJjZSwgc2V0U3RhdGUpIHsKICAgIGlmIChzb3VyY2UuZWF0V2hpbGUod2hpdGVDaGFyUkUpKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgICAKICAgIHZhciBjaCA9IHNvdXJjZS5uZXh0KCk7CiAgICBpZiAoc3BlY2lhbFJFLnRlc3QoY2gpKSB7CiAgICAgIGlmIChjaCA9PSAneycgJiYgc291cmNlLmVhdCgnLScpKSB7CiAgICAgICAgdmFyIHQgPSAiY29tbWVudCI7CiAgICAgICAgaWYgKHNvdXJjZS5lYXQoJyMnKSkgewogICAgICAgICAgdCA9ICJtZXRhIjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHN3aXRjaFN0YXRlKHNvdXJjZSwgc2V0U3RhdGUsIG5jb21tZW50KHQsIDEpKTsKICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIAogICAgaWYgKGNoID09ICdcJycpIHsKICAgICAgaWYgKHNvdXJjZS5lYXQoJ1xcJykpIHsKICAgICAgICBzb3VyY2UubmV4dCgpOyAgLy8gc2hvdWxkIGhhbmRsZSBvdGhlciBlc2NhcGVzIGhlcmUKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBzb3VyY2UubmV4dCgpOwogICAgICB9CiAgICAgIGlmIChzb3VyY2UuZWF0KCdcJycpKSB7CiAgICAgICAgcmV0dXJuICJzdHJpbmciOwogICAgICB9CiAgICAgIHJldHVybiAiZXJyb3IiOwogICAgfQogICAgCiAgICBpZiAoY2ggPT0gJyInKSB7CiAgICAgIHJldHVybiBzd2l0Y2hTdGF0ZShzb3VyY2UsIHNldFN0YXRlLCBzdHJpbmdMaXRlcmFsKTsKICAgIH0KICAgICAgCiAgICBpZiAobGFyZ2VSRS50ZXN0KGNoKSkgewogICAgICBzb3VyY2UuZWF0V2hpbGUoaWRSRSk7CiAgICAgIGlmIChzb3VyY2UuZWF0KCcuJykpIHsKICAgICAgICByZXR1cm4gInF1YWxpZmllciI7CiAgICAgIH0KICAgICAgcmV0dXJuICJ2YXJpYWJsZS0yIjsKICAgIH0KICAgICAgCiAgICBpZiAoc21hbGxSRS50ZXN0KGNoKSkgewogICAgICBzb3VyY2UuZWF0V2hpbGUoaWRSRSk7CiAgICAgIHJldHVybiAidmFyaWFibGUiOwogICAgfQogICAgICAKICAgIGlmIChkaWdpdFJFLnRlc3QoY2gpKSB7CiAgICAgIGlmIChjaCA9PSAnMCcpIHsKICAgICAgICBpZiAoc291cmNlLmVhdCgvW3hYXS8pKSB7CiAgICAgICAgICBzb3VyY2UuZWF0V2hpbGUoaGV4aXRSRSk7IC8vIHNob3VsZCByZXF1aXJlIGF0IGxlYXN0IDEKICAgICAgICAgIHJldHVybiAiaW50ZWdlciI7CiAgICAgICAgfQogICAgICAgIGlmIChzb3VyY2UuZWF0KC9bb09dLykpIHsKICAgICAgICAgIHNvdXJjZS5lYXRXaGlsZShvY3RpdFJFKTsgLy8gc2hvdWxkIHJlcXVpcmUgYXQgbGVhc3QgMQogICAgICAgICAgcmV0dXJuICJudW1iZXIiOwogICAgICAgIH0KICAgICAgfQogICAgICBzb3VyY2UuZWF0V2hpbGUoZGlnaXRSRSk7CiAgICAgIHZhciB0ID0gIm51bWJlciI7CiAgICAgIGlmIChzb3VyY2UuZWF0KCcuJykpIHsKICAgICAgICB0ID0gIm51bWJlciI7CiAgICAgICAgc291cmNlLmVhdFdoaWxlKGRpZ2l0UkUpOyAvLyBzaG91bGQgcmVxdWlyZSBhdCBsZWFzdCAxCiAgICAgIH0KICAgICAgaWYgKHNvdXJjZS5lYXQoL1tlRV0vKSkgewogICAgICAgIHQgPSAibnVtYmVyIjsKICAgICAgICBzb3VyY2UuZWF0KC9bLStdLyk7CiAgICAgICAgc291cmNlLmVhdFdoaWxlKGRpZ2l0UkUpOyAvLyBzaG91bGQgcmVxdWlyZSBhdCBsZWFzdCAxCiAgICAgIH0KICAgICAgcmV0dXJuIHQ7CiAgICB9CiAgICAgIAogICAgaWYgKHN5bWJvbFJFLnRlc3QoY2gpKSB7CiAgICAgIGlmIChjaCA9PSAnLScgJiYgc291cmNlLmVhdCgvLS8pKSB7CiAgICAgICAgc291cmNlLmVhdFdoaWxlKC8tLyk7CiAgICAgICAgaWYgKCFzb3VyY2UuZWF0KHN5bWJvbFJFKSkgewogICAgICAgICAgc291cmNlLnNraXBUb0VuZCgpOwogICAgICAgICAgcmV0dXJuICJjb21tZW50IjsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFyIHQgPSAidmFyaWFibGUiOwogICAgICBpZiAoY2ggPT0gJzonKSB7CiAgICAgICAgdCA9ICJ2YXJpYWJsZS0yIjsKICAgICAgfQogICAgICBzb3VyY2UuZWF0V2hpbGUoc3ltYm9sUkUpOwogICAgICByZXR1cm4gdDsgICAgCiAgICB9CiAgICAgIAogICAgcmV0dXJuICJlcnJvciI7CiAgfQogICAgCiAgZnVuY3Rpb24gbmNvbW1lbnQodHlwZSwgbmVzdCkgewogICAgaWYgKG5lc3QgPT0gMCkgewogICAgICByZXR1cm4gbm9ybWFsOwogICAgfQogICAgcmV0dXJuIGZ1bmN0aW9uKHNvdXJjZSwgc2V0U3RhdGUpIHsKICAgICAgdmFyIGN1cnJOZXN0ID0gbmVzdDsKICAgICAgd2hpbGUgKCFzb3VyY2UuZW9sKCkpIHsKICAgICAgICB2YXIgY2ggPSBzb3VyY2UubmV4dCgpOwogICAgICAgIGlmIChjaCA9PSAneycgJiYgc291cmNlLmVhdCgnLScpKSB7CiAgICAgICAgICArK2N1cnJOZXN0OwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChjaCA9PSAnLScgJiYgc291cmNlLmVhdCgnfScpKSB7CiAgICAgICAgICAtLWN1cnJOZXN0OwogICAgICAgICAgaWYgKGN1cnJOZXN0ID09IDApIHsKICAgICAgICAgICAgc2V0U3RhdGUobm9ybWFsKTsKICAgICAgICAgICAgcmV0dXJuIHR5cGU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIHNldFN0YXRlKG5jb21tZW50KHR5cGUsIGN1cnJOZXN0KSk7CiAgICAgIHJldHVybiB0eXBlOwogICAgfQogIH0KICAgIAogIGZ1bmN0aW9uIHN0cmluZ0xpdGVyYWwoc291cmNlLCBzZXRTdGF0ZSkgewogICAgd2hpbGUgKCFzb3VyY2UuZW9sKCkpIHsKICAgICAgdmFyIGNoID0gc291cmNlLm5leHQoKTsKICAgICAgaWYgKGNoID09ICciJykgewogICAgICAgIHNldFN0YXRlKG5vcm1hbCk7CiAgICAgICAgcmV0dXJuICJzdHJpbmciOwogICAgICB9CiAgICAgIGlmIChjaCA9PSAnXFwnKSB7CiAgICAgICAgaWYgKHNvdXJjZS5lb2woKSB8fCBzb3VyY2UuZWF0KHdoaXRlQ2hhclJFKSkgewogICAgICAgICAgc2V0U3RhdGUoc3RyaW5nR2FwKTsKICAgICAgICAgIHJldHVybiAic3RyaW5nIjsKICAgICAgICB9CiAgICAgICAgaWYgKHNvdXJjZS5lYXQoJyYnKSkgewogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgIHNvdXJjZS5uZXh0KCk7IC8vIHNob3VsZCBoYW5kbGUgb3RoZXIgZXNjYXBlcyBoZXJlCiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBzZXRTdGF0ZShub3JtYWwpOwogICAgcmV0dXJuICJlcnJvciI7CiAgfQogIAogIGZ1bmN0aW9uIHN0cmluZ0dhcChzb3VyY2UsIHNldFN0YXRlKSB7CiAgICBpZiAoc291cmNlLmVhdCgnXFwnKSkgewogICAgICByZXR1cm4gc3dpdGNoU3RhdGUoc291cmNlLCBzZXRTdGF0ZSwgc3RyaW5nTGl0ZXJhbCk7CiAgICB9CiAgICBzb3VyY2UubmV4dCgpOwogICAgc2V0U3RhdGUobm9ybWFsKTsKICAgIHJldHVybiAiZXJyb3IiOwogIH0KICAKICAKICB2YXIgd2VsbEtub3duV29yZHMgPSAoZnVuY3Rpb24oKSB7CiAgICB2YXIgd2t3ID0ge307CiAgICBmdW5jdGlvbiBzZXRUeXBlKHQpIHsKICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykKICAgICAgICAgIHdrd1thcmd1bWVudHNbaV1dID0gdDsKICAgICAgfQogICAgfQogICAgCiAgICBzZXRUeXBlKCJrZXl3b3JkIikoCiAgICAgICJjYXNlIiwgImNsYXNzIiwgImRhdGEiLCAiZGVmYXVsdCIsICJkZXJpdmluZyIsICJkbyIsICJlbHNlIiwgImZvcmVpZ24iLAogICAgICAiaWYiLCAiaW1wb3J0IiwgImluIiwgImluZml4IiwgImluZml4bCIsICJpbmZpeHIiLCAiaW5zdGFuY2UiLCAibGV0IiwKICAgICAgIm1vZHVsZSIsICJuZXd0eXBlIiwgIm9mIiwgInRoZW4iLCAidHlwZSIsICJ3aGVyZSIsICJfIik7CiAgICAgIAogICAgc2V0VHlwZSgia2V5d29yZCIpKAogICAgICAiXC5cLiIsICI6IiwgIjo6IiwgIj0iLCAiXFwiLCAiXCIiLCAiPC0iLCAiLT4iLCAiQCIsICJ+IiwgIj0+Iik7CiAgICAgIAogICAgc2V0VHlwZSgiYnVpbHRpbiIpKAogICAgICAiISEiLCAiJCEiLCAiJCIsICImJiIsICIrIiwgIisrIiwgIi0iLCAiLiIsICIvIiwgIi89IiwgIjwiLCAiPD0iLCAiPTw8IiwKICAgICAgIj09IiwgIj4iLCAiPj0iLCAiPj4iLCAiPj49IiwgIl4iLCAiXl4iLCAifHwiLCAiKiIsICIqKiIpOwogICAgICAKICAgIHNldFR5cGUoImJ1aWx0aW4iKSgKICAgICAgIkJvb2wiLCAiQm91bmRlZCIsICJDaGFyIiwgIkRvdWJsZSIsICJFUSIsICJFaXRoZXIiLCAiRW51bSIsICJFcSIsCiAgICAgICJGYWxzZSIsICJGaWxlUGF0aCIsICJGbG9hdCIsICJGbG9hdGluZyIsICJGcmFjdGlvbmFsIiwgIkZ1bmN0b3IiLCAiR1QiLAogICAgICAiSU8iLCAiSU9FcnJvciIsICJJbnQiLCAiSW50ZWdlciIsICJJbnRlZ3JhbCIsICJKdXN0IiwgIkxUIiwgIkxlZnQiLAogICAgICAiTWF5YmUiLCAiTW9uYWQiLCAiTm90aGluZyIsICJOdW0iLCAiT3JkIiwgIk9yZGVyaW5nIiwgIlJhdGlvbmFsIiwgIlJlYWQiLAogICAgICAiUmVhZFMiLCAiUmVhbCIsICJSZWFsRmxvYXQiLCAiUmVhbEZyYWMiLCAiUmlnaHQiLCAiU2hvdyIsICJTaG93UyIsCiAgICAgICJTdHJpbmciLCAiVHJ1ZSIpOwogICAgICAKICAgIHNldFR5cGUoImJ1aWx0aW4iKSgKICAgICAgImFicyIsICJhY29zIiwgImFjb3NoIiwgImFsbCIsICJhbmQiLCAiYW55IiwgImFwcGVuZEZpbGUiLCAiYXNUeXBlT2YiLAogICAgICAiYXNpbiIsICJhc2luaCIsICJhdGFuIiwgImF0YW4yIiwgImF0YW5oIiwgImJyZWFrIiwgImNhdGNoIiwgImNlaWxpbmciLAogICAgICAiY29tcGFyZSIsICJjb25jYXQiLCAiY29uY2F0TWFwIiwgImNvbnN0IiwgImNvcyIsICJjb3NoIiwgImN1cnJ5IiwKICAgICAgImN5Y2xlIiwgImRlY29kZUZsb2F0IiwgImRpdiIsICJkaXZNb2QiLCAiZHJvcCIsICJkcm9wV2hpbGUiLCAiZWl0aGVyIiwKICAgICAgImVsZW0iLCAiZW5jb2RlRmxvYXQiLCAiZW51bUZyb20iLCAiZW51bUZyb21UaGVuIiwgImVudW1Gcm9tVGhlblRvIiwKICAgICAgImVudW1Gcm9tVG8iLCAiZXJyb3IiLCAiZXZlbiIsICJleHAiLCAiZXhwb25lbnQiLCAiZmFpbCIsICJmaWx0ZXIiLAogICAgICAiZmxpcCIsICJmbG9hdERpZ2l0cyIsICJmbG9hdFJhZGl4IiwgImZsb2F0UmFuZ2UiLCAiZmxvb3IiLCAiZm1hcCIsCiAgICAgICJmb2xkbCIsICJmb2xkbDEiLCAiZm9sZHIiLCAiZm9sZHIxIiwgImZyb21FbnVtIiwgImZyb21JbnRlZ2VyIiwKICAgICAgImZyb21JbnRlZ3JhbCIsICJmcm9tUmF0aW9uYWwiLCAiZnN0IiwgImdjZCIsICJnZXRDaGFyIiwgImdldENvbnRlbnRzIiwKICAgICAgImdldExpbmUiLCAiaGVhZCIsICJpZCIsICJpbml0IiwgImludGVyYWN0IiwgImlvRXJyb3IiLCAiaXNEZW5vcm1hbGl6ZWQiLAogICAgICAiaXNJRUVFIiwgImlzSW5maW5pdGUiLCAiaXNOYU4iLCAiaXNOZWdhdGl2ZVplcm8iLCAiaXRlcmF0ZSIsICJsYXN0IiwKICAgICAgImxjbSIsICJsZW5ndGgiLCAibGV4IiwgImxpbmVzIiwgImxvZyIsICJsb2dCYXNlIiwgImxvb2t1cCIsICJtYXAiLAogICAgICAibWFwTSIsICJtYXBNXyIsICJtYXgiLCAibWF4Qm91bmQiLCAibWF4aW11bSIsICJtYXliZSIsICJtaW4iLCAibWluQm91bmQiLAogICAgICAibWluaW11bSIsICJtb2QiLCAibmVnYXRlIiwgIm5vdCIsICJub3RFbGVtIiwgIm51bGwiLCAib2RkIiwgIm9yIiwKICAgICAgIm90aGVyd2lzZSIsICJwaSIsICJwcmVkIiwgInByaW50IiwgInByb2R1Y3QiLCAicHJvcGVyRnJhY3Rpb24iLAogICAgICAicHV0Q2hhciIsICJwdXRTdHIiLCAicHV0U3RyTG4iLCAicXVvdCIsICJxdW90UmVtIiwgInJlYWQiLCAicmVhZEZpbGUiLAogICAgICAicmVhZElPIiwgInJlYWRMaXN0IiwgInJlYWRMbiIsICJyZWFkUGFyZW4iLCAicmVhZHMiLCAicmVhZHNQcmVjIiwKICAgICAgInJlYWxUb0ZyYWMiLCAicmVjaXAiLCAicmVtIiwgInJlcGVhdCIsICJyZXBsaWNhdGUiLCAicmV0dXJuIiwgInJldmVyc2UiLAogICAgICAicm91bmQiLCAic2NhbGVGbG9hdCIsICJzY2FubCIsICJzY2FubDEiLCAic2NhbnIiLCAic2NhbnIxIiwgInNlcSIsCiAgICAgICJzZXF1ZW5jZSIsICJzZXF1ZW5jZV8iLCAic2hvdyIsICJzaG93Q2hhciIsICJzaG93TGlzdCIsICJzaG93UGFyZW4iLAogICAgICAic2hvd1N0cmluZyIsICJzaG93cyIsICJzaG93c1ByZWMiLCAic2lnbmlmaWNhbmQiLCAic2lnbnVtIiwgInNpbiIsCiAgICAgICJzaW5oIiwgInNuZCIsICJzcGFuIiwgInNwbGl0QXQiLCAic3FydCIsICJzdWJ0cmFjdCIsICJzdWNjIiwgInN1bSIsCiAgICAgICJ0YWlsIiwgInRha2UiLCAidGFrZVdoaWxlIiwgInRhbiIsICJ0YW5oIiwgInRvRW51bSIsICJ0b0ludGVnZXIiLAogICAgICAidG9SYXRpb25hbCIsICJ0cnVuY2F0ZSIsICJ1bmN1cnJ5IiwgInVuZGVmaW5lZCIsICJ1bmxpbmVzIiwgInVudGlsIiwKICAgICAgInVud29yZHMiLCAidW56aXAiLCAidW56aXAzIiwgInVzZXJFcnJvciIsICJ3b3JkcyIsICJ3cml0ZUZpbGUiLCAiemlwIiwKICAgICAgInppcDMiLCAiemlwV2l0aCIsICJ6aXBXaXRoMyIpOwogICAgICAKICAgIHJldHVybiB3a3c7CiAgfSkoKTsKICAgIAogIAogIAogIHJldHVybiB7CiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbiAoKSAgeyByZXR1cm4geyBmOiBub3JtYWwgfTsgfSwKICAgIGNvcHlTdGF0ZTogIGZ1bmN0aW9uIChzKSB7IHJldHVybiB7IGY6IHMuZiB9OyB9LAogICAgCiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICB2YXIgdCA9IHN0YXRlLmYoc3RyZWFtLCBmdW5jdGlvbihzKSB7IHN0YXRlLmYgPSBzOyB9KTsKICAgICAgdmFyIHcgPSBzdHJlYW0uY3VycmVudCgpOwogICAgICByZXR1cm4gKHcgaW4gd2VsbEtub3duV29yZHMpID8gd2VsbEtub3duV29yZHNbd10gOiB0OwogICAgfQogIH07Cgp9KTsKCkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LWhhc2tlbGwiLCAiaGFza2VsbCIpOwo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/haskell/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEhhc2tlbGwgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Imhhc2tlbGwuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi90aGVtZS9lbGVnYW50LmNzcyI+CiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPi5Db2RlTWlycm9yIHtib3JkZXItdG9wOiAxcHggc29saWQgYmxhY2s7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazt9PC9zdHlsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogSGFza2VsbCBtb2RlPC9oMT4KCjxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+Cm1vZHVsZSBVbmlxdWVQZXJtcyAoCiAgICB1bmlxdWVQZXJtcwogICAgKQp3aGVyZQoKLS0gfCBGaW5kIGFsbCB1bmlxdWUgcGVybXV0YXRpb25zIG9mIGEgbGlzdCB3aGVyZSB0aGVyZSBtaWdodCBiZSBkdXBsaWNhdGVzLgp1bmlxdWVQZXJtcyA6OiAoRXEgYSkgPT4gW2FdIC0+IFtbYV1dCnVuaXF1ZVBlcm1zID0gcGVybUJhZyAuIG1ha2VCYWcKCi0tIHwgQW4gdW5vcmRlcmVkIGNvbGxlY3Rpb24gd2hlcmUgZHVwbGljYXRlIHZhbHVlcyBhcmUgYWxsb3dlZCwKLS0gYnV0IHJlcHJlc2VudGVkIHdpdGggYSBzaW5nbGUgdmFsdWUgYW5kIGEgY291bnQuCnR5cGUgQmFnIGEgPSBbKGEsIEludCldCgptYWtlQmFnIDo6IChFcSBhKSA9PiBbYV0gLT4gQmFnIGEKbWFrZUJhZyBbXSA9IFtdCm1ha2VCYWcgKGE6YXMpID0gbWl4IGEgJCBtYWtlQmFnIGFzCiAgd2hlcmUKICAgIG1peCBhIFtdICAgICAgICAgICAgICAgICAgICAgICAgPSBbKGEsMSldCiAgICBtaXggYSAoYm5AKGIsbik6YnMpIHwgYSA9PSBiICAgID0gKGIsbisxKTpicwogICAgICAgICAgICAgICAgICAgICAgICB8IG90aGVyd2lzZSA9IGJuIDogbWl4IGEgYnMKCnBlcm1CYWcgOjogQmFnIGEgLT4gW1thXV0KcGVybUJhZyBbXSA9IFtbXV0KcGVybUJhZyBicyA9IGNvbmNhdE1hcCAoXChmLGNzKSAtPiBtYXAgKGY6KSAkIHBlcm1CYWcgY3MpIC4gb25lT2ZFYWNoICQgYnMKICB3aGVyZQogICAgb25lT2ZFYWNoIFtdID0gW10KICAgIG9uZU9mRWFjaCAoYW5AKGEsbik6YnMpID0KICAgICAgICBsZXQgYnMnID0gaWYgbiA9PSAxIHRoZW4gYnMgZWxzZSAoYSxuLTEpOmJzCiAgICAgICAgaW4gKGEsYnMnKSA6IG1hcFNuZCAoYW46KSAob25lT2ZFYWNoIGJzKQogICAgCiAgICBhcFNuZCBmIChhLGIpID0gKGEsIGYgYikKICAgIG1hcFNuZCA9IG1hcCAuIGFwU25kCjwvdGV4dGFyZWE+PC9mb3JtPgoKICAgIDxzY3JpcHQ+CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7CiAgICAgICAgbGluZU51bWJlcnM6IHRydWUsCiAgICAgICAgbWF0Y2hCcmFja2V0czogdHJ1ZSwKICAgICAgICB0aGVtZTogImVsZWdhbnQiCiAgICAgIH0pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQveC1oYXNrZWxsPC9jb2RlPi48L3A+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/htmlembedded/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/htmlembedded/htmlembedded.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJodG1sZW1iZWRkZWQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogIAogIC8vY29uZmlnIHNldHRpbmdzCiAgdmFyIHNjcmlwdFN0YXJ0UmVnZXggPSBwYXJzZXJDb25maWcuc2NyaXB0U3RhcnRSZWdleCB8fCAvXjwlL2ksCiAgICAgIHNjcmlwdEVuZFJlZ2V4ID0gcGFyc2VyQ29uZmlnLnNjcmlwdEVuZFJlZ2V4IHx8IC9eJT4vaTsKICAKICAvL2lubmVyIG1vZGVzCiAgdmFyIHNjcmlwdGluZ01vZGUsIGh0bWxNaXhlZE1vZGU7CiAgCiAgLy90b2tlbml6ZXIgd2hlbiBpbiBodG1sIG1vZGUKICBmdW5jdGlvbiBodG1sRGlzcGF0Y2goc3RyZWFtLCBzdGF0ZSkgewogICAgICBpZiAoc3RyZWFtLm1hdGNoKHNjcmlwdFN0YXJ0UmVnZXgsIGZhbHNlKSkgewogICAgICAgICAgc3RhdGUudG9rZW49c2NyaXB0aW5nRGlzcGF0Y2g7CiAgICAgICAgICByZXR1cm4gc2NyaXB0aW5nTW9kZS50b2tlbihzdHJlYW0sIHN0YXRlLnNjcmlwdFN0YXRlKTsKICAgICAgICAgIH0KICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIGh0bWxNaXhlZE1vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZS5odG1sU3RhdGUpOwogICAgfQoKICAvL3Rva2VuaXplciB3aGVuIGluIHNjcmlwdGluZyBtb2RlCiAgZnVuY3Rpb24gc2NyaXB0aW5nRGlzcGF0Y2goc3RyZWFtLCBzdGF0ZSkgewogICAgICBpZiAoc3RyZWFtLm1hdGNoKHNjcmlwdEVuZFJlZ2V4LCBmYWxzZSkpICB7CiAgICAgICAgICBzdGF0ZS50b2tlbj1odG1sRGlzcGF0Y2g7CiAgICAgICAgICByZXR1cm4gaHRtbE1peGVkTW9kZS50b2tlbihzdHJlYW0sIHN0YXRlLmh0bWxTdGF0ZSk7CiAgICAgICAgIH0KICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIHNjcmlwdGluZ01vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZS5zY3JpcHRTdGF0ZSk7CiAgICAgICAgIH0KCgogIHJldHVybiB7CiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbigpIHsKICAgICAgc2NyaXB0aW5nTW9kZSA9IHNjcmlwdGluZ01vZGUgfHwgQ29kZU1pcnJvci5nZXRNb2RlKGNvbmZpZywgcGFyc2VyQ29uZmlnLnNjcmlwdGluZ01vZGVTcGVjKTsKICAgICAgaHRtbE1peGVkTW9kZSA9IGh0bWxNaXhlZE1vZGUgfHwgQ29kZU1pcnJvci5nZXRNb2RlKGNvbmZpZywgImh0bWxtaXhlZCIpOwogICAgICByZXR1cm4geyAKICAgICAgICAgIHRva2VuIDogIHBhcnNlckNvbmZpZy5zdGFydE9wZW4gPyBzY3JpcHRpbmdEaXNwYXRjaCA6IGh0bWxEaXNwYXRjaCwKICAgICAgICAgIGh0bWxTdGF0ZSA6IGh0bWxNaXhlZE1vZGUuc3RhcnRTdGF0ZSgpLAogICAgICAgICAgc2NyaXB0U3RhdGUgOiBzY3JpcHRpbmdNb2RlLnN0YXJ0U3RhdGUoKQogICAgICAgICAgfQogICAgfSwKCiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICByZXR1cm4gc3RhdGUudG9rZW4oc3RyZWFtLCBzdGF0ZSk7CiAgICB9LAoKICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlcikgewogICAgICBpZiAoc3RhdGUudG9rZW4gPT0gaHRtbERpc3BhdGNoKQogICAgICAgIHJldHVybiBodG1sTWl4ZWRNb2RlLmluZGVudChzdGF0ZS5odG1sU3RhdGUsIHRleHRBZnRlcik7CiAgICAgIGVsc2UKICAgICAgICByZXR1cm4gc2NyaXB0aW5nTW9kZS5pbmRlbnQoc3RhdGUuc2NyaXB0U3RhdGUsIHRleHRBZnRlcik7CiAgICB9LAogICAgCiAgICBjb3B5U3RhdGU6IGZ1bmN0aW9uKHN0YXRlKSB7CiAgICAgIHJldHVybiB7CiAgICAgICB0b2tlbiA6IHN0YXRlLnRva2VuLAogICAgICAgaHRtbFN0YXRlIDogQ29kZU1pcnJvci5jb3B5U3RhdGUoaHRtbE1peGVkTW9kZSwgc3RhdGUuaHRtbFN0YXRlKSwKICAgICAgIHNjcmlwdFN0YXRlIDogQ29kZU1pcnJvci5jb3B5U3RhdGUoc2NyaXB0aW5nTW9kZSwgc3RhdGUuc2NyaXB0U3RhdGUpCiAgICAgICB9CiAgICB9LAogICAgCgogICAgZWxlY3RyaWNDaGFyczogIi97fToiCiAgfQp9KTsKCkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgiYXBwbGljYXRpb24veC1lanMiLCB7IG5hbWU6ICJodG1sZW1iZWRkZWQiLCBzY3JpcHRpbmdNb2RlU3BlYzoiamF2YXNjcmlwdCJ9KTsKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJhcHBsaWNhdGlvbi94LWFzcHgiLCB7IG5hbWU6ICJodG1sZW1iZWRkZWQiLCBzY3JpcHRpbmdNb2RlU3BlYzoidGV4dC94LWNzaGFycCJ9KTsKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJhcHBsaWNhdGlvbi94LWpzcCIsIHsgbmFtZTogImh0bWxlbWJlZGRlZCIsIHNjcmlwdGluZ01vZGVTcGVjOiJ0ZXh0L3gtamF2YSJ9KTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/htmlembedded/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEh0bWwgRW1iZWRkZWQgU2NyaXB0cyBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4veG1sL3htbC5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vamF2YXNjcmlwdC9qYXZhc2NyaXB0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9jc3MvY3NzLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9odG1sbWl4ZWQvaHRtbG1peGVkLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodG1sZW1iZWRkZWQuanMiPjwvc2NyaXB0PgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4uQ29kZU1pcnJvciB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7fTwvc3R5bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2RvYy9kb2NzLmNzcyI+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3I6IEh0bWwgRW1iZWRkZWQgU2NyaXB0cyBtb2RlPC9oMT4KCjxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+CjwlCmZ1bmN0aW9uIGhlbGxvKHdobykgewoJcmV0dXJuICJIZWxsbyAiICsgd2hvOwp9CiU+ClRoaXMgaXMgYW4gZXhhbXBsZSBvZiBFSlMgKGVtYmVkZGVkIGphdmFzY3JpcHQpCjxwPlRoZSBwcm9ncmFtIHNheXMgPCU9IGhlbGxvKCJ3b3JsZCIpICU+LjwvcD4KPHNjcmlwdD4KCWFsZXJ0KCJBbmQgaGVyZSBpcyBzb21lIG5vcm1hbCBKUyBjb2RlIik7IC8vIGFsc28gY29sb3JlZAo8L3NjcmlwdD4KPC90ZXh0YXJlYT48L2Zvcm0+CgogICAgPHNjcmlwdD4KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgICAgICBtYXRjaEJyYWNrZXRzOiB0cnVlLAogICAgICAgIG1vZGU6ICJhcHBsaWNhdGlvbi94LWVqcyIsCiAgICAgICAgaW5kZW50VW5pdDogNCwKICAgICAgICBpbmRlbnRXaXRoVGFiczogdHJ1ZSwKICAgICAgICBlbnRlck1vZGU6ICJrZWVwIiwKICAgICAgICB0YWJNb2RlOiAic2hpZnQiCiAgICAgIH0pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+TW9kZSBmb3IgaHRtbCBlbWJlZGRlZCBzY3JpcHRzIGxpa2UgSlNQIGFuZCBBU1AuTkVULiBEZXBlbmRzIG9uIEh0bWxNaXhlZCB3aGljaCBpbiB0dXJuIGRlcGVuZHMgb24KICAgIEphdmFTY3JpcHQsIENTUyBhbmQgWE1MLjxiciAvPk90aGVyIGRlcGVuZGFuY2llcyBpbmNsdWRlIHRob3NlIG9mIHRoZSBzY3JpcGluZyBsYW5ndWFnZSBjaG9zZW4uPC9wPgoKICAgIDxwPjxzdHJvbmc+TUlNRSB0eXBlcyBkZWZpbmVkOjwvc3Ryb25nPiA8Y29kZT5hcHBsaWNhdGlvbi94LWFzcHg8L2NvZGU+IChBU1AuTkVUKSwgCiAgICA8Y29kZT5hcHBsaWNhdGlvbi94LWVqczwvY29kZT4gKEVtYmVkZGVkIEphdmFzY3JpcHQpLCA8Y29kZT5hcHBsaWNhdGlvbi94LWpzcDwvY29kZT4gKEphdmFTZXJ2ZXIgUGFnZXMpPC9wPgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/htmlmixed/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/htmlmixed/htmlmixed.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJodG1sbWl4ZWQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogIHZhciBodG1sTW9kZSA9IENvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsIHtuYW1lOiAieG1sIiwgaHRtbE1vZGU6IHRydWV9KTsKICB2YXIganNNb2RlID0gQ29kZU1pcnJvci5nZXRNb2RlKGNvbmZpZywgImphdmFzY3JpcHQiKTsKICB2YXIgY3NzTW9kZSA9IENvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsICJjc3MiKTsKCiAgZnVuY3Rpb24gaHRtbChzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgc3R5bGUgPSBodG1sTW9kZS50b2tlbihzdHJlYW0sIHN0YXRlLmh0bWxTdGF0ZSk7CiAgICBpZiAoc3R5bGUgPT0gInRhZyIgJiYgc3RyZWFtLmN1cnJlbnQoKSA9PSAiPiIgJiYgc3RhdGUuaHRtbFN0YXRlLmNvbnRleHQpIHsKICAgICAgaWYgKC9ec2NyaXB0JC9pLnRlc3Qoc3RhdGUuaHRtbFN0YXRlLmNvbnRleHQudGFnTmFtZSkpIHsKICAgICAgICBzdGF0ZS50b2tlbiA9IGphdmFzY3JpcHQ7CiAgICAgICAgc3RhdGUubG9jYWxTdGF0ZSA9IGpzTW9kZS5zdGFydFN0YXRlKGh0bWxNb2RlLmluZGVudChzdGF0ZS5odG1sU3RhdGUsICIiKSk7CiAgICAgICAgc3RhdGUubW9kZSA9ICJqYXZhc2NyaXB0IjsKICAgICAgfQogICAgICBlbHNlIGlmICgvXnN0eWxlJC9pLnRlc3Qoc3RhdGUuaHRtbFN0YXRlLmNvbnRleHQudGFnTmFtZSkpIHsKICAgICAgICBzdGF0ZS50b2tlbiA9IGNzczsKICAgICAgICBzdGF0ZS5sb2NhbFN0YXRlID0gY3NzTW9kZS5zdGFydFN0YXRlKGh0bWxNb2RlLmluZGVudChzdGF0ZS5odG1sU3RhdGUsICIiKSk7CiAgICAgICAgc3RhdGUubW9kZSA9ICJjc3MiOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gc3R5bGU7CiAgfQogIGZ1bmN0aW9uIG1heWJlQmFja3VwKHN0cmVhbSwgcGF0LCBzdHlsZSkgewogICAgdmFyIGN1ciA9IHN0cmVhbS5jdXJyZW50KCk7CiAgICB2YXIgY2xvc2UgPSBjdXIuc2VhcmNoKHBhdCk7CiAgICBpZiAoY2xvc2UgPiAtMSkgc3RyZWFtLmJhY2tVcChjdXIubGVuZ3RoIC0gY2xvc2UpOwogICAgcmV0dXJuIHN0eWxlOwogIH0KICBmdW5jdGlvbiBqYXZhc2NyaXB0KHN0cmVhbSwgc3RhdGUpIHsKICAgIGlmIChzdHJlYW0ubWF0Y2goL148XC9ccypzY3JpcHRccyo+L2ksIGZhbHNlKSkgewogICAgICBzdGF0ZS50b2tlbiA9IGh0bWw7CiAgICAgIHN0YXRlLmN1clN0YXRlID0gbnVsbDsKICAgICAgc3RhdGUubW9kZSA9ICJodG1sIjsKICAgICAgcmV0dXJuIGh0bWwoc3RyZWFtLCBzdGF0ZSk7CiAgICB9CiAgICByZXR1cm4gbWF5YmVCYWNrdXAoc3RyZWFtLCAvPFwvXHMqc2NyaXB0XHMqPi8sCiAgICAgICAgICAgICAgICAgICAgICAganNNb2RlLnRva2VuKHN0cmVhbSwgc3RhdGUubG9jYWxTdGF0ZSkpOwogIH0KICBmdW5jdGlvbiBjc3Moc3RyZWFtLCBzdGF0ZSkgewogICAgaWYgKHN0cmVhbS5tYXRjaCgvXjxcL1xzKnN0eWxlXHMqPi9pLCBmYWxzZSkpIHsKICAgICAgc3RhdGUudG9rZW4gPSBodG1sOwogICAgICBzdGF0ZS5sb2NhbFN0YXRlID0gbnVsbDsKICAgICAgc3RhdGUubW9kZSA9ICJodG1sIjsKICAgICAgcmV0dXJuIGh0bWwoc3RyZWFtLCBzdGF0ZSk7CiAgICB9CiAgICByZXR1cm4gbWF5YmVCYWNrdXAoc3RyZWFtLCAvPFwvXHMqc3R5bGVccyo+LywKICAgICAgICAgICAgICAgICAgICAgICBjc3NNb2RlLnRva2VuKHN0cmVhbSwgc3RhdGUubG9jYWxTdGF0ZSkpOwogIH0KCiAgcmV0dXJuIHsKICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkgewogICAgICB2YXIgc3RhdGUgPSBodG1sTW9kZS5zdGFydFN0YXRlKCk7CiAgICAgIHJldHVybiB7dG9rZW46IGh0bWwsIGxvY2FsU3RhdGU6IG51bGwsIG1vZGU6ICJodG1sIiwgaHRtbFN0YXRlOiBzdGF0ZX07CiAgICB9LAoKICAgIGNvcHlTdGF0ZTogZnVuY3Rpb24oc3RhdGUpIHsKICAgICAgaWYgKHN0YXRlLmxvY2FsU3RhdGUpCiAgICAgICAgdmFyIGxvY2FsID0gQ29kZU1pcnJvci5jb3B5U3RhdGUoc3RhdGUudG9rZW4gPT0gY3NzID8gY3NzTW9kZSA6IGpzTW9kZSwgc3RhdGUubG9jYWxTdGF0ZSk7CiAgICAgIHJldHVybiB7dG9rZW46IHN0YXRlLnRva2VuLCBsb2NhbFN0YXRlOiBsb2NhbCwgbW9kZTogc3RhdGUubW9kZSwKICAgICAgICAgICAgICBodG1sU3RhdGU6IENvZGVNaXJyb3IuY29weVN0YXRlKGh0bWxNb2RlLCBzdGF0ZS5odG1sU3RhdGUpfTsKICAgIH0sCgogICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgcmV0dXJuIHN0YXRlLnRva2VuKHN0cmVhbSwgc3RhdGUpOwogICAgfSwKCiAgICBpbmRlbnQ6IGZ1bmN0aW9uKHN0YXRlLCB0ZXh0QWZ0ZXIpIHsKICAgICAgaWYgKHN0YXRlLnRva2VuID09IGh0bWwgfHwgL15ccyo8XC8vLnRlc3QodGV4dEFmdGVyKSkKICAgICAgICByZXR1cm4gaHRtbE1vZGUuaW5kZW50KHN0YXRlLmh0bWxTdGF0ZSwgdGV4dEFmdGVyKTsKICAgICAgZWxzZSBpZiAoc3RhdGUudG9rZW4gPT0gamF2YXNjcmlwdCkKICAgICAgICByZXR1cm4ganNNb2RlLmluZGVudChzdGF0ZS5sb2NhbFN0YXRlLCB0ZXh0QWZ0ZXIpOwogICAgICBlbHNlCiAgICAgICAgcmV0dXJuIGNzc01vZGUuaW5kZW50KHN0YXRlLmxvY2FsU3RhdGUsIHRleHRBZnRlcik7CiAgICB9LAoKICAgIGNvbXBhcmVTdGF0ZXM6IGZ1bmN0aW9uKGEsIGIpIHsKICAgICAgcmV0dXJuIGh0bWxNb2RlLmNvbXBhcmVTdGF0ZXMoYS5odG1sU3RhdGUsIGIuaHRtbFN0YXRlKTsKICAgIH0sCgogICAgZWxlY3RyaWNDaGFyczogIi97fToiCiAgfQp9KTsKCkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC9odG1sIiwgImh0bWxtaXhlZCIpOwo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/htmlmixed/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEhUTUwgbWl4ZWQgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Ii4uL3htbC94bWwuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Ii4uL2phdmFzY3JpcHQvamF2YXNjcmlwdC5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vY3NzL2Nzcy5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHRtbG1peGVkLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICAgIDxzdHlsZT4uQ29kZU1pcnJvciB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7fTwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3I6IEhUTUwgbWl4ZWQgbW9kZTwvaDE+CiAgICA8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgo8aHRtbCBzdHlsZT0iY29sb3I6IGdyZWVuIj4KICA8IS0tIHRoaXMgaXMgYSBjb21tZW50IC0tPgogIDxoZWFkPgogICAgPHRpdGxlPk1peGVkIEhUTUwgRXhhbXBsZTwvdGl0bGU+CiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgogICAgICBoMSB7Zm9udC1mYW1pbHk6IGNvbWljIHNhbnM7IGNvbG9yOiAjZjBmO30KICAgICAgZGl2IHtiYWNrZ3JvdW5kOiB5ZWxsb3cgIWltcG9ydGFudDt9CiAgICAgIGJvZHkgewogICAgICAgIG1heC13aWR0aDogNTBlbTsKICAgICAgICBtYXJnaW46IDFlbSAyZW0gMWVtIDVlbTsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+TWl4ZWQgSFRNTCBFeGFtcGxlPC9oMT4KICAgIDxzY3JpcHQ+CiAgICAgIGZ1bmN0aW9uIGpzRnVuYyhhcmcxLCBhcmcyKSB7CiAgICAgICAgaWYgKGFyZzEgJiYgYXJnMikgZG9jdW1lbnQuYm9keS5pbm5lckhUTUwgPSAiYWNob28iOwogICAgICB9CiAgICA8L3NjcmlwdD4KICA8L2JvZHk+CjwvaHRtbD4KPC90ZXh0YXJlYT48L2Zvcm0+CiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwge21vZGU6ICJ0ZXh0L2h0bWwiLCB0YWJNb2RlOiAiaW5kZW50In0pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+VGhlIEhUTUwgbWl4ZWQgbW9kZSBkZXBlbmRzIG9uIHRoZSBYTUwsIEphdmFTY3JpcHQsIGFuZCBDU1MgbW9kZXMuPC9wPgoKICAgIDxwPjxzdHJvbmc+TUlNRSB0eXBlcyBkZWZpbmVkOjwvc3Ryb25nPiA8Y29kZT50ZXh0L2h0bWw8L2NvZGU+CiAgICAocmVkZWZpbmVkLCBvbmx5IHRha2VzIGVmZmVjdCBpZiB5b3UgbG9hZCB0aGlzIHBhcnNlciBhZnRlciB0aGUKICAgIFhNTCBwYXJzZXIpLjwvcD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/javascript/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/javascript/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEphdmFTY3JpcHQgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9ImphdmFzY3JpcHQuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4uQ29kZU1pcnJvciB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7fTwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3I6IEphdmFTY3JpcHQgbW9kZTwvaDE+Cgo8ZGl2Pjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+Ci8vIERlbW8gY29kZSAodGhlIGFjdHVhbCBuZXcgcGFyc2VyIGNoYXJhY3RlciBzdHJlYW0gaW1wbGVtZW50YXRpb24pCgpmdW5jdGlvbiBTdHJpbmdTdHJlYW0oc3RyaW5nKSB7CiAgdGhpcy5wb3MgPSAwOwogIHRoaXMuc3RyaW5nID0gc3RyaW5nOwp9CgpTdHJpbmdTdHJlYW0ucHJvdG90eXBlID0gewogIGRvbmU6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLnBvcyA+PSB0aGlzLnN0cmluZy5sZW5ndGg7fSwKICBwZWVrOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKTt9LAogIG5leHQ6IGZ1bmN0aW9uKCkgewogICAgaWYgKHRoaXMucG9zICZsdDsgdGhpcy5zdHJpbmcubGVuZ3RoKQogICAgICByZXR1cm4gdGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKyspOwogIH0sCiAgZWF0OiBmdW5jdGlvbihtYXRjaCkgewogICAgdmFyIGNoID0gdGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKTsKICAgIGlmICh0eXBlb2YgbWF0Y2ggPT0gInN0cmluZyIpIHZhciBvayA9IGNoID09IG1hdGNoOwogICAgZWxzZSB2YXIgb2sgPSBjaCAmYW1wOyZhbXA7IG1hdGNoLnRlc3QgPyBtYXRjaC50ZXN0KGNoKSA6IG1hdGNoKGNoKTsKICAgIGlmIChvaykge3RoaXMucG9zKys7IHJldHVybiBjaDt9CiAgfSwKICBlYXRXaGlsZTogZnVuY3Rpb24obWF0Y2gpIHsKICAgIHZhciBzdGFydCA9IHRoaXMucG9zOwogICAgd2hpbGUgKHRoaXMuZWF0KG1hdGNoKSk7CiAgICBpZiAodGhpcy5wb3MgPiBzdGFydCkgcmV0dXJuIHRoaXMuc3RyaW5nLnNsaWNlKHN0YXJ0LCB0aGlzLnBvcyk7CiAgfSwKICBiYWNrVXA6IGZ1bmN0aW9uKG4pIHt0aGlzLnBvcyAtPSBuO30sCiAgY29sdW1uOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5wb3M7fSwKICBlYXRTcGFjZTogZnVuY3Rpb24oKSB7CiAgICB2YXIgc3RhcnQgPSB0aGlzLnBvczsKICAgIHdoaWxlICgvXHMvLnRlc3QodGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKSkpIHRoaXMucG9zKys7CiAgICByZXR1cm4gdGhpcy5wb3MgLSBzdGFydDsKICB9LAogIG1hdGNoOiBmdW5jdGlvbihwYXR0ZXJuLCBjb25zdW1lLCBjYXNlSW5zZW5zaXRpdmUpIHsKICAgIGlmICh0eXBlb2YgcGF0dGVybiA9PSAic3RyaW5nIikgewogICAgICBmdW5jdGlvbiBjYXNlZChzdHIpIHtyZXR1cm4gY2FzZUluc2Vuc2l0aXZlID8gc3RyLnRvTG93ZXJDYXNlKCkgOiBzdHI7fQogICAgICBpZiAoY2FzZWQodGhpcy5zdHJpbmcpLmluZGV4T2YoY2FzZWQocGF0dGVybiksIHRoaXMucG9zKSA9PSB0aGlzLnBvcykgewogICAgICAgIGlmIChjb25zdW1lICE9PSBmYWxzZSkgdGhpcy5wb3MgKz0gc3RyLmxlbmd0aDsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgIHZhciBtYXRjaCA9IHRoaXMuc3RyaW5nLnNsaWNlKHRoaXMucG9zKS5tYXRjaChwYXR0ZXJuKTsKICAgICAgaWYgKG1hdGNoICZhbXA7JmFtcDsgY29uc3VtZSAhPT0gZmFsc2UpIHRoaXMucG9zICs9IG1hdGNoWzBdLmxlbmd0aDsKICAgICAgcmV0dXJuIG1hdGNoOwogICAgfQogIH0KfTsKPC90ZXh0YXJlYT48L2Rpdj4KCiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUKICAgICAgfSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD5KYXZhU2NyaXB0IG1vZGUgc3VwcG9ydHMgYSBzaW5nbGUgY29uZmlndXJhdGlvbgogICAgb3B0aW9uLCA8Y29kZT5qc29uPC9jb2RlPiwgd2hpY2ggd2lsbCBzZXQgdGhlIG1vZGUgdG8gZXhwZWN0IEpTT04KICAgIGRhdGEgcmF0aGVyIHRoYW4gYSBKYXZhU2NyaXB0IHByb2dyYW0uPC9wPgoKICAgIDxwPjxzdHJvbmc+TUlNRSB0eXBlcyBkZWZpbmVkOjwvc3Ryb25nPiA8Y29kZT50ZXh0L2phdmFzY3JpcHQ8L2NvZGU+LCA8Y29kZT5hcHBsaWNhdGlvbi9qc29uPC9jb2RlPi48L3A+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/javascript/javascript.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICB2YXIgaW5kZW50VW5pdCA9IGNvbmZpZy5pbmRlbnRVbml0OwogIHZhciBqc29uTW9kZSA9IHBhcnNlckNvbmZpZy5qc29uOwoKICAvLyBUb2tlbml6ZXIKCiAgdmFyIGtleXdvcmRzID0gZnVuY3Rpb24oKXsKICAgIGZ1bmN0aW9uIGt3KHR5cGUpIHtyZXR1cm4ge3R5cGU6IHR5cGUsIHN0eWxlOiAia2V5d29yZCJ9O30KICAgIHZhciBBID0ga3coImtleXdvcmQgYSIpLCBCID0ga3coImtleXdvcmQgYiIpLCBDID0ga3coImtleXdvcmQgYyIpOwogICAgdmFyIG9wZXJhdG9yID0ga3coIm9wZXJhdG9yIiksIGF0b20gPSB7dHlwZTogImF0b20iLCBzdHlsZTogImF0b20ifTsKICAgIHJldHVybiB7CiAgICAgICJpZiI6IEEsICJ3aGlsZSI6IEEsICJ3aXRoIjogQSwgImVsc2UiOiBCLCAiZG8iOiBCLCAidHJ5IjogQiwgImZpbmFsbHkiOiBCLAogICAgICAicmV0dXJuIjogQywgImJyZWFrIjogQywgImNvbnRpbnVlIjogQywgIm5ldyI6IEMsICJkZWxldGUiOiBDLCAidGhyb3ciOiBDLAogICAgICAidmFyIjoga3coInZhciIpLCAiY29uc3QiOiBrdygidmFyIiksICJsZXQiOiBrdygidmFyIiksCiAgICAgICJmdW5jdGlvbiI6IGt3KCJmdW5jdGlvbiIpLCAiY2F0Y2giOiBrdygiY2F0Y2giKSwKICAgICAgImZvciI6IGt3KCJmb3IiKSwgInN3aXRjaCI6IGt3KCJzd2l0Y2giKSwgImNhc2UiOiBrdygiY2FzZSIpLCAiZGVmYXVsdCI6IGt3KCJkZWZhdWx0IiksCiAgICAgICJpbiI6IG9wZXJhdG9yLCAidHlwZW9mIjogb3BlcmF0b3IsICJpbnN0YW5jZW9mIjogb3BlcmF0b3IsCiAgICAgICJ0cnVlIjogYXRvbSwgImZhbHNlIjogYXRvbSwgIm51bGwiOiBhdG9tLCAidW5kZWZpbmVkIjogYXRvbSwgIk5hTiI6IGF0b20sICJJbmZpbml0eSI6IGF0b20KICAgIH07CiAgfSgpOwoKICB2YXIgaXNPcGVyYXRvckNoYXIgPSAvWytcLSomJT08PiE/fF0vOwoKICBmdW5jdGlvbiBjaGFpbihzdHJlYW0sIHN0YXRlLCBmKSB7CiAgICBzdGF0ZS50b2tlbml6ZSA9IGY7CiAgICByZXR1cm4gZihzdHJlYW0sIHN0YXRlKTsKICB9CgogIGZ1bmN0aW9uIG5leHRVbnRpbFVuZXNjYXBlZChzdHJlYW0sIGVuZCkgewogICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgbmV4dDsKICAgIHdoaWxlICgobmV4dCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHsKICAgICAgaWYgKG5leHQgPT0gZW5kICYmICFlc2NhcGVkKQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkICYmIG5leHQgPT0gIlxcIjsKICAgIH0KICAgIHJldHVybiBlc2NhcGVkOwogIH0KCiAgLy8gVXNlZCBhcyBzY3JhdGNoIHZhcmlhYmxlcyB0byBjb21tdW5pY2F0ZSBtdWx0aXBsZSB2YWx1ZXMgd2l0aG91dAogIC8vIGNvbnNpbmcgdXAgdG9ucyBvZiBvYmplY3RzLgogIHZhciB0eXBlLCBjb250ZW50OwogIGZ1bmN0aW9uIHJldCh0cCwgc3R5bGUsIGNvbnQpIHsKICAgIHR5cGUgPSB0cDsgY29udGVudCA9IGNvbnQ7CiAgICByZXR1cm4gc3R5bGU7CiAgfQoKICBmdW5jdGlvbiBqc1Rva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgaWYgKGNoID09ICciJyB8fCBjaCA9PSAiJyIpCiAgICAgIHJldHVybiBjaGFpbihzdHJlYW0sIHN0YXRlLCBqc1Rva2VuU3RyaW5nKGNoKSk7CiAgICBlbHNlIGlmICgvW1xbXF17fVwoXCksO1w6XC5dLy50ZXN0KGNoKSkKICAgICAgcmV0dXJuIHJldChjaCk7CiAgICBlbHNlIGlmIChjaCA9PSAiMCIgJiYgc3RyZWFtLmVhdCgveC9pKSkgewogICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcZGEtZl0vaSk7CiAgICAgIHJldHVybiByZXQoIm51bWJlciIsICJudW1iZXIiKTsKICAgIH0gICAgICAKICAgIGVsc2UgaWYgKC9cZC8udGVzdChjaCkpIHsKICAgICAgc3RyZWFtLm1hdGNoKC9eXGQqKD86XC5cZCopPyg/OltlRV1bK1wtXT9cZCspPy8pOwogICAgICByZXR1cm4gcmV0KCJudW1iZXIiLCAibnVtYmVyIik7CiAgICB9CiAgICBlbHNlIGlmIChjaCA9PSAiLyIpIHsKICAgICAgaWYgKHN0cmVhbS5lYXQoIioiKSkgewogICAgICAgIHJldHVybiBjaGFpbihzdHJlYW0sIHN0YXRlLCBqc1Rva2VuQ29tbWVudCk7CiAgICAgIH0KICAgICAgZWxzZSBpZiAoc3RyZWFtLmVhdCgiLyIpKSB7CiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICAgIHJldHVybiByZXQoImNvbW1lbnQiLCAiY29tbWVudCIpOwogICAgICB9CiAgICAgIGVsc2UgaWYgKHN0YXRlLnJlQWxsb3dlZCkgewogICAgICAgIG5leHRVbnRpbFVuZXNjYXBlZChzdHJlYW0sICIvIik7CiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bZ2lteV0vKTsgLy8gJ3knIGlzICJzdGlja3kiIG9wdGlvbiBpbiBNb3ppbGxhCiAgICAgICAgcmV0dXJuIHJldCgicmVnZXhwIiwgInN0cmluZy0yIik7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKGlzT3BlcmF0b3JDaGFyKTsKICAgICAgICByZXR1cm4gcmV0KCJvcGVyYXRvciIsIG51bGwsIHN0cmVhbS5jdXJyZW50KCkpOwogICAgICB9CiAgICB9CiAgICBlbHNlIGlmIChjaCA9PSAiIyIpIHsKICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgICAgcmV0dXJuIHJldCgiZXJyb3IiLCAiZXJyb3IiKTsKICAgIH0KICAgIGVsc2UgaWYgKGlzT3BlcmF0b3JDaGFyLnRlc3QoY2gpKSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZShpc09wZXJhdG9yQ2hhcik7CiAgICAgIHJldHVybiByZXQoIm9wZXJhdG9yIiwgbnVsbCwgc3RyZWFtLmN1cnJlbnQoKSk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcJF9dLyk7CiAgICAgIHZhciB3b3JkID0gc3RyZWFtLmN1cnJlbnQoKSwga25vd24gPSBrZXl3b3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZSh3b3JkKSAmJiBrZXl3b3Jkc1t3b3JkXTsKICAgICAgcmV0dXJuIChrbm93biAmJiBzdGF0ZS5rd0FsbG93ZWQpID8gcmV0KGtub3duLnR5cGUsIGtub3duLnN0eWxlLCB3b3JkKSA6CiAgICAgICAgICAgICAgICAgICAgIHJldCgidmFyaWFibGUiLCAidmFyaWFibGUiLCB3b3JkKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIGpzVG9rZW5TdHJpbmcocXVvdGUpIHsKICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgIGlmICghbmV4dFVudGlsVW5lc2NhcGVkKHN0cmVhbSwgcXVvdGUpKQogICAgICAgIHN0YXRlLnRva2VuaXplID0ganNUb2tlbkJhc2U7CiAgICAgIHJldHVybiByZXQoInN0cmluZyIsICJzdHJpbmciKTsKICAgIH07CiAgfQoKICBmdW5jdGlvbiBqc1Rva2VuQ29tbWVudChzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgbWF5YmVFbmQgPSBmYWxzZSwgY2g7CiAgICB3aGlsZSAoY2ggPSBzdHJlYW0ubmV4dCgpKSB7CiAgICAgIGlmIChjaCA9PSAiLyIgJiYgbWF5YmVFbmQpIHsKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGpzVG9rZW5CYXNlOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIG1heWJlRW5kID0gKGNoID09ICIqIik7CiAgICB9CiAgICByZXR1cm4gcmV0KCJjb21tZW50IiwgImNvbW1lbnQiKTsKICB9CgogIC8vIFBhcnNlcgoKICB2YXIgYXRvbWljVHlwZXMgPSB7ImF0b20iOiB0cnVlLCAibnVtYmVyIjogdHJ1ZSwgInZhcmlhYmxlIjogdHJ1ZSwgInN0cmluZyI6IHRydWUsICJyZWdleHAiOiB0cnVlfTsKCiAgZnVuY3Rpb24gSlNMZXhpY2FsKGluZGVudGVkLCBjb2x1bW4sIHR5cGUsIGFsaWduLCBwcmV2LCBpbmZvKSB7CiAgICB0aGlzLmluZGVudGVkID0gaW5kZW50ZWQ7CiAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjsKICAgIHRoaXMudHlwZSA9IHR5cGU7CiAgICB0aGlzLnByZXYgPSBwcmV2OwogICAgdGhpcy5pbmZvID0gaW5mbzsKICAgIGlmIChhbGlnbiAhPSBudWxsKSB0aGlzLmFsaWduID0gYWxpZ247CiAgfQoKICBmdW5jdGlvbiBpblNjb3BlKHN0YXRlLCB2YXJuYW1lKSB7CiAgICBmb3IgKHZhciB2ID0gc3RhdGUubG9jYWxWYXJzOyB2OyB2ID0gdi5uZXh0KQogICAgICBpZiAodi5uYW1lID09IHZhcm5hbWUpIHJldHVybiB0cnVlOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VKUyhzdGF0ZSwgc3R5bGUsIHR5cGUsIGNvbnRlbnQsIHN0cmVhbSkgewogICAgdmFyIGNjID0gc3RhdGUuY2M7CiAgICAvLyBDb21tdW5pY2F0ZSBvdXIgY29udGV4dCB0byB0aGUgY29tYmluYXRvcnMuCiAgICAvLyAoTGVzcyB3YXN0ZWZ1bCB0aGFuIGNvbnNpbmcgdXAgYSBodW5kcmVkIGNsb3N1cmVzIG9uIGV2ZXJ5IGNhbGwuKQogICAgY3guc3RhdGUgPSBzdGF0ZTsgY3guc3RyZWFtID0gc3RyZWFtOyBjeC5tYXJrZWQgPSBudWxsLCBjeC5jYyA9IGNjOwogIAogICAgaWYgKCFzdGF0ZS5sZXhpY2FsLmhhc093blByb3BlcnR5KCJhbGlnbiIpKQogICAgICBzdGF0ZS5sZXhpY2FsLmFsaWduID0gdHJ1ZTsKCiAgICB3aGlsZSh0cnVlKSB7CiAgICAgIHZhciBjb21iaW5hdG9yID0gY2MubGVuZ3RoID8gY2MucG9wKCkgOiBqc29uTW9kZSA/IGV4cHJlc3Npb24gOiBzdGF0ZW1lbnQ7CiAgICAgIGlmIChjb21iaW5hdG9yKHR5cGUsIGNvbnRlbnQpKSB7CiAgICAgICAgd2hpbGUoY2MubGVuZ3RoICYmIGNjW2NjLmxlbmd0aCAtIDFdLmxleCkKICAgICAgICAgIGNjLnBvcCgpKCk7CiAgICAgICAgaWYgKGN4Lm1hcmtlZCkgcmV0dXJuIGN4Lm1hcmtlZDsKICAgICAgICBpZiAodHlwZSA9PSAidmFyaWFibGUiICYmIGluU2NvcGUoc3RhdGUsIGNvbnRlbnQpKSByZXR1cm4gInZhcmlhYmxlLTIiOwogICAgICAgIHJldHVybiBzdHlsZTsKICAgICAgfQogICAgfQogIH0KCiAgLy8gQ29tYmluYXRvciB1dGlscwoKICB2YXIgY3ggPSB7c3RhdGU6IG51bGwsIGNvbHVtbjogbnVsbCwgbWFya2VkOiBudWxsLCBjYzogbnVsbH07CiAgZnVuY3Rpb24gcGFzcygpIHsKICAgIGZvciAodmFyIGkgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGN4LmNjLnB1c2goYXJndW1lbnRzW2ldKTsKICB9CiAgZnVuY3Rpb24gY29udCgpIHsKICAgIHBhc3MuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsKICAgIHJldHVybiB0cnVlOwogIH0KICBmdW5jdGlvbiByZWdpc3Rlcih2YXJuYW1lKSB7CiAgICB2YXIgc3RhdGUgPSBjeC5zdGF0ZTsKICAgIGlmIChzdGF0ZS5jb250ZXh0KSB7CiAgICAgIGN4Lm1hcmtlZCA9ICJkZWYiOwogICAgICBmb3IgKHZhciB2ID0gc3RhdGUubG9jYWxWYXJzOyB2OyB2ID0gdi5uZXh0KQogICAgICAgIGlmICh2Lm5hbWUgPT0gdmFybmFtZSkgcmV0dXJuOwogICAgICBzdGF0ZS5sb2NhbFZhcnMgPSB7bmFtZTogdmFybmFtZSwgbmV4dDogc3RhdGUubG9jYWxWYXJzfTsKICAgIH0KICB9CgogIC8vIENvbWJpbmF0b3JzCgogIHZhciBkZWZhdWx0VmFycyA9IHtuYW1lOiAidGhpcyIsIG5leHQ6IHtuYW1lOiAiYXJndW1lbnRzIn19OwogIGZ1bmN0aW9uIHB1c2hjb250ZXh0KCkgewogICAgaWYgKCFjeC5zdGF0ZS5jb250ZXh0KSBjeC5zdGF0ZS5sb2NhbFZhcnMgPSBkZWZhdWx0VmFyczsKICAgIGN4LnN0YXRlLmNvbnRleHQgPSB7cHJldjogY3guc3RhdGUuY29udGV4dCwgdmFyczogY3guc3RhdGUubG9jYWxWYXJzfTsKICB9CiAgZnVuY3Rpb24gcG9wY29udGV4dCgpIHsKICAgIGN4LnN0YXRlLmxvY2FsVmFycyA9IGN4LnN0YXRlLmNvbnRleHQudmFyczsKICAgIGN4LnN0YXRlLmNvbnRleHQgPSBjeC5zdGF0ZS5jb250ZXh0LnByZXY7CiAgfQogIGZ1bmN0aW9uIHB1c2hsZXgodHlwZSwgaW5mbykgewogICAgdmFyIHJlc3VsdCA9IGZ1bmN0aW9uKCkgewogICAgICB2YXIgc3RhdGUgPSBjeC5zdGF0ZTsKICAgICAgc3RhdGUubGV4aWNhbCA9IG5ldyBKU0xleGljYWwoc3RhdGUuaW5kZW50ZWQsIGN4LnN0cmVhbS5jb2x1bW4oKSwgdHlwZSwgbnVsbCwgc3RhdGUubGV4aWNhbCwgaW5mbykKICAgIH07CiAgICByZXN1bHQubGV4ID0gdHJ1ZTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQogIGZ1bmN0aW9uIHBvcGxleCgpIHsKICAgIHZhciBzdGF0ZSA9IGN4LnN0YXRlOwogICAgaWYgKHN0YXRlLmxleGljYWwucHJldikgewogICAgICBpZiAoc3RhdGUubGV4aWNhbC50eXBlID09ICIpIikKICAgICAgICBzdGF0ZS5pbmRlbnRlZCA9IHN0YXRlLmxleGljYWwuaW5kZW50ZWQ7CiAgICAgIHN0YXRlLmxleGljYWwgPSBzdGF0ZS5sZXhpY2FsLnByZXY7CiAgICB9CiAgfQogIHBvcGxleC5sZXggPSB0cnVlOwoKICBmdW5jdGlvbiBleHBlY3Qod2FudGVkKSB7CiAgICByZXR1cm4gZnVuY3Rpb24gZXhwZWN0aW5nKHR5cGUpIHsKICAgICAgaWYgKHR5cGUgPT0gd2FudGVkKSByZXR1cm4gY29udCgpOwogICAgICBlbHNlIGlmICh3YW50ZWQgPT0gIjsiKSByZXR1cm4gcGFzcygpOwogICAgICBlbHNlIHJldHVybiBjb250KGFyZ3VtZW50cy5jYWxsZWUpOwogICAgfTsKICB9CgogIGZ1bmN0aW9uIHN0YXRlbWVudCh0eXBlKSB7CiAgICBpZiAodHlwZSA9PSAidmFyIikgcmV0dXJuIGNvbnQocHVzaGxleCgidmFyZGVmIiksIHZhcmRlZjEsIGV4cGVjdCgiOyIpLCBwb3BsZXgpOwogICAgaWYgKHR5cGUgPT0gImtleXdvcmQgYSIpIHJldHVybiBjb250KHB1c2hsZXgoImZvcm0iKSwgZXhwcmVzc2lvbiwgc3RhdGVtZW50LCBwb3BsZXgpOwogICAgaWYgKHR5cGUgPT0gImtleXdvcmQgYiIpIHJldHVybiBjb250KHB1c2hsZXgoImZvcm0iKSwgc3RhdGVtZW50LCBwb3BsZXgpOwogICAgaWYgKHR5cGUgPT0gInsiKSByZXR1cm4gY29udChwdXNobGV4KCJ9IiksIGJsb2NrLCBwb3BsZXgpOwogICAgaWYgKHR5cGUgPT0gIjsiKSByZXR1cm4gY29udCgpOwogICAgaWYgKHR5cGUgPT0gImZ1bmN0aW9uIikgcmV0dXJuIGNvbnQoZnVuY3Rpb25kZWYpOwogICAgaWYgKHR5cGUgPT0gImZvciIpIHJldHVybiBjb250KHB1c2hsZXgoImZvcm0iKSwgZXhwZWN0KCIoIiksIHB1c2hsZXgoIikiKSwgZm9yc3BlYzEsIGV4cGVjdCgiKSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcGxleCwgc3RhdGVtZW50LCBwb3BsZXgpOwogICAgaWYgKHR5cGUgPT0gInZhcmlhYmxlIikgcmV0dXJuIGNvbnQocHVzaGxleCgic3RhdCIpLCBtYXliZWxhYmVsKTsKICAgIGlmICh0eXBlID09ICJzd2l0Y2giKSByZXR1cm4gY29udChwdXNobGV4KCJmb3JtIiksIGV4cHJlc3Npb24sIHB1c2hsZXgoIn0iLCAic3dpdGNoIiksIGV4cGVjdCgieyIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLCBwb3BsZXgsIHBvcGxleCk7CiAgICBpZiAodHlwZSA9PSAiY2FzZSIpIHJldHVybiBjb250KGV4cHJlc3Npb24sIGV4cGVjdCgiOiIpKTsKICAgIGlmICh0eXBlID09ICJkZWZhdWx0IikgcmV0dXJuIGNvbnQoZXhwZWN0KCI6IikpOwogICAgaWYgKHR5cGUgPT0gImNhdGNoIikgcmV0dXJuIGNvbnQocHVzaGxleCgiZm9ybSIpLCBwdXNoY29udGV4dCwgZXhwZWN0KCIoIiksIGZ1bmFyZywgZXhwZWN0KCIpIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQsIHBvcGxleCwgcG9wY29udGV4dCk7CiAgICByZXR1cm4gcGFzcyhwdXNobGV4KCJzdGF0IiksIGV4cHJlc3Npb24sIGV4cGVjdCgiOyIpLCBwb3BsZXgpOwogIH0KICBmdW5jdGlvbiBleHByZXNzaW9uKHR5cGUpIHsKICAgIGlmIChhdG9taWNUeXBlcy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSkgcmV0dXJuIGNvbnQobWF5YmVvcGVyYXRvcik7CiAgICBpZiAodHlwZSA9PSAiZnVuY3Rpb24iKSByZXR1cm4gY29udChmdW5jdGlvbmRlZik7CiAgICBpZiAodHlwZSA9PSAia2V5d29yZCBjIikgcmV0dXJuIGNvbnQobWF5YmVleHByZXNzaW9uKTsKICAgIGlmICh0eXBlID09ICIoIikgcmV0dXJuIGNvbnQocHVzaGxleCgiKSIpLCBtYXliZWV4cHJlc3Npb24sIGV4cGVjdCgiKSIpLCBwb3BsZXgsIG1heWJlb3BlcmF0b3IpOwogICAgaWYgKHR5cGUgPT0gIm9wZXJhdG9yIikgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbik7CiAgICBpZiAodHlwZSA9PSAiWyIpIHJldHVybiBjb250KHB1c2hsZXgoIl0iKSwgY29tbWFzZXAoZXhwcmVzc2lvbiwgIl0iKSwgcG9wbGV4LCBtYXliZW9wZXJhdG9yKTsKICAgIGlmICh0eXBlID09ICJ7IikgcmV0dXJuIGNvbnQocHVzaGxleCgifSIpLCBjb21tYXNlcChvYmpwcm9wLCAifSIpLCBwb3BsZXgsIG1heWJlb3BlcmF0b3IpOwogICAgcmV0dXJuIGNvbnQoKTsKICB9CiAgZnVuY3Rpb24gbWF5YmVleHByZXNzaW9uKHR5cGUpIHsKICAgIGlmICh0eXBlLm1hdGNoKC9bO1x9XClcXSxdLykpIHJldHVybiBwYXNzKCk7CiAgICByZXR1cm4gcGFzcyhleHByZXNzaW9uKTsKICB9CiAgICAKICBmdW5jdGlvbiBtYXliZW9wZXJhdG9yKHR5cGUsIHZhbHVlKSB7CiAgICBpZiAodHlwZSA9PSAib3BlcmF0b3IiICYmIC9cK1wrfC0tLy50ZXN0KHZhbHVlKSkgcmV0dXJuIGNvbnQobWF5YmVvcGVyYXRvcik7CiAgICBpZiAodHlwZSA9PSAib3BlcmF0b3IiKSByZXR1cm4gY29udChleHByZXNzaW9uKTsKICAgIGlmICh0eXBlID09ICI7IikgcmV0dXJuOwogICAgaWYgKHR5cGUgPT0gIigiKSByZXR1cm4gY29udChwdXNobGV4KCIpIiksIGNvbW1hc2VwKGV4cHJlc3Npb24sICIpIiksIHBvcGxleCwgbWF5YmVvcGVyYXRvcik7CiAgICBpZiAodHlwZSA9PSAiLiIpIHJldHVybiBjb250KHByb3BlcnR5LCBtYXliZW9wZXJhdG9yKTsKICAgIGlmICh0eXBlID09ICJbIikgcmV0dXJuIGNvbnQocHVzaGxleCgiXSIpLCBleHByZXNzaW9uLCBleHBlY3QoIl0iKSwgcG9wbGV4LCBtYXliZW9wZXJhdG9yKTsKICB9CiAgZnVuY3Rpb24gbWF5YmVsYWJlbCh0eXBlKSB7CiAgICBpZiAodHlwZSA9PSAiOiIpIHJldHVybiBjb250KHBvcGxleCwgc3RhdGVtZW50KTsKICAgIHJldHVybiBwYXNzKG1heWJlb3BlcmF0b3IsIGV4cGVjdCgiOyIpLCBwb3BsZXgpOwogIH0KICBmdW5jdGlvbiBwcm9wZXJ0eSh0eXBlKSB7CiAgICBpZiAodHlwZSA9PSAidmFyaWFibGUiKSB7Y3gubWFya2VkID0gInByb3BlcnR5IjsgcmV0dXJuIGNvbnQoKTt9CiAgfQogIGZ1bmN0aW9uIG9ianByb3AodHlwZSkgewogICAgaWYgKHR5cGUgPT0gInZhcmlhYmxlIikgY3gubWFya2VkID0gInByb3BlcnR5IjsKICAgIGlmIChhdG9taWNUeXBlcy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSkgcmV0dXJuIGNvbnQoZXhwZWN0KCI6IiksIGV4cHJlc3Npb24pOwogIH0KICBmdW5jdGlvbiBjb21tYXNlcCh3aGF0LCBlbmQpIHsKICAgIGZ1bmN0aW9uIHByb2NlZWQodHlwZSkgewogICAgICBpZiAodHlwZSA9PSAiLCIpIHJldHVybiBjb250KHdoYXQsIHByb2NlZWQpOwogICAgICBpZiAodHlwZSA9PSBlbmQpIHJldHVybiBjb250KCk7CiAgICAgIHJldHVybiBjb250KGV4cGVjdChlbmQpKTsKICAgIH0KICAgIHJldHVybiBmdW5jdGlvbiBjb21tYVNlcGFyYXRlZCh0eXBlKSB7CiAgICAgIGlmICh0eXBlID09IGVuZCkgcmV0dXJuIGNvbnQoKTsKICAgICAgZWxzZSByZXR1cm4gcGFzcyh3aGF0LCBwcm9jZWVkKTsKICAgIH07CiAgfQogIGZ1bmN0aW9uIGJsb2NrKHR5cGUpIHsKICAgIGlmICh0eXBlID09ICJ9IikgcmV0dXJuIGNvbnQoKTsKICAgIHJldHVybiBwYXNzKHN0YXRlbWVudCwgYmxvY2spOwogIH0KICBmdW5jdGlvbiB2YXJkZWYxKHR5cGUsIHZhbHVlKSB7CiAgICBpZiAodHlwZSA9PSAidmFyaWFibGUiKXtyZWdpc3Rlcih2YWx1ZSk7IHJldHVybiBjb250KHZhcmRlZjIpO30KICAgIHJldHVybiBjb250KCk7CiAgfQogIGZ1bmN0aW9uIHZhcmRlZjIodHlwZSwgdmFsdWUpIHsKICAgIGlmICh2YWx1ZSA9PSAiPSIpIHJldHVybiBjb250KGV4cHJlc3Npb24sIHZhcmRlZjIpOwogICAgaWYgKHR5cGUgPT0gIiwiKSByZXR1cm4gY29udCh2YXJkZWYxKTsKICB9CiAgZnVuY3Rpb24gZm9yc3BlYzEodHlwZSkgewogICAgaWYgKHR5cGUgPT0gInZhciIpIHJldHVybiBjb250KHZhcmRlZjEsIGZvcnNwZWMyKTsKICAgIGlmICh0eXBlID09ICI7IikgcmV0dXJuIHBhc3MoZm9yc3BlYzIpOwogICAgaWYgKHR5cGUgPT0gInZhcmlhYmxlIikgcmV0dXJuIGNvbnQoZm9ybWF5YmVpbik7CiAgICByZXR1cm4gcGFzcyhmb3JzcGVjMik7CiAgfQogIGZ1bmN0aW9uIGZvcm1heWJlaW4odHlwZSwgdmFsdWUpIHsKICAgIGlmICh2YWx1ZSA9PSAiaW4iKSByZXR1cm4gY29udChleHByZXNzaW9uKTsKICAgIHJldHVybiBjb250KG1heWJlb3BlcmF0b3IsIGZvcnNwZWMyKTsKICB9CiAgZnVuY3Rpb24gZm9yc3BlYzIodHlwZSwgdmFsdWUpIHsKICAgIGlmICh0eXBlID09ICI7IikgcmV0dXJuIGNvbnQoZm9yc3BlYzMpOwogICAgaWYgKHZhbHVlID09ICJpbiIpIHJldHVybiBjb250KGV4cHJlc3Npb24pOwogICAgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbiwgZXhwZWN0KCI7IiksIGZvcnNwZWMzKTsKICB9CiAgZnVuY3Rpb24gZm9yc3BlYzModHlwZSkgewogICAgaWYgKHR5cGUgIT0gIikiKSBjb250KGV4cHJlc3Npb24pOwogIH0KICBmdW5jdGlvbiBmdW5jdGlvbmRlZih0eXBlLCB2YWx1ZSkgewogICAgaWYgKHR5cGUgPT0gInZhcmlhYmxlIikge3JlZ2lzdGVyKHZhbHVlKTsgcmV0dXJuIGNvbnQoZnVuY3Rpb25kZWYpO30KICAgIGlmICh0eXBlID09ICIoIikgcmV0dXJuIGNvbnQocHVzaGxleCgiKSIpLCBwdXNoY29udGV4dCwgY29tbWFzZXAoZnVuYXJnLCAiKSIpLCBwb3BsZXgsIHN0YXRlbWVudCwgcG9wY29udGV4dCk7CiAgfQogIGZ1bmN0aW9uIGZ1bmFyZyh0eXBlLCB2YWx1ZSkgewogICAgaWYgKHR5cGUgPT0gInZhcmlhYmxlIikge3JlZ2lzdGVyKHZhbHVlKTsgcmV0dXJuIGNvbnQoKTt9CiAgfQoKICAvLyBJbnRlcmZhY2UKCiAgcmV0dXJuIHsKICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKGJhc2Vjb2x1bW4pIHsKICAgICAgcmV0dXJuIHsKICAgICAgICB0b2tlbml6ZToganNUb2tlbkJhc2UsCiAgICAgICAgcmVBbGxvd2VkOiB0cnVlLAogICAgICAgIGt3QWxsb3dlZDogdHJ1ZSwKICAgICAgICBjYzogW10sCiAgICAgICAgbGV4aWNhbDogbmV3IEpTTGV4aWNhbCgoYmFzZWNvbHVtbiB8fCAwKSAtIGluZGVudFVuaXQsIDAsICJibG9jayIsIGZhbHNlKSwKICAgICAgICBsb2NhbFZhcnM6IG51bGwsCiAgICAgICAgY29udGV4dDogbnVsbCwKICAgICAgICBpbmRlbnRlZDogMAogICAgICB9OwogICAgfSwKCiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICBpZiAoc3RyZWFtLnNvbCgpKSB7CiAgICAgICAgaWYgKCFzdGF0ZS5sZXhpY2FsLmhhc093blByb3BlcnR5KCJhbGlnbiIpKQogICAgICAgICAgc3RhdGUubGV4aWNhbC5hbGlnbiA9IGZhbHNlOwogICAgICAgIHN0YXRlLmluZGVudGVkID0gc3RyZWFtLmluZGVudGF0aW9uKCk7CiAgICAgIH0KICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDsKICAgICAgdmFyIHN0eWxlID0gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICAgIGlmICh0eXBlID09ICJjb21tZW50IikgcmV0dXJuIHN0eWxlOwogICAgICBzdGF0ZS5yZUFsbG93ZWQgPSB0eXBlID09ICJvcGVyYXRvciIgfHwgdHlwZSA9PSAia2V5d29yZCBjIiB8fCB0eXBlLm1hdGNoKC9eW1xbe31cKCw7Ol0kLyk7CiAgICAgIHN0YXRlLmt3QWxsb3dlZCA9IHR5cGUgIT0gJy4nOwogICAgICByZXR1cm4gcGFyc2VKUyhzdGF0ZSwgc3R5bGUsIHR5cGUsIGNvbnRlbnQsIHN0cmVhbSk7CiAgICB9LAoKICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlcikgewogICAgICBpZiAoc3RhdGUudG9rZW5pemUgIT0ganNUb2tlbkJhc2UpIHJldHVybiAwOwogICAgICB2YXIgZmlyc3RDaGFyID0gdGV4dEFmdGVyICYmIHRleHRBZnRlci5jaGFyQXQoMCksIGxleGljYWwgPSBzdGF0ZS5sZXhpY2FsLAogICAgICAgICAgdHlwZSA9IGxleGljYWwudHlwZSwgY2xvc2luZyA9IGZpcnN0Q2hhciA9PSB0eXBlOwogICAgICBpZiAodHlwZSA9PSAidmFyZGVmIikgcmV0dXJuIGxleGljYWwuaW5kZW50ZWQgKyA0OwogICAgICBlbHNlIGlmICh0eXBlID09ICJmb3JtIiAmJiBmaXJzdENoYXIgPT0gInsiKSByZXR1cm4gbGV4aWNhbC5pbmRlbnRlZDsKICAgICAgZWxzZSBpZiAodHlwZSA9PSAic3RhdCIgfHwgdHlwZSA9PSAiZm9ybSIpIHJldHVybiBsZXhpY2FsLmluZGVudGVkICsgaW5kZW50VW5pdDsKICAgICAgZWxzZSBpZiAobGV4aWNhbC5pbmZvID09ICJzd2l0Y2giICYmICFjbG9zaW5nKQogICAgICAgIHJldHVybiBsZXhpY2FsLmluZGVudGVkICsgKC9eKD86Y2FzZXxkZWZhdWx0KVxiLy50ZXN0KHRleHRBZnRlcikgPyBpbmRlbnRVbml0IDogMiAqIGluZGVudFVuaXQpOwogICAgICBlbHNlIGlmIChsZXhpY2FsLmFsaWduKSByZXR1cm4gbGV4aWNhbC5jb2x1bW4gKyAoY2xvc2luZyA/IDAgOiAxKTsKICAgICAgZWxzZSByZXR1cm4gbGV4aWNhbC5pbmRlbnRlZCArIChjbG9zaW5nID8gMCA6IGluZGVudFVuaXQpOwogICAgfSwKCiAgICBlbGVjdHJpY0NoYXJzOiAiOnt9IgogIH07Cn0pOwoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L2phdmFzY3JpcHQiLCAiamF2YXNjcmlwdCIpOwpDb2RlTWlycm9yLmRlZmluZU1JTUUoImFwcGxpY2F0aW9uL2pzb24iLCB7bmFtZTogImphdmFzY3JpcHQiLCBqc29uOiB0cnVlfSk7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/jinja2/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/jinja2/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEppbmphMiBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iamluamEyLmpzIj48L3NjcmlwdD4KICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO308L3N0eWxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBKaW5qYTIgbW9kZTwvaDE+CiAgICA8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgombHQ7aHRtbCBzdHlsZT0iY29sb3I6IGdyZWVuIiZndDsKICAmbHQ7IS0tIHRoaXMgaXMgYSBjb21tZW50IC0tJmd0OwogICZsdDtoZWFkJmd0OwogICAgJmx0O3RpdGxlJmd0O0ppbmphMiBFeGFtcGxlJmx0Oy90aXRsZSZndDsKICAmbHQ7L2hlYWQmZ3Q7CiAgJmx0O2JvZHkmZ3Q7CiAgICAmbHQ7dWwmZ3Q7CiAgICB7IyB0aGlzIGlzIGEgY29tbWVudCAjfQogICAgeyUtIGZvciBpdGVtIGluIGxpIC0lfQogICAgICAmbHQ7bGkmZ3Q7CiAgICAgICAge3sgaXRlbS5sYWJlbCB9fQogICAgICAmbHQ7L2xpJmd0OwogICAgeyUgZW5kZm9yIC0lfQogICAgJmx0Oy91bCZndDsKICAmbHQ7L2JvZHkmZ3Q7CiZsdDsvaHRtbCZndDsKPC90ZXh0YXJlYT48L2Zvcm0+CiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0KICAgICAgQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwge21vZGU6CiAgICAgICAge25hbWU6ICJqaW5qYTIiLCBodG1sTW9kZTogdHJ1ZX19KTsKICAgIDwvc2NyaXB0PgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/jinja2/jinja2.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJqaW5qYTIiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmYpIHsKICAgIHZhciBrZXl3b3JkcyA9IFsiYmxvY2siLCAiZW5kYmxvY2siLCAiZm9yIiwgImVuZGZvciIsICJpbiIsICJ0cnVlIiwgImZhbHNlIiwgCiAgICAgICAgICAgICAgICAgICAgImxvb3AiLCAibm9uZSIsICJzZWxmIiwgInN1cGVyIiwgImlmIiwgImFzIiwgIm5vdCIsICJhbmQiLAogICAgICAgICAgICAgICAgICAgICJlbHNlIiwgImltcG9ydCIsICJ3aXRoIiwgIndpdGhvdXQiLCAiY29udGV4dCJdOwogICAga2V5d29yZHMgPSBuZXcgUmVnRXhwKCJeKCgiICsga2V5d29yZHMuam9pbigiKXwoIikgKyAiKSlcXGIiKTsKCiAgICBmdW5jdGlvbiB0b2tlbkJhc2UgKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgICAgIGlmIChjaCA9PSAieyIpIHsKICAgICAgICAgICAgaWYgKGNoID0gc3RyZWFtLmVhdCgvXHt8JXwjLykpIHsKICAgICAgICAgICAgICAgIHN0cmVhbS5lYXQoIi0iKTsKICAgICAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gaW5UYWcoY2gpOwogICAgICAgICAgICAgICAgcmV0dXJuICJ0YWciOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gaW5UYWcgKGNsb3NlKSB7CiAgICAgICAgaWYgKGNsb3NlID09ICJ7IikgewogICAgICAgICAgICBjbG9zZSA9ICJ9IjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7CiAgICAgICAgICAgIGlmICgoY2ggPT0gY2xvc2UgfHwgKGNoID09ICItIiAmJiBzdHJlYW0uZWF0KGNsb3NlKSkpCiAgICAgICAgICAgICAgICAmJiBzdHJlYW0uZWF0KCJ9IikpIHsKICAgICAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlOwogICAgICAgICAgICAgICAgcmV0dXJuICJ0YWciOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzdHJlYW0ubWF0Y2goa2V5d29yZHMpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gImtleXdvcmQiOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBjbG9zZSA9PSAiIyIgPyAiY29tbWVudCIgOiAic3RyaW5nIjsKICAgICAgICB9OwogICAgfQogICAgcmV0dXJuIHsKICAgICAgICBzdGFydFN0YXRlOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHJldHVybiB7dG9rZW5pemU6IHRva2VuQmFzZX07CiAgICAgICAgfSwKICAgICAgICB0b2tlbjogZnVuY3Rpb24gKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwogICAgICAgIH0KICAgIH07IAp9KTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/less/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/less/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KICA8aGVhZD4KICAgIDx0aXRsZT5Db2RlTWlycm9yOiBMRVNTIG1vZGU8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJsZXNzLmpzIj48L3NjcmlwdD4KICAgIDxzdHlsZT4uQ29kZU1pcnJvciB7YmFja2dyb3VuZDogI2Y4ZjhmODsgYm9yZGVyOiAxcHggc29saWQgI2RkZDt9PC9zdHlsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBMRVNTIG1vZGU8L2gxPgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KLyogU29tZSBMRVNTIGNvZGUgKi8KCkBjb2xvcjogIzREOTI2RjsKCiNoZWFkZXIgewogIGNvbG9yOiBAY29sb3I7CiAgY29sb3I6ICMwMDAwMDA7Cn0KaDIgewogIGNvbG9yOiBAY29sb3I7Cn0KCi5yb3VuZGVkLWNvcm5lcnMgKEByYWRpdXM6IDVweCkgewogIGJvcmRlci1yYWRpdXM6IEByYWRpdXM7CiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiBAcmFkaXVzOwogIC1tb3otYm9yZGVyLXJhZGl1czogQHJhZGl1czsKfQoKI2hlYWRlciB7CiAgLnJvdW5kZWQtY29ybmVyczsKfQojZm9vdGVyIHsKICAucm91bmRlZC1jb3JuZXJzKDEwcHgpOwp9CgouYm94LXNoYWRvdyAoQHg6IDAsIEB5OiAwLCBAYmx1cjogMXB4LCBAYWxwaGEpIHsKICBAdmFsOiBAeCBAeSBAYmx1ciByZ2JhKDAsIDAsIDAsIEBhbHBoYSk7CgogIGJveC1zaGFkb3c6ICAgICAgICAgQHZhbDsKICAtd2Via2l0LWJveC1zaGFkb3c6IEB2YWw7CiAgLW1vei1ib3gtc2hhZG93OiAgICBAdmFsOwp9Ci5ib3ggeyBAYmFzZTogI2Y5MzhhYjsKICBjb2xvcjogICAgICAgIHNhdHVyYXRlKEBiYXNlLCA1JSk7CiAgYm9yZGVyLWNvbG9yOiBsaWdodGVuKEBiYXNlLCAzMCUpOwogIGRpdiB7IC5ib3gtc2hhZG93KDAsIDAsIDVweCwgMC40KSB9Cn0KCkBpbXBvcnQgdXJsKCJzb21ldGhpbmcuY3NzIik7CgpAbGlnaHQtYmx1ZTogICBoc2woMTkwLCA1MCUsIDY1JSk7CkBsaWdodC15ZWxsb3c6IGRlc2F0dXJhdGUoI2ZlZmVjOCwgMTAlKTsKQGRhcmsteWVsbG93OiAgZGVzYXR1cmF0ZShkYXJrZW4oQGxpZ2h0LXllbGxvdywgMTAlKSwgNDAlKTsKQGRhcmtlc3Q6ICAgICAgaHNsKDIwLCAwJSwgMTUlKTsKQGRhcms6ICAgICAgICAgaHNsKDE5MCwgMjAlLCAzMCUpOwpAbWVkaXVtOiAgICAgICBoc2woMTAsIDYwJSwgMzAlKTsKQGxpZ2h0OiAgICAgICAgaHNsKDkwLCA0MCUsIDIwJSk7CkBsaWdodGVzdDogICAgIGhzbCg5MCwgMjAlLCA5MCUpOwpAaGlnaGxpZ2h0OiAgICBoc2woODAsIDUwJSwgOTAlKTsKQGJsdWU6ICAgICAgICAgaHNsKDIxMCwgNjAlLCAyMCUpOwpAYWxwaGEtYmx1ZTogICBoc2xhKDIxMCwgNjAlLCA0MCUsIDAuNSk7CgouYm94LXNoYWRvdyAoQHgsIEB5LCBAYmx1ciwgQGFscGhhKSB7CiAgQHZhbHVlOiBAeCBAeSBAYmx1ciByZ2JhKDAsIDAsIDAsIEBhbHBoYSk7CiAgYm94LXNoYWRvdzogICAgICAgICBAdmFsdWU7CiAgLW1vei1ib3gtc2hhZG93OiAgICBAdmFsdWU7CiAgLXdlYmtpdC1ib3gtc2hhZG93OiBAdmFsdWU7Cn0KLmJvcmRlci1yYWRpdXMgKEByYWRpdXMpIHsKICBib3JkZXItcmFkaXVzOiBAcmFkaXVzOwogIC1tb3otYm9yZGVyLXJhZGl1czogQHJhZGl1czsKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IEByYWRpdXM7Cn0KCi5ib3JkZXItcmFkaXVzIChAcmFkaXVzLCBib3R0b20pIHsKICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDsKICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwOwogIC1tb3otYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7CiAgLW1vei1ib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwOwogIC13ZWJraXQtYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDsKICAtd2Via2l0LWJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwOwp9Ci5ib3JkZXItcmFkaXVzIChAcmFkaXVzLCByaWdodCkgewogIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7CiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDsKICAtbW96LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7CiAgLW1vei1ib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwOwogIC13ZWJraXQtYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDsKICAtd2Via2l0LWJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7Cn0KLmJveC1zaGFkb3ctaW5zZXQgKEB4LCBAeSwgQGJsdXIsIEBjb2xvcikgewogIGJveC1zaGFkb3c6IEB4IEB5IEBibHVyIEBjb2xvciBpbnNldDsKICAtbW96LWJveC1zaGFkb3c6IEB4IEB5IEBibHVyIEBjb2xvciBpbnNldDsKICAtd2Via2l0LWJveC1zaGFkb3c6IEB4IEB5IEBibHVyIEBjb2xvciBpbnNldDsKfQouY29kZSAoKSB7CiAgZm9udC1mYW1pbHk6ICdCaXRzdHJlYW0gVmVyYSBTYW5zIE1vbm8nLAogICAgICAgICAgICAgICAnRGVqYVZ1IFNhbnMgTW9ubycsCiAgICAgICAgICAgICAgICdNb25hY28nLAogICAgICAgICAgICAgICBDb3VyaWVyLAogICAgICAgICAgICAgICBtb25vc3BhY2UgIWltcG9ydGFudDsKfQoud3JhcCAoKSB7CiAgdGV4dC13cmFwOiB3cmFwOwogIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsgICAgICAgLyogY3NzLTMgKi8KICB3aGl0ZS1zcGFjZTogLW1vei1wcmUtd3JhcDsgIC8qIE1vemlsbGEsIHNpbmNlIDE5OTkgKi8KICB3aGl0ZS1zcGFjZTogLXByZS13cmFwOyAgICAgIC8qIE9wZXJhIDQtNiAqLwogIHdoaXRlLXNwYWNlOiAtby1wcmUtd3JhcDsgICAgLyogT3BlcmEgNyAqLwogIHdvcmQtd3JhcDogYnJlYWstd29yZDsgICAgICAgLyogSW50ZXJuZXQgRXhwbG9yZXIgNS41KyAqLwp9CgpodG1sIHsgbWFyZ2luOiAwIH0KYm9keSB7CiAgYmFja2dyb3VuZC1jb2xvcjogQGRhcmtlc3Q7CiAgbWFyZ2luOiAwIGF1dG87CiAgZm9udC1mYW1pbHk6IEFyaWFsLCBzYW5zLXNlcmlmOwogIGZvbnQtc2l6ZTogMTAwJTsKICBvdmVyZmxvdy14OiBoaWRkZW47Cn0KbmF2LCBoZWFkZXIsIGZvb3Rlciwgc2VjdGlvbiwgYXJ0aWNsZSB7CiAgZGlzcGxheTogYmxvY2s7Cn0KYSB7CiAgY29sb3I6ICNiODMwMDA7Cn0KaDEgYSB7CiAgY29sb3I6IGJsYWNrOwogIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKfQphOmhvdmVyIHsKICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKfQpoMSwgaDIsIGgzLCBoNCB7CiAgbWFyZ2luOiAwOwogIGZvbnQtd2VpZ2h0OiBub3JtYWw7Cn0KdWwsIGxpIHsKICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7Cn0KY29kZSB7IC5jb2RlOyB9CmNvZGUgewogIC5zdHJpbmcsIC5yZWdleHAgeyBjb2xvcjogQGRhcmsgfQogIC5rZXl3b3JkIHsgZm9udC13ZWlnaHQ6IGJvbGQgfQogIC5jb21tZW50IHsgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KSB9CiAgLm51bWJlciB7IGNvbG9yOiBAYmx1ZSB9CiAgLmNsYXNzLCAuc3BlY2lhbCB7IGNvbG9yOiByZ2JhKDAsIDUwLCAxMDAsIDAuOCkgfQp9CnByZSB7CiAgcGFkZGluZzogMCAzMHB4OwogIC53cmFwOwp9CmJsb2NrcXVvdGUgewogIGZvbnQtc3R5bGU6IGl0YWxpYzsKfQpib2R5ID4gZm9vdGVyIHsKICB0ZXh0LWFsaWduOiBsZWZ0OwogIG1hcmdpbi1sZWZ0OiAxMHB4OwoJZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtc2l6ZTogMThweDsKICBjb2xvcjogIzg4ODsKfQoKI2xvZ28gewogIG1hcmdpbi10b3A6IDMwcHg7CiAgbWFyZ2luLWJvdHRvbTogMzBweDsKICBkaXNwbGF5OiBibG9jazsKICB3aWR0aDogMTk5cHg7CiAgaGVpZ2h0OiA4MXB4OwogIGJhY2tncm91bmQ6IHVybCgvaW1hZ2VzL2xvZ28ucG5nKSBuby1yZXBlYXQ7Cn0KbmF2IHsKICBtYXJnaW4tbGVmdDogMTVweDsKfQpuYXYgYSwgI2Ryb3Bkb3duIGxpIHsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgY29sb3I6IHdoaXRlOwogIGxpbmUtaGVpZ2h0OiA0MnB4OwogIG1hcmdpbjogMDsKICBwYWRkaW5nOiAwcHggMTVweDsKICB0ZXh0LXNoYWRvdzogLTFweCAtMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuNSk7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogIGJvcmRlcjogMnB4IHNvbGlkIHRyYW5zcGFyZW50OwogIGJvcmRlci13aWR0aDogMCAycHg7CiAgJjpob3ZlciB7CiAgICAuZGFyay1yZWQ7IAogICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogIH0KfQouZGFyay1yZWQgewogICAgQHJlZDogQG1lZGl1bTsKICAgIGJvcmRlcjogMnB4IHNvbGlkIGRhcmtlbihAcmVkLCAyNSUpOwogICAgYm9yZGVyLWxlZnQtY29sb3I6IGRhcmtlbihAcmVkLCAxNSUpOwogICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiBkYXJrZW4oQHJlZCwgMTUlKTsKICAgIGJvcmRlci1ib3R0b206IDA7CiAgICBib3JkZXItdG9wOiAwOwogICAgYmFja2dyb3VuZC1jb2xvcjogZGFya2VuKEByZWQsIDEwJSk7Cn0KCi5jb250ZW50IHsKICBtYXJnaW46IDAgYXV0bzsKICB3aWR0aDogOTgwcHg7Cn0KCiNtZW51IHsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgd2lkdGg6IDEwMCU7CiAgei1pbmRleDogMzsKICBjbGVhcjogYm90aDsKICBkaXNwbGF5OiBibG9jazsKICBiYWNrZ3JvdW5kLWNvbG9yOiBAYmx1ZTsKICBoZWlnaHQ6IDQycHg7CiAgYm9yZGVyLXRvcDogMnB4IHNvbGlkIGxpZ2h0ZW4oQGFscGhhLWJsdWUsIDIwJSk7CiAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIGRhcmtlbihAYWxwaGEtYmx1ZSwgMjUlKTsKICAuYm94LXNoYWRvdygwLCAxcHgsIDhweCwgMC42KTsKICAtbW96LWJveC1zaGFkb3c6IDAgMCAwICMwMDA7IC8vIEJlY2F1c2UgZmlyZWZveCBzdWNrcy4KCiAgJi5kb2NrZWQgewogICAgYmFja2dyb3VuZC1jb2xvcjogaHNsYSgyMTAsIDYwJSwgNDAlLCAwLjQpOwogIH0KICAmOmhvdmVyIHsKICAgIGJhY2tncm91bmQtY29sb3I6IEBibHVlOwogIH0KCiAgI2Ryb3Bkb3duIHsKICAgIG1hcmdpbjogMCAwIDAgMTE3cHg7CiAgICBwYWRkaW5nOiAwOwogICAgcGFkZGluZy10b3A6IDVweDsKICAgIGRpc3BsYXk6IG5vbmU7CiAgICB3aWR0aDogMTkwcHg7CiAgICBib3JkZXItdG9wOiAycHggc29saWQgQG1lZGl1bTsKICAgIGNvbG9yOiBAaGlnaGxpZ2h0OwogICAgYm9yZGVyOiAycHggc29saWQgZGFya2VuKEBtZWRpdW0sIDI1JSk7CiAgICBib3JkZXItbGVmdC1jb2xvcjogZGFya2VuKEBtZWRpdW0sIDE1JSk7CiAgICBib3JkZXItcmlnaHQtY29sb3I6IGRhcmtlbihAbWVkaXVtLCAxNSUpOwogICAgYm9yZGVyLXRvcC13aWR0aDogMDsKICAgIGJhY2tncm91bmQtY29sb3I6IGRhcmtlbihAbWVkaXVtLCAxMCUpOwogICAgdWwgewogICAgICBwYWRkaW5nOiAwcHg7ICAKICAgIH0KICAgIGxpIHsKICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgICAgcGFkZGluZzogMDsKICAgICAgYm9yZGVyOiAwOwogICAgICBhIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwYWRkaW5nOiAwcHggMTVweDsgIAogICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgICAgICBjb2xvcjogd2hpdGU7ICAKICAgICAgICAmOmhvdmVyIHsKICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGRhcmtlbihAbWVkaXVtLCAxNSUpOwogICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgLmJvcmRlci1yYWRpdXMoNXB4LCBib3R0b20pOwogICAgLmJveC1zaGFkb3coMCwgNnB4LCA4cHgsIDAuNSk7CiAgfQp9CgojbWFpbiB7CiAgbWFyZ2luOiAwIGF1dG87CiAgd2lkdGg6IDEwMCU7CiAgYmFja2dyb3VuZC1jb2xvcjogQGxpZ2h0LWJsdWU7CiAgYm9yZGVyLXRvcDogOHB4IHNvbGlkIGRhcmtlbihAbGlnaHQtYmx1ZSwgNSUpOwoKICAjaW50cm8gewogICAgYmFja2dyb3VuZC1jb2xvcjogbGlnaHRlbihAbGlnaHQtYmx1ZSwgMjUlKTsKICAgIGZsb2F0OiBsZWZ0OwogICAgbWFyZ2luLXRvcDogLThweDsKICAgIG1hcmdpbi1yaWdodDogNXB4OwoKICAgIGhlaWdodDogMzgwcHg7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB6LWluZGV4OiAyOwogICAgZm9udC1mYW1pbHk6ICdEcm9pZCBTZXJpZicsICdHZW9yZ2lhJzsKICAgIHdpZHRoOiAzOTVweDsKICAgIHBhZGRpbmc6IDQ1cHggMjBweCAyM3B4IDMwcHg7CiAgICBib3JkZXI6IDJweCBkYXNoZWQgZGFya2VuKEBsaWdodC1ibHVlLCAxMCUpOwogICAgLmJveC1zaGFkb3coMXB4LCAwcHgsIDZweCwgMC41KTsKICAgIGJvcmRlci1ib3R0b206IDA7CiAgICBib3JkZXItdG9wOiAwOwogICAgI2Rvd25sb2FkIHsgY29sb3I6IHRyYW5zcGFyZW50OyBib3JkZXI6IDA7IGZsb2F0OiBsZWZ0OyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IG1hcmdpbjogMTVweCAwIDE1cHggLTVweDsgfQogICAgI2Rvd25sb2FkIGltZyB7IGRpc3BsYXk6IGlubGluZS1ibG9ja30KICAgICNkb3dubG9hZC1pbmZvIHsKICAgICAgY29kZSB7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OyAgCiAgICAgIH0KICAgICAgY29sb3I6IEBibHVlICsgIzMzMzsgZGlzcGxheTogaW5saW5lOyBmbG9hdDogbGVmdDsgbWFyZ2luOiAzNnB4IDAgMCAxNXB4IH0KICB9CiAgaDIgewogICAgc3BhbiB7CiAgICAgIGNvbG9yOiBAbWVkaXVtOyAgCiAgICB9CiAgICBjb2xvcjogQGJsdWU7CiAgICBtYXJnaW46IDIwcHggMDsKICAgIGZvbnQtc2l6ZTogMjRweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjJlbTsKICB9CiAgaDMgewogICAgY29sb3I6IEBibHVlOwogICAgbGluZS1oZWlnaHQ6IDEuNGVtOwogICAgbWFyZ2luOiAzMHB4IDAgMTVweCAwOwogICAgZm9udC1zaXplOiAxZW07CiAgICB0ZXh0LXNoYWRvdzogMHB4IDBweCAwcHggQGxpZ2h0ZXN0OwogICAgc3BhbiB7IGNvbG9yOiBAbWVkaXVtIH0KICB9CiAgI2V4YW1wbGUgewogICAgcCB7CiAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgY29sb3I6IEBibHVlOwogICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgdGV4dC1zaGFkb3c6IDBweCAxcHggMXB4IEBsaWdodGVzdDsKICAgIH0KICAgIHByZSB7CiAgICAgIG1hcmdpbjogMDsKICAgICAgdGV4dC1zaGFkb3c6IDAgLTFweCAxcHggQGRhcmtlc3Q7CiAgICAgIG1hcmdpbi10b3A6IDIwcHg7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IGRlc2F0dXJhdGUoQGRhcmtlc3QsIDglKTsKICAgICAgYm9yZGVyOiAwOwogICAgICB3aWR0aDogNDUwcHg7CiAgICAgIGNvbG9yOiBsaWdodGVuKEBsaWdodGVzdCwgMiUpOwogICAgICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0OwogICAgICBwYWRkaW5nOiAxNXB4OwogICAgICBib3JkZXI6IDFweCBkYXNoZWQgQGxpZ2h0ZXN0OwogICAgICBsaW5lLWhlaWdodDogMTVweDsKICAgICAgLmJveC1zaGFkb3coMCwgMHB4LCAxNXB4LCAwLjUpOwogICAgICAuY29kZTsKICAgICAgLmJvcmRlci1yYWRpdXMoMnB4KTsKICAgICAgY29kZSAuYXR0cmlidXRlIHsgY29sb3I6IGhzbCg0MCwgNTAlLCA3MCUpIH0KICAgICAgY29kZSAudmFyaWFibGUgIHsgY29sb3I6IGhzbCgxMjAsIDEwJSwgNTAlKSB9CiAgICAgIGNvZGUgLmVsZW1lbnQgICB7IGNvbG9yOiBoc2woMTcwLCAyMCUsIDUwJSkgfQoKICAgICAgY29kZSAuc3RyaW5nLCAucmVnZXhwIHsgY29sb3I6IGhzbCg3NSwgNTAlLCA2NSUpIH0KICAgICAgY29kZSAuY2xhc3MgeyBjb2xvcjogaHNsKDQwLCA0MCUsIDYwJSk7IGZvbnQtd2VpZ2h0OiBub3JtYWwgfQogICAgICBjb2RlIC5pZCB7IGNvbG9yOiBoc2woNTAsIDQwJSwgNjAlKTsgZm9udC13ZWlnaHQ6IG5vcm1hbCB9CiAgICAgIGNvZGUgLmNvbW1lbnQgeyBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpIH0KICAgICAgY29kZSAubnVtYmVyLCAuY29sb3IgeyBjb2xvcjogaHNsKDEwLCA0MCUsIDUwJSkgfQogICAgICBjb2RlIC5jbGFzcywgY29kZSAubWl4aW4sIC5zcGVjaWFsIHsgY29sb3I6IGhzbCgxOTAsIDIwJSwgNTAlKSB9CiAgICAgICN0aW1lIHsgY29sb3I6ICNhYWEgfQogICAgfQogICAgZmxvYXQ6IHJpZ2h0OwogICAgZm9udC1zaXplOiAxMnB4OwogICAgbWFyZ2luOiAwOwogICAgbWFyZ2luLXRvcDogMTVweDsKICAgIHBhZGRpbmc6IDA7CiAgICB3aWR0aDogNTAwcHg7CiAgfQp9CgoKLnBhZ2UgewogIC5jb250ZW50IHsKICAgIHdpZHRoOiA4NzBweDsKICAgIHBhZGRpbmc6IDQ1cHg7CiAgfQogIG1hcmdpbjogMCBhdXRvOwogIGZvbnQtZmFtaWx5OiAnR2VvcmdpYScsIHNlcmlmOwogIGZvbnQtc2l6ZTogMThweDsKICBsaW5lLWhlaWdodDogMjZweDsKICBwYWRkaW5nOiAwIDYwcHg7CiAgY29kZSB7CiAgICBmb250LXNpemU6IDE2cHg7ICAKICB9CiAgcHJlIHsKICAgIGJvcmRlci13aWR0aDogMXB4OwogICAgYm9yZGVyLXN0eWxlOiBkYXNoZWQ7CiAgICBwYWRkaW5nOiAxNXB4OwogICAgbWFyZ2luOiAxNXB4IDA7CiAgfQogIGgxIHsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBmb250LXNpemU6IDQwcHg7CiAgICBtYXJnaW4tdG9wOiAxNXB4OwogICAgbWFyZ2luLWJvdHRvbTogMzVweDsKICB9CiAgcCArIGgxIHsgbWFyZ2luLXRvcDogNjBweCB9CiAgaDIsIGgzIHsKICAgIG1hcmdpbjogMzBweCAwIDE1cHggMDsKICB9CiAgcCArIGgyLCBwcmUgKyBoMiwgY29kZSArIGgyIHsKICAgIGJvcmRlci10b3A6IDZweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7CiAgICBwYWRkaW5nLXRvcDogMzBweDsKICB9CiAgaDMgewogICAgbWFyZ2luOiAxNXB4IDA7CiAgfQp9CgoKI2RvY3MgewogIEBiZzogbGlnaHRlbihAbGlnaHQtYmx1ZSwgNSUpOwogIGJvcmRlci10b3A6IDJweCBzb2xpZCBsaWdodGVuKEBiZywgNSUpOwogIGNvbG9yOiBAYmx1ZTsKICBiYWNrZ3JvdW5kLWNvbG9yOiBAbGlnaHQtYmx1ZTsKICAuYm94LXNoYWRvdygwLCAtMnB4LCA1cHgsIDAuMik7CgogIGgxIHsKICAgIGZvbnQtZmFtaWx5OiAnRHJvaWQgU2VyaWYnLCAnR2VvcmdpYScsIHNlcmlmOwogICAgcGFkZGluZy10b3A6IDMwcHg7CiAgICBwYWRkaW5nLWxlZnQ6IDQ1cHg7CiAgICBmb250LXNpemU6IDQ0cHg7CiAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgbWFyZ2luOiAzMHB4IDAgIWltcG9ydGFudDsKICAgIHRleHQtc2hhZG93OiAwcHggMXB4IDFweCBAbGlnaHRlc3Q7CiAgICBmb250LXdlaWdodDogYm9sZDsKICB9CiAgLmNvbnRlbnQgewogICAgY2xlYXI6IGJvdGg7CiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50OwogICAgYmFja2dyb3VuZC1jb2xvcjogbGlnaHRlbihAbGlnaHQtYmx1ZSwgMjUlKTsKICAgIC5ib3gtc2hhZG93KDAsIDVweCwgNXB4LCAwLjQpOwogIH0KICBwcmUgewogICAgQGJhY2tncm91bmQ6IGxpZ2h0ZW4oQGJnLCAzMCUpOwogICAgY29sb3I6IGxpZ2h0ZW4oQGJsdWUsIDEwJSk7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAYmFja2dyb3VuZDsKICAgIGJvcmRlci1jb2xvcjogbGlnaHRlbihAbGlnaHQtYmx1ZSwgMjUlKTsKICAgIGJvcmRlci13aWR0aDogMnB4OwogICAgY29kZSAuYXR0cmlidXRlIHsgY29sb3I6IGhzbCg0MCwgNTAlLCAzMCUpIH0KICAgIGNvZGUgLnZhcmlhYmxlICB7IGNvbG9yOiBoc2woMTIwLCAxMCUsIDMwJSkgfQogICAgY29kZSAuZWxlbWVudCAgIHsgY29sb3I6IGhzbCgxNzAsIDIwJSwgMzAlKSB9CgogICAgY29kZSAuc3RyaW5nLCAucmVnZXhwIHsgY29sb3I6IGhzbCg3NSwgNTAlLCAzNSUpIH0KICAgIGNvZGUgLmNsYXNzIHsgY29sb3I6IGhzbCg0MCwgNDAlLCAzMCUpOyBmb250LXdlaWdodDogbm9ybWFsIH0KICAgIGNvZGUgLmlkIHsgY29sb3I6IGhzbCg1MCwgNDAlLCAzMCUpOyBmb250LXdlaWdodDogbm9ybWFsIH0KICAgIGNvZGUgLmNvbW1lbnQgeyBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjQpIH0KICAgIGNvZGUgLm51bWJlciwgLmNvbG9yIHsgY29sb3I6IGhzbCgxMCwgNDAlLCAzMCUpIH0KICAgIGNvZGUgLmNsYXNzLCBjb2RlIC5taXhpbiwgLnNwZWNpYWwgeyBjb2xvcjogaHNsKDE5MCwgMjAlLCAzMCUpIH0KICB9CiAgcHJlIGNvZGUgICAgICAgICAgICAgICAgICAgIHsgZm9udC1zaXplOiAxNXB4ICB9CiAgcCArIGgyLCBwcmUgKyBoMiwgY29kZSArIGgyIHsgYm9yZGVyLXRvcC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjEpIH0KfQoKdGQgewogIHBhZGRpbmctcmlnaHQ6IDMwcHg7ICAKfQojc3lub3BzaXMgewogIC5ib3gtc2hhZG93KDAsIDVweCwgNXB4LCAwLjIpOwp9CiNzeW5vcHNpcywgI2Fib3V0IHsKICBoMiB7CiAgICBmb250LXNpemU6IDMwcHg7ICAKICAgIHBhZGRpbmc6IDEwcHggMDsKICB9CiAgaDEgKyBoMiB7CiAgICAgIG1hcmdpbi10b3A6IDE1cHg7ICAKICB9CiAgaDMgeyBmb250LXNpemU6IDIycHggfQoKICAuY29kZS1leGFtcGxlIHsKICAgIGJvcmRlci1zcGFjaW5nOiAwOwogICAgYm9yZGVyLXdpZHRoOiAxcHg7CiAgICBib3JkZXItc3R5bGU6IGRhc2hlZDsKICAgIHBhZGRpbmc6IDA7CiAgICBwcmUgeyBib3JkZXI6IDA7IG1hcmdpbjogMCB9CiAgICB0ZCB7CiAgICAgIGJvcmRlcjogMDsKICAgICAgbWFyZ2luOiAwOwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBkZXNhdHVyYXRlKGRhcmtlbihAZGFya2VzdCwgNSUpLCAyMCUpOwogICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogICAgICBwYWRkaW5nOiAwOwogICAgfQogICAgdHIgeyBwYWRkaW5nOiAwIH0KICB9CiAgLmNzcy1vdXRwdXQgewogICAgdGQgewogICAgICBib3JkZXItbGVmdDogMDsgIAogICAgfQogIH0KICAubGVzcy1leGFtcGxlIHsKICAgIC8vYm9yZGVyLXJpZ2h0OiAxcHggZG90dGVkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KSAhaW1wb3J0YW50OwogIH0KICAuY3NzLW91dHB1dCwgLmxlc3MtZXhhbXBsZSB7CiAgICB3aWR0aDogMzkwcHg7CiAgfQogIHByZSB7CiAgICBwYWRkaW5nOiAyMHB4OwogICAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgICBmb250LXNpemU6IDE0cHg7CiAgfQp9CiNhYm91dCwgI3N5bm9wc2lzLCAjZ3VpZGUgewogIGEgewogICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogICAgY29sb3I6IEBsaWdodC15ZWxsb3c7CiAgICBib3JkZXItYm90dG9tOiAxcHggZGFzaGVkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKICAgICY6aG92ZXIgewogICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICAgIGJvcmRlci1ib3R0b206IDFweCBkYXNoZWQgQGxpZ2h0LXllbGxvdzsKICAgIH0KICB9CiAgQGJnOiBkZXNhdHVyYXRlKGRhcmtlbihAZGFya2VzdCwgNSUpLCAyMCUpOwogIHRleHQtc2hhZG93OiAwIC0xcHggMXB4IGxpZ2h0ZW4oQGJnLCA1JSk7CiAgY29sb3I6IEBoaWdobGlnaHQ7CiAgYmFja2dyb3VuZC1jb2xvcjogQGJnOwogIC5jb250ZW50IHsKICAgIGJhY2tncm91bmQtY29sb3I6IGRlc2F0dXJhdGUoQGRhcmtlc3QsIDIwJSk7CiAgICBjbGVhcjogYm90aDsKICAgIC5ib3gtc2hhZG93KDAsIDVweCwgNXB4LCAwLjQpOwogIH0KICBoMSwgaDIsIGgzIHsKICAgIGNvbG9yOiBAZGFyay15ZWxsb3c7CiAgfQogIHByZSB7CiAgICAgIGNvZGUgLmF0dHJpYnV0ZSB7IGNvbG9yOiBoc2woNDAsIDUwJSwgNzAlKSB9CiAgICAgIGNvZGUgLnZhcmlhYmxlICB7IGNvbG9yOiBoc2woMTIwLCAxMCUsIDUwJSkgfQogICAgICBjb2RlIC5lbGVtZW50ICAgeyBjb2xvcjogaHNsKDE3MCwgMjAlLCA1MCUpIH0KCiAgICAgIGNvZGUgLnN0cmluZywgLnJlZ2V4cCB7IGNvbG9yOiBoc2woNzUsIDUwJSwgNjUlKSB9CiAgICAgIGNvZGUgLmNsYXNzIHsgY29sb3I6IGhzbCg0MCwgNDAlLCA2MCUpOyBmb250LXdlaWdodDogbm9ybWFsIH0KICAgICAgY29kZSAuaWQgeyBjb2xvcjogaHNsKDUwLCA0MCUsIDYwJSk7IGZvbnQtd2VpZ2h0OiBub3JtYWwgfQogICAgICBjb2RlIC5jb21tZW50IHsgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSB9CiAgICAgIGNvZGUgLm51bWJlciwgLmNvbG9yIHsgY29sb3I6IGhzbCgxMCwgNDAlLCA1MCUpIH0KICAgICAgY29kZSAuY2xhc3MsIGNvZGUgLm1peGluLCAuc3BlY2lhbCB7IGNvbG9yOiBoc2woMTkwLCAyMCUsIDUwJSkgfQogICAgYmFja2dyb3VuZC1jb2xvcjogQGJnOwogICAgYm9yZGVyLWNvbG9yOiBkYXJrZW4oQGxpZ2h0LXllbGxvdywgNSUpOwogIH0KICBjb2RlIHsKICAgIGNvbG9yOiBkYXJrZW4oQGRhcmsteWVsbG93LCA1JSk7CiAgICAuc3RyaW5nLCAucmVnZXhwIHsgY29sb3I6IGRlc2F0dXJhdGUoQGxpZ2h0LWJsdWUsIDE1JSkgfQogICAgLmtleXdvcmQgeyBjb2xvcjogaHNsKDQwLCA0MCUsIDYwJSk7IGZvbnQtd2VpZ2h0OiBub3JtYWwgfQogICAgLmNvbW1lbnQgeyBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpIH0KICAgIC5udW1iZXIgeyBjb2xvcjogbGlnaHRlbihAYmx1ZSwgMTAlKSB9CiAgICAuY2xhc3MsIC5zcGVjaWFsIHsgY29sb3I6IGhzbCgxOTAsIDIwJSwgNTAlKSB9CiAgfQp9CiNndWlkZSB7CiAgYmFja2dyb3VuZC1jb2xvcjogQGRhcmtlc3Q7CiAgLmNvbnRlbnQgewogICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgfQoKfQoKI2Fib3V0IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiBAZGFya2VzdCAhaW1wb3J0YW50OwogIC5jb250ZW50IHsKICAgIGJhY2tncm91bmQtY29sb3I6IGRlc2F0dXJhdGUobGlnaHRlbihAZGFya2VzdCwgMyUpLCA1JSk7CiAgfQp9CiNzeW5vcHNpcyB7CiAgYmFja2dyb3VuZC1jb2xvcjogZGVzYXR1cmF0ZShsaWdodGVuKEBkYXJrZXN0LCAzJSksIDUlKSAhaW1wb3J0YW50OwogIC5jb250ZW50IHsKICAgIGJhY2tncm91bmQtY29sb3I6IGRlc2F0dXJhdGUobGlnaHRlbihAZGFya2VzdCwgMyUpLCA1JSk7CiAgfQogIHByZSB7fQp9CiNzeW5vcHNpcywgI2d1aWRlIHsKICAuY29udGVudCB7CiAgICAuYm94LXNoYWRvdygwLCAwcHgsIDBweCwgMC4wKTsKICB9Cn0KI2Fib3V0IGZvb3RlciB7CiAgbWFyZ2luLXRvcDogMzBweDsKICBwYWRkaW5nLXRvcDogMzBweDsKICBib3JkZXItdG9wOiA2cHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjEpOwogIHRleHQtYWxpZ246IGNlbnRlcjsKICBmb250LXNpemU6IDE2cHg7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zNSk7CiAgI2NvcHkgeyBmb250LXNpemU6IDEycHggfQogIHRleHQtc2hhZG93OiAtMXB4IC0xcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wMik7Cn0KPC90ZXh0YXJlYT48L2Zvcm0+CiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwge30pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQvbGVzczwvY29kZT4uPC9wPgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/less/less.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJsZXNzIiwgZnVuY3Rpb24oY29uZmlnKSB7CiAgdmFyIGluZGVudFVuaXQgPSBjb25maWcuaW5kZW50VW5pdCwgdHlwZTsKICBmdW5jdGlvbiByZXQoc3R5bGUsIHRwKSB7dHlwZSA9IHRwOyByZXR1cm4gc3R5bGU7fQogIC8vaHRtbDUgdGFncwogIHZhciB0YWdzID0gWyJhIiwiYWJiciIsImFjcm9ueW0iLCJhZGRyZXNzIiwiYXBwbGV0IiwiYXJlYSIsImFydGljbGUiLCJhc2lkZSIsImF1ZGlvIiwiYiIsImJhc2UiLCJiYXNlZm9udCIsImJkaSIsImJkbyIsImJpZyIsImJsb2NrcXVvdGUiLCJib2R5IiwiYnIiLCJidXR0b24iLCJjYW52YXMiLCJjYXB0aW9uIiwiY2l0ZSIsImNvZGUiLCJjb2wiLCJjb2xncm91cCIsImNvbW1hbmQiLCJkYXRhbGlzdCIsImRkIiwiZGVsIiwiZGV0YWlscyIsImRmbiIsImRpciIsImRpdiIsImRsIiwiZHQiLCJlbSIsImVtYmVkIiwiZmllbGRzZXQiLCJmaWdjYXB0aW9uIiwiZmlndXJlIiwiZm9udCIsImZvb3RlciIsImZvcm0iLCJmcmFtZSIsImZyYW1lc2V0IiwiaDEiLCJoMiIsImgzIiwiaDQiLCJoNSIsImg2IiwiaGVhZCIsImhlYWRlciIsImhncm91cCIsImhyIiwiaHRtbCIsImkiLCJpZnJhbWUiLCJpbWciLCJpbnB1dCIsImlucyIsImtleWdlbiIsImtiZCIsImxhYmVsIiwibGVnZW5kIiwibGkiLCJsaW5rIiwibWFwIiwibWFyayIsIm1lbnUiLCJtZXRhIiwibWV0ZXIiLCJuYXYiLCJub2ZyYW1lcyIsIm5vc2NyaXB0Iiwib2JqZWN0Iiwib2wiLCJvcHRncm91cCIsIm9wdGlvbiIsIm91dHB1dCIsInAiLCJwYXJhbSIsInByZSIsInByb2dyZXNzIiwicSIsInJwIiwicnQiLCJydWJ5IiwicyIsInNhbXAiLCJzY3JpcHQiLCJzZWN0aW9uIiwic2VsZWN0Iiwic21hbGwiLCJzb3VyY2UiLCJzcGFuIiwic3RyaWtlIiwic3Ryb25nIiwic3R5bGUiLCJzdWIiLCJzdW1tYXJ5Iiwic3VwIiwidGFibGUiLCJ0Ym9keSIsInRkIiwidGV4dGFyZWEiLCJ0Zm9vdCIsInRoIiwidGhlYWQiLCJ0aW1lIiwidGl0bGUiLCJ0ciIsInRyYWNrIiwidHQiLCJ1IiwidWwiLCJ2YXIiLCJ2aWRlbyIsIndiciJdOwogIAogIGZ1bmN0aW9uIGluVGFnc0FycmF5KHZhbCl7CiAgICBmb3IodmFyIGk9MDsgaTx0YWdzLmxlbmd0aDsgaSsrKXsKICAgICAgaWYodmFsID09PSB0YWdzW2ldKXsKCXJldHVybiB0cnVlOwogICAgICB9CiAgICB9CiAgfQoKICBmdW5jdGlvbiB0b2tlbkJhc2Uoc3RyZWFtLCBzdGF0ZSkgewogICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKCiAgICBpZiAoY2ggPT0gIkAiKSB7c3RyZWFtLmVhdFdoaWxlKC9bXHdcLV0vKTsgcmV0dXJuIHJldCgibWV0YSIsIHN0cmVhbS5jdXJyZW50KCkpO30KICAgIGVsc2UgaWYgKGNoID09ICIvIiAmJiBzdHJlYW0uZWF0KCIqIikpIHsKICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkNDb21tZW50OwogICAgICByZXR1cm4gdG9rZW5DQ29tbWVudChzdHJlYW0sIHN0YXRlKTsKICAgIH0KICAgIGVsc2UgaWYgKGNoID09ICI8IiAmJiBzdHJlYW0uZWF0KCIhIikpIHsKICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblNHTUxDb21tZW50OwogICAgICByZXR1cm4gdG9rZW5TR01MQ29tbWVudChzdHJlYW0sIHN0YXRlKTsKICAgIH0KICAgIGVsc2UgaWYgKGNoID09ICI9IikgcmV0KG51bGwsICJjb21wYXJlIik7CiAgICBlbHNlIGlmICgoY2ggPT0gIn4iIHx8IGNoID09ICJ8IikgJiYgc3RyZWFtLmVhdCgiPSIpKSByZXR1cm4gcmV0KG51bGwsICJjb21wYXJlIik7CiAgICBlbHNlIGlmIChjaCA9PSAiXCIiIHx8IGNoID09ICInIikgewogICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuU3RyaW5nKGNoKTsKICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwogICAgfQogICAgZWxzZSBpZiAoY2ggPT0gIi8iKSB7IC8vIGxlc3Njc3MgZS5nLjogLnBuZyB3aWxsIG5vdCBiZSBwYXJzZWQgYXMgYSBjbGFzcwogICAgICBpZihzdHJlYW0uZWF0KCIvIikpewoJc3RhdGUudG9rZW5pemUgPSB0b2tlblNDb21tZW50CiAgICAgIAlyZXR1cm4gdG9rZW5TQ29tbWVudChzdHJlYW0sIHN0YXRlKTsKICAgICAgfWVsc2V7CglzdHJlYW0uZWF0V2hpbGUoL1tcYS16QS1aMC05XC1fLl0vKTsKICAgICAgICByZXR1cm4gcmV0KCJudW1iZXIiLCAidW5pdCIpOwogICAgICB9CiAgICB9CiAgICBlbHNlIGlmIChjaCA9PSAiISIpIHsKICAgICAgc3RyZWFtLm1hdGNoKC9eXHMqXHcqLyk7CiAgICAgIHJldHVybiByZXQoImtleXdvcmQiLCAiaW1wb3J0YW50Iik7CiAgICB9CiAgICBlbHNlIGlmICgvXGQvLnRlc3QoY2gpKSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3LiVdLyk7CiAgICAgIHJldHVybiByZXQoIm51bWJlciIsICJ1bml0Iik7CiAgICB9CiAgICBlbHNlIGlmICgvWywrPipcL10vLnRlc3QoY2gpKSB7Ly9yZW1vdmVkIC4gZG90IGNoYXJhY3RlciBvcmlnaW5hbCB3YXMgWywuKz4qXC9dCiAgICAgIHJldHVybiByZXQobnVsbCwgInNlbGVjdC1vcCIpOwogICAgfQogICAgZWxzZSBpZiAoL1s7e306XFtcXSgpXS8udGVzdChjaCkpIHsgLy9hZGRlZCAoKSBjaGFyIGZvciBsZXNzY3NzIG9yaWdpbmFsIHdhcyBbO3t9OlxbXF1dCiAgICAgIGlmKGNoID09ICI6Iil7CglzdHJlYW0uZWF0V2hpbGUoL1thY3RpdmV8aG92ZXJ8bGlua3x2aXNpdGVkXS8pOwoJaWYoIHN0cmVhbS5jdXJyZW50KCkubWF0Y2goL1thY3RpdmV8aG92ZXJ8bGlua3x2aXNpdGVkXS8pKXsKCSAgcmV0dXJuIHJldCgidGFnIiwgInRhZyIpOwoJfWVsc2V7CgkgIHJldHVybiByZXQobnVsbCwgY2gpOwkKCX0KICAgICAgfWVsc2V7CiAgCXJldHVybiByZXQobnVsbCwgY2gpOwogICAgICB9CiAgICB9CiAgICBlbHNlIGlmIChjaCA9PSAiLiIpIHsgLy8gbGVzc2NzcwogICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcYS16QS1aMC05XC1fXS8pOwogICAgICByZXR1cm4gcmV0KCJ0YWciLCAidGFnIik7CiAgICB9CiAgICBlbHNlIGlmIChjaCA9PSAiIyIpIHsgLy8gbGVzc2NzcwogICAgICBzdHJlYW0ubWF0Y2goLyhbQS1GYS1mMC05XXs2fXxbQS1GYS1mMC05XXszfSkvKTsKICAgICAgaWYoc3RyZWFtLmN1cnJlbnQoKS5sZW5ndGggPjEpewoJaWYoc3RyZWFtLmN1cnJlbnQoKS5tYXRjaCgvKFtBLUZhLWYwLTldezZ9fFtBLUZhLWYwLTldezN9KS8pICE9IG51bGwpewoJICByZXR1cm4gcmV0KCJudW1iZXIiLCAidW5pdCIpOwoJfWVsc2V7CgkgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XC1dLyk7CgkgIHJldHVybiByZXQoImF0b20iLCAidGFnIik7IAoJfQogICAgICB9ZWxzZXsKCXN0cmVhbS5lYXRXaGlsZSgvW1x3XC1dLyk7CglyZXR1cm4gcmV0KCJhdG9tIiwgInRhZyIpOwogICAgICB9CiAgICB9CiAgICBlbHNlIGlmIChjaCA9PSAiJiIpIHsKICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcLV0vKTsKICAgICAgcmV0dXJuIHJldChudWxsLCBjaCk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcXFwtXy4le10vKTsKICAgICAgaWYoIHN0cmVhbS5lYXQoIigiKSApeyAvLyBsZXNzY3NzCglyZXR1cm4gcmV0KG51bGwsIGNoKTsKICAgICAgfWVsc2UgaWYoIHN0cmVhbS5jdXJyZW50KCkubWF0Y2goL1wtXGR8XC0uXGQvKSApeyAvLyBsZXNzY3NzIG1hdGNoIGUuZy46IC01cHggLTAuNCBldGMuLi4KCXJldHVybiByZXQoIm51bWJlciIsICJ1bml0Iik7CiAgICAgIH1lbHNlIGlmKCBpblRhZ3NBcnJheShzdHJlYW0uY3VycmVudCgpKSApeyAvLyBsZXNzY3NzIG1hdGNoIGh0bWwgdGFncwoJcmV0dXJuIHJldCgidGFnIiwgInRhZyIpOwogICAgICB9ZWxzZXsKICAgICAgCXJldHVybiByZXQoInZhcmlhYmxlIiwgInZhcmlhYmxlIik7CiAgICAgIH0KICAgIH0KICAgIAogIH0KCiAgZnVuY3Rpb24gdG9rZW5TQ29tbWVudChzdHJlYW0sIHN0YXRlKSB7Ly8gU0NvbW1lbnQgPSBTbGFzaCBjb21tZW50CiAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsKICAgIHJldHVybiByZXQoImNvbW1lbnQiLCAiY29tbWVudCIpOwogIH0KICAKICBmdW5jdGlvbiB0b2tlbkNDb21tZW50KHN0cmVhbSwgc3RhdGUpIHsKICAgIHZhciBtYXliZUVuZCA9IGZhbHNlLCBjaDsKICAgIHdoaWxlICgoY2ggPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgIGlmIChtYXliZUVuZCAmJiBjaCA9PSAiLyIpIHsKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBtYXliZUVuZCA9IChjaCA9PSAiKiIpOwogICAgfQogICAgcmV0dXJuIHJldCgiY29tbWVudCIsICJjb21tZW50Iik7CiAgfQoKICBmdW5jdGlvbiB0b2tlblNHTUxDb21tZW50KHN0cmVhbSwgc3RhdGUpIHsKICAgIHZhciBkYXNoZXMgPSAwLCBjaDsKICAgIHdoaWxlICgoY2ggPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgIGlmIChkYXNoZXMgPj0gMiAmJiBjaCA9PSAiPiIpIHsKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBkYXNoZXMgPSAoY2ggPT0gIi0iKSA/IGRhc2hlcyArIDEgOiAwOwogICAgfQogICAgcmV0dXJuIHJldCgiY29tbWVudCIsICJjb21tZW50Iik7CiAgfQoKICBmdW5jdGlvbiB0b2tlblN0cmluZyhxdW90ZSkgewogICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgY2g7CiAgICAgIHdoaWxlICgoY2ggPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgICAgaWYgKGNoID09IHF1b3RlICYmICFlc2NhcGVkKQogICAgICAgICAgYnJlYWs7CiAgICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkICYmIGNoID09ICJcXCI7CiAgICAgIH0KICAgICAgaWYgKCFlc2NhcGVkKSBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsKICAgICAgcmV0dXJuIHJldCgic3RyaW5nIiwgInN0cmluZyIpOwogICAgfTsKICB9CgogIHJldHVybiB7CiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbihiYXNlKSB7CiAgICAgIHJldHVybiB7dG9rZW5pemU6IHRva2VuQmFzZSwKICAgICAgICAgICAgICBiYXNlSW5kZW50OiBiYXNlIHx8IDAsCiAgICAgICAgICAgICAgc3RhY2s6IFtdfTsKICAgIH0sCgogICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDsKICAgICAgdmFyIHN0eWxlID0gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CgogICAgICB2YXIgY29udGV4dCA9IHN0YXRlLnN0YWNrW3N0YXRlLnN0YWNrLmxlbmd0aC0xXTsKICAgICAgaWYgKHR5cGUgPT0gImhhc2giICYmIGNvbnRleHQgPT0gInJ1bGUiKSBzdHlsZSA9ICJhdG9tIjsKICAgICAgZWxzZSBpZiAoc3R5bGUgPT0gInZhcmlhYmxlIikgewogICAgICAgIGlmIChjb250ZXh0ID09ICJydWxlIikgc3R5bGUgPSBudWxsOyAvLyJ0YWciCiAgICAgICAgZWxzZSBpZiAoIWNvbnRleHQgfHwgY29udGV4dCA9PSAiQG1lZGlheyIpIHN0eWxlID0gInRhZyI7CiAgICAgIH0KCiAgICAgIGlmIChjb250ZXh0ID09ICJydWxlIiAmJiAvXltce1x9O10kLy50ZXN0KHR5cGUpKQogICAgICAgIHN0YXRlLnN0YWNrLnBvcCgpOwogICAgICBpZiAodHlwZSA9PSAieyIpIHsKICAgICAgICBpZiAoY29udGV4dCA9PSAiQG1lZGlhIikgc3RhdGUuc3RhY2tbc3RhdGUuc3RhY2subGVuZ3RoLTFdID0gIkBtZWRpYXsiOwogICAgICAgIGVsc2Ugc3RhdGUuc3RhY2sucHVzaCgieyIpOwogICAgICB9CiAgICAgIGVsc2UgaWYgKHR5cGUgPT0gIn0iKSBzdGF0ZS5zdGFjay5wb3AoKTsKICAgICAgZWxzZSBpZiAodHlwZSA9PSAiQG1lZGlhIikgc3RhdGUuc3RhY2sucHVzaCgiQG1lZGlhIik7CiAgICAgIGVsc2UgaWYgKGNvbnRleHQgPT0gInsiICYmIHR5cGUgIT0gImNvbW1lbnQiKSBzdGF0ZS5zdGFjay5wdXNoKCJydWxlIik7CiAgICAgIHJldHVybiBzdHlsZTsKICAgIH0sCgogICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7CiAgICAgIHZhciBuID0gc3RhdGUuc3RhY2subGVuZ3RoOwogICAgICBpZiAoL15cfS8udGVzdCh0ZXh0QWZ0ZXIpKQogICAgICAgIG4gLT0gc3RhdGUuc3RhY2tbc3RhdGUuc3RhY2subGVuZ3RoLTFdID09ICJydWxlIiA/IDIgOiAxOwogICAgICByZXR1cm4gc3RhdGUuYmFzZUluZGVudCArIG4gKiBpbmRlbnRVbml0OwogICAgfSwKCiAgICBlbGVjdHJpY0NoYXJzOiAifSIKICB9Owp9KTsKCkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC9sZXNzIiwgImxlc3MiKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/lua/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/lua/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEx1YSBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0ibHVhLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vdGhlbWUvbmVhdC5jc3MiPgogICAgPHN0eWxlPi5Db2RlTWlycm9yIHtib3JkZXI6IDFweCBzb2xpZCBibGFjazt9PC9zdHlsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogTHVhIG1vZGU8L2gxPgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KLS1bWwpleGFtcGxlIHVzZWxlc3MgY29kZSB0byBzaG93IGx1YSBzeW50YXggaGlnaGxpZ2h0aW5nCnRoaXMgaXMgbXVsdGlsaW5lIGNvbW1lbnQKXV0KCmZ1bmN0aW9uIGJsYWhibGFoYmxhaCh4KQoKICBsb2NhbCB0YWJsZSA9IHsKICAgICJhc2QiID0gMTIzLAogICAgIngiID0gMC4zNCwgIAogIH0KICBpZiB4IH49IDMgdGhlbgogICAgcHJpbnQoIHggKQogIGVsc2VpZiB4ID09ICJzdHJpbmciCiAgICBteV9jdXN0b21fZnVuY3Rpb24oIDB4MzQgKQogIGVsc2UKICAgIHVua25vd25fZnVuY3Rpb24oICJzb21lIHN0cmluZyIgKQogIGVuZAoKICAtLXNpbmdsZSBsaW5lIGNvbW1lbnQKICAKZW5kCgpmdW5jdGlvbiBibGFibGFibGEzKCkKCiAgZm9yIGssdiBpbiBpcGFpcnMoIHRhYmxlICkgZG8KICAgIC0tYWJjZGUuLgogICAgeT1bPVsKICB4PVtbCiAgICAgIHggaXMgYSBtdWx0aSBsaW5lIHN0cmluZwogICBdXQogIGJ1dCBpdHMgZGVmaW5pdGlvbiBpcyBpc2lkZSBhIGhpZ2hlc3QgbGV2ZWwgc3RyaW5nIQogIF09XQogICAgcHJpbnQoIiBcIlwiICIpCgogICAgcyA9IG1hdGguc2luKCB4ICkKICBlbmQKCmVuZAo8L3RleHRhcmVhPjwvZm9ybT4KICAgIDxzY3JpcHQ+CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7CiAgICAgICAgdGFiTW9kZTogImluZGVudCIsCiAgICAgICAgbWF0Y2hCcmFja2V0czogdHJ1ZSwKICAgICAgICB0aGVtZTogIm5lYXQiCiAgICAgIH0pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+TG9vc2VseSBiYXNlZCBvbiBGcmFuY2lzemVrCiAgICBXYXdyemFrJ3MgPGEgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0LzEvY29udHJpYi9sdWEiPkNvZGVNaXJyb3IKICAgIDEgbW9kZTwvYT4uIE9uZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlciBpcwogICAgc3VwcG9ydGVkLCA8Y29kZT5zcGVjaWFsczwvY29kZT4sIHRvIHdoaWNoIHlvdSBjYW4gcHJvdmlkZSBhbgogICAgYXJyYXkgb2Ygc3RyaW5ncyB0byBoYXZlIHRob3NlIGlkZW50aWZpZXJzIGhpZ2hsaWdodGVkIHdpdGgKICAgIHRoZSA8Y29kZT5sdWEtc3BlY2lhbDwvY29kZT4gc3R5bGUuPC9wPgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQveC1sdWE8L2NvZGU+LjwvcD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/lua/lua.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gTFVBIG1vZGUuIFBvcnRlZCB0byBDb2RlTWlycm9yIDIgZnJvbSBGcmFuY2lzemVrIFdhd3J6YWsncwovLyBDb2RlTWlycm9yIDEgbW9kZS4KLy8gaGlnaGxpZ2h0cyBrZXl3b3Jkcywgc3RyaW5ncywgY29tbWVudHMgKG5vIGxldmVsaW5nIHN1cHBvcnRlZCEgKCJbPT1bIikpLCB0b2tlbnMsIGJhc2ljIGluZGVudGluZwogCkNvZGVNaXJyb3IuZGVmaW5lTW9kZSgibHVhIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICB2YXIgaW5kZW50VW5pdCA9IGNvbmZpZy5pbmRlbnRVbml0OwoKICBmdW5jdGlvbiBwcmVmaXhSRSh3b3JkcykgewogICAgcmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiICsgd29yZHMuam9pbigifCIpICsgIikiLCAiaSIpOwogIH0KICBmdW5jdGlvbiB3b3JkUkUod29yZHMpIHsKICAgIHJldHVybiBuZXcgUmVnRXhwKCJeKD86IiArIHdvcmRzLmpvaW4oInwiKSArICIpJCIsICJpIik7CiAgfQogIHZhciBzcGVjaWFscyA9IHdvcmRSRShwYXJzZXJDb25maWcuc3BlY2lhbHMgfHwgW10pOwogCiAgLy8gbG9uZyBsaXN0IG9mIHN0YW5kYXJkIGZ1bmN0aW9ucyBmcm9tIGx1YSBtYW51YWwKICB2YXIgYnVpbHRpbnMgPSB3b3JkUkUoWwogICAgIl9HIiwiX1ZFUlNJT04iLCJhc3NlcnQiLCJjb2xsZWN0Z2FyYmFnZSIsImRvZmlsZSIsImVycm9yIiwiZ2V0ZmVudiIsImdldG1ldGF0YWJsZSIsImlwYWlycyIsImxvYWQiLAogICAgImxvYWRmaWxlIiwibG9hZHN0cmluZyIsIm1vZHVsZSIsIm5leHQiLCJwYWlycyIsInBjYWxsIiwicHJpbnQiLCJyYXdlcXVhbCIsInJhd2dldCIsInJhd3NldCIsInJlcXVpcmUiLAogICAgInNlbGVjdCIsInNldGZlbnYiLCJzZXRtZXRhdGFibGUiLCJ0b251bWJlciIsInRvc3RyaW5nIiwidHlwZSIsInVucGFjayIsInhwY2FsbCIsCgogICAgImNvcm91dGluZS5jcmVhdGUiLCJjb3JvdXRpbmUucmVzdW1lIiwiY29yb3V0aW5lLnJ1bm5pbmciLCJjb3JvdXRpbmUuc3RhdHVzIiwiY29yb3V0aW5lLndyYXAiLCJjb3JvdXRpbmUueWllbGQiLAoKICAgICJkZWJ1Zy5kZWJ1ZyIsImRlYnVnLmdldGZlbnYiLCJkZWJ1Zy5nZXRob29rIiwiZGVidWcuZ2V0aW5mbyIsImRlYnVnLmdldGxvY2FsIiwiZGVidWcuZ2V0bWV0YXRhYmxlIiwKICAgICJkZWJ1Zy5nZXRyZWdpc3RyeSIsImRlYnVnLmdldHVwdmFsdWUiLCJkZWJ1Zy5zZXRmZW52IiwiZGVidWcuc2V0aG9vayIsImRlYnVnLnNldGxvY2FsIiwiZGVidWcuc2V0bWV0YXRhYmxlIiwKICAgICJkZWJ1Zy5zZXR1cHZhbHVlIiwiZGVidWcudHJhY2ViYWNrIiwKCiAgICAiY2xvc2UiLCJmbHVzaCIsImxpbmVzIiwicmVhZCIsInNlZWsiLCJzZXR2YnVmIiwid3JpdGUiLAoKICAgICJpby5jbG9zZSIsImlvLmZsdXNoIiwiaW8uaW5wdXQiLCJpby5saW5lcyIsImlvLm9wZW4iLCJpby5vdXRwdXQiLCJpby5wb3BlbiIsImlvLnJlYWQiLCJpby5zdGRlcnIiLCJpby5zdGRpbiIsCiAgICAiaW8uc3Rkb3V0IiwiaW8udG1wZmlsZSIsImlvLnR5cGUiLCJpby53cml0ZSIsCgogICAgIm1hdGguYWJzIiwibWF0aC5hY29zIiwibWF0aC5hc2luIiwibWF0aC5hdGFuIiwibWF0aC5hdGFuMiIsIm1hdGguY2VpbCIsIm1hdGguY29zIiwibWF0aC5jb3NoIiwibWF0aC5kZWciLAogICAgIm1hdGguZXhwIiwibWF0aC5mbG9vciIsIm1hdGguZm1vZCIsIm1hdGguZnJleHAiLCJtYXRoLmh1Z2UiLCJtYXRoLmxkZXhwIiwibWF0aC5sb2ciLCJtYXRoLmxvZzEwIiwibWF0aC5tYXgiLAogICAgIm1hdGgubWluIiwibWF0aC5tb2RmIiwibWF0aC5waSIsIm1hdGgucG93IiwibWF0aC5yYWQiLCJtYXRoLnJhbmRvbSIsIm1hdGgucmFuZG9tc2VlZCIsIm1hdGguc2luIiwibWF0aC5zaW5oIiwKICAgICJtYXRoLnNxcnQiLCJtYXRoLnRhbiIsIm1hdGgudGFuaCIsCgogICAgIm9zLmNsb2NrIiwib3MuZGF0ZSIsIm9zLmRpZmZ0aW1lIiwib3MuZXhlY3V0ZSIsIm9zLmV4aXQiLCJvcy5nZXRlbnYiLCJvcy5yZW1vdmUiLCJvcy5yZW5hbWUiLCJvcy5zZXRsb2NhbGUiLAogICAgIm9zLnRpbWUiLCJvcy50bXBuYW1lIiwKCiAgICAicGFja2FnZS5jcGF0aCIsInBhY2thZ2UubG9hZGVkIiwicGFja2FnZS5sb2FkZXJzIiwicGFja2FnZS5sb2FkbGliIiwicGFja2FnZS5wYXRoIiwicGFja2FnZS5wcmVsb2FkIiwKICAgICJwYWNrYWdlLnNlZWFsbCIsCgogICAgInN0cmluZy5ieXRlIiwic3RyaW5nLmNoYXIiLCJzdHJpbmcuZHVtcCIsInN0cmluZy5maW5kIiwic3RyaW5nLmZvcm1hdCIsInN0cmluZy5nbWF0Y2giLCJzdHJpbmcuZ3N1YiIsCiAgICAic3RyaW5nLmxlbiIsInN0cmluZy5sb3dlciIsInN0cmluZy5tYXRjaCIsInN0cmluZy5yZXAiLCJzdHJpbmcucmV2ZXJzZSIsInN0cmluZy5zdWIiLCJzdHJpbmcudXBwZXIiLAoKICAgICJ0YWJsZS5jb25jYXQiLCJ0YWJsZS5pbnNlcnQiLCJ0YWJsZS5tYXhuIiwidGFibGUucmVtb3ZlIiwidGFibGUuc29ydCIKICBdKTsKICB2YXIga2V5d29yZHMgPSB3b3JkUkUoWyJhbmQiLCJicmVhayIsImVsc2VpZiIsImZhbHNlIiwibmlsIiwibm90Iiwib3IiLCJyZXR1cm4iLAoJCQkgInRydWUiLCJmdW5jdGlvbiIsICJlbmQiLCAiaWYiLCAidGhlbiIsICJlbHNlIiwgImRvIiwgCgkJCSAid2hpbGUiLCAicmVwZWF0IiwgInVudGlsIiwgImZvciIsICJpbiIsICJsb2NhbCIgXSk7CgogIHZhciBpbmRlbnRUb2tlbnMgPSB3b3JkUkUoWyJmdW5jdGlvbiIsICJpZiIsInJlcGVhdCIsImRvIiwgIlxcKCIsICJ7Il0pOwogIHZhciBkZWRlbnRUb2tlbnMgPSB3b3JkUkUoWyJlbmQiLCAidW50aWwiLCAiXFwpIiwgIn0iXSk7CiAgdmFyIGRlZGVudFBhcnRpYWwgPSBwcmVmaXhSRShbImVuZCIsICJ1bnRpbCIsICJcXCkiLCAifSIsICJlbHNlIiwgImVsc2VpZiJdKTsKCiAgZnVuY3Rpb24gcmVhZEJyYWNrZXQoc3RyZWFtKSB7CiAgICB2YXIgbGV2ZWwgPSAwOwogICAgd2hpbGUgKHN0cmVhbS5lYXQoIj0iKSkgKytsZXZlbDsKICAgIHN0cmVhbS5lYXQoIlsiKTsKICAgIHJldHVybiBsZXZlbDsKICB9CgogIGZ1bmN0aW9uIG5vcm1hbChzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgaWYgKGNoID09ICItIiAmJiBzdHJlYW0uZWF0KCItIikpIHsKICAgICAgaWYgKHN0cmVhbS5lYXQoIlsiKSkKICAgICAgICByZXR1cm4gKHN0YXRlLmN1ciA9IGJyYWNrZXRlZChyZWFkQnJhY2tldChzdHJlYW0pLCAiY29tbWVudCIpKShzdHJlYW0sIHN0YXRlKTsKICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICByZXR1cm4gImNvbW1lbnQiOwogICAgfSAKICAgIGlmIChjaCA9PSAiXCIiIHx8IGNoID09ICInIikKICAgICAgcmV0dXJuIChzdGF0ZS5jdXIgPSBzdHJpbmcoY2gpKShzdHJlYW0sIHN0YXRlKTsKICAgIGlmIChjaCA9PSAiWyIgJiYgL1tcWz1dLy50ZXN0KHN0cmVhbS5wZWVrKCkpKQogICAgICByZXR1cm4gKHN0YXRlLmN1ciA9IGJyYWNrZXRlZChyZWFkQnJhY2tldChzdHJlYW0pLCAic3RyaW5nIikpKHN0cmVhbSwgc3RhdGUpOwogICAgaWYgKC9cZC8udGVzdChjaCkpIHsKICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHcuJV0vKTsKICAgICAgcmV0dXJuICJudW1iZXIiOwogICAgfQogICAgaWYgKC9bXHdfXS8udGVzdChjaCkpIHsKICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcXFwtXy5dLyk7CiAgICAgIHJldHVybiAidmFyaWFibGUiOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBmdW5jdGlvbiBicmFja2V0ZWQobGV2ZWwsIHN0eWxlKSB7CiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICB2YXIgY3VybGV2ID0gbnVsbCwgY2g7CiAgICAgIHdoaWxlICgoY2ggPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgICAgaWYgKGN1cmxldiA9PSBudWxsKSB7aWYgKGNoID09ICJdIikgY3VybGV2ID0gMDt9CiAgICAgICAgZWxzZSBpZiAoY2ggPT0gIj0iKSArK2N1cmxldjsKICAgICAgICBlbHNlIGlmIChjaCA9PSAiXSIgJiYgY3VybGV2ID09IGxldmVsKSB7IHN0YXRlLmN1ciA9IG5vcm1hbDsgYnJlYWs7IH0KICAgICAgICBlbHNlIGN1cmxldiA9IG51bGw7CiAgICAgIH0KICAgICAgcmV0dXJuIHN0eWxlOwogICAgfTsKICB9CgogIGZ1bmN0aW9uIHN0cmluZyhxdW90ZSkgewogICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgY2g7CiAgICAgIHdoaWxlICgoY2ggPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgICAgaWYgKGNoID09IHF1b3RlICYmICFlc2NhcGVkKSBicmVhazsKICAgICAgICBlc2NhcGVkID0gIWVzY2FwZWQgJiYgY2ggPT0gIlxcIjsKICAgICAgfQogICAgICBpZiAoIWVzY2FwZWQpIHN0YXRlLmN1ciA9IG5vcm1hbDsKICAgICAgcmV0dXJuICJzdHJpbmciOwogICAgfTsKICB9CiAgICAKICByZXR1cm4gewogICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oYmFzZWNvbCkgewogICAgICByZXR1cm4ge2Jhc2Vjb2w6IGJhc2Vjb2wgfHwgMCwgaW5kZW50RGVwdGg6IDAsIGN1cjogbm9ybWFsfTsKICAgIH0sCgogICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDsKICAgICAgdmFyIHN0eWxlID0gc3RhdGUuY3VyKHN0cmVhbSwgc3RhdGUpOwogICAgICB2YXIgd29yZCA9IHN0cmVhbS5jdXJyZW50KCk7CiAgICAgIGlmIChzdHlsZSA9PSAidmFyaWFibGUiKSB7CiAgICAgICAgaWYgKGtleXdvcmRzLnRlc3Qod29yZCkpIHN0eWxlID0gImtleXdvcmQiOwogICAgICAgIGVsc2UgaWYgKGJ1aWx0aW5zLnRlc3Qod29yZCkpIHN0eWxlID0gImJ1aWx0aW4iOwoJZWxzZSBpZiAoc3BlY2lhbHMudGVzdCh3b3JkKSkgc3R5bGUgPSAidmFyaWFibGUtMiI7CiAgICAgIH0KICAgICAgaWYgKChzdHlsZSAhPSAiY29tbWVudCIpICYmIChzdHlsZSAhPSAic3RyaW5nIikpewogICAgICAgIGlmIChpbmRlbnRUb2tlbnMudGVzdCh3b3JkKSkgKytzdGF0ZS5pbmRlbnREZXB0aDsKICAgICAgICBlbHNlIGlmIChkZWRlbnRUb2tlbnMudGVzdCh3b3JkKSkgLS1zdGF0ZS5pbmRlbnREZXB0aDsKICAgICAgfQogICAgICByZXR1cm4gc3R5bGU7CiAgICB9LAoKICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlcikgewogICAgICB2YXIgY2xvc2luZyA9IGRlZGVudFBhcnRpYWwudGVzdCh0ZXh0QWZ0ZXIpOwogICAgICByZXR1cm4gc3RhdGUuYmFzZWNvbCArIGluZGVudFVuaXQgKiAoc3RhdGUuaW5kZW50RGVwdGggLSAoY2xvc2luZyA/IDEgOiAwKSk7CiAgICB9CiAgfTsKfSk7CgpDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1sdWEiLCAibHVhIik7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/markdown/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/markdown/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IE1hcmtkb3duIG1vZGU8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi94bWwveG1sLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJtYXJrZG93bi5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Im1hcmtkb3duLmNzcyI+CiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPi5Db2RlTWlycm9yIHtib3JkZXItdG9wOiAxcHggc29saWQgYmxhY2s7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazt9PC9zdHlsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogTWFya2Rvd24gbW9kZTwvaDE+Cgo8IS0tIHNvdXJjZTogaHR0cDovL2RhcmluZ2ZpcmViYWxsLm5ldC9wcm9qZWN0cy9tYXJrZG93bi9iYXNpY3MudGV4dCAtLT4KPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KTWFya2Rvd246IEJhc2ljcwo9PT09PT09PT09PT09PT09CgombHQ7dWwgaWQ9IlByb2plY3RTdWJtZW51IiZndDsKICAgICZsdDtsaSZndDsmbHQ7YSBocmVmPSIvcHJvamVjdHMvbWFya2Rvd24vIiB0aXRsZT0iTWFya2Rvd24gUHJvamVjdCBQYWdlIiZndDtNYWluJmx0Oy9hJmd0OyZsdDsvbGkmZ3Q7CiAgICAmbHQ7bGkmZ3Q7Jmx0O2EgY2xhc3M9InNlbGVjdGVkIiB0aXRsZT0iTWFya2Rvd24gQmFzaWNzIiZndDtCYXNpY3MmbHQ7L2EmZ3Q7Jmx0Oy9saSZndDsKICAgICZsdDtsaSZndDsmbHQ7YSBocmVmPSIvcHJvamVjdHMvbWFya2Rvd24vc3ludGF4IiB0aXRsZT0iTWFya2Rvd24gU3ludGF4IERvY3VtZW50YXRpb24iJmd0O1N5bnRheCZsdDsvYSZndDsmbHQ7L2xpJmd0OwogICAgJmx0O2xpJmd0OyZsdDthIGhyZWY9Ii9wcm9qZWN0cy9tYXJrZG93bi9saWNlbnNlIiB0aXRsZT0iUHJpY2luZyBhbmQgTGljZW5zZSBJbmZvcm1hdGlvbiImZ3Q7TGljZW5zZSZsdDsvYSZndDsmbHQ7L2xpJmd0OwogICAgJmx0O2xpJmd0OyZsdDthIGhyZWY9Ii9wcm9qZWN0cy9tYXJrZG93bi9kaW5ndXMiIHRpdGxlPSJPbmxpbmUgTWFya2Rvd24gV2ViIEZvcm0iJmd0O0Rpbmd1cyZsdDsvYSZndDsmbHQ7L2xpJmd0OwombHQ7L3VsJmd0OwoKCkdldHRpbmcgdGhlIEdpc3Qgb2YgTWFya2Rvd24ncyBGb3JtYXR0aW5nIFN5bnRheAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoaXMgcGFnZSBvZmZlcnMgYSBicmllZiBvdmVydmlldyBvZiB3aGF0IGl0J3MgbGlrZSB0byB1c2UgTWFya2Rvd24uClRoZSBbc3ludGF4IHBhZ2VdIFtzXSBwcm92aWRlcyBjb21wbGV0ZSwgZGV0YWlsZWQgZG9jdW1lbnRhdGlvbiBmb3IKZXZlcnkgZmVhdHVyZSwgYnV0IE1hcmtkb3duIHNob3VsZCBiZSB2ZXJ5IGVhc3kgdG8gcGljayB1cCBzaW1wbHkgYnkKbG9va2luZyBhdCBhIGZldyBleGFtcGxlcyBvZiBpdCBpbiBhY3Rpb24uIFRoZSBleGFtcGxlcyBvbiB0aGlzIHBhZ2UKYXJlIHdyaXR0ZW4gaW4gYSBiZWZvcmUvYWZ0ZXIgc3R5bGUsIHNob3dpbmcgZXhhbXBsZSBzeW50YXggYW5kIHRoZQpIVE1MIG91dHB1dCBwcm9kdWNlZCBieSBNYXJrZG93bi4KCkl0J3MgYWxzbyBoZWxwZnVsIHRvIHNpbXBseSB0cnkgTWFya2Rvd24gb3V0OyB0aGUgW0Rpbmd1c10gW2RdIGlzIGEKd2ViIGFwcGxpY2F0aW9uIHRoYXQgYWxsb3dzIHlvdSB0eXBlIHlvdXIgb3duIE1hcmtkb3duLWZvcm1hdHRlZCB0ZXh0CmFuZCB0cmFuc2xhdGUgaXQgdG8gWEhUTUwuCgoqKk5vdGU6KiogVGhpcyBkb2N1bWVudCBpcyBpdHNlbGYgd3JpdHRlbiB1c2luZyBNYXJrZG93bjsgeW91CmNhbiBbc2VlIHRoZSBzb3VyY2UgZm9yIGl0IGJ5IGFkZGluZyAnLnRleHQnIHRvIHRoZSBVUkxdIFtzcmNdLgoKICBbc106IC9wcm9qZWN0cy9tYXJrZG93bi9zeW50YXggICJNYXJrZG93biBTeW50YXgiCiAgW2RdOiAvcHJvamVjdHMvbWFya2Rvd24vZGluZ3VzICAiTWFya2Rvd24gRGluZ3VzIgogIFtzcmNdOiAvcHJvamVjdHMvbWFya2Rvd24vYmFzaWNzLnRleHQKCgojIyBQYXJhZ3JhcGhzLCBIZWFkZXJzLCBCbG9ja3F1b3RlcyAjIwoKQSBwYXJhZ3JhcGggaXMgc2ltcGx5IG9uZSBvciBtb3JlIGNvbnNlY3V0aXZlIGxpbmVzIG9mIHRleHQsIHNlcGFyYXRlZApieSBvbmUgb3IgbW9yZSBibGFuayBsaW5lcy4gKEEgYmxhbmsgbGluZSBpcyBhbnkgbGluZSB0aGF0IGxvb2tzIGxpa2UKYSBibGFuayBsaW5lIC0tIGEgbGluZSBjb250YWluaW5nIG5vdGhpbmcgYnV0IHNwYWNlcyBvciB0YWJzIGlzCmNvbnNpZGVyZWQgYmxhbmsuKSBOb3JtYWwgcGFyYWdyYXBocyBzaG91bGQgbm90IGJlIGluZGVudGVkIHdpdGgKc3BhY2VzIG9yIHRhYnMuCgpNYXJrZG93biBvZmZlcnMgdHdvIHN0eWxlcyBvZiBoZWFkZXJzOiAqU2V0ZXh0KiBhbmQgKmF0eCouClNldGV4dC1zdHlsZSBoZWFkZXJzIGZvciBgJmx0O2gxJmd0O2AgYW5kIGAmbHQ7aDImZ3Q7YCBhcmUgY3JlYXRlZCBieQoidW5kZXJsaW5pbmciIHdpdGggZXF1YWwgc2lnbnMgKGA9YCkgYW5kIGh5cGhlbnMgKGAtYCksIHJlc3BlY3RpdmVseS4KVG8gY3JlYXRlIGFuIGF0eC1zdHlsZSBoZWFkZXIsIHlvdSBwdXQgMS02IGhhc2ggbWFya3MgKGAjYCkgYXQgdGhlCmJlZ2lubmluZyBvZiB0aGUgbGluZSAtLSB0aGUgbnVtYmVyIG9mIGhhc2hlcyBlcXVhbHMgdGhlIHJlc3VsdGluZwpIVE1MIGhlYWRlciBsZXZlbC4KCkJsb2NrcXVvdGVzIGFyZSBpbmRpY2F0ZWQgdXNpbmcgZW1haWwtc3R5bGUgJ2AmZ3Q7YCcgYW5nbGUgYnJhY2tldHMuCgpNYXJrZG93bjoKCiAgICBBIEZpcnN0IExldmVsIEhlYWRlcgogICAgPT09PT09PT09PT09PT09PT09PT0KICAgIAogICAgQSBTZWNvbmQgTGV2ZWwgSGVhZGVyCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICBOb3cgaXMgdGhlIHRpbWUgZm9yIGFsbCBnb29kIG1lbiB0byBjb21lIHRvCiAgICB0aGUgYWlkIG9mIHRoZWlyIGNvdW50cnkuIFRoaXMgaXMganVzdCBhCiAgICByZWd1bGFyIHBhcmFncmFwaC4KCiAgICBUaGUgcXVpY2sgYnJvd24gZm94IGp1bXBlZCBvdmVyIHRoZSBsYXp5CiAgICBkb2cncyBiYWNrLgogICAgCiAgICAjIyMgSGVhZGVyIDMKCiAgICAmZ3Q7IFRoaXMgaXMgYSBibG9ja3F1b3RlLgogICAgJmd0OyAKICAgICZndDsgVGhpcyBpcyB0aGUgc2Vjb25kIHBhcmFncmFwaCBpbiB0aGUgYmxvY2txdW90ZS4KICAgICZndDsKICAgICZndDsgIyMgVGhpcyBpcyBhbiBIMiBpbiBhIGJsb2NrcXVvdGUKCgpPdXRwdXQ6CgogICAgJmx0O2gxJmd0O0EgRmlyc3QgTGV2ZWwgSGVhZGVyJmx0Oy9oMSZndDsKICAgIAogICAgJmx0O2gyJmd0O0EgU2Vjb25kIExldmVsIEhlYWRlciZsdDsvaDImZ3Q7CiAgICAKICAgICZsdDtwJmd0O05vdyBpcyB0aGUgdGltZSBmb3IgYWxsIGdvb2QgbWVuIHRvIGNvbWUgdG8KICAgIHRoZSBhaWQgb2YgdGhlaXIgY291bnRyeS4gVGhpcyBpcyBqdXN0IGEKICAgIHJlZ3VsYXIgcGFyYWdyYXBoLiZsdDsvcCZndDsKICAgIAogICAgJmx0O3AmZ3Q7VGhlIHF1aWNrIGJyb3duIGZveCBqdW1wZWQgb3ZlciB0aGUgbGF6eQogICAgZG9nJ3MgYmFjay4mbHQ7L3AmZ3Q7CiAgICAKICAgICZsdDtoMyZndDtIZWFkZXIgMyZsdDsvaDMmZ3Q7CiAgICAKICAgICZsdDtibG9ja3F1b3RlJmd0OwogICAgICAgICZsdDtwJmd0O1RoaXMgaXMgYSBibG9ja3F1b3RlLiZsdDsvcCZndDsKICAgICAgICAKICAgICAgICAmbHQ7cCZndDtUaGlzIGlzIHRoZSBzZWNvbmQgcGFyYWdyYXBoIGluIHRoZSBibG9ja3F1b3RlLiZsdDsvcCZndDsKICAgICAgICAKICAgICAgICAmbHQ7aDImZ3Q7VGhpcyBpcyBhbiBIMiBpbiBhIGJsb2NrcXVvdGUmbHQ7L2gyJmd0OwogICAgJmx0Oy9ibG9ja3F1b3RlJmd0OwoKCgojIyMgUGhyYXNlIEVtcGhhc2lzICMjIwoKTWFya2Rvd24gdXNlcyBhc3Rlcmlza3MgYW5kIHVuZGVyc2NvcmVzIHRvIGluZGljYXRlIHNwYW5zIG9mIGVtcGhhc2lzLgoKTWFya2Rvd246CgogICAgU29tZSBvZiB0aGVzZSB3b3JkcyAqYXJlIGVtcGhhc2l6ZWQqLgogICAgU29tZSBvZiB0aGVzZSB3b3JkcyBfYXJlIGVtcGhhc2l6ZWQgYWxzb18uCiAgICAKICAgIFVzZSB0d28gYXN0ZXJpc2tzIGZvciAqKnN0cm9uZyBlbXBoYXNpcyoqLgogICAgT3IsIGlmIHlvdSBwcmVmZXIsIF9fdXNlIHR3byB1bmRlcnNjb3JlcyBpbnN0ZWFkX18uCgpPdXRwdXQ6CgogICAgJmx0O3AmZ3Q7U29tZSBvZiB0aGVzZSB3b3JkcyAmbHQ7ZW0mZ3Q7YXJlIGVtcGhhc2l6ZWQmbHQ7L2VtJmd0Oy4KICAgIFNvbWUgb2YgdGhlc2Ugd29yZHMgJmx0O2VtJmd0O2FyZSBlbXBoYXNpemVkIGFsc28mbHQ7L2VtJmd0Oy4mbHQ7L3AmZ3Q7CiAgICAKICAgICZsdDtwJmd0O1VzZSB0d28gYXN0ZXJpc2tzIGZvciAmbHQ7c3Ryb25nJmd0O3N0cm9uZyBlbXBoYXNpcyZsdDsvc3Ryb25nJmd0Oy4KICAgIE9yLCBpZiB5b3UgcHJlZmVyLCAmbHQ7c3Ryb25nJmd0O3VzZSB0d28gdW5kZXJzY29yZXMgaW5zdGVhZCZsdDsvc3Ryb25nJmd0Oy4mbHQ7L3AmZ3Q7CiAgIAoKCiMjIExpc3RzICMjCgpVbm9yZGVyZWQgKGJ1bGxldGVkKSBsaXN0cyB1c2UgYXN0ZXJpc2tzLCBwbHVzZXMsIGFuZCBoeXBoZW5zIChgKmAsCmArYCwgYW5kIGAtYCkgYXMgbGlzdCBtYXJrZXJzLiBUaGVzZSB0aHJlZSBtYXJrZXJzIGFyZQppbnRlcmNoYW5nYWJsZTsgdGhpczoKCiAgICAqICAgQ2FuZHkuCiAgICAqICAgR3VtLgogICAgKiAgIEJvb3plLgoKdGhpczoKCiAgICArICAgQ2FuZHkuCiAgICArICAgR3VtLgogICAgKyAgIEJvb3plLgoKYW5kIHRoaXM6CgogICAgLSAgIENhbmR5LgogICAgLSAgIEd1bS4KICAgIC0gICBCb296ZS4KCmFsbCBwcm9kdWNlIHRoZSBzYW1lIG91dHB1dDoKCiAgICAmbHQ7dWwmZ3Q7CiAgICAmbHQ7bGkmZ3Q7Q2FuZHkuJmx0Oy9saSZndDsKICAgICZsdDtsaSZndDtHdW0uJmx0Oy9saSZndDsKICAgICZsdDtsaSZndDtCb296ZS4mbHQ7L2xpJmd0OwogICAgJmx0Oy91bCZndDsKCk9yZGVyZWQgKG51bWJlcmVkKSBsaXN0cyB1c2UgcmVndWxhciBudW1iZXJzLCBmb2xsb3dlZCBieSBwZXJpb2RzLCBhcwpsaXN0IG1hcmtlcnM6CgogICAgMS4gIFJlZAogICAgMi4gIEdyZWVuCiAgICAzLiAgQmx1ZQoKT3V0cHV0OgoKICAgICZsdDtvbCZndDsKICAgICZsdDtsaSZndDtSZWQmbHQ7L2xpJmd0OwogICAgJmx0O2xpJmd0O0dyZWVuJmx0Oy9saSZndDsKICAgICZsdDtsaSZndDtCbHVlJmx0Oy9saSZndDsKICAgICZsdDsvb2wmZ3Q7CgpJZiB5b3UgcHV0IGJsYW5rIGxpbmVzIGJldHdlZW4gaXRlbXMsIHlvdSdsbCBnZXQgYCZsdDtwJmd0O2AgdGFncyBmb3IgdGhlCmxpc3QgaXRlbSB0ZXh0LiBZb3UgY2FuIGNyZWF0ZSBtdWx0aS1wYXJhZ3JhcGggbGlzdCBpdGVtcyBieSBpbmRlbnRpbmcKdGhlIHBhcmFncmFwaHMgYnkgNCBzcGFjZXMgb3IgMSB0YWI6CgogICAgKiAgIEEgbGlzdCBpdGVtLgogICAgCiAgICAgICAgV2l0aCBtdWx0aXBsZSBwYXJhZ3JhcGhzLgoKICAgICogICBBbm90aGVyIGl0ZW0gaW4gdGhlIGxpc3QuCgpPdXRwdXQ6CgogICAgJmx0O3VsJmd0OwogICAgJmx0O2xpJmd0OyZsdDtwJmd0O0EgbGlzdCBpdGVtLiZsdDsvcCZndDsKICAgICZsdDtwJmd0O1dpdGggbXVsdGlwbGUgcGFyYWdyYXBocy4mbHQ7L3AmZ3Q7Jmx0Oy9saSZndDsKICAgICZsdDtsaSZndDsmbHQ7cCZndDtBbm90aGVyIGl0ZW0gaW4gdGhlIGxpc3QuJmx0Oy9wJmd0OyZsdDsvbGkmZ3Q7CiAgICAmbHQ7L3VsJmd0OwogICAgCgoKIyMjIExpbmtzICMjIwoKTWFya2Rvd24gc3VwcG9ydHMgdHdvIHN0eWxlcyBmb3IgY3JlYXRpbmcgbGlua3M6ICppbmxpbmUqIGFuZAoqcmVmZXJlbmNlKi4gV2l0aCBib3RoIHN0eWxlcywgeW91IHVzZSBzcXVhcmUgYnJhY2tldHMgdG8gZGVsaW1pdCB0aGUKdGV4dCB5b3Ugd2FudCB0byB0dXJuIGludG8gYSBsaW5rLgoKSW5saW5lLXN0eWxlIGxpbmtzIHVzZSBwYXJlbnRoZXNlcyBpbW1lZGlhdGVseSBhZnRlciB0aGUgbGluayB0ZXh0LgpGb3IgZXhhbXBsZToKCiAgICBUaGlzIGlzIGFuIFtleGFtcGxlIGxpbmtdKGh0dHA6Ly9leGFtcGxlLmNvbS8pLgoKT3V0cHV0OgoKICAgICZsdDtwJmd0O1RoaXMgaXMgYW4gJmx0O2EgaHJlZj0iaHR0cDovL2V4YW1wbGUuY29tLyImZ3Q7CiAgICBleGFtcGxlIGxpbmsmbHQ7L2EmZ3Q7LiZsdDsvcCZndDsKCk9wdGlvbmFsbHksIHlvdSBtYXkgaW5jbHVkZSBhIHRpdGxlIGF0dHJpYnV0ZSBpbiB0aGUgcGFyZW50aGVzZXM6CgogICAgVGhpcyBpcyBhbiBbZXhhbXBsZSBsaW5rXShodHRwOi8vZXhhbXBsZS5jb20vICJXaXRoIGEgVGl0bGUiKS4KCk91dHB1dDoKCiAgICAmbHQ7cCZndDtUaGlzIGlzIGFuICZsdDthIGhyZWY9Imh0dHA6Ly9leGFtcGxlLmNvbS8iIHRpdGxlPSJXaXRoIGEgVGl0bGUiJmd0OwogICAgZXhhbXBsZSBsaW5rJmx0Oy9hJmd0Oy4mbHQ7L3AmZ3Q7CgpSZWZlcmVuY2Utc3R5bGUgbGlua3MgYWxsb3cgeW91IHRvIHJlZmVyIHRvIHlvdXIgbGlua3MgYnkgbmFtZXMsIHdoaWNoCnlvdSBkZWZpbmUgZWxzZXdoZXJlIGluIHlvdXIgZG9jdW1lbnQ6CgogICAgSSBnZXQgMTAgdGltZXMgbW9yZSB0cmFmZmljIGZyb20gW0dvb2dsZV1bMV0gdGhhbiBmcm9tCiAgICBbWWFob29dWzJdIG9yIFtNU05dWzNdLgoKICAgIFsxXTogaHR0cDovL2dvb2dsZS5jb20vICAgICAgICAiR29vZ2xlIgogICAgWzJdOiBodHRwOi8vc2VhcmNoLnlhaG9vLmNvbS8gICJZYWhvbyBTZWFyY2giCiAgICBbM106IGh0dHA6Ly9zZWFyY2gubXNuLmNvbS8gICAgIk1TTiBTZWFyY2giCgpPdXRwdXQ6CgogICAgJmx0O3AmZ3Q7SSBnZXQgMTAgdGltZXMgbW9yZSB0cmFmZmljIGZyb20gJmx0O2EgaHJlZj0iaHR0cDovL2dvb2dsZS5jb20vIgogICAgdGl0bGU9Ikdvb2dsZSImZ3Q7R29vZ2xlJmx0Oy9hJmd0OyB0aGFuIGZyb20gJmx0O2EgaHJlZj0iaHR0cDovL3NlYXJjaC55YWhvby5jb20vIgogICAgdGl0bGU9IllhaG9vIFNlYXJjaCImZ3Q7WWFob28mbHQ7L2EmZ3Q7IG9yICZsdDthIGhyZWY9Imh0dHA6Ly9zZWFyY2gubXNuLmNvbS8iCiAgICB0aXRsZT0iTVNOIFNlYXJjaCImZ3Q7TVNOJmx0Oy9hJmd0Oy4mbHQ7L3AmZ3Q7CgpUaGUgdGl0bGUgYXR0cmlidXRlIGlzIG9wdGlvbmFsLiBMaW5rIG5hbWVzIG1heSBjb250YWluIGxldHRlcnMsCm51bWJlcnMgYW5kIHNwYWNlcywgYnV0IGFyZSAqbm90KiBjYXNlIHNlbnNpdGl2ZToKCiAgICBJIHN0YXJ0IG15IG1vcm5pbmcgd2l0aCBhIGN1cCBvZiBjb2ZmZWUgYW5kCiAgICBbVGhlIE5ldyBZb3JrIFRpbWVzXVtOWSBUaW1lc10uCgogICAgW255IHRpbWVzXTogaHR0cDovL3d3dy5ueXRpbWVzLmNvbS8KCk91dHB1dDoKCiAgICAmbHQ7cCZndDtJIHN0YXJ0IG15IG1vcm5pbmcgd2l0aCBhIGN1cCBvZiBjb2ZmZWUgYW5kCiAgICAmbHQ7YSBocmVmPSJodHRwOi8vd3d3Lm55dGltZXMuY29tLyImZ3Q7VGhlIE5ldyBZb3JrIFRpbWVzJmx0Oy9hJmd0Oy4mbHQ7L3AmZ3Q7CgoKIyMjIEltYWdlcyAjIyMKCkltYWdlIHN5bnRheCBpcyB2ZXJ5IG11Y2ggbGlrZSBsaW5rIHN5bnRheC4KCklubGluZSAodGl0bGVzIGFyZSBvcHRpb25hbCk6CgogICAgIVthbHQgdGV4dF0oL3BhdGgvdG8vaW1nLmpwZyAiVGl0bGUiKQoKUmVmZXJlbmNlLXN0eWxlOgoKICAgICFbYWx0IHRleHRdW2lkXQoKICAgIFtpZF06IC9wYXRoL3RvL2ltZy5qcGcgIlRpdGxlIgoKQm90aCBvZiB0aGUgYWJvdmUgZXhhbXBsZXMgcHJvZHVjZSB0aGUgc2FtZSBvdXRwdXQ6CgogICAgJmx0O2ltZyBzcmM9Ii9wYXRoL3RvL2ltZy5qcGciIGFsdD0iYWx0IHRleHQiIHRpdGxlPSJUaXRsZSIgLyZndDsKCgoKIyMjIENvZGUgIyMjCgpJbiBhIHJlZ3VsYXIgcGFyYWdyYXBoLCB5b3UgY2FuIGNyZWF0ZSBjb2RlIHNwYW4gYnkgd3JhcHBpbmcgdGV4dCBpbgpiYWNrdGljayBxdW90ZXMuIEFueSBhbXBlcnNhbmRzIChgJmFtcDtgKSBhbmQgYW5nbGUgYnJhY2tldHMgKGAmbHQ7YCBvcgpgJmd0O2ApIHdpbGwgYXV0b21hdGljYWxseSBiZSB0cmFuc2xhdGVkIGludG8gSFRNTCBlbnRpdGllcy4gVGhpcyBtYWtlcwppdCBlYXN5IHRvIHVzZSBNYXJrZG93biB0byB3cml0ZSBhYm91dCBIVE1MIGV4YW1wbGUgY29kZToKCiAgICBJIHN0cm9uZ2x5IHJlY29tbWVuZCBhZ2FpbnN0IHVzaW5nIGFueSBgJmx0O2JsaW5rJmd0O2AgdGFncy4KCiAgICBJIHdpc2ggU21hcnR5UGFudHMgdXNlZCBuYW1lZCBlbnRpdGllcyBsaWtlIGAmYW1wO21kYXNoO2AKICAgIGluc3RlYWQgb2YgZGVjaW1hbC1lbmNvZGVkIGVudGl0ZXMgbGlrZSBgJmFtcDsjODIxMjtgLgoKT3V0cHV0OgoKICAgICZsdDtwJmd0O0kgc3Ryb25nbHkgcmVjb21tZW5kIGFnYWluc3QgdXNpbmcgYW55CiAgICAmbHQ7Y29kZSZndDsmYW1wO2x0O2JsaW5rJmFtcDtndDsmbHQ7L2NvZGUmZ3Q7IHRhZ3MuJmx0Oy9wJmd0OwogICAgCiAgICAmbHQ7cCZndDtJIHdpc2ggU21hcnR5UGFudHMgdXNlZCBuYW1lZCBlbnRpdGllcyBsaWtlCiAgICAmbHQ7Y29kZSZndDsmYW1wO2FtcDttZGFzaDsmbHQ7L2NvZGUmZ3Q7IGluc3RlYWQgb2YgZGVjaW1hbC1lbmNvZGVkCiAgICBlbnRpdGVzIGxpa2UgJmx0O2NvZGUmZ3Q7JmFtcDthbXA7IzgyMTI7Jmx0Oy9jb2RlJmd0Oy4mbHQ7L3AmZ3Q7CgoKVG8gc3BlY2lmeSBhbiBlbnRpcmUgYmxvY2sgb2YgcHJlLWZvcm1hdHRlZCBjb2RlLCBpbmRlbnQgZXZlcnkgbGluZSBvZgp0aGUgYmxvY2sgYnkgNCBzcGFjZXMgb3IgMSB0YWIuIEp1c3QgbGlrZSB3aXRoIGNvZGUgc3BhbnMsIGAmYW1wO2AsIGAmbHQ7YCwKYW5kIGAmZ3Q7YCBjaGFyYWN0ZXJzIHdpbGwgYmUgZXNjYXBlZCBhdXRvbWF0aWNhbGx5LgoKTWFya2Rvd246CgogICAgSWYgeW91IHdhbnQgeW91ciBwYWdlIHRvIHZhbGlkYXRlIHVuZGVyIFhIVE1MIDEuMCBTdHJpY3QsCiAgICB5b3UndmUgZ290IHRvIHB1dCBwYXJhZ3JhcGggdGFncyBpbiB5b3VyIGJsb2NrcXVvdGVzOgoKICAgICAgICAmbHQ7YmxvY2txdW90ZSZndDsKICAgICAgICAgICAgJmx0O3AmZ3Q7Rm9yIGV4YW1wbGUuJmx0Oy9wJmd0OwogICAgICAgICZsdDsvYmxvY2txdW90ZSZndDsKCk91dHB1dDoKCiAgICAmbHQ7cCZndDtJZiB5b3Ugd2FudCB5b3VyIHBhZ2UgdG8gdmFsaWRhdGUgdW5kZXIgWEhUTUwgMS4wIFN0cmljdCwKICAgIHlvdSd2ZSBnb3QgdG8gcHV0IHBhcmFncmFwaCB0YWdzIGluIHlvdXIgYmxvY2txdW90ZXM6Jmx0Oy9wJmd0OwogICAgCiAgICAmbHQ7cHJlJmd0OyZsdDtjb2RlJmd0OyZhbXA7bHQ7YmxvY2txdW90ZSZhbXA7Z3Q7CiAgICAgICAgJmFtcDtsdDtwJmFtcDtndDtGb3IgZXhhbXBsZS4mYW1wO2x0Oy9wJmFtcDtndDsKICAgICZhbXA7bHQ7L2Jsb2NrcXVvdGUmYW1wO2d0OwogICAgJmx0Oy9jb2RlJmd0OyZsdDsvcHJlJmd0Owo8L3RleHRhcmVhPjwvZm9ybT4KCiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIG1vZGU6ICdtYXJrZG93bicsCiAgICAgICAgbGluZU51bWJlcnM6IHRydWUsCiAgICAgICAgbWF0Y2hCcmFja2V0czogdHJ1ZSwKICAgICAgICB0aGVtZTogImRlZmF1bHQiCiAgICAgIH0pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQveC1tYXJrZG93bjwvY29kZT4uPC9wPgoKICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/markdown/markdown.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJtYXJrZG93biIsIGZ1bmN0aW9uKGNtQ2ZnLCBtb2RlQ2ZnKSB7CgogIHZhciBodG1sTW9kZSA9IENvZGVNaXJyb3IuZ2V0TW9kZShjbUNmZywgeyBuYW1lOiAneG1sJywgaHRtbE1vZGU6IHRydWUgfSk7CgogIHZhciBoZWFkZXIgICA9ICdoZWFkZXInCiAgLCAgIGNvZGUgICAgID0gJ2NvbW1lbnQnCiAgLCAgIHF1b3RlICAgID0gJ3F1b3RlJwogICwgICBsaXN0ICAgICA9ICdzdHJpbmcnCiAgLCAgIGhyICAgICAgID0gJ2hyJwogICwgICBsaW5rdGV4dCA9ICdsaW5rJwogICwgICBsaW5raHJlZiA9ICdzdHJpbmcnCiAgLCAgIGVtICAgICAgID0gJ2VtJwogICwgICBzdHJvbmcgICA9ICdzdHJvbmcnCiAgLCAgIGVtc3Ryb25nID0gJ2Vtc3Ryb25nJzsKCiAgdmFyIGhyUkUgPSAvXlsqLT1fXS8KICAsICAgdWxSRSA9IC9eWyotK11ccysvCiAgLCAgIG9sUkUgPSAvXlswLTldXC5ccysvCiAgLCAgIGhlYWRlclJFID0gL14oPzpcPXszLH18LXszLH0pJC8KICAsICAgY29kZVJFID0gL14oazpcdHxcc3s0LH0pLwogICwgICB0ZXh0UkUgPSAvXlteXFsqX1xcPD5gXSsvOwoKICBmdW5jdGlvbiBzd2l0Y2hJbmxpbmUoc3RyZWFtLCBzdGF0ZSwgZikgewogICAgc3RhdGUuZiA9IHN0YXRlLmlubGluZSA9IGY7CiAgICByZXR1cm4gZihzdHJlYW0sIHN0YXRlKTsKICB9CgogIGZ1bmN0aW9uIHN3aXRjaEJsb2NrKHN0cmVhbSwgc3RhdGUsIGYpIHsKICAgIHN0YXRlLmYgPSBzdGF0ZS5ibG9jayA9IGY7CiAgICByZXR1cm4gZihzdHJlYW0sIHN0YXRlKTsKICB9CgoKICAvLyBCbG9ja3MKCiAgZnVuY3Rpb24gYmxvY2tOb3JtYWwoc3RyZWFtLCBzdGF0ZSkgewogICAgaWYgKHN0cmVhbS5tYXRjaChjb2RlUkUpKSB7CiAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTsKICAgICAgcmV0dXJuIGNvZGU7CiAgICB9CiAgICAKICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIAogICAgaWYgKHN0cmVhbS5wZWVrKCkgPT09ICcjJyB8fCBzdHJlYW0ubWF0Y2goaGVhZGVyUkUpKSB7CiAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTsKICAgICAgcmV0dXJuIGhlYWRlcjsKICAgIH0KICAgIGlmIChzdHJlYW0uZWF0KCc+JykpIHsKICAgICAgc3RhdGUuaW5kZW50YXRpb24rKzsKICAgICAgcmV0dXJuIHF1b3RlOwogICAgfQogICAgaWYgKHN0cmVhbS5wZWVrKCkgPT09ICdbJykgewogICAgICByZXR1cm4gc3dpdGNoSW5saW5lKHN0cmVhbSwgc3RhdGUsIGZvb3Rub3RlTGluayk7CiAgICB9CiAgICBpZiAoaHJSRS50ZXN0KHN0cmVhbS5wZWVrKCkpKSB7CiAgICAgIHZhciByZSA9IG5ldyBSZWdFeHAoJyg/OlxzKlsnK3N0cmVhbS5wZWVrKCkrJ10pezMsfSQnKTsKICAgICAgaWYgKHN0cmVhbS5tYXRjaChyZSwgdHJ1ZSkpIHsKICAgICAgICByZXR1cm4gaHI7CiAgICAgIH0KICAgIH0KICAgIAogICAgdmFyIG1hdGNoOwogICAgaWYgKG1hdGNoID0gc3RyZWFtLm1hdGNoKHVsUkUsIHRydWUpIHx8IHN0cmVhbS5tYXRjaChvbFJFLCB0cnVlKSkgewogICAgICBzdGF0ZS5pbmRlbnRhdGlvbiArPSBtYXRjaFswXS5sZW5ndGg7CiAgICAgIHJldHVybiBsaXN0OwogICAgfQogICAgCiAgICByZXR1cm4gc3dpdGNoSW5saW5lKHN0cmVhbSwgc3RhdGUsIHN0YXRlLmlubGluZSk7CiAgfQoKICBmdW5jdGlvbiBodG1sQmxvY2soc3RyZWFtLCBzdGF0ZSkgewogICAgdmFyIHN0eWxlID0gaHRtbE1vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZS5odG1sU3RhdGUpOwogICAgaWYgKHN0eWxlID09PSAndGFnJyAmJiBzdGF0ZS5odG1sU3RhdGUudHlwZSAhPT0gJ29wZW5UYWcnICYmICFzdGF0ZS5odG1sU3RhdGUuY29udGV4dCkgewogICAgICBzdGF0ZS5mID0gaW5saW5lTm9ybWFsOwogICAgICBzdGF0ZS5ibG9jayA9IGJsb2NrTm9ybWFsOwogICAgfQogICAgcmV0dXJuIHN0eWxlOwogIH0KCgogIC8vIElubGluZQogIGZ1bmN0aW9uIGdldFR5cGUoc3RhdGUpIHsKICAgIHJldHVybiBzdGF0ZS5zdHJvbmcgPyAoc3RhdGUuZW0gPyBlbXN0cm9uZyA6IHN0cm9uZykKICAgICAgICAgICAgICAgICAgICAgICAgOiAoc3RhdGUuZW0gPyBlbSAgICAgICA6IG51bGwpOwogIH0KCiAgZnVuY3Rpb24gaGFuZGxlVGV4dChzdHJlYW0sIHN0YXRlKSB7CiAgICBpZiAoc3RyZWFtLm1hdGNoKHRleHRSRSwgdHJ1ZSkpIHsKICAgICAgcmV0dXJuIGdldFR5cGUoc3RhdGUpOwogICAgfQogICAgcmV0dXJuIHVuZGVmaW5lZDsgICAgICAgIAogIH0KCiAgZnVuY3Rpb24gaW5saW5lTm9ybWFsKHN0cmVhbSwgc3RhdGUpIHsKICAgIHZhciBzdHlsZSA9IHN0YXRlLnRleHQoc3RyZWFtLCBzdGF0ZSkKICAgIGlmICh0eXBlb2Ygc3R5bGUgIT09ICd1bmRlZmluZWQnKQogICAgICByZXR1cm4gc3R5bGU7CiAgICAKICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7CiAgICAKICAgIGlmIChjaCA9PT0gJ1xcJykgewogICAgICBzdHJlYW0ubmV4dCgpOwogICAgICByZXR1cm4gZ2V0VHlwZShzdGF0ZSk7CiAgICB9CiAgICBpZiAoY2ggPT09ICdgJykgewogICAgICByZXR1cm4gc3dpdGNoSW5saW5lKHN0cmVhbSwgc3RhdGUsIGlubGluZUVsZW1lbnQoY29kZSwgJ2AnKSk7CiAgICB9CiAgICBpZiAoY2ggPT09ICdbJykgewogICAgICByZXR1cm4gc3dpdGNoSW5saW5lKHN0cmVhbSwgc3RhdGUsIGxpbmtUZXh0KTsKICAgIH0KICAgIGlmIChjaCA9PT0gJzwnICYmIHN0cmVhbS5tYXRjaCgvXlx3LywgZmFsc2UpKSB7CiAgICAgIHN0cmVhbS5iYWNrVXAoMSk7CiAgICAgIHJldHVybiBzd2l0Y2hCbG9jayhzdHJlYW0sIHN0YXRlLCBodG1sQmxvY2spOwogICAgfQoKICAgIHZhciB0ID0gZ2V0VHlwZShzdGF0ZSk7CiAgICBpZiAoY2ggPT09ICcqJyB8fCBjaCA9PT0gJ18nKSB7CiAgICAgIGlmIChzdHJlYW0uZWF0KGNoKSkgewogICAgICAgIHJldHVybiAoc3RhdGUuc3Ryb25nID0gIXN0YXRlLnN0cm9uZykgPyBnZXRUeXBlKHN0YXRlKSA6IHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIChzdGF0ZS5lbSA9ICFzdGF0ZS5lbSkgPyBnZXRUeXBlKHN0YXRlKSA6IHQ7CiAgICB9CiAgICAKICAgIHJldHVybiBnZXRUeXBlKHN0YXRlKTsKICB9CgogIGZ1bmN0aW9uIGxpbmtUZXh0KHN0cmVhbSwgc3RhdGUpIHsKICAgIHdoaWxlICghc3RyZWFtLmVvbCgpKSB7CiAgICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7CiAgICAgIGlmIChjaCA9PT0gJ1xcJykgc3RyZWFtLm5leHQoKTsKICAgICAgaWYgKGNoID09PSAnXScpIHsKICAgICAgICBzdGF0ZS5pbmxpbmUgPSBzdGF0ZS5mID0gbGlua0hyZWY7CiAgICAgICAgcmV0dXJuIGxpbmt0ZXh0OwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbGlua3RleHQ7CiAgfQoKICBmdW5jdGlvbiBsaW5rSHJlZihzdHJlYW0sIHN0YXRlKSB7CiAgICBzdHJlYW0uZWF0U3BhY2UoKTsKICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7CiAgICBpZiAoY2ggPT09ICcoJyB8fCBjaCA9PT0gJ1snKSB7CiAgICAgIHJldHVybiBzd2l0Y2hJbmxpbmUoc3RyZWFtLCBzdGF0ZSwgaW5saW5lRWxlbWVudChsaW5raHJlZiwgY2ggPT09ICcoJyA/ICcpJyA6ICddJykpOwogICAgfQogICAgcmV0dXJuICdlcnJvcic7CiAgfQoKICBmdW5jdGlvbiBmb290bm90ZUxpbmsoc3RyZWFtLCBzdGF0ZSkgewogICAgaWYgKHN0cmVhbS5tYXRjaCgvXlteXF1dKlxdOi8sIHRydWUpKSB7CiAgICAgIHN0YXRlLmYgPSBmb290bm90ZVVybDsKICAgICAgcmV0dXJuIGxpbmt0ZXh0OwogICAgfQogICAgcmV0dXJuIHN3aXRjaElubGluZShzdHJlYW0sIHN0YXRlLCBpbmxpbmVOb3JtYWwpOwogIH0KCiAgZnVuY3Rpb24gZm9vdG5vdGVVcmwoc3RyZWFtLCBzdGF0ZSkgewogICAgc3RyZWFtLmVhdFNwYWNlKCk7CiAgICBzdHJlYW0ubWF0Y2goL15bXlxzXSsvLCB0cnVlKTsKICAgIHN0YXRlLmYgPSBzdGF0ZS5pbmxpbmUgPSBpbmxpbmVOb3JtYWw7CiAgICByZXR1cm4gbGlua2hyZWY7CiAgfQoKICBmdW5jdGlvbiBpbmxpbmVSRShlbmRDaGFyKSB7CiAgICBpZiAoIWlubGluZVJFW2VuZENoYXJdKSB7CiAgICAgIC8vIG1hdGNoIGFueSBub3QtZXNjYXBlZC1ub24tZW5kQ2hhciBhbmQgYW55IGVzY2FwZWQgY2hhcgogICAgICAvLyB0aGVuIG1hdGNoIGVuZENoYXIgb3IgZW9sCiAgICAgIGlubGluZVJFW2VuZENoYXJdID0gbmV3IFJlZ0V4cCgnXig/OlteXFxcXFxcJyArIGVuZENoYXIgKyAnXXxcXFxcLikqKD86XFwnICsgZW5kQ2hhciArICd8JCknKTsKICAgIH0KICAgIHJldHVybiBpbmxpbmVSRVtlbmRDaGFyXTsKICB9CgogIGZ1bmN0aW9uIGlubGluZUVsZW1lbnQodHlwZSwgZW5kQ2hhciwgbmV4dCkgewogICAgbmV4dCA9IG5leHQgfHwgaW5saW5lTm9ybWFsOwogICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgc3RyZWFtLm1hdGNoKGlubGluZVJFKGVuZENoYXIpKTsKICAgICAgc3RhdGUuaW5saW5lID0gc3RhdGUuZiA9IG5leHQ7CiAgICAgIHJldHVybiB0eXBlOwogICAgfTsKICB9CgogIHJldHVybiB7CiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICBmOiBibG9ja05vcm1hbCwKICAgICAgICAKICAgICAgICBibG9jazogYmxvY2tOb3JtYWwsCiAgICAgICAgaHRtbFN0YXRlOiBodG1sTW9kZS5zdGFydFN0YXRlKCksCiAgICAgICAgaW5kZW50YXRpb246IDAsCiAgICAgICAgCiAgICAgICAgaW5saW5lOiBpbmxpbmVOb3JtYWwsCiAgICAgICAgdGV4dDogaGFuZGxlVGV4dCwKICAgICAgICBlbTogZmFsc2UsCiAgICAgICAgc3Ryb25nOiBmYWxzZQogICAgICB9OwogICAgfSwKCiAgICBjb3B5U3RhdGU6IGZ1bmN0aW9uKHMpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICBmOiBzLmYsCiAgICAgICAgCiAgICAgICAgYmxvY2s6IHMuYmxvY2ssCiAgICAgICAgaHRtbFN0YXRlOiBDb2RlTWlycm9yLmNvcHlTdGF0ZShodG1sTW9kZSwgcy5odG1sU3RhdGUpLAogICAgICAgIGluZGVudGF0aW9uOiBzLmluZGVudGF0aW9uLAogICAgICAgIAogICAgICAgIGlubGluZTogcy5pbmxpbmUsCiAgICAgICAgdGV4dDogcy50ZXh0LAogICAgICAgIGVtOiBzLmVtLAogICAgICAgIHN0cm9uZzogcy5zdHJvbmcKICAgICAgfTsKICAgIH0sCgogICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgaWYgKHN0cmVhbS5zb2woKSkgewogICAgICAgIHN0YXRlLmYgPSBzdGF0ZS5ibG9jazsKICAgICAgICB2YXIgcHJldmlvdXNJbmRlbnRhdGlvbiA9IHN0YXRlLmluZGVudGF0aW9uCiAgICAgICAgLCAgIGN1cnJlbnRJbmRlbnRhdGlvbiA9IDA7CiAgICAgICAgd2hpbGUgKHByZXZpb3VzSW5kZW50YXRpb24gPiAwKSB7CiAgICAgICAgICBpZiAoc3RyZWFtLmVhdCgnICcpKSB7CiAgICAgICAgICAgIHByZXZpb3VzSW5kZW50YXRpb24tLTsKICAgICAgICAgICAgY3VycmVudEluZGVudGF0aW9uKys7CiAgICAgICAgICB9IGVsc2UgaWYgKHByZXZpb3VzSW5kZW50YXRpb24gPj0gNCAmJiBzdHJlYW0uZWF0KCdcdCcpKSB7CiAgICAgICAgICAgIHByZXZpb3VzSW5kZW50YXRpb24gLT0gNDsKICAgICAgICAgICAgY3VycmVudEluZGVudGF0aW9uICs9IDQ7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgc3RhdGUuaW5kZW50YXRpb24gPSBjdXJyZW50SW5kZW50YXRpb247CiAgICAgICAgCiAgICAgICAgaWYgKGN1cnJlbnRJbmRlbnRhdGlvbiA+IDApIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIHJldHVybiBzdGF0ZS5mKHN0cmVhbSwgc3RhdGUpOwogICAgfSwKCiAgICBnZXRUeXBlOiBnZXRUeXBlCiAgfTsKCn0pOwoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtbWFya2Rvd24iLCAibWFya2Rvd24iKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/mysql/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/mysql/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IE15U1FMIG1vZGU8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJteXNxbC5qcyI+PC9zY3JpcHQ+CiAgICA8c3R5bGU+LkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO308L3N0eWxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBNeVNRTCBtb2RlPC9oMT4KICAgIDxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+Ci0tIENvbW1lbnQgZm9yIHRoZSBjb2RlCi0tIE15U1FMIE1vZGUgZm9yIENvZGVNaXJyb3IyIGJ5IE15U1FMVG9vbHMgaHR0cDovL2dpdGh1Yi5jb20vcGFydHlkcm9pZC9NeVNRTC1Ub29scwpTRUxFQ1QgIFVOSVFVRSBgdmFyMWAgYXMgYHZhcmlhYmxlYCwKICAgICAgICBNQVgoYHZhcjVgKSBhcyBgbWF4YCwKICAgICAgICBNSU4oYHZhcjVgKSBhcyBgbWluYCwKICAgICAgICBTVERFVihgdmFyNWApIGFzIGBkZXZgCkZST00gYHRhYmxlYAoKTEVGVCBKT0lOIGB0YWJsZTJgIE9OIGB2YXIyYCA9IGB2YXJpYWJsZWAKCk9SREVSIEJZIGB2YXIzYCBERVNDCkdST1VQIEJZIGBncm91cHZhcmAKCkxJTUlUIDAsMzA7Cgo8L3RleHRhcmVhPjwvZm9ybT4KICAgIDxzY3JpcHQ+CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7CiAgICAgICAgbW9kZTogInRleHQveC1teXNxbCIsCiAgICAgICAgdGFiTW9kZTogImluZGVudCIsCiAgICAgICAgbWF0Y2hCcmFja2V0czogdHJ1ZQogICAgICB9KTsKICAgIDwvc2NyaXB0PgoKICAgIDxwPjxzdHJvbmc+TUlNRSB0eXBlcyBkZWZpbmVkOjwvc3Ryb25nPiA8Y29kZT50ZXh0L3gtbXlzcWw8L2NvZGU+LjwvcD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/mysql/mysql.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKICoJTXlTUUwgTW9kZSBmb3IgQ29kZU1pcnJvciAyIGJ5IE15U1FMLVRvb2xzCiAqCUBhdXRob3IgSmFtZXMgVGhvcm5lIChwYXJ0eWRyb2lkKQogKglAbGluayAJaHR0cDovL2dpdGh1Yi5jb20vcGFydHlkcm9pZC9NeVNRTC1Ub29scwogKiAJQGxpbmsgCWh0dHA6Ly9teXNxbHRvb2xzLm9yZwogKglAdmVyc2lvbiAwMi9KYW4vMjAxMgoqLwpDb2RlTWlycm9yLmRlZmluZU1vZGUoIm15c3FsIiwgZnVuY3Rpb24oY29uZmlnKSB7CiAgdmFyIGluZGVudFVuaXQgPSBjb25maWcuaW5kZW50VW5pdDsKICB2YXIgY3VyUHVuYzsKCiAgZnVuY3Rpb24gd29yZFJlZ2V4cCh3b3JkcykgewogICAgcmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiICsgd29yZHMuam9pbigifCIpICsgIikkIiwgImkiKTsKICB9CiAgdmFyIG9wcyA9IHdvcmRSZWdleHAoWyJzdHIiLCAibGFuZyIsICJsYW5nbWF0Y2hlcyIsICJkYXRhdHlwZSIsICJib3VuZCIsICJzYW1ldGVybSIsICJpc2lyaSIsICJpc3VyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJpc2JsYW5rIiwgImlzbGl0ZXJhbCIsICJ1bmlvbiIsICJhIl0pOwogIHZhciBrZXl3b3JkcyA9IHdvcmRSZWdleHAoWwogIAkoJ0FDQ0VTU0lCTEUnKSwoJ0FMVEVSJyksKCdBUycpLCgnQkVGT1JFJyksKCdCSU5BUlknKSwoJ0JZJyksKCdDQVNFJyksKCdDSEFSQUNURVInKSwoJ0NPTFVNTicpLCgnQ09OVElOVUUnKSwoJ0NST1NTJyksKCdDVVJSRU5UX1RJTUVTVEFNUCcpLCgnREFUQUJBU0UnKSwoJ0RBWV9NSUNST1NFQ09ORCcpLCgnREVDJyksKCdERUZBVUxUJyksCgkoJ0RFU0MnKSwoJ0RJU1RJTkNUJyksKCdET1VCTEUnKSwoJ0VBQ0gnKSwoJ0VOQ0xPU0VEJyksKCdFWElUJyksKCdGRVRDSCcpLCgnRkxPQVQ4JyksKCdGT1JFSUdOJyksKCdHUkFOVCcpLCgnSElHSF9QUklPUklUWScpLCgnSE9VUl9TRUNPTkQnKSwoJ0lOJyksKCdJTk5FUicpLCgnSU5TRVJUJyksKCdJTlQyJyksKCdJTlQ4JyksCgkoJ0lOVE8nKSwoJ0pPSU4nKSwoJ0tJTEwnKSwoJ0xFRlQnKSwoJ0xJTkVBUicpLCgnTE9DQUxUSU1FJyksKCdMT05HJyksKCdMT09QJyksKCdNQVRDSCcpLCgnTUVESVVNVEVYVCcpLCgnTUlOVVRFX1NFQ09ORCcpLCgnTkFUVVJBTCcpLCgnTlVMTCcpLCgnT1BUSU1JWkUnKSwoJ09SJyksKCdPVVRFUicpLCgnUFJJTUFSWScpLAoJKCdSQU5HRScpLCgnUkVBRF9XUklURScpLCgnUkVHRVhQJyksKCdSRVBFQVQnKSwoJ1JFU1RSSUNUJyksKCdSSUdIVCcpLCgnU0NIRU1BUycpLCgnU0VOU0lUSVZFJyksKCdTSE9XJyksKCdTUEVDSUZJQycpLCgnU1FMU1RBVEUnKSwoJ1NRTF9DQUxDX0ZPVU5EX1JPV1MnKSwoJ1NUQVJUSU5HJyksKCdURVJNSU5BVEVEJyksCgkoJ1RJTllJTlQnKSwoJ1RSQUlMSU5HJyksKCdVTkRPJyksKCdVTkxPQ0snKSwoJ1VTQUdFJyksKCdVVENfREFURScpLCgnVkFMVUVTJyksKCdWQVJDSEFSQUNURVInKSwoJ1dIRVJFJyksKCdXUklURScpLCgnWkVST0ZJTEwnKSwoJ0FMTCcpLCgnQU5EJyksKCdBU0VOU0lUSVZFJyksKCdCSUdJTlQnKSwoJ0JPVEgnKSwoJ0NBU0NBREUnKSwKCSgnQ0hBUicpLCgnQ09MTEFURScpLCgnQ09OU1RSQUlOVCcpLCgnQ1JFQVRFJyksKCdDVVJSRU5UX1RJTUUnKSwoJ0NVUlNPUicpLCgnREFZX0hPVVInKSwoJ0RBWV9TRUNPTkQnKSwoJ0RFQ0xBUkUnKSwoJ0RFTEVURScpLCgnREVURVJNSU5JU1RJQycpLCgnRElWJyksKCdEVUFMJyksKCdFTFNFSUYnKSwoJ0VYSVNUUycpLCgnRkFMU0UnKSwKCSgnRkxPQVQ0JyksKCdGT1JDRScpLCgnRlVMTFRFWFQnKSwoJ0hBVklORycpLCgnSE9VUl9NSU5VVEUnKSwoJ0lHTk9SRScpLCgnSU5GSUxFJyksKCdJTlNFTlNJVElWRScpLCgnSU5UMScpLCgnSU5UNCcpLCgnSU5URVJWQUwnKSwoJ0lURVJBVEUnKSwoJ0tFWVMnKSwoJ0xFQVZFJyksKCdMSU1JVCcpLCgnTE9BRCcpLCgnTE9DSycpLAoJKCdMT05HVEVYVCcpLCgnTUFTVEVSX1NTTF9WRVJJRllfU0VSVkVSX0NFUlQnKSwoJ01FRElVTUlOVCcpLCgnTUlOVVRFX01JQ1JPU0VDT05EJyksKCdNT0RJRklFUycpLCgnTk9fV1JJVEVfVE9fQklOTE9HJyksKCdPTicpLCgnT1BUSU9OQUxMWScpLCgnT1VUJyksKCdQUkVDSVNJT04nKSwoJ1BVUkdFJyksKCdSRUFEUycpLAoJKCdSRUZFUkVOQ0VTJyksKCdSRU5BTUUnKSwoJ1JFUVVJUkUnKSwoJ1JFVk9LRScpLCgnU0NIRU1BJyksKCdTRUxFQ1QnKSwoJ1NFVCcpLCgnU1BBVElBTCcpLCgnU1FMRVhDRVBUSU9OJyksKCdTUUxfQklHX1JFU1VMVCcpLCgnU1NMJyksKCdUQUJMRScpLCgnVElOWUJMT0InKSwoJ1RPJyksKCdUUlVFJyksKCdVTklRVUUnKSwKCSgnVVBEQVRFJyksKCdVU0lORycpLCgnVVRDX1RJTUVTVEFNUCcpLCgnVkFSQ0hBUicpLCgnV0hFTicpLCgnV0lUSCcpLCgnWUVBUl9NT05USCcpLCgnQUREJyksKCdBTkFMWVpFJyksKCdBU0MnKSwoJ0JFVFdFRU4nKSwoJ0JMT0InKSwoJ0NBTEwnKSwoJ0NIQU5HRScpLCgnQ0hFQ0snKSwoJ0NPTkRJVElPTicpLCgnQ09OVkVSVCcpLAoJKCdDVVJSRU5UX0RBVEUnKSwoJ0NVUlJFTlRfVVNFUicpLCgnREFUQUJBU0VTJyksKCdEQVlfTUlOVVRFJyksKCdERUNJTUFMJyksKCdERUxBWUVEJyksKCdERVNDUklCRScpLCgnRElTVElOQ1RST1cnKSwoJ0RST1AnKSwoJ0VMU0UnKSwoJ0VTQ0FQRUQnKSwoJ0VYUExBSU4nKSwoJ0ZMT0FUJyksKCdGT1InKSwoJ0ZST00nKSwKCSgnR1JPVVAnKSwoJ0hPVVJfTUlDUk9TRUNPTkQnKSwoJ0lGJyksKCdJTkRFWCcpLCgnSU5PVVQnKSwoJ0lOVCcpLCgnSU5UMycpLCgnSU5URUdFUicpLCgnSVMnKSwoJ0tFWScpLCgnTEVBRElORycpLCgnTElLRScpLCgnTElORVMnKSwoJ0xPQ0FMVElNRVNUQU1QJyksKCdMT05HQkxPQicpLCgnTE9XX1BSSU9SSVRZJyksCgkoJ01FRElVTUJMT0InKSwoJ01JRERMRUlOVCcpLCgnTU9EJyksKCdOT1QnKSwoJ05VTUVSSUMnKSwoJ09QVElPTicpLCgnT1JERVInKSwoJ09VVEZJTEUnKSwoJ1BST0NFRFVSRScpLCgnUkVBRCcpLCgnUkVBTCcpLCgnUkVMRUFTRScpLCgnUkVQTEFDRScpLCgnUkVUVVJOJyksKCdSTElLRScpLCgnU0VDT05EX01JQ1JPU0VDT05EJyksCgkoJ1NFUEFSQVRPUicpLCgnU01BTExJTlQnKSwoJ1NRTCcpLCgnU1FMV0FSTklORycpLCgnU1FMX1NNQUxMX1JFU1VMVCcpLCgnU1RSQUlHSFRfSk9JTicpLCgnVEhFTicpLCgnVElOWVRFWFQnKSwoJ1RSSUdHRVInKSwoJ1VOSU9OJyksKCdVTlNJR05FRCcpLCgnVVNFJyksKCdVVENfVElNRScpLCgnVkFSQklOQVJZJyksKCdWQVJZSU5HJyksCgkoJ1dISUxFJyksKCdYT1InKSwoJ0ZVTEwnKSwoJ0NPTFVNTlMnKSwoJ01JTicpLCgnTUFYJyksKCdTVERFVicpLCgnQ09VTlQnKQogIF0pOwogIHZhciBvcGVyYXRvckNoYXJzID0gL1sqK1wtPD49JnxdLzsKCiAgZnVuY3Rpb24gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpIHsKICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7CiAgICBjdXJQdW5jID0gbnVsbDsKICAgIGlmIChjaCA9PSAiJCIgfHwgY2ggPT0gIj8iKSB7CiAgICAgIHN0cmVhbS5tYXRjaCgvXltcd1xkXSovKTsKICAgICAgcmV0dXJuICJ2YXJpYWJsZS0yIjsKICAgIH0KICAgIGVsc2UgaWYgKGNoID09ICI8IiAmJiAhc3RyZWFtLm1hdGNoKC9eW1xzXHUwMGEwPV0vLCBmYWxzZSkpIHsKICAgICAgc3RyZWFtLm1hdGNoKC9eW15cc1x1MDBhMD5dKj4/Lyk7CiAgICAgIHJldHVybiAiYXRvbSI7CiAgICB9CiAgICBlbHNlIGlmIChjaCA9PSAiXCIiIHx8IGNoID09ICInIikgewogICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuTGl0ZXJhbChjaCk7CiAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgIH0KICAgIGVsc2UgaWYgKGNoID09ICJgIikgewogICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuT3BMaXRlcmFsKGNoKTsKICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwogICAgfQogICAgZWxzZSBpZiAoL1t7fVwoXCksXC47XFtcXV0vLnRlc3QoY2gpKSB7CiAgICAgIGN1clB1bmMgPSBjaDsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBlbHNlIGlmIChjaCA9PSAiLSIpIHsKCQljaDIgPSBzdHJlYW0ubmV4dCgpOwoJCWlmKGNoMj09Ii0iKQoJCXsKCQkJc3RyZWFtLnNraXBUb0VuZCgpOwoJCQlyZXR1cm4gImNvbW1lbnQiOwoJCX0KCiAgICB9CiAgICBlbHNlIGlmIChvcGVyYXRvckNoYXJzLnRlc3QoY2gpKSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZShvcGVyYXRvckNoYXJzKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBlbHNlIGlmIChjaCA9PSAiOiIpIHsKICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcZFwuX1wtXS8pOwogICAgICByZXR1cm4gImF0b20iOwogICAgfQogICAgZWxzZSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW19cd1xkXS8pOwogICAgICBpZiAoc3RyZWFtLmVhdCgiOiIpKSB7CiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcZF9cLV0vKTsKICAgICAgICByZXR1cm4gImF0b20iOwogICAgICB9CiAgICAgIHZhciB3b3JkID0gc3RyZWFtLmN1cnJlbnQoKSwgdHlwZTsKICAgICAgaWYgKG9wcy50ZXN0KHdvcmQpKQogICAgICAgIHJldHVybiBudWxsOwogICAgICBlbHNlIGlmIChrZXl3b3Jkcy50ZXN0KHdvcmQpKQogICAgICAgIHJldHVybiAia2V5d29yZCI7CiAgICAgIGVsc2UKICAgICAgICByZXR1cm4gInZhcmlhYmxlIjsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHRva2VuTGl0ZXJhbChxdW90ZSkgewogICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgY2g7CiAgICAgIHdoaWxlICgoY2ggPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgICAgaWYgKGNoID09IHF1b3RlICYmICFlc2NhcGVkKSB7CiAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBlc2NhcGVkID0gIWVzY2FwZWQgJiYgY2ggPT0gIlxcIjsKICAgICAgfQogICAgICByZXR1cm4gInN0cmluZyI7CiAgICB9OwogIH0KCiAgZnVuY3Rpb24gdG9rZW5PcExpdGVyYWwocXVvdGUpIHsKICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgIHZhciBlc2NhcGVkID0gZmFsc2UsIGNoOwogICAgICB3aGlsZSAoKGNoID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkgewogICAgICAgIGlmIChjaCA9PSBxdW90ZSAmJiAhZXNjYXBlZCkgewogICAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkICYmIGNoID09ICJcXCI7CiAgICAgIH0KICAgICAgcmV0dXJuICJ2YXJpYWJsZS0yIjsKICAgIH07CiAgfQoKCiAgZnVuY3Rpb24gcHVzaENvbnRleHQoc3RhdGUsIHR5cGUsIGNvbCkgewogICAgc3RhdGUuY29udGV4dCA9IHtwcmV2OiBzdGF0ZS5jb250ZXh0LCBpbmRlbnQ6IHN0YXRlLmluZGVudCwgY29sOiBjb2wsIHR5cGU6IHR5cGV9OwogIH0KICBmdW5jdGlvbiBwb3BDb250ZXh0KHN0YXRlKSB7CiAgICBzdGF0ZS5pbmRlbnQgPSBzdGF0ZS5jb250ZXh0LmluZGVudDsKICAgIHN0YXRlLmNvbnRleHQgPSBzdGF0ZS5jb250ZXh0LnByZXY7CiAgfQoKICByZXR1cm4gewogICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oYmFzZSkgewogICAgICByZXR1cm4ge3Rva2VuaXplOiB0b2tlbkJhc2UsCiAgICAgICAgICAgICAgY29udGV4dDogbnVsbCwKICAgICAgICAgICAgICBpbmRlbnQ6IDAsCiAgICAgICAgICAgICAgY29sOiAwfTsKICAgIH0sCgogICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgaWYgKHN0cmVhbS5zb2woKSkgewogICAgICAgIGlmIChzdGF0ZS5jb250ZXh0ICYmIHN0YXRlLmNvbnRleHQuYWxpZ24gPT0gbnVsbCkgc3RhdGUuY29udGV4dC5hbGlnbiA9IGZhbHNlOwogICAgICAgIHN0YXRlLmluZGVudCA9IHN0cmVhbS5pbmRlbnRhdGlvbigpOwogICAgICB9CiAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7CiAgICAgIHZhciBzdHlsZSA9IHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwoKICAgICAgaWYgKHN0eWxlICE9ICJjb21tZW50IiAmJiBzdGF0ZS5jb250ZXh0ICYmIHN0YXRlLmNvbnRleHQuYWxpZ24gPT0gbnVsbCAmJiBzdGF0ZS5jb250ZXh0LnR5cGUgIT0gInBhdHRlcm4iKSB7CiAgICAgICAgc3RhdGUuY29udGV4dC5hbGlnbiA9IHRydWU7CiAgICAgIH0KCiAgICAgIGlmIChjdXJQdW5jID09ICIoIikgcHVzaENvbnRleHQoc3RhdGUsICIpIiwgc3RyZWFtLmNvbHVtbigpKTsKICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSAiWyIpIHB1c2hDb250ZXh0KHN0YXRlLCAiXSIsIHN0cmVhbS5jb2x1bW4oKSk7CiAgICAgIGVsc2UgaWYgKGN1clB1bmMgPT0gInsiKSBwdXNoQ29udGV4dChzdGF0ZSwgIn0iLCBzdHJlYW0uY29sdW1uKCkpOwogICAgICBlbHNlIGlmICgvW1xdXH1cKV0vLnRlc3QoY3VyUHVuYykpIHsKICAgICAgICB3aGlsZSAoc3RhdGUuY29udGV4dCAmJiBzdGF0ZS5jb250ZXh0LnR5cGUgPT0gInBhdHRlcm4iKSBwb3BDb250ZXh0KHN0YXRlKTsKICAgICAgICBpZiAoc3RhdGUuY29udGV4dCAmJiBjdXJQdW5jID09IHN0YXRlLmNvbnRleHQudHlwZSkgcG9wQ29udGV4dChzdGF0ZSk7CiAgICAgIH0KICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSAiLiIgJiYgc3RhdGUuY29udGV4dCAmJiBzdGF0ZS5jb250ZXh0LnR5cGUgPT0gInBhdHRlcm4iKSBwb3BDb250ZXh0KHN0YXRlKTsKICAgICAgZWxzZSBpZiAoL2F0b218c3RyaW5nfHZhcmlhYmxlLy50ZXN0KHN0eWxlKSAmJiBzdGF0ZS5jb250ZXh0KSB7CiAgICAgICAgaWYgKC9bXH1cXV0vLnRlc3Qoc3RhdGUuY29udGV4dC50eXBlKSkKICAgICAgICAgIHB1c2hDb250ZXh0KHN0YXRlLCAicGF0dGVybiIsIHN0cmVhbS5jb2x1bW4oKSk7CiAgICAgICAgZWxzZSBpZiAoc3RhdGUuY29udGV4dC50eXBlID09ICJwYXR0ZXJuIiAmJiAhc3RhdGUuY29udGV4dC5hbGlnbikgewogICAgICAgICAgc3RhdGUuY29udGV4dC5hbGlnbiA9IHRydWU7CiAgICAgICAgICBzdGF0ZS5jb250ZXh0LmNvbCA9IHN0cmVhbS5jb2x1bW4oKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHJldHVybiBzdHlsZTsKICAgIH0sCgogICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7CiAgICAgIHZhciBmaXJzdENoYXIgPSB0ZXh0QWZ0ZXIgJiYgdGV4dEFmdGVyLmNoYXJBdCgwKTsKICAgICAgdmFyIGNvbnRleHQgPSBzdGF0ZS5jb250ZXh0OwogICAgICBpZiAoL1tcXVx9XS8udGVzdChmaXJzdENoYXIpKQogICAgICAgIHdoaWxlIChjb250ZXh0ICYmIGNvbnRleHQudHlwZSA9PSAicGF0dGVybiIpIGNvbnRleHQgPSBjb250ZXh0LnByZXY7CgogICAgICB2YXIgY2xvc2luZyA9IGNvbnRleHQgJiYgZmlyc3RDaGFyID09IGNvbnRleHQudHlwZTsKICAgICAgaWYgKCFjb250ZXh0KQogICAgICAgIHJldHVybiAwOwogICAgICBlbHNlIGlmIChjb250ZXh0LnR5cGUgPT0gInBhdHRlcm4iKQogICAgICAgIHJldHVybiBjb250ZXh0LmNvbDsKICAgICAgZWxzZSBpZiAoY29udGV4dC5hbGlnbikKICAgICAgICByZXR1cm4gY29udGV4dC5jb2wgKyAoY2xvc2luZyA/IDAgOiAxKTsKICAgICAgZWxzZQogICAgICAgIHJldHVybiBjb250ZXh0LmluZGVudCArIChjbG9zaW5nID8gMCA6IGluZGVudFVuaXQpOwogICAgfQogIH07Cn0pOwoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtbXlzcWwiLCAibXlzcWwiKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/ntriples/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/ntriples/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IE5UcmlwbGVzIG1vZGU8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJudHJpcGxlcy5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2RvYy9kb2NzLmNzcyI+CiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgogICAgICAuQ29kZU1pcnJvciB7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2VlZTsKICAgICAgfQogICAgPC9zdHlsZT4gICAKICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogTlRyaXBsZXMgbW9kZTwvaDE+Cjxmb3JtPgo8dGV4dGFyZWEgaWQ9Im50cmlwbGVzIiBuYW1lPSJudHJpcGxlcyI+ICAgIAo8aHR0cDovL1N1YjE+ICAgICA8aHR0cDovL3ByZWQxPiAgICAgPGh0dHA6Ly9vYmo+IC4KPGh0dHA6Ly9TdWIyPiAgICAgPGh0dHA6Ly9wcmVkMiNhbjI+ICJsaXRlcmFsIDEiIC4KPGh0dHA6Ly9TdWIzI2FuMz4gPGh0dHA6Ly9wcmVkMz4gICAgIF86Ym5vZGUzIC4KXzpibm9kZTQgICAgICAgICAgPGh0dHA6Ly9wcmVkND4gICAgICJsaXRlcmFsIDIiQGxhbmcgLgpfOmJub2RlNSAgICAgICAgICA8aHR0cDovL3ByZWQ1PiAgICAgImxpdGVyYWwgMyJeXjxodHRwOi8vdHlwZT4gLgo8L3RleHRhcmVhPgo8L2Zvcm0+CgogICAgPHNjcmlwdD4KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJudHJpcGxlcyIpLCB7fSk7CiAgICA8L3NjcmlwdD4KICAgIDxwPjxzdHJvbmc+TUlNRSB0eXBlcyBkZWZpbmVkOjwvc3Ryb25nPiA8Y29kZT50ZXh0L24tdHJpcGxlczwvY29kZT4uPC9wPgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/ntriples/ntriples.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBUaGlzIHNjcmlwdCBwcm92aWRlcyBzeW50YXggaGlnaGxpZ2h0aW5nIHN1cHBvcnQgZm9yIAoqIHRoZSBOdHJpcGxlcyBmb3JtYXQuCiogTnRyaXBsZXMgZm9ybWF0IHNwZWNpZmljYXRpb246IAoqICAgICBodHRwOi8vd3d3LnczLm9yZy9UUi9yZGYtdGVzdGNhc2VzLyNudHJpcGxlcwoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCi8qIAogICAgVGhlIGZvbGxvd2luZyBleHByZXNzaW9uIGRlZmluZXMgdGhlIGRlZmluZWQgQVNGIGdyYW1tYXIgdHJhbnNpdGlvbnMuCgogICAgcHJlX3N1YmplY3QgLT4KICAgICAgICB7CiAgICAgICAgKCB3cml0aW5nX3N1YmplY3RfdXJpIHwgd3JpdGluZ19ibm9kZV91cmkgKQogICAgICAgICAgICAtPiBwcmVfcHJlZGljYXRlIAogICAgICAgICAgICAgICAgLT4gd3JpdGluZ19wcmVkaWNhdGVfdXJpIAogICAgICAgICAgICAgICAgICAgIC0+IHByZV9vYmplY3QgCiAgICAgICAgICAgICAgICAgICAgICAgIC0+IHdyaXRpbmdfb2JqZWN0X3VyaSB8IHdyaXRpbmdfb2JqZWN0X2Jub2RlIHwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgKCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRpbmdfb2JqZWN0X2xpdGVyYWwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gd3JpdGluZ19saXRlcmFsX2xhbmcgfCB3cml0aW5nX2xpdGVyYWxfdHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IHBvc3Rfb2JqZWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gQkVHSU4KICAgICAgICAgfSBvdGhlcndpc2UgewogICAgICAgICAgICAgLT4gRVJST1IKICAgICAgICAgfQoqLwpDb2RlTWlycm9yLmRlZmluZU1vZGUoIm50cmlwbGVzIiwgZnVuY3Rpb24oKSB7ICAKCiAgTG9jYXRpb24gPSB7CiAgICBQUkVfU1VCSkVDVCAgICAgICAgIDogMCwKICAgIFdSSVRJTkdfU1VCX1VSSSAgICAgOiAxLAogICAgV1JJVElOR19CTk9ERV9VUkkgICA6IDIsCiAgICBQUkVfUFJFRCAgICAgICAgICAgIDogMywKICAgIFdSSVRJTkdfUFJFRF9VUkkgICAgOiA0LAogICAgUFJFX09CSiAgICAgICAgICAgICA6IDUsCiAgICBXUklUSU5HX09CSl9VUkkgICAgIDogNiwKICAgIFdSSVRJTkdfT0JKX0JOT0RFICAgOiA3LAogICAgV1JJVElOR19PQkpfTElURVJBTCA6IDgsCiAgICBXUklUSU5HX0xJVF9MQU5HICAgIDogOSwKICAgIFdSSVRJTkdfTElUX1RZUEUgICAgOiAxMCwKICAgIFBPU1RfT0JKICAgICAgICAgICAgOiAxMSwKICAgIEVSUk9SICAgICAgICAgICAgICAgOiAxMgogIH07CiAgZnVuY3Rpb24gdHJhbnNpdFN0YXRlKGN1cnJTdGF0ZSwgYykgewogICAgdmFyIGN1cnJMb2NhdGlvbiA9IGN1cnJTdGF0ZS5sb2NhdGlvbjsKICAgIHZhciByZXQ7CiAgICAKICAgIC8vIE9wZW5pbmcuCiAgICBpZiAgICAgKGN1cnJMb2NhdGlvbiA9PSBMb2NhdGlvbi5QUkVfU1VCSkVDVCAmJiBjID09ICc8JykgcmV0ID0gTG9jYXRpb24uV1JJVElOR19TVUJfVVJJOwogICAgZWxzZSBpZihjdXJyTG9jYXRpb24gPT0gTG9jYXRpb24uUFJFX1NVQkpFQ1QgJiYgYyA9PSAnXycpIHJldCA9IExvY2F0aW9uLldSSVRJTkdfQk5PREVfVVJJOwogICAgZWxzZSBpZihjdXJyTG9jYXRpb24gPT0gTG9jYXRpb24uUFJFX1BSRUQgICAgJiYgYyA9PSAnPCcpIHJldCA9IExvY2F0aW9uLldSSVRJTkdfUFJFRF9VUkk7CiAgICBlbHNlIGlmKGN1cnJMb2NhdGlvbiA9PSBMb2NhdGlvbi5QUkVfT0JKICAgICAmJiBjID09ICc8JykgcmV0ID0gTG9jYXRpb24uV1JJVElOR19PQkpfVVJJOwogICAgZWxzZSBpZihjdXJyTG9jYXRpb24gPT0gTG9jYXRpb24uUFJFX09CSiAgICAgJiYgYyA9PSAnXycpIHJldCA9IExvY2F0aW9uLldSSVRJTkdfT0JKX0JOT0RFOwogICAgZWxzZSBpZihjdXJyTG9jYXRpb24gPT0gTG9jYXRpb24uUFJFX09CSiAgICAgJiYgYyA9PSAnIicpIHJldCA9IExvY2F0aW9uLldSSVRJTkdfT0JKX0xJVEVSQUw7CiAgICAKICAgIC8vIENsb3NpbmcuCiAgICBlbHNlIGlmKGN1cnJMb2NhdGlvbiA9PSBMb2NhdGlvbi5XUklUSU5HX1NVQl9VUkkgICAgICYmIGMgPT0gJz4nKSByZXQgPSBMb2NhdGlvbi5QUkVfUFJFRDsKICAgIGVsc2UgaWYoY3VyckxvY2F0aW9uID09IExvY2F0aW9uLldSSVRJTkdfQk5PREVfVVJJICAgJiYgYyA9PSAnICcpIHJldCA9IExvY2F0aW9uLlBSRV9QUkVEOwogICAgZWxzZSBpZihjdXJyTG9jYXRpb24gPT0gTG9jYXRpb24uV1JJVElOR19QUkVEX1VSSSAgICAmJiBjID09ICc+JykgcmV0ID0gTG9jYXRpb24uUFJFX09CSjsKICAgIGVsc2UgaWYoY3VyckxvY2F0aW9uID09IExvY2F0aW9uLldSSVRJTkdfT0JKX1VSSSAgICAgJiYgYyA9PSAnPicpIHJldCA9IExvY2F0aW9uLlBPU1RfT0JKOwogICAgZWxzZSBpZihjdXJyTG9jYXRpb24gPT0gTG9jYXRpb24uV1JJVElOR19PQkpfQk5PREUgICAmJiBjID09ICcgJykgcmV0ID0gTG9jYXRpb24uUE9TVF9PQko7CiAgICBlbHNlIGlmKGN1cnJMb2NhdGlvbiA9PSBMb2NhdGlvbi5XUklUSU5HX09CSl9MSVRFUkFMICYmIGMgPT0gJyInKSByZXQgPSBMb2NhdGlvbi5QT1NUX09CSjsKICAgIGVsc2UgaWYoY3VyckxvY2F0aW9uID09IExvY2F0aW9uLldSSVRJTkdfTElUX0xBTkcgJiYgYyA9PSAnICcpIHJldCA9IExvY2F0aW9uLlBPU1RfT0JKOwogICAgZWxzZSBpZihjdXJyTG9jYXRpb24gPT0gTG9jYXRpb24uV1JJVElOR19MSVRfVFlQRSAmJiBjID09ICc+JykgcmV0ID0gTG9jYXRpb24uUE9TVF9PQko7CiAgICAKICAgIC8vIENsb3NpbmcgdHlwZWQgYW5kIGxhbmd1YWdlIGxpdGVyYWwuCiAgICBlbHNlIGlmKGN1cnJMb2NhdGlvbiA9PSBMb2NhdGlvbi5XUklUSU5HX09CSl9MSVRFUkFMICYmIGMgPT0gJ0AnKSByZXQgPSBMb2NhdGlvbi5XUklUSU5HX0xJVF9MQU5HOwogICAgZWxzZSBpZihjdXJyTG9jYXRpb24gPT0gTG9jYXRpb24uV1JJVElOR19PQkpfTElURVJBTCAmJiBjID09ICdeJykgcmV0ID0gTG9jYXRpb24uV1JJVElOR19MSVRfVFlQRTsKCiAgICAvLyBTcGFjZXMuCiAgICBlbHNlIGlmKCBjID09ICcgJyAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgIGN1cnJMb2NhdGlvbiA9PSBMb2NhdGlvbi5QUkVfU1VCSkVDVCB8fCAKICAgICAgICAgICAgICAgY3VyckxvY2F0aW9uID09IExvY2F0aW9uLlBSRV9QUkVEICAgIHx8IAogICAgICAgICAgICAgICBjdXJyTG9jYXRpb24gPT0gTG9jYXRpb24uUFJFX09CSiAgICAgfHwgCiAgICAgICAgICAgICAgIGN1cnJMb2NhdGlvbiA9PSBMb2NhdGlvbi5QT1NUX09CSgogICAgICAgICAgICAgKQogICAgICAgICAgICkgcmV0ID0gY3VyckxvY2F0aW9uOwogICAgCiAgICAvLyBSZXNldC4KICAgIGVsc2UgaWYoY3VyckxvY2F0aW9uID09IExvY2F0aW9uLlBPU1RfT0JKICYmIGMgPT0gJy4nKSByZXQgPSBMb2NhdGlvbi5QUkVfU1VCSkVDVDsgICAgCiAgICAKICAgIC8vIEVycm9yCiAgICBlbHNlIHJldCA9IExvY2F0aW9uLkVSUk9SOwogICAgCiAgICBjdXJyU3RhdGUubG9jYXRpb249cmV0OwogIH0KCiAgdW50aWxTcGFjZSAgPSBmdW5jdGlvbihjKSB7IHJldHVybiBjICE9ICcgJzsgfTsKICB1bnRpbEVuZFVSSSA9IGZ1bmN0aW9uKGMpIHsgcmV0dXJuIGMgIT0gJz4nOyB9OwogIHJldHVybiB7CiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbigpIHsKICAgICAgIHJldHVybiB7IAogICAgICAgICAgIGxvY2F0aW9uIDogTG9jYXRpb24uUFJFX1NVQkpFQ1QsCiAgICAgICAgICAgdXJpcyAgICAgOiBbXSwKICAgICAgICAgICBhbmNob3JzICA6IFtdLAogICAgICAgICAgIGJub2RlcyAgIDogW10sCiAgICAgICAgICAgbGFuZ3MgICAgOiBbXSwKICAgICAgICAgICB0eXBlcyAgICA6IFtdCiAgICAgICB9OwogICAgfSwKICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7CiAgICAgIGlmKGNoID09ICc8JykgewogICAgICAgICB0cmFuc2l0U3RhdGUoc3RhdGUsIGNoKTsKICAgICAgICAgdmFyIHBhcnNlZFVSSSA9ICcnOwogICAgICAgICBzdHJlYW0uZWF0V2hpbGUoIGZ1bmN0aW9uKGMpIHsgaWYoIGMgIT0gJyMnICYmIGMgIT0gJz4nICkgeyBwYXJzZWRVUkkgKz0gYzsgcmV0dXJuIHRydWU7IH0gcmV0dXJuIGZhbHNlO30gKTsKICAgICAgICAgc3RhdGUudXJpcy5wdXNoKHBhcnNlZFVSSSk7CiAgICAgICAgIGlmKCBzdHJlYW0ubWF0Y2goJyMnLCBmYWxzZSkgKSByZXR1cm4gJ3ZhcmlhYmxlJzsKICAgICAgICAgc3RyZWFtLm5leHQoKTsKICAgICAgICAgdHJhbnNpdFN0YXRlKHN0YXRlLCAnPicpOwogICAgICAgICByZXR1cm4gJ3ZhcmlhYmxlJzsKICAgICAgfQogICAgICBpZihjaCA9PSAnIycpIHsKICAgICAgICB2YXIgcGFyc2VkQW5jaG9yID0gJyc7CiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKGZ1bmN0aW9uKGMpIHsgaWYoYyAhPSAnPicgJiYgYyAhPSAnICcpIHsgcGFyc2VkQW5jaG9yKz0gYzsgcmV0dXJuIHRydWU7IH0gcmV0dXJuIGZhbHNlfSk7CiAgICAgICAgc3RhdGUuYW5jaG9ycy5wdXNoKHBhcnNlZEFuY2hvcik7CiAgICAgICAgcmV0dXJuICd2YXJpYWJsZS0yJzsKICAgICAgfQogICAgICBpZihjaCA9PSAnPicpIHsKICAgICAgICAgIHRyYW5zaXRTdGF0ZShzdGF0ZSwgJz4nKTsKICAgICAgICAgIHJldHVybiAndmFyaWFibGUnOwogICAgICB9CiAgICAgIGlmKGNoID09ICdfJykgewogICAgICAgICAgdHJhbnNpdFN0YXRlKHN0YXRlLCBjaCk7CiAgICAgICAgICB2YXIgcGFyc2VkQk5vZGUgPSAnJzsKICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZShmdW5jdGlvbihjKSB7IGlmKCBjICE9ICcgJyApIHsgcGFyc2VkQk5vZGUgKz0gYzsgcmV0dXJuIHRydWU7IH0gcmV0dXJuIGZhbHNlO30pOwogICAgICAgICAgc3RhdGUuYm5vZGVzLnB1c2gocGFyc2VkQk5vZGUpOwogICAgICAgICAgc3RyZWFtLm5leHQoKTsKICAgICAgICAgIHRyYW5zaXRTdGF0ZShzdGF0ZSwgJyAnKTsKICAgICAgICAgIHJldHVybiAnYnVpbHRpbic7CiAgICAgIH0KICAgICAgaWYoY2ggPT0gJyInKSB7CiAgICAgICAgICB0cmFuc2l0U3RhdGUoc3RhdGUsIGNoKTsKICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZSggZnVuY3Rpb24oYykgeyByZXR1cm4gYyAhPSAnIic7IH0gKTsKICAgICAgICAgIHN0cmVhbS5uZXh0KCk7CiAgICAgICAgICBpZiggc3RyZWFtLnBlZWsoKSAhPSAnQCcgJiYgc3RyZWFtLnBlZWsoKSAhPSAnXicgKSB7CiAgICAgICAgICAgICAgdHJhbnNpdFN0YXRlKHN0YXRlLCAnIicpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuICdzdHJpbmcnOwogICAgICB9CiAgICAgIGlmKCBjaCA9PSAnQCcgKSB7CiAgICAgICAgICB0cmFuc2l0U3RhdGUoc3RhdGUsICdAJyk7CiAgICAgICAgICB2YXIgcGFyc2VkTGFuZyA9ICcnOwogICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKGZ1bmN0aW9uKGMpIHsgaWYoIGMgIT0gJyAnICkgeyBwYXJzZWRMYW5nICs9IGM7IHJldHVybiB0cnVlOyB9IHJldHVybiBmYWxzZTt9KTsKICAgICAgICAgIHN0YXRlLmxhbmdzLnB1c2gocGFyc2VkTGFuZyk7CiAgICAgICAgICBzdHJlYW0ubmV4dCgpOwogICAgICAgICAgdHJhbnNpdFN0YXRlKHN0YXRlLCAnICcpOwogICAgICAgICAgcmV0dXJuICdzdHJpbmctMic7CiAgICAgIH0KICAgICAgaWYoIGNoID09ICdeJyApIHsKICAgICAgICAgIHN0cmVhbS5uZXh0KCk7CiAgICAgICAgICB0cmFuc2l0U3RhdGUoc3RhdGUsICdeJyk7CiAgICAgICAgICB2YXIgcGFyc2VkVHlwZSA9ICcnOwogICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKGZ1bmN0aW9uKGMpIHsgaWYoIGMgIT0gJz4nICkgeyBwYXJzZWRUeXBlICs9IGM7IHJldHVybiB0cnVlOyB9IHJldHVybiBmYWxzZTt9ICk7CiAgICAgICAgICBzdGF0ZS50eXBlcy5wdXNoKHBhcnNlZFR5cGUpOwogICAgICAgICAgc3RyZWFtLm5leHQoKTsKICAgICAgICAgIHRyYW5zaXRTdGF0ZShzdGF0ZSwgJz4nKTsKICAgICAgICAgIHJldHVybiAndmFyaWFibGUnOwogICAgICB9CiAgICAgIGlmKCBjaCA9PSAnICcgKSB7CiAgICAgICAgICB0cmFuc2l0U3RhdGUoc3RhdGUsIGNoKTsKICAgICAgfQogICAgICBpZiggY2ggPT0gJy4nICkgewogICAgICAgICAgdHJhbnNpdFN0YXRlKHN0YXRlLCBjaCk7CiAgICAgIH0KICAgIH0KICB9Owp9KTsKCkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC9uLXRyaXBsZXMiLCAibnRyaXBsZXMiKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/pascal/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/pascal/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFBhc2NhbCBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0icGFzY2FsLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO308L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBQYXNjYWwgbW9kZTwvaDE+Cgo8ZGl2Pjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+CigqIEV4YW1wbGUgUGFzY2FsIGNvZGUgKikKCndoaWxlIGEgPD4gYiBkbyB3cml0ZWxuKCdXYWl0aW5nJyk7CiAKaWYgYSA+IGIgdGhlbiAKICB3cml0ZWxuKCdDb25kaXRpb24gbWV0JykKZWxzZSAKICB3cml0ZWxuKCdDb25kaXRpb24gbm90IG1ldCcpOwogCmZvciBpIDo9IDEgdG8gMTAgZG8gCiAgd3JpdGVsbignSXRlcmF0aW9uOiAnLCBpOjEpOwogCnJlcGVhdAogIGEgOj0gYSArIDEKdW50aWwgYSA9IDEwOwogCmNhc2UgaSBvZgogIDA6IHdyaXRlKCd6ZXJvJyk7CiAgMTogd3JpdGUoJ29uZScpOwogIDI6IHdyaXRlKCd0d28nKQplbmQ7CjwvdGV4dGFyZWE+PC9kaXY+CgogICAgPHNjcmlwdD4KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgICAgICBtYXRjaEJyYWNrZXRzOiB0cnVlLAogICAgICAgIG1vZGU6ICJ0ZXh0L3gtcGFzY2FsIgogICAgICB9KTsKICAgIDwvc2NyaXB0PgoKICAgIDxwPjxzdHJvbmc+TUlNRSB0eXBlcyBkZWZpbmVkOjwvc3Ryb25nPiA8Y29kZT50ZXh0L3gtcGFzY2FsPC9jb2RlPi48L3A+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/pascal/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChjKSAyMDExIHNvdWNlTGFpciA8c3VwcG9ydEBzb3VyY2VsYWlyLmNvbT4KClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/pascal/pascal.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJwYXNjYWwiLCBmdW5jdGlvbihjb25maWcpIHsKICBmdW5jdGlvbiB3b3JkcyhzdHIpIHsKICAgIHZhciBvYmogPSB7fSwgd29yZHMgPSBzdHIuc3BsaXQoIiAiKTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd29yZHMubGVuZ3RoOyArK2kpIG9ialt3b3Jkc1tpXV0gPSB0cnVlOwogICAgcmV0dXJuIG9iajsKICB9CiAgdmFyIGtleXdvcmRzID0gd29yZHMoImFuZCBhcnJheSBiZWdpbiBjYXNlIGNvbnN0IGRpdiBkbyBkb3dudG8gZWxzZSBlbmQgZmlsZSBmb3IgZm9yd2FyZCBpbnRlZ2VyICIgKwogICAgICAgICAgICAgICAgICAgICAgICJib29sZWFuIGNoYXIgZnVuY3Rpb24gZ290byBpZiBpbiBsYWJlbCBtb2QgbmlsIG5vdCBvZiBvciBwYWNrZWQgcHJvY2VkdXJlICIgKwogICAgICAgICAgICAgICAgICAgICAgICJwcm9ncmFtIHJlY29yZCByZXBlYXQgc2V0IHN0cmluZyB0aGVuIHRvIHR5cGUgdW50aWwgdmFyIHdoaWxlIHdpdGgiKTsKICB2YXIgYmxvY2tLZXl3b3JkcyA9IHdvcmRzKCJjYXNlIGRvIGVsc2UgZm9yIGlmIHN3aXRjaCB3aGlsZSBzdHJ1Y3QgdGhlbiBvZiIpOwogIHZhciBhdG9tcyA9IHsibnVsbCI6IHRydWV9OwoKICB2YXIgaXNPcGVyYXRvckNoYXIgPSAvWytcLSomJT08PiE/fFwvXS87CiAgdmFyIGN1clB1bmM7CgogIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgaWYgKGNoID09ICIjIiAmJiBzdGF0ZS5zdGFydE9mTGluZSkgewogICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgIHJldHVybiAibWV0YSI7CiAgICB9CiAgICBpZiAoY2ggPT0gJyInIHx8IGNoID09ICInIikgewogICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuU3RyaW5nKGNoKTsKICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwogICAgfQogICAgaWYgKGNoID09ICIoIiAmJiBzdHJlYW0uZWF0KCIqIikpIHsKICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkNvbW1lbnQ7CiAgICAgIHJldHVybiB0b2tlbkNvbW1lbnQoc3RyZWFtLCBzdGF0ZSk7CiAgICB9CiAgICBpZiAoL1tcW1xde31cKFwpLDtcOlwuXS8udGVzdChjaCkpIHsKICAgICAgY3VyUHVuYyA9IGNoOwogICAgICByZXR1cm4gbnVsbAogICAgfQogICAgaWYgKC9cZC8udGVzdChjaCkpIHsKICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcLl0vKTsKICAgICAgcmV0dXJuICJudW1iZXIiOwogICAgfQogICAgaWYgKGNoID09ICIvIikgewogICAgICBpZiAoc3RyZWFtLmVhdCgiLyIpKSB7CiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICAgIHJldHVybiAiY29tbWVudCI7CiAgICAgIH0KICAgIH0KICAgIGlmIChpc09wZXJhdG9yQ2hhci50ZXN0KGNoKSkgewogICAgICBzdHJlYW0uZWF0V2hpbGUoaXNPcGVyYXRvckNoYXIpOwogICAgICByZXR1cm4gIm9wZXJhdG9yIjsKICAgIH0KICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XCRfXS8pOwogICAgdmFyIGN1ciA9IHN0cmVhbS5jdXJyZW50KCk7CiAgICBpZiAoa2V5d29yZHMucHJvcGVydHlJc0VudW1lcmFibGUoY3VyKSkgewogICAgICBpZiAoYmxvY2tLZXl3b3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShjdXIpKSBjdXJQdW5jID0gIm5ld3N0YXRlbWVudCI7CiAgICAgIHJldHVybiAia2V5d29yZCI7CiAgICB9CiAgICBpZiAoYXRvbXMucHJvcGVydHlJc0VudW1lcmFibGUoY3VyKSkgcmV0dXJuICJhdG9tIjsKICAgIHJldHVybiAid29yZCI7CiAgfQoKICBmdW5jdGlvbiB0b2tlblN0cmluZyhxdW90ZSkgewogICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgbmV4dCwgZW5kID0gZmFsc2U7CiAgICAgIHdoaWxlICgobmV4dCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHsKICAgICAgICBpZiAobmV4dCA9PSBxdW90ZSAmJiAhZXNjYXBlZCkge2VuZCA9IHRydWU7IGJyZWFrO30KICAgICAgICBlc2NhcGVkID0gIWVzY2FwZWQgJiYgbmV4dCA9PSAiXFwiOwogICAgICB9CiAgICAgIGlmIChlbmQgfHwgIWVzY2FwZWQpIHN0YXRlLnRva2VuaXplID0gbnVsbDsKICAgICAgcmV0dXJuICJzdHJpbmciOwogICAgfTsKICB9CgogIGZ1bmN0aW9uIHRva2VuQ29tbWVudChzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgbWF5YmVFbmQgPSBmYWxzZSwgY2g7CiAgICB3aGlsZSAoY2ggPSBzdHJlYW0ubmV4dCgpKSB7CiAgICAgIGlmIChjaCA9PSAiKSIgJiYgbWF5YmVFbmQpIHsKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IG51bGw7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgbWF5YmVFbmQgPSAoY2ggPT0gIioiKTsKICAgIH0KICAgIHJldHVybiAiY29tbWVudCI7CiAgfQoKICBmdW5jdGlvbiBDb250ZXh0KGluZGVudGVkLCBjb2x1bW4sIHR5cGUsIGFsaWduLCBwcmV2KSB7CiAgICB0aGlzLmluZGVudGVkID0gaW5kZW50ZWQ7CiAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjsKICAgIHRoaXMudHlwZSA9IHR5cGU7CiAgICB0aGlzLmFsaWduID0gYWxpZ247CiAgICB0aGlzLnByZXYgPSBwcmV2OwogIH0KICBmdW5jdGlvbiBwdXNoQ29udGV4dChzdGF0ZSwgY29sLCB0eXBlKSB7CiAgICByZXR1cm4gc3RhdGUuY29udGV4dCA9IG5ldyBDb250ZXh0KHN0YXRlLmluZGVudGVkLCBjb2wsIHR5cGUsIG51bGwsIHN0YXRlLmNvbnRleHQpOwogIH0KICBmdW5jdGlvbiBwb3BDb250ZXh0KHN0YXRlKSB7CiAgICB2YXIgdCA9IHN0YXRlLmNvbnRleHQudHlwZTsKICAgIGlmICh0ID09ICIpIiB8fCB0ID09ICJdIiApCiAgICAgIHN0YXRlLmluZGVudGVkID0gc3RhdGUuY29udGV4dC5pbmRlbnRlZDsKICAgIHJldHVybiBzdGF0ZS5jb250ZXh0ID0gc3RhdGUuY29udGV4dC5wcmV2OwogIH0KCiAgLy8gSW50ZXJmYWNlCgogIHJldHVybiB7CiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbihiYXNlY29sdW1uKSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgdG9rZW5pemU6IG51bGwsCiAgICAgICAgY29udGV4dDogbmV3IENvbnRleHQoKGJhc2Vjb2x1bW4gfHwgMCkgLSBjb25maWcuaW5kZW50VW5pdCwgMCwgInRvcCIsIGZhbHNlKSwKICAgICAgICBpbmRlbnRlZDogMCwKICAgICAgICBzdGFydE9mTGluZTogdHJ1ZQogICAgICB9OwogICAgfSwKCiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICB2YXIgY3R4ID0gc3RhdGUuY29udGV4dDsKICAgICAgaWYgKHN0cmVhbS5zb2woKSkgewogICAgICAgIGlmIChjdHguYWxpZ24gPT0gbnVsbCkgY3R4LmFsaWduID0gZmFsc2U7CiAgICAgICAgc3RhdGUuaW5kZW50ZWQgPSBzdHJlYW0uaW5kZW50YXRpb24oKTsKICAgICAgICBzdGF0ZS5zdGFydE9mTGluZSA9IHRydWU7CiAgICAgIH0KICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDsKICAgICAgY3VyUHVuYyA9IG51bGw7CiAgICAgIHZhciBzdHlsZSA9IChzdGF0ZS50b2tlbml6ZSB8fCB0b2tlbkJhc2UpKHN0cmVhbSwgc3RhdGUpOwogICAgICBpZiAoc3R5bGUgPT0gImNvbW1lbnQiIHx8IHN0eWxlID09ICJtZXRhIikgcmV0dXJuIHN0eWxlOwogICAgICBpZiAoY3R4LmFsaWduID09IG51bGwpIGN0eC5hbGlnbiA9IHRydWU7CgogICAgICBpZiAoKGN1clB1bmMgPT0gIjsiIHx8IGN1clB1bmMgPT0gIjoiKSAmJiBjdHgudHlwZSA9PSAic3RhdGVtZW50IikgcG9wQ29udGV4dChzdGF0ZSk7CiAgICAgIGVsc2UgaWYgKGN1clB1bmMgPT0gIlsiKSBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLmNvbHVtbigpLCAiXSIpOwogICAgICBlbHNlIGlmIChjdXJQdW5jID09ICIoIikgcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbS5jb2x1bW4oKSwgIikiKTsKICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSBjdHgudHlwZSkgcG9wQ29udGV4dChzdGF0ZSk7CiAgICAgIGVsc2UgaWYgKCBjdHgudHlwZSA9PSAidG9wIiB8fCAoY3R4LnR5cGUgPT0gInN0YXRlbWVudCIgJiYgY3VyUHVuYyA9PSAibmV3c3RhdGVtZW50IikpCiAgICAgICAgcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbS5jb2x1bW4oKSwgInN0YXRlbWVudCIpOwogICAgICBzdGF0ZS5zdGFydE9mTGluZSA9IGZhbHNlOwogICAgICByZXR1cm4gc3R5bGU7CiAgICB9LAoKICAgIGVsZWN0cmljQ2hhcnM6ICJ7fSIKICB9Owp9KTsKCkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LXBhc2NhbCIsICJwYXNjYWwiKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/perl/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/perl/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFBlcmwgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9InBlcmwuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4uQ29kZU1pcnJvciB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7fTwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3I6IFBlcmwgbW9kZTwvaDE+Cgo8ZGl2Pjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+CiMhL3Vzci9iaW4vcGVybAoKdXNlIFNvbWV0aGluZyBxdyhmdW5jMSBmdW5jMik7CgojIHN0cmluZ3MKbXkgJHMxID0gcXEnc2luZ2xlIGxpbmUnOwpvdXIgJHMyID0gcShtdWx0aS0KICAgICAgICAgICAgICBsaW5lKTsKCj1pdGVtIFNvbWV0aGluZwoJRXhhbXBsZS4KPWN1dAoKbXkgJGh0bWw9PDwnSFRNTCcKPGh0bWw+Cjx0aXRsZT5oaSE8L3RpdGxlPgo8L2h0bWw+CkhUTUwKCnByaW50ICJmaXJzdCwiLmpvaW4oJywnLCAnc2Vjb25kJywgcXF+dGhpcmR+KTsKCmlmKCRzMSA9fiBtWyg/PCFccykobC5uZSlcel1vKSB7CgkkaC0+eyQxfT0kJC4nIHByZWRlZmluZWQgdmFyaWFibGVzJzsKCSRzMiA9fiBzL1wtbGluZS8vb3g7CgkkczEgPX4gc1sKCQkgIGxpbmUgXQoJCVsKCQkgIGJsb2NrCgkJXW94Owp9CgoxOyAjIG51bWJlcnMgYW5kIGNvbW1lbnRzCgpfX0VORF9fCnNvbWV0aGluZy4uLgoKPC90ZXh0YXJlYT48L2Rpdj4KCiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUKICAgICAgfSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD48c3Ryb25nPk1JTUUgdHlwZXMgZGVmaW5lZDo8L3N0cm9uZz4gPGNvZGU+dGV4dC94LXBlcmw8L2NvZGU+LjwvcD4KICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/perl/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChDKSAyMDExIGJ5IFNhYmFjYSA8bWFpbEBzYWJhY2EuY29tPiB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuCgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCmFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KVEhFIFNPRlRXQVJFLgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/perl/perl.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gQ29kZU1pcnJvcjIgbW9kZS9wZXJsL3BlcmwuanMgKHRleHQveC1wZXJsKSBiZXRhIDAuMTAgKDIwMTEtMTEtMDgpCi8vIFRoaXMgaXMgYSBwYXJ0IG9mIENvZGVNaXJyb3IgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vc2FiYWNhL0NvZGVNaXJyb3JfbW9kZV9wZXJsIChtYWlsQHNhYmFjYS5jb20pCkNvZGVNaXJyb3IuZGVmaW5lTW9kZSgicGVybCIsZnVuY3Rpb24oY29uZmlnLHBhcnNlckNvbmZpZyl7CgkvLyBodHRwOi8vcGVybGRvYy5wZXJsLm9yZwoJdmFyIFBFUkw9ewkJCQkgICAgCS8vICAgbnVsbCAtIG1hZ2ljIHRvdWNoCgkJCQkJCQkvLyAgIDEgLSBrZXl3b3JkCgkJCQkJCQkvLyAgIDIgLSBkZWYKCQkJCQkJCS8vICAgMyAtIGF0b20KCQkJCQkJCS8vICAgNCAtIG9wZXJhdG9yCgkJCQkJCQkvLyAgIDUgLSB2YXJpYWJsZS0yIChwcmVkZWZpbmVkKQoJCQkJCQkJLy8gICBbeCx5XSAtIHg9MSwyLDM7IHk9bXVzdCBiZSBkZWZpbmVkIGlmIHh7Li4ufQoJCQkJCQkvLwlQRVJMIG9wZXJhdG9ycwoJCSctPicJCQkJOiAgIDQsCgkJJysrJwkJCQk6ICAgNCwKCQknLS0nCQkJCTogICA0LAoJCScqKicJCQkJOiAgIDQsCgkJCQkJCQkvLyAgICEgfiBcIGFuZCB1bmFyeSArIGFuZCAtCgkJJz1+JwkJCQk6ICAgNCwKCQknIX4nCQkJCTogICA0LAoJCScqJwkJCQk6ICAgNCwKCQknLycJCQkJOiAgIDQsCgkJJyUnCQkJCTogICA0LAoJCSd4JwkJCQk6ICAgNCwKCQknKycJCQkJOiAgIDQsCgkJJy0nCQkJCTogICA0LAoJCScuJwkJCQk6ICAgNCwKCQknPDwnCQkJCTogICA0LAoJCSc+PicJCQkJOiAgIDQsCgkJCQkJCQkvLyAgIG5hbWVkIHVuYXJ5IG9wZXJhdG9ycwoJCSc8JwkJCQk6ICAgNCwKCQknPicJCQkJOiAgIDQsCgkJJzw9JwkJCQk6ICAgNCwKCQknPj0nCQkJCTogICA0LAoJCSdsdCcJCQkJOiAgIDQsCgkJJ2d0JwkJCQk6ICAgNCwKCQknbGUnCQkJCTogICA0LAoJCSdnZScJCQkJOiAgIDQsCgkJJz09JwkJCQk6ICAgNCwKCQknIT0nCQkJCTogICA0LAoJCSc8PT4nCQkJCTogICA0LAoJCSdlcScJCQkJOiAgIDQsCgkJJ25lJwkJCQk6ICAgNCwKCQknY21wJwkJCQk6ICAgNCwKCQknfn4nCQkJCTogICA0LAoJCScmJwkJCQk6ICAgNCwKCQknfCcJCQkJOiAgIDQsCgkJJ14nCQkJCTogICA0LAoJCScmJicJCQkJOiAgIDQsCgkJJ3x8JwkJCQk6ICAgNCwKCQknLy8nCQkJCTogICA0LAoJCScuLicJCQkJOiAgIDQsCgkJJy4uLicJCQkJOiAgIDQsCgkJJz8nCQkJCTogICA0LAoJCSc6JwkJCQk6ICAgNCwKCQknPScJCQkJOiAgIDQsCgkJJys9JwkJCQk6ICAgNCwKCQknLT0nCQkJCTogICA0LAoJCScqPScJCQkJOiAgIDQsCS8vICAgZXRjLiA/Pz8KCQknLCcJCQkJOiAgIDQsCgkJJz0+JwkJCQk6ICAgNCwKCQknOjonCQkJCTogICA0LAoJCQkJICAgCQkJLy8gICBsaXN0IG9wZXJhdG9ycyAocmlnaHR3YXJkKQoJCSdub3QnCQkJCTogICA0LAoJCSdhbmQnCQkJCTogICA0LAoJCSdvcicJCQkJOiAgIDQsCgkJJ3hvcicJCQkJOiAgIDQsCgkJCQkJCS8vCVBFUkwgcHJlZGVmaW5lZCB2YXJpYWJsZXMgKEkga25vdywgd2hhdCB0aGlzIGlzIGEgcGFyYW5vaWQgaWRlYSwgYnV0IG1heSBiZSBuZWVkZWQgZm9yIHBlb3BsZSwgd2hvIGxlYXJuIFBFUkwsIGFuZCBmb3IgbWUgYXMgd2VsbCwgLi4uYW5kIG1heSBiZSBmb3IgeW91PzspCgkJJ0JFR0lOJwkJCQk6ICAgWzUsMV0sCgkJJ0VORCcJCQkJOiAgIFs1LDFdLAoJCSdQUklOVCcJCQkJOiAgIFs1LDFdLAoJCSdQUklOVEYnCQkJOiAgIFs1LDFdLAoJCSdHRVRDJwkJCQk6ICAgWzUsMV0sCgkJJ1JFQUQnCQkJCTogICBbNSwxXSwKCQknUkVBRExJTkUnCQkJOiAgIFs1LDFdLAoJCSdERVNUUk9ZJwkJCTogICBbNSwxXSwKCQknVElFJwkJCQk6ICAgWzUsMV0sCgkJJ1RJRUhBTkRMRScJCQk6ICAgWzUsMV0sCgkJJ1VOVElFJwkJCQk6ICAgWzUsMV0sCgkJJ1NURElOJwkJCQk6ICAgIDUsCgkJJ1NURElOX1RPUCcJCQk6ICAgIDUsCgkJJ1NURE9VVCcJCQk6ICAgIDUsCgkJJ1NURE9VVF9UT1AnCQkJOiAgICA1LAoJCSdTVERFUlInCQkJOiAgICA1LAoJCSdTVERFUlJfVE9QJwkJCTogICAgNSwKCQknJEFSRycJCQkJOiAgICA1LAoJCSckXycJCQkJOiAgICA1LAoJCSdAQVJHJwkJCQk6ICAgIDUsCgkJJ0BfJwkJCQk6ICAgIDUsCgkJJyRMSVNUX1NFUEFSQVRPUicJCTogICAgNSwKCQknJCInCQkJCTogICAgNSwKCQknJFBST0NFU1NfSUQnCQkJOiAgICA1LAoJCSckUElEJwkJCQk6ICAgIDUsCgkJJyQkJwkJCQk6ICAgIDUsCgkJJyRSRUFMX0dST1VQX0lEJwkJOiAgICA1LAoJCSckR0lEJwkJCQk6ICAgIDUsCgkJJyQoJwkJCQk6ICAgIDUsCgkJJyRFRkZFQ1RJVkVfR1JPVVBfSUQnCQk6ICAgIDUsCgkJJyRFR0lEJwkJCQk6ICAgIDUsCgkJJyQpJwkJCQk6ICAgIDUsCgkJJyRQUk9HUkFNX05BTUUnCQkJOiAgICA1LAoJCSckMCcJCQkJOiAgICA1LAoJCSckU1VCU0NSSVBUX1NFUEFSQVRPUicJCTogICAgNSwKCQknJFNVQlNFUCcJCQk6ICAgIDUsCgkJJyQ7JwkJCQk6ICAgIDUsCgkJJyRSRUFMX1VTRVJfSUQnCQkJOiAgICA1LAoJCSckVUlEJwkJCQk6ICAgIDUsCgkJJyQ8JwkJCQk6ICAgIDUsCgkJJyRFRkZFQ1RJVkVfVVNFUl9JRCcJCTogICAgNSwKCQknJEVVSUQnCQkJCTogICAgNSwKCQknJD4nCQkJCTogICAgNSwKCQknJGEnCQkJCTogICAgNSwKCQknJGInCQkJCTogICAgNSwKCQknJENPTVBJTElORycJCQk6ICAgIDUsCgkJJyReQycJCQkJOiAgICA1LAoJCSckREVCVUdHSU5HJwkJCTogICAgNSwKCQknJF5EJwkJCQk6ICAgIDUsCgkJJyR7XkVOQ09ESU5HfScJCQk6ICAgIDUsCgkJJyRFTlYnCQkJCTogICAgNSwKCQknJUVOVicJCQkJOiAgICA1LAoJCSckU1lTVEVNX0ZEX01BWCcJCTogICAgNSwKCQknJF5GJwkJCQk6ICAgIDUsCgkJJ0BGJwkJCQk6ICAgIDUsCgkJJyR7XkdMT0JBTF9QSEFTRX0nCQk6ICAgIDUsCgkJJyReSCcJCQkJOiAgICA1LAoJCSclXkgnCQkJCTogICAgNSwKCQknQElOQycJCQkJOiAgICA1LAoJCSclSU5DJwkJCQk6ICAgIDUsCgkJJyRJTlBMQUNFX0VESVQnCQkJOiAgICA1LAoJCSckXkknCQkJCTogICAgNSwKCQknJF5NJwkJCQk6ICAgIDUsCgkJJyRPU05BTUUnCQkJOiAgICA1LAoJCSckXk8nCQkJCTogICAgNSwKCQknJHteT1BFTn0nCQkJOiAgICA1LAoJCSckUEVSTERCJwkJCTogICAgNSwKCQknJF5QJwkJCQk6ICAgIDUsCgkJJyRTSUcnCQkJCTogICAgNSwKCQknJVNJRycJCQkJOiAgICA1LAoJCSckQkFTRVRJTUUnCQkJOiAgICA1LAoJCSckXlQnCQkJCTogICAgNSwKCQknJHteVEFJTlR9JwkJCTogICAgNSwKCQknJHteVU5JQ09ERX0nCQkJOiAgICA1LAoJCScke15VVEY4Q0FDSEV9JwkJCTogICAgNSwKCQknJHteVVRGOExPQ0FMRX0nCQk6ICAgIDUsCgkJJyRQRVJMX1ZFUlNJT04nCQkJOiAgICA1LAoJCSckXlYnCQkJCTogICAgNSwKCQknJHteV0lOMzJfU0xPUFBZX1NUQVR9JwkJOiAgICA1LAoJCSckRVhFQ1VUQUJMRV9OQU1FJwkJOiAgICA1LAoJCSckXlgnCQkJCTogICAgNSwKCQknJDEnCQkJCTogICAgNSwJLy8gLSByZWdleHAgJDEsICQyLi4uCgkJJyRNQVRDSCcJCQk6ICAgIDUsCgkJJyQmJwkJCQk6ICAgIDUsCgkJJyR7Xk1BVENIfScJCQk6ICAgIDUsCgkJJyRQUkVNQVRDSCcJCQk6ICAgIDUsCgkJJyRgJwkJCQk6ICAgIDUsCgkJJyR7XlBSRU1BVENIfScJCQk6ICAgIDUsCgkJJyRQT1NUTUFUQ0gnCQkJOiAgICA1LAoJCSIkJyIJCQkJOiAgICA1LAoJCScke15QT1NUTUFUQ0h9JwkJCTogICAgNSwKCQknJExBU1RfUEFSRU5fTUFUQ0gnCQk6ICAgIDUsCgkJJyQrJwkJCQk6ICAgIDUsCgkJJyRMQVNUX1NVQk1BVENIX1JFU1VMVCcJCTogICAgNSwKCQknJF5OJwkJCQk6ICAgIDUsCgkJJ0BMQVNUX01BVENIX0VORCcJCTogICAgNSwKCQknQCsnCQkJCTogICAgNSwKCQknJUxBU1RfUEFSRU5fTUFUQ0gnCQk6ICAgIDUsCgkJJyUrJwkJCQk6ICAgIDUsCgkJJ0BMQVNUX01BVENIX1NUQVJUJwkJOiAgICA1LAoJCSdALScJCQkJOiAgICA1LAoJCSclTEFTVF9NQVRDSF9TVEFSVCcJCTogICAgNSwKCQknJS0nCQkJCTogICAgNSwKCQknJExBU1RfUkVHRVhQX0NPREVfUkVTVUxUJwk6ICAgIDUsCgkJJyReUicJCQkJOiAgICA1LAoJCScke15SRV9ERUJVR19GTEFHU30nCQk6ICAgIDUsCgkJJyR7XlJFX1RSSUVfTUFYQlVGfScJCTogICAgNSwKCQknJEFSR1YnCQkJCTogICAgNSwKCQknQEFSR1YnCQkJCTogICAgNSwKCQknQVJHVicJCQkJOiAgICA1LAoJCSdBUkdWT1VUJwkJCTogICAgNSwKCQknJE9VVFBVVF9GSUVMRF9TRVBBUkFUT1InCTogICAgNSwKCQknJE9GUycJCQkJOiAgICA1LAoJCSckLCcJCQkJOiAgICA1LAoJCSckSU5QVVRfTElORV9OVU1CRVInCQk6ICAgIDUsCgkJJyROUicJCQkJOiAgICA1LAoJCSckLicJCQkJOiAgICA1LAoJCSckSU5QVVRfUkVDT1JEX1NFUEFSQVRPUicJOiAgICA1LAoJCSckUlMnCQkJCTogICAgNSwKCQknJC8nCQkJCTogICAgNSwKCQknJE9VVFBVVF9SRUNPUkRfU0VQQVJBVE9SJwk6ICAgIDUsCgkJJyRPUlMnCQkJCTogICAgNSwKCQknJFxcJwkJCQk6ICAgIDUsCgkJJyRPVVRQVVRfQVVUT0ZMVVNIJwkJOiAgICA1LAoJCSckfCcJCQkJOiAgICA1LAoJCSckQUNDVU1VTEFUT1InCQkJOiAgICA1LAoJCSckXkEnCQkJCTogICAgNSwKCQknJEZPUk1BVF9GT1JNRkVFRCcJCTogICAgNSwKCQknJF5MJwkJCQk6ICAgIDUsCgkJJyRGT1JNQVRfUEFHRV9OVU1CRVInCQk6ICAgIDUsCgkJJyQlJwkJCQk6ICAgIDUsCgkJJyRGT1JNQVRfTElORVNfTEVGVCcJCTogICAgNSwKCQknJC0nCQkJCTogICAgNSwKCQknJEZPUk1BVF9MSU5FX0JSRUFLX0NIQVJBQ1RFUlMnCTogICAgNSwKCQknJDonCQkJCTogICAgNSwKCQknJEZPUk1BVF9MSU5FU19QRVJfUEFHRScJOiAgICA1LAoJCSckPScJCQkJOiAgICA1LAoJCSckRk9STUFUX1RPUF9OQU1FJwkJOiAgICA1LAoJCSckXicJCQkJOiAgICA1LAoJCSckRk9STUFUX05BTUUnCQkJOiAgICA1LAoJCSckficJCQkJOiAgICA1LAoJCScke15DSElMRF9FUlJPUl9OQVRJVkV9Jwk6ICAgIDUsCgkJJyRFWFRFTkRFRF9PU19FUlJPUicJCTogICAgNSwKCQknJF5FJwkJCQk6ICAgIDUsCgkJJyRFWENFUFRJT05TX0JFSU5HX0NBVUdIVCcJOiAgICA1LAoJCSckXlMnCQkJCTogICAgNSwKCQknJFdBUk5JTkcnCQkJOiAgICA1LAoJCSckXlcnCQkJCTogICAgNSwKCQknJHteV0FSTklOR19CSVRTfScJCTogICAgNSwKCQknJE9TX0VSUk9SJwkJCTogICAgNSwKCQknJEVSUk5PJwkJCTogICAgNSwKCQknJCEnCQkJCTogICAgNSwKCQknJU9TX0VSUk9SJwkJCTogICAgNSwKCQknJUVSUk5PJwkJCTogICAgNSwKCQknJSEnCQkJCTogICAgNSwKCQknJENISUxEX0VSUk9SJwkJCTogICAgNSwKCQknJD8nCQkJCTogICAgNSwKCQknJEVWQUxfRVJST1InCQkJOiAgICA1LAoJCSckQCcJCQkJOiAgICA1LAoJCSckT0ZNVCcJCQkJOiAgICA1LAoJCSckIycJCQkJOiAgICA1LAoJCSckKicJCQkJOiAgICA1LAoJCSckQVJSQVlfQkFTRScJCQk6ICAgIDUsCgkJJyRbJwkJCQk6ICAgIDUsCgkJJyRPTERfUEVSTF9WRVJTSU9OJwkJOiAgICA1LAoJCSckXScJCQkJOiAgICA1LAoJCQkJCQkvLwlQRVJMIGJsb2NrcwoJCSdpZicJCQkJOlsxLDFdLAoJCWVsc2lmCQkJCTpbMSwxXSwKCQknZWxzZScJCQkJOlsxLDFdLAoJCSd3aGlsZScJCQkJOlsxLDFdLAoJCXVubGVzcwkJCQk6WzEsMV0sCgkJJ2ZvcicJCQkJOlsxLDFdLAoJCWZvcmVhY2gJCQkJOlsxLDFdLAoJCQkJCQkvLwlQRVJMIGZ1bmN0aW9ucwoJCSdhYnMnCQkJCToxLAkvLyAtIGFic29sdXRlIHZhbHVlIGZ1bmN0aW9uCgkJYWNjZXB0CQkJCToxLAkvLyAtIGFjY2VwdCBhbiBpbmNvbWluZyBzb2NrZXQgY29ubmVjdAoJCWFsYXJtCQkJCToxLAkvLyAtIHNjaGVkdWxlIGEgU0lHQUxSTQoJCSdhdGFuMicJCQkJOjEsCS8vIC0gYXJjdGFuZ2VudCBvZiBZL1ggaW4gdGhlIHJhbmdlIC1QSSB0byBQSQoJCWJpbmQJCQkJOjEsCS8vIC0gYmluZHMgYW4gYWRkcmVzcyB0byBhIHNvY2tldAoJCWJpbm1vZGUJCQkJOjEsCS8vIC0gcHJlcGFyZSBiaW5hcnkgZmlsZXMgZm9yIEkvTwoJCWJsZXNzCQkJCToxLAkvLyAtIGNyZWF0ZSBhbiBvYmplY3QKCQlib290c3RyYXAJCQk6MSwJLy8KCQknYnJlYWsnCQkJCToxLAkvLyAtIGJyZWFrIG91dCBvZiBhICJnaXZlbiIgYmxvY2sKCQljYWxsZXIJCQkJOjEsCS8vIC0gZ2V0IGNvbnRleHQgb2YgdGhlIGN1cnJlbnQgc3Vicm91dGluZSBjYWxsCgkJY2hkaXIJCQkJOjEsCS8vIC0gY2hhbmdlIHlvdXIgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeQoJCWNobW9kCQkJCToxLAkvLyAtIGNoYW5nZXMgdGhlIHBlcm1pc3Npb25zIG9uIGEgbGlzdCBvZiBmaWxlcwoJCWNob21wCQkJCToxLAkvLyAtIHJlbW92ZSBhIHRyYWlsaW5nIHJlY29yZCBzZXBhcmF0b3IgZnJvbSBhIHN0cmluZwoJCWNob3AJCQkJOjEsCS8vIC0gcmVtb3ZlIHRoZSBsYXN0IGNoYXJhY3RlciBmcm9tIGEgc3RyaW5nCgkJY2hvd24JCQkJOjEsCS8vIC0gY2hhbmdlIHRoZSBvd2Vyc2hpcCBvbiBhIGxpc3Qgb2YgZmlsZXMKCQljaHIJCQkJOjEsCS8vIC0gZ2V0IGNoYXJhY3RlciB0aGlzIG51bWJlciByZXByZXNlbnRzCgkJY2hyb290CQkJCToxLAkvLyAtIG1ha2UgZGlyZWN0b3J5IG5ldyByb290IGZvciBwYXRoIGxvb2t1cHMKCQljbG9zZQkJCQk6MSwJLy8gLSBjbG9zZSBmaWxlIChvciBwaXBlIG9yIHNvY2tldCkgaGFuZGxlCgkJY2xvc2VkaXIJCQk6MSwJLy8gLSBjbG9zZSBkaXJlY3RvcnkgaGFuZGxlCgkJY29ubmVjdAkJCQk6MSwJLy8gLSBjb25uZWN0IHRvIGEgcmVtb3RlIHNvY2tldAoJCSdjb250aW51ZScJCQk6WzEsMV0sCS8vIC0gb3B0aW9uYWwgdHJhaWxpbmcgYmxvY2sgaW4gYSB3aGlsZSBvciBmb3JlYWNoCgkJJ2NvcycJCQkJOjEsCS8vIC0gY29zaW5lIGZ1bmN0aW9uCgkJY3J5cHQJCQkJOjEsCS8vIC0gb25lLXdheSBwYXNzd2Qtc3R5bGUgZW5jcnlwdGlvbgoJCWRibWNsb3NlCQkJOjEsCS8vIC0gYnJlYWtzIGJpbmRpbmcgb24gYSB0aWVkIGRibSBmaWxlCgkJZGJtb3BlbgkJCQk6MSwJLy8gLSBjcmVhdGUgYmluZGluZyBvbiBhIHRpZWQgZGJtIGZpbGUKCQknZGVmYXVsdCcJCQk6MSwJLy8KCQlkZWZpbmVkCQkJCToxLAkvLyAtIHRlc3Qgd2hldGhlciBhIHZhbHVlLCB2YXJpYWJsZSwgb3IgZnVuY3Rpb24gaXMgZGVmaW5lZAoJCSdkZWxldGUnCQkJOjEsCS8vIC0gZGVsZXRlcyBhIHZhbHVlIGZyb20gYSBoYXNoCgkJZGllCQkJCToxLAkvLyAtIHJhaXNlIGFuIGV4Y2VwdGlvbiBvciBiYWlsIG91dAoJCSdkbycJCQkJOjEsCS8vIC0gdHVybiBhIEJMT0NLIGludG8gYSBURVJNCgkJZHVtcAkJCQk6MSwJLy8gLSBjcmVhdGUgYW4gaW1tZWRpYXRlIGNvcmUgZHVtcAoJCWVhY2gJCQkJOjEsCS8vIC0gcmV0cmlldmUgdGhlIG5leHQga2V5L3ZhbHVlIHBhaXIgZnJvbSBhIGhhc2gKCQllbmRncmVudAkJCToxLAkvLyAtIGJlIGRvbmUgdXNpbmcgZ3JvdXAgZmlsZQoJCWVuZGhvc3RlbnQJCQk6MSwJLy8gLSBiZSBkb25lIHVzaW5nIGhvc3RzIGZpbGUKCQllbmRuZXRlbnQJCQk6MSwJLy8gLSBiZSBkb25lIHVzaW5nIG5ldHdvcmtzIGZpbGUKCQllbmRwcm90b2VudAkJCToxLAkvLyAtIGJlIGRvbmUgdXNpbmcgcHJvdG9jb2xzIGZpbGUKCQllbmRwd2VudAkJCToxLAkvLyAtIGJlIGRvbmUgdXNpbmcgcGFzc3dkIGZpbGUKCQllbmRzZXJ2ZW50CQkJOjEsCS8vIC0gYmUgZG9uZSB1c2luZyBzZXJ2aWNlcyBmaWxlCgkJZW9mCQkJCToxLAkvLyAtIHRlc3QgYSBmaWxlaGFuZGxlIGZvciBpdHMgZW5kCgkJJ2V2YWwnCQkJCToxLAkvLyAtIGNhdGNoIGV4Y2VwdGlvbnMgb3IgY29tcGlsZSBhbmQgcnVuIGNvZGUKCQknZXhlYycJCQkJOjEsCS8vIC0gYWJhbmRvbiB0aGlzIHByb2dyYW0gdG8gcnVuIGFub3RoZXIKCQlleGlzdHMJCQkJOjEsCS8vIC0gdGVzdCB3aGV0aGVyIGEgaGFzaCBrZXkgaXMgcHJlc2VudAoJCWV4aXQJCQkJOjEsCS8vIC0gdGVybWluYXRlIHRoaXMgcHJvZ3JhbQoJCSdleHAnCQkJCToxLAkvLyAtIHJhaXNlIEkgdG8gYSBwb3dlcgoJCWZjbnRsCQkJCToxLAkvLyAtIGZpbGUgY29udHJvbCBzeXN0ZW0gY2FsbAoJCWZpbGVubwkJCQk6MSwJLy8gLSByZXR1cm4gZmlsZSBkZXNjcmlwdG9yIGZyb20gZmlsZWhhbmRsZQoJCWZsb2NrCQkJCToxLAkvLyAtIGxvY2sgYW4gZW50aXJlIGZpbGUgd2l0aCBhbiBhZHZpc29yeSBsb2NrCgkJZm9yawkJCQk6MSwJLy8gLSBjcmVhdGUgYSBuZXcgcHJvY2VzcyBqdXN0IGxpa2UgdGhpcyBvbmUKCQlmb3JtYXQJCQkJOjEsCS8vIC0gZGVjbGFyZSBhIHBpY3R1cmUgZm9ybWF0IHdpdGggdXNlIGJ5IHRoZSB3cml0ZSgpIGZ1bmN0aW9uCgkJZm9ybWxpbmUJCQk6MSwJLy8gLSBpbnRlcm5hbCBmdW5jdGlvbiB1c2VkIGZvciBmb3JtYXRzCgkJZ2V0YwkJCQk6MSwJLy8gLSBnZXQgdGhlIG5leHQgY2hhcmFjdGVyIGZyb20gdGhlIGZpbGVoYW5kbGUKCQlnZXRncmVudAkJCToxLAkvLyAtIGdldCBuZXh0IGdyb3VwIHJlY29yZAoJCWdldGdyZ2lkCQkJOjEsCS8vIC0gZ2V0IGdyb3VwIHJlY29yZCBnaXZlbiBncm91cCB1c2VyIElECgkJZ2V0Z3JuYW0JCQk6MSwJLy8gLSBnZXQgZ3JvdXAgcmVjb3JkIGdpdmVuIGdyb3VwIG5hbWUKCQlnZXRob3N0YnlhZGRyCQkJOjEsCS8vIC0gZ2V0IGhvc3QgcmVjb3JkIGdpdmVuIGl0cyBhZGRyZXNzCgkJZ2V0aG9zdGJ5bmFtZQkJCToxLAkvLyAtIGdldCBob3N0IHJlY29yZCBnaXZlbiBuYW1lCgkJZ2V0aG9zdGVudAkJCToxLAkvLyAtIGdldCBuZXh0IGhvc3RzIHJlY29yZAoJCWdldGxvZ2luCQkJOjEsCS8vIC0gcmV0dXJuIHdobyBsb2dnZWQgaW4gYXQgdGhpcyB0dHkKCQlnZXRuZXRieWFkZHIJCQk6MSwJLy8gLSBnZXQgbmV0d29yayByZWNvcmQgZ2l2ZW4gaXRzIGFkZHJlc3MKCQlnZXRuZXRieW5hbWUJCQk6MSwJLy8gLSBnZXQgbmV0d29ya3MgcmVjb3JkIGdpdmVuIG5hbWUKCQlnZXRuZXRlbnQJCQk6MSwJLy8gLSBnZXQgbmV4dCBuZXR3b3JrcyByZWNvcmQKCQlnZXRwZWVybmFtZQkJCToxLAkvLyAtIGZpbmQgdGhlIG90aGVyIGVuZCBvZiBhIHNvY2tldCBjb25uZWN0aW9uCgkJZ2V0cGdycAkJCQk6MSwJLy8gLSBnZXQgcHJvY2VzcyBncm91cAoJCWdldHBwaWQJCQkJOjEsCS8vIC0gZ2V0IHBhcmVudCBwcm9jZXNzIElECgkJZ2V0cHJpb3JpdHkJCQk6MSwJLy8gLSBnZXQgY3VycmVudCBuaWNlIHZhbHVlCgkJZ2V0cHJvdG9ieW5hbWUJCQk6MSwJLy8gLSBnZXQgcHJvdG9jb2wgcmVjb3JkIGdpdmVuIG5hbWUKCQlnZXRwcm90b2J5bnVtYmVyCQk6MSwJLy8gLSBnZXQgcHJvdG9jb2wgcmVjb3JkIG51bWVyaWMgcHJvdG9jb2wKCQlnZXRwcm90b2VudAkJCToxLAkvLyAtIGdldCBuZXh0IHByb3RvY29scyByZWNvcmQKCQlnZXRwd2VudAkJCToxLAkvLyAtIGdldCBuZXh0IHBhc3N3ZCByZWNvcmQKCQlnZXRwd25hbQkJCToxLAkvLyAtIGdldCBwYXNzd2QgcmVjb3JkIGdpdmVuIHVzZXIgbG9naW4gbmFtZQoJCWdldHB3dWlkCQkJOjEsCS8vIC0gZ2V0IHBhc3N3ZCByZWNvcmQgZ2l2ZW4gdXNlciBJRAoJCWdldHNlcnZieW5hbWUJCQk6MSwJLy8gLSBnZXQgc2VydmljZXMgcmVjb3JkIGdpdmVuIGl0cyBuYW1lCgkJZ2V0c2VydmJ5cG9ydAkJCToxLAkvLyAtIGdldCBzZXJ2aWNlcyByZWNvcmQgZ2l2ZW4gbnVtZXJpYyBwb3J0CgkJZ2V0c2VydmVudAkJCToxLAkvLyAtIGdldCBuZXh0IHNlcnZpY2VzIHJlY29yZAoJCWdldHNvY2tuYW1lCQkJOjEsCS8vIC0gcmV0cmlldmUgdGhlIHNvY2thZGRyIGZvciBhIGdpdmVuIHNvY2tldAoJCWdldHNvY2tvcHQJCQk6MSwJLy8gLSBnZXQgc29ja2V0IG9wdGlvbnMgb24gYSBnaXZlbiBzb2NrZXQKCQlnaXZlbgkJCQk6MSwJLy8KCQlnbG9iCQkJCToxLAkvLyAtIGV4cGFuZCBmaWxlbmFtZXMgdXNpbmcgd2lsZGNhcmRzCgkJZ210aW1lCQkJCToxLAkvLyAtIGNvbnZlcnQgVU5JWCB0aW1lIGludG8gcmVjb3JkIG9yIHN0cmluZyB1c2luZyBHcmVlbndpY2ggdGltZQoJCSdnb3RvJwkJCQk6MSwJLy8gLSBjcmVhdGUgc3BhZ2hldHRpIGNvZGUKCQlncmVwCQkJCToxLAkvLyAtIGxvY2F0ZSBlbGVtZW50cyBpbiBhIGxpc3QgdGVzdCB0cnVlIGFnYWluc3QgYSBnaXZlbiBjcml0ZXJpb24KCQloZXgJCQkJOjEsCS8vIC0gY29udmVydCBhIHN0cmluZyB0byBhIGhleGFkZWNpbWFsIG51bWJlcgoJCSdpbXBvcnQnCQkJOjEsCS8vIC0gcGF0Y2ggYSBtb2R1bGUncyBuYW1lc3BhY2UgaW50byB5b3VyIG93bgoJCWluZGV4CQkJCToxLAkvLyAtIGZpbmQgYSBzdWJzdHJpbmcgd2l0aGluIGEgc3RyaW5nCgkJaW50CQkJCToxLAkvLyAtIGdldCB0aGUgaW50ZWdlciBwb3J0aW9uIG9mIGEgbnVtYmVyCgkJaW9jdGwJCQkJOjEsCS8vIC0gc3lzdGVtLWRlcGVuZGVudCBkZXZpY2UgY29udHJvbCBzeXN0ZW0gY2FsbAoJCSdqb2luJwkJCQk6MSwJLy8gLSBqb2luIGEgbGlzdCBpbnRvIGEgc3RyaW5nIHVzaW5nIGEgc2VwYXJhdG9yCgkJa2V5cwkJCQk6MSwJLy8gLSByZXRyaWV2ZSBsaXN0IG9mIGluZGljZXMgZnJvbSBhIGhhc2gKCQlraWxsCQkJCToxLAkvLyAtIHNlbmQgYSBzaWduYWwgdG8gYSBwcm9jZXNzIG9yIHByb2Nlc3MgZ3JvdXAKCQlsYXN0CQkJCToxLAkvLyAtIGV4aXQgYSBibG9jayBwcmVtYXR1cmVseQoJCWxjCQkJCToxLAkvLyAtIHJldHVybiBsb3dlci1jYXNlIHZlcnNpb24gb2YgYSBzdHJpbmcKCQlsY2ZpcnN0CQkJCToxLAkvLyAtIHJldHVybiBhIHN0cmluZyB3aXRoIGp1c3QgdGhlIG5leHQgbGV0dGVyIGluIGxvd2VyIGNhc2UKCQlsZW5ndGgJCQkJOjEsCS8vIC0gcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gYSBzdHJpbmcKCQknbGluaycJCQkJOjEsCS8vIC0gY3JlYXRlIGEgaGFyZCBsaW5rIGluIHRoZSBmaWxlc3l0ZW0KCQlsaXN0ZW4JCQkJOjEsCS8vIC0gcmVnaXN0ZXIgeW91ciBzb2NrZXQgYXMgYSBzZXJ2ZXIKCQlsb2NhbAkJCQk6IDIsCS8vIC0gY3JlYXRlIGEgdGVtcG9yYXJ5IHZhbHVlIGZvciBhIGdsb2JhbCB2YXJpYWJsZSAoZHluYW1pYyBzY29waW5nKQoJCWxvY2FsdGltZQkJCToxLAkvLyAtIGNvbnZlcnQgVU5JWCB0aW1lIGludG8gcmVjb3JkIG9yIHN0cmluZyB1c2luZyBsb2NhbCB0aW1lCgkJbG9jawkJCQk6MSwJLy8gLSBnZXQgYSB0aHJlYWQgbG9jayBvbiBhIHZhcmlhYmxlLCBzdWJyb3V0aW5lLCBvciBtZXRob2QKCQknbG9nJwkJCQk6MSwJLy8gLSByZXRyaWV2ZSB0aGUgbmF0dXJhbCBsb2dhcml0aG0gZm9yIGEgbnVtYmVyCgkJbHN0YXQJCQkJOjEsCS8vIC0gc3RhdCBhIHN5bWJvbGljIGxpbmsKCQltCQkJCTpudWxsLAkvLyAtIG1hdGNoIGEgc3RyaW5nIHdpdGggYSByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybgoJCW1hcAkJCQk6MSwJLy8gLSBhcHBseSBhIGNoYW5nZSB0byBhIGxpc3QgdG8gZ2V0IGJhY2sgYSBuZXcgbGlzdCB3aXRoIHRoZSBjaGFuZ2VzCgkJbWtkaXIJCQkJOjEsCS8vIC0gY3JlYXRlIGEgZGlyZWN0b3J5CgkJbXNnY3RsCQkJCToxLAkvLyAtIFN5c1YgSVBDIG1lc3NhZ2UgY29udHJvbCBvcGVyYXRpb25zCgkJbXNnZ2V0CQkJCToxLAkvLyAtIGdldCBTeXNWIElQQyBtZXNzYWdlIHF1ZXVlCgkJbXNncmN2CQkJCToxLAkvLyAtIHJlY2VpdmUgYSBTeXNWIElQQyBtZXNzYWdlIGZyb20gYSBtZXNzYWdlIHF1ZXVlCgkJbXNnc25kCQkJCToxLAkvLyAtIHNlbmQgYSBTeXNWIElQQyBtZXNzYWdlIHRvIGEgbWVzc2FnZSBxdWV1ZQoJCW15CQkJCTogMiwJLy8gLSBkZWNsYXJlIGFuZCBhc3NpZ24gYSBsb2NhbCB2YXJpYWJsZSAobGV4aWNhbCBzY29waW5nKQoJCSduZXcnCQkJCToxLAkvLwoJCW5leHQJCQkJOjEsCS8vIC0gaXRlcmF0ZSBhIGJsb2NrIHByZW1hdHVyZWx5CgkJbm8JCQkJOjEsCS8vIC0gdW5pbXBvcnQgc29tZSBtb2R1bGUgc3ltYm9scyBvciBzZW1hbnRpY3MgYXQgY29tcGlsZSB0aW1lCgkJb2N0CQkJCToxLAkvLyAtIGNvbnZlcnQgYSBzdHJpbmcgdG8gYW4gb2N0YWwgbnVtYmVyCgkJb3BlbgkJCQk6MSwJLy8gLSBvcGVuIGEgZmlsZSwgcGlwZSwgb3IgZGVzY3JpcHRvcgoJCW9wZW5kaXIJCQkJOjEsCS8vIC0gb3BlbiBhIGRpcmVjdG9yeQoJCW9yZAkJCQk6MSwJLy8gLSBmaW5kIGEgY2hhcmFjdGVyJ3MgbnVtZXJpYyByZXByZXNlbnRhdGlvbgoJCW91cgkJCQk6IDIsCS8vIC0gZGVjbGFyZSBhbmQgYXNzaWduIGEgcGFja2FnZSB2YXJpYWJsZSAobGV4aWNhbCBzY29waW5nKQoJCXBhY2sJCQkJOjEsCS8vIC0gY29udmVydCBhIGxpc3QgaW50byBhIGJpbmFyeSByZXByZXNlbnRhdGlvbgoJCSdwYWNrYWdlJwkJCToxLAkvLyAtIGRlY2xhcmUgYSBzZXBhcmF0ZSBnbG9iYWwgbmFtZXNwYWNlCgkJcGlwZQkJCQk6MSwJLy8gLSBvcGVuIGEgcGFpciBvZiBjb25uZWN0ZWQgZmlsZWhhbmRsZXMKCQlwb3AJCQkJOjEsCS8vIC0gcmVtb3ZlIHRoZSBsYXN0IGVsZW1lbnQgZnJvbSBhbiBhcnJheSBhbmQgcmV0dXJuIGl0CgkJcG9zCQkJCToxLAkvLyAtIGZpbmQgb3Igc2V0IHRoZSBvZmZzZXQgZm9yIHRoZSBsYXN0L25leHQgbS8vZyBzZWFyY2gKCQlwcmludAkJCQk6MSwJLy8gLSBvdXRwdXQgYSBsaXN0IHRvIGEgZmlsZWhhbmRsZQoJCXByaW50ZgkJCQk6MSwJLy8gLSBvdXRwdXQgYSBmb3JtYXR0ZWQgbGlzdCB0byBhIGZpbGVoYW5kbGUKCQlwcm90b3R5cGUJCQk6MSwJLy8gLSBnZXQgdGhlIHByb3RvdHlwZSAoaWYgYW55KSBvZiBhIHN1YnJvdXRpbmUKCQlwdXNoCQkJCToxLAkvLyAtIGFwcGVuZCBvbmUgb3IgbW9yZSBlbGVtZW50cyB0byBhbiBhcnJheQoJCXEJCQkJOm51bGwsCS8vIC0gc2luZ2x5IHF1b3RlIGEgc3RyaW5nCgkJcXEJCQkJOm51bGwsCS8vIC0gZG91Ymx5IHF1b3RlIGEgc3RyaW5nCgkJcXIJCQkJOm51bGwsCS8vIC0gQ29tcGlsZSBwYXR0ZXJuCgkJcXVvdGVtZXRhCQkJOm51bGwsCS8vIC0gcXVvdGUgcmVndWxhciBleHByZXNzaW9uIG1hZ2ljIGNoYXJhY3RlcnMKCQlxdwkJCQk6bnVsbCwJLy8gLSBxdW90ZSBhIGxpc3Qgb2Ygd29yZHMKCQlxeAkJCQk6bnVsbCwJLy8gLSBiYWNrcXVvdGUgcXVvdGUgYSBzdHJpbmcKCQlyYW5kCQkJCToxLAkvLyAtIHJldHJpZXZlIHRoZSBuZXh0IHBzZXVkb3JhbmRvbSBudW1iZXIKCQlyZWFkCQkJCToxLAkvLyAtIGZpeGVkLWxlbmd0aCBidWZmZXJlZCBpbnB1dCBmcm9tIGEgZmlsZWhhbmRsZQoJCXJlYWRkaXIJCQkJOjEsCS8vIC0gZ2V0IGEgZGlyZWN0b3J5IGZyb20gYSBkaXJlY3RvcnkgaGFuZGxlCgkJcmVhZGxpbmUJCQk6MSwJLy8gLSBmZXRjaCBhIHJlY29yZCBmcm9tIGEgZmlsZQoJCXJlYWRsaW5rCQkJOjEsCS8vIC0gZGV0ZXJtaW5lIHdoZXJlIGEgc3ltYm9saWMgbGluayBpcyBwb2ludGluZwoJCXJlYWRwaXBlCQkJOjEsCS8vIC0gZXhlY3V0ZSBhIHN5c3RlbSBjb21tYW5kIGFuZCBjb2xsZWN0IHN0YW5kYXJkIG91dHB1dAoJCXJlY3YJCQkJOjEsCS8vIC0gcmVjZWl2ZSBhIG1lc3NhZ2Ugb3ZlciBhIFNvY2tldAoJCXJlZG8JCQkJOjEsCS8vIC0gc3RhcnQgdGhpcyBsb29wIGl0ZXJhdGlvbiBvdmVyIGFnYWluCgkJcmVmCQkJCToxLAkvLyAtIGZpbmQgb3V0IHRoZSB0eXBlIG9mIHRoaW5nIGJlaW5nIHJlZmVyZW5jZWQKCQlyZW5hbWUJCQkJOjEsCS8vIC0gY2hhbmdlIGEgZmlsZW5hbWUKCQlyZXF1aXJlCQkJCToxLAkvLyAtIGxvYWQgaW4gZXh0ZXJuYWwgZnVuY3Rpb25zIGZyb20gYSBsaWJyYXJ5IGF0IHJ1bnRpbWUKCQlyZXNldAkJCQk6MSwJLy8gLSBjbGVhciBhbGwgdmFyaWFibGVzIG9mIGEgZ2l2ZW4gbmFtZQoJCSdyZXR1cm4nCQkJOjEsCS8vIC0gZ2V0IG91dCBvZiBhIGZ1bmN0aW9uIGVhcmx5CgkJcmV2ZXJzZQkJCQk6MSwJLy8gLSBmbGlwIGEgc3RyaW5nIG9yIGEgbGlzdAoJCXJld2luZGRpcgkJCToxLAkvLyAtIHJlc2V0IGRpcmVjdG9yeSBoYW5kbGUKCQlyaW5kZXgJCQkJOjEsCS8vIC0gcmlnaHQtdG8tbGVmdCBzdWJzdHJpbmcgc2VhcmNoCgkJcm1kaXIJCQkJOjEsCS8vIC0gcmVtb3ZlIGEgZGlyZWN0b3J5CgkJcwkJCQk6bnVsbCwJLy8gLSByZXBsYWNlIGEgcGF0dGVybiB3aXRoIGEgc3RyaW5nCgkJc2F5CQkJCToxLAkvLyAtIHByaW50IHdpdGggbmV3bGluZQoJCXNjYWxhcgkJCQk6MSwJLy8gLSBmb3JjZSBhIHNjYWxhciBjb250ZXh0CgkJc2VlawkJCQk6MSwJLy8gLSByZXBvc2l0aW9uIGZpbGUgcG9pbnRlciBmb3IgcmFuZG9tLWFjY2VzcyBJL08KCQlzZWVrZGlyCQkJCToxLAkvLyAtIHJlcG9zaXRpb24gZGlyZWN0b3J5IHBvaW50ZXIKCQlzZWxlY3QJCQkJOjEsCS8vIC0gcmVzZXQgZGVmYXVsdCBvdXRwdXQgb3IgZG8gSS9PIG11bHRpcGxleGluZwoJCXNlbWN0bAkJCQk6MSwJLy8gLSBTeXNWIHNlbWFwaG9yZSBjb250cm9sIG9wZXJhdGlvbnMKCQlzZW1nZXQJCQkJOjEsCS8vIC0gZ2V0IHNldCBvZiBTeXNWIHNlbWFwaG9yZXMKCQlzZW1vcAkJCQk6MSwJLy8gLSBTeXNWIHNlbWFwaG9yZSBvcGVyYXRpb25zCgkJc2VuZAkJCQk6MSwJLy8gLSBzZW5kIGEgbWVzc2FnZSBvdmVyIGEgc29ja2V0CgkJc2V0Z3JlbnQJCQk6MSwJLy8gLSBwcmVwYXJlIGdyb3VwIGZpbGUgZm9yIHVzZQoJCXNldGhvc3RlbnQJCQk6MSwJLy8gLSBwcmVwYXJlIGhvc3RzIGZpbGUgZm9yIHVzZQoJCXNldG5ldGVudAkJCToxLAkvLyAtIHByZXBhcmUgbmV0d29ya3MgZmlsZSBmb3IgdXNlCgkJc2V0cGdycAkJCQk6MSwJLy8gLSBzZXQgdGhlIHByb2Nlc3MgZ3JvdXAgb2YgYSBwcm9jZXNzCgkJc2V0cHJpb3JpdHkJCQk6MSwJLy8gLSBzZXQgYSBwcm9jZXNzJ3MgbmljZSB2YWx1ZQoJCXNldHByb3RvZW50CQkJOjEsCS8vIC0gcHJlcGFyZSBwcm90b2NvbHMgZmlsZSBmb3IgdXNlCgkJc2V0cHdlbnQJCQk6MSwJLy8gLSBwcmVwYXJlIHBhc3N3ZCBmaWxlIGZvciB1c2UKCQlzZXRzZXJ2ZW50CQkJOjEsCS8vIC0gcHJlcGFyZSBzZXJ2aWNlcyBmaWxlIGZvciB1c2UKCQlzZXRzb2Nrb3B0CQkJOjEsCS8vIC0gc2V0IHNvbWUgc29ja2V0IG9wdGlvbnMKCQlzaGlmdAkJCQk6MSwJLy8gLSByZW1vdmUgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYW4gYXJyYXksIGFuZCByZXR1cm4gaXQKCQlzaG1jdGwJCQkJOjEsCS8vIC0gU3lzViBzaGFyZWQgbWVtb3J5IG9wZXJhdGlvbnMKCQlzaG1nZXQJCQkJOjEsCS8vIC0gZ2V0IFN5c1Ygc2hhcmVkIG1lbW9yeSBzZWdtZW50IGlkZW50aWZpZXIKCQlzaG1yZWFkCQkJCToxLAkvLyAtIHJlYWQgU3lzViBzaGFyZWQgbWVtb3J5CgkJc2htd3JpdGUJCQk6MSwJLy8gLSB3cml0ZSBTeXNWIHNoYXJlZCBtZW1vcnkKCQlzaHV0ZG93bgkJCToxLAkvLyAtIGNsb3NlIGRvd24ganVzdCBoYWxmIG9mIGEgc29ja2V0IGNvbm5lY3Rpb24KCQknc2luJwkJCQk6MSwJLy8gLSByZXR1cm4gdGhlIHNpbmUgb2YgYSBudW1iZXIKCQlzbGVlcAkJCQk6MSwJLy8gLSBibG9jayBmb3Igc29tZSBudW1iZXIgb2Ygc2Vjb25kcwoJCXNvY2tldAkJCQk6MSwJLy8gLSBjcmVhdGUgYSBzb2NrZXQKCQlzb2NrZXRwYWlyCQkJOjEsCS8vIC0gY3JlYXRlIGEgcGFpciBvZiBzb2NrZXRzCgkJJ3NvcnQnCQkJCToxLAkvLyAtIHNvcnQgYSBsaXN0IG9mIHZhbHVlcwoJCXNwbGljZQkJCQk6MSwJLy8gLSBhZGQgb3IgcmVtb3ZlIGVsZW1lbnRzIGFueXdoZXJlIGluIGFuIGFycmF5CgkJJ3NwbGl0JwkJCQk6MSwJLy8gLSBzcGxpdCB1cCBhIHN0cmluZyB1c2luZyBhIHJlZ2V4cCBkZWxpbWl0ZXIKCQlzcHJpbnRmCQkJCToxLAkvLyAtIGZvcm1hdHRlZCBwcmludCBpbnRvIGEgc3RyaW5nCgkJJ3NxcnQnCQkJCToxLAkvLyAtIHNxdWFyZSByb290IGZ1bmN0aW9uCgkJc3JhbmQJCQkJOjEsCS8vIC0gc2VlZCB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKCQlzdGF0CQkJCToxLAkvLyAtIGdldCBhIGZpbGUncyBzdGF0dXMgaW5mb3JtYXRpb24KCQlzdGF0ZQkJCQk6MSwJLy8gLSBkZWNsYXJlIGFuZCBhc3NpZ24gYSBzdGF0ZSB2YXJpYWJsZSAocGVyc2lzdGVudCBsZXhpY2FsIHNjb3BpbmcpCgkJc3R1ZHkJCQkJOjEsCS8vIC0gb3B0aW1pemUgaW5wdXQgZGF0YSBmb3IgcmVwZWF0ZWQgc2VhcmNoZXMKCQknc3ViJwkJCQk6MSwJLy8gLSBkZWNsYXJlIGEgc3Vicm91dGluZSwgcG9zc2libHkgYW5vbnltb3VzbHkKCQknc3Vic3RyJwkJCToxLAkvLyAtIGdldCBvciBhbHRlciBhIHBvcnRpb24gb2YgYSBzdGlybmcKCQlzeW1saW5rCQkJCToxLAkvLyAtIGNyZWF0ZSBhIHN5bWJvbGljIGxpbmsgdG8gYSBmaWxlCgkJc3lzY2FsbAkJCQk6MSwJLy8gLSBleGVjdXRlIGFuIGFyYml0cmFyeSBzeXN0ZW0gY2FsbAoJCXN5c29wZW4JCQkJOjEsCS8vIC0gb3BlbiBhIGZpbGUsIHBpcGUsIG9yIGRlc2NyaXB0b3IKCQlzeXNyZWFkCQkJCToxLAkvLyAtIGZpeGVkLWxlbmd0aCB1bmJ1ZmZlcmVkIGlucHV0IGZyb20gYSBmaWxlaGFuZGxlCgkJc3lzc2VlawkJCQk6MSwJLy8gLSBwb3NpdGlvbiBJL08gcG9pbnRlciBvbiBoYW5kbGUgdXNlZCB3aXRoIHN5c3JlYWQgYW5kIHN5c3dyaXRlCgkJc3lzdGVtCQkJCToxLAkvLyAtIHJ1biBhIHNlcGFyYXRlIHByb2dyYW0KCQlzeXN3cml0ZQkJCToxLAkvLyAtIGZpeGVkLWxlbmd0aCB1bmJ1ZmZlcmVkIG91dHB1dCB0byBhIGZpbGVoYW5kbGUKCQl0ZWxsCQkJCToxLAkvLyAtIGdldCBjdXJyZW50IHNlZWtwb2ludGVyIG9uIGEgZmlsZWhhbmRsZQoJCXRlbGxkaXIJCQkJOjEsCS8vIC0gZ2V0IGN1cnJlbnQgc2Vla3BvaW50ZXIgb24gYSBkaXJlY3RvcnkgaGFuZGxlCgkJdGllCQkJCToxLAkvLyAtIGJpbmQgYSB2YXJpYWJsZSB0byBhbiBvYmplY3QgY2xhc3MKCQl0aWVkCQkJCToxLAkvLyAtIGdldCBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IHVuZGVybHlpbmcgYSB0aWVkIHZhcmlhYmxlCgkJdGltZQkJCQk6MSwJLy8gLSByZXR1cm4gbnVtYmVyIG9mIHNlY29uZHMgc2luY2UgMTk3MAoJCXRpbWVzCQkJCToxLAkvLyAtIHJldHVybiBlbGFwc2VkIHRpbWUgZm9yIHNlbGYgYW5kIGNoaWxkIHByb2Nlc3NlcwoJCXRyCQkJCTpudWxsLAkvLyAtIHRyYW5zbGl0ZXJhdGUgYSBzdHJpbmcKCQl0cnVuY2F0ZQkJCToxLAkvLyAtIHNob3J0ZW4gYSBmaWxlCgkJdWMJCQkJOjEsCS8vIC0gcmV0dXJuIHVwcGVyLWNhc2UgdmVyc2lvbiBvZiBhIHN0cmluZwoJCXVjZmlyc3QJCQkJOjEsCS8vIC0gcmV0dXJuIGEgc3RyaW5nIHdpdGgganVzdCB0aGUgbmV4dCBsZXR0ZXIgaW4gdXBwZXIgY2FzZQoJCXVtYXNrCQkJCToxLAkvLyAtIHNldCBmaWxlIGNyZWF0aW9uIG1vZGUgbWFzawoJCXVuZGVmCQkJCToxLAkvLyAtIHJlbW92ZSBhIHZhcmlhYmxlIG9yIGZ1bmN0aW9uIGRlZmluaXRpb24KCQl1bmxpbmsJCQkJOjEsCS8vIC0gcmVtb3ZlIG9uZSBsaW5rIHRvIGEgZmlsZQoJCXVucGFjawkJCQk6MSwJLy8gLSBjb252ZXJ0IGJpbmFyeSBzdHJ1Y3R1cmUgaW50byBub3JtYWwgcGVybCB2YXJpYWJsZXMKCQl1bnNoaWZ0CQkJCToxLAkvLyAtIHByZXBlbmQgbW9yZSBlbGVtZW50cyB0byB0aGUgYmVnaW5uaW5nIG9mIGEgbGlzdAoJCXVudGllCQkJCToxLAkvLyAtIGJyZWFrIGEgdGllIGJpbmRpbmcgdG8gYSB2YXJpYWJsZQoJCXVzZQkJCQk6MSwJLy8gLSBsb2FkIGluIGEgbW9kdWxlIGF0IGNvbXBpbGUgdGltZQoJCXV0aW1lCQkJCToxLAkvLyAtIHNldCBhIGZpbGUncyBsYXN0IGFjY2VzcyBhbmQgbW9kaWZ5IHRpbWVzCgkJdmFsdWVzCQkJCToxLAkvLyAtIHJldHVybiBhIGxpc3Qgb2YgdGhlIHZhbHVlcyBpbiBhIGhhc2gKCQl2ZWMJCQkJOjEsCS8vIC0gdGVzdCBvciBzZXQgcGFydGljdWxhciBiaXRzIGluIGEgc3RyaW5nCgkJd2FpdAkJCQk6MSwJLy8gLSB3YWl0IGZvciBhbnkgY2hpbGQgcHJvY2VzcyB0byBkaWUKCQl3YWl0cGlkCQkJCToxLAkvLyAtIHdhaXQgZm9yIGEgcGFydGljdWxhciBjaGlsZCBwcm9jZXNzIHRvIGRpZQoJCXdhbnRhcnJheQkJCToxLAkvLyAtIGdldCB2b2lkIHZzIHNjYWxhciB2cyBsaXN0IGNvbnRleHQgb2YgY3VycmVudCBzdWJyb3V0aW5lIGNhbGwKCQl3YXJuCQkJCToxLAkvLyAtIHByaW50IGRlYnVnZ2luZyBpbmZvCgkJd2hlbgkJCQk6MSwJLy8KCQl3cml0ZQkJCQk6MSwJLy8gLSBwcmludCBhIHBpY3R1cmUgcmVjb3JkCgkJeQkJCQk6bnVsbH07CS8vIC0gdHJhbnNsaXRlcmF0ZSBhIHN0cmluZwoKCXZhciBSWHN0eWxlPSJzdHJpbmctMiI7Cgl2YXIgUlhtb2RpZmllcnM9L1tnb3NleGltYWNwbHVkXS87CQkvLyBOT1RFOiAibSIsICJzIiwgInkiIGFuZCAidHIiIG5lZWQgdG8gY29ycmVjdCByZWFsIG1vZGlmaWVycyBmb3IgZWFjaCByZWdleHAgdHlwZQoKCWZ1bmN0aW9uIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLGNoYWluLHN0eWxlLHRhaWwpewkvLyBOT1RFOiBjaGFpbi5sZW5ndGggPiAyIGlzIG5vdCB3b3JraW5nIG5vdyAoaXQncyBmb3Igc1suLi5dWy4uLl1nZW9zOykKCQlzdGF0ZS5jaGFpbj1udWxsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMiAgIDN0YWlsCgkJc3RhdGUuc3R5bGU9bnVsbDsKCQlzdGF0ZS50YWlsPW51bGw7CgkJc3RhdGUudG9rZW5pemU9ZnVuY3Rpb24oc3RyZWFtLHN0YXRlKXsKCQkJdmFyIGU9ZmFsc2UsYyxpPTA7CgkJCXdoaWxlKGM9c3RyZWFtLm5leHQoKSl7CgkJCQlpZihjPT09Y2hhaW5baV0mJiFlKXsKCQkJCQlpZihjaGFpblsrK2ldIT09dW5kZWZpbmVkKXsKCQkJCQkJc3RhdGUuY2hhaW49Y2hhaW5baV07CgkJCQkJCXN0YXRlLnN0eWxlPXN0eWxlOwoJCQkJCQlzdGF0ZS50YWlsPXRhaWx9CgkJCQkJZWxzZSBpZih0YWlsKQoJCQkJCQlzdHJlYW0uZWF0V2hpbGUodGFpbCk7CgkJCQkJc3RhdGUudG9rZW5pemU9dG9rZW5QZXJsOwoJCQkJCXJldHVybiBzdHlsZX0KCQkJCWU9IWUmJmM9PSJcXCJ9CgkJCXJldHVybiBzdHlsZX07CgkJcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSxzdGF0ZSl9CgoJZnVuY3Rpb24gdG9rZW5TT01FVEhJTkcoc3RyZWFtLHN0YXRlLHN0cmluZyl7CgkJc3RhdGUudG9rZW5pemU9ZnVuY3Rpb24oc3RyZWFtLHN0YXRlKXsKCQkJaWYoc3RyZWFtLnN0cmluZz09c3RyaW5nKQoJCQkJc3RhdGUudG9rZW5pemU9dG9rZW5QZXJsOwoJCQlzdHJlYW0uc2tpcFRvRW5kKCk7CgkJCXJldHVybiAic3RyaW5nIn07CgkJcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSxzdGF0ZSl9CgoJZnVuY3Rpb24gdG9rZW5QZXJsKHN0cmVhbSxzdGF0ZSl7CgkJaWYoc3RyZWFtLmVhdFNwYWNlKCkpCgkJCXJldHVybiBudWxsOwoJCWlmKHN0YXRlLmNoYWluKQoJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsc3RhdGUuY2hhaW4sc3RhdGUuc3R5bGUsc3RhdGUudGFpbCk7CgkJaWYoc3RyZWFtLm1hdGNoKC9eXC0/W1xkXC5dLyxmYWxzZSkpCgkJCWlmKHN0cmVhbS5tYXRjaCgvXihcLT8oXGQqXC5cZCsoZVsrLV0/XGQrKT98XGQrXC5cZCopfDB4W1xkYS1mQS1GXSt8MGJbMDFdK3xcZCsoZVsrLV0/XGQrKT8pLykpCgkJCQlyZXR1cm4gJ251bWJlcic7CgkJaWYoc3RyZWFtLm1hdGNoKC9ePDwoPz1cdykvKSl7CQkJLy8gTk9URTogPDxTT01FVEhJTkdcbi4uLlxuU09NRVRISU5HXG4KCQkJc3RyZWFtLmVhdFdoaWxlKC9cdy8pOwoJCQlyZXR1cm4gdG9rZW5TT01FVEhJTkcoc3RyZWFtLHN0YXRlLHN0cmVhbS5jdXJyZW50KCkuc3Vic3RyKDIpKX0KCQlpZihzdHJlYW0uc29sKCkmJnN0cmVhbS5tYXRjaCgvXlw9aXRlbSg/IVx3KS8pKXsvLyBOT1RFOiBcbj1pdGVtLi4uXG49Y3V0XG4KCQkJcmV0dXJuIHRva2VuU09NRVRISU5HKHN0cmVhbSxzdGF0ZSwnPWN1dCcpfQoJCXZhciBjaD1zdHJlYW0ubmV4dCgpOwoJCWlmKGNoPT0nIid8fGNoPT0iJyIpewkJCQkvLyBOT1RFOiAnIG9yICIgb3IgPDwnU09NRVRISU5HJ1xuLi4uXG5TT01FVEhJTkdcbiBvciA8PCJTT01FVEhJTkciXG4uLi5cblNPTUVUSElOR1xuCgkJCWlmKHN0cmVhbS5wcmVmaXgoMyk9PSI8PCIrY2gpewoJCQkJdmFyIHA9c3RyZWFtLnBvczsKCQkJCXN0cmVhbS5lYXRXaGlsZSgvXHcvKTsKCQkJCXZhciBuPXN0cmVhbS5jdXJyZW50KCkuc3Vic3RyKDEpOwoJCQkJaWYobiYmc3RyZWFtLmVhdChjaCkpCgkJCQkJcmV0dXJuIHRva2VuU09NRVRISU5HKHN0cmVhbSxzdGF0ZSxuKTsKCQkJCXN0cmVhbS5wb3M9cH0KCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFtjaF0sInN0cmluZyIpfQoJCWlmKGNoPT0icSIpewoJCQl2YXIgYz1zdHJlYW0ubG9vaygtMik7CgkJCWlmKCEoYyYmL1x3Ly50ZXN0KGMpKSl7CgkJCQljPXN0cmVhbS5sb29rKDApOwoJCQkJaWYoYz09IngiKXsKCQkJCQljPXN0cmVhbS5sb29rKDEpOwoJCQkJCWlmKGM9PSIoIil7CgkJCQkJCXN0cmVhbS5lYXRTdWZmaXgoMik7CgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbIikiXSxSWHN0eWxlLFJYbW9kaWZpZXJzKX0KCQkJCQlpZihjPT0iWyIpewoJCQkJCQlzdHJlYW0uZWF0U3VmZml4KDIpOwoJCQkJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsWyJdIl0sUlhzdHlsZSxSWG1vZGlmaWVycyl9CgkJCQkJaWYoYz09InsiKXsKCQkJCQkJc3RyZWFtLmVhdFN1ZmZpeCgyKTsKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsifSJdLFJYc3R5bGUsUlhtb2RpZmllcnMpfQoJCQkJCWlmKGM9PSI8Iil7CgkJCQkJCXN0cmVhbS5lYXRTdWZmaXgoMik7CgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbIj4iXSxSWHN0eWxlLFJYbW9kaWZpZXJzKX0KCQkJCQlpZigvW1xeJyIhflwvXS8udGVzdChjKSl7CgkJCQkJCXN0cmVhbS5lYXRTdWZmaXgoMSk7CgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbc3RyZWFtLmVhdChjKV0sUlhzdHlsZSxSWG1vZGlmaWVycyl9fQoJCQkJZWxzZSBpZihjPT0icSIpewoJCQkJCWM9c3RyZWFtLmxvb2soMSk7CgkJCQkJaWYoYz09IigiKXsKCQkJCQkJc3RyZWFtLmVhdFN1ZmZpeCgyKTsKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsiKSJdLCJzdHJpbmciKX0KCQkJCQlpZihjPT0iWyIpewoJCQkJCQlzdHJlYW0uZWF0U3VmZml4KDIpOwoJCQkJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsWyJdIl0sInN0cmluZyIpfQoJCQkJCWlmKGM9PSJ7Iil7CgkJCQkJCXN0cmVhbS5lYXRTdWZmaXgoMik7CgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbIn0iXSwic3RyaW5nIil9CgkJCQkJaWYoYz09IjwiKXsKCQkJCQkJc3RyZWFtLmVhdFN1ZmZpeCgyKTsKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsiPiJdLCJzdHJpbmciKX0KCQkJCQlpZigvW1xeJyIhflwvXS8udGVzdChjKSl7CgkJCQkJCXN0cmVhbS5lYXRTdWZmaXgoMSk7CgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbc3RyZWFtLmVhdChjKV0sInN0cmluZyIpfX0KCQkJCWVsc2UgaWYoYz09InciKXsKCQkJCQljPXN0cmVhbS5sb29rKDEpOwoJCQkJCWlmKGM9PSIoIil7CgkJCQkJCXN0cmVhbS5lYXRTdWZmaXgoMik7CgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbIikiXSwiYnJhY2tldCIpfQoJCQkJCWlmKGM9PSJbIil7CgkJCQkJCXN0cmVhbS5lYXRTdWZmaXgoMik7CgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbIl0iXSwiYnJhY2tldCIpfQoJCQkJCWlmKGM9PSJ7Iil7CgkJCQkJCXN0cmVhbS5lYXRTdWZmaXgoMik7CgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbIn0iXSwiYnJhY2tldCIpfQoJCQkJCWlmKGM9PSI8Iil7CgkJCQkJCXN0cmVhbS5lYXRTdWZmaXgoMik7CgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbIj4iXSwiYnJhY2tldCIpfQoJCQkJCWlmKC9bXF4nIiF+XC9dLy50ZXN0KGMpKXsKCQkJCQkJc3RyZWFtLmVhdFN1ZmZpeCgxKTsKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFtzdHJlYW0uZWF0KGMpXSwiYnJhY2tldCIpfX0KCQkJCWVsc2UgaWYoYz09InIiKXsKCQkJCQljPXN0cmVhbS5sb29rKDEpOwoJCQkJCWlmKGM9PSIoIil7CgkJCQkJCXN0cmVhbS5lYXRTdWZmaXgoMik7CgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbIikiXSxSWHN0eWxlLFJYbW9kaWZpZXJzKX0KCQkJCQlpZihjPT0iWyIpewoJCQkJCQlzdHJlYW0uZWF0U3VmZml4KDIpOwoJCQkJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsWyJdIl0sUlhzdHlsZSxSWG1vZGlmaWVycyl9CgkJCQkJaWYoYz09InsiKXsKCQkJCQkJc3RyZWFtLmVhdFN1ZmZpeCgyKTsKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsifSJdLFJYc3R5bGUsUlhtb2RpZmllcnMpfQoJCQkJCWlmKGM9PSI8Iil7CgkJCQkJCXN0cmVhbS5lYXRTdWZmaXgoMik7CgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbIj4iXSxSWHN0eWxlLFJYbW9kaWZpZXJzKX0KCQkJCQlpZigvW1xeJyIhflwvXS8udGVzdChjKSl7CgkJCQkJCXN0cmVhbS5lYXRTdWZmaXgoMSk7CgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbc3RyZWFtLmVhdChjKV0sUlhzdHlsZSxSWG1vZGlmaWVycyl9fQoJCQkJZWxzZSBpZigvW1xeJyIhflwvKFxbezxdLy50ZXN0KGMpKXsKCQkJCQlpZihjPT0iKCIpewoJCQkJCQlzdHJlYW0uZWF0U3VmZml4KDEpOwoJCQkJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsWyIpIl0sInN0cmluZyIpfQoJCQkJCWlmKGM9PSJbIil7CgkJCQkJCXN0cmVhbS5lYXRTdWZmaXgoMSk7CgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbIl0iXSwic3RyaW5nIil9CgkJCQkJaWYoYz09InsiKXsKCQkJCQkJc3RyZWFtLmVhdFN1ZmZpeCgxKTsKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsifSJdLCJzdHJpbmciKX0KCQkJCQlpZihjPT0iPCIpewoJCQkJCQlzdHJlYW0uZWF0U3VmZml4KDEpOwoJCQkJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsWyI+Il0sInN0cmluZyIpfQoJCQkJCWlmKC9bXF4nIiF+XC9dLy50ZXN0KGMpKXsKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFtzdHJlYW0uZWF0KGMpXSwic3RyaW5nIil9fX19CgkJaWYoY2g9PSJtIil7CgkJCXZhciBjPXN0cmVhbS5sb29rKC0yKTsKCQkJaWYoIShjJiYvXHcvLnRlc3QoYykpKXsKCQkJCWM9c3RyZWFtLmVhdCgvWyhcW3s8XF4nIiF+XC9dLyk7CgkJCQlpZihjKXsKCQkJCQlpZigvW1xeJyIhflwvXS8udGVzdChjKSl7CgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbY10sUlhzdHlsZSxSWG1vZGlmaWVycyl9CgkJCQkJaWYoYz09IigiKXsKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsiKSJdLFJYc3R5bGUsUlhtb2RpZmllcnMpfQoJCQkJCWlmKGM9PSJbIil7CgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbIl0iXSxSWHN0eWxlLFJYbW9kaWZpZXJzKX0KCQkJCQlpZihjPT0ieyIpewoJCQkJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsWyJ9Il0sUlhzdHlsZSxSWG1vZGlmaWVycyl9CgkJCQkJaWYoYz09IjwiKXsKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsiPiJdLFJYc3R5bGUsUlhtb2RpZmllcnMpfX19fQoJCWlmKGNoPT0icyIpewoJCQl2YXIgYz0vW1wvPlxdfSlcd10vLnRlc3Qoc3RyZWFtLmxvb2soLTIpKTsKCQkJaWYoIWMpewoJCQkJYz1zdHJlYW0uZWF0KC9bKFxbezxcXiciIX5cL10vKTsKCQkJCWlmKGMpewoJCQkJCWlmKGM9PSJbIikKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsiXSIsIl0iXSxSWHN0eWxlLFJYbW9kaWZpZXJzKTsKCQkJCQlpZihjPT0ieyIpCgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbIn0iLCJ9Il0sUlhzdHlsZSxSWG1vZGlmaWVycyk7CgkJCQkJaWYoYz09IjwiKQoJCQkJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsWyI+IiwiPiJdLFJYc3R5bGUsUlhtb2RpZmllcnMpOwoJCQkJCWlmKGM9PSIoIikKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsiKSIsIikiXSxSWHN0eWxlLFJYbW9kaWZpZXJzKTsKCQkJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsW2MsY10sUlhzdHlsZSxSWG1vZGlmaWVycyl9fX0KCQlpZihjaD09InkiKXsKCQkJdmFyIGM9L1tcLz5cXX0pXHddLy50ZXN0KHN0cmVhbS5sb29rKC0yKSk7CgkJCWlmKCFjKXsKCQkJCWM9c3RyZWFtLmVhdCgvWyhcW3s8XF4nIiF+XC9dLyk7CgkJCQlpZihjKXsKCQkJCQlpZihjPT0iWyIpCgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbIl0iLCJdIl0sUlhzdHlsZSxSWG1vZGlmaWVycyk7CgkJCQkJaWYoYz09InsiKQoJCQkJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsWyJ9IiwifSJdLFJYc3R5bGUsUlhtb2RpZmllcnMpOwoJCQkJCWlmKGM9PSI8IikKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsiPiIsIj4iXSxSWHN0eWxlLFJYbW9kaWZpZXJzKTsKCQkJCQlpZihjPT0iKCIpCgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbIikiLCIpIl0sUlhzdHlsZSxSWG1vZGlmaWVycyk7CgkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFtjLGNdLFJYc3R5bGUsUlhtb2RpZmllcnMpfX19CgkJaWYoY2g9PSJ0Iil7CgkJCXZhciBjPS9bXC8+XF19KVx3XS8udGVzdChzdHJlYW0ubG9vaygtMikpOwoJCQlpZighYyl7CgkJCQljPXN0cmVhbS5lYXQoInIiKTtpZihjKXsKCQkJCWM9c3RyZWFtLmVhdCgvWyhcW3s8XF4nIiF+XC9dLyk7CgkJCQlpZihjKXsKCQkJCQlpZihjPT0iWyIpCgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbIl0iLCJdIl0sUlhzdHlsZSxSWG1vZGlmaWVycyk7CgkJCQkJaWYoYz09InsiKQoJCQkJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsWyJ9IiwifSJdLFJYc3R5bGUsUlhtb2RpZmllcnMpOwoJCQkJCWlmKGM9PSI8IikKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsiPiIsIj4iXSxSWHN0eWxlLFJYbW9kaWZpZXJzKTsKCQkJCQlpZihjPT0iKCIpCgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbIikiLCIpIl0sUlhzdHlsZSxSWG1vZGlmaWVycyk7CgkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFtjLGNdLFJYc3R5bGUsUlhtb2RpZmllcnMpfX19fQoJCWlmKGNoPT0iYCIpewoJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsW2NoXSwidmFyaWFibGUtMiIpfQoJCWlmKGNoPT0iLyIpewoJCQlpZighL35ccyokLy50ZXN0KHN0cmVhbS5wcmVmaXgoKSkpCgkJCQlyZXR1cm4gIm9wZXJhdG9yIjsKCQkJZWxzZQoJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFtjaF0sUlhzdHlsZSxSWG1vZGlmaWVycyl9CgkJaWYoY2g9PSIkIil7CgkJCXZhciBwPXN0cmVhbS5wb3M7CgkJCWlmKHN0cmVhbS5lYXRXaGlsZSgvXGQvKXx8c3RyZWFtLmVhdCgieyIpJiZzdHJlYW0uZWF0V2hpbGUoL1xkLykmJnN0cmVhbS5lYXQoIn0iKSkKCQkJCXJldHVybiAidmFyaWFibGUtMiI7CgkJCWVsc2UKCQkJCXN0cmVhbS5wb3M9cH0KCQlpZigvWyRAJV0vLnRlc3QoY2gpKXsKCQkJdmFyIHA9c3RyZWFtLnBvczsKCQkJaWYoc3RyZWFtLmVhdCgiXiIpJiZzdHJlYW0uZWF0KC9bQS1aXS8pfHwhL1tAJCUmXS8udGVzdChzdHJlYW0ubG9vaygtMikpJiZzdHJlYW0uZWF0KC9bPXxcXFwtIz9AOzomYH5cXiFcW1xdKiciJCsuLFwvPD4oKV0vKSl7CgkJCQl2YXIgYz1zdHJlYW0uY3VycmVudCgpOwoJCQkJaWYoUEVSTFtjXSkKCQkJCQlyZXR1cm4gInZhcmlhYmxlLTIifQoJCQlzdHJlYW0ucG9zPXB9CgkJaWYoL1skQCUmXS8udGVzdChjaCkpewoJCQlpZihzdHJlYW0uZWF0V2hpbGUoL1tcdyRcW1xdXS8pfHxzdHJlYW0uZWF0KCJ7IikmJnN0cmVhbS5lYXRXaGlsZSgvW1x3JFxbXF1dLykmJnN0cmVhbS5lYXQoIn0iKSl7CgkJCQl2YXIgYz1zdHJlYW0uY3VycmVudCgpOwoJCQkJaWYoUEVSTFtjXSkKCQkJCQlyZXR1cm4gInZhcmlhYmxlLTIiOwoJCQkJZWxzZQoJCQkJCXJldHVybiAidmFyaWFibGUifX0KCQlpZihjaD09IiMiKXsKCQkJaWYoc3RyZWFtLmxvb2soLTIpIT0iJCIpewoJCQkJc3RyZWFtLnNraXBUb0VuZCgpOwoJCQkJcmV0dXJuICJjb21tZW50In19CgkJaWYoL1s6K1wtXF4qJCYlQD08PiE/fFwvflwuXS8udGVzdChjaCkpewoJCQl2YXIgcD1zdHJlYW0ucG9zOwoJCQlzdHJlYW0uZWF0V2hpbGUoL1s6K1wtXF4qJCYlQD08PiE/fFwvflwuXS8pOwoJCQlpZihQRVJMW3N0cmVhbS5jdXJyZW50KCldKQoJCQkJcmV0dXJuICJvcGVyYXRvciI7CgkJCWVsc2UKCQkJCXN0cmVhbS5wb3M9cH0KCQlpZihjaD09Il8iKXsKCQkJaWYoc3RyZWFtLnBvcz09MSl7CgkJCQlpZihzdHJlYW0uc3VmZml4KDYpPT0iX0VORF9fIil7CgkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsnXDAnXSwiY29tbWVudCIpfQoJCQkJZWxzZSBpZihzdHJlYW0uc3VmZml4KDcpPT0iX0RBVEFfXyIpewoJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbJ1wwJ10sInZhcmlhYmxlLTIiKX0KCQkJCWVsc2UgaWYoc3RyZWFtLnN1ZmZpeCg3KT09Il9DX18iKXsKCQkJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsWydcMCddLCJzdHJpbmciKX19fQoJCWlmKC9cdy8udGVzdChjaCkpewoJCQl2YXIgcD1zdHJlYW0ucG9zOwoJCQlpZihzdHJlYW0ubG9vaygtMik9PSJ7IiYmKHN0cmVhbS5sb29rKDApPT0ifSJ8fHN0cmVhbS5lYXRXaGlsZSgvXHcvKSYmc3RyZWFtLmxvb2soMCk9PSJ9IikpCgkJCQlyZXR1cm4gInN0cmluZyI7CgkJCWVsc2UKCQkJCXN0cmVhbS5wb3M9cH0KCQlpZigvW0EtWl0vLnRlc3QoY2gpKXsKCQkJdmFyIGw9c3RyZWFtLmxvb2soLTIpOwoJCQl2YXIgcD1zdHJlYW0ucG9zOwoJCQlzdHJlYW0uZWF0V2hpbGUoL1tBLVpfXS8pOwoJCQlpZigvW1xkYS16XS8udGVzdChzdHJlYW0ubG9vaygwKSkpewoJCQkJc3RyZWFtLnBvcz1wfQoJCQllbHNlewoJCQkJdmFyIGM9UEVSTFtzdHJlYW0uY3VycmVudCgpXTsKCQkJCWlmKCFjKQoJCQkJCXJldHVybiAibWV0YSI7CgkJCQlpZihjWzFdKQoJCQkJCWM9Y1swXTsKCQkJCWlmKGwhPSI6Iil7CgkJCQkJaWYoYz09MSkKCQkJCQkJcmV0dXJuICJrZXl3b3JkIjsKCQkJCQllbHNlIGlmKGM9PTIpCgkJCQkJCXJldHVybiAiZGVmIjsKCQkJCQllbHNlIGlmKGM9PTMpCgkJCQkJCXJldHVybiAiYXRvbSI7CgkJCQkJZWxzZSBpZihjPT00KQoJCQkJCQlyZXR1cm4gIm9wZXJhdG9yIjsKCQkJCQllbHNlIGlmKGM9PTUpCgkJCQkJCXJldHVybiAidmFyaWFibGUtMiI7CgkJCQkJZWxzZQoJCQkJCQlyZXR1cm4gIm1ldGEifQoJCQkJZWxzZQoJCQkJCXJldHVybiAibWV0YSJ9fQoJCWlmKC9bYS16QS1aX10vLnRlc3QoY2gpKXsKCQkJdmFyIGw9c3RyZWFtLmxvb2soLTIpOwoJCQlzdHJlYW0uZWF0V2hpbGUoL1x3Lyk7CgkJCXZhciBjPVBFUkxbc3RyZWFtLmN1cnJlbnQoKV07CgkJCWlmKCFjKQoJCQkJcmV0dXJuICJtZXRhIjsKCQkJaWYoY1sxXSkKCQkJCWM9Y1swXTsKCQkJaWYobCE9IjoiKXsKCQkJCWlmKGM9PTEpCgkJCQkJcmV0dXJuICJrZXl3b3JkIjsKCQkJCWVsc2UgaWYoYz09MikKCQkJCQlyZXR1cm4gImRlZiI7CgkJCQllbHNlIGlmKGM9PTMpCgkJCQkJcmV0dXJuICJhdG9tIjsKCQkJCWVsc2UgaWYoYz09NCkKCQkJCQlyZXR1cm4gIm9wZXJhdG9yIjsKCQkJCWVsc2UgaWYoYz09NSkKCQkJCQlyZXR1cm4gInZhcmlhYmxlLTIiOwoJCQkJZWxzZQoJCQkJCXJldHVybiAibWV0YSJ9CgkJCWVsc2UKCQkJCXJldHVybiAibWV0YSJ9CgkJcmV0dXJuIG51bGx9CgoJcmV0dXJuewoJCXN0YXJ0U3RhdGU6ZnVuY3Rpb24oKXsKCQkJcmV0dXJuewoJCQkJdG9rZW5pemU6dG9rZW5QZXJsLAoJCQkJY2hhaW46bnVsbCwKCQkJCXN0eWxlOm51bGwsCgkJCQl0YWlsOm51bGx9fSwKCQl0b2tlbjpmdW5jdGlvbihzdHJlYW0sc3RhdGUpewoJCQlyZXR1cm4gKHN0YXRlLnRva2VuaXplfHx0b2tlblBlcmwpKHN0cmVhbSxzdGF0ZSl9LAoJCWVsZWN0cmljQ2hhcnM6Int9In19KTsKCkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LXBlcmwiLCAicGVybCIpOwoKLy8gaXQncyBsaWtlICJwZWVrIiwgYnV0IG5lZWQgZm9yIGxvb2stYWhlYWQgb3IgbG9vay1iZWhpbmQgaWYgaW5kZXggPCAwCkNvZGVNaXJyb3IuU3RyaW5nU3RyZWFtLnByb3RvdHlwZS5sb29rPWZ1bmN0aW9uKGMpewoJcmV0dXJuIHRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcysoY3x8MCkpfTsKCi8vIHJldHVybiBhIHBhcnQgb2YgcHJlZml4IG9mIGN1cnJlbnQgc3RyZWFtIGZyb20gY3VycmVudCBwb3NpdGlvbgpDb2RlTWlycm9yLlN0cmluZ1N0cmVhbS5wcm90b3R5cGUucHJlZml4PWZ1bmN0aW9uKGMpewoJaWYoYyl7CgkJdmFyIHg9dGhpcy5wb3MtYzsKCQlyZXR1cm4gdGhpcy5zdHJpbmcuc3Vic3RyKCh4Pj0wP3g6MCksYyl9CgllbHNlewoJCXJldHVybiB0aGlzLnN0cmluZy5zdWJzdHIoMCx0aGlzLnBvcy0xKX19OwoKLy8gcmV0dXJuIGEgcGFydCBvZiBzdWZmaXggb2YgY3VycmVudCBzdHJlYW0gZnJvbSBjdXJyZW50IHBvc2l0aW9uCkNvZGVNaXJyb3IuU3RyaW5nU3RyZWFtLnByb3RvdHlwZS5zdWZmaXg9ZnVuY3Rpb24oYyl7Cgl2YXIgeT10aGlzLnN0cmluZy5sZW5ndGg7Cgl2YXIgeD15LXRoaXMucG9zKzE7CglyZXR1cm4gdGhpcy5zdHJpbmcuc3Vic3RyKHRoaXMucG9zLChjJiZjPHk/Yzp4KSl9OwoKLy8gcmV0dXJuIGEgcGFydCBvZiBzdWZmaXggb2YgY3VycmVudCBzdHJlYW0gZnJvbSBjdXJyZW50IHBvc2l0aW9uIGFuZCBjaGFuZ2UgY3VycmVudCBwb3NpdGlvbgpDb2RlTWlycm9yLlN0cmluZ1N0cmVhbS5wcm90b3R5cGUubnN1ZmZpeD1mdW5jdGlvbihjKXsKCXZhciBwPXRoaXMucG9zOwoJdmFyIGw9Y3x8KHRoaXMuc3RyaW5nLmxlbmd0aC10aGlzLnBvcysxKTsKCXRoaXMucG9zKz1sOwoJcmV0dXJuIHRoaXMuc3RyaW5nLnN1YnN0cihwLGwpfTsKCi8vIGVhdGluZyBhbmQgdm9taXRpbmcgYSBwYXJ0IG9mIHN0cmVhbSBmcm9tIGN1cnJlbnQgcG9zaXRpb24KQ29kZU1pcnJvci5TdHJpbmdTdHJlYW0ucHJvdG90eXBlLmVhdFN1ZmZpeD1mdW5jdGlvbihjKXsKCXZhciB4PXRoaXMucG9zK2M7Cgl2YXIgeTsKCWlmKHg8PTApCgkJdGhpcy5wb3M9MDsKCWVsc2UgaWYoeD49KHk9dGhpcy5zdHJpbmcubGVuZ3RoLTEpKQoJCXRoaXMucG9zPXk7CgllbHNlCgkJdGhpcy5wb3M9eH07Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/php/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/php/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFBIUCBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4veG1sL3htbC5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vamF2YXNjcmlwdC9qYXZhc2NyaXB0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9jc3MvY3NzLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9jbGlrZS9jbGlrZS5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0icGhwLmpzIj48L3NjcmlwdD4KICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO308L3N0eWxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBQSFAgbW9kZTwvaDE+Cgo8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgo8P3BocApmdW5jdGlvbiBoZWxsbygkd2hvKSB7CglyZXR1cm4gIkhlbGxvICIgLiAkd2hvOwp9Cj8+CjxwPlRoZSBwcm9ncmFtIHNheXMgPD89IGhlbGxvKCJXb3JsZCIpID8+LjwvcD4KPHNjcmlwdD4KCWFsZXJ0KCJBbmQgaGVyZSBpcyBzb21lIEpTIGNvZGUiKTsgLy8gYWxzbyBjb2xvcmVkCjwvc2NyaXB0Pgo8L3RleHRhcmVhPjwvZm9ybT4KCiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUsCiAgICAgICAgbW9kZTogImFwcGxpY2F0aW9uL3gtaHR0cGQtcGhwIiwKICAgICAgICBpbmRlbnRVbml0OiA0LAogICAgICAgIGluZGVudFdpdGhUYWJzOiB0cnVlLAogICAgICAgIGVudGVyTW9kZTogImtlZXAiLAogICAgICAgIHRhYk1vZGU6ICJzaGlmdCIKICAgICAgfSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD5TaW1wbGUgSFRNTC9QSFAgbW9kZSBiYXNlZCBvbgogICAgdGhlIDxhIGhyZWY9Ii4uL2NsaWtlLyI+Qy1saWtlPC9hPiBtb2RlLiBEZXBlbmRzIG9uIFhNTCwKICAgIEphdmFTY3JpcHQsIENTUywgYW5kIEMtbGlrZSBtb2Rlcy48L3A+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPmFwcGxpY2F0aW9uL3gtaHR0cGQtcGhwPC9jb2RlPiAoSFRNTCB3aXRoIFBIUCBjb2RlKSwgPGNvZGU+dGV4dC94LXBocDwvY29kZT4gKHBsYWluLCBub24td3JhcHBlZCBQSFAgY29kZSkuPC9wPgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/php/php.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KGZ1bmN0aW9uKCkgewogIGZ1bmN0aW9uIGtleXdvcmRzKHN0cikgewogICAgdmFyIG9iaiA9IHt9LCB3b3JkcyA9IHN0ci5zcGxpdCgiICIpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3b3Jkcy5sZW5ndGg7ICsraSkgb2JqW3dvcmRzW2ldXSA9IHRydWU7CiAgICByZXR1cm4gb2JqOwogIH0KICBmdW5jdGlvbiBoZXJlZG9jKGRlbGltKSB7CiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICBpZiAoc3RyZWFtLm1hdGNoKGRlbGltKSkgc3RhdGUudG9rZW5pemUgPSBudWxsOwogICAgICBlbHNlIHN0cmVhbS5za2lwVG9FbmQoKTsKICAgICAgcmV0dXJuICJzdHJpbmciOwogICAgfQogIH0KICB2YXIgcGhwQ29uZmlnID0gewogICAgbmFtZTogImNsaWtlIiwKICAgIGtleXdvcmRzOiBrZXl3b3JkcygiYWJzdHJhY3QgYW5kIGFycmF5IGFzIGJyZWFrIGNhc2UgY2F0Y2ggY2Z1bmN0aW9uIGNsYXNzIGNsb25lIGNvbnN0IGNvbnRpbnVlIGRlY2xhcmUgIiArCiAgICAgICAgICAgICAgICAgICAgICAgImRlZmF1bHQgZG8gZWxzZSBlbHNlaWYgZW5kZGVjbGFyZSBlbmRmb3IgZW5kZm9yZWFjaCBlbmRpZiBlbmRzd2l0Y2ggZW5kd2hpbGUgZXh0ZW5kcyAiICsKICAgICAgICAgICAgICAgICAgICAgICAiZmluYWwgZm9yIGZvcmVhY2ggZnVuY3Rpb24gZ2xvYmFsIGdvdG8gaWYgaW1wbGVtZW50cyBpbnRlcmZhY2UgaW5zdGFuY2VvZiBuYW1lc3BhY2UgIiArCiAgICAgICAgICAgICAgICAgICAgICAgIm5ldyBvciBwcml2YXRlIHByb3RlY3RlZCBwdWJsaWMgc3RhdGljIHN3aXRjaCB0aHJvdyB0cnkgdXNlIHZhciB3aGlsZSB4b3IgcmV0dXJuIiArCiAgICAgICAgICAgICAgICAgICAgICAgImRpZSBlY2hvIGVtcHR5IGV4aXQgZXZhbCBpbmNsdWRlIGluY2x1ZGVfb25jZSBpc3NldCBsaXN0IHJlcXVpcmUgcmVxdWlyZV9vbmNlIHByaW50IHVuc2V0IiksCiAgICBibG9ja0tleXdvcmRzOiBrZXl3b3JkcygiY2F0Y2ggZG8gZWxzZSBlbHNlaWYgZm9yIGZvcmVhY2ggaWYgc3dpdGNoIHRyeSB3aGlsZSIpLAogICAgYXRvbXM6IGtleXdvcmRzKCJ0cnVlIGZhbHNlIG51bGwgVFJVRSBGQUxTRSBOVUxMIiksCiAgICBtdWx0aUxpbmVTdHJpbmdzOiB0cnVlLAogICAgaG9va3M6IHsKICAgICAgIiQiOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcJF9dLyk7CiAgICAgICAgcmV0dXJuICJ2YXJpYWJsZS0yIjsKICAgICAgfSwKICAgICAgIjwiOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvPDwvKSkgewogICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcLl0vKTsKICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gaGVyZWRvYyhzdHJlYW0uY3VycmVudCgpLnNsaWNlKDMpKTsKICAgICAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9LAogICAgICAiIyI6IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgICAgcmV0dXJuICJjb21tZW50IjsKICAgICAgfQogICAgfQogIH07CgogIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgicGhwIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgIHZhciBodG1sTW9kZSA9IENvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsIHtuYW1lOiAieG1sIiwgaHRtbE1vZGU6IHRydWV9KTsKICAgIHZhciBqc01vZGUgPSBDb2RlTWlycm9yLmdldE1vZGUoY29uZmlnLCAiamF2YXNjcmlwdCIpOwogICAgdmFyIGNzc01vZGUgPSBDb2RlTWlycm9yLmdldE1vZGUoY29uZmlnLCAiY3NzIik7CiAgICB2YXIgcGhwTW9kZSA9IENvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsIHBocENvbmZpZyk7CgogICAgZnVuY3Rpb24gZGlzcGF0Y2goc3RyZWFtLCBzdGF0ZSkgeyAvLyBUT0RPIG9wZW4gUEhQIGluc2lkZSB0ZXh0L2NzcwogICAgICBpZiAoc3RhdGUuY3VyTW9kZSA9PSBodG1sTW9kZSkgewogICAgICAgIHZhciBzdHlsZSA9IGh0bWxNb2RlLnRva2VuKHN0cmVhbSwgc3RhdGUuY3VyU3RhdGUpOwogICAgICAgIGlmIChzdHlsZSA9PSAibWV0YSIgJiYgL148XD8vLnRlc3Qoc3RyZWFtLmN1cnJlbnQoKSkpIHsKICAgICAgICAgIHN0YXRlLmN1ck1vZGUgPSBwaHBNb2RlOwogICAgICAgICAgc3RhdGUuY3VyU3RhdGUgPSBzdGF0ZS5waHA7CiAgICAgICAgICBzdGF0ZS5jdXJDbG9zZSA9IC9eXD8+LzsKCQkgIHN0YXRlLm1vZGUgPSAgJ3BocCc7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKHN0eWxlID09ICJ0YWciICYmIHN0cmVhbS5jdXJyZW50KCkgPT0gIj4iICYmIHN0YXRlLmN1clN0YXRlLmNvbnRleHQpIHsKICAgICAgICAgIGlmICgvXnNjcmlwdCQvaS50ZXN0KHN0YXRlLmN1clN0YXRlLmNvbnRleHQudGFnTmFtZSkpIHsKICAgICAgICAgICAgc3RhdGUuY3VyTW9kZSA9IGpzTW9kZTsKICAgICAgICAgICAgc3RhdGUuY3VyU3RhdGUgPSBqc01vZGUuc3RhcnRTdGF0ZShodG1sTW9kZS5pbmRlbnQoc3RhdGUuY3VyU3RhdGUsICIiKSk7CiAgICAgICAgICAgIHN0YXRlLmN1ckNsb3NlID0gL148XC9ccypzY3JpcHRccyo+L2k7CgkJCXN0YXRlLm1vZGUgPSAgJ2phdmFzY3JpcHQnOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoL15zdHlsZSQvaS50ZXN0KHN0YXRlLmN1clN0YXRlLmNvbnRleHQudGFnTmFtZSkpIHsKICAgICAgICAgICAgc3RhdGUuY3VyTW9kZSA9IGNzc01vZGU7CiAgICAgICAgICAgIHN0YXRlLmN1clN0YXRlID0gY3NzTW9kZS5zdGFydFN0YXRlKGh0bWxNb2RlLmluZGVudChzdGF0ZS5jdXJTdGF0ZSwgIiIpKTsKICAgICAgICAgICAgc3RhdGUuY3VyQ2xvc2UgPSAgL148XC9ccypzdHlsZVxzKj4vaTsKICAgICAgICAgICAgc3RhdGUubW9kZSA9ICAnY3NzJzsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHN0eWxlOwogICAgICB9CiAgICAgIGVsc2UgaWYgKHN0cmVhbS5tYXRjaChzdGF0ZS5jdXJDbG9zZSwgZmFsc2UpKSB7CiAgICAgICAgc3RhdGUuY3VyTW9kZSA9IGh0bWxNb2RlOwogICAgICAgIHN0YXRlLmN1clN0YXRlID0gc3RhdGUuaHRtbDsKICAgICAgICBzdGF0ZS5jdXJDbG9zZSA9IG51bGw7CgkJc3RhdGUubW9kZSA9ICAnaHRtbCc7CiAgICAgICAgcmV0dXJuIGRpc3BhdGNoKHN0cmVhbSwgc3RhdGUpOwogICAgICB9CiAgICAgIGVsc2UgcmV0dXJuIHN0YXRlLmN1ck1vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZS5jdXJTdGF0ZSk7CiAgICB9CgogICAgcmV0dXJuIHsKICAgICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGh0bWwgPSBodG1sTW9kZS5zdGFydFN0YXRlKCk7CiAgICAgICAgcmV0dXJuIHtodG1sOiBodG1sLAogICAgICAgICAgICAgICAgcGhwOiBwaHBNb2RlLnN0YXJ0U3RhdGUoKSwKICAgICAgICAgICAgICAgIGN1ck1vZGU6CXBhcnNlckNvbmZpZy5zdGFydE9wZW4gPyBwaHBNb2RlIDogaHRtbE1vZGUsCiAgICAgICAgICAgICAgICBjdXJTdGF0ZToJcGFyc2VyQ29uZmlnLnN0YXJ0T3BlbiA/IHBocE1vZGUuc3RhcnRTdGF0ZSgpIDogaHRtbCwKICAgICAgICAgICAgICAgIGN1ckNsb3NlOglwYXJzZXJDb25maWcuc3RhcnRPcGVuID8gL15cPz4vIDogbnVsbCwKCQkJCW1vZGU6CQlwYXJzZXJDb25maWcuc3RhcnRPcGVuID8gJ3BocCcgOiAnaHRtbCd9CiAgICAgIH0sCgogICAgICBjb3B5U3RhdGU6IGZ1bmN0aW9uKHN0YXRlKSB7CiAgICAgICAgdmFyIGh0bWwgPSBzdGF0ZS5odG1sLCBodG1sTmV3ID0gQ29kZU1pcnJvci5jb3B5U3RhdGUoaHRtbE1vZGUsIGh0bWwpLAogICAgICAgICAgICBwaHAgPSBzdGF0ZS5waHAsIHBocE5ldyA9IENvZGVNaXJyb3IuY29weVN0YXRlKHBocE1vZGUsIHBocCksIGN1cjsKICAgICAgICBpZiAoc3RhdGUuY3VyU3RhdGUgPT0gaHRtbCkgY3VyID0gaHRtbE5ldzsKICAgICAgICBlbHNlIGlmIChzdGF0ZS5jdXJTdGF0ZSA9PSBwaHApIGN1ciA9IHBocE5ldzsKICAgICAgICBlbHNlIGN1ciA9IENvZGVNaXJyb3IuY29weVN0YXRlKHN0YXRlLmN1ck1vZGUsIHN0YXRlLmN1clN0YXRlKTsKICAgICAgICByZXR1cm4ge2h0bWw6IGh0bWxOZXcsIHBocDogcGhwTmV3LCBjdXJNb2RlOiBzdGF0ZS5jdXJNb2RlLCBjdXJTdGF0ZTogY3VyLAogICAgICAgICAgICAgICAgY3VyQ2xvc2U6IHN0YXRlLmN1ckNsb3NlLCBtb2RlOiBzdGF0ZS5tb2RlfTsKICAgICAgfSwKCiAgICAgIHRva2VuOiBkaXNwYXRjaCwKCiAgICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlcikgewogICAgICAgIGlmICgoc3RhdGUuY3VyTW9kZSAhPSBwaHBNb2RlICYmIC9eXHMqPFwvLy50ZXN0KHRleHRBZnRlcikpIHx8CiAgICAgICAgICAgIChzdGF0ZS5jdXJNb2RlID09IHBocE1vZGUgJiYgL15cPz4vLnRlc3QodGV4dEFmdGVyKSkpCiAgICAgICAgICByZXR1cm4gaHRtbE1vZGUuaW5kZW50KHN0YXRlLmh0bWwsIHRleHRBZnRlcik7CiAgICAgICAgcmV0dXJuIHN0YXRlLmN1ck1vZGUuaW5kZW50KHN0YXRlLmN1clN0YXRlLCB0ZXh0QWZ0ZXIpOwogICAgICB9LAoKICAgICAgZWxlY3RyaWNDaGFyczogIi97fToiCiAgICB9CiAgfSk7CiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJhcHBsaWNhdGlvbi94LWh0dHBkLXBocCIsICJwaHAiKTsKICBDb2RlTWlycm9yLmRlZmluZU1JTUUoImFwcGxpY2F0aW9uL3gtaHR0cGQtcGhwLW9wZW4iLCB7bmFtZTogInBocCIsIHN0YXJ0T3BlbjogdHJ1ZX0pOwogIENvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LXBocCIsIHBocENvbmZpZyk7Cn0pKCk7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/plsql/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/plsql/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IE9yYWNsZSBQTC9TUUwgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9InBsc3FsLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICAgIDxzdHlsZT4uQ29kZU1pcnJvciB7Ym9yZGVyOiAycHggaW5zZXQgI2RlZTt9PC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogT3JhY2xlIFBML1NRTCBtb2RlPC9oMT4KCjxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+Ci0tIE9yYWNsZSBQTC9TUUwgQ29kZSBEZW1vCi8qCiAgIGJhc2VkIG9uIGMtbGlrZSBtb2RlLCBhZGFwdGVkIHRvIFBML1NRTCBieSBQZXRlciBSYWdhbml0c2NoICggaHR0cDovL3d3dy5vcmFjbGUtYW5kLWFwZXguY29tLyApCiAgIEFwcmlsIDIwMTEKKi8KREVDTEFSRQogICAgdklkeCAgICBOVU1CRVI7CiAgICB2U3RyaW5nIFZBUkNIQVIyKDEwMCk7CiAgICBjVGV4dCAgIENPTlNUQU5UIFZBUkNIQVIyKDEwMCkgOj0gJ1RoYXQnJ3MgaXQhIEhhdmUgZnVuIHdpdGggQ29kZU1pcnJvciAyJzsKQkVHSU4KICAgIHZJZHggOj0gMDsKICAgIC0tCiAgICBGT1IgckRBVEEgSU4KICAgICAgKCBTRUxFQ1QgKgogICAgICAgICAgRlJPTSBFTVAKICAgICAgICAgT1JERVIgQlkgRU1QTk8KICAgICAgKQogICAgTE9PUAogICAgICAgIHZJZHggICAgOj0gdklkeCArIDE7CiAgICAgICAgdlN0cmluZyA6PSByREFUQS5FTVBOTyB8fCAnIC0gJyB8fCByREFUQS5FTkFNRTsKICAgICAgICAtLQogICAgICAgIFVQREFURSBFTVAKICAgICAgICAgICBTRVQgU0FMICAgPSBTQUwgKiAxMDEvMTAwCiAgICAgICAgIFdIRVJFIEVNUE5PID0gckRBVEEuRU1QTk8KICAgICAgICA7CiAgICBFTkQgTE9PUDsKICAgIC0tCiAgICBTWVMuREJNU19PVVRQVVQuUHV0X0xpbmUgKGNUZXh0KTsKRU5EOwotLQo8L3RleHRhcmVhPjwvZm9ybT4KCiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUsCiAgICAgICAgaW5kZW50VW5pdDogNCwKICAgICAgICBtb2RlOiAidGV4dC94LXBsc3FsIgogICAgICB9KTsKICAgIDwvc2NyaXB0PgoKICAgIDxwPgogICAgICAgIFNpbXBsZSBtb2RlIHRoYXQgaGFuZGxlcyBPcmFjbGUgUEwvU1FMIGxhbmd1YWdlIChhbmQgT3JhY2xlIFNRTCwgb2YgY291cnNlKS4KICAgIDwvcD4KCiAgICA8cD48c3Ryb25nPk1JTUUgdHlwZSBkZWZpbmVkOjwvc3Ryb25nPiA8Y29kZT50ZXh0L3gtcGxzcWw8L2NvZGU+CiAgICAoUExTUUwgY29kZSkKPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/plsql/plsql.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJwbHNxbCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgdmFyIGluZGVudFVuaXQgICAgICAgPSBjb25maWcuaW5kZW50VW5pdCwKICAgICAga2V5d29yZHMgICAgICAgICA9IHBhcnNlckNvbmZpZy5rZXl3b3JkcywKICAgICAgZnVuY3Rpb25zICAgICAgICA9IHBhcnNlckNvbmZpZy5mdW5jdGlvbnMsCiAgICAgIHR5cGVzICAgICAgICAgICAgPSBwYXJzZXJDb25maWcudHlwZXMsCiAgICAgIHNxbHBsdXMgICAgICAgICAgPSBwYXJzZXJDb25maWcuc3FscGx1cywKICAgICAgbXVsdGlMaW5lU3RyaW5ncyA9IHBhcnNlckNvbmZpZy5tdWx0aUxpbmVTdHJpbmdzOwogIHZhciBpc09wZXJhdG9yQ2hhciAgID0gL1srXC0qJiU9PD4hPzpcL3xdLzsKICBmdW5jdGlvbiBjaGFpbihzdHJlYW0sIHN0YXRlLCBmKSB7CiAgICBzdGF0ZS50b2tlbml6ZSA9IGY7CiAgICByZXR1cm4gZihzdHJlYW0sIHN0YXRlKTsKICB9CgogIHZhciB0eXBlOwogIGZ1bmN0aW9uIHJldCh0cCwgc3R5bGUpIHsKICAgIHR5cGUgPSB0cDsKICAgIHJldHVybiBzdHlsZTsKICB9CgogIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgLy8gc3RhcnQgb2Ygc3RyaW5nPwogICAgaWYgKGNoID09ICciJyB8fCBjaCA9PSAiJyIpCiAgICAgIHJldHVybiBjaGFpbihzdHJlYW0sIHN0YXRlLCB0b2tlblN0cmluZyhjaCkpOwogICAgLy8gaXMgaXQgb25lIG9mIHRoZSBzcGVjaWFsIHNpZ25zIFtde30oKS4sOz8gU2VwZXJhdG9yPwogICAgZWxzZSBpZiAoL1tcW1xde31cKFwpLDtcLl0vLnRlc3QoY2gpKQogICAgICByZXR1cm4gcmV0KGNoKTsKICAgIC8vIHN0YXJ0IG9mIGEgbnVtYmVyIHZhbHVlPwogICAgZWxzZSBpZiAoL1xkLy50ZXN0KGNoKSkgewogICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1wuXS8pOwogICAgICByZXR1cm4gcmV0KCJudW1iZXIiLCAibnVtYmVyIik7CiAgICB9CiAgICAvLyBtdWx0aSBsaW5lIGNvbW1lbnQgb3Igc2ltcGxlIG9wZXJhdG9yPwogICAgZWxzZSBpZiAoY2ggPT0gIi8iKSB7CiAgICAgIGlmIChzdHJlYW0uZWF0KCIqIikpIHsKICAgICAgICByZXR1cm4gY2hhaW4oc3RyZWFtLCBzdGF0ZSwgdG9rZW5Db21tZW50KTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBzdHJlYW0uZWF0V2hpbGUoaXNPcGVyYXRvckNoYXIpOwogICAgICAgIHJldHVybiByZXQoIm9wZXJhdG9yIiwgIm9wZXJhdG9yIik7CiAgICAgIH0KICAgIH0KICAgIC8vIHNpbmdsZSBsaW5lIGNvbW1lbnQgb3Igc2ltcGxlIG9wZXJhdG9yPwogICAgZWxzZSBpZiAoY2ggPT0gIi0iKSB7CiAgICAgIGlmIChzdHJlYW0uZWF0KCItIikpIHsKICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgICAgcmV0dXJuIHJldCgiY29tbWVudCIsICJjb21tZW50Iik7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKGlzT3BlcmF0b3JDaGFyKTsKICAgICAgICByZXR1cm4gcmV0KCJvcGVyYXRvciIsICJvcGVyYXRvciIpOwogICAgICB9CiAgICB9CiAgICAvLyBwbC9zcWwgdmFyaWFibGU/CiAgICBlbHNlIGlmIChjaCA9PSAiQCIgfHwgY2ggPT0gIiQiKSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XGRcJF9dLyk7CiAgICAgIHJldHVybiByZXQoIndvcmQiLCAidmFyaWFibGUiKTsKICAgIH0KICAgIC8vIGlzIGl0IGEgb3BlcmF0b3I/CiAgICBlbHNlIGlmIChpc09wZXJhdG9yQ2hhci50ZXN0KGNoKSkgewogICAgICBzdHJlYW0uZWF0V2hpbGUoaXNPcGVyYXRvckNoYXIpOwogICAgICByZXR1cm4gcmV0KCJvcGVyYXRvciIsICJvcGVyYXRvciIpOwogICAgfQogICAgZWxzZSB7CiAgICAgIC8vIGdldCB0aGUgd2hvbGUgd29yZAogICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1wkX10vKTsKICAgICAgLy8gaXMgaXQgb25lIG9mIHRoZSBsaXN0ZWQga2V5d29yZHM/CiAgICAgIGlmIChrZXl3b3JkcyAmJiBrZXl3b3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShzdHJlYW0uY3VycmVudCgpLnRvTG93ZXJDYXNlKCkpKSByZXR1cm4gcmV0KCJrZXl3b3JkIiwgImtleXdvcmQiKTsKICAgICAgLy8gaXMgaXQgb25lIG9mIHRoZSBsaXN0ZWQgZnVuY3Rpb25zPwogICAgICBpZiAoZnVuY3Rpb25zICYmIGZ1bmN0aW9ucy5wcm9wZXJ0eUlzRW51bWVyYWJsZShzdHJlYW0uY3VycmVudCgpLnRvTG93ZXJDYXNlKCkpKSByZXR1cm4gcmV0KCJrZXl3b3JkIiwgImJ1aWx0aW4iKTsKICAgICAgLy8gaXMgaXQgb25lIG9mIHRoZSBsaXN0ZWQgdHlwZXM/CiAgICAgIGlmICh0eXBlcyAmJiB0eXBlcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShzdHJlYW0uY3VycmVudCgpLnRvTG93ZXJDYXNlKCkpKSByZXR1cm4gcmV0KCJrZXl3b3JkIiwgInZhcmlhYmxlLTIiKTsKICAgICAgLy8gaXMgaXQgb25lIG9mIHRoZSBsaXN0ZWQgc3FscGx1cyBrZXl3b3Jkcz8KICAgICAgaWYgKHNxbHBsdXMgJiYgc3FscGx1cy5wcm9wZXJ0eUlzRW51bWVyYWJsZShzdHJlYW0uY3VycmVudCgpLnRvTG93ZXJDYXNlKCkpKSByZXR1cm4gcmV0KCJrZXl3b3JkIiwgInZhcmlhYmxlLTMiKTsKICAgICAgLy8gZGVmYXVsdDoganVzdCBhICJ3b3JkIgogICAgICByZXR1cm4gcmV0KCJ3b3JkIiwgInBsc3FsLXdvcmQiKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHRva2VuU3RyaW5nKHF1b3RlKSB7CiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICB2YXIgZXNjYXBlZCA9IGZhbHNlLCBuZXh0LCBlbmQgPSBmYWxzZTsKICAgICAgd2hpbGUgKChuZXh0ID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkgewogICAgICAgIGlmIChuZXh0ID09IHF1b3RlICYmICFlc2NhcGVkKSB7ZW5kID0gdHJ1ZTsgYnJlYWs7fQogICAgICAgIGVzY2FwZWQgPSAhZXNjYXBlZCAmJiBuZXh0ID09ICJcXCI7CiAgICAgIH0KICAgICAgaWYgKGVuZCB8fCAhKGVzY2FwZWQgfHwgbXVsdGlMaW5lU3RyaW5ncykpCiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7CiAgICAgIHJldHVybiByZXQoInN0cmluZyIsICJwbHNxbC1zdHJpbmciKTsKICAgIH07CiAgfQoKICBmdW5jdGlvbiB0b2tlbkNvbW1lbnQoc3RyZWFtLCBzdGF0ZSkgewogICAgdmFyIG1heWJlRW5kID0gZmFsc2UsIGNoOwogICAgd2hpbGUgKGNoID0gc3RyZWFtLm5leHQoKSkgewogICAgICBpZiAoY2ggPT0gIi8iICYmIG1heWJlRW5kKSB7CiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgbWF5YmVFbmQgPSAoY2ggPT0gIioiKTsKICAgIH0KICAgIHJldHVybiByZXQoImNvbW1lbnQiLCAicGxzcWwtY29tbWVudCIpOwogIH0KCiAgLy8gSW50ZXJmYWNlCgogIHJldHVybiB7CiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbihiYXNlY29sdW1uKSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgdG9rZW5pemU6IHRva2VuQmFzZSwKICAgICAgICBzdGFydE9mTGluZTogdHJ1ZQogICAgICB9OwogICAgfSwKCiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHJldHVybiBudWxsOwogICAgICB2YXIgc3R5bGUgPSBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgICAgcmV0dXJuIHN0eWxlOwogICAgfQogIH07Cn0pOwoKKGZ1bmN0aW9uKCkgewogIGZ1bmN0aW9uIGtleXdvcmRzKHN0cikgewogICAgdmFyIG9iaiA9IHt9LCB3b3JkcyA9IHN0ci5zcGxpdCgiICIpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3b3Jkcy5sZW5ndGg7ICsraSkgb2JqW3dvcmRzW2ldXSA9IHRydWU7CiAgICByZXR1cm4gb2JqOwogIH0KICB2YXIgY0tleXdvcmRzID0gImFib3J0IGFjY2VwdCBhY2Nlc3MgYWRkIGFsbCBhbHRlciBhbmQgYW55IGFycmF5IGFycmF5bGVuIGFzIGFzYyBhc3NlcnQgYXNzaWduIGF0IGF0dHJpYnV0ZXMgYXVkaXQgIiArCiAgICAgICAgImF1dGhvcml6YXRpb24gYXZnICIgKwogICAgICAgICJiYXNlX3RhYmxlIGJlZ2luIGJldHdlZW4gYmluYXJ5X2ludGVnZXIgYm9keSBib29sZWFuIGJ5ICIgKwogICAgICAgICJjYXNlIGNhc3QgY2hhciBjaGFyX2Jhc2UgY2hlY2sgY2xvc2UgY2x1c3RlciBjbHVzdGVycyBjb2xhdXRoIGNvbHVtbiBjb21tZW50IGNvbW1pdCBjb21wcmVzcyBjb25uZWN0ICIgKwogICAgICAgICJjb25uZWN0ZWQgY29uc3RhbnQgY29uc3RyYWludCBjcmFzaCBjcmVhdGUgY3VycmVudCBjdXJydmFsIGN1cnNvciAiICsKICAgICAgICAiZGF0YV9iYXNlIGRhdGFiYXNlIGRhdGUgZGJhIGRlYWxsb2NhdGUgZGVidWdvZmYgZGVidWdvbiBkZWNpbWFsIGRlY2xhcmUgZGVmYXVsdCBkZWZpbml0aW9uIGRlbGF5IGRlbGV0ZSAiICsKICAgICAgICAiZGVzYyBkaWdpdHMgZGlzcG9zZSBkaXN0aW5jdCBkbyBkcm9wICIgKwogICAgICAgICJlbHNlIGVsc2lmIGVuYWJsZSBlbmQgZW50cnkgZXNjYXBlIGV4Y2VwdGlvbiBleGNlcHRpb25faW5pdCBleGNoYW5nZSBleGNsdXNpdmUgZXhpc3RzIGV4aXQgZXh0ZXJuYWwgIiArCiAgICAgICAgImZhc3QgZmV0Y2ggZmlsZSBmb3IgZm9yY2UgZm9ybSBmcm9tIGZ1bmN0aW9uICIgKwogICAgICAgICJnZW5lcmljIGdvdG8gZ3JhbnQgZ3JvdXAgIiArCiAgICAgICAgImhhdmluZyAiICsKICAgICAgICAiaWRlbnRpZmllZCBpZiBpbW1lZGlhdGUgaW4gaW5jcmVtZW50IGluZGV4IGluZGV4ZXMgaW5kaWNhdG9yIGluaXRpYWwgaW5pdHJhbnMgaW5zZXJ0IGludGVyZmFjZSBpbnRlcnNlY3QgIiArCiAgICAgICAgImludG8gaXMgIiArCiAgICAgICAgImtleSAiICsKICAgICAgICAibGV2ZWwgbGlicmFyeSBsaWtlIGxpbWl0ZWQgbG9jYWwgbG9jayBsb2cgbG9nZ2luZyBsb25nIGxvb3AgIiArCiAgICAgICAgIm1hc3RlciBtYXhleHRlbnRzIG1heHRyYW5zIG1lbWJlciBtaW5leHRlbnRzIG1pbnVzIG1pc2xhYmVsIG1vZGUgbW9kaWZ5IG11bHRpc2V0ICIgKwogICAgICAgICJuZXcgbmV4dCBubyBub2F1ZGl0IG5vY29tcHJlc3Mgbm9sb2dnaW5nIG5vcGFyYWxsZWwgbm90IG5vd2FpdCBudW1iZXJfYmFzZSAiICsKICAgICAgICAib2JqZWN0IG9mIG9mZiBvZmZsaW5lIG9uIG9ubGluZSBvbmx5IG9wZW4gb3B0aW9uIG9yIG9yZGVyIG91dCAiICsKICAgICAgICAicGFja2FnZSBwYXJhbGxlbCBwYXJ0aXRpb24gcGN0ZnJlZSBwY3RpbmNyZWFzZSBwY3R1c2VkIHBsc19pbnRlZ2VyIHBvc2l0aXZlIHBvc2l0aXZlbiBwcmFnbWEgcHJpbWFyeSBwcmlvciAiICsKICAgICAgICAicHJpdmF0ZSBwcml2aWxlZ2VzIHByb2NlZHVyZSBwdWJsaWMgIiArCiAgICAgICAgInJhaXNlIHJhbmdlIHJhdyByZWFkIHJlYnVpbGQgcmVjb3JkIHJlZiByZWZlcmVuY2VzIHJlZnJlc2ggcmVsZWFzZSByZW5hbWUgcmVwbGFjZSByZXNvdXJjZSByZXN0cmljdCByZXR1cm4gIiArCiAgICAgICAgInJldHVybmluZyByZXZlcnNlIHJldm9rZSByb2xsYmFjayByb3cgcm93aWQgcm93bGFiZWwgcm93bnVtIHJvd3MgcnVuICIgKwogICAgICAgICJzYXZlcG9pbnQgc2NoZW1hIHNlZ21lbnQgc2VsZWN0IHNlcGFyYXRlIHNlc3Npb24gc2V0IHNoYXJlIHNuYXBzaG90IHNvbWUgc3BhY2Ugc3BsaXQgc3FsIHN0YXJ0IHN0YXRlbWVudCAiICsKICAgICAgICAic3RvcmFnZSBzdWJ0eXBlIHN1Y2Nlc3NmdWwgc3lub255bSAiICsKICAgICAgICAidGFiYXV0aCB0YWJsZSB0YWJsZXMgdGFibGVzcGFjZSB0YXNrIHRlcm1pbmF0ZSB0aGVuIHRvIHRyaWdnZXIgdHJ1bmNhdGUgdHlwZSAiICsKICAgICAgICAidW5pb24gdW5pcXVlIHVubGltaXRlZCB1bnJlY292ZXJhYmxlIHVudXNhYmxlIHVwZGF0ZSB1c2UgdXNpbmcgIiArCiAgICAgICAgInZhbGlkYXRlIHZhbHVlIHZhbHVlcyB2YXJpYWJsZSB2aWV3IHZpZXdzICIgKwogICAgICAgICJ3aGVuIHdoZW5ldmVyIHdoZXJlIHdoaWxlIHdpdGggd29yayI7CgogIHZhciBjRnVuY3Rpb25zID0gImFicyBhY29zIGFkZF9tb250aHMgYXNjaWkgYXNpbiBhdGFuIGF0YW4yIGF2ZXJhZ2UgIiArCiAgICAgICAgImJmaWxlbmFtZSAiICsKICAgICAgICAiY2VpbCBjaGFydG9yb3dpZCBjaHIgY29uY2F0IGNvbnZlcnQgY29zIGNvc2ggY291bnQgIiArCiAgICAgICAgImRlY29kZSBkZXJlZiBkdWFsIGR1bXAgZHVwX3ZhbF9vbl9pbmRleCAiICsKICAgICAgICAiZW1wdHkgZXJyb3IgZXhwICIgKwogICAgICAgICJmYWxzZSBmbG9vciBmb3VuZCAiICsKICAgICAgICAiZ2xiIGdyZWF0ZXN0ICIgKwogICAgICAgICJoZXh0b3JhdyAiICsKICAgICAgICAiaW5pdGNhcCBpbnN0ciBpbnN0cmIgaXNvcGVuICIgKwogICAgICAgICJsYXN0X2RheSBsZWFzdCBsZW5naHQgbGVuZ2h0YiBsbiBsb3dlciBscGFkIGx0cmltIGx1YiAiICsKICAgICAgICAibWFrZV9yZWYgbWF4IG1pbiBtb2QgbW9udGhzX2JldHdlZW4gIiArCiAgICAgICAgIm5ld190aW1lIG5leHRfZGF5IG5leHR2YWwgbmxzX2NoYXJzZXRfZGVjbF9sZW4gbmxzX2NoYXJzZXRfaWQgbmxzX2NoYXJzZXRfbmFtZSBubHNfaW5pdGNhcCBubHNfbG93ZXIgIiArCiAgICAgICAgIm5sc19zb3J0IG5sc191cHBlciBubHNzb3J0IG5vX2RhdGFfZm91bmQgbm90Zm91bmQgbnVsbCBudmwgIiArCiAgICAgICAgIm90aGVycyAiICsKICAgICAgICAicG93ZXIgIiArCiAgICAgICAgInJhd3RvaGV4IHJlZnRvaGV4IHJvdW5kIHJvd2NvdW50IHJvd2lkdG9jaGFyIHJwYWQgcnRyaW0gIiArCiAgICAgICAgInNpZ24gc2luIHNpbmggc291bmRleCBzcWxjb2RlIHNxbGVycm0gc3FydCBzdGRkZXYgc3Vic3RyIHN1YnN0cmIgc3VtIHN5c2RhdGUgIiArCiAgICAgICAgInRhbiB0YW5oIHRvX2NoYXIgdG9fZGF0ZSB0b19sYWJlbCB0b19tdWx0aV9ieXRlIHRvX251bWJlciB0b19zaW5nbGVfYnl0ZSB0cmFuc2xhdGUgdHJ1ZSB0cnVuYyAiICsKICAgICAgICAidWlkIHVwcGVyIHVzZXIgdXNlcmVudiAiICsKICAgICAgICAidmFyaWFuY2UgdnNpemUiOwoKICB2YXIgY1R5cGVzID0gImJmaWxlIGJsb2IgIiArCiAgICAgICAgImNoYXJhY3RlciBjbG9iICIgKwogICAgICAgICJkZWMgIiArCiAgICAgICAgImZsb2F0ICIgKwogICAgICAgICJpbnQgaW50ZWdlciAiICsKICAgICAgICAibWxzbGFiZWwgIiArCiAgICAgICAgIm5hdHVyYWwgbmF0dXJhbG4gbmNoYXIgbmNsb2IgbnVtYmVyIG51bWVyaWMgbnZhcmNoYXIyICIgKwogICAgICAgICJyZWFsIHJvd3R5cGUgIiArCiAgICAgICAgInNpZ250eXBlIHNtYWxsaW50IHN0cmluZyAiICsKICAgICAgICAidmFyY2hhciB2YXJjaGFyMiI7CgogIHZhciBjU3FscGx1cyA9ICJhcHBpbmZvIGFycmF5c2l6ZSBhdXRvY29tbWl0IGF1dG9wcmludCBhdXRvcmVjb3ZlcnkgYXV0b3RyYWNlICIgKwogICAgICAgICJibG9ja3Rlcm1pbmF0b3IgYnJlYWsgYnRpdGxlICIgKwogICAgICAgICJjbWRzZXAgY29sc2VwIGNvbXBhdGliaWxpdHkgY29tcHV0ZSBjb25jYXQgY29weWNvbW1pdCBjb3B5dHlwZWNoZWNrICIgKwogICAgICAgICJkZWZpbmUgZGVzY3JpYmUgIiArCiAgICAgICAgImVjaG8gZWRpdGZpbGUgZW1iZWRkZWQgZXNjYXBlIGV4ZWMgZXhlY3V0ZSAiICsKICAgICAgICAiZmVlZGJhY2sgZmxhZ2dlciBmbHVzaCAiICsKICAgICAgICAiaGVhZGluZyBoZWFkc2VwICIgKwogICAgICAgICJpbnN0YW5jZSAiICsKICAgICAgICAibGluZXNpemUgbG5vIGxvYm9mZnNldCBsb2dzb3VyY2UgbG9uZyBsb25nY2h1bmtzaXplICIgKwogICAgICAgICJtYXJrdXAgIiArCiAgICAgICAgIm5hdGl2ZSBuZXdwYWdlIG51bWZvcm1hdCBudW13aWR0aCAiICsKICAgICAgICAicGFnZXNpemUgcGF1c2UgcG5vICIgKwogICAgICAgICJyZWNzZXAgcmVjc2VwY2hhciByZWxlYXNlIHJlcGZvb3RlciByZXBoZWFkZXIgIiArCiAgICAgICAgInNlcnZlcm91dHB1dCBzaGlmdGlub3V0IHNob3cgc2hvd21vZGUgc2l6ZSBzcG9vbCBzcWxibGFua2xpbmVzIHNxbGNhc2Ugc3FsY29kZSBzcWxjb250aW51ZSBzcWxudW1iZXIgIiArCiAgICAgICAgInNxbHBsdXNjb21wYXRpYmlsaXR5IHNxbHByZWZpeCBzcWxwcm9tcHQgc3FsdGVybWluYXRvciBzdWZmaXggIiArCiAgICAgICAgInRhYiB0ZXJtIHRlcm1vdXQgdGltZSB0aW1pbmcgdHJpbW91dCB0cmltc3Bvb2wgdHRpdGxlICIgKwogICAgICAgICJ1bmRlcmxpbmUgIiArCiAgICAgICAgInZlcmlmeSB2ZXJzaW9uICIgKwogICAgICAgICJ3cmFwIjsKCiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtcGxzcWwiLCB7CiAgICBuYW1lOiAicGxzcWwiLAogICAga2V5d29yZHM6IGtleXdvcmRzKGNLZXl3b3JkcyksCiAgICBmdW5jdGlvbnM6IGtleXdvcmRzKGNGdW5jdGlvbnMpLAogICAgdHlwZXM6IGtleXdvcmRzKGNUeXBlcyksCiAgICBzcWxwbHVzOiBrZXl3b3JkcyhjU3FscGx1cykKICB9KTsKfSgpKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/python/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/python/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFB5dGhvbiBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0icHl0aG9uLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO308L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBQeXRob24gbW9kZTwvaDE+CiAgICAKICAgIDxkaXY+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KIyBMaXRlcmFscwoxMjM0CjAuMGUxMDEKLjEyMwowYjAxMDEwMDExMTAwCjBvMDEyMzQ1NjcKMHgwOTg3NjU0MzIxYWJjZGVmCjcKMjE0NzQ4MzY0NwozTAo3OTIyODE2MjUxNDI2NDMzNzU5MzU0Mzk1MDMzNkwKMHgxMDAwMDAwMDBMCjc5MjI4MTYyNTE0MjY0MzM3NTkzNTQzOTUwMzM2CjB4ZGVhZGJlZWYKMy4xNGoKMTAuagoxMGoKLjAwMWoKMWUxMDBqCjMuMTRlLTEwagoKCiMgU3RyaW5nIExpdGVyYWxzCidGb3JcJycKIkdvZFwiIgoiIiJzbyBsb3ZlZAp0aGUgd29ybGQiIiIKJycndGhhdCBoZSBnYXZlCmhpcyBvbmx5IGJlZ290dGVuXCcgJycnCid0aGF0IHdob3NvZXZlciBiZWxpZXZldGggXAppbiBoaW0nCicnCgojIElkZW50aWZpZXJzCl9fYV9fCmEuYgphLmIuYwoKIyBPcGVyYXRvcnMKKyAtICogLyAlICYgfCBeIH4gPCA+Cj09ICE9IDw9ID49IDw+IDw8ID4+IC8vICoqCmFuZCBvciBub3QgaW4gaXMKCiMgRGVsaW1pdGVycwooKSBbXSB7fSAsIDogYCA9IDsgQCAuICAjIE5vdGUgdGhhdCBAIGFuZCAuIHJlcXVpcmUgdGhlIHByb3BlciBjb250ZXh0LgorPSAtPSAqPSAvPSAlPSAmPSB8PSBePQovLz0gPj49IDw8PSAqKj0KCiMgS2V5d29yZHMKYXMgYXNzZXJ0IGJyZWFrIGNsYXNzIGNvbnRpbnVlIGRlZiBkZWwgZWxpZiBlbHNlIGV4Y2VwdApmaW5hbGx5IGZvciBmcm9tIGdsb2JhbCBpZiBpbXBvcnQgbGFtYmRhIHBhc3MgcmFpc2UKcmV0dXJuIHRyeSB3aGlsZSB3aXRoIHlpZWxkCgojIFB5dGhvbiAyIEtleXdvcmRzIChvdGhlcndpc2UgSWRlbnRpZmllcnMpCmV4ZWMgcHJpbnQKCiMgUHl0aG9uIDMgS2V5d29yZHMgKG90aGVyd2lzZSBJZGVudGlmaWVycykKbm9ubG9jYWwKCiMgVHlwZXMKYm9vbCBjbGFzc21ldGhvZCBjb21wbGV4IGRpY3QgZW51bWVyYXRlIGZsb2F0IGZyb3plbnNldCBpbnQgbGlzdCBvYmplY3QKcHJvcGVydHkgcmV2ZXJzZWQgc2V0IHNsaWNlIHN0YXRpY21ldGhvZCBzdHIgc3VwZXIgdHVwbGUgdHlwZQoKIyBQeXRob24gMiBUeXBlcyAob3RoZXJ3aXNlIElkZW50aWZpZXJzKQpiYXNlc3RyaW5nIGJ1ZmZlciBmaWxlIGxvbmcgdW5pY29kZSB4cmFuZ2UKCiMgUHl0aG9uIDMgVHlwZXMgKG90aGVyd2lzZSBJZGVudGlmaWVycykKYnl0ZWFycmF5IGJ5dGVzIGZpbHRlciBtYXAgbWVtb3J5dmlldyBvcGVuIHJhbmdlIHppcAoKIyBTb21lIEV4YW1wbGUgY29kZQppbXBvcnQgb3MKZnJvbSBwYWNrYWdlIGltcG9ydCBQYXJlbnRDbGFzcwoKQG5vbnNlbnNlRGVjb3JhdG9yCmRlZiBkb2VzTm90aGluZygpOgogICAgcGFzcwoKY2xhc3MgRXhhbXBsZUNsYXNzKFBhcmVudENsYXNzKToKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBleGFtcGxlKGlucHV0U3RyKToKICAgICAgICBhID0gbGlzdChpbnB1dFN0cikKICAgICAgICBhLnJldmVyc2UoKQogICAgICAgIHJldHVybiAnJy5qb2luKGEpCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG1peGluID0gJ0hlbGxvJyk6CiAgICAgICAgc2VsZi5taXhpbiA9IG1peGluCgo8L3RleHRhcmVhPjwvZGl2PgogICAgPHNjcmlwdD4KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICBtb2RlOiB7bmFtZTogInB5dGhvbiIsCiAgICAgICAgICAgICAgIHZlcnNpb246IDIsCiAgICAgICAgICAgICAgIHNpbmdsZUxpbmVTdHJpbmdFcnJvcnM6IGZhbHNlfSwKICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgICAgICBpbmRlbnRVbml0OiA0LAogICAgICAgIHRhYk1vZGU6ICJzaGlmdCIsCiAgICAgICAgbWF0Y2hCcmFja2V0czogdHJ1ZQogICAgICB9KTsKICAgIDwvc2NyaXB0PgogICAgPGgyPkNvbmZpZ3VyYXRpb24gT3B0aW9uczo8L2gyPgogICAgPHVsPgogICAgICA8bGk+dmVyc2lvbiAtIDIvMyAtIFRoZSB2ZXJzaW9uIG9mIFB5dGhvbiB0byByZWNvZ25pemUuICBEZWZhdWx0IGlzIDIuPC9saT4KICAgICAgPGxpPnNpbmdsZUxpbmVTdHJpbmdFcnJvcnMgLSB0cnVlL2ZhbHNlIC0gSWYgeW91IGhhdmUgYSBzaW5nbGUtbGluZSBzdHJpbmcgdGhhdCBpcyBub3QgdGVybWluYXRlZCBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lLCB0aGlzIHdpbGwgc2hvdyBzdWJzZXF1ZW50IGxpbmVzIGFzIGVycm9ycyBpZiB0cnVlLCBvdGhlcndpc2UgaXQgd2lsbCBjb25zaWRlciB0aGUgbmV3bGluZSBhcyB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuIERlZmF1bHQgaXMgZmFsc2UuPC9saT4KICAgIDwvdWw+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQveC1weXRob248L2NvZGU+LjwvcD4KICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/python/LICENSE.txt</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[VGhlIE1JVCBMaWNlbnNlCgpDb3B5cmlnaHQgKGMpIDIwMTAgVGltb3RoeSBGYXJyZWxsCgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCmFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KVEhFIFNPRlRXQVJFLg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/python/python.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJweXRob24iLCBmdW5jdGlvbihjb25mLCBwYXJzZXJDb25mKSB7CiAgICB2YXIgRVJST1JDTEFTUyA9ICdlcnJvcic7CiAgICAKICAgIGZ1bmN0aW9uIHdvcmRSZWdleHAod29yZHMpIHsKICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cCgiXigoIiArIHdvcmRzLmpvaW4oIil8KCIpICsgIikpXFxiIik7CiAgICB9CiAgICAKICAgIHZhciBzaW5nbGVPcGVyYXRvcnMgPSBuZXcgUmVnRXhwKCJeW1xcK1xcLVxcKi8lJnxcXF5+PD4hXSIpOwogICAgdmFyIHNpbmdsZURlbGltaXRlcnMgPSBuZXcgUmVnRXhwKCdeW1xcKFxcKVxcW1xcXVxce1xcfUAsOmA9O1xcLl0nKTsKICAgIHZhciBkb3VibGVPcGVyYXRvcnMgPSBuZXcgUmVnRXhwKCJeKCg9PSl8KCE9KXwoPD0pfCg+PSl8KDw+KXwoPDwpfCg+Pil8KC8vKXwoXFwqXFwqKSkiKTsKICAgIHZhciBkb3VibGVEZWxpbWl0ZXJzID0gbmV3IFJlZ0V4cCgiXigoXFwrPSl8KFxcLT0pfChcXCo9KXwoJT0pfCgvPSl8KCY9KXwoXFx8PSl8KFxcXj0pKSIpOwogICAgdmFyIHRyaXBsZURlbGltaXRlcnMgPSBuZXcgUmVnRXhwKCJeKCgvLz0pfCg+Pj0pfCg8PD0pfChcXCpcXCo9KSkiKTsKICAgIHZhciBpZGVudGlmaWVycyA9IG5ldyBSZWdFeHAoIl5bX0EtWmEtel1bX0EtWmEtejAtOV0qIik7CgogICAgdmFyIHdvcmRPcGVyYXRvcnMgPSB3b3JkUmVnZXhwKFsnYW5kJywgJ29yJywgJ25vdCcsICdpcycsICdpbiddKTsKICAgIHZhciBjb21tb25rZXl3b3JkcyA9IFsnYXMnLCAnYXNzZXJ0JywgJ2JyZWFrJywgJ2NsYXNzJywgJ2NvbnRpbnVlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVmJywgJ2RlbCcsICdlbGlmJywgJ2Vsc2UnLCAnZXhjZXB0JywgJ2ZpbmFsbHknLAogICAgICAgICAgICAgICAgICAgICAgICAgICdmb3InLCAnZnJvbScsICdnbG9iYWwnLCAnaWYnLCAnaW1wb3J0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAnbGFtYmRhJywgJ3Bhc3MnLCAncmFpc2UnLCAncmV0dXJuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAndHJ5JywgJ3doaWxlJywgJ3dpdGgnLCAneWllbGQnXTsKICAgIHZhciBjb21tb25CdWlsdGlucyA9IFsnYWJzJywgJ2FsbCcsICdhbnknLCAnYmluJywgJ2Jvb2wnLCAnYnl0ZWFycmF5JywgJ2NhbGxhYmxlJywgJ2NocicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NsYXNzbWV0aG9kJywgJ2NvbXBpbGUnLCAnY29tcGxleCcsICdkZWxhdHRyJywgJ2RpY3QnLCAnZGlyJywgJ2Rpdm1vZCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VudW1lcmF0ZScsICdldmFsJywgJ2ZpbHRlcicsICdmbG9hdCcsICdmb3JtYXQnLCAnZnJvemVuc2V0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2V0YXR0cicsICdnbG9iYWxzJywgJ2hhc2F0dHInLCAnaGFzaCcsICdoZWxwJywgJ2hleCcsICdpZCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lucHV0JywgJ2ludCcsICdpc2luc3RhbmNlJywgJ2lzc3ViY2xhc3MnLCAnaXRlcicsICdsZW4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICdsaXN0JywgJ2xvY2FscycsICdtYXAnLCAnbWF4JywgJ21lbW9yeXZpZXcnLCAnbWluJywgJ25leHQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICdvYmplY3QnLCAnb2N0JywgJ29wZW4nLCAnb3JkJywgJ3BvdycsICdwcm9wZXJ0eScsICdyYW5nZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlcHInLCAncmV2ZXJzZWQnLCAncm91bmQnLCAnc2V0JywgJ3NldGF0dHInLCAnc2xpY2UnLAogICAgICAgICAgICAgICAgICAgICAgICAgICdzb3J0ZWQnLCAnc3RhdGljbWV0aG9kJywgJ3N0cicsICdzdW0nLCAnc3VwZXInLCAndHVwbGUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICd0eXBlJywgJ3ZhcnMnLCAnemlwJywgJ19faW1wb3J0X18nLCAnTm90SW1wbGVtZW50ZWQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICdFbGxpcHNpcycsICdfX2RlYnVnX18nXTsKICAgIHZhciBweTIgPSB7J2J1aWx0aW5zJzogWydhcHBseScsICdiYXNlc3RyaW5nJywgJ2J1ZmZlcicsICdjbXAnLCAnY29lcmNlJywgJ2V4ZWNmaWxlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaWxlJywgJ2ludGVybicsICdsb25nJywgJ3Jhd19pbnB1dCcsICdyZWR1Y2UnLCAncmVsb2FkJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1bmljaHInLCAndW5pY29kZScsICd4cmFuZ2UnLCAnRmFsc2UnLCAnVHJ1ZScsICdOb25lJ10sCiAgICAgICAgICAgICAgICdrZXl3b3Jkcyc6IFsnZXhlYycsICdwcmludCddfTsKICAgIHZhciBweTMgPSB7J2J1aWx0aW5zJzogWydhc2NpaScsICdieXRlcycsICdleGVjJywgJ3ByaW50J10sCiAgICAgICAgICAgICAgICdrZXl3b3Jkcyc6IFsnbm9ubG9jYWwnLCAnRmFsc2UnLCAnVHJ1ZScsICdOb25lJ119OwoKICAgIGlmICghIXBhcnNlckNvbmYudmVyc2lvbiAmJiBwYXJzZUludChwYXJzZXJDb25mLnZlcnNpb24sIDEwKSA9PT0gMykgewogICAgICAgIGNvbW1vbmtleXdvcmRzID0gY29tbW9ua2V5d29yZHMuY29uY2F0KHB5My5rZXl3b3Jkcyk7CiAgICAgICAgY29tbW9uQnVpbHRpbnMgPSBjb21tb25CdWlsdGlucy5jb25jYXQocHkzLmJ1aWx0aW5zKTsKICAgICAgICB2YXIgc3RyaW5nUHJlZml4ZXMgPSBuZXcgUmVnRXhwKCJeKChbcmJdfChicikpPygnezN9fFwiezN9fFsnXCJdKSkiLCAiaSIpOwogICAgfSBlbHNlIHsKICAgICAgICBjb21tb25rZXl3b3JkcyA9IGNvbW1vbmtleXdvcmRzLmNvbmNhdChweTIua2V5d29yZHMpOwogICAgICAgIGNvbW1vbkJ1aWx0aW5zID0gY29tbW9uQnVpbHRpbnMuY29uY2F0KHB5Mi5idWlsdGlucyk7CiAgICAgICAgdmFyIHN0cmluZ1ByZWZpeGVzID0gbmV3IFJlZ0V4cCgiXigoW3J1Yl18KHVyKXwoYnIpKT8oJ3szfXxcInszfXxbJ1wiXSkpIiwgImkiKTsKICAgIH0KICAgIHZhciBrZXl3b3JkcyA9IHdvcmRSZWdleHAoY29tbW9ua2V5d29yZHMpOwogICAgdmFyIGJ1aWx0aW5zID0gd29yZFJlZ2V4cChjb21tb25CdWlsdGlucyk7CgogICAgdmFyIGluZGVudEluZm8gPSBudWxsOwoKICAgIC8vIHRva2VuaXplcnMKICAgIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgLy8gSGFuZGxlIHNjb3BlIGNoYW5nZXMKICAgICAgICBpZiAoc3RyZWFtLnNvbCgpKSB7CiAgICAgICAgICAgIHZhciBzY29wZU9mZnNldCA9IHN0YXRlLnNjb3Blc1swXS5vZmZzZXQ7CiAgICAgICAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgewogICAgICAgICAgICAgICAgdmFyIGxpbmVPZmZzZXQgPSBzdHJlYW0uaW5kZW50YXRpb24oKTsKICAgICAgICAgICAgICAgIGlmIChsaW5lT2Zmc2V0ID4gc2NvcGVPZmZzZXQpIHsKICAgICAgICAgICAgICAgICAgICBpbmRlbnRJbmZvID0gJ2luZGVudCc7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxpbmVPZmZzZXQgPCBzY29wZU9mZnNldCkgewogICAgICAgICAgICAgICAgICAgIGluZGVudEluZm8gPSAnZGVkZW50JzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaWYgKHNjb3BlT2Zmc2V0ID4gMCkgewogICAgICAgICAgICAgICAgICAgIGRlZGVudChzdHJlYW0sIHN0YXRlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHZhciBjaCA9IHN0cmVhbS5wZWVrKCk7CiAgICAgICAgCiAgICAgICAgLy8gSGFuZGxlIENvbW1lbnRzCiAgICAgICAgaWYgKGNoID09PSAnIycpIHsKICAgICAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICAgICAgICByZXR1cm4gJ2NvbW1lbnQnOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyBIYW5kbGUgTnVtYmVyIExpdGVyYWxzCiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXlswLTlcLl0vLCBmYWxzZSkpIHsKICAgICAgICAgICAgdmFyIGZsb2F0TGl0ZXJhbCA9IGZhbHNlOwogICAgICAgICAgICAvLyBGbG9hdHMKICAgICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXlxkKlwuXGQrKGVbXCtcLV0/XGQrKT8vaSkpIHsgZmxvYXRMaXRlcmFsID0gdHJ1ZTsgfQogICAgICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eXGQrXC5cZCovKSkgeyBmbG9hdExpdGVyYWwgPSB0cnVlOyB9CiAgICAgICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL15cLlxkKy8pKSB7IGZsb2F0TGl0ZXJhbCA9IHRydWU7IH0KICAgICAgICAgICAgaWYgKGZsb2F0TGl0ZXJhbCkgewogICAgICAgICAgICAgICAgLy8gRmxvYXQgbGl0ZXJhbHMgbWF5IGJlICJpbWFnaW5hcnkiCiAgICAgICAgICAgICAgICBzdHJlYW0uZWF0KC9KL2kpOwogICAgICAgICAgICAgICAgcmV0dXJuICdudW1iZXInOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIEludGVnZXJzCiAgICAgICAgICAgIHZhciBpbnRMaXRlcmFsID0gZmFsc2U7CiAgICAgICAgICAgIC8vIEhleAogICAgICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eMHhbMC05YS1mXSsvaSkpIHsgaW50TGl0ZXJhbCA9IHRydWU7IH0KICAgICAgICAgICAgLy8gQmluYXJ5CiAgICAgICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL14wYlswMV0rL2kpKSB7IGludExpdGVyYWwgPSB0cnVlOyB9CiAgICAgICAgICAgIC8vIE9jdGFsCiAgICAgICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL14wb1swLTddKy9pKSkgeyBpbnRMaXRlcmFsID0gdHJ1ZTsgfQogICAgICAgICAgICAvLyBEZWNpbWFsCiAgICAgICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL15bMS05XVxkKihlW1wrXC1dP1xkKyk/LykpIHsKICAgICAgICAgICAgICAgIC8vIERlY2ltYWwgbGl0ZXJhbHMgbWF5IGJlICJpbWFnaW5hcnkiCiAgICAgICAgICAgICAgICBzdHJlYW0uZWF0KC9KL2kpOwogICAgICAgICAgICAgICAgLy8gVE9ETyAtIENhbiB5b3UgaGF2ZSBpbWFnaW5hcnkgbG9uZ3M/CiAgICAgICAgICAgICAgICBpbnRMaXRlcmFsID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBaZXJvIGJ5IGl0c2VsZiB3aXRoIG5vIG90aGVyIHBpZWNlIG9mIG51bWJlci4KICAgICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXjAoPyFbXGR4XSkvaSkpIHsgaW50TGl0ZXJhbCA9IHRydWU7IH0KICAgICAgICAgICAgaWYgKGludExpdGVyYWwpIHsKICAgICAgICAgICAgICAgIC8vIEludGVnZXIgbGl0ZXJhbHMgbWF5IGJlICJsb25nIgogICAgICAgICAgICAgICAgc3RyZWFtLmVhdCgvTC9pKTsKICAgICAgICAgICAgICAgIHJldHVybiAnbnVtYmVyJzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyBIYW5kbGUgU3RyaW5ncwogICAgICAgIGlmIChzdHJlYW0ubWF0Y2goc3RyaW5nUHJlZml4ZXMpKSB7CiAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5TdHJpbmdGYWN0b3J5KHN0cmVhbS5jdXJyZW50KCkpOwogICAgICAgICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIEhhbmRsZSBvcGVyYXRvcnMgYW5kIERlbGltaXRlcnMKICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKHRyaXBsZURlbGltaXRlcnMpIHx8IHN0cmVhbS5tYXRjaChkb3VibGVEZWxpbWl0ZXJzKSkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChkb3VibGVPcGVyYXRvcnMpCiAgICAgICAgICAgIHx8IHN0cmVhbS5tYXRjaChzaW5nbGVPcGVyYXRvcnMpCiAgICAgICAgICAgIHx8IHN0cmVhbS5tYXRjaCh3b3JkT3BlcmF0b3JzKSkgewogICAgICAgICAgICByZXR1cm4gJ29wZXJhdG9yJzsKICAgICAgICB9CiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChzaW5nbGVEZWxpbWl0ZXJzKSkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChrZXl3b3JkcykpIHsKICAgICAgICAgICAgcmV0dXJuICdrZXl3b3JkJzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChidWlsdGlucykpIHsKICAgICAgICAgICAgcmV0dXJuICdidWlsdGluJzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChpZGVudGlmaWVycykpIHsKICAgICAgICAgICAgcmV0dXJuICd2YXJpYWJsZSc7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIEhhbmRsZSBub24tZGV0ZWN0ZWQgaXRlbXMKICAgICAgICBzdHJlYW0ubmV4dCgpOwogICAgICAgIHJldHVybiBFUlJPUkNMQVNTOwogICAgfQogICAgCiAgICBmdW5jdGlvbiB0b2tlblN0cmluZ0ZhY3RvcnkoZGVsaW1pdGVyKSB7CiAgICAgICAgd2hpbGUgKCdydWInLmluZGV4T2YoZGVsaW1pdGVyLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpKSA+PSAwKSB7CiAgICAgICAgICAgIGRlbGltaXRlciA9IGRlbGltaXRlci5zdWJzdHIoMSk7CiAgICAgICAgfQogICAgICAgIHZhciBzaW5nbGVsaW5lID0gZGVsaW1pdGVyLmxlbmd0aCA9PSAxOwogICAgICAgIHZhciBPVVRDTEFTUyA9ICdzdHJpbmcnOwogICAgICAgIAogICAgICAgIHJldHVybiBmdW5jdGlvbiB0b2tlblN0cmluZyhzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgICAgIHdoaWxlICghc3RyZWFtLmVvbCgpKSB7CiAgICAgICAgICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1teJyJcXF0vKTsKICAgICAgICAgICAgICAgIGlmIChzdHJlYW0uZWF0KCdcXCcpKSB7CiAgICAgICAgICAgICAgICAgICAgc3RyZWFtLm5leHQoKTsKICAgICAgICAgICAgICAgICAgICBpZiAoc2luZ2xlbGluZSAmJiBzdHJlYW0uZW9sKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9VVENMQVNTOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLm1hdGNoKGRlbGltaXRlcikpIHsKICAgICAgICAgICAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gT1VUQ0xBU1M7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHN0cmVhbS5lYXQoL1snIl0vKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoc2luZ2xlbGluZSkgewogICAgICAgICAgICAgICAgaWYgKHBhcnNlckNvbmYuc2luZ2xlTGluZVN0cmluZ0Vycm9ycykgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUkNMQVNTOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gT1VUQ0xBU1M7CiAgICAgICAgfTsKICAgIH0KICAgIAogICAgZnVuY3Rpb24gaW5kZW50KHN0cmVhbSwgc3RhdGUsIHR5cGUpIHsKICAgICAgICB0eXBlID0gdHlwZSB8fCAncHknOwogICAgICAgIHZhciBpbmRlbnRVbml0ID0gMDsKICAgICAgICBpZiAodHlwZSA9PT0gJ3B5JykgewogICAgICAgICAgICBpZiAoc3RhdGUuc2NvcGVzWzBdLnR5cGUgIT09ICdweScpIHsKICAgICAgICAgICAgICAgIHN0YXRlLnNjb3Blc1swXS5vZmZzZXQgPSBzdHJlYW0uaW5kZW50YXRpb24oKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YXRlLnNjb3Blcy5sZW5ndGg7ICsraSkgewogICAgICAgICAgICAgICAgaWYgKHN0YXRlLnNjb3Blc1tpXS50eXBlID09PSAncHknKSB7CiAgICAgICAgICAgICAgICAgICAgaW5kZW50VW5pdCA9IHN0YXRlLnNjb3Blc1tpXS5vZmZzZXQgKyBjb25mLmluZGVudFVuaXQ7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpbmRlbnRVbml0ID0gc3RyZWFtLmNvbHVtbigpICsgc3RyZWFtLmN1cnJlbnQoKS5sZW5ndGg7CiAgICAgICAgfQogICAgICAgIHN0YXRlLnNjb3Blcy51bnNoaWZ0KHsKICAgICAgICAgICAgb2Zmc2V0OiBpbmRlbnRVbml0LAogICAgICAgICAgICB0eXBlOiB0eXBlCiAgICAgICAgfSk7CiAgICB9CiAgICAKICAgIGZ1bmN0aW9uIGRlZGVudChzdHJlYW0sIHN0YXRlLCB0eXBlKSB7CiAgICAgICAgdHlwZSA9IHR5cGUgfHwgJ3B5JzsKICAgICAgICBpZiAoc3RhdGUuc2NvcGVzLmxlbmd0aCA9PSAxKSByZXR1cm47CiAgICAgICAgaWYgKHN0YXRlLnNjb3Blc1swXS50eXBlID09PSAncHknKSB7CiAgICAgICAgICAgIHZhciBfaW5kZW50ID0gc3RyZWFtLmluZGVudGF0aW9uKCk7CiAgICAgICAgICAgIHZhciBfaW5kZW50X2luZGV4ID0gLTE7CiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhdGUuc2NvcGVzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICAgICBpZiAoX2luZGVudCA9PT0gc3RhdGUuc2NvcGVzW2ldLm9mZnNldCkgewogICAgICAgICAgICAgICAgICAgIF9pbmRlbnRfaW5kZXggPSBpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChfaW5kZW50X2luZGV4ID09PSAtMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgd2hpbGUgKHN0YXRlLnNjb3Blc1swXS5vZmZzZXQgIT09IF9pbmRlbnQpIHsKICAgICAgICAgICAgICAgIHN0YXRlLnNjb3Blcy5zaGlmdCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBmYWxzZQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmICh0eXBlID09PSAncHknKSB7CiAgICAgICAgICAgICAgICBzdGF0ZS5zY29wZXNbMF0ub2Zmc2V0ID0gc3RyZWFtLmluZGVudGF0aW9uKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuc2NvcGVzWzBdLnR5cGUgIT0gdHlwZSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUuc2NvcGVzLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gdG9rZW5MZXhlcihzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgaW5kZW50SW5mbyA9IG51bGw7CiAgICAgICAgdmFyIHN0eWxlID0gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICAgICAgdmFyIGN1cnJlbnQgPSBzdHJlYW0uY3VycmVudCgpOwoKICAgICAgICAvLyBIYW5kbGUgJy4nIGNvbm5lY3RlZCBpZGVudGlmaWVycwogICAgICAgIGlmIChjdXJyZW50ID09PSAnLicpIHsKICAgICAgICAgICAgc3R5bGUgPSBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgICAgICAgICAgY3VycmVudCA9IHN0cmVhbS5jdXJyZW50KCk7CiAgICAgICAgICAgIGlmIChzdHlsZSA9PT0gJ3ZhcmlhYmxlJyB8fCBzdHlsZSA9PT0gJ2J1aWx0aW4nKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJ3ZhcmlhYmxlJzsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUkNMQVNTOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIEhhbmRsZSBkZWNvcmF0b3JzCiAgICAgICAgaWYgKGN1cnJlbnQgPT09ICdAJykgewogICAgICAgICAgICBzdHlsZSA9IHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwogICAgICAgICAgICBjdXJyZW50ID0gc3RyZWFtLmN1cnJlbnQoKTsKICAgICAgICAgICAgaWYgKHN0eWxlID09PSAndmFyaWFibGUnCiAgICAgICAgICAgICAgICB8fCBjdXJyZW50ID09PSAnQHN0YXRpY21ldGhvZCcKICAgICAgICAgICAgICAgIHx8IGN1cnJlbnQgPT09ICdAY2xhc3NtZXRob2QnKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJ21ldGEnOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIEVSUk9SQ0xBU1M7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gSGFuZGxlIHNjb3BlIGNoYW5nZXMuCiAgICAgICAgaWYgKGN1cnJlbnQgPT09ICdwYXNzJyB8fCBjdXJyZW50ID09PSAncmV0dXJuJykgewogICAgICAgICAgICBzdGF0ZS5kZWRlbnQgKz0gMTsKICAgICAgICB9CiAgICAgICAgaWYgKChjdXJyZW50ID09PSAnOicgJiYgIXN0YXRlLmxhbWJkYSAmJiBzdGF0ZS5zY29wZXNbMF0udHlwZSA9PSAncHknKQogICAgICAgICAgICB8fCBpbmRlbnRJbmZvID09PSAnaW5kZW50JykgewogICAgICAgICAgICBpbmRlbnQoc3RyZWFtLCBzdGF0ZSk7CiAgICAgICAgfQogICAgICAgIHZhciBkZWxpbWl0ZXJfaW5kZXggPSAnWyh7Jy5pbmRleE9mKGN1cnJlbnQpOwogICAgICAgIGlmIChkZWxpbWl0ZXJfaW5kZXggIT09IC0xKSB7CiAgICAgICAgICAgIGluZGVudChzdHJlYW0sIHN0YXRlLCAnXSl9Jy5zbGljZShkZWxpbWl0ZXJfaW5kZXgsIGRlbGltaXRlcl9pbmRleCsxKSk7CiAgICAgICAgfQogICAgICAgIGlmIChpbmRlbnRJbmZvID09PSAnZGVkZW50JykgewogICAgICAgICAgICBpZiAoZGVkZW50KHN0cmVhbSwgc3RhdGUpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gRVJST1JDTEFTUzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBkZWxpbWl0ZXJfaW5kZXggPSAnXSl9Jy5pbmRleE9mKGN1cnJlbnQpOwogICAgICAgIGlmIChkZWxpbWl0ZXJfaW5kZXggIT09IC0xKSB7CiAgICAgICAgICAgIGlmIChkZWRlbnQoc3RyZWFtLCBzdGF0ZSwgY3VycmVudCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUkNMQVNTOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChzdGF0ZS5kZWRlbnQgPiAwICYmIHN0cmVhbS5lb2woKSAmJiBzdGF0ZS5zY29wZXNbMF0udHlwZSA9PSAncHknKSB7CiAgICAgICAgICAgIGlmIChzdGF0ZS5zY29wZXMubGVuZ3RoID4gMSkgc3RhdGUuc2NvcGVzLnNoaWZ0KCk7CiAgICAgICAgICAgIHN0YXRlLmRlZGVudCAtPSAxOwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gc3R5bGU7CiAgICB9CgogICAgdmFyIGV4dGVybmFsID0gewogICAgICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKGJhc2Vjb2x1bW4pIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICB0b2tlbml6ZTogdG9rZW5CYXNlLAogICAgICAgICAgICAgIHNjb3BlczogW3tvZmZzZXQ6YmFzZWNvbHVtbiB8fCAwLCB0eXBlOidweSd9XSwKICAgICAgICAgICAgICBsYXN0VG9rZW46IG51bGwsCiAgICAgICAgICAgICAgbGFtYmRhOiBmYWxzZSwKICAgICAgICAgICAgICBkZWRlbnQ6IDAKICAgICAgICAgIH07CiAgICAgICAgfSwKICAgICAgICAKICAgICAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICAgICAgICB2YXIgc3R5bGUgPSB0b2tlbkxleGVyKHN0cmVhbSwgc3RhdGUpOwogICAgICAgICAgICAKICAgICAgICAgICAgc3RhdGUubGFzdFRva2VuID0ge3N0eWxlOnN0eWxlLCBjb250ZW50OiBzdHJlYW0uY3VycmVudCgpfTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdHJlYW0uZW9sKCkgJiYgc3RyZWFtLmxhbWJkYSkgewogICAgICAgICAgICAgICAgc3RhdGUubGFtYmRhID0gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIHJldHVybiBzdHlsZTsKICAgICAgICB9LAogICAgICAgIAogICAgICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlcikgewogICAgICAgICAgICBpZiAoc3RhdGUudG9rZW5pemUgIT0gdG9rZW5CYXNlKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHN0YXRlLnNjb3Blc1swXS5vZmZzZXQ7CiAgICAgICAgfQogICAgICAgIAogICAgfTsKICAgIHJldHVybiBleHRlcm5hbDsKfSk7CgpDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1weXRob24iLCAicHl0aG9uIik7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/r/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/r/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFIgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9InIuanMiPjwvc2NyaXB0PgogICAgPHN0eWxlPgogICAgICAuQ29kZU1pcnJvciB7IGJvcmRlci10b3A6IDFweCBzb2xpZCBzaWx2ZXI7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBzaWx2ZXI7IH0KICAgICAgLmNtLXMtZGVmYXVsdCBzcGFuLmNtLXNlbWkgeyBjb2xvcjogYmx1ZTsgZm9udC13ZWlnaHQ6IGJvbGQ7IH0KICAgICAgLmNtLXMtZGVmYXVsdCBzcGFuLmNtLWRvbGxhciB7IGNvbG9yOiBvcmFuZ2U7IGZvbnQtd2VpZ2h0OiBib2xkOyB9CiAgICAgIC5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1hcnJvdyB7IGNvbG9yOiBicm93bjsgfQogICAgICAuY20tcy1kZWZhdWx0IHNwYW4uY20tYXJnLWlzIHsgY29sb3I6IGJyb3duOyB9CiAgICA8L3N0eWxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBSIG1vZGU8L2gxPgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KIyBDb2RlIGZyb20gaHR0cDovL3d3dy5tYXlpbi5vcmcvYWpheXNoYWgvS0IvUi8KCiMgRklSU1QgTEVBUk4gQUJPVVQgTElTVFMgLS0KWCA9IGxpc3QoaGVpZ2h0PTUuNCwgd2VpZ2h0PTU0KQpwcmludCgiVXNlIGRlZmF1bHQgcHJpbnRpbmcgLS0iKQpwcmludChYKQpwcmludCgiQWNjZXNzaW5nIGluZGl2aWR1YWwgZWxlbWVudHMgLS0iKQpjYXQoIllvdXIgaGVpZ2h0IGlzICIsIFgkaGVpZ2h0LCAiIGFuZCB5b3VyIHdlaWdodCBpcyAiLCBYJHdlaWdodCwgIlxuIikKCiMgRlVOQ1RJT05TIC0tCnNxdWFyZSA8LSBmdW5jdGlvbih4KSB7CiAgcmV0dXJuKHgqeCkKfQpjYXQoIlRoZSBzcXVhcmUgb2YgMyBpcyAiLCBzcXVhcmUoMyksICJcbiIpCgogICAgICAgICAgICAgICAgICMgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgYXJnIGlzIHNldCB0byA1LgpjdWJlIDwtIGZ1bmN0aW9uKHg9NSkgewogIHJldHVybih4KngqeCk7Cn0KY2F0KCJDYWxsaW5nIGN1YmUgd2l0aCAyIDogIiwgY3ViZSgyKSwgIlxuIikgICAgIyB3aWxsIGdpdmUgMl4zCmNhdCgiQ2FsbGluZyBjdWJlICAgICAgICA6ICIsIGN1YmUoKSwgIlxuIikgICAgICMgd2lsbCBkZWZhdWx0IHRvIDVeMy4KCiMgTEVBUk4gQUJPVVQgRlVOQ1RJT05TIFRIQVQgUkVUVVJOIE1VTFRJUExFIE9CSkVDVFMgLS0KcG93ZXJzIDwtIGZ1bmN0aW9uKHgpIHsKICBwYXJjZWwgPSBsaXN0KHgyPXgqeCwgeDM9eCp4KngsIHg0PXgqeCp4KngpOwogIHJldHVybihwYXJjZWwpOwp9CgpYID0gcG93ZXJzKDMpOwpwcmludCgiU2hvd2luZyBwb3dlcnMgb2YgMyAtLSIpOyBwcmludChYKTsKCiMgV1JJVElORyBUSElTIENPTVBBQ1RMWSAoNCBsaW5lcyBpbnN0ZWFkIG9mIDcpCgpwb3dlcmZ1bCA8LSBmdW5jdGlvbih4KSB7CiAgcmV0dXJuKGxpc3QoeDI9eCp4LCB4Mz14KngqeCwgeDQ9eCp4KngqeCkpOwp9CnByaW50KCJTaG93aW5nIHBvd2VycyBvZiAzIC0tIik7IHByaW50KHBvd2VyZnVsKDMpKTsKCiMgSW4gUiwgdGhlIGxhc3QgZXhwcmVzc2lvbiBpbiBhIGZ1bmN0aW9uIGlzLCBieSBkZWZhdWx0LCB3aGF0IGlzCiMgcmV0dXJuZWQuIFNvIHlvdSBjb3VsZCBlcXVhbGx5IGp1c3Qgc2F5Ogpwb3dlcmZ1bCA8LSBmdW5jdGlvbih4KSB7bGlzdCh4Mj14KngsIHgzPXgqeCp4LCB4ND14KngqeCp4KX0KPC90ZXh0YXJlYT48L2Zvcm0+CiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwge30pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQveC1yc3JjPC9jb2RlPi48L3A+CgogICAgPHA+RGV2ZWxvcG1lbnQgb2YgdGhlIENvZGVNaXJyb3IgUiBtb2RlIHdhcyBraW5kbHkgc3BvbnNvcmVkCiAgICBieSA8YSBocmVmPSJodHRwOi8vdWJhbG8uY29tLyI+VWJhbG88L2E+LCB3aG8gaG9sZAogICAgdGhlIDxhIGhyZWY9IkxJQ0VOU0UiPmxpY2Vuc2U8L2E+LjwvcD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/r/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChjKSAyMDExLCBVYmFsbywgSW5jLgpBbGwgcmlnaHRzIHJlc2VydmVkLgoKUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cm1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgogICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVWJhbG8sIEluYyBub3IgdGhlIG5hbWVzIG9mIGl0cwogICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgoKVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORApBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRApXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFVCQUxPLCBJTkMgQkUgTElBQkxFIEZPUiBBTlkKRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwpMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/r/r.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJyIiwgZnVuY3Rpb24oY29uZmlnKSB7CiAgZnVuY3Rpb24gd29yZE9iaihzdHIpIHsKICAgIHZhciB3b3JkcyA9IHN0ci5zcGxpdCgiICIpLCByZXMgPSB7fTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd29yZHMubGVuZ3RoOyArK2kpIHJlc1t3b3Jkc1tpXV0gPSB0cnVlOwogICAgcmV0dXJuIHJlczsKICB9CiAgdmFyIGF0b21zID0gd29yZE9iaigiTlVMTCBOQSBJbmYgTmFOIE5BX2ludGVnZXJfIE5BX3JlYWxfIE5BX2NvbXBsZXhfIE5BX2NoYXJhY3Rlcl8iKTsKICB2YXIgYnVpbHRpbnMgPSB3b3JkT2JqKCJsaXN0IHF1b3RlIGJxdW90ZSBldmFsIHJldHVybiBjYWxsIHBhcnNlIGRlcGFyc2UiKTsKICB2YXIga2V5d29yZHMgPSB3b3JkT2JqKCJpZiBlbHNlIHJlcGVhdCB3aGlsZSBmdW5jdGlvbiBmb3IgaW4gbmV4dCBicmVhayIpOwogIHZhciBibG9ja2tleXdvcmRzID0gd29yZE9iaigiaWYgZWxzZSByZXBlYXQgd2hpbGUgZnVuY3Rpb24gZm9yIik7CiAgdmFyIG9wQ2hhcnMgPSAvWytcLSpcL148Pj0hJnx+JDpdLzsKICB2YXIgY3VyUHVuYzsKCiAgZnVuY3Rpb24gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpIHsKICAgIGN1clB1bmMgPSBudWxsOwogICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKICAgIGlmIChjaCA9PSAiIyIpIHsKICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICByZXR1cm4gImNvbW1lbnQiOwogICAgfSBlbHNlIGlmIChjaCA9PSAiMCIgJiYgc3RyZWFtLmVhdCgieCIpKSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1xkYS1mXS9pKTsKICAgICAgcmV0dXJuICJudW1iZXIiOwogICAgfSBlbHNlIGlmIChjaCA9PSAiLiIgJiYgc3RyZWFtLmVhdCgvXGQvKSkgewogICAgICBzdHJlYW0ubWF0Y2goL1xkKig/OmVbK1wtXT9cZCspPy8pOwogICAgICByZXR1cm4gIm51bWJlciI7CiAgICB9IGVsc2UgaWYgKC9cZC8udGVzdChjaCkpIHsKICAgICAgc3RyZWFtLm1hdGNoKC9cZCooPzpcLlxkKyk/KD86ZVsrXC1dXGQrKT9MPy8pOwogICAgICByZXR1cm4gIm51bWJlciI7CiAgICB9IGVsc2UgaWYgKGNoID09ICInIiB8fCBjaCA9PSAnIicpIHsKICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblN0cmluZyhjaCk7CiAgICAgIHJldHVybiAic3RyaW5nIjsKICAgIH0gZWxzZSBpZiAoY2ggPT0gIi4iICYmIHN0cmVhbS5tYXRjaCgvLlsuXGRdKy8pKSB7CiAgICAgIHJldHVybiAia2V5d29yZCI7CiAgICB9IGVsc2UgaWYgKC9bXHdcLl0vLnRlc3QoY2gpICYmIGNoICE9ICJfIikgewogICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1wuXS8pOwogICAgICB2YXIgd29yZCA9IHN0cmVhbS5jdXJyZW50KCk7CiAgICAgIGlmIChhdG9tcy5wcm9wZXJ0eUlzRW51bWVyYWJsZSh3b3JkKSkgcmV0dXJuICJhdG9tIjsKICAgICAgaWYgKGtleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKHdvcmQpKSB7CiAgICAgICAgaWYgKGJsb2Nra2V5d29yZHMucHJvcGVydHlJc0VudW1lcmFibGUod29yZCkpIGN1clB1bmMgPSAiYmxvY2siOwogICAgICAgIHJldHVybiAia2V5d29yZCI7CiAgICAgIH0KICAgICAgaWYgKGJ1aWx0aW5zLnByb3BlcnR5SXNFbnVtZXJhYmxlKHdvcmQpKSByZXR1cm4gImJ1aWx0aW4iOwogICAgICByZXR1cm4gInZhcmlhYmxlIjsKICAgIH0gZWxzZSBpZiAoY2ggPT0gIiUiKSB7CiAgICAgIGlmIChzdHJlYW0uc2tpcFRvKCIlIikpIHN0cmVhbS5uZXh0KCk7CiAgICAgIHJldHVybiAidmFyaWFibGUtMiI7CiAgICB9IGVsc2UgaWYgKGNoID09ICI8IiAmJiBzdHJlYW0uZWF0KCItIikpIHsKICAgICAgcmV0dXJuICJhcnJvdyI7CiAgICB9IGVsc2UgaWYgKGNoID09ICI9IiAmJiBzdGF0ZS5jdHguYXJnTGlzdCkgewogICAgICByZXR1cm4gImFyZy1pcyI7CiAgICB9IGVsc2UgaWYgKG9wQ2hhcnMudGVzdChjaCkpIHsKICAgICAgaWYgKGNoID09ICIkIikgcmV0dXJuICJkb2xsYXIiOwogICAgICBzdHJlYW0uZWF0V2hpbGUob3BDaGFycyk7CiAgICAgIHJldHVybiAib3BlcmF0b3IiOwogICAgfSBlbHNlIGlmICgvW1woXCl7fVxbXF07XS8udGVzdChjaCkpIHsKICAgICAgY3VyUHVuYyA9IGNoOwogICAgICBpZiAoY2ggPT0gIjsiKSByZXR1cm4gInNlbWkiOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0KCiAgZnVuY3Rpb24gdG9rZW5TdHJpbmcocXVvdGUpIHsKICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgIGlmIChzdHJlYW0uZWF0KCJcXCIpKSB7CiAgICAgICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKICAgICAgICBpZiAoY2ggPT0gIngiKSBzdHJlYW0ubWF0Y2goL15bYS1mMC05XXsyfS9pKTsKICAgICAgICBlbHNlIGlmICgoY2ggPT0gInUiIHx8IGNoID09ICJVIikgJiYgc3RyZWFtLmVhdCgieyIpICYmIHN0cmVhbS5za2lwVG8oIn0iKSkgc3RyZWFtLm5leHQoKTsKICAgICAgICBlbHNlIGlmIChjaCA9PSAidSIpIHN0cmVhbS5tYXRjaCgvXlthLWYwLTldezR9L2kpOwogICAgICAgIGVsc2UgaWYgKGNoID09ICJVIikgc3RyZWFtLm1hdGNoKC9eW2EtZjAtOV17OH0vaSk7CiAgICAgICAgZWxzZSBpZiAoL1swLTddLy50ZXN0KGNoKSkgc3RyZWFtLm1hdGNoKC9eWzAtN117MSwyfS8pOwogICAgICAgIHJldHVybiAic3RyaW5nLTIiOwogICAgICB9IGVsc2UgewogICAgICAgIHZhciBuZXh0OwogICAgICAgIHdoaWxlICgobmV4dCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHsKICAgICAgICAgIGlmIChuZXh0ID09IHF1b3RlKSB7IHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlOyBicmVhazsgfQogICAgICAgICAgaWYgKG5leHQgPT0gIlxcIikgeyBzdHJlYW0uYmFja1VwKDEpOyBicmVhazsgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gInN0cmluZyI7CiAgICAgIH0KICAgIH07CiAgfQoKICBmdW5jdGlvbiBwdXNoKHN0YXRlLCB0eXBlLCBzdHJlYW0pIHsKICAgIHN0YXRlLmN0eCA9IHt0eXBlOiB0eXBlLAogICAgICAgICAgICAgICAgIGluZGVudDogc3RhdGUuaW5kZW50LAogICAgICAgICAgICAgICAgIGFsaWduOiBudWxsLAogICAgICAgICAgICAgICAgIGNvbHVtbjogc3RyZWFtLmNvbHVtbigpLAogICAgICAgICAgICAgICAgIHByZXY6IHN0YXRlLmN0eH07CiAgfQogIGZ1bmN0aW9uIHBvcChzdGF0ZSkgewogICAgc3RhdGUuaW5kZW50ID0gc3RhdGUuY3R4LmluZGVudDsKICAgIHN0YXRlLmN0eCA9IHN0YXRlLmN0eC5wcmV2OwogIH0KCiAgcmV0dXJuIHsKICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKGJhc2UpIHsKICAgICAgcmV0dXJuIHt0b2tlbml6ZTogdG9rZW5CYXNlLAogICAgICAgICAgICAgIGN0eDoge3R5cGU6ICJ0b3AiLAogICAgICAgICAgICAgICAgICAgIGluZGVudDogLWNvbmZpZy5pbmRlbnRVbml0LAogICAgICAgICAgICAgICAgICAgIGFsaWduOiBmYWxzZX0sCiAgICAgICAgICAgICAgaW5kZW50OiAwLAogICAgICAgICAgICAgIGFmdGVySWRlbnQ6IGZhbHNlfTsKICAgIH0sCgogICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgaWYgKHN0cmVhbS5zb2woKSkgewogICAgICAgIGlmIChzdGF0ZS5jdHguYWxpZ24gPT0gbnVsbCkgc3RhdGUuY3R4LmFsaWduID0gZmFsc2U7CiAgICAgICAgc3RhdGUuaW5kZW50ID0gc3RyZWFtLmluZGVudGF0aW9uKCk7CiAgICAgIH0KICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDsKICAgICAgdmFyIHN0eWxlID0gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICAgIGlmIChzdHlsZSAhPSAiY29tbWVudCIgJiYgc3RhdGUuY3R4LmFsaWduID09IG51bGwpIHN0YXRlLmN0eC5hbGlnbiA9IHRydWU7CgogICAgICB2YXIgY3R5cGUgPSBzdGF0ZS5jdHgudHlwZTsKICAgICAgaWYgKChjdXJQdW5jID09ICI7IiB8fCBjdXJQdW5jID09ICJ7IiB8fCBjdXJQdW5jID09ICJ9IikgJiYgY3R5cGUgPT0gImJsb2NrIikgcG9wKHN0YXRlKTsKICAgICAgaWYgKGN1clB1bmMgPT0gInsiKSBwdXNoKHN0YXRlLCAifSIsIHN0cmVhbSk7CiAgICAgIGVsc2UgaWYgKGN1clB1bmMgPT0gIigiKSB7CiAgICAgICAgcHVzaChzdGF0ZSwgIikiLCBzdHJlYW0pOwogICAgICAgIGlmIChzdGF0ZS5hZnRlcklkZW50KSBzdGF0ZS5jdHguYXJnTGlzdCA9IHRydWU7CiAgICAgIH0KICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSAiWyIpIHB1c2goc3RhdGUsICJdIiwgc3RyZWFtKTsKICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSAiYmxvY2siKSBwdXNoKHN0YXRlLCAiYmxvY2siLCBzdHJlYW0pOwogICAgICBlbHNlIGlmIChjdXJQdW5jID09IGN0eXBlKSBwb3Aoc3RhdGUpOwogICAgICBzdGF0ZS5hZnRlcklkZW50ID0gc3R5bGUgPT0gInZhcmlhYmxlIiB8fCBzdHlsZSA9PSAia2V5d29yZCI7CiAgICAgIHJldHVybiBzdHlsZTsKICAgIH0sCgogICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7CiAgICAgIGlmIChzdGF0ZS50b2tlbml6ZSAhPSB0b2tlbkJhc2UpIHJldHVybiAwOwogICAgICB2YXIgZmlyc3RDaGFyID0gdGV4dEFmdGVyICYmIHRleHRBZnRlci5jaGFyQXQoMCksIGN0eCA9IHN0YXRlLmN0eCwKICAgICAgICAgIGNsb3NpbmcgPSBmaXJzdENoYXIgPT0gY3R4LnR5cGU7CiAgICAgIGlmIChjdHgudHlwZSA9PSAiYmxvY2siKSByZXR1cm4gY3R4LmluZGVudCArIChmaXJzdENoYXIgPT0gInsiID8gMCA6IGNvbmZpZy5pbmRlbnRVbml0KTsKICAgICAgZWxzZSBpZiAoY3R4LmFsaWduKSByZXR1cm4gY3R4LmNvbHVtbiArIChjbG9zaW5nID8gMCA6IDEpOwogICAgICBlbHNlIHJldHVybiBjdHguaW5kZW50ICsgKGNsb3NpbmcgPyAwIDogY29uZmlnLmluZGVudFVuaXQpOwogICAgfQogIH07Cn0pOwoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtcnNyYyIsICJyIik7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/rpm/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/rpm/changes/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/rpm/changes/changes.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJjaGFuZ2VzIiwgZnVuY3Rpb24oY29uZmlnLCBtb2RlQ29uZmlnKSB7CiAgdmFyIGhlYWRlclNlcGVyYXRvciA9IC9eLSskLzsKICB2YXIgaGVhZGVyTGluZSA9IC9eKE1vbnxUdWV8V2VkfFRodXxGcml8U2F0fFN1bikgKEphbnxGZWJ8TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKSAgP1xkezEsMn0gXGR7Mn06XGR7Mn0oOlxkezJ9KT8gW0EtWl17Myw0fSBcZHs0fSAtIC87CiAgdmFyIHNpbXBsZUVtYWlsID0gL15bXHcrLi1dK0BbXHcuLV0rLzsKCiAgcmV0dXJuIHsKICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0pIHsKICAgICAgaWYgKHN0cmVhbS5zb2woKSkgewogICAgICAgIGlmIChzdHJlYW0ubWF0Y2goaGVhZGVyU2VwZXJhdG9yKSkgeyByZXR1cm4gJ3RhZyc7IH0KICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKGhlYWRlckxpbmUpKSB7IHJldHVybiAndGFnJzsgfQogICAgICB9CiAgICAgIGlmIChzdHJlYW0ubWF0Y2goc2ltcGxlRW1haWwpKSB7IHJldHVybiAnc3RyaW5nJzsgfQogICAgICBzdHJlYW0ubmV4dCgpOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICB9Owp9KTsKCkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LXJwbS1jaGFuZ2VzIiwgImNoYW5nZXMiKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/rpm/changes/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFJQTSBjaGFuZ2VzIG1vZGU8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJjaGFuZ2VzLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vZG9jL2RvY3MuY3NzIj4KICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO308L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBSUE0gY2hhbmdlcyBtb2RlPC9oMT4KICAgIAogICAgPGRpdj48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClR1ZSBPY3QgMTggMTM6NTg6NDAgVVRDIDIwMTEgLSBtaXN0ZXJ4QGV4YW1wbGUuY29tCgotIFVwZGF0ZSB0byByNjAuMwotIEZpeGVzIGJ1ZyBpbiB0aGUgcmVmbGVjdCBwYWNrYWdlCiAgKiBkaXNhbGxvdyBJbnRlcmZhY2UgbWV0aG9kIG9uIFZhbHVlIG9idGFpbmVkIHZpYSB1bmV4cG9ydGVkIG5hbWUKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVGh1IE9jdCAgNiAwODoxNDoyNCBVVEMgMjAxMSAtIG1pc3RlcnhAZXhhbXBsZS5jb20KCi0gVXBkYXRlIHRvIHI2MC4yCi0gRml4ZXMgbWVtb3J5IGxlYWsgaW4gY2VydGFpbiBtYXAgdHlwZXMKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KV2VkIE9jdCAgNSAxNDozNDoxMCBVVEMgMjAxMSAtIG1pc3RlcnhAZXhhbXBsZS5jb20KCi0gVHdlYWtzIGZvciBnZGIgZGVidWdnaW5nCi0gZ28uc3BlYyBjaGFuZ2VzOgogIC0gbW92ZSAlZ29fYXJjaCBkZWZpbml0aW9uIHRvICVwcmVwIHNlY3Rpb24KICAtIHBhc3MgY29ycmVjdCBsb2NhdGlvbiBvZiBnbyBzcGVjaWZpYyBnZGIgcHJldHR5IHByaW50ZXIgYW5kCiAgICBmdW5jdGlvbnMgdG8gY3BwIGFzIEhPU1RfRVhUUkFfQ0ZMQUdTIG1hY3JvCiAgLSBpbnN0YWxsIGdvIGdkYiBmdW5jdGlvbnMgJiBwcmludGVyCi0gZ2RiLXByaW50ZXIucGF0Y2gKICAtIHBhdGNoIGxpbmtlciAoc3JjL2NtZC9sZC9kd2FyZi5jKSB0byBlbWl0IGNvcnJlY3QgbG9jYXRpb24gb2YgZ28KICAgIGdkYiBmdW5jdGlvbnMgYW5kIHByZXR0eSBwcmludGVyCjwvdGV4dGFyZWE+PC9kaXY+CiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIG1vZGU6IHtuYW1lOiAiY2hhbmdlcyJ9LAogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIGluZGVudFVuaXQ6IDQsCiAgICAgICAgdGFiTW9kZTogInNoaWZ0IiwKICAgICAgICBtYXRjaEJyYWNrZXRzOiB0cnVlCiAgICAgIH0pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQveC1ycG0tY2hhbmdlczwvY29kZT4uPC9wPgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/rpm/spec/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/rpm/spec/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFJQTSBzcGVjIG1vZGU8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJzcGVjLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3BlYy5jc3MiPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi9kb2MvZG9jcy5jc3MiPgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4uQ29kZU1pcnJvciB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7fTwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3I6IFJQTSBzcGVjIG1vZGU8L2gxPgogICAgCiAgICA8ZGl2Pjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+CiMKIyBzcGVjIGZpbGUgZm9yIHBhY2thZ2UgbWluaWRsbmEKIwojIENvcHlyaWdodCAoYykgMjAxMSwgU2FzY2hhIFBlaWxpY2tlIDxzYXNjaHBlQGdteC5kZT4KIwojIEFsbCBtb2RpZmljYXRpb25zIGFuZCBhZGRpdGlvbnMgdG8gdGhlIGZpbGUgY29udHJpYnV0ZWQgYnkgdGhpcmQgcGFydGllcwojIHJlbWFpbiB0aGUgcHJvcGVydHkgb2YgdGhlaXIgY29weXJpZ2h0IG93bmVycywgdW5sZXNzIG90aGVyd2lzZSBhZ3JlZWQKIyB1cG9uLiBUaGUgbGljZW5zZSBmb3IgdGhpcyBmaWxlLCBhbmQgbW9kaWZpY2F0aW9ucyBhbmQgYWRkaXRpb25zIHRvIHRoZQojIGZpbGUsIGlzIHRoZSBzYW1lIGxpY2Vuc2UgYXMgZm9yIHRoZSBwcmlzdGluZSBwYWNrYWdlIGl0c2VsZiAodW5sZXNzIHRoZQojIGxpY2Vuc2UgZm9yIHRoZSBwcmlzdGluZSBwYWNrYWdlIGlzIG5vdCBhbiBPcGVuIFNvdXJjZSBMaWNlbnNlLCBpbiB3aGljaAojIGNhc2UgdGhlIGxpY2Vuc2UgaXMgdGhlIE1JVCBMaWNlbnNlKS4gQW4gIk9wZW4gU291cmNlIExpY2Vuc2UiIGlzIGEKIyBsaWNlbnNlIHRoYXQgY29uZm9ybXMgdG8gdGhlIE9wZW4gU291cmNlIERlZmluaXRpb24gKFZlcnNpb24gMS45KQojIHB1Ymxpc2hlZCBieSB0aGUgT3BlbiBTb3VyY2UgSW5pdGlhdGl2ZS4KCgpOYW1lOiAgICAgICAgICAgbGlidXBucDYKVmVyc2lvbjogICAgICAgIDEuNi4xMwpSZWxlYXNlOiAgICAgICAgMApTdW1tYXJ5OiAgICAgICAgUG9ydGFibGUgVW5pdmVyc2FsIFBsdWcgYW5kIFBsYXkgKFVQblApIFNESwpHcm91cDogICAgICAgICAgU3lzdGVtL0xpYnJhcmllcwpMaWNlbnNlOiAgICAgICAgQlNELTMtQ2xhdXNlClVybDogICAgICAgICAgICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL3B1cG5wLwpTb3VyY2UwOiAgICAgICAgaHR0cDovL2Rvd25sb2Fkcy5zb3VyY2Vmb3JnZS5uZXQvcHVwbnAvbGlidXBucC0le3ZlcnNpb259LnRhci5iejIKQnVpbGRSb290OiAgICAgICV7X3RtcHBhdGh9LyV7bmFtZX0tJXt2ZXJzaW9ufS1idWlsZAoKJWRlc2NyaXB0aW9uClRoZSBwb3J0YWJsZSBVbml2ZXJzYWwgUGx1ZyBhbmQgUGxheSAoVVBuUCkgU0RLIHByb3ZpZGVzIHN1cHBvcnQgZm9yIGJ1aWxkaW5nClVQblAtY29tcGxpYW50IGNvbnRyb2wgcG9pbnRzLCBkZXZpY2VzLCBhbmQgYnJpZGdlcyBvbiBzZXZlcmFsIG9wZXJhdGluZwpzeXN0ZW1zLgoKJXBhY2thZ2UgLW4gbGlidXBucC1kZXZlbApTdW1tYXJ5OiAgICAgICAgUG9ydGFibGUgVW5pdmVyc2FsIFBsdWcgYW5kIFBsYXkgKFVQblApIFNESwpHcm91cDogICAgICAgICAgRGV2ZWxvcG1lbnQvTGlicmFyaWVzL0MgYW5kIEMrKwpQcm92aWRlczogICAgICAgcGtnY29uZmlnKGxpYnVwbnApClJlcXVpcmVzOiAgICAgICAle25hbWV9ID0gJXt2ZXJzaW9ufQoKJWRlc2NyaXB0aW9uIC1uIGxpYnVwbnAtZGV2ZWwKVGhlIHBvcnRhYmxlIFVuaXZlcnNhbCBQbHVnIGFuZCBQbGF5IChVUG5QKSBTREsgcHJvdmlkZXMgc3VwcG9ydCBmb3IgYnVpbGRpbmcKVVBuUC1jb21wbGlhbnQgY29udHJvbCBwb2ludHMsIGRldmljZXMsIGFuZCBicmlkZ2VzIG9uIHNldmVyYWwgb3BlcmF0aW5nCnN5c3RlbXMuCgolcHJlcAolc2V0dXAgLW4gbGlidXBucC0le3ZlcnNpb259CgolYnVpbGQKJWNvbmZpZ3VyZSAtLWRpc2FibGUtc3RhdGljCm1ha2UgJXs/X3NtcF9tZmxhZ3N9CgolaW5zdGFsbAolbWFrZWluc3RhbGwKZmluZCAle2J1aWxkcm9vdH0gLXR5cGUgZiAtbmFtZSAnKi5sYScgLWV4ZWMgcm0gLWYge30gJzsnCgolcG9zdCAtcCAvc2Jpbi9sZGNvbmZpZwoKJXBvc3R1biAtcCAvc2Jpbi9sZGNvbmZpZwoKJWZpbGVzCiVkZWZhdHRyKC0scm9vdCxyb290LC0pCiVkb2MgQ2hhbmdlTG9nIE5FV1MgUkVBRE1FIFRPRE8KJXtfbGliZGlyfS9saWJpeG1sLnNvLioKJXtfbGliZGlyfS9saWJ0aHJlYWR1dGlsLnNvLioKJXtfbGliZGlyfS9saWJ1cG5wLnNvLioKCiVmaWxlcyAtbiBsaWJ1cG5wLWRldmVsCiVkZWZhdHRyKC0scm9vdCxyb290LC0pCiV7X2xpYmRpcn0vcGtnY29uZmlnL2xpYnVwbnAucGMKJXtfbGliZGlyfS9saWJpeG1sLnNvCiV7X2xpYmRpcn0vbGlidGhyZWFkdXRpbC5zbwole19saWJkaXJ9L2xpYnVwbnAuc28KJXtfaW5jbHVkZWRpcn0vdXBucC8KCiVjaGFuZ2Vsb2c8L3RleHRhcmVhPjwvZGl2PgogICAgPHNjcmlwdD4KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICBtb2RlOiB7bmFtZTogInNwZWMifSwKICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgICAgICBpbmRlbnRVbml0OiA0LAogICAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUKICAgICAgfSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD48c3Ryb25nPk1JTUUgdHlwZXMgZGVmaW5lZDo8L3N0cm9uZz4gPGNvZGU+dGV4dC94LXJwbS1zcGVjPC9jb2RlPi48L3A+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/rpm/spec/spec.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LmNtLXMtZGVmYXVsdCBzcGFuLmNtLXByZWFtYmxlIHtjb2xvcjogI2IyNjgxODsgZm9udC13ZWlnaHQ6IGJvbGQ7fQouY20tcy1kZWZhdWx0IHNwYW4uY20tbWFjcm8ge2NvbG9yOiAjYjIxOGIyO30KLmNtLXMtZGVmYXVsdCBzcGFuLmNtLXNlY3Rpb24ge2NvbG9yOiBncmVlbjsgZm9udC13ZWlnaHQ6IGJvbGQ7fQouY20tcy1kZWZhdWx0IHNwYW4uY20tc2NyaXB0IHtjb2xvcjogcmVkO30KLmNtLXMtZGVmYXVsdCBzcGFuLmNtLWlzc3VlIHtjb2xvcjogeWVsbG93O30K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/rpm/spec/spec.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gUXVpY2sgYW5kIGRpcnR5IHNwZWMgZmlsZSBoaWdobGlnaHRpbmcKCkNvZGVNaXJyb3IuZGVmaW5lTW9kZSgic3BlYyIsIGZ1bmN0aW9uKGNvbmZpZywgbW9kZUNvbmZpZykgewogIHZhciBhcmNoID0gL14oaTM4NnxpNTg2fGk2ODZ8eDg2XzY0fHBwYzY0fHBwY3xpYTY0fHMzOTB4fHMzOTB8c3BhcmM2NHxzcGFyY3Y5fHNwYXJjfG5vYXJjaHxhbHBoYWV2NnxhbHBoYXxocHBhfG1pcHNlbCkvOwoKICB2YXIgcHJlYW1ibGUgPSAvXihOYW1lfFZlcnNpb258UmVsZWFzZXxMaWNlbnNlfFN1bW1hcnl8VXJsfEdyb3VwfFNvdXJjZXxCdWlsZEFyY2h8QnVpbGRSZXF1aXJlc3xCdWlsZFJvb3R8QXV0b1JlcVByb3Z8UHJvdmlkZXN8UmVxdWlyZXMoXChcdytcKSk/fE9ic29sZXRlc3xDb25mbGljdHN8UmVjb21tZW5kc3xTb3VyY2VcZCp8UGF0Y2hcZCp8RXhjbHVzaXZlQXJjaHxOb1NvdXJjZXxTdXBwbGVtZW50cyk6LzsKICB2YXIgc2VjdGlvbiA9IC9eJShkZWJ1Z19wYWNrYWdlfHBhY2thZ2V8ZGVzY3JpcHRpb258cHJlcHxidWlsZHxpbnN0YWxsfGZpbGVzfGNsZWFufGNoYW5nZWxvZ3xwcmV1bnxwb3N0dW58cHJlfHBvc3R8dHJpZ2dlcmlufHRyaWdnZXJ1bnxwcmV0cmFuc3xwb3N0dHJhbnN8dmVyaWZ5c2NyaXB0fGNoZWNrfHRyaWdnZXJwb3N0dW58dHJpZ2dlcnByZWlufHRyaWdnZXIpLzsKICB2YXIgY29udHJvbF9mbG93X2NvbXBsZXggPSAvXiUoaWZuYXJjaHxpZmFyY2h8aWYpLzsgLy8gcnBtIGNvbnRyb2wgZmxvdyBtYWNyb3MKICB2YXIgY29udHJvbF9mbG93X3NpbXBsZSA9IC9eJShlbHNlfGVuZGlmKS87IC8vIHJwbSBjb250cm9sIGZsb3cgbWFjcm9zCiAgdmFyIG9wZXJhdG9ycyA9IC9eKFwhfFw/fFw8XD18XDx8XD5cPXxcPnxcPVw9fFwmXCZ8XHxcfCkvOyAvLyBvcGVyYXRvcnMgaW4gY29udHJvbCBmbG93IG1hY3JvcwoKICByZXR1cm4gewogICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24gKCkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICBjb250cm9sRmxvdzogZmFsc2UsCiAgICAgICAgICBtYWNyb1BhcmFtZXRlcnM6IGZhbHNlLAogICAgICAgICAgc2VjdGlvbjogZmFsc2UsCiAgICAgICAgfTsKICAgIH0sCiAgICB0b2tlbjogZnVuY3Rpb24gKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgdmFyIGNoID0gc3RyZWFtLnBlZWsoKTsKICAgICAgaWYgKGNoID09ICIjIikgeyBzdHJlYW0uc2tpcFRvRW5kKCk7IHJldHVybiAiY29tbWVudCI7IH0KCiAgICAgIGlmIChzdHJlYW0uc29sKCkpIHsKICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKHByZWFtYmxlKSkgeyByZXR1cm4gInByZWFtYmxlIjsgfQogICAgICAgIGlmIChzdHJlYW0ubWF0Y2goc2VjdGlvbikpIHsgcmV0dXJuICJzZWN0aW9uIjsgfQogICAgICB9CgogICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eXCRcdysvKSkgeyByZXR1cm4gImRlZiI7IH0gLy8gVmFyaWFibGVzIGxpa2UgJyRSUE1fQlVJTERfUk9PVCcKICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXlwkXHtcdytcfS8pKSB7IHJldHVybiAiZGVmIjsgfSAvLyBWYXJpYWJsZXMgbGlrZSAnJHtSUE1fQlVJTERfUk9PVH0nCgogICAgICBpZiAoc3RyZWFtLm1hdGNoKGNvbnRyb2xfZmxvd19zaW1wbGUpKSB7IHJldHVybiAia2V5d29yZCI7IH0KICAgICAgaWYgKHN0cmVhbS5tYXRjaChjb250cm9sX2Zsb3dfY29tcGxleCkpIHsKICAgICAgICBzdGF0ZS5jb250cm9sRmxvdyA9IHRydWU7CiAgICAgICAgcmV0dXJuICJrZXl3b3JkIjsKICAgICAgfQogICAgICBpZiAoc3RhdGUuY29udHJvbEZsb3cpIHsKICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKG9wZXJhdG9ycykpIHsgcmV0dXJuICJvcGVyYXRvciI7IH0KICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eKFxkKykvKSkgeyByZXR1cm4gIm51bWJlciI7IH0KICAgICAgICBpZiAoc3RyZWFtLmVvbCgpKSB7IHN0YXRlLmNvbnRyb2xGbG93ID0gZmFsc2U7IH0KICAgICAgfQoKICAgICAgaWYgKHN0cmVhbS5tYXRjaChhcmNoKSkgeyByZXR1cm4gIm51bWJlciI7IH0KCiAgICAgIC8vIE1hY3JvcyBsaWtlICclbWFrZV9pbnN0YWxsJyBvciAnJWF0dHIoMDc3NSxyb290LHJvb3QpJwogICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eJVtcd10rLykpIHsKICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eXCgvKSkgeyBzdGF0ZS5tYWNyb1BhcmFtZXRlcnMgPSB0cnVlOyB9CiAgICAgICAgcmV0dXJuICJtYWNybyI7CiAgICAgIH0KICAgICAgaWYgKHN0YXRlLm1hY3JvUGFyYW1ldGVycykgewogICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL15cZCsvKSkgeyByZXR1cm4gIm51bWJlciI7fQogICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL15cKS8pKSB7CiAgICAgICAgICBzdGF0ZS5tYWNyb1BhcmFtZXRlcnMgPSBmYWxzZTsKICAgICAgICAgIHJldHVybiAibWFjcm8iOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eJVx7XD8/W1x3IFwtXStcfS8pKSB7IHJldHVybiAibWFjcm8iOyB9IC8vIE1hY3JvcyBsaWtlICcle2RlZmluZWQgZmVkb3JhfScKCiAgICAgIC8vVE9ETzogSW5jbHVkZSBiYXNoIHNjcmlwdCBzdWItcGFyc2VyIChDb2RlTWlycm9yIHN1cHBvcnRzIHRoYXQpCiAgICAgIHN0cmVhbS5uZXh0KCk7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH07Cn0pOwoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtcnBtLXNwZWMiLCAic3BlYyIpOwo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/rst/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/rst/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IHJlU3RydWN0dXJlZFRleHQgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9InJzdC5qcyI+PC9zY3JpcHQ+CiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPi5Db2RlTWlycm9yIHtib3JkZXItdG9wOiAxcHggc29saWQgYmxhY2s7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazt9PC9zdHlsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogcmVTdHJ1Y3R1cmVkVGV4dCBtb2RlPC9oMT4KCjxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+Ci4uIFRoaXMgaXMgYW4gZXhjZXJwdCBmcm9tIFNwaGlueCBkb2N1bWVudGF0aW9uOiBodHRwOi8vc3BoaW54LnBvY29vLm9yZy9fc291cmNlcy9yZXN0LnR4dAoKLi4gaGlnaGxpZ2h0bGFuZzo6IHJlc3QKCi4uIF9yc3QtcHJpbWVyOgoKcmVTdHJ1Y3R1cmVkVGV4dCBQcmltZXIKPT09PT09PT09PT09PT09PT09PT09PT0KClRoaXMgc2VjdGlvbiBpcyBhIGJyaWVmIGludHJvZHVjdGlvbiB0byByZVN0cnVjdHVyZWRUZXh0IChyZVNUKSBjb25jZXB0cyBhbmQKc3ludGF4LCBpbnRlbmRlZCB0byBwcm92aWRlIGF1dGhvcnMgd2l0aCBlbm91Z2ggaW5mb3JtYXRpb24gdG8gYXV0aG9yIGRvY3VtZW50cwpwcm9kdWN0aXZlbHkuICBTaW5jZSByZVNUIHdhcyBkZXNpZ25lZCB0byBiZSBhIHNpbXBsZSwgdW5vYnRydXNpdmUgbWFya3VwCmxhbmd1YWdlLCB0aGlzIHdpbGwgbm90IHRha2UgdG9vIGxvbmcuCgouLiBzZWVhbHNvOjoKCiAgIFRoZSBhdXRob3JpdGF0aXZlIGByZVN0cnVjdHVyZWRUZXh0IFVzZXIgRG9jdW1lbnRhdGlvbgogICAmbHQ7aHR0cDovL2RvY3V0aWxzLnNvdXJjZWZvcmdlLm5ldC9yc3QuaHRtbCZndDtgXy4gIFRoZSAicmVmIiBsaW5rcyBpbiB0aGlzCiAgIGRvY3VtZW50IGxpbmsgdG8gdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBpbmRpdmlkdWFsIGNvbnN0cnVjdHMgaW4gdGhlIHJlU1QKICAgcmVmZXJlbmNlLgoKClBhcmFncmFwaHMKLS0tLS0tLS0tLQoKVGhlIHBhcmFncmFwaCAoOmR1cmVmOmByZWYgJmx0O3BhcmFncmFwaHMmZ3Q7YCkgaXMgdGhlIG1vc3QgYmFzaWMgYmxvY2sgaW4gYSByZVNUCmRvY3VtZW50LiAgUGFyYWdyYXBocyBhcmUgc2ltcGx5IGNodW5rcyBvZiB0ZXh0IHNlcGFyYXRlZCBieSBvbmUgb3IgbW9yZSBibGFuawpsaW5lcy4gIEFzIGluIFB5dGhvbiwgaW5kZW50YXRpb24gaXMgc2lnbmlmaWNhbnQgaW4gcmVTVCwgc28gYWxsIGxpbmVzIG9mIHRoZQpzYW1lIHBhcmFncmFwaCBtdXN0IGJlIGxlZnQtYWxpZ25lZCB0byB0aGUgc2FtZSBsZXZlbCBvZiBpbmRlbnRhdGlvbi4KCgouLiBfaW5saW5lbWFya3VwOgoKSW5saW5lIG1hcmt1cAotLS0tLS0tLS0tLS0tCgpUaGUgc3RhbmRhcmQgcmVTVCBpbmxpbmUgbWFya3VwIGlzIHF1aXRlIHNpbXBsZTogdXNlCgoqIG9uZSBhc3RlcmlzazogYGAqdGV4dCpgYCBmb3IgZW1waGFzaXMgKGl0YWxpY3MpLAoqIHR3byBhc3Rlcmlza3M6IGBgKip0ZXh0KipgYCBmb3Igc3Ryb25nIGVtcGhhc2lzIChib2xkZmFjZSksIGFuZAoqIGJhY2txdW90ZXM6IGBgYGB0ZXh0YGBgYCBmb3IgY29kZSBzYW1wbGVzLgoKSWYgYXN0ZXJpc2tzIG9yIGJhY2txdW90ZXMgYXBwZWFyIGluIHJ1bm5pbmcgdGV4dCBhbmQgY291bGQgYmUgY29uZnVzZWQgd2l0aAppbmxpbmUgbWFya3VwIGRlbGltaXRlcnMsIHRoZXkgaGF2ZSB0byBiZSBlc2NhcGVkIHdpdGggYSBiYWNrc2xhc2guCgpCZSBhd2FyZSBvZiBzb21lIHJlc3RyaWN0aW9ucyBvZiB0aGlzIG1hcmt1cDoKCiogaXQgbWF5IG5vdCBiZSBuZXN0ZWQsCiogY29udGVudCBtYXkgbm90IHN0YXJ0IG9yIGVuZCB3aXRoIHdoaXRlc3BhY2U6IGBgKiB0ZXh0KmBgIGlzIHdyb25nLAoqIGl0IG11c3QgYmUgc2VwYXJhdGVkIGZyb20gc3Vycm91bmRpbmcgdGV4dCBieSBub24td29yZCBjaGFyYWN0ZXJzLiAgVXNlIGEKICBiYWNrc2xhc2ggZXNjYXBlZCBzcGFjZSB0byB3b3JrIGFyb3VuZCB0aGF0OiBgYHRoaXNpc1wgKm9uZSpcIHdvcmRgYC4KClRoZXNlIHJlc3RyaWN0aW9ucyBtYXkgYmUgbGlmdGVkIGluIGZ1dHVyZSB2ZXJzaW9ucyBvZiB0aGUgZG9jdXRpbHMuCgpyZVNUIGFsc28gYWxsb3dzIGZvciBjdXN0b20gImludGVycHJldGVkIHRleHQgcm9sZXMiJywgd2hpY2ggc2lnbmlmeSB0aGF0IHRoZQplbmNsb3NlZCB0ZXh0IHNob3VsZCBiZSBpbnRlcnByZXRlZCBpbiBhIHNwZWNpZmljIHdheS4gIFNwaGlueCB1c2VzIHRoaXMgdG8KcHJvdmlkZSBzZW1hbnRpYyBtYXJrdXAgYW5kIGNyb3NzLXJlZmVyZW5jaW5nIG9mIGlkZW50aWZpZXJzLCBhcyBkZXNjcmliZWQgaW4KdGhlIGFwcHJvcHJpYXRlIHNlY3Rpb24uICBUaGUgZ2VuZXJhbCBzeW50YXggaXMgYGA6cm9sZW5hbWU6YGNvbnRlbnRgYGAuCgpTdGFuZGFyZCByZVNUIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgcm9sZXM6CgoqIDpkdXJvbGU6YGVtcGhhc2lzYCAtLSBhbHRlcm5hdGUgc3BlbGxpbmcgZm9yIGBgKmVtcGhhc2lzKmBgCiogOmR1cm9sZTpgc3Ryb25nYCAtLSBhbHRlcm5hdGUgc3BlbGxpbmcgZm9yIGBgKipzdHJvbmcqKmBgCiogOmR1cm9sZTpgbGl0ZXJhbGAgLS0gYWx0ZXJuYXRlIHNwZWxsaW5nIGZvciBgYGBgbGl0ZXJhbGBgYGAKKiA6ZHVyb2xlOmBzdWJzY3JpcHRgIC0tIHN1YnNjcmlwdCB0ZXh0CiogOmR1cm9sZTpgc3VwZXJzY3JpcHRgIC0tIHN1cGVyc2NyaXB0IHRleHQKKiA6ZHVyb2xlOmB0aXRsZS1yZWZlcmVuY2VgIC0tIGZvciB0aXRsZXMgb2YgYm9va3MsIHBlcmlvZGljYWxzLCBhbmQgb3RoZXIKICBtYXRlcmlhbHMKClNlZSA6cmVmOmBpbmxpbmUtbWFya3VwYCBmb3Igcm9sZXMgYWRkZWQgYnkgU3BoaW54LgoKCkxpc3RzIGFuZCBRdW90ZS1saWtlIGJsb2NrcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCkxpc3QgbWFya3VwICg6ZHVyZWY6YHJlZiAmbHQ7YnVsbGV0LWxpc3RzJmd0O2ApIGlzIG5hdHVyYWw6IGp1c3QgcGxhY2UgYW4gYXN0ZXJpc2sgYXQKdGhlIHN0YXJ0IG9mIGEgcGFyYWdyYXBoIGFuZCBpbmRlbnQgcHJvcGVybHkuICBUaGUgc2FtZSBnb2VzIGZvciBudW1iZXJlZCBsaXN0czsKdGhleSBjYW4gYWxzbyBiZSBhdXRvbnVtYmVyZWQgdXNpbmcgYSBgYCNgYCBzaWduOjoKCiAgICogVGhpcyBpcyBhIGJ1bGxldGVkIGxpc3QuCiAgICogSXQgaGFzIHR3byBpdGVtcywgdGhlIHNlY29uZAogICAgIGl0ZW0gdXNlcyB0d28gbGluZXMuCgogICAxLiBUaGlzIGlzIGEgbnVtYmVyZWQgbGlzdC4KICAgMi4gSXQgaGFzIHR3byBpdGVtcyB0b28uCgogICAjLiBUaGlzIGlzIGEgbnVtYmVyZWQgbGlzdC4KICAgIy4gSXQgaGFzIHR3byBpdGVtcyB0b28uCgoKTmVzdGVkIGxpc3RzIGFyZSBwb3NzaWJsZSwgYnV0IGJlIGF3YXJlIHRoYXQgdGhleSBtdXN0IGJlIHNlcGFyYXRlZCBmcm9tIHRoZQpwYXJlbnQgbGlzdCBpdGVtcyBieSBibGFuayBsaW5lczo6CgogICAqIHRoaXMgaXMKICAgKiBhIGxpc3QKCiAgICAgKiB3aXRoIGEgbmVzdGVkIGxpc3QKICAgICAqIGFuZCBzb21lIHN1Yml0ZW1zCgogICAqIGFuZCBoZXJlIHRoZSBwYXJlbnQgbGlzdCBjb250aW51ZXMKCkRlZmluaXRpb24gbGlzdHMgKDpkdXJlZjpgcmVmICZsdDtkZWZpbml0aW9uLWxpc3RzJmd0O2ApIGFyZSBjcmVhdGVkIGFzIGZvbGxvd3M6OgoKICAgdGVybSAodXAgdG8gYSBsaW5lIG9mIHRleHQpCiAgICAgIERlZmluaXRpb24gb2YgdGhlIHRlcm0sIHdoaWNoIG11c3QgYmUgaW5kZW50ZWQKCiAgICAgIGFuZCBjYW4gZXZlbiBjb25zaXN0IG9mIG11bHRpcGxlIHBhcmFncmFwaHMKCiAgIG5leHQgdGVybQogICAgICBEZXNjcmlwdGlvbi4KCk5vdGUgdGhhdCB0aGUgdGVybSBjYW5ub3QgaGF2ZSBtb3JlIHRoYW4gb25lIGxpbmUgb2YgdGV4dC4KClF1b3RlZCBwYXJhZ3JhcGhzICg6ZHVyZWY6YHJlZiAmbHQ7YmxvY2stcXVvdGVzJmd0O2ApIGFyZSBjcmVhdGVkIGJ5IGp1c3QgaW5kZW50aW5nCnRoZW0gbW9yZSB0aGFuIHRoZSBzdXJyb3VuZGluZyBwYXJhZ3JhcGhzLgoKTGluZSBibG9ja3MgKDpkdXJlZjpgcmVmICZsdDtsaW5lLWJsb2NrcyZndDtgKSBhcmUgYSB3YXkgb2YgcHJlc2VydmluZyBsaW5lIGJyZWFrczo6CgogICB8IFRoZXNlIGxpbmVzIGFyZQogICB8IGJyb2tlbiBleGFjdGx5IGxpa2UgaW4KICAgfCB0aGUgc291cmNlIGZpbGUuCgpUaGVyZSBhcmUgYWxzbyBzZXZlcmFsIG1vcmUgc3BlY2lhbCBibG9ja3MgYXZhaWxhYmxlOgoKKiBmaWVsZCBsaXN0cyAoOmR1cmVmOmByZWYgJmx0O2ZpZWxkLWxpc3RzJmd0O2ApCiogb3B0aW9uIGxpc3RzICg6ZHVyZWY6YHJlZiAmbHQ7b3B0aW9uLWxpc3RzJmd0O2ApCiogcXVvdGVkIGxpdGVyYWwgYmxvY2tzICg6ZHVyZWY6YHJlZiAmbHQ7cXVvdGVkLWxpdGVyYWwtYmxvY2tzJmd0O2ApCiogZG9jdGVzdCBibG9ja3MgKDpkdXJlZjpgcmVmICZsdDtkb2N0ZXN0LWJsb2NrcyZndDtgKQoKClNvdXJjZSBDb2RlCi0tLS0tLS0tLS0tCgpMaXRlcmFsIGNvZGUgYmxvY2tzICg6ZHVyZWY6YHJlZiAmbHQ7bGl0ZXJhbC1ibG9ja3MmZ3Q7YCkgYXJlIGludHJvZHVjZWQgYnkgZW5kaW5nIGEKcGFyYWdyYXBoIHdpdGggdGhlIHNwZWNpYWwgbWFya2VyIGBgOjpgYC4gIFRoZSBsaXRlcmFsIGJsb2NrIG11c3QgYmUgaW5kZW50ZWQKKGFuZCwgbGlrZSBhbGwgcGFyYWdyYXBocywgc2VwYXJhdGVkIGZyb20gdGhlIHN1cnJvdW5kaW5nIG9uZXMgYnkgYmxhbmsgbGluZXMpOjoKCiAgIFRoaXMgaXMgYSBub3JtYWwgdGV4dCBwYXJhZ3JhcGguIFRoZSBuZXh0IHBhcmFncmFwaCBpcyBhIGNvZGUgc2FtcGxlOjoKCiAgICAgIEl0IGlzIG5vdCBwcm9jZXNzZWQgaW4gYW55IHdheSwgZXhjZXB0CiAgICAgIHRoYXQgdGhlIGluZGVudGF0aW9uIGlzIHJlbW92ZWQuCgogICAgICBJdCBjYW4gc3BhbiBtdWx0aXBsZSBsaW5lcy4KCiAgIFRoaXMgaXMgYSBub3JtYWwgdGV4dCBwYXJhZ3JhcGggYWdhaW4uCgpUaGUgaGFuZGxpbmcgb2YgdGhlIGBgOjpgYCBtYXJrZXIgaXMgc21hcnQ6CgoqIElmIGl0IG9jY3VycyBhcyBhIHBhcmFncmFwaCBvZiBpdHMgb3duLCB0aGF0IHBhcmFncmFwaCBpcyBjb21wbGV0ZWx5IGxlZnQKICBvdXQgb2YgdGhlIGRvY3VtZW50LgoqIElmIGl0IGlzIHByZWNlZGVkIGJ5IHdoaXRlc3BhY2UsIHRoZSBtYXJrZXIgaXMgcmVtb3ZlZC4KKiBJZiBpdCBpcyBwcmVjZWRlZCBieSBub24td2hpdGVzcGFjZSwgdGhlIG1hcmtlciBpcyByZXBsYWNlZCBieSBhIHNpbmdsZQogIGNvbG9uLgoKVGhhdCB3YXksIHRoZSBzZWNvbmQgc2VudGVuY2UgaW4gdGhlIGFib3ZlIGV4YW1wbGUncyBmaXJzdCBwYXJhZ3JhcGggd291bGQgYmUKcmVuZGVyZWQgYXMgIlRoZSBuZXh0IHBhcmFncmFwaCBpcyBhIGNvZGUgc2FtcGxlOiIuCgoKLi4gX3JzdC10YWJsZXM6CgpUYWJsZXMKLS0tLS0tCgpUd28gZm9ybXMgb2YgdGFibGVzIGFyZSBzdXBwb3J0ZWQuICBGb3IgKmdyaWQgdGFibGVzKiAoOmR1cmVmOmByZWYKJmx0O2dyaWQtdGFibGVzJmd0O2ApLCB5b3UgaGF2ZSB0byAicGFpbnQiIHRoZSBjZWxsIGdyaWQgeW91cnNlbGYuICBUaGV5IGxvb2sgbGlrZQp0aGlzOjoKCiAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLSsKICAgfCBIZWFkZXIgcm93LCBjb2x1bW4gMSAgIHwgSGVhZGVyIDIgICB8IEhlYWRlciAzIHwgSGVhZGVyIDQgfAogICB8IChoZWFkZXIgcm93cyBvcHRpb25hbCkgfCAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgICB8CiAgICs9PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09Kz09PT09PT09PT0rPT09PT09PT09PSsKICAgfCBib2R5IHJvdyAxLCBjb2x1bW4gMSAgIHwgY29sdW1uIDIgICB8IGNvbHVtbiAzIHwgY29sdW1uIDQgfAogICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0rCiAgIHwgYm9keSByb3cgMiAgICAgICAgICAgICB8IC4uLiAgICAgICAgfCAuLi4gICAgICB8ICAgICAgICAgIHwKICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tKwoKKlNpbXBsZSB0YWJsZXMqICg6ZHVyZWY6YHJlZiAmbHQ7c2ltcGxlLXRhYmxlcyZndDtgKSBhcmUgZWFzaWVyIHRvIHdyaXRlLCBidXQKbGltaXRlZDogdGhleSBtdXN0IGNvbnRhaW4gbW9yZSB0aGFuIG9uZSByb3csIGFuZCB0aGUgZmlyc3QgY29sdW1uIGNhbm5vdApjb250YWluIG11bHRpcGxlIGxpbmVzLiAgVGhleSBsb29rIGxpa2UgdGhpczo6CgogICA9PT09PSAgPT09PT0gID09PT09PT0KICAgQSAgICAgIEIgICAgICBBIGFuZCBCCiAgID09PT09ICA9PT09PSAgPT09PT09PQogICBGYWxzZSAgRmFsc2UgIEZhbHNlCiAgIFRydWUgICBGYWxzZSAgRmFsc2UKICAgRmFsc2UgIFRydWUgICBGYWxzZQogICBUcnVlICAgVHJ1ZSAgIFRydWUKICAgPT09PT0gID09PT09ICA9PT09PT09CgoKSHlwZXJsaW5rcwotLS0tLS0tLS0tCgpFeHRlcm5hbCBsaW5rcwpeXl5eXl5eXl5eXl5eXgoKVXNlIGBgYExpbmsgdGV4dCAmbHQ7aHR0cDovL2V4YW1wbGUuY29tLyZndDtgX2BgIGZvciBpbmxpbmUgd2ViIGxpbmtzLiAgSWYgdGhlIGxpbmsKdGV4dCBzaG91bGQgYmUgdGhlIHdlYiBhZGRyZXNzLCB5b3UgZG9uJ3QgbmVlZCBzcGVjaWFsIG1hcmt1cCBhdCBhbGwsIHRoZSBwYXJzZXIKZmluZHMgbGlua3MgYW5kIG1haWwgYWRkcmVzc2VzIGluIG9yZGluYXJ5IHRleHQuCgpZb3UgY2FuIGFsc28gc2VwYXJhdGUgdGhlIGxpbmsgYW5kIHRoZSB0YXJnZXQgZGVmaW5pdGlvbiAoOmR1cmVmOmByZWYKJmx0O2h5cGVybGluay10YXJnZXRzJmd0O2ApLCBsaWtlIHRoaXM6OgoKICAgVGhpcyBpcyBhIHBhcmFncmFwaCB0aGF0IGNvbnRhaW5zIGBhIGxpbmtgXy4KCiAgIC4uIF9hIGxpbms6IGh0dHA6Ly9leGFtcGxlLmNvbS8KCgpJbnRlcm5hbCBsaW5rcwpeXl5eXl5eXl5eXl5eXgoKSW50ZXJuYWwgbGlua2luZyBpcyBkb25lIHZpYSBhIHNwZWNpYWwgcmVTVCByb2xlIHByb3ZpZGVkIGJ5IFNwaGlueCwgc2VlIHRoZQpzZWN0aW9uIG9uIHNwZWNpZmljIG1hcmt1cCwgOnJlZjpgcmVmLXJvbGVgLgoKClNlY3Rpb25zCi0tLS0tLS0tCgpTZWN0aW9uIGhlYWRlcnMgKDpkdXJlZjpgcmVmICZsdDtzZWN0aW9ucyZndDtgKSBhcmUgY3JlYXRlZCBieSB1bmRlcmxpbmluZyAoYW5kCm9wdGlvbmFsbHkgb3ZlcmxpbmluZykgdGhlIHNlY3Rpb24gdGl0bGUgd2l0aCBhIHB1bmN0dWF0aW9uIGNoYXJhY3RlciwgYXQgbGVhc3QKYXMgbG9uZyBhcyB0aGUgdGV4dDo6CgogICA9PT09PT09PT09PT09PT09PQogICBUaGlzIGlzIGEgaGVhZGluZwogICA9PT09PT09PT09PT09PT09PQoKTm9ybWFsbHksIHRoZXJlIGFyZSBubyBoZWFkaW5nIGxldmVscyBhc3NpZ25lZCB0byBjZXJ0YWluIGNoYXJhY3RlcnMgYXMgdGhlCnN0cnVjdHVyZSBpcyBkZXRlcm1pbmVkIGZyb20gdGhlIHN1Y2Nlc3Npb24gb2YgaGVhZGluZ3MuICBIb3dldmVyLCBmb3IgdGhlClB5dGhvbiBkb2N1bWVudGF0aW9uLCB0aGlzIGNvbnZlbnRpb24gaXMgdXNlZCB3aGljaCB5b3UgbWF5IGZvbGxvdzoKCiogYGAjYGAgd2l0aCBvdmVybGluZSwgZm9yIHBhcnRzCiogYGAqYGAgd2l0aCBvdmVybGluZSwgZm9yIGNoYXB0ZXJzCiogYGA9YGAsIGZvciBzZWN0aW9ucwoqIGBgLWBgLCBmb3Igc3Vic2VjdGlvbnMKKiBgYF5gYCwgZm9yIHN1YnN1YnNlY3Rpb25zCiogYGAiYGAsIGZvciBwYXJhZ3JhcGhzCgpPZiBjb3Vyc2UsIHlvdSBhcmUgZnJlZSB0byB1c2UgeW91ciBvd24gbWFya2VyIGNoYXJhY3RlcnMgKHNlZSB0aGUgcmVTVApkb2N1bWVudGF0aW9uKSwgYW5kIHVzZSBhIGRlZXBlciBuZXN0aW5nIGxldmVsLCBidXQga2VlcCBpbiBtaW5kIHRoYXQgbW9zdAp0YXJnZXQgZm9ybWF0cyAoSFRNTCwgTGFUZVgpIGhhdmUgYSBsaW1pdGVkIHN1cHBvcnRlZCBuZXN0aW5nIGRlcHRoLgoKCkV4cGxpY2l0IE1hcmt1cAotLS0tLS0tLS0tLS0tLS0KCiJFeHBsaWNpdCBtYXJrdXAiICg6ZHVyZWY6YHJlZiAmbHQ7ZXhwbGljaXQtbWFya3VwLWJsb2NrcyZndDtgKSBpcyB1c2VkIGluIHJlU1QgZm9yCm1vc3QgY29uc3RydWN0cyB0aGF0IG5lZWQgc3BlY2lhbCBoYW5kbGluZywgc3VjaCBhcyBmb290bm90ZXMsCnNwZWNpYWxseS1oaWdobGlnaHRlZCBwYXJhZ3JhcGhzLCBjb21tZW50cywgYW5kIGdlbmVyaWMgZGlyZWN0aXZlcy4KCkFuIGV4cGxpY2l0IG1hcmt1cCBibG9jayBiZWdpbnMgd2l0aCBhIGxpbmUgc3RhcnRpbmcgd2l0aCBgYC4uYGAgZm9sbG93ZWQgYnkKd2hpdGVzcGFjZSBhbmQgaXMgdGVybWluYXRlZCBieSB0aGUgbmV4dCBwYXJhZ3JhcGggYXQgdGhlIHNhbWUgbGV2ZWwgb2YKaW5kZW50YXRpb24uICAoVGhlcmUgbmVlZHMgdG8gYmUgYSBibGFuayBsaW5lIGJldHdlZW4gZXhwbGljaXQgbWFya3VwIGFuZCBub3JtYWwKcGFyYWdyYXBocy4gIFRoaXMgbWF5IGFsbCBzb3VuZCBhIGJpdCBjb21wbGljYXRlZCwgYnV0IGl0IGlzIGludHVpdGl2ZSBlbm91Z2gKd2hlbiB5b3Ugd3JpdGUgaXQuKQoKCi4uIF9kaXJlY3RpdmVzOgoKRGlyZWN0aXZlcwotLS0tLS0tLS0tCgpBIGRpcmVjdGl2ZSAoOmR1cmVmOmByZWYgJmx0O2RpcmVjdGl2ZXMmZ3Q7YCkgaXMgYSBnZW5lcmljIGJsb2NrIG9mIGV4cGxpY2l0IG1hcmt1cC4KQmVzaWRlcyByb2xlcywgaXQgaXMgb25lIG9mIHRoZSBleHRlbnNpb24gbWVjaGFuaXNtcyBvZiByZVNULCBhbmQgU3BoaW54IG1ha2VzCmhlYXZ5IHVzZSBvZiBpdC4KCkRvY3V0aWxzIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgZGlyZWN0aXZlczoKCiogQWRtb25pdGlvbnM6IDpkdWRpcjpgYXR0ZW50aW9uYCwgOmR1ZGlyOmBjYXV0aW9uYCwgOmR1ZGlyOmBkYW5nZXJgLAogIDpkdWRpcjpgZXJyb3JgLCA6ZHVkaXI6YGhpbnRgLCA6ZHVkaXI6YGltcG9ydGFudGAsIDpkdWRpcjpgbm90ZWAsCiAgOmR1ZGlyOmB0aXBgLCA6ZHVkaXI6YHdhcm5pbmdgIGFuZCB0aGUgZ2VuZXJpYyA6ZHVkaXI6YGFkbW9uaXRpb25gLgogIChNb3N0IHRoZW1lcyBzdHlsZSBvbmx5ICJub3RlIiBhbmQgIndhcm5pbmciIHNwZWNpYWxseS4pCgoqIEltYWdlczoKCiAgLSA6ZHVkaXI6YGltYWdlYCAoc2VlIGFsc28gSW1hZ2VzXyBiZWxvdykKICAtIDpkdWRpcjpgZmlndXJlYCAoYW4gaW1hZ2Ugd2l0aCBjYXB0aW9uIGFuZCBvcHRpb25hbCBsZWdlbmQpCgoqIEFkZGl0aW9uYWwgYm9keSBlbGVtZW50czoKCiAgLSA6ZHVkaXI6YGNvbnRlbnRzYCAoYSBsb2NhbCwgaS5lLiBmb3IgdGhlIGN1cnJlbnQgZmlsZSBvbmx5LCB0YWJsZSBvZgogICAgY29udGVudHMpCiAgLSA6ZHVkaXI6YGNvbnRhaW5lcmAgKGEgY29udGFpbmVyIHdpdGggYSBjdXN0b20gY2xhc3MsIHVzZWZ1bCB0byBnZW5lcmF0ZSBhbgogICAgb3V0ZXIgYGAmbHQ7ZGl2Jmd0O2BgIGluIEhUTUwpCiAgLSA6ZHVkaXI6YHJ1YnJpY2AgKGEgaGVhZGluZyB3aXRob3V0IHJlbGF0aW9uIHRvIHRoZSBkb2N1bWVudCBzZWN0aW9uaW5nKQogIC0gOmR1ZGlyOmB0b3BpY2AsIDpkdWRpcjpgc2lkZWJhcmAgKHNwZWNpYWwgaGlnaGxpZ2h0ZWQgYm9keSBlbGVtZW50cykKICAtIDpkdWRpcjpgcGFyc2VkLWxpdGVyYWxgIChsaXRlcmFsIGJsb2NrIHRoYXQgc3VwcG9ydHMgaW5saW5lIG1hcmt1cCkKICAtIDpkdWRpcjpgZXBpZ3JhcGhgIChhIGJsb2NrIHF1b3RlIHdpdGggb3B0aW9uYWwgYXR0cmlidXRpb24gbGluZSkKICAtIDpkdWRpcjpgaGlnaGxpZ2h0c2AsIDpkdWRpcjpgcHVsbC1xdW90ZWAgKGJsb2NrIHF1b3RlcyB3aXRoIHRoZWlyIG93bgogICAgY2xhc3MgYXR0cmlidXRlKQogIC0gOmR1ZGlyOmBjb21wb3VuZGAgKGEgY29tcG91bmQgcGFyYWdyYXBoKQoKKiBTcGVjaWFsIHRhYmxlczoKCiAgLSA6ZHVkaXI6YHRhYmxlYCAoYSB0YWJsZSB3aXRoIHRpdGxlKQogIC0gOmR1ZGlyOmBjc3YtdGFibGVgIChhIHRhYmxlIGdlbmVyYXRlZCBmcm9tIGNvbW1hLXNlcGFyYXRlZCB2YWx1ZXMpCiAgLSA6ZHVkaXI6YGxpc3QtdGFibGVgIChhIHRhYmxlIGdlbmVyYXRlZCBmcm9tIGEgbGlzdCBvZiBsaXN0cykKCiogU3BlY2lhbCBkaXJlY3RpdmVzOgoKICAtIDpkdWRpcjpgcmF3YCAoaW5jbHVkZSByYXcgdGFyZ2V0LWZvcm1hdCBtYXJrdXApCiAgLSA6ZHVkaXI6YGluY2x1ZGVgIChpbmNsdWRlIHJlU3RydWN0dXJlZFRleHQgZnJvbSBhbm90aGVyIGZpbGUpCiAgICAtLSBpbiBTcGhpbngsIHdoZW4gZ2l2ZW4gYW4gYWJzb2x1dGUgaW5jbHVkZSBmaWxlIHBhdGgsIHRoaXMgZGlyZWN0aXZlIHRha2VzCiAgICBpdCBhcyByZWxhdGl2ZSB0byB0aGUgc291cmNlIGRpcmVjdG9yeQogIC0gOmR1ZGlyOmBjbGFzc2AgKGFzc2lnbiBhIGNsYXNzIGF0dHJpYnV0ZSB0byB0aGUgbmV4dCBlbGVtZW50KSBbMV1fCgoqIEhUTUwgc3BlY2lmaWNzOgoKICAtIDpkdWRpcjpgbWV0YWAgKGdlbmVyYXRpb24gb2YgSFRNTCBgYCZsdDttZXRhJmd0O2BgIHRhZ3MpCiAgLSA6ZHVkaXI6YHRpdGxlYCAob3ZlcnJpZGUgZG9jdW1lbnQgdGl0bGUpCgoqIEluZmx1ZW5jaW5nIG1hcmt1cDoKCiAgLSA6ZHVkaXI6YGRlZmF1bHQtcm9sZWAgKHNldCBhIG5ldyBkZWZhdWx0IHJvbGUpCiAgLSA6ZHVkaXI6YHJvbGVgIChjcmVhdGUgYSBuZXcgcm9sZSkKCiAgU2luY2UgdGhlc2UgYXJlIG9ubHkgcGVyLWZpbGUsIGJldHRlciB1c2UgU3BoaW54JyBmYWNpbGl0aWVzIGZvciBzZXR0aW5nIHRoZQogIDpjb25mdmFsOmBkZWZhdWx0X3JvbGVgLgoKRG8gKm5vdCogdXNlIHRoZSBkaXJlY3RpdmVzIDpkdWRpcjpgc2VjdG51bWAsIDpkdWRpcjpgaGVhZGVyYCBhbmQKOmR1ZGlyOmBmb290ZXJgLgoKRGlyZWN0aXZlcyBhZGRlZCBieSBTcGhpbnggYXJlIGRlc2NyaWJlZCBpbiA6cmVmOmBzcGhpbnhtYXJrdXBgLgoKQmFzaWNhbGx5LCBhIGRpcmVjdGl2ZSBjb25zaXN0cyBvZiBhIG5hbWUsIGFyZ3VtZW50cywgb3B0aW9ucyBhbmQgY29udGVudC4gKEtlZXAKdGhpcyB0ZXJtaW5vbG9neSBpbiBtaW5kLCBpdCBpcyB1c2VkIGluIHRoZSBuZXh0IGNoYXB0ZXIgZGVzY3JpYmluZyBjdXN0b20KZGlyZWN0aXZlcy4pICBMb29raW5nIGF0IHRoaXMgZXhhbXBsZSwgOjoKCiAgIC4uIGZ1bmN0aW9uOjogZm9vKHgpCiAgICAgICAgICAgICAgICAgZm9vKHksIHopCiAgICAgIDptb2R1bGU6IHNvbWUubW9kdWxlLm5hbWUKCiAgICAgIFJldHVybiBhIGxpbmUgb2YgdGV4dCBpbnB1dCBmcm9tIHRoZSB1c2VyLgoKYGBmdW5jdGlvbmBgIGlzIHRoZSBkaXJlY3RpdmUgbmFtZS4gIEl0IGlzIGdpdmVuIHR3byBhcmd1bWVudHMgaGVyZSwgdGhlCnJlbWFpbmRlciBvZiB0aGUgZmlyc3QgbGluZSBhbmQgdGhlIHNlY29uZCBsaW5lLCBhcyB3ZWxsIGFzIG9uZSBvcHRpb24KYGBtb2R1bGVgYCAoYXMgeW91IGNhbiBzZWUsIG9wdGlvbnMgYXJlIGdpdmVuIGluIHRoZSBsaW5lcyBpbW1lZGlhdGVseSBmb2xsb3dpbmcKdGhlIGFyZ3VtZW50cyBhbmQgaW5kaWNhdGVkIGJ5IHRoZSBjb2xvbnMpLiAgT3B0aW9ucyBtdXN0IGJlIGluZGVudGVkIHRvIHRoZQpzYW1lIGxldmVsIGFzIHRoZSBkaXJlY3RpdmUgY29udGVudC4KClRoZSBkaXJlY3RpdmUgY29udGVudCBmb2xsb3dzIGFmdGVyIGEgYmxhbmsgbGluZSBhbmQgaXMgaW5kZW50ZWQgcmVsYXRpdmUgdG8gdGhlCmRpcmVjdGl2ZSBzdGFydC4KCgpJbWFnZXMKLS0tLS0tCgpyZVNUIHN1cHBvcnRzIGFuIGltYWdlIGRpcmVjdGl2ZSAoOmR1ZGlyOmByZWYgJmx0O2ltYWdlJmd0O2ApLCB1c2VkIGxpa2Ugc286OgoKICAgLi4gaW1hZ2U6OiBnbnUucG5nCiAgICAgIChvcHRpb25zKQoKV2hlbiB1c2VkIHdpdGhpbiBTcGhpbngsIHRoZSBmaWxlIG5hbWUgZ2l2ZW4gKGhlcmUgYGBnbnUucG5nYGApIG11c3QgZWl0aGVyIGJlCnJlbGF0aXZlIHRvIHRoZSBzb3VyY2UgZmlsZSwgb3IgYWJzb2x1dGUgd2hpY2ggbWVhbnMgdGhhdCB0aGV5IGFyZSByZWxhdGl2ZSB0bwp0aGUgdG9wIHNvdXJjZSBkaXJlY3RvcnkuICBGb3IgZXhhbXBsZSwgdGhlIGZpbGUgYGBza2V0Y2gvc3BhbS5yc3RgYCBjb3VsZCByZWZlcgp0byB0aGUgaW1hZ2UgYGBpbWFnZXMvc3BhbS5wbmdgYCBhcyBgYC4uL2ltYWdlcy9zcGFtLnBuZ2BgIG9yCmBgL2ltYWdlcy9zcGFtLnBuZ2BgLgoKU3BoaW54IHdpbGwgYXV0b21hdGljYWxseSBjb3B5IGltYWdlIGZpbGVzIG92ZXIgdG8gYSBzdWJkaXJlY3Rvcnkgb2YgdGhlIG91dHB1dApkaXJlY3Rvcnkgb24gYnVpbGRpbmcgKGUuZy4gdGhlIGBgX3N0YXRpY2BgIGRpcmVjdG9yeSBmb3IgSFRNTCBvdXRwdXQuKQoKSW50ZXJwcmV0YXRpb24gb2YgaW1hZ2Ugc2l6ZSBvcHRpb25zIChgYHdpZHRoYGAgYW5kIGBgaGVpZ2h0YGApIGlzIGFzIGZvbGxvd3M6CmlmIHRoZSBzaXplIGhhcyBubyB1bml0IG9yIHRoZSB1bml0IGlzIHBpeGVscywgdGhlIGdpdmVuIHNpemUgd2lsbCBvbmx5IGJlCnJlc3BlY3RlZCBmb3Igb3V0cHV0IGNoYW5uZWxzIHRoYXQgc3VwcG9ydCBwaXhlbHMgKGkuZS4gbm90IGluIExhVGVYIG91dHB1dCkuCk90aGVyIHVuaXRzIChsaWtlIGBgcHRgYCBmb3IgcG9pbnRzKSB3aWxsIGJlIHVzZWQgZm9yIEhUTUwgYW5kIExhVGVYIG91dHB1dC4KClNwaGlueCBleHRlbmRzIHRoZSBzdGFuZGFyZCBkb2N1dGlscyBiZWhhdmlvciBieSBhbGxvd2luZyBhbiBhc3RlcmlzayBmb3IgdGhlCmV4dGVuc2lvbjo6CgogICAuLiBpbWFnZTo6IGdudS4qCgpTcGhpbnggdGhlbiBzZWFyY2hlcyBmb3IgYWxsIGltYWdlcyBtYXRjaGluZyB0aGUgcHJvdmlkZWQgcGF0dGVybiBhbmQgZGV0ZXJtaW5lcwp0aGVpciB0eXBlLiAgRWFjaCBidWlsZGVyIHRoZW4gY2hvb3NlcyB0aGUgYmVzdCBpbWFnZSBvdXQgb2YgdGhlc2UgY2FuZGlkYXRlcy4KRm9yIGluc3RhbmNlLCBpZiB0aGUgZmlsZSBuYW1lIGBgZ251LipgYCB3YXMgZ2l2ZW4gYW5kIHR3byBmaWxlcyA6ZmlsZTpgZ251LnBkZmAKYW5kIDpmaWxlOmBnbnUucG5nYCBleGlzdGVkIGluIHRoZSBzb3VyY2UgdHJlZSwgdGhlIExhVGVYIGJ1aWxkZXIgd291bGQgY2hvb3NlCnRoZSBmb3JtZXIsIHdoaWxlIHRoZSBIVE1MIGJ1aWxkZXIgd291bGQgcHJlZmVyIHRoZSBsYXR0ZXIuCgouLiB2ZXJzaW9uY2hhbmdlZDo6IDAuNAogICBBZGRlZCB0aGUgc3VwcG9ydCBmb3IgZmlsZSBuYW1lcyBlbmRpbmcgaW4gYW4gYXN0ZXJpc2suCgouLiB2ZXJzaW9uY2hhbmdlZDo6IDAuNgogICBJbWFnZSBwYXRocyBjYW4gbm93IGJlIGFic29sdXRlLgoKCkZvb3Rub3RlcwotLS0tLS0tLS0KCkZvciBmb290bm90ZXMgKDpkdXJlZjpgcmVmICZsdDtmb290bm90ZXMmZ3Q7YCksIHVzZSBgYFsjbmFtZV1fYGAgdG8gbWFyayB0aGUgZm9vdG5vdGUKbG9jYXRpb24sIGFuZCBhZGQgdGhlIGZvb3Rub3RlIGJvZHkgYXQgdGhlIGJvdHRvbSBvZiB0aGUgZG9jdW1lbnQgYWZ0ZXIgYQoiRm9vdG5vdGVzIiBydWJyaWMgaGVhZGluZywgbGlrZSBzbzo6CgogICBMb3JlbSBpcHN1bSBbI2YxXV8gZG9sb3Igc2l0IGFtZXQgLi4uIFsjZjJdXwoKICAgLi4gcnVicmljOjogRm9vdG5vdGVzCgogICAuLiBbI2YxXSBUZXh0IG9mIHRoZSBmaXJzdCBmb290bm90ZS4KICAgLi4gWyNmMl0gVGV4dCBvZiB0aGUgc2Vjb25kIGZvb3Rub3RlLgoKWW91IGNhbiBhbHNvIGV4cGxpY2l0bHkgbnVtYmVyIHRoZSBmb290bm90ZXMgKGBgWzFdX2BgKSBvciB1c2UgYXV0by1udW1iZXJlZApmb290bm90ZXMgd2l0aG91dCBuYW1lcyAoYGBbI11fYGApLgoKCkNpdGF0aW9ucwotLS0tLS0tLS0KClN0YW5kYXJkIHJlU1QgY2l0YXRpb25zICg6ZHVyZWY6YHJlZiAmbHQ7Y2l0YXRpb25zJmd0O2ApIGFyZSBzdXBwb3J0ZWQsIHdpdGggdGhlCmFkZGl0aW9uYWwgZmVhdHVyZSB0aGF0IHRoZXkgYXJlICJnbG9iYWwiLCBpLmUuIGFsbCBjaXRhdGlvbnMgY2FuIGJlIHJlZmVyZW5jZWQKZnJvbSBhbGwgZmlsZXMuICBVc2UgdGhlbSBsaWtlIHNvOjoKCiAgIExvcmVtIGlwc3VtIFtSZWZdXyBkb2xvciBzaXQgYW1ldC4KCiAgIC4uIFtSZWZdIEJvb2sgb3IgYXJ0aWNsZSByZWZlcmVuY2UsIFVSTCBvciB3aGF0ZXZlci4KCkNpdGF0aW9uIHVzYWdlIGlzIHNpbWlsYXIgdG8gZm9vdG5vdGUgdXNhZ2UsIGJ1dCB3aXRoIGEgbGFiZWwgdGhhdCBpcyBub3QKbnVtZXJpYyBvciBiZWdpbnMgd2l0aCBgYCNgYC4KCgpTdWJzdGl0dXRpb25zCi0tLS0tLS0tLS0tLS0KCnJlU1Qgc3VwcG9ydHMgInN1YnN0aXR1dGlvbnMiICg6ZHVyZWY6YHJlZiAmbHQ7c3Vic3RpdHV0aW9uLWRlZmluaXRpb25zJmd0O2ApLCB3aGljaAphcmUgcGllY2VzIG9mIHRleHQgYW5kL29yIG1hcmt1cCByZWZlcnJlZCB0byBpbiB0aGUgdGV4dCBieSBgYHxuYW1lfGBgLiAgVGhleQphcmUgZGVmaW5lZCBsaWtlIGZvb3Rub3RlcyB3aXRoIGV4cGxpY2l0IG1hcmt1cCBibG9ja3MsIGxpa2UgdGhpczo6CgogICAuLiB8bmFtZXwgcmVwbGFjZTo6IHJlcGxhY2VtZW50ICp0ZXh0KgoKb3IgdGhpczo6CgogICAuLiB8Y2F1dGlvbnwgaW1hZ2U6OiB3YXJuaW5nLnBuZwogICAgICAgICAgICAgICAgOmFsdDogV2FybmluZyEKClNlZSB0aGUgOmR1cmVmOmByZVNUIHJlZmVyZW5jZSBmb3Igc3Vic3RpdHV0aW9ucyAmbHQ7c3Vic3RpdHV0aW9uLWRlZmluaXRpb25zJmd0O2AKZm9yIGRldGFpbHMuCgpJZiB5b3Ugd2FudCB0byB1c2Ugc29tZSBzdWJzdGl0dXRpb25zIGZvciBhbGwgZG9jdW1lbnRzLCBwdXQgdGhlbSBpbnRvCjpjb25mdmFsOmByc3RfcHJvbG9nYCBvciBwdXQgdGhlbSBpbnRvIGEgc2VwYXJhdGUgZmlsZSBhbmQgaW5jbHVkZSBpdCBpbnRvIGFsbApkb2N1bWVudHMgeW91IHdhbnQgdG8gdXNlIHRoZW0gaW4sIHVzaW5nIHRoZSA6cnN0OmRpcjpgaW5jbHVkZWAgZGlyZWN0aXZlLiAgKEJlCnN1cmUgdG8gZ2l2ZSB0aGUgaW5jbHVkZSBmaWxlIGEgZmlsZSBuYW1lIGV4dGVuc2lvbiBkaWZmZXJpbmcgZnJvbSB0aGF0IG9mIG90aGVyCnNvdXJjZSBmaWxlcywgdG8gYXZvaWQgU3BoaW54IGZpbmRpbmcgaXQgYXMgYSBzdGFuZGFsb25lIGRvY3VtZW50LikKClNwaGlueCBkZWZpbmVzIHNvbWUgZGVmYXVsdCBzdWJzdGl0dXRpb25zLCBzZWUgOnJlZjpgZGVmYXVsdC1zdWJzdGl0dXRpb25zYC4KCgpDb21tZW50cwotLS0tLS0tLQoKRXZlcnkgZXhwbGljaXQgbWFya3VwIGJsb2NrIHdoaWNoIGlzbid0IGEgdmFsaWQgbWFya3VwIGNvbnN0cnVjdCAobGlrZSB0aGUKZm9vdG5vdGVzIGFib3ZlKSBpcyByZWdhcmRlZCBhcyBhIGNvbW1lbnQgKDpkdXJlZjpgcmVmICZsdDtjb21tZW50cyZndDtgKS4gIEZvcgpleGFtcGxlOjoKCiAgIC4uIFRoaXMgaXMgYSBjb21tZW50LgoKWW91IGNhbiBpbmRlbnQgdGV4dCBhZnRlciBhIGNvbW1lbnQgc3RhcnQgdG8gZm9ybSBtdWx0aWxpbmUgY29tbWVudHM6OgoKICAgLi4KICAgICAgVGhpcyB3aG9sZSBpbmRlbnRlZCBibG9jawogICAgICBpcyBhIGNvbW1lbnQuCgogICAgICBTdGlsbCBpbiB0aGUgY29tbWVudC4KCgpTb3VyY2UgZW5jb2RpbmcKLS0tLS0tLS0tLS0tLS0tCgpTaW5jZSB0aGUgZWFzaWVzdCB3YXkgdG8gaW5jbHVkZSBzcGVjaWFsIGNoYXJhY3RlcnMgbGlrZSBlbSBkYXNoZXMgb3IgY29weXJpZ2h0CnNpZ25zIGluIHJlU1QgaXMgdG8gZGlyZWN0bHkgd3JpdGUgdGhlbSBhcyBVbmljb2RlIGNoYXJhY3RlcnMsIG9uZSBoYXMgdG8Kc3BlY2lmeSBhbiBlbmNvZGluZy4gIFNwaGlueCBhc3N1bWVzIHNvdXJjZSBmaWxlcyB0byBiZSBlbmNvZGVkIGluIFVURi04IGJ5CmRlZmF1bHQ7IHlvdSBjYW4gY2hhbmdlIHRoaXMgd2l0aCB0aGUgOmNvbmZ2YWw6YHNvdXJjZV9lbmNvZGluZ2AgY29uZmlnIHZhbHVlLgoKCkdvdGNoYXMKLS0tLS0tLQoKVGhlcmUgYXJlIHNvbWUgcHJvYmxlbXMgb25lIGNvbW1vbmx5IHJ1bnMgaW50byB3aGlsZSBhdXRob3JpbmcgcmVTVCBkb2N1bWVudHM6CgoqICoqU2VwYXJhdGlvbiBvZiBpbmxpbmUgbWFya3VwOioqIEFzIHNhaWQgYWJvdmUsIGlubGluZSBtYXJrdXAgc3BhbnMgbXVzdCBiZQogIHNlcGFyYXRlZCBmcm9tIHRoZSBzdXJyb3VuZGluZyB0ZXh0IGJ5IG5vbi13b3JkIGNoYXJhY3RlcnMsIHlvdSBoYXZlIHRvIHVzZSBhCiAgYmFja3NsYXNoLWVzY2FwZWQgc3BhY2UgdG8gZ2V0IGFyb3VuZCB0aGF0LiAgU2VlIGB0aGUgcmVmZXJlbmNlCiAgJmx0O2h0dHA6Ly9kb2N1dGlscy5zZi5uZXQvZG9jcy9yZWYvcnN0L3Jlc3RydWN0dXJlZHRleHQuaHRtbCNpbmxpbmUtbWFya3VwJmd0O2BfCiAgZm9yIHRoZSBkZXRhaWxzLgoKKiAqKk5vIG5lc3RlZCBpbmxpbmUgbWFya3VwOioqIFNvbWV0aGluZyBsaWtlIGBgKnNlZSA6ZnVuYzpgZm9vYCpgYCBpcyBub3QKICBwb3NzaWJsZS4KCgouLiBydWJyaWM6OiBGb290bm90ZXMKCi4uIFsxXSBXaGVuIHRoZSBkZWZhdWx0IGRvbWFpbiBjb250YWlucyBhIDpyc3Q6ZGlyOmBjbGFzc2AgZGlyZWN0aXZlLCB0aGlzIGRpcmVjdGl2ZQogICAgICAgd2lsbCBiZSBzaGFkb3dlZC4gIFRoZXJlZm9yZSwgU3BoaW54IHJlLWV4cG9ydHMgaXQgYXMgOnJzdDpkaXI6YHJzdC1jbGFzc2AuCjwvdGV4dGFyZWE+PC9mb3JtPgoKICAgIDxzY3JpcHQ+CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7CiAgICAgICAgbGluZU51bWJlcnM6IHRydWUsCiAgICAgIH0pOwogICAgPC9zY3JpcHQ+CiAgICA8cD5UaGUgcmVTdHJ1Y3R1cmVkVGV4dCBtb2RlIHN1cHBvcnRzIG9uZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjo8L3A+CiAgICA8ZGw+CiAgICAgIDxkdD48Y29kZT52ZXJiYXRpbSAoc3RyaW5nKTwvY29kZT48L2R0PgogICAgICA8ZGQ+QSBuYW1lIG9yIE1JTUUgdHlwZSBvZiBhIG1vZGUgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIGhpZ2hsaWdodGluZwogICAgICB2ZXJiYXRpbSBibG9ja3MuIEJ5IGRlZmF1bHQsIHJlU3RydWN0dXJlZFRleHQgbW9kZSB1c2VzIHVuaWZvcm0gY29sb3IKICAgICAgZm9yIHdob2xlIGJsb2NrIG9mIHZlcmJhdGltIHRleHQgaWYgbm8gbW9kZSBpcyBnaXZlbi48L2RkPgogICAgPC9kbD4KICAgIDxwPklmIDxjb2RlPnB5dGhvbjwvY29kZT4gbW9kZSBpcyBhdmFpbGFibGUsCiAgICBpdCB3aWxsIGJlIHVzZWQgZm9yIGhpZ2hsaWdodGluZyBibG9ja3MgY29udGFpbmluZyBQeXRob24vSVB5dGhvbiB0ZXJtaW5hbAogICAgc2Vzc2lvbnMgKGJsb2NrcyBzdGFydGluZyB3aXRoIDxjb2RlPiZndDsmZ3Q7Jmd0OzwvY29kZT4gKGZvciBQeXRob24pIG9yCiAgICA8Y29kZT5JbiBbbnVtXTo8L2NvZGU+IChmb3IgSVB5dGhvbikuCgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQveC1yc3Q8L2NvZGU+LjwvcD4KICA8L2JvZHk+CjwvaHRtbD4KCg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/rst/rst.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LmNtLXMtZGVmYXVsdCBzcGFuLmNtLWVtcGhhc2lzIHsKICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKfQoKLmNtLXMtZGVmYXVsdCBzcGFuLmNtLXN0cm9uZyB7CiAgICBmb250LXdlaWdodDogYm9sZDsKfQoKLmNtLXMtZGVmYXVsdCBzcGFuLmNtLWludGVycHJldGVkIHsKICAgIGNvbG9yOiAjMzNjYzY2Owp9CgouY20tcy1kZWZhdWx0IHNwYW4uY20taW5saW5lIHsKICAgIGNvbG9yOiAjMzM5OWNjOwp9CgouY20tcy1kZWZhdWx0IHNwYW4uY20tcm9sZSB7CiAgICBjb2xvcjogIzY2NjY5OTsKfQoKLmNtLXMtZGVmYXVsdCBzcGFuLmNtLWxpc3QgewogICAgY29sb3I6ICNjYzAwOTk7CiAgICBmb250LXdlaWdodDogYm9sZDsKfQoKLmNtLXMtZGVmYXVsdCBzcGFuLmNtLWJvZHkgewogICAgY29sb3I6ICM2Njk5Y2M7Cn0KCi5jbS1zLWRlZmF1bHQgc3Bhbi5jbS12ZXJiYXRpbSB7CiAgICBjb2xvcjogIzMzNjZmZjsKfQoKLmNtLXMtZGVmYXVsdCBzcGFuLmNtLWNvbW1lbnQgewogICAgY29sb3I6ICNhYTc3MDA7Cn0KCi5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1kaXJlY3RpdmUgewogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBjb2xvcjogIzMzOTlmZjsKfQoKLmNtLXMtZGVmYXVsdCBzcGFuLmNtLWh5cGVybGluayB7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGNvbG9yOiAjMzM2NmZmOwp9CgouY20tcy1kZWZhdWx0IHNwYW4uY20tZm9vdG5vdGUgewogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBjb2xvcjogIzMzMzNmZjsKfQoKLmNtLXMtZGVmYXVsdCBzcGFuLmNtLWNpdGF0aW9uIHsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgY29sb3I6ICMzMzAwZmY7Cn0KCi5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1yZXBsYWNlbWVudCB7CiAgICBjb2xvcjogIzk5MzNjYzsKfQoKLmNtLXMtZGVmYXVsdCBzcGFuLmNtLXNlY3Rpb24gewogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBjb2xvcjogI2NjMDA5OTsKfQoKLmNtLXMtZGVmYXVsdCBzcGFuLmNtLWRpcmVjdGl2ZS1tYXJrZXIgewogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBjb2xvcjogIzMzOTlmZjsKfQoKLmNtLXMtZGVmYXVsdCBzcGFuLmNtLXZlcmJhdGltLW1hcmtlciB7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGNvbG9yOiAjOTkwMGZmOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/rst/rst.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCdyc3QnLCBmdW5jdGlvbihjb25maWcsIG9wdGlvbnMpIHsKICAgIGZ1bmN0aW9uIHNldFN0YXRlKHN0YXRlLCBmbiwgY3R4KSB7CiAgICAgICAgc3RhdGUuZm4gPSBmbjsKICAgICAgICBzZXRDdHgoc3RhdGUsIGN0eCk7CiAgICB9CgogICAgZnVuY3Rpb24gc2V0Q3R4KHN0YXRlLCBjdHgpIHsKICAgICAgICBzdGF0ZS5jdHggPSBjdHggfHwge307CiAgICB9CgogICAgZnVuY3Rpb24gc2V0Tm9ybWFsKHN0YXRlLCBjaCkgewogICAgICAgIGlmIChjaCAmJiAodHlwZW9mIGNoICE9PSAnc3RyaW5nJykpIHsKICAgICAgICAgICAgdmFyIHN0ciA9IGNoLmN1cnJlbnQoKTsKICAgICAgICAgICAgY2ggPSBzdHJbc3RyLmxlbmd0aC0xXTsKICAgICAgICB9CgogICAgICAgIHNldFN0YXRlKHN0YXRlLCBub3JtYWwsIHtiYWNrOiBjaH0pOwogICAgfQoKICAgIGZ1bmN0aW9uIGhhc01vZGUobW9kZSkgewogICAgICAgIGlmIChtb2RlKSB7CiAgICAgICAgICAgIHZhciBtb2RlcyA9IENvZGVNaXJyb3IubGlzdE1vZGVzKCk7CgogICAgICAgICAgICBmb3IgKHZhciBpIGluIG1vZGVzKSB7CiAgICAgICAgICAgICAgICBpZiAobW9kZXNbaV0gPT0gbW9kZSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0TW9kZShtb2RlKSB7CiAgICAgICAgaWYgKGhhc01vZGUobW9kZSkpIHsKICAgICAgICAgICAgcmV0dXJuIENvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsIG1vZGUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgIH0KCiAgICB2YXIgdmVyYmF0aW1Nb2RlID0gZ2V0TW9kZShvcHRpb25zLnZlcmJhdGltKTsKICAgIHZhciBweXRob25Nb2RlID0gZ2V0TW9kZSgncHl0aG9uJyk7CgogICAgdmFyIHJlU2VjdGlvbiA9IC9eWyEiIyQlJicoKSorLC0uLzo7PD0+P0BbXFxcXV5fYHt8fX5dLzsKICAgIHZhciByZURpcmVjdGl2ZSA9IC9eXHMqXHcoWy06Llx3XSpcdyk/OjooXHN8JCkvOwogICAgdmFyIHJlSHlwZXJsaW5rID0gL15ccypfW1x3LV0rOihcc3wkKS87CiAgICB2YXIgcmVGb290bm90ZSA9IC9eXHMqXFsoXGQrfCMpXF0oXHN8JCkvOwogICAgdmFyIHJlQ2l0YXRpb24gPSAvXlxzKlxbW0EtWmEtel1bXHctXSpcXShcc3wkKS87CiAgICB2YXIgcmVGb290bm90ZVJlZiA9IC9eXFsoXGQrfCMpXF1fLzsKICAgIHZhciByZUNpdGF0aW9uUmVmID0gL15cW1tBLVphLXpdW1x3LV0qXF1fLzsKICAgIHZhciByZURpcmVjdGl2ZU1hcmtlciA9IC9eXC5cLihcc3wkKS87CiAgICB2YXIgcmVWZXJiYXRpbU1hcmtlciA9IC9eOjpccyokLzsKICAgIHZhciByZVByZUlubGluZSA9IC9eWy1ccyIoW3s8LzpdLzsKICAgIHZhciByZVBvc3RJbmxpbmUgPSAvXlstXHNgJyIpXF19Pi86Liw7IT9cXF9dLzsKICAgIHZhciByZUVudW1lcmF0ZWRMaXN0ID0gL15ccyooKFxkK3xbQS1aYS16I10pWy4pXXxcKChcZCt8W0EtWi1hLXojXSlcKSlccy87CiAgICB2YXIgcmVCdWxsZXRlZExpc3QgPSAvXlxzKlstXCtcKl1ccy87CiAgICB2YXIgcmVFeGFtcGxlcyA9IC9eXHMrKD4+PnxJbiBcW1xkK1xdOilccy87CgogICAgZnVuY3Rpb24gbm9ybWFsKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICB2YXIgY2gsIHNvbCwgaTsKCiAgICAgICAgaWYgKHN0cmVhbS5lYXQoL1xcLykpIHsKICAgICAgICAgICAgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgICAgICAgICBzZXROb3JtYWwoc3RhdGUsIGNoKTsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICBzb2wgPSBzdHJlYW0uc29sKCk7CgogICAgICAgIGlmIChzb2wgJiYgKGNoID0gc3RyZWFtLmVhdChyZVNlY3Rpb24pKSkgewogICAgICAgICAgICBmb3IgKGkgPSAwOyBzdHJlYW0uZWF0KGNoKTsgaSsrKTsKCiAgICAgICAgICAgIGlmIChpID49IDMgJiYgc3RyZWFtLm1hdGNoKC9eXHMqJC8pKSB7CiAgICAgICAgICAgICAgICBzZXROb3JtYWwoc3RhdGUsIG51bGwpOwogICAgICAgICAgICAgICAgcmV0dXJuICdoZWFkZXInOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgc3RyZWFtLmJhY2tVcChpICsgMSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChzb2wgJiYgc3RyZWFtLm1hdGNoKHJlRGlyZWN0aXZlTWFya2VyKSkgewogICAgICAgICAgICBpZiAoIXN0cmVhbS5lb2woKSkgewogICAgICAgICAgICAgICAgc2V0U3RhdGUoc3RhdGUsIGRpcmVjdGl2ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuICdtZXRhJzsKICAgICAgICB9CgogICAgICAgIGlmIChzdHJlYW0ubWF0Y2gocmVWZXJiYXRpbU1hcmtlcikpIHsKICAgICAgICAgICAgaWYgKCF2ZXJiYXRpbU1vZGUpIHsKICAgICAgICAgICAgICAgIHNldFN0YXRlKHN0YXRlLCB2ZXJiYXRpbSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgbW9kZSA9IHZlcmJhdGltTW9kZTsKCiAgICAgICAgICAgICAgICBzZXRTdGF0ZShzdGF0ZSwgdmVyYmF0aW0sIHsKICAgICAgICAgICAgICAgICAgICBtb2RlOiBtb2RlLAogICAgICAgICAgICAgICAgICAgIGxvY2FsOiBtb2RlLnN0YXJ0U3RhdGUoKQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuICdtZXRhJzsKICAgICAgICB9CgogICAgICAgIGlmIChzb2wgJiYgc3RyZWFtLm1hdGNoKHJlRXhhbXBsZXMsIGZhbHNlKSkgewogICAgICAgICAgICBpZiAoIXB5dGhvbk1vZGUpIHsKICAgICAgICAgICAgICAgIHNldFN0YXRlKHN0YXRlLCB2ZXJiYXRpbSk7CiAgICAgICAgICAgICAgICByZXR1cm4gJ21ldGEnOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdmFyIG1vZGUgPSBweXRob25Nb2RlOwoKICAgICAgICAgICAgICAgIHNldFN0YXRlKHN0YXRlLCB2ZXJiYXRpbSwgewogICAgICAgICAgICAgICAgICAgIG1vZGU6IG1vZGUsCiAgICAgICAgICAgICAgICAgICAgbG9jYWw6IG1vZGUuc3RhcnRTdGF0ZSgpCiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gdGVzdEJhY2t3YXJkKHJlKSB7CiAgICAgICAgICAgIHJldHVybiBzb2wgfHwgIXN0YXRlLmN0eC5iYWNrIHx8IHJlLnRlc3Qoc3RhdGUuY3R4LmJhY2spOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gdGVzdEZvcndhcmQocmUpIHsKICAgICAgICAgICAgcmV0dXJuIHN0cmVhbS5lb2woKSB8fCBzdHJlYW0ubWF0Y2gocmUsIGZhbHNlKTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIHRlc3RJbmxpbmUocmUpIHsKICAgICAgICAgICAgcmV0dXJuIHN0cmVhbS5tYXRjaChyZSkgJiYgdGVzdEJhY2t3YXJkKC9cVy8pICYmIHRlc3RGb3J3YXJkKC9cVy8pOwogICAgICAgIH0KCiAgICAgICAgaWYgKHRlc3RJbmxpbmUocmVGb290bm90ZVJlZikpIHsKICAgICAgICAgICAgc2V0Tm9ybWFsKHN0YXRlLCBzdHJlYW0pOwogICAgICAgICAgICByZXR1cm4gJ2Zvb3Rub3RlJzsKICAgICAgICB9CgogICAgICAgIGlmICh0ZXN0SW5saW5lKHJlQ2l0YXRpb25SZWYpKSB7CiAgICAgICAgICAgIHNldE5vcm1hbChzdGF0ZSwgc3RyZWFtKTsKICAgICAgICAgICAgcmV0dXJuICdjaXRhdGlvbic7CiAgICAgICAgfQoKICAgICAgICBjaCA9IHN0cmVhbS5uZXh0KCk7CgogICAgICAgIGlmICh0ZXN0QmFja3dhcmQocmVQcmVJbmxpbmUpKSB7CiAgICAgICAgICAgIGlmICgoY2ggPT09ICc6JyB8fCBjaCA9PT0gJ3wnKSAmJiBzdHJlYW0uZWF0KC9cUy8pKSB7CiAgICAgICAgICAgICAgICB2YXIgdG9rZW47CgogICAgICAgICAgICAgICAgaWYgKGNoID09PSAnOicpIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA9ICdidWlsdGluJzsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSAnYXRvbSc7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgc2V0U3RhdGUoc3RhdGUsIGlubGluZSwgewogICAgICAgICAgICAgICAgICAgIGNoOiBjaCwKICAgICAgICAgICAgICAgICAgICB3aWRlOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICBwcmV2OiBudWxsLAogICAgICAgICAgICAgICAgICAgIHRva2VuOiB0b2tlbgogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoY2ggPT09ICcqJyB8fCBjaCA9PT0gJ2AnKSB7CiAgICAgICAgICAgICAgICB2YXIgb3JpZyA9IGNoLAogICAgICAgICAgICAgICAgICAgIHdpZGUgPSBmYWxzZTsKCiAgICAgICAgICAgICAgICBjaCA9IHN0cmVhbS5uZXh0KCk7CgogICAgICAgICAgICAgICAgaWYgKGNoID09IG9yaWcpIHsKICAgICAgICAgICAgICAgICAgICB3aWRlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICBjaCA9IHN0cmVhbS5uZXh0KCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKGNoICYmICEvXHMvLnRlc3QoY2gpKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHRva2VuOwoKICAgICAgICAgICAgICAgICAgICBpZiAob3JpZyA9PT0gJyonKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gd2lkZSA/ICdzdHJvbmcnIDogJ2VtJzsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHdpZGUgPyAnc3RyaW5nJyA6ICdzdHJpbmctMic7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBzZXRTdGF0ZShzdGF0ZSwgaW5saW5lLCB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNoOiBvcmlnLCAgICAgICAgICAgICAgIC8vIGlubGluZSgpIGhhcyB0byBrbm93IHdoYXQgdG8gc2VhcmNoIGZvcgogICAgICAgICAgICAgICAgICAgICAgICB3aWRlOiB3aWRlLCAgICAgICAgICAgICAvLyBhcmUgd2UgbG9va2luZyBmb3IgYGNoYCBvciBgY2hjaGAKICAgICAgICAgICAgICAgICAgICAgICAgcHJldjogbnVsbCwgICAgICAgICAgICAgLy8gdGVybWluYXRvciBtdXN0IG5vdCBiZSBwcmVjZWVkZWQgd2l0aCB3aGl0ZXNwYWNlCiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiB0b2tlbiAgICAgICAgICAgIC8vIEkgZG9uJ3Qgd2FudCB0byByZWNvbXB1dGUgdGhpcyBhbGwgdGhlIHRpbWUKICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBzZXROb3JtYWwoc3RhdGUsIGNoKTsKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBmdW5jdGlvbiBpbmxpbmUoc3RyZWFtLCBzdGF0ZSkgewogICAgICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCksCiAgICAgICAgICAgIHRva2VuID0gc3RhdGUuY3R4LnRva2VuOwoKICAgICAgICBmdW5jdGlvbiBmaW5pc2goY2gpIHsKICAgICAgICAgICAgc3RhdGUuY3R4LnByZXYgPSBjaDsKICAgICAgICAgICAgcmV0dXJuIHRva2VuOwogICAgICAgIH0KCiAgICAgICAgaWYgKGNoICE9IHN0YXRlLmN0eC5jaCkgewogICAgICAgICAgICByZXR1cm4gZmluaXNoKGNoKTsKICAgICAgICB9CgogICAgICAgIGlmICgvXHMvLnRlc3Qoc3RhdGUuY3R4LnByZXYpKSB7CiAgICAgICAgICAgIHJldHVybiBmaW5pc2goY2gpOwogICAgICAgIH0KCiAgICAgICAgaWYgKHN0YXRlLmN0eC53aWRlKSB7CiAgICAgICAgICAgIGNoID0gc3RyZWFtLm5leHQoKTsKCiAgICAgICAgICAgIGlmIChjaCAhPSBzdGF0ZS5jdHguY2gpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmaW5pc2goY2gpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoIXN0cmVhbS5lb2woKSAmJiAhcmVQb3N0SW5saW5lLnRlc3Qoc3RyZWFtLnBlZWsoKSkpIHsKICAgICAgICAgICAgaWYgKHN0YXRlLmN0eC53aWRlKSB7CiAgICAgICAgICAgICAgICBzdHJlYW0uYmFja1VwKDEpOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gZmluaXNoKGNoKTsKICAgICAgICB9CgogICAgICAgIHNldFN0YXRlKHN0YXRlLCBub3JtYWwpOwogICAgICAgIHNldE5vcm1hbChzdGF0ZSwgY2gpOwoKICAgICAgICByZXR1cm4gdG9rZW47CiAgICB9CgogICAgZnVuY3Rpb24gZGlyZWN0aXZlKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICB2YXIgdG9rZW4gPSBudWxsOwoKICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKHJlRGlyZWN0aXZlKSkgewogICAgICAgICAgICB0b2tlbiA9ICdhdHRyaWJ1dGUnOwogICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLm1hdGNoKHJlSHlwZXJsaW5rKSkgewogICAgICAgICAgICB0b2tlbiA9ICdsaW5rJzsKICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5tYXRjaChyZUZvb3Rub3RlKSkgewogICAgICAgICAgICB0b2tlbiA9ICdxdW90ZSc7CiAgICAgICAgfSBlbHNlIGlmIChzdHJlYW0ubWF0Y2gocmVDaXRhdGlvbikpIHsKICAgICAgICAgICAgdG9rZW4gPSAncXVvdGUnOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHN0cmVhbS5lYXRTcGFjZSgpOwoKICAgICAgICAgICAgaWYgKHN0cmVhbS5lb2woKSkgewogICAgICAgICAgICAgICAgc2V0Tm9ybWFsKHN0YXRlLCBzdHJlYW0pOwogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgICAgICAgICAgICBzZXRTdGF0ZShzdGF0ZSwgY29tbWVudCk7CiAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbW1lbnQnOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBGSVhNRSB0aGlzIGlzIHVucmVhY2hhYmxlCiAgICAgICAgc2V0U3RhdGUoc3RhdGUsIGJvZHksIHtzdGFydDogdHJ1ZX0pOwogICAgICAgIHJldHVybiB0b2tlbjsKICAgIH0KCiAgICBmdW5jdGlvbiBib2R5KHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICB2YXIgdG9rZW4gPSAnYm9keSc7CgogICAgICAgIGlmICghc3RhdGUuY3R4LnN0YXJ0IHx8IHN0cmVhbS5zb2woKSkgewogICAgICAgICAgICByZXR1cm4gYmxvY2soc3RyZWFtLCBzdGF0ZSwgdG9rZW4pOwogICAgICAgIH0KCiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICAgIHNldEN0eChzdGF0ZSk7CgogICAgICAgIHJldHVybiB0b2tlbjsKICAgIH0KCiAgICBmdW5jdGlvbiBjb21tZW50KHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICByZXR1cm4gYmxvY2soc3RyZWFtLCBzdGF0ZSwgJ2NvbW1lbnQnKTsKICAgIH0KCiAgICBmdW5jdGlvbiB2ZXJiYXRpbShzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgaWYgKCF2ZXJiYXRpbU1vZGUpIHsKICAgICAgICAgICAgcmV0dXJuIGJsb2NrKHN0cmVhbSwgc3RhdGUsICdtZXRhJyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKHN0cmVhbS5zb2woKSkgewogICAgICAgICAgICAgICAgaWYgKCFzdHJlYW0uZWF0U3BhY2UoKSkgewogICAgICAgICAgICAgICAgICAgIHNldE5vcm1hbChzdGF0ZSwgc3RyZWFtKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHZlcmJhdGltTW9kZS50b2tlbihzdHJlYW0sIHN0YXRlLmN0eC5sb2NhbCk7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGJsb2NrKHN0cmVhbSwgc3RhdGUsIHRva2VuKSB7CiAgICAgICAgaWYgKHN0cmVhbS5lb2woKSB8fCBzdHJlYW0uZWF0U3BhY2UoKSkgewogICAgICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgICAgICAgIHJldHVybiB0b2tlbjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzZXROb3JtYWwoc3RhdGUsIHN0cmVhbSk7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gewogICAgICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICByZXR1cm4ge2ZuOiBub3JtYWwsIGN0eDoge319OwogICAgICAgIH0sCgogICAgICAgIGNvcHlTdGF0ZTogZnVuY3Rpb24oc3RhdGUpIHsKICAgICAgICAgICAgcmV0dXJuIHtmbjogc3RhdGUuZm4sIGN0eDogc3RhdGUuY3R4fTsKICAgICAgICB9LAoKICAgICAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICAgICAgICB2YXIgdG9rZW4gPSBzdGF0ZS5mbihzdHJlYW0sIHN0YXRlKTsKICAgICAgICAgICAgcmV0dXJuIHRva2VuOwogICAgICAgIH0KICAgIH07Cn0pOwoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtcnN0IiwgInJzdCIpOwo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/ruby/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/ruby/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFJ1YnkgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9InJ1YnkuanMiPjwvc2NyaXB0PgogICAgPHN0eWxlPgogICAgICAuQ29kZU1pcnJvciB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7fQogICAgICAuY20tcy1kZWZhdWx0IHNwYW4uY20tYXJyb3cgeyBjb2xvcjogcmVkOyB9CiAgICA8L3N0eWxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBSdWJ5IG1vZGU8L2gxPgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KIyBDb2RlIGZyb20gaHR0cDovL3NhbmRib3gubWMuZWR1L35iZW5uZXQvcnVieS9jb2RlL3BvbHlfcmIuaHRtbAojCiMgVGhpcyBwcm9ncmFtIGV2YWx1YXRlcyBwb2x5bm9taWFscy4gIEl0IGZpcnN0IGFza3MgZm9yIHRoZSBjb2VmZmljaWVudHMKIyBvZiBhIHBvbHlub21pYWwsIHdoaWNoIG11c3QgYmUgZW50ZXJlZCBvbiBvbmUgbGluZSwgaGlnaGVzdC1vcmRlciBmaXJzdC4KIyBJdCB0aGVuIHJlcXVlc3RzIHZhbHVlcyBvZiB4IGFuZCB3aWxsIGNvbXB1dGUgdGhlIHZhbHVlIG9mIHRoZSBwb2x5IGZvcgojIGVhY2ggeC4gIEl0IHdpbGwgcmVwZWF0bHkgYXNrIGZvciB4IHZhbHVlcywgdW5sZXNzIHlvdSB0aGUgdXNlciBlbnRlcnMKIyBhIGJsYW5rIGxpbmUuICBJdCB0aGF0IGNhc2UsIGl0IHdpbGwgYXNrIGZvciBhbm90aGVyIHBvbHlub21pYWwuICBJZiB0aGUKIyB1c2VyIHR5cGVzIHF1aXQgZm9yIGVpdGhlciBpbnB1dCwgdGhlIHByb2dyYW0gaW1tZWRpYXRlbHkgZXhpdHMuCiMKCiMKIyBGdW5jdGlvbiB0byBldmFsdWF0ZSBhIHBvbHlub21pYWwgYXQgeC4gIFRoZSBwb2x5bm9taWFsIGlzIGdpdmVuCiMgYXMgYSBsaXN0IG9mIGNvZWZmaWNpZW50cywgZnJvbSB0aGUgZ3JlYXRlc3QgdG8gdGhlIGxlYXN0LgpkZWYgcG9seXZhbCh4LCBjb2VmKQogICAgc3VtID0gMAogICAgY29lZiA9IGNvZWYuY2xvbmUgICAgICAgICAgICMgRG9uJ3Qgd2FudCB0byBkZXN0cm95IHRoZSBvcmlnaW5hbAogICAgd2hpbGUgdHJ1ZQogICAgICAgIHN1bSArPSBjb2VmLnNoaWZ0ICAgICAgICMgQWRkIGFuZCByZW1vdmUgdGhlIG5leHQgY29lZgogICAgICAgIGJyZWFrIGlmIGNvZWYuZW1wdHk/ICAgICMgSWYgbm8gbW9yZSwgZG9uZSBlbnRpcmVseS4KICAgICAgICBzdW0gKj0geCAgICAgICAgICAgICAgICAjIFRoaXMgaGFwcGVucyB0aGUgcmlnaHQgbnVtYmVyIG9mIHRpbWVzLgogICAgZW5kCiAgICByZXR1cm4gc3VtCmVuZAoKIwojIEZ1bmN0aW9uIHRvIHJlYWQgYSBsaW5lIGNvbnRhaW5pbmcgYSBsaXN0IG9mIGludGVnZXJzIGFuZCByZXR1cm4KIyB0aGVtIGFzIGFuIGFycmF5IG9mIGludGVnZXJzLiAgSWYgdGhlIHN0cmluZyBjb252ZXJzaW9uIGZhaWxzLCBpdAojIHRocm93cyBUeXBlRXJyb3IuICBJZiB0aGUgaW5wdXQgbGluZSBpcyB0aGUgd29yZCAncXVpdCcsIHRoZW4gaXQKIyBjb252ZXJ0cyBpdCB0byBhbiBlbmQtb2YtZmlsZSBleGNlcHRpb24KZGVmIHJlYWRpbnRzKHByb21wdCkKICAgICMgUmVhZCBhIGxpbmUKICAgIHByaW50IHByb21wdAogICAgbGluZSA9IHJlYWRsaW5lLmNob21wCiAgICByYWlzZSBFT0ZFcnJvci5uZXcgaWYgbGluZSA9PSAncXVpdCcgIyBZb3UgY2FuIGFsc28gdXNlIGEgcmVhbCBFT0YuCiAgICAgICAgICAgIAogICAgIyBHbyB0aHJvdWdoIGVhY2ggaXRlbSBvbiB0aGUgbGluZSwgY29udmVydGluZyBlYWNoIG9uZSBhbmQgYWRkaW5nIGl0CiAgICAjIHRvIHJldHZhbC4KICAgIHJldHZhbCA9IFsgXQogICAgZm9yIHN0ciBpbiBsaW5lLnNwbGl0KC9ccysvKQogICAgICAgIGlmIHN0ciA9fiAvXlwtP1xkKyQvCiAgICAgICAgICAgIHJldHZhbC5wdXNoKHN0ci50b19pKQogICAgICAgIGVsc2UKICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yLm5ldwogICAgICAgIGVuZAogICAgZW5kCgogICAgcmV0dXJuIHJldHZhbAplbmQKCiMKIyBUYWtlIGEgY29lZmYgYW5kIGFuIGV4cG9uZW50IGFuZCByZXR1cm4gdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiwgaWdub3JpbmcKIyB0aGUgc2lnbiBvZiB0aGUgY29lZmZpY2llbnQuCmRlZiB0ZXJtX3RvX3N0cihjb2VmLCBleHApCiAgICByZXQgPSAiIgoKICAgICMgU2hvdyBjb2VmZiwgdW5sZXNzIGl0J3MgMSBvciBhdCB0aGUgcmlnaHQKICAgIGNvZWYgPSBjb2VmLmFicwogICAgcmV0ID0gY29lZi50b19zICAgICB1bmxlc3MgY29lZiA9PSAxICYmIGV4cCA+IDAKICAgIHJldCArPSAieCIgaWYgZXhwID4gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHggaWYgZXhwb25lbnQgbm90IDAKICAgIHJldCArPSAiXiIgKyBleHAudG9fcyBpZiBleHAgPiAxICAgICAgICAgICAgICAgICAgICAjIF5leHBvbmVudCwgaWYgPiAxLgoKICAgIHJldHVybiByZXQKZW5kCgojCiMgQ3JlYXRlIGEgc3RyaW5nIG9mIHRoZSBwb2x5bm9taWFsIGluIHNvcnQtb2YtcmVhZGFibGUgZm9ybS4KZGVmIHBvbHlzdHIocCkKICAgICMgR2V0IHRoZSBleHBvbmVudCBvZiBmaXJzdCBjb2VmZmljaWVudCwgcGx1cyAxLgogICAgZXhwID0gcC5sZW5ndGgKCiAgICAjIEFzc2lnbiBleHBvbmVudHMgdG8gZWFjaCB0ZXJtLCBtYWtpbmcgcGFpcnMgb2YgY29lZmYgYW5kIGV4cG9uZW50LAogICAgIyBUaGVuIGdldCByaWQgb2YgdGhlIHplcm8gdGVybXMuCiAgICBwID0gKHAubWFwIHsgfGN8IGV4cCAtPSAxOyBbIGMsIGV4cCBdIH0pLnNlbGVjdCB7IHxwfCBwWzBdICE9IDAgfQoKICAgICMgSWYgdGhlcmUncyBub3RoaW5nIGxlZnQsIGl0J3MgYSB6ZXJvCiAgICByZXR1cm4gIjAiIGlmIHAuZW1wdHk/CgogICAgIyAqKiogTm93IHAgaXMgYSBub24tZW1wdHkgbGlzdCBvZiBbIGNvZWYsIGV4cG9uZW50IF0gcGFpcnMuICoqKgoKICAgICMgQ29udmVydCB0aGUgZmlyc3QgdGVybSwgcHJlY2VkZWQgYnkgYSAiLSIgaWYgaXQncyBuZWdhdGl2ZS4KICAgIHJlc3VsdCA9IChpZiBwWzBdWzBdIDwgMCB0aGVuICItIiBlbHNlICIiIGVuZCkgKyB0ZXJtX3RvX3N0cigqcFswXSkKCiAgICAjIENvbnZlcnQgdGhlIHJlc3Qgb2YgdGhlIHRlcm1zLCBpbiBlYWNoIGNhc2UgYWRkaW5nIHRoZSBhcHByb3ByaWF0ZQogICAgIyArIG9yIC0gc2VwYXJhdGluZyB0aGVtLiAgCiAgICBmb3IgdGVybSBpbiBwWzEuLi5wLmxlbmd0aF0KICAgICAgICAjIEFkZCB0aGUgc2VwYXJhdG9yIHRoZW4gdGhlIHJlcC4gb2YgdGhlIHRlcm0uCiAgICAgICAgcmVzdWx0ICs9IChpZiB0ZXJtWzBdIDwgMCB0aGVuICIgLSAiIGVsc2UgIiArICIgZW5kKSArIAogICAgICAgICAgICAgICAgdGVybV90b19zdHIoKnRlcm0pCiAgICBlbmQKCiAgICByZXR1cm4gcmVzdWx0CmVuZAogICAgICAgIAojCiMgUnVuIHVudGlsIHNvbWUga2luZCBvZiBlbmRmaWxlLgpiZWdpbgogICAgIyBSZXBlYXQgdW50aWwgYW4gZXhjZXB0aW9uIG9yIHF1aXQgZ2V0cyB1cyBvdXQuCiAgICB3aGlsZSB0cnVlCiAgICAgICAgIyBSZWFkIGEgcG9seSB1bnRpbCBpdCB3b3Jrcy4gIEFuIEVPRiB3aWxsIGV4Y2VwdCBvdXQgb2YgdGhlCiAgICAgICAgIyBwcm9ncmFtLgogICAgICAgIHByaW50ICJcbiIKICAgICAgICBiZWdpbgogICAgICAgICAgICBwb2x5ID0gcmVhZGludHMoIkVudGVyIGEgcG9seW5vbWlhbCBjb2VmZmljaWVudHM6ICIpCiAgICAgICAgcmVzY3VlIFR5cGVFcnJvcgogICAgICAgICAgICBwcmludCAiVHJ5IGFnYWluLlxuIgogICAgICAgICAgICByZXRyeQogICAgICAgIGVuZAogICAgICAgIGJyZWFrIGlmIHBvbHkuZW1wdHk/CgogICAgICAgICMgUmVhZCBhbmQgZXZhbHVhdGUgeCB2YWx1ZXMgdW50aWwgdGhlIHVzZXIgdHlwZXMgYSBibGFuayBsaW5lLgogICAgICAgICMgQWdhaW4sIGFuIEVPRiB3aWxsIGV4Y2VwdCBvdXQgb2YgdGhlIHBnbS4KICAgICAgICB3aGlsZSB0cnVlCiAgICAgICAgICAgICMgUmVxdWVzdCBhbiBpbnRlZ2VyLgogICAgICAgICAgICBwcmludCAiRW50ZXIgeCB2YWx1ZSBvciBibGFuayBsaW5lOiAiCiAgICAgICAgICAgIHggPSByZWFkbGluZS5jaG9tcAogICAgICAgICAgICBicmVhayBpZiB4ID09ICcnCiAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yLm5ldyBpZiB4ID09ICdxdWl0JwoKICAgICAgICAgICAgIyBJZiBpdCBsb29rcyBiYWQsIGxldCdzIHRyeSBhZ2Fpbi4KICAgICAgICAgICAgaWYgeCAhfiAvXlwtP1xkKyQvCiAgICAgICAgICAgICAgICBwcmludCAiVGhhdCBkb2Vzbid0IGxvb2sgbGlrZSBhbiBpbnRlZ2VyLiAgUGxlYXNlIHRyeSBhZ2Fpbi5cbiIKICAgICAgICAgICAgICAgIG5leHQKICAgICAgICAgICAgZW5kCgogICAgICAgICAgICAjIENvbnZlcnQgdG8gYW4gaW50ZWdlciBhbmQgcHJpbnQgdGhlIHJlc3VsdC4KICAgICAgICAgICAgeCA9IHgudG9faQogICAgICAgICAgICBwcmludCAicCh4KSA9ICIsIHBvbHlzdHIocG9seSksICJcbiIKICAgICAgICAgICAgcHJpbnQgInAoIiwgeCwgIikgPSAiLCBwb2x5dmFsKHgsIHBvbHkpLCAiXG4iCiAgICAgICAgZW5kCiAgICBlbmQKcmVzY3VlIEVPRkVycm9yCiAgICBwcmludCAiXG49PT0gRU9GID09PVxuIgpyZXNjdWUgSW50ZXJydXB0LCBTaWduYWxFeGNlcHRpb24KICAgIHByaW50ICJcbj09PSBJbnRlcnJ1cHRlZCA9PT1cbiIKZWxzZQogICAgcHJpbnQgIi0tLSBCeWUgLS0tXG4iCmVuZAo8L3RleHRhcmVhPjwvZm9ybT4KICAgIDxzY3JpcHQ+CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7CiAgICAgICAgbW9kZTogInRleHQveC1ydWJ5IiwKICAgICAgICB0YWJNb2RlOiAiaW5kZW50IiwKICAgICAgICBtYXRjaEJyYWNrZXRzOiB0cnVlLAogICAgICAgIGluZGVudFVuaXQ6IDQKICAgICAgfSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD48c3Ryb25nPk1JTUUgdHlwZXMgZGVmaW5lZDo8L3N0cm9uZz4gPGNvZGU+dGV4dC94LXJ1Ynk8L2NvZGU+LjwvcD4KCiAgICA8cD5EZXZlbG9wbWVudCBvZiB0aGUgQ29kZU1pcnJvciBSdWJ5IG1vZGUgd2FzIGtpbmRseSBzcG9uc29yZWQKICAgIGJ5IDxhIGhyZWY9Imh0dHA6Ly91YmFsby5jb20vIj5VYmFsbzwvYT4sIHdobyBob2xkCiAgICB0aGUgPGEgaHJlZj0iTElDRU5TRSI+bGljZW5zZTwvYT4uPC9wPgoKICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/ruby/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChjKSAyMDExLCBVYmFsbywgSW5jLgpBbGwgcmlnaHRzIHJlc2VydmVkLgoKUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cm1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgogICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVWJhbG8sIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCiAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KClRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQpESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBVQkFMTywgSU5DIEJFIExJQUJMRSBGT1IgQU5ZCkRJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECk9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTClNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/ruby/ruby.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJydWJ5IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICBmdW5jdGlvbiB3b3JkT2JqKHdvcmRzKSB7CiAgICB2YXIgbyA9IHt9OwogICAgZm9yICh2YXIgaSA9IDAsIGUgPSB3b3Jkcy5sZW5ndGg7IGkgPCBlOyArK2kpIG9bd29yZHNbaV1dID0gdHJ1ZTsKICAgIHJldHVybiBvOwogIH0KICB2YXIga2V5d29yZHMgPSB3b3JkT2JqKFsKICAgICJhbGlhcyIsICJhbmQiLCAiQkVHSU4iLCAiYmVnaW4iLCAiYnJlYWsiLCAiY2FzZSIsICJjbGFzcyIsICJkZWYiLCAiZGVmaW5lZD8iLCAiZG8iLCAiZWxzZSIsCiAgICAiZWxzaWYiLCAiRU5EIiwgImVuZCIsICJlbnN1cmUiLCAiZmFsc2UiLCAiZm9yIiwgImlmIiwgImluIiwgIm1vZHVsZSIsICJuZXh0IiwgIm5vdCIsICJvciIsCiAgICAicmVkbyIsICJyZXNjdWUiLCAicmV0cnkiLCAicmV0dXJuIiwgInNlbGYiLCAic3VwZXIiLCAidGhlbiIsICJ0cnVlIiwgInVuZGVmIiwgInVubGVzcyIsCiAgICAidW50aWwiLCAid2hlbiIsICJ3aGlsZSIsICJ5aWVsZCIsICJuaWwiLCAicmFpc2UiLCAidGhyb3ciLCAiY2F0Y2giLCAiZmFpbCIsICJsb29wIiwgImNhbGxjYyIsCiAgICAiY2FsbGVyIiwgImxhbWJkYSIsICJwcm9jIiwgInB1YmxpYyIsICJwcm90ZWN0ZWQiLCAicHJpdmF0ZSIsICJyZXF1aXJlIiwgImxvYWQiLAogICAgInJlcXVpcmVfcmVsYXRpdmUiLCAiZXh0ZW5kIiwgImF1dG9sb2FkIgogIF0pOwogIHZhciBpbmRlbnRXb3JkcyA9IHdvcmRPYmooWyJkZWYiLCAiY2xhc3MiLCAiY2FzZSIsICJmb3IiLCAid2hpbGUiLCAiZG8iLCAibW9kdWxlIiwgInRoZW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYXRjaCIsICJsb29wIiwgInByb2MiLCAiYmVnaW4iXSk7CiAgdmFyIGRlZGVudFdvcmRzID0gd29yZE9iaihbImVuZCIsICJ1bnRpbCJdKTsKICB2YXIgbWF0Y2hpbmcgPSB7IlsiOiAiXSIsICJ7IjogIn0iLCAiKCI6ICIpIn07CiAgdmFyIGN1clB1bmM7CgogIGZ1bmN0aW9uIGNoYWluKG5ld3Rvaywgc3RyZWFtLCBzdGF0ZSkgewogICAgc3RhdGUudG9rZW5pemUucHVzaChuZXd0b2spOwogICAgcmV0dXJuIG5ld3RvayhzdHJlYW0sIHN0YXRlKTsKICB9CgogIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7CiAgICBjdXJQdW5jID0gbnVsbDsKICAgIGlmIChzdHJlYW0uc29sKCkgJiYgc3RyZWFtLm1hdGNoKCI9YmVnaW4iKSAmJiBzdHJlYW0uZW9sKCkpIHsKICAgICAgc3RhdGUudG9rZW5pemUucHVzaChyZWFkQmxvY2tDb21tZW50KTsKICAgICAgcmV0dXJuICJjb21tZW50IjsKICAgIH0KICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7CiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgaWYgKGNoID09ICJgIiB8fCBjaCA9PSAiJyIgfHwgY2ggPT0gJyInIHx8CiAgICAgICAgKGNoID09ICIvIiAmJiAhc3RyZWFtLmVvbCgpICYmIHN0cmVhbS5wZWVrKCkgIT0gIiAiKSkgewogICAgICByZXR1cm4gY2hhaW4ocmVhZFF1b3RlZChjaCwgInN0cmluZyIsIGNoID09ICciJyksIHN0cmVhbSwgc3RhdGUpOwogICAgfSBlbHNlIGlmIChjaCA9PSAiJSIpIHsKICAgICAgdmFyIHN0eWxlLCBlbWJlZCA9IGZhbHNlOwogICAgICBpZiAoc3RyZWFtLmVhdCgicyIpKSBzdHlsZSA9ICJhdG9tIjsKICAgICAgZWxzZSBpZiAoc3RyZWFtLmVhdCgvW1dRXS8pKSB7IHN0eWxlID0gInN0cmluZyI7IGVtYmVkID0gdHJ1ZTsgfQogICAgICBlbHNlIGlmIChzdHJlYW0uZWF0KC9bd3hxcl0vKSkgc3R5bGUgPSAic3RyaW5nIjsKICAgICAgdmFyIGRlbGltID0gc3RyZWFtLmVhdCgvW15cd1xzXS8pOwogICAgICBpZiAoIWRlbGltKSByZXR1cm4gIm9wZXJhdG9yIjsKICAgICAgaWYgKG1hdGNoaW5nLnByb3BlcnR5SXNFbnVtZXJhYmxlKGRlbGltKSkgZGVsaW0gPSBtYXRjaGluZ1tkZWxpbV07CiAgICAgIHJldHVybiBjaGFpbihyZWFkUXVvdGVkKGRlbGltLCBzdHlsZSwgZW1iZWQsIHRydWUpLCBzdHJlYW0sIHN0YXRlKTsKICAgIH0gZWxzZSBpZiAoY2ggPT0gIiMiKSB7CiAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTsKICAgICAgcmV0dXJuICJjb21tZW50IjsKICAgIH0gZWxzZSBpZiAoY2ggPT0gIjwiICYmIHN0cmVhbS5lYXQoIjwiKSkgewogICAgICBzdHJlYW0uZWF0KCItIik7CiAgICAgIHN0cmVhbS5lYXQoL1tcJ1wiXGBdLyk7CiAgICAgIHZhciBtYXRjaCA9IHN0cmVhbS5tYXRjaCgvXlx3Ky8pOwogICAgICBzdHJlYW0uZWF0KC9bXCdcIlxgXS8pOwogICAgICBpZiAobWF0Y2gpIHJldHVybiBjaGFpbihyZWFkSGVyZURvYyhtYXRjaFswXSksIHN0cmVhbSwgc3RhdGUpOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0gZWxzZSBpZiAoY2ggPT0gIjAiKSB7CiAgICAgIGlmIChzdHJlYW0uZWF0KCJ4IikpIHN0cmVhbS5lYXRXaGlsZSgvW1xkYS1mQS1GXS8pOwogICAgICBlbHNlIGlmIChzdHJlYW0uZWF0KCJiIikpIHN0cmVhbS5lYXRXaGlsZSgvWzAxXS8pOwogICAgICBlbHNlIHN0cmVhbS5lYXRXaGlsZSgvWzAtN10vKTsKICAgICAgcmV0dXJuICJudW1iZXIiOwogICAgfSBlbHNlIGlmICgvXGQvLnRlc3QoY2gpKSB7CiAgICAgIHN0cmVhbS5tYXRjaCgvXltcZF9dKig/OlwuW1xkX10rKT8oPzpbZUVdWytcLV0/W1xkX10rKT8vKTsKICAgICAgcmV0dXJuICJudW1iZXIiOwogICAgfSBlbHNlIGlmIChjaCA9PSAiPyIpIHsKICAgICAgd2hpbGUgKHN0cmVhbS5tYXRjaCgvXlxcW0NNXS0vKSkge30KICAgICAgaWYgKHN0cmVhbS5lYXQoIlxcIikpIHN0cmVhbS5lYXRXaGlsZSgvXHcvKTsKICAgICAgZWxzZSBzdHJlYW0ubmV4dCgpOwogICAgICByZXR1cm4gInN0cmluZyI7CiAgICB9IGVsc2UgaWYgKGNoID09ICI6IikgewogICAgICBpZiAoc3RyZWFtLmVhdCgiJyIpKSByZXR1cm4gY2hhaW4ocmVhZFF1b3RlZCgiJyIsICJhdG9tIiwgZmFsc2UpLCBzdHJlYW0sIHN0YXRlKTsKICAgICAgaWYgKHN0cmVhbS5lYXQoJyInKSkgcmV0dXJuIGNoYWluKHJlYWRRdW90ZWQoJyInLCAiYXRvbSIsIHRydWUpLCBzdHJlYW0sIHN0YXRlKTsKICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcP10vKTsKICAgICAgcmV0dXJuICJhdG9tIjsKICAgIH0gZWxzZSBpZiAoY2ggPT0gIkAiKSB7CiAgICAgIHN0cmVhbS5lYXQoIkAiKTsKICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcP10vKTsKICAgICAgcmV0dXJuICJ2YXJpYWJsZS0yIjsKICAgIH0gZWxzZSBpZiAoY2ggPT0gIiQiKSB7CiAgICAgIHN0cmVhbS5uZXh0KCk7CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XD9dLyk7CiAgICAgIHJldHVybiAidmFyaWFibGUtMyI7CiAgICB9IGVsc2UgaWYgKC9cdy8udGVzdChjaCkpIHsKICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcP10vKTsKICAgICAgaWYgKHN0cmVhbS5lYXQoIjoiKSkgcmV0dXJuICJhdG9tIjsKICAgICAgcmV0dXJuICJpZGVudCI7CiAgICB9IGVsc2UgaWYgKGNoID09ICJ8IiAmJiAoc3RhdGUudmFyTGlzdCB8fCBzdGF0ZS5sYXN0VG9rID09ICJ7IiB8fCBzdGF0ZS5sYXN0VG9rID09ICJkbyIpKSB7CiAgICAgIGN1clB1bmMgPSAifCI7CiAgICAgIHJldHVybiBudWxsOwogICAgfSBlbHNlIGlmICgvW1woXClcW1xde31cXDtdLy50ZXN0KGNoKSkgewogICAgICBjdXJQdW5jID0gY2g7CiAgICAgIHJldHVybiBudWxsOwogICAgfSBlbHNlIGlmIChjaCA9PSAiLSIgJiYgc3RyZWFtLmVhdCgiPiIpKSB7CiAgICAgIHJldHVybiAiYXJyb3ciOwogICAgfSBlbHNlIGlmICgvWz0rXC1cLyo6XC5eJTw+fnxdLy50ZXN0KGNoKSkgewogICAgICBzdHJlYW0uZWF0V2hpbGUoL1s9K1wtXC8qOlwuXiU8Pn58XS8pOwogICAgICByZXR1cm4gIm9wZXJhdG9yIjsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0KCiAgZnVuY3Rpb24gdG9rZW5CYXNlVW50aWxCcmFjZSgpIHsKICAgIHZhciBkZXB0aCA9IDE7CiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICBpZiAoc3RyZWFtLnBlZWsoKSA9PSAifSIpIHsKICAgICAgICBkZXB0aC0tOwogICAgICAgIGlmIChkZXB0aCA9PSAwKSB7CiAgICAgICAgICBzdGF0ZS50b2tlbml6ZS5wb3AoKTsKICAgICAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZVtzdGF0ZS50b2tlbml6ZS5sZW5ndGgtMV0oc3RyZWFtLCBzdGF0ZSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHN0cmVhbS5wZWVrKCkgPT0gInsiKSB7CiAgICAgICAgZGVwdGgrKzsKICAgICAgfQogICAgICByZXR1cm4gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpOwogICAgfTsKICB9CiAgZnVuY3Rpb24gcmVhZFF1b3RlZChxdW90ZSwgc3R5bGUsIGVtYmVkLCB1bmVzY2FwZWQpIHsKICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgIHZhciBlc2NhcGVkID0gZmFsc2UsIGNoOwogICAgICB3aGlsZSAoKGNoID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkgewogICAgICAgIGlmIChjaCA9PSBxdW90ZSAmJiAodW5lc2NhcGVkIHx8ICFlc2NhcGVkKSkgewogICAgICAgICAgc3RhdGUudG9rZW5pemUucG9wKCk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgaWYgKGVtYmVkICYmIGNoID09ICIjIiAmJiAhZXNjYXBlZCAmJiBzdHJlYW0uZWF0KCJ7IikpIHsKICAgICAgICAgIHN0YXRlLnRva2VuaXplLnB1c2godG9rZW5CYXNlVW50aWxCcmFjZShhcmd1bWVudHMuY2FsbGVlKSk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkICYmIGNoID09ICJcXCI7CiAgICAgIH0KICAgICAgcmV0dXJuIHN0eWxlOwogICAgfTsKICB9CiAgZnVuY3Rpb24gcmVhZEhlcmVEb2MocGhyYXNlKSB7CiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICBpZiAoc3RyZWFtLm1hdGNoKHBocmFzZSkpIHN0YXRlLnRva2VuaXplLnBvcCgpOwogICAgICBlbHNlIHN0cmVhbS5za2lwVG9FbmQoKTsKICAgICAgcmV0dXJuICJzdHJpbmciOwogICAgfTsKICB9CiAgZnVuY3Rpb24gcmVhZEJsb2NrQ29tbWVudChzdHJlYW0sIHN0YXRlKSB7CiAgICBpZiAoc3RyZWFtLnNvbCgpICYmIHN0cmVhbS5tYXRjaCgiPWVuZCIpICYmIHN0cmVhbS5lb2woKSkKICAgICAgc3RhdGUudG9rZW5pemUucG9wKCk7CiAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICByZXR1cm4gImNvbW1lbnQiOwogIH0KCiAgcmV0dXJuIHsKICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4ge3Rva2VuaXplOiBbdG9rZW5CYXNlXSwKICAgICAgICAgICAgICBpbmRlbnRlZDogMCwKICAgICAgICAgICAgICBjb250ZXh0OiB7dHlwZTogInRvcCIsIGluZGVudGVkOiAtY29uZmlnLmluZGVudFVuaXR9LAogICAgICAgICAgICAgIGNvbnRpbnVlZExpbmU6IGZhbHNlLAogICAgICAgICAgICAgIGxhc3RUb2s6IG51bGwsCiAgICAgICAgICAgICAgdmFyTGlzdDogZmFsc2V9OwogICAgfSwKCiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICBpZiAoc3RyZWFtLnNvbCgpKSBzdGF0ZS5pbmRlbnRlZCA9IHN0cmVhbS5pbmRlbnRhdGlvbigpOwogICAgICB2YXIgc3R5bGUgPSBzdGF0ZS50b2tlbml6ZVtzdGF0ZS50b2tlbml6ZS5sZW5ndGgtMV0oc3RyZWFtLCBzdGF0ZSksIGt3dHlwZTsKICAgICAgaWYgKHN0eWxlID09ICJpZGVudCIpIHsKICAgICAgICB2YXIgd29yZCA9IHN0cmVhbS5jdXJyZW50KCk7CiAgICAgICAgc3R5bGUgPSBrZXl3b3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShzdHJlYW0uY3VycmVudCgpKSA/ICJrZXl3b3JkIgogICAgICAgICAgOiAvXltBLVpdLy50ZXN0KHdvcmQpID8gInRhZyIKICAgICAgICAgIDogKHN0YXRlLmxhc3RUb2sgPT0gImRlZiIgfHwgc3RhdGUubGFzdFRvayA9PSAiY2xhc3MiIHx8IHN0YXRlLnZhckxpc3QpID8gImRlZiIKICAgICAgICAgIDogInZhcmlhYmxlIjsKICAgICAgICBpZiAoaW5kZW50V29yZHMucHJvcGVydHlJc0VudW1lcmFibGUod29yZCkpIGt3dHlwZSA9ICJpbmRlbnQiOwogICAgICAgIGVsc2UgaWYgKGRlZGVudFdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKHdvcmQpKSBrd3R5cGUgPSAiZGVkZW50IjsKICAgICAgICBlbHNlIGlmICgod29yZCA9PSAiaWYiIHx8IHdvcmQgPT0gInVubGVzcyIpICYmIHN0cmVhbS5jb2x1bW4oKSA9PSBzdHJlYW0uaW5kZW50YXRpb24oKSkKICAgICAgICAgIGt3dHlwZSA9ICJpbmRlbnQiOwogICAgICB9CiAgICAgIGlmIChjdXJQdW5jIHx8IChzdHlsZSAmJiBzdHlsZSAhPSAiY29tbWVudCIpKSBzdGF0ZS5sYXN0VG9rID0gd29yZCB8fCBjdXJQdW5jIHx8IHN0eWxlOwogICAgICBpZiAoY3VyUHVuYyA9PSAifCIpIHN0YXRlLnZhckxpc3QgPSAhc3RhdGUudmFyTGlzdDsKCiAgICAgIGlmIChrd3R5cGUgPT0gImluZGVudCIgfHwgL1tcKFxbXHtdLy50ZXN0KGN1clB1bmMpKQogICAgICAgIHN0YXRlLmNvbnRleHQgPSB7cHJldjogc3RhdGUuY29udGV4dCwgdHlwZTogY3VyUHVuYyB8fCBzdHlsZSwgaW5kZW50ZWQ6IHN0YXRlLmluZGVudGVkfTsKICAgICAgZWxzZSBpZiAoKGt3dHlwZSA9PSAiZGVkZW50IiB8fCAvW1wpXF1cfV0vLnRlc3QoY3VyUHVuYykpICYmIHN0YXRlLmNvbnRleHQucHJldikKICAgICAgICBzdGF0ZS5jb250ZXh0ID0gc3RhdGUuY29udGV4dC5wcmV2OwoKICAgICAgaWYgKHN0cmVhbS5lb2woKSkKICAgICAgICBzdGF0ZS5jb250aW51ZWRMaW5lID0gKGN1clB1bmMgPT0gIlxcIiB8fCBzdHlsZSA9PSAib3BlcmF0b3IiKTsKICAgICAgcmV0dXJuIHN0eWxlOwogICAgfSwKCiAgICBpbmRlbnQ6IGZ1bmN0aW9uKHN0YXRlLCB0ZXh0QWZ0ZXIpIHsKICAgICAgaWYgKHN0YXRlLnRva2VuaXplW3N0YXRlLnRva2VuaXplLmxlbmd0aC0xXSAhPSB0b2tlbkJhc2UpIHJldHVybiAwOwogICAgICB2YXIgZmlyc3RDaGFyID0gdGV4dEFmdGVyICYmIHRleHRBZnRlci5jaGFyQXQoMCk7CiAgICAgIHZhciBjdCA9IHN0YXRlLmNvbnRleHQ7CiAgICAgIHZhciBjbG9zaW5nID0gY3QudHlwZSA9PSBtYXRjaGluZ1tmaXJzdENoYXJdIHx8CiAgICAgICAgY3QudHlwZSA9PSAia2V5d29yZCIgJiYgL14oPzplbmR8dW50aWx8ZWxzZXxlbHNpZnx3aGVufHJlc2N1ZSlcYi8udGVzdCh0ZXh0QWZ0ZXIpOwogICAgICByZXR1cm4gY3QuaW5kZW50ZWQgKyAoY2xvc2luZyA/IDAgOiBjb25maWcuaW5kZW50VW5pdCkgKwogICAgICAgIChzdGF0ZS5jb250aW51ZWRMaW5lID8gY29uZmlnLmluZGVudFVuaXQgOiAwKTsKICAgIH0sCiAgICAgZWxlY3RyaWNDaGFyczogIn1kZSIgLy8gZW5EIGFuZCByZXNjdUUKCiAgfTsKfSk7CgpDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1ydWJ5IiwgInJ1YnkiKTsKCg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/rust/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/rust/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFJ1c3QgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9InJ1c3QuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4uQ29kZU1pcnJvciB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7fTwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3I6IFJ1c3QgbW9kZTwvaDE+Cgo8ZGl2Pjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+Ci8vIERlbW8gY29kZS4KCnR5cGUgZm9vPFQ+ID0gaW50OwplbnVtIGJhciB7CiAgICBzb21lKGludCwgZm9vPGZsb2F0PiksCiAgICBub25lCn0KCmZuIGNoZWNrX2NyYXRlKHg6IGludCkgewogICAgbGV0IHYgPSAxMDsKICAgIGFsdCBmb28gewogICAgICAxIHRvIDMgewogICAgICAgIHByaW50X2ZvbygpOwogICAgICAgIGlmIHggewogICAgICAgICAgICBibGFoKCkgKyAxMDsKICAgICAgICB9CiAgICAgIH0KICAgICAgKHgsIHkpIHsgImJ5ZSIgfQogICAgICBfIHsgImhpIiB9CiAgICB9Cn0KPC90ZXh0YXJlYT48L2Rpdj4KCiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUsCiAgICAgICAgdGFiTW9kZTogImluZGVudCIKICAgICAgfSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD48c3Ryb25nPk1JTUUgdHlwZXMgZGVmaW5lZDo8L3N0cm9uZz4gPGNvZGU+dGV4dC94LXJ1c3RzcmM8L2NvZGU+LjwvcD4KICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/rust/rust.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJydXN0IiwgZnVuY3Rpb24oKSB7CiAgdmFyIGluZGVudFVuaXQgPSA0LCBhbHRJbmRlbnRVbml0ID0gMjsKICB2YXIgdmFsS2V5d29yZHMgPSB7CiAgICAiaWYiOiAiaWYtc3R5bGUiLCAid2hpbGUiOiAiaWYtc3R5bGUiLCAiZWxzZSI6ICJlbHNlLXN0eWxlIiwKICAgICJkbyI6ICJlbHNlLXN0eWxlIiwgInJldCI6ICJlbHNlLXN0eWxlIiwgImZhaWwiOiAiZWxzZS1zdHlsZSIsCiAgICAiYnJlYWsiOiAiYXRvbSIsICJjb250IjogImF0b20iLCAiY29uc3QiOiAibGV0IiwgInJlc291cmNlIjogImZuIiwKICAgICJsZXQiOiAibGV0IiwgImZuIjogImZuIiwgImZvciI6ICJmb3IiLCAiYWx0IjogImFsdCIsICJpZmFjZSI6ICJpZmFjZSIsCiAgICAiaW1wbCI6ICJpbXBsIiwgInR5cGUiOiAidHlwZSIsICJlbnVtIjogImVudW0iLCAibW9kIjogIm1vZCIsCiAgICAiYXMiOiAib3AiLCAidHJ1ZSI6ICJhdG9tIiwgImZhbHNlIjogImF0b20iLCAiYXNzZXJ0IjogIm9wIiwgImNoZWNrIjogIm9wIiwKICAgICJjbGFpbSI6ICJvcCIsICJuYXRpdmUiOiAiaWdub3JlIiwgInVuc2FmZSI6ICJpZ25vcmUiLCAiaW1wb3J0IjogImVsc2Utc3R5bGUiLAogICAgImV4cG9ydCI6ICJlbHNlLXN0eWxlIiwgImNvcHkiOiAib3AiLCAibG9nIjogIm9wIiwgImxvZ19lcnIiOiAib3AiLAogICAgInVzZSI6ICJvcCIsICJiaW5kIjogIm9wIiwgInNlbGYiOiAiYXRvbSIKICB9OwogIHZhciB0eXBlS2V5d29yZHMgPSBmdW5jdGlvbigpIHsKICAgIHZhciBrZXl3b3JkcyA9IHsiZm4iOiAiZm4iLCAiYmxvY2siOiAiZm4iLCAib2JqIjogIm9iaiJ9OwogICAgdmFyIGF0b21zID0gImJvb2wgdWludCBpbnQgaTggaTE2IGkzMiBpNjQgdTggdTE2IHUzMiB1NjQgZmxvYXQgZjMyIGY2NCBzdHIgY2hhciIuc3BsaXQoIiAiKTsKICAgIGZvciAodmFyIGkgPSAwLCBlID0gYXRvbXMubGVuZ3RoOyBpIDwgZTsgKytpKSBrZXl3b3Jkc1thdG9tc1tpXV0gPSAiYXRvbSI7CiAgICByZXR1cm4ga2V5d29yZHM7CiAgfSgpOwogIHZhciBvcGVyYXRvckNoYXIgPSAvWytcLSomJT08PiE/fFwuQF0vOwoKICAvLyBUb2tlbml6ZXIKCiAgLy8gVXNlZCBhcyBzY3JhdGNoIHZhcmlhYmxlIHRvIGNvbW11bmljYXRlIG11bHRpcGxlIHZhbHVlcyB3aXRob3V0CiAgLy8gY29uc2luZyB1cCB0b25zIG9mIG9iamVjdHMuCiAgdmFyIHRjYXQsIGNvbnRlbnQ7CiAgZnVuY3Rpb24gcih0Yywgc3R5bGUpIHsKICAgIHRjYXQgPSB0YzsKICAgIHJldHVybiBzdHlsZTsKICB9CgogIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgaWYgKGNoID09ICciJykgewogICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuU3RyaW5nOwogICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICB9CiAgICBpZiAoY2ggPT0gIiciKSB7CiAgICAgIHRjYXQgPSAiYXRvbSI7CiAgICAgIGlmIChzdHJlYW0uZWF0KCJcXCIpKSB7CiAgICAgICAgaWYgKHN0cmVhbS5za2lwVG8oIiciKSkgeyBzdHJlYW0ubmV4dCgpOyByZXR1cm4gInN0cmluZyI7IH0KICAgICAgICBlbHNlIHsgcmV0dXJuICJlcnJvciI7IH0KICAgICAgfSBlbHNlIHsKICAgICAgICBzdHJlYW0ubmV4dCgpOwogICAgICAgIHJldHVybiBzdHJlYW0uZWF0KCInIikgPyAic3RyaW5nIiA6ICJlcnJvciI7CiAgICAgIH0KICAgIH0KICAgIGlmIChjaCA9PSAiLyIpIHsKICAgICAgaWYgKHN0cmVhbS5lYXQoIi8iKSkgeyBzdHJlYW0uc2tpcFRvRW5kKCk7IHJldHVybiAiY29tbWVudCI7IH0KICAgICAgaWYgKHN0cmVhbS5lYXQoIioiKSkgewogICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5Db21tZW50KDEpOwogICAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgICAgfQogICAgfQogICAgaWYgKGNoID09ICIjIikgewogICAgICBpZiAoc3RyZWFtLmVhdCgiWyIpKSB7IHRjYXQgPSAib3Blbi1hdHRyIjsgcmV0dXJuIG51bGw7IH0KICAgICAgc3RyZWFtLmVhdFdoaWxlKC9cdy8pOwogICAgICByZXR1cm4gcigibWFjcm8iLCAibWV0YSIpOwogICAgfQogICAgaWYgKGNoID09ICI6IiAmJiBzdHJlYW0ubWF0Y2goIjo8IikpIHsKICAgICAgcmV0dXJuIHIoIm9wIiwgbnVsbCk7CiAgICB9CiAgICBpZiAoY2gubWF0Y2goL1xkLykgfHwgKGNoID09ICIuIiAmJiBzdHJlYW0uZWF0KC9cZC8pKSkgewogICAgICB2YXIgZmxwID0gZmFsc2U7CiAgICAgIGlmICghc3RyZWFtLm1hdGNoKC9eeFtcZGEtZl0rL2kpICYmICFzdHJlYW0ubWF0Y2goL15iWzAxXSsvKSkgewogICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvXGQvKTsKICAgICAgICBpZiAoc3RyZWFtLmVhdCgiLiIpKSB7IGZscCA9IHRydWU7IHN0cmVhbS5lYXRXaGlsZSgvXGQvKTsgfQogICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL15lWytcLV0/XGQrL2kpKSB7IGZscCA9IHRydWU7IH0KICAgICAgfQogICAgICBpZiAoZmxwKSBzdHJlYW0ubWF0Y2goL15mKD86MzJ8NjQpLyk7CiAgICAgIGVsc2Ugc3RyZWFtLm1hdGNoKC9eW3VpXSg/Ojh8MTZ8MzJ8NjQpLyk7CiAgICAgIHJldHVybiByKCJhdG9tIiwgIm51bWJlciIpOwogICAgfQogICAgaWYgKGNoLm1hdGNoKC9bKClcW1xde306OyxdLykpIHJldHVybiByKGNoLCBudWxsKTsKICAgIGlmIChjaCA9PSAiLSIgJiYgc3RyZWFtLmVhdCgiPiIpKSByZXR1cm4gcigiLT4iLCBudWxsKTsKICAgIGlmIChjaC5tYXRjaChvcGVyYXRvckNoYXIpKSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZShvcGVyYXRvckNoYXIpOwogICAgICByZXR1cm4gcigib3AiLCBudWxsKTsKICAgIH0KICAgIHN0cmVhbS5lYXRXaGlsZSgvXHcvKTsKICAgIGNvbnRlbnQgPSBzdHJlYW0uY3VycmVudCgpOwogICAgaWYgKHN0cmVhbS5tYXRjaCgvXjo6XHcvKSkgewogICAgICBzdHJlYW0uYmFja1VwKDEpOwogICAgICByZXR1cm4gcigicHJlZml4IiwgInZhcmlhYmxlLTIiKTsKICAgIH0KICAgIGlmIChzdGF0ZS5rZXl3b3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShjb250ZW50KSkKICAgICAgcmV0dXJuIHIoc3RhdGUua2V5d29yZHNbY29udGVudF0sIGNvbnRlbnQubWF0Y2goL3RydWV8ZmFsc2UvKSA/ICJhdG9tIiA6ICJrZXl3b3JkIik7CiAgICByZXR1cm4gcigibmFtZSIsICJ2YXJpYWJsZSIpOwogIH0KCiAgZnVuY3Rpb24gdG9rZW5TdHJpbmcoc3RyZWFtLCBzdGF0ZSkgewogICAgdmFyIGNoLCBlc2NhcGVkID0gZmFsc2U7CiAgICB3aGlsZSAoY2ggPSBzdHJlYW0ubmV4dCgpKSB7CiAgICAgIGlmIChjaCA9PSAnIicgJiYgIWVzY2FwZWQpIHsKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsKICAgICAgICByZXR1cm4gcigiYXRvbSIsICJzdHJpbmciKTsKICAgICAgfQogICAgICBlc2NhcGVkID0gIWVzY2FwZWQgJiYgY2ggPT0gIlxcIjsKICAgIH0KICAgIC8vIEhhY2sgdG8gbm90IGNvbmZ1c2UgdGhlIHBhcnNlciB3aGVuIGEgc3RyaW5nIGlzIHNwbGl0IGluCiAgICAvLyBwaWVjZXMuCiAgICByZXR1cm4gcigib3AiLCAic3RyaW5nIik7CiAgfQoKICBmdW5jdGlvbiB0b2tlbkNvbW1lbnQoZGVwdGgpIHsKICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgIHZhciBsYXN0Q2ggPSBudWxsLCBjaDsKICAgICAgd2hpbGUgKGNoID0gc3RyZWFtLm5leHQoKSkgewogICAgICAgIGlmIChjaCA9PSAiLyIgJiYgbGFzdENoID09ICIqIikgewogICAgICAgICAgaWYgKGRlcHRoID09IDEpIHsKICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkNvbW1lbnQoZGVwdGggLSAxKTsKICAgICAgICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoY2ggPT0gIioiICYmIGxhc3RDaCA9PSAiLyIpIHsKICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5Db21tZW50KGRlcHRoICsgMSk7CiAgICAgICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICAgICAgfQogICAgICAgIGxhc3RDaCA9IGNoOwogICAgICB9CiAgICAgIHJldHVybiAiY29tbWVudCI7CiAgICB9OwogIH0KCiAgLy8gUGFyc2VyCgogIHZhciBjeCA9IHtzdGF0ZTogbnVsbCwgc3RyZWFtOiBudWxsLCBtYXJrZWQ6IG51bGwsIGNjOiBudWxsfTsKICBmdW5jdGlvbiBwYXNzKCkgewogICAgZm9yICh2YXIgaSA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgY3guY2MucHVzaChhcmd1bWVudHNbaV0pOwogIH0KICBmdW5jdGlvbiBjb250KCkgewogICAgcGFzcy5hcHBseShudWxsLCBhcmd1bWVudHMpOwogICAgcmV0dXJuIHRydWU7CiAgfQoKICBmdW5jdGlvbiBwdXNobGV4KHR5cGUsIGluZm8pIHsKICAgIHZhciByZXN1bHQgPSBmdW5jdGlvbigpIHsKICAgICAgdmFyIHN0YXRlID0gY3guc3RhdGU7CiAgICAgIHN0YXRlLmxleGljYWwgPSB7aW5kZW50ZWQ6IHN0YXRlLmluZGVudGVkLCBjb2x1bW46IGN4LnN0cmVhbS5jb2x1bW4oKSwKICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlLCBwcmV2OiBzdGF0ZS5sZXhpY2FsLCBpbmZvOiBpbmZvfTsKICAgIH07CiAgICByZXN1bHQubGV4ID0gdHJ1ZTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQogIGZ1bmN0aW9uIHBvcGxleCgpIHsKICAgIHZhciBzdGF0ZSA9IGN4LnN0YXRlOwogICAgaWYgKHN0YXRlLmxleGljYWwucHJldikgewogICAgICBpZiAoc3RhdGUubGV4aWNhbC50eXBlID09ICIpIikKICAgICAgICBzdGF0ZS5pbmRlbnRlZCA9IHN0YXRlLmxleGljYWwuaW5kZW50ZWQ7CiAgICAgIHN0YXRlLmxleGljYWwgPSBzdGF0ZS5sZXhpY2FsLnByZXY7CiAgICB9CiAgfQogIGZ1bmN0aW9uIHR5cGVjeCgpIHsgY3guc3RhdGUua2V5d29yZHMgPSB0eXBlS2V5d29yZHM7IH0KICBmdW5jdGlvbiB2YWxjeCgpIHsgY3guc3RhdGUua2V5d29yZHMgPSB2YWxLZXl3b3JkczsgfQogIHBvcGxleC5sZXggPSB0eXBlY3gubGV4ID0gdmFsY3gubGV4ID0gdHJ1ZTsKCiAgZnVuY3Rpb24gY29tbWFzZXAoY29tYiwgZW5kKSB7CiAgICBmdW5jdGlvbiBtb3JlKHR5cGUpIHsKICAgICAgaWYgKHR5cGUgPT0gIiwiKSByZXR1cm4gY29udChjb21iLCBtb3JlKTsKICAgICAgaWYgKHR5cGUgPT0gZW5kKSByZXR1cm4gY29udCgpOwogICAgICByZXR1cm4gY29udChtb3JlKTsKICAgIH0KICAgIHJldHVybiBmdW5jdGlvbih0eXBlKSB7CiAgICAgIGlmICh0eXBlID09IGVuZCkgcmV0dXJuIGNvbnQoKTsKICAgICAgcmV0dXJuIHBhc3MoY29tYiwgbW9yZSk7CiAgICB9OwogIH0KCiAgZnVuY3Rpb24gc3RhdF9vZihjb21iLCB0YWcpIHsKICAgIHJldHVybiBjb250KHB1c2hsZXgoInN0YXQiLCB0YWcpLCBjb21iLCBwb3BsZXgsIGJsb2NrKTsKICB9CiAgZnVuY3Rpb24gYmxvY2sodHlwZSkgewogICAgaWYgKHR5cGUgPT0gIn0iKSByZXR1cm4gY29udCgpOwogICAgaWYgKHR5cGUgPT0gImxldCIpIHJldHVybiBzdGF0X29mKGxldGRlZjEsICJsZXQiKTsKICAgIGlmICh0eXBlID09ICJmbiIpIHJldHVybiBzdGF0X29mKGZuZGVmKTsKICAgIGlmICh0eXBlID09ICJ0eXBlIikgcmV0dXJuIGNvbnQocHVzaGxleCgic3RhdCIpLCB0eWRlZiwgZW5kc3RhdGVtZW50LCBwb3BsZXgsIGJsb2NrKTsKICAgIGlmICh0eXBlID09ICJlbnVtIikgcmV0dXJuIHN0YXRfb2YoZW51bWRlZik7CiAgICBpZiAodHlwZSA9PSAibW9kIikgcmV0dXJuIHN0YXRfb2YobW9kKTsKICAgIGlmICh0eXBlID09ICJpZmFjZSIpIHJldHVybiBzdGF0X29mKGlmYWNlKTsKICAgIGlmICh0eXBlID09ICJpbXBsIikgcmV0dXJuIHN0YXRfb2YoaW1wbCk7CiAgICBpZiAodHlwZSA9PSAib3Blbi1hdHRyIikgcmV0dXJuIGNvbnQocHVzaGxleCgiXSIpLCBjb21tYXNlcChleHByZXNzaW9uLCAiXSIpLCBwb3BsZXgpOwogICAgaWYgKHR5cGUgPT0gImlnbm9yZSIgfHwgdHlwZS5tYXRjaCgvW1xdXCk7LF0vKSkgcmV0dXJuIGNvbnQoYmxvY2spOwogICAgcmV0dXJuIHBhc3MocHVzaGxleCgic3RhdCIpLCBleHByZXNzaW9uLCBwb3BsZXgsIGVuZHN0YXRlbWVudCwgYmxvY2spOwogIH0KICBmdW5jdGlvbiBlbmRzdGF0ZW1lbnQodHlwZSkgewogICAgaWYgKHR5cGUgPT0gIjsiKSByZXR1cm4gY29udCgpOwogICAgcmV0dXJuIHBhc3MoKTsKICB9CiAgZnVuY3Rpb24gZXhwcmVzc2lvbih0eXBlKSB7CiAgICBpZiAodHlwZSA9PSAiYXRvbSIgfHwgdHlwZSA9PSAibmFtZSIpIHJldHVybiBjb250KG1heWJlb3ApOwogICAgaWYgKHR5cGUgPT0gInsiKSByZXR1cm4gY29udChwdXNobGV4KCJ9IiksIGV4cHJicmFjZSwgcG9wbGV4KTsKICAgIGlmICh0eXBlLm1hdGNoKC9bXFtcKF0vKSkgcmV0dXJuIG1hdGNoQnJhY2tldHModHlwZSwgZXhwcmVzc2lvbik7CiAgICBpZiAodHlwZS5tYXRjaCgvW1xdXClcfTssXS8pKSByZXR1cm4gcGFzcygpOwogICAgaWYgKHR5cGUgPT0gImlmLXN0eWxlIikgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbiwgZXhwcmVzc2lvbik7CiAgICBpZiAodHlwZSA9PSAiZWxzZS1zdHlsZSIgfHwgdHlwZSA9PSAib3AiKSByZXR1cm4gY29udChleHByZXNzaW9uKTsKICAgIGlmICh0eXBlID09ICJmb3IiKSByZXR1cm4gY29udChwYXR0ZXJuLCBtYXliZXR5cGUsIGlub3AsIGV4cHJlc3Npb24sIGV4cHJlc3Npb24pOwogICAgaWYgKHR5cGUgPT0gImFsdCIpIHJldHVybiBjb250KGV4cHJlc3Npb24sIGFsdGJvZHkpOwogICAgaWYgKHR5cGUgPT0gImZuIikgcmV0dXJuIGNvbnQoZm5kZWYpOwogICAgaWYgKHR5cGUgPT0gIm1hY3JvIikgcmV0dXJuIGNvbnQobWFjcm8pOwogICAgcmV0dXJuIGNvbnQoKTsKICB9CiAgZnVuY3Rpb24gbWF5YmVvcCh0eXBlKSB7CiAgICBpZiAoY29udGVudCA9PSAiLiIpIHJldHVybiBjb250KG1heWJlcHJvcCk7CiAgICBpZiAoY29udGVudCA9PSAiOjo8Iil7cmV0dXJuIGNvbnQodHlwYXJhbXMsIG1heWJlb3ApO30KICAgIGlmICh0eXBlID09ICJvcCIgfHwgY29udGVudCA9PSAiOiIpIHJldHVybiBjb250KGV4cHJlc3Npb24pOwogICAgaWYgKHR5cGUgPT0gIigiIHx8IHR5cGUgPT0gIlsiKSByZXR1cm4gbWF0Y2hCcmFja2V0cyh0eXBlLCBleHByZXNzaW9uKTsKICAgIHJldHVybiBwYXNzKCk7CiAgfQogIGZ1bmN0aW9uIG1heWJlcHJvcCh0eXBlKSB7CiAgICBpZiAoY29udGVudC5tYXRjaCgvXlx3KyQvKSkge2N4Lm1hcmtlZCA9ICJ2YXJpYWJsZSI7IHJldHVybiBjb250KG1heWJlb3ApO30KICAgIHJldHVybiBwYXNzKGV4cHJlc3Npb24pOwogIH0KICBmdW5jdGlvbiBleHByYnJhY2UodHlwZSkgewogICAgaWYgKHR5cGUgPT0gIm9wIikgewogICAgICBpZiAoY29udGVudCA9PSAifCIpIHJldHVybiBjb250KGJsb2NrdmFycywgcG9wbGV4LCBwdXNobGV4KCJ9IiwgImJsb2NrIiksIGJsb2NrKTsKICAgICAgaWYgKGNvbnRlbnQgPT0gInx8IikgcmV0dXJuIGNvbnQocG9wbGV4LCBwdXNobGV4KCJ9IiwgImJsb2NrIiksIGJsb2NrKTsKICAgIH0KICAgIGlmIChjb250ZW50ID09ICJtdXRhYmxlIiB8fCAoY29udGVudC5tYXRjaCgvXlx3KyQvKSAmJiBjeC5zdHJlYW0ucGVlaygpID09ICI6IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhY3guc3RyZWFtLm1hdGNoKCI6OiIsIGZhbHNlKSkpCiAgICAgIHJldHVybiBwYXNzKHJlY29yZF9vZihleHByZXNzaW9uKSk7CiAgICByZXR1cm4gcGFzcyhibG9jayk7CiAgfQogIGZ1bmN0aW9uIHJlY29yZF9vZihjb21iKSB7CiAgICBmdW5jdGlvbiBybyh0eXBlKSB7CiAgICAgIGlmIChjb250ZW50ID09ICJtdXRhYmxlIiB8fCBjb250ZW50ID09ICJ3aXRoIikge2N4Lm1hcmtlZCA9ICJrZXl3b3JkIjsgcmV0dXJuIGNvbnQocm8pO30KICAgICAgaWYgKGNvbnRlbnQubWF0Y2goL15cdyokLykpIHtjeC5tYXJrZWQgPSAidmFyaWFibGUiOyByZXR1cm4gY29udChybyk7fQogICAgICBpZiAodHlwZSA9PSAiOiIpIHJldHVybiBjb250KGNvbWIsIHJvKTsKICAgICAgaWYgKHR5cGUgPT0gIn0iKSByZXR1cm4gY29udCgpOwogICAgICByZXR1cm4gY29udChybyk7CiAgICB9CiAgICByZXR1cm4gcm87CiAgfQogIGZ1bmN0aW9uIGJsb2NrdmFycyh0eXBlKSB7CiAgICBpZiAodHlwZSA9PSAibmFtZSIpIHtjeC5tYXJrZWQgPSAiZGVmIjsgcmV0dXJuIGNvbnQoYmxvY2t2YXJzKTt9CiAgICBpZiAodHlwZSA9PSAib3AiICYmIGNvbnRlbnQgPT0gInwiKSByZXR1cm4gY29udCgpOwogICAgcmV0dXJuIGNvbnQoYmxvY2t2YXJzKTsKICB9CgogIGZ1bmN0aW9uIGxldGRlZjEodHlwZSkgewogICAgaWYgKHR5cGUubWF0Y2goL1tcXVwpXH07XS8pKSByZXR1cm4gY29udCgpOwogICAgaWYgKGNvbnRlbnQgPT0gIj0iKSByZXR1cm4gY29udChleHByZXNzaW9uLCBsZXRkZWYyKTsKICAgIGlmICh0eXBlID09ICIsIikgcmV0dXJuIGNvbnQobGV0ZGVmMSk7CiAgICByZXR1cm4gcGFzcyhwYXR0ZXJuLCBtYXliZXR5cGUsIGxldGRlZjEpOwogIH0KICBmdW5jdGlvbiBsZXRkZWYyKHR5cGUpIHsKICAgIGlmICh0eXBlLm1hdGNoKC9bXF1cKVx9OyxdLykpIHJldHVybiBwYXNzKGxldGRlZjEpOwogICAgZWxzZSByZXR1cm4gcGFzcyhleHByZXNzaW9uLCBsZXRkZWYyKTsKICB9CiAgZnVuY3Rpb24gbWF5YmV0eXBlKHR5cGUpIHsKICAgIGlmICh0eXBlID09ICI6IikgcmV0dXJuIGNvbnQodHlwZWN4LCBydHlwZSwgdmFsY3gpOwogICAgcmV0dXJuIHBhc3MoKTsKICB9CiAgZnVuY3Rpb24gaW5vcCh0eXBlKSB7CiAgICBpZiAodHlwZSA9PSAibmFtZSIgJiYgY29udGVudCA9PSAiaW4iKSB7Y3gubWFya2VkID0gImtleXdvcmQiOyByZXR1cm4gY29udCgpO30KICAgIHJldHVybiBwYXNzKCk7CiAgfQogIGZ1bmN0aW9uIGZuZGVmKHR5cGUpIHsKICAgIGlmIChjb250ZW50ID09ICJAIiB8fCBjb250ZW50ID09ICJ+Iikge2N4Lm1hcmtlZCA9ICJrZXl3b3JkIjsgcmV0dXJuIGNvbnQoZm5kZWYpO30KICAgIGlmICh0eXBlID09ICJuYW1lIikge2N4Lm1hcmtlZCA9ICJkZWYiOyByZXR1cm4gY29udChmbmRlZik7fQogICAgaWYgKGNvbnRlbnQgPT0gIjwiKSByZXR1cm4gY29udCh0eXBhcmFtcywgZm5kZWYpOwogICAgaWYgKHR5cGUgPT0gInsiKSByZXR1cm4gcGFzcyhleHByZXNzaW9uKTsKICAgIGlmICh0eXBlID09ICIoIikgcmV0dXJuIGNvbnQocHVzaGxleCgiKSIpLCBjb21tYXNlcChhcmdkZWYsICIpIiksIHBvcGxleCwgZm5kZWYpOwogICAgaWYgKHR5cGUgPT0gIi0+IikgcmV0dXJuIGNvbnQodHlwZWN4LCBydHlwZSwgdmFsY3gsIGZuZGVmKTsKICAgIGlmICh0eXBlID09ICI7IikgcmV0dXJuIGNvbnQoKTsKICAgIHJldHVybiBjb250KGZuZGVmKTsKICB9CiAgZnVuY3Rpb24gdHlkZWYodHlwZSkgewogICAgaWYgKHR5cGUgPT0gIm5hbWUiKSB7Y3gubWFya2VkID0gImRlZiI7IHJldHVybiBjb250KHR5ZGVmKTt9CiAgICBpZiAoY29udGVudCA9PSAiPCIpIHJldHVybiBjb250KHR5cGFyYW1zLCB0eWRlZik7CiAgICBpZiAoY29udGVudCA9PSAiPSIpIHJldHVybiBjb250KHR5cGVjeCwgcnR5cGUsIHZhbGN4KTsKICAgIHJldHVybiBjb250KHR5ZGVmKTsKICB9CiAgZnVuY3Rpb24gZW51bWRlZih0eXBlKSB7CiAgICBpZiAodHlwZSA9PSAibmFtZSIpIHtjeC5tYXJrZWQgPSAiZGVmIjsgcmV0dXJuIGNvbnQoZW51bWRlZik7fQogICAgaWYgKGNvbnRlbnQgPT0gIjwiKSByZXR1cm4gY29udCh0eXBhcmFtcywgZW51bWRlZik7CiAgICBpZiAoY29udGVudCA9PSAiPSIpIHJldHVybiBjb250KHR5cGVjeCwgcnR5cGUsIHZhbGN4LCBlbmRzdGF0ZW1lbnQpOwogICAgaWYgKHR5cGUgPT0gInsiKSByZXR1cm4gY29udChwdXNobGV4KCJ9IiksIHR5cGVjeCwgZW51bWJsb2NrLCB2YWxjeCwgcG9wbGV4KTsKICAgIHJldHVybiBjb250KGVudW1kZWYpOwogIH0KICBmdW5jdGlvbiBlbnVtYmxvY2sodHlwZSkgewogICAgaWYgKHR5cGUgPT0gIn0iKSByZXR1cm4gY29udCgpOwogICAgaWYgKHR5cGUgPT0gIigiKSByZXR1cm4gY29udChwdXNobGV4KCIpIiksIGNvbW1hc2VwKHJ0eXBlLCAiKSIpLCBwb3BsZXgsIGVudW1ibG9jayk7CiAgICBpZiAoY29udGVudC5tYXRjaCgvXlx3KyQvKSkgY3gubWFya2VkID0gImRlZiI7CiAgICByZXR1cm4gY29udChlbnVtYmxvY2spOwogIH0KICBmdW5jdGlvbiBtb2QodHlwZSkgewogICAgaWYgKHR5cGUgPT0gIm5hbWUiKSB7Y3gubWFya2VkID0gImRlZiI7IHJldHVybiBjb250KG1vZCk7fQogICAgaWYgKHR5cGUgPT0gInsiKSByZXR1cm4gY29udChwdXNobGV4KCJ9IiksIGJsb2NrLCBwb3BsZXgpOwogICAgcmV0dXJuIHBhc3MoKTsKICB9CiAgZnVuY3Rpb24gaWZhY2UodHlwZSkgewogICAgaWYgKHR5cGUgPT0gIm5hbWUiKSB7Y3gubWFya2VkID0gImRlZiI7IHJldHVybiBjb250KGlmYWNlKTt9CiAgICBpZiAoY29udGVudCA9PSAiPCIpIHJldHVybiBjb250KHR5cGFyYW1zLCBpZmFjZSk7CiAgICBpZiAodHlwZSA9PSAieyIpIHJldHVybiBjb250KHB1c2hsZXgoIn0iKSwgYmxvY2ssIHBvcGxleCk7CiAgICByZXR1cm4gcGFzcygpOwogIH0KICBmdW5jdGlvbiBpbXBsKHR5cGUpIHsKICAgIGlmIChjb250ZW50ID09ICI8IikgcmV0dXJuIGNvbnQodHlwYXJhbXMsIGltcGwpOwogICAgaWYgKGNvbnRlbnQgPT0gIm9mIiB8fCBjb250ZW50ID09ICJmb3IiKSB7Y3gubWFya2VkID0gImtleXdvcmQiOyByZXR1cm4gY29udChydHlwZSwgaW1wbCk7fQogICAgaWYgKHR5cGUgPT0gIm5hbWUiKSB7Y3gubWFya2VkID0gImRlZiI7IHJldHVybiBjb250KGltcGwpO30KICAgIGlmICh0eXBlID09ICJ7IikgcmV0dXJuIGNvbnQocHVzaGxleCgifSIpLCBibG9jaywgcG9wbGV4KTsKICAgIHJldHVybiBwYXNzKCk7CiAgfQogIGZ1bmN0aW9uIHR5cGFyYW1zKHR5cGUpIHsKICAgIGlmIChjb250ZW50ID09ICI+IikgcmV0dXJuIGNvbnQoKTsKICAgIGlmIChjb250ZW50ID09ICIsIikgcmV0dXJuIGNvbnQodHlwYXJhbXMpOwogICAgaWYgKGNvbnRlbnQgPT0gIjoiKSByZXR1cm4gY29udChydHlwZSwgdHlwYXJhbXMpOwogICAgcmV0dXJuIHBhc3MocnR5cGUsIHR5cGFyYW1zKTsKICB9CiAgZnVuY3Rpb24gYXJnZGVmKHR5cGUpIHsKICAgIGlmICh0eXBlID09ICJuYW1lIikge2N4Lm1hcmtlZCA9ICJkZWYiOyByZXR1cm4gY29udChhcmdkZWYpO30KICAgIGlmICh0eXBlID09ICI6IikgcmV0dXJuIGNvbnQodHlwZWN4LCBydHlwZSwgdmFsY3gpOwogICAgcmV0dXJuIHBhc3MoKTsKICB9CiAgZnVuY3Rpb24gcnR5cGUodHlwZSkgewogICAgaWYgKHR5cGUgPT0gIm5hbWUiKSB7Y3gubWFya2VkID0gInZhcmlhYmxlLTMiOyByZXR1cm4gY29udChydHlwZW1heWJlcGFyYW0pOyB9CiAgICBpZiAoY29udGVudCA9PSAibXV0YWJsZSIpIHtjeC5tYXJrZWQgPSAia2V5d29yZCI7IHJldHVybiBjb250KHJ0eXBlKTt9CiAgICBpZiAodHlwZSA9PSAiYXRvbSIpIHJldHVybiBjb250KHJ0eXBlbWF5YmVwYXJhbSk7CiAgICBpZiAodHlwZSA9PSAib3AiIHx8IHR5cGUgPT0gIm9iaiIpIHJldHVybiBjb250KHJ0eXBlKTsKICAgIGlmICh0eXBlID09ICJmbiIpIHJldHVybiBjb250KGZudHlwZSk7CiAgICBpZiAodHlwZSA9PSAieyIpIHJldHVybiBjb250KHB1c2hsZXgoInsiKSwgcmVjb3JkX29mKHJ0eXBlKSwgcG9wbGV4KTsKICAgIHJldHVybiBtYXRjaEJyYWNrZXRzKHR5cGUsIHJ0eXBlKTsKICB9CiAgZnVuY3Rpb24gcnR5cGVtYXliZXBhcmFtKHR5cGUpIHsKICAgIGlmIChjb250ZW50ID09ICI8IikgcmV0dXJuIGNvbnQodHlwYXJhbXMpOwogICAgcmV0dXJuIHBhc3MoKTsKICB9CiAgZnVuY3Rpb24gZm50eXBlKHR5cGUpIHsKICAgIGlmICh0eXBlID09ICIoIikgcmV0dXJuIGNvbnQocHVzaGxleCgiKCIpLCBjb21tYXNlcChydHlwZSwgIikiKSwgcG9wbGV4LCBmbnR5cGUpOwogICAgaWYgKHR5cGUgPT0gIi0+IikgcmV0dXJuIGNvbnQocnR5cGUpOwogICAgcmV0dXJuIHBhc3MoKTsKICB9CiAgZnVuY3Rpb24gcGF0dGVybih0eXBlKSB7CiAgICBpZiAodHlwZSA9PSAibmFtZSIpIHtjeC5tYXJrZWQgPSAiZGVmIjsgcmV0dXJuIGNvbnQocGF0dGVybm1heWJlb3ApO30KICAgIGlmICh0eXBlID09ICJhdG9tIikgcmV0dXJuIGNvbnQocGF0dGVybm1heWJlb3ApOwogICAgaWYgKHR5cGUgPT0gIm9wIikgcmV0dXJuIGNvbnQocGF0dGVybik7CiAgICBpZiAodHlwZS5tYXRjaCgvW1xdXClcfTssXS8pKSByZXR1cm4gcGFzcygpOwogICAgcmV0dXJuIG1hdGNoQnJhY2tldHModHlwZSwgcGF0dGVybik7CiAgfQogIGZ1bmN0aW9uIHBhdHRlcm5tYXliZW9wKHR5cGUpIHsKICAgIGlmICh0eXBlID09ICJvcCIgJiYgY29udGVudCA9PSAiLiIpIHJldHVybiBjb250KCk7CiAgICBpZiAoY29udGVudCA9PSAidG8iKSB7Y3gubWFya2VkID0gImtleXdvcmQiOyByZXR1cm4gY29udChwYXR0ZXJuKTt9CiAgICBlbHNlIHJldHVybiBwYXNzKCk7CiAgfQogIGZ1bmN0aW9uIGFsdGJvZHkodHlwZSkgewogICAgaWYgKHR5cGUgPT0gInsiKSByZXR1cm4gY29udChwdXNobGV4KCJ9IiwgImFsdCIpLCBhbHRibG9jazEsIHBvcGxleCk7CiAgICByZXR1cm4gcGFzcygpOwogIH0KICBmdW5jdGlvbiBhbHRibG9jazEodHlwZSkgewogICAgaWYgKHR5cGUgPT0gIn0iKSByZXR1cm4gY29udCgpOwogICAgaWYgKHR5cGUgPT0gInwiKSByZXR1cm4gY29udChhbHRibG9jazEpOwogICAgaWYgKGNvbnRlbnQgPT0gIndoZW4iKSB7Y3gubWFya2VkID0gImtleXdvcmQiOyByZXR1cm4gY29udChleHByZXNzaW9uLCBhbHRibG9jazIpO30KICAgIGlmICh0eXBlLm1hdGNoKC9bXF1cKTssXS8pKSByZXR1cm4gY29udChhbHRibG9jazEpOwogICAgcmV0dXJuIHBhc3MocGF0dGVybiwgYWx0YmxvY2syKTsKICB9CiAgZnVuY3Rpb24gYWx0YmxvY2syKHR5cGUpIHsKICAgIGlmICh0eXBlID09ICJ7IikgcmV0dXJuIGNvbnQocHVzaGxleCgifSIsICJhbHQiKSwgYmxvY2ssIHBvcGxleCwgYWx0YmxvY2sxKTsKICAgIGVsc2UgcmV0dXJuIHBhc3MoYWx0YmxvY2sxKTsKICB9CgogIGZ1bmN0aW9uIG1hY3JvKHR5cGUpIHsKICAgIGlmICh0eXBlLm1hdGNoKC9bXFtcKFx7XS8pKSByZXR1cm4gbWF0Y2hCcmFja2V0cyh0eXBlLCBleHByZXNzaW9uKTsKICAgIHJldHVybiBwYXNzKCk7CiAgfQogIGZ1bmN0aW9uIG1hdGNoQnJhY2tldHModHlwZSwgY29tYikgewogICAgaWYgKHR5cGUgPT0gIlsiKSByZXR1cm4gY29udChwdXNobGV4KCJdIiksIGNvbW1hc2VwKGNvbWIsICJdIiksIHBvcGxleCk7CiAgICBpZiAodHlwZSA9PSAiKCIpIHJldHVybiBjb250KHB1c2hsZXgoIikiKSwgY29tbWFzZXAoY29tYiwgIikiKSwgcG9wbGV4KTsKICAgIGlmICh0eXBlID09ICJ7IikgcmV0dXJuIGNvbnQocHVzaGxleCgifSIpLCBjb21tYXNlcChjb21iLCAifSIpLCBwb3BsZXgpOwogICAgcmV0dXJuIGNvbnQoKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlKHN0YXRlLCBzdHJlYW0sIHN0eWxlKSB7CiAgICB2YXIgY2MgPSBzdGF0ZS5jYzsKICAgIC8vIENvbW11bmljYXRlIG91ciBjb250ZXh0IHRvIHRoZSBjb21iaW5hdG9ycy4KICAgIC8vIChMZXNzIHdhc3RlZnVsIHRoYW4gY29uc2luZyB1cCBhIGh1bmRyZWQgY2xvc3VyZXMgb24gZXZlcnkgY2FsbC4pCiAgICBjeC5zdGF0ZSA9IHN0YXRlOyBjeC5zdHJlYW0gPSBzdHJlYW07IGN4Lm1hcmtlZCA9IG51bGwsIGN4LmNjID0gY2M7CgogICAgd2hpbGUgKHRydWUpIHsKICAgICAgdmFyIGNvbWJpbmF0b3IgPSBjYy5sZW5ndGggPyBjYy5wb3AoKSA6IGJsb2NrOwogICAgICBpZiAoY29tYmluYXRvcih0Y2F0KSkgewogICAgICAgIHdoaWxlKGNjLmxlbmd0aCAmJiBjY1tjYy5sZW5ndGggLSAxXS5sZXgpCiAgICAgICAgICBjYy5wb3AoKSgpOwogICAgICAgIHJldHVybiBjeC5tYXJrZWQgfHwgc3R5bGU7CiAgICAgIH0KICAgIH0KICB9CgogIHJldHVybiB7CiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICB0b2tlbml6ZTogdG9rZW5CYXNlLAogICAgICAgIGNjOiBbXSwKICAgICAgICBsZXhpY2FsOiB7aW5kZW50ZWQ6IC1pbmRlbnRVbml0LCBjb2x1bW46IDAsIHR5cGU6ICJ0b3AiLCBhbGlnbjogZmFsc2V9LAogICAgICAgIGtleXdvcmRzOiB2YWxLZXl3b3JkcywKICAgICAgICBpbmRlbnRlZDogMAogICAgICB9OwogICAgfSwKCiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICBpZiAoc3RyZWFtLnNvbCgpKSB7CiAgICAgICAgaWYgKCFzdGF0ZS5sZXhpY2FsLmhhc093blByb3BlcnR5KCJhbGlnbiIpKQogICAgICAgICAgc3RhdGUubGV4aWNhbC5hbGlnbiA9IGZhbHNlOwogICAgICAgIHN0YXRlLmluZGVudGVkID0gc3RyZWFtLmluZGVudGF0aW9uKCk7CiAgICAgIH0KICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDsKICAgICAgdGNhdCA9IGNvbnRlbnQgPSBudWxsOwogICAgICB2YXIgc3R5bGUgPSBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgICAgaWYgKHN0eWxlID09ICJjb21tZW50IikgcmV0dXJuIHN0eWxlOwogICAgICBpZiAoIXN0YXRlLmxleGljYWwuaGFzT3duUHJvcGVydHkoImFsaWduIikpCiAgICAgICAgc3RhdGUubGV4aWNhbC5hbGlnbiA9IHRydWU7CiAgICAgIGlmICh0Y2F0ID09ICJwcmVmaXgiKSByZXR1cm4gc3R5bGU7CiAgICAgIGlmICghY29udGVudCkgY29udGVudCA9IHN0cmVhbS5jdXJyZW50KCk7CiAgICAgIHJldHVybiBwYXJzZShzdGF0ZSwgc3RyZWFtLCBzdHlsZSk7CiAgICB9LAoKICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlcikgewogICAgICBpZiAoc3RhdGUudG9rZW5pemUgIT0gdG9rZW5CYXNlKSByZXR1cm4gMDsKICAgICAgdmFyIGZpcnN0Q2hhciA9IHRleHRBZnRlciAmJiB0ZXh0QWZ0ZXIuY2hhckF0KDApLCBsZXhpY2FsID0gc3RhdGUubGV4aWNhbCwKICAgICAgICAgIHR5cGUgPSBsZXhpY2FsLnR5cGUsIGNsb3NpbmcgPSBmaXJzdENoYXIgPT0gdHlwZTsKICAgICAgaWYgKHR5cGUgPT0gInN0YXQiKSByZXR1cm4gbGV4aWNhbC5pbmRlbnRlZCArIGluZGVudFVuaXQ7CiAgICAgIGlmIChsZXhpY2FsLmFsaWduKSByZXR1cm4gbGV4aWNhbC5jb2x1bW4gKyAoY2xvc2luZyA/IDAgOiAxKTsKICAgICAgcmV0dXJuIGxleGljYWwuaW5kZW50ZWQgKyAoY2xvc2luZyA/IDAgOiAobGV4aWNhbC5pbmZvID09ICJhbHQiID8gYWx0SW5kZW50VW5pdCA6IGluZGVudFVuaXQpKTsKICAgIH0sCgogICAgZWxlY3RyaWNDaGFyczogInt9IgogIH07Cn0pOwoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtcnVzdHNyYyIsICJydXN0Iik7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/scheme/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/scheme/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFNjaGVtZSBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0ic2NoZW1lLmpzIj48L3NjcmlwdD4KICAgIDxzdHlsZT4uQ29kZU1pcnJvciB7YmFja2dyb3VuZDogI2Y4ZjhmODt9PC9zdHlsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogU2NoZW1lIG1vZGU8L2gxPgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KOyBTZWUgaWYgdGhlIGlucHV0IHN0YXJ0cyB3aXRoIGEgZ2l2ZW4gc3ltYm9sLgooZGVmaW5lIChtYXRjaC1zeW1ib2wgaW5wdXQgcGF0dGVybikKICAoY29uZCAoKG51bGw/IChyZW1haW4gaW5wdXQpKSAjZikKCSgoZXF2PyAoY2FyIChyZW1haW4gaW5wdXQpKSBwYXR0ZXJuKSAoci1jZHIgaW5wdXQpKQoJKGVsc2UgI2YpKSkKCjsgQWxsb3cgdGhlIGlucHV0IHRvIHN0YXJ0IHdpdGggb25lIG9mIGEgbGlzdCBvZiBwYXR0ZXJucy4KKGRlZmluZSAobWF0Y2gtb3IgaW5wdXQgcGF0dGVybikKICAoY29uZCAoKG51bGw/IHBhdHRlcm4pICNmKQoJKChtYXRjaC1wYXR0ZXJuIGlucHV0IChjYXIgcGF0dGVybikpKQoJKGVsc2UgKG1hdGNoLW9yIGlucHV0IChjZHIgcGF0dGVybikpKSkpCgo7IEFsbG93IGEgc2VxdWVuY2Ugb2YgcGF0dGVybnMuCihkZWZpbmUgKG1hdGNoLXNlcSBpbnB1dCBwYXR0ZXJuKQogIChpZiAobnVsbD8gcGF0dGVybikKICAgICAgaW5wdXQKICAgICAgKGxldCAoKG1hdGNoIChtYXRjaC1wYXR0ZXJuIGlucHV0IChjYXIgcGF0dGVybikpKSkKCShpZiBtYXRjaCAobWF0Y2gtc2VxIG1hdGNoIChjZHIgcGF0dGVybikpICNmKSkpKQoKOyBNYXRjaCB3aXRoIHRoZSBwYXR0ZXJuIGJ1dCBubyBwcm9ibGVtIGlmIGl0IGRvZXMgbm90IG1hdGNoLgooZGVmaW5lIChtYXRjaC1vcHQgaW5wdXQgcGF0dGVybikKICAobGV0ICgobWF0Y2ggKG1hdGNoLXBhdHRlcm4gaW5wdXQgKGNhciBwYXR0ZXJuKSkpKQogICAgKGlmIG1hdGNoIG1hdGNoIGlucHV0KSkpCgo7IE1hdGNoIGFueXRoaW5nIChvdGhlciB0aGFuICcoKSksIHVudGlsIHBhdHRlcm4gaXMgZm91bmQuIFRoZSByYXRoZXIKOyBjbHVtc3kgZm9ybSBvZiByZXF1aXJpbmcgYW4gZW5kaW5nIHBhdHRlcm4gaXMgbmVlZGVkIHRvIGRlY2lkZSB3aGVyZQo7IHRoZSBlbmQgb2YgdGhlIG1hdGNoIGlzLiBJZiBub25lIGlzIGdpdmVuLCB0aGlzIHdpbGwgbWF0Y2ggdGhlIHJlc3QKOyBvZiB0aGUgc2VudGVuY2UuCihkZWZpbmUgKG1hdGNoLWFueSBpbnB1dCBwYXR0ZXJuKQogIChjb25kICgobnVsbD8gKHJlbWFpbiBpbnB1dCkpICNmKQoJKChudWxsPyBwYXR0ZXJuKSAoZi1jb25zIChyZW1haW4gaW5wdXQpIChjbGVhci1yZW1haW4gaW5wdXQpKSkKCShlbHNlCgkgKGxldCAoKGFjY3VtLWFueSAoY29sbGVjdG9yKSkpCgkgICAoZGVmaW5lIChtYXRjaC1wYXR0ZXJuLWFueSBpbnB1dCBwYXR0ZXJuKQoJICAgICAoY29uZCAoKG51bGw/IChyZW1haW4gaW5wdXQpKSAjZikKCQkgICAoZWxzZSAoYWNjdW0tYW55IChjYXIgKHJlbWFpbiBpbnB1dCkpKQoJCQkgKGNvbmQgKChtYXRjaC1wYXR0ZXJuIChyLWNkciBpbnB1dCkgcGF0dGVybikpCgkJCSAgICAgICAoZWxzZSAobWF0Y2gtcGF0dGVybi1hbnkgKHItY2RyIGlucHV0KSBwYXR0ZXJuKSkpKSkpCgkgICAobGV0ICgocmV0dmFsIChtYXRjaC1wYXR0ZXJuLWFueSBpbnB1dCAoY2FyIHBhdHRlcm4pKSkpCgkgICAgIChpZiByZXR2YWwKCQkgKGYtY29ucyAoYWNjdW0tYW55KSByZXR2YWwpCgkJICNmKSkpKSkpCjwvdGV4dGFyZWE+PC9mb3JtPgogICAgPHNjcmlwdD4KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHt9KTsKICAgIDwvc2NyaXB0PgoKICAgIDxwPjxzdHJvbmc+TUlNRSB0eXBlcyBkZWZpbmVkOjwvc3Ryb25nPiA8Y29kZT50ZXh0L3gtc2NoZW1lPC9jb2RlPi48L3A+CgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/scheme/scheme.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIEF1dGhvcjogS29oIFppIEhhbiwgYmFzZWQgb24gaW1wbGVtZW50YXRpb24gYnkgS29oIFppIENodW4KICovCkNvZGVNaXJyb3IuZGVmaW5lTW9kZSgic2NoZW1lIiwgZnVuY3Rpb24gKGNvbmZpZywgbW9kZSkgewogICAgdmFyIEJVSUxUSU4gPSAiYnVpbHRpbiIsIENPTU1FTlQgPSAiY29tbWVudCIsIFNUUklORyA9ICJzdHJpbmciLAogICAgICAgIEFUT00gPSAiYXRvbSIsIE5VTUJFUiA9ICJudW1iZXIiLCBCUkFDS0VUID0gImJyYWNrZXQiLCBLRVlXT1JEPSJrZXl3b3JkIjsKICAgIHZhciBJTkRFTlRfV09SRF9TS0lQID0gMiwgS0VZV09SRFNfU0tJUCA9IDE7CiAgICAKICAgIGZ1bmN0aW9uIG1ha2VLZXl3b3JkcyhzdHIpIHsKICAgICAgICB2YXIgb2JqID0ge30sIHdvcmRzID0gc3RyLnNwbGl0KCIgIik7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3b3Jkcy5sZW5ndGg7ICsraSkgb2JqW3dvcmRzW2ldXSA9IHRydWU7CiAgICAgICAgcmV0dXJuIG9iajsKICAgIH0KCiAgICB2YXIga2V5d29yZHMgPSBtYWtlS2V5d29yZHMoIs67IGNhc2UtbGFtYmRhIGNhbGwvY2MgY2xhc3MgZGVmaW5lLWNsYXNzIGV4aXQtaGFuZGxlciBmaWVsZCBpbXBvcnQgaW5oZXJpdCBpbml0LWZpZWxkIGludGVyZmFjZSBsZXQqLXZhbHVlcyBsZXQtdmFsdWVzIGxldC9lYyBtaXhpbiBvcHQtbGFtYmRhIG92ZXJyaWRlIHByb3RlY3QgcHJvdmlkZSBwdWJsaWMgcmVuYW1lIHJlcXVpcmUgcmVxdWlyZS1mb3Itc3ludGF4IHN5bnRheCBzeW50YXgtY2FzZSBzeW50YXgtZXJyb3IgdW5pdC9zaWcgdW5sZXNzIHdoZW4gd2l0aC1zeW50YXggYW5kIGJlZ2luIGNhbGwtd2l0aC1jdXJyZW50LWNvbnRpbnVhdGlvbiBjYWxsLXdpdGgtaW5wdXQtZmlsZSBjYWxsLXdpdGgtb3V0cHV0LWZpbGUgY2FzZSBjb25kIGRlZmluZSBkZWZpbmUtc3ludGF4IGRlbGF5IGRvIGR5bmFtaWMtd2luZCBlbHNlIGZvci1lYWNoIGlmIGxhbWJkYSBsZXQgbGV0KiBsZXQtc3ludGF4IGxldHJlYyBsZXRyZWMtc3ludGF4IG1hcCBvciBzeW50YXgtcnVsZXMgYWJzIGFjb3MgYW5nbGUgYXBwZW5kIGFwcGx5IGFzaW4gYXNzb2MgYXNzcSBhc3N2IGF0YW4gYm9vbGVhbj8gY2FhciBjYWRyIGNhbGwtd2l0aC1pbnB1dC1maWxlIGNhbGwtd2l0aC1vdXRwdXQtZmlsZSBjYWxsLXdpdGgtdmFsdWVzIGNhciBjZGRkYXIgY2RkZGRyIGNkciBjZWlsaW5nIGNoYXItPmludGVnZXIgY2hhci1hbHBoYWJldGljPyBjaGFyLWNpPD0/IGNoYXItY2k8PyBjaGFyLWNpPT8gY2hhci1jaT49PyBjaGFyLWNpPj8gY2hhci1kb3duY2FzZSBjaGFyLWxvd2VyLWNhc2U/IGNoYXItbnVtZXJpYz8gY2hhci1yZWFkeT8gY2hhci11cGNhc2UgY2hhci11cHBlci1jYXNlPyBjaGFyLXdoaXRlc3BhY2U/IGNoYXI8PT8gY2hhcjw/IGNoYXI9PyBjaGFyPj0/IGNoYXI+PyBjaGFyPyBjbG9zZS1pbnB1dC1wb3J0IGNsb3NlLW91dHB1dC1wb3J0IGNvbXBsZXg/IGNvbnMgY29zIGN1cnJlbnQtaW5wdXQtcG9ydCBjdXJyZW50LW91dHB1dC1wb3J0IGRlbm9taW5hdG9yIGRpc3BsYXkgZW9mLW9iamVjdD8gZXE/IGVxdWFsPyBlcXY/IGV2YWwgZXZlbj8gZXhhY3QtPmluZXhhY3QgZXhhY3Q/IGV4cCBleHB0ICNmIGZsb29yIGZvcmNlIGdjZCBpbWFnLXBhcnQgaW5leGFjdC0+ZXhhY3QgaW5leGFjdD8gaW5wdXQtcG9ydD8gaW50ZWdlci0+Y2hhciBpbnRlZ2VyPyBpbnRlcmFjdGlvbi1lbnZpcm9ubWVudCBsY20gbGVuZ3RoIGxpc3QgbGlzdC0+c3RyaW5nIGxpc3QtPnZlY3RvciBsaXN0LXJlZiBsaXN0LXRhaWwgbGlzdD8gbG9hZCBsb2cgbWFnbml0dWRlIG1ha2UtcG9sYXIgbWFrZS1yZWN0YW5ndWxhciBtYWtlLXN0cmluZyBtYWtlLXZlY3RvciBtYXggbWVtYmVyIG1lbXEgbWVtdiBtaW4gbW9kdWxvIG5lZ2F0aXZlPyBuZXdsaW5lIG5vdCBudWxsLWVudmlyb25tZW50IG51bGw/IG51bWJlci0+c3RyaW5nIG51bWJlcj8gbnVtZXJhdG9yIG9kZD8gb3Blbi1pbnB1dC1maWxlIG9wZW4tb3V0cHV0LWZpbGUgb3V0cHV0LXBvcnQ/IHBhaXI/IHBlZWstY2hhciBwb3J0PyBwb3NpdGl2ZT8gcHJvY2VkdXJlPyBxdWFzaXF1b3RlIHF1b3RlIHF1b3RpZW50IHJhdGlvbmFsPyByYXRpb25hbGl6ZSByZWFkIHJlYWQtY2hhciByZWFsLXBhcnQgcmVhbD8gcmVtYWluZGVyIHJldmVyc2Ugcm91bmQgc2NoZW1lLXJlcG9ydC1lbnZpcm9ubWVudCBzZXQhIHNldC1jYXIhIHNldC1jZHIhIHNpbiBzcXJ0IHN0cmluZyBzdHJpbmctPmxpc3Qgc3RyaW5nLT5udW1iZXIgc3RyaW5nLT5zeW1ib2wgc3RyaW5nLWFwcGVuZCBzdHJpbmctY2k8PT8gc3RyaW5nLWNpPD8gc3RyaW5nLWNpPT8gc3RyaW5nLWNpPj0/IHN0cmluZy1jaT4/IHN0cmluZy1jb3B5IHN0cmluZy1maWxsISBzdHJpbmctbGVuZ3RoIHN0cmluZy1yZWYgc3RyaW5nLXNldCEgc3RyaW5nPD0/IHN0cmluZzw/IHN0cmluZz0/IHN0cmluZz49PyBzdHJpbmc+PyBzdHJpbmc/IHN1YnN0cmluZyBzeW1ib2wtPnN0cmluZyBzeW1ib2w/ICN0IHRhbiB0cmFuc2NyaXB0LW9mZiB0cmFuc2NyaXB0LW9uIHRydW5jYXRlIHZhbHVlcyB2ZWN0b3IgdmVjdG9yLT5saXN0IHZlY3Rvci1maWxsISB2ZWN0b3ItbGVuZ3RoIHZlY3Rvci1yZWYgdmVjdG9yLXNldCEgd2l0aC1pbnB1dC1mcm9tLWZpbGUgd2l0aC1vdXRwdXQtdG8tZmlsZSB3cml0ZSB3cml0ZS1jaGFyIHplcm8/Iik7CiAgICB2YXIgaW5kZW50S2V5cyA9IG1ha2VLZXl3b3JkcygiZGVmaW5lIGxldCBsZXRyZWMgbGV0KiBsYW1iZGEiKTsKICAgIAoKICAgIGZ1bmN0aW9uIHN0YXRlU3RhY2soaW5kZW50LCB0eXBlLCBwcmV2KSB7IC8vIHJlcHJlc2VudHMgYSBzdGF0ZSBzdGFjayBvYmplY3QKICAgICAgICB0aGlzLmluZGVudCA9IGluZGVudDsKICAgICAgICB0aGlzLnR5cGUgPSB0eXBlOwogICAgICAgIHRoaXMucHJldiA9IHByZXY7CiAgICB9CgogICAgZnVuY3Rpb24gcHVzaFN0YWNrKHN0YXRlLCBpbmRlbnQsIHR5cGUpIHsKICAgICAgICBzdGF0ZS5pbmRlbnRTdGFjayA9IG5ldyBzdGF0ZVN0YWNrKGluZGVudCwgdHlwZSwgc3RhdGUuaW5kZW50U3RhY2spOwogICAgfQoKICAgIGZ1bmN0aW9uIHBvcFN0YWNrKHN0YXRlKSB7CiAgICAgICAgc3RhdGUuaW5kZW50U3RhY2sgPSBzdGF0ZS5pbmRlbnRTdGFjay5wcmV2OwogICAgfQogICAgCiAgICAvKioKICAgICAqIFNjaGVtZSBudW1iZXJzIGFyZSBjb21wbGljYXRlZCB1bmZvcnR1bmF0ZWx5LgogICAgICogQ2hlY2tzIGlmIHdlJ3JlIGxvb2tpbmcgYXQgYSBudW1iZXIsIHdoaWNoIG1pZ2h0IGJlIHBvc3NpYmx5IGEgZnJhY3Rpb24uCiAgICAgKiBBbHNvIGNoZWNrcyB0aGF0IGl0IGlzIG5vdCBwYXJ0IG9mIGEgbG9uZ2VyIGlkZW50aWZpZXIuIFJldHVybnMgdHJ1ZS9mYWxzZSBhY2NvcmRpbmdseS4KICAgICAqLwogICAgZnVuY3Rpb24gaXNOdW1iZXIoY2gsIHN0cmVhbSl7IAogICAgICAgIGlmKC9bMC05XS8uZXhlYyhjaCkgIT0gbnVsbCl7IAogICAgICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1swLTldLyk7CiAgICAgICAgICAgIHN0cmVhbS5lYXQoL1wvLyk7CiAgICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvWzAtOV0vKTsKICAgICAgICAgICAgaWYgKHN0cmVhbS5lb2woKSB8fCAhKC9bYS16QS1aXC1cX1wvXS8uZXhlYyhzdHJlYW0ucGVlaygpKSkpIHJldHVybiB0cnVlOwogICAgICAgICAgICBzdHJlYW0uYmFja1VwKHN0cmVhbS5jdXJyZW50KCkubGVuZ3RoIC0gMSk7IC8vIHVuZG8gYWxsIHRoZSBlYXRpbmcKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIHJldHVybiB7CiAgICAgICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24gKCkgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgaW5kZW50U3RhY2s6IG51bGwsCiAgICAgICAgICAgICAgICBpbmRlbnRhdGlvbjogMCwKICAgICAgICAgICAgICAgIG1vZGU6IGZhbHNlLAogICAgICAgICAgICAgICAgc0V4cHJDb21tZW50OiBmYWxzZQogICAgICAgICAgICB9OwogICAgICAgIH0sCgogICAgICAgIHRva2VuOiBmdW5jdGlvbiAoc3RyZWFtLCBzdGF0ZSkgewogICAgICAgICAgICBpZiAoc3RhdGUuaW5kZW50U3RhY2sgPT0gbnVsbCAmJiBzdHJlYW0uc29sKCkpIHsKICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSBpbmRlbnRhdGlvbiwgYnV0IG9ubHkgaWYgaW5kZW50U3RhY2sgaXMgZW1wdHkKICAgICAgICAgICAgICAgIHN0YXRlLmluZGVudGF0aW9uID0gc3RyZWFtLmluZGVudGF0aW9uKCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIHNraXAgc3BhY2VzCiAgICAgICAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIHJldHVyblR5cGUgPSBudWxsOwogICAgICAgICAgICAKICAgICAgICAgICAgc3dpdGNoKHN0YXRlLm1vZGUpewogICAgICAgICAgICAgICAgY2FzZSAic3RyaW5nIjogLy8gbXVsdGktbGluZSBzdHJpbmcgcGFyc2luZyBtb2RlCiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQsIGVzY2FwZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKG5leHQgPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0ID09ICJcIiIgJiYgIWVzY2FwZWQpIHsKICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkICYmIG5leHQgPT0gIlxcIjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IFNUUklORzsgLy8gY29udGludWUgb24gaW4gc2NoZW1lLXN0cmluZyBtb2RlCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJjb21tZW50IjogLy8gY29tbWVudCBwYXJzaW5nIG1vZGUKICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCwgbWF5YmVFbmQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKG5leHQgPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0ID09ICIjIiAmJiBtYXliZUVuZCkgewogICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBtYXliZUVuZCA9IChuZXh0ID09ICJ8Iik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHJldHVyblR5cGUgPSBDT01NRU5UOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAicy1leHByLWNvbW1lbnQiOiAvLyBzLWV4cHIgY29tbWVudGluZyBtb2RlCiAgICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIGlmKHN0cmVhbS5wZWVrKCkgPT0gIigiIHx8IHN0cmVhbS5wZWVrKCkgPT0gIlsiKXsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWN0dWFsbHkgc3RhcnQgc2NoZW1lIHMtZXhwciBjb21tZW50aW5nIG1vZGUKICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc0V4cHJDb21tZW50ID0gMDsKICAgICAgICAgICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgbm90IHdlIGp1c3QgY29tbWVudCB0aGUgZW50aXJlIG9mIHRoZSBuZXh0IHRva2VuCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW14vc10vKTsgLy8gZWF0IG5vbiBzcGFjZXMKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IENPTU1FTlQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGRlZmF1bHQ6IC8vIGRlZmF1bHQgcGFyc2luZyBtb2RlCiAgICAgICAgICAgICAgICAgICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT0gIlwiIikgewogICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gInN0cmluZyI7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblR5cGUgPSBTVFJJTkc7CiAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAiJyIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IEFUT007CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAnIycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5lYXQoInwiKSkgewkJCQkJLy8gTXVsdGktbGluZSBjb21tZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gImNvbW1lbnQiOyAvLyB0b2dnbGUgdG8gY29tbWVudCBtb2RlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gQ09NTUVOVDsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJlYW0uZWF0KC9bdGZdLykpIHsJCQkvLyAjdC8jZiAoYXRvbSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblR5cGUgPSBBVE9NOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5lYXQoJzsnKSkgewkJCQkvLyBTLUV4cHIgY29tbWVudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9ICJzLWV4cHItY29tbWVudCI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gQ09NTUVOVDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgIAogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gIjsiKSB7IC8vIGNvbW1lbnQKICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOyAvLyByZXN0IG9mIHRoZSBsaW5lIGlzIGEgY29tbWVudAogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gQ09NTUVOVDsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICItIil7CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICBpZighaXNOYU4ocGFyc2VJbnQoc3RyZWFtLnBlZWsoKSkpKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1wvMC05XS8pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IE5VTUJFUjsKICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IG51bGw7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzTnVtYmVyKGNoLHN0cmVhbSkpewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gTlVNQkVSOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gIigiIHx8IGNoID09ICJbIikgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5V29yZCA9ICcnOyB2YXIgaW5kZW50VGVtcCA9IHN0cmVhbS5jb2x1bW4oKTsKICAgICAgICAgICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgICAgICAgIEVpdGhlciAKICAgICAgICAgICAgICAgICAgICAgICAgKGluZGVudC13b3JkIC4uCiAgICAgICAgICAgICAgICAgICAgICAgIChub24taW5kZW50LXdvcmQgLi4KICAgICAgICAgICAgICAgICAgICAgICAgKDtzb21ldGhpbmcgZWxzZSwgYnJhY2tldCwgZXRjLgogICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKGxldHRlciA9IHN0cmVhbS5lYXQoL1teXHNcKFxbXDtcKVxdXS8pKSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlXb3JkICs9IGxldHRlcjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5V29yZC5sZW5ndGggPiAwICYmIGluZGVudEtleXMucHJvcGVydHlJc0VudW1lcmFibGUoa2V5V29yZCkpIHsgLy8gaW5kZW50LXdvcmQKICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2hTdGFjayhzdGF0ZSwgaW5kZW50VGVtcCArIElOREVOVF9XT1JEX1NLSVAsIGNoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsgLy8gbm9uLWluZGVudCB3b3JkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBjb250aW51ZSBlYXRpbmcgdGhlIHNwYWNlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLmVhdFNwYWNlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLmVvbCgpIHx8IHN0cmVhbS5wZWVrKCkgPT0gIjsiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm90aGluZyBzaWduaWZpY2FudCBhZnRlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIHJlc3RhcnQgaW5kZW50YXRpb24gMSBzcGFjZSBhZnRlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2hTdGFjayhzdGF0ZSwgaW5kZW50VGVtcCArIDEsIGNoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaFN0YWNrKHN0YXRlLCBpbmRlbnRUZW1wICsgc3RyZWFtLmN1cnJlbnQoKS5sZW5ndGgsIGNoKTsgLy8gZWxzZSB3ZSBtYXRjaAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5iYWNrVXAoc3RyZWFtLmN1cnJlbnQoKS5sZW5ndGggLSAxKTsgLy8gdW5kbyBhbGwgdGhlIGVhdGluZwogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mIHN0YXRlLnNFeHByQ29tbWVudCA9PSAibnVtYmVyIikgc3RhdGUuc0V4cHJDb21tZW50Kys7CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gQlJBQ0tFVDsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICIpIiB8fCBjaCA9PSAiXSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IEJSQUNLRVQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5pbmRlbnRTdGFjayAhPSBudWxsICYmIHN0YXRlLmluZGVudFN0YWNrLnR5cGUgPT0gKGNoID09ICIpIiA/ICIoIiA6ICJbIikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcFN0YWNrKHN0YXRlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mIHN0YXRlLnNFeHByQ29tbWVudCA9PSAibnVtYmVyIil7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoLS1zdGF0ZS5zRXhwckNvbW1lbnQgPT0gMCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblR5cGUgPSBDT01NRU5UOyAvLyBmaW5hbCBjbG9zaW5nIGJyYWNrZXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc0V4cHJDb21tZW50ID0gZmFsc2U7IC8vIHR1cm4gb2ZmIHMtZXhwciBjb21tZW50aW5nIG1vZGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1wkX1wtXS8pOwogICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5d29yZHMgJiYga2V5d29yZHMucHJvcGVydHlJc0VudW1lcmFibGUoc3RyZWFtLmN1cnJlbnQoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblR5cGUgPSBCVUlMVElOOwogICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSByZXR1cm5UeXBlID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuICh0eXBlb2Ygc3RhdGUuc0V4cHJDb21tZW50ID09ICJudW1iZXIiKSA/IENPTU1FTlQgOiByZXR1cm5UeXBlOwogICAgICAgIH0sCgogICAgICAgIGluZGVudDogZnVuY3Rpb24gKHN0YXRlLCB0ZXh0QWZ0ZXIpIHsKICAgICAgICAgICAgaWYgKHN0YXRlLmluZGVudFN0YWNrID09IG51bGwpIHJldHVybiBzdGF0ZS5pbmRlbnRhdGlvbjsKICAgICAgICAgICAgcmV0dXJuIHN0YXRlLmluZGVudFN0YWNrLmluZGVudDsKICAgICAgICB9CiAgICB9Owp9KTsKCkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LXNjaGVtZSIsICJzY2hlbWUiKTs=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/smalltalk/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/smalltalk/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFNtYWxsdGFsayBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0ic21hbGx0YWxrLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICAgIDxzdHlsZT4KICAgICAgLkNvZGVNaXJyb3Ige2JvcmRlcjogMnB4IHNvbGlkICNkZWU7IGJvcmRlci1yaWdodC13aWR0aDogMTBweDt9CiAgICAgIC5Db2RlTWlycm9yLWd1dHRlciB7Ym9yZGVyOiBub25lOyBiYWNrZ3JvdW5kOiAjZGVlO30KICAgICAgLkNvZGVNaXJyb3ItZ3V0dGVyIHByZSB7Y29sb3I6IHdoaXRlOyBmb250LXdlaWdodDogYm9sZDt9CiAgICA8L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBTbWFsbHRhbGsgbW9kZTwvaDE+Cgo8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgoiIAogICAgVGhpcyBpcyBhIHRlc3Qgb2YgdGhlIFNtYWxsdGFsayBjb2RlCiIKU2Vhc2lkZS5XQUNvbXBvbmVudCBzdWJjbGFzczogI015Q291bnRlciBbCiAgICB8IGNvdW50IHwKICAgIE15Q291bnRlciBjbGFzcyAmZ3Q7Jmd0OyBjYW5CZVJvb3QgWyBedHJ1ZSBdCgogICAgaW5pdGlhbGl6ZSBbCiAgICAgICAgc3VwZXIgaW5pdGlhbGl6ZS4KICAgICAgICBjb3VudCA6PSAwLgogICAgXQogICAgc3RhdGVzIFsgXnsgc2VsZiB9IF0KICAgIHJlbmRlckNvbnRlbnRPbjogaHRtbCBbCiAgICAgICAgaHRtbCBoZWFkaW5nOiBjb3VudC4KICAgICAgICBodG1sIGFuY2hvciBjYWxsYmFjazogWyBjb3VudCA6PSBjb3VudCArIDEgXTsgd2l0aDogJysrJy4KICAgICAgICBodG1sIHNwYWNlLgogICAgICAgIGh0bWwgYW5jaG9yIGNhbGxiYWNrOiBbIGNvdW50IDo9IGNvdW50IC0gMSBdOyB3aXRoOiAnLS0nLgogICAgXQpdCgpNeUNvdW50ZXIgcmVnaXN0ZXJBc0FwcGxpY2F0aW9uOiAnbXljb3VudGVyJwo8L3RleHRhcmVhPjwvZm9ybT4KCiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUsCiAgICAgICAgbW9kZTogInRleHQveC1zdHNyYyIsCiAgICAgICAgaW5kZW50VW5pdDogNAogICAgICB9KTsKICAgIDwvc2NyaXB0PgoKICAgIDxwPlNpbXBsZSBTbWFsbHRhbGsgbW9kZS48L3A+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQveC1zdHNyYzwvY29kZT4uPC9wPgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/smalltalk/smalltalk.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCdzbWFsbHRhbGsnLCBmdW5jdGlvbihjb25maWcsIG1vZGVDb25maWcpIHsKCgl2YXIgc3BlY2lhbENoYXJzID0gL1srXC0vXFwqfjw+PUAlfCY/IS46O15dLzsKCXZhciBrZXl3b3JkcyA9IC90cnVlfGZhbHNlfG5pbHxzZWxmfHN1cGVyfHRoaXNDb250ZXh0LzsKCgl2YXIgQ29udGV4dCA9IGZ1bmN0aW9uKHRva2VuaXplciwgcGFyZW50KSB7CgkJdGhpcy5uZXh0ID0gdG9rZW5pemVyOwoJCXRoaXMucGFyZW50ID0gcGFyZW50OwoJfTsKCgl2YXIgVG9rZW4gPSBmdW5jdGlvbihuYW1lLCBjb250ZXh0LCBlb3MpIHsKCQl0aGlzLm5hbWUgPSBuYW1lOwoJCXRoaXMuY29udGV4dCA9IGNvbnRleHQ7CgkJdGhpcy5lb3MgPSBlb3M7Cgl9OwoKCXZhciBTdGF0ZSA9IGZ1bmN0aW9uKCkgewoJCXRoaXMuY29udGV4dCA9IG5ldyBDb250ZXh0KG5leHQsIG51bGwpOwoJCXRoaXMuZXhwZWN0VmFyaWFibGUgPSB0cnVlOwoJCXRoaXMuaW5kZW50YXRpb24gPSAwOwoJCXRoaXMudXNlckluZGVudGF0aW9uRGVsdGEgPSAwOwoJfTsKCglTdGF0ZS5wcm90b3R5cGUudXNlckluZGVudCA9IGZ1bmN0aW9uKGluZGVudGF0aW9uKSB7CgkJdGhpcy51c2VySW5kZW50YXRpb25EZWx0YSA9IGluZGVudGF0aW9uID4gMCA/IChpbmRlbnRhdGlvbiAvIGNvbmZpZy5pbmRlbnRVbml0IC0gdGhpcy5pbmRlbnRhdGlvbikgOiAwOwoJfTsKCgl2YXIgbmV4dCA9IGZ1bmN0aW9uKHN0cmVhbSwgY29udGV4dCwgc3RhdGUpIHsKCQl2YXIgdG9rZW4gPSBuZXcgVG9rZW4obnVsbCwgY29udGV4dCwgZmFsc2UpOwoJCXZhciBjaGFyID0gc3RyZWFtLm5leHQoKTsKCgkJaWYgKGNoYXIgPT09ICciJykgewoJCQl0b2tlbiA9IG5leHRDb21tZW50KHN0cmVhbSwgbmV3IENvbnRleHQobmV4dENvbW1lbnQsIGNvbnRleHQpKTsKCgkJfSBlbHNlIGlmIChjaGFyID09PSAnXCcnKSB7CgkJCXRva2VuID0gbmV4dFN0cmluZyhzdHJlYW0sIG5ldyBDb250ZXh0KG5leHRTdHJpbmcsIGNvbnRleHQpKTsKCgkJfSBlbHNlIGlmIChjaGFyID09PSAnIycpIHsKCQkJc3RyZWFtLmVhdFdoaWxlKC9bXiAuXS8pOwoJCQl0b2tlbi5uYW1lID0gJ3N0cmluZy0yJzsKCgkJfSBlbHNlIGlmIChjaGFyID09PSAnJCcpIHsKCQkJc3RyZWFtLmVhdFdoaWxlKC9bXiBdLyk7CgkJCXRva2VuLm5hbWUgPSAnc3RyaW5nLTInOwoKCQl9IGVsc2UgaWYgKGNoYXIgPT09ICd8JyAmJiBzdGF0ZS5leHBlY3RWYXJpYWJsZSkgewoJCQl0b2tlbi5jb250ZXh0ID0gbmV3IENvbnRleHQobmV4dFRlbXBvcmFyaWVzLCBjb250ZXh0KTsKCgkJfSBlbHNlIGlmICgvW1xbXF17fSgpXS8udGVzdChjaGFyKSkgewoJCQl0b2tlbi5uYW1lID0gJ2JyYWNrZXQnOwoJCQl0b2tlbi5lb3MgPSAvW1xbeyhdLy50ZXN0KGNoYXIpOwoKCQkJaWYgKGNoYXIgPT09ICdbJykgewoJCQkJc3RhdGUuaW5kZW50YXRpb24rKzsKCQkJfSBlbHNlIGlmIChjaGFyID09PSAnXScpIHsKCQkJCXN0YXRlLmluZGVudGF0aW9uID0gTWF0aC5tYXgoMCwgc3RhdGUuaW5kZW50YXRpb24gLSAxKTsKCQkJfQoKCQl9IGVsc2UgaWYgKHNwZWNpYWxDaGFycy50ZXN0KGNoYXIpKSB7CgkJCXN0cmVhbS5lYXRXaGlsZShzcGVjaWFsQ2hhcnMpOwoJCQl0b2tlbi5uYW1lID0gJ29wZXJhdG9yJzsKCQkJdG9rZW4uZW9zID0gY2hhciAhPT0gJzsnOyAvLyA7IGNhc2NhZGVkIG1lc3NhZ2UgZXhwcmVzc2lvbgoKCQl9IGVsc2UgaWYgKC9cZC8udGVzdChjaGFyKSkgewoJCQlzdHJlYW0uZWF0V2hpbGUoL1tcd1xkXS8pOwoJCQl0b2tlbi5uYW1lID0gJ251bWJlcicKCgkJfSBlbHNlIGlmICgvW1x3X10vLnRlc3QoY2hhcikpIHsKCQkJc3RyZWFtLmVhdFdoaWxlKC9bXHdcZF9dLyk7CgkJCXRva2VuLm5hbWUgPSBzdGF0ZS5leHBlY3RWYXJpYWJsZSA/IChrZXl3b3Jkcy50ZXN0KHN0cmVhbS5jdXJyZW50KCkpID8gJ2tleXdvcmQnIDogJ3ZhcmlhYmxlJykgOiBudWxsOwoKCQl9IGVsc2UgewoJCQl0b2tlbi5lb3MgPSBzdGF0ZS5leHBlY3RWYXJpYWJsZTsKCQl9CgoJCXJldHVybiB0b2tlbjsKCX07CgoJdmFyIG5leHRDb21tZW50ID0gZnVuY3Rpb24oc3RyZWFtLCBjb250ZXh0KSB7CgkJc3RyZWFtLmVhdFdoaWxlKC9bXiJdLyk7CgkJcmV0dXJuIG5ldyBUb2tlbignY29tbWVudCcsIHN0cmVhbS5lYXQoJyInKSA/IGNvbnRleHQucGFyZW50IDogY29udGV4dCwgdHJ1ZSk7Cgl9OwoKCXZhciBuZXh0U3RyaW5nID0gZnVuY3Rpb24oc3RyZWFtLCBjb250ZXh0KSB7CgkJc3RyZWFtLmVhdFdoaWxlKC9bXiddLyk7CgkJcmV0dXJuIG5ldyBUb2tlbignc3RyaW5nJywgc3RyZWFtLmVhdCgnXCcnKSA/IGNvbnRleHQucGFyZW50IDogY29udGV4dCwgZmFsc2UpOwoJfTsKCgl2YXIgbmV4dFRlbXBvcmFyaWVzID0gZnVuY3Rpb24oc3RyZWFtLCBjb250ZXh0LCBzdGF0ZSkgewoJCXZhciB0b2tlbiA9IG5ldyBUb2tlbihudWxsLCBjb250ZXh0LCBmYWxzZSk7CgkJdmFyIGNoYXIgPSBzdHJlYW0ubmV4dCgpOwoKCQlpZiAoY2hhciA9PT0gJ3wnKSB7CgkJCXRva2VuLmNvbnRleHQgPSBjb250ZXh0LnBhcmVudDsKCQkJdG9rZW4uZW9zID0gdHJ1ZTsKCgkJfSBlbHNlIHsKCQkJc3RyZWFtLmVhdFdoaWxlKC9bXnxdLyk7CgkJCXRva2VuLm5hbWUgPSAndmFyaWFibGUnOwoJCX0KCgkJcmV0dXJuIHRva2VuOwoJfQoKCXJldHVybiB7CgkJc3RhcnRTdGF0ZTogZnVuY3Rpb24oKSB7CgkJCXJldHVybiBuZXcgU3RhdGU7CgkJfSwKCgkJdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKCQkJc3RhdGUudXNlckluZGVudChzdHJlYW0uaW5kZW50YXRpb24oKSk7CgoJCQlpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHsKCQkJCXJldHVybiBudWxsOwoJCQl9CgoJCQl2YXIgdG9rZW4gPSBzdGF0ZS5jb250ZXh0Lm5leHQoc3RyZWFtLCBzdGF0ZS5jb250ZXh0LCBzdGF0ZSk7CgkJCXN0YXRlLmNvbnRleHQgPSB0b2tlbi5jb250ZXh0OwoJCQlzdGF0ZS5leHBlY3RWYXJpYWJsZSA9IHRva2VuLmVvczsKCgkJCXN0YXRlLmxhc3RUb2tlbiA9IHRva2VuOwoJCQlyZXR1cm4gdG9rZW4ubmFtZTsKCQl9LAoKCQlibGFua0xpbmU6IGZ1bmN0aW9uKHN0YXRlKSB7CgkJCXN0YXRlLnVzZXJJbmRlbnQoMCk7CgkJfSwKCgkJaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7CgkJCXZhciBpID0gc3RhdGUuY29udGV4dC5uZXh0ID09PSBuZXh0ICYmIHRleHRBZnRlciAmJiB0ZXh0QWZ0ZXIuY2hhckF0KDApID09PSAnXScgPyAtMSA6IHN0YXRlLnVzZXJJbmRlbnRhdGlvbkRlbHRhOwoJCQlyZXR1cm4gKHN0YXRlLmluZGVudGF0aW9uICsgaSkgKiBjb25maWcuaW5kZW50VW5pdDsKCQl9LAoKCQllbGVjdHJpY0NoYXJzOiAnXScKCX07Cgp9KTsKCkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgndGV4dC94LXN0c3JjJywge25hbWU6ICdzbWFsbHRhbGsnfSk7]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/sparql/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/sparql/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFNQQVJRTCBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0ic3BhcnFsLmpzIj48L3NjcmlwdD4KICAgIDxzdHlsZT4uQ29kZU1pcnJvciB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7fTwvc3R5bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2RvYy9kb2NzLmNzcyI+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3I6IFNQQVJRTCBtb2RlPC9oMT4KICAgIDxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+ClBSRUZJWCBhOiAmbHQ7aHR0cDovL3d3dy53My5vcmcvMjAwMC8xMC9hbm5vdGF0aW9uLW5zIz4KUFJFRklYIGRjOiAmbHQ7aHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8+ClBSRUZJWCBmb2FmOiAmbHQ7aHR0cDovL3htbG5zLmNvbS9mb2FmLzAuMS8+CgojIENvbW1lbnQhCgpTRUxFQ1QgP2dpdmVuID9mYW1pbHkKV0hFUkUgewogID9hbm5vdCBhOmFubm90YXRlcyAmbHQ7aHR0cDovL3d3dy53My5vcmcvVFIvcmRmLXNwYXJxbC1xdWVyeS8+IC4KICA/YW5ub3QgZGM6Y3JlYXRvciA/YyAuCiAgT1BUSU9OQUwgez9jIGZvYWY6Z2l2ZW4gP2dpdmVuIDsKICAgICAgICAgICAgICAgZm9hZjpmYW1pbHkgP2ZhbWlseSB9IC4KICBGSUxURVIgaXNCbGFuayg/YykKfQo8L3RleHRhcmVhPjwvZm9ybT4KICAgIDxzY3JpcHQ+CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7CiAgICAgICAgbW9kZTogImFwcGxpY2F0aW9uL3gtc3BhcnFsLXF1ZXJ5IiwKICAgICAgICB0YWJNb2RlOiAiaW5kZW50IiwKICAgICAgICBtYXRjaEJyYWNrZXRzOiB0cnVlCiAgICAgIH0pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPmFwcGxpY2F0aW9uL3gtc3BhcnFsLXF1ZXJ5PC9jb2RlPi48L3A+CgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/sparql/sparql.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJzcGFycWwiLCBmdW5jdGlvbihjb25maWcpIHsKICB2YXIgaW5kZW50VW5pdCA9IGNvbmZpZy5pbmRlbnRVbml0OwogIHZhciBjdXJQdW5jOwoKICBmdW5jdGlvbiB3b3JkUmVnZXhwKHdvcmRzKSB7CiAgICByZXR1cm4gbmV3IFJlZ0V4cCgiXig/OiIgKyB3b3Jkcy5qb2luKCJ8IikgKyAiKSQiLCAiaSIpOwogIH0KICB2YXIgb3BzID0gd29yZFJlZ2V4cChbInN0ciIsICJsYW5nIiwgImxhbmdtYXRjaGVzIiwgImRhdGF0eXBlIiwgImJvdW5kIiwgInNhbWV0ZXJtIiwgImlzaXJpIiwgImlzdXJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgImlzYmxhbmsiLCAiaXNsaXRlcmFsIiwgInVuaW9uIiwgImEiXSk7CiAgdmFyIGtleXdvcmRzID0gd29yZFJlZ2V4cChbImJhc2UiLCAicHJlZml4IiwgInNlbGVjdCIsICJkaXN0aW5jdCIsICJyZWR1Y2VkIiwgImNvbnN0cnVjdCIsICJkZXNjcmliZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFzayIsICJmcm9tIiwgIm5hbWVkIiwgIndoZXJlIiwgIm9yZGVyIiwgImxpbWl0IiwgIm9mZnNldCIsICJmaWx0ZXIiLCAib3B0aW9uYWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJncmFwaCIsICJieSIsICJhc2MiLCAiZGVzYyJdKTsKICB2YXIgb3BlcmF0b3JDaGFycyA9IC9bKitcLTw+PSZ8XS87CgogIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgY3VyUHVuYyA9IG51bGw7CiAgICBpZiAoY2ggPT0gIiQiIHx8IGNoID09ICI/IikgewogICAgICBzdHJlYW0ubWF0Y2goL15bXHdcZF0qLyk7CiAgICAgIHJldHVybiAidmFyaWFibGUtMiI7CiAgICB9CiAgICBlbHNlIGlmIChjaCA9PSAiPCIgJiYgIXN0cmVhbS5tYXRjaCgvXltcc1x1MDBhMD1dLywgZmFsc2UpKSB7CiAgICAgIHN0cmVhbS5tYXRjaCgvXlteXHNcdTAwYTA+XSo+Py8pOwogICAgICByZXR1cm4gImF0b20iOwogICAgfQogICAgZWxzZSBpZiAoY2ggPT0gIlwiIiB8fCBjaCA9PSAiJyIpIHsKICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkxpdGVyYWwoY2gpOwogICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICB9CiAgICBlbHNlIGlmICgvW3t9XChcKSxcLjtcW1xdXS8udGVzdChjaCkpIHsKICAgICAgY3VyUHVuYyA9IGNoOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGVsc2UgaWYgKGNoID09ICIjIikgewogICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgIHJldHVybiAiY29tbWVudCI7CiAgICB9CiAgICBlbHNlIGlmIChvcGVyYXRvckNoYXJzLnRlc3QoY2gpKSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZShvcGVyYXRvckNoYXJzKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBlbHNlIGlmIChjaCA9PSAiOiIpIHsKICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcZFwuX1wtXS8pOwogICAgICByZXR1cm4gImF0b20iOwogICAgfQogICAgZWxzZSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW19cd1xkXS8pOwogICAgICBpZiAoc3RyZWFtLmVhdCgiOiIpKSB7CiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcZF9cLV0vKTsKICAgICAgICByZXR1cm4gImF0b20iOwogICAgICB9CiAgICAgIHZhciB3b3JkID0gc3RyZWFtLmN1cnJlbnQoKSwgdHlwZTsKICAgICAgaWYgKG9wcy50ZXN0KHdvcmQpKQogICAgICAgIHJldHVybiBudWxsOwogICAgICBlbHNlIGlmIChrZXl3b3Jkcy50ZXN0KHdvcmQpKQogICAgICAgIHJldHVybiAia2V5d29yZCI7CiAgICAgIGVsc2UKICAgICAgICByZXR1cm4gInZhcmlhYmxlIjsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHRva2VuTGl0ZXJhbChxdW90ZSkgewogICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgY2g7CiAgICAgIHdoaWxlICgoY2ggPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgICAgaWYgKGNoID09IHF1b3RlICYmICFlc2NhcGVkKSB7CiAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBlc2NhcGVkID0gIWVzY2FwZWQgJiYgY2ggPT0gIlxcIjsKICAgICAgfQogICAgICByZXR1cm4gInN0cmluZyI7CiAgICB9OwogIH0KCiAgZnVuY3Rpb24gcHVzaENvbnRleHQoc3RhdGUsIHR5cGUsIGNvbCkgewogICAgc3RhdGUuY29udGV4dCA9IHtwcmV2OiBzdGF0ZS5jb250ZXh0LCBpbmRlbnQ6IHN0YXRlLmluZGVudCwgY29sOiBjb2wsIHR5cGU6IHR5cGV9OwogIH0KICBmdW5jdGlvbiBwb3BDb250ZXh0KHN0YXRlKSB7CiAgICBzdGF0ZS5pbmRlbnQgPSBzdGF0ZS5jb250ZXh0LmluZGVudDsKICAgIHN0YXRlLmNvbnRleHQgPSBzdGF0ZS5jb250ZXh0LnByZXY7CiAgfQoKICByZXR1cm4gewogICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oYmFzZSkgewogICAgICByZXR1cm4ge3Rva2VuaXplOiB0b2tlbkJhc2UsCiAgICAgICAgICAgICAgY29udGV4dDogbnVsbCwKICAgICAgICAgICAgICBpbmRlbnQ6IDAsCiAgICAgICAgICAgICAgY29sOiAwfTsKICAgIH0sCgogICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgaWYgKHN0cmVhbS5zb2woKSkgewogICAgICAgIGlmIChzdGF0ZS5jb250ZXh0ICYmIHN0YXRlLmNvbnRleHQuYWxpZ24gPT0gbnVsbCkgc3RhdGUuY29udGV4dC5hbGlnbiA9IGZhbHNlOwogICAgICAgIHN0YXRlLmluZGVudCA9IHN0cmVhbS5pbmRlbnRhdGlvbigpOwogICAgICB9CiAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7CiAgICAgIHZhciBzdHlsZSA9IHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwoKICAgICAgaWYgKHN0eWxlICE9ICJjb21tZW50IiAmJiBzdGF0ZS5jb250ZXh0ICYmIHN0YXRlLmNvbnRleHQuYWxpZ24gPT0gbnVsbCAmJiBzdGF0ZS5jb250ZXh0LnR5cGUgIT0gInBhdHRlcm4iKSB7CiAgICAgICAgc3RhdGUuY29udGV4dC5hbGlnbiA9IHRydWU7CiAgICAgIH0KCiAgICAgIGlmIChjdXJQdW5jID09ICIoIikgcHVzaENvbnRleHQoc3RhdGUsICIpIiwgc3RyZWFtLmNvbHVtbigpKTsKICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSAiWyIpIHB1c2hDb250ZXh0KHN0YXRlLCAiXSIsIHN0cmVhbS5jb2x1bW4oKSk7CiAgICAgIGVsc2UgaWYgKGN1clB1bmMgPT0gInsiKSBwdXNoQ29udGV4dChzdGF0ZSwgIn0iLCBzdHJlYW0uY29sdW1uKCkpOwogICAgICBlbHNlIGlmICgvW1xdXH1cKV0vLnRlc3QoY3VyUHVuYykpIHsKICAgICAgICB3aGlsZSAoc3RhdGUuY29udGV4dCAmJiBzdGF0ZS5jb250ZXh0LnR5cGUgPT0gInBhdHRlcm4iKSBwb3BDb250ZXh0KHN0YXRlKTsKICAgICAgICBpZiAoc3RhdGUuY29udGV4dCAmJiBjdXJQdW5jID09IHN0YXRlLmNvbnRleHQudHlwZSkgcG9wQ29udGV4dChzdGF0ZSk7CiAgICAgIH0KICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSAiLiIgJiYgc3RhdGUuY29udGV4dCAmJiBzdGF0ZS5jb250ZXh0LnR5cGUgPT0gInBhdHRlcm4iKSBwb3BDb250ZXh0KHN0YXRlKTsKICAgICAgZWxzZSBpZiAoL2F0b218c3RyaW5nfHZhcmlhYmxlLy50ZXN0KHN0eWxlKSAmJiBzdGF0ZS5jb250ZXh0KSB7CiAgICAgICAgaWYgKC9bXH1cXV0vLnRlc3Qoc3RhdGUuY29udGV4dC50eXBlKSkKICAgICAgICAgIHB1c2hDb250ZXh0KHN0YXRlLCAicGF0dGVybiIsIHN0cmVhbS5jb2x1bW4oKSk7CiAgICAgICAgZWxzZSBpZiAoc3RhdGUuY29udGV4dC50eXBlID09ICJwYXR0ZXJuIiAmJiAhc3RhdGUuY29udGV4dC5hbGlnbikgewogICAgICAgICAgc3RhdGUuY29udGV4dC5hbGlnbiA9IHRydWU7CiAgICAgICAgICBzdGF0ZS5jb250ZXh0LmNvbCA9IHN0cmVhbS5jb2x1bW4oKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIHJldHVybiBzdHlsZTsKICAgIH0sCgogICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7CiAgICAgIHZhciBmaXJzdENoYXIgPSB0ZXh0QWZ0ZXIgJiYgdGV4dEFmdGVyLmNoYXJBdCgwKTsKICAgICAgdmFyIGNvbnRleHQgPSBzdGF0ZS5jb250ZXh0OwogICAgICBpZiAoL1tcXVx9XS8udGVzdChmaXJzdENoYXIpKQogICAgICAgIHdoaWxlIChjb250ZXh0ICYmIGNvbnRleHQudHlwZSA9PSAicGF0dGVybiIpIGNvbnRleHQgPSBjb250ZXh0LnByZXY7CgogICAgICB2YXIgY2xvc2luZyA9IGNvbnRleHQgJiYgZmlyc3RDaGFyID09IGNvbnRleHQudHlwZTsKICAgICAgaWYgKCFjb250ZXh0KQogICAgICAgIHJldHVybiAwOwogICAgICBlbHNlIGlmIChjb250ZXh0LnR5cGUgPT0gInBhdHRlcm4iKQogICAgICAgIHJldHVybiBjb250ZXh0LmNvbDsKICAgICAgZWxzZSBpZiAoY29udGV4dC5hbGlnbikKICAgICAgICByZXR1cm4gY29udGV4dC5jb2wgKyAoY2xvc2luZyA/IDAgOiAxKTsKICAgICAgZWxzZQogICAgICAgIHJldHVybiBjb250ZXh0LmluZGVudCArIChjbG9zaW5nID8gMCA6IGluZGVudFVuaXQpOwogICAgfQogIH07Cn0pOwoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJhcHBsaWNhdGlvbi94LXNwYXJxbC1xdWVyeSIsICJzcGFycWwiKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/stex/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/stex/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IHNUZVggbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9InN0ZXguanMiPjwvc2NyaXB0PgogICAgPHN0eWxlPi5Db2RlTWlycm9yIHtiYWNrZ3JvdW5kOiAjZjhmOGY4O308L3N0eWxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBzVGVYIG1vZGU8L2gxPgogICAgIDxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+ClxiZWdpbnttb2R1bGV9W2lkPWJidC1zaXplXQpcaW1wb3J0bW9kdWxlW2JhbGFuY2VkLWJpbmFyeS10cmVlc117YmFsYW5jZWQtYmluYXJ5LXRyZWVzfQpcaW1wb3J0bW9kdWxlW1xLV0FSQ3NsaWRlc3tkbWF0aC9lbi9jYXJkaW5hbGl0eX1de2NhcmRpbmFsaXR5fQoKXGJlZ2lue2ZyYW1lfQogIFxmcmFtZXRpdGxle1NpemUgTGVtbWEgZm9yIEJhbGFuY2VkIFRyZWVzfQogIFxiZWdpbntpdGVtaXplfQogIFxpdGVtCiAgICBcYmVnaW57YXNzZXJ0aW9ufVtpZD1zaXplLWxlbW1hLHR5cGU9bGVtbWFdIAogICAgTGV0ICRHPVx0dXB7VixFfSQgYmUgYSBcdGVybXJlZltjZD1iaW5hcnktdHJlZXNde2JhbGFuY2VkIGJpbmFyeSB0cmVlfSAKICAgIG9mIFx0ZXJtcmVmW2NkPWdyYXBoLWRlcHRoLG5hbWU9dmVydGV4LWRlcHRoXXtkZXB0aH0kbj5pJCwgdGhlbiB0aGUgc2V0CiAgICAgJFxkZWZlcXtcbGl2YXJ7Vn1pfXtcc2V0c3R7XGluc2V0e3Z9e1Z9fXtcZ2RlcHRoe3Z9ID0gaX19JCBvZgogICAgXHRlcm1yZWZbY2Q9Z3JhcGhzLWludHJvLG5hbWU9bm9kZV17bm9kZXN9IGF0IAogICAgXHRlcm1yZWZbY2Q9Z3JhcGgtZGVwdGgsbmFtZT12ZXJ0ZXgtZGVwdGhde2RlcHRofSAkaSQgaGFzCiAgICBcdGVybXJlZltjZD1jYXJkaW5hbGl0eSxuYW1lPWNhcmRpbmFsaXR5XXtjYXJkaW5hbGl0eX0gJFxwb3dlcjJpJC4KICAgXGVuZHthc3NlcnRpb259CiAgXGl0ZW0KICAgIFxiZWdpbntzcHJvb2Z9W2lkPXNpemUtbGVtbWEtcGYscHJvb2ZlbmQ9LGZvcj1zaXplLWxlbW1hXXt2aWEgaW5kdWN0aW9uIG92ZXIgdGhlIGRlcHRoICRpJC59CiAgICAgIFxiZWdpbntzcGZjYXNlc317V2UgaGF2ZSB0byBjb25zaWRlciB0d28gY2FzZXN9CiAgICAgICAgXGJlZ2lue3NwZmNhc2V9eyRpPTAkfQogICAgICAgICAgXGJlZ2lue3NwZnN0ZXB9W2Rpc3BsYXk9Zmxvd10KICAgICAgICAgICAgdGhlbiAkXGxpdmFye1Z9aT1cc2V0e1xsaXZhcnt2fXJ9JCwgd2hlcmUgJFxsaXZhcnt2fXIkIGlzIHRoZSByb290LCBzbwogICAgICAgICAgICAkXGVxe1xjYXJke1xsaXZhcntWfTB9LFxjYXJke1xzZXR7XGxpdmFye3Z9cn19LDEsXHBvd2VyMjB9JC4KICAgICAgICAgIFxlbmR7c3Bmc3RlcH0KICAgICAgICBcZW5ke3NwZmNhc2V9CiAgICAgICAgXGJlZ2lue3NwZmNhc2V9eyRpPjAkfQogICAgICAgICAgXGJlZ2lue3NwZnN0ZXB9W2Rpc3BsYXk9Zmxvd10KICAgICAgICAgICB0aGVuICRcbGl2YXJ7Vn17aS0xfSQgY29udGFpbnMgJFxwb3dlcjJ7aS0xfSQgdmVydGV4ZXMgCiAgICAgICAgICAgXGJlZ2lue2p1c3RpZmljYXRpb259W21ldGhvZD1ieUlIXShJSClcZW5ke2p1c3RpZmljYXRpb259CiAgICAgICAgICBcZW5ke3NwZnN0ZXB9CiAgICAgICAgICBcYmVnaW57c3Bmc3RlcH0KICAgICAgICAgICBCeSB0aGUgXGJlZ2lue2p1c3RpZmljYXRpb259W21ldGhvZD1ieURlZl1kZWZpbml0aW9uIG9mIGEgYmluYXJ5CiAgICAgICAgICAgICAgdHJlZVxlbmR7anVzdGlmaWNhdGlvbn0sIGVhY2ggJFxpbnNldHt2fXtcbGl2YXJ7Vn17aS0xfX0kIGlzIGEgbGVhZiBvciBoYXMKICAgICAgICAgICAgdHdvIGNoaWxkcmVuIHRoYXQgYXJlIGF0IGRlcHRoICRpJC4KICAgICAgICAgIFxlbmR7c3Bmc3RlcH0KICAgICAgICAgIFxiZWdpbntzcGZzdGVwfQogICAgICAgICAgIEFzICRHJCBpcyBcdGVybXJlZltjZD1iYWxhbmNlZC1iaW5hcnktdHJlZXMsbmFtZT1iYWxhbmNlZC1iaW5hcnktdHJlZV17YmFsYW5jZWR9IGFuZCAkXGdkZXB0aHtHfT1uPmkkLCAkXGxpdmFye1Z9e2ktMX0kIGNhbm5vdCBjb250YWluCiAgICAgICAgICAgIGxlYXZlcy4KICAgICAgICAgIFxlbmR7c3Bmc3RlcH0KICAgICAgICAgIFxiZWdpbntzcGZzdGVwfVt0eXBlPWNvbmNsdXNpb25dCiAgICAgICAgICAgVGh1cyAkXGVxe1xjYXJke1xsaXZhcntWfWl9LHtcYXRpbWVzW2Nkb3RdezIsXGNhcmR7XGxpdmFye1Z9e2ktMX19fX0se1xhdGltZXNbY2RvdF17MixccG93ZXIye2ktMX19fSxccG93ZXIyaX0kLgogICAgICAgICAgXGVuZHtzcGZzdGVwfQogICAgICAgIFxlbmR7c3BmY2FzZX0KICAgICAgXGVuZHtzcGZjYXNlc30KICAgIFxlbmR7c3Byb29mfQogIFxpdGVtIAogICAgXGJlZ2lue2Fzc2VydGlvbn1baWQ9ZmJidCx0eXBlPWNvcm9sbGFyeV0JCiAgICAgIEEgZnVsbHkgYmFsYW5jZWQgdHJlZSBvZiBkZXB0aCAkZCQgaGFzICRccG93ZXIye2QrMX0tMSQgbm9kZXMuCiAgICBcZW5ke2Fzc2VydGlvbn0KICBcaXRlbQogICAgICBcYmVnaW57c3Byb29mfVtmb3I9ZmJidCxpZD1mYmJ0LXBmXXt9CiAgICAgICAgXGJlZ2lue3NwZnN0ZXB9CiAgICAgICAgICBMZXQgJFxkZWZlcXtHfXtcdHVwe1YsRX19JCBiZSBhIGZ1bGx5IGJhbGFuY2VkIHRyZWUKICAgICAgICBcZW5ke3NwZnN0ZXB9CiAgICAgICAgXGJlZ2lue3NwZnN0ZXB9CiAgICAgICAgICBUaGVuICRcY2FyZHtWfT1cU3VtZnJvbXRve2l9MWR7XHBvd2VyMml9PSBccG93ZXIye2QrMX0tMSQuCiAgICAgICAgXGVuZHtzcGZzdGVwfQogICAgICBcZW5ke3Nwcm9vZn0KICAgIFxlbmR7aXRlbWl6ZX0KICBcZW5ke2ZyYW1lfQpcYmVnaW57bm90ZX0KICBcYmVnaW57b210ZXh0fVt0eXBlPWNvbmNsdXNpb24sZm9yPWJpbmFyeS10cmVlXQogICAgVGhpcyBzaG93cyB0aGF0IGJhbGFuY2VkIGJpbmFyeSB0cmVlcyBncm93IGluIGJyZWFkdGggdmVyeSBxdWlja2x5LCBhIGNvbnNlcXVlbmNlIG9mCiAgICB0aGlzIGlzIHRoYXQgdGhleSBhcmUgdmVyeSBzaGFsbG93IChhbmQgdGhpcyBjb21wdXRlIHZlcnkgZmFzdCksIHdoaWNoIGlzIHRoZSBlc3NlbmNlIG9mCiAgICB0aGUgbmV4dCByZXN1bHQuCiAgXGVuZHtvbXRleHR9ClxlbmR7bm90ZX0KXGVuZHttb2R1bGV9CgolJSUgTG9jYWwgVmFyaWFibGVzOiAKJSUlIG1vZGU6IExhVGVYCiUlJSBUZVgtbWFzdGVyOiAiYWxsIgolJSUgRW5kOiBcZW5ke2RvY3VtZW50fQo8L3RleHRhcmVhPjwvZm9ybT4KICAgIDxzY3JpcHQ+CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7fSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD48c3Ryb25nPk1JTUUgdHlwZXMgZGVmaW5lZDo8L3N0cm9uZz4gPGNvZGU+dGV4dC9zdGV4PC9jb2RlPi48L3A+CgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/stex/stex.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKICogQXV0aG9yOiBDb25zdGFudGluIEp1Y292c2NoaSAoYy5qdWNvdnNjaGlAamFjb2JzLXVuaXZlcnNpdHkuZGUpCiAqIExpY2VuY2U6IE1JVAogKi8KCkNvZGVNaXJyb3IuZGVmaW5lTW9kZSgic3RleCIsIGZ1bmN0aW9uKGNtQ2ZnLCBtb2RlQ2ZnKSAKeyAgICAKICAgIGZ1bmN0aW9uIHB1c2hDb21tYW5kKHN0YXRlLCBjb21tYW5kKSB7CglzdGF0ZS5jbWRTdGF0ZS5wdXNoKGNvbW1hbmQpOwogICAgfQoKICAgIGZ1bmN0aW9uIHBlZWtDb21tYW5kKHN0YXRlKSB7IAoJaWYgKHN0YXRlLmNtZFN0YXRlLmxlbmd0aD4wKQoJICAgIHJldHVybiBzdGF0ZS5jbWRTdGF0ZVtzdGF0ZS5jbWRTdGF0ZS5sZW5ndGgtMV07CgllbHNlCgkgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgZnVuY3Rpb24gcG9wQ29tbWFuZChzdGF0ZSkgewoJaWYgKHN0YXRlLmNtZFN0YXRlLmxlbmd0aD4wKSB7CgkgICAgdmFyIHBsdWcgPSBzdGF0ZS5jbWRTdGF0ZS5wb3AoKTsKCSAgICBwbHVnLmNsb3NlQnJhY2tldCgpOwoJfQkgICAgCiAgICB9CgogICAgZnVuY3Rpb24gYXBwbHlNb3N0UG93ZXJmdWwoc3RhdGUpIHsKICAgICAgdmFyIGNvbnRleHQgPSBzdGF0ZS5jbWRTdGF0ZTsKICAgICAgZm9yICh2YXIgaSA9IGNvbnRleHQubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKCSAgdmFyIHBsdWcgPSBjb250ZXh0W2ldOwoJICBpZiAocGx1Zy5uYW1lPT0iREVGQVVMVCIpCgkgICAgICBjb250aW51ZTsKCSAgcmV0dXJuIHBsdWcuc3R5bGVJZGVudGlmaWVyKCk7CiAgICAgIH0KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgZnVuY3Rpb24gYWRkUGx1Z2luUGF0dGVybihwbHVnaW5OYW1lLCBjbWRTdHlsZSwgYnJhY2tldHMsIHN0eWxlcykgewoJcmV0dXJuIGZ1bmN0aW9uICgpIHsKCSAgICB0aGlzLm5hbWU9cGx1Z2luTmFtZTsKCSAgICB0aGlzLmJyYWNrZXRObyA9IDA7CgkgICAgdGhpcy5zdHlsZT1jbWRTdHlsZTsKCSAgICB0aGlzLnN0eWxlcyA9IHN0eWxlczsKCSAgICB0aGlzLmJyYWNrZXRzID0gYnJhY2tldHM7CgoJICAgIHRoaXMuc3R5bGVJZGVudGlmaWVyID0gZnVuY3Rpb24oY29udGVudCkgewoJCWlmICh0aGlzLmJyYWNrZXRObzw9dGhpcy5zdHlsZXMubGVuZ3RoKQoJCSAgICByZXR1cm4gdGhpcy5zdHlsZXNbdGhpcy5icmFja2V0Tm8tMV07CgkJZWxzZQoJCSAgICByZXR1cm4gbnVsbDsKCSAgICB9OwoJICAgIHRoaXMub3BlbkJyYWNrZXQgPSBmdW5jdGlvbihjb250ZW50KSB7CgkJdGhpcy5icmFja2V0Tm8rKzsKCQlyZXR1cm4gImJyYWNrZXQiOwoJICAgIH07CgkgICAgdGhpcy5jbG9zZUJyYWNrZXQgPSBmdW5jdGlvbihjb250ZW50KSB7CgkgICAgfTsKCX0KICAgIH0KCiAgICB2YXIgcGx1Z2lucyA9IG5ldyBBcnJheSgpOwogICAKICAgIHBsdWdpbnNbImltcG9ydG1vZHVsZSJdID0gYWRkUGx1Z2luUGF0dGVybigiaW1wb3J0bW9kdWxlIiwgInRhZyIsICJ7WyIsIFsic3RyaW5nIiwgImJ1aWx0aW4iXSk7CiAgICBwbHVnaW5zWyJkb2N1bWVudGNsYXNzIl0gPSBhZGRQbHVnaW5QYXR0ZXJuKCJkb2N1bWVudGNsYXNzIiwgInRhZyIsICJ7WyIsIFsiIiwgImF0b20iXSk7CiAgICBwbHVnaW5zWyJ1c2VwYWNrYWdlIl0gPSBhZGRQbHVnaW5QYXR0ZXJuKCJkb2N1bWVudGNsYXNzIiwgInRhZyIsICJbIiwgWyJhdG9tIl0pOwogICAgcGx1Z2luc1siYmVnaW4iXSA9IGFkZFBsdWdpblBhdHRlcm4oImRvY3VtZW50Y2xhc3MiLCAidGFnIiwgIlsiLCBbImF0b20iXSk7CiAgICBwbHVnaW5zWyJlbmQiXSA9IGFkZFBsdWdpblBhdHRlcm4oImRvY3VtZW50Y2xhc3MiLCAidGFnIiwgIlsiLCBbImF0b20iXSk7CgogICAgcGx1Z2luc1siREVGQVVMVCJdID0gZnVuY3Rpb24gKCkgewoJdGhpcy5uYW1lPSJERUZBVUxUIjsKCXRoaXMuc3R5bGU9InRhZyI7CgoJdGhpcy5zdHlsZUlkZW50aWZpZXIgPSBmdW5jdGlvbihjb250ZW50KSB7Cgl9OwoJdGhpcy5vcGVuQnJhY2tldCA9IGZ1bmN0aW9uKGNvbnRlbnQpIHsKCX07Cgl0aGlzLmNsb3NlQnJhY2tldCA9IGZ1bmN0aW9uKGNvbnRlbnQpIHsKCX07CiAgICB9OwoKICAgIGZ1bmN0aW9uIHNldFN0YXRlKHN0YXRlLCBmKSB7CglzdGF0ZS5mID0gZjsKICAgIH0KCiAgICBmdW5jdGlvbiBub3JtYWwoc291cmNlLCBzdGF0ZSkgewoJaWYgKHNvdXJjZS5tYXRjaCgvXlxcW2Etel0rLykpIHsKCSAgICB2YXIgY21kTmFtZSA9IHNvdXJjZS5jdXJyZW50KCk7CgkgICAgY21kTmFtZSA9IGNtZE5hbWUuc3Vic3RyKDEsIGNtZE5hbWUubGVuZ3RoLTEpOwoJICAgIHZhciBwbHVnID0gcGx1Z2luc1tjbWROYW1lXTsKCSAgICBpZiAodHlwZW9mKHBsdWcpID09ICd1bmRlZmluZWQnKSB7CgkJcGx1ZyA9IHBsdWdpbnNbIkRFRkFVTFQiXTsKCSAgICB9CgkgICAgcGx1ZyA9IG5ldyBwbHVnKCk7CgkgICAgcHVzaENvbW1hbmQoc3RhdGUsIHBsdWcpOwoJICAgIHNldFN0YXRlKHN0YXRlLCBiZWdpblBhcmFtcyk7CgkgICAgcmV0dXJuIHBsdWcuc3R5bGU7Cgl9CgoJdmFyIGNoID0gc291cmNlLm5leHQoKTsKCWlmIChjaCA9PSAiJSIpIHsKCSAgICBzZXRTdGF0ZShzdGF0ZSwgaW5DQ29tbWVudCk7CgkgICAgcmV0dXJuICJjb21tZW50IjsKCX0gCgllbHNlIGlmIChjaD09J30nIHx8IGNoPT0nXScpIHsKCSAgICBwbHVnID0gcGVla0NvbW1hbmQoc3RhdGUpOwoJICAgIGlmIChwbHVnKSB7CgkJcGx1Zy5jbG9zZUJyYWNrZXQoY2gpOwoJCXNldFN0YXRlKHN0YXRlLCBiZWdpblBhcmFtcyk7CgkgICAgfSBlbHNlCgkJcmV0dXJuICJlcnJvciI7CgkgICAgcmV0dXJuICJicmFja2V0IjsKCX0gZWxzZSBpZiAoY2g9PSd7JyB8fCBjaD09J1snKSB7CgkgICAgcGx1ZyA9IHBsdWdpbnNbIkRFRkFVTFQiXTsJICAgIAoJICAgIHBsdWcgPSBuZXcgcGx1ZygpOwoJICAgIHB1c2hDb21tYW5kKHN0YXRlLCBwbHVnKTsKCSAgICByZXR1cm4gImJyYWNrZXQiOwkgICAgCgl9CgllbHNlIGlmICgvXGQvLnRlc3QoY2gpKSB7CgkgICAgc291cmNlLmVhdFdoaWxlKC9bXHcuJV0vKTsKCSAgICByZXR1cm4gImF0b20iOwoJfQoJZWxzZSB7CgkgICAgc291cmNlLmVhdFdoaWxlKC9bXHctX10vKTsKCSAgICByZXR1cm4gYXBwbHlNb3N0UG93ZXJmdWwoc3RhdGUpOwoJfQogICAgfQoKICAgIGZ1bmN0aW9uIGluQ0NvbW1lbnQoc291cmNlLCBzdGF0ZSkgewoJc291cmNlLnNraXBUb0VuZCgpOwoJc2V0U3RhdGUoc3RhdGUsIG5vcm1hbCk7CglyZXR1cm4gImNvbW1lbnQiOwogICAgfQoKICAgIGZ1bmN0aW9uIGJlZ2luUGFyYW1zKHNvdXJjZSwgc3RhdGUpIHsKCXZhciBjaCA9IHNvdXJjZS5wZWVrKCk7CglpZiAoY2ggPT0gJ3snIHx8IGNoID09ICdbJykgewoJICAgdmFyIGxhc3RQbHVnID0gcGVla0NvbW1hbmQoc3RhdGUpOwoJICAgdmFyIHN0eWxlID0gbGFzdFBsdWcub3BlbkJyYWNrZXQoY2gpOwoJICAgc291cmNlLmVhdChjaCk7CgkgICBzZXRTdGF0ZShzdGF0ZSwgbm9ybWFsKTsKCSAgIHJldHVybiAiYnJhY2tldCI7Cgl9CglpZiAoL1sgXHRccl0vLnRlc3QoY2gpKSB7CgkgICAgc291cmNlLmVhdChjaCk7CgkgICAgcmV0dXJuIG51bGw7Cgl9CglzZXRTdGF0ZShzdGF0ZSwgbm9ybWFsKTsKCWxhc3RQbHVnID0gcGVla0NvbW1hbmQoc3RhdGUpOwoJaWYgKGxhc3RQbHVnKSB7CgkgICAgcG9wQ29tbWFuZChzdGF0ZSk7Cgl9CiAgICAgICAgcmV0dXJuIG5vcm1hbChzb3VyY2UsIHN0YXRlKTsKICAgIH0KCiAgICByZXR1cm4gewogICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkgeyByZXR1cm4geyBmOm5vcm1hbCwgY21kU3RhdGU6W10gfTsgfSwKCSBjb3B5U3RhdGU6IGZ1bmN0aW9uKHMpIHsgcmV0dXJuIHsgZjogcy5mLCBjbWRTdGF0ZTogcy5jbWRTdGF0ZS5zbGljZSgwLCBzLmNtZFN0YXRlLmxlbmd0aCkgfTsgfSwKCSAKCSB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewoJIHZhciB0ID0gc3RhdGUuZihzdHJlYW0sIHN0YXRlKTsKCSB2YXIgdyA9IHN0cmVhbS5jdXJyZW50KCk7CgkgcmV0dXJuIHQ7CiAgICAgfQogfTsKfSk7CgoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtc3RleCIsICJzdGV4Iik7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/tiddlywiki/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/tiddlywiki/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFRpZGRseVdpa2kgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9InRpZGRseXdpa2kuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJ0aWRkbHl3aWtpLmNzcyI+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2RvYy9kb2NzLmNzcyI+CiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPi5Db2RlTWlycm9yIHtib3JkZXItdG9wOiAxcHggc29saWQgYmxhY2s7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazt9PC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogVGlkZGx5V2lraSBtb2RlPC9oMT4KCjxkaXY+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KIVRpZGRseVdpa2kgRm9ybWF0dGluZwoqIFJlbmRlcmVkIHZlcnNpb25zIGNhbiBiZSBmb3VuZCBhdDogaHR0cDovL3d3dy50aWRkbHl3aWtpLmNvbS8jUmVmZXJlbmNlCgp8IU9wdGlvbnwhU3ludGF4fCFPdXRwdXR8Cnxib2xkIGZvbnR8e3t7Jydib2xkJyd9fX18Jydib2xkJyd8CnxpdGFsaWMgdHlwZXx7e3svL2l0YWxpYy8vfX19fC8vaXRhbGljLy98Cnx1bmRlcmxpbmVkIHRleHR8e3t7X191bmRlcmxpbmVkX199fX18X191bmRlcmxpbmVkX198CnxzdHJpa2V0aHJvdWdoIHRleHR8e3t7LS1zdHJpa2V0aHJvdWdoLS19fX18LS1zdHJpa2V0aHJvdWdoLS18CnxzdXBlcnNjcmlwdCB0ZXh0fHt7e15ec3VwZXJeXnNjcmlwdH19fXxeXnN1cGVyXl5zY3JpcHR8CnxzdWJzY3JpcHQgdGV4dHx7e3t+fnN1Yn5+c2NyaXB0fX19fH5+c3Vifn5zY3JpcHR8CnxoaWdobGlnaHRlZCB0ZXh0fHt7e0BAaGlnaGxpZ2h0ZWRAQH19fXxAQGhpZ2hsaWdodGVkQEB8CnxwcmVmb3JtYXR0ZWQgdGV4dHw8aHRtbD48Y29kZT57e3twcmVmb3JtYXR0ZWR9fX08L2NvZGU+PC9odG1sPnx7e3twcmVmb3JtYXR0ZWR9fX18CgohQmxvY2sgRWxlbWVudHMKISFIZWFkaW5ncwp7e3sKIUhlYWRpbmcgMQohIUhlYWRpbmcgMgohISFIZWFkaW5nIDMKISEhIUhlYWRpbmcgNAohISEhIUhlYWRpbmcgNQp9fX0KPDw8CgohSGVhZGluZyAxCgohIUhlYWRpbmcgMgoKISEhSGVhZGluZyAzCgohISEhSGVhZGluZyA0CgohISEhIUhlYWRpbmcgNQo8PDwKCiEhTGlzdHMKe3t7CiogdW5vcmRlcmVkIGxpc3QsIGxldmVsIDEKKiogdW5vcmRlcmVkIGxpc3QsIGxldmVsIDIKKioqIHVub3JkZXJlZCBsaXN0LCBsZXZlbCAzCgojIG9yZGVyZWQgbGlzdCwgbGV2ZWwgMQojIyBvcmRlcmVkIGxpc3QsIGxldmVsIDIKIyMjIHVub3JkZXJlZCBsaXN0LCBsZXZlbCAzCgo7IGRlZmluaXRpb24gbGlzdCwgdGVybQo6IGRlZmluaXRpb24gbGlzdCwgZGVzY3JpcHRpb24KfX19Cjw8PAoqIHVub3JkZXJlZCBsaXN0LCBsZXZlbCAxCioqIHVub3JkZXJlZCBsaXN0LCBsZXZlbCAyCioqKiB1bm9yZGVyZWQgbGlzdCwgbGV2ZWwgMwoKIyBvcmRlcmVkIGxpc3QsIGxldmVsIDEKIyMgb3JkZXJlZCBsaXN0LCBsZXZlbCAyCiMjIyB1bm9yZGVyZWQgbGlzdCwgbGV2ZWwgMwoKOyBkZWZpbml0aW9uIGxpc3QsIHRlcm0KOiBkZWZpbml0aW9uIGxpc3QsIGRlc2NyaXB0aW9uCjw8PAoKISFCbG9ja3F1b3Rlcwp7e3sKPiBibG9ja3F1b3RlLCBsZXZlbCAxCj4+IGJsb2NrcXVvdGUsIGxldmVsIDIKPj4+IGJsb2NrcXVvdGUsIGxldmVsIDMKCjw8PApibG9ja3F1b3RlCjw8PAp9fX0KPDw8Cj4gYmxvY2txdW90ZSwgbGV2ZWwgMQo+PiBibG9ja3F1b3RlLCBsZXZlbCAyCj4+PiBibG9ja3F1b3RlLCBsZXZlbCAzCgo+IGJsb2NrcXVvdGUKPDw8CgohIVByZWZvcm1hdHRlZCBUZXh0CjxodG1sPjxwcmU+Cnt7ewpwcmVmb3JtYXR0ZWQgKGUuZy4gY29kZSkKfX19CjwvcHJlPjwvaHRtbD4KPDw8Cnt7ewpwcmVmb3JtYXR0ZWQgKGUuZy4gY29kZSkKfX19Cjw8PAoKISFDb2RlIFNlY3Rpb25zCnt7ewpUZXh0IHN0eWxlIGNvZGUKfX19CgovL3t7ewpKUyBzdHlsZWQgY29kZS4gVGlkZGx5V2lraSBtaXhlZCBtb2RlIHNob3VsZCBzdXBwb3J0IGhpZ2hsaWdodGVyIHN3aXRjaGluZyBpbiB0aGUgZnV0dXJlLgovL319fQoKPCEtLXt7ey0tPgpYTUwgc3R5bGVkIGNvZGUuIFRpZGRseVdpa2kgbWl4ZWQgbW9kZSBzaG91bGQgc3VwcG9ydCBoaWdobGlnaHRlciBzd2l0Y2hpbmcgaW4gdGhlIGZ1dHVyZS4KPCEtLX19fS0tPgoKISFUYWJsZXMKe3t7CnxDc3NDbGFzc3xrCnwhaGVhZGluZyBjb2x1bW4gMXwhaGVhZGluZyBjb2x1bW4gMnwKfHJvdyAxLCBjb2x1bW4gMXxyb3cgMSwgY29sdW1uIDJ8Cnxyb3cgMiwgY29sdW1uIDF8cm93IDIsIGNvbHVtbiAyfAp8PnxDT0xTUEFOfAp8Uk9XU1BBTnwgLi4uIHwKfH58IC4uLiB8CnxDc3NQcm9wZXJ0eTp2YWx1ZTsuLi58IC4uLiB8CnxjYXB0aW9ufGMKfX19CicnQW5ub3RhdGlvbjonJwoqIFRoZSB7e3s+fX19IG1hcmtlciBjcmVhdGVzIGEgImNvbHNwYW4iLCBjYXVzaW5nIHRoZSBjdXJyZW50IGNlbGwgdG8gbWVyZ2Ugd2l0aCB0aGUgb25lIHRvIHRoZSByaWdodC4KKiBUaGUge3t7fn19fSBtYXJrZXIgY3JlYXRlcyBhICJyb3dzcGFuIiwgY2F1c2luZyB0aGUgY3VycmVudCBjZWxsIHRvIG1lcmdlIHdpdGggdGhlIG9uZSBhYm92ZS4KPDw8CnxDc3NDbGFzc3xrCnwhaGVhZGluZyBjb2x1bW4gMXwhaGVhZGluZyBjb2x1bW4gMnwKfHJvdyAxLCBjb2x1bW4gMXxyb3cgMSwgY29sdW1uIDJ8Cnxyb3cgMiwgY29sdW1uIDF8cm93IDIsIGNvbHVtbiAyfAp8PnxDT0xTUEFOfAp8Uk9XU1BBTnwgLi4uIHwKfH58IC4uLiB8CnxDc3NQcm9wZXJ0eTp2YWx1ZTsuLi58IC4uLiB8CnxjYXB0aW9ufGMKPDw8CiEhSW1hZ2VzIC8lIFRPRE8gJS8KY2YuIFtbVGlkZGx5V2lraS5jb218aHR0cDovL3d3dy50aWRkbHl3aWtpLmNvbS8jRW1iZWRkZWRJbWFnZXNdXQoKIUh5cGVybGlua3MKKiBbW1dpa2lXb3Jkc3xXaWtpV29yZF1dIGFyZSBhdXRvbWF0aWNhbGx5IHRyYW5zZm9ybWVkIHRvIGh5cGVybGlua3MgdG8gdGhlIHJlc3BlY3RpdmUgdGlkZGxlcgoqKiB0aGUgYXV0b21hdGljIHRyYW5zZm9ybWF0aW9uIGNhbiBiZSBzdXBwcmVzc2VkIGJ5IHByZWNlZGluZyB0aGUgcmVzcGVjdGl2ZSBXaWtpV29yZCB3aXRoIGEgdGlsZGUgKHt7e359fX0pOiB7e3t+V2lraVdvcmR9fX0KKiBbW1ByZXR0eUxpbmtzXV0gYXJlIGVuY2xvc2VkIGluIHNxdWFyZSBicmFja2V0cyBhbmQgY29udGFpbiB0aGUgZGVzaXJlZCB0aWRkbGVyIG5hbWU6IHt7e1tbdGlkZGxlciBuYW1lXV19fX0KKiogb3B0aW9uYWxseSwgYSBjdXN0b20gdGl0bGUgb3IgZGVzY3JpcHRpb24gY2FuIGJlIGFkZGVkLCBzZXBhcmF0ZWQgYnkgYSBwaXBlIGNoYXJhY3RlciAoe3t7fH19fSk6IHt7e1tbdGl0bGV8dGFyZ2V0XV19fX08YnI+JycnTi5CLjonJycgSW4gdGhpcyBjYXNlLCB0aGUgdGFyZ2V0IGNhbiBhbHNvIGJlIGFueSB3ZWJzaXRlIChpLmUuIFVSTCkuCgohQ3VzdG9tIFN0eWxpbmcKKiB7e3tAQENzc1Byb3BlcnR5OnZhbHVlO0Nzc1Byb3BlcnR5OnZhbHVlOy4uLkBAfX19PGJyPicnTi5CLjonJyBDU1MgY29sb3IgZGVmaW5pdGlvbnMgc2hvdWxkIHVzZSBsb3dlcmNhc2UgbGV0dGVycyB0byBwcmV2ZW50IHRoZSBpbmFkdmVydGVudCBjcmVhdGlvbiBvZiBXaWtpV29yZHMuCiogPGh0bWw+PGNvZGU+e3tjdXN0b21Dc3NDbGFzc3suLi59fX08L2NvZGU+PC9odG1sPgoqIHJhdyBIVE1MIGNhbiBiZSBpbnNlcnRlZCBieSBlbmNsb3NpbmcgdGhlIHJlc3BlY3RpdmUgY29kZSBpbiBIVE1MIHRhZ3M6IHt7ezxodG1sPiAuLi4gPC9odG1sPn19fQoKIVNwZWNpYWwgTWFya2VycwoqIHt7ezxicj59fX0gZm9yY2VzIGEgbWFudWFsIGxpbmUgYnJlYWsKKiB7e3stLS0tfX19IGNyZWF0ZXMgYSBob3Jpem9udGFsIHJ1bGVyCiogW1tIVE1MIGVudGl0aWVzfGh0dHA6Ly93d3cudGlkZGx5d2lraS5jb20vI0h0bWxFbnRpdGllc11dCiogW1tIVE1MIGVudGl0aWVzIGxvY2FsfEh0bWxFbnRpdGllc11dCioge3t7PDxtYWNyb05hbWU+Pn19fSBjYWxscyB0aGUgcmVzcGVjdGl2ZSBbW21hY3JvfE1hY3Jvc11dCiogVG8gaGlkZSB0ZXh0IHdpdGhpbiBhIHRpZGRsZXIgc28gdGhhdCBpdCBpcyBub3QgZGlzcGxheWVkLCBpdCBjYW4gYmUgd3JhcHBlZCBpbiB7e3svJX19fSBhbmQge3t7JS99fX0uPGJyLz5UaGlzIGNhbiBiZSBhIHVzZWZ1bCB0cmljayBmb3IgaGlkaW5nIGRyYWZ0cyBvciBhbm5vdGF0aW5nIGNvbXBsZXggbWFya3VwLgoqIFRvIHByZXZlbnQgd2lraSBtYXJrdXAgZnJvbSB0YWtpbmcgZWZmZWN0IGZvciBhIHBhcnRpY3VsYXIgc2VjdGlvbiwgdGhhdCBzZWN0aW9uIGNhbiBiZSBlbmNsb3NlZCBpbiB0aHJlZSBkb3VibGUgcXVvdGVzOiBlLmcuIHt7eyIiIldpa2lXb3JkIiIifX19Lgo8L3RleHRhcmVhPjwvZGl2PgoKICAgIDxzY3JpcHQ+CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7CiAgICAgICAgbW9kZTogJ3RpZGRseXdpa2knLCAgICAgIAogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIGVudGVyTW9kZTogJ2tlZXAnLAogICAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUKICAgICAgfSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD5UaWRkbHlXaWtpIG1vZGUgc3VwcG9ydHMgYSBzaW5nbGUgY29uZmlndXJhdGlvbi48L3A+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQveC10aWRkbHl3aWtpPC9jb2RlPi48L3A+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/tiddlywiki/tiddlywiki.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LmNtLXMtZGVmYXVsdCBzcGFuLmNtLWhlYWRlciB7Y29sb3I6IGJsdWU7IGZvbnQtd2VpZ2h0OmJvbGQ7fQouY20tcy1kZWZhdWx0IHNwYW4uY20tY29kZSB7Y29sb3I6ICNhNTA7fQouY20tcy1kZWZhdWx0IHNwYW4uY20tY29kZS1pbmxpbmUge2NvbG9yOiAjNjYwO30KCi5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1xdW90ZSB7Y29sb3I6ICM1NTU7fQouY20tcy1kZWZhdWx0IHNwYW4uY20tbGlzdCB7Y29sb3I6ICNjNjA7fQouY20tcy1kZWZhdWx0IHNwYW4uY20taHIge2NvbG9yOiAjOTk5O30KLmNtLXMtZGVmYXVsdCBzcGFuLmNtLWVtIHtmb250LXN0eWxlOiBpdGFsaWM7fQouY20tcy1kZWZhdWx0IHNwYW4uY20tc3Ryb25nIHtmb250LXdlaWdodDogYm9sZDt9CgouY20tcy1kZWZhdWx0IHNwYW4uY20tbGluay1leHRlcm5hbCB7Y29sb3I6IGJsdWU7fQouY20tcy1kZWZhdWx0IHNwYW4uY20tYnJhY2Uge2NvbG9yOiAjMTcwOyBmb250LXdlaWdodDogYm9sZDt9Ci5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1tYWNybyB7Y29sb3I6ICM5RTM4MjU7fQouY20tcy1kZWZhdWx0IHNwYW4uY20tdGFibGUge2NvbG9yOiBibHVlO30KLmNtLXMtZGVmYXVsdCBzcGFuLmNtLXdhcm5pbmcge2NvbG9yOiByZWQ7IGZvbnQtd2VpZ2h0OiBib2xkO30KCi5jbS1zLWRlZmF1bHQgc3Bhbi5jbS11bmRlcmxpbmVkIHt0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTt9Ci5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1saW5lLXRocm91Z2gge3RleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoO30KCi5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1jb21tZW50IHtjb2xvcjogIzY2Njt9Cgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/tiddlywiki/tiddlywiki.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqKgogfCcnTmFtZScnfHRpZGRseXdpa2kuanN8CiB8JydEZXNjcmlwdGlvbicnfEVuYWJsZXMgVGlkZGx5V2lraXkgc3ludGF4IGhpZ2hsaWdodGluZyB1c2luZyBDb2RlTWlycm9yMnwKIHwnJ0F1dGhvcicnfFBNYXJpb3wKIHwnJ1ZlcnNpb24nJ3wwLjEuNnwKIHwnJ1N0YXR1cycnfCcnYmV0YScnfAogfCcnU291cmNlJyd8W1tHaXRIdWJ8aHR0cHM6Ly9naXRodWIuY29tL3BtYXJpby9Db2RlTWlycm9yMi9ibG9iL3R3LXN5bnRheC9tb2RlL3RpZGRseXdpa2ldXXwKIHwnJ0RvY3VtZW50YXRpb24nJ3xodHRwOi8vY29kZW1pcnJvci50aWRkbHlzcGFjZS5jb20vfAogfCcnTGljZW5zZScnfFtbTUlUIExpY2Vuc2V8aHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBdXXwKIHwnJ0NvcmVWZXJzaW9uJyd8Mi41LjB8CiB8JydSZXF1aXJlcycnfGNvZGVtaXJyb3IuanN8CiB8JydLZXl3b3JkcycnfHN5bnRheCBoaWdobGlnaHRpbmcgY29sb3IgY29kZSBtaXJyb3IgY29kZW1pcnJvcnwKICEgSW5mbwogQ29yZVZlcnNpb24gcGFyYW1ldGVyIGlzIG5lZWRlZCBmb3IgVGlkZGx5V2lraSBvbmx5IQogKioqLwovL3t7ewpDb2RlTWlycm9yLmRlZmluZU1vZGUoInRpZGRseXdpa2kiLCBmdW5jdGlvbiAoY29uZmlnLCBwYXJzZXJDb25maWcpIHsKCXZhciBpbmRlbnRVbml0ID0gY29uZmlnLmluZGVudFVuaXQ7CgoJLy8gVG9rZW5pemVyCgl2YXIgdGV4dHdvcmRzID0gZnVuY3Rpb24gKCkgewoJCWZ1bmN0aW9uIGt3KHR5cGUpIHsKCQkJcmV0dXJuIHsKCQkJCXR5cGU6IHR5cGUsCgkJCQlzdHlsZTogInRleHQiCgkJCX07CgkJfQoJCXJldHVybiB7fTsKCX0oKTsKCgl2YXIga2V5d29yZHMgPSBmdW5jdGlvbiAoKSB7CgkJZnVuY3Rpb24ga3codHlwZSkgewoJCQlyZXR1cm4geyB0eXBlOiB0eXBlLCBzdHlsZTogIm1hY3JvIn07CgkJfQoJCXJldHVybiB7CgkJCSJhbGxUYWdzIjoga3coJ2FsbFRhZ3MnKSwgImNsb3NlQWxsIjoga3coJ2Nsb3NlQWxsJyksICJsaXN0Ijoga3coJ2xpc3QnKSwKCQkJIm5ld0pvdXJuYWwiOiBrdygnbmV3Sm91cm5hbCcpLCAibmV3VGlkZGxlciI6IGt3KCduZXdUaWRkbGVyJyksCgkJCSJwZXJtYXZpZXciOiBrdygncGVybWF2aWV3JyksICJzYXZlQ2hhbmdlcyI6IGt3KCdzYXZlQ2hhbmdlcycpLAoJCQkic2VhcmNoIjoga3coJ3NlYXJjaCcpLCAic2xpZGVyIjoga3coJ3NsaWRlcicpLAkidGFicyI6IGt3KCd0YWJzJyksCgkJCSJ0YWciOiBrdygndGFnJyksICJ0YWdnaW5nIjoga3coJ3RhZ2dpbmcnKSwJInRhZ3MiOiBrdygndGFncycpLAoJCQkidGlkZGxlciI6IGt3KCd0aWRkbGVyJyksICJ0aW1lbGluZSI6IGt3KCd0aW1lbGluZScpLAoJCQkidG9kYXkiOiBrdygndG9kYXknKSwgInZlcnNpb24iOiBrdygndmVyc2lvbicpLAkib3B0aW9uIjoga3coJ29wdGlvbicpLAoKCQkJIndpdGgiOiBrdygnd2l0aCcpLAoJCQkiZmlsdGVyIjoga3coJ2ZpbHRlcicpCgkJfTsKCX0oKTsKCgl2YXIgaXNTcGFjZU5hbWUgPSAvW1x3X1wtXS9pLAoJCXJlSFIgPSAvXlwtXC1cLVwtKyQvLAoJCXJlV2lraUNvbW1lbnRTdGFydCA9IC9eXC9cKlwqXCokLywJCS8vIC8qKioKCQlyZVdpa2lDb21tZW50U3RvcCA9IC9eXCpcKlwqXC8kLywJCS8vICoqKi8KCQlyZUJsb2NrUXVvdGUgPSAvXjw8PCQvLAoKCQlyZUpzQ29kZVN0YXJ0ID0gL15cL1wvXHtce1x7JC8sCQkJLy8gLy97e3sKCQlyZUpzQ29kZVN0b3AgPSAvXlwvXC9cfVx9XH0kLywJCQkvLyAvL319fQoJCXJlWG1sQ29kZVN0YXJ0ID0gL148IS0tXHtce1x7LS0+JC8sCgkJcmVYbWxDb2RlU3RvcCA9IC9ePCEtLVx9XH1cfS0tPiQvLAoKCQlyZUNvZGVCbG9ja1N0YXJ0ID0gL15ce1x7XHskLywKCQlyZUNvZGVCbG9ja1N0b3AgPSAvXlx9XH1cfSQvLAoKCQlyZUNvZGVTdGFydCA9IC9ce1x7XHsvLAoJCXJlVW50aWxDb2RlU3RvcCA9IC8uKj9cfVx9XH0vOwoKCWZ1bmN0aW9uIGNoYWluKHN0cmVhbSwgc3RhdGUsIGYpIHsKCQlzdGF0ZS50b2tlbml6ZSA9IGY7CgkJcmV0dXJuIGYoc3RyZWFtLCBzdGF0ZSk7Cgl9CgoJLy8gdXNlZCBmb3Igc3RyaW5ncwoJZnVuY3Rpb24gbmV4dFVudGlsVW5lc2NhcGVkKHN0cmVhbSwgZW5kKSB7CgkJdmFyIGVzY2FwZWQgPSBmYWxzZSwKCQkJbmV4dDsKCQl3aGlsZSAoKG5leHQgPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CgkJCWlmIChuZXh0ID09IGVuZCAmJiAhZXNjYXBlZCkgcmV0dXJuIGZhbHNlOwoJCQllc2NhcGVkID0gIWVzY2FwZWQgJiYgbmV4dCA9PSAiXFwiOwoJCX0KCQlyZXR1cm4gZXNjYXBlZDsKCX0KCgkvLyBVc2VkIGFzIHNjcmF0Y2ggdmFyaWFibGVzIHRvIGNvbW11bmljYXRlIG11bHRpcGxlIHZhbHVlcyB3aXRob3V0CgkvLyBjb25zaW5nIHVwIHRvbnMgb2Ygb2JqZWN0cy4KCXZhciB0eXBlLCBjb250ZW50OwoKCWZ1bmN0aW9uIHJldCh0cCwgc3R5bGUsIGNvbnQpIHsKCQl0eXBlID0gdHA7CgkJY29udGVudCA9IGNvbnQ7CgkJcmV0dXJuIHN0eWxlOwoJfQoKCWZ1bmN0aW9uIGpzVG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpIHsKCQl2YXIgc29sID0gc3RyZWFtLnNvbCgpLCAKCQkJY2gsIHRjaDsKCQkJCgkJc3RhdGUuYmxvY2sgPSBmYWxzZTsJLy8gaW5kaWNhdGVzIHRoZSBzdGFydCBvZiBhIGNvZGUgYmxvY2suCgoJCWNoID0gc3RyZWFtLnBlZWsoKTsgLy8gZG9uJ3QgZWF0LCB0byBtYWtlIG1hdGNoIHNpbXBsZXIKCQkKCQkvLyBjaGVjayBzdGFydCBvZiAgYmxvY2tzICAgIAoJCWlmIChzb2wgJiYgL1s8XC9cKnt9XC1dLy50ZXN0KGNoKSkgewoJCQlpZiAoc3RyZWFtLm1hdGNoKHJlQ29kZUJsb2NrU3RhcnQpKSB7CgkJCQlzdGF0ZS5ibG9jayA9IHRydWU7CgkJCQlyZXR1cm4gY2hhaW4oc3RyZWFtLCBzdGF0ZSwgdHdUb2tlbkNvZGUpOwoJCQl9CgkJCWlmIChzdHJlYW0ubWF0Y2gocmVCbG9ja1F1b3RlKSkgewoJCQkJcmV0dXJuIHJldCgncXVvdGUnLCAncXVvdGUnKTsKCQkJfQoJCQlpZiAoc3RyZWFtLm1hdGNoKHJlV2lraUNvbW1lbnRTdGFydCkgfHwgc3RyZWFtLm1hdGNoKHJlV2lraUNvbW1lbnRTdG9wKSkgewoJCQkJcmV0dXJuIHJldCgnY29kZScsICdjb2RlJyk7CgkJCX0KCQkJaWYgKHN0cmVhbS5tYXRjaChyZUpzQ29kZVN0YXJ0KSB8fCBzdHJlYW0ubWF0Y2gocmVKc0NvZGVTdG9wKSB8fCBzdHJlYW0ubWF0Y2gocmVYbWxDb2RlU3RhcnQpIHx8IHN0cmVhbS5tYXRjaChyZVhtbENvZGVTdG9wKSkgewoJCQkJcmV0dXJuIHJldCgnY29kZScsICdjb2RlJyk7CgkJCX0KCQkJaWYgKHN0cmVhbS5tYXRjaChyZUhSKSkgewoJCQkJcmV0dXJuIHJldCgnaHInLCAnaHInKTsKCQkJfQoJCX0gLy8gc29sCgkJdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKCgkJaWYgKHNvbCAmJiAvW1wvXCohIzs6PnxdLy50ZXN0KGNoKSkgewoJCQlpZiAoY2ggPT0gIiEiKSB7IC8vIHR3IGhlYWRlcgoJCQkJc3RyZWFtLnNraXBUb0VuZCgpOwoJCQkJcmV0dXJuIHJldCgiaGVhZGVyIiwgImhlYWRlciIpOwoJCQl9CgkJCWlmIChjaCA9PSAiKiIpIHsgLy8gdHcgbGlzdAoJCQkJc3RyZWFtLmVhdFdoaWxlKCcqJyk7CgkJCQlyZXR1cm4gcmV0KCJsaXN0IiwgImxpc3QiKTsKCQkJfQoJCQlpZiAoY2ggPT0gIiMiKSB7IC8vIHR3IG51bWJlcmVkIGxpc3QKCQkJCXN0cmVhbS5lYXRXaGlsZSgnIycpOwoJCQkJcmV0dXJuIHJldCgibGlzdCIsICJsaXN0Iik7CgkJCX0KCQkJaWYgKGNoID09ICI7IikgeyAvLyB0dyBsaXN0CgkJCQlzdHJlYW0uZWF0V2hpbGUoJzsnKTsKCQkJCXJldHVybiByZXQoImxpc3QiLCAibGlzdCIpOwoJCQl9CgkJCWlmIChjaCA9PSAiOiIpIHsgLy8gdHcgbGlzdAoJCQkJc3RyZWFtLmVhdFdoaWxlKCc6Jyk7CgkJCQlyZXR1cm4gcmV0KCJsaXN0IiwgImxpc3QiKTsKCQkJfQoJCQlpZiAoY2ggPT0gIj4iKSB7IC8vIHNpbmdsZSBsaW5lIHF1b3RlCgkJCQlzdHJlYW0uZWF0V2hpbGUoIj4iKTsKCQkJCXJldHVybiByZXQoInF1b3RlIiwgInF1b3RlIik7CgkJCX0KCQkJaWYgKGNoID09ICd8JykgewoJCQkJcmV0dXJuIHJldCgndGFibGUnLCAndGFibGUnKTsKCQkJfQoJCX0KCgkJaWYgKGNoID09ICd7JyAmJiBzdHJlYW0ubWF0Y2goL1x7XHsvKSkgewoJCQlyZXR1cm4gY2hhaW4oc3RyZWFtLCBzdGF0ZSwgdHdUb2tlbkNvZGUpOwoJCX0KCgkJLy8gcnVkaW1lbnRhcnkgaHRtbDovLyBmaWxlOi8vIGxpbmsgbWF0Y2hpbmcuIFRXIGtub3dzIG11Y2ggbW9yZSAuLi4KCQlpZiAoL1toZl0vaS50ZXN0KGNoKSkgewoJCQlpZiAoL1t0aV0vaS50ZXN0KHN0cmVhbS5wZWVrKCkpICYmIHN0cmVhbS5tYXRjaCgvXGIodHRwcz98dHB8aWxlKTpcL1wvW1wtQS1aMC05KyZAI1wvJT89fl98JCE6LC47XSpbQS1aMC05KyZAI1wvJT1+X3wkXS9pKSkgewoJCQkJcmV0dXJuIHJldCgibGluay1leHRlcm5hbCIsICJsaW5rLWV4dGVybmFsIik7CgkJCX0KCQl9CgkJLy8ganVzdCBhIGxpdHRsZSBzdHJpbmcgaW5kaWNhdG9yLCBkb24ndCB3YW50IHRvIGhhdmUgdGhlIHdob2xlIHN0cmluZyBjb3ZlcmVkCgkJaWYgKGNoID09ICciJykgewoJCQlyZXR1cm4gcmV0KCdzdHJpbmcnLCAnc3RyaW5nJyk7CgkJfQoJCWlmICgvW1xbXF1dLy50ZXN0KGNoKSkgeyAvLyBjaGVjayBmb3IgW1suLl1dCgkJCWlmIChzdHJlYW0ucGVlaygpID09IGNoKSB7CgkJCQlzdHJlYW0ubmV4dCgpOwoJCQkJcmV0dXJuIHJldCgnYnJhY2UnLCAnYnJhY2UnKTsKCQkJfQoJCX0KCQlpZiAoY2ggPT0gIkAiKSB7CS8vIGNoZWNrIGZvciBzcGFjZSBsaW5rLiBUT0RPIGZpeCBAQC4uLkBAIGhpZ2hsaWdodGluZwoJCQlzdHJlYW0uZWF0V2hpbGUoaXNTcGFjZU5hbWUpOwoJCQlyZXR1cm4gcmV0KCJsaW5rLWV4dGVybmFsIiwgImxpbmstZXh0ZXJuYWwiKTsKCQl9CgkJaWYgKC9cZC8udGVzdChjaCkpIHsJLy8gbnVtYmVycwoJCQlzdHJlYW0uZWF0V2hpbGUoL1xkLyk7CgkJCXJldHVybiByZXQoIm51bWJlciIsICJudW1iZXIiKTsKCQl9CgkJaWYgKGNoID09ICIvIikgeyAvLyB0dyBpbnZpc2libGUgY29tbWVudAoJCQlpZiAoc3RyZWFtLmVhdCgiJSIpKSB7CgkJCQlyZXR1cm4gY2hhaW4oc3RyZWFtLCBzdGF0ZSwgdHdUb2tlbkNvbW1lbnQpOwoJCQl9CgkJCWVsc2UgaWYgKHN0cmVhbS5lYXQoIi8iKSkgeyAvLyAKCQkJCXJldHVybiBjaGFpbihzdHJlYW0sIHN0YXRlLCB0d1Rva2VuRW0pOwoJCQl9CgkJfQoJCWlmIChjaCA9PSAiXyIpIHsgLy8gdHcgdW5kZXJsaW5lCgkJCWlmIChzdHJlYW0uZWF0KCJfIikpIHsKCQkJCXJldHVybiBjaGFpbihzdHJlYW0sIHN0YXRlLCB0d1Rva2VuVW5kZXJsaW5lKTsKCQkJfQoJCX0KCQlpZiAoY2ggPT0gIi0iKSB7IC8vIHR3IHN0cmlrZXRocm91Z2ggVE9ETyBsb29rcyB1Z2x5IC4uIGRpZmZlcmVudCBoYW5kbGluZyBzZWUgYmVsb3c7CgkJCWlmIChzdHJlYW0uZWF0KCItIikpIHsKCQkJCXJldHVybiBjaGFpbihzdHJlYW0sIHN0YXRlLCB0d1Rva2VuU3RyaWtlKTsKCQkJfQoJCX0KCQlpZiAoY2ggPT0gIiciKSB7IC8vIHR3IGJvbGQKCQkJaWYgKHN0cmVhbS5lYXQoIiciKSkgewoJCQkJcmV0dXJuIGNoYWluKHN0cmVhbSwgc3RhdGUsIHR3VG9rZW5TdHJvbmcpOwoJCQl9CgkJfQoJCWlmIChjaCA9PSAiPCIpIHsgLy8gdHcgbWFjcm8KCQkJaWYgKHN0cmVhbS5lYXQoIjwiKSkgewoJCQkJcmV0dXJuIGNoYWluKHN0cmVhbSwgc3RhdGUsIHR3VG9rZW5NYWNybyk7CgkJCX0KCQl9CgkJZWxzZSB7CgkJCXJldHVybiByZXQoY2gpOwoJCX0KCgkJc3RyZWFtLmVhdFdoaWxlKC9bXHdcJF9dLyk7CgkJdmFyIHdvcmQgPSBzdHJlYW0uY3VycmVudCgpLAoJCQlrbm93biA9IHRleHR3b3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZSh3b3JkKSAmJiB0ZXh0d29yZHNbd29yZF07CgoJCXJldHVybiBrbm93biA/IHJldChrbm93bi50eXBlLCBrbm93bi5zdHlsZSwgd29yZCkgOiByZXQoInRleHQiLCBudWxsLCB3b3JkKTsKCgl9IC8vIGpzVG9rZW5CYXNlKCkKCglmdW5jdGlvbiB0d1Rva2VuU3RyaW5nKHF1b3RlKSB7CgkJcmV0dXJuIGZ1bmN0aW9uIChzdHJlYW0sIHN0YXRlKSB7CgkJCWlmICghbmV4dFVudGlsVW5lc2NhcGVkKHN0cmVhbSwgcXVvdGUpKSBzdGF0ZS50b2tlbml6ZSA9IGpzVG9rZW5CYXNlOwoJCQlyZXR1cm4gcmV0KCJzdHJpbmciLCAic3RyaW5nIik7CgkJfTsKCX0KCgkvLyB0dyBpbnZpc2libGUgY29tbWVudAoJZnVuY3Rpb24gdHdUb2tlbkNvbW1lbnQoc3RyZWFtLCBzdGF0ZSkgewoJCXZhciBtYXliZUVuZCA9IGZhbHNlLAoJCQljaDsKCQl3aGlsZSAoY2ggPSBzdHJlYW0ubmV4dCgpKSB7CgkJCWlmIChjaCA9PSAiLyIgJiYgbWF5YmVFbmQpIHsKCQkJCXN0YXRlLnRva2VuaXplID0ganNUb2tlbkJhc2U7CgkJCQlicmVhazsKCQkJfQoJCQltYXliZUVuZCA9IChjaCA9PSAiJSIpOwoJCX0KCQlyZXR1cm4gcmV0KCJjb21tZW50IiwgImNvbW1lbnQiKTsKCX0KCgkvLyB0dyBzdHJvbmcgLyBib2xkCglmdW5jdGlvbiB0d1Rva2VuU3Ryb25nKHN0cmVhbSwgc3RhdGUpIHsKCQl2YXIgbWF5YmVFbmQgPSBmYWxzZSwKCQkJY2g7CgkJd2hpbGUgKGNoID0gc3RyZWFtLm5leHQoKSkgewoJCQlpZiAoY2ggPT0gIiciICYmIG1heWJlRW5kKSB7CgkJCQlzdGF0ZS50b2tlbml6ZSA9IGpzVG9rZW5CYXNlOwoJCQkJYnJlYWs7CgkJCX0KCQkJbWF5YmVFbmQgPSAoY2ggPT0gIiciKTsKCQl9CgkJcmV0dXJuIHJldCgidGV4dCIsICJzdHJvbmciKTsKCX0KCgkvLyB0dyBjb2RlCglmdW5jdGlvbiB0d1Rva2VuQ29kZShzdHJlYW0sIHN0YXRlKSB7CgkJdmFyIGNoLCBzYiA9IHN0YXRlLmJsb2NrOwoJCQoJCWlmIChzYiAmJiBzdHJlYW0uY3VycmVudCgpKSB7CgkJCXJldHVybiByZXQoImNvZGUiLCAiY29kZSIpOwoJCX0KCgkJaWYgKCFzYiAmJiBzdHJlYW0ubWF0Y2gocmVVbnRpbENvZGVTdG9wKSkgewoJCQlzdGF0ZS50b2tlbml6ZSA9IGpzVG9rZW5CYXNlOwoJCQlyZXR1cm4gcmV0KCJjb2RlIiwgImNvZGUtaW5saW5lIik7CgkJfQoKCQlpZiAoc2IgJiYgc3RyZWFtLnNvbCgpICYmIHN0cmVhbS5tYXRjaChyZUNvZGVCbG9ja1N0b3ApKSB7CgkJCXN0YXRlLnRva2VuaXplID0ganNUb2tlbkJhc2U7CgkJCXJldHVybiByZXQoImNvZGUiLCAiY29kZSIpOwoJCX0KCgkJY2ggPSBzdHJlYW0ubmV4dCgpOwoJCXJldHVybiAoc2IpID8gcmV0KCJjb2RlIiwgImNvZGUiKSA6IHJldCgiY29kZSIsICJjb2RlLWlubGluZSIpOwoJfQoKCS8vIHR3IGVtIC8gaXRhbGljCglmdW5jdGlvbiB0d1Rva2VuRW0oc3RyZWFtLCBzdGF0ZSkgewoJCXZhciBtYXliZUVuZCA9IGZhbHNlLAoJCQljaDsKCQl3aGlsZSAoY2ggPSBzdHJlYW0ubmV4dCgpKSB7CgkJCWlmIChjaCA9PSAiLyIgJiYgbWF5YmVFbmQpIHsKCQkJCXN0YXRlLnRva2VuaXplID0ganNUb2tlbkJhc2U7CgkJCQlicmVhazsKCQkJfQoJCQltYXliZUVuZCA9IChjaCA9PSAiLyIpOwoJCX0KCQlyZXR1cm4gcmV0KCJ0ZXh0IiwgImVtIik7Cgl9CgoJLy8gdHcgdW5kZXJsaW5lZCB0ZXh0CglmdW5jdGlvbiB0d1Rva2VuVW5kZXJsaW5lKHN0cmVhbSwgc3RhdGUpIHsKCQl2YXIgbWF5YmVFbmQgPSBmYWxzZSwKCQkJY2g7CgkJd2hpbGUgKGNoID0gc3RyZWFtLm5leHQoKSkgewoJCQlpZiAoY2ggPT0gIl8iICYmIG1heWJlRW5kKSB7CgkJCQlzdGF0ZS50b2tlbml6ZSA9IGpzVG9rZW5CYXNlOwoJCQkJYnJlYWs7CgkJCX0KCQkJbWF5YmVFbmQgPSAoY2ggPT0gIl8iKTsKCQl9CgkJcmV0dXJuIHJldCgidGV4dCIsICJ1bmRlcmxpbmVkIik7Cgl9CgoJLy8gdHcgc3RyaWtlIHRocm91Z2ggdGV4dCBsb29rcyB1Z2x5IAoJLy8gVE9ETyBqdXN0IHN0cmlrZSB0aHJvdWdoIHRoZSBmaXJzdCBhbmQgbGFzdCAyIGNoYXJzIGlmIHBvc3NpYmxlLgoJZnVuY3Rpb24gdHdUb2tlblN0cmlrZShzdHJlYW0sIHN0YXRlKSB7CgkJdmFyIG1heWJlRW5kID0gZmFsc2UsCgkJCWNoLCBucjsKCQkJCgkJd2hpbGUgKGNoID0gc3RyZWFtLm5leHQoKSkgewoJCQlpZiAoY2ggPT0gIi0iICYmIG1heWJlRW5kKSB7CgkJCQlzdGF0ZS50b2tlbml6ZSA9IGpzVG9rZW5CYXNlOwoJCQkJYnJlYWs7CgkJCX0KCQkJbWF5YmVFbmQgPSAoY2ggPT0gIi0iKTsKCQl9CgkJcmV0dXJuIHJldCgidGV4dCIsICJsaW5lLXRocm91Z2giKTsKCX0KCgkvLyBtYWNybwoJZnVuY3Rpb24gdHdUb2tlbk1hY3JvKHN0cmVhbSwgc3RhdGUpIHsKCQl2YXIgY2gsIHRtcCwgd29yZCwga25vd247CgoJCWlmIChzdHJlYW0uY3VycmVudCgpID09ICc8PCcpIHsKCQkJcmV0dXJuIHJldCgnYnJhY2UnLCAnbWFjcm8nKTsKCQl9CgoJCWNoID0gc3RyZWFtLm5leHQoKTsKCQlpZiAoIWNoKSB7CgkJCXN0YXRlLnRva2VuaXplID0ganNUb2tlbkJhc2U7CgkJCXJldHVybiByZXQoY2gpOwoJCX0KCQlpZiAoY2ggPT0gIj4iKSB7CgkJCWlmIChzdHJlYW0ucGVlaygpID09ICc+JykgewoJCQkJc3RyZWFtLm5leHQoKTsKCQkJCXN0YXRlLnRva2VuaXplID0ganNUb2tlbkJhc2U7CgkJCQlyZXR1cm4gcmV0KCJicmFjZSIsICJtYWNybyIpOwoJCQl9CgkJfQoKCQlzdHJlYW0uZWF0V2hpbGUoL1tcd1wkX10vKTsKCQl3b3JkID0gc3RyZWFtLmN1cnJlbnQoKTsKCQlrbm93biA9IGtleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKHdvcmQpICYmIGtleXdvcmRzW3dvcmRdOwoKCQlpZiAoa25vd24pIHsKCQkJcmV0dXJuIHJldChrbm93bi50eXBlLCBrbm93bi5zdHlsZSwgd29yZCk7CgkJfQoJCWVsc2UgewoJCQlyZXR1cm4gcmV0KCJtYWNybyIsIG51bGwsIHdvcmQpOwoJCX0KCX0KCgkvLyBJbnRlcmZhY2UKCXJldHVybiB7CgkJc3RhcnRTdGF0ZTogZnVuY3Rpb24gKGJhc2Vjb2x1bW4pIHsKCQkJcmV0dXJuIHsKCQkJCXRva2VuaXplOiBqc1Rva2VuQmFzZSwKCQkJCWluZGVudGVkOiAwLAoJCQkJbGV2ZWw6IDAKCQkJfTsKCQl9LAoKCQl0b2tlbjogZnVuY3Rpb24gKHN0cmVhbSwgc3RhdGUpIHsKCQkJaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDsKCQkJdmFyIHN0eWxlID0gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CgkJCXJldHVybiBzdHlsZTsKCQl9LAoKCQllbGVjdHJpY0NoYXJzOiAiIgoJfTsKfSk7CgpDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC10aWRkbHl3aWtpIiwgInRpZGRseXdpa2kiKTsKLy99fX0K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/velocity/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/velocity/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFZlbG9jaXR5IG1vZGU8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJ2ZWxvY2l0eS5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL3RoZW1lL25pZ2h0LmNzcyI+CiAgICA8c3R5bGU+LkNvZGVNaXJyb3Ige2JvcmRlcjogMXB4IHNvbGlkIGJsYWNrO308L3N0eWxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBWZWxvY2l0eSBtb2RlPC9oMT4KICAgIDxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+CiMjIFZlbG9jaXR5IENvZGUgRGVtbwojKgogICBiYXNlZCBvbiBQTC9TUUwgbW9kZSBieSBQZXRlciBSYWdhbml0c2NoLCBhZGFwdGVkIHRvIFZlbG9jaXR5IGJ5IFN0ZXZlIE8nSGFyYSAoIGh0dHA6Ly93d3cucGl2b3RhbC1zb2x1dGlvbnMuY28udWsgKQogICBBdWd1c3QgMjAxMQoqIwoKIyoKICAgVGhpcyBpcyBhIG11bHRpbGluZSBjb21tZW50LgogICBUaGlzIGlzIHRoZSBzZWNvbmQgbGluZQoqIwoKI1tbIGhlbGxvIHN0ZXZlCiAgIFRoaXMgaGFzIGludmFsaWQgc3ludGF4IHRoYXQgd291bGQgbm9ybWFsbHkgbmVlZCAicG9vciBtYW4ncyBlc2NhcGluZyIgbGlrZToKCiAgICNkZWZpbmUoKQoKICAgJHtibGFoCl1dIwoKI2luY2x1ZGUoICJkaXNjbGFpbWVyLnR4dCIgIm9waW5pb24udHh0IiApCiNpbmNsdWRlKCAkZm9vICRiYXIgKQoKI3BhcnNlKCAibGVjb3JidXNpZXIudm0iICkKI3BhcnNlKCAkZm9vICkKCiNldmFsdWF0ZSggJ3N0cmluZyB3aXRoIFZUTCAjaWYodHJ1ZSl3aWxsIGJlIGRpc3BsYXllZCNlbmQnICkKCiNkZWZpbmUoICRoZWxsbyApIEhlbGxvICR3aG8gI2VuZCAjc2V0KCAkd2hvID0gIldvcmxkISIpICRoZWxsbyAjIyBkaXNwbGF5cyBIZWxsbyBXb3JsZCEKCiNmb3JlYWNoKCAkY3VzdG9tZXIgaW4gJGN1c3RvbWVyTGlzdCApCgogICAgJGZvcmVhY2guY291bnQgJGN1c3RvbWVyLk5hbWUKCiAgICAjaWYoICRmb28gPT0gJHtiYXJ9KQogICAgICAgIGl0J3MgdHJ1ZSEKICAgICAgICAjYnJlYWsKICAgICN7ZWxzZX0KICAgICAgICBpdCdzIG5vdCEKICAgICAgICAjc3RvcAogICAgI2VuZAoKICAgICNpZiAoJGZvcmVhY2gucGFyZW50Lmhhc05leHQpCiAgICAgICAgJHZlbG9jaXR5Q291bnQKICAgICNlbmQKI2VuZAoKJHNvbWVPYmplY3QuZ2V0VmFsdWVzKCJ0aGlzIGlzIGEgc3RyaW5nIHNwbGl0CiAgICAgICAgYWNyb3NzIGxpbmVzIikKCiNtYWNybyggdGFibGVyb3dzICRjb2xvciAkc29tZWxpc3QgKQogICAgI2ZvcmVhY2goICRzb21ldGhpbmcgaW4gJHNvbWVsaXN0ICkKICAgICAgICA8dHI+PHRkIGJnY29sb3I9JGNvbG9yPiRzb21ldGhpbmc8L3RkPjwvdHI+CiAgICAjZW5kCiNlbmQKCiN0YWJsZXJvd3MoInJlZCIgWyJkYWRzZGYiLCJkc2EiXSkKCiAgIFZhcmlhYmxlIHJlZmVyZW5jZTogI3NldCggJG1vbmtleSA9ICRiaWxsICkKICAgU3RyaW5nIGxpdGVyYWw6ICNzZXQoICRtb25rZXkuRnJpZW5kID0gJ21vbmljYScgKQogICBQcm9wZXJ0eSByZWZlcmVuY2U6ICNzZXQoICRtb25rZXkuQmxhbWUgPSAkd2hpdGVob3VzZS5MZWFrICkKICAgTWV0aG9kIHJlZmVyZW5jZTogI3NldCggJG1vbmtleS5QbGFuID0gJHNwaW5kb2N0b3Iud2VhdmUoJHdlYikgKQogICBOdW1iZXIgbGl0ZXJhbDogI3NldCggJG1vbmtleS5OdW1iZXIgPSAxMjMgKQogICBSYW5nZSBvcGVyYXRvcjogI3NldCggJG1vbmtleS5OdW1iZXJzID0gWzEuLjNdICkKICAgT2JqZWN0IGxpc3Q6ICNzZXQoICRtb25rZXkuU2F5ID0gWyJOb3QiLCAkbXksICJmYXVsdCJdICkKICAgT2JqZWN0IG1hcDogI3NldCggJG1vbmtleS5NYXAgPSB7ImJhbmFuYSIgOiAiZ29vZCIsICJyb2FzdCBiZWVmIiA6ICJiYWQifSkKClRoZSBSSFMgY2FuIGFsc28gYmUgYSBzaW1wbGUgYXJpdGhtZXRpYyBleHByZXNzaW9uLCBzdWNoIGFzOgpBZGRpdGlvbjogI3NldCggJHZhbHVlID0gJGZvbyArIDEgKQogICBTdWJ0cmFjdGlvbjogI3NldCggJHZhbHVlID0gJGJhciAtIDEgKQogICBNdWx0aXBsaWNhdGlvbjogI3NldCggJHZhbHVlID0gJGZvbyAqICRiYXIgKQogICBEaXZpc2lvbjogI3NldCggJHZhbHVlID0gJGZvbyAvICRiYXIgKQogICBSZW1haW5kZXI6ICNzZXQoICR2YWx1ZSA9ICRmb28gJSAkYmFyICkKCjwvdGV4dGFyZWE+PC9mb3JtPgogICAgPHNjcmlwdD4KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICB0YWJNb2RlOiAiaW5kZW50IiwKICAgICAgICBtYXRjaEJyYWNrZXRzOiB0cnVlLAogICAgICAgIHRoZW1lOiAibmlnaHQiLAogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIGluZGVudFVuaXQ6IDQsCiAgICAgICAgbW9kZTogInRleHQvdmVsb2NpdHkiCiAgICAgIH0pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQvdmVsb2NpdHk8L2NvZGU+LjwvcD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/velocity/velocity.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJ2ZWxvY2l0eSIsIGZ1bmN0aW9uKGNvbmZpZykgewogICAgZnVuY3Rpb24gcGFyc2VXb3JkcyhzdHIpIHsKICAgICAgICB2YXIgb2JqID0ge30sIHdvcmRzID0gc3RyLnNwbGl0KCIgIik7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3b3Jkcy5sZW5ndGg7ICsraSkgb2JqW3dvcmRzW2ldXSA9IHRydWU7CiAgICAgICAgcmV0dXJuIG9iajsKICAgIH0KCiAgICB2YXIgaW5kZW50VW5pdCA9IGNvbmZpZy5pbmRlbnRVbml0CiAgICB2YXIga2V5d29yZHMgPSBwYXJzZVdvcmRzKCIjZW5kICNlbHNlICNicmVhayAjc3RvcCAjW1sgI11dICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiI3tlbmR9ICN7ZWxzZX0gI3ticmVha30gI3tzdG9wfSIpOwogICAgdmFyIGZ1bmN0aW9ucyA9IHBhcnNlV29yZHMoIiNpZiAjZWxzZWlmICNmb3JlYWNoICNzZXQgI2luY2x1ZGUgI3BhcnNlICNtYWNybyAjZGVmaW5lICNldmFsdWF0ZSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIje2lmfSAje2Vsc2VpZn0gI3tmb3JlYWNofSAje3NldH0gI3tpbmNsdWRlfSAje3BhcnNlfSAje21hY3JvfSAje2RlZmluZX0gI3tldmFsdWF0ZX0iKTsKICAgIHZhciBzcGVjaWFscyA9IHBhcnNlV29yZHMoIiRmb3JlYWNoLmNvdW50ICRmb3JlYWNoLmhhc05leHQgJGZvcmVhY2guZmlyc3QgJGZvcmVhY2gubGFzdCAkZm9yZWFjaC50b3Btb3N0ICRmb3JlYWNoLnBhcmVudCAkdmVsb2NpdHlDb3VudCIpOwogICAgdmFyIGlzT3BlcmF0b3JDaGFyID0gL1srXC0qJiU9PD4hPzpcL3xdLzsKICAgIHZhciBtdWx0aUxpbmVTdHJpbmdzID10cnVlOwoKICAgIGZ1bmN0aW9uIGNoYWluKHN0cmVhbSwgc3RhdGUsIGYpIHsKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGY7CiAgICAgICAgcmV0dXJuIGYoc3RyZWFtLCBzdGF0ZSk7CiAgICB9CiAgICBmdW5jdGlvbiB0b2tlbkJhc2Uoc3RyZWFtLCBzdGF0ZSkgewogICAgICAgIHZhciBiZWZvcmVQYXJhbXMgPSBzdGF0ZS5iZWZvcmVQYXJhbXM7CiAgICAgICAgc3RhdGUuYmVmb3JlUGFyYW1zID0gZmFsc2U7CiAgICAgICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKICAgICAgICAvLyBzdGFydCBvZiBzdHJpbmc/CiAgICAgICAgaWYgKChjaCA9PSAnIicgfHwgY2ggPT0gIiciKSAmJiBzdGF0ZS5pblBhcmFtcykKICAgICAgICAgICAgcmV0dXJuIGNoYWluKHN0cmVhbSwgc3RhdGUsIHRva2VuU3RyaW5nKGNoKSk7CiAgICAgICAgLy8gaXMgaXQgb25lIG9mIHRoZSBzcGVjaWFsIHNpZ25zIFtde30oKS4sOz8gU2VwZXJhdG9yPwogICAgICAgIGVsc2UgaWYgKC9bXFtcXXt9XChcKSw7XC5dLy50ZXN0KGNoKSkgewogICAgICAgICAgICBpZiAoY2ggPT0gIigiICYmIGJlZm9yZVBhcmFtcykgc3RhdGUuaW5QYXJhbXMgPSB0cnVlOwogICAgICAgICAgICBlbHNlIGlmIChjaCA9PSAiKSIpIHN0YXRlLmluUGFyYW1zID0gZmFsc2U7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICAvLyBzdGFydCBvZiBhIG51bWJlciB2YWx1ZT8KICAgICAgICBlbHNlIGlmICgvXGQvLnRlc3QoY2gpKSB7CiAgICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XC5dLyk7CiAgICAgICAgICAgIHJldHVybiAibnVtYmVyIjsKICAgICAgICB9CiAgICAgICAgLy8gbXVsdGkgbGluZSBjb21tZW50PwogICAgICAgIGVsc2UgaWYgKGNoID09ICIjIiAmJiBzdHJlYW0uZWF0KCIqIikpIHsKICAgICAgICAgICAgcmV0dXJuIGNoYWluKHN0cmVhbSwgc3RhdGUsIHRva2VuQ29tbWVudCk7CiAgICAgICAgfQogICAgICAgIC8vIHVucGFyc2VkIGNvbnRlbnQ/CiAgICAgICAgZWxzZSBpZiAoY2ggPT0gIiMiICYmIHN0cmVhbS5tYXRjaCgvICpcWyAqXFsvKSkgewogICAgICAgICAgICByZXR1cm4gY2hhaW4oc3RyZWFtLCBzdGF0ZSwgdG9rZW5VbnBhcnNlZCk7CiAgICAgICAgfQogICAgICAgIC8vIHNpbmdsZSBsaW5lIGNvbW1lbnQ/CiAgICAgICAgZWxzZSBpZiAoY2ggPT0gIiMiICYmIHN0cmVhbS5lYXQoIiMiKSkgewogICAgICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgICAgICAgIHJldHVybiAiY29tbWVudCI7CiAgICAgICAgfQogICAgICAgIC8vIHZhcmlhYmxlPwogICAgICAgIGVsc2UgaWYgKGNoID09ICIkIikgewogICAgICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1xkXCRfXC57fV0vKTsKICAgICAgICAgICAgLy8gaXMgaXQgb25lIG9mIHRoZSBzcGVjaWFscz8KICAgICAgICAgICAgaWYgKHNwZWNpYWxzICYmIHNwZWNpYWxzLnByb3BlcnR5SXNFbnVtZXJhYmxlKHN0cmVhbS5jdXJyZW50KCkudG9Mb3dlckNhc2UoKSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiAia2V5d29yZCI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBzdGF0ZS5iZWZvcmVQYXJhbXMgPSB0cnVlOwogICAgICAgICAgICAgICAgcmV0dXJuICJidWlsdGluIjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyBpcyBpdCBhIG9wZXJhdG9yPwogICAgICAgIGVsc2UgaWYgKGlzT3BlcmF0b3JDaGFyLnRlc3QoY2gpKSB7CiAgICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZShpc09wZXJhdG9yQ2hhcik7CiAgICAgICAgICAgIHJldHVybiAib3BlcmF0b3IiOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgLy8gZ2V0IHRoZSB3aG9sZSB3b3JkCiAgICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XCRfe31dLyk7CiAgICAgICAgICAgIHZhciB3b3JkID0gc3RyZWFtLmN1cnJlbnQoKS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICAvLyBpcyBpdCBvbmUgb2YgdGhlIGxpc3RlZCBrZXl3b3Jkcz8KICAgICAgICAgICAgaWYgKGtleXdvcmRzICYmIGtleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKHdvcmQpKQogICAgICAgICAgICAgICAgcmV0dXJuICJrZXl3b3JkIjsKICAgICAgICAgICAgLy8gaXMgaXQgb25lIG9mIHRoZSBsaXN0ZWQgZnVuY3Rpb25zPwogICAgICAgICAgICBpZiAoZnVuY3Rpb25zICYmIGZ1bmN0aW9ucy5wcm9wZXJ0eUlzRW51bWVyYWJsZSh3b3JkKSB8fAogICAgICAgICAgICAgICAgc3RyZWFtLmN1cnJlbnQoKS5tYXRjaCgvXiNbYS16MC05X10rICokL2kpICYmIHN0cmVhbS5wZWVrKCk9PSIoIikgewogICAgICAgICAgICAgICAgc3RhdGUuYmVmb3JlUGFyYW1zID0gdHJ1ZTsKICAgICAgICAgICAgICAgIHJldHVybiAia2V5d29yZCI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gZGVmYXVsdDoganVzdCBhICJ3b3JkIgogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gdG9rZW5TdHJpbmcocXVvdGUpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICAgICAgICB2YXIgZXNjYXBlZCA9IGZhbHNlLCBuZXh0LCBlbmQgPSBmYWxzZTsKICAgICAgICAgICAgd2hpbGUgKChuZXh0ID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgaWYgKG5leHQgPT0gcXVvdGUgJiYgIWVzY2FwZWQpIHsKICAgICAgICAgICAgICAgICAgICBlbmQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkICYmIG5leHQgPT0gIlxcIjsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoZW5kKSBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsKICAgICAgICAgICAgcmV0dXJuICJzdHJpbmciOwogICAgICAgIH07CiAgICB9CgogICAgZnVuY3Rpb24gdG9rZW5Db21tZW50KHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICB2YXIgbWF5YmVFbmQgPSBmYWxzZSwgY2g7CiAgICAgICAgd2hpbGUgKGNoID0gc3RyZWFtLm5leHQoKSkgewogICAgICAgICAgICBpZiAoY2ggPT0gIiMiICYmIG1heWJlRW5kKSB7CiAgICAgICAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG1heWJlRW5kID0gKGNoID09ICIqIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiAiY29tbWVudCI7CiAgICB9CgogICAgZnVuY3Rpb24gdG9rZW5VbnBhcnNlZChzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgdmFyIG1heWJlRW5kID0gMCwgY2g7CiAgICAgICAgd2hpbGUgKGNoID0gc3RyZWFtLm5leHQoKSkgewogICAgICAgICAgICBpZiAoY2ggPT0gIiMiICYmIG1heWJlRW5kID09IDIpIHsKICAgICAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGNoID09ICJdIikKICAgICAgICAgICAgICAgIG1heWJlRW5kKys7CiAgICAgICAgICAgIGVsc2UgaWYgKGNoICE9ICIgIikKICAgICAgICAgICAgICAgIG1heWJlRW5kID0gMDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICJtZXRhIjsKICAgIH0KICAgIC8vIEludGVyZmFjZQoKICAgIHJldHVybiB7CiAgICAgICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oYmFzZWNvbHVtbikgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgdG9rZW5pemU6IHRva2VuQmFzZSwKICAgICAgICAgICAgICAgIGJlZm9yZVBhcmFtczogZmFsc2UsCiAgICAgICAgICAgICAgICBpblBhcmFtczogZmFsc2UKICAgICAgICAgICAgfTsKICAgICAgICB9LAoKICAgICAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICAgICAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHJldHVybiBudWxsOwogICAgICAgICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICAgICAgfQogICAgfTsKfSk7CgpDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQvdmVsb2NpdHkiLCAidmVsb2NpdHkiKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/verilog/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/verilog/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFZlcmlsb2cgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9InZlcmlsb2cuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogICAgPHN0eWxlPi5Db2RlTWlycm9yIHtib3JkZXI6IDJweCBpbnNldCAjZGVlO308L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBWZXJpbG9nIG1vZGU8L2gxPgoKPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KLyogVmVyaWxvZyBkZW1vIGNvZGUgKi8KCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwovLy8vICB3Yl9tYXN0ZXJfbW9kZWwudiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLy8vLyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFNQSSBJUCBjb3JlIHByb2plY3QgICAgICAgICAgICAgICAgLy8vLwovLy8vICBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvcHJvamVjdHMvc3BpLyAgICAgICAgICAgICAgICAgICAgICAvLy8vCi8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLy8vLyAgQXV0aG9yKHMpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwovLy8vICAgICAgLSBTaW1vbiBTcm90IChzaW1vbnNAb3BlbmNvcmVzLm9yZykgICAgICAgICAgICAgICAgICAgICAvLy8vCi8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLy8vLyAgQmFzZWQgb246ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwovLy8vICAgICAgLSBpMmMvYmVuY2gvdmVyaWxvZy93Yl9tYXN0ZXJfbW9kZWwudiAgICAgICAgICAgICAgICAgICAvLy8vCi8vLy8gICAgICAgIENvcHlyaWdodCAoQykgMjAwMSBSaWNoYXJkIEhlcnZlaWxsZSAgICAgICAgICAgICAgICAgIC8vLy8KLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwovLy8vICBBbGwgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpcyBhdmFsaWFibGUgaW4gdGhlIFJlYWRtZS50eHQgICAvLy8vCi8vLy8gIGZpbGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDIgQXV0aG9ycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwovLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIC8vLy8KLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAgLy8vLwovLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zICAvLy8vCi8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIC8vLy8KLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwovLy8vIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgICAvLy8vCi8vLy8gYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIC8vLy8KLy8vLyBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgLy8vLwovLy8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgICAvLy8vCi8vLy8gbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwovLy8vIFRoaXMgc291cmNlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSAgICAgICAvLy8vCi8vLy8gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIC8vLy8KLy8vLyB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSICAgICAgLy8vLwovLy8vIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSAvLy8vCi8vLy8gZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwovLy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgICAvLy8vCi8vLy8gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIC8vLy8KLy8vLyBmcm9tIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9sZ3BsLnNodG1sICAgICAgICAgICAgICAgICAgICAgLy8vLwovLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KCmBpbmNsdWRlICJ0aW1lc2NhbGUudiIKCm1vZHVsZSB3Yl9tYXN0ZXJfbW9kZWwoY2xrLCByc3QsIGFkciwgZGluLCBkb3V0LCBjeWMsIHN0Yiwgd2UsIHNlbCwgYWNrLCBlcnIsIHJ0eSk7CgogIHBhcmFtZXRlciBkd2lkdGggPSAzMjsKICBwYXJhbWV0ZXIgYXdpZHRoID0gMzI7CiAgCiAgaW5wdXQgICAgICAgICAgICAgICAgICBjbGssIHJzdDsKICBvdXRwdXQgW2F3aWR0aCAgIC0xOjBdIGFkcjsKICBpbnB1dCAgW2R3aWR0aCAgIC0xOjBdIGRpbjsKICBvdXRwdXQgW2R3aWR0aCAgIC0xOjBdIGRvdXQ7CiAgb3V0cHV0ICAgICAgICAgICAgICAgICBjeWMsIHN0YjsKICBvdXRwdXQgICAgICAgICAgICAgICAgIHdlOwogIG91dHB1dCBbZHdpZHRoLzggLTE6MF0gc2VsOwogIGlucHV0ICAgICAgICAgICAgICAgICAgYWNrLCBlcnIsIHJ0eTsKICAKICAvLyBJbnRlcm5hbCBzaWduYWxzCiAgcmVnICAgIFthd2lkdGggICAtMTowXSBhZHI7CiAgcmVnICAgIFtkd2lkdGggICAtMTowXSBkb3V0OwogIHJlZyAgICAgICAgICAgICAgICAgICAgY3ljLCBzdGI7CiAgcmVnICAgICAgICAgICAgICAgICAgICB3ZTsKICByZWcgICAgW2R3aWR0aC84IC0xOjBdIHNlbDsKICAgICAgICAgCiAgcmVnICAgIFtkd2lkdGggICAtMTowXSBxOwogIAogIC8vIE1lbW9yeSBMb2dpYwogIGluaXRpYWwKICAgIGJlZ2luCiAgICAgIGFkciAgPSB7YXdpZHRoezEnYnh9fTsKICAgICAgZG91dCA9IHtkd2lkdGh7MSdieH19OwogICAgICBjeWMgID0gMSdiMDsKICAgICAgc3RiICA9IDEnYng7CiAgICAgIHdlICAgPSAxJ2h4OwogICAgICBzZWwgID0ge2R3aWR0aC84ezEnYnh9fTsKICAgICAgIzE7CiAgICBlbmQKICAKICAvLyBXaXNoYm9uZSB3cml0ZSBjeWNsZQogIHRhc2sgd2Jfd3JpdGU7CiAgICBpbnB1dCAgIGRlbGF5OwogICAgaW50ZWdlciBkZWxheTsKICAKICAgIGlucHV0IFthd2lkdGggLTE6MF0gYTsKICAgIGlucHV0IFtkd2lkdGggLTE6MF0gZDsKICAKICAgIGJlZ2luCiAgCiAgICAgIC8vIHdhaXQgaW5pdGlhbCBkZWxheQogICAgICByZXBlYXQoZGVsYXkpIEAocG9zZWRnZSBjbGspOwogIAogICAgICAvLyBhc3NlcnQgd2lzaGJvbmUgc2lnbmFsCiAgICAgICMxOwogICAgICBhZHIgID0gYTsKICAgICAgZG91dCA9IGQ7CiAgICAgIGN5YyAgPSAxJ2IxOwogICAgICBzdGIgID0gMSdiMTsKICAgICAgd2UgICA9IDEnYjE7CiAgICAgIHNlbCAgPSB7ZHdpZHRoLzh7MSdiMX19OwogICAgICBAKHBvc2VkZ2UgY2xrKTsKICAKICAgICAgLy8gd2FpdCBmb3IgYWNrbm93bGVkZ2UgZnJvbSBzbGF2ZQogICAgICB3aGlsZSh+YWNrKSBAKHBvc2VkZ2UgY2xrKTsKICAKICAgICAgLy8gbmVnYXRlIHdpc2hib25lIHNpZ25hbHMKICAgICAgIzE7CiAgICAgIGN5YyAgPSAxJ2IwOwogICAgICBzdGIgID0gMSdieDsKICAgICAgYWRyICA9IHthd2lkdGh7MSdieH19OwogICAgICBkb3V0ID0ge2R3aWR0aHsxJ2J4fX07CiAgICAgIHdlICAgPSAxJ2h4OwogICAgICBzZWwgID0ge2R3aWR0aC84ezEnYnh9fTsKICAKICAgIGVuZAogIGVuZHRhc2sKICAKICAvLyBXaXNoYm9uZSByZWFkIGN5Y2xlCiAgdGFzayB3Yl9yZWFkOwogICAgaW5wdXQgICBkZWxheTsKICAgIGludGVnZXIgZGVsYXk7CiAgCiAgICBpbnB1dCAgW2F3aWR0aCAtMTowXSAgYTsKICAgIG91dHB1dCAgW2R3aWR0aCAtMTowXSBkOwogIAogICAgYmVnaW4KICAKICAgICAgLy8gd2FpdCBpbml0aWFsIGRlbGF5CiAgICAgIHJlcGVhdChkZWxheSkgQChwb3NlZGdlIGNsayk7CiAgCiAgICAgIC8vIGFzc2VydCB3aXNoYm9uZSBzaWduYWxzCiAgICAgICMxOwogICAgICBhZHIgID0gYTsKICAgICAgZG91dCA9IHtkd2lkdGh7MSdieH19OwogICAgICBjeWMgID0gMSdiMTsKICAgICAgc3RiICA9IDEnYjE7CiAgICAgIHdlICAgPSAxJ2IwOwogICAgICBzZWwgID0ge2R3aWR0aC84ezEnYjF9fTsKICAgICAgQChwb3NlZGdlIGNsayk7CiAgCiAgICAgIC8vIHdhaXQgZm9yIGFja25vd2xlZGdlIGZyb20gc2xhdmUKICAgICAgd2hpbGUofmFjaykgQChwb3NlZGdlIGNsayk7CiAgCiAgICAgIC8vIG5lZ2F0ZSB3aXNoYm9uZSBzaWduYWxzCiAgICAgICMxOwogICAgICBjeWMgID0gMSdiMDsKICAgICAgc3RiICA9IDEnYng7CiAgICAgIGFkciAgPSB7YXdpZHRoezEnYnh9fTsKICAgICAgZG91dCA9IHtkd2lkdGh7MSdieH19OwogICAgICB3ZSAgID0gMSdoeDsKICAgICAgc2VsICA9IHtkd2lkdGgvOHsxJ2J4fX07CiAgICAgIGQgICAgPSBkaW47CiAgCiAgICBlbmQKICBlbmR0YXNrCiAgCiAgLy8gV2lzaGJvbmUgY29tcGFyZSBjeWNsZSAocmVhZCBkYXRhIGZyb20gbG9jYXRpb24gYW5kIGNvbXBhcmUgd2l0aCBleHBlY3RlZCBkYXRhKQogIHRhc2sgd2JfY21wOwogICAgaW5wdXQgICBkZWxheTsKICAgIGludGVnZXIgZGVsYXk7CiAgCiAgICBpbnB1dCBbYXdpZHRoIC0xOjBdIGE7CiAgICBpbnB1dCBbZHdpZHRoIC0xOjBdIGRfZXhwOwogIAogICAgYmVnaW4KICAgICAgd2JfcmVhZCAoZGVsYXksIGEsIHEpOwoKICAgICAgaWYgKGRfZXhwICE9PSBxKSBiZWdpbgogICAgICAgICRkaXNwbGF5KCJcbi0tLSBFUlJPUjogQXQgYWRkcmVzcyAweCUweCwgZ290IDB4JTB4LCBleHBlY3RlZCAweCUweCBhdCB0aW1lICV0IiwgYSwgcSwgZF9leHAsICR0aW1lKTsKICAgICAgICAkc3RvcDsKICAgICAgZW5kCiAgICBlbmQKICBlbmR0YXNrCiAgCmVuZG1vZHVsZQo8L3RleHRhcmVhPjwvZm9ybT4KCiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUsCiAgICAgICAgbW9kZTogInRleHQveC12ZXJpbG9nIgogICAgICB9KTsKICAgIDwvc2NyaXB0PgoKICAgIDxwPlNpbXBsZSBtb2RlIHRoYXQgdHJpZXMgdG8gaGFuZGxlIFZlcmlsb2ctbGlrZSBsYW5ndWFnZXMgYXMgd2VsbCBhcyBpdAogICAgY2FuLiBUYWtlcyBvbmUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzOiA8Y29kZT5rZXl3b3JkczwvY29kZT4sIGFuCiAgICBvYmplY3Qgd2hvc2UgcHJvcGVydHkgbmFtZXMgYXJlIHRoZSBrZXl3b3JkcyBpbiB0aGUgbGFuZ3VhZ2UuPC9wPgoKICAgIDxwPjxzdHJvbmc+TUlNRSB0eXBlcyBkZWZpbmVkOjwvc3Ryb25nPiA8Y29kZT50ZXh0L3gtdmVyaWxvZzwvY29kZT4gKFZlcmlsb2cgY29kZSkuPC9wPgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/verilog/verilog.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJ2ZXJpbG9nIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsNCiAgdmFyIGluZGVudFVuaXQgPSBjb25maWcuaW5kZW50VW5pdCwNCiAgICAgIGtleXdvcmRzID0gcGFyc2VyQ29uZmlnLmtleXdvcmRzIHx8IHt9LA0KICAgICAgYmxvY2tLZXl3b3JkcyA9IHBhcnNlckNvbmZpZy5ibG9ja0tleXdvcmRzIHx8IHt9LA0KICAgICAgYXRvbXMgPSBwYXJzZXJDb25maWcuYXRvbXMgfHwge30sDQogICAgICBob29rcyA9IHBhcnNlckNvbmZpZy5ob29rcyB8fCB7fSwNCiAgICAgIG11bHRpTGluZVN0cmluZ3MgPSBwYXJzZXJDb25maWcubXVsdGlMaW5lU3RyaW5nczsNCiAgdmFyIGlzT3BlcmF0b3JDaGFyID0gL1smfH4+PCFcKVwoKiMlQCtcLz0/XDo7fXssXC5cXlwtXFtcXV0vOw0KDQogIHZhciBjdXJQdW5jOw0KDQogIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7DQogICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsNCiAgICBpZiAoaG9va3NbY2hdKSB7DQogICAgICB2YXIgcmVzdWx0ID0gaG9va3NbY2hdKHN0cmVhbSwgc3RhdGUpOw0KICAgICAgaWYgKHJlc3VsdCAhPT0gZmFsc2UpIHJldHVybiByZXN1bHQ7DQogICAgfQ0KICAgIGlmIChjaCA9PSAnIicpIHsNCiAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5TdHJpbmcoY2gpOw0KICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOw0KICAgIH0NCiAgICBpZiAoL1tcW1xde31cKFwpLDtcOlwuXS8udGVzdChjaCkpIHsNCiAgICAgIGN1clB1bmMgPSBjaDsNCiAgICAgIHJldHVybiBudWxsDQogICAgfQ0KICAgIGlmICgvW1xkJ10vLnRlc3QoY2gpKSB7DQogICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1wuJ10vKTsNCiAgICAgIHJldHVybiAibnVtYmVyIjsNCiAgICB9DQogICAgaWYgKGNoID09ICIvIikgew0KICAgICAgaWYgKHN0cmVhbS5lYXQoIioiKSkgew0KICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQ29tbWVudDsNCiAgICAgICAgcmV0dXJuIHRva2VuQ29tbWVudChzdHJlYW0sIHN0YXRlKTsNCiAgICAgIH0NCiAgICAgIGlmIChzdHJlYW0uZWF0KCIvIikpIHsNCiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOw0KICAgICAgICByZXR1cm4gImNvbW1lbnQiOw0KICAgICAgfQ0KICAgIH0NCiAgICBpZiAoaXNPcGVyYXRvckNoYXIudGVzdChjaCkpIHsNCiAgICAgIHN0cmVhbS5lYXRXaGlsZShpc09wZXJhdG9yQ2hhcik7DQogICAgICByZXR1cm4gIm9wZXJhdG9yIjsNCiAgICB9DQogICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcJF9dLyk7DQogICAgdmFyIGN1ciA9IHN0cmVhbS5jdXJyZW50KCk7DQogICAgaWYgKGtleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKGN1cikpIHsNCiAgICAgIGlmIChibG9ja0tleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKGN1cikpIGN1clB1bmMgPSAibmV3c3RhdGVtZW50IjsNCiAgICAgIHJldHVybiAia2V5d29yZCI7DQogICAgfQ0KICAgIGlmIChhdG9tcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShjdXIpKSByZXR1cm4gImF0b20iOw0KICAgIHJldHVybiAid29yZCI7DQogIH0NCg0KICBmdW5jdGlvbiB0b2tlblN0cmluZyhxdW90ZSkgew0KICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7DQogICAgICB2YXIgZXNjYXBlZCA9IGZhbHNlLCBuZXh0LCBlbmQgPSBmYWxzZTsNCiAgICAgIHdoaWxlICgobmV4dCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHsNCiAgICAgICAgaWYgKG5leHQgPT0gcXVvdGUgJiYgIWVzY2FwZWQpIHtlbmQgPSB0cnVlOyBicmVhazt9DQogICAgICAgIGVzY2FwZWQgPSAhZXNjYXBlZCAmJiBuZXh0ID09ICJcXCI7DQogICAgICB9DQogICAgICBpZiAoZW5kIHx8ICEoZXNjYXBlZCB8fCBtdWx0aUxpbmVTdHJpbmdzKSkNCiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7DQogICAgICByZXR1cm4gInN0cmluZyI7DQogICAgfTsNCiAgfQ0KDQogIGZ1bmN0aW9uIHRva2VuQ29tbWVudChzdHJlYW0sIHN0YXRlKSB7DQogICAgdmFyIG1heWJlRW5kID0gZmFsc2UsIGNoOw0KICAgIHdoaWxlIChjaCA9IHN0cmVhbS5uZXh0KCkpIHsNCiAgICAgIGlmIChjaCA9PSAiLyIgJiYgbWF5YmVFbmQpIHsNCiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7DQogICAgICAgIGJyZWFrOw0KICAgICAgfQ0KICAgICAgbWF5YmVFbmQgPSAoY2ggPT0gIioiKTsNCiAgICB9DQogICAgcmV0dXJuICJjb21tZW50IjsNCiAgfQ0KDQogIGZ1bmN0aW9uIENvbnRleHQoaW5kZW50ZWQsIGNvbHVtbiwgdHlwZSwgYWxpZ24sIHByZXYpIHsNCiAgICB0aGlzLmluZGVudGVkID0gaW5kZW50ZWQ7DQogICAgdGhpcy5jb2x1bW4gPSBjb2x1bW47DQogICAgdGhpcy50eXBlID0gdHlwZTsNCiAgICB0aGlzLmFsaWduID0gYWxpZ247DQogICAgdGhpcy5wcmV2ID0gcHJldjsNCiAgfQ0KICBmdW5jdGlvbiBwdXNoQ29udGV4dChzdGF0ZSwgY29sLCB0eXBlKSB7DQogICAgcmV0dXJuIHN0YXRlLmNvbnRleHQgPSBuZXcgQ29udGV4dChzdGF0ZS5pbmRlbnRlZCwgY29sLCB0eXBlLCBudWxsLCBzdGF0ZS5jb250ZXh0KTsNCiAgfQ0KICBmdW5jdGlvbiBwb3BDb250ZXh0KHN0YXRlKSB7DQogICAgdmFyIHQgPSBzdGF0ZS5jb250ZXh0LnR5cGU7DQogICAgaWYgKHQgPT0gIikiIHx8IHQgPT0gIl0iIHx8IHQgPT0gIn0iKQ0KICAgICAgc3RhdGUuaW5kZW50ZWQgPSBzdGF0ZS5jb250ZXh0LmluZGVudGVkOw0KICAgIHJldHVybiBzdGF0ZS5jb250ZXh0ID0gc3RhdGUuY29udGV4dC5wcmV2Ow0KICB9DQoNCiAgLy8gSW50ZXJmYWNlDQoNCiAgcmV0dXJuIHsNCiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbihiYXNlY29sdW1uKSB7DQogICAgICByZXR1cm4gew0KICAgICAgICB0b2tlbml6ZTogbnVsbCwNCiAgICAgICAgY29udGV4dDogbmV3IENvbnRleHQoKGJhc2Vjb2x1bW4gfHwgMCkgLSBpbmRlbnRVbml0LCAwLCAidG9wIiwgZmFsc2UpLA0KICAgICAgICBpbmRlbnRlZDogMCwNCiAgICAgICAgc3RhcnRPZkxpbmU6IHRydWUNCiAgICAgIH07DQogICAgfSwNCg0KICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7DQogICAgICB2YXIgY3R4ID0gc3RhdGUuY29udGV4dDsNCiAgICAgIGlmIChzdHJlYW0uc29sKCkpIHsNCiAgICAgICAgaWYgKGN0eC5hbGlnbiA9PSBudWxsKSBjdHguYWxpZ24gPSBmYWxzZTsNCiAgICAgICAgc3RhdGUuaW5kZW50ZWQgPSBzdHJlYW0uaW5kZW50YXRpb24oKTsNCiAgICAgICAgc3RhdGUuc3RhcnRPZkxpbmUgPSB0cnVlOw0KICAgICAgfQ0KICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDsNCiAgICAgIGN1clB1bmMgPSBudWxsOw0KICAgICAgdmFyIHN0eWxlID0gKHN0YXRlLnRva2VuaXplIHx8IHRva2VuQmFzZSkoc3RyZWFtLCBzdGF0ZSk7DQogICAgICBpZiAoc3R5bGUgPT0gImNvbW1lbnQiIHx8IHN0eWxlID09ICJtZXRhIikgcmV0dXJuIHN0eWxlOw0KICAgICAgaWYgKGN0eC5hbGlnbiA9PSBudWxsKSBjdHguYWxpZ24gPSB0cnVlOw0KDQogICAgICBpZiAoKGN1clB1bmMgPT0gIjsiIHx8IGN1clB1bmMgPT0gIjoiKSAmJiBjdHgudHlwZSA9PSAic3RhdGVtZW50IikgcG9wQ29udGV4dChzdGF0ZSk7DQogICAgICBlbHNlIGlmIChjdXJQdW5jID09ICJ7IikgcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbS5jb2x1bW4oKSwgIn0iKTsNCiAgICAgIGVsc2UgaWYgKGN1clB1bmMgPT0gIlsiKSBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLmNvbHVtbigpLCAiXSIpOw0KICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSAiKCIpIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0uY29sdW1uKCksICIpIik7DQogICAgICBlbHNlIGlmIChjdXJQdW5jID09ICJ9Iikgew0KICAgICAgICB3aGlsZSAoY3R4LnR5cGUgPT0gInN0YXRlbWVudCIpIGN0eCA9IHBvcENvbnRleHQoc3RhdGUpOw0KICAgICAgICBpZiAoY3R4LnR5cGUgPT0gIn0iKSBjdHggPSBwb3BDb250ZXh0KHN0YXRlKTsNCiAgICAgICAgd2hpbGUgKGN0eC50eXBlID09ICJzdGF0ZW1lbnQiKSBjdHggPSBwb3BDb250ZXh0KHN0YXRlKTsNCiAgICAgIH0NCiAgICAgIGVsc2UgaWYgKGN1clB1bmMgPT0gY3R4LnR5cGUpIHBvcENvbnRleHQoc3RhdGUpOw0KICAgICAgZWxzZSBpZiAoY3R4LnR5cGUgPT0gIn0iIHx8IGN0eC50eXBlID09ICJ0b3AiIHx8IChjdHgudHlwZSA9PSAic3RhdGVtZW50IiAmJiBjdXJQdW5jID09ICJuZXdzdGF0ZW1lbnQiKSkNCiAgICAgICAgcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbS5jb2x1bW4oKSwgInN0YXRlbWVudCIpOw0KICAgICAgc3RhdGUuc3RhcnRPZkxpbmUgPSBmYWxzZTsNCiAgICAgIHJldHVybiBzdHlsZTsNCiAgICB9LA0KDQogICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7DQogICAgICBpZiAoc3RhdGUudG9rZW5pemUgIT0gdG9rZW5CYXNlICYmIHN0YXRlLnRva2VuaXplICE9IG51bGwpIHJldHVybiAwOw0KICAgICAgdmFyIGZpcnN0Q2hhciA9IHRleHRBZnRlciAmJiB0ZXh0QWZ0ZXIuY2hhckF0KDApLCBjdHggPSBzdGF0ZS5jb250ZXh0LCBjbG9zaW5nID0gZmlyc3RDaGFyID09IGN0eC50eXBlOw0KICAgICAgaWYgKGN0eC50eXBlID09ICJzdGF0ZW1lbnQiKSByZXR1cm4gY3R4LmluZGVudGVkICsgKGZpcnN0Q2hhciA9PSAieyIgPyAwIDogaW5kZW50VW5pdCk7DQogICAgICBlbHNlIGlmIChjdHguYWxpZ24pIHJldHVybiBjdHguY29sdW1uICsgKGNsb3NpbmcgPyAwIDogMSk7DQogICAgICBlbHNlIHJldHVybiBjdHguaW5kZW50ZWQgKyAoY2xvc2luZyA/IDAgOiBpbmRlbnRVbml0KTsNCiAgICB9LA0KDQogICAgZWxlY3RyaWNDaGFyczogInt9Ig0KICB9Ow0KfSk7DQoNCihmdW5jdGlvbigpIHsNCiAgZnVuY3Rpb24gd29yZHMoc3RyKSB7DQogICAgdmFyIG9iaiA9IHt9LCB3b3JkcyA9IHN0ci5zcGxpdCgiICIpOw0KICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd29yZHMubGVuZ3RoOyArK2kpIG9ialt3b3Jkc1tpXV0gPSB0cnVlOw0KICAgIHJldHVybiBvYmo7DQogIH0NCg0KICB2YXIgdmVyaWxvZ0tleXdvcmRzID0gImFsd2F5cyBhbmQgYXNzaWduIGF1dG9tYXRpYyBiZWdpbiBidWYgYnVmaWYwIGJ1ZmlmMSBjYXNlIGNhc2V4IGNhc2V6IGNlbGwgY21vcyBjb25maWcgIiArDQogICAgImRlYXNzaWduIGRlZmF1bHQgZGVmcGFyYW0gZGVzaWduIGRpc2FibGUgZWRnZSBlbHNlIGVuZCBlbmRjYXNlIGVuZGNvbmZpZyBlbmRmdW5jdGlvbiBlbmRnZW5lcmF0ZSBlbmRtb2R1bGUgIiArDQogICAgImVuZHByaW1pdGl2ZSBlbmRzcGVjaWZ5IGVuZHRhYmxlIGVuZHRhc2sgZXZlbnQgZm9yIGZvcmNlIGZvcmV2ZXIgZm9yayBmdW5jdGlvbiBnZW5lcmF0ZSBnZW52YXIgaGlnaHowICIgKw0KICAgICJoaWdoejEgaWYgaWZub25lIGluY2RpciBpbmNsdWRlIGluaXRpYWwgaW5vdXQgaW5wdXQgaW5zdGFuY2UgaW50ZWdlciBqb2luIGxhcmdlIGxpYmxpc3QgbGlicmFyeSBsb2NhbHBhcmFtICIgKw0KICAgICJtYWNyb21vZHVsZSBtZWRpdW0gbW9kdWxlIG5hbmQgbmVnZWRnZSBubW9zIG5vciBub3Nob3djYW5jZWxsZWQgbm90IG5vdGlmMCBub3RpZjEgb3Igb3V0cHV0IHBhcmFtZXRlciBwbW9zICIgKw0KICAgICJwb3NlZGdlIHByaW1pdGl2ZSBwdWxsMCBwdWxsMSBwdWxsZG93biBwdWxsdXAgcHVsc2VzdHlsZV9vbmV2ZW50IHB1bHNlc3R5bGVfb25kZXRlY3QgcmNtb3MgcmVhbCByZWFsdGltZSAiICsNCiAgICAicmVnIHJlbGVhc2UgcmVwZWF0IHJubW9zIHJwbW9zIHJ0cmFuIHJ0cmFuaWYwIHJ0cmFuaWYxIHNjYWxhcmVkIHNob3djYW5jZWxsZWQgc2lnbmVkIHNtYWxsIHNwZWNpZnkgc3BlY3BhcmFtICIgKw0KICAgICJzdHJvbmcwIHN0cm9uZzEgc3VwcGx5MCBzdXBwbHkxIHRhYmxlIHRhc2sgdGltZSB0cmFuIHRyYW5pZjAgdHJhbmlmMSB0cmkgdHJpMCB0cmkxIHRyaWFuZCB0cmlvciB0cmlyZWcgIiArDQogICAgInVuc2lnbmVkIHVzZSB2ZWN0b3JlZCB3YWl0IHdhbmQgd2VhazAgd2VhazEgd2hpbGUgd2lyZSB3b3IgeG5vciB4b3IiOw0KDQogIHZhciB2ZXJpbG9nQmxvY2tLZXl3b3JkcyA9ICJiZWdpbiBidWZpZjAgYnVmaWYxIGNhc2UgY2FzZXggY2FzZXogY29uZmlnIGVsc2UgZW5kIGVuZGNhc2UgZW5kY29uZmlnIGVuZGZ1bmN0aW9uICIgKw0KICAgICJlbmRnZW5lcmF0ZSBlbmRtb2R1bGUgZW5kcHJpbWl0aXZlIGVuZHNwZWNpZnkgZW5kdGFibGUgZW5kdGFzayBmb3IgZm9yZXZlciBmdW5jdGlvbiBnZW5lcmF0ZSBpZiBpZm5vbmUgIiArDQogICAgIm1hY3JvbW9kdWxlIG1vZHVsZSBwcmltaXRpdmUgcmVwZWF0IHNwZWNpZnkgdGFibGUgdGFzayB3aGlsZSI7DQoNCiAgZnVuY3Rpb24gbWV0YUhvb2soc3RyZWFtLCBzdGF0ZSkgew0KICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XCRfXS8pOw0KICAgIHJldHVybiAibWV0YSI7DQogIH0NCg0KICAvLyBDIy1zdHlsZSBzdHJpbmdzIHdoZXJlICIiIGVzY2FwZXMgYSBxdW90ZS4NCiAgZnVuY3Rpb24gdG9rZW5BdFN0cmluZyhzdHJlYW0sIHN0YXRlKSB7DQogICAgdmFyIG5leHQ7DQogICAgd2hpbGUgKChuZXh0ID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkgew0KICAgICAgaWYgKG5leHQgPT0gJyInICYmICFzdHJlYW0uZWF0KCciJykpIHsNCiAgICAgICAgc3RhdGUudG9rZW5pemUgPSBudWxsOw0KICAgICAgICBicmVhazsNCiAgICAgIH0NCiAgICB9DQogICAgcmV0dXJuICJzdHJpbmciOw0KICB9DQoNCiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtdmVyaWxvZyIsIHsNCiAgICBuYW1lOiAidmVyaWxvZyIsDQogICAga2V5d29yZHM6IHdvcmRzKHZlcmlsb2dLZXl3b3JkcyksDQogICAgYmxvY2tLZXl3b3Jkczogd29yZHModmVyaWxvZ0Jsb2NrS2V5d29yZHMpLA0KICAgIGF0b21zOiB3b3JkcygibnVsbCIpLA0KICAgIGhvb2tzOiB7ImAiOiBtZXRhSG9vaywgIiQiOiBtZXRhSG9va30NCiAgfSk7DQp9KCkpOw0K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/xml/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/xml/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFhNTCBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0ieG1sLmpzIj48L3NjcmlwdD4KICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO308L3N0eWxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBYTUwgbW9kZTwvaDE+CiAgICA8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgombHQ7aHRtbCBzdHlsZT0iY29sb3I6IGdyZWVuIiZndDsKICAmbHQ7IS0tIHRoaXMgaXMgYSBjb21tZW50IC0tJmd0OwogICZsdDtoZWFkJmd0OwogICAgJmx0O3RpdGxlJmd0O0hUTUwgRXhhbXBsZSZsdDsvdGl0bGUmZ3Q7CiAgJmx0Oy9oZWFkJmd0OwogICZsdDtib2R5Jmd0OwogICAgVGhlIGluZGVudGF0aW9uIHRyaWVzIHRvIGJlICZsdDtlbSZndDtzb21ld2hhdCAmYW1wO3F1b3Q7ZG8gd2hhdAogICAgSSBtZWFuJmFtcDtxdW90OyZsdDsvZW0mZ3Q7Li4uIGJ1dCBtaWdodCBub3QgbWF0Y2ggeW91ciBzdHlsZS4KICAmbHQ7L2JvZHkmZ3Q7CiZsdDsvaHRtbCZndDsKPC90ZXh0YXJlYT48L2Zvcm0+CiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIG1vZGU6IHtuYW1lOiAieG1sIiwgYWxpZ25DREFUQTogdHJ1ZX0sCiAgICAgICAgbGluZU51bWJlcnM6IHRydWUKICAgICAgfSk7CiAgICA8L3NjcmlwdD4KICAgIDxwPlRoZSBYTUwgbW9kZSBzdXBwb3J0cyB0d28gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzOjwvcD4KICAgIDxkbD4KICAgICAgPGR0Pjxjb2RlPmh0bWxNb2RlIChib29sZWFuKTwvY29kZT48L2R0PgogICAgICA8ZGQ+VGhpcyBzd2l0Y2hlcyB0aGUgbW9kZSB0byBwYXJzZSBIVE1MIGluc3RlYWQgb2YgWE1MLiBUaGlzCiAgICAgIG1lYW5zIGF0dHJpYnV0ZXMgZG8gbm90IGhhdmUgdG8gYmUgcXVvdGVkLCBhbmQgc29tZSBlbGVtZW50cwogICAgICAoc3VjaCBhcyA8Y29kZT5icjwvY29kZT4pIGRvIG5vdCByZXF1aXJlIGEgY2xvc2luZyB0YWcuPC9kZD4KICAgICAgPGR0Pjxjb2RlPmFsaWduQ0RBVEEgKGJvb2xlYW4pPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5TZXR0aW5nIHRoaXMgdG8gdHJ1ZSB3aWxsIGZvcmNlIHRoZSBvcGVuaW5nIHRhZyBvZiBDREFUQQogICAgICBibG9ja3MgdG8gbm90IGJlIGluZGVudGVkLjwvZGQ+CiAgICA8L2RsPgoKICAgIDxwPjxzdHJvbmc+TUlNRSB0eXBlcyBkZWZpbmVkOjwvc3Ryb25nPiA8Y29kZT5hcHBsaWNhdGlvbi94bWw8L2NvZGU+LCA8Y29kZT50ZXh0L2h0bWw8L2NvZGU+LjwvcD4KICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/xml/xml.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJ4bWwiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogIHZhciBpbmRlbnRVbml0ID0gY29uZmlnLmluZGVudFVuaXQ7CiAgdmFyIEtsdWRnZXMgPSBwYXJzZXJDb25maWcuaHRtbE1vZGUgPyB7CiAgICBhdXRvU2VsZkNsb3NlcnM6IHsiYnIiOiB0cnVlLCAiaW1nIjogdHJ1ZSwgImhyIjogdHJ1ZSwgImxpbmsiOiB0cnVlLCAiaW5wdXQiOiB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgIm1ldGEiOiB0cnVlLCAiY29sIjogdHJ1ZSwgImZyYW1lIjogdHJ1ZSwgImJhc2UiOiB0cnVlLCAiYXJlYSI6IHRydWV9LAogICAgZG9Ob3RJbmRlbnQ6IHsicHJlIjogdHJ1ZX0sCiAgICBhbGxvd1VucXVvdGVkOiB0cnVlCiAgfSA6IHthdXRvU2VsZkNsb3NlcnM6IHt9LCBkb05vdEluZGVudDoge30sIGFsbG93VW5xdW90ZWQ6IGZhbHNlfTsKICB2YXIgYWxpZ25DREFUQSA9IHBhcnNlckNvbmZpZy5hbGlnbkNEQVRBOwoKICAvLyBSZXR1cm4gdmFyaWFibGVzIGZvciB0b2tlbml6ZXJzCiAgdmFyIHRhZ05hbWUsIHR5cGU7CgogIGZ1bmN0aW9uIGluVGV4dChzdHJlYW0sIHN0YXRlKSB7CiAgICBmdW5jdGlvbiBjaGFpbihwYXJzZXIpIHsKICAgICAgc3RhdGUudG9rZW5pemUgPSBwYXJzZXI7CiAgICAgIHJldHVybiBwYXJzZXIoc3RyZWFtLCBzdGF0ZSk7CiAgICB9CgogICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKICAgIGlmIChjaCA9PSAiPCIpIHsKICAgICAgaWYgKHN0cmVhbS5lYXQoIiEiKSkgewogICAgICAgIGlmIChzdHJlYW0uZWF0KCJbIikpIHsKICAgICAgICAgIGlmIChzdHJlYW0ubWF0Y2goIkNEQVRBWyIpKSByZXR1cm4gY2hhaW4oaW5CbG9jaygiYXRvbSIsICJdXT4iKSk7CiAgICAgICAgICBlbHNlIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChzdHJlYW0ubWF0Y2goIi0tIikpIHJldHVybiBjaGFpbihpbkJsb2NrKCJjb21tZW50IiwgIi0tPiIpKTsKICAgICAgICBlbHNlIGlmIChzdHJlYW0ubWF0Y2goIkRPQ1RZUEUiLCB0cnVlLCB0cnVlKSkgewogICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcLl9cLV0vKTsKICAgICAgICAgIHJldHVybiBjaGFpbihkb2N0eXBlKDEpKTsKICAgICAgICB9CiAgICAgICAgZWxzZSByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICBlbHNlIGlmIChzdHJlYW0uZWF0KCI/IikpIHsKICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1wuX1wtXS8pOwogICAgICAgIHN0YXRlLnRva2VuaXplID0gaW5CbG9jaygibWV0YSIsICI/PiIpOwogICAgICAgIHJldHVybiAibWV0YSI7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgdHlwZSA9IHN0cmVhbS5lYXQoIi8iKSA/ICJjbG9zZVRhZyIgOiAib3BlblRhZyI7CiAgICAgICAgc3RyZWFtLmVhdFNwYWNlKCk7CiAgICAgICAgdGFnTmFtZSA9ICIiOwogICAgICAgIHZhciBjOwogICAgICAgIHdoaWxlICgoYyA9IHN0cmVhbS5lYXQoL1teXHNcdTAwYTA9PD5cIlwnXC8/XS8pKSkgdGFnTmFtZSArPSBjOwogICAgICAgIHN0YXRlLnRva2VuaXplID0gaW5UYWc7CiAgICAgICAgcmV0dXJuICJ0YWciOwogICAgICB9CiAgICB9CiAgICBlbHNlIGlmIChjaCA9PSAiJiIpIHsKICAgICAgdmFyIG9rOwogICAgICBpZiAoc3RyZWFtLmVhdCgiIyIpKSB7CiAgICAgICAgaWYgKHN0cmVhbS5lYXQoIngiKSkgewogICAgICAgICAgb2sgPSBzdHJlYW0uZWF0V2hpbGUoL1thLWZBLUZcZF0vKSAmJiBzdHJlYW0uZWF0KCI7Iik7ICAgICAgICAgIAogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBvayA9IHN0cmVhbS5lYXRXaGlsZSgvW1xkXS8pICYmIHN0cmVhbS5lYXQoIjsiKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgb2sgPSBzdHJlYW0uZWF0V2hpbGUoL1tcd10vKSAmJiBzdHJlYW0uZWF0KCI7Iik7CiAgICAgIH0KICAgICAgcmV0dXJuIG9rID8gImF0b20iIDogImVycm9yIjsKICAgIH0KICAgIGVsc2UgewogICAgICBzdHJlYW0uZWF0V2hpbGUoL1teJjxdLyk7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0KCiAgZnVuY3Rpb24gaW5UYWcoc3RyZWFtLCBzdGF0ZSkgewogICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKICAgIGlmIChjaCA9PSAiPiIgfHwgKGNoID09ICIvIiAmJiBzdHJlYW0uZWF0KCI+IikpKSB7CiAgICAgIHN0YXRlLnRva2VuaXplID0gaW5UZXh0OwogICAgICB0eXBlID0gY2ggPT0gIj4iID8gImVuZFRhZyIgOiAic2VsZmNsb3NlVGFnIjsKICAgICAgcmV0dXJuICJ0YWciOwogICAgfQogICAgZWxzZSBpZiAoY2ggPT0gIj0iKSB7CiAgICAgIHR5cGUgPSAiZXF1YWxzIjsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBlbHNlIGlmICgvW1wnXCJdLy50ZXN0KGNoKSkgewogICAgICBzdGF0ZS50b2tlbml6ZSA9IGluQXR0cmlidXRlKGNoKTsKICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwogICAgfQogICAgZWxzZSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW15cc1x1MDBhMD08PlwiXCdcLz9dLyk7CiAgICAgIHJldHVybiAid29yZCI7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBpbkF0dHJpYnV0ZShxdW90ZSkgewogICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgd2hpbGUgKCFzdHJlYW0uZW9sKCkpIHsKICAgICAgICBpZiAoc3RyZWFtLm5leHQoKSA9PSBxdW90ZSkgewogICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBpblRhZzsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gInN0cmluZyI7CiAgICB9OwogIH0KCiAgZnVuY3Rpb24gaW5CbG9jayhzdHlsZSwgdGVybWluYXRvcikgewogICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgd2hpbGUgKCFzdHJlYW0uZW9sKCkpIHsKICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKHRlcm1pbmF0b3IpKSB7CiAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGluVGV4dDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBzdHJlYW0ubmV4dCgpOwogICAgICB9CiAgICAgIHJldHVybiBzdHlsZTsKICAgIH07CiAgfQogIGZ1bmN0aW9uIGRvY3R5cGUoZGVwdGgpIHsKICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgIHZhciBjaDsKICAgICAgd2hpbGUgKChjaCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHsKICAgICAgICBpZiAoY2ggPT0gIjwiKSB7CiAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGRvY3R5cGUoZGVwdGggKyAxKTsKICAgICAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgICAgICB9IGVsc2UgaWYgKGNoID09ICI+IikgewogICAgICAgICAgaWYgKGRlcHRoID09IDEpIHsKICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBpblRleHQ7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBkb2N0eXBlKGRlcHRoIC0gMSk7CiAgICAgICAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuICJtZXRhIjsKICAgIH07CiAgfQoKICB2YXIgY3VyU3RhdGUsIHNldFN0eWxlOwogIGZ1bmN0aW9uIHBhc3MoKSB7CiAgICBmb3IgKHZhciBpID0gYXJndW1lbnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBjdXJTdGF0ZS5jYy5wdXNoKGFyZ3VtZW50c1tpXSk7CiAgfQogIGZ1bmN0aW9uIGNvbnQoKSB7CiAgICBwYXNzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIGZ1bmN0aW9uIHB1c2hDb250ZXh0KHRhZ05hbWUsIHN0YXJ0T2ZMaW5lKSB7CiAgICB2YXIgbm9JbmRlbnQgPSBLbHVkZ2VzLmRvTm90SW5kZW50Lmhhc093blByb3BlcnR5KHRhZ05hbWUpIHx8IChjdXJTdGF0ZS5jb250ZXh0ICYmIGN1clN0YXRlLmNvbnRleHQubm9JbmRlbnQpOwogICAgY3VyU3RhdGUuY29udGV4dCA9IHsKICAgICAgcHJldjogY3VyU3RhdGUuY29udGV4dCwKICAgICAgdGFnTmFtZTogdGFnTmFtZSwKICAgICAgaW5kZW50OiBjdXJTdGF0ZS5pbmRlbnRlZCwKICAgICAgc3RhcnRPZkxpbmU6IHN0YXJ0T2ZMaW5lLAogICAgICBub0luZGVudDogbm9JbmRlbnQKICAgIH07CiAgfQogIGZ1bmN0aW9uIHBvcENvbnRleHQoKSB7CiAgICBpZiAoY3VyU3RhdGUuY29udGV4dCkgY3VyU3RhdGUuY29udGV4dCA9IGN1clN0YXRlLmNvbnRleHQucHJldjsKICB9CgogIGZ1bmN0aW9uIGVsZW1lbnQodHlwZSkgewogICAgaWYgKHR5cGUgPT0gIm9wZW5UYWciKSB7CiAgICAgIGN1clN0YXRlLnRhZ05hbWUgPSB0YWdOYW1lOwogICAgICByZXR1cm4gY29udChhdHRyaWJ1dGVzLCBlbmR0YWcoY3VyU3RhdGUuc3RhcnRPZkxpbmUpKTsKICAgIH0gZWxzZSBpZiAodHlwZSA9PSAiY2xvc2VUYWciKSB7CiAgICAgIHZhciBlcnIgPSBmYWxzZTsKICAgICAgaWYgKGN1clN0YXRlLmNvbnRleHQpIHsKICAgICAgICBlcnIgPSBjdXJTdGF0ZS5jb250ZXh0LnRhZ05hbWUgIT0gdGFnTmFtZTsKICAgICAgfSBlbHNlIHsKICAgICAgICBlcnIgPSB0cnVlOwogICAgICB9CiAgICAgIGlmIChlcnIpIHNldFN0eWxlID0gImVycm9yIjsKICAgICAgcmV0dXJuIGNvbnQoZW5kY2xvc2V0YWcoZXJyKSk7CiAgICB9CiAgICByZXR1cm4gY29udCgpOwogIH0KICBmdW5jdGlvbiBlbmR0YWcoc3RhcnRPZkxpbmUpIHsKICAgIHJldHVybiBmdW5jdGlvbih0eXBlKSB7CiAgICAgIGlmICh0eXBlID09ICJzZWxmY2xvc2VUYWciIHx8CiAgICAgICAgICAodHlwZSA9PSAiZW5kVGFnIiAmJiBLbHVkZ2VzLmF1dG9TZWxmQ2xvc2Vycy5oYXNPd25Qcm9wZXJ0eShjdXJTdGF0ZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkpKSkKICAgICAgICByZXR1cm4gY29udCgpOwogICAgICBpZiAodHlwZSA9PSAiZW5kVGFnIikge3B1c2hDb250ZXh0KGN1clN0YXRlLnRhZ05hbWUsIHN0YXJ0T2ZMaW5lKTsgcmV0dXJuIGNvbnQoKTt9CiAgICAgIHJldHVybiBjb250KCk7CiAgICB9OwogIH0KICBmdW5jdGlvbiBlbmRjbG9zZXRhZyhlcnIpIHsKICAgIHJldHVybiBmdW5jdGlvbih0eXBlKSB7CiAgICAgIGlmIChlcnIpIHNldFN0eWxlID0gImVycm9yIjsKICAgICAgaWYgKHR5cGUgPT0gImVuZFRhZyIpIHsgcG9wQ29udGV4dCgpOyByZXR1cm4gY29udCgpOyB9CiAgICAgIHNldFN0eWxlID0gImVycm9yIjsKICAgICAgcmV0dXJuIGNvbnQoYXJndW1lbnRzLmNhbGxlZSk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBhdHRyaWJ1dGVzKHR5cGUpIHsKICAgIGlmICh0eXBlID09ICJ3b3JkIikge3NldFN0eWxlID0gImF0dHJpYnV0ZSI7IHJldHVybiBjb250KGF0dHJpYnV0ZXMpO30KICAgIGlmICh0eXBlID09ICJlcXVhbHMiKSByZXR1cm4gY29udChhdHR2YWx1ZSwgYXR0cmlidXRlcyk7CiAgICBpZiAodHlwZSA9PSAic3RyaW5nIikge3NldFN0eWxlID0gImVycm9yIjsgcmV0dXJuIGNvbnQoYXR0cmlidXRlcyk7fQogICAgcmV0dXJuIHBhc3MoKTsKICB9CiAgZnVuY3Rpb24gYXR0dmFsdWUodHlwZSkgewogICAgaWYgKHR5cGUgPT0gIndvcmQiICYmIEtsdWRnZXMuYWxsb3dVbnF1b3RlZCkge3NldFN0eWxlID0gInN0cmluZyI7IHJldHVybiBjb250KCk7fQogICAgaWYgKHR5cGUgPT0gInN0cmluZyIpIHJldHVybiBjb250KGF0dHZhbHVlbWF5YmUpOwogICAgcmV0dXJuIHBhc3MoKTsKICB9CiAgZnVuY3Rpb24gYXR0dmFsdWVtYXliZSh0eXBlKSB7CiAgICBpZiAodHlwZSA9PSAic3RyaW5nIikgcmV0dXJuIGNvbnQoYXR0dmFsdWVtYXliZSk7CiAgICBlbHNlIHJldHVybiBwYXNzKCk7CiAgfQoKICByZXR1cm4gewogICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiB7dG9rZW5pemU6IGluVGV4dCwgY2M6IFtdLCBpbmRlbnRlZDogMCwgc3RhcnRPZkxpbmU6IHRydWUsIHRhZ05hbWU6IG51bGwsIGNvbnRleHQ6IG51bGx9OwogICAgfSwKCiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICBpZiAoc3RyZWFtLnNvbCgpKSB7CiAgICAgICAgc3RhdGUuc3RhcnRPZkxpbmUgPSB0cnVlOwogICAgICAgIHN0YXRlLmluZGVudGVkID0gc3RyZWFtLmluZGVudGF0aW9uKCk7CiAgICAgIH0KICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDsKCiAgICAgIHNldFN0eWxlID0gdHlwZSA9IHRhZ05hbWUgPSBudWxsOwogICAgICB2YXIgc3R5bGUgPSBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgICAgc3RhdGUudHlwZSA9IHR5cGU7CiAgICAgIGlmICgoc3R5bGUgfHwgdHlwZSkgJiYgc3R5bGUgIT0gImNvbW1lbnQiKSB7CiAgICAgICAgY3VyU3RhdGUgPSBzdGF0ZTsKICAgICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgdmFyIGNvbWIgPSBzdGF0ZS5jYy5wb3AoKSB8fCBlbGVtZW50OwogICAgICAgICAgaWYgKGNvbWIodHlwZSB8fCBzdHlsZSkpIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICBzdGF0ZS5zdGFydE9mTGluZSA9IGZhbHNlOwogICAgICByZXR1cm4gc2V0U3R5bGUgfHwgc3R5bGU7CiAgICB9LAoKICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlciwgZnVsbExpbmUpIHsKICAgICAgdmFyIGNvbnRleHQgPSBzdGF0ZS5jb250ZXh0OwogICAgICBpZiAoKHN0YXRlLnRva2VuaXplICE9IGluVGFnICYmIHN0YXRlLnRva2VuaXplICE9IGluVGV4dCkgfHwKICAgICAgICAgIGNvbnRleHQgJiYgY29udGV4dC5ub0luZGVudCkKICAgICAgICByZXR1cm4gZnVsbExpbmUgPyBmdWxsTGluZS5tYXRjaCgvXihccyopLylbMF0ubGVuZ3RoIDogMDsKICAgICAgaWYgKGFsaWduQ0RBVEEgJiYgLzwhXFtDREFUQVxbLy50ZXN0KHRleHRBZnRlcikpIHJldHVybiAwOwogICAgICBpZiAoY29udGV4dCAmJiAvXjxcLy8udGVzdCh0ZXh0QWZ0ZXIpKQogICAgICAgIGNvbnRleHQgPSBjb250ZXh0LnByZXY7CiAgICAgIHdoaWxlIChjb250ZXh0ICYmICFjb250ZXh0LnN0YXJ0T2ZMaW5lKQogICAgICAgIGNvbnRleHQgPSBjb250ZXh0LnByZXY7CiAgICAgIGlmIChjb250ZXh0KSByZXR1cm4gY29udGV4dC5pbmRlbnQgKyBpbmRlbnRVbml0OwogICAgICBlbHNlIHJldHVybiAwOwogICAgfSwKCiAgICBjb21wYXJlU3RhdGVzOiBmdW5jdGlvbihhLCBiKSB7CiAgICAgIGlmIChhLmluZGVudGVkICE9IGIuaW5kZW50ZWQgfHwgYS50b2tlbml6ZSAhPSBiLnRva2VuaXplKSByZXR1cm4gZmFsc2U7CiAgICAgIGZvciAodmFyIGNhID0gYS5jb250ZXh0LCBjYiA9IGIuY29udGV4dDsgOyBjYSA9IGNhLnByZXYsIGNiID0gY2IucHJldikgewogICAgICAgIGlmICghY2EgfHwgIWNiKSByZXR1cm4gY2EgPT0gY2I7CiAgICAgICAgaWYgKGNhLnRhZ05hbWUgIT0gY2IudGFnTmFtZSkgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9LAoKICAgIGVsZWN0cmljQ2hhcnM6ICIvIgogIH07Cn0pOwoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJhcHBsaWNhdGlvbi94bWwiLCAieG1sIik7CkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC9odG1sIiwge25hbWU6ICJ4bWwiLCBodG1sTW9kZTogdHJ1ZX0pOwo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/xmlpure/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/xmlpure/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFB1cmUgWE1MIG1vZGU8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJ4bWxwdXJlLmpzIj48L3NjcmlwdD4KICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO308L3N0eWxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBYTUwgbW9kZTwvaDE+CiAgICA8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgombHQ7P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iID8mZ3Q7CgombHQ7IS0tIFRoaXMgaXMgdGhlIHB1cmUgWE1MIG1vZGUsCmFuZCB3ZSdyZSBpbnNpZGUgYSBjb21tZW50ISAtLSZndDsKCiZsdDtjYXRhbG9nJmd0OwogICZsdDtib29rcyZndDsKICAgICZsdDtib29rIGlkPSJiazAxIiZndDsKICAgICAgJmx0O3RpdGxlJmd0O0xvcmQgb2YgTGlnaHQmbHQ7L3RpdGxlJmd0OwogICAgICAmbHQ7YXV0aG9yJmd0O1JvZ2VyIFplbGF6bnkmbHQ7L2F1dGhvciZndDsKICAgICAgJmx0O3llYXImZ3Q7MTk2NyZsdDsveWVhciZndDsKICAgICAgJmx0O2Rlc2NyaXB0aW9uJmd0OyZsdDshW0NEQVRBW1RoaXMgaXMgYSBncmVhdCBib29rLCByZWFsbHkhIV1dJmd0OyZsdDsvZGVzY3JpcHRpb24mZ3Q7CiAgICAmbHQ7L2Jvb2smZ3Q7CiAgJmx0Oy9ib29rcyZndDsKJmx0Oy9jYXRhbG9nJmd0Owo8L3RleHRhcmVhPjwvZm9ybT4KICAgIDxzY3JpcHQ+CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7bW9kZToge25hbWU6ICJ4bWxwdXJlIn19KTsKICAgIDwvc2NyaXB0PgoKICAgIDxwPlRoaXMgaXMgbXkgWE1MIHBhcnNlciwgYmFzZWQgb24gdGhlIG9yaWdpbmFsOjwvcD4gCiAgICA8dWw+IAogICAgCTxsaT5ObyBodG1sIG1vZGUgLSB0aGlzIGlzIHB1cmUgeG1sPC9saT4gCiAgICAJPGxpPklsbGVnYWwgYXR0cmlidXRlcyBhbmQgZWxlbWVudCBuYW1lcyBhcmUgZXJyb3JzPC9saT4gCiAgICAJPGxpPkF0dHJpYnV0ZXMgbXVzdCBoYXZlIGEgdmFsdWU8L2xpPiAKICAgIAk8bGk+WE1MIGRlY2xhcmF0aW9uIHN1cHBvcnRlZCAoZS5nLjogPGI+Jmx0Oz94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9Im5vIiA/Jmd0OzwvYj4pPC9saT4gCiAgICAJPGxpPkNEQVRBIGFuZCBjb21tZW50IGJsb2NrcyBhcmUgbm90IGluZGVudGVkIChleGNlcHQgZm9yIHRoZWlyIHN0YXJ0LXRhZyk8L2xpPiAKICAgIAk8bGk+QmV0dGVyIGhhbmRsaW5nIG9mIGVycm9ycyBwZXIgbGluZSB3aXRoIHRoZSBzdGF0ZSBvYmplY3QgLSBwcm92aWRlcyBnb29kIGluZnJhc3RydWN0dXJlIGZvciBleHRlbmRpbmcgaXQ8L2xpPiAKICAgIDwvdWw+IAogCiAgICA8cD5XaGF0J3MgbWlzc2luZzo8L3A+IAogICAgPHVsPiAKICAgIAk8bGk+TWFrZSBzdXJlIG9ubHkgYSBzaW5nbGUgcm9vdCBlbGVtZW50IGV4aXN0cyBhdCB0aGUgZG9jdW1lbnQgbGV2ZWw8L2xpPiAKICAgIAk8bGk+TXVsdGktbGluZSBhdHRyaWJ1dGVzIHNob3VsZCBOT1QgaW5kZW50PC9saT4KICAgIAk8bGk+U3RhcnQgdGFncyBhcmUgbm90IHBhaW50ZWQgcmVkIHdoZW4gdGhleSBoYXZlIG5vIG1hdGNoaW5nIGVuZCB0YWdzIChpcyB0aGlzIHJlYWxseSB3cm9uZz8pPC9saT4gCiAgICA8L3VsPiAKIAogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPmFwcGxpY2F0aW9uL3htbDwvY29kZT4sIDxjb2RlPnRleHQveG1sPC9jb2RlPi48L3A+IAogCiAgICA8cD48Yj5AYXV0aG9yPC9iPjogRHJvciBCRyAoPGk+ZGVlYnVnLmRldlthdF1nbWFpbC5jb208L2k+KTxici8+IAogICAgPHA+PGI+QGRhdGU8L2I+OiBBdWd1c3QsIDIwMTE8YnIvPiAKICAgIDxwPjxiPkBnaXRodWI8L2I+OiA8YSBocmVmPSdodHRwczovL2dpdGh1Yi5jb20vZGVlYnVnZ2VyL0NvZGVNaXJyb3IyJyB0YXJnZXQ9J2JsYW5rJz5odHRwczovL2dpdGh1Yi5jb20vZGVlYnVnZ2VyL0NvZGVNaXJyb3IyPC9hPjwvcD4KCiAgICA8cD48c3Ryb25nPk1JTUUgdHlwZXMgZGVmaW5lZDo8L3N0cm9uZz4gPGNvZGU+YXBwbGljYXRpb24veG1sPC9jb2RlPiwgPGNvZGU+dGV4dC94bWw8L2NvZGU+LjwvcD4KICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/xmlpure/xmlpure.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIHhtbHB1cmUuanMKICogCiAqIEJ1aWxkaW5nIHVwb24gYW5kIGltcHJvdmluZyB0aGUgQ29kZU1pcnJvciAyIFhNTCBwYXJzZXIKICogQGF1dGhvcjogRHJvciBCRyAoZGVlYnVnLmRldkBnbWFpbC5jb20pCiAqIEBkYXRlOiBBdWd1c3QsIDIwMTEKICovCgpDb2RlTWlycm9yLmRlZmluZU1vZGUoInhtbHB1cmUiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgLy8gY29uc3RhbnRzCiAgICB2YXIgU1RZTEVfRVJST1IgPSAiZXJyb3IiOwogICAgdmFyIFNUWUxFX0lOU1RSVUNUSU9OID0gImNvbW1lbnQiOwogICAgdmFyIFNUWUxFX0NPTU1FTlQgPSAiY29tbWVudCI7CiAgICB2YXIgU1RZTEVfRUxFTUVOVF9OQU1FID0gInRhZyI7CiAgICB2YXIgU1RZTEVfQVRUUklCVVRFID0gImF0dHJpYnV0ZSI7CiAgICB2YXIgU1RZTEVfV09SRCA9ICJzdHJpbmciOwogICAgdmFyIFNUWUxFX1RFWFQgPSAiYXRvbSI7CiAgICB2YXIgU1RZTEVfRU5USVRJRVMgPSAic3RyaW5nIjsKCiAgICB2YXIgVEFHX0lOU1RSVUNUSU9OID0gIiFpbnN0cnVjdGlvbiI7CiAgICB2YXIgVEFHX0NEQVRBID0gIiFjZGF0YSI7CiAgICB2YXIgVEFHX0NPTU1FTlQgPSAiIWNvbW1lbnQiOwogICAgdmFyIFRBR19URVhUID0gIiF0ZXh0IjsKICAgIAogICAgdmFyIGRvTm90SW5kZW50ID0gewogICAgICAgICIhY2RhdGEiOiB0cnVlLAogICAgICAgICIhY29tbWVudCI6IHRydWUsCiAgICAgICAgIiF0ZXh0IjogdHJ1ZSwKICAgICAgICAiIWluc3RydWN0aW9uIjogdHJ1ZQogICAgfTsKCiAgICAvLyBvcHRpb25zCiAgICB2YXIgaW5kZW50VW5pdCA9IGNvbmZpZy5pbmRlbnRVbml0OwoKICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogICAgLy8gaGVscGVyIGZ1bmN0aW9ucwogICAgCiAgICAvLyBjaGFpbiBhIHBhcnNlciB0byBhbm90aGVyIHBhcnNlcgogICAgZnVuY3Rpb24gY2hhaW4oc3RyZWFtLCBzdGF0ZSwgcGFyc2VyKSB7CiAgICAgICAgc3RhdGUudG9rZW5pemUgPSBwYXJzZXI7CiAgICAgICAgcmV0dXJuIHBhcnNlcihzdHJlYW0sIHN0YXRlKTsKICAgIH0KICAgIAogICAgLy8gcGFyc2UgYSBibG9jayAoY29tbWVudCwgQ0RBVEEgb3IgdGV4dCkKICAgIGZ1bmN0aW9uIGluQmxvY2soc3R5bGUsIHRlcm1pbmF0b3IsIG5leHRUb2tlbml6ZSkgewogICAgICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgICAgIHdoaWxlICghc3RyZWFtLmVvbCgpKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKHRlcm1pbmF0b3IpKSB7CiAgICAgICAgICAgICAgICAgICAgcG9wQ29udGV4dChzdGF0ZSk7CiAgICAgICAgICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBuZXh0VG9rZW5pemU7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdHJlYW0ubmV4dCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBzdHlsZTsKICAgICAgICB9OwogICAgfQogICAgCiAgICAvLyBnbyBkb3duIGEgbGV2ZWwgaW4gdGhlIGRvY3VtZW50CiAgICAvLyAoaGludDogbG9vayBhdCB3aG8gY2FsbHMgdGhpcyBmdW5jdGlvbiB0byBrbm93IHdoYXQgdGhlIGNvbnRleHRzIGFyZSkKICAgIGZ1bmN0aW9uIHB1c2hDb250ZXh0KHN0YXRlLCB0YWdOYW1lKSB7CiAgICAgICAgdmFyIG5vSW5kZW50ID0gZG9Ob3RJbmRlbnQuaGFzT3duUHJvcGVydHkodGFnTmFtZSkgfHwgKHN0YXRlLmNvbnRleHQgJiYgc3RhdGUuY29udGV4dC5kb0luZGVudCk7CiAgICAgICAgdmFyIG5ld0NvbnRleHQgPSB7CiAgICAgICAgICAgIHRhZ05hbWU6IHRhZ05hbWUsCiAgICAgICAgICAgIHByZXY6IHN0YXRlLmNvbnRleHQsCiAgICAgICAgICAgIGluZGVudDogc3RhdGUuY29udGV4dCA/IHN0YXRlLmNvbnRleHQuaW5kZW50ICsgaW5kZW50VW5pdCA6IDAsCiAgICAgICAgICAgIGxpbmVOdW1iZXI6IHN0YXRlLmxpbmVOdW1iZXIsCiAgICAgICAgICAgIGluZGVudGVkOiBzdGF0ZS5pbmRlbnRlZCwKICAgICAgICAgICAgbm9JbmRlbnQ6IG5vSW5kZW50CiAgICAgICAgfTsKICAgICAgICBzdGF0ZS5jb250ZXh0ID0gbmV3Q29udGV4dDsKICAgIH0KICAgIAogICAgLy8gZ28gdXAgYSBsZXZlbCBpbiB0aGUgZG9jdW1lbnQKICAgIGZ1bmN0aW9uIHBvcENvbnRleHQoc3RhdGUpIHsKICAgICAgICBpZiAoc3RhdGUuY29udGV4dCkgewogICAgICAgICAgICB2YXIgb2xkQ29udGV4dCA9IHN0YXRlLmNvbnRleHQ7CiAgICAgICAgICAgIHN0YXRlLmNvbnRleHQgPSBvbGRDb250ZXh0LnByZXY7CiAgICAgICAgICAgIHJldHVybiBvbGRDb250ZXh0OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyB3ZSBzaG91bGRuJ3QgYmUgaGVyZSAtIGl0IG1lYW5zIHdlIGRpZG4ndCBoYXZlIGEgY29udGV4dCB0byBwb3AKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIAogICAgLy8gcmV0dXJuIHRydWUgaWYgdGhlIGN1cnJlbnQgdG9rZW4gaXMgc2VwZXJhdGVkIGZyb20gdGhlIHRva2VucyBiZWZvcmUgaXQKICAgIC8vIHdoaWNoIG1lYW5zIGVpdGhlciB0aGlzIGlzIHRoZSBzdGFydCBvZiB0aGUgbGluZSwgb3IgdGhlcmUgaXMgYXQgbGVhc3QKICAgIC8vIG9uZSBzcGFjZSBvciB0YWIgY2hhcmFjdGVyIGJlaGluZCB0aGUgdG9rZW4KICAgIC8vIG90aGVyd2lzZSByZXR1cm5zIGZhbHNlCiAgICBmdW5jdGlvbiBpc1Rva2VuU2VwYXJhdGVkKHN0cmVhbSkgewogICAgICAgIHJldHVybiBzdHJlYW0uc29sKCkgfHwKICAgICAgICAgICAgc3RyZWFtLnN0cmluZy5jaGFyQXQoc3RyZWFtLnN0YXJ0IC0gMSkgPT0gIiAiIHx8CiAgICAgICAgICAgIHN0cmVhbS5zdHJpbmcuY2hhckF0KHN0cmVhbS5zdGFydCAtIDEpID09ICJcdCI7CiAgICB9CiAgICAKICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogICAgLy8gY29udGV4dDogZG9jdW1lbnQKICAgIC8vIAogICAgLy8gYW4gWE1MIGRvY3VtZW50IGNhbiBjb250YWluOgogICAgLy8gLSBhIHNpbmdsZSBkZWNsYXJhdGlvbiAoaWYgZGVmaW5lZCwgaXQgbXVzdCBiZSB0aGUgdmVyeSBmaXJzdCBsaW5lKQogICAgLy8gLSBleGFjdGx5IG9uZSByb290IGVsZW1lbnQKICAgIC8vIEB0b2RvIHRyeSB0byBhY3R1YWxseSBsaW1pdCB0aGUgbnVtYmVyIG9mIHJvb3QgZWxlbWVudHMgdG8gMQogICAgLy8gLSB6ZXJvIG9yIG1vcmUgY29tbWVudHMKICAgIGZ1bmN0aW9uIHBhcnNlRG9jdW1lbnQoc3RyZWFtLCBzdGF0ZSkgewogICAgICAgIGlmKHN0cmVhbS5lYXQoIjwiKSkgewogICAgICAgICAgICBpZihzdHJlYW0uZWF0KCI/IikpIHsKICAgICAgICAgICAgICAgIC8vIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24KICAgICAgICAgICAgICAgIHB1c2hDb250ZXh0KHN0YXRlLCBUQUdfSU5TVFJVQ1RJT04pOwogICAgICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBwYXJzZVByb2Nlc3NpbmdJbnN0cnVjdGlvblN0YXJ0VGFnOwogICAgICAgICAgICAgICAgcmV0dXJuIFNUWUxFX0lOU1RSVUNUSU9OOwogICAgICAgICAgICB9IGVsc2UgaWYoc3RyZWFtLm1hdGNoKCIhLS0iKSkgewogICAgICAgICAgICAgICAgLy8gbmV3IGNvbnRleHQ6IGNvbW1lbnQKICAgICAgICAgICAgICAgIHB1c2hDb250ZXh0KHN0YXRlLCBUQUdfQ09NTUVOVCk7CiAgICAgICAgICAgICAgICByZXR1cm4gY2hhaW4oc3RyZWFtLCBzdGF0ZSwgaW5CbG9jayhTVFlMRV9DT01NRU5ULCAiLS0+IiwgcGFyc2VEb2N1bWVudCkpOwogICAgICAgICAgICB9IGVsc2UgaWYoc3RyZWFtLmVhdFNwYWNlKCkgfHwgc3RyZWFtLmVvbCgpICkgewogICAgICAgICAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICAgICAgICAgICAgcmV0dXJuIFNUWUxFX0VSUk9SOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgLy8gZWxlbWVudAogICAgICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBwYXJzZUVsZW1lbnRUYWdOYW1lOwogICAgICAgICAgICAgICAgcmV0dXJuIFNUWUxFX0VMRU1FTlRfTkFNRTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyBlcnJvciBvbiBsaW5lCiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICAgIHJldHVybiBTVFlMRV9FUlJPUjsKICAgIH0KCiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KICAgIC8vIGNvbnRleHQ6IFhNTCBlbGVtZW50IHN0YXJ0LXRhZyBvciBlbmQtdGFnCiAgICAvLwogICAgLy8gLSBlbGVtZW50IHN0YXJ0LXRhZyBjYW4gY29udGFpbiBhdHRyaWJ1dGVzCiAgICAvLyAtIGVsZW1lbnQgc3RhcnQtdGFnIG1heSBzZWxmLWNsb3NlIChvciBzdGFydCBhbiBlbGVtZW50IGJsb2NrIGlmIGl0IGRvZXNuJ3QpCiAgICAvLyAtIGVsZW1lbnQgZW5kLXRhZyBjYW4gY29udGFpbiBvbmx5IHRoZSB0YWcgbmFtZQogICAgZnVuY3Rpb24gcGFyc2VFbGVtZW50VGFnTmFtZShzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgLy8gZ2V0IHRoZSBuYW1lIG9mIHRoZSB0YWcKICAgICAgICB2YXIgc3RhcnRQb3MgPSBzdHJlYW0ucG9zOwogICAgICAgIGlmKHN0cmVhbS5tYXRjaCgvXlthLXpBLVpfOl1bLWEtekEtWjAtOV86Ll0qLykpIHsKICAgICAgICAgICAgLy8gZWxlbWVudCBzdGFydC10YWcKICAgICAgICAgICAgdmFyIHRhZ05hbWUgPSBzdHJlYW0uc3RyaW5nLnN1YnN0cmluZyhzdGFydFBvcywgc3RyZWFtLnBvcyk7CiAgICAgICAgICAgIHB1c2hDb250ZXh0KHN0YXRlLCB0YWdOYW1lKTsKICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBwYXJzZUVsZW1lbnQ7CiAgICAgICAgICAgIHJldHVybiBTVFlMRV9FTEVNRU5UX05BTUU7CiAgICAgICAgfSBlbHNlIGlmKHN0cmVhbS5tYXRjaCgvXlwvW2EtekEtWl86XVstYS16QS1aMC05XzouXSooICkqPi8pKSB7CiAgICAgICAgICAgIC8vIGVsZW1lbnQgZW5kLXRhZwogICAgICAgICAgICB2YXIgZW5kVGFnTmFtZSA9IHN0cmVhbS5zdHJpbmcuc3Vic3RyaW5nKHN0YXJ0UG9zICsgMSwgc3RyZWFtLnBvcyAtIDEpLnRyaW0oKTsKICAgICAgICAgICAgdmFyIG9sZENvbnRleHQgPSBwb3BDb250ZXh0KHN0YXRlKTsKICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBzdGF0ZS5jb250ZXh0ID09IG51bGwgPyBwYXJzZURvY3VtZW50IDogcGFyc2VFbGVtZW50QmxvY2s7CiAgICAgICAgICAgIGlmKG9sZENvbnRleHQgPT0gbnVsbCB8fCBlbmRUYWdOYW1lICE9IG9sZENvbnRleHQudGFnTmFtZSkgewogICAgICAgICAgICAgICAgLy8gdGhlIHN0YXJ0IGFuZCBlbmQgdGFnIG5hbWVzIHNob3VsZCBtYXRjaCAtIGVycm9yCiAgICAgICAgICAgICAgICByZXR1cm4gU1RZTEVfRVJST1I7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIFNUWUxFX0VMRU1FTlRfTkFNRTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBubyB0YWcgbmFtZSAtIGVycm9yCiAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gc3RhdGUuY29udGV4dCA9PSBudWxsID8gcGFyc2VEb2N1bWVudCA6IHBhcnNlRWxlbWVudEJsb2NrOwogICAgICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tePl0vKTsKICAgICAgICAgICAgc3RyZWFtLmVhdCgiPiIpOwogICAgICAgICAgICByZXR1cm4gU1RZTEVfRVJST1I7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTsKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIAogICAgZnVuY3Rpb24gcGFyc2VFbGVtZW50KHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICBpZihzdHJlYW0ubWF0Y2goL15cLz4vKSkgewogICAgICAgICAgICAvLyBzZWxmLWNsb3NpbmcgdGFnCiAgICAgICAgICAgIHBvcENvbnRleHQoc3RhdGUpOwogICAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHN0YXRlLmNvbnRleHQgPT0gbnVsbCA/IHBhcnNlRG9jdW1lbnQgOiBwYXJzZUVsZW1lbnRCbG9jazsKICAgICAgICAgICAgcmV0dXJuIFNUWUxFX0VMRU1FTlRfTkFNRTsKICAgICAgICB9IGVsc2UgaWYoc3RyZWFtLmVhdCgvXj4vKSkgewogICAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHBhcnNlRWxlbWVudEJsb2NrOwogICAgICAgICAgICByZXR1cm4gU1RZTEVfRUxFTUVOVF9OQU1FOwogICAgICAgIH0gZWxzZSBpZihpc1Rva2VuU2VwYXJhdGVkKHN0cmVhbSkgJiYgc3RyZWFtLm1hdGNoKC9eW2EtekEtWl86XVstYS16QS1aMC05XzouXSooICkqPS8pKSB7CiAgICAgICAgICAgIC8vIGF0dHJpYnV0ZQogICAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHBhcnNlQXR0cmlidXRlOwogICAgICAgICAgICByZXR1cm4gU1RZTEVfQVRUUklCVVRFOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyBubyBvdGhlciBvcHRpb25zIC0gdGhpcyBpcyBhbiBlcnJvcgogICAgICAgIHN0YXRlLnRva2VuaXplID0gc3RhdGUuY29udGV4dCA9PSBudWxsID8gcGFyc2VEb2N1bWVudCA6IHBhcnNlRG9jdW1lbnQ7CiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXj5dLyk7CiAgICAgICAgc3RyZWFtLmVhdCgiPiIpOwogICAgICAgIHJldHVybiBTVFlMRV9FUlJPUjsKICAgIH0KICAgIAogICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAgICAvLyBjb250ZXh0OiBhdHRyaWJ1dGUKICAgIC8vIAogICAgLy8gYXR0cmlidXRlIHZhbHVlcyBtYXkgY29udGFpbiBldmVyeXRoaW5nLCBleGNlcHQ6CiAgICAvLyAtIHRoZSBlbmRpbmcgcXVvdGUgKHdpdGggJyBvciAiKSAtIHRoaXMgbWFya3MgdGhlIGVuZCBvZiB0aGUgdmFsdWUKICAgIC8vIC0gdGhlIGNoYXJhY3RlciAiPCIgLSBzaG91bGQgbmV2ZXIgYXBwZWFyCiAgICAvLyAtIGFtcGVyc2FuZCAoIiYiKSAtIHVubGVzcyBpdCBzdGFydHMgYSByZWZlcmVuY2U6IGEgc3RyaW5nIHRoYXQgZW5kcyB3aXRoIGEgc2VtaS1jb2xvbiAoIjsiKQogICAgLy8gLS0tPiBub3RlOiB0aGlzIHBhcnNlciBpcyBsYXggaW4gd2hhdCBtYXkgYmUgcHV0IGludG8gYSByZWZlcmVuY2Ugc3RyaW5nLAogICAgLy8gLS0tPiBjb25zdWx0IGh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy14bWwvI05ULVJlZmVyZW5jZSBpZiB5b3Ugd2FudCB0byBtYWtlIGl0IHRpZ2h0ZXIKICAgIGZ1bmN0aW9uIHBhcnNlQXR0cmlidXRlKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICB2YXIgcXVvdGUgPSBzdHJlYW0ubmV4dCgpOwogICAgICAgIGlmKHF1b3RlICE9ICJcIiIgJiYgcXVvdGUgIT0gIiciKSB7CiAgICAgICAgICAgIC8vIGF0dHJpYnV0ZSBtdXN0IGJlIHF1b3RlZAogICAgICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gcGFyc2VFbGVtZW50OwogICAgICAgICAgICByZXR1cm4gU1RZTEVfRVJST1I7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHN0YXRlLnRva1BhcmFtcy5xdW90ZSA9IHF1b3RlOyAgICAKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHBhcnNlQXR0cmlidXRlVmFsdWU7CiAgICAgICAgcmV0dXJuIFNUWUxFX1dPUkQ7CiAgICB9CgogICAgLy8gQHRvZG86IGZpbmQgb3V0IHdoZXRoZXIgdGhpcyBhdHRyaWJ1dGUgdmFsdWUgc3BhbnMgbXVsdGlwbGUgbGluZXMsCiAgICAvLyAgICAgICAgYW5kIGlmIHNvLCBwdXNoIGEgY29udGV4dCBmb3IgaXQgaW4gb3JkZXIgbm90IHRvIGluZGVudCBpdAogICAgLy8gICAgICAgIChvciBzb21ldGhpbmcgb2YgdGhlIHNvcnQuLikKICAgIGZ1bmN0aW9uIHBhcnNlQXR0cmlidXRlVmFsdWUoc3RyZWFtLCBzdGF0ZSkgewogICAgICAgIHZhciBjaCA9ICIiOwogICAgICAgIHdoaWxlKCFzdHJlYW0uZW9sKCkpIHsKICAgICAgICAgICAgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgICAgICAgICBpZihjaCA9PSBzdGF0ZS50b2tQYXJhbXMucXVvdGUpIHsKICAgICAgICAgICAgICAgIC8vIGVuZCBxdW90ZSBmb3VuZAogICAgICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBwYXJzZUVsZW1lbnQ7CiAgICAgICAgICAgICAgICByZXR1cm4gU1RZTEVfV09SRDsKICAgICAgICAgICAgfSBlbHNlIGlmKGNoID09ICI8IikgewogICAgICAgICAgICAgICAgLy8gY2FuJ3QgaGF2ZSBsZXNzLXRoYW4gc2lnbnMgaW4gYW4gYXR0cmlidXRlIHZhbHVlLCBldmVyCiAgICAgICAgICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCkKICAgICAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gcGFyc2VFbGVtZW50OwogICAgICAgICAgICAgICAgcmV0dXJuIFNUWUxFX0VSUk9SOwogICAgICAgICAgICB9IGVsc2UgaWYoY2ggPT0gIiYiKSB7CiAgICAgICAgICAgICAgICAvLyByZWZlcmVuY2UgLSBsb29rIGZvciBhIHNlbWktY29sb24sIG9yIHJldHVybiBlcnJvciBpZiBub25lIGZvdW5kCiAgICAgICAgICAgICAgICBjaCA9IHN0cmVhbS5uZXh0KCk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHNlbWktY29sb24gaXNuJ3QgcmlnaHQgYWZ0ZXIgdGhlIGFtcGVyc2FuZAogICAgICAgICAgICAgICAgaWYoY2ggPT0gJzsnKSB7CiAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpCiAgICAgICAgICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBwYXJzZUVsZW1lbnQ7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNUWUxFX0VSUk9SOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgbm8gbGVzcy10aGFuIGNoYXJhY3RlcnMgc2xpcHBlZCBpbgogICAgICAgICAgICAgICAgd2hpbGUoIXN0cmVhbS5lb2woKSAmJiBjaCAhPSAiOyIpIHsKICAgICAgICAgICAgICAgICAgICBpZihjaCA9PSAiPCIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FuJ3QgaGF2ZSBsZXNzLXRoYW4gc2lnbnMgaW4gYW4gYXR0cmlidXRlIHZhbHVlLCBldmVyCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKQogICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHBhcnNlRWxlbWVudDsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNUWUxFX0VSUk9SOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBjaCA9IHN0cmVhbS5uZXh0KCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZihzdHJlYW0uZW9sKCkgJiYgY2ggIT0gIjsiKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gbm8gYW1wZXJzYW5kIGZvdW5kIC0gZXJyb3IKICAgICAgICAgICAgICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgICAgICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBwYXJzZUVsZW1lbnQ7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNUWUxFX0VSUk9SOwogICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyBhdHRyaWJ1dGUgdmFsdWUgY29udGludWVzIHRvIG5leHQgbGluZQogICAgICAgIHJldHVybiBTVFlMRV9XT1JEOwogICAgfQogICAgCiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KICAgIC8vIGNvbnRleHQ6IGVsZW1lbnQgYmxvY2sKICAgIC8vCiAgICAvLyBhIGJsb2NrIGNhbiBjb250YWluOgogICAgLy8gLSBlbGVtZW50cwogICAgLy8gLSB0ZXh0CiAgICAvLyAtIENEQVRBIHNlY3Rpb25zCiAgICAvLyAtIGNvbW1lbnRzCiAgICBmdW5jdGlvbiBwYXJzZUVsZW1lbnRCbG9jayhzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgaWYoc3RyZWFtLmVhdCgiPCIpKSB7CiAgICAgICAgICAgIGlmKHN0cmVhbS5tYXRjaCgiPyIpKSB7CiAgICAgICAgICAgICAgICBwdXNoQ29udGV4dChzdGF0ZSwgVEFHX0lOU1RSVUNUSU9OKTsKICAgICAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gcGFyc2VQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25TdGFydFRhZzsKICAgICAgICAgICAgICAgIHJldHVybiBTVFlMRV9JTlNUUlVDVElPTjsKICAgICAgICAgICAgfSBlbHNlIGlmKHN0cmVhbS5tYXRjaCgiIS0tIikpIHsKICAgICAgICAgICAgICAgIC8vIG5ldyBjb250ZXh0OiBjb21tZW50CiAgICAgICAgICAgICAgICBwdXNoQ29udGV4dChzdGF0ZSwgVEFHX0NPTU1FTlQpOwogICAgICAgICAgICAgICAgcmV0dXJuIGNoYWluKHN0cmVhbSwgc3RhdGUsIGluQmxvY2soU1RZTEVfQ09NTUVOVCwgIi0tPiIsCiAgICAgICAgICAgICAgICAgICAgc3RhdGUuY29udGV4dCA9PSBudWxsID8gcGFyc2VEb2N1bWVudCA6IHBhcnNlRWxlbWVudEJsb2NrKSk7CiAgICAgICAgICAgIH0gZWxzZSBpZihzdHJlYW0ubWF0Y2goIiFbQ0RBVEFbIikpIHsKICAgICAgICAgICAgICAgIC8vIG5ldyBjb250ZXh0OiBDREFUQSBzZWN0aW9uCiAgICAgICAgICAgICAgICBwdXNoQ29udGV4dChzdGF0ZSwgVEFHX0NEQVRBKTsKICAgICAgICAgICAgICAgIHJldHVybiBjaGFpbihzdHJlYW0sIHN0YXRlLCBpbkJsb2NrKFNUWUxFX1RFWFQsICJdXT4iLAogICAgICAgICAgICAgICAgICAgIHN0YXRlLmNvbnRleHQgPT0gbnVsbCA/IHBhcnNlRG9jdW1lbnQgOiBwYXJzZUVsZW1lbnRCbG9jaykpOwogICAgICAgICAgICB9IGVsc2UgaWYoc3RyZWFtLmVhdFNwYWNlKCkgfHwgc3RyZWFtLmVvbCgpICkgewogICAgICAgICAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICAgICAgICAgICAgcmV0dXJuIFNUWUxFX0VSUk9SOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgLy8gZWxlbWVudAogICAgICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBwYXJzZUVsZW1lbnRUYWdOYW1lOwogICAgICAgICAgICAgICAgcmV0dXJuIFNUWUxFX0VMRU1FTlRfTkFNRTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZihzdHJlYW0uZWF0KCImIikpIHsKICAgICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXjtdLyk7CiAgICAgICAgICAgIHN0cmVhbS5lYXQoIjsiKTsKICAgICAgICAgICAgcmV0dXJuIFNUWUxFX0VOVElUSUVTOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIG5ldyBjb250ZXh0OiB0ZXh0CiAgICAgICAgICAgIHB1c2hDb250ZXh0KHN0YXRlLCBUQUdfVEVYVCk7CiAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gcGFyc2VUZXh0OwogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgc3RhdGUudG9rZW5pemUgPSBzdGF0ZS5jb250ZXh0ID09IG51bGwgPyBwYXJzZURvY3VtZW50IDogcGFyc2VFbGVtZW50QmxvY2s7CiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgCiAgICBmdW5jdGlvbiBwYXJzZVRleHQoc3RyZWFtLCBzdGF0ZSkgewogICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW148XS8pOwogICAgICAgIGlmKCFzdHJlYW0uZW9sKCkpIHsKICAgICAgICAgICAgLy8gd2UgY2Fubm90IHBvc3NpYmx5IGJlIGluIHRoZSBkb2N1bWVudCBjb250ZXh0LAogICAgICAgICAgICAvLyBqdXN0IGluc2lkZSBhbiBlbGVtZW50IGJsb2NrCiAgICAgICAgICAgIHBvcENvbnRleHQoc3RhdGUpOwogICAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHBhcnNlRWxlbWVudEJsb2NrOwogICAgICAgIH0KICAgICAgICByZXR1cm4gU1RZTEVfVEVYVDsKICAgIH0KCiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KICAgIC8vIGNvbnRleHQ6IFhNTCBwcm9jZXNzaW5nIGluc3RydWN0aW9ucwogICAgLy8KICAgIC8vIFhNTCBwcm9jZXNzaW5nIGluc3RydWN0aW9ucyAoUElzKSBhbGxvdyBkb2N1bWVudHMgdG8gY29udGFpbiBpbnN0cnVjdGlvbnMgZm9yIGFwcGxpY2F0aW9ucy4KICAgIC8vIFBJIGZvcm1hdDogPD9uYW1lIGRhdGE/PgogICAgLy8gLSAnbmFtZScgY2FuIGJlIGFueXRoaW5nIG90aGVyIHRoYW4gJ3htbCcgKGNhc2UtaW5zZW5zaXRpdmUpCiAgICAvLyAtICdkYXRhJyBjYW4gYmUgYW55dGhpbmcgd2hpY2ggZG9lc24ndCBjb250YWluICc/PicKICAgIC8vIFhNTCBkZWNsYXJhdGlvbiBpcyBhIHNwZWNpYWwgUEkgKHNlZSBYTUwgZGVjbGFyYXRpb24gY29udGV4dCBiZWxvdykKICAgIGZ1bmN0aW9uIHBhcnNlUHJvY2Vzc2luZ0luc3RydWN0aW9uU3RhcnRUYWcoc3RyZWFtLCBzdGF0ZSkgewogICAgICAgIGlmKHN0cmVhbS5tYXRjaCgieG1sIiwgdHJ1ZSwgdHJ1ZSkpIHsKICAgICAgICAgICAgLy8geG1sIGRlY2xhcmF0aW9uCiAgICAgICAgICAgIGlmKHN0YXRlLmxpbmVOdW1iZXIgPiAxIHx8IHN0cmVhbS5wb3MgPiA1KSB7CiAgICAgICAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHBhcnNlRG9jdW1lbnQ7CiAgICAgICAgICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gU1RZTEVfRVJST1I7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHBhcnNlRGVjbGFyYXRpb25WZXJzaW9uOwogICAgICAgICAgICAgICAgcmV0dXJuIFNUWUxFX0lOU1RSVUNUSU9OOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyByZWd1bGFyIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24KICAgICAgICBpZihpc1Rva2VuU2VwYXJhdGVkKHN0cmVhbSkgfHwgc3RyZWFtLm1hdGNoKCI/PiIpKSB7CiAgICAgICAgICAgIC8vIHdlIGhhdmUgYSBzcGFjZSBhZnRlciB0aGUgc3RhcnQtdGFnLCBvciBub3RoaW5nIGJ1dCB0aGUgZW5kLXRhZwogICAgICAgICAgICAvLyBlaXRoZXIgd2F5IC0gZXJyb3IhCiAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gcGFyc2VEb2N1bWVudDsKICAgICAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICAgICAgICByZXR1cm4gU1RZTEVfRVJST1I7CiAgICAgICAgfQoKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHBhcnNlUHJvY2Vzc2luZ0luc3RydWN0aW9uQm9keTsKICAgICAgICByZXR1cm4gU1RZTEVfSU5TVFJVQ1RJT047CiAgICB9CgogICAgZnVuY3Rpb24gcGFyc2VQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25Cb2R5KHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1teP10vKTsKICAgICAgICBpZihzdHJlYW0uZWF0KCI/IikpIHsKICAgICAgICAgICAgaWYoc3RyZWFtLmVhdCgiPiIpKSB7CiAgICAgICAgICAgICAgICBwb3BDb250ZXh0KHN0YXRlKTsKICAgICAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gc3RhdGUuY29udGV4dCA9PSBudWxsID8gcGFyc2VEb2N1bWVudCA6IHBhcnNlRWxlbWVudEJsb2NrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBTVFlMRV9JTlNUUlVDVElPTjsKICAgIH0KCiAgICAKICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogICAgLy8gY29udGV4dDogWE1MIGRlY2xhcmF0aW9uCiAgICAvLwogICAgLy8gWE1MIGRlY2xhcmF0aW9uIGlzIG9mIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgogICAgLy8gPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIiA/PgogICAgLy8gLSBtdXN0IHN0YXJ0IGF0IHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIGZpcnN0IGxpbmUKICAgIC8vIC0gbWF5IHNwYW4gbXVsdGlwbGUgbGluZXMKICAgIC8vIC0gbXVzdCBpbmNsdWRlICd2ZXJzaW9uJwogICAgLy8gLSBtYXkgaW5jbHVkZSAnZW5jb2RpbmcnIGFuZCAnc3RhbmRhbG9uZScgKGluIHRoYXQgb3JkZXIgYWZ0ZXIgJ3ZlcnNpb24nKQogICAgLy8gLSBhdHRyaWJ1dGUgbmFtZXMgbXVzdCBiZSBsb3dlcmNhc2UKICAgIC8vIC0gY2Fubm90IGNvbnRhaW4gYW55dGhpbmcgZWxzZSBvbiB0aGUgbGluZQogICAgZnVuY3Rpb24gcGFyc2VEZWNsYXJhdGlvblZlcnNpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICAgIHN0YXRlLnRva2VuaXplID0gcGFyc2VEZWNsYXJhdGlvbkVuY29kaW5nOwogICAgICAgIAogICAgICAgIGlmKGlzVG9rZW5TZXBhcmF0ZWQoc3RyZWFtKSAmJiBzdHJlYW0ubWF0Y2goL152ZXJzaW9uKCApKj0oICkqIihbYS16QS1aMC05Xy46XXxcLSkrIi8pKSB7CiAgICAgICAgICAgIHJldHVybiBTVFlMRV9JTlNUUlVDVElPTjsKICAgICAgICB9CiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICAgIHJldHVybiBTVFlMRV9FUlJPUjsKICAgIH0KCiAgICBmdW5jdGlvbiBwYXJzZURlY2xhcmF0aW9uRW5jb2Rpbmcoc3RyZWFtLCBzdGF0ZSkgewogICAgICAgIHN0YXRlLnRva2VuaXplID0gcGFyc2VEZWNsYXJhdGlvblN0YW5kYWxvbmU7CiAgICAgICAgCiAgICAgICAgaWYoaXNUb2tlblNlcGFyYXRlZChzdHJlYW0pICYmIHN0cmVhbS5tYXRjaCgvXmVuY29kaW5nKCApKj0oICkqIltBLVphLXpdKFtBLVphLXowLTkuX118XC0pKiIvKSkgewogICAgICAgICAgICByZXR1cm4gU1RZTEVfSU5TVFJVQ1RJT047CiAgICAgICAgfQogICAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIGZ1bmN0aW9uIHBhcnNlRGVjbGFyYXRpb25TdGFuZGFsb25lKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHBhcnNlRGVjbGFyYXRpb25FbmRUYWc7CiAgICAgICAgCiAgICAgICAgaWYoaXNUb2tlblNlcGFyYXRlZChzdHJlYW0pICYmIHN0cmVhbS5tYXRjaCgvXnN0YW5kYWxvbmUoICkqPSggKSoiKHllc3xubykiLykpIHsKICAgICAgICAgICAgcmV0dXJuIFNUWUxFX0lOU1RSVUNUSU9OOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBmdW5jdGlvbiBwYXJzZURlY2xhcmF0aW9uRW5kVGFnKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHBhcnNlRG9jdW1lbnQ7CiAgICAgICAgCiAgICAgICAgaWYoc3RyZWFtLm1hdGNoKCI/PiIpICYmIHN0cmVhbS5lb2woKSkgewogICAgICAgICAgICBwb3BDb250ZXh0KHN0YXRlKTsKICAgICAgICAgICAgcmV0dXJuIFNUWUxFX0lOU1RSVUNUSU9OOwogICAgICAgIH0KICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgICAgcmV0dXJuIFNUWUxFX0VSUk9SOwogICAgfQoKICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogICAgLy8gcmV0dXJuZWQgb2JqZWN0CiAgICByZXR1cm4gewogICAgICAgIGVsZWN0cmljQ2hhcnM6ICIvWyIsCiAgICAgICAgCiAgICAgICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICB0b2tlbml6ZTogcGFyc2VEb2N1bWVudCwKICAgICAgICAgICAgICAgIHRva1BhcmFtczoge30sCiAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiAwLAogICAgICAgICAgICAgICAgbGluZUVycm9yOiBmYWxzZSwKICAgICAgICAgICAgICAgIGNvbnRleHQ6IG51bGwsCiAgICAgICAgICAgICAgICBpbmRlbnRlZDogMAogICAgICAgICAgICB9OwogICAgICAgIH0sCgogICAgICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgICAgIGlmKHN0cmVhbS5zb2woKSkgewogICAgICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZSBhIG5ldyBsaW5lCiAgICAgICAgICAgICAgICBzdGF0ZS5saW5lTnVtYmVyKys7CiAgICAgICAgICAgICAgICBzdGF0ZS5saW5lRXJyb3IgPSBmYWxzZTsKICAgICAgICAgICAgICAgIHN0YXRlLmluZGVudGVkID0gc3RyZWFtLmluZGVudGF0aW9uKCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIGVhdCBhbGwgKHRoZSBzcGFjZXMpIHlvdSBjYW4KICAgICAgICAgICAgaWYoc3RyZWFtLmVhdFNwYWNlKCkpIHJldHVybiBudWxsOwoKICAgICAgICAgICAgLy8gcnVuIHRoZSBjdXJyZW50IHRva2VuaXplIGZ1bmN0aW9uLCBhY2NvcmRpbmcgdG8gdGhlIHN0YXRlCiAgICAgICAgICAgIHZhciBzdHlsZSA9IHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gaXMgdGhlcmUgYW4gZXJyb3Igc29tZXdoZXJlIGluIHRoZSBsaW5lPwogICAgICAgICAgICBzdGF0ZS5saW5lRXJyb3IgPSAoc3RhdGUubGluZUVycm9yIHx8IHN0eWxlID09ICJlcnJvciIpOwoKICAgICAgICAgICAgcmV0dXJuIHN0eWxlOwogICAgICAgIH0sCiAgICAgICAgCiAgICAgICAgYmxhbmtMaW5lOiBmdW5jdGlvbihzdGF0ZSkgewogICAgICAgICAgICAvLyBibGFuayBsaW5lcyBhcmUgbGluZXMgdG9vIQogICAgICAgICAgICBzdGF0ZS5saW5lTnVtYmVyKys7CiAgICAgICAgICAgIHN0YXRlLmxpbmVFcnJvciA9IGZhbHNlOwogICAgICAgIH0sCiAgICAgICAgCiAgICAgICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7CiAgICAgICAgICAgIGlmKHN0YXRlLmNvbnRleHQpIHsKICAgICAgICAgICAgICAgIGlmKHN0YXRlLmNvbnRleHQubm9JbmRlbnQgPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgIC8vIGRvIG5vdCBpbmRlbnQgLSBubyByZXR1cm4gdmFsdWUgYXQgYWxsCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYodGV4dEFmdGVyLm1hdGNoKC9ePFwvLiovKSkgewogICAgICAgICAgICAgICAgICAgIC8vIGVuZC10YWcgLSBpbmRlbnQgYmFjayB0byBsYXN0IGNvbnRleHQKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGUuY29udGV4dC5pbmRlbnQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZih0ZXh0QWZ0ZXIubWF0Y2goL148IVxbQ0RBVEFcWy8pKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gYSBzdGFuZC1hbG9uZSBDREFUQSBzdGFydC10YWcgLSBpbmRlbnQgYmFjayB0byBjb2x1bW4gMAogICAgICAgICAgICAgICAgICAgIHJldHVybiAwOyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIC8vIGluZGVudCB0byBsYXN0IGNvbnRleHQgKyByZWd1bGFyIGluZGVudCB1bml0CiAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGUuY29udGV4dC5pbmRlbnQgKyBpbmRlbnRVbml0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0sCiAgICAgICAgCiAgICAgICAgY29tcGFyZVN0YXRlczogZnVuY3Rpb24oYSwgYikgewogICAgICAgICAgICBpZiAoYS5pbmRlbnRlZCAhPSBiLmluZGVudGVkKSByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIGZvciAodmFyIGNhID0gYS5jb250ZXh0LCBjYiA9IGIuY29udGV4dDsgOyBjYSA9IGNhLnByZXYsIGNiID0gY2IucHJldikgewogICAgICAgICAgICAgICAgaWYgKCFjYSB8fCAhY2IpIHJldHVybiBjYSA9PSBjYjsKICAgICAgICAgICAgICAgIGlmIChjYS50YWdOYW1lICE9IGNiLnRhZ05hbWUpIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH07Cn0pOwoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJhcHBsaWNhdGlvbi94bWwiLCAicHVyZXhtbCIpOwpDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveG1sIiwgInB1cmV4bWwiKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/yaml/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/yaml/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFlBTUwgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9InlhbWwuanMiPjwvc2NyaXB0PgogICAgPHN0eWxlPi5Db2RlTWlycm9yIHsgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGQ7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZGRkOyB9PC9zdHlsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogWUFNTCBtb2RlPC9oMT4KICAgIDxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+Ci0tLSAjIEZhdm9yaXRlIG1vdmllcwotIENhc2FibGFuY2EKLSBOb3J0aCBieSBOb3J0aHdlc3QKLSBUaGUgTWFuIFdobyBXYXNuJ3QgVGhlcmUKLS0tICMgU2hvcHBpbmcgbGlzdApbbWlsaywgcHVtcGtpbiBwaWUsIGVnZ3MsIGp1aWNlXQotLS0gIyBJbmRlbnRlZCBCbG9ja3MsIGNvbW1vbiBpbiBZQU1MIGRhdGEgZmlsZXMsIHVzZSBpbmRlbnRhdGlvbiBhbmQgbmV3IGxpbmVzIHRvIHNlcGFyYXRlIHRoZSBrZXk6IHZhbHVlIHBhaXJzCiAgbmFtZTogSm9obiBTbWl0aAogIGFnZTogMzMKLS0tICMgSW5saW5lIEJsb2NrcywgY29tbW9uIGluIFlBTUwgZGF0YSBzdHJlYW1zLCB1c2UgY29tbWFzIHRvIHNlcGFyYXRlIHRoZSBrZXk6IHZhbHVlIHBhaXJzIGJldHdlZW4gYnJhY2VzCntuYW1lOiBKb2huIFNtaXRoLCBhZ2U6IDMzfQotLS0KcmVjZWlwdDogICAgIE96LVdhcmUgUHVyY2hhc2UgSW52b2ljZQpkYXRlOiAgICAgICAgMjAwNy0wOC0wNgpjdXN0b21lcjoKICAgIGdpdmVuOiAgIERvcm90aHkKICAgIGZhbWlseTogIEdhbGUKCml0ZW1zOgogICAgLSBwYXJ0X25vOiAgIEE0Nzg2CiAgICAgIGRlc2NyaXA6ICAgV2F0ZXIgQnVja2V0IChGaWxsZWQpCiAgICAgIHByaWNlOiAgICAgMS40NwogICAgICBxdWFudGl0eTogIDQKCiAgICAtIHBhcnRfbm86ICAgRTE2MjgKICAgICAgZGVzY3JpcDogICBIaWdoIEhlZWxlZCAiUnVieSIgU2xpcHBlcnMKICAgICAgc2l6ZTogICAgICAgOAogICAgICBwcmljZTogICAgIDEwMC4yNwogICAgICBxdWFudGl0eTogIDEKCmJpbGwtdG86ICAmaWQwMDEKICAgIHN0cmVldDogfAogICAgICAgICAgICAxMjMgVG9ybmFkbyBBbGxleQogICAgICAgICAgICBTdWl0ZSAxNgogICAgY2l0eTogICBFYXN0IENlbnRlcnZpbGxlCiAgICBzdGF0ZTogIEtTCgpzaGlwLXRvOiAgKmlkMDAxCgpzcGVjaWFsRGVsaXZlcnk6ICA+CiAgICBGb2xsb3cgdGhlIFllbGxvdyBCcmljawogICAgUm9hZCB0byB0aGUgRW1lcmFsZCBDaXR5LgogICAgUGF5IG5vIGF0dGVudGlvbiB0byB0aGUKICAgIG1hbiBiZWhpbmQgdGhlIGN1cnRhaW4uCi4uLgo8L3RleHRhcmVhPjwvZm9ybT4KICAgIDxzY3JpcHQ+CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7fSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD48c3Ryb25nPk1JTUUgdHlwZXMgZGVmaW5lZDo8L3N0cm9uZz4gPGNvZGU+dGV4dC94LXlhbWw8L2NvZGU+LjwvcD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/yaml/yaml.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJ5YW1sIiwgZnVuY3Rpb24oKSB7CgkKCXZhciBjb25zID0gWyd0cnVlJywgJ2ZhbHNlJywgJ29uJywgJ29mZicsICd5ZXMnLCAnbm8nXTsKCXZhciBrZXl3b3JkUmVnZXggPSBuZXcgUmVnRXhwKCJcXGIoKCIrY29ucy5qb2luKCIpfCgiKSsiKSkkIiwgJ2knKTsKCQoJcmV0dXJuIHsKCQl0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewoJCQl2YXIgY2ggPSBzdHJlYW0ucGVlaygpOwoJCQl2YXIgZXNjID0gc3RhdGUuZXNjYXBlZDsKCQkJc3RhdGUuZXNjYXBlZCA9IGZhbHNlOwoJCQkvKiBjb21tZW50cyAqLwoJCQlpZiAoY2ggPT0gIiMiKSB7IHN0cmVhbS5za2lwVG9FbmQoKTsgcmV0dXJuICJjb21tZW50IjsgfQoJCQlpZiAoc3RhdGUubGl0ZXJhbCAmJiBzdHJlYW0uaW5kZW50YXRpb24oKSA+IHN0YXRlLmtleUNvbCkgewoJCQkJc3RyZWFtLnNraXBUb0VuZCgpOyByZXR1cm4gInN0cmluZyI7CgkJCX0gZWxzZSBpZiAoc3RhdGUubGl0ZXJhbCkgeyBzdGF0ZS5saXRlcmFsID0gZmFsc2U7IH0KCQkJaWYgKHN0cmVhbS5zb2woKSkgewoJCQkJc3RhdGUua2V5Q29sID0gMDsKCQkJCXN0YXRlLnBhaXIgPSBmYWxzZTsKCQkJCXN0YXRlLnBhaXJTdGFydCA9IGZhbHNlOwoJCQkJLyogZG9jdW1lbnQgc3RhcnQgKi8KCQkJCWlmKHN0cmVhbS5tYXRjaCgvLS0tLykpIHsgcmV0dXJuICJkZWYiOyB9CgkJCQkvKiBkb2N1bWVudCBlbmQgKi8KCQkJCWlmIChzdHJlYW0ubWF0Y2goL1wuXC5cLi8pKSB7IHJldHVybiAiZGVmIjsgfQoJCQkJLyogYXJyYXkgbGlzdCBpdGVtICovCgkJCQlpZiAoc3RyZWFtLm1hdGNoKC9ccyotXHMrLykpIHsgcmV0dXJuICdtZXRhJzsgfQoJCQl9CgkJCS8qIHBhaXJzIChhc3NvY2lhdGl2ZSBhcnJheXMpIC0+IGtleSAqLwoJCQlpZiAoIXN0YXRlLnBhaXIgJiYgc3RyZWFtLm1hdGNoKC9eXHMqKFthLXowLTlcLl8tXSkrKD89XHMqOikvaSkpIHsKCQkJCXN0YXRlLnBhaXIgPSB0cnVlOwoJCQkJc3RhdGUua2V5Q29sID0gc3RyZWFtLmluZGVudGF0aW9uKCk7CgkJCQlyZXR1cm4gImF0b20iOwoJCQl9CgkJCWlmIChzdGF0ZS5wYWlyICYmIHN0cmVhbS5tYXRjaCgvXjpccyovKSkgeyBzdGF0ZS5wYWlyU3RhcnQgPSB0cnVlOyByZXR1cm4gJ21ldGEnOyB9CgkJCQoJCQkvKiBpbmxpbmUgcGFpcnMvbGlzdHMgKi8KCQkJaWYgKHN0cmVhbS5tYXRjaCgvXihce3xcfXxcW3xcXSkvKSkgewoJCQkJaWYgKGNoID09ICd7JykKCQkJCQlzdGF0ZS5pbmxpbmVQYWlycysrOwoJCQkJZWxzZSBpZiAoY2ggPT0gJ30nKQoJCQkJCXN0YXRlLmlubGluZVBhaXJzLS07CgkJCQllbHNlIGlmIChjaCA9PSAnWycpCgkJCQkJc3RhdGUuaW5saW5lTGlzdCsrOwoJCQkJZWxzZQoJCQkJCXN0YXRlLmlubGluZUxpc3QtLTsKCQkJCXJldHVybiAnbWV0YSc7CgkJCX0KCQkJCgkJCS8qIGxpc3Qgc2VwZXJhdG9yICovCgkJCWlmIChzdGF0ZS5pbmxpbmVMaXN0ID4gMCAmJiAhZXNjICYmIGNoID09ICcsJykgewoJCQkJc3RyZWFtLm5leHQoKTsKCQkJCXJldHVybiAnbWV0YSc7CgkJCX0KCQkJLyogcGFpcnMgc2VwZXJhdG9yICovCgkJCWlmIChzdGF0ZS5pbmxpbmVQYWlycyA+IDAgJiYgIWVzYyAmJiBjaCA9PSAnLCcpIHsKCQkJCXN0YXRlLmtleUNvbCA9IDA7CgkJCQlzdGF0ZS5wYWlyID0gZmFsc2U7CgkJCQlzdGF0ZS5wYWlyU3RhcnQgPSBmYWxzZTsKCQkJCXN0cmVhbS5uZXh0KCk7CgkJCQlyZXR1cm4gJ21ldGEnOwoJCQl9CgkJCQoJCQkvKiBzdGFydCBvZiB2YWx1ZSBvZiBhIHBhaXIgKi8KCQkJaWYgKHN0YXRlLnBhaXJTdGFydCkgewoJCQkJLyogYmxvY2sgbGl0ZXJhbHMgKi8KCQkJCWlmIChzdHJlYW0ubWF0Y2goL15ccyooXHx8XD4pXHMqLykpIHsgc3RhdGUubGl0ZXJhbCA9IHRydWU7IHJldHVybiAnbWV0YSc7IH07CgkJCQkvKiByZWZlcmVuY2VzICovCgkJCQlpZiAoc3RyZWFtLm1hdGNoKC9eXHMqKFwmfFwqKVthLXowLTlcLl8tXStcYi9pKSkgeyByZXR1cm4gJ3ZhcmlhYmxlLTInOyB9CgkJCQkvKiBudW1iZXJzICovCgkJCQlpZiAoc3RhdGUuaW5saW5lUGFpcnMgPT0gMCAmJiBzdHJlYW0ubWF0Y2goL15ccyotP1swLTlcLlwsXStccz8kLykpIHsgcmV0dXJuICdudW1iZXInOyB9CgkJCQlpZiAoc3RhdGUuaW5saW5lUGFpcnMgPiAwICYmIHN0cmVhbS5tYXRjaCgvXlxzKi0/WzAtOVwuXCxdK1xzPyg/PSgsfH0pKS8pKSB7IHJldHVybiAnbnVtYmVyJzsgfQoJCQkJLyoga2V5d29yZHMgKi8KCQkJCWlmIChzdHJlYW0ubWF0Y2goa2V5d29yZFJlZ2V4KSkgeyByZXR1cm4gJ2tleXdvcmQnOyB9CgkJCX0KCgkJCS8qIG5vdGhpbmcgZm91bmQsIGNvbnRpbnVlICovCgkJCXN0YXRlLnBhaXJTdGFydCA9IGZhbHNlOwoJCQlzdGF0ZS5lc2NhcGVkID0gKGNoID09ICdcXCcpOwoJCQlzdHJlYW0ubmV4dCgpOwoJCQlyZXR1cm4gbnVsbDsKCQl9LAoJCXN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkgewoJCQlyZXR1cm4gewoJCQkJcGFpcjogZmFsc2UsCgkJCQlwYWlyU3RhcnQ6IGZhbHNlLAoJCQkJa2V5Q29sOiAwLAoJCQkJaW5saW5lUGFpcnM6IDAsCgkJCQlpbmxpbmVMaXN0OiAwLAoJCQkJbGl0ZXJhbDogZmFsc2UsCgkJCQllc2NhcGVkOiBmYWxzZQoJCQl9OwoJCX0KCX07Cn0pOwoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gteWFtbCIsICJ5YW1sIik7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBDb2RlTWlycm9yIDIKCkNvZGVNaXJyb3IgMiBpcyBhIHJld3JpdGUgb2YgW0NvZGVNaXJyb3IKMV0oaHR0cDovL2dpdGh1Yi5jb20vbWFyaWpuaC9Db2RlTWlycm9yKS4gVGhlIGRvY3MgbGl2ZQpbaGVyZV0oaHR0cDovL2NvZGVtaXJyb3IubmV0L2RvYy9tYW51YWwuaHRtbCksIGFuZCB0aGUgcHJvamVjdCBwYWdlIGlzCltodHRwOi8vY29kZW1pcnJvci5uZXQvXShodHRwOi8vY29kZW1pcnJvci5uZXQvKS4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/test/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/test/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFRlc3QgU3VpdGU8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9tb2RlL2phdmFzY3JpcHQvamF2YXNjcmlwdC5qcyI+PC9zY3JpcHQ+CgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KICAgICAgLm9rIHtjb2xvcjogIzBlMDt9CiAgICAgIC5mYWlsdXJlIHtjb2xvcjogI2UwMDt9CiAgICAgIC5lcnJvciB7Y29sb3I6ICNjOTA7fQogICAgPC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogVGVzdCBTdWl0ZTwvaDE+CgogICAgPHA+QSBsaW1pdGVkIHNldCBvZiBwcm9ncmFtbWF0aWMgc2FuaXR5IHRlc3RzIGZvciBDb2RlTWlycm9yLjwvcD4KCiAgICA8cHJlIGlkPW91dHB1dD48L3ByZT4KCiAgICA8ZGl2IHN0eWxlPSJ2aXNpYmlsaXR5OiBoaWRkZW4iIGlkPXRlc3Rncm91bmQ+CiAgICAgIDxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+PC90ZXh0YXJlYT48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9b2sgbmFtZT1zdWJtaXQ+PC9mb3JtPgogICAgPC9kaXY+CgogICAgPHNjcmlwdCBzcmM9InRlc3QuanMiPjwvc2NyaXB0PgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/test/test.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[dmFyIHRlc3RzID0gW107Cgp0ZXN0KCJmcm9tVGV4dEFyZWEiLCBmdW5jdGlvbigpIHsKICB2YXIgdGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpOwogIHRlLnZhbHVlID0gIkNPTlRFTlQiOwogIHZhciBjbSA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKHRlKTsKICBpcyghdGUub2Zmc2V0SGVpZ2h0KTsKICBlcShjbS5nZXRWYWx1ZSgpLCAiQ09OVEVOVCIpOwogIGNtLnNldFZhbHVlKCJmb29cbmJhciIpOwogIGVxKGNtLmdldFZhbHVlKCksICJmb29cbmJhciIpOwogIGNtLnNhdmUoKTsKICBpcygvXmZvb1xyP1xuYmFyJC8udGVzdCh0ZS52YWx1ZSkpOwogIGNtLnNldFZhbHVlKCJ4eHgiKTsKICBjbS50b1RleHRBcmVhKCk7CiAgaXModGUub2Zmc2V0SGVpZ2h0KTsKICBlcSh0ZS52YWx1ZSwgInh4eCIpOwp9KTsKCnRlc3RDTSgiZ2V0UmFuZ2UiLCBmdW5jdGlvbihjbSkgewogIGVxKGNtLmdldExpbmUoMCksICIxMjM0Iik7CiAgZXEoY20uZ2V0TGluZSgxKSwgIjU2NzgiKTsKICBlcShjbS5nZXRMaW5lKDIpLCBudWxsKTsKICBlcShjbS5nZXRMaW5lKC0xKSwgbnVsbCk7CiAgZXEoY20uZ2V0UmFuZ2Uoe2xpbmU6IDAsIGNoOiAwfSwge2xpbmU6IDAsIGNoOiAzfSksICIxMjMiKTsKICBlcShjbS5nZXRSYW5nZSh7bGluZTogMCwgY2g6IC0xfSwge2xpbmU6IDAsIGNoOiAyMDB9KSwgIjEyMzQiKTsKICBlcShjbS5nZXRSYW5nZSh7bGluZTogMCwgY2g6IDJ9LCB7bGluZTogMSwgY2g6IDJ9KSwgIjM0XG41NiIpOwogIGVxKGNtLmdldFJhbmdlKHtsaW5lOiAxLCBjaDogMn0sIHtsaW5lOiAxMDAsIGNoOiAwfSksICI3OCIpOwp9LCB7dmFsdWU6ICIxMjM0XG41Njc4In0pOwoKdGVzdENNKCJyZXBsYWNlUmFuZ2UiLCBmdW5jdGlvbihjbSkgewogIGVxKGNtLmdldFZhbHVlKCksICIiKTsKICBjbS5yZXBsYWNlUmFuZ2UoImZvb1xuIiwge2xpbmU6IDAsIGNoOiAwfSk7CiAgZXEoY20uZ2V0VmFsdWUoKSwgImZvb1xuIik7CiAgY20ucmVwbGFjZVJhbmdlKCJhXG5iIiwge2xpbmU6IDAsIGNoOiAxfSk7CiAgZXEoY20uZ2V0VmFsdWUoKSwgImZhXG5ib29cbiIpOwogIGVxKGNtLmxpbmVDb3VudCgpLCAzKTsKICBjbS5yZXBsYWNlUmFuZ2UoInh5enp5Iiwge2xpbmU6IDAsIGNoOiAwfSwge2xpbmU6IDEsIGNoOiAxfSk7CiAgZXEoY20uZ2V0VmFsdWUoKSwgInh5enp5b29cbiIpOwogIGNtLnJlcGxhY2VSYW5nZSgiYWJjIiwge2xpbmU6IDAsIGNoOiAwfSwge2xpbmU6IDEwLCBjaDogMH0pOwogIGVxKGNtLmdldFZhbHVlKCksICJhYmMiKTsKICBlcShjbS5saW5lQ291bnQoKSwgMSk7Cn0pOwoKdGVzdENNKCJzZWxlY3Rpb24iLCBmdW5jdGlvbihjbSkgewogIGNtLnNldFNlbGVjdGlvbih7bGluZTogMCwgY2g6IDR9LCB7bGluZTogMiwgY2g6IDJ9KTsKICBpcyhjbS5zb21ldGhpbmdTZWxlY3RlZCgpKTsKICBlcShjbS5nZXRTZWxlY3Rpb24oKSwgIjExXG4yMjIyMjJcbjMzIik7CiAgZXFQb3MoY20uZ2V0Q3Vyc29yKGZhbHNlKSwge2xpbmU6IDIsIGNoOiAyfSk7CiAgZXFQb3MoY20uZ2V0Q3Vyc29yKHRydWUpLCB7bGluZTogMCwgY2g6IDR9KTsKICBjbS5zZXRTZWxlY3Rpb24oe2xpbmU6IDEsIGNoOiAwfSk7CiAgaXMoIWNtLnNvbWV0aGluZ1NlbGVjdGVkKCkpOwogIGVxKGNtLmdldFNlbGVjdGlvbigpLCAiIik7CiAgZXFQb3MoY20uZ2V0Q3Vyc29yKHRydWUpLCB7bGluZTogMSwgY2g6IDB9KTsKICBjbS5yZXBsYWNlU2VsZWN0aW9uKCJhYmMiKTsKICBlcShjbS5nZXRTZWxlY3Rpb24oKSwgImFiYyIpOwogIGVxKGNtLmdldFZhbHVlKCksICIxMTExMTFcbmFiYzIyMjIyMlxuMzMzMzMzIik7CiAgY20ucmVwbGFjZVNlbGVjdGlvbigiZGVmIiwgImVuZCIpOwogIGVxKGNtLmdldFNlbGVjdGlvbigpLCAiIik7CiAgZXFQb3MoY20uZ2V0Q3Vyc29yKHRydWUpLCB7bGluZTogMSwgY2g6IDN9KTsKICBjbS5zZXRDdXJzb3Ioe2xpbmU6IDIsIGNoOiAxfSk7CiAgZXFQb3MoY20uZ2V0Q3Vyc29yKHRydWUpLCB7bGluZTogMiwgY2g6IDF9KTsKICBjbS5zZXRDdXJzb3IoMSwgMik7CiAgZXFQb3MoY20uZ2V0Q3Vyc29yKHRydWUpLCB7bGluZTogMSwgY2g6IDJ9KTsKfSwge3ZhbHVlOiAiMTExMTExXG4yMjIyMjJcbjMzMzMzMyJ9KTsKCnRlc3RDTSgibGluZXMiLCBmdW5jdGlvbihjbSkgewogIGVxKGNtLmdldExpbmUoMCksICIxMTExMTEiKTsKICBlcShjbS5nZXRMaW5lKDEpLCAiMjIyMjIyIik7CiAgZXEoY20uZ2V0TGluZSgtMSksIG51bGwpOwogIGNtLnJlbW92ZUxpbmUoMSk7CiAgY20uc2V0TGluZSgxLCAiYWJjIik7CiAgZXEoY20uZ2V0VmFsdWUoKSwgIjExMTExMVxuYWJjIik7Cn0sIHt2YWx1ZTogIjExMTExMVxuMjIyMjIyXG4zMzMzMzMifSk7Cgp0ZXN0Q00oImluZGVudCIsIGZ1bmN0aW9uKGNtKSB7CiAgY20uaW5kZW50TGluZSgxKTsKICBlcShjbS5nZXRMaW5lKDEpLCAiICAgYmxhaCgpOyIpOwogIGNtLnNldE9wdGlvbigiaW5kZW50VW5pdCIsIDgpOwogIGNtLmluZGVudExpbmUoMSk7CiAgZXEoY20uZ2V0TGluZSgxKSwgIlx0YmxhaCgpOyIpOwp9LCB7dmFsdWU6ICJpZiAoeCkge1xuYmxhaCgpO1xufSIsIGluZGVudFVuaXQ6IDMsIGluZGVudFdpdGhUYWJzOiB0cnVlLCB0YWJTaXplOiA4fSk7Cgp0ZXN0KCJkZWZhdWx0cyIsIGZ1bmN0aW9uKCkgewogIHZhciBvbGRkZWZhdWx0cyA9IENvZGVNaXJyb3IuZGVmYXVsdHMsIGRlZnMgPSBDb2RlTWlycm9yLmRlZmF1bHRzID0ge307CiAgZm9yICh2YXIgb3B0IGluIG9sZGRlZmF1bHRzKSBkZWZzW29wdF0gPSBvbGRkZWZhdWx0c1tvcHRdOwogIGRlZnMuaW5kZW50VW5pdCA9IDU7CiAgZGVmcy52YWx1ZSA9ICJ1dSI7CiAgZGVmcy5lbnRlck1vZGUgPSAia2VlcCI7CiAgZGVmcy50YWJpbmRleCA9IDU1OwogIHZhciBwbGFjZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXN0Z3JvdW5kIiksIGNtID0gQ29kZU1pcnJvcihwbGFjZSk7CiAgdHJ5IHsKICAgIGVxKGNtLmdldE9wdGlvbigiaW5kZW50VW5pdCIpLCA1KTsKICAgIGNtLnNldE9wdGlvbigiaW5kZW50VW5pdCIsIDEwKTsKICAgIGVxKGRlZnMuaW5kZW50VW5pdCwgNSk7CiAgICBlcShjbS5nZXRWYWx1ZSgpLCAidXUiKTsKICAgIGVxKGNtLmdldE9wdGlvbigiZW50ZXJNb2RlIiksICJrZWVwIik7CiAgICBlcShjbS5nZXRJbnB1dEZpZWxkKCkudGFiSW5kZXgsIDU1KTsKICB9CiAgZmluYWxseSB7CiAgICBDb2RlTWlycm9yLmRlZmF1bHRzID0gb2xkZGVmYXVsdHM7CiAgICBwbGFjZS5yZW1vdmVDaGlsZChjbS5nZXRXcmFwcGVyRWxlbWVudCgpKTsKICB9Cn0pOwoKdGVzdENNKCJsaW5lSW5mbyIsIGZ1bmN0aW9uKGNtKSB7CiAgZXEoY20ubGluZUluZm8oLTEpLCBudWxsKTsKICB2YXIgbGggPSBjbS5zZXRNYXJrZXIoMSwgIkZPTyIsICJiYXIiKTsKICB2YXIgaW5mbyA9IGNtLmxpbmVJbmZvKDEpOwogIGVxKGluZm8udGV4dCwgIjIyMjIyMiIpOwogIGVxKGluZm8ubWFya2VyVGV4dCwgIkZPTyIpOwogIGVxKGluZm8ubWFya2VyQ2xhc3MsICJiYXIiKTsKICBlcShpbmZvLmxpbmUsIDEpOwogIGVxKGNtLmxpbmVJbmZvKDIpLm1hcmtlclRleHQsIG51bGwpOwogIGNtLmNsZWFyTWFya2VyKGxoKTsKICBlcShjbS5saW5lSW5mbygxKS5tYXJrZXJUZXh0LCBudWxsKTsKfSwge3ZhbHVlOiAiMTExMTExXG4yMjIyMjJcbjMzMzMzMyJ9KTsKCnRlc3RDTSgiY29vcmRzIiwgZnVuY3Rpb24oY20pIHsKICB2YXIgc2Nyb2xsZXIgPSBjbS5nZXRXcmFwcGVyRWxlbWVudCgpLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIkNvZGVNaXJyb3Itc2Nyb2xsIilbMF07CiAgc2Nyb2xsZXIuc3R5bGUuaGVpZ2h0ID0gIjEwMHB4IjsKICB2YXIgY29udGVudCA9IFtdOwogIGZvciAodmFyIGkgPSAwOyBpIDwgMjAwOyArK2kpIGNvbnRlbnQucHVzaCgiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiArIGkpOwogIGNtLnNldFZhbHVlKGNvbnRlbnQuam9pbigiXG4iKSk7CiAgdmFyIHRvcCA9IGNtLmNoYXJDb29yZHMoe2xpbmU6IDAsIGNoOiAwfSk7CiAgdmFyIGJvdCA9IGNtLmNoYXJDb29yZHMoe2xpbmU6IDIwMCwgY2g6IDMwfSk7CiAgaXModG9wLnggPCBib3QueCk7CiAgaXModG9wLnkgPCBib3QueSk7CiAgaXModG9wLnkgPCB0b3AueUJvdCk7CiAgY20uc2Nyb2xsVG8oMTAwKTsKICB2YXIgdG9wMiA9IGNtLmNoYXJDb29yZHMoe2xpbmU6IDAsIGNoOiAwfSk7CiAgaXModG9wLnkgPiB0b3AyLnkpOwogIGVxKHRvcC54LCB0b3AyLngpOwp9KTsKCnRlc3RDTSgiY29vcmRzQ2hhciIsIGZ1bmN0aW9uKGNtKSB7CiAgdmFyIGNvbnRlbnQgPSBbXTsKICBmb3IgKHZhciBpID0gMDsgaSA8IDcwOyArK2kpIGNvbnRlbnQucHVzaCgieHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eCIpOwogIGNtLnNldFZhbHVlKGNvbnRlbnQuam9pbigiXG4iKSk7CiAgZm9yICh2YXIgeCA9IDA7IHggPCAzNTsgeCArPSAyKSB7CiAgICBmb3IgKHZhciB5ID0gMDsgeSA8IDcwOyB5ICs9IDUpIHsKICAgICAgY20uc2V0Q3Vyc29yKHksIHgpOwogICAgICB2YXIgcG9zID0gY20uY29vcmRzQ2hhcihjbS5jaGFyQ29vcmRzKHtsaW5lOiB5LCBjaDogeH0pKTsKICAgICAgZXEocG9zLmxpbmUsIHkpOwogICAgICBlcShwb3MuY2gsIHgpOwogICAgfQogIH0KfSk7Cgp0ZXN0Q00oInBvc0Zyb21JbmRleCIsIGZ1bmN0aW9uKGNtKSB7CiAgY20uc2V0VmFsdWUoCiAgICAiVGhpcyBmdW5jdGlvbiBzaG91bGRcbiIgKwogICAgImNvbnZlcnQgYSB6ZXJvIGJhc2VkIGluZGV4XG4iICsKICAgICJ0byBsaW5lIGFuZCBjaC4iCiAgKTsKCiAgdmFyIGV4YW1wbGVzID0gWwogICAgeyBpbmRleDogLTEsIGxpbmU6IDAsIGNoOiAwICB9LCAvLyA8LSBUZXN0cyBjbGlwcGluZwogICAgeyBpbmRleDogMCwgIGxpbmU6IDAsIGNoOiAwICB9LAogICAgeyBpbmRleDogMTAsIGxpbmU6IDAsIGNoOiAxMCB9LAogICAgeyBpbmRleDogMzksIGxpbmU6IDEsIGNoOiAxOCB9LAogICAgeyBpbmRleDogNTUsIGxpbmU6IDIsIGNoOiA3ICB9LAogICAgeyBpbmRleDogNjMsIGxpbmU6IDIsIGNoOiAxNSB9LAogICAgeyBpbmRleDogNjQsIGxpbmU6IDIsIGNoOiAxNSB9ICAvLyA8LSBUZXN0cyBjbGlwcGluZwogIF07CgogIGZvciAodmFyIGkgPSAwOyBpIDwgZXhhbXBsZXMubGVuZ3RoOyBpKyspIHsKICAgIHZhciBleGFtcGxlID0gZXhhbXBsZXNbaV07CiAgICB2YXIgcG9zID0gY20ucG9zRnJvbUluZGV4KGV4YW1wbGUuaW5kZXgpOwogICAgZXEocG9zLmxpbmUsIGV4YW1wbGUubGluZSk7CiAgICBlcShwb3MuY2gsIGV4YW1wbGUuY2gpOwogICAgaWYgKGV4YW1wbGUuaW5kZXggPj0gMCAmJiBleGFtcGxlLmluZGV4IDwgNjQpCiAgICAgIGVxKGNtLmluZGV4RnJvbVBvcyhwb3MpLCBleGFtcGxlLmluZGV4KTsKICB9ICAKfSk7Cgp0ZXN0Q00oInVuZG8iLCBmdW5jdGlvbihjbSkgewogIGNtLnNldExpbmUoMCwgImRlZiIpOwogIGVxKGNtLmhpc3RvcnlTaXplKCkudW5kbywgMSk7CiAgY20udW5kbygpOwogIGVxKGNtLmdldFZhbHVlKCksICJhYmMiKTsKICBlcShjbS5oaXN0b3J5U2l6ZSgpLnVuZG8sIDApOwogIGVxKGNtLmhpc3RvcnlTaXplKCkucmVkbywgMSk7CiAgY20ucmVkbygpOwogIGVxKGNtLmdldFZhbHVlKCksICJkZWYiKTsKICBlcShjbS5oaXN0b3J5U2l6ZSgpLnVuZG8sIDEpOwogIGVxKGNtLmhpc3RvcnlTaXplKCkucmVkbywgMCk7CiAgY20uc2V0VmFsdWUoIjFcblxuXG4yIik7CiAgY20uY2xlYXJIaXN0b3J5KCk7CiAgZXEoY20uaGlzdG9yeVNpemUoKS51bmRvLCAwKTsKICBmb3IgKHZhciBpID0gMDsgaSA8IDIwOyArK2kpIHsKICAgIGNtLnJlcGxhY2VSYW5nZSgiYSIsIHtsaW5lOiAwLCBjaDogMH0pOwogICAgY20ucmVwbGFjZVJhbmdlKCJiIiwge2xpbmU6IDMsIGNoOiAwfSk7CiAgfQogIGVxKGNtLmhpc3RvcnlTaXplKCkudW5kbywgMSk7CiAgY20udW5kbygpOwogIGVxKGNtLmhpc3RvcnlTaXplKCkucmVkbywgMSk7CiAgZXEoY20uZ2V0VmFsdWUoKSwgIjFcblxuXG4yIik7Cn0sIHt2YWx1ZTogImFiYyJ9KTsKCnRlc3RDTSgidW5kb011bHRpTGluZSIsIGZ1bmN0aW9uKGNtKSB7CiAgY20ucmVwbGFjZVJhbmdlKCJ4Iiwge2xpbmU6MCwgY2g6IDB9KTsKICBjbS5yZXBsYWNlUmFuZ2UoInkiLCB7bGluZToxLCBjaDogMH0pOwogIGNtLnVuZG8oKTsKICBlcShjbS5nZXRWYWx1ZSgpLCAiYWJjXG5kZWZcbmdoaSIpOwogIGNtLnJlcGxhY2VSYW5nZSgieSIsIHtsaW5lOjEsIGNoOiAwfSk7CiAgY20ucmVwbGFjZVJhbmdlKCJ4Iiwge2xpbmU6MCwgY2g6IDB9KTsKICBjbS51bmRvKCk7CiAgZXEoY20uZ2V0VmFsdWUoKSwgImFiY1xuZGVmXG5naGkiKTsKICBjbS5yZXBsYWNlUmFuZ2UoInkiLCB7bGluZToyLCBjaDogMH0pOwogIGNtLnJlcGxhY2VSYW5nZSgieCIsIHtsaW5lOjEsIGNoOiAwfSk7CiAgY20ucmVwbGFjZVJhbmdlKCJ6Iiwge2xpbmU6MiwgY2g6IDB9KTsKICBjbS51bmRvKCk7CiAgZXEoY20uZ2V0VmFsdWUoKSwgImFiY1xuZGVmXG5naGkiKTsKfSwge3ZhbHVlOiAiYWJjXG5kZWZcbmdoaSJ9KTsKCnRlc3RDTSgibWFya1RleHRTaW5nbGVMaW5lIiwgZnVuY3Rpb24oY20pIHsKICBmb3JFYWNoKFt7YTogMCwgYjogMSwgYzogIiIsIGY6IDIsIHQ6IDV9LAogICAgICAgICAgIHthOiAwLCBiOiA0LCBjOiAiIiwgZjogMCwgdDogMn0sCiAgICAgICAgICAge2E6IDEsIGI6IDIsIGM6ICJ4IiwgZjogMywgdDogNn0sCiAgICAgICAgICAge2E6IDQsIGI6IDUsIGM6ICIiLCBmOiAzLCB0OiA1fSwKICAgICAgICAgICB7YTogNCwgYjogNSwgYzogInh4IiwgZjogMywgdDogN30sCiAgICAgICAgICAge2E6IDIsIGI6IDUsIGM6ICIiLCBmOiAyLCB0OiAzfSwKICAgICAgICAgICB7YTogMiwgYjogNSwgYzogImFiY2QiLCBmOiA2LCB0OiA3fSwKICAgICAgICAgICB7YTogMiwgYjogNiwgYzogIngiLCBmOiBudWxsLCB0OiBudWxsfSwKICAgICAgICAgICB7YTogMywgYjogNiwgYzogIiIsIGY6IG51bGwsIHQ6IG51bGx9LAogICAgICAgICAgIHthOiAwLCBiOiA5LCBjOiAiaGFsbG8iLCBmOiBudWxsLCB0OiBudWxsfSwKICAgICAgICAgICB7YTogNCwgYjogNiwgYzogIngiLCBmOiAzLCB0OiA0fSwKICAgICAgICAgICB7YTogNCwgYjogOCwgYzogIiIsIGY6IDMsIHQ6IDR9LAogICAgICAgICAgIHthOiA2LCBiOiA2LCBjOiAiYSIsIGY6IDMsIHQ6IDZ9LAogICAgICAgICAgIHthOiA4LCBiOiA5LCBjOiAiIiwgZjogMywgdDogNn1dLCBmdW5jdGlvbih0ZXN0KSB7CiAgICBjbS5zZXRWYWx1ZSgiMTIzNDU2Nzg5MCIpOwogICAgdmFyIHIgPSBjbS5tYXJrVGV4dCh7bGluZTogMCwgY2g6IDN9LCB7bGluZTogMCwgY2g6IDZ9LCAiZm9vIik7CiAgICBjbS5yZXBsYWNlUmFuZ2UodGVzdC5jLCB7bGluZTogMCwgY2g6IHRlc3QuYX0sIHtsaW5lOiAwLCBjaDogdGVzdC5ifSk7CiAgICB2YXIgZiA9IHIuZmluZCgpOwogICAgZXEoZi5mcm9tICYmIGYuZnJvbS5jaCwgdGVzdC5mKTsgZXEoZi50byAmJiBmLnRvLmNoLCB0ZXN0LnQpOwogIH0pOwp9KTsKCnRlc3RDTSgibWFya1RleHRNdWx0aUxpbmUiLCBmdW5jdGlvbihjbSkgewogIGZ1bmN0aW9uIHAodikgeyByZXR1cm4gdiAmJiB7bGluZTogdlswXSwgY2g6IHZbMV19OyB9CiAgZm9yRWFjaChbe2E6IFswLCAwXSwgYjogWzAsIDVdLCBjOiAiIiwgZjogWzAsIDBdLCB0OiBbMiwgNV19LAogICAgICAgICAgIHthOiBbMCwgMV0sIGI6IFswLCAxMF0sIGM6ICIiLCBmOiBbMCwgMV0sIHQ6IFsyLCA1XX0sCiAgICAgICAgICAge2E6IFswLCA1XSwgYjogWzAsIDZdLCBjOiAieCIsIGY6IFswLCA2XSwgdDogWzIsIDVdfSwKICAgICAgICAgICB7YTogWzAsIDBdLCBiOiBbMSwgMF0sIGM6ICIiLCBmOiBbMCwgMF0sIHQ6IFsxLCA1XX0sCiAgICAgICAgICAge2E6IFswLCA2XSwgYjogWzIsIDRdLCBjOiAiIiwgZjogWzAsIDVdLCB0OiBbMCwgN119LAogICAgICAgICAgIHthOiBbMCwgNl0sIGI6IFsyLCA0XSwgYzogImFhIiwgZjogWzAsIDVdLCB0OiBbMCwgOV19LAogICAgICAgICAgIHthOiBbMSwgMl0sIGI6IFsxLCA4XSwgYzogIiIsIGY6IFswLCA1XSwgdDogWzIsIDVdfSwKICAgICAgICAgICB7YTogWzAsIDVdLCBiOiBbMiwgNV0sIGM6ICJ4eCIsIGY6IG51bGwsIHQ6IG51bGx9LAogICAgICAgICAgIHthOiBbMCwgMF0sIGI6IFsyLCAxMF0sIGM6ICJ4IiwgZjogbnVsbCwgdDogbnVsbH0sCiAgICAgICAgICAge2E6IFsxLCA1XSwgYjogWzIsIDVdLCBjOiAiIiwgZjogWzAsIDVdLCB0OiBbMSwgNV19LAogICAgICAgICAgIHthOiBbMiwgMF0sIGI6IFsyLCAzXSwgYzogIiIsIGY6IFswLCA1XSwgdDogWzIsIDJdfSwKICAgICAgICAgICB7YTogWzIsIDVdLCBiOiBbMywgMF0sIGM6ICJhXG5iIiwgZjogWzAsIDVdLCB0OiBbMiwgNV19LAogICAgICAgICAgIHthOiBbMiwgM10sIGI6IFszLCAwXSwgYzogIngiLCBmOiBbMCwgNV0sIHQ6IFsyLCAzXX0sCiAgICAgICAgICAge2E6IFsxLCAxXSwgYjogWzEsIDldLCBjOiAiMVxuMlxuMyIsIGY6IFswLCA1XSwgdDogWzQsIDVdfV0sIGZ1bmN0aW9uKHRlc3QpIHsKICAgIGNtLnNldFZhbHVlKCJhYWFhYWFhYWFhXG5iYmJiYmJiYmJiXG5jY2NjY2NjY2NjXG5kZGRkZGRkZFxuIik7CiAgICB2YXIgciA9IGNtLm1hcmtUZXh0KHtsaW5lOiAwLCBjaDogNX0sIHtsaW5lOiAyLCBjaDogNX0sICJmb28iKTsKICAgIGNtLnJlcGxhY2VSYW5nZSh0ZXN0LmMsIHAodGVzdC5hKSwgcCh0ZXN0LmIpKTsKICAgIHZhciBmID0gci5maW5kKCk7CiAgICBlcVBvcyhmLmZyb20sIHAodGVzdC5mKSk7IGVxUG9zKGYudG8sIHAodGVzdC50KSk7CiAgfSk7Cn0pOwoKdGVzdENNKCJib29rbWFyayIsIGZ1bmN0aW9uKGNtKSB7CiAgZnVuY3Rpb24gcCh2KSB7IHJldHVybiB2ICYmIHtsaW5lOiB2WzBdLCBjaDogdlsxXX07IH0KICBmb3JFYWNoKFt7YTogWzEsIDBdLCBiOiBbMSwgMV0sIGM6ICIiLCBkOiBbMSwgNF19LAogICAgICAgICAgIHthOiBbMSwgMV0sIGI6IFsxLCAxXSwgYzogInh4IiwgZDogWzEsIDddfSwKICAgICAgICAgICB7YTogWzEsIDRdLCBiOiBbMSwgNV0sIGM6ICJhYiIsIGQ6IFsxLCA2XX0sCiAgICAgICAgICAge2E6IFsxLCA0XSwgYjogWzEsIDZdLCBjOiAiIiwgZDogbnVsbH0sCiAgICAgICAgICAge2E6IFsxLCA1XSwgYjogWzEsIDZdLCBjOiAiYWJjIiwgZDogWzEsIDVdfSwKICAgICAgICAgICB7YTogWzEsIDZdLCBiOiBbMSwgOF0sIGM6ICIiLCBkOiBbMSwgNV19LAogICAgICAgICAgIHthOiBbMSwgNF0sIGI6IFsxLCA0XSwgYzogIlxuXG4iLCBkOiBbMywgMV19XSwgZnVuY3Rpb24odGVzdCkgewogICAgY20uc2V0VmFsdWUoIjEyMzQ1Njc4OTBcbjEyMzQ1Njc4OTBcbjEyMzQ1Njc4OTAiKTsKICAgIHZhciBiID0gY20uc2V0Qm9va21hcmsoe2xpbmU6IDEsIGNoOiA1fSk7CiAgICBjbS5yZXBsYWNlUmFuZ2UodGVzdC5jLCBwKHRlc3QuYSksIHAodGVzdC5iKSk7CiAgICBlcVBvcyhiLmZpbmQoKSwgcCh0ZXN0LmQpKTsKICB9KTsKfSk7CgovLyBTY2FmZm9sZGluZwoKZnVuY3Rpb24gaHRtbEVzY2FwZShzdHIpIHsKICByZXR1cm4gc3RyLnJlcGxhY2UoL1s8Jl0vZywgZnVuY3Rpb24oc3RyKSB7cmV0dXJuIHN0ciA9PSAiJiIgPyAiJmFtcDsiIDogIiZsdDsiO30pOwp9CmZ1bmN0aW9uIGZvckVhY2goYXJyLCBmKSB7CiAgZm9yICh2YXIgaSA9IDAsIGUgPSBhcnIubGVuZ3RoOyBpIDwgZTsgKytpKSBmKGFycltpXSk7Cn0KCmZ1bmN0aW9uIEZhaWx1cmUod2h5KSB7dGhpcy5tZXNzYWdlID0gd2h5O30KCmZ1bmN0aW9uIHRlc3QobmFtZSwgcnVuKSB7dGVzdHMucHVzaCh7bmFtZTogbmFtZSwgZnVuYzogcnVufSk7fQpmdW5jdGlvbiB0ZXN0Q00obmFtZSwgcnVuLCBvcHRzKSB7CiAgdGVzdChuYW1lLCBmdW5jdGlvbigpIHsKICAgIHZhciBwbGFjZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXN0Z3JvdW5kIiksIGNtID0gQ29kZU1pcnJvcihwbGFjZSwgb3B0cyk7CiAgICB0cnkge3J1bihjbSk7fQogICAgZmluYWxseSB7cGxhY2UucmVtb3ZlQ2hpbGQoY20uZ2V0V3JhcHBlckVsZW1lbnQoKSk7fQogIH0pOwp9CgpmdW5jdGlvbiBydW5UZXN0cygpIHsKICB2YXIgZmFpbHVyZXMgPSBbXSwgcnVuID0gMDsKICBmb3IgKHZhciBpID0gMDsgaSA8IHRlc3RzLmxlbmd0aDsgKytpKSB7CiAgICB2YXIgdGVzdCA9IHRlc3RzW2ldOwogICAgdHJ5IHt0ZXN0LmZ1bmMoKTt9CiAgICBjYXRjaChlKSB7CiAgICAgIGlmIChlIGluc3RhbmNlb2YgRmFpbHVyZSkKICAgICAgICBmYWlsdXJlcy5wdXNoKHt0eXBlOiAiZmFpbHVyZSIsIHRlc3Q6IHRlc3QubmFtZSwgdGV4dDogZS5tZXNzYWdlfSk7CiAgICAgIGVsc2UKICAgICAgICBmYWlsdXJlcy5wdXNoKHt0eXBlOiAiZXJyb3IiLCB0ZXN0OiB0ZXN0Lm5hbWUsIHRleHQ6IGUudG9TdHJpbmcoKX0pOwogICAgfQogICAgcnVuKys7CiAgfQogIHZhciBodG1sID0gW3J1biArICIgdGVzdHMgcnVuLiJdOwogIGlmIChmYWlsdXJlcy5sZW5ndGgpCiAgICBmb3JFYWNoKGZhaWx1cmVzLCBmdW5jdGlvbihmYWlsKSB7CiAgICAgIGh0bWwucHVzaChmYWlsLnRlc3QgKyAnOiA8c3BhbiBjbGFzcz0iJyArIGZhaWwudHlwZSArICciPicgKyBodG1sRXNjYXBlKGZhaWwudGV4dCkgKyAiPC9zcGFuPiIpOwogICAgfSk7CiAgZWxzZSBodG1sLnB1c2goJzxzcGFuIGNsYXNzPSJvayI+QWxsIHBhc3NlZC48L3NwYW4+Jyk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm91dHB1dCIpLmlubmVySFRNTCA9IGh0bWwuam9pbigiXG4iKTsKfQoKZnVuY3Rpb24gZXEoYSwgYiwgbXNnKSB7CiAgaWYgKGEgIT0gYikgdGhyb3cgbmV3IEZhaWx1cmUoYSArICIgIT0gIiArIGIgKyAobXNnID8gIiAoIiArIG1zZyArICIpIiA6ICIiKSk7Cn0KZnVuY3Rpb24gZXFQb3MoYSwgYiwgbXNnKSB7CiAgaWYgKGEgPT0gYikgcmV0dXJuOwogIGlmIChhID09IG51bGwgfHwgYiA9PSBudWxsKSB0aHJvdyBuZXcgRmFpbHVyZSgiY29tcGFyaW5nIHBvaW50IHRvIG51bGwiKTsKICBlcShhLmxpbmUsIGIubGluZSwgbXNnKTsKICBlcShhLmNoLCBiLmNoLCBtc2cpOwp9CmZ1bmN0aW9uIGlzKGEsIG1zZykgewogIGlmICghYSkgdGhyb3cgbmV3IEZhaWx1cmUoImFzc2VydGlvbiBmYWlsZWQiICsgKG1zZyA/ICIgKCIgKyBtc2cgKyAiKSIgOiAiIikpOwp9Cgp3aW5kb3cub25sb2FkID0gcnVuVGVzdHM7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/theme/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/theme/cobalt.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LmNtLXMtY29iYWx0IHsgYmFja2dyb3VuZDogIzAwMjI0MDsgY29sb3I6IHdoaXRlOyB9Ci5jbS1zLWNvYmFsdCBkaXYuQ29kZU1pcnJvci1zZWxlY3RlZCB7IGJhY2tncm91bmQ6ICNiMzY1MzkgIWltcG9ydGFudDsgfQouY20tcy1jb2JhbHQgLkNvZGVNaXJyb3ItZ3V0dGVyIHsgYmFja2dyb3VuZDogIzAwMjI0MDsgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2FhYTsgfQouY20tcy1jb2JhbHQgLkNvZGVNaXJyb3ItZ3V0dGVyLXRleHQgeyBjb2xvcjogI2QwZDBkMDsgfQouY20tcy1jb2JhbHQgLkNvZGVNaXJyb3ItY3Vyc29yIHsgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCB3aGl0ZSAhaW1wb3J0YW50OyB9CgouY20tcy1jb2JhbHQgc3Bhbi5jbS1jb21tZW50IHsgY29sb3I6ICMwOGY7IH0KLmNtLXMtY29iYWx0IHNwYW4uY20tYXRvbSB7IGNvbG9yOiAjODQ1ZGM0OyB9Ci5jbS1zLWNvYmFsdCBzcGFuLmNtLW51bWJlciwgLmNtLXMtY29iYWx0IHNwYW4uY20tYXR0cmlidXRlIHsgY29sb3I6ICNmZjgwZTE7IH0KLmNtLXMtY29iYWx0IHNwYW4uY20ta2V5d29yZCB7IGNvbG9yOiAjZmZlZTgwOyB9Ci5jbS1zLWNvYmFsdCBzcGFuLmNtLXN0cmluZyB7IGNvbG9yOiAjM2FkOTAwOyB9Ci5jbS1zLWNvYmFsdCBzcGFuLmNtLW1ldGEgeyBjb2xvcjogI2ZmOWQwMDsgfQouY20tcy1jb2JhbHQgc3Bhbi5jbS12YXJpYWJsZS0yLCAuY20tcy1jb2JhbHQgc3Bhbi5jbS10YWcgeyBjb2xvcjogIzllZmZmZjsgfQouY20tcy1jb2JhbHQgc3Bhbi5jbS12YXJpYWJsZS0zLCAuY20tcy1jb2JhbHQgc3Bhbi5jbS1kZWYgeyBjb2xvcjogd2hpdGU7IH0KLmNtLXMtY29iYWx0IHNwYW4uY20tZXJyb3IgeyBjb2xvcjogIzlkMWUxNTsgfQouY20tcy1jb2JhbHQgc3Bhbi5jbS1icmFja2V0IHsgY29sb3I6ICNkOGQ4ZDg7IH0KLmNtLXMtY29iYWx0IHNwYW4uY20tYnVpbHRpbiwgLmNtLXMtY29iYWx0IHNwYW4uY20tc3BlY2lhbCB7IGNvbG9yOiAjZmY5ZTU5OyB9Ci5jbS1zLWNvYmFsdCBzcGFuLmNtLWxpbmsgeyBjb2xvcjogIzg0NWRjNDsgfQo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/theme/eclipse.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LmNtLXMtZWNsaXBzZSBzcGFuLmNtLW1ldGEge2NvbG9yOiAjRkYxNzE3O30KLmNtLXMtZWNsaXBzZSBzcGFuLmNtLWtleXdvcmQgeyBmb250LXdlaWdodDogYm9sZDsgY29sb3I6ICM3RjAwNTU7IH0KLmNtLXMtZWNsaXBzZSBzcGFuLmNtLWF0b20ge2NvbG9yOiAjMjE5O30KLmNtLXMtZWNsaXBzZSBzcGFuLmNtLW51bWJlciB7Y29sb3I6ICMxNjQ7fQouY20tcy1lY2xpcHNlIHNwYW4uY20tZGVmIHtjb2xvcjogIzAwZjt9Ci5jbS1zLWVjbGlwc2Ugc3Bhbi5jbS12YXJpYWJsZSB7Y29sb3I6IGJsYWNrO30KLmNtLXMtZWNsaXBzZSBzcGFuLmNtLXZhcmlhYmxlLTIge2NvbG9yOiAjMDAwMEMwO30KLmNtLXMtZWNsaXBzZSBzcGFuLmNtLXZhcmlhYmxlLTMge2NvbG9yOiAjMDAwMEMwO30KLmNtLXMtZWNsaXBzZSBzcGFuLmNtLXByb3BlcnR5IHtjb2xvcjogYmxhY2s7fQouY20tcy1lY2xpcHNlIHNwYW4uY20tb3BlcmF0b3Ige2NvbG9yOiBibGFjazt9Ci5jbS1zLWVjbGlwc2Ugc3Bhbi5jbS1jb21tZW50IHtjb2xvcjogIzNGN0Y1Rjt9Ci5jbS1zLWVjbGlwc2Ugc3Bhbi5jbS1zdHJpbmcge2NvbG9yOiAjMkEwMEZGO30KLmNtLXMtZWNsaXBzZSBzcGFuLmNtLXN0cmluZy0yIHtjb2xvcjogI2Y1MDt9Ci5jbS1zLWVjbGlwc2Ugc3Bhbi5jbS1lcnJvciB7Y29sb3I6ICNmMDA7fQouY20tcy1lY2xpcHNlIHNwYW4uY20tcXVhbGlmaWVyIHtjb2xvcjogIzU1NTt9Ci5jbS1zLWVjbGlwc2Ugc3Bhbi5jbS1idWlsdGluIHtjb2xvcjogIzMwYTt9Ci5jbS1zLWVjbGlwc2Ugc3Bhbi5jbS1icmFja2V0IHtjb2xvcjogI2NjNzt9Ci5jbS1zLWVjbGlwc2Ugc3Bhbi5jbS10YWcge2NvbG9yOiAjMTcwO30KLmNtLXMtZWNsaXBzZSBzcGFuLmNtLWF0dHJpYnV0ZSB7Y29sb3I6ICMwMGM7fQouY20tcy1lY2xpcHNlIHNwYW4uY20tbGluayB7Y29sb3I6ICMyMTk7fQoKLmNtLXMtZWNsaXBzZSAuQ29kZU1pcnJvci1tYXRjaGluZ2JyYWNrZXQgewoJYm9yZGVyOjFweCBzb2xpZCBncmV5OwoJY29sb3I6YmxhY2sgIWltcG9ydGFudDs7Cn0K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/theme/elegant.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LmNtLXMtZWxlZ2FudCBzcGFuLmNtLW51bWJlciwgLmNtLXMtZWxlZ2FudCBzcGFuLmNtLXN0cmluZywgLmNtLXMtZWxlZ2FudCBzcGFuLmNtLWF0b20ge2NvbG9yOiAjNzYyO30KLmNtLXMtZWxlZ2FudCBzcGFuLmNtLWNvbW1lbnQge2NvbG9yOiAjMjYyO2ZvbnQtc3R5bGU6IGl0YWxpYzt9Ci5jbS1zLWVsZWdhbnQgc3Bhbi5jbS1tZXRhIHtjb2xvcjogIzU1NTtmb250LXN0eWxlOiBpdGFsaWM7fQouY20tcy1lbGVnYW50IHNwYW4uY20tdmFyaWFibGUge2NvbG9yOiBibGFjazt9Ci5jbS1zLWVsZWdhbnQgc3Bhbi5jbS12YXJpYWJsZS0yIHtjb2xvcjogI2IxMTt9Ci5jbS1zLWVsZWdhbnQgc3Bhbi5jbS1xdWFsaWZpZXIge2NvbG9yOiAjNTU1O30KLmNtLXMtZWxlZ2FudCBzcGFuLmNtLWtleXdvcmQge2NvbG9yOiAjNzMwO30KLmNtLXMtZWxlZ2FudCBzcGFuLmNtLWJ1aWx0aW4ge2NvbG9yOiAjMzBhO30KLmNtLXMtZWxlZ2FudCBzcGFuLmNtLWVycm9yIHtiYWNrZ3JvdW5kLWNvbG9yOiAjZmRkO30KLmNtLXMtZWxlZ2FudCBzcGFuLmNtLWxpbmsge2NvbG9yOiAjNzYyO30K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/theme/monokai.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyogQmFzZWQgb24gU3VibGltZSBUZXh0J3MgTW9ub2thaSB0aGVtZSAqLwoKLmNtLXMtbW9ub2thaSB7YmFja2dyb3VuZDogIzI3MjgyMjsgY29sb3I6ICNmOGY4ZjI7fQouY20tcy1tb25va2FpIGRpdi5Db2RlTWlycm9yLXNlbGVjdGVkIHtiYWNrZ3JvdW5kOiAjNDk0ODNFICFpbXBvcnRhbnQ7fQouY20tcy1tb25va2FpIC5Db2RlTWlycm9yLWd1dHRlciB7YmFja2dyb3VuZDogIzI3MjgyMjsgYm9yZGVyLXJpZ2h0OiAwcHg7fQouY20tcy1tb25va2FpIC5Db2RlTWlycm9yLWd1dHRlci10ZXh0IHtjb2xvcjogI2QwZDBkMDt9Ci5jbS1zLW1vbm9rYWkgLkNvZGVNaXJyb3ItY3Vyc29yIHtib3JkZXItbGVmdDogMXB4IHNvbGlkICNmOGY4ZjAgIWltcG9ydGFudDt9CgouY20tcy1tb25va2FpIHNwYW4uY20tY29tbWVudCB7Y29sb3I6ICM3NTcxNWU7fQouY20tcy1tb25va2FpIHNwYW4uY20tYXRvbSB7Y29sb3I6ICNhZTgxZmY7fQouY20tcy1tb25va2FpIHNwYW4uY20tbnVtYmVyIHtjb2xvcjogI2FlODFmZjt9CgouY20tcy1tb25va2FpIHNwYW4uY20tcHJvcGVydHksIC5jbS1zLW1vbm9rYWkgc3Bhbi5jbS1hdHRyaWJ1dGUge2NvbG9yOiAjYTZlMjJlO30KLmNtLXMtbW9ub2thaSBzcGFuLmNtLWtleXdvcmQge2NvbG9yOiAjZjkyNjcyO30KLmNtLXMtbW9ub2thaSBzcGFuLmNtLXN0cmluZyB7Y29sb3I6ICNlNmRiNzQ7fQoKLmNtLXMtbW9ub2thaSBzcGFuLmNtLXZhcmlhYmxlIHtjb2xvcjogI2E2ZTIyZTt9Ci5jbS1zLW1vbm9rYWkgc3Bhbi5jbS12YXJpYWJsZS0yIHtjb2xvcjogIzllZmZmZjt9Ci5jbS1zLW1vbm9rYWkgc3Bhbi5jbS1kZWYge2NvbG9yOiAjZmQ5NzFmO30KLmNtLXMtbW9ub2thaSBzcGFuLmNtLWVycm9yIHtiYWNrZ3JvdW5kOiAjZjkyNjcyOyBjb2xvcjogI2Y4ZjhmMDt9Ci5jbS1zLW1vbm9rYWkgc3Bhbi5jbS1icmFja2V0IHtjb2xvcjogI2Y4ZjhmMjt9Ci5jbS1zLW1vbm9rYWkgc3Bhbi5jbS10YWcge2NvbG9yOiAjZjkyNjcyO30KLmNtLXMtbW9ub2thaSBzcGFuLmNtLWxpbmsge2NvbG9yOiAjYWU4MWZmO30KCi5jbS1zLW1vbm9rYWkgLkNvZGVNaXJyb3ItbWF0Y2hpbmdicmFja2V0IHsKICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICBjb2xvcjogd2hpdGUgIWltcG9ydGFudDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/theme/neat.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LmNtLXMtbmVhdCBzcGFuLmNtLWNvbW1lbnQgeyBjb2xvcjogI2E4NjsgfQouY20tcy1uZWF0IHNwYW4uY20ta2V5d29yZCB7IGZvbnQtd2VpZ2h0OiBib2xkOyBjb2xvcjogYmx1ZTsgfQouY20tcy1uZWF0IHNwYW4uY20tc3RyaW5nIHsgY29sb3I6ICNhMjI7IH0KLmNtLXMtbmVhdCBzcGFuLmNtLWJ1aWx0aW4geyBmb250LXdlaWdodDogYm9sZDsgY29sb3I6ICMwNzc7IH0KLmNtLXMtbmVhdCBzcGFuLmNtLXNwZWNpYWwgeyBmb250LXdlaWdodDogYm9sZDsgY29sb3I6ICMwYWE7IH0KLmNtLXMtbmVhdCBzcGFuLmNtLXZhcmlhYmxlIHsgY29sb3I6IGJsYWNrOyB9Ci5jbS1zLW5lYXQgc3Bhbi5jbS1udW1iZXIsIC5jbS1zLW5lYXQgc3Bhbi5jbS1hdG9tIHsgY29sb3I6ICMzYTM7IH0KLmNtLXMtbmVhdCBzcGFuLmNtLW1ldGEge2NvbG9yOiAjNTU1O30KLmNtLXMtbmVhdCBzcGFuLmNtLWxpbmsgeyBjb2xvcjogIzNhMzsgfQo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/theme/night.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyogTG9vc2VseSBiYXNlZCBvbiB0aGUgTWlkbmlnaHQgVGV4dG1hdGUgdGhlbWUgKi8KCi5jbS1zLW5pZ2h0IHsgYmFja2dyb3VuZDogIzBhMDAxZjsgY29sb3I6ICNmOGY4Zjg7IH0KLmNtLXMtbmlnaHQgZGl2LkNvZGVNaXJyb3Itc2VsZWN0ZWQgeyBiYWNrZ3JvdW5kOiAjYThmICFpbXBvcnRhbnQ7IH0KLmNtLXMtbmlnaHQgLkNvZGVNaXJyb3ItZ3V0dGVyIHsgYmFja2dyb3VuZDogIzBhMDAxZjsgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2FhYTsgfQouY20tcy1uaWdodCAuQ29kZU1pcnJvci1ndXR0ZXItdGV4dCB7IGNvbG9yOiAjZjhmOGY4OyB9Ci5jbS1zLW5pZ2h0IC5Db2RlTWlycm9yLWN1cnNvciB7IGJvcmRlci1sZWZ0OiAxcHggc29saWQgd2hpdGUgIWltcG9ydGFudDsgfQoKLmNtLXMtbmlnaHQgc3Bhbi5jbS1jb21tZW50IHsgY29sb3I6ICM2OTAwYTE7IH0KLmNtLXMtbmlnaHQgc3Bhbi5jbS1hdG9tIHsgY29sb3I6ICM4NDVkYzQ7IH0KLmNtLXMtbmlnaHQgc3Bhbi5jbS1udW1iZXIsIC5jbS1zLW5pZ2h0IHNwYW4uY20tYXR0cmlidXRlIHsgY29sb3I6ICNmZmQ1MDA7IH0KLmNtLXMtbmlnaHQgc3Bhbi5jbS1rZXl3b3JkIHsgY29sb3I6ICM1OTllZmY7IH0KLmNtLXMtbmlnaHQgc3Bhbi5jbS1zdHJpbmcgeyBjb2xvcjogIzM3ZjE0YTsgfQouY20tcy1uaWdodCBzcGFuLmNtLW1ldGEgeyBjb2xvcjogIzc2NzhlMjsgfQouY20tcy1uaWdodCBzcGFuLmNtLXZhcmlhYmxlLTIsIC5jbS1zLW5pZ2h0IHNwYW4uY20tdGFnIHsgY29sb3I6ICM5OWIyZmY7IH0KLmNtLXMtbmlnaHQgc3Bhbi5jbS12YXJpYWJsZS0zLCAuY20tcy1uaWdodCBzcGFuLmNtLWRlZiB7IGNvbG9yOiB3aGl0ZTsgfQouY20tcy1uaWdodCBzcGFuLmNtLWVycm9yIHsgY29sb3I6ICM5ZDFlMTU7IH0KLmNtLXMtbmlnaHQgc3Bhbi5jbS1icmFja2V0IHsgY29sb3I6ICM4ZGE2Y2U7IH0KLmNtLXMtbmlnaHQgc3Bhbi5jbS1jb21tZW50IHsgY29sb3I6ICM2OTAwYTE7IH0KLmNtLXMtbmlnaHQgc3Bhbi5jbS1idWlsdGluLCAuY20tcy1uaWdodCBzcGFuLmNtLXNwZWNpYWwgeyBjb2xvcjogI2ZmOWU1OTsgfQouY20tcy1uaWdodCBzcGFuLmNtLWxpbmsgeyBjb2xvcjogIzg0NWRjNDsgfQo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/theme/rubyblue.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LmNtLXMtcnVieWJsdWUgeyBmb250OjEzcHgvMS40ZW0gVHJlYnVjaGV0LCBWZXJkYW5hLCBzYW5zLXNlcmlmOyB9CS8qIC0gY3VzdG9taXplZCBlZGl0b3IgZm9udCAtICovCgouY20tcy1ydWJ5Ymx1ZSB7IGJhY2tncm91bmQ6ICMxMTI0MzU7IGNvbG9yOiB3aGl0ZTsgfQouY20tcy1ydWJ5Ymx1ZSBkaXYuQ29kZU1pcnJvci1zZWxlY3RlZCB7IGJhY2tncm91bmQ6ICMwMDAwRkYgIWltcG9ydGFudDsgfQouY20tcy1ydWJ5Ymx1ZSAuQ29kZU1pcnJvci1ndXR0ZXIgeyBiYWNrZ3JvdW5kOiAjMUY0NjYxOyBib3JkZXItcmlnaHQ6IDdweCBzb2xpZCAjM0U3MDg3OyBtaW4td2lkdGg6Mi41ZW07IH0KLmNtLXMtcnVieWJsdWUgLkNvZGVNaXJyb3ItZ3V0dGVyLXRleHQgeyBjb2xvcjogd2hpdGU7IH0KLmNtLXMtcnVieWJsdWUgLkNvZGVNaXJyb3ItY3Vyc29yIHsgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCB3aGl0ZSAhaW1wb3J0YW50OyB9CgouY20tcy1ydWJ5Ymx1ZSBzcGFuLmNtLWNvbW1lbnQgeyBjb2xvcjogIzk5OTsgZm9udC1zdHlsZTppdGFsaWM7IH0KLmNtLXMtcnVieWJsdWUgc3Bhbi5jbS1hdG9tIHsgY29sb3I6ICNGNEMyMEI7IH0KLmNtLXMtcnVieWJsdWUgc3Bhbi5jbS1udW1iZXIsIC5jbS1zLXJ1YnlibHVlIHNwYW4uY20tYXR0cmlidXRlIHsgY29sb3I6ICM4MkM2RTA7IH0KLmNtLXMtcnVieWJsdWUgc3Bhbi5jbS1rZXl3b3JkIHsgY29sb3I6ICNGMEY7IH0KLmNtLXMtcnVieWJsdWUgc3Bhbi5jbS1zdHJpbmcgeyBjb2xvcjogI0YwODA0NzsgfQouY20tcy1ydWJ5Ymx1ZSBzcGFuLmNtLW1ldGEgeyBjb2xvcjogI0YwRjsgfQouY20tcy1ydWJ5Ymx1ZSBzcGFuLmNtLXZhcmlhYmxlLTIsIC5jbS1zLXJ1YnlibHVlIHNwYW4uY20tdGFnIHsgY29sb3I6ICM3QkQ4Mjc7IH0KLmNtLXMtcnVieWJsdWUgc3Bhbi5jbS12YXJpYWJsZS0zLCAuY20tcy1ydWJ5Ymx1ZSBzcGFuLmNtLWRlZiB7IGNvbG9yOiB3aGl0ZTsgfQouY20tcy1ydWJ5Ymx1ZSBzcGFuLmNtLWVycm9yIHsgY29sb3I6ICNBRjIwMTg7IH0KLmNtLXMtcnVieWJsdWUgc3Bhbi5jbS1icmFja2V0IHsgY29sb3I6ICNGMEY7IH0KLmNtLXMtcnVieWJsdWUgc3Bhbi5jbS1saW5rIHsgY29sb3I6ICNGNEMyMEI7IH0KLmNtLXMtcnVieWJsdWUgc3Bhbi5Db2RlTWlycm9yLW1hdGNoaW5nYnJhY2tldCB7IGNvbG9yOiNGMEYgIWltcG9ydGFudDsgfQouY20tcy1ydWJ5Ymx1ZSBzcGFuLmNtLWJ1aWx0aW4sIC5jbS1zLXJ1YnlibHVlIHNwYW4uY20tc3BlY2lhbCB7IGNvbG9yOiAjRkY5RDAwOyB9Cg==]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbImZyaWVuZGx5bmFtZSJdPSJDb2RlTWlycm9yIHN5bnRheGhpZ2hsaWdodGluZyBlZGl0b3IiOwoKJGxhbmdbInBvc3RpbnN0YWxsIl09IlRoZSBDb2RlTWlycm9yIG1vZHVsZSB3YXMgc3VjZXNzZnVsbHkgaW5zdGFsbGVkIjsKJGxhbmdbIm5lZWRwZXJtaXNzaW9uIl09IidZb3UgbmVlZCB0aGUgJyVzJyBwZXJtaXNzaW9uIHRvIHBlcmZvcm0gdGhhdCBmdW5jdGlvbi4iOwoKJGxhbmdbInNldHRpbmdzdGFiIl09IlNldHRpbmdzIjsKJGxhbmdbInNhdmVzZXR0aW5ncyJdPSJTYXZlIHNldHRpbmdzIjsKJGxhbmdbInNldHRpbmdzc2F2ZWQiXT0iU2V0dGluZ3Mgc2F2ZWQiOwoKJGxhbmdbImh0bWx0ZXN0Il09IkhUTUwgc3ludGF4IHRlc3QiOwokbGFuZ1siY3NzdGVzdCJdPSJDU1Mgc3ludGF4IHRlc3QiOwokbGFuZ1sicGhwdGVzdCJdPSJQSFAgc3ludGF4IHRlc3QiOwokbGFuZ1sianN0ZXN0Il09IkphdmFTY3JpcHQgc3ludGF4IHRlc3QiOwovLyRsYW5nWyJleGFtcGxlc3ludGF4Il09IlN5bnRheCB0byB0ZXN0IHdpdGgiOwovLyRsYW5nWyJjaGFuZ2UiXT0iQ2hhbmdlLi4uIjsKCiRsYW5nWyJzaG93bGluZW51bWJlcnMiXT0iU2hvdyBsaW5lbnVtYmVycyI7CiRsYW5nWyJhbGxvd2Z1bGxzY3JlZW4iXT0iQWxsb3cgZnVsbHNjcmVlbiBtb2RlIChGMTEpIjsKCi8vJGxhbmdbInRleHR3cmFwcGluZyJdPSJXcmFwIGxvbmcgbGluZXMiOwokbGFuZ1siYXV0b21hdGNocGFyZW5zIl09IkF1dG9tYXRjaCBwYXJlbnRoZXNpcyI7CiRsYW5nWyJ0YWJoYW5kbGluZyJdPSJIb3cgdG8gaGFuZGxlIHByZXNzaW5nIHRoZSBUQUIga2V5IjsKJGxhbmdbInRhYmRlZmF1bHQiXT0iTGV0IHRoZSBicm93c2VyIGRlY2lkZSI7CiRsYW5nWyJ0YWJpbmRlbnQiXT0iRG8gaW5kZW50YXRpb24iOwokbGFuZ1sidGFic3BhY2VzIl09Ikluc2VydCBzcGFjZXMiOwokbGFuZ1sidGFic2hpZnQiXT0iU2hpZnQgdG8gdGhlIHJpZ2h0LCBzaGlmdC1UQUIgc2hpZnRzIHRvIGxlZnQiOwokbGFuZ1sidGFic2l6ZSJdPSJTaXplIG9mIHRhYnMiOwoKJGxhbmdbImNzc2FkZGl0aW9ucyJdPSJBZGRpdGlvbnMgdG8gdGhlIENvZGVNaXJyb3ItY3NzLiI7CgokbGFuZ1sidGhlbWUiXT0iVGhlbWUiOwoKCgokbGFuZ1siaGVscCJdPSI8c3Ryb25nPldoYXQgZG9lcyB0aGlzIG1vZHVsZSBkbz88L3N0cm9uZz4KPGJyLz4KVGhlIENvZGVNaXJyb3IgbW9kdWxlIGFsbG93cyB5b3UgdG8gZWRpdCBjb250ZW50LCB0ZW1wbGF0ZXMgYW5kIHN0eWxlc2hlZXRzIHVzaW5nIGEgc3ludGF4aGlnaGxpZ2h0aW5nIGVkaXRvciBpbnNpZGUgeW91ciBicm93c2VyLgpJdCBjYW4gYm90aCByZXBsYWNlIGEgd3lzaXd5Zy1tb2R1bGUsIGFuZCBhY3Qgc3RhbmRhbG9uZSBmb3IgdGVtcGxhdGUvc3R5bGVzaGVldCBlZGl0aW5nIChvbmx5IHN1cHBvcnRlZCBpbiBDTVNtcyAxLjErKQo8YnIvPjxici8+CjxzdHJvbmc+SG93IGRvIEkgdXNlIHRoaXMgbW9kdWxlPzwvc3Ryb25nPgpZb3Ugc2ltcGx5IGluc3RhbGwgaXQsIGFuZCBjaG9vc2UgaXQgaW4geW91ciBhZG1pbiB1c2VyIHByZWZlcmVuY2VzLiBOb3RlLCB0aGF0IGlmIHlvdSB1c2UgQ01TbXMgMS4xIG9yIGFib3ZlIHlvdSBjYW4Kc2VsZWN0IENvZGVNaXJyb3IgYm90aCBhcyBhIFdZU0lXWUcgYW5kIGFzIGEgc3ludGF4IGhpZ2hsaWdodGluZyBlZGl0b3IuIjsKPz4K]]></data>
	</file>
	<file>
	  <filename>/lang/ext/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/ext/da_DK.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0NvZGVNaXJyb3IgLSBlbiBzeW50YWtzLWZyZW1oJmFlbGlnO3ZlbmRlIGVkaXRvcic7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ0NvZGVNaXJyb3IgbW9kdWxldCBibGV2IGtvcnJla3QgaW5zdGFsbGVyZXQnOwokbGFuZ1snbmVlZHBlcm1pc3Npb24nXSA9ICcmIzAzOTtZb3UgbmVlZCB0aGUgJiMwMzk7JXMmIzAzOTsgcGVybWlzc2lvbiB0byBwZXJmb3JtIHRoYXQgZnVuY3Rpb24uJzsKJGxhbmdbJ3NldHRpbmdzdGFiJ10gPSAnSW5kc3RpbGxpbmdlcic7CiRsYW5nWydzYXZlc2V0dGluZ3MnXSA9ICdHZW0gaW5kc3RpbGxpbmdlcic7CiRsYW5nWydzZXR0aW5nc3NhdmVkJ10gPSAnSW5kc3RpbGxpbmdlcm5lIGJsZXYgZ2VtdCc7CiRsYW5nWydodG1sdGVzdCddID0gJ0hUTUwgc3ludGFrcyB0ZXN0JzsKJGxhbmdbJ2Nzc3Rlc3QnXSA9ICdDU1Mgc3ludGFrcyB0ZXN0JzsKJGxhbmdbJ3BocHRlc3QnXSA9ICdQSFAgc3ludGFrcyB0ZXN0JzsKJGxhbmdbJ2pzdGVzdCddID0gJ0phdmFTY3JpcHQgc3ludGFrcyB0ZXN0JzsKJGxhbmdbJ2V4YW1wbGVzeW50YXgnXSA9ICdTeW50YWtzIGRlciBza2FsIHRlc3RlcyBtZWQnOwokbGFuZ1snY2hhbmdlJ10gPSAnU2tpZnQuLi4nOwokbGFuZ1snc2hvd2xpbmVudW1iZXJzJ10gPSAnVmlzIGxpbmllbnVtcmUnOwokbGFuZ1sndGV4dHdyYXBwaW5nJ10gPSAnT21icnlkIGxhbmdlIGxpbmllcic7CiRsYW5nWydhdXRvbWF0Y2hwYXJlbnMnXSA9ICdWaXMgbWF0Y2hlbmRlIHBhcmVudGVzZXInOwokbGFuZ1sndGFiaGFuZGxpbmcnXSA9ICdIb3cgdG8gaGFuZGxlIHByZXNzaW5nIHRoZSBUQUIga2V5JzsKJGxhbmdbJ3RhYmRlZmF1bHQnXSA9ICdMZXQgdGhlIGJyb3dzZXIgZGVjaWRlJzsKJGxhbmdbJ3RhYmluZGVudCddID0gJ0RvIGluZGVudGF0aW9uJzsKJGxhbmdbJ3RhYnNwYWNlcyddID0gJ0luc2VydCBzcGFjZXMnOwokbGFuZ1sndGFic2hpZnQnXSA9ICdTaGlmdCB0byB0aGUgcmlnaHQsIHNoaWZ0LVRBQiBzaGlmdHMgdG8gbGVmdCc7CiRsYW5nWydjc3NhZGRpdGlvbnMnXSA9ICdUaWxmJm9zbGFzaDtqZWxzZXIgdGlsIENvZGVNaXJyb3ItY3NzLic7CiRsYW5nWydoZWxwJ10gPSAnPHN0cm9uZz5IdmFkIGcmb3NsYXNoO3IgZGV0dGUgbW9kdWw/PC9zdHJvbmc+DQo8YnIvPg0KQ29kZU1pcnJvci1tb2R1bGVzIGdpdmVyIGRpZyBtdWxpZ2hlZCBmb3IgYXQgcmVkaWdlcmUgaW5kaG9sZCwgc2thYmVsb25lciBvZyBzdHlsZXNoZWV0cyB2ZWQgaGomYWVsaWc7bHAgYWYgc3ludGFrcy1mcmVtaCZhZWxpZzt2ZW5kZSByZWRpZ2VyaW5nIGkgZGluIGJyb3dzZXIuDQo8YnIvPjxici8+DQo8c3Ryb25nPkh2b3JkYW4gYnJ1Z2VyIGplZyBkZXR0ZSBtb2R1bD88L3N0cm9uZz4NCkR1IGluc3RhbGxlcmVyIGRldCBvZyB2JmFlbGlnO2xnZXIgZGV0IGkgZGluZSBicnVnZXIgaW5kc3RpbGxpbmdlciBmb3IgYWRtaW5zaXRyYXRpb25lbi4gQmVtJmFlbGlnO3JrIGF0IGR1IGthbiB2JmFlbGlnO2xnZSBhdCBiZW55dHRlIGRldCBiJmFyaW5nO2RlIHNvbSBzeW50YWtzIGZyZW1oJmFlbGlnO3ZlciBvZyBXWVNJV1lHLic7CiRsYW5nWydxY2EnXSA9ICcxMjI5NjAxNzkwLTg1MjQzMTk3LTQzMjYwNzEzJzsKJGxhbmdbJ3V0bWEnXSA9ICcxNTY4NjEzNTMuMzg5Njg0Mzk0LjEzMDExNDIxNDAuMTMwMTI1NDY5Ny4xMzAxNDM1MjU2LjMnOwokbGFuZ1sndXRteiddID0gJzE1Njg2MTM1My4xMzAxMTQyMTQwLjEuMS51dG1jc3I9KGRpcmVjdCl8dXRtY2NuPShkaXJlY3QpfHV0bWNtZD0obm9uZSknOwokbGFuZ1sndXRtYiddID0gJzE1Njg2MTM1Myc7CiRsYW5nWyd1dG1jJ10gPSAnMTU2ODYxMzUzJzsKPz4=]]></data>
	</file>
	<file>
	  <filename>/lang/ext/de_DE.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0NvZGVNaXJyb3IgLSBFZGl0b3IgbWl0IFN5bnRheGhlcnZvcmhlYnVuZyc7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ0RhcyBDb2RlTWlycm9yLU1vZHVsIHd1cmRlIGluc3RhbGxpZXJ0Lic7CiRsYW5nWyduZWVkcGVybWlzc2lvbiddID0gJ1NpZSBiZW4mb3VtbDt0aWdlbiBkaWUgJiMwMzk7JXMmIzAzOTstQmVyZWNodGlndW5nLCB1bSBkaWVzZSBGdW5rdGlvbiBhdXN6dWYmdXVtbDtocmVuLic7CiRsYW5nWydzZXR0aW5nc3RhYiddID0gJ0VpbnN0ZWxsdW5nZW4nOwokbGFuZ1snc2F2ZXNldHRpbmdzJ10gPSAnRWluc3RlbGx1bmdlbiBzcGVpY2hlcm4nOwokbGFuZ1snc2V0dGluZ3NzYXZlZCddID0gJ0VpbnN0ZWxsdW5nZW4gZ2VzcGVpY2hlcnQnOwokbGFuZ1snaHRtbHRlc3QnXSA9ICdIVE1MLVN5bnRheC1UZXN0JzsKJGxhbmdbJ2Nzc3Rlc3QnXSA9ICdDU1MtU3ludGF4LVRlc3QnOwokbGFuZ1sncGhwdGVzdCddID0gJ1BIUC1TeW50YXgtVGVzdCc7CiRsYW5nWydqc3Rlc3QnXSA9ICdKYXZhU2NyaXB0LVN5bnRheC1UZXN0JzsKJGxhbmdbJ3Nob3dsaW5lbnVtYmVycyddID0gJ1plaWxlbm51bW1lcm4gYW56ZWlnZW4nOwokbGFuZ1snYWxsb3dmdWxsc2NyZWVuJ10gPSAnVm9sbGJpbGRtb2R1cyBlcmxhdWJlbiAoRjExKSc7CiRsYW5nWydhdXRvbWF0Y2hwYXJlbnMnXSA9ICdBdXRvbWF0aXNjaGUgS2xhbW1lci1Fcmtlbm51bmcnOwokbGFuZ1sndGFiaGFuZGxpbmcnXSA9ICdXYXMgc29sbCBiZWltIERyJnV1bWw7Y2tlbiBkZXIgVEFCLVRhc3RlIHBhc3NpZXJlbic7CiRsYW5nWyd0YWJkZWZhdWx0J10gPSAnQnJvd3NlciBlbnRzY2hlaWRlbiBsYXNzZW4nOwokbGFuZ1sndGFiaW5kZW50J10gPSAnRWluciZ1dW1sO2NrZW4nOwokbGFuZ1sndGFic3BhY2VzJ10gPSAnTGVlcnplaWNoZW4gZWluZiZ1dW1sO2dlbic7CiRsYW5nWyd0YWJzaGlmdCddID0gJ1NoaWZ0IG5hY2ggcmVjaHRzLCBTaGlmdC1UQUIgdmVyc2NoaWVidCBzaWNoIG5hY2ggbGlua3MnOwokbGFuZ1sndGFic2l6ZSddID0gJ0dyJm91bWw7JnN6bGlnO2UgZGVyIFJlZ2lzdGVya2FydGVuJzsKJGxhbmdbJ2Nzc2FkZGl0aW9ucyddID0gJ1p1cyZhdW1sO3R6ZSB6dXIgQ29kZU1pcnJvci1DU1MuJzsKJGxhbmdbJ3RoZW1lJ10gPSAnVGhlbWUgJzsKJGxhbmdbJ2hlbHAnXSA9ICc8aDM+V2FzIG1hY2h0IGRpZXNlcyBNb2R1bD88L2gzPg0KPHA+RGFzIENvZGVNaXJyb3ItTW9kdWwgaXN0IGVpbiBFZGl0b3IgbWl0IFN5bnRheGhlcnZvcmhlYnVuZywgbWl0IGRlbSBTaWUgZGllIEluaGFsdGUsIGRpZSBUZW1wbGF0ZXMgdW5kIGRpZSBTdHlsZXNoZWV0cyBiZWFyYmVpdGVuIGsmb3VtbDtubmVuLiBEYXMgTW9kdWwga2FubiBzb3dvaGwgZGllIFdZU0lXWUctRWRpdG9yZW4gZXJzZXR6ZW4gYWxzIGF1Y2ggc2VwYXJhdCB6dW0gQmVhcmJlaXRlbiB2b24gVGVtcGxhdGVzIHVuZCBTdHlsZXNoZWV0cyB2ZXJ3ZW5kZXQgd2VyZGVuICh1bnRlcnN0JnV1bWw7dHp0IGFiIENNU01TLVZlcnNpb24gMS4xKS48L3A+DQo8aDM+V2llIHdpcmQgZXMgZWluZ2VzZXR6dD88L2gzPg0KPHA+SW5zdGFsbGllcmVuIFNpZSBkYXMgTW9kdWwgdW5kIGFrdGl2aWVyZW4gU2llIGVzIGFuc2NobGllJnN6bGlnO2VuZCBpbiBkZW4gYmVudXR6ZXJzcGV6aWZpc2NoZW4gRWluc3RlbGx1bmdlbi48L3A+DQo8cD5CZWFjaHRlbiBTaWUsIGRhc3MgU2llIGFiIENNU01TLVZlcnNpb24gMS4xIHVuZCBoJm91bWw7aGVyIENvZGVNaXJyb3Igc293b2hsIGFscyBXWVNJV1lHLUVkaXRvciBhbHMgYXVjaCBhbHMgRWRpdG9yIG1pdCBTeW50YXhoZXJ2b3JoZWJ1bmcgYXVzdyZhdW1sO2hsZW4gayZvdW1sO25uZW4uPC9wPic7CiRsYW5nWyd1dG1hJ10gPSAnMTU2ODYxMzUzLjEyNDQyMzIzODEuMTMyNjgzMjc5NS4xMzI2ODMyNzk1LjEzMjY4MzI3OTUuMSc7CiRsYW5nWyd1dG16J10gPSAnMTU2ODYxMzUzLjEzMjY4MzI3OTUuMS4xLnV0bWNjbj0oZGlyZWN0KXx1dG1jc3I9KGRpcmVjdCl8dXRtY21kPShub25lKSc7CiRsYW5nWyd1dG1jJ10gPSAnMTU2ODYxMzUzJzsKJGxhbmdbJ3V0bWInXSA9ICcxNTY4NjEzNTMnOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lang/ext/es_ES.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0VkaXRvciBkZSByZXNhbHRhZG8gZGUgc2ludGF4aXMgQ29kZU1pcnJvcic7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ0VsIG0mYW1wO29hY3V0ZTtkdWxvIENvZGVNaXJyb3IgZnVlIHNhdGlzZmFjdG9yaWFtZW50ZSBpbnN0YWxhZG8nOwokbGFuZ1snbmVlZHBlcm1pc3Npb24nXSA9ICcmIzAzOTtTZSBuZWNlc2l0YSBlbCBwZXJtaXNvIGRlICYjMDM5OyVzJiMwMzk7IHBhcmEgcmVhbGl6YXIgZXN0YSBmdW5jaSZhbXA7b2FjdXRlO24uJzsKJGxhbmdbJ3NldHRpbmdzdGFiJ10gPSAnQWp1c3Rlcyc7CiRsYW5nWydzYXZlc2V0dGluZ3MnXSA9ICdTYWx2YXIgYWp1c3Rlcyc7CiRsYW5nWydzZXR0aW5nc3NhdmVkJ10gPSAnQWp1c3RlcyBndWFyZGFkb3MnOwokbGFuZ1snaHRtbHRlc3QnXSA9ICdQcnVlYmEgZGUgc2ludGF4aXMgSFRNTCc7CiRsYW5nWydjc3N0ZXN0J10gPSAnUHJ1ZWJhIGRlIHNpbnRheGlzIENTUyc7CiRsYW5nWydwaHB0ZXN0J10gPSAnUHJ1ZWJhIGRlIHNpbnRheGlzIFBIUCc7CiRsYW5nWydleGFtcGxlc3ludGF4J10gPSAnU3ludGF4aXMgdXNhZGEgcGFyYSBwcm9iYXInOwokbGFuZ1snY2hhbmdlJ10gPSAnQ2FtYmlhci4uLic7CiRsYW5nWydzaG93bGluZW51bWJlcnMnXSA9ICdNb3N0YXIgZWwgbiZhbXA7dWFjdXRlO21lcm8gZGUgbCZhbXA7aWFjdXRlO25lYXMnOwokbGFuZ1sndGV4dHdyYXBwaW5nJ10gPSAnQXV0by1hanVzdGFyIGxpbmVhcyBsYXJnYXMnOwokbGFuZ1snaGVscCddID0gJzxzdHJvbmc+UXUmYW1wO2VhY3V0ZTsgaGFjZSBlc3RlIG0mYW1wO29hY3V0ZTtkdWxvPzwvc3Ryb25nPg0KPGJyLz4NCkVsIG0mYW1wO29hY3V0ZTtkdWxvIENvZGVNaXJyb3IgbGUgcGVybWl0ZSBlZGl0YXIgY29udGVuaWRvLCBwbGFudGlsbGFzIHkgaG9qYXMgZGUgZXN0aWxvIHVzYW5kbyB1biBlZGl0b3IgZGUgcmVzYWx0YWRvIGRlIHNpbnRheGlzIGRlbnRybyBkZSBzdSBuYXZlZ2Fkb3IuDQpFc3RlIHRhbWJpdSZhbXA7ZWFjdXRlO24gcHVlZGUgIHJlZW1wbGF6YXIgZWwgbSZhbXA7b2FjdXRlO2R1bG8gZGUgd3lzaXd5ZywgeSBhY3R1YXIgc29sbyBwYXJhIGVkaWNpJmFtcDtvYWN1dGU7biBkZSBwbGFudGlsbGFzL2hvamFzIGRlIGVzdGlsbyB0ZW1wbGF0ZS9zdHlsZXNoZWV0ICAoc29sbyBzb3BvcnRhZG8gZW4gQ01TbXMgMS4xKykNCjxici8+PGJyLz4NCjxzdHJvbmc+QyZhbXA7b2FjdXRlO21vIHVzbyBlc3RlIG0mYW1wO29hY3V0ZTtkdWxvPzwvc3Ryb25nPg0KVXN0ZWQgc2ltcGxlbWVudGUgbG8gaW5zdGFsYSwgeSBsbyBzZWxlY2Npb25hIGVuIGxhcyBwcmVmZXJlY2lhcyBkZSBsYSBhZG1pbmlzdHJhY2kmYW1wO29hY3V0ZTtuLiBOb3RlIHF1ZSwgc2kgdXN0ZWQgdXNhIENNU21zIDEuMSBvIHN1cGVyaW9yIGEgZXN0ZSB1c3RlZCBwdWVkZSBzZWxlY2Npb25hciBDb2RlTWlycm9yIGp1bnRvIGNvbiBXWVNJV1lHIHBhcmEgZWwgcmVzYWx0YWRvIGRlIHNpbnRheGlzLic7CiRsYW5nWydxY2EnXSA9ICdQMC0yMDk2MDU0MzcwLTEyNTk4MDM2MTU5MzknOwokbGFuZ1sndXRtYSddID0gJzE1Njg2MTM1My4yMzg2MDY4NTQuMTI1OTgwNDM2OC4xMjY3NjUyNDU5LjEyNjc2NTk3NzMuNTcnOwokbGFuZ1sndXRteiddID0gJzE1Njg2MTM1My4xMjY3NjUyNDU5LjU2LjI4LnV0bWNjbj0ocmVmZXJyYWwpfHV0bWNzcj1mb3J1bS5jbXNtYWRlc2ltcGxlLm9yZ3x1dG1jY3Q9L2luZGV4LnBocC90b3BpYywxOTkyOS4wLmh0bWx8dXRtY21kPXJlZmVycmFsJzsKJGxhbmdbJ3V0bWMnXSA9ICcxNTY4NjEzNTMnOwokbGFuZ1sndXRtYiddID0gJzE1Njg2MTM1Myc7Cj8+]]></data>
	</file>
	<file>
	  <filename>/lang/ext/fr_FR.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0VkaXRldXIgZGUgc3ludGF4ZSBjb2xvciZlYWN1dGU7IENvZGVNaXJyb3InOwokbGFuZ1sncG9zdGluc3RhbGwnXSA9ICdMZSBtb2R1bGUgQ29kZU1pcnJvciBhICZlYWN1dGU7dCZlYWN1dGU7IGluc3RhbGwmZWFjdXRlOyBhdmVjIHN1Y2MmZWdyYXZlO3MnOwokbGFuZ1snbmVlZHBlcm1pc3Npb24nXSA9ICcmIzAzOTtWb3VzIGF2ZXogYmVzb2luIGRlIGwmIzAzOTthdXRvcmlzYXRpb24gJiMwMzk7JXMmIzAzOTsgIHBvdXIgY2V0dGUgZm9uY3Rpb24nOwokbGFuZ1snc2V0dGluZ3N0YWInXSA9ICdQYXJhbSZlZ3JhdmU7dHJlcyc7CiRsYW5nWydzYXZlc2V0dGluZ3MnXSA9ICdTYXV2ZWdhcmRlciBsZXMgcGFyYW0mZWdyYXZlO3RyZXMnOwokbGFuZ1snc2V0dGluZ3NzYXZlZCddID0gJ1BhcmFtJmVncmF2ZTt0cmVzIHNhdXZlZ2FyZCZlYWN1dGU7cyc7CiRsYW5nWydodG1sdGVzdCddID0gJ1Rlc3QgZGUgc3ludGF4ZSBIVE1MICc7CiRsYW5nWydjc3N0ZXN0J10gPSAnVGVzdCBkZSBzeW50YXhlIENTUyAnOwokbGFuZ1sncGhwdGVzdCddID0gJ1Rlc3QgZGUgc3ludGF4ZSBQSFAnOwokbGFuZ1snanN0ZXN0J10gPSAnVGVzdCBkZSBzeW50YXhlIEphdmFTY3JpcHQnOwokbGFuZ1snc2hvd2xpbmVudW1iZXJzJ10gPSAnQWZmaWNoZXIgbGUgbm9tYnJlIGRlIGxpZ25lcyc7CiRsYW5nWydhbGxvd2Z1bGxzY3JlZW4nXSA9ICdBdXRvcmlzZXIgbGUgbW9kZSBwbGVpbiAmZWFjdXRlO2NyYW4gKEYxMSknOwokbGFuZ1snYXV0b21hdGNocGFyZW5zJ10gPSAnQWZmaWNoZXIgbGVzIGNvcnJlc3BvbmRhbmNlcyBkZSBwYXJlbnRoJmVncmF2ZTtzZXMnOwokbGFuZ1sndGFiaGFuZGxpbmcnXSA9ICdDb21tZW50IGcmZWFjdXRlO3JlciBsZSBjbGljIHN1ciBsYSB0b3VjaGUgVEFCJzsKJGxhbmdbJ3RhYmRlZmF1bHQnXSA9ICdMYWlzc2VyIGxlIG5hdmlnYXRldXIgZCZlYWN1dGU7Y2lkZXInOwokbGFuZ1sndGFiaW5kZW50J10gPSAnSW5kZW50ZXInOwokbGFuZ1sndGFic3BhY2VzJ10gPSAnSW5zJmVhY3V0ZTtyZXIgZGVzIGVzcGFjZXMnOwokbGFuZ1sndGFic2hpZnQnXSA9ICdTaGlmdCB2ZXJzIGxhIGRyb2l0ZSwgc2hpZnQtVEFCIHNoaWZ0cyB2ZXJzIGxhIGdhdWNoZSc7CiRsYW5nWyd0YWJzaXplJ10gPSAnVGFpbGxlIGRlcyBvbmdsZXRzJzsKJGxhbmdbJ2Nzc2FkZGl0aW9ucyddID0gJ0Fqb3V0cyAmYWdyYXZlOyBsYSBmZXVpbGxlIGRlIHN0eWxlIGRlIENvZGVNaXJyb3IuJzsKJGxhbmdbJ3RoZW1lJ10gPSAnVGgmZWdyYXZlO21lJzsKJGxhbmdbJ2hlbHAnXSA9ICc8c3Ryb25nPlF1ZSBmYWl0IGNlIG1vZHVsZSZuYnNwOz88L3N0cm9uZz4NCjxici8+DQpMZSBtb2R1bGUgQ29kZU1pcnJvciB2b3VzIHBlcm1ldCBkZSBtb2RpZmllciBsZSBjb250ZW51LCBsZXMgZ2FiYXJpdHMgZXQgbGVzIGZldWlsbGVzIGRlIHN0eWxlIGVuIHV0aWxpc2FudCB1biAmZWFjdXRlO2RpdGV1ciBkZSBzeW50YXhlIGNvbG9yJmVhY3V0ZTsgbCYjMDM5O2ludCZlYWN1dGU7cmlldXIgZGUgdm90cmUgbmF2aWdhdGV1ci4gDQpJbCBwZXV0IGF1c3NpIGJpZW4gcmVtcGxhY2VyIGwmIzAzOTsmZWFjdXRlO2RpdGV1ciBXWVNJV1lHLCBldCBwZXJtZXR0cmUgZGUgdmlzdWFsaXNlci0mZWFjdXRlO2RpdGVyIGxlcyBnYWJhcml0cywgZmV1aWxsZXMgZGUgc3R5bGUuIChVbmlxdWVtZW50IHBvdXIgdmVyc2lvbiBDTVNNUyAxLjEgb3UgcGx1cykNCjxici8+PGJyLz4NCjxzdHJvbmc+Q29tbWVudCBsJiMwMzk7dXRpbGlzZXImbmJzcDs/PC9zdHJvbmc+PGJyLz4NCklsIHZvdXMgc3VmZml0IGRlIGwmIzAzOTtpbnN0YWxsZXIsIGV0IGRhbnMgJnF1b3Q7TWVzIHByJmVhY3V0ZTtmJmVhY3V0ZTtyZW5jZXMgLyBQciZlYWN1dGU7ZiZlYWN1dGU7cmVuY2VzIGRlIGwmIzAzOTt1dGlsaXNhdGV1ciZxdW90OyBjaG9pc2lyIGF2ZWMgbGUgbWVudSBkJmVhY3V0ZTtyb3VsYW50IENvZGVNaXJyb3IgZGFucyAmcXVvdDtTJmVhY3V0ZTtsZWN0aW9ubmVyIGxhIHN5bnRheGUgc3VybGlnbiZlYWN1dGU7ZSZxdW90OyBldC9vdSAmZWFjdXRlO3ZlbnR1ZWxsZW1lbnQgZGFucyAmcXVvdDtTJmVhY3V0ZTtsZWN0aW9uIGR1IFdZU0lXWUcgJmFncmF2ZTsgdXRpbGlzZXImcXVvdDsuDQonOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lang/ext/nb_NO.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0NvZGVNaXJyb3Igc3ludGFrc2ZyZW1oZXZpbmdzcmVkaWdlcmVyJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnQ29kZU1pcnJvciBtb2R1bGVuIGJsZSBpbnN0YWxsZXJ0JzsKJGxhbmdbJ25lZWRwZXJtaXNzaW9uJ10gPSAnRHUgdHJlbmdlciAmIzAzOTslcyYjMDM5OyB0aWxsYXRlbHNlIGZvciAmYXJpbmc7IHV0ZiZvc2xhc2g7cmUgZGVubmUgZnVua3Nqb25lbi4nOwokbGFuZ1snc2V0dGluZ3N0YWInXSA9ICdJbm5zdGlsbGluZ2VyJzsKJGxhbmdbJ3NhdmVzZXR0aW5ncyddID0gJ0xhZ3JlIGlubnN0aWxsaW5nZXInOwokbGFuZ1snc2V0dGluZ3NzYXZlZCddID0gJ0lubnN0aWxsaW5nZXIgbGFncmV0JzsKJGxhbmdbJ2h0bWx0ZXN0J10gPSAnSFRNTCBzeW50YWtzIHRlc3QnOwokbGFuZ1snY3NzdGVzdCddID0gJ0NTUyBzeW50YWtzIHRlc3QnOwokbGFuZ1sncGhwdGVzdCddID0gJ1BIUCBzeW50YWtzIHRlc3QnOwokbGFuZ1snanN0ZXN0J10gPSAnSmF2YVNjcmlwdCBzeW50YWtzdGVzdCc7CiRsYW5nWydzaG93bGluZW51bWJlcnMnXSA9ICdWaXMgbGluamVudW1tZXInOwokbGFuZ1snYXV0b21hdGNocGFyZW5zJ10gPSAnQXV0b21hdGlza2UgcGFyYW50ZXNlcic7CiRsYW5nWyd0YWJoYW5kbGluZyddID0gJ0h2b3JkYW4gc2thbCB0cnlrayBhdiBUQUItdGFzdGVuIGgmYXJpbmc7bnRlcmVzJzsKJGxhbmdbJ3RhYmRlZmF1bHQnXSA9ICdMYSBuZXR0bGVzZXJlbiBhdmdqJm9zbGFzaDtyZSc7CiRsYW5nWyd0YWJpbmRlbnQnXSA9ICdMYWcgaW5ucnlrayc7CiRsYW5nWyd0YWJzcGFjZXMnXSA9ICdTZXR0IGlubiBtZWxsb21yb20nOwokbGFuZ1sndGFic2hpZnQnXSA9ICdTZW5kZXIgdGlsIGgmb3NsYXNoO3lyZSwgc2hpZnQtVEFCIHNlbmRlciB0aWwgdmVuc3RyZSc7CiRsYW5nWydjc3NhZGRpdGlvbnMnXSA9ICdDb2RlTWlycm9yLWNzcyB0aWxsZWdnLic7CiRsYW5nWyd0aGVtZSddID0gJ1RlbWEnOwokbGFuZ1snaGVscCddID0gJzxzdHJvbmc+V2hhdCBkb2VzIHRoaXMgbW9kdWxlIGRvPzwvc3Ryb25nPg0KPGJyLz4NClRoZSBDb2RlTWlycm9yIG1vZHVsZSBhbGxvd3MgeW91IHRvIGVkaXQgY29udGVudCwgdGVtcGxhdGVzIGFuZCBzdHlsZXNoZWV0cyB1c2luZyBhIHN5bnRheGhpZ2hsaWdodGluZyBlZGl0b3IgaW5zaWRlIHlvdXIgYnJvd3Nlci4NCkl0IGNhbiBib3RoIHJlcGxhY2UgYSB3eXNpd3lnLW1vZHVsZSwgYW5kIGFjdCBzdGFuZGFsb25lIGZvciB0ZW1wbGF0ZS9zdHlsZXNoZWV0IGVkaXRpbmcgKG9ubHkgc3VwcG9ydGVkIGluIENNU21zIDEuMSspDQo8YnIvPjxici8+DQo8c3Ryb25nPkhvdyBkbyBJIHVzZSB0aGlzIG1vZHVsZT88L3N0cm9uZz4NCllvdSBzaW1wbHkgaW5zdGFsbCBpdCwgYW5kIGNob29zZSBpdCBpbiB5b3VyIGFkbWluIHVzZXIgcHJlZmVyZW5jZXMuIE5vdGUsIHRoYXQgaWYgeW91IHVzZSBDTVNtcyAxLjEgb3IgYWJvdmUgeW91IGNhbg0Kc2VsZWN0IENvZGVBcmVhIGJvdGggYXMgYSBXWVNJV1lHIGFuZCBhcyBhIHN5bnRheCBoaWdobGlnaHRpbmcgZWRpdG9yLic7CiRsYW5nWydxY2EnXSA9ICdQMC01MzY4NDkxMTUtMTMwNzk4MzQ5NTIxMCc7CiRsYW5nWyd1dG1hJ10gPSAnMTU2ODYxMzUzLjEwMDU2MDYwODQuMTMwOTA0NzQ3Mi4xMzA5MDQ3NDcyLjEzMDkxMjIyMjEuMic7CiRsYW5nWyd1dG16J10gPSAnMTU2ODYxMzUzLjEzMDc5ODM0OTUuMS4xLnV0bWNzcj0oZGlyZWN0KXx1dG1jY249KGRpcmVjdCl8dXRtY21kPShub25lKSc7CiRsYW5nWyd1dG1jJ10gPSAnMTU2ODYxMzUzJzsKJGxhbmdbJ3V0bWInXSA9ICcxNTY4NjEzNTMuNS4xMC4xMzA5MTIyMjIxJzsKPz4=]]></data>
	</file>
	<file>
	  <filename>/lang/ext/nl_NL.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0NvZGVNaXJyb3IgU3ludGF4aGlnaGxpZ2h0aW5nIEVkaXRvcic7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ0RlIENvZGVNaXJyb3IgTW9kdWxlIGlzIGdlJml1bWw7bnN0YWxsZWVyZCc7CiRsYW5nWyduZWVkcGVybWlzc2lvbiddID0gJ1UgaGVlZnQgJiMwMzk7JXMmIzAzOTsgcmVjaHRlbiBub2RpZyBvbSBkZXplIGZ1bmN0aWUgdGUgZ2VicnVpa2VuLic7CiRsYW5nWydzZXR0aW5nc3RhYiddID0gJ0luc3RlbGxpbmdlbic7CiRsYW5nWydzYXZlc2V0dGluZ3MnXSA9ICdJbnN0ZWxsaW5nZW4gb3BzbGFhbic7CiRsYW5nWydzZXR0aW5nc3NhdmVkJ10gPSAnSW5zdGVsbGluZ2VuIG9wZ2VzbGFnZW4nOwokbGFuZ1snaHRtbHRlc3QnXSA9ICdIVE1MIFN5bnRheCBUZXN0JzsKJGxhbmdbJ2Nzc3Rlc3QnXSA9ICdDU1MgU3ludGF4IFRlc3QnOwokbGFuZ1sncGhwdGVzdCddID0gJ1BIUCBTeW50YXggVGVzdCc7CiRsYW5nWydqc3Rlc3QnXSA9ICdKYXZhU2NyaXB0IFN5bnRheCBUZXN0JzsKJGxhbmdbJ3Nob3dsaW5lbnVtYmVycyddID0gJ1JlZ2VsbnVtbWVycyB0b25lbic7CiRsYW5nWydhbGxvd2Z1bGxzY3JlZW4nXSA9ICdTdGEgZnVsbHNjcmVlbiBtb2R1cyB0b2UgKEYxMSknOwokbGFuZ1snYXV0b21hdGNocGFyZW5zJ10gPSAnQXV0b21hdGlzY2ggYmlqIGVsa2FhciBob3JlbmRlIHRhZ3Mga2xldXJlbic7CiRsYW5nWyd0YWJoYW5kbGluZyddID0gJ1dhdCB0ZSBkb2VuIGJpaiBoZXQgaW5kcnVra2VuIHZhbiBUQUIgdG9ldHMnOwokbGFuZ1sndGFiZGVmYXVsdCddID0gJ0xhYXQgZGUgYnJvd3NlciBoZXQgYmVwYWxlbic7CiRsYW5nWyd0YWJpbmRlbnQnXSA9ICdNYWFrIHJlZ2VsIGluc3ByaW5naW5nJzsKJGxhbmdbJ3RhYnNwYWNlcyddID0gJ1ZvZWcgc3BhdGllcyB0b2UnOwokbGFuZ1sndGFic2hpZnQnXSA9ICdWZXJwbGFhdHN0IG5hYXIgcmVjaHRzLCBzaGlmdC1UQUIgdmVycGxhYXRzdCBuYWFyIGxpbmtzJzsKJGxhbmdbJ3RhYnNpemUnXSA9ICdBZm1ldGluZ2VuIHZhbiBkZSB0YWJzJzsKJGxhbmdbJ2Nzc2FkZGl0aW9ucyddID0gJ0FhbnBhc3NpbmdlbiBhYW4gZGUgQ29kZU1pcnJvci1jc3MuJzsKJGxhbmdbJ3RoZW1lJ10gPSAnVGhlbWUgJzsKJGxhbmdbJ2hlbHAnXSA9ICc8c3Ryb25nPldoYXQgZG9lcyB0aGlzIG1vZHVsZSBkbz8gPC9zdHJvbmc+DQo8YnIvPg0KVGhlIENvZGVNaXJyb3IgbW9kdWxlIGFsbG93cyB5b3UgdG8gZWRpdCBjb250ZW50LCB0ZW1wbGF0ZXMgYW5kIHN0eWxlc2hlZXRzIHVzaW5nIGEgc3ludGF4aGlnaGxpZ2h0aW5nIGVkaXRvciBpbnNpZGUgeW91ciBicm93c2VyLg0KSXQgY2FuIGJvdGggcmVwbGFjZSBhIHd5c2l3eWctbW9kdWxlLCBhbmQgYWN0IHN0YW5kYWxvbmUgZm9yIHRlbXBsYXRlL3N0eWxlc2hlZXQgZWRpdGluZyAob25seSBzdXBwb3J0ZWQgaW4gQ01TbXMgMS4xKykNCjxici8+PGJyLz4NCjxzdHJvbmc+SG93IGRvIEkgdXNlIHRoaXMgbW9kdWxlPzwvc3Ryb25nPg0KWW91IHNpbXBseSBpbnN0YWxsIGl0LCBhbmQgY2hvb3NlIGl0IGluIHlvdXIgYWRtaW4gdXNlciBwcmVmZXJlbmNlcy4gTm90ZSwgdGhhdCBpZiB5b3UgdXNlIENNU21zIDEuMSBvciBhYm92ZSB5b3UgY2FuDQpzZWxlY3QgQ29kZUFyZWEgYm90aCBhcyBhIFdZU0lXWUcgYW5kIGFzIGEgc3ludGF4IGhpZ2hsaWdodGluZyBlZGl0b3IuJzsKJGxhbmdbJ3FjYSddID0gJ1AwLTIzNTc2ODgzOC0xMzE4ODU5OTM1NzY1JzsKJGxhbmdbJ3V0bWEnXSA9ICcxNTY4NjEzNTMuNjc0Mjg5OTc4LjEzMjcyNTgyMTcuMTMyNzI1ODIxNy4xMzI3MjU4MjE3LjEnOwokbGFuZ1sndXRteiddID0gJzE1Njg2MTM1My4xMzI3MjU4MjE3LjEuMS51dG1jY249KGRpcmVjdCl8dXRtY3NyPShkaXJlY3QpfHV0bWNtZD0obm9uZSknOwokbGFuZ1sndXRtYiddID0gJzE1Njg2MTM1Myc7CiRsYW5nWyd1dG1jJ10gPSAnMTU2ODYxMzUzJzsKPz4=]]></data>
	</file>
	<file>
	  <filename>/lang/ext/ro_RO.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0VkaXRvcnVsIENvZGVNaXJyb3IgY3UgZXZpZGVudGlhdG9yIGRlIHNpbnRheGEnOwokbGFuZ1sncG9zdGluc3RhbGwnXSA9ICdNb2R1bHVsIENvZGVNaXJyb3IgYSBmb3N0IGluc3RhbGF0IGN1IHN1Y2Nlcyc7CiRsYW5nWyduZWVkcGVybWlzc2lvbiddID0gJ0F2ZXRpIG5ldm9pZSBkZSBwZXJtaXNpdW5lYSAmIzAzOTslcyYjMDM5OyBwZW50cnUgYWNlYXN0YSBmdW5jdGllLic7CiRsYW5nWydzZXR0aW5nc3RhYiddID0gJ1NldGFyaSc7CiRsYW5nWydzYXZlc2V0dGluZ3MnXSA9ICdTYWx2YXJlIHNldGFyaSc7CiRsYW5nWydzZXR0aW5nc3NhdmVkJ10gPSAnU2V0YXJpbGUgYXUgZm9zdCBzYWx2YXRlJzsKJGxhbmdbJ2h0bWx0ZXN0J10gPSAndGVzdCBzaW50YXhhIEhUTUwnOwokbGFuZ1snY3NzdGVzdCddID0gJ3Rlc3Qgc2ludGF4YSBDU1MnOwokbGFuZ1sncGhwdGVzdCddID0gJ3Rlc3Qgc2ludGF4YSBQSFAnOwokbGFuZ1snanN0ZXN0J10gPSAndGVzdCBzaW50YXhhIEphdmFTY3JpcHQnOwokbGFuZ1snZXhhbXBsZXN5bnRheCddID0gJ1N5bnRheCB0byB0ZXN0IGN1JzsKJGxhbmdbJ2NoYW5nZSddID0gJ1NjaGltYmEnOwokbGFuZ1snc2hvd2xpbmVudW1iZXJzJ10gPSAnQWZpc2FyZSBudW1lcmUgZGUgbGluaWUnOwokbGFuZ1sndGV4dHdyYXBwaW5nJ10gPSAnU3RyYW5nZSBsaW5paWxlIGx1bmdpJzsKJGxhbmdbJ2F1dG9tYXRjaHBhcmVucyddID0gJ0F1dG9wb3RyaXZpcmUgcGFyYW50ZXplJzsKJGxhbmdbJ2hlbHAnXSA9ICc8c3Ryb25nPkNlIGZhY2UgYWNlc3QgbW9kdWw/PC9zdHJvbmc+DQo8YnIvPg0KTW9kdWx1bCBDb2RlTWlycm9yIHZhIHBlcm1pdGUgc2EgZWRpdGF0aSBjb250aW51dCwgdGVtcGxhdGUtdXJpIHNpIHN0eWxlc2hlZXQtdXJpIGZvbG9zaW5kIHVuIGVkaXRvciBjdSBldmlkZW50aWF0b3IgZGUgc2ludGF4YSBkaW4gYnJvd3Nlci4NClBvYXRlIGlubG9jdWkgYXRhdCB1biBtb2R1bCB3eXNpd3lnLCBzaSBzYSBmdW5jdGlvbmV6ZSBkZSBzaW5lIHN0YXRhdG9yIHBlbnRydSBlZGl0YXJlIGRlIHRlbXBsYXRlL3N0eWxlc2hlZXQuDQo8YnIvPjxici8+DQo8c3Ryb25nPkN1bSBzZSBmb2xvc2VzZSBhY2VzdCBtb2R1bD88L3N0cm9uZz4NCkluc3RhbGF0aS1sLCBzaSBhbGVnZXRpLWwgaW4gcHJlZmVyaW50ZWxlIGRlIHV0aWxpemF0b3IgZGluIGFkbWluLic7CiRsYW5nWydxY2EnXSA9ICdQMC0xODM4MjE1MDQzLTEyODI4MDc1MzM5MzQnOwokbGFuZ1sndXRteiddID0gJzE1Njg2MTM1My4xMjgyODA3OTcyLjEuMi51dG1jc3I9Z29vZ2xlfHV0bWNjbj0ob3JnYW5pYyl8dXRtY21kPW9yZ2FuaWN8dXRtY3RyPWNtc21zJzsKJGxhbmdbJ3V0bWEnXSA9ICcxNTY4NjEzNTMuMTE5MTg3MzgxNy4xMjgyODA3NTM0LjEyODI4MDc1MzQuMTI4MjgwNzUzNC4xJzsKJGxhbmdbJ3V0bWMnXSA9ICcxNTY4NjEzNTMnOwokbGFuZ1sndXRtYiddID0gJzE1Njg2MTM1My4xMi45LjEyODI4MDc2MTUzNjgnOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lang/ext/sv_SE.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0NvZGVNaXJyb3Igc3ludGF4aGlnaGxpZ2h0aW5nIGVkaXRvcic7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ0NvZGVNaXJyb3ItbW9kdWxlbiBpbnN0YWxsZXJhZGVzIHV0YW4gbiZhcmluZztncmEgcHJvYmxlbSc7CiRsYW5nWyduZWVkcGVybWlzc2lvbiddID0gJyYjMDM5O1lvdSBuZWVkIHRoZSAmIzAzOTslcyYjMDM5OyBwZXJtaXNzaW9uIHRvIHBlcmZvcm0gdGhhdCBmdW5jdGlvbi4nOwokbGFuZ1snc2V0dGluZ3N0YWInXSA9ICdJbnN0JmF1bWw7bGxuaW5nYXInOwokbGFuZ1snc2F2ZXNldHRpbmdzJ10gPSAnU3BhcmEgaW5zdCZhdW1sO2xsbmluZ2FyJzsKJGxhbmdbJ3NldHRpbmdzc2F2ZWQnXSA9ICdJbnN0JmF1bWw7bGxuaW5nYXIgc3BhcmFkZXMnOwokbGFuZ1snaHRtbHRlc3QnXSA9ICdIVE1MIHN5bnRheCB0ZXN0JzsKJGxhbmdbJ2Nzc3Rlc3QnXSA9ICdDU1Mgc3ludGF4IHRlc3QnOwokbGFuZ1sncGhwdGVzdCddID0gJ1BIUCBzeW50YXggdGVzdCc7CiRsYW5nWydqc3Rlc3QnXSA9ICdKYXZhU2NyaXB0IHN5bnRheCB0ZXN0JzsKJGxhbmdbJ2V4YW1wbGVzeW50YXgnXSA9ICdTeW50YXggYXR0IHRlc3RhIG1lZCc7CiRsYW5nWydjaGFuZ2UnXSA9ICcmQXVtbDtuZHJhLi4uJzsKJGxhbmdbJ3Nob3dsaW5lbnVtYmVycyddID0gJ1Zpc2EgcmFkbnVtbWVyJzsKJGxhbmdbJ3RleHR3cmFwcGluZyddID0gJ1dyYXAgbG9uZyBsaW5lcyc7CiRsYW5nWydoZWxwJ10gPSAnPHN0cm9uZz5XaGF0IGRvZXMgdGhpcyBtb2R1bGUgZG8/PC9zdHJvbmc+DQo8YnIvPg0KVGhlIENvZGVNaXJyb3IgbW9kdWxlIGFsbG93cyB5b3UgdG8gZWRpdCBjb250ZW50LCB0ZW1wbGF0ZXMgYW5kIHN0eWxlc2hlZXRzIHVzaW5nIGEgc3ludGF4aGlnaGxpZ2h0aW5nIGVkaXRvciBpbnNpZGUgeW91ciBicm93c2VyLg0KSXQgY2FuIGJvdGggcmVwbGFjZSBhIHd5c2l3eWctbW9kdWxlLCBhbmQgYWN0IHN0YW5kYWxvbmUgZm9yIHRlbXBsYXRlL3N0eWxlc2hlZXQgZWRpdGluZyAob25seSBzdXBwb3J0ZWQgaW4gQ01TbXMgMS4xKykNCjxici8+PGJyLz4NCjxzdHJvbmc+SG93IGRvIEkgdXNlIHRoaXMgbW9kdWxlPzwvc3Ryb25nPg0KWW91IHNpbXBseSBpbnN0YWxsIGl0LCBhbmQgY2hvb3NlIGl0IGluIHlvdXIgYWRtaW4gdXNlciBwcmVmZXJlbmNlcy4gTm90ZSwgdGhhdCBpZiB5b3UgdXNlIENNU21zIDEuMSBvciBhYm92ZSB5b3UgY2FuDQpzZWxlY3QgQ29kZUFyZWEgYm90aCBhcyBhIFdZU0lXWUcgYW5kIGFzIGEgc3ludGF4IGhpZ2hsaWdodGluZyBlZGl0b3IuJzsKJGxhbmdbJ3FjYSddID0gJ1AwLTEyMzE4NzIzMjUtMTI2OTM1OTMyMTE5NSc7CiRsYW5nWyd1dG1hJ10gPSAnMTU2ODYxMzUzLjEyNjk3Nzc2MDMuMTI2OTM1OTM0Mi4xMjY5MzU5MzQyLjEyNjkzNTkzNDIuMSc7CiRsYW5nWyd1dG1iJ10gPSAnMTU2ODYxMzUzLjEuMTAuMTI2OTM1OTM0Mic7CiRsYW5nWyd1dG1jJ10gPSAnMTU2ODYxMzUzJzsKJGxhbmdbJ3V0bXonXSA9ICcxNTY4NjEzNTMuMTI2OTM1OTM0Mi4xLjEudXRtY3NyPWdvb2dsZXx1dG1jY249KG9yZ2FuaWMpfHV0bWNtZD1vcmdhbmljfHV0bWN0cj1jbXNtcyc7Cj8+]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFmdW5jdGlvbl9leGlzdHMoImNtc21zIikpIGV4aXQ7CiAgJHRoaXMtPlNldFByZWZlcmVuY2UoInNob3dsaW5lbnVtYmVycyIsMSk7CiAgJHRoaXMtPlNldFByZWZlcmVuY2UoInVzZWF1dG9jb21wbGV0ZSIsMSk7CiAgJHRoaXMtPlNldFByZWZlcmVuY2UoImF1dG9tYXRjaHBhcmVucyIsMCkKPz4=]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygiY21zbXMiKSkgZXhpdDsKICAkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgpOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygiY21zbXMiKSkgZXhpdDsKICAvL1JlbW92ZSBvbGQgc3BlY2lmaWsgcGVybWlzc2lvbgogICR0aGlzLT5SZW1vdmVQZXJtaXNzaW9uKCJtb2RpZnllZGl0YXJlYXNldHRpbmdzIik7Cj8+]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/changelog.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHVsPgogIDxsaT4yLjIuMiAtIFVwZGF0ZWQgdG8gQ00gMi4yLjE8L2xpPgogIDxsaT4yLjIuMSAtIFVwZGF0ZWQgdG8gQ00gMi4yLjAsIGFkZGVkIHRhYi13aWR0aCBzZXR0aW5nPC9saT4KICA8bGk+Mi4yLjAgLSBVcGRhdGVkIHRvIENNIDIuMTUsIGFkZGVkIG9wdGlvbmFsIGZ1bGxzY3JlZW4gbW9kZTwvbGk+CiAgPGxpPjIuMS4yIC0gVXBkYXRlZCB0byBDTSAyLjEyLCBjbGVhbmVyIHdheSBvZiBzYXZpbmcgZWRpdG9yIGNvbnRlbnQgdG8gdGV4dGFyZWE8L2xpPgogIDxsaT4yLjEuMCAtIFVwZGF0ZWQgdG8gQ00gMi4xLjEsIG9uY2UgYWdhaW4gY2hhbmdlIHRlc3Rtb2RlLi4uIDwvbGk+CiAgPGxpPjIuMC4xIC0gVXBkYXRlZCB0byBDTSAyLjAuMTwvbGk+CiAgPGxpPjIuMCAtIFVwZGF0ZWQgdG8gQ00gMi4wIGFuZCByZXdvcmtlZCBqdXN0IGFib3V0IGV2ZXJ5dGhpbmcgdG8gbWFrZSB0aGlzIHdvcms8L2xpPgogIDxsaT4wLjEuOSAtIFVwZGF0ZWQgdG8gQ00gMC45MzwvbGk+CiAgPGxpPjAuMS44IC0gVXBkYXRlZCB0byBDTSAwLjksIGFkZGVkIG9wdGlvbiBvbiBob3cgdG8gaGFuZGxlIFRBQjwvbGk+CiAgPGxpPjAuMS43IC0gVXBkYXRlZCB0byBDTSAwLjgwPC9saT4KICA8bGk+MC4xLjYgLSBVcGRhdGVkIHRvIENNIDAuNzAsIEFkZGVkIG9wdGlvbiB0byBtYXRjaCBwYXJlbnRoZXNpczwvbGk+CiAgPGxpPjAuMS41IC0gVXBkYXRlZCB0byBDTSAwLjY2LCByZW1vdmVkIGEgc3RyYW5nZSBcbiBjaGFyIGZyb20gaGVhZGVyb3V0cHV0LCBtYWRlIHRhYmJpbmcgd29yazwvbGk+CiAgPGxpPjAuMS40IC0gRml4ZWQgQ1BVIGhvZ2dpbmcgcHJvYmxlbXMgYnkgcmV3cml0aW5nIHRlc3RhcmVhLWNvZGU8L2xpPgogIDxsaT4wLjEuMyAtIFVwZGF0ZWQgdG8gQ00gMC42NSwgYWRkZWQgb3B0aW9uIHRvIHRvZ2dsZSB3b3Jkd3JhcDwvbGk+CiAgPGxpPjAuMS4yIC0gVXBkYXRlZCB0byBDTSAwLjYzPC9saT4KICA8bGk+MC4xLjEgLSBVcGRhdGVkIHRvIENNIDAuNjIsIGZpeGVkIGV4YW1wbGVzIGFuZCBwcm9iYWJseSBmdW5jdGlvbmFsaXR5IGFzIHdlbGw8L2xpPgogIDxsaT4wLjEuMCAtIEluaXRpYWwgcmVsZWFzZSA8L2xpPgo8L3VsPg==]]></data>
	</file>
	<file>
	  <filename>/templates/codemirror2area.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCBibGFjazsiID4KPHRleHRhcmVhIGlkPSJ7JHRleHRhcmVhaWR9IiBuYW1lPSJ7JHRleHRhcmVhbmFtZX0iPnskY29udGVudH08L3RleHRhcmVhPgo8L2Rpdj4KCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCiAgdmFyIHskdGV4dGFyZWFpZH0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgneyR0ZXh0YXJlYWlkfScpOwogIHZhciBjb2RlbWlycm9yZWRpdG9yeyRpZH0gPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYSh7JHRleHRhcmVhaWR9LCB7bGl0ZXJhbH17ey9saXRlcmFsfQoKICAgIG1vZGUgOiAneyRtb2RlfScsCiAgICBpbmRlbnRVbml0IDogeyR0YWJzaXplfSwKICAgIGxpbmVOdW1iZXJzOiB7JGxpbmVudW1iZXJzfSwKCiAgICB0YWJNb2RlIDogJ3skdGFiaGFuZGxpbmd9JywKICAgIHRoZW1lIDogJ3skdGhlbWV9JywKICAgIG1hdGNoQnJhY2tldHM6IHRydWUKICB7aWYgJGFsbG93ZnVsbHNjcmVlbj09JzEnfQogIHtsaXRlcmFsfQogICxvbktleUV2ZW50OiBmdW5jdGlvbihpLCBlKSB7CgogICAgICAgICAgICBpZiAoKGUua2V5Q29kZSA9PSAxMjIgfHwgZS5rZXlDb2RlID09IDI3KSAmJiBlLnR5cGUgPT0gJ2tleWRvd24nKSB7CiAgICAgICAgICAgICAgZS5zdG9wKCk7CiAgICAgICAgICAgICAgcmV0dXJuIHRvZ2dsZUZ1bGxzY3JlZW5FZGl0aW5nKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICB7L2xpdGVyYWx9CiAgey9pZn0KCiAge2xpdGVyYWx9fSk7ey9saXRlcmFsfQo8L3NjcmlwdD4KCg==]]></data>
	</file>
	<file>
	  <filename>/templates/settings.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyRzdGFydGZvcm19CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHNob3dsaW5lbnVtYmVyc3RleHR9PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskc2hvd2xpbmVudW1iZXJzaW5wdXR9PC9wPgoJPC9kaXY+Cgo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyRhbGxvd2Z1bGxzY3JlZW50ZXh0fTwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGFsbG93ZnVsbHNjcmVlbmlucHV0fTwvcD4KCTwvZGl2Pgp7KjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRleHR3cmFwcGluZ3RleHR9PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskdGV4dHdyYXBwaW5naW5wdXR9PC9wPgoJPC9kaXY+CiAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskYXV0b21hdGNocGFyZW5zdGV4dH08L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRhdXRvbWF0Y2hwYXJlbnNpbnB1dH08L3A+Cgk8L2Rpdj4KKn0KICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyR0YWJoYW5kbGluZ3RleHR9PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskdGFiaGFuZGxpbmdpbnB1dH08L3A+Cgk8L2Rpdj4KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyR0YWJzaXpldGV4dH08L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JHRhYnNpemVpbnB1dH08L3A+CjwvZGl2PgoKPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskY3NzYWRkaXRpb25zdGV4dH08L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRjc3NhZGRpdGlvbnNpbnB1dH08L3A+Cgk8L2Rpdj4KCjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRoZW1ldGV4dH08L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyR0aGVtZWlucHV0fTwvcD4KCTwvZGl2PgoKCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij4mbmJzcDs8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRzdWJtaXR9PC9wPgoJPC9kaXY+CnskZW5kZm9ybX0K]]></data>
	</file>
</module>
