openc3-cosmos-tool-admin 5.19.0 → 6.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (119) hide show
  1. checksums.yaml +4 -4
  2. data/plugin.txt +2 -2
  3. data/tools/admin/ArrayWidget-By62tXtU-ebd68b9b8b5b932d2445.js +2 -0
  4. data/tools/admin/BarColumn-Dm3D1Lhp-f155ed2f23338a0c8a15.js +1 -0
  5. data/tools/admin/BlockWidget-CrT45ode-543f86b8d3f1936515d7.js +2 -0
  6. data/tools/admin/ButtonWidget-CKyBBv6m-e6ea1d4c25739d5981c5.js +2 -0
  7. data/tools/admin/CanvasWidget-PqkppHC7-eeed57e2753786152aee.js +1 -0
  8. data/tools/admin/CanvasdotWidget-BUbJgM2d-7d9174696598f529b9dc.js +1 -0
  9. data/tools/admin/CanvasimageWidget-DPVBY7mi-3f2a8fb1b9ffdbc35d3e.js +1 -0
  10. data/tools/admin/CanvasimagevalueWidget-GX37zzNc-61fbee601180a5d4fe3b.js +1 -0
  11. data/tools/admin/CanvaslabelWidget-P2_Y6Edw-35653e66a7c8993fd0e3.js +1 -0
  12. data/tools/admin/CanvaslabelvalueWidget-Cuas1i9P-8496cddfaa402a64fe5e.js +1 -0
  13. data/tools/admin/CanvaslineWidget-BYOYgPya-2d8e19cc8da5fa24b06b.js +1 -0
  14. data/tools/admin/CanvaslinevalueWidget-3cVJMFo7-d23fc18e1f918da6ee97.js +1 -0
  15. data/tools/admin/CheckbuttonWidget-B3wgSMuB-a269c7fd7cc566239161.js +1 -0
  16. data/tools/admin/ComboboxWidget-Dzr4Scvf-260b017e67109e2fc026.js +1 -0
  17. data/tools/admin/DateWidget-BWh76Ibb-f1712ed35422a2a6596e.js +1 -0
  18. data/tools/admin/DetailsDialog-EWjtBjle-7990262e67902ac0252f.js +1 -0
  19. data/tools/admin/DynamicWidget-m9EliUR2-a665966c9316579084a8.js +1 -0
  20. data/tools/admin/FormatvalueWidget-Rk0_eeIm-5c2a5572ba50be1f6890.js +1 -0
  21. data/tools/admin/GraphWidget-LqekkNDr-6af23dd3125a8d7b39a9.js +1 -0
  22. data/tools/admin/HorizontalWidget-BcfJ24Zn-8dcef7c5de51dd325185.js +1 -0
  23. data/tools/admin/HorizontalboxWidget-CQy1Hv9E-6bb5d00229edfea21641.js +1 -0
  24. data/tools/admin/HorizontallineWidget-BdlNB951-770ebba29ef8ee1bd21c.js +1 -0
  25. data/tools/admin/IframeWidget-BBaDrRLo-44a78fa82ad12a1ee6c4.js +1 -0
  26. data/tools/admin/ImageLoader-CDLQopxJ-68194bc736f7cabded39.js +1 -0
  27. data/tools/admin/ImageviewerWidget-BgO3Pq6I-d1b099512b26e8adbd97.js +1 -0
  28. data/tools/admin/InterfacesTab-BzXbRnQw-80c9e1a00b588664f0d9.js +1 -0
  29. data/tools/admin/LabelWidget-B_C6lKOE-fa3eff00f1bae0754cc7.js +1 -0
  30. data/tools/admin/LabelledWidget-B_UGivhr-e113f6ce28bf94f51fee.js +1 -0
  31. data/tools/admin/LabelprogressbarWidget-BJWCmsYC-e98295c1bc5e4efb1c09.js +1 -0
  32. data/tools/admin/LabelsparklineWidget-DILCIh3q-f22a36373fc866a444dc.js +1 -0
  33. data/tools/admin/LabelvalueWidget-CCZd1NXE-cf7b93c65219cf160d57.js +1 -0
  34. data/tools/admin/LabelvaluedescWidget-Bsllq8W6-57b9cdcaaebdc309cc98.js +1 -0
  35. data/tools/admin/LabelvaluelimitsbarWidget-BV-cfaD--eecc71f35ce995845faa.js +1 -0
  36. data/tools/admin/LabelvaluelimitscolumnWidget-DwA0eRBw-8ee3644a2037b78c6d62.js +1 -0
  37. data/tools/admin/LabelvaluerangebarWidget-3GDJz3dj-4f27ce8b83e09eaf47f3.js +1 -0
  38. data/tools/admin/Layout-klOVw-YN-57cdd4032a866948ae91.js +1 -0
  39. data/tools/admin/LedWidget-BAt02s0J-e049b22bdc18f7bf3f2d.js +1 -0
  40. data/tools/admin/LimitsbarWidget-JJiyzZjb-4b552af8e5470073ec05.js +1 -0
  41. data/tools/admin/LimitscolorWidget-CYzXKbYd-9afbb644c626ad1d6733.js +1 -0
  42. data/tools/admin/LimitscolumnWidget-Cd76tBo7-38462000de2efd18c479.js +1 -0
  43. data/tools/admin/LinegraphWidget-DWRtO6Ej-d0ae58480c116ffb64ef.js +1 -0
  44. data/tools/admin/MatrixbycolumnsWidget-cwsyjNV2-4fd3c3a24ebbb721b45a.js +1 -0
  45. data/tools/admin/MicroservicesTab-CXw9kdWT-5ce1be6883f4ad70a2c2.js +1 -0
  46. data/tools/admin/OutputDialog-Cqz9_MPm-909bbcae633ec90197fa.js +1 -0
  47. data/tools/admin/PackagesTab-wjl76tWL-949bca7c846419d282af.js +1 -0
  48. data/tools/admin/PluginsTab-B0MIc4dP-8b7622c22378077aa0a6.js +5 -0
  49. data/tools/admin/ProgressbarWidget-CYDziFej-d69f11ca427d49bb2ff1.js +1 -0
  50. data/tools/admin/RadiobuttonWidget-U6jcQZoD-e216011f2f6798b2477b.js +1 -0
  51. data/tools/admin/RadiogroupWidget-HTPJnsB0-f62fcea617a41aab7b3d.js +1 -0
  52. data/tools/admin/RangebarWidget-DW0FJK6y-95c451c431feda68a4aa.js +1 -0
  53. data/tools/admin/RedisTab-CO4P3kfJ-e1e822186e9ccbbaf7bd.js +1 -0
  54. data/tools/admin/RollupWidget-B2qrx55f-ab581ccfb8a7a5304da5.js +1 -0
  55. data/tools/admin/RoutersTab-90dfiqgI-592236d66eca1847cd22.js +1 -0
  56. data/tools/admin/ScrollwindowWidget-CwIDxgO6-d408ee37f84c83c69077.js +1 -0
  57. data/tools/admin/SecretsTab-Bt1QgQOO-b442f7cb6ca489679f10.js +1 -0
  58. data/tools/admin/SettingsTab-DcwV8AtY-ce18828e05af3c54b99e.js +1 -0
  59. data/tools/admin/SignalWidget-Bosa3AbW-653d8a9240989fcb6429.js +1 -0
  60. data/tools/admin/SimpleTextDialog-BK3uXyK3-9cfb6b5adab2c61d0b30.js +1 -0
  61. data/tools/admin/SpacerWidget-DYAlt5mt-4cb0a40fc30459d91514.js +1 -0
  62. data/tools/admin/SparklineWidget-CDrVXOFV-a103a847eb4b0ba73f28.js +1 -0
  63. data/tools/admin/TabbookWidget-DDdlzCkv-42afacb720eec281935d.js +1 -0
  64. data/tools/admin/TargetsTab-BCNMBoLQ-cf77d00bc09c263e509d.js +1 -0
  65. data/tools/admin/TextboxWidget-5euFelEq-670c34a45b0d8e0e6b17.js +1 -0
  66. data/tools/admin/TextfieldWidget-BFripYeh-ba16dac10a7b273f33bd.js +1 -0
  67. data/tools/admin/TimeWidget-BBSbsUYJ-66d7abc7bd9891d9f67c.js +1 -0
  68. data/tools/admin/TitleWidget-p8cjo-Bs-bd2c97a4ce86b3f7f776.js +1 -0
  69. data/tools/admin/ToolsTab-CYjue5Jk-b74d99d2d2d48b4bb947.js +6 -0
  70. data/tools/admin/VWidget-Dmqf_jKM-952e90273c0922ac7a4a.js +1 -0
  71. data/tools/admin/ValueWidget-CZh7JWwT-2c2d67aef078b313f118.js +1 -0
  72. data/tools/admin/ValuelimitsbarWidget-DU7ybswC-e9df05dabfa41fcf9bd3.js +1 -0
  73. data/tools/admin/ValuelimitscolumnWidget-DMw-h5jM-f5941e50754c56bb03c0.js +1 -0
  74. data/tools/admin/ValuerangebarWidget-DPpofDpA-f1cd5777a9e29a9cb40c.js +1 -0
  75. data/tools/admin/VerticalWidget-Ch7VAEmz-ad9c1186ed7e5b3077e2.js +1 -0
  76. data/tools/admin/VerticalboxWidget-DYx-TFT4-eced75b5e33079f1f5ff.js +1 -0
  77. data/tools/admin/Widget-orNSvnOh-a525c9c4a8704c6b360e.js +1 -0
  78. data/tools/admin/main-7b39afe9b1c97330416a.js +1431 -0
  79. data/tools/admin/main.js +1 -0
  80. metadata +79 -41
  81. data/tools/admin/index.html +0 -4
  82. data/tools/admin/js/143.js +0 -2
  83. data/tools/admin/js/143.js.map +0 -1
  84. data/tools/admin/js/25.js +0 -2
  85. data/tools/admin/js/25.js.map +0 -1
  86. data/tools/admin/js/272.js +0 -2
  87. data/tools/admin/js/272.js.map +0 -1
  88. data/tools/admin/js/361.js +0 -2
  89. data/tools/admin/js/361.js.map +0 -1
  90. data/tools/admin/js/542.js +0 -10
  91. data/tools/admin/js/542.js.map +0 -1
  92. data/tools/admin/js/56.js +0 -2
  93. data/tools/admin/js/56.js.map +0 -1
  94. data/tools/admin/js/565.js +0 -2
  95. data/tools/admin/js/565.js.map +0 -1
  96. data/tools/admin/js/612.js +0 -2
  97. data/tools/admin/js/612.js.map +0 -1
  98. data/tools/admin/js/627.js +0 -9
  99. data/tools/admin/js/627.js.map +0 -1
  100. data/tools/admin/js/712.js +0 -2
  101. data/tools/admin/js/712.js.map +0 -1
  102. data/tools/admin/js/722.js +0 -2
  103. data/tools/admin/js/722.js.map +0 -1
  104. data/tools/admin/js/816.js +0 -2
  105. data/tools/admin/js/816.js.map +0 -1
  106. data/tools/admin/js/838.js +0 -2
  107. data/tools/admin/js/838.js.map +0 -1
  108. data/tools/admin/js/842.js +0 -2
  109. data/tools/admin/js/842.js.map +0 -1
  110. data/tools/admin/js/854.js +0 -2
  111. data/tools/admin/js/854.js.map +0 -1
  112. data/tools/admin/js/949.js +0 -2
  113. data/tools/admin/js/949.js.map +0 -1
  114. data/tools/admin/js/953.js +0 -2
  115. data/tools/admin/js/953.js.map +0 -1
  116. data/tools/admin/js/983.js +0 -2
  117. data/tools/admin/js/983.js.map +0 -1
  118. data/tools/admin/js/app.js +0 -2
  119. data/tools/admin/js/app.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"js/542.js","mappings":"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AG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,IAAK,GAAI,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,KAAM,GAAI,EAAG,GAAI,EAAG,IAAK,EA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","sources":["webpack://@openc3/cosmos-tool-admin/../../node_modules/ace-builds/src-min-noconflict/ext-language_tools.js","webpack://@openc3/cosmos-tool-admin/../../node_modules/ace-builds/src-min-noconflict/ext-searchbox.js","webpack://@openc3/cosmos-tool-admin/../../node_modules/ace-builds/src-min-noconflict/mode-ruby.js","webpack://@openc3/cosmos-tool-admin/../../node_modules/ace-builds/src-min-noconflict/theme-twilight.js","webpack://@openc3/cosmos-tool-admin/../../node_modules/ace-builds/src-noconflict/ace.js"],"sourcesContent":["ace.define(\"ace/snippets\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event_emitter\",\"ace/lib/lang\",\"ace/range\",\"ace/range_list\",\"ace/keyboard/hash_handler\",\"ace/tokenizer\",\"ace/clipboard\",\"ace/editor\"],function(e,t,n){\"use strict\";function p(e){var t=(new Date).toLocaleString(\"en-us\",e);return t.length==1?\"0\"+t:t}var r=e(\"./lib/dom\"),i=e(\"./lib/oop\"),s=e(\"./lib/event_emitter\").EventEmitter,o=e(\"./lib/lang\"),u=e(\"./range\").Range,a=e(\"./range_list\").RangeList,f=e(\"./keyboard/hash_handler\").HashHandler,l=e(\"./tokenizer\").Tokenizer,c=e(\"./clipboard\"),h={CURRENT_WORD:function(e){return e.session.getTextRange(e.session.getWordRange())},SELECTION:function(e,t,n){var r=e.session.getTextRange();return n?r.replace(/\\n\\r?([ \\t]*\\S)/g,\"\\n\"+n+\"$1\"):r},CURRENT_LINE:function(e){return e.session.getLine(e.getCursorPosition().row)},PREV_LINE:function(e){return e.session.getLine(e.getCursorPosition().row-1)},LINE_INDEX:function(e){return e.getCursorPosition().row},LINE_NUMBER:function(e){return e.getCursorPosition().row+1},SOFT_TABS:function(e){return e.session.getUseSoftTabs()?\"YES\":\"NO\"},TAB_SIZE:function(e){return e.session.getTabSize()},CLIPBOARD:function(e){return c.getText&&c.getText()},FILENAME:function(e){return/[^/\\\\]*$/.exec(this.FILEPATH(e))[0]},FILENAME_BASE:function(e){return/[^/\\\\]*$/.exec(this.FILEPATH(e))[0].replace(/\\.[^.]*$/,\"\")},DIRECTORY:function(e){return this.FILEPATH(e).replace(/[^/\\\\]*$/,\"\")},FILEPATH:function(e){return\"/not implemented.txt\"},WORKSPACE_NAME:function(){return\"Unknown\"},FULLNAME:function(){return\"Unknown\"},BLOCK_COMMENT_START:function(e){var t=e.session.$mode||{};return t.blockComment&&t.blockComment.start||\"\"},BLOCK_COMMENT_END:function(e){var t=e.session.$mode||{};return t.blockComment&&t.blockComment.end||\"\"},LINE_COMMENT:function(e){var t=e.session.$mode||{};return t.lineCommentStart||\"\"},CURRENT_YEAR:p.bind(null,{year:\"numeric\"}),CURRENT_YEAR_SHORT:p.bind(null,{year:\"2-digit\"}),CURRENT_MONTH:p.bind(null,{month:\"numeric\"}),CURRENT_MONTH_NAME:p.bind(null,{month:\"long\"}),CURRENT_MONTH_NAME_SHORT:p.bind(null,{month:\"short\"}),CURRENT_DATE:p.bind(null,{day:\"2-digit\"}),CURRENT_DAY_NAME:p.bind(null,{weekday:\"long\"}),CURRENT_DAY_NAME_SHORT:p.bind(null,{weekday:\"short\"}),CURRENT_HOUR:p.bind(null,{hour:\"2-digit\",hour12:!1}),CURRENT_MINUTE:p.bind(null,{minute:\"2-digit\"}),CURRENT_SECOND:p.bind(null,{second:\"2-digit\"})};h.SELECTED_TEXT=h.SELECTION;var d=function(){function e(){this.snippetMap={},this.snippetNameMap={},this.variables=h}return e.prototype.getTokenizer=function(){return e.$tokenizer||this.createTokenizer()},e.prototype.createTokenizer=function(){function t(e){return e=e.substr(1),/^\\d+$/.test(e)?[{tabstopId:parseInt(e,10)}]:[{text:e}]}function n(e){return\"(?:[^\\\\\\\\\"+e+\"]|\\\\\\\\.)\"}var r={regex:\"/(\"+n(\"/\")+\"+)/\",onMatch:function(e,t,n){var r=n[0];return r.fmtString=!0,r.guard=e.slice(1,-1),r.flag=\"\",\"\"},next:\"formatString\"};return e.$tokenizer=new l({start:[{regex:/\\\\./,onMatch:function(e,t,n){var r=e[1];return r==\"}\"&&n.length?e=r:\"`$\\\\\".indexOf(r)!=-1&&(e=r),[e]}},{regex:/}/,onMatch:function(e,t,n){return[n.length?n.shift():e]}},{regex:/\\$(?:\\d+|\\w+)/,onMatch:t},{regex:/\\$\\{[\\dA-Z_a-z]+/,onMatch:function(e,n,r){var i=t(e.substr(1));return r.unshift(i[0]),i},next:\"snippetVar\"},{regex:/\\n/,token:\"newline\",merge:!1}],snippetVar:[{regex:\"\\\\|\"+n(\"\\\\|\")+\"*\\\\|\",onMatch:function(e,t,n){var r=e.slice(1,-1).replace(/\\\\[,|\\\\]|,/g,function(e){return e.length==2?e[1]:\"\\0\"}).split(\"\\0\").map(function(e){return{value:e}});return n[0].choices=r,[r[0]]},next:\"start\"},r,{regex:\"([^:}\\\\\\\\]|\\\\\\\\.)*:?\",token:\"\",next:\"start\"}],formatString:[{regex:/:/,onMatch:function(e,t,n){return n.length&&n[0].expectElse?(n[0].expectElse=!1,n[0].ifEnd={elseEnd:n[0]},[n[0].ifEnd]):\":\"}},{regex:/\\\\./,onMatch:function(e,t,n){var r=e[1];return r==\"}\"&&n.length?e=r:\"`$\\\\\".indexOf(r)!=-1?e=r:r==\"n\"?e=\"\\n\":r==\"t\"?e=\"\t\":\"ulULE\".indexOf(r)!=-1&&(e={changeCase:r,local:r>\"a\"}),[e]}},{regex:\"/\\\\w*}\",onMatch:function(e,t,n){var r=n.shift();return r&&(r.flag=e.slice(1,-1)),this.next=r&&r.tabstopId?\"start\":\"\",[r||e]},next:\"start\"},{regex:/\\$(?:\\d+|\\w+)/,onMatch:function(e,t,n){return[{text:e.slice(1)}]}},{regex:/\\${\\w+/,onMatch:function(e,t,n){var r={text:e.slice(2)};return n.unshift(r),[r]},next:\"formatStringVar\"},{regex:/\\n/,token:\"newline\",merge:!1},{regex:/}/,onMatch:function(e,t,n){var r=n.shift();return this.next=r&&r.tabstopId?\"start\":\"\",[r||e]},next:\"start\"}],formatStringVar:[{regex:/:\\/\\w+}/,onMatch:function(e,t,n){var r=n[0];return r.formatFunction=e.slice(2,-1),[n.shift()]},next:\"formatString\"},r,{regex:/:[\\?\\-+]?/,onMatch:function(e,t,n){e[1]==\"+\"&&(n[0].ifEnd=n[0]),e[1]==\"?\"&&(n[0].expectElse=!0)},next:\"formatString\"},{regex:\"([^:}\\\\\\\\]|\\\\\\\\.)*:?\",token:\"\",next:\"formatString\"}]}),e.$tokenizer},e.prototype.tokenizeTmSnippet=function(e,t){return this.getTokenizer().getLineTokens(e,t).tokens.map(function(e){return e.value||e})},e.prototype.getVariableValue=function(e,t,n){if(/^\\d+$/.test(t))return(this.variables.__||{})[t]||\"\";if(/^[A-Z]\\d+$/.test(t))return(this.variables[t[0]+\"__\"]||{})[t.substr(1)]||\"\";t=t.replace(/^TM_/,\"\");if(!this.variables.hasOwnProperty(t))return\"\";var r=this.variables[t];return typeof r==\"function\"&&(r=this.variables[t](e,t,n)),r==null?\"\":r},e.prototype.tmStrFormat=function(e,t,n){if(!t.fmt)return e;var r=t.flag||\"\",i=t.guard;i=new RegExp(i,r.replace(/[^gim]/g,\"\"));var s=typeof t.fmt==\"string\"?this.tokenizeTmSnippet(t.fmt,\"formatString\"):t.fmt,o=this,u=e.replace(i,function(){var e=o.variables.__;o.variables.__=[].slice.call(arguments);var t=o.resolveVariables(s,n),r=\"E\";for(var i=0;i<t.length;i++){var u=t[i];if(typeof u==\"object\"){t[i]=\"\";if(u.changeCase&&u.local){var a=t[i+1];a&&typeof a==\"string\"&&(u.changeCase==\"u\"?t[i]=a[0].toUpperCase():t[i]=a[0].toLowerCase(),t[i+1]=a.substr(1))}else u.changeCase&&(r=u.changeCase)}else r==\"U\"?t[i]=u.toUpperCase():r==\"L\"&&(t[i]=u.toLowerCase())}return o.variables.__=e,t.join(\"\")});return u},e.prototype.tmFormatFunction=function(e,t,n){return t.formatFunction==\"upcase\"?e.toUpperCase():t.formatFunction==\"downcase\"?e.toLowerCase():e},e.prototype.resolveVariables=function(e,t){function f(t){var n=e.indexOf(t,s+1);n!=-1&&(s=n)}var n=[],r=\"\",i=!0;for(var s=0;s<e.length;s++){var o=e[s];if(typeof o==\"string\"){n.push(o),o==\"\\n\"?(i=!0,r=\"\"):i&&(r=/^\\t*/.exec(o)[0],i=/\\S/.test(o));continue}if(!o)continue;i=!1;if(o.fmtString){var u=e.indexOf(o,s+1);u==-1&&(u=e.length),o.fmt=e.slice(s+1,u),s=u}if(o.text){var a=this.getVariableValue(t,o.text,r)+\"\";o.fmtString&&(a=this.tmStrFormat(a,o,t)),o.formatFunction&&(a=this.tmFormatFunction(a,o,t)),a&&!o.ifEnd?(n.push(a),f(o)):!a&&o.ifEnd&&f(o.ifEnd)}else o.elseEnd?f(o.elseEnd):o.tabstopId!=null?n.push(o):o.changeCase!=null&&n.push(o)}return n},e.prototype.getDisplayTextForSnippet=function(e,t){var n=v.call(this,e,t);return n.text},e.prototype.insertSnippetForSelection=function(e,t,n){n===void 0&&(n={});var r=v.call(this,e,t,n),i=e.getSelectionRange(),s=e.session.replace(i,r.text),o=new m(e),u=e.inVirtualSelectionMode&&e.selection.index;o.addTabstops(r.tabstops,i.start,s,u)},e.prototype.insertSnippet=function(e,t,n){n===void 0&&(n={});var r=this;if(e.inVirtualSelectionMode)return r.insertSnippetForSelection(e,t,n);e.forEachSelection(function(){r.insertSnippetForSelection(e,t,n)},null,{keepOrder:!0}),e.tabstopManager&&e.tabstopManager.tabNext()},e.prototype.$getScope=function(e){var t=e.session.$mode.$id||\"\";t=t.split(\"/\").pop();if(t===\"html\"||t===\"php\"){t===\"php\"&&!e.session.$mode.inlinePhp&&(t=\"html\");var n=e.getCursorPosition(),r=e.session.getState(n.row);typeof r==\"object\"&&(r=r[0]),r.substring&&(r.substring(0,3)==\"js-\"?t=\"javascript\":r.substring(0,4)==\"css-\"?t=\"css\":r.substring(0,4)==\"php-\"&&(t=\"php\"))}return t},e.prototype.getActiveScopes=function(e){var t=this.$getScope(e),n=[t],r=this.snippetMap;return r[t]&&r[t].includeScopes&&n.push.apply(n,r[t].includeScopes),n.push(\"_\"),n},e.prototype.expandWithTab=function(e,t){var n=this,r=e.forEachSelection(function(){return n.expandSnippetForSelection(e,t)},null,{keepOrder:!0});return r&&e.tabstopManager&&e.tabstopManager.tabNext(),r},e.prototype.expandSnippetForSelection=function(e,t){var n=e.getCursorPosition(),r=e.session.getLine(n.row),i=r.substring(0,n.column),s=r.substr(n.column),o=this.snippetMap,u;return this.getActiveScopes(e).some(function(e){var t=o[e];return t&&(u=this.findMatchingSnippet(t,i,s)),!!u},this),u?t&&t.dryRun?!0:(e.session.doc.removeInLine(n.row,n.column-u.replaceBefore.length,n.column+u.replaceAfter.length),this.variables.M__=u.matchBefore,this.variables.T__=u.matchAfter,this.insertSnippetForSelection(e,u.content),this.variables.M__=this.variables.T__=null,!0):!1},e.prototype.findMatchingSnippet=function(e,t,n){for(var r=e.length;r--;){var i=e[r];if(i.startRe&&!i.startRe.test(t))continue;if(i.endRe&&!i.endRe.test(n))continue;if(!i.startRe&&!i.endRe)continue;return i.matchBefore=i.startRe?i.startRe.exec(t):[\"\"],i.matchAfter=i.endRe?i.endRe.exec(n):[\"\"],i.replaceBefore=i.triggerRe?i.triggerRe.exec(t)[0]:\"\",i.replaceAfter=i.endTriggerRe?i.endTriggerRe.exec(n)[0]:\"\",i}},e.prototype.register=function(e,t){function s(e){return e&&!/^\\^?\\(.*\\)\\$?$|^\\\\b$/.test(e)&&(e=\"(?:\"+e+\")\"),e||\"\"}function u(e,t,n){return e=s(e),t=s(t),n?(e=t+e,e&&e[e.length-1]!=\"$\"&&(e+=\"$\")):(e+=t,e&&e[0]!=\"^\"&&(e=\"^\"+e)),new RegExp(e)}function a(e){e.scope||(e.scope=t||\"_\"),t=e.scope,n[t]||(n[t]=[],r[t]={});var s=r[t];if(e.name){var a=s[e.name];a&&i.unregister(a),s[e.name]=e}n[t].push(e),e.prefix&&(e.tabTrigger=e.prefix),!e.content&&e.body&&(e.content=Array.isArray(e.body)?e.body.join(\"\\n\"):e.body),e.tabTrigger&&!e.trigger&&(!e.guard&&/^\\w/.test(e.tabTrigger)&&(e.guard=\"\\\\b\"),e.trigger=o.escapeRegExp(e.tabTrigger));if(!e.trigger&&!e.guard&&!e.endTrigger&&!e.endGuard)return;e.startRe=u(e.trigger,e.guard,!0),e.triggerRe=new RegExp(e.trigger),e.endRe=u(e.endTrigger,e.endGuard,!0),e.endTriggerRe=new RegExp(e.endTrigger)}var n=this.snippetMap,r=this.snippetNameMap,i=this;e||(e=[]),Array.isArray(e)?e.forEach(a):Object.keys(e).forEach(function(t){a(e[t])}),this._signal(\"registerSnippets\",{scope:t})},e.prototype.unregister=function(e,t){function i(e){var i=r[e.scope||t];if(i&&i[e.name]){delete i[e.name];var s=n[e.scope||t],o=s&&s.indexOf(e);o>=0&&s.splice(o,1)}}var n=this.snippetMap,r=this.snippetNameMap;e.content?i(e):Array.isArray(e)&&e.forEach(i)},e.prototype.parseSnippetFile=function(e){e=e.replace(/\\r/g,\"\");var t=[],n={},r=/^#.*|^({[\\s\\S]*})\\s*$|^(\\S+) (.*)$|^((?:\\n*\\t.*)+)/gm,i;while(i=r.exec(e)){if(i[1])try{n=JSON.parse(i[1]),t.push(n)}catch(s){}if(i[4])n.content=i[4].replace(/^\\t/gm,\"\"),t.push(n),n={};else{var o=i[2],u=i[3];if(o==\"regex\"){var a=/\\/((?:[^\\/\\\\]|\\\\.)*)|$/g;n.guard=a.exec(u)[1],n.trigger=a.exec(u)[1],n.endTrigger=a.exec(u)[1],n.endGuard=a.exec(u)[1]}else o==\"snippet\"?(n.tabTrigger=u.match(/^\\S*/)[0],n.name||(n.name=u)):o&&(n[o]=u)}}return t},e.prototype.getSnippetByName=function(e,t){var n=this.snippetNameMap,r;return this.getActiveScopes(t).some(function(t){var i=n[t];return i&&(r=i[e]),!!r},this),r},e}();i.implement(d.prototype,s);var v=function(e,t,n){function l(e){var t=[];for(var n=0;n<e.length;n++){var r=e[n];if(typeof r==\"object\"){if(f[r.tabstopId])continue;var i=e.lastIndexOf(r,n-1);r=t[i]||{tabstopId:r.tabstopId}}t[n]=r}return t}n===void 0&&(n={});var r=e.getCursorPosition(),i=e.session.getLine(r.row),s=e.session.getTabString(),o=i.match(/^\\s*/)[0];r.column<o.length&&(o=o.slice(0,r.column)),t=t.replace(/\\r/g,\"\");var u=this.tokenizeTmSnippet(t);u=this.resolveVariables(u,e),u=u.map(function(e){return e==\"\\n\"&&!n.excludeExtraIndent?e+o:typeof e==\"string\"?e.replace(/\\t/g,s):e});var a=[];u.forEach(function(e,t){if(typeof e!=\"object\")return;var n=e.tabstopId,r=a[n];r||(r=a[n]=[],r.index=n,r.value=\"\",r.parents={});if(r.indexOf(e)!==-1)return;e.choices&&!r.choices&&(r.choices=e.choices),r.push(e);var i=u.indexOf(e,t+1);if(i===-1)return;var s=u.slice(t+1,i),o=s.some(function(e){return typeof e==\"object\"});o&&!r.value?r.value=s:s.length&&(!r.value||typeof r.value!=\"string\")&&(r.value=s.join(\"\"))}),a.forEach(function(e){e.length=0});var f={};for(var c=0;c<u.length;c++){var h=u[c];if(typeof h!=\"object\")continue;var p=h.tabstopId,d=a[p],v=u.indexOf(h,c+1);if(f[p]){f[p]===h&&(delete f[p],Object.keys(f).forEach(function(e){d.parents[e]=!0}));continue}f[p]=h;var m=d.value;typeof m!=\"string\"?m=l(m):h.fmt&&(m=this.tmStrFormat(m,h,e)),u.splice.apply(u,[c+1,Math.max(0,v-c)].concat(m,h)),d.indexOf(h)===-1&&d.push(h)}var g=0,y=0,b=\"\";return u.forEach(function(e){if(typeof e==\"string\"){var t=e.split(\"\\n\");t.length>1?(y=t[t.length-1].length,g+=t.length-1):y+=e.length,b+=e}else e&&(e.start?e.end={row:g,column:y}:e.start={row:g,column:y})}),{text:b,tabstops:a,tokens:u}},m=function(){function e(e){this.index=0,this.ranges=[],this.tabstops=[];if(e.tabstopManager)return e.tabstopManager;e.tabstopManager=this,this.$onChange=this.onChange.bind(this),this.$onChangeSelection=o.delayedCall(this.onChangeSelection.bind(this)).schedule,this.$onChangeSession=this.onChangeSession.bind(this),this.$onAfterExec=this.onAfterExec.bind(this),this.attach(e)}return e.prototype.attach=function(e){this.$openTabstops=null,this.selectedTabstop=null,this.editor=e,this.session=e.session,this.editor.on(\"change\",this.$onChange),this.editor.on(\"changeSelection\",this.$onChangeSelection),this.editor.on(\"changeSession\",this.$onChangeSession),this.editor.commands.on(\"afterExec\",this.$onAfterExec),this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler)},e.prototype.detach=function(){this.tabstops.forEach(this.removeTabstopMarkers,this),this.ranges.length=0,this.tabstops.length=0,this.selectedTabstop=null,this.editor.off(\"change\",this.$onChange),this.editor.off(\"changeSelection\",this.$onChangeSelection),this.editor.off(\"changeSession\",this.$onChangeSession),this.editor.commands.off(\"afterExec\",this.$onAfterExec),this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler),this.editor.tabstopManager=null,this.session=null,this.editor=null},e.prototype.onChange=function(e){var t=e.action[0]==\"r\",n=this.selectedTabstop||{},r=n.parents||{},i=this.tabstops.slice();for(var s=0;s<i.length;s++){var o=i[s],u=o==n||r[o.index];o.rangeList.$bias=u?0:1;if(e.action==\"remove\"&&o!==n){var a=o.parents&&o.parents[n.index],f=o.rangeList.pointIndex(e.start,a);f=f<0?-f-1:f+1;var l=o.rangeList.pointIndex(e.end,a);l=l<0?-l-1:l-1;var c=o.rangeList.ranges.slice(f,l);for(var h=0;h<c.length;h++)this.removeRange(c[h])}o.rangeList.$onChange(e)}var p=this.session;!this.$inChange&&t&&p.getLength()==1&&!p.getValue()&&this.detach()},e.prototype.updateLinkedFields=function(){var e=this.selectedTabstop;if(!e||!e.hasLinkedRanges||!e.firstNonLinked)return;this.$inChange=!0;var n=this.session,r=n.getTextRange(e.firstNonLinked);for(var i=0;i<e.length;i++){var s=e[i];if(!s.linked)continue;var o=s.original,u=t.snippetManager.tmStrFormat(r,o,this.editor);n.replace(s,u)}this.$inChange=!1},e.prototype.onAfterExec=function(e){e.command&&!e.command.readOnly&&this.updateLinkedFields()},e.prototype.onChangeSelection=function(){if(!this.editor)return;var e=this.editor.selection.lead,t=this.editor.selection.anchor,n=this.editor.selection.isEmpty();for(var r=0;r<this.ranges.length;r++){if(this.ranges[r].linked)continue;var i=this.ranges[r].contains(e.row,e.column),s=n||this.ranges[r].contains(t.row,t.column);if(i&&s)return}this.detach()},e.prototype.onChangeSession=function(){this.detach()},e.prototype.tabNext=function(e){var t=this.tabstops.length,n=this.index+(e||1);n=Math.min(Math.max(n,1),t),n==t&&(n=0),this.selectTabstop(n),this.updateTabstopMarkers(),n===0&&this.detach()},e.prototype.selectTabstop=function(e){this.$openTabstops=null;var t=this.tabstops[this.index];t&&this.addTabstopMarkers(t),this.index=e,t=this.tabstops[this.index];if(!t||!t.length)return;this.selectedTabstop=t;var n=t.firstNonLinked||t;t.choices&&(n.cursor=n.start);if(!this.editor.inVirtualSelectionMode){var r=this.editor.multiSelect;r.toSingleRange(n);for(var i=0;i<t.length;i++){if(t.hasLinkedRanges&&t[i].linked)continue;r.addRange(t[i].clone(),!0)}}else this.editor.selection.fromOrientedRange(n);this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler),this.selectedTabstop&&this.selectedTabstop.choices&&this.editor.execCommand(\"startAutocomplete\",{matches:this.selectedTabstop.choices})},e.prototype.addTabstops=function(e,t,n){var r=this.useLink||!this.editor.getOption(\"enableMultiselect\");this.$openTabstops||(this.$openTabstops=[]);if(!e[0]){var i=u.fromPoints(n,n);y(i.start,t),y(i.end,t),e[0]=[i],e[0].index=0}var s=this.index,o=[s+1,0],f=this.ranges,l=this.snippetId=(this.snippetId||0)+1;e.forEach(function(e,n){var i=this.$openTabstops[n]||e;i.snippetId=l;for(var s=0;s<e.length;s++){var c=e[s],h=u.fromPoints(c.start,c.end||c.start);g(h.start,t),g(h.end,t),h.original=c,h.tabstop=i,f.push(h),i!=e?i.unshift(h):i[s]=h,c.fmtString||i.firstNonLinked&&r?(h.linked=!0,i.hasLinkedRanges=!0):i.firstNonLinked||(i.firstNonLinked=h)}i.firstNonLinked||(i.hasLinkedRanges=!1),i===e&&(o.push(i),this.$openTabstops[n]=i),this.addTabstopMarkers(i),i.rangeList=i.rangeList||new a,i.rangeList.$bias=0,i.rangeList.addList(i)},this),o.length>2&&(this.tabstops.length&&o.push(o.splice(2,1)[0]),this.tabstops.splice.apply(this.tabstops,o))},e.prototype.addTabstopMarkers=function(e){var t=this.session;e.forEach(function(e){e.markerId||(e.markerId=t.addMarker(e,\"ace_snippet-marker\",\"text\"))})},e.prototype.removeTabstopMarkers=function(e){var t=this.session;e.forEach(function(e){t.removeMarker(e.markerId),e.markerId=null})},e.prototype.updateTabstopMarkers=function(){if(!this.selectedTabstop)return;var e=this.selectedTabstop.snippetId;this.selectedTabstop.index===0&&e--,this.tabstops.forEach(function(t){t.snippetId===e?this.addTabstopMarkers(t):this.removeTabstopMarkers(t)},this)},e.prototype.removeRange=function(e){var t=e.tabstop.indexOf(e);t!=-1&&e.tabstop.splice(t,1),t=this.ranges.indexOf(e),t!=-1&&this.ranges.splice(t,1),t=e.tabstop.rangeList.ranges.indexOf(e),t!=-1&&e.tabstop.splice(t,1),this.session.removeMarker(e.markerId),e.tabstop.length||(t=this.tabstops.indexOf(e.tabstop),t!=-1&&this.tabstops.splice(t,1),this.tabstops.length||this.detach())},e}();m.prototype.keyboardHandler=new f,m.prototype.keyboardHandler.bindKeys({Tab:function(e){if(t.snippetManager&&t.snippetManager.expandWithTab(e))return;e.tabstopManager.tabNext(1),e.renderer.scrollCursorIntoView()},\"Shift-Tab\":function(e){e.tabstopManager.tabNext(-1),e.renderer.scrollCursorIntoView()},Esc:function(e){e.tabstopManager.detach()}});var g=function(e,t){e.row==0&&(e.column+=t.column),e.row+=t.row},y=function(e,t){e.row==t.row&&(e.column-=t.column),e.row-=t.row};r.importCssString(\"\\n.ace_snippet-marker {\\n -moz-box-sizing: border-box;\\n box-sizing: border-box;\\n background: rgba(194, 193, 208, 0.09);\\n border: 1px dotted rgba(211, 208, 235, 0.62);\\n position: absolute;\\n}\",\"snippets.css\",!1),t.snippetManager=new d;var b=e(\"./editor\").Editor;(function(){this.insertSnippet=function(e,n){return t.snippetManager.insertSnippet(this,e,n)},this.expandSnippet=function(e){return t.snippetManager.expandWithTab(this,e)}}).call(b.prototype)}),ace.define(\"ace/autocomplete/popup\",[\"require\",\"exports\",\"module\",\"ace/virtual_renderer\",\"ace/editor\",\"ace/range\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/lib/dom\",\"ace/config\",\"ace/lib/useragent\"],function(e,t,n){\"use strict\";var r=e(\"../virtual_renderer\").VirtualRenderer,i=e(\"../editor\").Editor,s=e(\"../range\").Range,o=e(\"../lib/event\"),u=e(\"../lib/lang\"),a=e(\"../lib/dom\"),f=e(\"../config\").nls,l=e(\"./../lib/useragent\"),c=function(e){return\"suggest-aria-id:\".concat(e)},h=l.isSafari?\"menu\":\"listbox\",p=l.isSafari?\"menuitem\":\"option\",d=l.isSafari?\"aria-current\":\"aria-selected\",v=function(e){var t=new r(e);t.$maxLines=4;var n=new i(t);return n.setHighlightActiveLine(!1),n.setShowPrintMargin(!1),n.renderer.setShowGutter(!1),n.renderer.setHighlightGutterLine(!1),n.$mouseHandler.$focusTimeout=0,n.$highlightTagPending=!0,n},m=function(){function e(e){var t=a.createElement(\"div\"),n=v(t);e&&e.appendChild(t),t.style.display=\"none\",n.renderer.content.style.cursor=\"default\",n.renderer.setStyle(\"ace_autocomplete\"),n.renderer.$textLayer.element.setAttribute(\"role\",h),n.renderer.$textLayer.element.setAttribute(\"aria-roledescription\",f(\"autocomplete.popup.aria-roledescription\",\"Autocomplete suggestions\")),n.renderer.$textLayer.element.setAttribute(\"aria-label\",f(\"autocomplete.popup.aria-label\",\"Autocomplete suggestions\")),n.renderer.textarea.setAttribute(\"aria-hidden\",\"true\"),n.setOption(\"displayIndentGuides\",!1),n.setOption(\"dragDelay\",150);var r=function(){};n.focus=r,n.$isFocused=!0,n.renderer.$cursorLayer.restartTimer=r,n.renderer.$cursorLayer.element.style.opacity=\"0\",n.renderer.$maxLines=8,n.renderer.$keepTextAreaAtCursor=!1,n.setHighlightActiveLine(!1),n.session.highlight(\"\"),n.session.$searchHighlight.clazz=\"ace_highlight-marker\",n.on(\"mousedown\",function(e){var t=e.getDocumentPosition();n.selection.moveToPosition(t),m.start.row=m.end.row=t.row,e.stop()});var i,l=new s(-1,0,-1,Infinity),m=new s(-1,0,-1,Infinity);m.id=n.session.addMarker(m,\"ace_active-line\",\"fullLine\"),n.setSelectOnHover=function(e){e?l.id&&(n.session.removeMarker(l.id),l.id=null):l.id=n.session.addMarker(l,\"ace_line-hover\",\"fullLine\")},n.setSelectOnHover(!1),n.on(\"mousemove\",function(e){if(!i){i=e;return}if(i.x==e.x&&i.y==e.y)return;i=e,i.scrollTop=n.renderer.scrollTop,n.isMouseOver=!0;var t=i.getDocumentPosition().row;l.start.row!=t&&(l.id||n.setRow(t),y(t))}),n.renderer.on(\"beforeRender\",function(){if(i&&l.start.row!=-1){i.$pos=null;var e=i.getDocumentPosition().row;l.id||n.setRow(e),y(e,!0)}}),n.renderer.on(\"afterRender\",function(){var e=n.getRow(),t=n.renderer.$textLayer,r=t.element.childNodes[e-t.config.firstRow],i=document.activeElement;r!==n.selectedNode&&n.selectedNode&&(a.removeCssClass(n.selectedNode,\"ace_selected\"),i.removeAttribute(\"aria-activedescendant\"),n.selectedNode.removeAttribute(d),n.selectedNode.removeAttribute(\"id\")),n.selectedNode=r;if(r){a.addCssClass(r,\"ace_selected\");var s=c(e);r.id=s,t.element.setAttribute(\"aria-activedescendant\",s),i.setAttribute(\"aria-activedescendant\",s),r.setAttribute(\"role\",p),r.setAttribute(\"aria-roledescription\",f(\"autocomplete.popup.item.aria-roledescription\",\"item\")),r.setAttribute(\"aria-label\",n.getData(e).caption||n.getData(e).value),r.setAttribute(\"aria-setsize\",n.data.length),r.setAttribute(\"aria-posinset\",e+1),r.setAttribute(\"aria-describedby\",\"doc-tooltip\"),r.setAttribute(d,\"true\")}});var g=function(){y(-1)},y=function(e,t){e!==l.start.row&&(l.start.row=l.end.row=e,t||n.session._emit(\"changeBackMarker\"),n._emit(\"changeHoverMarker\"))};n.getHoveredRow=function(){return l.start.row},o.addListener(n.container,\"mouseout\",function(){n.isMouseOver=!1,g()}),n.on(\"hide\",g),n.on(\"changeSelection\",g),n.session.doc.getLength=function(){return n.data.length},n.session.doc.getLine=function(e){var t=n.data[e];return typeof t==\"string\"?t:t&&t.value||\"\"};var b=n.session.bgTokenizer;return b.$tokenizeRow=function(e){function s(e,n){e&&r.push({type:(t.className||\"\")+(n||\"\"),value:e})}var t=n.data[e],r=[];if(!t)return r;typeof t==\"string\"&&(t={value:t});var i=t.caption||t.value||t.name,o=i.toLowerCase(),u=(n.filterText||\"\").toLowerCase(),a=0,f=0;for(var l=0;l<=u.length;l++)if(l!=f&&(t.matchMask&1<<l||l==u.length)){var c=u.slice(f,l);f=l;var h=o.indexOf(c,a);if(h==-1)continue;s(i.slice(a,h),\"\"),a=h+c.length,s(i.slice(h,a),\"completion-highlight\")}return s(i.slice(a,i.length),\"\"),r.push({type:\"completion-spacer\",value:\" \"}),t.meta&&r.push({type:\"completion-meta\",value:t.meta}),t.message&&r.push({type:\"completion-message\",value:t.message}),r},b.$updateOnChange=r,b.start=r,n.session.$computeWidth=function(){return this.screenWidth=0},n.isOpen=!1,n.isTopdown=!1,n.autoSelect=!0,n.filterText=\"\",n.isMouseOver=!1,n.data=[],n.setData=function(e,t){n.filterText=t||\"\",n.setValue(u.stringRepeat(\"\\n\",e.length),-1),n.data=e||[],n.setRow(0)},n.getData=function(e){return n.data[e]},n.getRow=function(){return m.start.row},n.setRow=function(e){e=Math.max(this.autoSelect?0:-1,Math.min(this.data.length-1,e)),m.start.row!=e&&(n.selection.clearSelection(),m.start.row=m.end.row=e||0,n.session._emit(\"changeBackMarker\"),n.moveCursorTo(e||0,0),n.isOpen&&n._signal(\"select\"))},n.on(\"changeSelection\",function(){n.isOpen&&n.setRow(n.selection.lead.row),n.renderer.scrollCursorIntoView()}),n.hide=function(){this.container.style.display=\"none\",n.anchorPos=null,n.anchor=null,n.isOpen&&(n.isOpen=!1,this._signal(\"hide\"))},n.tryShow=function(e,t,r,s){if(!s&&n.isOpen&&n.anchorPos&&n.anchor&&n.anchorPos.top===e.top&&n.anchorPos.left===e.left&&n.anchor===r)return!0;var o=this.container,u=window.innerHeight,a=window.innerWidth,f=this.renderer,l=f.$maxLines*t*1.4,c={top:0,bottom:0,left:0},h=u-e.top-3*this.$borderSize-t,p=e.top-3*this.$borderSize;r||(p<=h||h>=l?r=\"bottom\":r=\"top\"),r===\"top\"?(c.bottom=e.top-this.$borderSize,c.top=c.bottom-l):r===\"bottom\"&&(c.top=e.top+t+this.$borderSize,c.bottom=c.top+l);var d=c.top>=0&&c.bottom<=u;if(!s&&!d)return!1;d?f.$maxPixelHeight=null:r===\"top\"?f.$maxPixelHeight=p:f.$maxPixelHeight=h,r===\"top\"?(o.style.top=\"\",o.style.bottom=u-c.bottom+\"px\",n.isTopdown=!1):(o.style.top=c.top+\"px\",o.style.bottom=\"\",n.isTopdown=!0),o.style.display=\"\";var v=e.left;return v+o.offsetWidth>a&&(v=a-o.offsetWidth),o.style.left=v+\"px\",o.style.right=\"\",n.isOpen||(n.isOpen=!0,this._signal(\"show\"),i=null),n.anchorPos=e,n.anchor=r,!0},n.show=function(e,t,n){this.tryShow(e,t,n?\"bottom\":undefined,!0)},n.goTo=function(e){var t=this.getRow(),n=this.session.getLength()-1;switch(e){case\"up\":t=t<=0?n:t-1;break;case\"down\":t=t>=n?-1:t+1;break;case\"start\":t=0;break;case\"end\":t=n}this.setRow(t)},n.getTextLeftOffset=function(){return this.$borderSize+this.renderer.$padding+this.$imageSize},n.$imageSize=0,n.$borderSize=1,n}return e}();a.importCssString('\\n.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {\\n background-color: #CAD6FA;\\n z-index: 1;\\n}\\n.ace_dark.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {\\n background-color: #3a674e;\\n}\\n.ace_editor.ace_autocomplete .ace_line-hover {\\n border: 1px solid #abbffe;\\n margin-top: -1px;\\n background: rgba(233,233,253,0.4);\\n position: absolute;\\n z-index: 2;\\n}\\n.ace_dark.ace_editor.ace_autocomplete .ace_line-hover {\\n border: 1px solid rgba(109, 150, 13, 0.8);\\n background: rgba(58, 103, 78, 0.62);\\n}\\n.ace_completion-meta {\\n opacity: 0.5;\\n margin-left: 0.9em;\\n}\\n.ace_completion-message {\\n margin-left: 0.9em;\\n color: blue;\\n}\\n.ace_editor.ace_autocomplete .ace_completion-highlight{\\n color: #2d69c7;\\n}\\n.ace_dark.ace_editor.ace_autocomplete .ace_completion-highlight{\\n color: #93ca12;\\n}\\n.ace_editor.ace_autocomplete {\\n width: 300px;\\n z-index: 200000;\\n border: 1px lightgray solid;\\n position: fixed;\\n box-shadow: 2px 3px 5px rgba(0,0,0,.2);\\n line-height: 1.4;\\n background: #fefefe;\\n color: #111;\\n}\\n.ace_dark.ace_editor.ace_autocomplete {\\n border: 1px #484747 solid;\\n box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.51);\\n line-height: 1.4;\\n background: #25282c;\\n color: #c1c1c1;\\n}\\n.ace_autocomplete .ace_text-layer {\\n width: calc(100% - 8px);\\n}\\n.ace_autocomplete .ace_line {\\n display: flex;\\n align-items: center;\\n}\\n.ace_autocomplete .ace_line > * {\\n min-width: 0;\\n flex: 0 0 auto;\\n}\\n.ace_autocomplete .ace_line .ace_ {\\n flex: 0 1 auto;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n}\\n.ace_autocomplete .ace_completion-spacer {\\n flex: 1;\\n}\\n.ace_autocomplete.ace_loading:after {\\n content: \"\";\\n position: absolute;\\n top: 0px;\\n height: 2px;\\n width: 8%;\\n background: blue;\\n z-index: 100;\\n animation: ace_progress 3s infinite linear;\\n animation-delay: 300ms;\\n transform: translateX(-100%) scaleX(1);\\n}\\n@keyframes ace_progress {\\n 0% { transform: translateX(-100%) scaleX(1) }\\n 50% { transform: translateX(625%) scaleX(2) } \\n 100% { transform: translateX(1500%) scaleX(3) } \\n}\\n@media (prefers-reduced-motion) {\\n .ace_autocomplete.ace_loading:after {\\n transform: translateX(625%) scaleX(2);\\n animation: none;\\n }\\n}\\n',\"autocompletion.css\",!1),t.AcePopup=m,t.$singleLineEditor=v,t.getAriaId=c}),ace.define(\"ace/autocomplete/inline_screenreader\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r=function(){function e(e){this.editor=e,this.screenReaderDiv=document.createElement(\"div\"),this.screenReaderDiv.classList.add(\"ace_screenreader-only\"),this.editor.container.appendChild(this.screenReaderDiv)}return e.prototype.setScreenReaderContent=function(e){!this.popup&&this.editor.completer&&this.editor.completer.popup&&(this.popup=this.editor.completer.popup,this.popup.renderer.on(\"afterRender\",function(){var e=this.popup.getRow(),t=this.popup.renderer.$textLayer,n=t.element.childNodes[e-t.config.firstRow];if(n){var r=\"doc-tooltip \";for(var i=0;i<this._lines.length;i++)r+=\"ace-inline-screenreader-line-\".concat(i,\" \");n.setAttribute(\"aria-describedby\",r)}}.bind(this)));while(this.screenReaderDiv.firstChild)this.screenReaderDiv.removeChild(this.screenReaderDiv.firstChild);this._lines=e.split(/\\r\\n|\\r|\\n/);var t=this.createCodeBlock();this.screenReaderDiv.appendChild(t)},e.prototype.destroy=function(){this.screenReaderDiv.remove()},e.prototype.createCodeBlock=function(){var e=document.createElement(\"pre\");e.setAttribute(\"id\",\"ace-inline-screenreader\");for(var t=0;t<this._lines.length;t++){var n=document.createElement(\"code\");n.setAttribute(\"id\",\"ace-inline-screenreader-line-\".concat(t));var r=document.createTextNode(this._lines[t]);n.appendChild(r),e.appendChild(n)}return e},e}();t.AceInlineScreenReader=r}),ace.define(\"ace/autocomplete/inline\",[\"require\",\"exports\",\"module\",\"ace/snippets\",\"ace/autocomplete/inline_screenreader\"],function(e,t,n){\"use strict\";var r=e(\"../snippets\").snippetManager,i=e(\"./inline_screenreader\").AceInlineScreenReader,s=function(){function e(){this.editor=null}return e.prototype.show=function(e,t,n){n=n||\"\",e&&this.editor&&this.editor!==e&&(this.hide(),this.editor=null,this.inlineScreenReader=null);if(!e||!t)return!1;this.inlineScreenReader||(this.inlineScreenReader=new i(e));var s=t.snippet?r.getDisplayTextForSnippet(e,t.snippet):t.value;return t.hideInlinePreview||!s||!s.startsWith(n)?!1:(this.editor=e,this.inlineScreenReader.setScreenReaderContent(s),s=s.slice(n.length),s===\"\"?e.removeGhostText():e.setGhostText(s),!0)},e.prototype.isOpen=function(){return this.editor?!!this.editor.renderer.$ghostText:!1},e.prototype.hide=function(){return this.editor?(this.editor.removeGhostText(),!0):!1},e.prototype.destroy=function(){this.hide(),this.editor=null,this.inlineScreenReader&&(this.inlineScreenReader.destroy(),this.inlineScreenReader=null)},e}();t.AceInline=s}),ace.define(\"ace/autocomplete/util\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.parForEach=function(e,t,n){var r=0,i=e.length;i===0&&n();for(var s=0;s<i;s++)t(e[s],function(e,t){r++,r===i&&n(e,t)})};var r=/[a-zA-Z_0-9\\$\\-\\u00A2-\\u2000\\u2070-\\uFFFF]/;t.retrievePrecedingIdentifier=function(e,t,n){n=n||r;var i=[];for(var s=t-1;s>=0;s--){if(!n.test(e[s]))break;i.push(e[s])}return i.reverse().join(\"\")},t.retrieveFollowingIdentifier=function(e,t,n){n=n||r;var i=[];for(var s=t;s<e.length;s++){if(!n.test(e[s]))break;i.push(e[s])}return i},t.getCompletionPrefix=function(e){var t=e.getCursorPosition(),n=e.session.getLine(t.row),r;return e.completers.forEach(function(e){e.identifierRegexps&&e.identifierRegexps.forEach(function(e){!r&&e&&(r=this.retrievePrecedingIdentifier(n,t.column,e))}.bind(this))}.bind(this)),r||this.retrievePrecedingIdentifier(n,t.column)},t.triggerAutocomplete=function(e,t){var t=t==null?e.session.getPrecedingCharacter():t;return e.completers.some(function(e){if(e.triggerCharacters&&Array.isArray(e.triggerCharacters))return e.triggerCharacters.includes(t)})}}),ace.define(\"ace/autocomplete\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\",\"ace/autocomplete/popup\",\"ace/autocomplete/inline\",\"ace/autocomplete/popup\",\"ace/autocomplete/util\",\"ace/lib/lang\",\"ace/lib/dom\",\"ace/snippets\",\"ace/config\",\"ace/lib/event\",\"ace/lib/scroll\"],function(e,t,n){\"use strict\";var r=e(\"./keyboard/hash_handler\").HashHandler,i=e(\"./autocomplete/popup\").AcePopup,s=e(\"./autocomplete/inline\").AceInline,o=e(\"./autocomplete/popup\").getAriaId,u=e(\"./autocomplete/util\"),a=e(\"./lib/lang\"),f=e(\"./lib/dom\"),l=e(\"./snippets\").snippetManager,c=e(\"./config\"),h=e(\"./lib/event\"),p=e(\"./lib/scroll\").preventParentScroll,d=function(e,t){t.completer&&t.completer.destroy()},v=function(){function e(){this.autoInsert=!1,this.autoSelect=!0,this.autoShown=!1,this.exactMatch=!1,this.inlineEnabled=!1,this.keyboardHandler=new r,this.keyboardHandler.bindKeys(this.commands),this.parentNode=null,this.setSelectOnHover=!1,this.hasSeen=new Set,this.showLoadingState=!1,this.stickySelectionDelay=500,this.blurListener=this.blurListener.bind(this),this.changeListener=this.changeListener.bind(this),this.mousedownListener=this.mousedownListener.bind(this),this.mousewheelListener=this.mousewheelListener.bind(this),this.onLayoutChange=this.onLayoutChange.bind(this),this.changeTimer=a.delayedCall(function(){this.updateCompletions(!0)}.bind(this)),this.tooltipTimer=a.delayedCall(this.updateDocTooltip.bind(this),50),this.popupTimer=a.delayedCall(this.$updatePopupPosition.bind(this),50),this.stickySelectionTimer=a.delayedCall(function(){this.stickySelection=!0}.bind(this),this.stickySelectionDelay),this.$firstOpenTimer=a.delayedCall(function(){var t=this.completionProvider&&this.completionProvider.initialPosition;if(this.autoShown||this.popup&&this.popup.isOpen||!t||this.editor.completers.length===0)return;this.completions=new g(e.completionsForLoading),this.openPopup(this.editor,t.prefix,!1),this.popup.renderer.setStyle(\"ace_loading\",!0)}.bind(this),this.stickySelectionDelay)}return Object.defineProperty(e,\"completionsForLoading\",{get:function(){return[{caption:c.nls(\"autocomplete.loading\",\"Loading...\"),value:\"\"}]},enumerable:!1,configurable:!0}),e.prototype.$init=function(){return this.popup=new i(this.parentNode||document.body||document.documentElement),this.popup.on(\"click\",function(e){this.insertMatch(),e.stop()}.bind(this)),this.popup.focus=this.editor.focus.bind(this.editor),this.popup.on(\"show\",this.$onPopupShow.bind(this)),this.popup.on(\"hide\",this.$onHidePopup.bind(this)),this.popup.on(\"select\",this.$onPopupChange.bind(this)),h.addListener(this.popup.container,\"mouseout\",this.mouseOutListener.bind(this)),this.popup.on(\"changeHoverMarker\",this.tooltipTimer.bind(null,null)),this.popup.renderer.on(\"afterRender\",this.$onPopupRender.bind(this)),this.popup},e.prototype.$initInline=function(){if(!this.inlineEnabled||this.inlineRenderer)return;return this.inlineRenderer=new s,this.inlineRenderer},e.prototype.getPopup=function(){return this.popup||this.$init()},e.prototype.$onHidePopup=function(){this.inlineRenderer&&this.inlineRenderer.hide(),this.hideDocTooltip(),this.stickySelectionTimer.cancel(),this.popupTimer.cancel(),this.stickySelection=!1},e.prototype.$seen=function(e){!this.hasSeen.has(e)&&e&&e.completer&&e.completer.onSeen&&typeof e.completer.onSeen==\"function\"&&(e.completer.onSeen(this.editor,e),this.hasSeen.add(e))},e.prototype.$onPopupChange=function(e){if(this.inlineRenderer&&this.inlineEnabled){var t=e?null:this.popup.getData(this.popup.getRow());this.$updateGhostText(t);if(this.popup.isMouseOver&&this.setSelectOnHover){this.tooltipTimer.call(null,null);return}this.popupTimer.schedule(),this.tooltipTimer.schedule()}else this.popupTimer.call(null,null),this.tooltipTimer.call(null,null)},e.prototype.$updateGhostText=function(e){var t=this.base.row,n=this.base.column,r=this.editor.getCursorPosition().column,i=this.editor.session.getLine(t).slice(n,r);this.inlineRenderer.show(this.editor,e,i)?this.$seen(e):this.inlineRenderer.hide()},e.prototype.$onPopupRender=function(){var e=this.inlineRenderer&&this.inlineEnabled;if(this.completions&&this.completions.filtered&&this.completions.filtered.length>0)for(var t=this.popup.getFirstVisibleRow();t<=this.popup.getLastVisibleRow();t++){var n=this.popup.getData(t);n&&(!e||n.hideInlinePreview)&&this.$seen(n)}},e.prototype.$onPopupShow=function(e){this.$onPopupChange(e),this.stickySelection=!1,this.stickySelectionDelay>=0&&this.stickySelectionTimer.schedule(this.stickySelectionDelay)},e.prototype.observeLayoutChanges=function(){if(this.$elements||!this.editor)return;window.addEventListener(\"resize\",this.onLayoutChange,{passive:!0}),window.addEventListener(\"wheel\",this.mousewheelListener);var e=this.editor.container.parentNode,t=[];while(e)t.push(e),e.addEventListener(\"scroll\",this.onLayoutChange,{passive:!0}),e=e.parentNode;this.$elements=t},e.prototype.unObserveLayoutChanges=function(){var e=this;window.removeEventListener(\"resize\",this.onLayoutChange,{passive:!0}),window.removeEventListener(\"wheel\",this.mousewheelListener),this.$elements&&this.$elements.forEach(function(t){t.removeEventListener(\"scroll\",e.onLayoutChange,{passive:!0})}),this.$elements=null},e.prototype.onLayoutChange=function(){if(!this.popup.isOpen)return this.unObserveLayoutChanges();this.$updatePopupPosition(),this.updateDocTooltip()},e.prototype.$updatePopupPosition=function(){var e=this.editor,t=e.renderer,n=t.layerConfig.lineHeight,r=t.$cursorLayer.getPixelPosition(this.base,!0);r.left-=this.popup.getTextLeftOffset();var i=e.container.getBoundingClientRect();r.top+=i.top-t.layerConfig.offset,r.left+=i.left-e.renderer.scrollLeft,r.left+=t.gutterWidth;var s={top:r.top,left:r.left};t.$ghostText&&t.$ghostTextWidget&&this.base.row===t.$ghostText.position.row&&(s.top+=t.$ghostTextWidget.el.offsetHeight);var o=e.container.getBoundingClientRect().bottom-n,u=o<s.top?{top:o,left:s.left}:s;if(this.popup.tryShow(u,n,\"bottom\"))return;if(this.popup.tryShow(r,n,\"top\"))return;this.popup.show(r,n)},e.prototype.openPopup=function(e,t,n){this.$firstOpenTimer.cancel(),this.popup||this.$init(),this.inlineEnabled&&!this.inlineRenderer&&this.$initInline(),this.popup.autoSelect=this.autoSelect,this.popup.setSelectOnHover(this.setSelectOnHover);var r=this.popup.getRow(),i=this.popup.data[r];this.popup.setData(this.completions.filtered,this.completions.filterText),this.editor.textInput.setAriaOptions&&this.editor.textInput.setAriaOptions({activeDescendant:o(this.popup.getRow()),inline:this.inlineEnabled}),e.keyBinding.addKeyboardHandler(this.keyboardHandler);var s;this.stickySelection&&(s=this.popup.data.indexOf(i));if(!s||s===-1)s=0;this.popup.setRow(this.autoSelect?s:-1),s===r&&i!==this.completions.filtered[s]&&this.$onPopupChange();var u=this.inlineRenderer&&this.inlineEnabled;if(s===r&&u){var a=this.popup.getData(this.popup.getRow());this.$updateGhostText(a)}n||(this.popup.setTheme(e.getTheme()),this.popup.setFontSize(e.getFontSize()),this.$updatePopupPosition(),this.tooltipNode&&this.updateDocTooltip()),this.changeTimer.cancel(),this.observeLayoutChanges()},e.prototype.detach=function(){this.editor&&(this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler),this.editor.off(\"changeSelection\",this.changeListener),this.editor.off(\"blur\",this.blurListener),this.editor.off(\"mousedown\",this.mousedownListener),this.editor.off(\"mousewheel\",this.mousewheelListener)),this.$firstOpenTimer.cancel(),this.changeTimer.cancel(),this.hideDocTooltip(),this.completionProvider&&this.completionProvider.detach(),this.popup&&this.popup.isOpen&&this.popup.hide(),this.popup&&this.popup.renderer&&this.popup.renderer.off(\"afterRender\",this.$onPopupRender),this.base&&this.base.detach(),this.activated=!1,this.completionProvider=this.completions=this.base=null,this.unObserveLayoutChanges()},e.prototype.changeListener=function(e){var t=this.editor.selection.lead;(t.row!=this.base.row||t.column<this.base.column)&&this.detach(),this.activated?this.changeTimer.schedule():this.detach()},e.prototype.blurListener=function(e){var t=document.activeElement,n=this.editor.textInput.getElement(),r=e.relatedTarget&&this.tooltipNode&&this.tooltipNode.contains(e.relatedTarget),i=this.popup&&this.popup.container;t!=n&&t.parentNode!=i&&!r&&t!=this.tooltipNode&&e.relatedTarget!=n&&this.detach()},e.prototype.mousedownListener=function(e){this.detach()},e.prototype.mousewheelListener=function(e){this.popup&&!this.popup.isMouseOver&&this.detach()},e.prototype.mouseOutListener=function(e){this.popup.isOpen&&this.$updatePopupPosition()},e.prototype.goTo=function(e){this.popup.goTo(e)},e.prototype.insertMatch=function(e,t){e||(e=this.popup.getData(this.popup.getRow()));if(!e)return!1;if(e.value===\"\")return this.detach();var n=this.completions,r=this.getCompletionProvider().insertMatch(this.editor,e,n.filterText,t);return this.completions==n&&this.detach(),r},e.prototype.showPopup=function(e,t){this.editor&&this.detach(),this.activated=!0,this.editor=e,e.completer!=this&&(e.completer&&e.completer.detach(),e.completer=this),e.on(\"changeSelection\",this.changeListener),e.on(\"blur\",this.blurListener),e.on(\"mousedown\",this.mousedownListener),e.on(\"mousewheel\",this.mousewheelListener),this.updateCompletions(!1,t)},e.prototype.getCompletionProvider=function(e){return this.completionProvider||(this.completionProvider=new m(e)),this.completionProvider},e.prototype.gatherCompletions=function(e,t){return this.getCompletionProvider().gatherCompletions(e,t)},e.prototype.updateCompletions=function(t,n){if(t&&this.base&&this.completions){var r=this.editor.getCursorPosition(),i=this.editor.session.getTextRange({start:this.base,end:r});if(i==this.completions.filterText)return;this.completions.setFilter(i);if(!this.completions.filtered.length)return this.detach();if(this.completions.filtered.length==1&&this.completions.filtered[0].value==i&&!this.completions.filtered[0].snippet)return this.detach();this.openPopup(this.editor,i,t);return}if(n&&n.matches){var r=this.editor.getSelectionRange().start;return this.base=this.editor.session.doc.createAnchor(r.row,r.column),this.base.$insertRight=!0,this.completions=new g(n.matches),this.getCompletionProvider().completions=this.completions,this.openPopup(this.editor,\"\",t)}var s=this.editor.getSession(),r=this.editor.getCursorPosition(),i=u.getCompletionPrefix(this.editor);this.base=s.doc.createAnchor(r.row,r.column-i.length),this.base.$insertRight=!0;var o={exactMatch:this.exactMatch,ignoreCaption:this.ignoreCaption};this.getCompletionProvider({prefix:i,pos:r}).provideCompletions(this.editor,o,function(n,r,i){var s=r.filtered,o=u.getCompletionPrefix(this.editor);this.$firstOpenTimer.cancel();if(i){if(!s.length){var a=!this.autoShown&&this.emptyMessage;typeof a==\"function\"&&(a=this.emptyMessage(o));if(a){var f=[{caption:a,value:\"\"}];this.completions=new g(f),this.openPopup(this.editor,o,t),this.popup.renderer.setStyle(\"ace_loading\",!1),this.popup.renderer.setStyle(\"ace_empty-message\",!0);return}return this.detach()}if(s.length==1&&s[0].value==o&&!s[0].snippet)return this.detach();if(this.autoInsert&&!this.autoShown&&s.length==1)return this.insertMatch(s[0])}this.completions=!i&&this.showLoadingState?new g(e.completionsForLoading.concat(s),r.filterText):r,this.openPopup(this.editor,o,t),this.popup.renderer.setStyle(\"ace_empty-message\",!1),this.popup.renderer.setStyle(\"ace_loading\",!i)}.bind(this)),this.showLoadingState&&!this.autoShown&&(!this.popup||!this.popup.isOpen)&&this.$firstOpenTimer.delay(this.stickySelectionDelay/2)},e.prototype.cancelContextMenu=function(){this.editor.$mouseHandler.cancelContextMenu()},e.prototype.updateDocTooltip=function(){var e=this.popup,t=this.completions.filtered,n=t&&(t[e.getHoveredRow()]||t[e.getRow()]),r=null;if(!n||!this.editor||!this.popup.isOpen)return this.hideDocTooltip();var i=this.editor.completers.length;for(var s=0;s<i;s++){var o=this.editor.completers[s];if(o.getDocTooltip&&n.completerId===o.id){r=o.getDocTooltip(n);break}}!r&&typeof n!=\"string\"&&(r=n),typeof r==\"string\"&&(r={docText:r});if(!r||!r.docHTML&&!r.docText)return this.hideDocTooltip();this.showDocTooltip(r)},e.prototype.showDocTooltip=function(e){this.tooltipNode||(this.tooltipNode=f.createElement(\"div\"),this.tooltipNode.style.margin=\"0\",this.tooltipNode.style.pointerEvents=\"auto\",this.tooltipNode.style.overscrollBehavior=\"contain\",this.tooltipNode.tabIndex=-1,this.tooltipNode.onblur=this.blurListener.bind(this),this.tooltipNode.onclick=this.onTooltipClick.bind(this),this.tooltipNode.id=\"doc-tooltip\",this.tooltipNode.setAttribute(\"role\",\"tooltip\"),this.tooltipNode.addEventListener(\"wheel\",p));var t=this.editor.renderer.theme;this.tooltipNode.className=\"ace_tooltip ace_doc-tooltip \"+(t.isDark?\"ace_dark \":\"\")+(t.cssClass||\"\");var n=this.tooltipNode;e.docHTML?n.innerHTML=e.docHTML:e.docText&&(n.textContent=e.docText),n.parentNode||this.popup.container.appendChild(this.tooltipNode);var r=this.popup,i=r.container.getBoundingClientRect();n.style.top=r.container.style.top,n.style.bottom=r.container.style.bottom,n.style.display=\"block\",window.innerWidth-i.right<320?i.left<320?r.isTopdown?(n.style.top=i.bottom+\"px\",n.style.left=i.left+\"px\",n.style.right=\"\",n.style.bottom=\"\"):(n.style.top=r.container.offsetTop-n.offsetHeight+\"px\",n.style.left=i.left+\"px\",n.style.right=\"\",n.style.bottom=\"\"):(n.style.right=window.innerWidth-i.left+\"px\",n.style.left=\"\"):(n.style.left=i.right+1+\"px\",n.style.right=\"\")},e.prototype.hideDocTooltip=function(){this.tooltipTimer.cancel();if(!this.tooltipNode)return;var e=this.tooltipNode;!this.editor.isFocused()&&document.activeElement==e&&this.editor.focus(),this.tooltipNode=null,e.parentNode&&e.parentNode.removeChild(e)},e.prototype.onTooltipClick=function(e){var t=e.target;while(t&&t!=this.tooltipNode){if(t.nodeName==\"A\"&&t.href){t.rel=\"noreferrer\",t.target=\"_blank\";break}t=t.parentNode}},e.prototype.destroy=function(){this.detach();if(this.popup){this.popup.destroy();var e=this.popup.container;e&&e.parentNode&&e.parentNode.removeChild(e)}this.editor&&this.editor.completer==this&&(this.editor.off(\"destroy\",d),this.editor.completer=null),this.inlineRenderer=this.popup=this.editor=null},e}();v.prototype.commands={Up:function(e){e.completer.goTo(\"up\")},Down:function(e){e.completer.goTo(\"down\")},\"Ctrl-Up|Ctrl-Home\":function(e){e.completer.goTo(\"start\")},\"Ctrl-Down|Ctrl-End\":function(e){e.completer.goTo(\"end\")},Esc:function(e){e.completer.detach()},Return:function(e){return e.completer.insertMatch()},\"Shift-Return\":function(e){e.completer.insertMatch(null,{deleteSuffix:!0})},Tab:function(e){var t=e.completer.insertMatch();if(!!t||!!e.tabstopManager)return t;e.completer.goTo(\"down\")},Backspace:function(e){e.execCommand(\"backspace\");var t=u.getCompletionPrefix(e);!t&&e.completer&&e.completer.detach()},PageUp:function(e){e.completer.popup.gotoPageUp()},PageDown:function(e){e.completer.popup.gotoPageDown()}},v.for=function(e){return e.completer instanceof v?e.completer:(e.completer&&(e.completer.destroy(),e.completer=null),c.get(\"sharedPopups\")?(v.$sharedInstance||(v.$sharedInstance=new v),e.completer=v.$sharedInstance):(e.completer=new v,e.once(\"destroy\",d)),e.completer)},v.startCommand={name:\"startAutocomplete\",exec:function(e,t){var n=v.for(e);n.autoInsert=!1,n.autoSelect=!0,n.autoShown=!1,n.showPopup(e,t),n.cancelContextMenu()},bindKey:\"Ctrl-Space|Ctrl-Shift-Space|Alt-Space\"};var m=function(){function e(e){this.initialPosition=e,this.active=!0}return e.prototype.insertByIndex=function(e,t,n){return!this.completions||!this.completions.filtered?!1:this.insertMatch(e,this.completions.filtered[t],n)},e.prototype.insertMatch=function(e,t,n){if(!t)return!1;e.startOperation({command:{name:\"insertMatch\"}});if(t.completer&&t.completer.insertMatch)t.completer.insertMatch(e,t);else{if(!this.completions)return!1;var r=this.completions.filterText.length,i=0;t.range&&t.range.start.row===t.range.end.row&&(r-=this.initialPosition.prefix.length,r+=this.initialPosition.pos.column-t.range.start.column,i+=t.range.end.column-this.initialPosition.pos.column);if(r||i){var s;e.selection.getAllRanges?s=e.selection.getAllRanges():s=[e.getSelectionRange()];for(var o=0,u;u=s[o];o++)u.start.column-=r,u.end.column+=i,e.session.remove(u)}t.snippet?l.insertSnippet(e,t.snippet):this.$insertString(e,t),t.completer&&t.completer.onInsert&&typeof t.completer.onInsert==\"function\"&&t.completer.onInsert(e,t),t.command&&t.command===\"startAutocomplete\"&&e.execCommand(t.command)}return e.endOperation(),!0},e.prototype.$insertString=function(e,t){var n=t.value||t;e.execCommand(\"insertstring\",n)},e.prototype.gatherCompletions=function(e,t){var n=e.getSession(),r=e.getCursorPosition(),i=u.getCompletionPrefix(e),s=[];this.completers=e.completers;var o=e.completers.length;return e.completers.forEach(function(a,f){a.getCompletions(e,n,r,i,function(n,r){a.hideInlinePreview&&(r=r.map(function(e){return Object.assign(e,{hideInlinePreview:a.hideInlinePreview})})),!n&&r&&(s=s.concat(r)),t(null,{prefix:u.getCompletionPrefix(e),matches:s,finished:--o===0})})}),!0},e.prototype.provideCompletions=function(e,t,n){var r=function(e){var r=e.prefix,i=e.matches;this.completions=new g(i),t.exactMatch&&(this.completions.exactMatch=!0),t.ignoreCaption&&(this.completions.ignoreCaption=!0),this.completions.setFilter(r),(e.finished||this.completions.filtered.length)&&n(null,this.completions,e.finished)}.bind(this),i=!0,s=null;this.gatherCompletions(e,function(e,t){if(!this.active)return;e&&(n(e,[],!0),this.detach());var o=t.prefix;if(o.indexOf(t.prefix)!==0)return;if(i){s=t;return}r(t)}.bind(this)),i=!1;if(s){var o=s;s=null,r(o)}},e.prototype.detach=function(){this.active=!1,this.completers&&this.completers.forEach(function(e){typeof e.cancel==\"function\"&&e.cancel()})},e}(),g=function(){function e(e,t){this.all=e,this.filtered=e,this.filterText=t||\"\",this.exactMatch=!1,this.ignoreCaption=!1}return e.prototype.setFilter=function(e){if(e.length>this.filterText&&e.lastIndexOf(this.filterText,0)===0)var t=this.filtered;else var t=this.all;this.filterText=e,t=this.filterCompletions(t,this.filterText),t=t.sort(function(e,t){return t.exactMatch-e.exactMatch||t.$score-e.$score||(e.caption||e.value).localeCompare(t.caption||t.value)});var n=null;t=t.filter(function(e){var t=e.snippet||e.caption||e.value;return t===n?!1:(n=t,!0)}),this.filtered=t},e.prototype.filterCompletions=function(e,t){var n=[],r=t.toUpperCase(),i=t.toLowerCase();e:for(var s=0,o;o=e[s];s++){var u=!this.ignoreCaption&&o.caption||o.value||o.snippet;if(!u)continue;var a=-1,f=0,l=0,c,h;if(this.exactMatch){if(t!==u.substr(0,t.length))continue e}else{var p=u.toLowerCase().indexOf(i);if(p>-1)l=p;else for(var d=0;d<t.length;d++){var v=u.indexOf(i[d],a+1),m=u.indexOf(r[d],a+1);c=v>=0?m<0||v<m?v:m:m;if(c<0)continue e;h=c-a-1,h>0&&(a===-1&&(l+=10),l+=h,f|=1<<d),a=c}}o.matchMask=f,o.exactMatch=l?0:1,o.$score=(o.score||0)-l,n.push(o)}return n},e}();t.Autocomplete=v,t.CompletionProvider=m,t.FilteredList=g}),ace.define(\"ace/autocomplete/text_completer\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){function s(e,t){var n=e.getTextRange(r.fromPoints({row:0,column:0},t));return n.split(i).length-1}function o(e,t){var n=s(e,t),r=e.getValue().split(i),o=Object.create(null),u=r[n];return r.forEach(function(e,t){if(!e||e===u)return;var i=Math.abs(n-t),s=r.length-i;o[e]?o[e]=Math.max(s,o[e]):o[e]=s}),o}var r=e(\"../range\").Range,i=/[^a-zA-Z_0-9\\$\\-\\u00C0-\\u1FFF\\u2C00-\\uD7FF\\w]+/;t.getCompletions=function(e,t,n,r,i){var s=o(t,n),u=Object.keys(s);i(null,u.map(function(e){return{caption:e,value:e,score:s[e],meta:\"local\"}}))}}),ace.define(\"ace/ext/language_tools\",[\"require\",\"exports\",\"module\",\"ace/snippets\",\"ace/autocomplete\",\"ace/config\",\"ace/lib/lang\",\"ace/autocomplete/util\",\"ace/autocomplete/text_completer\",\"ace/editor\",\"ace/config\"],function(e,t,n){\"use strict\";var r=e(\"../snippets\").snippetManager,i=e(\"../autocomplete\").Autocomplete,s=e(\"../config\"),o=e(\"../lib/lang\"),u=e(\"../autocomplete/util\"),a=e(\"../autocomplete/text_completer\"),f={getCompletions:function(e,t,n,r,i){if(t.$mode.completer)return t.$mode.completer.getCompletions(e,t,n,r,i);var s=e.session.getState(n.row),o=t.$mode.getCompletions(s,t,n,r);o=o.map(function(e){return e.completerId=f.id,e}),i(null,o)},id:\"keywordCompleter\"},l=function(e){var t={};return e.replace(/\\${(\\d+)(:(.*?))?}/g,function(e,n,r,i){return t[n]=i||\"\"}).replace(/\\$(\\d+?)/g,function(e,n){return t[n]})},c={getCompletions:function(e,t,n,i,s){var o=[],u=t.getTokenAt(n.row,n.column);u&&u.type.match(/(tag-name|tag-open|tag-whitespace|attribute-name|attribute-value)\\.xml$/)?o.push(\"html-tag\"):o=r.getActiveScopes(e);var a=r.snippetMap,f=[];o.forEach(function(e){var t=a[e]||[];for(var n=t.length;n--;){var r=t[n],i=r.name||r.tabTrigger;if(!i)continue;f.push({caption:i,snippet:r.content,meta:r.tabTrigger&&!r.name?r.tabTrigger+\"\\u21e5 \":\"snippet\",completerId:c.id})}},this),s(null,f)},getDocTooltip:function(e){e.snippet&&!e.docHTML&&(e.docHTML=[\"<b>\",o.escapeHTML(e.caption),\"</b>\",\"<hr></hr>\",o.escapeHTML(l(e.snippet))].join(\"\"))},id:\"snippetCompleter\"},h=[c,a,f];t.setCompleters=function(e){h.length=0,e&&h.push.apply(h,e)},t.addCompleter=function(e){h.push(e)},t.textCompleter=a,t.keyWordCompleter=f,t.snippetCompleter=c;var p={name:\"expandSnippet\",exec:function(e){return r.expandWithTab(e)},bindKey:\"Tab\"},d=function(e,t){v(t.session.$mode)},v=function(e){typeof e==\"string\"&&(e=s.$modes[e]);if(!e)return;r.files||(r.files={}),m(e.$id,e.snippetFileId),e.modes&&e.modes.forEach(v)},m=function(e,t){if(!t||!e||r.files[e])return;r.files[e]={},s.loadModule(t,function(t){if(!t)return;r.files[e]=t,!t.snippets&&t.snippetText&&(t.snippets=r.parseSnippetFile(t.snippetText)),r.register(t.snippets||[],t.scope),t.includeScopes&&(r.snippetMap[t.scope].includeScopes=t.includeScopes,t.includeScopes.forEach(function(e){v(\"ace/mode/\"+e)}))})},g=function(e){var t=e.editor,n=t.completer&&t.completer.activated;if(e.command.name===\"backspace\")n&&!u.getCompletionPrefix(t)&&t.completer.detach();else if(e.command.name===\"insertstring\"&&!n){y=e;var r=e.editor.$liveAutocompletionDelay;r?b.delay(r):w(e)}},y,b=o.delayedCall(function(){w(y)},0),w=function(e){var t=e.editor,n=u.getCompletionPrefix(t),r=e.args,s=u.triggerAutocomplete(t,r);if(n&&n.length>=t.$liveAutocompletionThreshold||s){var o=i.for(t);o.autoShown=!0,o.showPopup(t)}},E=e(\"../editor\").Editor;e(\"../config\").defineOptions(E.prototype,\"editor\",{enableBasicAutocompletion:{set:function(e){e?(this.completers||(this.completers=Array.isArray(e)?e:h),this.commands.addCommand(i.startCommand)):this.commands.removeCommand(i.startCommand)},value:!1},enableLiveAutocompletion:{set:function(e){e?(this.completers||(this.completers=Array.isArray(e)?e:h),this.commands.on(\"afterExec\",g)):this.commands.off(\"afterExec\",g)},value:!1},liveAutocompletionDelay:{initialValue:0},liveAutocompletionThreshold:{initialValue:0},enableSnippets:{set:function(e){e?(this.commands.addCommand(p),this.on(\"changeMode\",d),d(null,this)):(this.commands.removeCommand(p),this.off(\"changeMode\",d))},value:!1}})}); (function() {\n ace.require([\"ace/ext/language_tools\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n ","ace.define(\"ace/ext/searchbox-css\",[\"require\",\"exports\",\"module\"],function(e,t,n){n.exports='\\n\\n/* ------------------------------------------------------------------------------------------\\n * Editor Search Form\\n * --------------------------------------------------------------------------------------- */\\n.ace_search {\\n background-color: #ddd;\\n color: #666;\\n border: 1px solid #cbcbcb;\\n border-top: 0 none;\\n overflow: hidden;\\n margin: 0;\\n padding: 4px 6px 0 4px;\\n position: absolute;\\n top: 0;\\n z-index: 99;\\n white-space: normal;\\n}\\n.ace_search.left {\\n border-left: 0 none;\\n border-radius: 0px 0px 5px 0px;\\n left: 0;\\n}\\n.ace_search.right {\\n border-radius: 0px 0px 0px 5px;\\n border-right: 0 none;\\n right: 0;\\n}\\n\\n.ace_search_form, .ace_replace_form {\\n margin: 0 20px 4px 0;\\n overflow: hidden;\\n line-height: 1.9;\\n}\\n.ace_replace_form {\\n margin-right: 0;\\n}\\n.ace_search_form.ace_nomatch {\\n outline: 1px solid red;\\n}\\n\\n.ace_search_field {\\n border-radius: 3px 0 0 3px;\\n background-color: white;\\n color: black;\\n border: 1px solid #cbcbcb;\\n border-right: 0 none;\\n outline: 0;\\n padding: 0;\\n font-size: inherit;\\n margin: 0;\\n line-height: inherit;\\n padding: 0 6px;\\n min-width: 17em;\\n vertical-align: top;\\n min-height: 1.8em;\\n box-sizing: content-box;\\n}\\n.ace_searchbtn {\\n border: 1px solid #cbcbcb;\\n line-height: inherit;\\n display: inline-block;\\n padding: 0 6px;\\n background: #fff;\\n border-right: 0 none;\\n border-left: 1px solid #dcdcdc;\\n cursor: pointer;\\n margin: 0;\\n position: relative;\\n color: #666;\\n}\\n.ace_searchbtn:last-child {\\n border-radius: 0 3px 3px 0;\\n border-right: 1px solid #cbcbcb;\\n}\\n.ace_searchbtn:disabled {\\n background: none;\\n cursor: default;\\n}\\n.ace_searchbtn:hover {\\n background-color: #eef1f6;\\n}\\n.ace_searchbtn.prev, .ace_searchbtn.next {\\n padding: 0px 0.7em\\n}\\n.ace_searchbtn.prev:after, .ace_searchbtn.next:after {\\n content: \"\";\\n border: solid 2px #888;\\n width: 0.5em;\\n height: 0.5em;\\n border-width: 2px 0 0 2px;\\n display:inline-block;\\n transform: rotate(-45deg);\\n}\\n.ace_searchbtn.next:after {\\n border-width: 0 2px 2px 0 ;\\n}\\n.ace_searchbtn_close {\\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAcCAYAAABRVo5BAAAAZ0lEQVR42u2SUQrAMAhDvazn8OjZBilCkYVVxiis8H4CT0VrAJb4WHT3C5xU2a2IQZXJjiQIRMdkEoJ5Q2yMqpfDIo+XY4k6h+YXOyKqTIj5REaxloNAd0xiKmAtsTHqW8sR2W5f7gCu5nWFUpVjZwAAAABJRU5ErkJggg==) no-repeat 50% 0;\\n border-radius: 50%;\\n border: 0 none;\\n color: #656565;\\n cursor: pointer;\\n font: 16px/16px Arial;\\n padding: 0;\\n height: 14px;\\n width: 14px;\\n top: 9px;\\n right: 7px;\\n position: absolute;\\n}\\n.ace_searchbtn_close:hover {\\n background-color: #656565;\\n background-position: 50% 100%;\\n color: white;\\n}\\n\\n.ace_button {\\n margin-left: 2px;\\n cursor: pointer;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n -o-user-select: none;\\n -ms-user-select: none;\\n user-select: none;\\n overflow: hidden;\\n opacity: 0.7;\\n border: 1px solid rgba(100,100,100,0.23);\\n padding: 1px;\\n box-sizing: border-box!important;\\n color: black;\\n}\\n\\n.ace_button:hover {\\n background-color: #eee;\\n opacity:1;\\n}\\n.ace_button:active {\\n background-color: #ddd;\\n}\\n\\n.ace_button.checked {\\n border-color: #3399ff;\\n opacity:1;\\n}\\n\\n.ace_search_options{\\n margin-bottom: 3px;\\n text-align: right;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n -o-user-select: none;\\n -ms-user-select: none;\\n user-select: none;\\n clear: both;\\n}\\n\\n.ace_search_counter {\\n float: left;\\n font-family: arial;\\n padding: 0 8px;\\n}'}),ace.define(\"ace/ext/searchbox\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/event\",\"ace/ext/searchbox-css\",\"ace/keyboard/hash_handler\",\"ace/lib/keys\",\"ace/config\"],function(e,t,n){\"use strict\";var r=e(\"../lib/dom\"),i=e(\"../lib/lang\"),s=e(\"../lib/event\"),o=e(\"./searchbox-css\"),u=e(\"../keyboard/hash_handler\").HashHandler,a=e(\"../lib/keys\"),f=e(\"../config\").nls,l=999;r.importCssString(o,\"ace_searchbox\",!1);var c=function(){function e(e,t,n){this.activeInput;var i=r.createElement(\"div\");r.buildDom([\"div\",{\"class\":\"ace_search right\"},[\"span\",{action:\"hide\",\"class\":\"ace_searchbtn_close\"}],[\"div\",{\"class\":\"ace_search_form\"},[\"input\",{\"class\":\"ace_search_field\",placeholder:f(\"search-box.find.placeholder\",\"Search for\"),spellcheck:\"false\"}],[\"span\",{action:\"findPrev\",\"class\":\"ace_searchbtn prev\"},\"\\u200b\"],[\"span\",{action:\"findNext\",\"class\":\"ace_searchbtn next\"},\"\\u200b\"],[\"span\",{action:\"findAll\",\"class\":\"ace_searchbtn\",title:\"Alt-Enter\"},f(\"search-box.find-all.text\",\"All\")]],[\"div\",{\"class\":\"ace_replace_form\"},[\"input\",{\"class\":\"ace_search_field\",placeholder:f(\"search-box.replace.placeholder\",\"Replace with\"),spellcheck:\"false\"}],[\"span\",{action:\"replaceAndFindNext\",\"class\":\"ace_searchbtn\"},f(\"search-box.replace-next.text\",\"Replace\")],[\"span\",{action:\"replaceAll\",\"class\":\"ace_searchbtn\"},f(\"search-box.replace-all.text\",\"All\")]],[\"div\",{\"class\":\"ace_search_options\"},[\"span\",{action:\"toggleReplace\",\"class\":\"ace_button\",title:f(\"search-box.toggle-replace.title\",\"Toggle Replace mode\"),style:\"float:left;margin-top:-2px;padding:0 5px;\"},\"+\"],[\"span\",{\"class\":\"ace_search_counter\"}],[\"span\",{action:\"toggleRegexpMode\",\"class\":\"ace_button\",title:f(\"search-box.toggle-regexp.title\",\"RegExp Search\")},\".*\"],[\"span\",{action:\"toggleCaseSensitive\",\"class\":\"ace_button\",title:f(\"search-box.toggle-case.title\",\"CaseSensitive Search\")},\"Aa\"],[\"span\",{action:\"toggleWholeWords\",\"class\":\"ace_button\",title:f(\"search-box.toggle-whole-word.title\",\"Whole Word Search\")},\"\\\\b\"],[\"span\",{action:\"searchInSelection\",\"class\":\"ace_button\",title:f(\"search-box.toggle-in-selection.title\",\"Search In Selection\")},\"S\"]]],i),this.element=i.firstChild,this.setSession=this.setSession.bind(this),this.$init(),this.setEditor(e),r.importCssString(o,\"ace_searchbox\",e.container)}return e.prototype.setEditor=function(e){e.searchBox=this,e.renderer.scroller.appendChild(this.element),this.editor=e},e.prototype.setSession=function(e){this.searchRange=null,this.$syncOptions(!0)},e.prototype.$initElements=function(e){this.searchBox=e.querySelector(\".ace_search_form\"),this.replaceBox=e.querySelector(\".ace_replace_form\"),this.searchOption=e.querySelector(\"[action=searchInSelection]\"),this.replaceOption=e.querySelector(\"[action=toggleReplace]\"),this.regExpOption=e.querySelector(\"[action=toggleRegexpMode]\"),this.caseSensitiveOption=e.querySelector(\"[action=toggleCaseSensitive]\"),this.wholeWordOption=e.querySelector(\"[action=toggleWholeWords]\"),this.searchInput=this.searchBox.querySelector(\".ace_search_field\"),this.replaceInput=this.replaceBox.querySelector(\".ace_search_field\"),this.searchCounter=e.querySelector(\".ace_search_counter\")},e.prototype.$init=function(){var e=this.element;this.$initElements(e);var t=this;s.addListener(e,\"mousedown\",function(e){setTimeout(function(){t.activeInput.focus()},0),s.stopPropagation(e)}),s.addListener(e,\"click\",function(e){var n=e.target||e.srcElement,r=n.getAttribute(\"action\");r&&t[r]?t[r]():t.$searchBarKb.commands[r]&&t.$searchBarKb.commands[r].exec(t),s.stopPropagation(e)}),s.addCommandKeyListener(e,function(e,n,r){var i=a.keyCodeToString(r),o=t.$searchBarKb.findKeyCommand(n,i);o&&o.exec&&(o.exec(t),s.stopEvent(e))}),this.$onChange=i.delayedCall(function(){t.find(!1,!1)}),s.addListener(this.searchInput,\"input\",function(){t.$onChange.schedule(20)}),s.addListener(this.searchInput,\"focus\",function(){t.activeInput=t.searchInput,t.searchInput.value&&t.highlight()}),s.addListener(this.replaceInput,\"focus\",function(){t.activeInput=t.replaceInput,t.searchInput.value&&t.highlight()})},e.prototype.setSearchRange=function(e){this.searchRange=e,e?this.searchRangeMarker=this.editor.session.addMarker(e,\"ace_active-line\"):this.searchRangeMarker&&(this.editor.session.removeMarker(this.searchRangeMarker),this.searchRangeMarker=null)},e.prototype.$syncOptions=function(e){r.setCssClass(this.replaceOption,\"checked\",this.searchRange),r.setCssClass(this.searchOption,\"checked\",this.searchOption.checked),this.replaceOption.textContent=this.replaceOption.checked?\"-\":\"+\",r.setCssClass(this.regExpOption,\"checked\",this.regExpOption.checked),r.setCssClass(this.wholeWordOption,\"checked\",this.wholeWordOption.checked),r.setCssClass(this.caseSensitiveOption,\"checked\",this.caseSensitiveOption.checked);var t=this.editor.getReadOnly();this.replaceOption.style.display=t?\"none\":\"\",this.replaceBox.style.display=this.replaceOption.checked&&!t?\"\":\"none\",this.find(!1,!1,e)},e.prototype.highlight=function(e){this.editor.session.highlight(e||this.editor.$search.$options.re),this.editor.renderer.updateBackMarkers()},e.prototype.find=function(e,t,n){var i=this.editor.find(this.searchInput.value,{skipCurrent:e,backwards:t,wrap:!0,regExp:this.regExpOption.checked,caseSensitive:this.caseSensitiveOption.checked,wholeWord:this.wholeWordOption.checked,preventScroll:n,range:this.searchRange}),s=!i&&this.searchInput.value;r.setCssClass(this.searchBox,\"ace_nomatch\",s),this.editor._emit(\"findSearchBox\",{match:!s}),this.highlight(),this.updateCounter()},e.prototype.updateCounter=function(){var e=this.editor,t=e.$search.$options.re,n=t.unicode,r=0,s=0;if(t){var o=this.searchRange?e.session.getTextRange(this.searchRange):e.getValue(),u=e.session.doc.positionToIndex(e.selection.anchor);this.searchRange&&(u-=e.session.doc.positionToIndex(this.searchRange.start));var a=t.lastIndex=0,c;while(c=t.exec(o)){r++,a=c.index,a<=u&&s++;if(r>l)break;if(!c[0]){t.lastIndex=a+=i.skipEmptyMatch(o,a,n);if(a>=o.length)break}}}this.searchCounter.textContent=f(\"search-box.search-counter\",\"$0 of $1\",[s,r>l?l+\"+\":r])},e.prototype.findNext=function(){this.find(!0,!1)},e.prototype.findPrev=function(){this.find(!0,!0)},e.prototype.findAll=function(){var e=this.editor.findAll(this.searchInput.value,{regExp:this.regExpOption.checked,caseSensitive:this.caseSensitiveOption.checked,wholeWord:this.wholeWordOption.checked}),t=!e&&this.searchInput.value;r.setCssClass(this.searchBox,\"ace_nomatch\",t),this.editor._emit(\"findSearchBox\",{match:!t}),this.highlight(),this.hide()},e.prototype.replace=function(){this.editor.getReadOnly()||this.editor.replace(this.replaceInput.value)},e.prototype.replaceAndFindNext=function(){this.editor.getReadOnly()||(this.editor.replace(this.replaceInput.value),this.findNext())},e.prototype.replaceAll=function(){this.editor.getReadOnly()||this.editor.replaceAll(this.replaceInput.value)},e.prototype.hide=function(){this.active=!1,this.setSearchRange(null),this.editor.off(\"changeSession\",this.setSession),this.element.style.display=\"none\",this.editor.keyBinding.removeKeyboardHandler(this.$closeSearchBarKb),this.editor.focus()},e.prototype.show=function(e,t){this.active=!0,this.editor.on(\"changeSession\",this.setSession),this.element.style.display=\"\",this.replaceOption.checked=t,e&&(this.searchInput.value=e),this.searchInput.focus(),this.searchInput.select(),this.editor.keyBinding.addKeyboardHandler(this.$closeSearchBarKb),this.$syncOptions(!0)},e.prototype.isFocused=function(){var e=document.activeElement;return e==this.searchInput||e==this.replaceInput},e}(),h=new u;h.bindKeys({\"Ctrl-f|Command-f\":function(e){var t=e.isReplace=!e.isReplace;e.replaceBox.style.display=t?\"\":\"none\",e.replaceOption.checked=!1,e.$syncOptions(),e.searchInput.focus()},\"Ctrl-H|Command-Option-F\":function(e){if(e.editor.getReadOnly())return;e.replaceOption.checked=!0,e.$syncOptions(),e.replaceInput.focus()},\"Ctrl-G|Command-G\":function(e){e.findNext()},\"Ctrl-Shift-G|Command-Shift-G\":function(e){e.findPrev()},esc:function(e){setTimeout(function(){e.hide()})},Return:function(e){e.activeInput==e.replaceInput&&e.replace(),e.findNext()},\"Shift-Return\":function(e){e.activeInput==e.replaceInput&&e.replace(),e.findPrev()},\"Alt-Return\":function(e){e.activeInput==e.replaceInput&&e.replaceAll(),e.findAll()},Tab:function(e){(e.activeInput==e.replaceInput?e.searchInput:e.replaceInput).focus()}}),h.addCommands([{name:\"toggleRegexpMode\",bindKey:{win:\"Alt-R|Alt-/\",mac:\"Ctrl-Alt-R|Ctrl-Alt-/\"},exec:function(e){e.regExpOption.checked=!e.regExpOption.checked,e.$syncOptions()}},{name:\"toggleCaseSensitive\",bindKey:{win:\"Alt-C|Alt-I\",mac:\"Ctrl-Alt-R|Ctrl-Alt-I\"},exec:function(e){e.caseSensitiveOption.checked=!e.caseSensitiveOption.checked,e.$syncOptions()}},{name:\"toggleWholeWords\",bindKey:{win:\"Alt-B|Alt-W\",mac:\"Ctrl-Alt-B|Ctrl-Alt-W\"},exec:function(e){e.wholeWordOption.checked=!e.wholeWordOption.checked,e.$syncOptions()}},{name:\"toggleReplace\",exec:function(e){e.replaceOption.checked=!e.replaceOption.checked,e.$syncOptions()}},{name:\"searchInSelection\",exec:function(e){e.searchOption.checked=!e.searchRange,e.setSearchRange(e.searchOption.checked&&e.editor.getSelectionRange()),e.$syncOptions()}}]);var p=new u([{bindKey:\"Esc\",name:\"closeSearchBar\",exec:function(e){e.searchBox.hide()}}]);c.prototype.$searchBarKb=h,c.prototype.$closeSearchBarKb=p,t.SearchBox=c,t.Search=function(e,t){var n=e.searchBox||new c(e);n.show(e.session.getTextRange(),t)}}); (function() {\n ace.require([\"ace/ext/searchbox\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n ","ace.define(\"ace/mode/ruby_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=t.constantOtherSymbol={token:\"constant.other.symbol.ruby\",regex:\"[:](?:[A-Za-z_]|[@$](?=[a-zA-Z0-9_]))[a-zA-Z0-9_]*[!=?]?\"};t.qString={token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},t.qqString={token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},t.tString={token:\"string\",regex:\"[`](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[`]\"};var o=t.constantNumericHex={token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_(?=[0-9a-fA-F]))*\\\\b\"},u=t.constantNumericBinary={token:\"constant.numeric\",regex:/\\b(0[bB][01](?:[01]|_(?=[01]))*)\\b/},a=t.constantNumericDecimal={token:\"constant.numeric\",regex:/\\b(0[dD](?:[1-9](?:[\\d]|_(?=[\\d]))*|0))\\b/},f=t.constantNumericOctal={token:\"constant.numeric\",regex:/\\b(0[oO]?(?:[1-7](?:[0-7]|_(?=[0-7]))*|0))\\b/},l=t.constantNumericRational={token:\"constant.numeric\",regex:/\\b([\\d]+(?:[./][\\d]+)?ri?)\\b/},c=t.constantNumericComplex={token:\"constant.numeric\",regex:/\\b([\\d]i)\\b/},h=t.constantNumericFloat={token:\"constant.numeric\",regex:\"[+-]?\\\\d(?:\\\\d|_(?=\\\\d))*(?:(?:\\\\.\\\\d(?:\\\\d|_(?=\\\\d))*)?(?:[eE][+-]?\\\\d+)?)?i?\\\\b\"},p=t.instanceVariable={token:\"variable.instance\",regex:\"@{1,2}[a-zA-Z_\\\\d]+\"},d=function(){var e=\"abort|Array|assert|assert_equal|assert_not_equal|assert_same|assert_not_same|assert_nil|assert_not_nil|assert_match|assert_no_match|assert_in_delta|assert_throws|assert_raise|assert_nothing_raised|assert_instance_of|assert_kind_of|assert_respond_to|assert_operator|assert_send|assert_difference|assert_no_difference|assert_recognizes|assert_generates|assert_response|assert_redirected_to|assert_template|assert_select|assert_select_email|assert_select_rjs|assert_select_encoded|css_select|at_exit|attr|attr_writer|attr_reader|attr_accessor|attr_accessible|autoload|binding|block_given?|callcc|caller|catch|chomp|chomp!|chop|chop!|defined?|delete_via_redirect|eval|exec|exit|exit!|fail|Float|flunk|follow_redirect!|fork|form_for|form_tag|format|gets|global_variables|gsub|gsub!|get_via_redirect|host!|https?|https!|include|Integer|lambda|link_to|link_to_unless_current|link_to_function|link_to_remote|load|local_variables|loop|open|open_session|p|print|printf|proc|putc|puts|post_via_redirect|put_via_redirect|raise|rand|raw|readline|readlines|redirect?|request_via_redirect|require|scan|select|set_trace_func|sleep|split|sprintf|srand|String|stylesheet_link_tag|syscall|system|sub|sub!|test|throw|trace_var|trap|untrace_var|atan2|cos|exp|frexp|ldexp|log|log10|sin|sqrt|tan|render|javascript_include_tag|csrf_meta_tag|label_tag|text_field_tag|submit_tag|check_box_tag|content_tag|radio_button_tag|text_area_tag|password_field_tag|hidden_field_tag|fields_for|select_tag|options_for_select|options_from_collection_for_select|collection_select|time_zone_select|select_date|select_time|select_datetime|date_select|time_select|datetime_select|select_year|select_month|select_day|select_hour|select_minute|select_second|file_field_tag|file_field|respond_to|skip_before_filter|around_filter|after_filter|verify|protect_from_forgery|rescue_from|helper_method|redirect_to|before_filter|send_data|send_file|validates_presence_of|validates_uniqueness_of|validates_length_of|validates_format_of|validates_acceptance_of|validates_associated|validates_exclusion_of|validates_inclusion_of|validates_numericality_of|validates_with|validates_each|authenticate_or_request_with_http_basic|authenticate_or_request_with_http_digest|filter_parameter_logging|match|get|post|resources|redirect|scope|assert_routing|translate|localize|extract_locale_from_tld|caches_page|expire_page|caches_action|expire_action|cache|expire_fragment|expire_cache_for|observe|cache_sweeper|has_many|has_one|belongs_to|has_and_belongs_to_many|p|warn|refine|using|module_function|extend|alias_method|private_class_method|remove_method|undef_method\",t=\"alias|and|BEGIN|begin|break|case|class|def|defined|do|else|elsif|END|end|ensure|__FILE__|finally|for|gem|if|in|__LINE__|module|next|not|or|private|protected|public|redo|rescue|retry|return|super|then|undef|unless|until|when|while|yield|__ENCODING__|prepend\",n=\"true|TRUE|false|FALSE|nil|NIL|ARGF|ARGV|DATA|ENV|RUBY_PLATFORM|RUBY_RELEASE_DATE|RUBY_VERSION|STDERR|STDIN|STDOUT|TOPLEVEL_BINDING|RUBY_PATCHLEVEL|RUBY_REVISION|RUBY_COPYRIGHT|RUBY_ENGINE|RUBY_ENGINE_VERSION|RUBY_DESCRIPTION\",r=\"$DEBUG|$defout|$FILENAME|$LOAD_PATH|$SAFE|$stdin|$stdout|$stderr|$VERBOSE|$!|root_url|flash|session|cookies|params|request|response|logger|self\",i=this.$keywords=this.createKeywordMapper({keyword:t,\"constant.language\":n,\"variable.language\":r,\"support.function\":e,\"invalid.deprecated\":\"debugger\"},\"identifier\"),d=\"\\\\\\\\(?:n(?:[1-7][0-7]{0,2}|0)|[nsrtvfbae'\\\"\\\\\\\\]|c(?:\\\\\\\\M-)?.|M-(?:\\\\\\\\C-|\\\\\\\\c)?.|C-(?:\\\\\\\\M-)?.|[0-7]{3}|x[\\\\da-fA-F]{2}|u[\\\\da-fA-F]{4}|u{[\\\\da-fA-F]{1,6}(?:\\\\s[\\\\da-fA-F]{1,6})*})\",v={\"(\":\")\",\"[\":\"]\",\"{\":\"}\",\"<\":\">\",\"^\":\"^\",\"|\":\"|\",\"%\":\"%\"};this.$rules={start:[{token:\"comment\",regex:\"#.*$\"},{token:\"comment.multiline\",regex:\"^=begin(?=$|\\\\s.*$)\",next:\"comment\"},{token:\"string.regexp\",regex:/[/](?=.*\\/)/,next:\"regex\"},[{token:[\"constant.other.symbol.ruby\",\"string.start\"],regex:/(:)?(\")/,push:[{token:\"constant.language.escape\",regex:d},{token:\"paren.start\",regex:/#{/,push:\"start\"},{token:\"string.end\",regex:/\"/,next:\"pop\"},{defaultToken:\"string\"}]},{token:\"string.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:d},{token:\"paren.start\",regex:/#{/,push:\"start\"},{token:\"string.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string\"}]},{token:[\"constant.other.symbol.ruby\",\"string.start\"],regex:/(:)?(')/,push:[{token:\"constant.language.escape\",regex:/\\\\['\\\\]/},{token:\"string.end\",regex:/'/,next:\"pop\"},{defaultToken:\"string\"}]},{token:\"string.start\",regex:/%[qwx]([(\\[<{^|%])/,onMatch:function(e,t,n){n.length&&(n=[]);var r=e[e.length-1];return n.unshift(r,t),this.next=\"qStateWithoutInterpolation\",this.token}},{token:\"string.start\",regex:/%[QWX]?([(\\[<{^|%])/,onMatch:function(e,t,n){n.length&&(n=[]);var r=e[e.length-1];return n.unshift(r,t),this.next=\"qStateWithInterpolation\",this.token}},{token:\"constant.other.symbol.ruby\",regex:/%[si]([(\\[<{^|%])/,onMatch:function(e,t,n){n.length&&(n=[]);var r=e[e.length-1];return n.unshift(r,t),this.next=\"sStateWithoutInterpolation\",this.token}},{token:\"constant.other.symbol.ruby\",regex:/%[SI]([(\\[<{^|%])/,onMatch:function(e,t,n){n.length&&(n=[]);var r=e[e.length-1];return n.unshift(r,t),this.next=\"sStateWithInterpolation\",this.token}},{token:\"string.regexp\",regex:/%[r]([(\\[<{^|%])/,onMatch:function(e,t,n){n.length&&(n=[]);var r=e[e.length-1];return n.unshift(r,t),this.next=\"rState\",this.token}}],{token:\"punctuation\",regex:\"::\"},p,{token:\"variable.global\",regex:\"[$][a-zA-Z_\\\\d]+\"},{token:\"support.class\",regex:\"[A-Z][a-zA-Z_\\\\d]*\"},{token:[\"punctuation.operator\",\"support.function\"],regex:/(\\.)([a-zA-Z_\\d]+)(?=\\()/},{token:[\"punctuation.operator\",\"identifier\"],regex:/(\\.)([a-zA-Z_][a-zA-Z_\\d]*)/},{token:\"string.character\",regex:\"\\\\B\\\\?(?:\"+d+\"|\\\\S)\"},{token:\"punctuation.operator\",regex:/\\?(?=.+:)/},l,c,s,o,h,u,a,f,{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:i,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"punctuation.separator.key-value\",regex:\"=>\"},{stateName:\"heredoc\",onMatch:function(e,t,n){var r=e[2]==\"-\"||e[2]==\"~\"?\"indentedHeredoc\":\"heredoc\",i=e.split(this.splitRegex);return n.push(r,i[3]),[{type:\"constant\",value:i[1]},{type:\"string\",value:i[2]},{type:\"support.class\",value:i[3]},{type:\"string\",value:i[4]}]},regex:\"(<<[-~]?)(['\\\"`]?)([\\\\w]+)(['\\\"`]?)\",rules:{heredoc:[{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}],indentedHeredoc:[{token:\"string\",regex:\"^ +\"},{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}]}},{regex:\"$\",token:\"empty\",next:function(e,t){return t[0]===\"heredoc\"||t[0]===\"indentedHeredoc\"?t[0]:e}},{token:\"keyword.operator\",regex:\"!|\\\\$|%|&|\\\\*|/|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\||\\\\b(?:in|instanceof|new|delete|typeof|void)\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\",onMatch:function(e,t,n){return this.next=\"\",e==\"}\"&&n.length>1&&n[1]!=\"start\"&&(n.shift(),this.next=n.shift()),this.token}},{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.operator\",regex:/[?:,;.]/}],comment:[{token:\"comment.multiline\",regex:\"^=end(?=$|\\\\s.*$)\",next:\"start\"},{token:\"comment\",regex:\".+\"}],qStateWithInterpolation:[{token:\"string.start\",regex:/[(\\[<{]/,onMatch:function(e,t,n){return n.length&&e===n[0]?(n.unshift(e,t),this.token):\"string\"}},{token:\"constant.language.escape\",regex:d},{token:\"constant.language.escape\",regex:/\\\\./},{token:\"paren.start\",regex:/#{/,push:\"start\"},{token:\"string.end\",regex:/[)\\]>}^|%]/,onMatch:function(e,t,n){return n.length&&e===v[n[0]]?(n.shift(),this.next=n.shift(),this.token):(this.next=\"\",\"string\")}},{defaultToken:\"string\"}],qStateWithoutInterpolation:[{token:\"string.start\",regex:/[(\\[<{]/,onMatch:function(e,t,n){return n.length&&e===n[0]?(n.unshift(e,t),this.token):\"string\"}},{token:\"constant.language.escape\",regex:/\\\\['\\\\]/},{token:\"constant.language.escape\",regex:/\\\\./},{token:\"string.end\",regex:/[)\\]>}^|%]/,onMatch:function(e,t,n){return n.length&&e===v[n[0]]?(n.shift(),this.next=n.shift(),this.token):(this.next=\"\",\"string\")}},{defaultToken:\"string\"}],sStateWithoutInterpolation:[{token:\"constant.other.symbol.ruby\",regex:/[(\\[<{]/,onMatch:function(e,t,n){return n.length&&e===n[0]?(n.unshift(e,t),this.token):\"constant.other.symbol.ruby\"}},{token:\"constant.other.symbol.ruby\",regex:/[)\\]>}^|%]/,onMatch:function(e,t,n){return n.length&&e===v[n[0]]?(n.shift(),this.next=n.shift(),this.token):(this.next=\"\",\"constant.other.symbol.ruby\")}},{defaultToken:\"constant.other.symbol.ruby\"}],sStateWithInterpolation:[{token:\"constant.other.symbol.ruby\",regex:/[(\\[<{]/,onMatch:function(e,t,n){return n.length&&e===n[0]?(n.unshift(e,t),this.token):\"constant.other.symbol.ruby\"}},{token:\"constant.language.escape\",regex:d},{token:\"constant.language.escape\",regex:/\\\\./},{token:\"paren.start\",regex:/#{/,push:\"start\"},{token:\"constant.other.symbol.ruby\",regex:/[)\\]>}^|%]/,onMatch:function(e,t,n){return n.length&&e===v[n[0]]?(n.shift(),this.next=n.shift(),this.token):(this.next=\"\",\"constant.other.symbol.ruby\")}},{defaultToken:\"constant.other.symbol.ruby\"}],rState:[{token:\"string.regexp\",regex:/[(\\[<{]/,onMatch:function(e,t,n){return n.length&&e===n[0]?(n.unshift(e,t),this.token):\"constant.language.escape\"}},{token:\"paren.start\",regex:/#{/,push:\"start\"},{token:\"string.regexp\",regex:/\\//},{token:\"string.regexp\",regex:/[)\\]>}^|%][imxouesn]*/,onMatch:function(e,t,n){return n.length&&e[0]===v[n[0]]?(n.shift(),this.next=n.shift(),this.token):(this.next=\"\",\"constant.language.escape\")}},{include:\"regex\"},{defaultToken:\"string.regexp\"}],regex:[{token:\"regexp.keyword\",regex:/\\\\[wWdDhHsS]/},{token:\"constant.language.escape\",regex:/\\\\[AGbBzZ]/},{token:\"constant.language.escape\",regex:/\\\\g<[a-zA-Z0-9]*>/},{token:[\"constant.language.escape\",\"regexp.keyword\",\"constant.language.escape\"],regex:/(\\\\p{\\^?)(Alnum|Alpha|Blank|Cntrl|Digit|Graph|Lower|Print|Punct|Space|Upper|XDigit|Word|ASCII|Any|Assigned|Arabic|Armenian|Balinese|Bengali|Bopomofo|Braille|Buginese|Buhid|Canadian_Aboriginal|Carian|Cham|Cherokee|Common|Coptic|Cuneiform|Cypriot|Cyrillic|Deseret|Devanagari|Ethiopic|Georgian|Glagolitic|Gothic|Greek|Gujarati|Gurmukhi|Han|Hangul|Hanunoo|Hebrew|Hiragana|Inherited|Kannada|Katakana|Kayah_Li|Kharoshthi|Khmer|Lao|Latin|Lepcha|Limbu|Linear_B|Lycian|Lydian|Malayalam|Mongolian|Myanmar|New_Tai_Lue|Nko|Ogham|Ol_Chiki|Old_Italic|Old_Persian|Oriya|Osmanya|Phags_Pa|Phoenician|Rejang|Runic|Saurashtra|Shavian|Sinhala|Sundanese|Syloti_Nagri|Syriac|Tagalog|Tagbanwa|Tai_Le|Tamil|Telugu|Thaana|Thai|Tibetan|Tifinagh|Ugaritic|Vai|Yi|Ll|Lm|Lt|Lu|Lo|Mn|Mc|Me|Nd|Nl|Pc|Pd|Ps|Pe|Pi|Pf|Po|No|Sm|Sc|Sk|So|Zs|Zl|Zp|Cc|Cf|Cn|Co|Cs|N|L|M|P|S|Z|C)(})/},{token:[\"constant.language.escape\",\"invalid\",\"constant.language.escape\"],regex:/(\\\\p{\\^?)([^/]*)(})/},{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:/[/][imxouesn]*/,next:\"start\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?(?:[:=!>]|<'?[a-zA-Z]*'?>|<[=!])|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"regexp.keyword\",regex:/\\[\\[:(?:alnum|alpha|blank|cntrl|digit|graph|lower|print|punct|space|upper|xdigit|word|ascii):\\]\\]/},{token:\"constant.language.escape\",regex:/\\[\\^?/,push:\"regex_character_class\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.keyword\",regex:/\\\\[wWdDhHsS]/},{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:/&?&?\\[\\^?/,push:\"regex_character_class\"},{token:\"constant.language.escape\",regex:\"]\",next:\"pop\"},{token:\"constant.language.escape\",regex:\"-\"},{defaultToken:\"string.regexp.characterclass\"}]},this.normalizeRules()};r.inherits(d,i),t.RubyHighlightRules=d}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/ruby\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=e(\"../../token_iterator\").TokenIterator,u=t.FoldMode=function(){};r.inherits(u,i),function(){this.indentKeywords={\"class\":1,def:1,module:1,\"do\":1,unless:1,\"if\":1,\"while\":1,\"for\":1,until:1,begin:1,\"else\":0,elsif:0,rescue:0,ensure:0,when:0,end:-1,\"case\":1,\"=begin\":1,\"=end\":-1},this.foldingStartMarker=/(?:\\s|^)(def|do|while|class|unless|module|if|for|until|begin|else|elsif|case|rescue|ensure|when)\\b|({\\s*$)|(=begin)/,this.foldingStopMarker=/(=end(?=$|\\s.*$))|(^\\s*})|\\b(end)\\b/,this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=this.foldingStartMarker.test(r),s=this.foldingStopMarker.test(r);if(i&&!s){var o=r.match(this.foldingStartMarker);if(o[1]){if(o[1]==\"if\"||o[1]==\"else\"||o[1]==\"while\"||o[1]==\"until\"||o[1]==\"unless\"){if(o[1]==\"else\"&&/^\\s*else\\s*$/.test(r)===!1)return;if(/^\\s*(?:if|else|while|until|unless)\\s*/.test(r)===!1)return}if(o[1]==\"when\"&&/\\sthen\\s/.test(r)===!0)return;if(e.getTokenAt(n,o.index+2).type===\"keyword\")return\"start\"}else{if(!o[3])return\"start\";if(e.getTokenAt(n,o.index+1).type===\"comment.multiline\")return\"start\"}}if(t!=\"markbeginend\"||!s||i&&s)return\"\";var o=r.match(this.foldingStopMarker);if(o[3]===\"end\"){if(e.getTokenAt(n,o.index+1).type===\"keyword\")return\"end\"}else{if(!o[1])return\"end\";if(e.getTokenAt(n,o.index+1).type===\"comment.multiline\")return\"end\"}},this.getFoldWidgetRange=function(e,t,n){var r=e.doc.getLine(n),i=this.foldingStartMarker.exec(r);if(i)return i[1]||i[3]?this.rubyBlock(e,n,i.index+2):this.openingBracketBlock(e,\"{\",n,i.index);var i=this.foldingStopMarker.exec(r);if(i)return i[3]===\"end\"&&e.getTokenAt(n,i.index+1).type===\"keyword\"?this.rubyBlock(e,n,i.index+1):i[1]===\"=end\"&&e.getTokenAt(n,i.index+1).type===\"comment.multiline\"?this.rubyBlock(e,n,i.index+1):this.closingBracketBlock(e,\"}\",n,i.index+i[0].length)},this.rubyBlock=function(e,t,n,r){var i=new o(e,t,n),u=i.getCurrentToken();if(!u||u.type!=\"keyword\"&&u.type!=\"comment.multiline\")return;var a=u.value,f=e.getLine(t);switch(u.value){case\"if\":case\"unless\":case\"while\":case\"until\":var l=new RegExp(\"^\\\\s*\"+u.value);if(!l.test(f))return;var c=this.indentKeywords[a];break;case\"when\":if(/\\sthen\\s/.test(f))return;case\"elsif\":case\"rescue\":case\"ensure\":var c=1;break;case\"else\":var l=new RegExp(\"^\\\\s*\"+u.value+\"\\\\s*$\");if(!l.test(f))return;var c=1;break;default:var c=this.indentKeywords[a]}var h=[a];if(!c)return;var p=c===-1?e.getLine(t-1).length:e.getLine(t).length,d=t,v=[];v.push(i.getCurrentTokenRange()),i.step=c===-1?i.stepBackward:i.stepForward;if(u.type==\"comment.multiline\")while(u=i.step()){if(u.type!==\"comment.multiline\")continue;if(c==1){p=6;if(u.value==\"=end\")break}else if(u.value==\"=begin\")break}else while(u=i.step()){var m=!1;if(u.type!==\"keyword\")continue;var g=c*this.indentKeywords[u.value];f=e.getLine(i.getCurrentTokenRow());switch(u.value){case\"do\":for(var y=i.$tokenIndex-1;y>=0;y--){var b=i.$rowTokens[y];if(b&&(b.value==\"while\"||b.value==\"until\"||b.value==\"for\")){g=0;break}}break;case\"else\":var l=new RegExp(\"^\\\\s*\"+u.value+\"\\\\s*$\");if(!l.test(f)||a==\"case\")g=0,m=!0;break;case\"if\":case\"unless\":case\"while\":case\"until\":var l=new RegExp(\"^\\\\s*\"+u.value);l.test(f)||(g=0,m=!0);break;case\"when\":if(/\\sthen\\s/.test(f)||a==\"case\")g=0,m=!0}if(g>0)h.unshift(u.value);else if(g<=0&&m===!1){h.shift();if(!h.length){if((a==\"while\"||a==\"until\"||a==\"for\")&&u.value!=\"do\")break;if(u.value==\"do\"&&c==-1&&g!=0)break;if(u.value!=\"do\")break}g===0&&h.unshift(u.value)}}if(!u)return null;if(r)return v.push(i.getCurrentTokenRange()),v;var t=i.getCurrentTokenRow();if(c===-1){if(u.type===\"comment.multiline\")var w=6;else var w=e.getLine(t).length;return new s(t,w,d-1,p)}return new s(d,p,t-1,e.getLine(t-1).length)}}.call(u.prototype)}),ace.define(\"ace/mode/ruby\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/ruby_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/folding/ruby\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./ruby_highlight_rules\").RubyHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"./folding/ruby\").FoldMode,f=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=this.$defaultBehaviour,this.foldingRules=new a,this.indentKeywords=this.foldingRules.indentKeywords};r.inherits(f,i),function(){this.lineCommentStart=\"#\",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[]\\s*$/),u=t.match(/^\\s*(class|def|module)\\s.*$/),a=t.match(/.*do(\\s*|\\s+\\|.*\\|\\s*)$/),f=t.match(/^\\s*(if|else|when|elsif|unless|while|for|begin|rescue|ensure)\\s*/);if(o||u||a||f)r+=n}return r},this.checkOutdent=function(e,t,n){return/^\\s+(end|else|rescue|ensure)$/.test(t+n)||this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){var r=t.getLine(n);if(/}/.test(r))return this.$outdent.autoOutdent(t,n);var i=this.$getIndent(r),s=t.getLine(n-1),o=this.$getIndent(s),a=t.getTabString();o.length<=i.length&&i.slice(-a.length)==a&&t.remove(new u(n,i.length-a.length,n,i.length))},this.getMatching=function(e,t,n){if(t==undefined){var r=e.selection.lead;n=r.column,t=r.row}var i=e.getTokenAt(t,n);if(i&&i.value in this.indentKeywords)return this.foldingRules.rubyBlock(e,t,n,!0)},this.$id=\"ace/mode/ruby\",this.snippetFileId=\"ace/snippets/ruby\"}.call(f.prototype),t.Mode=f}); (function() {\n ace.require([\"ace/mode/ruby\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n ","ace.define(\"ace/theme/twilight-css\",[\"require\",\"exports\",\"module\"],function(e,t,n){n.exports=\".ace-twilight .ace_gutter {\\n background: #232323;\\n color: #E2E2E2\\n}\\n\\n.ace-twilight .ace_print-margin {\\n width: 1px;\\n background: #232323\\n}\\n\\n.ace-twilight {\\n background-color: #141414;\\n color: #F8F8F8\\n}\\n\\n.ace-twilight .ace_cursor {\\n color: #A7A7A7\\n}\\n\\n.ace-twilight .ace_marker-layer .ace_selection {\\n background: rgba(221, 240, 255, 0.20)\\n}\\n\\n.ace-twilight.ace_multiselect .ace_selection.ace_start {\\n box-shadow: 0 0 3px 0px #141414;\\n}\\n\\n.ace-twilight .ace_marker-layer .ace_step {\\n background: rgb(102, 82, 0)\\n}\\n\\n.ace-twilight .ace_marker-layer .ace_bracket {\\n margin: -1px 0 0 -1px;\\n border: 1px solid rgba(255, 255, 255, 0.25)\\n}\\n\\n.ace-twilight .ace_marker-layer .ace_active-line {\\n background: rgba(255, 255, 255, 0.031)\\n}\\n\\n.ace-twilight .ace_gutter-active-line {\\n background-color: rgba(255, 255, 255, 0.031)\\n}\\n\\n.ace-twilight .ace_marker-layer .ace_selected-word {\\n border: 1px solid rgba(221, 240, 255, 0.20)\\n}\\n\\n.ace-twilight .ace_invisible {\\n color: rgba(255, 255, 255, 0.25)\\n}\\n\\n.ace-twilight .ace_keyword,\\n.ace-twilight .ace_meta {\\n color: #CDA869\\n}\\n\\n.ace-twilight .ace_constant,\\n.ace-twilight .ace_constant.ace_character,\\n.ace-twilight .ace_constant.ace_character.ace_escape,\\n.ace-twilight .ace_constant.ace_other,\\n.ace-twilight .ace_heading,\\n.ace-twilight .ace_markup.ace_heading,\\n.ace-twilight .ace_support.ace_constant {\\n color: #CF6A4C\\n}\\n\\n.ace-twilight .ace_invalid.ace_illegal {\\n color: #F8F8F8;\\n background-color: rgba(86, 45, 86, 0.75)\\n}\\n\\n.ace-twilight .ace_invalid.ace_deprecated {\\n text-decoration: underline;\\n font-style: italic;\\n color: #D2A8A1\\n}\\n\\n.ace-twilight .ace_support {\\n color: #9B859D\\n}\\n\\n.ace-twilight .ace_fold {\\n background-color: #AC885B;\\n border-color: #F8F8F8\\n}\\n\\n.ace-twilight .ace_support.ace_function {\\n color: #DAD085\\n}\\n\\n.ace-twilight .ace_list,\\n.ace-twilight .ace_markup.ace_list,\\n.ace-twilight .ace_storage {\\n color: #F9EE98\\n}\\n\\n.ace-twilight .ace_entity.ace_name.ace_function,\\n.ace-twilight .ace_meta.ace_tag {\\n color: #AC885B\\n}\\n\\n.ace-twilight .ace_string {\\n color: #8F9D6A\\n}\\n\\n.ace-twilight .ace_string.ace_regexp {\\n color: #E9C062\\n}\\n\\n.ace-twilight .ace_comment {\\n font-style: italic;\\n color: #5F5A60\\n}\\n\\n.ace-twilight .ace_variable {\\n color: #7587A6\\n}\\n\\n.ace-twilight .ace_xml-pe {\\n color: #494949\\n}\\n\\n.ace-twilight .ace_indent-guide {\\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWMQERFpYLC1tf0PAAgOAnPnhxyiAAAAAElFTkSuQmCC) right repeat-y\\n}\\n\\n.ace-twilight .ace_indent-guide-active {\\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQIW2PQ1dX9zzBz5sz/ABCcBFFentLlAAAAAElFTkSuQmCC) right repeat-y;\\n}\\n\"}),ace.define(\"ace/theme/twilight\",[\"require\",\"exports\",\"module\",\"ace/theme/twilight-css\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-twilight\",t.cssText=e(\"./twilight-css\");var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass,!1)}); (function() {\n ace.require([\"ace/theme/twilight\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n ","/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n * * Neither the name of Ajax.org B.V. nor the\n * names of its contributors may be used to endorse or promote products\n * derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/**\n * Define a module along with a payload\n * @param module a name for the payload\n * @param payload a function to call with (require, exports, module) params\n */\n\n(function() {\n\nvar ACE_NAMESPACE = \"ace\";\n\nvar global = (function() { return this; })();\nif (!global && typeof window != \"undefined\") global = window; // strict mode\n\n\nif (!ACE_NAMESPACE && typeof requirejs !== \"undefined\")\n return;\n\n\nvar define = function(module, deps, payload) {\n if (typeof module !== \"string\") {\n if (define.original)\n define.original.apply(this, arguments);\n else {\n console.error(\"dropping module because define wasn\\'t a string.\");\n console.trace();\n }\n return;\n }\n if (arguments.length == 2)\n payload = deps;\n if (!define.modules[module]) {\n define.payloads[module] = payload;\n define.modules[module] = null;\n }\n};\n\ndefine.modules = {};\ndefine.payloads = {};\n\n/**\n * Get at functionality define()ed using the function above\n */\nvar _require = function(parentId, module, callback) {\n if (typeof module === \"string\") {\n var payload = lookup(parentId, module);\n if (payload != undefined) {\n callback && callback();\n return payload;\n }\n } else if (Object.prototype.toString.call(module) === \"[object Array]\") {\n var params = [];\n for (var i = 0, l = module.length; i < l; ++i) {\n var dep = lookup(parentId, module[i]);\n if (dep == undefined && require.original)\n return;\n params.push(dep);\n }\n return callback && callback.apply(null, params) || true;\n }\n};\n\nvar require = function(module, callback) {\n var packagedModule = _require(\"\", module, callback);\n if (packagedModule == undefined && require.original)\n return require.original.apply(this, arguments);\n return packagedModule;\n};\n\nvar normalizeModule = function(parentId, moduleName) {\n // normalize plugin requires\n if (moduleName.indexOf(\"!\") !== -1) {\n var chunks = moduleName.split(\"!\");\n return normalizeModule(parentId, chunks[0]) + \"!\" + normalizeModule(parentId, chunks[1]);\n }\n // normalize relative requires\n if (moduleName.charAt(0) == \".\") {\n var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n moduleName = base + \"/\" + moduleName;\n\n while(moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n var previous = moduleName;\n moduleName = moduleName.replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n }\n }\n return moduleName;\n};\n\n/**\n * Internal function to lookup moduleNames and resolve them by calling the\n * definition function if needed.\n */\nvar lookup = function(parentId, moduleName) {\n moduleName = normalizeModule(parentId, moduleName);\n\n var module = define.modules[moduleName];\n if (!module) {\n module = define.payloads[moduleName];\n if (typeof module === 'function') {\n var exports = {};\n var mod = {\n id: moduleName,\n uri: '',\n exports: exports,\n packaged: true\n };\n\n var req = function(module, callback) {\n return _require(moduleName, module, callback);\n };\n\n var returnValue = module(req, exports, mod);\n exports = returnValue || mod.exports;\n define.modules[moduleName] = exports;\n delete define.payloads[moduleName];\n }\n module = define.modules[moduleName] = exports || module;\n }\n return module;\n};\n\nfunction exportAce(ns) {\n var root = global;\n if (ns) {\n if (!global[ns])\n global[ns] = {};\n root = global[ns];\n }\n\n if (!root.define || !root.define.packaged) {\n define.original = root.define;\n root.define = define;\n root.define.packaged = true;\n }\n\n if (!root.require || !root.require.packaged) {\n require.original = root.require;\n root.require = require;\n root.require.packaged = true;\n }\n}\n\nexportAce(ACE_NAMESPACE);\n\n})();\n\nace.define(\"ace/lib/es6-shim\",[\"require\",\"exports\",\"module\"], function(require, exports, module){function defineProp(obj, name, val) {\n Object.defineProperty(obj, name, {\n value: val,\n enumerable: false,\n writable: true,\n configurable: true\n });\n}\nif (!String.prototype.startsWith) {\n defineProp(String.prototype, \"startsWith\", function (searchString, position) {\n position = position || 0;\n return this.lastIndexOf(searchString, position) === position;\n });\n}\nif (!String.prototype.endsWith) {\n defineProp(String.prototype, \"endsWith\", function (searchString, position) {\n var subjectString = this;\n if (position === undefined || position > subjectString.length) {\n position = subjectString.length;\n }\n position -= searchString.length;\n var lastIndex = subjectString.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n });\n}\nif (!String.prototype.repeat) {\n defineProp(String.prototype, \"repeat\", function (count) {\n var result = \"\";\n var string = this;\n while (count > 0) {\n if (count & 1)\n result += string;\n if ((count >>= 1))\n string += string;\n }\n return result;\n });\n}\nif (!String.prototype.includes) {\n defineProp(String.prototype, \"includes\", function (str, position) {\n return this.indexOf(str, position) != -1;\n });\n}\nif (!Object.assign) {\n Object.assign = function (target) {\n if (target === undefined || target === null) {\n throw new TypeError(\"Cannot convert undefined or null to object\");\n }\n var output = Object(target);\n for (var index = 1; index < arguments.length; index++) {\n var source = arguments[index];\n if (source !== undefined && source !== null) {\n Object.keys(source).forEach(function (key) {\n output[key] = source[key];\n });\n }\n }\n return output;\n };\n}\nif (!Object.values) {\n Object.values = function (o) {\n return Object.keys(o).map(function (k) {\n return o[k];\n });\n };\n}\nif (!Array.prototype.find) {\n defineProp(Array.prototype, \"find\", function (predicate) {\n var len = this.length;\n var thisArg = arguments[1];\n for (var k = 0; k < len; k++) {\n var kValue = this[k];\n if (predicate.call(thisArg, kValue, k, this)) {\n return kValue;\n }\n }\n });\n}\nif (!Array.prototype.findIndex) {\n defineProp(Array.prototype, \"findIndex\", function (predicate) {\n var len = this.length;\n var thisArg = arguments[1];\n for (var k = 0; k < len; k++) {\n var kValue = this[k];\n if (predicate.call(thisArg, kValue, k, this)) {\n return k;\n }\n }\n });\n}\nif (!Array.prototype.includes) {\n defineProp(Array.prototype, \"includes\", function (item, position) {\n return this.indexOf(item, position) != -1;\n });\n}\nif (!Array.prototype.fill) {\n defineProp(Array.prototype, \"fill\", function (value) {\n var O = this;\n var len = O.length >>> 0;\n var start = arguments[1];\n var relativeStart = start >> 0;\n var k = relativeStart < 0\n ? Math.max(len + relativeStart, 0)\n : Math.min(relativeStart, len);\n var end = arguments[2];\n var relativeEnd = end === undefined ? len : end >> 0;\n var final = relativeEnd < 0\n ? Math.max(len + relativeEnd, 0)\n : Math.min(relativeEnd, len);\n while (k < final) {\n O[k] = value;\n k++;\n }\n return O;\n });\n}\nif (!Array.of) {\n defineProp(Array, \"of\", function () {\n return Array.prototype.slice.call(arguments);\n });\n}\n\n});\n\nace.define(\"ace/lib/fixoldbrowsers\",[\"require\",\"exports\",\"module\",\"ace/lib/es6-shim\"], function(require, exports, module){// vim:set ts=4 sts=4 sw=4 st:\n\"use strict\";\nrequire(\"./es6-shim\");\n\n});\n\nace.define(\"ace/lib/deep_copy\",[\"require\",\"exports\",\"module\"], function(require, exports, module){exports.deepCopy = function deepCopy(obj) {\n if (typeof obj !== \"object\" || !obj)\n return obj;\n var copy;\n if (Array.isArray(obj)) {\n copy = [];\n for (var key = 0; key < obj.length; key++) {\n copy[key] = deepCopy(obj[key]);\n }\n return copy;\n }\n if (Object.prototype.toString.call(obj) !== \"[object Object]\")\n return obj;\n copy = {};\n for (var key in obj)\n copy[key] = deepCopy(obj[key]);\n return copy;\n};\n\n});\n\nace.define(\"ace/lib/lang\",[\"require\",\"exports\",\"module\",\"ace/lib/deep_copy\"], function(require, exports, module){\"use strict\";\nexports.last = function (a) {\n return a[a.length - 1];\n};\nexports.stringReverse = function (string) {\n return string.split(\"\").reverse().join(\"\");\n};\nexports.stringRepeat = function (string, count) {\n var result = '';\n while (count > 0) {\n if (count & 1)\n result += string;\n if (count >>= 1)\n string += string;\n }\n return result;\n};\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\nexports.stringTrimLeft = function (string) {\n return string.replace(trimBeginRegexp, '');\n};\nexports.stringTrimRight = function (string) {\n return string.replace(trimEndRegexp, '');\n};\nexports.copyObject = function (obj) {\n var copy = {};\n for (var key in obj) {\n copy[key] = obj[key];\n }\n return copy;\n};\nexports.copyArray = function (array) {\n var copy = [];\n for (var i = 0, l = array.length; i < l; i++) {\n if (array[i] && typeof array[i] == \"object\")\n copy[i] = this.copyObject(array[i]);\n else\n copy[i] = array[i];\n }\n return copy;\n};\nexports.deepCopy = require(\"./deep_copy\").deepCopy;\nexports.arrayToMap = function (arr) {\n var map = {};\n for (var i = 0; i < arr.length; i++) {\n map[arr[i]] = 1;\n }\n return map;\n};\nexports.createMap = function (props) {\n var map = Object.create(null);\n for (var i in props) {\n map[i] = props[i];\n }\n return map;\n};\nexports.arrayRemove = function (array, value) {\n for (var i = 0; i <= array.length; i++) {\n if (value === array[i]) {\n array.splice(i, 1);\n }\n }\n};\nexports.escapeRegExp = function (str) {\n return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\nexports.escapeHTML = function (str) {\n return (\"\" + str).replace(/&/g, \"&#38;\").replace(/\"/g, \"&#34;\").replace(/'/g, \"&#39;\").replace(/</g, \"&#60;\");\n};\nexports.getMatchOffsets = function (string, regExp) {\n var matches = [];\n string.replace(regExp, function (str) {\n matches.push({\n offset: arguments[arguments.length - 2],\n length: str.length\n });\n });\n return matches;\n};\nexports.deferredCall = function (fcn) {\n var timer = null;\n var callback = function () {\n timer = null;\n fcn();\n };\n var deferred = function (timeout) {\n deferred.cancel();\n timer = setTimeout(callback, timeout || 0);\n return deferred;\n };\n deferred.schedule = deferred;\n deferred.call = function () {\n this.cancel();\n fcn();\n return deferred;\n };\n deferred.cancel = function () {\n clearTimeout(timer);\n timer = null;\n return deferred;\n };\n deferred.isPending = function () {\n return timer;\n };\n return deferred;\n};\nexports.delayedCall = function (fcn, defaultTimeout) {\n var timer = null;\n var callback = function () {\n timer = null;\n fcn();\n };\n var _self = function (timeout) {\n if (timer == null)\n timer = setTimeout(callback, timeout || defaultTimeout);\n };\n _self.delay = function (timeout) {\n timer && clearTimeout(timer);\n timer = setTimeout(callback, timeout || defaultTimeout);\n };\n _self.schedule = _self;\n _self.call = function () {\n this.cancel();\n fcn();\n };\n _self.cancel = function () {\n timer && clearTimeout(timer);\n timer = null;\n };\n _self.isPending = function () {\n return timer;\n };\n return _self;\n};\nexports.supportsLookbehind = function () {\n try {\n new RegExp('(?<=.)');\n }\n catch (e) {\n return false;\n }\n return true;\n};\nexports.skipEmptyMatch = function (line, last, supportsUnicodeFlag) {\n return supportsUnicodeFlag && line.codePointAt(last) > 0xffff ? 2 : 1;\n};\n\n});\n\nace.define(\"ace/lib/useragent\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nexports.OS = {\n LINUX: \"LINUX\",\n MAC: \"MAC\",\n WINDOWS: \"WINDOWS\"\n};\nexports.getOS = function () {\n if (exports.isMac) {\n return exports.OS.MAC;\n }\n else if (exports.isLinux) {\n return exports.OS.LINUX;\n }\n else {\n return exports.OS.WINDOWS;\n }\n};\nvar _navigator = typeof navigator == \"object\" ? navigator : {};\nvar os = (/mac|win|linux/i.exec(_navigator.platform) || [\"other\"])[0].toLowerCase();\nvar ua = _navigator.userAgent || \"\";\nvar appName = _navigator.appName || \"\";\nexports.isWin = (os == \"win\");\nexports.isMac = (os == \"mac\");\nexports.isLinux = (os == \"linux\");\nexports.isIE =\n (appName == \"Microsoft Internet Explorer\" || appName.indexOf(\"MSAppHost\") >= 0)\n ? parseFloat((ua.match(/(?:MSIE |Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/) || [])[1])\n : parseFloat((ua.match(/(?:Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/) || [])[1]); // for ie\nexports.isOldIE = exports.isIE && exports.isIE < 9;\nexports.isGecko = exports.isMozilla = ua.match(/ Gecko\\/\\d+/);\nexports.isOpera = typeof opera == \"object\" && Object.prototype.toString.call(window[\"opera\"]) == \"[object Opera]\";\nexports.isWebKit = parseFloat(ua.split(\"WebKit/\")[1]) || undefined;\nexports.isChrome = parseFloat(ua.split(\" Chrome/\")[1]) || undefined;\nexports.isSafari = parseFloat(ua.split(\" Safari/\")[1]) && !exports.isChrome || undefined;\nexports.isEdge = parseFloat(ua.split(\" Edge/\")[1]) || undefined;\nexports.isAIR = ua.indexOf(\"AdobeAIR\") >= 0;\nexports.isAndroid = ua.indexOf(\"Android\") >= 0;\nexports.isChromeOS = ua.indexOf(\" CrOS \") >= 0;\nexports.isIOS = /iPad|iPhone|iPod/.test(ua) && !window[\"MSStream\"];\nif (exports.isIOS)\n exports.isMac = true;\nexports.isMobile = exports.isIOS || exports.isAndroid;\n\n});\n\nace.define(\"ace/lib/dom\",[\"require\",\"exports\",\"module\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar useragent = require(\"./useragent\");\nvar XHTML_NS = \"http://www.w3.org/1999/xhtml\";\nexports.buildDom = function buildDom(arr, parent, refs) {\n if (typeof arr == \"string\" && arr) {\n var txt = document.createTextNode(arr);\n if (parent)\n parent.appendChild(txt);\n return txt;\n }\n if (!Array.isArray(arr)) {\n if (arr && arr.appendChild && parent)\n parent.appendChild(arr);\n return arr;\n }\n if (typeof arr[0] != \"string\" || !arr[0]) {\n var els = [];\n for (var i = 0; i < arr.length; i++) {\n var ch = buildDom(arr[i], parent, refs);\n ch && els.push(ch);\n }\n return els;\n }\n var el = document.createElement(arr[0]);\n var options = arr[1];\n var childIndex = 1;\n if (options && typeof options == \"object\" && !Array.isArray(options))\n childIndex = 2;\n for (var i = childIndex; i < arr.length; i++)\n buildDom(arr[i], el, refs);\n if (childIndex == 2) {\n Object.keys(options).forEach(function (n) {\n var val = options[n];\n if (n === \"class\") {\n el.className = Array.isArray(val) ? val.join(\" \") : val;\n }\n else if (typeof val == \"function\" || n == \"value\" || n[0] == \"$\") {\n el[n] = val;\n }\n else if (n === \"ref\") {\n if (refs)\n refs[val] = el;\n }\n else if (n === \"style\") {\n if (typeof val == \"string\")\n el.style.cssText = val;\n }\n else if (val != null) {\n el.setAttribute(n, val);\n }\n });\n }\n if (parent)\n parent.appendChild(el);\n return el;\n};\nexports.getDocumentHead = function (doc) {\n if (!doc)\n doc = document;\n return doc.head || doc.getElementsByTagName(\"head\")[0] || doc.documentElement;\n};\nexports.createElement = function (tag, ns) {\n return document.createElementNS ?\n document.createElementNS(ns || XHTML_NS, tag) :\n document.createElement(tag);\n};\nexports.removeChildren = function (element) {\n element.innerHTML = \"\";\n};\nexports.createTextNode = function (textContent, element) {\n var doc = element ? element.ownerDocument : document;\n return doc.createTextNode(textContent);\n};\nexports.createFragment = function (element) {\n var doc = element ? element.ownerDocument : document;\n return doc.createDocumentFragment();\n};\nexports.hasCssClass = function (el, name) {\n var classes = (el.className + \"\").split(/\\s+/g);\n return classes.indexOf(name) !== -1;\n};\nexports.addCssClass = function (el, name) {\n if (!exports.hasCssClass(el, name)) {\n el.className += \" \" + name;\n }\n};\nexports.removeCssClass = function (el, name) {\n var classes = el.className.split(/\\s+/g);\n while (true) {\n var index = classes.indexOf(name);\n if (index == -1) {\n break;\n }\n classes.splice(index, 1);\n }\n el.className = classes.join(\" \");\n};\nexports.toggleCssClass = function (el, name) {\n var classes = el.className.split(/\\s+/g), add = true;\n while (true) {\n var index = classes.indexOf(name);\n if (index == -1) {\n break;\n }\n add = false;\n classes.splice(index, 1);\n }\n if (add)\n classes.push(name);\n el.className = classes.join(\" \");\n return add;\n};\nexports.setCssClass = function (node, className, include) {\n if (include) {\n exports.addCssClass(node, className);\n }\n else {\n exports.removeCssClass(node, className);\n }\n};\nexports.hasCssString = function (id, doc) {\n var index = 0, sheets;\n doc = doc || document;\n if ((sheets = doc.querySelectorAll(\"style\"))) {\n while (index < sheets.length) {\n if (sheets[index++].id === id) {\n return true;\n }\n }\n }\n};\nexports.removeElementById = function (id, doc) {\n doc = doc || document;\n if (doc.getElementById(id)) {\n doc.getElementById(id).remove();\n }\n};\nvar strictCSP;\nvar cssCache = [];\nexports.useStrictCSP = function (value) {\n strictCSP = value;\n if (value == false)\n insertPendingStyles();\n else if (!cssCache)\n cssCache = [];\n};\nfunction insertPendingStyles() {\n var cache = cssCache;\n cssCache = null;\n cache && cache.forEach(function (item) {\n importCssString(item[0], item[1]);\n });\n}\nfunction importCssString(cssText, id, target) {\n if (typeof document == \"undefined\")\n return;\n if (cssCache) {\n if (target) {\n insertPendingStyles();\n }\n else if (target === false) {\n return cssCache.push([cssText, id]);\n }\n }\n if (strictCSP)\n return;\n var container = target;\n if (!target || !target.getRootNode) {\n container = document;\n }\n else {\n container = target.getRootNode();\n if (!container || container == target)\n container = document;\n }\n var doc = container.ownerDocument || container;\n if (id && exports.hasCssString(id, container))\n return null;\n if (id)\n cssText += \"\\n/*# sourceURL=ace/css/\" + id + \" */\";\n var style = exports.createElement(\"style\");\n style.appendChild(doc.createTextNode(cssText));\n if (id)\n style.id = id;\n if (container == doc)\n container = exports.getDocumentHead(doc);\n container.insertBefore(style, container.firstChild);\n}\nexports.importCssString = importCssString;\nexports.importCssStylsheet = function (uri, doc) {\n exports.buildDom([\"link\", { rel: \"stylesheet\", href: uri }], exports.getDocumentHead(doc));\n};\nexports.scrollbarWidth = function (doc) {\n var inner = exports.createElement(\"ace_inner\");\n inner.style.width = \"100%\";\n inner.style.minWidth = \"0px\";\n inner.style.height = \"200px\";\n inner.style.display = \"block\";\n var outer = exports.createElement(\"ace_outer\");\n var style = outer.style;\n style.position = \"absolute\";\n style.left = \"-10000px\";\n style.overflow = \"hidden\";\n style.width = \"200px\";\n style.minWidth = \"0px\";\n style.height = \"150px\";\n style.display = \"block\";\n outer.appendChild(inner);\n var body = (doc && doc.documentElement) || (document && document.documentElement);\n if (!body)\n return 0;\n body.appendChild(outer);\n var noScrollbar = inner.offsetWidth;\n style.overflow = \"scroll\";\n var withScrollbar = inner.offsetWidth;\n if (noScrollbar === withScrollbar) {\n withScrollbar = outer.clientWidth;\n }\n body.removeChild(outer);\n return noScrollbar - withScrollbar;\n};\nexports.computedStyle = function (element, style) {\n return window.getComputedStyle(element, \"\") || {};\n};\nexports.setStyle = function (styles, property, value) {\n if (styles[property] !== value) {\n styles[property] = value;\n }\n};\nexports.HAS_CSS_ANIMATION = false;\nexports.HAS_CSS_TRANSFORMS = false;\nexports.HI_DPI = useragent.isWin\n ? typeof window !== \"undefined\" && window.devicePixelRatio >= 1.5\n : true;\nif (useragent.isChromeOS)\n exports.HI_DPI = false;\nif (typeof document !== \"undefined\") {\n var div = document.createElement(\"div\");\n if (exports.HI_DPI && div.style.transform !== undefined)\n exports.HAS_CSS_TRANSFORMS = true;\n if (!useragent.isEdge && typeof div.style.animationName !== \"undefined\")\n exports.HAS_CSS_ANIMATION = true;\n div = null;\n}\nif (exports.HAS_CSS_TRANSFORMS) {\n exports.translate = function (element, tx, ty) {\n element.style.transform = \"translate(\" + Math.round(tx) + \"px, \" + Math.round(ty) + \"px)\";\n };\n}\nelse {\n exports.translate = function (element, tx, ty) {\n element.style.top = Math.round(ty) + \"px\";\n element.style.left = Math.round(tx) + \"px\";\n };\n}\n\n});\n\nace.define(\"ace/lib/net\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){/*\n * based on code from:\n *\n * @license RequireJS text 0.25.0 Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved.\n * Available via the MIT or new BSD license.\n * see: http://github.com/jrburke/requirejs for details\n */\n\"use strict\";\nvar dom = require(\"./dom\");\nexports.get = function (url, callback) {\n var xhr = new XMLHttpRequest();\n xhr.open('GET', url, true);\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4) {\n callback(xhr.responseText);\n }\n };\n xhr.send(null);\n};\nexports.loadScript = function (path, callback) {\n var head = dom.getDocumentHead();\n var s = document.createElement('script');\n s.src = path;\n head.appendChild(s);\n s.onload = s.onreadystatechange = function (_, isAbort) {\n if (isAbort || !s.readyState || s.readyState == \"loaded\" || s.readyState == \"complete\") {\n s = s.onload = s.onreadystatechange = null;\n if (!isAbort)\n callback();\n }\n };\n};\nexports.qualifyURL = function (url) {\n var a = document.createElement('a');\n a.href = url;\n return a.href;\n};\n\n});\n\nace.define(\"ace/lib/oop\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nexports.inherits = function (ctor, superCtor) {\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n};\nexports.mixin = function (obj, mixin) {\n for (var key in mixin) {\n obj[key] = mixin[key];\n }\n return obj;\n};\nexports.implement = function (proto, mixin) {\n exports.mixin(proto, mixin);\n};\n\n});\n\nace.define(\"ace/lib/event_emitter\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar EventEmitter = {};\nvar stopPropagation = function () { this.propagationStopped = true; };\nvar preventDefault = function () { this.defaultPrevented = true; };\nEventEmitter._emit =\n EventEmitter._dispatchEvent = function (eventName, e) {\n this._eventRegistry || (this._eventRegistry = {});\n this._defaultHandlers || (this._defaultHandlers = {});\n var listeners = this._eventRegistry[eventName] || [];\n var defaultHandler = this._defaultHandlers[eventName];\n if (!listeners.length && !defaultHandler)\n return;\n if (typeof e != \"object\" || !e)\n e = {};\n if (!e.type)\n e.type = eventName;\n if (!e.stopPropagation)\n e.stopPropagation = stopPropagation;\n if (!e.preventDefault)\n e.preventDefault = preventDefault;\n listeners = listeners.slice();\n for (var i = 0; i < listeners.length; i++) {\n listeners[i](e, this);\n if (e.propagationStopped)\n break;\n }\n if (defaultHandler && !e.defaultPrevented)\n return defaultHandler(e, this);\n };\nEventEmitter._signal = function (eventName, e) {\n var listeners = (this._eventRegistry || {})[eventName];\n if (!listeners)\n return;\n listeners = listeners.slice();\n for (var i = 0; i < listeners.length; i++)\n listeners[i](e, this);\n};\nEventEmitter.once = function (eventName, callback) {\n var _self = this;\n this.on(eventName, function newCallback() {\n _self.off(eventName, newCallback);\n callback.apply(null, arguments);\n });\n if (!callback) {\n return new Promise(function (resolve) {\n callback = resolve;\n });\n }\n};\nEventEmitter.setDefaultHandler = function (eventName, callback) {\n var handlers = this._defaultHandlers;\n if (!handlers)\n handlers = this._defaultHandlers = { _disabled_: {} };\n if (handlers[eventName]) {\n var old = handlers[eventName];\n var disabled = handlers._disabled_[eventName];\n if (!disabled)\n handlers._disabled_[eventName] = disabled = [];\n disabled.push(old);\n var i = disabled.indexOf(callback);\n if (i != -1)\n disabled.splice(i, 1);\n }\n handlers[eventName] = callback;\n};\nEventEmitter.removeDefaultHandler = function (eventName, callback) {\n var handlers = this._defaultHandlers;\n if (!handlers)\n return;\n var disabled = handlers._disabled_[eventName];\n if (handlers[eventName] == callback) {\n if (disabled)\n this.setDefaultHandler(eventName, disabled.pop());\n }\n else if (disabled) {\n var i = disabled.indexOf(callback);\n if (i != -1)\n disabled.splice(i, 1);\n }\n};\nEventEmitter.on =\n EventEmitter.addEventListener = function (eventName, callback, capturing) {\n this._eventRegistry = this._eventRegistry || {};\n var listeners = this._eventRegistry[eventName];\n if (!listeners)\n listeners = this._eventRegistry[eventName] = [];\n if (listeners.indexOf(callback) == -1)\n listeners[capturing ? \"unshift\" : \"push\"](callback);\n return callback;\n };\nEventEmitter.off =\n EventEmitter.removeListener =\n EventEmitter.removeEventListener = function (eventName, callback) {\n this._eventRegistry = this._eventRegistry || {};\n var listeners = this._eventRegistry[eventName];\n if (!listeners)\n return;\n var index = listeners.indexOf(callback);\n if (index !== -1)\n listeners.splice(index, 1);\n };\nEventEmitter.removeAllListeners = function (eventName) {\n if (!eventName)\n this._eventRegistry = this._defaultHandlers = undefined;\n if (this._eventRegistry)\n this._eventRegistry[eventName] = undefined;\n if (this._defaultHandlers)\n this._defaultHandlers[eventName] = undefined;\n};\nexports.EventEmitter = EventEmitter;\n\n});\n\nace.define(\"ace/lib/report_error\",[\"require\",\"exports\",\"module\"], function(require, exports, module){exports.reportError = function reportError(msg, data) {\n var e = new Error(msg);\n e[\"data\"] = data;\n if (typeof console == \"object\" && console.error)\n console.error(e);\n setTimeout(function () { throw e; });\n};\n\n});\n\nace.define(\"ace/lib/default_english_messages\",[\"require\",\"exports\",\"module\"], function(require, exports, module){var defaultEnglishMessages = {\n \"autocomplete.popup.aria-roledescription\": \"Autocomplete suggestions\",\n \"autocomplete.popup.aria-label\": \"Autocomplete suggestions\",\n \"autocomplete.popup.item.aria-roledescription\": \"item\",\n \"autocomplete.loading\": \"Loading...\",\n \"editor.scroller.aria-roledescription\": \"editor\",\n \"editor.scroller.aria-label\": \"Editor content, press Enter to start editing, press Escape to exit\",\n \"editor.gutter.aria-roledescription\": \"editor\",\n \"editor.gutter.aria-label\": \"Editor gutter, press Enter to interact with controls using arrow keys, press Escape to exit\",\n \"error-marker.good-state\": \"Looks good!\",\n \"prompt.recently-used\": \"Recently used\",\n \"prompt.other-commands\": \"Other commands\",\n \"prompt.no-matching-commands\": \"No matching commands\",\n \"search-box.find.placeholder\": \"Search for\",\n \"search-box.find-all.text\": \"All\",\n \"search-box.replace.placeholder\": \"Replace with\",\n \"search-box.replace-next.text\": \"Replace\",\n \"search-box.replace-all.text\": \"All\",\n \"search-box.toggle-replace.title\": \"Toggle Replace mode\",\n \"search-box.toggle-regexp.title\": \"RegExp Search\",\n \"search-box.toggle-case.title\": \"CaseSensitive Search\",\n \"search-box.toggle-whole-word.title\": \"Whole Word Search\",\n \"search-box.toggle-in-selection.title\": \"Search In Selection\",\n \"search-box.search-counter\": \"$0 of $1\",\n \"text-input.aria-roledescription\": \"editor\",\n \"text-input.aria-label\": \"Cursor at row $0\",\n \"gutter.code-folding.range.aria-label\": \"Toggle code folding, rows $0 through $1\",\n \"gutter.code-folding.closed.aria-label\": \"Toggle code folding, rows $0 through $1\",\n \"gutter.code-folding.open.aria-label\": \"Toggle code folding, row $0\",\n \"gutter.code-folding.closed.title\": \"Unfold code\",\n \"gutter.code-folding.open.title\": \"Fold code\",\n \"gutter.annotation.aria-label.error\": \"Error, read annotations row $0\",\n \"gutter.annotation.aria-label.warning\": \"Warning, read annotations row $0\",\n \"gutter.annotation.aria-label.info\": \"Info, read annotations row $0\",\n \"inline-fold.closed.title\": \"Unfold code\",\n \"gutter-tooltip.aria-label.error.singular\": \"error\",\n \"gutter-tooltip.aria-label.error.plural\": \"errors\",\n \"gutter-tooltip.aria-label.warning.singular\": \"warning\",\n \"gutter-tooltip.aria-label.warning.plural\": \"warnings\",\n \"gutter-tooltip.aria-label.info.singular\": \"information message\",\n \"gutter-tooltip.aria-label.info.plural\": \"information messages\",\n \"gutter.annotation.aria-label.security\": \"Security finding, read annotations row $0\",\n \"gutter.annotation.aria-label.hint\": \"Suggestion, read annotations row $0\",\n \"gutter-tooltip.aria-label.security.singular\": \"security finding\",\n \"gutter-tooltip.aria-label.security.plural\": \"security findings\",\n \"gutter-tooltip.aria-label.hint.singular\": \"suggestion\",\n \"gutter-tooltip.aria-label.hint.plural\": \"suggestions\"\n};\nexports.defaultEnglishMessages = defaultEnglishMessages;\n\n});\n\nace.define(\"ace/lib/app_config\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\",\"ace/lib/report_error\",\"ace/lib/default_english_messages\"], function(require, exports, module){\"no use strict\";\nvar oop = require(\"./oop\");\nvar EventEmitter = require(\"./event_emitter\").EventEmitter;\nvar reportError = require(\"./report_error\").reportError;\nvar defaultEnglishMessages = require(\"./default_english_messages\").defaultEnglishMessages;\nvar optionsProvider = {\n setOptions: function (optList) {\n Object.keys(optList).forEach(function (key) {\n this.setOption(key, optList[key]);\n }, this);\n },\n getOptions: function (optionNames) {\n var result = {};\n if (!optionNames) {\n var options = this.$options;\n optionNames = Object.keys(options).filter(function (key) {\n return !options[key].hidden;\n });\n }\n else if (!Array.isArray(optionNames)) {\n result = optionNames;\n optionNames = Object.keys(result);\n }\n optionNames.forEach(function (key) {\n result[key] = this.getOption(key);\n }, this);\n return result;\n },\n setOption: function (name, value) {\n if (this[\"$\" + name] === value)\n return;\n var opt = this.$options[name];\n if (!opt) {\n return warn('misspelled option \"' + name + '\"');\n }\n if (opt.forwardTo)\n return this[opt.forwardTo] && this[opt.forwardTo].setOption(name, value);\n if (!opt.handlesSet)\n this[\"$\" + name] = value;\n if (opt && opt.set)\n opt.set.call(this, value);\n },\n getOption: function (name) {\n var opt = this.$options[name];\n if (!opt) {\n return warn('misspelled option \"' + name + '\"');\n }\n if (opt.forwardTo)\n return this[opt.forwardTo] && this[opt.forwardTo].getOption(name);\n return opt && opt.get ? opt.get.call(this) : this[\"$\" + name];\n }\n};\nfunction warn(message) {\n if (typeof console != \"undefined\" && console.warn)\n console.warn.apply(console, arguments);\n}\nvar messages;\nvar nlsPlaceholders;\nvar AppConfig = /** @class */ (function () {\n function AppConfig() {\n this.$defaultOptions = {};\n messages = defaultEnglishMessages;\n nlsPlaceholders = \"dollarSigns\";\n }\n AppConfig.prototype.defineOptions = function (obj, path, options) {\n if (!obj.$options)\n this.$defaultOptions[path] = obj.$options = {};\n Object.keys(options).forEach(function (key) {\n var opt = options[key];\n if (typeof opt == \"string\")\n opt = { forwardTo: opt };\n opt.name || (opt.name = key);\n obj.$options[opt.name] = opt;\n if (\"initialValue\" in opt)\n obj[\"$\" + opt.name] = opt.initialValue;\n });\n oop.implement(obj, optionsProvider);\n return this;\n };\n AppConfig.prototype.resetOptions = function (obj) {\n Object.keys(obj.$options).forEach(function (key) {\n var opt = obj.$options[key];\n if (\"value\" in opt)\n obj.setOption(key, opt.value);\n });\n };\n AppConfig.prototype.setDefaultValue = function (path, name, value) {\n if (!path) {\n for (path in this.$defaultOptions)\n if (this.$defaultOptions[path][name])\n break;\n if (!this.$defaultOptions[path][name])\n return false;\n }\n var opts = this.$defaultOptions[path] || (this.$defaultOptions[path] = {});\n if (opts[name]) {\n if (opts.forwardTo)\n this.setDefaultValue(opts.forwardTo, name, value);\n else\n opts[name].value = value;\n }\n };\n AppConfig.prototype.setDefaultValues = function (path, optionHash) {\n Object.keys(optionHash).forEach(function (key) {\n this.setDefaultValue(path, key, optionHash[key]);\n }, this);\n };\n AppConfig.prototype.setMessages = function (value, options) {\n messages = value;\n if (options && options.placeholders) {\n nlsPlaceholders = options.placeholders;\n }\n };\n AppConfig.prototype.nls = function (key, defaultString, params) {\n if (!messages[key]) {\n warn(\"No message found for the key '\" + key + \"' in the provided messages, trying to find a translation for the default string '\" + defaultString + \"'.\");\n if (!messages[defaultString]) {\n warn(\"No message found for the default string '\" + defaultString + \"' in the provided messages. Falling back to the default English message.\");\n }\n }\n var translated = messages[key] || messages[defaultString] || defaultString;\n if (params) {\n if (nlsPlaceholders === \"dollarSigns\") {\n translated = translated.replace(/\\$(\\$|[\\d]+)/g, function (_, dollarMatch) {\n if (dollarMatch == \"$\")\n return \"$\";\n return params[dollarMatch];\n });\n }\n if (nlsPlaceholders === \"curlyBrackets\") {\n translated = translated.replace(/\\{([^\\}]+)\\}/g, function (_, curlyBracketMatch) {\n return params[curlyBracketMatch];\n });\n }\n }\n return translated;\n };\n return AppConfig;\n}());\nAppConfig.prototype.warn = warn;\nAppConfig.prototype.reportError = reportError;\noop.implement(AppConfig.prototype, EventEmitter);\nexports.AppConfig = AppConfig;\n\n});\n\nace.define(\"ace/theme/textmate-css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \".ace-tm .ace_gutter {\\n background: #f0f0f0;\\n color: #333;\\n}\\n\\n.ace-tm .ace_print-margin {\\n width: 1px;\\n background: #e8e8e8;\\n}\\n\\n.ace-tm .ace_fold {\\n background-color: #6B72E6;\\n}\\n\\n.ace-tm {\\n background-color: #FFFFFF;\\n color: black;\\n}\\n\\n.ace-tm .ace_cursor {\\n color: black;\\n}\\n \\n.ace-tm .ace_invisible {\\n color: rgb(191, 191, 191);\\n}\\n\\n.ace-tm .ace_storage,\\n.ace-tm .ace_keyword {\\n color: blue;\\n}\\n\\n.ace-tm .ace_constant {\\n color: rgb(197, 6, 11);\\n}\\n\\n.ace-tm .ace_constant.ace_buildin {\\n color: rgb(88, 72, 246);\\n}\\n\\n.ace-tm .ace_constant.ace_language {\\n color: rgb(88, 92, 246);\\n}\\n\\n.ace-tm .ace_constant.ace_library {\\n color: rgb(6, 150, 14);\\n}\\n\\n.ace-tm .ace_invalid {\\n background-color: rgba(255, 0, 0, 0.1);\\n color: red;\\n}\\n\\n.ace-tm .ace_support.ace_function {\\n color: rgb(60, 76, 114);\\n}\\n\\n.ace-tm .ace_support.ace_constant {\\n color: rgb(6, 150, 14);\\n}\\n\\n.ace-tm .ace_support.ace_type,\\n.ace-tm .ace_support.ace_class {\\n color: rgb(109, 121, 222);\\n}\\n\\n.ace-tm .ace_keyword.ace_operator {\\n color: rgb(104, 118, 135);\\n}\\n\\n.ace-tm .ace_string {\\n color: rgb(3, 106, 7);\\n}\\n\\n.ace-tm .ace_comment {\\n color: rgb(76, 136, 107);\\n}\\n\\n.ace-tm .ace_comment.ace_doc {\\n color: rgb(0, 102, 255);\\n}\\n\\n.ace-tm .ace_comment.ace_doc.ace_tag {\\n color: rgb(128, 159, 191);\\n}\\n\\n.ace-tm .ace_constant.ace_numeric {\\n color: rgb(0, 0, 205);\\n}\\n\\n.ace-tm .ace_variable {\\n color: rgb(49, 132, 149);\\n}\\n\\n.ace-tm .ace_xml-pe {\\n color: rgb(104, 104, 91);\\n}\\n\\n.ace-tm .ace_entity.ace_name.ace_function {\\n color: #0000A2;\\n}\\n\\n\\n.ace-tm .ace_heading {\\n color: rgb(12, 7, 255);\\n}\\n\\n.ace-tm .ace_list {\\n color:rgb(185, 6, 144);\\n}\\n\\n.ace-tm .ace_meta.ace_tag {\\n color:rgb(0, 22, 142);\\n}\\n\\n.ace-tm .ace_string.ace_regex {\\n color: rgb(255, 0, 0)\\n}\\n\\n.ace-tm .ace_marker-layer .ace_selection {\\n background: rgb(181, 213, 255);\\n}\\n.ace-tm.ace_multiselect .ace_selection.ace_start {\\n box-shadow: 0 0 3px 0px white;\\n}\\n.ace-tm .ace_marker-layer .ace_step {\\n background: rgb(252, 255, 0);\\n}\\n\\n.ace-tm .ace_marker-layer .ace_stack {\\n background: rgb(164, 229, 101);\\n}\\n\\n.ace-tm .ace_marker-layer .ace_bracket {\\n margin: -1px 0 0 -1px;\\n border: 1px solid rgb(192, 192, 192);\\n}\\n\\n.ace-tm .ace_marker-layer .ace_active-line {\\n background: rgba(0, 0, 0, 0.07);\\n}\\n\\n.ace-tm .ace_gutter-active-line {\\n background-color : #dcdcdc;\\n}\\n\\n.ace-tm .ace_marker-layer .ace_selected-word {\\n background: rgb(250, 250, 255);\\n border: 1px solid rgb(200, 200, 250);\\n}\\n\\n.ace-tm .ace_indent-guide {\\n background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\n}\\n\\n.ace-tm .ace_indent-guide-active {\\n background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC\\\") right repeat-y;\\n}\\n\";\n\n});\n\nace.define(\"ace/theme/textmate\",[\"require\",\"exports\",\"module\",\"ace/theme/textmate-css\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nexports.isDark = false;\nexports.cssClass = \"ace-tm\";\nexports.cssText = require(\"./textmate-css\");\nexports.$id = \"ace/theme/textmate\";\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n});\n\nace.define(\"ace/config\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/net\",\"ace/lib/dom\",\"ace/lib/app_config\",\"ace/theme/textmate\"], function(require, exports, module){\"no use strict\";\nvar lang = require(\"./lib/lang\");\nvar net = require(\"./lib/net\");\nvar dom = require(\"./lib/dom\");\nvar AppConfig = require(\"./lib/app_config\").AppConfig;\nmodule.exports = exports = new AppConfig();\nvar options = {\n packaged: false,\n workerPath: null,\n modePath: null,\n themePath: null,\n basePath: \"\",\n suffix: \".js\",\n $moduleUrls: {},\n loadWorkerFromBlob: true,\n sharedPopups: false,\n useStrictCSP: null\n};\nexports.get = function (key) {\n if (!options.hasOwnProperty(key))\n throw new Error(\"Unknown config key: \" + key);\n return options[key];\n};\nexports.set = function (key, value) {\n if (options.hasOwnProperty(key))\n options[key] = value;\n else if (this.setDefaultValue(\"\", key, value) == false)\n throw new Error(\"Unknown config key: \" + key);\n if (key == \"useStrictCSP\")\n dom.useStrictCSP(value);\n};\nexports.all = function () {\n return lang.copyObject(options);\n};\nexports.$modes = {};\nexports.moduleUrl = function (name, component) {\n if (options.$moduleUrls[name])\n return options.$moduleUrls[name];\n var parts = name.split(\"/\");\n component = component || parts[parts.length - 2] || \"\";\n var sep = component == \"snippets\" ? \"/\" : \"-\";\n var base = parts[parts.length - 1];\n if (component == \"worker\" && sep == \"-\") {\n var re = new RegExp(\"^\" + component + \"[\\\\-_]|[\\\\-_]\" + component + \"$\", \"g\");\n base = base.replace(re, \"\");\n }\n if ((!base || base == component) && parts.length > 1)\n base = parts[parts.length - 2];\n var path = options[component + \"Path\"];\n if (path == null) {\n path = options.basePath;\n }\n else if (sep == \"/\") {\n component = sep = \"\";\n }\n if (path && path.slice(-1) != \"/\")\n path += \"/\";\n return path + component + sep + base + this.get(\"suffix\");\n};\nexports.setModuleUrl = function (name, subst) {\n return options.$moduleUrls[name] = subst;\n};\nvar loader = function (moduleName, cb) {\n if (moduleName === \"ace/theme/textmate\" || moduleName === \"./theme/textmate\")\n return cb(null, require(\"./theme/textmate\"));\n if (customLoader)\n return customLoader(moduleName, cb);\n console.error(\"loader is not configured\");\n};\nvar customLoader;\nexports.setLoader = function (cb) {\n customLoader = cb;\n};\nexports.dynamicModules = Object.create(null);\nexports.$loading = {};\nexports.$loaded = {};\nexports.loadModule = function (moduleId, onLoad) {\n var loadedModule;\n if (Array.isArray(moduleId)) {\n var moduleType = moduleId[0];\n var moduleName = moduleId[1];\n }\n else if (typeof moduleId == \"string\") {\n var moduleName = moduleId;\n }\n var load = function (module) {\n if (module && !exports.$loading[moduleName])\n return onLoad && onLoad(module);\n if (!exports.$loading[moduleName])\n exports.$loading[moduleName] = [];\n exports.$loading[moduleName].push(onLoad);\n if (exports.$loading[moduleName].length > 1)\n return;\n var afterLoad = function () {\n loader(moduleName, function (err, module) {\n if (module)\n exports.$loaded[moduleName] = module;\n exports._emit(\"load.module\", { name: moduleName, module: module });\n var listeners = exports.$loading[moduleName];\n exports.$loading[moduleName] = null;\n listeners.forEach(function (onLoad) {\n onLoad && onLoad(module);\n });\n });\n };\n if (!exports.get(\"packaged\"))\n return afterLoad();\n net.loadScript(exports.moduleUrl(moduleName, moduleType), afterLoad);\n reportErrorIfPathIsNotConfigured();\n };\n if (exports.dynamicModules[moduleName]) {\n exports.dynamicModules[moduleName]().then(function (module) {\n if (module.default) {\n load(module.default);\n }\n else {\n load(module);\n }\n });\n }\n else {\n try {\n loadedModule = this.$require(moduleName);\n }\n catch (e) { }\n load(loadedModule || exports.$loaded[moduleName]);\n }\n};\nexports.$require = function (moduleName) {\n if (typeof module[\"require\"] == \"function\") {\n var req = \"require\";\n return module[req](moduleName);\n }\n};\nexports.setModuleLoader = function (moduleName, onLoad) {\n exports.dynamicModules[moduleName] = onLoad;\n};\nvar reportErrorIfPathIsNotConfigured = function () {\n if (!options.basePath && !options.workerPath\n && !options.modePath && !options.themePath\n && !Object.keys(options.$moduleUrls).length) {\n console.error(\"Unable to infer path to ace from script src,\", \"use ace.config.set('basePath', 'path') to enable dynamic loading of modes and themes\", \"or with webpack use ace/webpack-resolver\");\n reportErrorIfPathIsNotConfigured = function () { };\n }\n};\nexports.version = \"1.36.2\";\n\n});\n\nace.define(\"ace/loader_build\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nrequire(\"./lib/fixoldbrowsers\");\nvar config = require(\"./config\");\nconfig.setLoader(function(moduleName, cb) {\n require([moduleName], function(module) {\n cb(null, module);\n });\n});\n\nvar global = (function() {\n return this || typeof window != \"undefined\" && window;\n})();\n\nmodule.exports = function(ace) {\n config.init = init;\n config.$require = require;\n ace.require = require;\n\n if (typeof define === \"function\")\n ace.define = define;\n};\ninit(true);function init(packaged) {\n\n if (!global || !global.document)\n return;\n \n config.set(\"packaged\", packaged || require.packaged || module.packaged || (global.define && define.packaged));\n\n var scriptOptions = {};\n var scriptUrl = \"\";\n var currentScript = (document.currentScript || document._currentScript ); // native or polyfill\n var currentDocument = currentScript && currentScript.ownerDocument || document;\n \n if (currentScript && currentScript.src) {\n scriptUrl = currentScript.src.split(/[?#]/)[0].split(\"/\").slice(0, -1).join(\"/\") || \"\";\n }\n \n var scripts = currentDocument.getElementsByTagName(\"script\");\n for (var i=0; i<scripts.length; i++) {\n var script = scripts[i];\n\n var src = script.src || script.getAttribute(\"src\");\n if (!src)\n continue;\n\n var attributes = script.attributes;\n for (var j=0, l=attributes.length; j < l; j++) {\n var attr = attributes[j];\n if (attr.name.indexOf(\"data-ace-\") === 0) {\n scriptOptions[deHyphenate(attr.name.replace(/^data-ace-/, \"\"))] = attr.value;\n }\n }\n\n var m = src.match(/^(.*)\\/ace([\\-.]\\w+)?\\.js(\\?|$)/);\n if (m)\n scriptUrl = m[1];\n }\n\n if (scriptUrl) {\n scriptOptions.base = scriptOptions.base || scriptUrl;\n scriptOptions.packaged = true;\n }\n\n scriptOptions.basePath = scriptOptions.base;\n scriptOptions.workerPath = scriptOptions.workerPath || scriptOptions.base;\n scriptOptions.modePath = scriptOptions.modePath || scriptOptions.base;\n scriptOptions.themePath = scriptOptions.themePath || scriptOptions.base;\n delete scriptOptions.base;\n\n for (var key in scriptOptions)\n if (typeof scriptOptions[key] !== \"undefined\")\n config.set(key, scriptOptions[key]);\n}\n\nfunction deHyphenate(str) {\n return str.replace(/-(.)/g, function(m, m1) { return m1.toUpperCase(); });\n}\n});\n\nace.define(\"ace/range\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar Range = /** @class */ (function () {\n function Range(startRow, startColumn, endRow, endColumn) {\n this.start = {\n row: startRow,\n column: startColumn\n };\n this.end = {\n row: endRow,\n column: endColumn\n };\n }\n Range.prototype.isEqual = function (range) {\n return this.start.row === range.start.row &&\n this.end.row === range.end.row &&\n this.start.column === range.start.column &&\n this.end.column === range.end.column;\n };\n Range.prototype.toString = function () {\n return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\n \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\n };\n Range.prototype.contains = function (row, column) {\n return this.compare(row, column) == 0;\n };\n Range.prototype.compareRange = function (range) {\n var cmp, end = range.end, start = range.start;\n cmp = this.compare(end.row, end.column);\n if (cmp == 1) {\n cmp = this.compare(start.row, start.column);\n if (cmp == 1) {\n return 2;\n }\n else if (cmp == 0) {\n return 1;\n }\n else {\n return 0;\n }\n }\n else if (cmp == -1) {\n return -2;\n }\n else {\n cmp = this.compare(start.row, start.column);\n if (cmp == -1) {\n return -1;\n }\n else if (cmp == 1) {\n return 42;\n }\n else {\n return 0;\n }\n }\n };\n Range.prototype.comparePoint = function (p) {\n return this.compare(p.row, p.column);\n };\n Range.prototype.containsRange = function (range) {\n return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n };\n Range.prototype.intersects = function (range) {\n var cmp = this.compareRange(range);\n return (cmp == -1 || cmp == 0 || cmp == 1);\n };\n Range.prototype.isEnd = function (row, column) {\n return this.end.row == row && this.end.column == column;\n };\n Range.prototype.isStart = function (row, column) {\n return this.start.row == row && this.start.column == column;\n };\n Range.prototype.setStart = function (row, column) {\n if (typeof row == \"object\") {\n this.start.column = row.column;\n this.start.row = row.row;\n }\n else {\n this.start.row = row;\n this.start.column = column;\n }\n };\n Range.prototype.setEnd = function (row, column) {\n if (typeof row == \"object\") {\n this.end.column = row.column;\n this.end.row = row.row;\n }\n else {\n this.end.row = row;\n this.end.column = column;\n }\n };\n Range.prototype.inside = function (row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isEnd(row, column) || this.isStart(row, column)) {\n return false;\n }\n else {\n return true;\n }\n }\n return false;\n };\n Range.prototype.insideStart = function (row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isEnd(row, column)) {\n return false;\n }\n else {\n return true;\n }\n }\n return false;\n };\n Range.prototype.insideEnd = function (row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isStart(row, column)) {\n return false;\n }\n else {\n return true;\n }\n }\n return false;\n };\n Range.prototype.compare = function (row, column) {\n if (!this.isMultiLine()) {\n if (row === this.start.row) {\n return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n }\n }\n if (row < this.start.row)\n return -1;\n if (row > this.end.row)\n return 1;\n if (this.start.row === row)\n return column >= this.start.column ? 0 : -1;\n if (this.end.row === row)\n return column <= this.end.column ? 0 : 1;\n return 0;\n };\n Range.prototype.compareStart = function (row, column) {\n if (this.start.row == row && this.start.column == column) {\n return -1;\n }\n else {\n return this.compare(row, column);\n }\n };\n Range.prototype.compareEnd = function (row, column) {\n if (this.end.row == row && this.end.column == column) {\n return 1;\n }\n else {\n return this.compare(row, column);\n }\n };\n Range.prototype.compareInside = function (row, column) {\n if (this.end.row == row && this.end.column == column) {\n return 1;\n }\n else if (this.start.row == row && this.start.column == column) {\n return -1;\n }\n else {\n return this.compare(row, column);\n }\n };\n Range.prototype.clipRows = function (firstRow, lastRow) {\n if (this.end.row > lastRow)\n var end = { row: lastRow + 1, column: 0 };\n else if (this.end.row < firstRow)\n var end = { row: firstRow, column: 0 };\n if (this.start.row > lastRow)\n var start = { row: lastRow + 1, column: 0 };\n else if (this.start.row < firstRow)\n var start = { row: firstRow, column: 0 };\n return Range.fromPoints(start || this.start, end || this.end);\n };\n Range.prototype.extend = function (row, column) {\n var cmp = this.compare(row, column);\n if (cmp == 0)\n return this;\n else if (cmp == -1)\n var start = { row: row, column: column };\n else\n var end = { row: row, column: column };\n return Range.fromPoints(start || this.start, end || this.end);\n };\n Range.prototype.isEmpty = function () {\n return (this.start.row === this.end.row && this.start.column === this.end.column);\n };\n Range.prototype.isMultiLine = function () {\n return (this.start.row !== this.end.row);\n };\n Range.prototype.clone = function () {\n return Range.fromPoints(this.start, this.end);\n };\n Range.prototype.collapseRows = function () {\n if (this.end.column == 0)\n return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row - 1), 0);\n else\n return new Range(this.start.row, 0, this.end.row, 0);\n };\n Range.prototype.toScreenRange = function (session) {\n var screenPosStart = session.documentToScreenPosition(this.start);\n var screenPosEnd = session.documentToScreenPosition(this.end);\n return new Range(screenPosStart.row, screenPosStart.column, screenPosEnd.row, screenPosEnd.column);\n };\n Range.prototype.moveBy = function (row, column) {\n this.start.row += row;\n this.start.column += column;\n this.end.row += row;\n this.end.column += column;\n };\n return Range;\n}());\nRange.fromPoints = function (start, end) {\n return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = function (p1, p2) {\n return p1.row - p2.row || p1.column - p2.column;\n};\nexports.Range = Range;\n\n});\n\nace.define(\"ace/lib/keys\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./oop\");\nvar Keys = {\n MODIFIER_KEYS: {\n 16: 'Shift', 17: 'Ctrl', 18: 'Alt', 224: 'Meta',\n 91: 'MetaLeft', 92: 'MetaRight', 93: 'ContextMenu'\n },\n KEY_MODS: {\n \"ctrl\": 1, \"alt\": 2, \"option\": 2, \"shift\": 4,\n \"super\": 8, \"meta\": 8, \"command\": 8, \"cmd\": 8,\n \"control\": 1\n },\n FUNCTION_KEYS: {\n 8: \"Backspace\",\n 9: \"Tab\",\n 13: \"Return\",\n 19: \"Pause\",\n 27: \"Esc\",\n 32: \"Space\",\n 33: \"PageUp\",\n 34: \"PageDown\",\n 35: \"End\",\n 36: \"Home\",\n 37: \"Left\",\n 38: \"Up\",\n 39: \"Right\",\n 40: \"Down\",\n 44: \"Print\",\n 45: \"Insert\",\n 46: \"Delete\",\n '-13': \"NumpadEnter\",\n 144: \"Numlock\",\n 145: \"Scrolllock\"\n },\n PRINTABLE_KEYS: {\n 32: ' ', 59: ';', 61: '=', 107: '+', 109: '-', 110: '.',\n 186: ';', 187: '=', 188: ',', 189: '-', 190: '.', 191: '/', 192: '`',\n 219: '[', 220: '\\\\', 221: ']', 222: \"'\", 111: '/', 106: '*'\n }\n};\nvar codeToKeyCode = {\n Command: 224,\n Backspace: 8,\n Tab: 9,\n Return: 13,\n Enter: 13,\n Pause: 19,\n Escape: 27,\n PageUp: 33,\n PageDown: 34,\n End: 35,\n Home: 36,\n Insert: 45,\n Delete: 46,\n ArrowLeft: 37,\n ArrowUp: 38,\n ArrowRight: 39,\n ArrowDown: 40,\n Backquote: 192,\n Minus: 189,\n Equal: 187,\n BracketLeft: 219,\n Backslash: 220,\n BracketRight: 221,\n Semicolon: 186,\n Quote: 222,\n Comma: 188,\n Period: 190,\n Slash: 191,\n Space: 32,\n NumpadAdd: 107,\n NumpadDecimal: 110,\n NumpadSubtract: 109,\n NumpadDivide: 111,\n NumpadMultiply: 106\n};\nfor (var i = 0; i < 10; i++) {\n codeToKeyCode[\"Digit\" + i] = 48 + i;\n codeToKeyCode[\"Numpad\" + i] = 96 + i;\n Keys.PRINTABLE_KEYS[48 + i] = \"\" + i;\n Keys.FUNCTION_KEYS[96 + i] = \"Numpad\" + i;\n}\nfor (var i = 65; i < 91; i++) {\n var chr = String.fromCharCode(i + 32);\n codeToKeyCode[\"Key\" + chr.toUpperCase()] = i;\n Keys.PRINTABLE_KEYS[i] = chr;\n}\nfor (var i = 1; i < 13; i++) {\n codeToKeyCode[\"F\" + i] = 111 + i;\n Keys.FUNCTION_KEYS[111 + i] = \"F\" + i;\n}\nvar modifiers = {\n Shift: 16,\n Control: 17,\n Alt: 18,\n Meta: 224\n};\nfor (var mod in modifiers) {\n codeToKeyCode[mod] = codeToKeyCode[mod + \"Left\"]\n = codeToKeyCode[mod + \"Right\"] = modifiers[mod];\n}\nexports.$codeToKeyCode = codeToKeyCode;\nKeys.PRINTABLE_KEYS[173] = '-';\nfor (var j in Keys.FUNCTION_KEYS) {\n var name = Keys.FUNCTION_KEYS[j].toLowerCase();\n Keys[name] = parseInt(j, 10);\n}\nfor (var j in Keys.PRINTABLE_KEYS) {\n var name = Keys.PRINTABLE_KEYS[j].toLowerCase();\n Keys[name] = parseInt(j, 10);\n}\noop.mixin(Keys, Keys.MODIFIER_KEYS);\noop.mixin(Keys, Keys.PRINTABLE_KEYS);\noop.mixin(Keys, Keys.FUNCTION_KEYS);\nKeys.enter = Keys[\"return\"];\nKeys.escape = Keys.esc;\nKeys.del = Keys[\"delete\"];\n(function () {\n var mods = [\"cmd\", \"ctrl\", \"alt\", \"shift\"];\n for (var i = Math.pow(2, mods.length); i--;) {\n Keys.KEY_MODS[i] = mods.filter(function (x) {\n return i & Keys.KEY_MODS[x];\n }).join(\"-\") + \"-\";\n }\n})();\nKeys.KEY_MODS[0] = \"\";\nKeys.KEY_MODS[-1] = \"input-\";\noop.mixin(exports, Keys);\nexports.default = exports;\nexports.keyCodeToString = function (keyCode) {\n var keyString = Keys[keyCode];\n if (typeof keyString != \"string\")\n keyString = String.fromCharCode(keyCode);\n return keyString.toLowerCase();\n};\n\n});\n\nace.define(\"ace/lib/event\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\"; var keys = require(\"./keys\");\nvar useragent = require(\"./useragent\");\nvar pressedKeys = null;\nvar ts = 0;\nvar activeListenerOptions;\nfunction detectListenerOptionsSupport() {\n activeListenerOptions = false;\n try {\n document.createComment(\"\").addEventListener(\"test\", function () { }, {\n get passive() {\n activeListenerOptions = { passive: false };\n return true;\n }\n });\n }\n catch (e) { }\n}\nfunction getListenerOptions() {\n if (activeListenerOptions == undefined)\n detectListenerOptionsSupport();\n return activeListenerOptions;\n}\nfunction EventListener(elem, type, callback) {\n this.elem = elem;\n this.type = type;\n this.callback = callback;\n}\nEventListener.prototype.destroy = function () {\n removeListener(this.elem, this.type, this.callback);\n this.elem = this.type = this.callback = undefined;\n};\nvar addListener = exports.addListener = function (elem, type, callback, /**@type{any?}*/ destroyer) {\n elem.addEventListener(type, callback, getListenerOptions());\n if (destroyer)\n destroyer.$toDestroy.push(new EventListener(elem, type, callback));\n};\nvar removeListener = exports.removeListener = function (elem, type, callback) {\n elem.removeEventListener(type, callback, getListenerOptions());\n};\nexports.stopEvent = function (e) {\n exports.stopPropagation(e);\n exports.preventDefault(e);\n return false;\n};\nexports.stopPropagation = function (e) {\n if (e.stopPropagation)\n e.stopPropagation();\n};\nexports.preventDefault = function (e) {\n if (e.preventDefault)\n e.preventDefault();\n};\nexports.getButton = function (e) {\n if (e.type == \"dblclick\")\n return 0;\n if (e.type == \"contextmenu\" || (useragent.isMac && (e.ctrlKey && !e.altKey && !e.shiftKey)))\n return 2;\n return e.button;\n};\nexports.capture = function (el, eventHandler, releaseCaptureHandler) {\n var ownerDocument = el && el.ownerDocument || document;\n function onMouseUp(e) {\n eventHandler && eventHandler(e);\n releaseCaptureHandler && releaseCaptureHandler(e);\n removeListener(ownerDocument, \"mousemove\", eventHandler);\n removeListener(ownerDocument, \"mouseup\", onMouseUp);\n removeListener(ownerDocument, \"dragstart\", onMouseUp);\n }\n addListener(ownerDocument, \"mousemove\", eventHandler);\n addListener(ownerDocument, \"mouseup\", onMouseUp);\n addListener(ownerDocument, \"dragstart\", onMouseUp);\n return onMouseUp;\n};\nexports.addMouseWheelListener = function (el, callback, destroyer) {\n addListener(el, \"wheel\", function (e) {\n var factor = 0.15;\n var deltaX = e.deltaX || 0;\n var deltaY = e.deltaY || 0;\n switch (e.deltaMode) {\n case e.DOM_DELTA_PIXEL:\n e.wheelX = deltaX * factor;\n e.wheelY = deltaY * factor;\n break;\n case e.DOM_DELTA_LINE:\n var linePixels = 15;\n e.wheelX = deltaX * linePixels;\n e.wheelY = deltaY * linePixels;\n break;\n case e.DOM_DELTA_PAGE:\n var pagePixels = 150;\n e.wheelX = deltaX * pagePixels;\n e.wheelY = deltaY * pagePixels;\n break;\n }\n callback(e);\n }, destroyer);\n};\nexports.addMultiMouseDownListener = function (elements, timeouts, eventHandler, callbackName, destroyer) {\n var clicks = 0;\n var startX, startY, timer;\n var eventNames = {\n 2: \"dblclick\",\n 3: \"tripleclick\",\n 4: \"quadclick\"\n };\n function onMousedown(e) {\n if (exports.getButton(e) !== 0) {\n clicks = 0;\n }\n else if (e.detail > 1) {\n clicks++;\n if (clicks > 4)\n clicks = 1;\n }\n else {\n clicks = 1;\n }\n if (useragent.isIE) {\n var isNewClick = Math.abs(e.clientX - startX) > 5 || Math.abs(e.clientY - startY) > 5;\n if (!timer || isNewClick)\n clicks = 1;\n if (timer)\n clearTimeout(timer);\n timer = setTimeout(function () { timer = null; }, timeouts[clicks - 1] || 600);\n if (clicks == 1) {\n startX = e.clientX;\n startY = e.clientY;\n }\n }\n e._clicks = clicks;\n eventHandler[callbackName](\"mousedown\", e);\n if (clicks > 4)\n clicks = 0;\n else if (clicks > 1)\n return eventHandler[callbackName](eventNames[clicks], e);\n }\n if (!Array.isArray(elements))\n elements = [elements];\n elements.forEach(function (el) {\n addListener(el, \"mousedown\", onMousedown, destroyer);\n });\n};\nfunction getModifierHash(e) {\n return 0 | (e.ctrlKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.metaKey ? 8 : 0);\n}\nexports.getModifierString = function (e) {\n return keys.KEY_MODS[getModifierHash(e)];\n};\nfunction normalizeCommandKeys(callback, e, keyCode) {\n var hashId = getModifierHash(e);\n if (!keyCode && e.code) {\n keyCode = keys.$codeToKeyCode[e.code] || keyCode;\n }\n if (!useragent.isMac && pressedKeys) {\n if (e.getModifierState && (e.getModifierState(\"OS\") || e.getModifierState(\"Win\")))\n hashId |= 8;\n if (pressedKeys.altGr) {\n if ((3 & hashId) != 3)\n pressedKeys.altGr = 0;\n else\n return;\n }\n if (keyCode === 18 || keyCode === 17) {\n var location = e.location;\n if (keyCode === 17 && location === 1) {\n if (pressedKeys[keyCode] == 1)\n ts = e.timeStamp;\n }\n else if (keyCode === 18 && hashId === 3 && location === 2) {\n var dt = e.timeStamp - ts;\n if (dt < 50)\n pressedKeys.altGr = true;\n }\n }\n }\n if (keyCode in keys.MODIFIER_KEYS) {\n keyCode = -1;\n }\n if (!hashId && keyCode === 13) {\n if (e.location === 3) {\n callback(e, hashId, -keyCode);\n if (e.defaultPrevented)\n return;\n }\n }\n if (useragent.isChromeOS && hashId & 8) {\n callback(e, hashId, keyCode);\n if (e.defaultPrevented)\n return;\n else\n hashId &= ~8;\n }\n if (!hashId && !(keyCode in keys.FUNCTION_KEYS) && !(keyCode in keys.PRINTABLE_KEYS)) {\n return false;\n }\n return callback(e, hashId, keyCode);\n}\nexports.addCommandKeyListener = function (el, callback, destroyer) {\n var lastDefaultPrevented = null;\n addListener(el, \"keydown\", function (e) {\n pressedKeys[e.keyCode] = (pressedKeys[e.keyCode] || 0) + 1;\n var result = normalizeCommandKeys(callback, e, e.keyCode);\n lastDefaultPrevented = e.defaultPrevented;\n return result;\n }, destroyer);\n addListener(el, \"keypress\", function (e) {\n if (lastDefaultPrevented && (e.ctrlKey || e.altKey || e.shiftKey || e.metaKey)) {\n exports.stopEvent(e);\n lastDefaultPrevented = null;\n }\n }, destroyer);\n addListener(el, \"keyup\", function (e) {\n pressedKeys[e.keyCode] = null;\n }, destroyer);\n if (!pressedKeys) {\n resetPressedKeys();\n addListener(window, \"focus\", resetPressedKeys);\n }\n};\nfunction resetPressedKeys() {\n pressedKeys = Object.create(null);\n}\nif (typeof window == \"object\" && window.postMessage && !useragent.isOldIE) {\n var postMessageId = 1;\n exports.nextTick = function (callback, win) {\n win = win || window;\n var messageName = \"zero-timeout-message-\" + (postMessageId++);\n var listener = function (e) {\n if (e.data == messageName) {\n exports.stopPropagation(e);\n removeListener(win, \"message\", listener);\n callback();\n }\n };\n addListener(win, \"message\", listener);\n win.postMessage(messageName, \"*\");\n };\n}\nexports.$idleBlocked = false;\nexports.onIdle = function (cb, timeout) {\n return setTimeout(function handler() {\n if (!exports.$idleBlocked) {\n cb();\n }\n else {\n setTimeout(handler, 100);\n }\n }, timeout);\n};\nexports.$idleBlockId = null;\nexports.blockIdle = function (delay) {\n if (exports.$idleBlockId)\n clearTimeout(exports.$idleBlockId);\n exports.$idleBlocked = true;\n exports.$idleBlockId = setTimeout(function () {\n exports.$idleBlocked = false;\n }, delay || 100);\n};\nexports.nextFrame = typeof window == \"object\" && (window.requestAnimationFrame\n || window[\"mozRequestAnimationFrame\"]\n || window[\"webkitRequestAnimationFrame\"]\n || window[\"msRequestAnimationFrame\"]\n || window[\"oRequestAnimationFrame\"]);\nif (exports.nextFrame)\n exports.nextFrame = exports.nextFrame.bind(window);\nelse\n exports.nextFrame = function (callback) {\n setTimeout(callback, 17);\n };\n\n});\n\nace.define(\"ace/clipboard\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar $cancelT;\nmodule.exports = {\n lineMode: false,\n pasteCancelled: function () {\n if ($cancelT && $cancelT > Date.now() - 50)\n return true;\n return $cancelT = false;\n },\n cancel: function () {\n $cancelT = Date.now();\n }\n};\n\n});\n\nace.define(\"ace/keyboard/textinput\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/config\",\"ace/lib/useragent\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/clipboard\",\"ace/lib/keys\"], function(require, exports, module){\"use strict\";\nvar event = require(\"../lib/event\");\nvar nls = require(\"../config\").nls;\nvar useragent = require(\"../lib/useragent\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar clipboard = require(\"../clipboard\");\nvar BROKEN_SETDATA = useragent.isChrome < 18;\nvar USE_IE_MIME_TYPE = useragent.isIE;\nvar HAS_FOCUS_ARGS = useragent.isChrome > 63;\nvar MAX_LINE_LENGTH = 400;\nvar KEYS = require(\"../lib/keys\");\nvar MODS = KEYS.KEY_MODS;\nvar isIOS = useragent.isIOS;\nvar valueResetRegex = isIOS ? /\\s/ : /\\n/;\nvar isMobile = useragent.isMobile;\nvar TextInput;\nTextInput = function (parentNode, host) {\n var text = dom.createElement(\"textarea\");\n text.className = \"ace_text-input\";\n text.setAttribute(\"wrap\", \"off\");\n text.setAttribute(\"autocorrect\", \"off\");\n text.setAttribute(\"autocapitalize\", \"off\");\n text.setAttribute(\"spellcheck\", \"false\");\n text.style.opacity = \"0\";\n parentNode.insertBefore(text, parentNode.firstChild);\n var copied = false;\n var pasted = false;\n var inComposition = false;\n var sendingText = false;\n var tempStyle = '';\n if (!isMobile)\n text.style.fontSize = \"1px\";\n var commandMode = false;\n var ignoreFocusEvents = false;\n var lastValue = \"\";\n var lastSelectionStart = 0;\n var lastSelectionEnd = 0;\n var lastRestoreEnd = 0;\n var rowStart = Number.MAX_SAFE_INTEGER;\n var rowEnd = Number.MIN_SAFE_INTEGER;\n var numberOfExtraLines = 0;\n try {\n var isFocused = document.activeElement === text;\n }\n catch (e) { }\n this.setNumberOfExtraLines = function (number) {\n rowStart = Number.MAX_SAFE_INTEGER;\n rowEnd = Number.MIN_SAFE_INTEGER;\n if (number < 0) {\n numberOfExtraLines = 0;\n return;\n }\n numberOfExtraLines = number;\n };\n this.setAriaOptions = function (options) {\n if (options.activeDescendant) {\n text.setAttribute(\"aria-haspopup\", \"true\");\n text.setAttribute(\"aria-autocomplete\", options.inline ? \"both\" : \"list\");\n text.setAttribute(\"aria-activedescendant\", options.activeDescendant);\n }\n else {\n text.setAttribute(\"aria-haspopup\", \"false\");\n text.setAttribute(\"aria-autocomplete\", \"both\");\n text.removeAttribute(\"aria-activedescendant\");\n }\n if (options.role) {\n text.setAttribute(\"role\", options.role);\n }\n if (options.setLabel) {\n text.setAttribute(\"aria-roledescription\", nls(\"text-input.aria-roledescription\", \"editor\"));\n var arialLabel = \"\";\n if (host.$textInputAriaLabel) {\n arialLabel += \"\".concat(host.$textInputAriaLabel, \", \");\n }\n if (host.session) {\n var row = host.session.selection.cursor.row;\n arialLabel += nls(\"text-input.aria-label\", \"Cursor at row $0\", [row + 1]);\n }\n text.setAttribute(\"aria-label\", arialLabel);\n }\n };\n this.setAriaOptions({ role: \"textbox\" });\n event.addListener(text, \"blur\", function (e) {\n if (ignoreFocusEvents)\n return;\n host.onBlur(e);\n isFocused = false;\n }, host);\n event.addListener(text, \"focus\", function (e) {\n if (ignoreFocusEvents)\n return;\n isFocused = true;\n if (useragent.isEdge) {\n try {\n if (!document.hasFocus())\n return;\n }\n catch (e) { }\n }\n host.onFocus(e);\n if (useragent.isEdge)\n setTimeout(resetSelection);\n else\n resetSelection();\n }, host);\n this.$focusScroll = false;\n this.focus = function () {\n this.setAriaOptions({\n setLabel: host.renderer.enableKeyboardAccessibility\n });\n if (tempStyle || HAS_FOCUS_ARGS || this.$focusScroll == \"browser\")\n return text.focus({ preventScroll: true });\n var top = text.style.top;\n text.style.position = \"fixed\";\n text.style.top = \"0px\";\n try {\n var isTransformed = text.getBoundingClientRect().top != 0;\n }\n catch (e) {\n return;\n }\n var ancestors = [];\n if (isTransformed) {\n var t = text.parentElement;\n while (t && t.nodeType == 1) {\n ancestors.push(t);\n t.setAttribute(\"ace_nocontext\", \"true\");\n if (!t.parentElement && t.getRootNode)\n t = t.getRootNode()[\"host\"];\n else\n t = t.parentElement;\n }\n }\n text.focus({ preventScroll: true });\n if (isTransformed) {\n ancestors.forEach(function (p) {\n p.removeAttribute(\"ace_nocontext\");\n });\n }\n setTimeout(function () {\n text.style.position = \"\";\n if (text.style.top == \"0px\")\n text.style.top = top;\n }, 0);\n };\n this.blur = function () {\n text.blur();\n };\n this.isFocused = function () {\n return isFocused;\n };\n host.on(\"beforeEndOperation\", function () {\n var curOp = host.curOp;\n var commandName = curOp && curOp.command && curOp.command.name;\n if (commandName == \"insertstring\")\n return;\n var isUserAction = commandName && (curOp.docChanged || curOp.selectionChanged);\n if (inComposition && isUserAction) {\n lastValue = text.value = \"\";\n onCompositionEnd();\n }\n resetSelection();\n });\n var positionToSelection = function (row, column) {\n var selection = column;\n for (var i = 1; i <= row - rowStart && i < 2 * numberOfExtraLines + 1; i++) {\n selection += host.session.getLine(row - i).length + 1;\n }\n return selection;\n };\n var resetSelection = isIOS\n ? function (value) {\n if (!isFocused || (copied && !value) || sendingText)\n return;\n if (!value)\n value = \"\";\n var newValue = \"\\n ab\" + value + \"cde fg\\n\";\n if (newValue != text.value)\n text.value = lastValue = newValue;\n var selectionStart = 4;\n var selectionEnd = 4 + (value.length || (host.selection.isEmpty() ? 0 : 1));\n if (lastSelectionStart != selectionStart || lastSelectionEnd != selectionEnd) {\n text.setSelectionRange(selectionStart, selectionEnd);\n }\n lastSelectionStart = selectionStart;\n lastSelectionEnd = selectionEnd;\n }\n : function () {\n if (inComposition || sendingText)\n return;\n if (!isFocused && !afterContextMenu)\n return;\n inComposition = true;\n var selectionStart = 0;\n var selectionEnd = 0;\n var line = \"\";\n if (host.session) {\n var selection = host.selection;\n var range = selection.getRange();\n var row = selection.cursor.row;\n if (row === rowEnd + 1) {\n rowStart = rowEnd + 1;\n rowEnd = rowStart + 2 * numberOfExtraLines;\n }\n else if (row === rowStart - 1) {\n rowEnd = rowStart - 1;\n rowStart = rowEnd - 2 * numberOfExtraLines;\n }\n else if (row < rowStart - 1 || row > rowEnd + 1) {\n rowStart = row > numberOfExtraLines ? row - numberOfExtraLines : 0;\n rowEnd = row > numberOfExtraLines ? row + numberOfExtraLines : 2 * numberOfExtraLines;\n }\n var lines = [];\n for (var i = rowStart; i <= rowEnd; i++) {\n lines.push(host.session.getLine(i));\n }\n line = lines.join('\\n');\n selectionStart = positionToSelection(range.start.row, range.start.column);\n selectionEnd = positionToSelection(range.end.row, range.end.column);\n if (range.start.row < rowStart) {\n var prevLine = host.session.getLine(rowStart - 1);\n selectionStart = range.start.row < rowStart - 1 ? 0 : selectionStart;\n selectionEnd += prevLine.length + 1;\n line = prevLine + \"\\n\" + line;\n }\n else if (range.end.row > rowEnd) {\n var nextLine = host.session.getLine(rowEnd + 1);\n selectionEnd = range.end.row > rowEnd + 1 ? nextLine.length : range.end.column;\n selectionEnd += line.length + 1;\n line = line + \"\\n\" + nextLine;\n }\n else if (isMobile && row > 0) {\n line = \"\\n\" + line;\n selectionEnd += 1;\n selectionStart += 1;\n }\n if (line.length > MAX_LINE_LENGTH) {\n if (selectionStart < MAX_LINE_LENGTH && selectionEnd < MAX_LINE_LENGTH) {\n line = line.slice(0, MAX_LINE_LENGTH);\n }\n else {\n line = \"\\n\";\n if (selectionStart == selectionEnd) {\n selectionStart = selectionEnd = 0;\n }\n else {\n selectionStart = 0;\n selectionEnd = 1;\n }\n }\n }\n var newValue = line + \"\\n\\n\";\n if (newValue != lastValue) {\n text.value = lastValue = newValue;\n lastSelectionStart = lastSelectionEnd = newValue.length;\n }\n }\n if (afterContextMenu) {\n lastSelectionStart = text.selectionStart;\n lastSelectionEnd = text.selectionEnd;\n }\n if (lastSelectionEnd != selectionEnd\n || lastSelectionStart != selectionStart\n || text.selectionEnd != lastSelectionEnd // on ie edge selectionEnd changes silently after the initialization\n ) {\n try {\n text.setSelectionRange(selectionStart, selectionEnd);\n lastSelectionStart = selectionStart;\n lastSelectionEnd = selectionEnd;\n }\n catch (e) { }\n }\n inComposition = false;\n };\n this.resetSelection = resetSelection;\n if (isFocused)\n host.onFocus();\n var isAllSelected = function (text) {\n return text.selectionStart === 0 && text.selectionEnd >= lastValue.length\n && text.value === lastValue && lastValue\n && text.selectionEnd !== lastSelectionEnd;\n };\n var onSelect = function (e) {\n if (inComposition)\n return;\n if (copied) {\n copied = false;\n }\n else if (isAllSelected(text)) {\n host.selectAll();\n resetSelection();\n }\n else if (isMobile && text.selectionStart != lastSelectionStart) {\n resetSelection();\n }\n };\n var inputHandler = null;\n this.setInputHandler = function (cb) { inputHandler = cb; };\n this.getInputHandler = function () { return inputHandler; };\n var afterContextMenu = false;\n var sendText = function (value, fromInput) {\n if (afterContextMenu)\n afterContextMenu = false;\n if (pasted) {\n resetSelection();\n if (value)\n host.onPaste(value);\n pasted = false;\n return \"\";\n }\n else {\n var selectionStart = text.selectionStart;\n var selectionEnd = text.selectionEnd;\n var extendLeft = lastSelectionStart;\n var extendRight = lastValue.length - lastSelectionEnd;\n var inserted = value;\n var restoreStart = value.length - selectionStart;\n var restoreEnd = value.length - selectionEnd;\n var i = 0;\n while (extendLeft > 0 && lastValue[i] == value[i]) {\n i++;\n extendLeft--;\n }\n inserted = inserted.slice(i);\n i = 1;\n while (extendRight > 0 && lastValue.length - i > lastSelectionStart - 1 && lastValue[lastValue.length - i] == value[value.length - i]) {\n i++;\n extendRight--;\n }\n restoreStart -= i - 1;\n restoreEnd -= i - 1;\n var endIndex = inserted.length - i + 1;\n if (endIndex < 0) {\n extendLeft = -endIndex;\n endIndex = 0;\n }\n inserted = inserted.slice(0, endIndex);\n if (!fromInput && !inserted && !restoreStart && !extendLeft && !extendRight && !restoreEnd)\n return \"\";\n sendingText = true;\n var shouldReset = false;\n if (useragent.isAndroid && inserted == \". \") {\n inserted = \" \";\n shouldReset = true;\n }\n if (inserted && !extendLeft && !extendRight && !restoreStart && !restoreEnd || commandMode) {\n host.onTextInput(inserted);\n }\n else {\n host.onTextInput(inserted, {\n extendLeft: extendLeft,\n extendRight: extendRight,\n restoreStart: restoreStart,\n restoreEnd: restoreEnd\n });\n }\n sendingText = false;\n lastValue = value;\n lastSelectionStart = selectionStart;\n lastSelectionEnd = selectionEnd;\n lastRestoreEnd = restoreEnd;\n return shouldReset ? \"\\n\" : inserted;\n }\n };\n var onInput = function (e) {\n if (inComposition)\n return onCompositionUpdate();\n if (e && e.inputType) {\n if (e.inputType == \"historyUndo\")\n return host.execCommand(\"undo\");\n if (e.inputType == \"historyRedo\")\n return host.execCommand(\"redo\");\n }\n var data = text.value;\n var inserted = sendText(data, true);\n if (data.length > MAX_LINE_LENGTH + 100\n || valueResetRegex.test(inserted)\n || isMobile && lastSelectionStart < 1 && lastSelectionStart == lastSelectionEnd) {\n resetSelection();\n }\n };\n var handleClipboardData = function (e, data, forceIEMime) {\n var clipboardData = e.clipboardData || window[\"clipboardData\"];\n if (!clipboardData || BROKEN_SETDATA)\n return;\n var mime = USE_IE_MIME_TYPE || forceIEMime ? \"Text\" : \"text/plain\";\n try {\n if (data) {\n return clipboardData.setData(mime, data) !== false;\n }\n else {\n return clipboardData.getData(mime);\n }\n }\n catch (e) {\n if (!forceIEMime)\n return handleClipboardData(e, data, true);\n }\n };\n var doCopy = function (e, isCut) {\n var data = host.getCopyText();\n if (!data)\n return event.preventDefault(e);\n if (handleClipboardData(e, data)) {\n if (isIOS) {\n resetSelection(data);\n copied = data;\n setTimeout(function () {\n copied = false;\n }, 10);\n }\n isCut ? host.onCut() : host.onCopy();\n event.preventDefault(e);\n }\n else {\n copied = true;\n text.value = data;\n text.select();\n setTimeout(function () {\n copied = false;\n resetSelection();\n isCut ? host.onCut() : host.onCopy();\n });\n }\n };\n var onCut = function (e) {\n doCopy(e, true);\n };\n var onCopy = function (e) {\n doCopy(e, false);\n };\n var onPaste = function (e) {\n var data = handleClipboardData(e);\n if (clipboard.pasteCancelled())\n return;\n if (typeof data == \"string\") {\n if (data)\n host.onPaste(data, e);\n if (useragent.isIE)\n setTimeout(resetSelection);\n event.preventDefault(e);\n }\n else {\n text.value = \"\";\n pasted = true;\n }\n };\n event.addCommandKeyListener(text, function (e, hashId, keyCode) {\n if (inComposition)\n return;\n return host.onCommandKey(e, hashId, keyCode);\n }, host);\n event.addListener(text, \"select\", onSelect, host);\n event.addListener(text, \"input\", onInput, host);\n event.addListener(text, \"cut\", onCut, host);\n event.addListener(text, \"copy\", onCopy, host);\n event.addListener(text, \"paste\", onPaste, host);\n if (!('oncut' in text) || !('oncopy' in text) || !('onpaste' in text)) {\n event.addListener(parentNode, \"keydown\", function (e) {\n if ((useragent.isMac && !e.metaKey) || !e.ctrlKey)\n return;\n switch (e.keyCode) {\n case 67:\n onCopy(e);\n break;\n case 86:\n onPaste(e);\n break;\n case 88:\n onCut(e);\n break;\n }\n }, host);\n }\n var onCompositionStart = function (e) {\n if (inComposition || !host.onCompositionStart || host.$readOnly)\n return;\n inComposition = {};\n if (commandMode)\n return;\n if (e.data)\n inComposition.useTextareaForIME = false;\n setTimeout(onCompositionUpdate, 0);\n host._signal(\"compositionStart\");\n host.on(\"mousedown\", cancelComposition);\n var range = host.getSelectionRange();\n range.end.row = range.start.row;\n range.end.column = range.start.column;\n inComposition.markerRange = range;\n inComposition.selectionStart = lastSelectionStart;\n host.onCompositionStart(inComposition);\n if (inComposition.useTextareaForIME) {\n lastValue = text.value = \"\";\n lastSelectionStart = 0;\n lastSelectionEnd = 0;\n }\n else {\n if (text.msGetInputContext)\n inComposition.context = text.msGetInputContext();\n if (text.getInputContext)\n inComposition.context = text.getInputContext();\n }\n };\n var onCompositionUpdate = function () {\n if (!inComposition || !host.onCompositionUpdate || host.$readOnly)\n return;\n if (commandMode)\n return cancelComposition();\n if (inComposition.useTextareaForIME) {\n host.onCompositionUpdate(text.value);\n }\n else {\n var data = text.value;\n sendText(data);\n if (inComposition.markerRange) {\n if (inComposition.context) {\n inComposition.markerRange.start.column = inComposition.selectionStart\n = inComposition.context.compositionStartOffset;\n }\n inComposition.markerRange.end.column = inComposition.markerRange.start.column\n + lastSelectionEnd - inComposition.selectionStart + lastRestoreEnd;\n }\n }\n };\n var onCompositionEnd = function (e) {\n if (!host.onCompositionEnd || host.$readOnly)\n return;\n inComposition = false;\n host.onCompositionEnd();\n host.off(\"mousedown\", cancelComposition);\n if (e)\n onInput();\n };\n function cancelComposition() {\n ignoreFocusEvents = true;\n text.blur();\n text.focus();\n ignoreFocusEvents = false;\n }\n var syncComposition = lang.delayedCall(onCompositionUpdate, 50).schedule.bind(null, null);\n function onKeyup(e) {\n if (e.keyCode == 27 && text.value.length < text.selectionStart) {\n if (!inComposition)\n lastValue = text.value;\n lastSelectionStart = lastSelectionEnd = -1;\n resetSelection();\n }\n syncComposition();\n }\n event.addListener(text, \"compositionstart\", onCompositionStart, host);\n event.addListener(text, \"compositionupdate\", onCompositionUpdate, host);\n event.addListener(text, \"keyup\", onKeyup, host);\n event.addListener(text, \"keydown\", syncComposition, host);\n event.addListener(text, \"compositionend\", onCompositionEnd, host);\n this.getElement = function () {\n return text;\n };\n this.setCommandMode = function (value) {\n commandMode = value;\n text.readOnly = false;\n };\n this.setReadOnly = function (readOnly) {\n if (!commandMode)\n text.readOnly = readOnly;\n };\n this.setCopyWithEmptySelection = function (value) {\n };\n this.onContextMenu = function (e) {\n afterContextMenu = true;\n resetSelection();\n host._emit(\"nativecontextmenu\", { target: host, domEvent: e });\n this.moveToMouse(e, true);\n };\n this.moveToMouse = function (e, bringToFront) {\n if (!tempStyle)\n tempStyle = text.style.cssText;\n text.style.cssText = (bringToFront ? \"z-index:100000;\" : \"\")\n + (useragent.isIE ? \"opacity:0.1;\" : \"\")\n + \"text-indent: -\" + (lastSelectionStart + lastSelectionEnd) * host.renderer.characterWidth * 0.5 + \"px;\";\n var rect = host.container.getBoundingClientRect();\n var style = dom.computedStyle(host.container);\n var top = rect.top + (parseInt(style.borderTopWidth) || 0);\n var left = rect.left + (parseInt(rect.borderLeftWidth) || 0);\n var maxTop = rect.bottom - top - text.clientHeight - 2;\n var move = function (e) {\n dom.translate(text, e.clientX - left - 2, Math.min(e.clientY - top - 2, maxTop));\n };\n move(e);\n if (e.type != \"mousedown\")\n return;\n host.renderer.$isMousePressed = true;\n clearTimeout(closeTimeout);\n if (useragent.isWin)\n event.capture(host.container, move, onContextMenuClose);\n };\n this.onContextMenuClose = onContextMenuClose;\n var closeTimeout;\n function onContextMenuClose() {\n clearTimeout(closeTimeout);\n closeTimeout = setTimeout(function () {\n if (tempStyle) {\n text.style.cssText = tempStyle;\n tempStyle = '';\n }\n host.renderer.$isMousePressed = false;\n if (host.renderer.$keepTextAreaAtCursor)\n host.renderer.$moveTextAreaToCursor();\n }, 0);\n }\n var onContextMenu = function (e) {\n host.textInput.onContextMenu(e);\n onContextMenuClose();\n };\n event.addListener(text, \"mouseup\", onContextMenu, host);\n event.addListener(text, \"mousedown\", function (e) {\n e.preventDefault();\n onContextMenuClose();\n }, host);\n event.addListener(host.renderer.scroller, \"contextmenu\", onContextMenu, host);\n event.addListener(text, \"contextmenu\", onContextMenu, host);\n if (isIOS)\n addIosSelectionHandler(parentNode, host, text);\n function addIosSelectionHandler(parentNode, host, text) {\n var typingResetTimeout = null;\n var typing = false;\n text.addEventListener(\"keydown\", function (e) {\n if (typingResetTimeout)\n clearTimeout(typingResetTimeout);\n typing = true;\n }, true);\n text.addEventListener(\"keyup\", function (e) {\n typingResetTimeout = setTimeout(function () {\n typing = false;\n }, 100);\n }, true);\n var detectArrowKeys = function (e) {\n if (document.activeElement !== text)\n return;\n if (typing || inComposition || host.$mouseHandler.isMousePressed)\n return;\n if (copied) {\n return;\n }\n var selectionStart = text.selectionStart;\n var selectionEnd = text.selectionEnd;\n var key = null;\n var modifier = 0;\n if (selectionStart == 0) {\n key = KEYS.up;\n }\n else if (selectionStart == 1) {\n key = KEYS.home;\n }\n else if (selectionEnd > lastSelectionEnd && lastValue[selectionEnd] == \"\\n\") {\n key = KEYS.end;\n }\n else if (selectionStart < lastSelectionStart && lastValue[selectionStart - 1] == \" \") {\n key = KEYS.left;\n modifier = MODS.option;\n }\n else if (selectionStart < lastSelectionStart\n || (selectionStart == lastSelectionStart\n && lastSelectionEnd != lastSelectionStart\n && selectionStart == selectionEnd)) {\n key = KEYS.left;\n }\n else if (selectionEnd > lastSelectionEnd && lastValue.slice(0, selectionEnd).split(\"\\n\").length > 2) {\n key = KEYS.down;\n }\n else if (selectionEnd > lastSelectionEnd && lastValue[selectionEnd - 1] == \" \") {\n key = KEYS.right;\n modifier = MODS.option;\n }\n else if (selectionEnd > lastSelectionEnd\n || (selectionEnd == lastSelectionEnd\n && lastSelectionEnd != lastSelectionStart\n && selectionStart == selectionEnd)) {\n key = KEYS.right;\n }\n if (selectionStart !== selectionEnd)\n modifier |= MODS.shift;\n if (key) {\n var result = host.onCommandKey({}, modifier, key);\n if (!result && host.commands) {\n key = KEYS.keyCodeToString(key);\n var command = host.commands.findKeyCommand(modifier, key);\n if (command)\n host.execCommand(command);\n }\n lastSelectionStart = selectionStart;\n lastSelectionEnd = selectionEnd;\n resetSelection(\"\");\n }\n };\n document.addEventListener(\"selectionchange\", detectArrowKeys);\n host.on(\"destroy\", function () {\n document.removeEventListener(\"selectionchange\", detectArrowKeys);\n });\n }\n this.destroy = function () {\n if (text.parentElement)\n text.parentElement.removeChild(text);\n };\n};\nexports.TextInput = TextInput;\nexports.$setUserAgentForTests = function (_isMobile, _isIOS) {\n isMobile = _isMobile;\n isIOS = _isIOS;\n};\n\n});\n\nace.define(\"ace/mouse/default_handlers\",[\"require\",\"exports\",\"module\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar useragent = require(\"../lib/useragent\");\nvar DRAG_OFFSET = 0; // pixels\nvar SCROLL_COOLDOWN_T = 550; // milliseconds\nvar DefaultHandlers = /** @class */ (function () {\n function DefaultHandlers(mouseHandler) {\n mouseHandler.$clickSelection = null;\n var editor = mouseHandler.editor;\n editor.setDefaultHandler(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n editor.setDefaultHandler(\"dblclick\", this.onDoubleClick.bind(mouseHandler));\n editor.setDefaultHandler(\"tripleclick\", this.onTripleClick.bind(mouseHandler));\n editor.setDefaultHandler(\"quadclick\", this.onQuadClick.bind(mouseHandler));\n editor.setDefaultHandler(\"mousewheel\", this.onMouseWheel.bind(mouseHandler));\n var exports = [\"select\", \"startSelect\", \"selectEnd\", \"selectAllEnd\", \"selectByWordsEnd\",\n \"selectByLinesEnd\", \"dragWait\", \"dragWaitEnd\", \"focusWait\"];\n exports.forEach(function (x) {\n mouseHandler[x] = this[x];\n }, this);\n mouseHandler[\"selectByLines\"] = this.extendSelectionBy.bind(mouseHandler, \"getLineRange\");\n mouseHandler[\"selectByWords\"] = this.extendSelectionBy.bind(mouseHandler, \"getWordRange\");\n }\n DefaultHandlers.prototype.onMouseDown = function (ev) {\n var inSelection = ev.inSelection();\n var pos = ev.getDocumentPosition();\n this.mousedownEvent = ev;\n var editor = this.editor;\n var button = ev.getButton();\n if (button !== 0) {\n var selectionRange = editor.getSelectionRange();\n var selectionEmpty = selectionRange.isEmpty();\n if (selectionEmpty || button == 1)\n editor.selection.moveToPosition(pos);\n if (button == 2) {\n editor.textInput.onContextMenu(ev.domEvent);\n if (!useragent.isMozilla)\n ev.preventDefault();\n }\n return;\n }\n this.mousedownEvent.time = Date.now();\n if (inSelection && !editor.isFocused()) {\n editor.focus();\n if (this.$focusTimeout && !this.$clickSelection && !editor.inMultiSelectMode) {\n this.setState(\"focusWait\");\n this.captureMouse(ev);\n return;\n }\n }\n this.captureMouse(ev);\n this.startSelect(pos, ev.domEvent._clicks > 1);\n return ev.preventDefault();\n };\n DefaultHandlers.prototype.startSelect = function (pos, waitForClickSelection) {\n pos = pos || this.editor.renderer.screenToTextCoordinates(this.x, this.y);\n var editor = this.editor;\n if (!this.mousedownEvent)\n return;\n if (this.mousedownEvent.getShiftKey())\n editor.selection.selectToPosition(pos);\n else if (!waitForClickSelection)\n editor.selection.moveToPosition(pos);\n if (!waitForClickSelection)\n this.select();\n editor.setStyle(\"ace_selecting\");\n this.setState(\"select\");\n };\n DefaultHandlers.prototype.select = function () {\n var anchor, editor = this.editor;\n var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n if (this.$clickSelection) {\n var cmp = this.$clickSelection.comparePoint(cursor);\n if (cmp == -1) {\n anchor = this.$clickSelection.end;\n }\n else if (cmp == 1) {\n anchor = this.$clickSelection.start;\n }\n else {\n var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\n cursor = orientedRange.cursor;\n anchor = orientedRange.anchor;\n }\n editor.selection.setSelectionAnchor(anchor.row, anchor.column);\n }\n editor.selection.selectToPosition(cursor);\n editor.renderer.scrollCursorIntoView();\n };\n DefaultHandlers.prototype.extendSelectionBy = function (unitName) {\n var anchor, editor = this.editor;\n var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n var range = editor.selection[unitName](cursor.row, cursor.column);\n if (this.$clickSelection) {\n var cmpStart = this.$clickSelection.comparePoint(range.start);\n var cmpEnd = this.$clickSelection.comparePoint(range.end);\n if (cmpStart == -1 && cmpEnd <= 0) {\n anchor = this.$clickSelection.end;\n if (range.end.row != cursor.row || range.end.column != cursor.column)\n cursor = range.start;\n }\n else if (cmpEnd == 1 && cmpStart >= 0) {\n anchor = this.$clickSelection.start;\n if (range.start.row != cursor.row || range.start.column != cursor.column)\n cursor = range.end;\n }\n else if (cmpStart == -1 && cmpEnd == 1) {\n cursor = range.end;\n anchor = range.start;\n }\n else {\n var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\n cursor = orientedRange.cursor;\n anchor = orientedRange.anchor;\n }\n editor.selection.setSelectionAnchor(anchor.row, anchor.column);\n }\n editor.selection.selectToPosition(cursor);\n editor.renderer.scrollCursorIntoView();\n };\n DefaultHandlers.prototype.selectByLinesEnd = function () {\n this.$clickSelection = null;\n this.editor.unsetStyle(\"ace_selecting\");\n };\n DefaultHandlers.prototype.focusWait = function () {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n var time = Date.now();\n if (distance > DRAG_OFFSET || time - this.mousedownEvent.time > this.$focusTimeout)\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n };\n DefaultHandlers.prototype.onDoubleClick = function (ev) {\n var pos = ev.getDocumentPosition();\n var editor = this.editor;\n var session = editor.session;\n var range = session.getBracketRange(pos);\n if (range) {\n if (range.isEmpty()) {\n range.start.column--;\n range.end.column++;\n }\n this.setState(\"select\");\n }\n else {\n range = editor.selection.getWordRange(pos.row, pos.column);\n this.setState(\"selectByWords\");\n }\n this.$clickSelection = range;\n this.select();\n };\n DefaultHandlers.prototype.onTripleClick = function (ev) {\n var pos = ev.getDocumentPosition();\n var editor = this.editor;\n this.setState(\"selectByLines\");\n var range = editor.getSelectionRange();\n if (range.isMultiLine() && range.contains(pos.row, pos.column)) {\n this.$clickSelection = editor.selection.getLineRange(range.start.row);\n this.$clickSelection.end = editor.selection.getLineRange(range.end.row).end;\n }\n else {\n this.$clickSelection = editor.selection.getLineRange(pos.row);\n }\n this.select();\n };\n DefaultHandlers.prototype.onQuadClick = function (ev) {\n var editor = this.editor;\n editor.selectAll();\n this.$clickSelection = editor.getSelectionRange();\n this.setState(\"selectAll\");\n };\n DefaultHandlers.prototype.onMouseWheel = function (ev) {\n if (ev.getAccelKey())\n return;\n if (ev.getShiftKey() && ev.wheelY && !ev.wheelX) {\n ev.wheelX = ev.wheelY;\n ev.wheelY = 0;\n }\n var editor = this.editor;\n if (!this.$lastScroll)\n this.$lastScroll = { t: 0, vx: 0, vy: 0, allowed: 0 };\n var prevScroll = this.$lastScroll;\n var t = ev.domEvent.timeStamp;\n var dt = t - prevScroll.t;\n var vx = dt ? ev.wheelX / dt : prevScroll.vx;\n var vy = dt ? ev.wheelY / dt : prevScroll.vy;\n if (dt < SCROLL_COOLDOWN_T) {\n vx = (vx + prevScroll.vx) / 2;\n vy = (vy + prevScroll.vy) / 2;\n }\n var direction = Math.abs(vx / vy);\n var canScroll = false;\n if (direction >= 1 && editor.renderer.isScrollableBy(ev.wheelX * ev.speed, 0))\n canScroll = true;\n if (direction <= 1 && editor.renderer.isScrollableBy(0, ev.wheelY * ev.speed))\n canScroll = true;\n if (canScroll) {\n prevScroll.allowed = t;\n }\n else if (t - prevScroll.allowed < SCROLL_COOLDOWN_T) {\n var isSlower = Math.abs(vx) <= 1.5 * Math.abs(prevScroll.vx)\n && Math.abs(vy) <= 1.5 * Math.abs(prevScroll.vy);\n if (isSlower) {\n canScroll = true;\n prevScroll.allowed = t;\n }\n else {\n prevScroll.allowed = 0;\n }\n }\n prevScroll.t = t;\n prevScroll.vx = vx;\n prevScroll.vy = vy;\n if (canScroll) {\n editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);\n return ev.stop();\n }\n };\n return DefaultHandlers;\n}());\nDefaultHandlers.prototype.selectEnd = DefaultHandlers.prototype.selectByLinesEnd;\nDefaultHandlers.prototype.selectAllEnd = DefaultHandlers.prototype.selectByLinesEnd;\nDefaultHandlers.prototype.selectByWordsEnd = DefaultHandlers.prototype.selectByLinesEnd;\nexports.DefaultHandlers = DefaultHandlers;\nfunction calcDistance(ax, ay, bx, by) {\n return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n}\nfunction calcRangeOrientation(range, cursor) {\n if (range.start.row == range.end.row)\n var cmp = 2 * cursor.column - range.start.column - range.end.column;\n else if (range.start.row == range.end.row - 1 && !range.start.column && !range.end.column)\n var cmp = cursor.column - 4;\n else\n var cmp = 2 * cursor.row - range.start.row - range.end.row;\n if (cmp < 0)\n return { cursor: range.start, anchor: range.end };\n else\n return { cursor: range.end, anchor: range.start };\n}\n\n});\n\nace.define(\"ace/lib/scroll\",[\"require\",\"exports\",\"module\"], function(require, exports, module){exports.preventParentScroll = function preventParentScroll(event) {\n event.stopPropagation();\n var target = event.currentTarget;\n var contentOverflows = target.scrollHeight > target.clientHeight;\n if (!contentOverflows) {\n event.preventDefault();\n }\n};\n\n});\n\nace.define(\"ace/tooltip\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/range\",\"ace/lib/scroll\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar dom = require(\"./lib/dom\");\nvar event = require(\"./lib/event\");\nvar Range = require(\"./range\").Range;\nvar preventParentScroll = require(\"./lib/scroll\").preventParentScroll;\nvar CLASSNAME = \"ace_tooltip\";\nvar Tooltip = /** @class */ (function () {\n function Tooltip(parentNode) {\n this.isOpen = false;\n this.$element = null;\n this.$parentNode = parentNode;\n }\n Tooltip.prototype.$init = function () {\n this.$element = dom.createElement(\"div\");\n this.$element.className = CLASSNAME;\n this.$element.style.display = \"none\";\n this.$parentNode.appendChild(this.$element);\n return this.$element;\n };\n Tooltip.prototype.getElement = function () {\n return this.$element || this.$init();\n };\n Tooltip.prototype.setText = function (text) {\n this.getElement().textContent = text;\n };\n Tooltip.prototype.setHtml = function (html) {\n this.getElement().innerHTML = html;\n };\n Tooltip.prototype.setPosition = function (x, y) {\n this.getElement().style.left = x + \"px\";\n this.getElement().style.top = y + \"px\";\n };\n Tooltip.prototype.setClassName = function (className) {\n dom.addCssClass(this.getElement(), className);\n };\n Tooltip.prototype.setTheme = function (theme) {\n this.$element.className = CLASSNAME + \" \" +\n (theme.isDark ? \"ace_dark \" : \"\") + (theme.cssClass || \"\");\n };\n Tooltip.prototype.show = function (text, x, y) {\n if (text != null)\n this.setText(text);\n if (x != null && y != null)\n this.setPosition(x, y);\n if (!this.isOpen) {\n this.getElement().style.display = \"block\";\n this.isOpen = true;\n }\n };\n Tooltip.prototype.hide = function (e) {\n if (this.isOpen) {\n this.getElement().style.display = \"none\";\n this.getElement().className = CLASSNAME;\n this.isOpen = false;\n }\n };\n Tooltip.prototype.getHeight = function () {\n return this.getElement().offsetHeight;\n };\n Tooltip.prototype.getWidth = function () {\n return this.getElement().offsetWidth;\n };\n Tooltip.prototype.destroy = function () {\n this.isOpen = false;\n if (this.$element && this.$element.parentNode) {\n this.$element.parentNode.removeChild(this.$element);\n }\n };\n return Tooltip;\n}());\nvar PopupManager = /** @class */ (function () {\n function PopupManager() {\n this.popups = [];\n }\n PopupManager.prototype.addPopup = function (popup) {\n this.popups.push(popup);\n this.updatePopups();\n };\n PopupManager.prototype.removePopup = function (popup) {\n var index = this.popups.indexOf(popup);\n if (index !== -1) {\n this.popups.splice(index, 1);\n this.updatePopups();\n }\n };\n PopupManager.prototype.updatePopups = function () {\n var e_1, _a, e_2, _b;\n this.popups.sort(function (a, b) { return b.priority - a.priority; });\n var visiblepopups = [];\n try {\n for (var _c = __values(this.popups), _d = _c.next(); !_d.done; _d = _c.next()) {\n var popup = _d.value;\n var shouldDisplay = true;\n try {\n for (var visiblepopups_1 = (e_2 = void 0, __values(visiblepopups)), visiblepopups_1_1 = visiblepopups_1.next(); !visiblepopups_1_1.done; visiblepopups_1_1 = visiblepopups_1.next()) {\n var visiblePopup = visiblepopups_1_1.value;\n if (this.doPopupsOverlap(visiblePopup, popup)) {\n shouldDisplay = false;\n break;\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (visiblepopups_1_1 && !visiblepopups_1_1.done && (_b = visiblepopups_1.return)) _b.call(visiblepopups_1);\n }\n finally { if (e_2) throw e_2.error; }\n }\n if (shouldDisplay) {\n visiblepopups.push(popup);\n }\n else {\n popup.hide();\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_d && !_d.done && (_a = _c.return)) _a.call(_c);\n }\n finally { if (e_1) throw e_1.error; }\n }\n };\n PopupManager.prototype.doPopupsOverlap = function (popupA, popupB) {\n var rectA = popupA.getElement().getBoundingClientRect();\n var rectB = popupB.getElement().getBoundingClientRect();\n return (rectA.left < rectB.right && rectA.right > rectB.left && rectA.top < rectB.bottom && rectA.bottom\n > rectB.top);\n };\n return PopupManager;\n}());\nvar popupManager = new PopupManager();\nexports.popupManager = popupManager;\nexports.Tooltip = Tooltip;\nvar HoverTooltip = /** @class */ (function (_super) {\n __extends(HoverTooltip, _super);\n function HoverTooltip(parentNode) {\n if (parentNode === void 0) { parentNode = document.body; }\n var _this = _super.call(this, parentNode) || this;\n _this.timeout = undefined;\n _this.lastT = 0;\n _this.idleTime = 350;\n _this.lastEvent = undefined;\n _this.onMouseOut = _this.onMouseOut.bind(_this);\n _this.onMouseMove = _this.onMouseMove.bind(_this);\n _this.waitForHover = _this.waitForHover.bind(_this);\n _this.hide = _this.hide.bind(_this);\n var el = _this.getElement();\n el.style.whiteSpace = \"pre-wrap\";\n el.style.pointerEvents = \"auto\";\n el.addEventListener(\"mouseout\", _this.onMouseOut);\n el.tabIndex = -1;\n el.addEventListener(\"blur\", function () {\n if (!el.contains(document.activeElement))\n this.hide();\n }.bind(_this));\n el.addEventListener(\"wheel\", preventParentScroll);\n return _this;\n }\n HoverTooltip.prototype.addToEditor = function (editor) {\n editor.on(\"mousemove\", this.onMouseMove);\n editor.on(\"mousedown\", this.hide);\n editor.renderer.getMouseEventTarget().addEventListener(\"mouseout\", this.onMouseOut, true);\n };\n HoverTooltip.prototype.removeFromEditor = function (editor) {\n editor.off(\"mousemove\", this.onMouseMove);\n editor.off(\"mousedown\", this.hide);\n editor.renderer.getMouseEventTarget().removeEventListener(\"mouseout\", this.onMouseOut, true);\n if (this.timeout) {\n clearTimeout(this.timeout);\n this.timeout = null;\n }\n };\n HoverTooltip.prototype.onMouseMove = function (e, editor) {\n this.lastEvent = e;\n this.lastT = Date.now();\n var isMousePressed = editor.$mouseHandler.isMousePressed;\n if (this.isOpen) {\n var pos = this.lastEvent && this.lastEvent.getDocumentPosition();\n if (!this.range\n || !this.range.contains(pos.row, pos.column)\n || isMousePressed\n || this.isOutsideOfText(this.lastEvent)) {\n this.hide();\n }\n }\n if (this.timeout || isMousePressed)\n return;\n this.lastEvent = e;\n this.timeout = setTimeout(this.waitForHover, this.idleTime);\n };\n HoverTooltip.prototype.waitForHover = function () {\n if (this.timeout)\n clearTimeout(this.timeout);\n var dt = Date.now() - this.lastT;\n if (this.idleTime - dt > 10) {\n this.timeout = setTimeout(this.waitForHover, this.idleTime - dt);\n return;\n }\n this.timeout = null;\n if (this.lastEvent && !this.isOutsideOfText(this.lastEvent)) {\n this.$gatherData(this.lastEvent, this.lastEvent.editor);\n }\n };\n HoverTooltip.prototype.isOutsideOfText = function (e) {\n var editor = e.editor;\n var docPos = e.getDocumentPosition();\n var line = editor.session.getLine(docPos.row);\n if (docPos.column == line.length) {\n var screenPos = editor.renderer.pixelToScreenCoordinates(e.clientX, e.clientY);\n var clippedPos = editor.session.documentToScreenPosition(docPos.row, docPos.column);\n if (clippedPos.column != screenPos.column\n || clippedPos.row != screenPos.row) {\n return true;\n }\n }\n return false;\n };\n HoverTooltip.prototype.setDataProvider = function (value) {\n this.$gatherData = value;\n };\n HoverTooltip.prototype.showForRange = function (editor, range, domNode, startingEvent) {\n var MARGIN = 10;\n if (startingEvent && startingEvent != this.lastEvent)\n return;\n if (this.isOpen && document.activeElement == this.getElement())\n return;\n var renderer = editor.renderer;\n if (!this.isOpen) {\n popupManager.addPopup(this);\n this.$registerCloseEvents();\n this.setTheme(renderer.theme);\n }\n this.isOpen = true;\n this.addMarker(range, editor.session);\n this.range = Range.fromPoints(range.start, range.end);\n var position = renderer.textToScreenCoordinates(range.start.row, range.start.column);\n var rect = renderer.scroller.getBoundingClientRect();\n if (position.pageX < rect.left)\n position.pageX = rect.left;\n var element = this.getElement();\n element.innerHTML = \"\";\n element.appendChild(domNode);\n element.style.maxHeight = \"\";\n element.style.display = \"block\";\n var labelHeight = element.clientHeight;\n var labelWidth = element.clientWidth;\n var spaceBelow = window.innerHeight - position.pageY - renderer.lineHeight;\n var isAbove = true;\n if (position.pageY - labelHeight < 0 && position.pageY < spaceBelow) {\n isAbove = false;\n }\n element.style.maxHeight = (isAbove ? position.pageY : spaceBelow) - MARGIN + \"px\";\n element.style.top = isAbove ? \"\" : position.pageY + renderer.lineHeight + \"px\";\n element.style.bottom = isAbove ? window.innerHeight - position.pageY + \"px\" : \"\";\n element.style.left = Math.min(position.pageX, window.innerWidth - labelWidth - MARGIN) + \"px\";\n };\n HoverTooltip.prototype.addMarker = function (range, session) {\n if (this.marker) {\n this.$markerSession.removeMarker(this.marker);\n }\n this.$markerSession = session;\n this.marker = session && session.addMarker(range, \"ace_highlight-marker\", \"text\");\n };\n HoverTooltip.prototype.hide = function (e) {\n if (!e && document.activeElement == this.getElement())\n return;\n if (e && e.target && (e.type != \"keydown\" || e.ctrlKey || e.metaKey) && this.$element.contains(e.target))\n return;\n this.lastEvent = null;\n if (this.timeout)\n clearTimeout(this.timeout);\n this.timeout = null;\n this.addMarker(null);\n if (this.isOpen) {\n this.$removeCloseEvents();\n this.getElement().style.display = \"none\";\n this.isOpen = false;\n popupManager.removePopup(this);\n }\n };\n HoverTooltip.prototype.$registerCloseEvents = function () {\n window.addEventListener(\"keydown\", this.hide, true);\n window.addEventListener(\"wheel\", this.hide, true);\n window.addEventListener(\"mousedown\", this.hide, true);\n };\n HoverTooltip.prototype.$removeCloseEvents = function () {\n window.removeEventListener(\"keydown\", this.hide, true);\n window.removeEventListener(\"wheel\", this.hide, true);\n window.removeEventListener(\"mousedown\", this.hide, true);\n };\n HoverTooltip.prototype.onMouseOut = function (e) {\n if (this.timeout) {\n clearTimeout(this.timeout);\n this.timeout = null;\n }\n this.lastEvent = null;\n if (!this.isOpen)\n return;\n if (!e.relatedTarget || this.getElement().contains(e.relatedTarget))\n return;\n if (e && e.currentTarget.contains(e.relatedTarget))\n return;\n if (!e.relatedTarget.classList.contains(\"ace_content\"))\n this.hide();\n };\n return HoverTooltip;\n}(Tooltip));\nexports.HoverTooltip = HoverTooltip;\n\n});\n\nace.define(\"ace/mouse/default_gutter_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/tooltip\",\"ace/config\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar dom = require(\"../lib/dom\");\nvar event = require(\"../lib/event\");\nvar Tooltip = require(\"../tooltip\").Tooltip;\nvar nls = require(\"../config\").nls;\nvar lang = require(\"../lib/lang\");\nfunction GutterHandler(mouseHandler) {\n var editor = mouseHandler.editor;\n var gutter = editor.renderer.$gutterLayer;\n var tooltip = new GutterTooltip(editor);\n mouseHandler.editor.setDefaultHandler(\"guttermousedown\", function (e) {\n if (!editor.isFocused() || e.getButton() != 0)\n return;\n var gutterRegion = gutter.getRegion(e);\n if (gutterRegion == \"foldWidgets\")\n return;\n var row = e.getDocumentPosition().row;\n var selection = editor.session.selection;\n if (e.getShiftKey())\n selection.selectTo(row, 0);\n else {\n if (e.domEvent.detail == 2) {\n editor.selectAll();\n return e.preventDefault();\n }\n mouseHandler.$clickSelection = editor.selection.getLineRange(row);\n }\n mouseHandler.setState(\"selectByLines\");\n mouseHandler.captureMouse(e);\n return e.preventDefault();\n });\n var tooltipTimeout, mouseEvent;\n function showTooltip() {\n var row = mouseEvent.getDocumentPosition().row;\n var maxRow = editor.session.getLength();\n if (row == maxRow) {\n var screenRow = editor.renderer.pixelToScreenCoordinates(0, mouseEvent.y).row;\n var pos = mouseEvent.$pos;\n if (screenRow > editor.session.documentToScreenRow(pos.row, pos.column))\n return hideTooltip();\n }\n tooltip.showTooltip(row);\n if (!tooltip.isOpen)\n return;\n editor.on(\"mousewheel\", hideTooltip);\n if (mouseHandler.$tooltipFollowsMouse) {\n moveTooltip(mouseEvent);\n }\n else {\n var gutterRow = mouseEvent.getGutterRow();\n var gutterCell = gutter.$lines.get(gutterRow);\n if (gutterCell) {\n var gutterElement = gutterCell.element.querySelector(\".ace_gutter_annotation\");\n var rect = gutterElement.getBoundingClientRect();\n var style = tooltip.getElement().style;\n style.left = rect.right + \"px\";\n style.top = rect.bottom + \"px\";\n }\n else {\n moveTooltip(mouseEvent);\n }\n }\n }\n function hideTooltip() {\n if (tooltipTimeout)\n tooltipTimeout = clearTimeout(tooltipTimeout);\n if (tooltip.isOpen) {\n tooltip.hideTooltip();\n editor.off(\"mousewheel\", hideTooltip);\n }\n }\n function moveTooltip(e) {\n tooltip.setPosition(e.x, e.y);\n }\n mouseHandler.editor.setDefaultHandler(\"guttermousemove\", function (e) {\n var target = e.domEvent.target || e.domEvent.srcElement;\n if (dom.hasCssClass(target, \"ace_fold-widget\"))\n return hideTooltip();\n if (tooltip.isOpen && mouseHandler.$tooltipFollowsMouse)\n moveTooltip(e);\n mouseEvent = e;\n if (tooltipTimeout)\n return;\n tooltipTimeout = setTimeout(function () {\n tooltipTimeout = null;\n if (mouseEvent && !mouseHandler.isMousePressed)\n showTooltip();\n else\n hideTooltip();\n }, 50);\n });\n event.addListener(editor.renderer.$gutter, \"mouseout\", function (e) {\n mouseEvent = null;\n if (!tooltip.isOpen || tooltipTimeout)\n return;\n tooltipTimeout = setTimeout(function () {\n tooltipTimeout = null;\n hideTooltip();\n }, 50);\n }, editor);\n editor.on(\"changeSession\", hideTooltip);\n editor.on(\"input\", hideTooltip);\n}\nexports.GutterHandler = GutterHandler;\nvar GutterTooltip = /** @class */ (function (_super) {\n __extends(GutterTooltip, _super);\n function GutterTooltip(editor) {\n var _this = _super.call(this, editor.container) || this;\n _this.editor = editor;\n return _this;\n }\n GutterTooltip.prototype.setPosition = function (x, y) {\n var windowWidth = window.innerWidth || document.documentElement.clientWidth;\n var windowHeight = window.innerHeight || document.documentElement.clientHeight;\n var width = this.getWidth();\n var height = this.getHeight();\n x += 15;\n y += 15;\n if (x + width > windowWidth) {\n x -= (x + width) - windowWidth;\n }\n if (y + height > windowHeight) {\n y -= 20 + height;\n }\n Tooltip.prototype.setPosition.call(this, x, y);\n };\n Object.defineProperty(GutterTooltip, \"annotationLabels\", {\n get: function () {\n return {\n error: {\n singular: nls(\"gutter-tooltip.aria-label.error.singular\", \"error\"),\n plural: nls(\"gutter-tooltip.aria-label.error.plural\", \"errors\")\n },\n security: {\n singular: nls(\"gutter-tooltip.aria-label.security.singular\", \"security finding\"),\n plural: nls(\"gutter-tooltip.aria-label.security.plural\", \"security findings\")\n },\n warning: {\n singular: nls(\"gutter-tooltip.aria-label.warning.singular\", \"warning\"),\n plural: nls(\"gutter-tooltip.aria-label.warning.plural\", \"warnings\")\n },\n info: {\n singular: nls(\"gutter-tooltip.aria-label.info.singular\", \"information message\"),\n plural: nls(\"gutter-tooltip.aria-label.info.plural\", \"information messages\")\n },\n hint: {\n singular: nls(\"gutter-tooltip.aria-label.hint.singular\", \"suggestion\"),\n plural: nls(\"gutter-tooltip.aria-label.hint.plural\", \"suggestions\")\n }\n };\n },\n enumerable: false,\n configurable: true\n });\n GutterTooltip.prototype.showTooltip = function (row) {\n var _a;\n var gutter = this.editor.renderer.$gutterLayer;\n var annotationsInRow = gutter.$annotations[row];\n var annotation;\n if (annotationsInRow)\n annotation = {\n displayText: Array.from(annotationsInRow.displayText),\n type: Array.from(annotationsInRow.type)\n };\n else\n annotation = { displayText: [], type: [] };\n var fold = gutter.session.getFoldLine(row);\n if (fold && gutter.$showFoldedAnnotations) {\n var annotationsInFold = { error: [], security: [], warning: [], info: [], hint: [] };\n var severityRank = { error: 1, security: 2, warning: 3, info: 4, hint: 5 };\n var mostSevereAnnotationTypeInFold;\n for (var i = row + 1; i <= fold.end.row; i++) {\n if (!gutter.$annotations[i])\n continue;\n for (var j = 0; j < gutter.$annotations[i].text.length; j++) {\n var annotationType = gutter.$annotations[i].type[j];\n annotationsInFold[annotationType].push(gutter.$annotations[i].text[j]);\n if (!mostSevereAnnotationTypeInFold ||\n severityRank[annotationType] < severityRank[mostSevereAnnotationTypeInFold]) {\n mostSevereAnnotationTypeInFold = annotationType;\n }\n }\n }\n if ([\"error\", \"security\", \"warning\"].includes(mostSevereAnnotationTypeInFold)) {\n var summaryFoldedAnnotations = \"\".concat(GutterTooltip.annotationsToSummaryString(annotationsInFold), \" in folded code.\");\n annotation.displayText.push(summaryFoldedAnnotations);\n annotation.type.push(mostSevereAnnotationTypeInFold + \"_fold\");\n }\n }\n if (annotation.displayText.length === 0)\n return this.hide();\n var annotationMessages = { error: [], security: [], warning: [], info: [], hint: [] };\n var iconClassName = gutter.$useSvgGutterIcons ? \"ace_icon_svg\" : \"ace_icon\";\n for (var i = 0; i < annotation.displayText.length; i++) {\n var lineElement = dom.createElement(\"span\");\n var iconElement = dom.createElement(\"span\");\n (_a = iconElement.classList).add.apply(_a, [\"ace_\".concat(annotation.type[i]), iconClassName]);\n iconElement.setAttribute(\"aria-label\", \"\".concat(GutterTooltip.annotationLabels[annotation.type[i].replace(\"_fold\", \"\")].singular));\n iconElement.setAttribute(\"role\", \"img\");\n iconElement.appendChild(dom.createTextNode(\" \"));\n lineElement.appendChild(iconElement);\n lineElement.appendChild(dom.createTextNode(annotation.displayText[i]));\n lineElement.appendChild(dom.createElement(\"br\"));\n annotationMessages[annotation.type[i].replace(\"_fold\", \"\")].push(lineElement);\n }\n var tooltipElement = this.getElement();\n dom.removeChildren(tooltipElement);\n annotationMessages.error.forEach(function (el) { return tooltipElement.appendChild(el); });\n annotationMessages.security.forEach(function (el) { return tooltipElement.appendChild(el); });\n annotationMessages.warning.forEach(function (el) { return tooltipElement.appendChild(el); });\n annotationMessages.info.forEach(function (el) { return tooltipElement.appendChild(el); });\n annotationMessages.hint.forEach(function (el) { return tooltipElement.appendChild(el); });\n tooltipElement.setAttribute(\"aria-live\", \"polite\");\n if (!this.isOpen) {\n this.setTheme(this.editor.renderer.theme);\n this.setClassName(\"ace_gutter-tooltip\");\n }\n this.show();\n this.editor._signal(\"showGutterTooltip\", this);\n };\n GutterTooltip.prototype.hideTooltip = function () {\n this.$element.removeAttribute(\"aria-live\");\n this.hide();\n this.editor._signal(\"hideGutterTooltip\", this);\n };\n GutterTooltip.annotationsToSummaryString = function (annotations) {\n var e_1, _a;\n var summary = [];\n var annotationTypes = [\"error\", \"security\", \"warning\", \"info\", \"hint\"];\n try {\n for (var annotationTypes_1 = __values(annotationTypes), annotationTypes_1_1 = annotationTypes_1.next(); !annotationTypes_1_1.done; annotationTypes_1_1 = annotationTypes_1.next()) {\n var annotationType = annotationTypes_1_1.value;\n if (!annotations[annotationType].length)\n continue;\n var label = annotations[annotationType].length === 1 ? GutterTooltip.annotationLabels[annotationType].singular : GutterTooltip.annotationLabels[annotationType].plural;\n summary.push(\"\".concat(annotations[annotationType].length, \" \").concat(label));\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (annotationTypes_1_1 && !annotationTypes_1_1.done && (_a = annotationTypes_1.return)) _a.call(annotationTypes_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return summary.join(\", \");\n };\n return GutterTooltip;\n}(Tooltip));\nexports.GutterTooltip = GutterTooltip;\n\n});\n\nace.define(\"ace/mouse/mouse_event\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar MouseEvent = /** @class */ (function () {\n function MouseEvent(domEvent, editor) { this.speed; this.wheelX; this.wheelY;\n this.domEvent = domEvent;\n this.editor = editor;\n this.x = this.clientX = domEvent.clientX;\n this.y = this.clientY = domEvent.clientY;\n this.$pos = null;\n this.$inSelection = null;\n this.propagationStopped = false;\n this.defaultPrevented = false;\n }\n MouseEvent.prototype.stopPropagation = function () {\n event.stopPropagation(this.domEvent);\n this.propagationStopped = true;\n };\n MouseEvent.prototype.preventDefault = function () {\n event.preventDefault(this.domEvent);\n this.defaultPrevented = true;\n };\n MouseEvent.prototype.stop = function () {\n this.stopPropagation();\n this.preventDefault();\n };\n MouseEvent.prototype.getDocumentPosition = function () {\n if (this.$pos)\n return this.$pos;\n this.$pos = this.editor.renderer.screenToTextCoordinates(this.clientX, this.clientY);\n return this.$pos;\n };\n MouseEvent.prototype.getGutterRow = function () {\n var documentRow = this.getDocumentPosition().row;\n var screenRow = this.editor.session.documentToScreenRow(documentRow, 0);\n var screenTopRow = this.editor.session.documentToScreenRow(this.editor.renderer.$gutterLayer.$lines.get(0).row, 0);\n return screenRow - screenTopRow;\n };\n MouseEvent.prototype.inSelection = function () {\n if (this.$inSelection !== null)\n return this.$inSelection;\n var editor = this.editor;\n var selectionRange = editor.getSelectionRange();\n if (selectionRange.isEmpty())\n this.$inSelection = false;\n else {\n var pos = this.getDocumentPosition();\n this.$inSelection = selectionRange.contains(pos.row, pos.column);\n }\n return this.$inSelection;\n };\n MouseEvent.prototype.getButton = function () {\n return event.getButton(this.domEvent);\n };\n MouseEvent.prototype.getShiftKey = function () {\n return this.domEvent.shiftKey;\n };\n MouseEvent.prototype.getAccelKey = function () {\n return useragent.isMac ? this.domEvent.metaKey : this.domEvent.ctrlKey;\n };\n return MouseEvent;\n}());\nexports.MouseEvent = MouseEvent;\n\n});\n\nace.define(\"ace/mouse/dragdrop_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar AUTOSCROLL_DELAY = 200;\nvar SCROLL_CURSOR_DELAY = 200;\nvar SCROLL_CURSOR_HYSTERESIS = 5;\nfunction DragdropHandler(mouseHandler) {\n var editor = mouseHandler.editor;\n var dragImage = dom.createElement(\"div\");\n dragImage.style.cssText = \"top:-100px;position:absolute;z-index:2147483647;opacity:0.5\";\n dragImage.textContent = \"\\xa0\";\n var exports = [\"dragWait\", \"dragWaitEnd\", \"startDrag\", \"dragReadyEnd\", \"onMouseDrag\"];\n exports.forEach(function (x) {\n mouseHandler[x] = this[x];\n }, this);\n editor.on(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n var mouseTarget = editor.container;\n var dragSelectionMarker, x, y;\n var timerId, range;\n var dragCursor, counter = 0;\n var dragOperation;\n var isInternal;\n var autoScrollStartTime;\n var cursorMovedTime;\n var cursorPointOnCaretMoved;\n this.onDragStart = function (e) {\n if (this.cancelDrag || !mouseTarget.draggable) {\n var self = this;\n setTimeout(function () {\n self.startSelect();\n self.captureMouse(e);\n }, 0);\n return e.preventDefault();\n }\n range = editor.getSelectionRange();\n var dataTransfer = e.dataTransfer;\n dataTransfer.effectAllowed = editor.getReadOnly() ? \"copy\" : \"copyMove\";\n editor.container.appendChild(dragImage);\n dataTransfer.setDragImage && dataTransfer.setDragImage(dragImage, 0, 0);\n setTimeout(function () {\n editor.container.removeChild(dragImage);\n });\n dataTransfer.clearData();\n dataTransfer.setData(\"Text\", editor.session.getTextRange());\n isInternal = true;\n this.setState(\"drag\");\n };\n this.onDragEnd = function (e) {\n mouseTarget.draggable = false;\n isInternal = false;\n this.setState(null);\n if (!editor.getReadOnly()) {\n var dropEffect = e.dataTransfer.dropEffect;\n if (!dragOperation && dropEffect == \"move\")\n editor.session.remove(editor.getSelectionRange());\n editor.$resetCursorStyle();\n }\n this.editor.unsetStyle(\"ace_dragging\");\n this.editor.renderer.setCursorStyle(\"\");\n };\n this.onDragEnter = function (e) {\n if (editor.getReadOnly() || !canAccept(e.dataTransfer))\n return;\n x = e.clientX;\n y = e.clientY;\n if (!dragSelectionMarker)\n addDragMarker();\n counter++;\n e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n return event.preventDefault(e);\n };\n this.onDragOver = function (e) {\n if (editor.getReadOnly() || !canAccept(e.dataTransfer))\n return;\n x = e.clientX;\n y = e.clientY;\n if (!dragSelectionMarker) {\n addDragMarker();\n counter++;\n }\n if (onMouseMoveTimer !== null)\n onMouseMoveTimer = null;\n e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n return event.preventDefault(e);\n };\n this.onDragLeave = function (e) {\n counter--;\n if (counter <= 0 && dragSelectionMarker) {\n clearDragMarker();\n dragOperation = null;\n return event.preventDefault(e);\n }\n };\n this.onDrop = function (e) {\n if (!dragCursor)\n return;\n var dataTransfer = e.dataTransfer;\n if (isInternal) {\n switch (dragOperation) {\n case \"move\":\n if (range.contains(dragCursor.row, dragCursor.column)) {\n range = {\n start: dragCursor,\n end: dragCursor\n };\n }\n else {\n range = editor.moveText(range, dragCursor);\n }\n break;\n case \"copy\":\n range = editor.moveText(range, dragCursor, true);\n break;\n }\n }\n else {\n var dropData = dataTransfer.getData('Text');\n range = {\n start: dragCursor,\n end: editor.session.insert(dragCursor, dropData)\n };\n editor.focus();\n dragOperation = null;\n }\n clearDragMarker();\n return event.preventDefault(e);\n };\n event.addListener(mouseTarget, \"dragstart\", this.onDragStart.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"dragend\", this.onDragEnd.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"dragenter\", this.onDragEnter.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"dragover\", this.onDragOver.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"dragleave\", this.onDragLeave.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"drop\", this.onDrop.bind(mouseHandler), editor);\n function scrollCursorIntoView(cursor, prevCursor) {\n var now = Date.now();\n var vMovement = !prevCursor || cursor.row != prevCursor.row;\n var hMovement = !prevCursor || cursor.column != prevCursor.column;\n if (!cursorMovedTime || vMovement || hMovement) {\n editor.moveCursorToPosition(cursor);\n cursorMovedTime = now;\n cursorPointOnCaretMoved = { x: x, y: y };\n }\n else {\n var distance = calcDistance(cursorPointOnCaretMoved.x, cursorPointOnCaretMoved.y, x, y);\n if (distance > SCROLL_CURSOR_HYSTERESIS) {\n cursorMovedTime = null;\n }\n else if (now - cursorMovedTime >= SCROLL_CURSOR_DELAY) {\n editor.renderer.scrollCursorIntoView();\n cursorMovedTime = null;\n }\n }\n }\n function autoScroll(cursor, prevCursor) {\n var now = Date.now();\n var lineHeight = editor.renderer.layerConfig.lineHeight;\n var characterWidth = editor.renderer.layerConfig.characterWidth;\n var editorRect = editor.renderer.scroller.getBoundingClientRect();\n var offsets = {\n x: {\n left: x - editorRect.left,\n right: editorRect.right - x\n },\n y: {\n top: y - editorRect.top,\n bottom: editorRect.bottom - y\n }\n };\n var nearestXOffset = Math.min(offsets.x.left, offsets.x.right);\n var nearestYOffset = Math.min(offsets.y.top, offsets.y.bottom);\n var scrollCursor = { row: cursor.row, column: cursor.column };\n if (nearestXOffset / characterWidth <= 2) {\n scrollCursor.column += (offsets.x.left < offsets.x.right ? -3 : +2);\n }\n if (nearestYOffset / lineHeight <= 1) {\n scrollCursor.row += (offsets.y.top < offsets.y.bottom ? -1 : +1);\n }\n var vScroll = cursor.row != scrollCursor.row;\n var hScroll = cursor.column != scrollCursor.column;\n var vMovement = !prevCursor || cursor.row != prevCursor.row;\n if (vScroll || (hScroll && !vMovement)) {\n if (!autoScrollStartTime)\n autoScrollStartTime = now;\n else if (now - autoScrollStartTime >= AUTOSCROLL_DELAY)\n editor.renderer.scrollCursorIntoView(scrollCursor);\n }\n else {\n autoScrollStartTime = null;\n }\n }\n function onDragInterval() {\n var prevCursor = dragCursor;\n dragCursor = editor.renderer.screenToTextCoordinates(x, y);\n scrollCursorIntoView(dragCursor, prevCursor);\n autoScroll(dragCursor, prevCursor);\n }\n function addDragMarker() {\n range = editor.selection.toOrientedRange();\n dragSelectionMarker = editor.session.addMarker(range, \"ace_selection\", editor.getSelectionStyle());\n editor.clearSelection();\n if (editor.isFocused())\n editor.renderer.$cursorLayer.setBlinking(false);\n clearInterval(timerId);\n onDragInterval();\n timerId = setInterval(onDragInterval, 20);\n counter = 0;\n event.addListener(document, \"mousemove\", onMouseMove);\n }\n function clearDragMarker() {\n clearInterval(timerId);\n editor.session.removeMarker(dragSelectionMarker);\n dragSelectionMarker = null;\n editor.selection.fromOrientedRange(range);\n if (editor.isFocused() && !isInternal)\n editor.$resetCursorStyle();\n range = null;\n dragCursor = null;\n counter = 0;\n autoScrollStartTime = null;\n cursorMovedTime = null;\n event.removeListener(document, \"mousemove\", onMouseMove);\n }\n var onMouseMoveTimer = null;\n function onMouseMove() {\n if (onMouseMoveTimer == null) {\n onMouseMoveTimer = setTimeout(function () {\n if (onMouseMoveTimer != null && dragSelectionMarker)\n clearDragMarker();\n }, 20);\n }\n }\n function canAccept(dataTransfer) {\n var types = dataTransfer.types;\n return !types || Array.prototype.some.call(types, function (type) {\n return type == 'text/plain' || type == 'Text';\n });\n }\n function getDropEffect(e) {\n var copyAllowed = ['copy', 'copymove', 'all', 'uninitialized'];\n var moveAllowed = ['move', 'copymove', 'linkmove', 'all', 'uninitialized'];\n var copyModifierState = useragent.isMac ? e.altKey : e.ctrlKey;\n var effectAllowed = \"uninitialized\";\n try {\n effectAllowed = e.dataTransfer.effectAllowed.toLowerCase();\n }\n catch (e) { }\n var dropEffect = \"none\";\n if (copyModifierState && copyAllowed.indexOf(effectAllowed) >= 0)\n dropEffect = \"copy\";\n else if (moveAllowed.indexOf(effectAllowed) >= 0)\n dropEffect = \"move\";\n else if (copyAllowed.indexOf(effectAllowed) >= 0)\n dropEffect = \"copy\";\n return dropEffect;\n }\n}\n(function () {\n this.dragWait = function () {\n var interval = Date.now() - this.mousedownEvent.time;\n if (interval > this.editor.getDragDelay())\n this.startDrag();\n };\n this.dragWaitEnd = function () {\n var target = this.editor.container;\n target.draggable = false;\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n this.selectEnd();\n };\n this.dragReadyEnd = function (e) {\n this.editor.$resetCursorStyle();\n this.editor.unsetStyle(\"ace_dragging\");\n this.editor.renderer.setCursorStyle(\"\");\n this.dragWaitEnd();\n };\n this.startDrag = function () {\n this.cancelDrag = false;\n var editor = this.editor;\n var target = editor.container;\n target.draggable = true;\n editor.renderer.$cursorLayer.setBlinking(false);\n editor.setStyle(\"ace_dragging\");\n var cursorStyle = useragent.isWin ? \"default\" : \"move\";\n editor.renderer.setCursorStyle(cursorStyle);\n this.setState(\"dragReady\");\n };\n this.onMouseDrag = function (e) {\n var target = this.editor.container;\n if (useragent.isIE && this.state == \"dragReady\") {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n if (distance > 3)\n target.dragDrop();\n }\n if (this.state === \"dragWait\") {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n if (distance > 0) {\n target.draggable = false;\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n }\n }\n };\n this.onMouseDown = function (e) {\n if (!this.$dragEnabled)\n return;\n this.mousedownEvent = e;\n var editor = this.editor;\n var inSelection = e.inSelection();\n var button = e.getButton();\n var clickCount = e.domEvent.detail || 1;\n if (clickCount === 1 && button === 0 && inSelection) {\n if (e.editor.inMultiSelectMode && (e.getAccelKey() || e.getShiftKey()))\n return;\n this.mousedownEvent.time = Date.now();\n var eventTarget = e.domEvent.target || e.domEvent.srcElement;\n if (\"unselectable\" in eventTarget)\n eventTarget.unselectable = \"on\";\n if (editor.getDragDelay()) {\n if (useragent.isWebKit) {\n this.cancelDrag = true;\n var mouseTarget = editor.container;\n mouseTarget.draggable = true;\n }\n this.setState(\"dragWait\");\n }\n else {\n this.startDrag();\n }\n this.captureMouse(e, this.onMouseDrag.bind(this));\n e.defaultPrevented = true;\n }\n };\n}).call(DragdropHandler.prototype);\nfunction calcDistance(ax, ay, bx, by) {\n return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n}\nexports.DragdropHandler = DragdropHandler;\n\n});\n\nace.define(\"ace/mouse/touch_handler\",[\"require\",\"exports\",\"module\",\"ace/mouse/mouse_event\",\"ace/lib/event\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar MouseEvent = require(\"./mouse_event\").MouseEvent;\nvar event = require(\"../lib/event\");\nvar dom = require(\"../lib/dom\");\nexports.addTouchListeners = function (el, editor) {\n var mode = \"scroll\";\n var startX;\n var startY;\n var touchStartT;\n var lastT;\n var longTouchTimer;\n var animationTimer;\n var animationSteps = 0;\n var pos;\n var clickCount = 0;\n var vX = 0;\n var vY = 0;\n var pressed;\n var contextMenu;\n function createContextMenu() {\n var clipboard = window.navigator && window.navigator.clipboard;\n var isOpen = false;\n var updateMenu = function () {\n var selected = editor.getCopyText();\n var hasUndo = editor.session.getUndoManager().hasUndo();\n contextMenu.replaceChild(dom.buildDom(isOpen ? [\"span\",\n !selected && canExecuteCommand(\"selectall\") && [\"span\", { class: \"ace_mobile-button\", action: \"selectall\" }, \"Select All\"],\n selected && canExecuteCommand(\"copy\") && [\"span\", { class: \"ace_mobile-button\", action: \"copy\" }, \"Copy\"],\n selected && canExecuteCommand(\"cut\") && [\"span\", { class: \"ace_mobile-button\", action: \"cut\" }, \"Cut\"],\n clipboard && canExecuteCommand(\"paste\") && [\"span\", { class: \"ace_mobile-button\", action: \"paste\" }, \"Paste\"],\n hasUndo && canExecuteCommand(\"undo\") && [\"span\", { class: \"ace_mobile-button\", action: \"undo\" }, \"Undo\"],\n canExecuteCommand(\"find\") && [\"span\", { class: \"ace_mobile-button\", action: \"find\" }, \"Find\"],\n canExecuteCommand(\"openCommandPalette\") && [\"span\", { class: \"ace_mobile-button\", action: \"openCommandPalette\" }, \"Palette\"]\n ] : [\"span\"]), contextMenu.firstChild);\n };\n var canExecuteCommand = function (/** @type {string} */ cmd) {\n return editor.commands.canExecute(cmd, editor);\n };\n var handleClick = function (e) {\n var action = e.target.getAttribute(\"action\");\n if (action == \"more\" || !isOpen) {\n isOpen = !isOpen;\n return updateMenu();\n }\n if (action == \"paste\") {\n clipboard.readText().then(function (text) {\n editor.execCommand(action, text);\n });\n }\n else if (action) {\n if (action == \"cut\" || action == \"copy\") {\n if (clipboard)\n clipboard.writeText(editor.getCopyText());\n else\n document.execCommand(\"copy\");\n }\n editor.execCommand(action);\n }\n contextMenu.firstChild.style.display = \"none\";\n isOpen = false;\n if (action != \"openCommandPalette\")\n editor.focus();\n };\n contextMenu = dom.buildDom([\"div\",\n {\n class: \"ace_mobile-menu\",\n ontouchstart: function (e) {\n mode = \"menu\";\n e.stopPropagation();\n e.preventDefault();\n editor.textInput.focus();\n },\n ontouchend: function (e) {\n e.stopPropagation();\n e.preventDefault();\n handleClick(e);\n },\n onclick: handleClick\n },\n [\"span\"],\n [\"span\", { class: \"ace_mobile-button\", action: \"more\" }, \"...\"]\n ], editor.container);\n }\n function showContextMenu() {\n if (!editor.getOption(\"enableMobileMenu\")) {\n if (contextMenu) {\n hideContextMenu();\n }\n return;\n }\n if (!contextMenu)\n createContextMenu();\n var cursor = editor.selection.cursor;\n var pagePos = editor.renderer.textToScreenCoordinates(cursor.row, cursor.column);\n var leftOffset = editor.renderer.textToScreenCoordinates(0, 0).pageX;\n var scrollLeft = editor.renderer.scrollLeft;\n var rect = editor.container.getBoundingClientRect();\n contextMenu.style.top = pagePos.pageY - rect.top - 3 + \"px\";\n if (pagePos.pageX - rect.left < rect.width - 70) {\n contextMenu.style.left = \"\";\n contextMenu.style.right = \"10px\";\n }\n else {\n contextMenu.style.right = \"\";\n contextMenu.style.left = leftOffset + scrollLeft - rect.left + \"px\";\n }\n contextMenu.style.display = \"\";\n contextMenu.firstChild.style.display = \"none\";\n editor.on(\"input\", hideContextMenu);\n }\n function hideContextMenu(e) {\n if (contextMenu)\n contextMenu.style.display = \"none\";\n editor.off(\"input\", hideContextMenu);\n }\n function handleLongTap() {\n longTouchTimer = null;\n clearTimeout(longTouchTimer);\n var range = editor.selection.getRange();\n var inSelection = range.contains(pos.row, pos.column);\n if (range.isEmpty() || !inSelection) {\n editor.selection.moveToPosition(pos);\n editor.selection.selectWord();\n }\n mode = \"wait\";\n showContextMenu();\n }\n function switchToSelectionMode() {\n longTouchTimer = null;\n clearTimeout(longTouchTimer);\n editor.selection.moveToPosition(pos);\n var range = clickCount >= 2\n ? editor.selection.getLineRange(pos.row)\n : editor.session.getBracketRange(pos);\n if (range && !range.isEmpty()) {\n editor.selection.setRange(range);\n }\n else {\n editor.selection.selectWord();\n }\n mode = \"wait\";\n }\n event.addListener(el, \"contextmenu\", function (e) {\n if (!pressed)\n return;\n var textarea = editor.textInput.getElement();\n textarea.focus();\n }, editor);\n event.addListener(el, \"touchstart\", function (e) {\n var touches = e.touches;\n if (longTouchTimer || touches.length > 1) {\n clearTimeout(longTouchTimer);\n longTouchTimer = null;\n touchStartT = -1;\n mode = \"zoom\";\n return;\n }\n pressed = editor.$mouseHandler.isMousePressed = true;\n var h = editor.renderer.layerConfig.lineHeight;\n var w = editor.renderer.layerConfig.lineHeight;\n var t = e.timeStamp;\n lastT = t;\n var touchObj = touches[0];\n var x = touchObj.clientX;\n var y = touchObj.clientY;\n if (Math.abs(startX - x) + Math.abs(startY - y) > h)\n touchStartT = -1;\n startX = e.clientX = x;\n startY = e.clientY = y;\n vX = vY = 0;\n var ev = new MouseEvent(e, editor);\n pos = ev.getDocumentPosition();\n if (t - touchStartT < 500 && touches.length == 1 && !animationSteps) {\n clickCount++;\n e.preventDefault();\n e.button = 0;\n switchToSelectionMode();\n }\n else {\n clickCount = 0;\n var cursor = editor.selection.cursor;\n var anchor = editor.selection.isEmpty() ? cursor : editor.selection.anchor;\n var cursorPos = editor.renderer.$cursorLayer.getPixelPosition(cursor, true);\n var anchorPos = editor.renderer.$cursorLayer.getPixelPosition(anchor, true);\n var rect = editor.renderer.scroller.getBoundingClientRect();\n var offsetTop = editor.renderer.layerConfig.offset;\n var offsetLeft = editor.renderer.scrollLeft;\n var weightedDistance = function (x, y) {\n x = x / w;\n y = y / h - 0.75;\n return x * x + y * y;\n };\n if (e.clientX < rect.left) {\n mode = \"zoom\";\n return;\n }\n var diff1 = weightedDistance(e.clientX - rect.left - cursorPos.left + offsetLeft, e.clientY - rect.top - cursorPos.top + offsetTop);\n var diff2 = weightedDistance(e.clientX - rect.left - anchorPos.left + offsetLeft, e.clientY - rect.top - anchorPos.top + offsetTop);\n if (diff1 < 3.5 && diff2 < 3.5)\n mode = diff1 > diff2 ? \"cursor\" : \"anchor\";\n if (diff2 < 3.5)\n mode = \"anchor\";\n else if (diff1 < 3.5)\n mode = \"cursor\";\n else\n mode = \"scroll\";\n longTouchTimer = setTimeout(handleLongTap, 450);\n }\n touchStartT = t;\n }, editor);\n event.addListener(el, \"touchend\", function (e) {\n pressed = editor.$mouseHandler.isMousePressed = false;\n if (animationTimer)\n clearInterval(animationTimer);\n if (mode == \"zoom\") {\n mode = \"\";\n animationSteps = 0;\n }\n else if (longTouchTimer) {\n editor.selection.moveToPosition(pos);\n animationSteps = 0;\n showContextMenu();\n }\n else if (mode == \"scroll\") {\n animate();\n hideContextMenu();\n }\n else {\n showContextMenu();\n }\n clearTimeout(longTouchTimer);\n longTouchTimer = null;\n }, editor);\n event.addListener(el, \"touchmove\", function (e) {\n if (longTouchTimer) {\n clearTimeout(longTouchTimer);\n longTouchTimer = null;\n }\n var touches = e.touches;\n if (touches.length > 1 || mode == \"zoom\")\n return;\n var touchObj = touches[0];\n var wheelX = startX - touchObj.clientX;\n var wheelY = startY - touchObj.clientY;\n if (mode == \"wait\") {\n if (wheelX * wheelX + wheelY * wheelY > 4)\n mode = \"cursor\";\n else\n return e.preventDefault();\n }\n startX = touchObj.clientX;\n startY = touchObj.clientY;\n e.clientX = touchObj.clientX;\n e.clientY = touchObj.clientY;\n var t = e.timeStamp;\n var dt = t - lastT;\n lastT = t;\n if (mode == \"scroll\") {\n var mouseEvent = new MouseEvent(e, editor);\n mouseEvent.speed = 1;\n mouseEvent.wheelX = wheelX;\n mouseEvent.wheelY = wheelY;\n if (10 * Math.abs(wheelX) < Math.abs(wheelY))\n wheelX = 0;\n if (10 * Math.abs(wheelY) < Math.abs(wheelX))\n wheelY = 0;\n if (dt != 0) {\n vX = wheelX / dt;\n vY = wheelY / dt;\n }\n editor._emit(\"mousewheel\", mouseEvent);\n if (!mouseEvent.propagationStopped) {\n vX = vY = 0;\n }\n }\n else {\n var ev = new MouseEvent(e, editor);\n var pos = ev.getDocumentPosition();\n if (mode == \"cursor\")\n editor.selection.moveCursorToPosition(pos);\n else if (mode == \"anchor\")\n editor.selection.setSelectionAnchor(pos.row, pos.column);\n editor.renderer.scrollCursorIntoView(pos);\n e.preventDefault();\n }\n }, editor);\n function animate() {\n animationSteps += 60;\n animationTimer = setInterval(function () {\n if (animationSteps-- <= 0) {\n clearInterval(animationTimer);\n animationTimer = null;\n }\n if (Math.abs(vX) < 0.01)\n vX = 0;\n if (Math.abs(vY) < 0.01)\n vY = 0;\n if (animationSteps < 20)\n vX = 0.9 * vX;\n if (animationSteps < 20)\n vY = 0.9 * vY;\n var oldScrollTop = editor.session.getScrollTop();\n editor.renderer.scrollBy(10 * vX, 10 * vY);\n if (oldScrollTop == editor.session.getScrollTop())\n animationSteps = 0;\n }, 10);\n }\n};\n\n});\n\nace.define(\"ace/mouse/mouse_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/mouse/default_handlers\",\"ace/mouse/default_gutter_handler\",\"ace/mouse/mouse_event\",\"ace/mouse/dragdrop_handler\",\"ace/mouse/touch_handler\",\"ace/config\"], function(require, exports, module){\"use strict\";\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar DefaultHandlers = require(\"./default_handlers\").DefaultHandlers;\nvar DefaultGutterHandler = require(\"./default_gutter_handler\").GutterHandler;\nvar MouseEvent = require(\"./mouse_event\").MouseEvent;\nvar DragdropHandler = require(\"./dragdrop_handler\").DragdropHandler;\nvar addTouchListeners = require(\"./touch_handler\").addTouchListeners;\nvar config = require(\"../config\");\nvar MouseHandler = /** @class */ (function () {\n function MouseHandler(editor) { this.$dragDelay; this.$dragEnabled; this.$mouseMoved; this.mouseEvent; this.$focusTimeout;\n var _self = this;\n this.editor = editor;\n new DefaultHandlers(this);\n new DefaultGutterHandler(this);\n new DragdropHandler(this);\n var focusEditor = function (e) {\n var windowBlurred = !document.hasFocus || !document.hasFocus()\n || !editor.isFocused() && document.activeElement == (editor.textInput && editor.textInput.getElement());\n if (windowBlurred)\n window.focus();\n editor.focus();\n setTimeout(function () {\n if (!editor.isFocused())\n editor.focus();\n });\n };\n var mouseTarget = editor.renderer.getMouseEventTarget();\n event.addListener(mouseTarget, \"click\", this.onMouseEvent.bind(this, \"click\"), editor);\n event.addListener(mouseTarget, \"mousemove\", this.onMouseMove.bind(this, \"mousemove\"), editor);\n event.addMultiMouseDownListener([\n mouseTarget,\n editor.renderer.scrollBarV && editor.renderer.scrollBarV.inner,\n editor.renderer.scrollBarH && editor.renderer.scrollBarH.inner,\n editor.textInput && editor.textInput.getElement()\n ].filter(Boolean), [400, 300, 250], this, \"onMouseEvent\", editor);\n event.addMouseWheelListener(editor.container, this.onMouseWheel.bind(this, \"mousewheel\"), editor);\n addTouchListeners(editor.container, editor);\n var gutterEl = editor.renderer.$gutter;\n event.addListener(gutterEl, \"mousedown\", this.onMouseEvent.bind(this, \"guttermousedown\"), editor);\n event.addListener(gutterEl, \"click\", this.onMouseEvent.bind(this, \"gutterclick\"), editor);\n event.addListener(gutterEl, \"dblclick\", this.onMouseEvent.bind(this, \"gutterdblclick\"), editor);\n event.addListener(gutterEl, \"mousemove\", this.onMouseEvent.bind(this, \"guttermousemove\"), editor);\n event.addListener(mouseTarget, \"mousedown\", focusEditor, editor);\n event.addListener(gutterEl, \"mousedown\", focusEditor, editor);\n if (useragent.isIE && editor.renderer.scrollBarV) {\n event.addListener(editor.renderer.scrollBarV.element, \"mousedown\", focusEditor, editor);\n event.addListener(editor.renderer.scrollBarH.element, \"mousedown\", focusEditor, editor);\n }\n editor.on(\"mousemove\", function (e) {\n if (_self.state || _self.$dragDelay || !_self.$dragEnabled)\n return;\n var character = editor.renderer.screenToTextCoordinates(e.x, e.y);\n var range = editor.session.selection.getRange();\n var renderer = editor.renderer;\n if (!range.isEmpty() && range.insideStart(character.row, character.column)) {\n renderer.setCursorStyle(\"default\");\n }\n else {\n renderer.setCursorStyle(\"\");\n }\n }, //@ts-expect-error TODO: seems mistyping - should be boolean\n editor);\n }\n MouseHandler.prototype.onMouseEvent = function (name, e) {\n if (!this.editor.session)\n return;\n this.editor._emit(name, new MouseEvent(e, this.editor));\n };\n MouseHandler.prototype.onMouseMove = function (name, e) {\n var listeners = this.editor._eventRegistry && this.editor._eventRegistry.mousemove;\n if (!listeners || !listeners.length)\n return;\n this.editor._emit(name, new MouseEvent(e, this.editor));\n };\n MouseHandler.prototype.onMouseWheel = function (name, e) {\n var mouseEvent = new MouseEvent(e, this.editor);\n mouseEvent.speed = this.$scrollSpeed * 2;\n mouseEvent.wheelX = e.wheelX;\n mouseEvent.wheelY = e.wheelY;\n this.editor._emit(name, mouseEvent);\n };\n MouseHandler.prototype.setState = function (state) {\n this.state = state;\n };\n MouseHandler.prototype.captureMouse = function (ev, mouseMoveHandler) {\n this.x = ev.x;\n this.y = ev.y;\n this.isMousePressed = true;\n var editor = this.editor;\n var renderer = this.editor.renderer;\n renderer.$isMousePressed = true;\n var self = this;\n var onMouseMove = function (e) {\n if (!e)\n return;\n if (useragent.isWebKit && !e.which && self.releaseMouse)\n return self.releaseMouse();\n self.x = e.clientX;\n self.y = e.clientY;\n mouseMoveHandler && mouseMoveHandler(e);\n self.mouseEvent = new MouseEvent(e, self.editor);\n self.$mouseMoved = true;\n };\n var onCaptureEnd = function (e) {\n editor.off(\"beforeEndOperation\", onOperationEnd);\n clearInterval(timerId);\n if (editor.session)\n onCaptureInterval();\n self[self.state + \"End\"] && self[self.state + \"End\"](e);\n self.state = \"\";\n self.isMousePressed = renderer.$isMousePressed = false;\n if (renderer.$keepTextAreaAtCursor)\n renderer.$moveTextAreaToCursor();\n self.$onCaptureMouseMove = self.releaseMouse = null;\n e && self.onMouseEvent(\"mouseup\", e);\n editor.endOperation();\n };\n var onCaptureInterval = function () {\n self[self.state] && self[self.state]();\n self.$mouseMoved = false;\n };\n if (useragent.isOldIE && ev.domEvent.type == \"dblclick\") {\n return setTimeout(function () { onCaptureEnd(ev); });\n }\n var onOperationEnd = function (e) {\n if (!self.releaseMouse)\n return;\n if (editor.curOp.command.name && editor.curOp.selectionChanged) {\n self[self.state + \"End\"] && self[self.state + \"End\"]();\n self.state = \"\";\n self.releaseMouse();\n }\n };\n editor.on(\"beforeEndOperation\", onOperationEnd);\n editor.startOperation({ command: { name: \"mouse\" } });\n self.$onCaptureMouseMove = onMouseMove;\n self.releaseMouse = event.capture(this.editor.container, onMouseMove, onCaptureEnd);\n var timerId = setInterval(onCaptureInterval, 20);\n };\n MouseHandler.prototype.cancelContextMenu = function () {\n var stop = function (e) {\n if (e && e.domEvent && e.domEvent.type != \"contextmenu\")\n return;\n this.editor.off(\"nativecontextmenu\", stop);\n if (e && e.domEvent)\n event.stopEvent(e.domEvent);\n }.bind(this);\n setTimeout(stop, 10);\n this.editor.on(\"nativecontextmenu\", stop);\n };\n MouseHandler.prototype.destroy = function () {\n if (this.releaseMouse)\n this.releaseMouse();\n };\n return MouseHandler;\n}());\nMouseHandler.prototype.releaseMouse = null;\nconfig.defineOptions(MouseHandler.prototype, \"mouseHandler\", {\n scrollSpeed: { initialValue: 2 },\n dragDelay: { initialValue: (useragent.isMac ? 150 : 0) },\n dragEnabled: { initialValue: true },\n focusTimeout: { initialValue: 0 },\n tooltipFollowsMouse: { initialValue: true }\n});\nexports.MouseHandler = MouseHandler;\n\n});\n\nace.define(\"ace/mouse/fold_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar FoldHandler = /** @class */ (function () {\n function FoldHandler(editor) {\n editor.on(\"click\", function (e) {\n var position = e.getDocumentPosition();\n var session = editor.session;\n var fold = session.getFoldAt(position.row, position.column, 1);\n if (fold) {\n if (e.getAccelKey())\n session.removeFold(fold);\n else\n session.expandFold(fold);\n e.stop();\n }\n var target = e.domEvent && e.domEvent.target;\n if (target && dom.hasCssClass(target, \"ace_inline_button\")) {\n if (dom.hasCssClass(target, \"ace_toggle_wrap\")) {\n session.setOption(\"wrap\", !session.getUseWrapMode());\n editor.renderer.scrollCursorIntoView();\n }\n }\n });\n editor.on(\"gutterclick\", function (e) {\n var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);\n if (gutterRegion == \"foldWidgets\") {\n var row = e.getDocumentPosition().row;\n var session = editor.session;\n if (session.foldWidgets && session.foldWidgets[row])\n editor.session.onFoldWidgetClick(row, e);\n if (!editor.isFocused())\n editor.focus();\n e.stop();\n }\n });\n editor.on(\"gutterdblclick\", function (e) {\n var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);\n if (gutterRegion == \"foldWidgets\") {\n var row = e.getDocumentPosition().row;\n var session = editor.session;\n var data = session.getParentFoldRangeData(row, true);\n var range = data.range || data.firstRange;\n if (range) {\n row = range.start.row;\n var fold = session.getFoldAt(row, session.getLine(row).length, 1);\n if (fold) {\n session.removeFold(fold);\n }\n else {\n session.addFold(\"...\", range);\n editor.renderer.scrollCursorIntoView({ row: range.start.row, column: 0 });\n }\n }\n e.stop();\n }\n });\n }\n return FoldHandler;\n}());\nexports.FoldHandler = FoldHandler;\n\n});\n\nace.define(\"ace/keyboard/keybinding\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/event\"], function(require, exports, module){\"use strict\";\nvar keyUtil = require(\"../lib/keys\");\nvar event = require(\"../lib/event\");\nvar KeyBinding = /** @class */ (function () {\n function KeyBinding(editor) {\n this.$editor = editor;\n this.$data = { editor: editor };\n this.$handlers = [];\n this.setDefaultHandler(editor.commands);\n }\n KeyBinding.prototype.setDefaultHandler = function (kb) {\n this.removeKeyboardHandler(this.$defaultHandler);\n this.$defaultHandler = kb;\n this.addKeyboardHandler(kb, 0);\n };\n KeyBinding.prototype.setKeyboardHandler = function (kb) {\n var h = this.$handlers;\n if (h[h.length - 1] == kb)\n return;\n while (h[h.length - 1] && h[h.length - 1] != this.$defaultHandler)\n this.removeKeyboardHandler(h[h.length - 1]);\n this.addKeyboardHandler(kb, 1);\n };\n KeyBinding.prototype.addKeyboardHandler = function (kb, pos) {\n if (!kb)\n return;\n if (typeof kb == \"function\" && !kb.handleKeyboard)\n kb.handleKeyboard = kb;\n var i = this.$handlers.indexOf(kb);\n if (i != -1)\n this.$handlers.splice(i, 1);\n if (pos == undefined)\n this.$handlers.push(kb);\n else\n this.$handlers.splice(pos, 0, kb);\n if (i == -1 && kb.attach)\n kb.attach(this.$editor);\n };\n KeyBinding.prototype.removeKeyboardHandler = function (kb) {\n var i = this.$handlers.indexOf(kb);\n if (i == -1)\n return false;\n this.$handlers.splice(i, 1);\n kb.detach && kb.detach(this.$editor);\n return true;\n };\n KeyBinding.prototype.getKeyboardHandler = function () {\n return this.$handlers[this.$handlers.length - 1];\n };\n KeyBinding.prototype.getStatusText = function () {\n var data = this.$data;\n var editor = data.editor;\n return this.$handlers.map(function (h) {\n return h.getStatusText && h.getStatusText(editor, data) || \"\";\n }).filter(Boolean).join(\" \");\n };\n KeyBinding.prototype.$callKeyboardHandlers = function (hashId, keyString, keyCode, e) {\n var toExecute;\n var success = false;\n var commands = this.$editor.commands;\n for (var i = this.$handlers.length; i--;) {\n toExecute = this.$handlers[i].handleKeyboard(\n this.$data, hashId, keyString, keyCode, e);\n if (!toExecute || !toExecute.command)\n continue;\n if (toExecute.command == \"null\") {\n success = true;\n }\n else {\n success = commands.exec(toExecute.command, this.$editor, toExecute.args, e);\n }\n if (success && e && hashId != -1 &&\n toExecute[\"passEvent\"] != true && toExecute.command[\"passEvent\"] != true) {\n event.stopEvent(e);\n }\n if (success)\n break;\n }\n if (!success && hashId == -1) {\n toExecute = { command: \"insertstring\" };\n success = commands.exec(\"insertstring\", this.$editor, keyString);\n }\n if (success && this.$editor._signal)\n this.$editor._signal(\"keyboardActivity\", toExecute);\n return success;\n };\n KeyBinding.prototype.onCommandKey = function (e, hashId, keyCode) {\n var keyString = keyUtil.keyCodeToString(keyCode);\n return this.$callKeyboardHandlers(hashId, keyString, keyCode, e);\n };\n KeyBinding.prototype.onTextInput = function (text) {\n return this.$callKeyboardHandlers(-1, text);\n };\n return KeyBinding;\n}());\nexports.KeyBinding = KeyBinding;\n\n});\n\nace.define(\"ace/lib/bidiutil\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar ArabicAlefBetIntervalsBegine = ['\\u0621', '\\u0641'];\nvar ArabicAlefBetIntervalsEnd = ['\\u063A', '\\u064a'];\nvar dir = 0, hiLevel = 0;\nvar lastArabic = false, hasUBAT_AL = false, hasUBAT_B = false, hasUBAT_S = false, hasBlockSep = false, hasSegSep = false;\nvar impTab_LTR = [ [0, 3, 0, 1, 0, 0, 0], [0, 3, 0, 1, 2, 2, 0], [0, 3, 0, 0x11, 2, 0, 1], [0, 3, 5, 5, 4, 1, 0], [0, 3, 0x15, 0x15, 4, 0, 1], [0, 3, 5, 5, 4, 2, 0]\n];\nvar impTab_RTL = [ [2, 0, 1, 1, 0, 1, 0], [2, 0, 1, 1, 0, 2, 0], [2, 0, 2, 1, 3, 2, 0], [2, 0, 2, 0x21, 3, 1, 1]\n];\nvar LTR = 0, RTL = 1;\nvar L = 0;\nvar R = 1;\nvar EN = 2;\nvar AN = 3;\nvar ON = 4;\nvar B = 5;\nvar S = 6;\nvar AL = 7;\nvar WS = 8;\nvar CS = 9;\nvar ES = 10;\nvar ET = 11;\nvar NSM = 12;\nvar LRE = 13;\nvar RLE = 14;\nvar PDF = 15;\nvar LRO = 16;\nvar RLO = 17;\nvar BN = 18;\nvar UnicodeTBL00 = [\n BN, BN, BN, BN, BN, BN, BN, BN, BN, S, B, S, WS, B, BN, BN,\n BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, B, B, B, S,\n WS, ON, ON, ET, ET, ET, ON, ON, ON, ON, ON, ES, CS, ES, CS, CS,\n EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, CS, ON, ON, ON, ON, ON,\n ON, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L,\n L, L, L, L, L, L, L, L, L, L, L, ON, ON, ON, ON, ON,\n ON, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L,\n L, L, L, L, L, L, L, L, L, L, L, ON, ON, ON, ON, BN,\n BN, BN, BN, BN, BN, B, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN,\n BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN,\n CS, ON, ET, ET, ET, ET, ON, ON, ON, ON, L, ON, ON, BN, ON, ON,\n ET, ET, EN, EN, ON, L, ON, ON, ON, EN, L, ON, ON, ON, ON, ON\n];\nvar UnicodeTBL20 = [\n WS, WS, WS, WS, WS, WS, WS, WS, WS, WS, WS, BN, BN, BN, L, R,\n ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,\n ON, ON, ON, ON, ON, ON, ON, ON, WS, B, LRE, RLE, PDF, LRO, RLO, CS,\n ET, ET, ET, ET, ET, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,\n ON, ON, ON, ON, CS, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,\n ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, WS\n];\nfunction _computeLevels(chars, levels, len, charTypes) {\n var impTab = dir ? impTab_RTL : impTab_LTR, prevState = null, newClass = null, newLevel = null, newState = 0, action = null, cond = null, condPos = -1, i = null, ix = null, classes = [];\n if (!charTypes) {\n for (i = 0, charTypes = []; i < len; i++) {\n charTypes[i] = _getCharacterType(chars[i]);\n }\n }\n hiLevel = dir;\n lastArabic = false;\n hasUBAT_AL = false;\n hasUBAT_B = false;\n hasUBAT_S = false;\n for (ix = 0; ix < len; ix++) {\n prevState = newState;\n classes[ix] = newClass = _getCharClass(chars, charTypes, classes, ix);\n newState = impTab[prevState][newClass];\n action = newState & 0xF0;\n newState &= 0x0F;\n levels[ix] = newLevel = impTab[newState][5];\n if (action > 0) {\n if (action == 0x10) {\n for (i = condPos; i < ix; i++) {\n levels[i] = 1;\n }\n condPos = -1;\n }\n else {\n condPos = -1;\n }\n }\n cond = impTab[newState][6];\n if (cond) {\n if (condPos == -1) {\n condPos = ix;\n }\n }\n else {\n if (condPos > -1) {\n for (i = condPos; i < ix; i++) {\n levels[i] = newLevel;\n }\n condPos = -1;\n }\n }\n if (charTypes[ix] == B) {\n levels[ix] = 0;\n }\n hiLevel |= newLevel;\n }\n if (hasUBAT_S) {\n for (i = 0; i < len; i++) {\n if (charTypes[i] == S) {\n levels[i] = dir;\n for (var j = i - 1; j >= 0; j--) {\n if (charTypes[j] == WS) {\n levels[j] = dir;\n }\n else {\n break;\n }\n }\n }\n }\n }\n}\nfunction _invertLevel(lev, levels, _array) {\n if (hiLevel < lev) {\n return;\n }\n if (lev == 1 && dir == RTL && !hasUBAT_B) {\n _array.reverse();\n return;\n }\n var len = _array.length, start = 0, end, lo, hi, tmp;\n while (start < len) {\n if (levels[start] >= lev) {\n end = start + 1;\n while (end < len && levels[end] >= lev) {\n end++;\n }\n for (lo = start, hi = end - 1; lo < hi; lo++, hi--) {\n tmp = _array[lo];\n _array[lo] = _array[hi];\n _array[hi] = tmp;\n }\n start = end;\n }\n start++;\n }\n}\nfunction _getCharClass(chars, types, classes, ix) {\n var cType = types[ix], wType, nType, len, i;\n switch (cType) {\n case L:\n case R:\n lastArabic = false;\n case ON:\n case AN:\n return cType;\n case EN:\n return lastArabic ? AN : EN;\n case AL:\n lastArabic = true;\n hasUBAT_AL = true;\n return R;\n case WS:\n return ON;\n case CS:\n if (ix < 1 || (ix + 1) >= types.length ||\n ((wType = classes[ix - 1]) != EN && wType != AN) ||\n ((nType = types[ix + 1]) != EN && nType != AN)) {\n return ON;\n }\n if (lastArabic) {\n nType = AN;\n }\n return nType == wType ? nType : ON;\n case ES:\n wType = ix > 0 ? classes[ix - 1] : B;\n if (wType == EN && (ix + 1) < types.length && types[ix + 1] == EN) {\n return EN;\n }\n return ON;\n case ET:\n if (ix > 0 && classes[ix - 1] == EN) {\n return EN;\n }\n if (lastArabic) {\n return ON;\n }\n i = ix + 1;\n len = types.length;\n while (i < len && types[i] == ET) {\n i++;\n }\n if (i < len && types[i] == EN) {\n return EN;\n }\n return ON;\n case NSM:\n len = types.length;\n i = ix + 1;\n while (i < len && types[i] == NSM) {\n i++;\n }\n if (i < len) {\n var c = chars[ix], rtlCandidate = (c >= 0x0591 && c <= 0x08FF) || c == 0xFB1E;\n wType = types[i];\n if (rtlCandidate && (wType == R || wType == AL)) {\n return R;\n }\n }\n if (ix < 1 || (wType = types[ix - 1]) == B) {\n return ON;\n }\n return classes[ix - 1];\n case B:\n lastArabic = false;\n hasUBAT_B = true;\n return dir;\n case S:\n hasUBAT_S = true;\n return ON;\n case LRE:\n case RLE:\n case LRO:\n case RLO:\n case PDF:\n lastArabic = false;\n case BN:\n return ON;\n }\n}\nfunction _getCharacterType(ch) {\n var uc = ch.charCodeAt(0), hi = uc >> 8;\n if (hi == 0) {\n return ((uc > 0x00BF) ? L : UnicodeTBL00[uc]);\n }\n else if (hi == 5) {\n return (/[\\u0591-\\u05f4]/.test(ch) ? R : L);\n }\n else if (hi == 6) {\n if (/[\\u0610-\\u061a\\u064b-\\u065f\\u06d6-\\u06e4\\u06e7-\\u06ed]/.test(ch))\n return NSM;\n else if (/[\\u0660-\\u0669\\u066b-\\u066c]/.test(ch))\n return AN;\n else if (uc == 0x066A)\n return ET;\n else if (/[\\u06f0-\\u06f9]/.test(ch))\n return EN;\n else\n return AL;\n }\n else if (hi == 0x20 && uc <= 0x205F) {\n return UnicodeTBL20[uc & 0xFF];\n }\n else if (hi == 0xFE) {\n return (uc >= 0xFE70 ? AL : ON);\n }\n return ON;\n}\nfunction _isArabicDiacritics(ch) {\n return (ch >= '\\u064b' && ch <= '\\u0655');\n}\nexports.L = L;\nexports.R = R;\nexports.EN = EN;\nexports.ON_R = 3;\nexports.AN = 4;\nexports.R_H = 5;\nexports.B = 6;\nexports.RLE = 7;\nexports.DOT = \"\\xB7\";\nexports.doBidiReorder = function (text, textCharTypes, isRtl) {\n if (text.length < 2)\n return {};\n var chars = text.split(\"\"), logicalFromVisual = new Array(chars.length), bidiLevels = new Array(chars.length), levels = [];\n dir = isRtl ? RTL : LTR;\n _computeLevels(chars, levels, chars.length, textCharTypes);\n for (var i = 0; i < logicalFromVisual.length; logicalFromVisual[i] = i, i++)\n ;\n _invertLevel(2, levels, logicalFromVisual);\n _invertLevel(1, levels, logicalFromVisual);\n for (var i = 0; i < logicalFromVisual.length - 1; i++) { //fix levels to reflect character width\n if (textCharTypes[i] === AN) {\n levels[i] = exports.AN;\n }\n else if (levels[i] === R && ((textCharTypes[i] > AL && textCharTypes[i] < LRE)\n || textCharTypes[i] === ON || textCharTypes[i] === BN)) {\n levels[i] = exports.ON_R;\n }\n else if ((i > 0 && chars[i - 1] === '\\u0644') && /\\u0622|\\u0623|\\u0625|\\u0627/.test(chars[i])) {\n levels[i - 1] = levels[i] = exports.R_H;\n i++;\n }\n }\n if (chars[chars.length - 1] === exports.DOT)\n levels[chars.length - 1] = exports.B;\n if (chars[0] === '\\u202B')\n levels[0] = exports.RLE;\n for (var i = 0; i < logicalFromVisual.length; i++) {\n bidiLevels[i] = levels[logicalFromVisual[i]];\n }\n return { 'logicalFromVisual': logicalFromVisual, 'bidiLevels': bidiLevels };\n};\nexports.hasBidiCharacters = function (text, textCharTypes) {\n var ret = false;\n for (var i = 0; i < text.length; i++) {\n textCharTypes[i] = _getCharacterType(text.charAt(i));\n if (!ret && (textCharTypes[i] == R || textCharTypes[i] == AL || textCharTypes[i] == AN))\n ret = true;\n }\n return ret;\n};\nexports.getVisualFromLogicalIdx = function (logIdx, rowMap) {\n for (var i = 0; i < rowMap.logicalFromVisual.length; i++) {\n if (rowMap.logicalFromVisual[i] == logIdx)\n return i;\n }\n return 0;\n};\n\n});\n\nace.define(\"ace/bidihandler\",[\"require\",\"exports\",\"module\",\"ace/lib/bidiutil\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar bidiUtil = require(\"./lib/bidiutil\");\nvar lang = require(\"./lib/lang\");\nvar bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac\\u202B]/;\nvar BidiHandler = /** @class */ (function () {\n function BidiHandler(session) {\n this.session = session;\n this.bidiMap = {};\n this.currentRow = null;\n this.bidiUtil = bidiUtil;\n this.charWidths = [];\n this.EOL = \"\\xAC\";\n this.showInvisibles = true;\n this.isRtlDir = false;\n this.$isRtl = false;\n this.line = \"\";\n this.wrapIndent = 0;\n this.EOF = \"\\xB6\";\n this.RLE = \"\\u202B\";\n this.contentWidth = 0;\n this.fontMetrics = null;\n this.rtlLineOffset = 0;\n this.wrapOffset = 0;\n this.isMoveLeftOperation = false;\n this.seenBidi = bidiRE.test(session.getValue());\n }\n BidiHandler.prototype.isBidiRow = function (screenRow, docRow, splitIndex) {\n if (!this.seenBidi)\n return false;\n if (screenRow !== this.currentRow) {\n this.currentRow = screenRow;\n this.updateRowLine(docRow, splitIndex);\n this.updateBidiMap();\n }\n return this.bidiMap.bidiLevels;\n };\n BidiHandler.prototype.onChange = function (delta) {\n if (!this.seenBidi) {\n if (delta.action == \"insert\" && bidiRE.test(delta.lines.join(\"\\n\"))) {\n this.seenBidi = true;\n this.currentRow = null;\n }\n }\n else {\n this.currentRow = null;\n }\n };\n BidiHandler.prototype.getDocumentRow = function () {\n var docRow = 0;\n var rowCache = this.session.$screenRowCache;\n if (rowCache.length) {\n var index = this.session.$getRowCacheIndex(rowCache, this.currentRow);\n if (index >= 0)\n docRow = this.session.$docRowCache[index];\n }\n return docRow;\n };\n BidiHandler.prototype.getSplitIndex = function () {\n var splitIndex = 0;\n var rowCache = this.session.$screenRowCache;\n if (rowCache.length) {\n var currentIndex, prevIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow);\n while (this.currentRow - splitIndex > 0) {\n currentIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow - splitIndex - 1);\n if (currentIndex !== prevIndex)\n break;\n prevIndex = currentIndex;\n splitIndex++;\n }\n }\n else {\n splitIndex = this.currentRow;\n }\n return splitIndex;\n };\n BidiHandler.prototype.updateRowLine = function (docRow, splitIndex) {\n if (docRow === undefined)\n docRow = this.getDocumentRow();\n var isLastRow = (docRow === this.session.getLength() - 1), endOfLine = isLastRow ? this.EOF : this.EOL;\n this.wrapIndent = 0;\n this.line = this.session.getLine(docRow);\n this.isRtlDir = this.$isRtl || this.line.charAt(0) === this.RLE;\n if (this.session.$useWrapMode) {\n var splits = this.session.$wrapData[docRow];\n if (splits) {\n if (splitIndex === undefined)\n splitIndex = this.getSplitIndex();\n if (splitIndex > 0 && splits.length) {\n this.wrapIndent = splits.indent;\n this.wrapOffset = this.wrapIndent * this.charWidths[bidiUtil.L];\n this.line = (splitIndex < splits.length) ?\n this.line.substring(splits[splitIndex - 1], splits[splitIndex]) :\n this.line.substring(splits[splits.length - 1]);\n }\n else {\n this.line = this.line.substring(0, splits[splitIndex]);\n }\n if (splitIndex == splits.length) {\n this.line += (this.showInvisibles) ? endOfLine : bidiUtil.DOT;\n }\n }\n }\n else {\n this.line += this.showInvisibles ? endOfLine : bidiUtil.DOT;\n }\n var session = this.session, shift = 0, size;\n this.line = this.line.replace(/\\t|[\\u1100-\\u2029, \\u202F-\\uFFE6]/g, function (ch, i) {\n if (ch === '\\t' || session.isFullWidth(ch.charCodeAt(0))) {\n size = (ch === '\\t') ? session.getScreenTabSize(i + shift) : 2;\n shift += size - 1;\n return lang.stringRepeat(bidiUtil.DOT, size);\n }\n return ch;\n });\n if (this.isRtlDir) {\n this.fontMetrics.$main.textContent = (this.line.charAt(this.line.length - 1) == bidiUtil.DOT) ? this.line.substr(0, this.line.length - 1) : this.line;\n this.rtlLineOffset = this.contentWidth - this.fontMetrics.$main.getBoundingClientRect().width;\n }\n };\n BidiHandler.prototype.updateBidiMap = function () {\n var textCharTypes = [];\n if (bidiUtil.hasBidiCharacters(this.line, textCharTypes) || this.isRtlDir) {\n this.bidiMap = bidiUtil.doBidiReorder(this.line, textCharTypes, this.isRtlDir);\n }\n else {\n this.bidiMap = {};\n }\n };\n BidiHandler.prototype.markAsDirty = function () {\n this.currentRow = null;\n };\n BidiHandler.prototype.updateCharacterWidths = function (fontMetrics) {\n if (this.characterWidth === fontMetrics.$characterSize.width)\n return;\n this.fontMetrics = fontMetrics;\n var characterWidth = this.characterWidth = fontMetrics.$characterSize.width;\n var bidiCharWidth = fontMetrics.$measureCharWidth(\"\\u05d4\");\n this.charWidths[bidiUtil.L] = this.charWidths[bidiUtil.EN] = this.charWidths[bidiUtil.ON_R] = characterWidth;\n this.charWidths[bidiUtil.R] = this.charWidths[bidiUtil.AN] = bidiCharWidth;\n this.charWidths[bidiUtil.R_H] = bidiCharWidth * 0.45;\n this.charWidths[bidiUtil.B] = this.charWidths[bidiUtil.RLE] = 0;\n this.currentRow = null;\n };\n BidiHandler.prototype.setShowInvisibles = function (showInvisibles) {\n this.showInvisibles = showInvisibles;\n this.currentRow = null;\n };\n BidiHandler.prototype.setEolChar = function (eolChar) {\n this.EOL = eolChar;\n };\n BidiHandler.prototype.setContentWidth = function (width) {\n this.contentWidth = width;\n };\n BidiHandler.prototype.isRtlLine = function (row) {\n if (this.$isRtl)\n return true;\n if (row != undefined)\n return (this.session.getLine(row).charAt(0) == this.RLE);\n else\n return this.isRtlDir;\n };\n BidiHandler.prototype.setRtlDirection = function (editor, isRtlDir) {\n var cursor = editor.getCursorPosition();\n for (var row = editor.selection.getSelectionAnchor().row; row <= cursor.row; row++) {\n if (!isRtlDir && editor.session.getLine(row).charAt(0) === editor.session.$bidiHandler.RLE)\n editor.session.doc.removeInLine(row, 0, 1);\n else if (isRtlDir && editor.session.getLine(row).charAt(0) !== editor.session.$bidiHandler.RLE)\n editor.session.doc.insert({ column: 0, row: row }, editor.session.$bidiHandler.RLE);\n }\n };\n BidiHandler.prototype.getPosLeft = function (col) {\n col -= this.wrapIndent;\n var leftBoundary = (this.line.charAt(0) === this.RLE) ? 1 : 0;\n var logicalIdx = (col > leftBoundary) ? (this.session.getOverwrite() ? col : col - 1) : leftBoundary;\n var visualIdx = bidiUtil.getVisualFromLogicalIdx(logicalIdx, this.bidiMap), levels = this.bidiMap.bidiLevels, left = 0;\n if (!this.session.getOverwrite() && col <= leftBoundary && levels[visualIdx] % 2 !== 0)\n visualIdx++;\n for (var i = 0; i < visualIdx; i++) {\n left += this.charWidths[levels[i]];\n }\n if (!this.session.getOverwrite() && (col > leftBoundary) && (levels[visualIdx] % 2 === 0))\n left += this.charWidths[levels[visualIdx]];\n if (this.wrapIndent)\n left += this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n if (this.isRtlDir)\n left += this.rtlLineOffset;\n return left;\n };\n BidiHandler.prototype.getSelections = function (startCol, endCol) {\n var map = this.bidiMap, levels = map.bidiLevels, level, selections = [], offset = 0, selColMin = Math.min(startCol, endCol) - this.wrapIndent, selColMax = Math.max(startCol, endCol) - this.wrapIndent, isSelected = false, isSelectedPrev = false, selectionStart = 0;\n if (this.wrapIndent)\n offset += this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n for (var logIdx, visIdx = 0; visIdx < levels.length; visIdx++) {\n logIdx = map.logicalFromVisual[visIdx];\n level = levels[visIdx];\n isSelected = (logIdx >= selColMin) && (logIdx < selColMax);\n if (isSelected && !isSelectedPrev) {\n selectionStart = offset;\n }\n else if (!isSelected && isSelectedPrev) {\n selections.push({ left: selectionStart, width: offset - selectionStart });\n }\n offset += this.charWidths[level];\n isSelectedPrev = isSelected;\n }\n if (isSelected && (visIdx === levels.length)) {\n selections.push({ left: selectionStart, width: offset - selectionStart });\n }\n if (this.isRtlDir) {\n for (var i = 0; i < selections.length; i++) {\n selections[i].left += this.rtlLineOffset;\n }\n }\n return selections;\n };\n BidiHandler.prototype.offsetToCol = function (posX) {\n if (this.isRtlDir)\n posX -= this.rtlLineOffset;\n var logicalIdx = 0, posX = Math.max(posX, 0), offset = 0, visualIdx = 0, levels = this.bidiMap.bidiLevels, charWidth = this.charWidths[levels[visualIdx]];\n if (this.wrapIndent)\n posX -= this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n while (posX > offset + charWidth / 2) {\n offset += charWidth;\n if (visualIdx === levels.length - 1) {\n charWidth = 0;\n break;\n }\n charWidth = this.charWidths[levels[++visualIdx]];\n }\n if (visualIdx > 0 && (levels[visualIdx - 1] % 2 !== 0) && (levels[visualIdx] % 2 === 0)) {\n if (posX < offset)\n visualIdx--;\n logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n }\n else if (visualIdx > 0 && (levels[visualIdx - 1] % 2 === 0) && (levels[visualIdx] % 2 !== 0)) {\n logicalIdx = 1 + ((posX > offset) ? this.bidiMap.logicalFromVisual[visualIdx]\n : this.bidiMap.logicalFromVisual[visualIdx - 1]);\n }\n else if ((this.isRtlDir && visualIdx === levels.length - 1 && charWidth === 0 && (levels[visualIdx - 1] % 2 === 0))\n || (!this.isRtlDir && visualIdx === 0 && (levels[visualIdx] % 2 !== 0))) {\n logicalIdx = 1 + this.bidiMap.logicalFromVisual[visualIdx];\n }\n else {\n if (visualIdx > 0 && (levels[visualIdx - 1] % 2 !== 0) && charWidth !== 0)\n visualIdx--;\n logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n }\n if (logicalIdx === 0 && this.isRtlDir)\n logicalIdx++;\n return (logicalIdx + this.wrapIndent);\n };\n return BidiHandler;\n}());\nexports.BidiHandler = BidiHandler;\n\n});\n\nace.define(\"ace/selection\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar lang = require(\"./lib/lang\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Selection = /** @class */ (function () {\n function Selection(session) {\n this.session = session;\n this.doc = session.getDocument();\n this.clearSelection();\n this.cursor = this.lead = this.doc.createAnchor(0, 0);\n this.anchor = this.doc.createAnchor(0, 0);\n this.$silent = false;\n var self = this;\n this.cursor.on(\"change\", function (e) {\n self.$cursorChanged = true;\n if (!self.$silent)\n self._emit(\"changeCursor\");\n if (!self.$isEmpty && !self.$silent)\n self._emit(\"changeSelection\");\n if (!self.$keepDesiredColumnOnChange && e.old.column != e.value.column)\n self.$desiredColumn = null;\n });\n this.anchor.on(\"change\", function () {\n self.$anchorChanged = true;\n if (!self.$isEmpty && !self.$silent)\n self._emit(\"changeSelection\");\n });\n }\n Selection.prototype.isEmpty = function () {\n return this.$isEmpty || (this.anchor.row == this.lead.row &&\n this.anchor.column == this.lead.column);\n };\n Selection.prototype.isMultiLine = function () {\n return !this.$isEmpty && this.anchor.row != this.cursor.row;\n };\n Selection.prototype.getCursor = function () {\n return this.lead.getPosition();\n };\n Selection.prototype.setAnchor = function (row, column) {\n this.$isEmpty = false;\n this.anchor.setPosition(row, column);\n };\n Selection.prototype.getAnchor = function () {\n if (this.$isEmpty)\n return this.getSelectionLead();\n return this.anchor.getPosition();\n };\n Selection.prototype.getSelectionLead = function () {\n return this.lead.getPosition();\n };\n Selection.prototype.isBackwards = function () {\n var anchor = this.anchor;\n var lead = this.lead;\n return (anchor.row > lead.row || (anchor.row == lead.row && anchor.column > lead.column));\n };\n Selection.prototype.getRange = function () {\n var anchor = this.anchor;\n var lead = this.lead;\n if (this.$isEmpty)\n return Range.fromPoints(lead, lead);\n return this.isBackwards()\n ? Range.fromPoints(lead, anchor)\n : Range.fromPoints(anchor, lead);\n };\n Selection.prototype.clearSelection = function () {\n if (!this.$isEmpty) {\n this.$isEmpty = true;\n this._emit(\"changeSelection\");\n }\n };\n Selection.prototype.selectAll = function () {\n this.$setSelection(0, 0, Number.MAX_VALUE, Number.MAX_VALUE);\n };\n Selection.prototype.setRange = function (range, reverse) {\n var start = reverse ? range.end : range.start;\n var end = reverse ? range.start : range.end;\n this.$setSelection(start.row, start.column, end.row, end.column);\n };\n Selection.prototype.$setSelection = function (anchorRow, anchorColumn, cursorRow, cursorColumn) {\n if (this.$silent)\n return;\n var wasEmpty = this.$isEmpty;\n var wasMultiselect = this.inMultiSelectMode;\n this.$silent = true;\n this.$cursorChanged = this.$anchorChanged = false;\n this.anchor.setPosition(anchorRow, anchorColumn);\n this.cursor.setPosition(cursorRow, cursorColumn);\n this.$isEmpty = !Range.comparePoints(this.anchor, this.cursor);\n this.$silent = false;\n if (this.$cursorChanged)\n this._emit(\"changeCursor\");\n if (this.$cursorChanged || this.$anchorChanged || wasEmpty != this.$isEmpty || wasMultiselect)\n this._emit(\"changeSelection\");\n };\n Selection.prototype.$moveSelection = function (mover) {\n var lead = this.lead;\n if (this.$isEmpty)\n this.setSelectionAnchor(lead.row, lead.column);\n mover.call(this);\n };\n Selection.prototype.selectTo = function (row, column) {\n this.$moveSelection(function () {\n this.moveCursorTo(row, column);\n });\n };\n Selection.prototype.selectToPosition = function (pos) {\n this.$moveSelection(function () {\n this.moveCursorToPosition(pos);\n });\n };\n Selection.prototype.moveTo = function (row, column) {\n this.clearSelection();\n this.moveCursorTo(row, column);\n };\n Selection.prototype.moveToPosition = function (pos) {\n this.clearSelection();\n this.moveCursorToPosition(pos);\n };\n Selection.prototype.selectUp = function () {\n this.$moveSelection(this.moveCursorUp);\n };\n Selection.prototype.selectDown = function () {\n this.$moveSelection(this.moveCursorDown);\n };\n Selection.prototype.selectRight = function () {\n this.$moveSelection(this.moveCursorRight);\n };\n Selection.prototype.selectLeft = function () {\n this.$moveSelection(this.moveCursorLeft);\n };\n Selection.prototype.selectLineStart = function () {\n this.$moveSelection(this.moveCursorLineStart);\n };\n Selection.prototype.selectLineEnd = function () {\n this.$moveSelection(this.moveCursorLineEnd);\n };\n Selection.prototype.selectFileEnd = function () {\n this.$moveSelection(this.moveCursorFileEnd);\n };\n Selection.prototype.selectFileStart = function () {\n this.$moveSelection(this.moveCursorFileStart);\n };\n Selection.prototype.selectWordRight = function () {\n this.$moveSelection(this.moveCursorWordRight);\n };\n Selection.prototype.selectWordLeft = function () {\n this.$moveSelection(this.moveCursorWordLeft);\n };\n Selection.prototype.getWordRange = function (row, column) {\n if (typeof column == \"undefined\") {\n var cursor = row || this.lead;\n row = cursor.row;\n column = cursor.column;\n }\n return this.session.getWordRange(row, column);\n };\n Selection.prototype.selectWord = function () {\n this.setSelectionRange(this.getWordRange());\n };\n Selection.prototype.selectAWord = function () {\n var cursor = this.getCursor();\n var range = this.session.getAWordRange(cursor.row, cursor.column);\n this.setSelectionRange(range);\n };\n Selection.prototype.getLineRange = function (row, excludeLastChar) {\n var rowStart = typeof row == \"number\" ? row : this.lead.row;\n var rowEnd;\n var foldLine = this.session.getFoldLine(rowStart);\n if (foldLine) {\n rowStart = foldLine.start.row;\n rowEnd = foldLine.end.row;\n }\n else {\n rowEnd = rowStart;\n }\n if (excludeLastChar === true)\n return new Range(rowStart, 0, rowEnd, this.session.getLine(rowEnd).length);\n else\n return new Range(rowStart, 0, rowEnd + 1, 0);\n };\n Selection.prototype.selectLine = function () {\n this.setSelectionRange(this.getLineRange());\n };\n Selection.prototype.moveCursorUp = function () {\n this.moveCursorBy(-1, 0);\n };\n Selection.prototype.moveCursorDown = function () {\n this.moveCursorBy(1, 0);\n };\n Selection.prototype.wouldMoveIntoSoftTab = function (cursor, tabSize, direction) {\n var start = cursor.column;\n var end = cursor.column + tabSize;\n if (direction < 0) {\n start = cursor.column - tabSize;\n end = cursor.column;\n }\n return this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(start, end).split(\" \").length - 1 == tabSize;\n };\n Selection.prototype.moveCursorLeft = function () {\n var cursor = this.lead.getPosition(), fold;\n if (fold = this.session.getFoldAt(cursor.row, cursor.column, -1)) {\n this.moveCursorTo(fold.start.row, fold.start.column);\n }\n else if (cursor.column === 0) {\n if (cursor.row > 0) {\n this.moveCursorTo(cursor.row - 1, this.doc.getLine(cursor.row - 1).length);\n }\n }\n else {\n var tabSize = this.session.getTabSize();\n if (this.wouldMoveIntoSoftTab(cursor, tabSize, -1) && !this.session.getNavigateWithinSoftTabs()) {\n this.moveCursorBy(0, -tabSize);\n }\n else {\n this.moveCursorBy(0, -1);\n }\n }\n };\n Selection.prototype.moveCursorRight = function () {\n var cursor = this.lead.getPosition(), fold;\n if (fold = this.session.getFoldAt(cursor.row, cursor.column, 1)) {\n this.moveCursorTo(fold.end.row, fold.end.column);\n }\n else if (this.lead.column == this.doc.getLine(this.lead.row).length) {\n if (this.lead.row < this.doc.getLength() - 1) {\n this.moveCursorTo(this.lead.row + 1, 0);\n }\n }\n else {\n var tabSize = this.session.getTabSize();\n var cursor = this.lead;\n if (this.wouldMoveIntoSoftTab(cursor, tabSize, 1) && !this.session.getNavigateWithinSoftTabs()) {\n this.moveCursorBy(0, tabSize);\n }\n else {\n this.moveCursorBy(0, 1);\n }\n }\n };\n Selection.prototype.moveCursorLineStart = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var screenRow = this.session.documentToScreenRow(row, column);\n var firstColumnPosition = this.session.screenToDocumentPosition(screenRow, 0);\n var beforeCursor = this.session.getDisplayLine(row, null, firstColumnPosition.row, firstColumnPosition.column);\n var leadingSpace = beforeCursor.match(/^\\s*/);\n if (leadingSpace[0].length != column && !this.session.$useEmacsStyleLineStart)\n firstColumnPosition.column += leadingSpace[0].length;\n this.moveCursorToPosition(firstColumnPosition);\n };\n Selection.prototype.moveCursorLineEnd = function () {\n var lead = this.lead;\n var lineEnd = this.session.getDocumentLastRowColumnPosition(lead.row, lead.column);\n if (this.lead.column == lineEnd.column) {\n var line = this.session.getLine(lineEnd.row);\n if (lineEnd.column == line.length) {\n var textEnd = line.search(/\\s+$/);\n if (textEnd > 0)\n lineEnd.column = textEnd;\n }\n }\n this.moveCursorTo(lineEnd.row, lineEnd.column);\n };\n Selection.prototype.moveCursorFileEnd = function () {\n var row = this.doc.getLength() - 1;\n var column = this.doc.getLine(row).length;\n this.moveCursorTo(row, column);\n };\n Selection.prototype.moveCursorFileStart = function () {\n this.moveCursorTo(0, 0);\n };\n Selection.prototype.moveCursorLongWordRight = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var line = this.doc.getLine(row);\n var rightOfCursor = line.substring(column);\n this.session.nonTokenRe.lastIndex = 0;\n this.session.tokenRe.lastIndex = 0;\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold) {\n this.moveCursorTo(fold.end.row, fold.end.column);\n return;\n }\n if (this.session.nonTokenRe.exec(rightOfCursor)) {\n column += this.session.nonTokenRe.lastIndex;\n this.session.nonTokenRe.lastIndex = 0;\n rightOfCursor = line.substring(column);\n }\n if (column >= line.length) {\n this.moveCursorTo(row, line.length);\n this.moveCursorRight();\n if (row < this.doc.getLength() - 1)\n this.moveCursorWordRight();\n return;\n }\n if (this.session.tokenRe.exec(rightOfCursor)) {\n column += this.session.tokenRe.lastIndex;\n this.session.tokenRe.lastIndex = 0;\n }\n this.moveCursorTo(row, column);\n };\n Selection.prototype.moveCursorLongWordLeft = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var fold;\n if (fold = this.session.getFoldAt(row, column, -1)) {\n this.moveCursorTo(fold.start.row, fold.start.column);\n return;\n }\n var str = this.session.getFoldStringAt(row, column, -1);\n if (str == null) {\n str = this.doc.getLine(row).substring(0, column);\n }\n var leftOfCursor = lang.stringReverse(str);\n this.session.nonTokenRe.lastIndex = 0;\n this.session.tokenRe.lastIndex = 0;\n if (this.session.nonTokenRe.exec(leftOfCursor)) {\n column -= this.session.nonTokenRe.lastIndex;\n leftOfCursor = leftOfCursor.slice(this.session.nonTokenRe.lastIndex);\n this.session.nonTokenRe.lastIndex = 0;\n }\n if (column <= 0) {\n this.moveCursorTo(row, 0);\n this.moveCursorLeft();\n if (row > 0)\n this.moveCursorWordLeft();\n return;\n }\n if (this.session.tokenRe.exec(leftOfCursor)) {\n column -= this.session.tokenRe.lastIndex;\n this.session.tokenRe.lastIndex = 0;\n }\n this.moveCursorTo(row, column);\n };\n Selection.prototype.$shortWordEndIndex = function (rightOfCursor) {\n var index = 0, ch;\n var whitespaceRe = /\\s/;\n var tokenRe = this.session.tokenRe;\n tokenRe.lastIndex = 0;\n if (this.session.tokenRe.exec(rightOfCursor)) {\n index = this.session.tokenRe.lastIndex;\n }\n else {\n while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\n index++;\n if (index < 1) {\n tokenRe.lastIndex = 0;\n while ((ch = rightOfCursor[index]) && !tokenRe.test(ch)) {\n tokenRe.lastIndex = 0;\n index++;\n if (whitespaceRe.test(ch)) {\n if (index > 2) {\n index--;\n break;\n }\n else {\n while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\n index++;\n if (index > 2)\n break;\n }\n }\n }\n }\n }\n tokenRe.lastIndex = 0;\n return index;\n };\n Selection.prototype.moveCursorShortWordRight = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var line = this.doc.getLine(row);\n var rightOfCursor = line.substring(column);\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold)\n return this.moveCursorTo(fold.end.row, fold.end.column);\n if (column == line.length) {\n var l = this.doc.getLength();\n do {\n row++;\n rightOfCursor = this.doc.getLine(row);\n } while (row < l && /^\\s*$/.test(rightOfCursor));\n if (!/^\\s+/.test(rightOfCursor))\n rightOfCursor = \"\";\n column = 0;\n }\n var index = this.$shortWordEndIndex(rightOfCursor);\n this.moveCursorTo(row, column + index);\n };\n Selection.prototype.moveCursorShortWordLeft = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var fold;\n if (fold = this.session.getFoldAt(row, column, -1))\n return this.moveCursorTo(fold.start.row, fold.start.column);\n var line = this.session.getLine(row).substring(0, column);\n if (column === 0) {\n do {\n row--;\n line = this.doc.getLine(row);\n } while (row > 0 && /^\\s*$/.test(line));\n column = line.length;\n if (!/\\s+$/.test(line))\n line = \"\";\n }\n var leftOfCursor = lang.stringReverse(line);\n var index = this.$shortWordEndIndex(leftOfCursor);\n return this.moveCursorTo(row, column - index);\n };\n Selection.prototype.moveCursorWordRight = function () {\n if (this.session.$selectLongWords)\n this.moveCursorLongWordRight();\n else\n this.moveCursorShortWordRight();\n };\n Selection.prototype.moveCursorWordLeft = function () {\n if (this.session.$selectLongWords)\n this.moveCursorLongWordLeft();\n else\n this.moveCursorShortWordLeft();\n };\n Selection.prototype.moveCursorBy = function (rows, chars) {\n var screenPos = this.session.documentToScreenPosition(this.lead.row, this.lead.column);\n var offsetX;\n if (chars === 0) {\n if (rows !== 0) {\n if (this.session.$bidiHandler.isBidiRow(screenPos.row, this.lead.row)) {\n offsetX = this.session.$bidiHandler.getPosLeft(screenPos.column);\n screenPos.column = Math.round(offsetX / this.session.$bidiHandler.charWidths[0]);\n }\n else {\n offsetX = screenPos.column * this.session.$bidiHandler.charWidths[0];\n }\n }\n if (this.$desiredColumn)\n screenPos.column = this.$desiredColumn;\n else\n this.$desiredColumn = screenPos.column;\n }\n if (rows != 0 && this.session.lineWidgets && this.session.lineWidgets[this.lead.row]) {\n var widget = this.session.lineWidgets[this.lead.row];\n if (rows < 0)\n rows -= widget.rowsAbove || 0;\n else if (rows > 0)\n rows += widget.rowCount - (widget.rowsAbove || 0);\n }\n var docPos = this.session.screenToDocumentPosition(screenPos.row + rows, screenPos.column, offsetX);\n if (rows !== 0 && chars === 0 && docPos.row === this.lead.row && docPos.column === this.lead.column) {\n }\n this.moveCursorTo(docPos.row, docPos.column + chars, chars === 0);\n };\n Selection.prototype.moveCursorToPosition = function (position) {\n this.moveCursorTo(position.row, position.column);\n };\n Selection.prototype.moveCursorTo = function (row, column, keepDesiredColumn) {\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold) {\n row = fold.start.row;\n column = fold.start.column;\n }\n this.$keepDesiredColumnOnChange = true;\n var line = this.session.getLine(row);\n if (/[\\uDC00-\\uDFFF]/.test(line.charAt(column)) && line.charAt(column - 1)) {\n if (this.lead.row == row && this.lead.column == column + 1)\n column = column - 1;\n else\n column = column + 1;\n }\n this.lead.setPosition(row, column);\n this.$keepDesiredColumnOnChange = false;\n if (!keepDesiredColumn)\n this.$desiredColumn = null;\n };\n Selection.prototype.moveCursorToScreen = function (row, column, keepDesiredColumn) {\n var pos = this.session.screenToDocumentPosition(row, column);\n this.moveCursorTo(pos.row, pos.column, keepDesiredColumn);\n };\n Selection.prototype.detach = function () {\n this.lead.detach();\n this.anchor.detach();\n };\n Selection.prototype.fromOrientedRange = function (range) {\n this.setSelectionRange(range, range.cursor == range.start);\n this.$desiredColumn = range.desiredColumn || this.$desiredColumn;\n };\n Selection.prototype.toOrientedRange = function (range) {\n var r = this.getRange();\n if (range) {\n range.start.column = r.start.column;\n range.start.row = r.start.row;\n range.end.column = r.end.column;\n range.end.row = r.end.row;\n }\n else {\n range = r;\n }\n range.cursor = this.isBackwards() ? range.start : range.end;\n range.desiredColumn = this.$desiredColumn;\n return range;\n };\n Selection.prototype.getRangeOfMovements = function (func) {\n var start = this.getCursor();\n try {\n func(this);\n var end = this.getCursor();\n return Range.fromPoints(start, end);\n }\n catch (e) {\n return Range.fromPoints(start, start);\n }\n finally {\n this.moveCursorToPosition(start);\n }\n };\n Selection.prototype.toJSON = function () {\n if (this.rangeCount) { var data = this.ranges.map(function (r) {\n var r1 = r.clone();\n r1.isBackwards = r.cursor == r.start;\n return r1;\n });\n }\n else { var data = this.getRange();\n data.isBackwards = this.isBackwards();\n }\n return data;\n };\n Selection.prototype.fromJSON = function (data) {\n if (data.start == undefined) {\n if (this.rangeList && data.length > 1) {\n this.toSingleRange(data[0]);\n for (var i = data.length; i--;) {\n var r = Range.fromPoints(data[i].start, data[i].end);\n if (data[i].isBackwards)\n r.cursor = r.start;\n this.addRange(r, true);\n }\n return;\n }\n else {\n data = data[0];\n }\n }\n if (this.rangeList)\n this.toSingleRange(data);\n this.setSelectionRange(data, data.isBackwards);\n };\n Selection.prototype.isEqual = function (data) {\n if ((data.length || this.rangeCount) && data.length != this.rangeCount)\n return false;\n if (!data.length || !this.ranges)\n return this.getRange().isEqual(data);\n for (var i = this.ranges.length; i--;) {\n if (!this.ranges[i].isEqual(data[i]))\n return false;\n }\n return true;\n };\n return Selection;\n}());\nSelection.prototype.setSelectionAnchor = Selection.prototype.setAnchor;\nSelection.prototype.getSelectionAnchor = Selection.prototype.getAnchor;\nSelection.prototype.setSelectionRange = Selection.prototype.setRange;\noop.implement(Selection.prototype, EventEmitter);\nexports.Selection = Selection;\n\n});\n\nace.define(\"ace/tokenizer\",[\"require\",\"exports\",\"module\",\"ace/lib/report_error\"], function(require, exports, module){\"use strict\";\nvar reportError = require(\"./lib/report_error\").reportError;\nvar MAX_TOKEN_COUNT = 2000;\nvar Tokenizer = /** @class */ (function () {\n function Tokenizer(rules) {\n this.splitRegex;\n this.states = rules;\n this.regExps = {};\n this.matchMappings = {};\n for (var key in this.states) {\n var state = this.states[key];\n var ruleRegExps = [];\n var matchTotal = 0;\n var mapping = this.matchMappings[key] = { defaultToken: \"text\" };\n var flag = \"g\";\n var splitterRurles = [];\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n if (rule.defaultToken)\n mapping.defaultToken = rule.defaultToken;\n if (rule.caseInsensitive && flag.indexOf(\"i\") === -1)\n flag += \"i\";\n if (rule.unicode && flag.indexOf(\"u\") === -1)\n flag += \"u\";\n if (rule.regex == null)\n continue;\n if (rule.regex instanceof RegExp)\n rule.regex = rule.regex.toString().slice(1, -1);\n var adjustedregex = rule.regex;\n var matchcount = new RegExp(\"(?:(\" + adjustedregex + \")|(.))\").exec(\"a\").length - 2;\n if (Array.isArray(rule.token)) {\n if (rule.token.length == 1 || matchcount == 1) {\n rule.token = rule.token[0];\n }\n else if (matchcount - 1 != rule.token.length) {\n this.reportError(\"number of classes and regexp groups doesn't match\", {\n rule: rule,\n groupCount: matchcount - 1\n });\n rule.token = rule.token[0];\n }\n else {\n rule.tokenArray = rule.token;\n rule.token = null;\n rule.onMatch = this.$arrayTokens;\n }\n }\n else if (typeof rule.token == \"function\" && !rule.onMatch) {\n if (matchcount > 1)\n rule.onMatch = this.$applyToken;\n else\n rule.onMatch = rule.token;\n }\n if (matchcount > 1) {\n if (/\\\\\\d/.test(rule.regex)) {\n adjustedregex = rule.regex.replace(/\\\\([0-9]+)/g, function (match, digit) {\n return \"\\\\\" + (parseInt(digit, 10) + matchTotal + 1);\n });\n }\n else {\n matchcount = 1;\n adjustedregex = this.removeCapturingGroups(rule.regex);\n }\n if (!rule.splitRegex && typeof rule.token != \"string\")\n splitterRurles.push(rule); // flag will be known only at the very end\n }\n mapping[matchTotal] = i;\n matchTotal += matchcount;\n ruleRegExps.push(adjustedregex);\n if (!rule.onMatch)\n rule.onMatch = null;\n }\n if (!ruleRegExps.length) {\n mapping[0] = 0;\n ruleRegExps.push(\"$\");\n }\n splitterRurles.forEach(function (rule) {\n rule.splitRegex = this.createSplitterRegexp(rule.regex, flag);\n }, this);\n this.regExps[key] = new RegExp(\"(\" + ruleRegExps.join(\")|(\") + \")|($)\", flag);\n }\n }\n Tokenizer.prototype.$setMaxTokenCount = function (m) {\n MAX_TOKEN_COUNT = m | 0;\n };\n Tokenizer.prototype.$applyToken = function (str) {\n var values = this.splitRegex.exec(str).slice(1);\n var types = this.token.apply(this, values);\n if (typeof types === \"string\")\n return [{ type: types, value: str }];\n var tokens = [];\n for (var i = 0, l = types.length; i < l; i++) {\n if (values[i])\n tokens[tokens.length] = {\n type: types[i],\n value: values[i]\n };\n }\n return tokens;\n };\n Tokenizer.prototype.$arrayTokens = function (str) {\n if (!str)\n return [];\n var values = this.splitRegex.exec(str);\n if (!values)\n return \"text\";\n var tokens = [];\n var types = this.tokenArray;\n for (var i = 0, l = types.length; i < l; i++) {\n if (values[i + 1])\n tokens[tokens.length] = {\n type: types[i],\n value: values[i + 1]\n };\n }\n return tokens;\n };\n Tokenizer.prototype.removeCapturingGroups = function (src) {\n var r = src.replace(/\\\\.|\\[(?:\\\\.|[^\\\\\\]])*|\\(\\?[:=!<]|(\\()/g, function (x, y) { return y ? \"(?:\" : x; });\n return r;\n };\n Tokenizer.prototype.createSplitterRegexp = function (src, flag) {\n if (src.indexOf(\"(?=\") != -1) {\n var stack = 0;\n var inChClass = false;\n var lastCapture = {};\n src.replace(/(\\\\.)|(\\((?:\\?[=!])?)|(\\))|([\\[\\]])/g, function (m, esc, parenOpen, parenClose, square, index) {\n if (inChClass) {\n inChClass = square != \"]\";\n }\n else if (square) {\n inChClass = true;\n }\n else if (parenClose) {\n if (stack == lastCapture.stack) {\n lastCapture.end = index + 1;\n lastCapture.stack = -1;\n }\n stack--;\n }\n else if (parenOpen) {\n stack++;\n if (parenOpen.length != 1) {\n lastCapture.stack = stack;\n lastCapture.start = index;\n }\n }\n return m;\n });\n if (lastCapture.end != null && /^\\)*$/.test(src.substr(lastCapture.end)))\n src = src.substring(0, lastCapture.start) + src.substr(lastCapture.end);\n }\n if (src.charAt(0) != \"^\")\n src = \"^\" + src;\n if (src.charAt(src.length - 1) != \"$\")\n src += \"$\";\n return new RegExp(src, (flag || \"\").replace(\"g\", \"\"));\n };\n Tokenizer.prototype.getLineTokens = function (line, startState) {\n if (startState && typeof startState != \"string\") {\n var stack = startState.slice(0);\n startState = stack[0];\n if (startState === \"#tmp\") {\n stack.shift();\n startState = stack.shift();\n }\n }\n else\n var stack = [];\n var currentState = /**@type{string}*/ (startState) || \"start\";\n var state = this.states[currentState];\n if (!state) {\n currentState = \"start\";\n state = this.states[currentState];\n }\n var mapping = this.matchMappings[currentState];\n var re = this.regExps[currentState];\n re.lastIndex = 0;\n var match, tokens = [];\n var lastIndex = 0;\n var matchAttempts = 0;\n var token = { type: null, value: \"\" };\n while (match = re.exec(line)) {\n var type = mapping.defaultToken;\n var rule = null;\n var value = match[0];\n var index = re.lastIndex;\n if (index - value.length > lastIndex) {\n var skipped = line.substring(lastIndex, index - value.length);\n if (token.type == type) {\n token.value += skipped;\n }\n else {\n if (token.type)\n tokens.push(token);\n token = { type: type, value: skipped };\n }\n }\n for (var i = 0; i < match.length - 2; i++) {\n if (match[i + 1] === undefined)\n continue;\n rule = state[mapping[i]];\n if (rule.onMatch)\n type = rule.onMatch(value, currentState, stack, line);\n else\n type = rule.token;\n if (rule.next) {\n if (typeof rule.next == \"string\") {\n currentState = rule.next;\n }\n else {\n currentState = rule.next(currentState, stack);\n }\n state = this.states[currentState];\n if (!state) {\n this.reportError(\"state doesn't exist\", currentState);\n currentState = \"start\";\n state = this.states[currentState];\n }\n mapping = this.matchMappings[currentState];\n lastIndex = index;\n re = this.regExps[currentState];\n re.lastIndex = index;\n }\n if (rule.consumeLineEnd)\n lastIndex = index;\n break;\n }\n if (value) {\n if (typeof type === \"string\") {\n if ((!rule || rule.merge !== false) && token.type === type) {\n token.value += value;\n }\n else {\n if (token.type)\n tokens.push(token);\n token = { type: type, value: value };\n }\n }\n else if (type) {\n if (token.type)\n tokens.push(token);\n token = { type: null, value: \"\" };\n for (var i = 0; i < type.length; i++)\n tokens.push(type[i]);\n }\n }\n if (lastIndex == line.length)\n break;\n lastIndex = index;\n if (matchAttempts++ > MAX_TOKEN_COUNT) {\n if (matchAttempts > 2 * line.length) {\n this.reportError(\"infinite loop with in ace tokenizer\", {\n startState: startState,\n line: line\n });\n }\n while (lastIndex < line.length) {\n if (token.type)\n tokens.push(token);\n token = {\n value: line.substring(lastIndex, lastIndex += 500),\n type: \"overflow\"\n };\n }\n currentState = \"start\";\n stack = [];\n break;\n }\n }\n if (token.type)\n tokens.push(token);\n if (stack.length > 1) {\n if (stack[0] !== currentState)\n stack.unshift(\"#tmp\", currentState);\n }\n return {\n tokens: tokens,\n state: stack.length ? stack : currentState\n };\n };\n return Tokenizer;\n}());\nTokenizer.prototype.reportError = reportError;\nexports.Tokenizer = Tokenizer;\n\n});\n\nace.define(\"ace/mode/text_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/deep_copy\"], function(require, exports, module){\"use strict\";\nvar deepCopy = require(\"../lib/deep_copy\").deepCopy;\nvar TextHighlightRules;\nTextHighlightRules = function () {\n this.$rules = {\n \"start\": [{\n token: \"empty_line\",\n regex: '^$'\n }, {\n defaultToken: \"text\"\n }]\n };\n};\n(function () {\n this.addRules = function (rules, prefix) {\n if (!prefix) {\n for (var key in rules)\n this.$rules[key] = rules[key];\n return;\n }\n for (var key in rules) {\n var state = rules[key];\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n if (rule.next || rule.onMatch) {\n if (typeof rule.next == \"string\") {\n if (rule.next.indexOf(prefix) !== 0)\n rule.next = prefix + rule.next;\n }\n if (rule.nextState && rule.nextState.indexOf(prefix) !== 0)\n rule.nextState = prefix + rule.nextState;\n }\n }\n this.$rules[prefix + key] = state;\n }\n };\n this.getRules = function () {\n return this.$rules;\n };\n this.embedRules = function (HighlightRules, prefix, escapeRules, states, append) {\n var embedRules = typeof HighlightRules == \"function\"\n ? new HighlightRules().getRules()\n : HighlightRules;\n if (states) {\n for (var i = 0; i < states.length; i++)\n states[i] = prefix + states[i];\n }\n else {\n states = [];\n for (var key in embedRules)\n states.push(prefix + key);\n }\n this.addRules(embedRules, prefix);\n if (escapeRules) {\n var addRules = Array.prototype[append ? \"push\" : \"unshift\"];\n for (var i = 0; i < states.length; i++)\n addRules.apply(this.$rules[states[i]], deepCopy(escapeRules));\n }\n if (!this.$embeds)\n this.$embeds = [];\n this.$embeds.push(prefix);\n };\n this.getEmbeds = function () {\n return this.$embeds;\n };\n var pushState = function (currentState, stack) {\n if (currentState != \"start\" || stack.length)\n stack.unshift(this.nextState, currentState);\n return this.nextState;\n };\n var popState = function (currentState, stack) {\n stack.shift();\n return stack.shift() || \"start\";\n };\n this.normalizeRules = function () {\n var id = 0;\n var rules = this.$rules;\n function processState(key) {\n var state = rules[key];\n state[\"processed\"] = true;\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n var toInsert = null;\n if (Array.isArray(rule)) {\n toInsert = rule;\n rule = {};\n }\n if (!rule.regex && rule.start) {\n rule.regex = rule.start;\n if (!rule.next)\n rule.next = [];\n rule.next.push({\n defaultToken: rule.token\n }, {\n token: rule.token + \".end\",\n regex: rule.end || rule.start,\n next: \"pop\"\n });\n rule.token = rule.token + \".start\";\n rule.push = true;\n }\n var next = rule.next || rule.push;\n if (next && Array.isArray(next)) {\n var stateName = rule.stateName;\n if (!stateName) {\n stateName = rule.token;\n if (typeof stateName != \"string\")\n stateName = stateName[0] || \"\";\n if (rules[stateName])\n stateName += id++;\n }\n rules[stateName] = next;\n rule.next = stateName;\n processState(stateName);\n }\n else if (next == \"pop\") {\n rule.next = popState;\n }\n if (rule.push) {\n rule.nextState = rule.next || rule.push;\n rule.next = pushState;\n delete rule.push;\n }\n if (rule.rules) {\n for (var r in rule.rules) {\n if (rules[r]) {\n if (rules[r].push)\n rules[r].push.apply(rules[r], rule.rules[r]);\n }\n else {\n rules[r] = rule.rules[r];\n }\n }\n }\n var includeName = typeof rule == \"string\" ? rule : rule.include;\n if (includeName) {\n if (includeName === \"$self\")\n includeName = \"start\";\n if (Array.isArray(includeName))\n toInsert = includeName.map(function (x) { return rules[x]; });\n else\n toInsert = rules[includeName];\n }\n if (toInsert) {\n var args = [i, 1].concat(toInsert);\n if (rule.noEscape)\n args = args.filter(function (x) { return !x.next; });\n state.splice.apply(state, args);\n i--;\n }\n if (rule.keywordMap) {\n rule.token = this.createKeywordMapper(rule.keywordMap, rule.defaultToken || \"text\", rule.caseInsensitive);\n delete rule.defaultToken;\n }\n }\n }\n Object.keys(rules).forEach(processState, this);\n };\n this.createKeywordMapper = function (map, defaultToken, ignoreCase, splitChar) {\n var keywords = Object.create(null);\n this.$keywordList = [];\n Object.keys(map).forEach(function (className) {\n var a = map[className];\n var list = a.split(splitChar || \"|\");\n for (var i = list.length; i--;) {\n var word = list[i];\n this.$keywordList.push(word);\n if (ignoreCase)\n word = word.toLowerCase();\n keywords[word] = className;\n }\n }, this);\n map = null;\n return ignoreCase\n ? function (value) { return keywords[value.toLowerCase()] || defaultToken; }\n : function (value) { return keywords[value] || defaultToken; };\n };\n this.getKeywords = function () {\n return this.$keywords;\n };\n}).call(TextHighlightRules.prototype);\nexports.TextHighlightRules = TextHighlightRules;\n\n});\n\nace.define(\"ace/mode/behaviour\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar Behaviour;\nBehaviour = function () {\n this.$behaviours = {};\n};\n(function () {\n this.add = function (name, action, callback) {\n switch (undefined) {\n case this.$behaviours:\n this.$behaviours = {};\n case this.$behaviours[name]:\n this.$behaviours[name] = {};\n }\n this.$behaviours[name][action] = callback;\n };\n this.addBehaviours = function (behaviours) {\n for (var key in behaviours) {\n for (var action in behaviours[key]) {\n this.add(key, action, behaviours[key][action]);\n }\n }\n };\n this.remove = function (name) {\n if (this.$behaviours && this.$behaviours[name]) {\n delete this.$behaviours[name];\n }\n };\n this.inherit = function (mode, filter) {\n if (typeof mode === \"function\") {\n var behaviours = new mode().getBehaviours(filter);\n }\n else {\n var behaviours = mode.getBehaviours(filter);\n }\n this.addBehaviours(behaviours);\n };\n this.getBehaviours = function (filter) {\n if (!filter) {\n return this.$behaviours;\n }\n else {\n var ret = {};\n for (var i = 0; i < filter.length; i++) {\n if (this.$behaviours[filter[i]]) {\n ret[filter[i]] = this.$behaviours[filter[i]];\n }\n }\n return ret;\n }\n };\n}).call(Behaviour.prototype);\nexports.Behaviour = Behaviour;\n\n});\n\nace.define(\"ace/token_iterator\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"./range\").Range;\nvar TokenIterator = /** @class */ (function () {\n function TokenIterator(session, initialRow, initialColumn) {\n this.$session = session;\n this.$row = initialRow;\n this.$rowTokens = session.getTokens(initialRow);\n var token = session.getTokenAt(initialRow, initialColumn);\n this.$tokenIndex = token ? token.index : -1;\n }\n TokenIterator.prototype.stepBackward = function () {\n this.$tokenIndex -= 1;\n while (this.$tokenIndex < 0) {\n this.$row -= 1;\n if (this.$row < 0) {\n this.$row = 0;\n return null;\n }\n this.$rowTokens = this.$session.getTokens(this.$row);\n this.$tokenIndex = this.$rowTokens.length - 1;\n }\n return this.$rowTokens[this.$tokenIndex];\n };\n TokenIterator.prototype.stepForward = function () {\n this.$tokenIndex += 1;\n var rowCount;\n while (this.$tokenIndex >= this.$rowTokens.length) {\n this.$row += 1;\n if (!rowCount)\n rowCount = this.$session.getLength();\n if (this.$row >= rowCount) {\n this.$row = rowCount - 1;\n return null;\n }\n this.$rowTokens = this.$session.getTokens(this.$row);\n this.$tokenIndex = 0;\n }\n return this.$rowTokens[this.$tokenIndex];\n };\n TokenIterator.prototype.getCurrentToken = function () {\n return this.$rowTokens[this.$tokenIndex];\n };\n TokenIterator.prototype.getCurrentTokenRow = function () {\n return this.$row;\n };\n TokenIterator.prototype.getCurrentTokenColumn = function () {\n var rowTokens = this.$rowTokens;\n var tokenIndex = this.$tokenIndex;\n var column = rowTokens[tokenIndex].start;\n if (column !== undefined)\n return column;\n column = 0;\n while (tokenIndex > 0) {\n tokenIndex -= 1;\n column += rowTokens[tokenIndex].value.length;\n }\n return column;\n };\n TokenIterator.prototype.getCurrentTokenPosition = function () {\n return { row: this.$row, column: this.getCurrentTokenColumn() };\n };\n TokenIterator.prototype.getCurrentTokenRange = function () {\n var token = this.$rowTokens[this.$tokenIndex];\n var column = this.getCurrentTokenColumn();\n return new Range(this.$row, column, this.$row, column + token.value.length);\n };\n return TokenIterator;\n}());\nexports.TokenIterator = TokenIterator;\n\n});\n\nace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\nvar SAFE_INSERT_IN_TOKENS = [\"text\", \"paren.rparen\", \"rparen\", \"paren\", \"punctuation.operator\"];\nvar SAFE_INSERT_BEFORE_TOKENS = [\"text\", \"paren.rparen\", \"rparen\", \"paren\", \"punctuation.operator\", \"comment\"];\nvar context;\nvar contextCache = {};\nvar defaultQuotes = { '\"': '\"', \"'\": \"'\" };\nvar initContext = function (editor) {\n var id = -1;\n if (editor.multiSelect) {\n id = editor.selection.index;\n if (contextCache.rangeCount != editor.multiSelect.rangeCount)\n contextCache = { rangeCount: editor.multiSelect.rangeCount };\n }\n if (contextCache[id])\n return context = contextCache[id];\n context = contextCache[id] = {\n autoInsertedBrackets: 0,\n autoInsertedRow: -1,\n autoInsertedLineEnd: \"\",\n maybeInsertedBrackets: 0,\n maybeInsertedRow: -1,\n maybeInsertedLineStart: \"\",\n maybeInsertedLineEnd: \"\"\n };\n};\nvar getWrapped = function (selection, selected, opening, closing) {\n var rowDiff = selection.end.row - selection.start.row;\n return {\n text: opening + selected + closing,\n selection: [\n 0,\n selection.start.column + 1,\n rowDiff,\n selection.end.column + (rowDiff ? 0 : 1)\n ]\n };\n};\nvar CstyleBehaviour;\nCstyleBehaviour = function (options) {\n options = options || {};\n this.add(\"braces\", \"insertion\", function (state, action, editor, session, text) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (text == '{') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n var token = session.getTokenAt(cursor.row, cursor.column);\n if (selected !== \"\" && selected !== \"{\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '{', '}');\n }\n else if (token && /(?:string)\\.quasi|\\.xml/.test(token.type)) {\n var excludeTokens = [\n /tag\\-(?:open|name)/, /attribute\\-name/\n ];\n if (excludeTokens.some(function (el) { return el.test(token.type); }) || /(string)\\.quasi/.test(token.type)\n && token.value[cursor.column - token.start - 1] !== '$')\n return;\n CstyleBehaviour.recordAutoInsert(editor, session, \"}\");\n return {\n text: '{}',\n selection: [1, 1]\n };\n }\n else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n if (/[\\]\\}\\)]/.test(line[cursor.column]) || editor.inMultiSelectMode || options.braces) {\n CstyleBehaviour.recordAutoInsert(editor, session, \"}\");\n return {\n text: '{}',\n selection: [1, 1]\n };\n }\n else {\n CstyleBehaviour.recordMaybeInsert(editor, session, \"{\");\n return {\n text: '{',\n selection: [1, 1]\n };\n }\n }\n }\n else if (text == '}') {\n initContext(editor);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar == '}') {\n var matching = session.$findOpeningBracket('}', { column: cursor.column + 1, row: cursor.row });\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n }\n else if (text == \"\\n\" || text == \"\\r\\n\") {\n initContext(editor);\n var closing = \"\";\n if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {\n closing = lang.stringRepeat(\"}\", context.maybeInsertedBrackets);\n CstyleBehaviour.clearMaybeInsertedClosing();\n }\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar === '}') {\n var openBracePos = session.findMatchingBracket({ row: cursor.row, column: cursor.column + 1 }, '}');\n if (!openBracePos)\n return null;\n var next_indent = this.$getIndent(session.getLine(openBracePos.row));\n }\n else if (closing) {\n var next_indent = this.$getIndent(line);\n }\n else {\n CstyleBehaviour.clearMaybeInsertedClosing();\n return;\n }\n var indent = next_indent + session.getTabString();\n return {\n text: '\\n' + indent + '\\n' + next_indent + closing,\n selection: [1, indent.length, 1, indent.length]\n };\n }\n else {\n CstyleBehaviour.clearMaybeInsertedClosing();\n }\n });\n this.add(\"braces\", \"deletion\", function (state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected == '{') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.end.column, range.end.column + 1);\n if (rightChar == '}') {\n range.end.column++;\n return range;\n }\n else {\n context.maybeInsertedBrackets--;\n }\n }\n });\n this.add(\"parens\", \"insertion\", function (state, action, editor, session, text) {\n if (text == '(') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '(', ')');\n }\n else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n CstyleBehaviour.recordAutoInsert(editor, session, \")\");\n return {\n text: '()',\n selection: [1, 1]\n };\n }\n }\n else if (text == ')') {\n initContext(editor);\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar == ')') {\n var matching = session.$findOpeningBracket(')', { column: cursor.column + 1, row: cursor.row });\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n }\n });\n this.add(\"parens\", \"deletion\", function (state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected == '(') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n if (rightChar == ')') {\n range.end.column++;\n return range;\n }\n }\n });\n this.add(\"brackets\", \"insertion\", function (state, action, editor, session, text) {\n if (text == '[') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '[', ']');\n }\n else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n CstyleBehaviour.recordAutoInsert(editor, session, \"]\");\n return {\n text: '[]',\n selection: [1, 1]\n };\n }\n }\n else if (text == ']') {\n initContext(editor);\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar == ']') {\n var matching = session.$findOpeningBracket(']', { column: cursor.column + 1, row: cursor.row });\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n }\n });\n this.add(\"brackets\", \"deletion\", function (state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected == '[') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n if (rightChar == ']') {\n range.end.column++;\n return range;\n }\n }\n });\n this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n var quotes = session.$mode.$quotes || defaultQuotes;\n if (text.length == 1 && quotes[text]) {\n if (this.lineCommentStart && this.lineCommentStart.indexOf(text) != -1)\n return;\n initContext(editor);\n var quote = text;\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && (selected.length != 1 || !quotes[selected]) && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, quote, quote);\n }\n else if (!selected) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var leftChar = line.substring(cursor.column - 1, cursor.column);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n var token = session.getTokenAt(cursor.row, cursor.column);\n var rightToken = session.getTokenAt(cursor.row, cursor.column + 1);\n if (leftChar == \"\\\\\" && token && /escape/.test(token.type))\n return null;\n var stringBefore = token && /string|escape/.test(token.type);\n var stringAfter = !rightToken || /string|escape/.test(rightToken.type);\n var pair;\n if (rightChar == quote) {\n pair = stringBefore !== stringAfter;\n if (pair && /string\\.end/.test(rightToken.type))\n pair = false;\n }\n else {\n if (stringBefore && !stringAfter)\n return null; // wrap string with different quote\n if (stringBefore && stringAfter)\n return null; // do not pair quotes inside strings\n var wordRe = session.$mode.tokenRe;\n wordRe.lastIndex = 0;\n var isWordBefore = wordRe.test(leftChar);\n wordRe.lastIndex = 0;\n var isWordAfter = wordRe.test(rightChar);\n var pairQuotesAfter = session.$mode.$pairQuotesAfter;\n var shouldPairQuotes = pairQuotesAfter && pairQuotesAfter[quote] && pairQuotesAfter[quote].test(leftChar);\n if ((!shouldPairQuotes && isWordBefore) || isWordAfter)\n return null; // before or after alphanumeric\n if (rightChar && !/[\\s;,.})\\]\\\\]/.test(rightChar))\n return null; // there is rightChar and it isn't closing\n var charBefore = line[cursor.column - 2];\n if (leftChar == quote && (charBefore == quote || wordRe.test(charBefore)))\n return null;\n pair = true;\n }\n return {\n text: pair ? quote + quote : \"\",\n selection: [1, 1]\n };\n }\n }\n });\n this.add(\"string_dquotes\", \"deletion\", function (state, action, editor, session, range) {\n var quotes = session.$mode.$quotes || defaultQuotes;\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && quotes.hasOwnProperty(selected)) {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n if (rightChar == selected) {\n range.end.column++;\n return range;\n }\n }\n });\n if (options.closeDocComment !== false) {\n this.add(\"doc comment end\", \"insertion\", function (state, action, editor, session, text) {\n if (state === \"doc-start\" && (text === \"\\n\" || text === \"\\r\\n\") && editor.selection.isEmpty()) {\n var cursor = editor.getCursorPosition();\n if (cursor.column === 0) {\n return;\n }\n var line = session.doc.getLine(cursor.row);\n var nextLine = session.doc.getLine(cursor.row + 1);\n var tokens = session.getTokens(cursor.row);\n var index = 0;\n for (var i = 0; i < tokens.length; i++) {\n index += tokens[i].value.length;\n var currentToken = tokens[i];\n if (index >= cursor.column) {\n if (index === cursor.column) {\n if (!/\\.doc/.test(currentToken.type)) {\n return;\n }\n if (/\\*\\//.test(currentToken.value)) {\n var nextToken = tokens[i + 1];\n if (!nextToken || !/\\.doc/.test(nextToken.type)) {\n return;\n }\n }\n }\n var cursorPosInToken = cursor.column - (index - currentToken.value.length);\n var closeDocPos = currentToken.value.indexOf(\"*/\");\n var openDocPos = currentToken.value.indexOf(\"/**\", closeDocPos > -1 ? closeDocPos + 2 : 0);\n if (openDocPos !== -1 && cursorPosInToken > openDocPos && cursorPosInToken < openDocPos + 3) {\n return;\n }\n if (closeDocPos !== -1 && openDocPos !== -1 && cursorPosInToken >= closeDocPos\n && cursorPosInToken <= openDocPos || !/\\.doc/.test(currentToken.type)) {\n return;\n }\n break;\n }\n }\n var indent = this.$getIndent(line);\n if (/\\s*\\*/.test(nextLine)) {\n if (/^\\s*\\*/.test(line)) {\n return {\n text: text + indent + \"* \",\n selection: [1, 2 + indent.length, 1, 2 + indent.length]\n };\n }\n else {\n return {\n text: text + indent + \" * \",\n selection: [1, 3 + indent.length, 1, 3 + indent.length]\n };\n }\n }\n if (/\\/\\*\\*/.test(line.substring(0, cursor.column))) {\n return {\n text: text + indent + \" * \" + text + \" \" + indent + \"*/\",\n selection: [1, 4 + indent.length, 1, 4 + indent.length]\n };\n }\n }\n });\n }\n};\nCstyleBehaviour.isSaneInsertion = function (editor, session) {\n var cursor = editor.getCursorPosition();\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n if (!this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS)) {\n if (/[)}\\]]/.test(editor.session.getLine(cursor.row)[cursor.column]))\n return true;\n var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);\n if (!this.$matchTokenType(iterator2.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS))\n return false;\n }\n iterator.stepForward();\n return iterator.getCurrentTokenRow() !== cursor.row ||\n this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_BEFORE_TOKENS);\n};\nCstyleBehaviour[\"$matchTokenType\"] = function (token, types) {\n return types.indexOf(token.type || token) > -1;\n};\nCstyleBehaviour[\"recordAutoInsert\"] = function (editor, session, bracket) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (!this[\"isAutoInsertedClosing\"](cursor, line, context.autoInsertedLineEnd[0]))\n context.autoInsertedBrackets = 0;\n context.autoInsertedRow = cursor.row;\n context.autoInsertedLineEnd = bracket + line.substr(cursor.column);\n context.autoInsertedBrackets++;\n};\nCstyleBehaviour[\"recordMaybeInsert\"] = function (editor, session, bracket) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (!this[\"isMaybeInsertedClosing\"](cursor, line))\n context.maybeInsertedBrackets = 0;\n context.maybeInsertedRow = cursor.row;\n context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;\n context.maybeInsertedLineEnd = line.substr(cursor.column);\n context.maybeInsertedBrackets++;\n};\nCstyleBehaviour[\"isAutoInsertedClosing\"] = function (cursor, line, bracket) {\n return context.autoInsertedBrackets > 0 &&\n cursor.row === context.autoInsertedRow &&\n bracket === context.autoInsertedLineEnd[0] &&\n line.substr(cursor.column) === context.autoInsertedLineEnd;\n};\nCstyleBehaviour[\"isMaybeInsertedClosing\"] = function (cursor, line) {\n return context.maybeInsertedBrackets > 0 &&\n cursor.row === context.maybeInsertedRow &&\n line.substr(cursor.column) === context.maybeInsertedLineEnd &&\n line.substr(0, cursor.column) == context.maybeInsertedLineStart;\n};\nCstyleBehaviour[\"popAutoInsertedClosing\"] = function () {\n context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1);\n context.autoInsertedBrackets--;\n};\nCstyleBehaviour[\"clearMaybeInsertedClosing\"] = function () {\n if (context) {\n context.maybeInsertedBrackets = 0;\n context.maybeInsertedRow = -1;\n }\n};\noop.inherits(CstyleBehaviour, Behaviour);\nexports.CstyleBehaviour = CstyleBehaviour;\n\n});\n\nace.define(\"ace/unicode\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar wordChars = [48, 9, 8, 25, 5, 0, 2, 25, 48, 0, 11, 0, 5, 0, 6, 22, 2, 30, 2, 457, 5, 11, 15, 4, 8, 0, 2, 0, 18, 116, 2, 1, 3, 3, 9, 0, 2, 2, 2, 0, 2, 19, 2, 82, 2, 138, 2, 4, 3, 155, 12, 37, 3, 0, 8, 38, 10, 44, 2, 0, 2, 1, 2, 1, 2, 0, 9, 26, 6, 2, 30, 10, 7, 61, 2, 9, 5, 101, 2, 7, 3, 9, 2, 18, 3, 0, 17, 58, 3, 100, 15, 53, 5, 0, 6, 45, 211, 57, 3, 18, 2, 5, 3, 11, 3, 9, 2, 1, 7, 6, 2, 2, 2, 7, 3, 1, 3, 21, 2, 6, 2, 0, 4, 3, 3, 8, 3, 1, 3, 3, 9, 0, 5, 1, 2, 4, 3, 11, 16, 2, 2, 5, 5, 1, 3, 21, 2, 6, 2, 1, 2, 1, 2, 1, 3, 0, 2, 4, 5, 1, 3, 2, 4, 0, 8, 3, 2, 0, 8, 15, 12, 2, 2, 8, 2, 2, 2, 21, 2, 6, 2, 1, 2, 4, 3, 9, 2, 2, 2, 2, 3, 0, 16, 3, 3, 9, 18, 2, 2, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 3, 8, 3, 1, 3, 2, 9, 1, 5, 1, 2, 4, 3, 9, 2, 0, 17, 1, 2, 5, 4, 2, 2, 3, 4, 1, 2, 0, 2, 1, 4, 1, 4, 2, 4, 11, 5, 4, 4, 2, 2, 3, 3, 0, 7, 0, 15, 9, 18, 2, 2, 7, 2, 2, 2, 22, 2, 9, 2, 4, 4, 7, 2, 2, 2, 3, 8, 1, 2, 1, 7, 3, 3, 9, 19, 1, 2, 7, 2, 2, 2, 22, 2, 9, 2, 4, 3, 8, 2, 2, 2, 3, 8, 1, 8, 0, 2, 3, 3, 9, 19, 1, 2, 7, 2, 2, 2, 22, 2, 15, 4, 7, 2, 2, 2, 3, 10, 0, 9, 3, 3, 9, 11, 5, 3, 1, 2, 17, 4, 23, 2, 8, 2, 0, 3, 6, 4, 0, 5, 5, 2, 0, 2, 7, 19, 1, 14, 57, 6, 14, 2, 9, 40, 1, 2, 0, 3, 1, 2, 0, 3, 0, 7, 3, 2, 6, 2, 2, 2, 0, 2, 0, 3, 1, 2, 12, 2, 2, 3, 4, 2, 0, 2, 5, 3, 9, 3, 1, 35, 0, 24, 1, 7, 9, 12, 0, 2, 0, 2, 0, 5, 9, 2, 35, 5, 19, 2, 5, 5, 7, 2, 35, 10, 0, 58, 73, 7, 77, 3, 37, 11, 42, 2, 0, 4, 328, 2, 3, 3, 6, 2, 0, 2, 3, 3, 40, 2, 3, 3, 32, 2, 3, 3, 6, 2, 0, 2, 3, 3, 14, 2, 56, 2, 3, 3, 66, 5, 0, 33, 15, 17, 84, 13, 619, 3, 16, 2, 25, 6, 74, 22, 12, 2, 6, 12, 20, 12, 19, 13, 12, 2, 2, 2, 1, 13, 51, 3, 29, 4, 0, 5, 1, 3, 9, 34, 2, 3, 9, 7, 87, 9, 42, 6, 69, 11, 28, 4, 11, 5, 11, 11, 39, 3, 4, 12, 43, 5, 25, 7, 10, 38, 27, 5, 62, 2, 28, 3, 10, 7, 9, 14, 0, 89, 75, 5, 9, 18, 8, 13, 42, 4, 11, 71, 55, 9, 9, 4, 48, 83, 2, 2, 30, 14, 230, 23, 280, 3, 5, 3, 37, 3, 5, 3, 7, 2, 0, 2, 0, 2, 0, 2, 30, 3, 52, 2, 6, 2, 0, 4, 2, 2, 6, 4, 3, 3, 5, 5, 12, 6, 2, 2, 6, 67, 1, 20, 0, 29, 0, 14, 0, 17, 4, 60, 12, 5, 0, 4, 11, 18, 0, 5, 0, 3, 9, 2, 0, 4, 4, 7, 0, 2, 0, 2, 0, 2, 3, 2, 10, 3, 3, 6, 4, 5, 0, 53, 1, 2684, 46, 2, 46, 2, 132, 7, 6, 15, 37, 11, 53, 10, 0, 17, 22, 10, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 31, 48, 0, 470, 1, 36, 5, 2, 4, 6, 1, 5, 85, 3, 1, 3, 2, 2, 89, 2, 3, 6, 40, 4, 93, 18, 23, 57, 15, 513, 6581, 75, 20939, 53, 1164, 68, 45, 3, 268, 4, 27, 21, 31, 3, 13, 13, 1, 2, 24, 9, 69, 11, 1, 38, 8, 3, 102, 3, 1, 111, 44, 25, 51, 13, 68, 12, 9, 7, 23, 4, 0, 5, 45, 3, 35, 13, 28, 4, 64, 15, 10, 39, 54, 10, 13, 3, 9, 7, 22, 4, 1, 5, 66, 25, 2, 227, 42, 2, 1, 3, 9, 7, 11171, 13, 22, 5, 48, 8453, 301, 3, 61, 3, 105, 39, 6, 13, 4, 6, 11, 2, 12, 2, 4, 2, 0, 2, 1, 2, 1, 2, 107, 34, 362, 19, 63, 3, 53, 41, 11, 5, 15, 17, 6, 13, 1, 25, 2, 33, 4, 2, 134, 20, 9, 8, 25, 5, 0, 2, 25, 12, 88, 4, 5, 3, 5, 3, 5, 3, 2];\nvar code = 0;\nvar str = [];\nfor (var i = 0; i < wordChars.length; i += 2) {\n str.push(code += wordChars[i]);\n if (wordChars[i + 1])\n str.push(45, code += wordChars[i + 1]);\n}\nexports.wordChars = String.fromCharCode.apply(null, str);\n\n});\n\nace.define(\"ace/mode/text\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/tokenizer\",\"ace/mode/text_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/unicode\",\"ace/lib/lang\",\"ace/token_iterator\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar config = require(\"../config\");\nvar Tokenizer = require(\"../tokenizer\").Tokenizer;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar unicode = require(\"../unicode\");\nvar lang = require(\"../lib/lang\");\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar Range = require(\"../range\").Range;\nvar Mode;\nMode = function () {\n this.HighlightRules = TextHighlightRules;\n};\n(function () {\n this.$defaultBehaviour = new CstyleBehaviour();\n this.tokenRe = new RegExp(\"^[\" + unicode.wordChars + \"\\\\$_]+\", \"g\");\n this.nonTokenRe = new RegExp(\"^(?:[^\" + unicode.wordChars + \"\\\\$_]|\\\\s])+\", \"g\");\n this.getTokenizer = function () {\n if (!this.$tokenizer) {\n this.$highlightRules = this.$highlightRules || new this.HighlightRules(this.$highlightRuleConfig);\n this.$tokenizer = new Tokenizer(this.$highlightRules.getRules());\n }\n return this.$tokenizer;\n };\n this.lineCommentStart = \"\";\n this.blockComment = \"\";\n this.toggleCommentLines = function (state, session, startRow, endRow) {\n var doc = session.doc;\n var ignoreBlankLines = true;\n var shouldRemove = true;\n var minIndent = Infinity;\n var tabSize = session.getTabSize();\n var insertAtTabStop = false;\n if (!this.lineCommentStart) {\n if (!this.blockComment)\n return false;\n var lineCommentStart = this.blockComment.start;\n var lineCommentEnd = this.blockComment.end;\n var regexpStart = new RegExp(\"^(\\\\s*)(?:\" + lang.escapeRegExp(lineCommentStart) + \")\");\n var regexpEnd = new RegExp(\"(?:\" + lang.escapeRegExp(lineCommentEnd) + \")\\\\s*$\");\n var comment = function (line, i) {\n if (testRemove(line, i))\n return;\n if (!ignoreBlankLines || /\\S/.test(line)) {\n doc.insertInLine({ row: i, column: line.length }, lineCommentEnd);\n doc.insertInLine({ row: i, column: minIndent }, lineCommentStart);\n }\n };\n var uncomment = function (line, i) {\n var m;\n if (m = line.match(regexpEnd))\n doc.removeInLine(i, line.length - m[0].length, line.length);\n if (m = line.match(regexpStart))\n doc.removeInLine(i, m[1].length, m[0].length);\n };\n var testRemove = function (line, row) {\n if (regexpStart.test(line))\n return true;\n var tokens = session.getTokens(row);\n for (var i = 0; i < tokens.length; i++) {\n if (tokens[i].type === \"comment\")\n return true;\n }\n };\n }\n else {\n if (Array.isArray(this.lineCommentStart)) {\n var regexpStart = this.lineCommentStart.map(lang.escapeRegExp).join(\"|\");\n var lineCommentStart = this.lineCommentStart[0];\n }\n else {\n var regexpStart = lang.escapeRegExp(this.lineCommentStart);\n var lineCommentStart = this.lineCommentStart;\n }\n regexpStart = new RegExp(\"^(\\\\s*)(?:\" + regexpStart + \") ?\");\n insertAtTabStop = session.getUseSoftTabs();\n var uncomment = function (line, i) {\n var m = line.match(regexpStart);\n if (!m)\n return;\n var start = m[1].length, end = m[0].length;\n if (!shouldInsertSpace(line, start, end) && m[0][end - 1] == \" \")\n end--;\n doc.removeInLine(i, start, end);\n };\n var commentWithSpace = lineCommentStart + \" \";\n var comment = function (line, i) {\n if (!ignoreBlankLines || /\\S/.test(line)) {\n if (shouldInsertSpace(line, minIndent, minIndent))\n doc.insertInLine({ row: i, column: minIndent }, commentWithSpace);\n else\n doc.insertInLine({ row: i, column: minIndent }, lineCommentStart);\n }\n };\n var testRemove = function (line, i) {\n return regexpStart.test(line);\n };\n var shouldInsertSpace = function (line, before, after) {\n var spaces = 0;\n while (before-- && line.charAt(before) == \" \")\n spaces++;\n if (spaces % tabSize != 0)\n return false;\n var spaces = 0;\n while (line.charAt(after++) == \" \")\n spaces++;\n if (tabSize > 2)\n return spaces % tabSize != tabSize - 1;\n else\n return spaces % tabSize == 0;\n };\n }\n function iter(fun) {\n for (var i = startRow; i <= endRow; i++)\n fun(doc.getLine(i), i);\n }\n var minEmptyLength = Infinity;\n iter(function (line, i) {\n var indent = line.search(/\\S/);\n if (indent !== -1) {\n if (indent < minIndent)\n minIndent = indent;\n if (shouldRemove && !testRemove(line, i))\n shouldRemove = false;\n }\n else if (minEmptyLength > line.length) {\n minEmptyLength = line.length;\n }\n });\n if (minIndent == Infinity) {\n minIndent = minEmptyLength;\n ignoreBlankLines = false;\n shouldRemove = false;\n }\n if (insertAtTabStop && minIndent % tabSize != 0)\n minIndent = Math.floor(minIndent / tabSize) * tabSize;\n iter(shouldRemove ? uncomment : comment);\n };\n this.toggleBlockComment = function (state, session, range, cursor) {\n var comment = this.blockComment;\n if (!comment)\n return;\n if (!comment.start && comment[0])\n comment = comment[0];\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n var sel = session.selection;\n var initialRange = session.selection.toOrientedRange();\n var startRow, colDiff;\n if (token && /comment/.test(token.type)) {\n var startRange, endRange;\n while (token && /comment/.test(token.type)) {\n var i = token.value.indexOf(comment.start);\n if (i != -1) {\n var row = iterator.getCurrentTokenRow();\n var column = iterator.getCurrentTokenColumn() + i;\n startRange = new Range(row, column, row, column + comment.start.length);\n break;\n }\n token = iterator.stepBackward();\n }\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n while (token && /comment/.test(token.type)) {\n var i = token.value.indexOf(comment.end);\n if (i != -1) {\n var row = iterator.getCurrentTokenRow();\n var column = iterator.getCurrentTokenColumn() + i;\n endRange = new Range(row, column, row, column + comment.end.length);\n break;\n }\n token = iterator.stepForward();\n }\n if (endRange)\n session.remove(endRange);\n if (startRange) {\n session.remove(startRange);\n startRow = startRange.start.row;\n colDiff = -comment.start.length;\n }\n }\n else {\n colDiff = comment.start.length;\n startRow = range.start.row;\n session.insert(range.end, comment.end);\n session.insert(range.start, comment.start);\n }\n if (initialRange.start.row == startRow)\n initialRange.start.column += colDiff;\n if (initialRange.end.row == startRow)\n initialRange.end.column += colDiff;\n session.selection.fromOrientedRange(initialRange);\n };\n this.getNextLineIndent = function (state, line, tab) {\n return this.$getIndent(line);\n };\n this.checkOutdent = function (state, line, input) {\n return false;\n };\n this.autoOutdent = function (state, doc, row) {\n };\n this.$getIndent = function (line) {\n return line.match(/^\\s*/)[0];\n };\n this.createWorker = function (session) {\n return null;\n };\n this.createModeDelegates = function (mapping) {\n this.$embeds = [];\n this.$modes = {};\n for (var i in mapping) {\n if (mapping[i]) {\n var Mode = mapping[i];\n var id = Mode.prototype.$id;\n var mode = config.$modes[id];\n if (!mode)\n config.$modes[id] = mode = new Mode();\n if (!config.$modes[i])\n config.$modes[i] = mode;\n this.$embeds.push(i);\n this.$modes[i] = mode;\n }\n }\n var delegations = [\"toggleBlockComment\", \"toggleCommentLines\", \"getNextLineIndent\",\n \"checkOutdent\", \"autoOutdent\", \"transformAction\", \"getCompletions\"];\n var _loop_1 = function (i) {\n (function (scope) {\n var functionName = delegations[i];\n var defaultHandler = scope[functionName];\n scope[delegations[i]] =\n function () {\n return this.$delegator(functionName, arguments, defaultHandler);\n };\n }(this_1));\n };\n var this_1 = this;\n for (var i = 0; i < delegations.length; i++) {\n _loop_1(i);\n }\n };\n this.$delegator = function (method, args, defaultHandler) {\n var state = args[0] || \"start\";\n if (typeof state != \"string\") {\n if (Array.isArray(state[2])) {\n var language = state[2][state[2].length - 1];\n var mode = this.$modes[language];\n if (mode)\n return mode[method].apply(mode, [state[1]].concat([].slice.call(args, 1)));\n }\n state = state[0] || \"start\";\n }\n for (var i = 0; i < this.$embeds.length; i++) {\n if (!this.$modes[this.$embeds[i]])\n continue;\n var split = state.split(this.$embeds[i]);\n if (!split[0] && split[1]) {\n args[0] = split[1];\n var mode = this.$modes[this.$embeds[i]];\n return mode[method].apply(mode, args);\n }\n }\n var ret = defaultHandler.apply(this, args);\n return defaultHandler ? ret : undefined;\n };\n this.transformAction = function (state, action, editor, session, param) {\n if (this.$behaviour) {\n var behaviours = this.$behaviour.getBehaviours();\n for (var key in behaviours) {\n if (behaviours[key][action]) {\n var ret = behaviours[key][action].apply(this, arguments);\n if (ret) {\n return ret;\n }\n }\n }\n }\n };\n this.getKeywords = function (append) {\n if (!this.completionKeywords) {\n var rules = this.$tokenizer[\"rules\"];\n var completionKeywords = [];\n for (var rule in rules) {\n var ruleItr = rules[rule];\n for (var r = 0, l = ruleItr.length; r < l; r++) {\n if (typeof ruleItr[r].token === \"string\") {\n if (/keyword|support|storage/.test(ruleItr[r].token))\n completionKeywords.push(ruleItr[r].regex);\n }\n else if (typeof ruleItr[r].token === \"object\") {\n for (var a = 0, aLength = ruleItr[r].token.length; a < aLength; a++) {\n if (/keyword|support|storage/.test(ruleItr[r].token[a])) {\n var rule = ruleItr[r].regex.match(/\\(.+?\\)/g)[a];\n completionKeywords.push(rule.substr(1, rule.length - 2));\n }\n }\n }\n }\n }\n this.completionKeywords = completionKeywords;\n }\n if (!append)\n return this.$keywordList;\n return completionKeywords.concat(this.$keywordList || []);\n };\n this.$createKeywordList = function () {\n if (!this.$highlightRules)\n this.getTokenizer();\n return this.$keywordList = this.$highlightRules.$keywordList || [];\n };\n this.getCompletions = function (state, session, pos, prefix) {\n var keywords = this.$keywordList || this.$createKeywordList();\n return keywords.map(function (word) {\n return {\n name: word,\n value: word,\n score: 0,\n meta: \"keyword\"\n };\n });\n };\n this.$id = \"ace/mode/text\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/apply_delta\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nfunction throwDeltaError(delta, errorText) {\n console.log(\"Invalid Delta:\", delta);\n throw \"Invalid Delta: \" + errorText;\n}\nfunction positionInDocument(docLines, position) {\n return position.row >= 0 && position.row < docLines.length &&\n position.column >= 0 && position.column <= docLines[position.row].length;\n}\nfunction validateDelta(docLines, delta) {\n if (delta.action != \"insert\" && delta.action != \"remove\")\n throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n if (!(delta.lines instanceof Array))\n throwDeltaError(delta, \"delta.lines must be an Array\");\n if (!delta.start || !delta.end)\n throwDeltaError(delta, \"delta.start/end must be an present\");\n var start = delta.start;\n if (!positionInDocument(docLines, delta.start))\n throwDeltaError(delta, \"delta.start must be contained in document\");\n var end = delta.end;\n if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n var numRangeRows = end.row - start.row;\n var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n throwDeltaError(delta, \"delta.range must match delta lines\");\n}\nexports.applyDelta = function (docLines, delta, doNotValidate) {\n var row = delta.start.row;\n var startColumn = delta.start.column;\n var line = docLines[row] || \"\";\n switch (delta.action) {\n case \"insert\":\n var lines = delta.lines;\n if (lines.length === 1) {\n docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n }\n else {\n var args = [row, 1].concat(delta.lines);\n docLines.splice.apply(docLines, args);\n docLines[row] = line.substring(0, startColumn) + docLines[row];\n docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n }\n break;\n case \"remove\":\n var endColumn = delta.end.column;\n var endRow = delta.end.row;\n if (row === endRow) {\n docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n }\n else {\n docLines.splice(row, endRow - row + 1, line.substring(0, startColumn) + docLines[endRow].substring(endColumn));\n }\n break;\n }\n};\n\n});\n\nace.define(\"ace/anchor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Anchor = /** @class */ (function () {\n function Anchor(doc, row, column) {\n this.$onChange = this.onChange.bind(this);\n this.attach(doc);\n if (typeof row != \"number\")\n this.setPosition(row.row, row.column);\n else\n this.setPosition(row, column);\n }\n Anchor.prototype.getPosition = function () {\n return this.$clipPositionToDocument(this.row, this.column);\n };\n Anchor.prototype.getDocument = function () {\n return this.document;\n };\n Anchor.prototype.onChange = function (delta) {\n if (delta.start.row == delta.end.row && delta.start.row != this.row)\n return;\n if (delta.start.row > this.row)\n return;\n var point = $getTransformedPoint(delta, { row: this.row, column: this.column }, this.$insertRight);\n this.setPosition(point.row, point.column, true);\n };\n Anchor.prototype.setPosition = function (row, column, noClip) {\n var pos;\n if (noClip) {\n pos = {\n row: row,\n column: column\n };\n }\n else {\n pos = this.$clipPositionToDocument(row, column);\n }\n if (this.row == pos.row && this.column == pos.column)\n return;\n var old = {\n row: this.row,\n column: this.column\n };\n this.row = pos.row;\n this.column = pos.column;\n this._signal(\"change\", {\n old: old,\n value: pos\n });\n };\n Anchor.prototype.detach = function () {\n this.document.off(\"change\", this.$onChange);\n };\n Anchor.prototype.attach = function (doc) {\n this.document = doc || this.document;\n this.document.on(\"change\", this.$onChange);\n };\n Anchor.prototype.$clipPositionToDocument = function (row, column) {\n var pos = {};\n if (row >= this.document.getLength()) {\n pos.row = Math.max(0, this.document.getLength() - 1);\n pos.column = this.document.getLine(pos.row).length;\n }\n else if (row < 0) {\n pos.row = 0;\n pos.column = 0;\n }\n else {\n pos.row = row;\n pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n }\n if (column < 0)\n pos.column = 0;\n return pos;\n };\n return Anchor;\n}());\nAnchor.prototype.$insertRight = false;\noop.implement(Anchor.prototype, EventEmitter);\nfunction $pointsInOrder(point1, point2, equalPointsInOrder) {\n var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n}\nfunction $getTransformedPoint(delta, point, moveIfEqual) {\n var deltaIsInsert = delta.action == \"insert\";\n var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row);\n var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n var deltaStart = delta.start;\n var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n return {\n row: point.row,\n column: point.column\n };\n }\n if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n return {\n row: point.row + deltaRowShift,\n column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n };\n }\n return {\n row: deltaStart.row,\n column: deltaStart.column\n };\n}\nexports.Anchor = Anchor;\n\n});\n\nace.define(\"ace/document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/apply_delta\",\"ace/lib/event_emitter\",\"ace/range\",\"ace/anchor\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar applyDelta = require(\"./apply_delta\").applyDelta;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\nvar Document = /** @class */ (function () {\n function Document(textOrLines) {\n this.$lines = [\"\"];\n if (textOrLines.length === 0) {\n this.$lines = [\"\"];\n }\n else if (Array.isArray(textOrLines)) {\n this.insertMergedLines({ row: 0, column: 0 }, textOrLines);\n }\n else {\n this.insert({ row: 0, column: 0 }, textOrLines);\n }\n }\n Document.prototype.setValue = function (text) {\n var len = this.getLength() - 1;\n this.remove(new Range(0, 0, len, this.getLine(len).length));\n this.insert({ row: 0, column: 0 }, text || \"\");\n };\n Document.prototype.getValue = function () {\n return this.getAllLines().join(this.getNewLineCharacter());\n };\n Document.prototype.createAnchor = function (row, column) {\n return new Anchor(this, row, column);\n };\n Document.prototype.$detectNewLine = function (text) {\n var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n this.$autoNewLine = match ? match[1] : \"\\n\";\n this._signal(\"changeNewLineMode\");\n };\n Document.prototype.getNewLineCharacter = function () {\n switch (this.$newLineMode) {\n case \"windows\":\n return \"\\r\\n\";\n case \"unix\":\n return \"\\n\";\n default:\n return this.$autoNewLine || \"\\n\";\n }\n };\n Document.prototype.setNewLineMode = function (newLineMode) {\n if (this.$newLineMode === newLineMode)\n return;\n this.$newLineMode = newLineMode;\n this._signal(\"changeNewLineMode\");\n };\n Document.prototype.getNewLineMode = function () {\n return this.$newLineMode;\n };\n Document.prototype.isNewLine = function (text) {\n return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n };\n Document.prototype.getLine = function (row) {\n return this.$lines[row] || \"\";\n };\n Document.prototype.getLines = function (firstRow, lastRow) {\n return this.$lines.slice(firstRow, lastRow + 1);\n };\n Document.prototype.getAllLines = function () {\n return this.getLines(0, this.getLength());\n };\n Document.prototype.getLength = function () {\n return this.$lines.length;\n };\n Document.prototype.getTextRange = function (range) {\n return this.getLinesForRange(range).join(this.getNewLineCharacter());\n };\n Document.prototype.getLinesForRange = function (range) {\n var lines;\n if (range.start.row === range.end.row) {\n lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n }\n else {\n lines = this.getLines(range.start.row, range.end.row);\n lines[0] = (lines[0] || \"\").substring(range.start.column);\n var l = lines.length - 1;\n if (range.end.row - range.start.row == l)\n lines[l] = lines[l].substring(0, range.end.column);\n }\n return lines;\n };\n Document.prototype.insertLines = function (row, lines) {\n console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n return this.insertFullLines(row, lines);\n };\n Document.prototype.removeLines = function (firstRow, lastRow) {\n console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n return this.removeFullLines(firstRow, lastRow);\n };\n Document.prototype.insertNewLine = function (position) {\n console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n return this.insertMergedLines(position, [\"\", \"\"]);\n };\n Document.prototype.insert = function (position, text) {\n if (this.getLength() <= 1)\n this.$detectNewLine(text);\n return this.insertMergedLines(position, this.$split(text));\n };\n Document.prototype.insertInLine = function (position, text) {\n var start = this.clippedPos(position.row, position.column);\n var end = this.pos(position.row, position.column + text.length);\n this.applyDelta({\n start: start,\n end: end,\n action: \"insert\",\n lines: [text]\n }, true);\n return this.clonePos(end);\n };\n Document.prototype.clippedPos = function (row, column) {\n var length = this.getLength();\n if (row === undefined) {\n row = length;\n }\n else if (row < 0) {\n row = 0;\n }\n else if (row >= length) {\n row = length - 1;\n column = undefined;\n }\n var line = this.getLine(row);\n if (column == undefined)\n column = line.length;\n column = Math.min(Math.max(column, 0), line.length);\n return { row: row, column: column };\n };\n Document.prototype.clonePos = function (pos) {\n return { row: pos.row, column: pos.column };\n };\n Document.prototype.pos = function (row, column) {\n return { row: row, column: column };\n };\n Document.prototype.$clipPosition = function (position) {\n var length = this.getLength();\n if (position.row >= length) {\n position.row = Math.max(0, length - 1);\n position.column = this.getLine(length - 1).length;\n }\n else {\n position.row = Math.max(0, position.row);\n position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n }\n return position;\n };\n Document.prototype.insertFullLines = function (row, lines) {\n row = Math.min(Math.max(row, 0), this.getLength());\n var column = 0;\n if (row < this.getLength()) {\n lines = lines.concat([\"\"]);\n column = 0;\n }\n else {\n lines = [\"\"].concat(lines);\n row--;\n column = this.$lines[row].length;\n }\n this.insertMergedLines({ row: row, column: column }, lines);\n };\n Document.prototype.insertMergedLines = function (position, lines) {\n var start = this.clippedPos(position.row, position.column);\n var end = {\n row: start.row + lines.length - 1,\n column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n };\n this.applyDelta({\n start: start,\n end: end,\n action: \"insert\",\n lines: lines\n });\n return this.clonePos(end);\n };\n Document.prototype.remove = function (range) {\n var start = this.clippedPos(range.start.row, range.start.column);\n var end = this.clippedPos(range.end.row, range.end.column);\n this.applyDelta({\n start: start,\n end: end,\n action: \"remove\",\n lines: this.getLinesForRange({ start: start, end: end })\n });\n return this.clonePos(start);\n };\n Document.prototype.removeInLine = function (row, startColumn, endColumn) {\n var start = this.clippedPos(row, startColumn);\n var end = this.clippedPos(row, endColumn);\n this.applyDelta({\n start: start,\n end: end,\n action: \"remove\",\n lines: this.getLinesForRange({ start: start, end: end })\n }, true);\n return this.clonePos(start);\n };\n Document.prototype.removeFullLines = function (firstRow, lastRow) {\n firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n lastRow = Math.min(Math.max(0, lastRow), this.getLength() - 1);\n var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n var deleteLastNewLine = lastRow < this.getLength() - 1;\n var startRow = (deleteFirstNewLine ? firstRow - 1 : firstRow);\n var startCol = (deleteFirstNewLine ? this.getLine(startRow).length : 0);\n var endRow = (deleteLastNewLine ? lastRow + 1 : lastRow);\n var endCol = (deleteLastNewLine ? 0 : this.getLine(endRow).length);\n var range = new Range(startRow, startCol, endRow, endCol);\n var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n this.applyDelta({\n start: range.start,\n end: range.end,\n action: \"remove\",\n lines: this.getLinesForRange(range)\n });\n return deletedLines;\n };\n Document.prototype.removeNewLine = function (row) {\n if (row < this.getLength() - 1 && row >= 0) {\n this.applyDelta({\n start: this.pos(row, this.getLine(row).length),\n end: this.pos(row + 1, 0),\n action: \"remove\",\n lines: [\"\", \"\"]\n });\n }\n };\n Document.prototype.replace = function (range, text) {\n if (!(range instanceof Range))\n range = Range.fromPoints(range.start, range.end);\n if (text.length === 0 && range.isEmpty())\n return range.start;\n if (text == this.getTextRange(range))\n return range.end;\n this.remove(range);\n var end;\n if (text) {\n end = this.insert(range.start, text);\n }\n else {\n end = range.start;\n }\n return end;\n };\n Document.prototype.applyDeltas = function (deltas) {\n for (var i = 0; i < deltas.length; i++) {\n this.applyDelta(deltas[i]);\n }\n };\n Document.prototype.revertDeltas = function (deltas) {\n for (var i = deltas.length - 1; i >= 0; i--) {\n this.revertDelta(deltas[i]);\n }\n };\n Document.prototype.applyDelta = function (delta, doNotValidate) {\n var isInsert = delta.action == \"insert\";\n if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n : !Range.comparePoints(delta.start, delta.end)) {\n return;\n }\n if (isInsert && delta.lines.length > 20000) {\n this.$splitAndapplyLargeDelta(delta, 20000);\n }\n else {\n applyDelta(this.$lines, delta, doNotValidate);\n this._signal(\"change\", delta);\n }\n };\n Document.prototype.$safeApplyDelta = function (delta) {\n var docLength = this.$lines.length;\n if (delta.action == \"remove\" && delta.start.row < docLength && delta.end.row < docLength\n || delta.action == \"insert\" && delta.start.row <= docLength) {\n this.applyDelta(delta);\n }\n };\n Document.prototype.$splitAndapplyLargeDelta = function (delta, MAX) {\n var lines = delta.lines;\n var l = lines.length - MAX + 1;\n var row = delta.start.row;\n var column = delta.start.column;\n for (var from = 0, to = 0; from < l; from = to) {\n to += MAX - 1;\n var chunk = lines.slice(from, to);\n chunk.push(\"\");\n this.applyDelta({\n start: this.pos(row + from, column),\n end: this.pos(row + to, column = 0),\n action: delta.action,\n lines: chunk\n }, true);\n }\n delta.lines = lines.slice(from);\n delta.start.row = row + from;\n delta.start.column = column;\n this.applyDelta(delta, true);\n };\n Document.prototype.revertDelta = function (delta) {\n this.$safeApplyDelta({\n start: this.clonePos(delta.start),\n end: this.clonePos(delta.end),\n action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n lines: delta.lines.slice()\n });\n };\n Document.prototype.indexToPosition = function (index, startRow) {\n var lines = this.$lines || this.getAllLines();\n var newlineLength = this.getNewLineCharacter().length;\n for (var i = startRow || 0, l = lines.length; i < l; i++) {\n index -= lines[i].length + newlineLength;\n if (index < 0)\n return { row: i, column: index + lines[i].length + newlineLength };\n }\n return { row: l - 1, column: index + lines[l - 1].length + newlineLength };\n };\n Document.prototype.positionToIndex = function (pos, startRow) {\n var lines = this.$lines || this.getAllLines();\n var newlineLength = this.getNewLineCharacter().length;\n var index = 0;\n var row = Math.min(pos.row, lines.length);\n for (var i = startRow || 0; i < row; ++i)\n index += lines[i].length + newlineLength;\n return index + pos.column;\n };\n Document.prototype.$split = function (text) {\n return text.split(/\\r\\n|\\r|\\n/);\n };\n return Document;\n}());\nDocument.prototype.$autoNewLine = \"\";\nDocument.prototype.$newLineMode = \"auto\";\noop.implement(Document.prototype, EventEmitter);\nexports.Document = Document;\n\n});\n\nace.define(\"ace/background_tokenizer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar BackgroundTokenizer = /** @class */ (function () {\n function BackgroundTokenizer(tokenizer, session) {\n this.running = false;\n this.lines = [];\n this.states = [];\n this.currentLine = 0;\n this.tokenizer = tokenizer;\n var self = this;\n this.$worker = function () {\n if (!self.running) {\n return;\n }\n var workerStart = new Date();\n var currentLine = self.currentLine;\n var endLine = -1;\n var doc = self.doc;\n var startLine = currentLine;\n while (self.lines[currentLine])\n currentLine++;\n var len = doc.getLength();\n var processedLines = 0;\n self.running = false;\n while (currentLine < len) {\n self.$tokenizeRow(currentLine);\n endLine = currentLine;\n do {\n currentLine++;\n } while (self.lines[currentLine]);\n processedLines++;\n if ((processedLines % 5 === 0) && (new Date() - workerStart) > 20) {\n self.running = setTimeout(self.$worker, 20);\n break;\n }\n }\n self.currentLine = currentLine;\n if (endLine == -1)\n endLine = currentLine;\n if (startLine <= endLine)\n self.fireUpdateEvent(startLine, endLine);\n };\n }\n BackgroundTokenizer.prototype.setTokenizer = function (tokenizer) {\n this.tokenizer = tokenizer;\n this.lines = [];\n this.states = [];\n this.start(0);\n };\n BackgroundTokenizer.prototype.setDocument = function (doc) {\n this.doc = doc;\n this.lines = [];\n this.states = [];\n this.stop();\n };\n BackgroundTokenizer.prototype.fireUpdateEvent = function (firstRow, lastRow) {\n var data = {\n first: firstRow,\n last: lastRow\n };\n this._signal(\"update\", { data: data });\n };\n BackgroundTokenizer.prototype.start = function (startRow) {\n this.currentLine = Math.min(startRow || 0, this.currentLine, this.doc.getLength());\n this.lines.splice(this.currentLine, this.lines.length);\n this.states.splice(this.currentLine, this.states.length);\n this.stop();\n this.running = setTimeout(this.$worker, 700);\n };\n BackgroundTokenizer.prototype.scheduleStart = function () {\n if (!this.running)\n this.running = setTimeout(this.$worker, 700);\n };\n BackgroundTokenizer.prototype.$updateOnChange = function (delta) {\n var startRow = delta.start.row;\n var len = delta.end.row - startRow;\n if (len === 0) {\n this.lines[startRow] = null;\n }\n else if (delta.action == \"remove\") {\n this.lines.splice(startRow, len + 1, null);\n this.states.splice(startRow, len + 1, null);\n }\n else {\n var args = Array(len + 1);\n args.unshift(startRow, 1);\n this.lines.splice.apply(this.lines, args);\n this.states.splice.apply(this.states, args);\n }\n this.currentLine = Math.min(startRow, this.currentLine, this.doc.getLength());\n this.stop();\n };\n BackgroundTokenizer.prototype.stop = function () {\n if (this.running)\n clearTimeout(this.running);\n this.running = false;\n };\n BackgroundTokenizer.prototype.getTokens = function (row) {\n return this.lines[row] || this.$tokenizeRow(row);\n };\n BackgroundTokenizer.prototype.getState = function (row) {\n if (this.currentLine == row)\n this.$tokenizeRow(row);\n return this.states[row] || \"start\";\n };\n BackgroundTokenizer.prototype.$tokenizeRow = function (row) {\n var line = this.doc.getLine(row);\n var state = this.states[row - 1];\n var data = this.tokenizer.getLineTokens(line, state, row);\n if (this.states[row] + \"\" !== data.state + \"\") {\n this.states[row] = data.state;\n this.lines[row + 1] = null;\n if (this.currentLine > row + 1)\n this.currentLine = row + 1;\n }\n else if (this.currentLine == row) {\n this.currentLine = row + 1;\n }\n return this.lines[row] = data.tokens;\n };\n BackgroundTokenizer.prototype.cleanup = function () {\n this.running = false;\n this.lines = [];\n this.states = [];\n this.currentLine = 0;\n this.removeAllListeners();\n };\n return BackgroundTokenizer;\n}());\noop.implement(BackgroundTokenizer.prototype, EventEmitter);\nexports.BackgroundTokenizer = BackgroundTokenizer;\n\n});\n\nace.define(\"ace/search_highlight\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar lang = require(\"./lib/lang\");\nvar Range = require(\"./range\").Range;\nvar SearchHighlight = /** @class */ (function () {\n function SearchHighlight(regExp, clazz, type) {\n if (type === void 0) { type = \"text\"; }\n this.setRegexp(regExp);\n this.clazz = clazz;\n this.type = type;\n }\n SearchHighlight.prototype.setRegexp = function (regExp) {\n if (this.regExp + \"\" == regExp + \"\")\n return;\n this.regExp = regExp;\n this.cache = [];\n };\n SearchHighlight.prototype.update = function (html, markerLayer, session, config) {\n if (!this.regExp)\n return;\n var start = config.firstRow, end = config.lastRow;\n var renderedMarkerRanges = {};\n for (var i = start; i <= end; i++) {\n var ranges = this.cache[i];\n if (ranges == null) {\n ranges = lang.getMatchOffsets(session.getLine(i), this.regExp);\n if (ranges.length > this.MAX_RANGES)\n ranges = ranges.slice(0, this.MAX_RANGES);\n ranges = ranges.map(function (match) {\n return new Range(i, match.offset, i, match.offset + match.length);\n });\n this.cache[i] = ranges.length ? ranges : \"\";\n }\n for (var j = ranges.length; j--;) {\n var rangeToAddMarkerTo = ranges[j].toScreenRange(session);\n var rangeAsString = rangeToAddMarkerTo.toString();\n if (renderedMarkerRanges[rangeAsString])\n continue;\n renderedMarkerRanges[rangeAsString] = true;\n markerLayer.drawSingleLineMarker(html, rangeToAddMarkerTo, this.clazz, config);\n }\n }\n };\n return SearchHighlight;\n}());\nSearchHighlight.prototype.MAX_RANGES = 500;\nexports.SearchHighlight = SearchHighlight;\n\n});\n\nace.define(\"ace/undomanager\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar UndoManager = /** @class */ (function () {\n function UndoManager() {\n this.$keepRedoStack;\n this.$maxRev = 0;\n this.$fromUndo = false;\n this.$undoDepth = Infinity;\n this.reset();\n }\n UndoManager.prototype.addSession = function (session) {\n this.$session = session;\n };\n UndoManager.prototype.add = function (delta, allowMerge, session) {\n if (this.$fromUndo)\n return;\n if (delta == this.$lastDelta)\n return;\n if (!this.$keepRedoStack)\n this.$redoStack.length = 0;\n if (allowMerge === false || !this.lastDeltas) {\n this.lastDeltas = [];\n var undoStackLength = this.$undoStack.length;\n if (undoStackLength > this.$undoDepth - 1) {\n this.$undoStack.splice(0, undoStackLength - this.$undoDepth + 1);\n }\n this.$undoStack.push(this.lastDeltas);\n delta.id = this.$rev = ++this.$maxRev;\n }\n if (delta.action == \"remove\" || delta.action == \"insert\")\n this.$lastDelta = delta;\n this.lastDeltas.push(delta);\n };\n UndoManager.prototype.addSelection = function (selection, rev) {\n this.selections.push({\n value: selection,\n rev: rev || this.$rev\n });\n };\n UndoManager.prototype.startNewGroup = function () {\n this.lastDeltas = null;\n return this.$rev;\n };\n UndoManager.prototype.markIgnored = function (from, to) {\n if (to == null)\n to = this.$rev + 1;\n var stack = this.$undoStack;\n for (var i = stack.length; i--;) {\n var delta = stack[i][0];\n if (delta.id <= from)\n break;\n if (delta.id < to)\n delta.ignore = true;\n }\n this.lastDeltas = null;\n };\n UndoManager.prototype.getSelection = function (rev, after) {\n var stack = this.selections;\n for (var i = stack.length; i--;) {\n var selection = stack[i];\n if (selection.rev < rev) {\n if (after)\n selection = stack[i + 1];\n return selection;\n }\n }\n };\n UndoManager.prototype.getRevision = function () {\n return this.$rev;\n };\n UndoManager.prototype.getDeltas = function (from, to) {\n if (to == null)\n to = this.$rev + 1;\n var stack = this.$undoStack;\n var end = null, start = 0;\n for (var i = stack.length; i--;) {\n var delta = stack[i][0];\n if (delta.id < to && !end)\n end = i + 1;\n if (delta.id <= from) {\n start = i + 1;\n break;\n }\n }\n return stack.slice(start, end);\n };\n UndoManager.prototype.getChangedRanges = function (from, to) {\n if (to == null)\n to = this.$rev + 1;\n };\n UndoManager.prototype.getChangedLines = function (from, to) {\n if (to == null)\n to = this.$rev + 1;\n };\n UndoManager.prototype.undo = function (session, dontSelect) {\n this.lastDeltas = null;\n var stack = this.$undoStack;\n if (!rearrangeUndoStack(stack, stack.length))\n return;\n if (!session)\n session = this.$session;\n if (this.$redoStackBaseRev !== this.$rev && this.$redoStack.length)\n this.$redoStack = [];\n this.$fromUndo = true;\n var deltaSet = stack.pop();\n var undoSelectionRange = null;\n if (deltaSet) {\n undoSelectionRange = session.undoChanges(deltaSet, dontSelect);\n this.$redoStack.push(deltaSet);\n this.$syncRev();\n }\n this.$fromUndo = false;\n return undoSelectionRange;\n };\n UndoManager.prototype.redo = function (session, dontSelect) {\n this.lastDeltas = null;\n if (!session)\n session = this.$session;\n this.$fromUndo = true;\n if (this.$redoStackBaseRev != this.$rev) {\n var diff = this.getDeltas(this.$redoStackBaseRev, this.$rev + 1);\n rebaseRedoStack(this.$redoStack, diff);\n this.$redoStackBaseRev = this.$rev;\n this.$redoStack.forEach(function (x) {\n x[0].id = ++this.$maxRev;\n }, this);\n }\n var deltaSet = this.$redoStack.pop();\n var redoSelectionRange = null;\n if (deltaSet) {\n redoSelectionRange = session.redoChanges(deltaSet, dontSelect);\n this.$undoStack.push(deltaSet);\n this.$syncRev();\n }\n this.$fromUndo = false;\n return redoSelectionRange;\n };\n UndoManager.prototype.$syncRev = function () {\n var stack = this.$undoStack;\n var nextDelta = stack[stack.length - 1];\n var id = nextDelta && nextDelta[0].id || 0;\n this.$redoStackBaseRev = id;\n this.$rev = id;\n };\n UndoManager.prototype.reset = function () {\n this.lastDeltas = null;\n this.$lastDelta = null;\n this.$undoStack = [];\n this.$redoStack = [];\n this.$rev = 0;\n this.mark = 0;\n this.$redoStackBaseRev = this.$rev;\n this.selections = [];\n };\n UndoManager.prototype.canUndo = function () {\n return this.$undoStack.length > 0;\n };\n UndoManager.prototype.canRedo = function () {\n return this.$redoStack.length > 0;\n };\n UndoManager.prototype.bookmark = function (rev) {\n if (rev == undefined)\n rev = this.$rev;\n this.mark = rev;\n };\n UndoManager.prototype.isAtBookmark = function () {\n return this.$rev === this.mark;\n };\n UndoManager.prototype.toJSON = function () {\n return {\n $redoStack: this.$redoStack,\n $undoStack: this.$undoStack\n };\n };\n UndoManager.prototype.fromJSON = function (json) {\n this.reset();\n this.$undoStack = json.$undoStack;\n this.$redoStack = json.$redoStack;\n };\n UndoManager.prototype.$prettyPrint = function (delta) {\n if (delta)\n return stringifyDelta(delta);\n return stringifyDelta(this.$undoStack) + \"\\n---\\n\" + stringifyDelta(this.$redoStack);\n };\n return UndoManager;\n}());\nUndoManager.prototype.hasUndo = UndoManager.prototype.canUndo;\nUndoManager.prototype.hasRedo = UndoManager.prototype.canRedo;\nUndoManager.prototype.isClean = UndoManager.prototype.isAtBookmark;\nUndoManager.prototype.markClean = UndoManager.prototype.bookmark;\nfunction rearrangeUndoStack(stack, pos) {\n for (var i = pos; i--;) {\n var deltaSet = stack[i];\n if (deltaSet && !deltaSet[0].ignore) {\n while (i < pos - 1) {\n var swapped = swapGroups(stack[i], stack[i + 1]);\n stack[i] = swapped[0];\n stack[i + 1] = swapped[1];\n i++;\n }\n return true;\n }\n }\n}\nvar Range = require(\"./range\").Range;\nvar cmp = Range.comparePoints;\nvar comparePoints = Range.comparePoints;\nfunction $updateMarkers(delta) {\n var isInsert = delta.action == \"insert\";\n var start = delta.start;\n var end = delta.end;\n var rowShift = (end.row - start.row) * (isInsert ? 1 : -1);\n var colShift = (end.column - start.column) * (isInsert ? 1 : -1);\n if (isInsert)\n end = start;\n for (var i in this.marks) {\n var point = this.marks[i];\n var cmp = comparePoints(point, start);\n if (cmp < 0) {\n continue; // delta starts after the range\n }\n if (cmp === 0) {\n if (isInsert) {\n if (point.bias == 1) {\n cmp = 1;\n }\n else {\n point.bias == -1;\n continue;\n }\n }\n }\n var cmp2 = isInsert ? cmp : comparePoints(point, end);\n if (cmp2 > 0) {\n point.row += rowShift;\n point.column += point.row == end.row ? colShift : 0;\n continue;\n }\n if (!isInsert && cmp2 <= 0) {\n point.row = start.row;\n point.column = start.column;\n if (cmp2 === 0)\n point.bias = 1;\n }\n }\n}\nfunction clonePos(pos) {\n return { row: pos.row, column: pos.column };\n}\nfunction cloneDelta(d) {\n return {\n start: clonePos(d.start),\n end: clonePos(d.end),\n action: d.action,\n lines: d.lines.slice()\n };\n}\nfunction stringifyDelta(d) {\n d = d || this;\n if (Array.isArray(d)) {\n return d.map(stringifyDelta).join(\"\\n\");\n }\n var type = \"\";\n if (d.action) {\n type = d.action == \"insert\" ? \"+\" : \"-\";\n type += \"[\" + d.lines + \"]\";\n }\n else if (d.value) {\n if (Array.isArray(d.value)) {\n type = d.value.map(stringifyRange).join(\"\\n\");\n }\n else {\n type = stringifyRange(d.value);\n }\n }\n if (d.start) {\n type += stringifyRange(d);\n }\n if (d.id || d.rev) {\n type += \"\\t(\" + (d.id || d.rev) + \")\";\n }\n return type;\n}\nfunction stringifyRange(r) {\n return r.start.row + \":\" + r.start.column\n + \"=>\" + r.end.row + \":\" + r.end.column;\n}\nfunction swap(d1, d2) {\n var i1 = d1.action == \"insert\";\n var i2 = d2.action == \"insert\";\n if (i1 && i2) {\n if (cmp(d2.start, d1.end) >= 0) {\n shift(d2, d1, -1);\n }\n else if (cmp(d2.start, d1.start) <= 0) {\n shift(d1, d2, +1);\n }\n else {\n return null;\n }\n }\n else if (i1 && !i2) {\n if (cmp(d2.start, d1.end) >= 0) {\n shift(d2, d1, -1);\n }\n else if (cmp(d2.end, d1.start) <= 0) {\n shift(d1, d2, -1);\n }\n else {\n return null;\n }\n }\n else if (!i1 && i2) {\n if (cmp(d2.start, d1.start) >= 0) {\n shift(d2, d1, +1);\n }\n else if (cmp(d2.start, d1.start) <= 0) {\n shift(d1, d2, +1);\n }\n else {\n return null;\n }\n }\n else if (!i1 && !i2) {\n if (cmp(d2.start, d1.start) >= 0) {\n shift(d2, d1, +1);\n }\n else if (cmp(d2.end, d1.start) <= 0) {\n shift(d1, d2, -1);\n }\n else {\n return null;\n }\n }\n return [d2, d1];\n}\nfunction swapGroups(ds1, ds2) {\n for (var i = ds1.length; i--;) {\n for (var j = 0; j < ds2.length; j++) {\n if (!swap(ds1[i], ds2[j])) {\n while (i < ds1.length) {\n while (j--) {\n swap(ds2[j], ds1[i]);\n }\n j = ds2.length;\n i++;\n }\n return [ds1, ds2];\n }\n }\n }\n ds1.selectionBefore = ds2.selectionBefore =\n ds1.selectionAfter = ds2.selectionAfter = null;\n return [ds2, ds1];\n}\nfunction xform(d1, c1) {\n var i1 = d1.action == \"insert\";\n var i2 = c1.action == \"insert\";\n if (i1 && i2) {\n if (cmp(d1.start, c1.start) < 0) {\n shift(c1, d1, 1);\n }\n else {\n shift(d1, c1, 1);\n }\n }\n else if (i1 && !i2) {\n if (cmp(d1.start, c1.end) >= 0) {\n shift(d1, c1, -1);\n }\n else if (cmp(d1.start, c1.start) <= 0) {\n shift(c1, d1, +1);\n }\n else {\n shift(d1, Range.fromPoints(c1.start, d1.start), -1);\n shift(c1, d1, +1);\n }\n }\n else if (!i1 && i2) {\n if (cmp(c1.start, d1.end) >= 0) {\n shift(c1, d1, -1);\n }\n else if (cmp(c1.start, d1.start) <= 0) {\n shift(d1, c1, +1);\n }\n else {\n shift(c1, Range.fromPoints(d1.start, c1.start), -1);\n shift(d1, c1, +1);\n }\n }\n else if (!i1 && !i2) {\n if (cmp(c1.start, d1.end) >= 0) {\n shift(c1, d1, -1);\n }\n else if (cmp(c1.end, d1.start) <= 0) {\n shift(d1, c1, -1);\n }\n else {\n var before, after;\n if (cmp(d1.start, c1.start) < 0) {\n before = d1;\n d1 = splitDelta(d1, c1.start);\n }\n if (cmp(d1.end, c1.end) > 0) {\n after = splitDelta(d1, c1.end);\n }\n shiftPos(c1.end, d1.start, d1.end, -1);\n if (after && !before) {\n d1.lines = after.lines;\n d1.start = after.start;\n d1.end = after.end;\n after = d1;\n }\n return [c1, before, after].filter(Boolean);\n }\n }\n return [c1, d1];\n}\nfunction shift(d1, d2, dir) {\n shiftPos(d1.start, d2.start, d2.end, dir);\n shiftPos(d1.end, d2.start, d2.end, dir);\n}\nfunction shiftPos(pos, start, end, dir) {\n if (pos.row == (dir == 1 ? start : end).row) {\n pos.column += dir * (end.column - start.column);\n }\n pos.row += dir * (end.row - start.row);\n}\nfunction splitDelta(c, pos) {\n var lines = c.lines;\n var end = c.end;\n c.end = clonePos(pos);\n var rowsBefore = c.end.row - c.start.row;\n var otherLines = lines.splice(rowsBefore, lines.length);\n var col = rowsBefore ? pos.column : pos.column - c.start.column;\n lines.push(otherLines[0].substring(0, col));\n otherLines[0] = otherLines[0].substr(col);\n var rest = {\n start: clonePos(pos),\n end: end,\n lines: otherLines,\n action: c.action\n };\n return rest;\n}\nfunction moveDeltasByOne(redoStack, d) {\n d = cloneDelta(d);\n for (var j = redoStack.length; j--;) {\n var deltaSet = redoStack[j];\n for (var i = 0; i < deltaSet.length; i++) {\n var x = deltaSet[i];\n var xformed = xform(x, d);\n d = xformed[0];\n if (xformed.length != 2) {\n if (xformed[2]) {\n deltaSet.splice(i + 1, 1, xformed[1], xformed[2]);\n i++;\n }\n else if (!xformed[1]) {\n deltaSet.splice(i, 1);\n i--;\n }\n }\n }\n if (!deltaSet.length) {\n redoStack.splice(j, 1);\n }\n }\n return redoStack;\n}\nfunction rebaseRedoStack(redoStack, deltaSets) {\n for (var i = 0; i < deltaSets.length; i++) {\n var deltas = deltaSets[i];\n for (var j = 0; j < deltas.length; j++) {\n moveDeltasByOne(redoStack, deltas[j]);\n }\n }\n}\nexports.UndoManager = UndoManager;\n\n});\n\nace.define(\"ace/edit_session/fold_line\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar FoldLine = /** @class */ (function () {\n function FoldLine(foldData, folds) {\n this.foldData = foldData;\n if (Array.isArray(folds)) {\n this.folds = folds;\n }\n else {\n folds = this.folds = [folds];\n }\n var last = folds[folds.length - 1];\n this.range = new Range(folds[0].start.row, folds[0].start.column, last.end.row, last.end.column);\n this.start = this.range.start;\n this.end = this.range.end;\n this.folds.forEach(function (fold) {\n fold.setFoldLine(this);\n }, this);\n }\n FoldLine.prototype.shiftRow = function (shift) {\n this.start.row += shift;\n this.end.row += shift;\n this.folds.forEach(function (fold) {\n fold.start.row += shift;\n fold.end.row += shift;\n });\n };\n FoldLine.prototype.addFold = function (fold) {\n if (fold.sameRow) {\n if (fold.start.row < this.startRow || fold.endRow > this.endRow) {\n throw new Error(\"Can't add a fold to this FoldLine as it has no connection\");\n }\n this.folds.push(fold);\n this.folds.sort(function (a, b) {\n return -a.range.compareEnd(b.start.row, b.start.column);\n });\n if (this.range.compareEnd(fold.start.row, fold.start.column) > 0) {\n this.end.row = fold.end.row;\n this.end.column = fold.end.column;\n }\n else if (this.range.compareStart(fold.end.row, fold.end.column) < 0) {\n this.start.row = fold.start.row;\n this.start.column = fold.start.column;\n }\n }\n else if (fold.start.row == this.end.row) {\n this.folds.push(fold);\n this.end.row = fold.end.row;\n this.end.column = fold.end.column;\n }\n else if (fold.end.row == this.start.row) {\n this.folds.unshift(fold);\n this.start.row = fold.start.row;\n this.start.column = fold.start.column;\n }\n else {\n throw new Error(\"Trying to add fold to FoldRow that doesn't have a matching row\");\n }\n fold.foldLine = this;\n };\n FoldLine.prototype.containsRow = function (row) {\n return row >= this.start.row && row <= this.end.row;\n };\n FoldLine.prototype.walk = function (callback, endRow, endColumn) {\n var lastEnd = 0, folds = this.folds, fold, cmp, stop, isNewRow = true;\n if (endRow == null) {\n endRow = this.end.row;\n endColumn = this.end.column;\n }\n for (var i = 0; i < folds.length; i++) {\n fold = folds[i];\n cmp = fold.range.compareStart(endRow, endColumn);\n if (cmp == -1) {\n callback(null, endRow, endColumn, lastEnd, isNewRow);\n return;\n }\n stop = callback(null, fold.start.row, fold.start.column, lastEnd, isNewRow);\n stop = !stop && callback(fold.placeholder, fold.start.row, fold.start.column, lastEnd);\n if (stop || cmp === 0) {\n return;\n }\n isNewRow = !fold.sameRow;\n lastEnd = fold.end.column;\n }\n callback(null, endRow, endColumn, lastEnd, isNewRow);\n };\n FoldLine.prototype.getNextFoldTo = function (row, column) {\n var fold, cmp;\n for (var i = 0; i < this.folds.length; i++) {\n fold = this.folds[i];\n cmp = fold.range.compareEnd(row, column);\n if (cmp == -1) {\n return {\n fold: fold,\n kind: \"after\"\n };\n }\n else if (cmp === 0) {\n return {\n fold: fold,\n kind: \"inside\"\n };\n }\n }\n return null;\n };\n FoldLine.prototype.addRemoveChars = function (row, column, len) {\n var ret = this.getNextFoldTo(row, column), fold, folds;\n if (ret) {\n fold = ret.fold;\n if (ret.kind == \"inside\"\n && fold.start.column != column\n && fold.start.row != row) {\n window.console && window.console.log(row, column, fold);\n }\n else if (fold.start.row == row) {\n folds = this.folds;\n var i = folds.indexOf(fold);\n if (i === 0) {\n this.start.column += len;\n }\n for (i; i < folds.length; i++) {\n fold = folds[i];\n fold.start.column += len;\n if (!fold.sameRow) {\n return;\n }\n fold.end.column += len;\n }\n this.end.column += len;\n }\n }\n };\n FoldLine.prototype.split = function (row, column) {\n var pos = this.getNextFoldTo(row, column);\n if (!pos || pos.kind == \"inside\")\n return null;\n var fold = pos.fold;\n var folds = this.folds;\n var foldData = this.foldData;\n var i = folds.indexOf(fold);\n var foldBefore = folds[i - 1];\n this.end.row = foldBefore.end.row;\n this.end.column = foldBefore.end.column;\n folds = folds.splice(i, folds.length - i);\n var newFoldLine = new FoldLine(foldData, folds);\n foldData.splice(foldData.indexOf(this) + 1, 0, newFoldLine);\n return newFoldLine;\n };\n FoldLine.prototype.merge = function (foldLineNext) {\n var folds = foldLineNext.folds;\n for (var i = 0; i < folds.length; i++) {\n this.addFold(folds[i]);\n }\n var foldData = this.foldData;\n foldData.splice(foldData.indexOf(foldLineNext), 1);\n };\n FoldLine.prototype.toString = function () {\n var ret = [this.range.toString() + \": [\"];\n this.folds.forEach(function (fold) {\n ret.push(\" \" + fold.toString());\n });\n ret.push(\"]\");\n return ret.join(\"\\n\");\n };\n FoldLine.prototype.idxToPosition = function (idx) {\n var lastFoldEndColumn = 0;\n for (var i = 0; i < this.folds.length; i++) {\n var fold = this.folds[i];\n idx -= fold.start.column - lastFoldEndColumn;\n if (idx < 0) {\n return {\n row: fold.start.row,\n column: fold.start.column + idx\n };\n }\n idx -= fold.placeholder.length;\n if (idx < 0) {\n return fold.start;\n }\n lastFoldEndColumn = fold.end.column;\n }\n return {\n row: this.end.row,\n column: this.end.column + idx\n };\n };\n return FoldLine;\n}());\nexports.FoldLine = FoldLine;\n\n});\n\nace.define(\"ace/range_list\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"./range\").Range;\nvar comparePoints = Range.comparePoints;\nvar RangeList = /** @class */ (function () {\n function RangeList() {\n this.ranges = [];\n this.$bias = 1;\n }\n RangeList.prototype.pointIndex = function (pos, excludeEdges, startIndex) {\n var list = this.ranges;\n for (var i = startIndex || 0; i < list.length; i++) {\n var range = list[i];\n var cmpEnd = comparePoints(pos, range.end);\n if (cmpEnd > 0)\n continue;\n var cmpStart = comparePoints(pos, range.start);\n if (cmpEnd === 0)\n return excludeEdges && cmpStart !== 0 ? -i - 2 : i;\n if (cmpStart > 0 || (cmpStart === 0 && !excludeEdges))\n return i;\n return -i - 1;\n }\n return -i - 1;\n };\n RangeList.prototype.add = function (range) {\n var excludeEdges = !range.isEmpty();\n var startIndex = this.pointIndex(range.start, excludeEdges);\n if (startIndex < 0)\n startIndex = -startIndex - 1;\n var endIndex = this.pointIndex(range.end, excludeEdges, startIndex);\n if (endIndex < 0)\n endIndex = -endIndex - 1;\n else\n endIndex++;\n return this.ranges.splice(startIndex, endIndex - startIndex, range);\n };\n RangeList.prototype.addList = function (list) {\n var removed = [];\n for (var i = list.length; i--;) {\n removed.push.apply(removed, this.add(list[i]));\n }\n return removed;\n };\n RangeList.prototype.substractPoint = function (pos) {\n var i = this.pointIndex(pos);\n if (i >= 0)\n return this.ranges.splice(i, 1);\n };\n RangeList.prototype.merge = function () {\n var removed = [];\n var list = this.ranges;\n list = list.sort(function (a, b) {\n return comparePoints(a.start, b.start);\n });\n var next = list[0], range;\n for (var i = 1; i < list.length; i++) {\n range = next;\n next = list[i];\n var cmp = comparePoints(range.end, next.start);\n if (cmp < 0)\n continue;\n if (cmp == 0 && !range.isEmpty() && !next.isEmpty())\n continue;\n if (comparePoints(range.end, next.end) < 0) {\n range.end.row = next.end.row;\n range.end.column = next.end.column;\n }\n list.splice(i, 1);\n removed.push(next);\n next = range;\n i--;\n }\n this.ranges = list;\n return removed;\n };\n RangeList.prototype.contains = function (row, column) {\n return this.pointIndex({ row: row, column: column }) >= 0;\n };\n RangeList.prototype.containsPoint = function (pos) {\n return this.pointIndex(pos) >= 0;\n };\n RangeList.prototype.rangeAtPoint = function (pos) {\n var i = this.pointIndex(pos);\n if (i >= 0)\n return this.ranges[i];\n };\n RangeList.prototype.clipRows = function (startRow, endRow) {\n var list = this.ranges;\n if (list[0].start.row > endRow || list[list.length - 1].start.row < startRow)\n return [];\n var startIndex = this.pointIndex({ row: startRow, column: 0 });\n if (startIndex < 0)\n startIndex = -startIndex - 1;\n var endIndex = this.pointIndex({ row: endRow, column: 0 }, startIndex);\n if (endIndex < 0)\n endIndex = -endIndex - 1;\n var clipped = [];\n for (var i = startIndex; i < endIndex; i++) {\n clipped.push(list[i]);\n }\n return clipped;\n };\n RangeList.prototype.removeAll = function () {\n return this.ranges.splice(0, this.ranges.length);\n };\n RangeList.prototype.attach = function (session) {\n if (this.session)\n this.detach();\n this.session = session;\n this.onChange = this.$onChange.bind(this);\n this.session.on('change', this.onChange);\n };\n RangeList.prototype.detach = function () {\n if (!this.session)\n return;\n this.session.removeListener('change', this.onChange);\n this.session = null;\n };\n RangeList.prototype.$onChange = function (delta) {\n var start = delta.start;\n var end = delta.end;\n var startRow = start.row;\n var endRow = end.row;\n var ranges = this.ranges;\n for (var i = 0, n = ranges.length; i < n; i++) {\n var r = ranges[i];\n if (r.end.row >= startRow)\n break;\n }\n if (delta.action == \"insert\") {\n var lineDif = endRow - startRow;\n var colDiff = -start.column + end.column;\n for (; i < n; i++) {\n var r = ranges[i];\n if (r.start.row > startRow)\n break;\n if (r.start.row == startRow && r.start.column >= start.column) {\n if (r.start.column == start.column && this.$bias <= 0) {\n }\n else {\n r.start.column += colDiff;\n r.start.row += lineDif;\n }\n }\n if (r.end.row == startRow && r.end.column >= start.column) {\n if (r.end.column == start.column && this.$bias < 0) {\n continue;\n }\n if (r.end.column == start.column && colDiff > 0 && i < n - 1) {\n if (r.end.column > r.start.column && r.end.column == ranges[i + 1].start.column)\n r.end.column -= colDiff;\n }\n r.end.column += colDiff;\n r.end.row += lineDif;\n }\n }\n }\n else {\n var lineDif = startRow - endRow;\n var colDiff = start.column - end.column;\n for (; i < n; i++) {\n var r = ranges[i];\n if (r.start.row > endRow)\n break;\n if (r.end.row < endRow\n && (startRow < r.end.row\n || startRow == r.end.row && start.column < r.end.column)) {\n r.end.row = startRow;\n r.end.column = start.column;\n }\n else if (r.end.row == endRow) {\n if (r.end.column <= end.column) {\n if (lineDif || r.end.column > start.column) {\n r.end.column = start.column;\n r.end.row = start.row;\n }\n }\n else {\n r.end.column += colDiff;\n r.end.row += lineDif;\n }\n }\n else if (r.end.row > endRow) {\n r.end.row += lineDif;\n }\n if (r.start.row < endRow\n && (startRow < r.start.row\n || startRow == r.start.row && start.column < r.start.column)) {\n r.start.row = startRow;\n r.start.column = start.column;\n }\n else if (r.start.row == endRow) {\n if (r.start.column <= end.column) {\n if (lineDif || r.start.column > start.column) {\n r.start.column = start.column;\n r.start.row = start.row;\n }\n }\n else {\n r.start.column += colDiff;\n r.start.row += lineDif;\n }\n }\n else if (r.start.row > endRow) {\n r.start.row += lineDif;\n }\n }\n }\n if (lineDif != 0 && i < n) {\n for (; i < n; i++) {\n var r = ranges[i];\n r.start.row += lineDif;\n r.end.row += lineDif;\n }\n }\n };\n return RangeList;\n}());\nRangeList.prototype.comparePoints = comparePoints;\nexports.RangeList = RangeList;\n\n});\n\nace.define(\"ace/edit_session/fold\",[\"require\",\"exports\",\"module\",\"ace/range_list\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar RangeList = require(\"../range_list\").RangeList;\nvar Fold = /** @class */ (function (_super) {\n __extends(Fold, _super);\n function Fold(range, placeholder) {\n var _this = _super.call(this) || this;\n _this.foldLine = null;\n _this.placeholder = placeholder;\n _this.range = range;\n _this.start = range.start;\n _this.end = range.end;\n _this.sameRow = range.start.row == range.end.row;\n _this.subFolds = _this.ranges = [];\n return _this;\n }\n Fold.prototype.toString = function () {\n return '\"' + this.placeholder + '\" ' + this.range.toString();\n };\n Fold.prototype.setFoldLine = function (foldLine) {\n this.foldLine = foldLine;\n this.subFolds.forEach(function (fold) {\n fold.setFoldLine(foldLine);\n });\n };\n Fold.prototype.clone = function () {\n var range = this.range.clone();\n var fold = new Fold(range, this.placeholder);\n this.subFolds.forEach(function (subFold) {\n fold.subFolds.push(subFold.clone());\n });\n fold.collapseChildren = this.collapseChildren;\n return fold;\n };\n Fold.prototype.addSubFold = function (fold) {\n if (this.range.isEqual(fold))\n return;\n consumeRange(fold, this.start);\n var row = fold.start.row, column = fold.start.column;\n for (var i = 0, cmp = -1; i < this.subFolds.length; i++) {\n cmp = this.subFolds[i].range.compare(row, column);\n if (cmp != 1)\n break;\n }\n var afterStart = this.subFolds[i];\n var firstConsumed = 0;\n if (cmp == 0) {\n if (afterStart.range.containsRange(fold))\n return afterStart.addSubFold(fold);\n else\n firstConsumed = 1;\n }\n var row = fold.range.end.row, column = fold.range.end.column;\n for (var j = i, cmp = -1; j < this.subFolds.length; j++) {\n cmp = this.subFolds[j].range.compare(row, column);\n if (cmp != 1)\n break;\n }\n if (cmp == 0)\n j++;\n var consumedFolds = this.subFolds.splice(i, j - i, fold);\n var last = cmp == 0 ? consumedFolds.length - 1 : consumedFolds.length;\n for (var k = firstConsumed; k < last; k++) {\n fold.addSubFold(consumedFolds[k]);\n }\n fold.setFoldLine(this.foldLine);\n return fold;\n };\n Fold.prototype.restoreRange = function (range) {\n return restoreRange(range, this.start);\n };\n return Fold;\n}(RangeList));\nfunction consumePoint(point, anchor) {\n point.row -= anchor.row;\n if (point.row == 0)\n point.column -= anchor.column;\n}\nfunction consumeRange(range, anchor) {\n consumePoint(range.start, anchor);\n consumePoint(range.end, anchor);\n}\nfunction restorePoint(point, anchor) {\n if (point.row == 0)\n point.column += anchor.column;\n point.row += anchor.row;\n}\nfunction restoreRange(range, anchor) {\n restorePoint(range.start, anchor);\n restorePoint(range.end, anchor);\n}\nexports.Fold = Fold;\n\n});\n\nace.define(\"ace/edit_session/folding\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/edit_session/fold_line\",\"ace/edit_session/fold\",\"ace/token_iterator\",\"ace/mouse/mouse_event\"], function(require, exports, module){// @ts-nocheck\n\"use strict\";\nvar Range = require(\"../range\").Range;\nvar FoldLine = require(\"./fold_line\").FoldLine;\nvar Fold = require(\"./fold\").Fold;\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar MouseEvent = require(\"../mouse/mouse_event\").MouseEvent;\nfunction Folding() {\n this.getFoldAt = function (row, column, side) {\n var foldLine = this.getFoldLine(row);\n if (!foldLine)\n return null;\n var folds = foldLine.folds;\n for (var i = 0; i < folds.length; i++) {\n var range = folds[i].range;\n if (range.contains(row, column)) {\n if (side == 1 && range.isEnd(row, column) && !range.isEmpty()) {\n continue;\n }\n else if (side == -1 && range.isStart(row, column) && !range.isEmpty()) {\n continue;\n }\n return folds[i];\n }\n }\n };\n this.getFoldsInRange = function (range) {\n var start = range.start;\n var end = range.end;\n var foldLines = this.$foldData;\n var foundFolds = [];\n start.column += 1;\n end.column -= 1;\n for (var i = 0; i < foldLines.length; i++) {\n var cmp = foldLines[i].range.compareRange(range);\n if (cmp == 2) {\n continue;\n }\n else if (cmp == -2) {\n break;\n }\n var folds = foldLines[i].folds;\n for (var j = 0; j < folds.length; j++) {\n var fold = folds[j];\n cmp = fold.range.compareRange(range);\n if (cmp == -2) {\n break;\n }\n else if (cmp == 2) {\n continue;\n }\n else \n if (cmp == 42) {\n break;\n }\n foundFolds.push(fold);\n }\n }\n start.column -= 1;\n end.column += 1;\n return foundFolds;\n };\n this.getFoldsInRangeList = function (ranges) {\n if (Array.isArray(ranges)) {\n var folds = [];\n ranges.forEach(function (range) {\n folds = folds.concat(this.getFoldsInRange(range));\n }, this);\n }\n else {\n var folds = this.getFoldsInRange(ranges);\n }\n return folds;\n };\n this.getAllFolds = function () {\n var folds = [];\n var foldLines = this.$foldData;\n for (var i = 0; i < foldLines.length; i++)\n for (var j = 0; j < foldLines[i].folds.length; j++)\n folds.push(foldLines[i].folds[j]);\n return folds;\n };\n this.getFoldStringAt = function (row, column, trim, foldLine) {\n foldLine = foldLine || this.getFoldLine(row);\n if (!foldLine)\n return null;\n var lastFold = {\n end: { column: 0 }\n };\n var str, fold;\n for (var i = 0; i < foldLine.folds.length; i++) {\n fold = foldLine.folds[i];\n var cmp = fold.range.compareEnd(row, column);\n if (cmp == -1) {\n str = this\n .getLine(fold.start.row)\n .substring(lastFold.end.column, fold.start.column);\n break;\n }\n else if (cmp === 0) {\n return null;\n }\n lastFold = fold;\n }\n if (!str)\n str = this.getLine(fold.start.row).substring(lastFold.end.column);\n if (trim == -1)\n return str.substring(0, column - lastFold.end.column);\n else if (trim == 1)\n return str.substring(column - lastFold.end.column);\n else\n return str;\n };\n this.getFoldLine = function (docRow, startFoldLine) {\n var foldData = this.$foldData;\n var i = 0;\n if (startFoldLine)\n i = foldData.indexOf(startFoldLine);\n if (i == -1)\n i = 0;\n for (i; i < foldData.length; i++) {\n var foldLine = foldData[i];\n if (foldLine.start.row <= docRow && foldLine.end.row >= docRow) {\n return foldLine;\n }\n else if (foldLine.end.row > docRow) {\n return null;\n }\n }\n return null;\n };\n this.getNextFoldLine = function (docRow, startFoldLine) {\n var foldData = this.$foldData;\n var i = 0;\n if (startFoldLine)\n i = foldData.indexOf(startFoldLine);\n if (i == -1)\n i = 0;\n for (i; i < foldData.length; i++) {\n var foldLine = foldData[i];\n if (foldLine.end.row >= docRow) {\n return foldLine;\n }\n }\n return null;\n };\n this.getFoldedRowCount = function (first, last) {\n var foldData = this.$foldData, rowCount = last - first + 1;\n for (var i = 0; i < foldData.length; i++) {\n var foldLine = foldData[i], end = foldLine.end.row, start = foldLine.start.row;\n if (end >= last) {\n if (start < last) {\n if (start >= first)\n rowCount -= last - start;\n else\n rowCount = 0; // in one fold\n }\n break;\n }\n else if (end >= first) {\n if (start >= first) // fold inside range\n rowCount -= end - start;\n else\n rowCount -= end - first + 1;\n }\n }\n return rowCount;\n };\n this.$addFoldLine = function (foldLine) {\n this.$foldData.push(foldLine);\n this.$foldData.sort(function (a, b) {\n return a.start.row - b.start.row;\n });\n return foldLine;\n };\n this.addFold = function (placeholder, range) {\n var foldData = this.$foldData;\n var added = false;\n var fold;\n if (placeholder instanceof Fold)\n fold = placeholder;\n else {\n fold = new Fold(range, placeholder);\n fold.collapseChildren = range.collapseChildren;\n }\n this.$clipRangeToDocument(fold.range);\n var startRow = fold.start.row;\n var startColumn = fold.start.column;\n var endRow = fold.end.row;\n var endColumn = fold.end.column;\n var startFold = this.getFoldAt(startRow, startColumn, 1);\n var endFold = this.getFoldAt(endRow, endColumn, -1);\n if (startFold && endFold == startFold)\n return startFold.addSubFold(fold);\n if (startFold && !startFold.range.isStart(startRow, startColumn))\n this.removeFold(startFold);\n if (endFold && !endFold.range.isEnd(endRow, endColumn))\n this.removeFold(endFold);\n var folds = this.getFoldsInRange(fold.range);\n if (folds.length > 0) {\n this.removeFolds(folds);\n if (!fold.collapseChildren) {\n folds.forEach(function (subFold) {\n fold.addSubFold(subFold);\n });\n }\n }\n for (var i = 0; i < foldData.length; i++) {\n var foldLine = foldData[i];\n if (endRow == foldLine.start.row) {\n foldLine.addFold(fold);\n added = true;\n break;\n }\n else if (startRow == foldLine.end.row) {\n foldLine.addFold(fold);\n added = true;\n if (!fold.sameRow) {\n var foldLineNext = foldData[i + 1];\n if (foldLineNext && foldLineNext.start.row == endRow) {\n foldLine.merge(foldLineNext);\n break;\n }\n }\n break;\n }\n else if (endRow <= foldLine.start.row) {\n break;\n }\n }\n if (!added)\n foldLine = this.$addFoldLine(new FoldLine(this.$foldData, fold));\n if (this.$useWrapMode)\n this.$updateWrapData(foldLine.start.row, foldLine.start.row);\n else\n this.$updateRowLengthCache(foldLine.start.row, foldLine.start.row);\n this.$modified = true;\n this._signal(\"changeFold\", { data: fold, action: \"add\" });\n return fold;\n };\n this.addFolds = function (folds) {\n folds.forEach(function (fold) {\n this.addFold(fold);\n }, this);\n };\n this.removeFold = function (fold) {\n var foldLine = fold.foldLine;\n var startRow = foldLine.start.row;\n var endRow = foldLine.end.row;\n var foldLines = this.$foldData;\n var folds = foldLine.folds;\n if (folds.length == 1) {\n foldLines.splice(foldLines.indexOf(foldLine), 1);\n }\n else \n if (foldLine.range.isEnd(fold.end.row, fold.end.column)) {\n folds.pop();\n foldLine.end.row = folds[folds.length - 1].end.row;\n foldLine.end.column = folds[folds.length - 1].end.column;\n }\n else \n if (foldLine.range.isStart(fold.start.row, fold.start.column)) {\n folds.shift();\n foldLine.start.row = folds[0].start.row;\n foldLine.start.column = folds[0].start.column;\n }\n else \n if (fold.sameRow) {\n folds.splice(folds.indexOf(fold), 1);\n }\n else \n {\n var newFoldLine = foldLine.split(fold.start.row, fold.start.column);\n folds = newFoldLine.folds;\n folds.shift();\n newFoldLine.start.row = folds[0].start.row;\n newFoldLine.start.column = folds[0].start.column;\n }\n if (!this.$updating) {\n if (this.$useWrapMode)\n this.$updateWrapData(startRow, endRow);\n else\n this.$updateRowLengthCache(startRow, endRow);\n }\n this.$modified = true;\n this._signal(\"changeFold\", { data: fold, action: \"remove\" });\n };\n this.removeFolds = function (folds) {\n var cloneFolds = [];\n for (var i = 0; i < folds.length; i++) {\n cloneFolds.push(folds[i]);\n }\n cloneFolds.forEach(function (fold) {\n this.removeFold(fold);\n }, this);\n this.$modified = true;\n };\n this.expandFold = function (fold) {\n this.removeFold(fold);\n fold.subFolds.forEach(function (subFold) {\n fold.restoreRange(subFold);\n this.addFold(subFold);\n }, this);\n if (fold.collapseChildren > 0) {\n this.foldAll(fold.start.row + 1, fold.end.row, fold.collapseChildren - 1);\n }\n fold.subFolds = [];\n };\n this.expandFolds = function (folds) {\n folds.forEach(function (fold) {\n this.expandFold(fold);\n }, this);\n };\n this.unfold = function (location, expandInner) {\n var range, folds;\n if (location == null) {\n range = new Range(0, 0, this.getLength(), 0);\n if (expandInner == null)\n expandInner = true;\n }\n else if (typeof location == \"number\") {\n range = new Range(location, 0, location, this.getLine(location).length);\n }\n else if (\"row\" in location) {\n range = Range.fromPoints(location, location);\n }\n else if (Array.isArray(location)) {\n folds = [];\n location.forEach(function (range) {\n folds = folds.concat(this.unfold(range));\n }, this);\n return folds;\n }\n else {\n range = location;\n }\n folds = this.getFoldsInRangeList(range);\n var outermostFolds = folds;\n while (folds.length == 1\n && Range.comparePoints(folds[0].start, range.start) < 0\n && Range.comparePoints(folds[0].end, range.end) > 0) {\n this.expandFolds(folds);\n folds = this.getFoldsInRangeList(range);\n }\n if (expandInner != false) {\n this.removeFolds(folds);\n }\n else {\n this.expandFolds(folds);\n }\n if (outermostFolds.length)\n return outermostFolds;\n };\n this.isRowFolded = function (docRow, startFoldRow) {\n return !!this.getFoldLine(docRow, startFoldRow);\n };\n this.getRowFoldEnd = function (docRow, startFoldRow) {\n var foldLine = this.getFoldLine(docRow, startFoldRow);\n return foldLine ? foldLine.end.row : docRow;\n };\n this.getRowFoldStart = function (docRow, startFoldRow) {\n var foldLine = this.getFoldLine(docRow, startFoldRow);\n return foldLine ? foldLine.start.row : docRow;\n };\n this.getFoldDisplayLine = function (foldLine, endRow, endColumn, startRow, startColumn) {\n if (startRow == null)\n startRow = foldLine.start.row;\n if (startColumn == null)\n startColumn = 0;\n if (endRow == null)\n endRow = foldLine.end.row;\n if (endColumn == null)\n endColumn = this.getLine(endRow).length;\n var doc = this.doc;\n var textLine = \"\";\n foldLine.walk(function (placeholder, row, column, lastColumn) {\n if (row < startRow)\n return;\n if (row == startRow) {\n if (column < startColumn)\n return;\n lastColumn = Math.max(startColumn, lastColumn);\n }\n if (placeholder != null) {\n textLine += placeholder;\n }\n else {\n textLine += doc.getLine(row).substring(lastColumn, column);\n }\n }, endRow, endColumn);\n return textLine;\n };\n this.getDisplayLine = function (row, endColumn, startRow, startColumn) {\n var foldLine = this.getFoldLine(row);\n if (!foldLine) {\n var line;\n line = this.doc.getLine(row);\n return line.substring(startColumn || 0, endColumn || line.length);\n }\n else {\n return this.getFoldDisplayLine(foldLine, row, endColumn, startRow, startColumn);\n }\n };\n this.$cloneFoldData = function () {\n var fd = [];\n fd = this.$foldData.map(function (foldLine) {\n var folds = foldLine.folds.map(function (fold) {\n return fold.clone();\n });\n return new FoldLine(fd, folds);\n });\n return fd;\n };\n this.toggleFold = function (tryToUnfold) {\n var selection = this.selection;\n var range = selection.getRange();\n var fold;\n var bracketPos;\n if (range.isEmpty()) {\n var cursor = range.start;\n fold = this.getFoldAt(cursor.row, cursor.column);\n if (fold) {\n this.expandFold(fold);\n return;\n }\n else if (bracketPos = this.findMatchingBracket(cursor)) {\n if (range.comparePoint(bracketPos) == 1) {\n range.end = bracketPos;\n }\n else {\n range.start = bracketPos;\n range.start.column++;\n range.end.column--;\n }\n }\n else if (bracketPos = this.findMatchingBracket({ row: cursor.row, column: cursor.column + 1 })) {\n if (range.comparePoint(bracketPos) == 1)\n range.end = bracketPos;\n else\n range.start = bracketPos;\n range.start.column++;\n }\n else {\n range = this.getCommentFoldRange(cursor.row, cursor.column) || range;\n }\n }\n else {\n var folds = this.getFoldsInRange(range);\n if (tryToUnfold && folds.length) {\n this.expandFolds(folds);\n return;\n }\n else if (folds.length == 1) {\n fold = folds[0];\n }\n }\n if (!fold)\n fold = this.getFoldAt(range.start.row, range.start.column);\n if (fold && fold.range.toString() == range.toString()) {\n this.expandFold(fold);\n return;\n }\n var placeholder = \"...\";\n if (!range.isMultiLine()) {\n placeholder = this.getTextRange(range);\n if (placeholder.length < 4)\n return;\n placeholder = placeholder.trim().substring(0, 2) + \"..\";\n }\n this.addFold(placeholder, range);\n };\n this.getCommentFoldRange = function (row, column, dir) {\n var iterator = new TokenIterator(this, row, column);\n var token = iterator.getCurrentToken();\n var type = token && token.type;\n if (token && /^comment|string/.test(type)) {\n type = type.match(/comment|string/)[0];\n if (type == \"comment\")\n type += \"|doc-start|\\\\.doc\";\n var re = new RegExp(type);\n var range = new Range();\n if (dir != 1) {\n do {\n token = iterator.stepBackward();\n } while (token && re.test(token.type));\n token = iterator.stepForward();\n }\n range.start.row = iterator.getCurrentTokenRow();\n range.start.column = iterator.getCurrentTokenColumn() + token.value.length;\n iterator = new TokenIterator(this, row, column);\n var initState = this.getState(iterator.$row);\n if (dir != -1) {\n var lastRow = -1;\n do {\n token = iterator.stepForward();\n if (lastRow == -1) {\n var state = this.getState(iterator.$row);\n if (initState.toString() !== state.toString())\n lastRow = iterator.$row;\n }\n else if (iterator.$row > lastRow) {\n break;\n }\n } while (token && re.test(token.type));\n token = iterator.stepBackward();\n }\n else\n token = iterator.getCurrentToken();\n range.end.row = iterator.getCurrentTokenRow();\n range.end.column = iterator.getCurrentTokenColumn();\n return range;\n }\n };\n this.foldAll = function (startRow, endRow, depth, test) {\n if (depth == undefined)\n depth = 100000; // JSON.stringify doesn't hanle Infinity\n var foldWidgets = this.foldWidgets;\n if (!foldWidgets)\n return; // mode doesn't support folding\n endRow = endRow || this.getLength();\n startRow = startRow || 0;\n for (var row = startRow; row < endRow; row++) {\n if (foldWidgets[row] == null)\n foldWidgets[row] = this.getFoldWidget(row);\n if (foldWidgets[row] != \"start\")\n continue;\n if (test && !test(row))\n continue;\n var range = this.getFoldWidgetRange(row);\n if (range && range.isMultiLine()\n && range.end.row <= endRow\n && range.start.row >= startRow) {\n row = range.end.row;\n range.collapseChildren = depth;\n this.addFold(\"...\", range);\n }\n }\n };\n this.foldToLevel = function (level) {\n this.foldAll();\n while (level-- > 0)\n this.unfold(null, false);\n };\n this.foldAllComments = function () {\n var session = this;\n this.foldAll(null, null, null, function (row) {\n var tokens = session.getTokens(row);\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n if (token.type == \"text\" && /^\\s+$/.test(token.value))\n continue;\n if (/comment/.test(token.type))\n return true;\n return false;\n }\n });\n };\n this.$foldStyles = {\n \"manual\": 1,\n \"markbegin\": 1,\n \"markbeginend\": 1\n };\n this.$foldStyle = \"markbegin\";\n this.setFoldStyle = function (style) {\n if (!this.$foldStyles[style])\n throw new Error(\"invalid fold style: \" + style + \"[\" + Object.keys(this.$foldStyles).join(\", \") + \"]\");\n if (this.$foldStyle == style)\n return;\n this.$foldStyle = style;\n if (style == \"manual\")\n this.unfold();\n var mode = this.$foldMode;\n this.$setFolding(null);\n this.$setFolding(mode);\n };\n this.$setFolding = function (foldMode) {\n if (this.$foldMode == foldMode)\n return;\n this.$foldMode = foldMode;\n this.off('change', this.$updateFoldWidgets);\n this.off('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n this._signal(\"changeAnnotation\");\n if (!foldMode || this.$foldStyle == \"manual\") {\n this.foldWidgets = null;\n return;\n }\n this.foldWidgets = [];\n this.getFoldWidget = foldMode.getFoldWidget.bind(foldMode, this, this.$foldStyle);\n this.getFoldWidgetRange = foldMode.getFoldWidgetRange.bind(foldMode, this, this.$foldStyle);\n this.$updateFoldWidgets = this.updateFoldWidgets.bind(this);\n this.$tokenizerUpdateFoldWidgets = this.tokenizerUpdateFoldWidgets.bind(this);\n this.on('change', this.$updateFoldWidgets);\n this.on('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n };\n this.getParentFoldRangeData = function (row, ignoreCurrent) {\n var fw = this.foldWidgets;\n if (!fw || (ignoreCurrent && fw[row]))\n return {};\n var i = row - 1, firstRange;\n while (i >= 0) {\n var c = fw[i];\n if (c == null)\n c = fw[i] = this.getFoldWidget(i);\n if (c == \"start\") {\n var range = this.getFoldWidgetRange(i);\n if (!firstRange)\n firstRange = range;\n if (range && range.end.row >= row)\n break;\n }\n i--;\n }\n return {\n range: i !== -1 && range,\n firstRange: firstRange\n };\n };\n this.onFoldWidgetClick = function (row, e) {\n if (e instanceof MouseEvent)\n e = e.domEvent;\n var options = {\n children: e.shiftKey,\n all: e.ctrlKey || e.metaKey,\n siblings: e.altKey\n };\n var range = this.$toggleFoldWidget(row, options);\n if (!range) {\n var el = (e.target || e.srcElement);\n if (el && /ace_fold-widget/.test(el.className))\n el.className += \" ace_invalid\";\n }\n };\n this.$toggleFoldWidget = function (row, options) {\n if (!this.getFoldWidget)\n return;\n var type = this.getFoldWidget(row);\n var line = this.getLine(row);\n var dir = type === \"end\" ? -1 : 1;\n var fold = this.getFoldAt(row, dir === -1 ? 0 : line.length, dir);\n if (fold) {\n if (options.children || options.all)\n this.removeFold(fold);\n else\n this.expandFold(fold);\n return fold;\n }\n var range = this.getFoldWidgetRange(row, true);\n if (range && !range.isMultiLine()) {\n fold = this.getFoldAt(range.start.row, range.start.column, 1);\n if (fold && range.isEqual(fold.range)) {\n this.removeFold(fold);\n return fold;\n }\n }\n if (options.siblings) {\n var data = this.getParentFoldRangeData(row);\n if (data.range) {\n var startRow = data.range.start.row + 1;\n var endRow = data.range.end.row;\n }\n this.foldAll(startRow, endRow, options.all ? 10000 : 0);\n }\n else if (options.children) {\n endRow = range ? range.end.row : this.getLength();\n this.foldAll(row + 1, endRow, options.all ? 10000 : 0);\n }\n else if (range) {\n if (options.all)\n range.collapseChildren = 10000;\n this.addFold(\"...\", range);\n }\n return range;\n };\n this.toggleFoldWidget = function (toggleParent) {\n var row = this.selection.getCursor().row;\n row = this.getRowFoldStart(row);\n var range = this.$toggleFoldWidget(row, {});\n if (range)\n return;\n var data = this.getParentFoldRangeData(row, true);\n range = data.range || data.firstRange;\n if (range) {\n row = range.start.row;\n var fold = this.getFoldAt(row, this.getLine(row).length, 1);\n if (fold) {\n this.removeFold(fold);\n }\n else {\n this.addFold(\"...\", range);\n }\n }\n };\n this.updateFoldWidgets = function (delta) {\n var firstRow = delta.start.row;\n var len = delta.end.row - firstRow;\n if (len === 0) {\n this.foldWidgets[firstRow] = null;\n }\n else if (delta.action == 'remove') {\n this.foldWidgets.splice(firstRow, len + 1, null);\n }\n else {\n var args = Array(len + 1);\n args.unshift(firstRow, 1);\n this.foldWidgets.splice.apply(this.foldWidgets, args);\n }\n };\n this.tokenizerUpdateFoldWidgets = function (e) {\n var rows = e.data;\n if (rows.first != rows.last) {\n if (this.foldWidgets.length > rows.first)\n this.foldWidgets.splice(rows.first, this.foldWidgets.length);\n }\n };\n}\nexports.Folding = Folding;\n\n});\n\nace.define(\"ace/edit_session/bracket_match\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar Range = require(\"../range\").Range;\nfunction BracketMatch() {\n this.findMatchingBracket = function (position, chr) {\n if (position.column == 0)\n return null;\n var charBeforeCursor = chr || this.getLine(position.row).charAt(position.column - 1);\n if (charBeforeCursor == \"\")\n return null;\n var match = charBeforeCursor.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n if (!match)\n return null;\n if (match[1])\n return this.$findClosingBracket(match[1], position);\n else\n return this.$findOpeningBracket(match[2], position);\n };\n this.getBracketRange = function (pos) {\n var line = this.getLine(pos.row);\n var before = true, range;\n var chr = line.charAt(pos.column - 1);\n var match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n if (!match) {\n chr = line.charAt(pos.column);\n pos = { row: pos.row, column: pos.column + 1 };\n match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n before = false;\n }\n if (!match)\n return null;\n if (match[1]) {\n var bracketPos = this.$findClosingBracket(match[1], pos);\n if (!bracketPos)\n return null;\n range = Range.fromPoints(pos, bracketPos);\n if (!before) {\n range.end.column++;\n range.start.column--;\n }\n range.cursor = range.end;\n }\n else {\n var bracketPos = this.$findOpeningBracket(match[2], pos);\n if (!bracketPos)\n return null;\n range = Range.fromPoints(bracketPos, pos);\n if (!before) {\n range.start.column++;\n range.end.column--;\n }\n range.cursor = range.start;\n }\n return range;\n };\n this.getMatchingBracketRanges = function (pos, isBackwards) {\n var line = this.getLine(pos.row);\n var bracketsRegExp = /([\\(\\[\\{])|([\\)\\]\\}])/;\n var chr = !isBackwards && line.charAt(pos.column - 1);\n var match = chr && chr.match(bracketsRegExp);\n if (!match) {\n chr = (isBackwards === undefined || isBackwards) && line.charAt(pos.column);\n pos = {\n row: pos.row,\n column: pos.column + 1\n };\n match = chr && chr.match(bracketsRegExp);\n }\n if (!match)\n return null;\n var startRange = new Range(pos.row, pos.column - 1, pos.row, pos.column);\n var bracketPos = match[1] ? this.$findClosingBracket(match[1], pos)\n : this.$findOpeningBracket(match[2], pos);\n if (!bracketPos)\n return [startRange];\n var endRange = new Range(bracketPos.row, bracketPos.column, bracketPos.row, bracketPos.column + 1);\n return [startRange, endRange];\n };\n this.$brackets = {\n \")\": \"(\",\n \"(\": \")\",\n \"]\": \"[\",\n \"[\": \"]\",\n \"{\": \"}\",\n \"}\": \"{\",\n \"<\": \">\",\n \">\": \"<\"\n };\n this.$findOpeningBracket = function (bracket, position, typeRe) {\n var openBracket = this.$brackets[bracket];\n var depth = 1;\n var iterator = new TokenIterator(this, position.row, position.column);\n var token = iterator.getCurrentToken();\n if (!token)\n token = iterator.stepForward();\n if (!token)\n return;\n if (!typeRe) {\n typeRe = new RegExp(\"(\\\\.?\" +\n token.type.replace(\".\", \"\\\\.\").replace(\"rparen\", \".paren\")\n .replace(/\\b(?:end)\\b/, \"(?:start|begin|end)\")\n .replace(/-close\\b/, \"-(close|open)\")\n + \")+\");\n }\n var valueIndex = position.column - iterator.getCurrentTokenColumn() - 2;\n var value = token.value;\n while (true) {\n while (valueIndex >= 0) {\n var chr = value.charAt(valueIndex);\n if (chr == openBracket) {\n depth -= 1;\n if (depth == 0) {\n return { row: iterator.getCurrentTokenRow(),\n column: valueIndex + iterator.getCurrentTokenColumn() };\n }\n }\n else if (chr == bracket) {\n depth += 1;\n }\n valueIndex -= 1;\n }\n do {\n token = iterator.stepBackward();\n } while (token && !typeRe.test(token.type));\n if (token == null)\n break;\n value = token.value;\n valueIndex = value.length - 1;\n }\n return null;\n };\n this.$findClosingBracket = function (bracket, position, typeRe) {\n var closingBracket = this.$brackets[bracket];\n var depth = 1;\n var iterator = new TokenIterator(this, position.row, position.column);\n var token = iterator.getCurrentToken();\n if (!token)\n token = iterator.stepForward();\n if (!token)\n return;\n if (!typeRe) {\n typeRe = new RegExp(\"(\\\\.?\" +\n token.type.replace(\".\", \"\\\\.\").replace(\"lparen\", \".paren\")\n .replace(/\\b(?:start|begin)\\b/, \"(?:start|begin|end)\")\n .replace(/-open\\b/, \"-(close|open)\")\n + \")+\");\n }\n var valueIndex = position.column - iterator.getCurrentTokenColumn();\n while (true) {\n var value = token.value;\n var valueLength = value.length;\n while (valueIndex < valueLength) {\n var chr = value.charAt(valueIndex);\n if (chr == closingBracket) {\n depth -= 1;\n if (depth == 0) {\n return { row: iterator.getCurrentTokenRow(),\n column: valueIndex + iterator.getCurrentTokenColumn() };\n }\n }\n else if (chr == bracket) {\n depth += 1;\n }\n valueIndex += 1;\n }\n do {\n token = iterator.stepForward();\n } while (token && !typeRe.test(token.type));\n if (token == null)\n break;\n valueIndex = 0;\n }\n return null;\n };\n this.getMatchingTags = function (pos) {\n var iterator = new TokenIterator(this, pos.row, pos.column);\n var token = this.$findTagName(iterator);\n if (!token)\n return;\n var prevToken = iterator.stepBackward();\n if (prevToken.value === '<') {\n return this.$findClosingTag(iterator, token);\n }\n else {\n return this.$findOpeningTag(iterator, token);\n }\n };\n this.$findTagName = function (iterator) {\n var token = iterator.getCurrentToken();\n var found = false;\n var backward = false;\n if (token && token.type.indexOf('tag-name') === -1) {\n do {\n if (backward)\n token = iterator.stepBackward();\n else\n token = iterator.stepForward();\n if (token) {\n if (token.value === \"/>\") {\n backward = true;\n }\n else if (token.type.indexOf('tag-name') !== -1) {\n found = true;\n }\n }\n } while (token && !found);\n }\n return token;\n };\n this.$findClosingTag = function (iterator, token) {\n var prevToken;\n var currentTag = token.value;\n var tag = token.value;\n var depth = 0;\n var openTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1);\n token = iterator.stepForward();\n var openTagName = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + token.value.length);\n var foundOpenTagEnd = false;\n do {\n prevToken = token;\n if (prevToken.type.indexOf('tag-close') !== -1 && !foundOpenTagEnd) {\n var openTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for `>`\n foundOpenTagEnd = true;\n }\n token = iterator.stepForward();\n if (token) {\n if (token.value === '>' && !foundOpenTagEnd) {\n var openTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for `>`\n foundOpenTagEnd = true;\n }\n if (token.type.indexOf('tag-name') !== -1) {\n currentTag = token.value;\n if (tag === currentTag) {\n if (prevToken.value === '<') {\n depth++;\n }\n else if (prevToken.value === '</') {\n depth--;\n if (depth < 0) { //found closing tag\n iterator.stepBackward();\n var closeTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 2); //Range for </\n token = iterator.stepForward();\n var closeTagName = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + token.value.length);\n if (token.type.indexOf('tag-close') === -1) {\n token = iterator.stepForward();\n }\n if (token && token.value === '>') {\n var closeTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for >\n }\n else {\n return;\n }\n }\n }\n }\n }\n else if (tag === currentTag && token.value === '/>') { // self-closing tag\n depth--;\n if (depth < 0) { //found self-closing tag end\n var closeTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 2);\n var closeTagName = closeTagStart;\n var closeTagEnd = closeTagName;\n var openTagEnd = new Range(openTagName.end.row, openTagName.end.column, openTagName.end.row, openTagName.end.column + 1);\n }\n }\n }\n } while (token && depth >= 0);\n if (openTagStart && openTagEnd && closeTagStart && closeTagEnd && openTagName && closeTagName) {\n return {\n openTag: new Range(openTagStart.start.row, openTagStart.start.column, openTagEnd.end.row, openTagEnd.end.column),\n closeTag: new Range(closeTagStart.start.row, closeTagStart.start.column, closeTagEnd.end.row, closeTagEnd.end.column),\n openTagName: openTagName,\n closeTagName: closeTagName\n };\n }\n };\n this.$findOpeningTag = function (iterator, token) {\n var prevToken = iterator.getCurrentToken();\n var tag = token.value;\n var depth = 0;\n var startRow = iterator.getCurrentTokenRow();\n var startColumn = iterator.getCurrentTokenColumn();\n var endColumn = startColumn + 2;\n var closeTagStart = new Range(startRow, startColumn, startRow, endColumn); //Range for </\n iterator.stepForward();\n var closeTagName = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + token.value.length);\n if (token.type.indexOf('tag-close') === -1) {\n token = iterator.stepForward();\n }\n if (!token || token.value !== \">\")\n return;\n var closeTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for >\n iterator.stepBackward();\n iterator.stepBackward();\n do {\n token = prevToken;\n startRow = iterator.getCurrentTokenRow();\n startColumn = iterator.getCurrentTokenColumn();\n endColumn = startColumn + token.value.length;\n prevToken = iterator.stepBackward();\n if (token) {\n if (token.type.indexOf('tag-name') !== -1) {\n if (tag === token.value) {\n if (prevToken.value === '<') {\n depth++;\n if (depth > 0) { //found opening tag\n var openTagName = new Range(startRow, startColumn, startRow, endColumn);\n var openTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for <\n do {\n token = iterator.stepForward();\n } while (token && token.value !== '>');\n var openTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for >\n }\n }\n else if (prevToken.value === '</') {\n depth--;\n }\n }\n }\n else if (token.value === '/>') { // self-closing tag\n var stepCount = 0;\n var tmpToken = prevToken;\n while (tmpToken) {\n if (tmpToken.type.indexOf('tag-name') !== -1 && tmpToken.value === tag) {\n depth--;\n break;\n }\n else if (tmpToken.value === '<') {\n break;\n }\n tmpToken = iterator.stepBackward();\n stepCount++;\n }\n for (var i = 0; i < stepCount; i++) {\n iterator.stepForward();\n }\n }\n }\n } while (prevToken && depth <= 0);\n if (openTagStart && openTagEnd && closeTagStart && closeTagEnd && openTagName && closeTagName) {\n return {\n openTag: new Range(openTagStart.start.row, openTagStart.start.column, openTagEnd.end.row, openTagEnd.end.column),\n closeTag: new Range(closeTagStart.start.row, closeTagStart.start.column, closeTagEnd.end.row, closeTagEnd.end.column),\n openTagName: openTagName,\n closeTagName: closeTagName\n };\n }\n };\n}\nexports.BracketMatch = BracketMatch;\n\n});\n\nace.define(\"ace/edit_session\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/bidihandler\",\"ace/config\",\"ace/lib/event_emitter\",\"ace/selection\",\"ace/mode/text\",\"ace/range\",\"ace/document\",\"ace/background_tokenizer\",\"ace/search_highlight\",\"ace/undomanager\",\"ace/edit_session/folding\",\"ace/edit_session/bracket_match\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar lang = require(\"./lib/lang\");\nvar BidiHandler = require(\"./bidihandler\").BidiHandler;\nvar config = require(\"./config\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Selection = require(\"./selection\").Selection;\nvar TextMode = require(\"./mode/text\").Mode;\nvar Range = require(\"./range\").Range;\nvar Document = require(\"./document\").Document;\nvar BackgroundTokenizer = require(\"./background_tokenizer\").BackgroundTokenizer;\nvar SearchHighlight = require(\"./search_highlight\").SearchHighlight;\nvar UndoManager = require(\"./undomanager\").UndoManager;\nvar EditSession = /** @class */ (function () {\n function EditSession(text, mode) { this.doc;\n this.$breakpoints = [];\n this.$decorations = [];\n this.$frontMarkers = {};\n this.$backMarkers = {};\n this.$markerId = 1;\n this.$undoSelect = true;\n this.$foldData = [];\n this.id = \"session\" + (++EditSession.$uid);\n this.$foldData.toString = function () {\n return this.join(\"\\n\");\n };\n this.bgTokenizer = new BackgroundTokenizer((new TextMode()).getTokenizer(), this);\n var _self = this;\n this.bgTokenizer.on(\"update\", function (e) {\n _self._signal(\"tokenizerUpdate\", e);\n });\n this.on(\"changeFold\", this.onChangeFold.bind(this));\n this.$onChange = this.onChange.bind(this);\n if (typeof text != \"object\" || !text.getLine)\n text = new Document(/**@type{string}*/ (text));\n this.setDocument(text);\n this.selection = new Selection(this);\n this.$bidiHandler = new BidiHandler(this);\n config.resetOptions(this);\n this.setMode(mode);\n config._signal(\"session\", this);\n this.destroyed = false;\n }\n EditSession.prototype.setDocument = function (doc) {\n if (this.doc)\n this.doc.off(\"change\", this.$onChange);\n this.doc = doc;\n doc.on(\"change\", this.$onChange, true);\n this.bgTokenizer.setDocument(this.getDocument());\n this.resetCaches();\n };\n EditSession.prototype.getDocument = function () {\n return this.doc;\n };\n EditSession.prototype.$resetRowCache = function (docRow) {\n if (!docRow) {\n this.$docRowCache = [];\n this.$screenRowCache = [];\n return;\n }\n var l = this.$docRowCache.length;\n var i = this.$getRowCacheIndex(this.$docRowCache, docRow) + 1;\n if (l > i) {\n this.$docRowCache.splice(i, l);\n this.$screenRowCache.splice(i, l);\n }\n };\n EditSession.prototype.$getRowCacheIndex = function (cacheArray, val) {\n var low = 0;\n var hi = cacheArray.length - 1;\n while (low <= hi) {\n var mid = (low + hi) >> 1;\n var c = cacheArray[mid];\n if (val > c)\n low = mid + 1;\n else if (val < c)\n hi = mid - 1;\n else\n return mid;\n }\n return low - 1;\n };\n EditSession.prototype.resetCaches = function () {\n this.$modified = true;\n this.$wrapData = [];\n this.$rowLengthCache = [];\n this.$resetRowCache(0);\n if (!this.destroyed)\n this.bgTokenizer.start(0);\n };\n EditSession.prototype.onChangeFold = function (e) {\n var fold = e.data;\n this.$resetRowCache(fold.start.row);\n };\n EditSession.prototype.onChange = function (delta) {\n this.$modified = true;\n this.$bidiHandler.onChange(delta);\n this.$resetRowCache(delta.start.row);\n var removedFolds = this.$updateInternalDataOnChange(delta);\n if (!this.$fromUndo && this.$undoManager) {\n if (removedFolds && removedFolds.length) {\n this.$undoManager.add({\n action: \"removeFolds\",\n folds: removedFolds\n }, this.mergeUndoDeltas);\n this.mergeUndoDeltas = true;\n }\n this.$undoManager.add(delta, this.mergeUndoDeltas);\n this.mergeUndoDeltas = true;\n this.$informUndoManager.schedule();\n }\n this.bgTokenizer.$updateOnChange(delta);\n this._signal(\"change\", delta);\n };\n EditSession.prototype.setValue = function (text) {\n this.doc.setValue(text);\n this.selection.moveTo(0, 0);\n this.$resetRowCache(0);\n this.setUndoManager(this.$undoManager);\n this.getUndoManager().reset();\n };\n EditSession.fromJSON = function (session) {\n if (typeof session == \"string\")\n session = JSON.parse(session);\n var undoManager = new UndoManager();\n undoManager.$undoStack = session.history.undo;\n undoManager.$redoStack = session.history.redo;\n undoManager.mark = session.history.mark;\n undoManager.$rev = session.history.rev;\n var editSession = new EditSession(session.value);\n session.folds.forEach(function (fold) {\n editSession.addFold(\"...\", Range.fromPoints(fold.start, fold.end));\n });\n editSession.setAnnotations(session.annotations);\n editSession.setBreakpoints(session.breakpoints);\n editSession.setMode(session.mode);\n editSession.setScrollLeft(session.scrollLeft);\n editSession.setScrollTop(session.scrollTop);\n editSession.setUndoManager(undoManager);\n editSession.selection.fromJSON(session.selection);\n return editSession;\n };\n EditSession.prototype.toJSON = function () {\n return {\n annotations: this.$annotations,\n breakpoints: this.$breakpoints,\n folds: this.getAllFolds().map(function (fold) {\n return fold.range;\n }),\n history: this.getUndoManager(),\n mode: this.$mode.$id,\n scrollLeft: this.$scrollLeft,\n scrollTop: this.$scrollTop,\n selection: this.selection.toJSON(),\n value: this.doc.getValue()\n };\n };\n EditSession.prototype.toString = function () {\n return this.doc.getValue();\n };\n EditSession.prototype.getSelection = function () {\n return this.selection;\n };\n EditSession.prototype.getState = function (row) {\n return this.bgTokenizer.getState(row);\n };\n EditSession.prototype.getTokens = function (row) {\n return this.bgTokenizer.getTokens(row);\n };\n EditSession.prototype.getTokenAt = function (row, column) {\n var tokens = this.bgTokenizer.getTokens(row);\n var token, c = 0;\n if (column == null) {\n var i = tokens.length - 1;\n c = this.getLine(row).length;\n }\n else {\n for (var i = 0; i < tokens.length; i++) {\n c += tokens[i].value.length;\n if (c >= column)\n break;\n }\n }\n token = tokens[i];\n if (!token)\n return null;\n token.index = i;\n token.start = c - token.value.length;\n return token;\n };\n EditSession.prototype.setUndoManager = function (undoManager) {\n this.$undoManager = undoManager;\n if (this.$informUndoManager)\n this.$informUndoManager.cancel();\n if (undoManager) {\n var self = this;\n undoManager.addSession(this);\n this.$syncInformUndoManager = function () {\n self.$informUndoManager.cancel();\n self.mergeUndoDeltas = false;\n };\n this.$informUndoManager = lang.delayedCall(this.$syncInformUndoManager);\n }\n else {\n this.$syncInformUndoManager = function () { };\n }\n };\n EditSession.prototype.markUndoGroup = function () {\n if (this.$syncInformUndoManager)\n this.$syncInformUndoManager();\n };\n EditSession.prototype.getUndoManager = function () {\n return this.$undoManager || this.$defaultUndoManager;\n };\n EditSession.prototype.getTabString = function () {\n if (this.getUseSoftTabs()) {\n return lang.stringRepeat(\" \", this.getTabSize());\n }\n else {\n return \"\\t\";\n }\n };\n EditSession.prototype.setUseSoftTabs = function (val) {\n this.setOption(\"useSoftTabs\", val);\n };\n EditSession.prototype.getUseSoftTabs = function () {\n return this.$useSoftTabs && !this.$mode.$indentWithTabs;\n };\n EditSession.prototype.setTabSize = function (tabSize) {\n this.setOption(\"tabSize\", tabSize);\n };\n EditSession.prototype.getTabSize = function () {\n return this.$tabSize;\n };\n EditSession.prototype.isTabStop = function (position) {\n return this.$useSoftTabs && (position.column % this.$tabSize === 0);\n };\n EditSession.prototype.setNavigateWithinSoftTabs = function (navigateWithinSoftTabs) {\n this.setOption(\"navigateWithinSoftTabs\", navigateWithinSoftTabs);\n };\n EditSession.prototype.getNavigateWithinSoftTabs = function () {\n return this.$navigateWithinSoftTabs;\n };\n EditSession.prototype.setOverwrite = function (overwrite) {\n this.setOption(\"overwrite\", overwrite);\n };\n EditSession.prototype.getOverwrite = function () {\n return this.$overwrite;\n };\n EditSession.prototype.toggleOverwrite = function () {\n this.setOverwrite(!this.$overwrite);\n };\n EditSession.prototype.addGutterDecoration = function (row, className) {\n if (!this.$decorations[row])\n this.$decorations[row] = \"\";\n this.$decorations[row] += \" \" + className;\n this._signal(\"changeBreakpoint\", {});\n };\n EditSession.prototype.removeGutterDecoration = function (row, className) {\n this.$decorations[row] = (this.$decorations[row] || \"\").replace(\" \" + className, \"\");\n this._signal(\"changeBreakpoint\", {});\n };\n EditSession.prototype.getBreakpoints = function () {\n return this.$breakpoints;\n };\n EditSession.prototype.setBreakpoints = function (rows) {\n this.$breakpoints = [];\n for (var i = 0; i < rows.length; i++) {\n this.$breakpoints[rows[i]] = \"ace_breakpoint\";\n }\n this._signal(\"changeBreakpoint\", {});\n };\n EditSession.prototype.clearBreakpoints = function () {\n this.$breakpoints = [];\n this._signal(\"changeBreakpoint\", {});\n };\n EditSession.prototype.setBreakpoint = function (row, className) {\n if (className === undefined)\n className = \"ace_breakpoint\";\n if (className)\n this.$breakpoints[row] = className;\n else\n delete this.$breakpoints[row];\n this._signal(\"changeBreakpoint\", {});\n };\n EditSession.prototype.clearBreakpoint = function (row) {\n delete this.$breakpoints[row];\n this._signal(\"changeBreakpoint\", {});\n };\n EditSession.prototype.addMarker = function (range, clazz, type, inFront) {\n var id = this.$markerId++;\n var marker = {\n range: range,\n type: type || \"line\",\n renderer: typeof type == \"function\" ? type : null,\n clazz: clazz,\n inFront: !!inFront,\n id: id\n };\n if (inFront) {\n this.$frontMarkers[id] = marker;\n this._signal(\"changeFrontMarker\");\n }\n else {\n this.$backMarkers[id] = marker;\n this._signal(\"changeBackMarker\");\n }\n return id;\n };\n EditSession.prototype.addDynamicMarker = function (marker, inFront) {\n if (!marker.update)\n return;\n var id = this.$markerId++;\n marker.id = id;\n marker.inFront = !!inFront;\n if (inFront) {\n this.$frontMarkers[id] = marker;\n this._signal(\"changeFrontMarker\");\n }\n else {\n this.$backMarkers[id] = marker;\n this._signal(\"changeBackMarker\");\n }\n return marker;\n };\n EditSession.prototype.removeMarker = function (markerId) {\n var marker = this.$frontMarkers[markerId] || this.$backMarkers[markerId];\n if (!marker)\n return;\n var markers = marker.inFront ? this.$frontMarkers : this.$backMarkers;\n delete (markers[markerId]);\n this._signal(marker.inFront ? \"changeFrontMarker\" : \"changeBackMarker\");\n };\n EditSession.prototype.getMarkers = function (inFront) {\n return inFront ? this.$frontMarkers : this.$backMarkers;\n };\n EditSession.prototype.highlight = function (re) {\n if (!this.$searchHighlight) {\n var highlight = new SearchHighlight(null, \"ace_selected-word\", \"text\");\n this.$searchHighlight = this.addDynamicMarker(highlight);\n }\n this.$searchHighlight.setRegexp(re);\n };\n EditSession.prototype.highlightLines = function (startRow, endRow, clazz, inFront) {\n if (typeof endRow != \"number\") {\n clazz = endRow;\n endRow = startRow;\n }\n if (!clazz)\n clazz = \"ace_step\";\n var range = new Range(startRow, 0, endRow, Infinity);\n range.id = this.addMarker(range, clazz, \"fullLine\", inFront);\n return range;\n };\n EditSession.prototype.setAnnotations = function (annotations) {\n this.$annotations = annotations;\n this._signal(\"changeAnnotation\", {});\n };\n EditSession.prototype.getAnnotations = function () {\n return this.$annotations || [];\n };\n EditSession.prototype.clearAnnotations = function () {\n this.setAnnotations([]);\n };\n EditSession.prototype.$detectNewLine = function (text) {\n var match = text.match(/^.*?(\\r?\\n)/m);\n if (match) {\n this.$autoNewLine = match[1];\n }\n else {\n this.$autoNewLine = \"\\n\";\n }\n };\n EditSession.prototype.getWordRange = function (row, column) {\n var line = this.getLine(row);\n var inToken = false;\n if (column > 0)\n inToken = !!line.charAt(column - 1).match(this.tokenRe);\n if (!inToken)\n inToken = !!line.charAt(column).match(this.tokenRe);\n if (inToken)\n var re = this.tokenRe;\n else if (/^\\s+$/.test(line.slice(column - 1, column + 1)))\n var re = /\\s/;\n else\n var re = this.nonTokenRe;\n var start = column;\n if (start > 0) {\n do {\n start--;\n } while (start >= 0 && line.charAt(start).match(re));\n start++;\n }\n var end = column;\n while (end < line.length && line.charAt(end).match(re)) {\n end++;\n }\n return new Range(row, start, row, end);\n };\n EditSession.prototype.getAWordRange = function (row, column) {\n var wordRange = this.getWordRange(row, column);\n var line = this.getLine(wordRange.end.row);\n while (line.charAt(wordRange.end.column).match(/[ \\t]/)) {\n wordRange.end.column += 1;\n }\n return wordRange;\n };\n EditSession.prototype.setNewLineMode = function (newLineMode) {\n this.doc.setNewLineMode(newLineMode);\n };\n EditSession.prototype.getNewLineMode = function () {\n return this.doc.getNewLineMode();\n };\n EditSession.prototype.setUseWorker = function (useWorker) { this.setOption(\"useWorker\", useWorker); };\n EditSession.prototype.getUseWorker = function () { return this.$useWorker; };\n EditSession.prototype.onReloadTokenizer = function (e) {\n var rows = e.data;\n this.bgTokenizer.start(rows.first);\n this._signal(\"tokenizerUpdate\", e);\n };\n EditSession.prototype.setMode = function (mode, cb) {\n if (mode && typeof mode === \"object\") {\n if (mode.getTokenizer)\n return this.$onChangeMode(mode);\n var options = mode;\n var path = options.path;\n }\n else {\n path = /**@type{string}*/ (mode) || \"ace/mode/text\";\n }\n if (!this.$modes[\"ace/mode/text\"])\n this.$modes[\"ace/mode/text\"] = new TextMode();\n if (this.$modes[path] && !options) {\n this.$onChangeMode(this.$modes[path]);\n cb && cb();\n return;\n }\n this.$modeId = path;\n config.loadModule([\"mode\", path], function (m) {\n if (this.$modeId !== path)\n return cb && cb();\n if (this.$modes[path] && !options) {\n this.$onChangeMode(this.$modes[path]);\n }\n else if (m && m.Mode) {\n m = new m.Mode(options);\n if (!options) {\n this.$modes[path] = m;\n m.$id = path;\n }\n this.$onChangeMode(m);\n }\n cb && cb();\n }.bind(this));\n if (!this.$mode)\n this.$onChangeMode(this.$modes[\"ace/mode/text\"], true);\n };\n EditSession.prototype.$onChangeMode = function (mode, $isPlaceholder) {\n if (!$isPlaceholder)\n this.$modeId = mode.$id;\n if (this.$mode === mode)\n return;\n var oldMode = this.$mode;\n this.$mode = mode;\n this.$stopWorker();\n if (this.$useWorker)\n this.$startWorker();\n var tokenizer = mode.getTokenizer();\n if (tokenizer.on !== undefined) {\n var onReloadTokenizer = this.onReloadTokenizer.bind(this);\n tokenizer.on(\"update\", onReloadTokenizer);\n }\n this.bgTokenizer.setTokenizer(tokenizer);\n this.bgTokenizer.setDocument(this.getDocument());\n this.tokenRe = mode.tokenRe;\n this.nonTokenRe = mode.nonTokenRe;\n if (!$isPlaceholder) {\n if (mode.attachToSession)\n mode.attachToSession(this);\n this.$options.wrapMethod.set.call(this, this.$wrapMethod);\n this.$setFolding(mode.foldingRules);\n this.bgTokenizer.start(0);\n this._emit(\"changeMode\", { oldMode: oldMode, mode: mode });\n }\n };\n EditSession.prototype.$stopWorker = function () {\n if (this.$worker) {\n this.$worker.terminate();\n this.$worker = null;\n }\n };\n EditSession.prototype.$startWorker = function () {\n try {\n this.$worker = this.$mode.createWorker(this);\n }\n catch (e) {\n config.warn(\"Could not load worker\", e);\n this.$worker = null;\n }\n };\n EditSession.prototype.getMode = function () {\n return this.$mode;\n };\n EditSession.prototype.setScrollTop = function (scrollTop) {\n if (this.$scrollTop === scrollTop || isNaN(scrollTop))\n return;\n this.$scrollTop = scrollTop;\n this._signal(\"changeScrollTop\", scrollTop);\n };\n EditSession.prototype.getScrollTop = function () {\n return this.$scrollTop;\n };\n EditSession.prototype.setScrollLeft = function (scrollLeft) {\n if (this.$scrollLeft === scrollLeft || isNaN(scrollLeft))\n return;\n this.$scrollLeft = scrollLeft;\n this._signal(\"changeScrollLeft\", scrollLeft);\n };\n EditSession.prototype.getScrollLeft = function () {\n return this.$scrollLeft;\n };\n EditSession.prototype.getScreenWidth = function () {\n this.$computeWidth();\n if (this.lineWidgets)\n return Math.max(this.getLineWidgetMaxWidth(), this.screenWidth);\n return this.screenWidth;\n };\n EditSession.prototype.getLineWidgetMaxWidth = function () {\n if (this.lineWidgetsWidth != null)\n return this.lineWidgetsWidth;\n var width = 0;\n this.lineWidgets.forEach(function (w) {\n if (w && w.screenWidth > width)\n width = w.screenWidth;\n });\n return this.lineWidgetWidth = width;\n };\n EditSession.prototype.$computeWidth = function (force) {\n if (this.$modified || force) {\n this.$modified = false;\n if (this.$useWrapMode)\n return this.screenWidth = this.$wrapLimit;\n var lines = this.doc.getAllLines();\n var cache = this.$rowLengthCache;\n var longestScreenLine = 0;\n var foldIndex = 0;\n var foldLine = this.$foldData[foldIndex];\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n var len = lines.length;\n for (var i = 0; i < len; i++) {\n if (i > foldStart) {\n i = foldLine.end.row + 1;\n if (i >= len)\n break;\n foldLine = this.$foldData[foldIndex++];\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n if (cache[i] == null)\n cache[i] = this.$getStringScreenWidth(lines[i])[0];\n if (cache[i] > longestScreenLine)\n longestScreenLine = cache[i];\n }\n this.screenWidth = longestScreenLine;\n }\n };\n EditSession.prototype.getLine = function (row) {\n return this.doc.getLine(row);\n };\n EditSession.prototype.getLines = function (firstRow, lastRow) {\n return this.doc.getLines(firstRow, lastRow);\n };\n EditSession.prototype.getLength = function () {\n return this.doc.getLength();\n };\n EditSession.prototype.getTextRange = function (range) {\n return this.doc.getTextRange(range || this.selection.getRange());\n };\n EditSession.prototype.insert = function (position, text) {\n return this.doc.insert(position, text);\n };\n EditSession.prototype.remove = function (range) {\n return this.doc.remove(range);\n };\n EditSession.prototype.removeFullLines = function (firstRow, lastRow) {\n return this.doc.removeFullLines(firstRow, lastRow);\n };\n EditSession.prototype.undoChanges = function (deltas, dontSelect) {\n if (!deltas.length)\n return;\n this.$fromUndo = true;\n for (var i = deltas.length - 1; i != -1; i--) {\n var delta = deltas[i];\n if (delta.action == \"insert\" || delta.action == \"remove\") {\n this.doc.revertDelta(delta);\n }\n else if (delta.folds) {\n this.addFolds(delta.folds);\n }\n }\n if (!dontSelect && this.$undoSelect) {\n if (deltas.selectionBefore)\n this.selection.fromJSON(deltas.selectionBefore);\n else\n this.selection.setRange(this.$getUndoSelection(deltas, true));\n }\n this.$fromUndo = false;\n };\n EditSession.prototype.redoChanges = function (deltas, dontSelect) {\n if (!deltas.length)\n return;\n this.$fromUndo = true;\n for (var i = 0; i < deltas.length; i++) {\n var delta = deltas[i];\n if (delta.action == \"insert\" || delta.action == \"remove\") {\n this.doc.$safeApplyDelta(delta);\n }\n }\n if (!dontSelect && this.$undoSelect) {\n if (deltas.selectionAfter)\n this.selection.fromJSON(deltas.selectionAfter);\n else\n this.selection.setRange(this.$getUndoSelection(deltas, false));\n }\n this.$fromUndo = false;\n };\n EditSession.prototype.setUndoSelect = function (enable) {\n this.$undoSelect = enable;\n };\n EditSession.prototype.$getUndoSelection = function (deltas, isUndo) {\n function isInsert(delta) {\n return isUndo ? delta.action !== \"insert\" : delta.action === \"insert\";\n }\n var range, point;\n for (var i = 0; i < deltas.length; i++) {\n var delta = deltas[i];\n if (!delta.start)\n continue; // skip folds\n if (!range) {\n if (isInsert(delta)) {\n range = Range.fromPoints(delta.start, delta.end);\n }\n else {\n range = Range.fromPoints(delta.start, delta.start);\n }\n continue;\n }\n if (isInsert(delta)) {\n point = delta.start;\n if (range.compare(point.row, point.column) == -1) {\n range.setStart(point);\n }\n point = delta.end;\n if (range.compare(point.row, point.column) == 1) {\n range.setEnd(point);\n }\n }\n else {\n point = delta.start;\n if (range.compare(point.row, point.column) == -1) {\n range = Range.fromPoints(delta.start, delta.start);\n }\n }\n }\n return range;\n };\n EditSession.prototype.replace = function (range, text) {\n return this.doc.replace(range, text);\n };\n EditSession.prototype.moveText = function (fromRange, toPosition, copy) {\n var text = this.getTextRange(fromRange);\n var folds = this.getFoldsInRange(fromRange);\n var toRange = Range.fromPoints(toPosition, toPosition);\n if (!copy) {\n this.remove(fromRange);\n var rowDiff = fromRange.start.row - fromRange.end.row;\n var collDiff = rowDiff ? -fromRange.end.column : fromRange.start.column - fromRange.end.column;\n if (collDiff) {\n if (toRange.start.row == fromRange.end.row && toRange.start.column > fromRange.end.column)\n toRange.start.column += collDiff;\n if (toRange.end.row == fromRange.end.row && toRange.end.column > fromRange.end.column)\n toRange.end.column += collDiff;\n }\n if (rowDiff && toRange.start.row >= fromRange.end.row) {\n toRange.start.row += rowDiff;\n toRange.end.row += rowDiff;\n }\n }\n toRange.end = this.insert(toRange.start, text);\n if (folds.length) {\n var oldStart = fromRange.start;\n var newStart = toRange.start;\n var rowDiff = newStart.row - oldStart.row;\n var collDiff = newStart.column - oldStart.column;\n this.addFolds(folds.map(function (x) {\n x = x.clone();\n if (x.start.row == oldStart.row)\n x.start.column += collDiff;\n if (x.end.row == oldStart.row)\n x.end.column += collDiff;\n x.start.row += rowDiff;\n x.end.row += rowDiff;\n return x;\n }));\n }\n return toRange;\n };\n EditSession.prototype.indentRows = function (startRow, endRow, indentString) {\n indentString = indentString.replace(/\\t/g, this.getTabString());\n for (var row = startRow; row <= endRow; row++)\n this.doc.insertInLine({ row: row, column: 0 }, indentString);\n };\n EditSession.prototype.outdentRows = function (range) {\n var rowRange = range.collapseRows();\n var deleteRange = new Range(0, 0, 0, 0);\n var size = this.getTabSize();\n for (var i = rowRange.start.row; i <= rowRange.end.row; ++i) {\n var line = this.getLine(i);\n deleteRange.start.row = i;\n deleteRange.end.row = i;\n for (var j = 0; j < size; ++j)\n if (line.charAt(j) != ' ')\n break;\n if (j < size && line.charAt(j) == '\\t') {\n deleteRange.start.column = j;\n deleteRange.end.column = j + 1;\n }\n else {\n deleteRange.start.column = 0;\n deleteRange.end.column = j;\n }\n this.remove(deleteRange);\n }\n };\n EditSession.prototype.$moveLines = function (firstRow, lastRow, dir) {\n firstRow = this.getRowFoldStart(firstRow);\n lastRow = this.getRowFoldEnd(lastRow);\n if (dir < 0) {\n var row = this.getRowFoldStart(firstRow + dir);\n if (row < 0)\n return 0;\n var diff = row - firstRow;\n }\n else if (dir > 0) {\n var row = this.getRowFoldEnd(lastRow + dir);\n if (row > this.doc.getLength() - 1)\n return 0;\n var diff = row - lastRow;\n }\n else {\n firstRow = this.$clipRowToDocument(firstRow);\n lastRow = this.$clipRowToDocument(lastRow);\n var diff = lastRow - firstRow + 1;\n }\n var range = new Range(firstRow, 0, lastRow, Number.MAX_VALUE);\n var folds = this.getFoldsInRange(range).map(function (x) {\n x = x.clone();\n x.start.row += diff;\n x.end.row += diff;\n return x;\n });\n var lines = dir == 0\n ? this.doc.getLines(firstRow, lastRow)\n : this.doc.removeFullLines(firstRow, lastRow);\n this.doc.insertFullLines(firstRow + diff, lines);\n folds.length && this.addFolds(folds);\n return diff;\n };\n EditSession.prototype.moveLinesUp = function (firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, -1);\n };\n EditSession.prototype.moveLinesDown = function (firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, 1);\n };\n EditSession.prototype.duplicateLines = function (firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, 0);\n };\n EditSession.prototype.$clipRowToDocument = function (row) {\n return Math.max(0, Math.min(row, this.doc.getLength() - 1));\n };\n EditSession.prototype.$clipColumnToRow = function (row, column) {\n if (column < 0)\n return 0;\n return Math.min(this.doc.getLine(row).length, column);\n };\n EditSession.prototype.$clipPositionToDocument = function (row, column) {\n column = Math.max(0, column);\n if (row < 0) {\n row = 0;\n column = 0;\n }\n else {\n var len = this.doc.getLength();\n if (row >= len) {\n row = len - 1;\n column = this.doc.getLine(len - 1).length;\n }\n else {\n column = Math.min(this.doc.getLine(row).length, column);\n }\n }\n return {\n row: row,\n column: column\n };\n };\n EditSession.prototype.$clipRangeToDocument = function (range) {\n if (range.start.row < 0) {\n range.start.row = 0;\n range.start.column = 0;\n }\n else {\n range.start.column = this.$clipColumnToRow(range.start.row, range.start.column);\n }\n var len = this.doc.getLength() - 1;\n if (range.end.row > len) {\n range.end.row = len;\n range.end.column = this.doc.getLine(len).length;\n }\n else {\n range.end.column = this.$clipColumnToRow(range.end.row, range.end.column);\n }\n return range;\n };\n EditSession.prototype.setUseWrapMode = function (useWrapMode) {\n if (useWrapMode != this.$useWrapMode) {\n this.$useWrapMode = useWrapMode;\n this.$modified = true;\n this.$resetRowCache(0);\n if (useWrapMode) {\n var len = this.getLength();\n this.$wrapData = Array(len);\n this.$updateWrapData(0, len - 1);\n }\n this._signal(\"changeWrapMode\");\n }\n };\n EditSession.prototype.getUseWrapMode = function () {\n return this.$useWrapMode;\n };\n EditSession.prototype.setWrapLimitRange = function (min, max) {\n if (this.$wrapLimitRange.min !== min || this.$wrapLimitRange.max !== max) {\n this.$wrapLimitRange = { min: min, max: max };\n this.$modified = true;\n this.$bidiHandler.markAsDirty();\n if (this.$useWrapMode)\n this._signal(\"changeWrapMode\");\n }\n };\n EditSession.prototype.adjustWrapLimit = function (desiredLimit, $printMargin) {\n var limits = this.$wrapLimitRange;\n if (limits.max < 0)\n limits = { min: $printMargin, max: $printMargin };\n var wrapLimit = this.$constrainWrapLimit(desiredLimit, limits.min, limits.max);\n if (wrapLimit != this.$wrapLimit && wrapLimit > 1) {\n this.$wrapLimit = wrapLimit;\n this.$modified = true;\n if (this.$useWrapMode) {\n this.$updateWrapData(0, this.getLength() - 1);\n this.$resetRowCache(0);\n this._signal(\"changeWrapLimit\");\n }\n return true;\n }\n return false;\n };\n EditSession.prototype.$constrainWrapLimit = function (wrapLimit, min, max) {\n if (min)\n wrapLimit = Math.max(min, wrapLimit);\n if (max)\n wrapLimit = Math.min(max, wrapLimit);\n return wrapLimit;\n };\n EditSession.prototype.getWrapLimit = function () {\n return this.$wrapLimit;\n };\n EditSession.prototype.setWrapLimit = function (limit) {\n this.setWrapLimitRange(limit, limit);\n };\n EditSession.prototype.getWrapLimitRange = function () {\n return {\n min: this.$wrapLimitRange.min,\n max: this.$wrapLimitRange.max\n };\n };\n EditSession.prototype.$updateInternalDataOnChange = function (delta) {\n var useWrapMode = this.$useWrapMode;\n var action = delta.action;\n var start = delta.start;\n var end = delta.end;\n var firstRow = start.row;\n var lastRow = end.row;\n var len = lastRow - firstRow;\n var removedFolds = null;\n this.$updating = true;\n if (len != 0) {\n if (action === \"remove\") {\n this[useWrapMode ? \"$wrapData\" : \"$rowLengthCache\"].splice(firstRow, len);\n var foldLines = this.$foldData;\n removedFolds = this.getFoldsInRange(delta);\n this.removeFolds(removedFolds);\n var foldLine = this.getFoldLine(end.row);\n var idx = 0;\n if (foldLine) {\n foldLine.addRemoveChars(end.row, end.column, start.column - end.column);\n foldLine.shiftRow(-len);\n var foldLineBefore = this.getFoldLine(firstRow);\n if (foldLineBefore && foldLineBefore !== foldLine) {\n foldLineBefore.merge(foldLine);\n foldLine = foldLineBefore;\n }\n idx = foldLines.indexOf(foldLine) + 1;\n }\n for (idx; idx < foldLines.length; idx++) {\n var foldLine = foldLines[idx];\n if (foldLine.start.row >= end.row) {\n foldLine.shiftRow(-len);\n }\n }\n lastRow = firstRow;\n }\n else {\n var args = Array(len);\n args.unshift(firstRow, 0);\n var arr = useWrapMode ? this.$wrapData : this.$rowLengthCache;\n arr.splice.apply(arr, args);\n var foldLines = this.$foldData;\n var foldLine = this.getFoldLine(firstRow);\n var idx = 0;\n if (foldLine) {\n var cmp = foldLine.range.compareInside(start.row, start.column);\n if (cmp == 0) {\n foldLine = foldLine.split(start.row, start.column);\n if (foldLine) {\n foldLine.shiftRow(len);\n foldLine.addRemoveChars(lastRow, 0, end.column - start.column);\n }\n }\n else \n if (cmp == -1) {\n foldLine.addRemoveChars(firstRow, 0, end.column - start.column);\n foldLine.shiftRow(len);\n }\n idx = foldLines.indexOf(foldLine) + 1;\n }\n for (idx; idx < foldLines.length; idx++) {\n var foldLine = foldLines[idx];\n if (foldLine.start.row >= firstRow) {\n foldLine.shiftRow(len);\n }\n }\n }\n }\n else {\n len = Math.abs(delta.start.column - delta.end.column);\n if (action === \"remove\") {\n removedFolds = this.getFoldsInRange(delta);\n this.removeFolds(removedFolds);\n len = -len;\n }\n var foldLine = this.getFoldLine(firstRow);\n if (foldLine) {\n foldLine.addRemoveChars(firstRow, start.column, len);\n }\n }\n if (useWrapMode && this.$wrapData.length != this.doc.getLength()) {\n console.error(\"doc.getLength() and $wrapData.length have to be the same!\");\n }\n this.$updating = false;\n if (useWrapMode)\n this.$updateWrapData(firstRow, lastRow);\n else\n this.$updateRowLengthCache(firstRow, lastRow);\n return removedFolds;\n };\n EditSession.prototype.$updateRowLengthCache = function (firstRow, lastRow) {\n this.$rowLengthCache[firstRow] = null;\n this.$rowLengthCache[lastRow] = null;\n };\n EditSession.prototype.$updateWrapData = function (firstRow, lastRow) {\n var lines = this.doc.getAllLines();\n var tabSize = this.getTabSize();\n var wrapData = this.$wrapData;\n var wrapLimit = this.$wrapLimit;\n var tokens;\n var foldLine;\n var row = firstRow;\n lastRow = Math.min(lastRow, lines.length - 1);\n while (row <= lastRow) {\n foldLine = this.getFoldLine(row, foldLine);\n if (!foldLine) {\n tokens = this.$getDisplayTokens(lines[row]);\n wrapData[row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n row++;\n }\n else {\n tokens = [];\n foldLine.walk(function (placeholder, row, column, lastColumn) {\n var walkTokens;\n if (placeholder != null) {\n walkTokens = this.$getDisplayTokens(placeholder, tokens.length);\n walkTokens[0] = PLACEHOLDER_START;\n for (var i = 1; i < walkTokens.length; i++) {\n walkTokens[i] = PLACEHOLDER_BODY;\n }\n }\n else {\n walkTokens = this.$getDisplayTokens(lines[row].substring(lastColumn, column), tokens.length);\n }\n tokens = tokens.concat(walkTokens);\n }.bind(this), foldLine.end.row, lines[foldLine.end.row].length + 1);\n wrapData[foldLine.start.row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n row = foldLine.end.row + 1;\n }\n }\n };\n EditSession.prototype.$computeWrapSplits = function (tokens, wrapLimit, tabSize) {\n if (tokens.length == 0) {\n return [];\n }\n var splits = [];\n var displayLength = tokens.length;\n var lastSplit = 0, lastDocSplit = 0;\n var isCode = this.$wrapAsCode;\n var indentedSoftWrap = this.$indentedSoftWrap;\n var maxIndent = wrapLimit <= Math.max(2 * tabSize, 8)\n || indentedSoftWrap === false ? 0 : Math.floor(wrapLimit / 2);\n function getWrapIndent() {\n var indentation = 0;\n if (maxIndent === 0)\n return indentation;\n if (indentedSoftWrap) {\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n if (token == SPACE)\n indentation += 1;\n else if (token == TAB)\n indentation += tabSize;\n else if (token == TAB_SPACE)\n continue;\n else\n break;\n }\n }\n if (isCode && indentedSoftWrap !== false)\n indentation += tabSize;\n return Math.min(indentation, maxIndent);\n }\n function addSplit(screenPos) {\n var len = screenPos - lastSplit;\n for (var i = lastSplit; i < screenPos; i++) {\n var ch = tokens[i];\n if (ch === 12 || ch === 2)\n len -= 1;\n }\n if (!splits.length) {\n indent = getWrapIndent();\n splits.indent = indent;\n }\n lastDocSplit += len;\n splits.push(lastDocSplit);\n lastSplit = screenPos;\n }\n var indent = 0;\n while (displayLength - lastSplit > wrapLimit - indent) {\n var split = lastSplit + wrapLimit - indent;\n if (tokens[split - 1] >= SPACE && tokens[split] >= SPACE) {\n addSplit(split);\n continue;\n }\n if (tokens[split] == PLACEHOLDER_START || tokens[split] == PLACEHOLDER_BODY) {\n for (split; split != lastSplit - 1; split--) {\n if (tokens[split] == PLACEHOLDER_START) {\n break;\n }\n }\n if (split > lastSplit) {\n addSplit(split);\n continue;\n }\n split = lastSplit + wrapLimit;\n for (split; split < tokens.length; split++) {\n if (tokens[split] != PLACEHOLDER_BODY) {\n break;\n }\n }\n if (split == tokens.length) {\n break; // Breaks the while-loop.\n }\n addSplit(split);\n continue;\n }\n var minSplit = Math.max(split - (wrapLimit - (wrapLimit >> 2)), lastSplit - 1);\n while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n split--;\n }\n if (isCode) {\n while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n split--;\n }\n while (split > minSplit && tokens[split] == PUNCTUATION) {\n split--;\n }\n }\n else {\n while (split > minSplit && tokens[split] < SPACE) {\n split--;\n }\n }\n if (split > minSplit) {\n addSplit(++split);\n continue;\n }\n split = lastSplit + wrapLimit;\n if (tokens[split] == CHAR_EXT)\n split--;\n addSplit(split - indent);\n }\n return splits;\n };\n EditSession.prototype.$getDisplayTokens = function (str, offset) {\n var arr = [];\n var tabSize;\n offset = offset || 0;\n for (var i = 0; i < str.length; i++) {\n var c = str.charCodeAt(i);\n if (c == 9) {\n tabSize = this.getScreenTabSize(arr.length + offset);\n arr.push(TAB);\n for (var n = 1; n < tabSize; n++) {\n arr.push(TAB_SPACE);\n }\n }\n else if (c == 32) {\n arr.push(SPACE);\n }\n else if ((c > 39 && c < 48) || (c > 57 && c < 64)) {\n arr.push(PUNCTUATION);\n }\n else if (c >= 0x1100 && isFullWidth(c)) {\n arr.push(CHAR, CHAR_EXT);\n }\n else {\n arr.push(CHAR);\n }\n }\n return arr;\n };\n EditSession.prototype.$getStringScreenWidth = function (str, maxScreenColumn, screenColumn) {\n if (maxScreenColumn == 0)\n return [0, 0];\n if (maxScreenColumn == null)\n maxScreenColumn = Infinity;\n screenColumn = screenColumn || 0;\n var c, column;\n for (column = 0; column < str.length; column++) {\n c = str.charCodeAt(column);\n if (c == 9) {\n screenColumn += this.getScreenTabSize(screenColumn);\n }\n else if (c >= 0x1100 && isFullWidth(c)) {\n screenColumn += 2;\n }\n else {\n screenColumn += 1;\n }\n if (screenColumn > maxScreenColumn) {\n break;\n }\n }\n return [screenColumn, column];\n };\n EditSession.prototype.getRowLength = function (row) {\n var h = 1;\n if (this.lineWidgets)\n h += this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\n if (!this.$useWrapMode || !this.$wrapData[row])\n return h;\n else\n return this.$wrapData[row].length + h;\n };\n EditSession.prototype.getRowLineCount = function (row) {\n if (!this.$useWrapMode || !this.$wrapData[row]) {\n return 1;\n }\n else {\n return this.$wrapData[row].length + 1;\n }\n };\n EditSession.prototype.getRowWrapIndent = function (screenRow) {\n if (this.$useWrapMode) {\n var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n var splits = this.$wrapData[pos.row];\n return splits.length && splits[0] < pos.column ? splits.indent : 0;\n }\n else {\n return 0;\n }\n };\n EditSession.prototype.getScreenLastRowColumn = function (screenRow) {\n var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n return this.documentToScreenColumn(pos.row, pos.column);\n };\n EditSession.prototype.getDocumentLastRowColumn = function (docRow, docColumn) {\n var screenRow = this.documentToScreenRow(docRow, docColumn);\n return this.getScreenLastRowColumn(screenRow);\n };\n EditSession.prototype.getDocumentLastRowColumnPosition = function (docRow, docColumn) {\n var screenRow = this.documentToScreenRow(docRow, docColumn);\n return this.screenToDocumentPosition(screenRow, Number.MAX_VALUE / 10);\n };\n EditSession.prototype.getRowSplitData = function (row) {\n if (!this.$useWrapMode) {\n return undefined;\n }\n else {\n return this.$wrapData[row];\n }\n };\n EditSession.prototype.getScreenTabSize = function (screenColumn) {\n return this.$tabSize - (screenColumn % this.$tabSize | 0);\n };\n EditSession.prototype.screenToDocumentRow = function (screenRow, screenColumn) {\n return this.screenToDocumentPosition(screenRow, screenColumn).row;\n };\n EditSession.prototype.screenToDocumentColumn = function (screenRow, screenColumn) {\n return this.screenToDocumentPosition(screenRow, screenColumn).column;\n };\n EditSession.prototype.screenToDocumentPosition = function (screenRow, screenColumn, offsetX) {\n if (screenRow < 0)\n return { row: 0, column: 0 };\n var line;\n var docRow = 0;\n var docColumn = 0;\n var column;\n var row = 0;\n var rowLength = 0;\n var rowCache = this.$screenRowCache;\n var i = this.$getRowCacheIndex(rowCache, screenRow);\n var l = rowCache.length;\n if (l && i >= 0) {\n var row = rowCache[i];\n var docRow = this.$docRowCache[i];\n var doCache = screenRow > rowCache[l - 1];\n }\n else {\n var doCache = !l;\n }\n var maxRow = this.getLength() - 1;\n var foldLine = this.getNextFoldLine(docRow);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n while (row <= screenRow) {\n rowLength = this.getRowLength(docRow);\n if (row + rowLength > screenRow || docRow >= maxRow) {\n break;\n }\n else {\n row += rowLength;\n docRow++;\n if (docRow > foldStart) {\n docRow = foldLine.end.row + 1;\n foldLine = this.getNextFoldLine(docRow, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n }\n if (doCache) {\n this.$docRowCache.push(docRow);\n this.$screenRowCache.push(row);\n }\n }\n if (foldLine && foldLine.start.row <= docRow) {\n line = this.getFoldDisplayLine(foldLine);\n docRow = foldLine.start.row;\n }\n else if (row + rowLength <= screenRow || docRow > maxRow) {\n return {\n row: maxRow,\n column: this.getLine(maxRow).length\n };\n }\n else {\n line = this.getLine(docRow);\n foldLine = null;\n }\n var wrapIndent = 0, splitIndex = Math.floor(screenRow - row);\n if (this.$useWrapMode) {\n var splits = this.$wrapData[docRow];\n if (splits) {\n column = splits[splitIndex];\n if (splitIndex > 0 && splits.length) {\n wrapIndent = splits.indent;\n docColumn = splits[splitIndex - 1] || splits[splits.length - 1];\n line = line.substring(docColumn);\n }\n }\n }\n if (offsetX !== undefined && this.$bidiHandler.isBidiRow(row + splitIndex, docRow, splitIndex))\n screenColumn = this.$bidiHandler.offsetToCol(offsetX);\n docColumn += this.$getStringScreenWidth(line, screenColumn - wrapIndent)[1];\n if (this.$useWrapMode && docColumn >= column)\n docColumn = column - 1;\n if (foldLine)\n return foldLine.idxToPosition(docColumn);\n return { row: docRow, column: docColumn };\n };\n EditSession.prototype.documentToScreenPosition = function (docRow, docColumn) {\n if (typeof docColumn === \"undefined\")\n var pos = this.$clipPositionToDocument(/**@type{Point}*/ (docRow).row, /**@type{Point}*/ (docRow).column);\n else\n pos = this.$clipPositionToDocument(/**@type{number}*/ (docRow), docColumn);\n docRow = pos.row;\n docColumn = pos.column;\n var screenRow = 0;\n var foldStartRow = null;\n var fold = null;\n fold = this.getFoldAt(docRow, docColumn, 1);\n if (fold) {\n docRow = fold.start.row;\n docColumn = fold.start.column;\n }\n var rowEnd, row = 0;\n var rowCache = this.$docRowCache;\n var i = this.$getRowCacheIndex(rowCache, docRow);\n var l = rowCache.length;\n if (l && i >= 0) {\n var row = rowCache[i];\n var screenRow = this.$screenRowCache[i];\n var doCache = docRow > rowCache[l - 1];\n }\n else {\n var doCache = !l;\n }\n var foldLine = this.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n while (row < docRow) {\n if (row >= foldStart) {\n rowEnd = foldLine.end.row + 1;\n if (rowEnd > docRow)\n break;\n foldLine = this.getNextFoldLine(rowEnd, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n else {\n rowEnd = row + 1;\n }\n screenRow += this.getRowLength(row);\n row = rowEnd;\n if (doCache) {\n this.$docRowCache.push(row);\n this.$screenRowCache.push(screenRow);\n }\n }\n var textLine = \"\";\n if (foldLine && row >= foldStart) {\n textLine = this.getFoldDisplayLine(foldLine, docRow, docColumn);\n foldStartRow = foldLine.start.row;\n }\n else {\n textLine = this.getLine(docRow).substring(0, docColumn);\n foldStartRow = docRow;\n }\n var wrapIndent = 0;\n if (this.$useWrapMode) {\n var wrapRow = this.$wrapData[foldStartRow];\n if (wrapRow) {\n var screenRowOffset = 0;\n while (textLine.length >= wrapRow[screenRowOffset]) {\n screenRow++;\n screenRowOffset++;\n }\n textLine = textLine.substring(wrapRow[screenRowOffset - 1] || 0, textLine.length);\n wrapIndent = screenRowOffset > 0 ? wrapRow.indent : 0;\n }\n }\n if (this.lineWidgets && this.lineWidgets[row] && this.lineWidgets[row].rowsAbove)\n screenRow += this.lineWidgets[row].rowsAbove;\n return {\n row: screenRow,\n column: wrapIndent + this.$getStringScreenWidth(textLine)[0]\n };\n };\n EditSession.prototype.documentToScreenColumn = function (row, docColumn) {\n return this.documentToScreenPosition(row, docColumn).column;\n };\n EditSession.prototype.documentToScreenRow = function (docRow, docColumn) {\n return this.documentToScreenPosition(docRow, docColumn).row;\n };\n EditSession.prototype.getScreenLength = function () {\n var screenRows = 0;\n var fold = null;\n if (!this.$useWrapMode) {\n screenRows = this.getLength();\n var foldData = this.$foldData;\n for (var i = 0; i < foldData.length; i++) {\n fold = foldData[i];\n screenRows -= fold.end.row - fold.start.row;\n }\n }\n else {\n var lastRow = this.$wrapData.length;\n var row = 0, i = 0;\n var fold = this.$foldData[i++];\n var foldStart = fold ? fold.start.row : Infinity;\n while (row < lastRow) {\n var splits = this.$wrapData[row];\n screenRows += splits ? splits.length + 1 : 1;\n row++;\n if (row > foldStart) {\n row = fold.end.row + 1;\n fold = this.$foldData[i++];\n foldStart = fold ? fold.start.row : Infinity;\n }\n }\n }\n if (this.lineWidgets)\n screenRows += this.$getWidgetScreenLength();\n return screenRows;\n };\n EditSession.prototype.$setFontMetrics = function (fm) {\n if (!this.$enableVarChar)\n return;\n this.$getStringScreenWidth = function (str, maxScreenColumn, screenColumn) {\n if (maxScreenColumn === 0)\n return [0, 0];\n if (!maxScreenColumn)\n maxScreenColumn = Infinity;\n screenColumn = screenColumn || 0;\n var c, column;\n for (column = 0; column < str.length; column++) {\n c = str.charAt(column);\n if (c === \"\\t\") {\n screenColumn += this.getScreenTabSize(screenColumn);\n }\n else {\n screenColumn += fm.getCharacterWidth(c);\n }\n if (screenColumn > maxScreenColumn) {\n break;\n }\n }\n return [screenColumn, column];\n };\n };\n EditSession.prototype.getPrecedingCharacter = function () {\n var pos = this.selection.getCursor();\n if (pos.column === 0) {\n return pos.row === 0 ? \"\" : this.doc.getNewLineCharacter();\n }\n var currentLine = this.getLine(pos.row);\n return currentLine[pos.column - 1];\n };\n EditSession.prototype.destroy = function () {\n if (!this.destroyed) {\n this.bgTokenizer.setDocument(null);\n this.bgTokenizer.cleanup();\n this.destroyed = true;\n }\n this.$stopWorker();\n this.removeAllListeners();\n if (this.doc) {\n this.doc.off(\"change\", this.$onChange);\n }\n this.selection.detach();\n };\n return EditSession;\n}());\nEditSession.$uid = 0;\nEditSession.prototype.$modes = config.$modes;\nEditSession.prototype.getValue = EditSession.prototype.toString;\nEditSession.prototype.$defaultUndoManager = {\n undo: function () { },\n redo: function () { },\n hasUndo: function () { },\n hasRedo: function () { },\n reset: function () { },\n add: function () { },\n addSelection: function () { },\n startNewGroup: function () { },\n addSession: function () { }\n};\nEditSession.prototype.$overwrite = false;\nEditSession.prototype.$mode = null;\nEditSession.prototype.$modeId = null;\nEditSession.prototype.$scrollTop = 0;\nEditSession.prototype.$scrollLeft = 0;\nEditSession.prototype.$wrapLimit = 80;\nEditSession.prototype.$useWrapMode = false;\nEditSession.prototype.$wrapLimitRange = {\n min: null,\n max: null\n};\nEditSession.prototype.lineWidgets = null;\nEditSession.prototype.isFullWidth = isFullWidth;\noop.implement(EditSession.prototype, EventEmitter);\nvar CHAR = 1, CHAR_EXT = 2, PLACEHOLDER_START = 3, PLACEHOLDER_BODY = 4, PUNCTUATION = 9, SPACE = 10, TAB = 11, TAB_SPACE = 12;\nfunction isFullWidth(c) {\n if (c < 0x1100)\n return false;\n return c >= 0x1100 && c <= 0x115F ||\n c >= 0x11A3 && c <= 0x11A7 ||\n c >= 0x11FA && c <= 0x11FF ||\n c >= 0x2329 && c <= 0x232A ||\n c >= 0x2E80 && c <= 0x2E99 ||\n c >= 0x2E9B && c <= 0x2EF3 ||\n c >= 0x2F00 && c <= 0x2FD5 ||\n c >= 0x2FF0 && c <= 0x2FFB ||\n c >= 0x3000 && c <= 0x303E ||\n c >= 0x3041 && c <= 0x3096 ||\n c >= 0x3099 && c <= 0x30FF ||\n c >= 0x3105 && c <= 0x312D ||\n c >= 0x3131 && c <= 0x318E ||\n c >= 0x3190 && c <= 0x31BA ||\n c >= 0x31C0 && c <= 0x31E3 ||\n c >= 0x31F0 && c <= 0x321E ||\n c >= 0x3220 && c <= 0x3247 ||\n c >= 0x3250 && c <= 0x32FE ||\n c >= 0x3300 && c <= 0x4DBF ||\n c >= 0x4E00 && c <= 0xA48C ||\n c >= 0xA490 && c <= 0xA4C6 ||\n c >= 0xA960 && c <= 0xA97C ||\n c >= 0xAC00 && c <= 0xD7A3 ||\n c >= 0xD7B0 && c <= 0xD7C6 ||\n c >= 0xD7CB && c <= 0xD7FB ||\n c >= 0xF900 && c <= 0xFAFF ||\n c >= 0xFE10 && c <= 0xFE19 ||\n c >= 0xFE30 && c <= 0xFE52 ||\n c >= 0xFE54 && c <= 0xFE66 ||\n c >= 0xFE68 && c <= 0xFE6B ||\n c >= 0xFF01 && c <= 0xFF60 ||\n c >= 0xFFE0 && c <= 0xFFE6;\n}\nrequire(\"./edit_session/folding\").Folding.call(EditSession.prototype);\nrequire(\"./edit_session/bracket_match\").BracketMatch.call(EditSession.prototype);\nconfig.defineOptions(EditSession.prototype, \"session\", {\n wrap: {\n set: function (value) {\n if (!value || value == \"off\")\n value = false;\n else if (value == \"free\")\n value = true;\n else if (value == \"printMargin\")\n value = -1;\n else if (typeof value == \"string\")\n value = parseInt(value, 10) || false;\n if (this.$wrap == value)\n return;\n this.$wrap = value;\n if (!value) {\n this.setUseWrapMode(false);\n }\n else {\n var col = typeof value == \"number\" ? value : null;\n this.setWrapLimitRange(col, col);\n this.setUseWrapMode(true);\n }\n },\n get: function () {\n if (this.getUseWrapMode()) {\n if (this.$wrap == -1)\n return \"printMargin\";\n if (!this.getWrapLimitRange().min)\n return \"free\";\n return this.$wrap;\n }\n return \"off\";\n },\n handlesSet: true\n },\n wrapMethod: {\n set: function (val) {\n val = val == \"auto\"\n ? this.$mode.type != \"text\"\n : val != \"text\";\n if (val != this.$wrapAsCode) {\n this.$wrapAsCode = val;\n if (this.$useWrapMode) {\n this.$useWrapMode = false;\n this.setUseWrapMode(true);\n }\n }\n },\n initialValue: \"auto\"\n },\n indentedSoftWrap: {\n set: function () {\n if (this.$useWrapMode) {\n this.$useWrapMode = false;\n this.setUseWrapMode(true);\n }\n },\n initialValue: true\n },\n firstLineNumber: {\n set: function () { this._signal(\"changeBreakpoint\"); },\n initialValue: 1\n },\n useWorker: {\n set: function (useWorker) {\n this.$useWorker = useWorker;\n this.$stopWorker();\n if (useWorker)\n this.$startWorker();\n },\n initialValue: true\n },\n useSoftTabs: { initialValue: true },\n tabSize: {\n set: function (tabSize) {\n tabSize = parseInt(tabSize);\n if (tabSize > 0 && this.$tabSize !== tabSize) {\n this.$modified = true;\n this.$rowLengthCache = [];\n this.$tabSize = tabSize;\n this._signal(\"changeTabSize\");\n }\n },\n initialValue: 4,\n handlesSet: true\n },\n navigateWithinSoftTabs: { initialValue: false },\n foldStyle: {\n set: function (val) { this.setFoldStyle(val); },\n handlesSet: true\n },\n overwrite: {\n set: function (val) { this._signal(\"changeOverwrite\"); },\n initialValue: false\n },\n newLineMode: {\n set: function (val) { this.doc.setNewLineMode(val); },\n get: function () { return this.doc.getNewLineMode(); },\n handlesSet: true\n },\n mode: {\n set: function (val) { this.setMode(val); },\n get: function () { return this.$modeId; },\n handlesSet: true\n }\n});\nexports.EditSession = EditSession;\n\n});\n\nace.define(\"ace/search\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar lang = require(\"./lib/lang\");\nvar oop = require(\"./lib/oop\");\nvar Range = require(\"./range\").Range;\nvar Search = /** @class */ (function () {\n function Search() {\n this.$options = {};\n }\n Search.prototype.set = function (options) {\n oop.mixin(this.$options, options);\n return this;\n };\n Search.prototype.getOptions = function () {\n return lang.copyObject(this.$options);\n };\n Search.prototype.setOptions = function (options) {\n this.$options = options;\n };\n Search.prototype.find = function (session) {\n var options = this.$options;\n var iterator = this.$matchIterator(session, options);\n if (!iterator)\n return false;\n var firstRange = null;\n iterator.forEach(function (sr, sc, er, ec) {\n firstRange = new Range(sr, sc, er, ec);\n if (sc == ec && options.start && /**@type{Range}*/ (options.start).start\n && options.skipCurrent != false && firstRange.isEqual(/**@type{Range}*/ (options.start))) {\n firstRange = null;\n return false;\n }\n return true;\n });\n return firstRange;\n };\n Search.prototype.findAll = function (session) {\n var options = this.$options;\n if (!options.needle)\n return [];\n this.$assembleRegExp(options);\n var range = options.range;\n var lines = range\n ? session.getLines(range.start.row, range.end.row)\n : session.doc.getAllLines();\n var ranges = [];\n var re = options.re;\n if (options.$isMultiLine) {\n var len = re.length;\n var maxRow = lines.length - len;\n var prevRange;\n outer: for (var row = re.offset || 0; row <= maxRow; row++) {\n for (var j = 0; j < len; j++)\n if (lines[row + j].search(re[j]) == -1)\n continue outer;\n var startLine = lines[row];\n var line = lines[row + len - 1];\n var startIndex = startLine.length - startLine.match(re[0])[0].length;\n var endIndex = line.match(re[len - 1])[0].length;\n if (prevRange && prevRange.end.row === row &&\n prevRange.end.column > startIndex) {\n continue;\n }\n ranges.push(prevRange = new Range(row, startIndex, row + len - 1, endIndex));\n if (len > 2)\n row = row + len - 2;\n }\n }\n else {\n for (var i = 0; i < lines.length; i++) {\n var matches = lang.getMatchOffsets(lines[i], re);\n for (var j = 0; j < matches.length; j++) {\n var match = matches[j];\n ranges.push(new Range(i, match.offset, i, match.offset + match.length));\n }\n }\n }\n if (range) {\n var startColumn = range.start.column;\n var endColumn = range.end.column;\n var i = 0, j = ranges.length - 1;\n while (i < j && ranges[i].start.column < startColumn && ranges[i].start.row == 0)\n i++;\n var endRow = range.end.row - range.start.row;\n while (i < j && ranges[j].end.column > endColumn && ranges[j].end.row == endRow)\n j--;\n ranges = ranges.slice(i, j + 1);\n for (i = 0, j = ranges.length; i < j; i++) {\n ranges[i].start.row += range.start.row;\n ranges[i].end.row += range.start.row;\n }\n }\n return ranges;\n };\n Search.prototype.replace = function (input, replacement) {\n var options = this.$options;\n var re = this.$assembleRegExp(options);\n if (options.$isMultiLine)\n return replacement;\n if (!re)\n return;\n var match = re.exec(input);\n if (!match || match[0].length != input.length)\n return null;\n if (!options.regExp) {\n replacement = replacement.replace(/\\$/g, \"$$$$\");\n }\n replacement = input.replace(re, replacement);\n if (options.preserveCase) {\n replacement = replacement.split(\"\");\n for (var i = Math.min(input.length, input.length); i--;) {\n var ch = input[i];\n if (ch && ch.toLowerCase() != ch)\n replacement[i] = replacement[i].toUpperCase();\n else\n replacement[i] = replacement[i].toLowerCase();\n }\n replacement = replacement.join(\"\");\n }\n return replacement;\n };\n Search.prototype.$assembleRegExp = function (options, $disableFakeMultiline) {\n if (options.needle instanceof RegExp)\n return options.re = options.needle;\n var needle = options.needle;\n if (!options.needle)\n return options.re = false;\n if (!options.regExp)\n needle = lang.escapeRegExp(needle);\n var modifier = options.caseSensitive ? \"gm\" : \"gmi\";\n try {\n new RegExp(needle, \"u\");\n options.$supportsUnicodeFlag = true;\n modifier += \"u\";\n }\n catch (e) {\n options.$supportsUnicodeFlag = false; //left for backward compatibility with previous versions for cases like /ab\\{2}/gu\n }\n if (options.wholeWord)\n needle = addWordBoundary(needle, options);\n options.$isMultiLine = !$disableFakeMultiline && /[\\n\\r]/.test(needle);\n if (options.$isMultiLine)\n return options.re = this.$assembleMultilineRegExp(needle, modifier);\n try {\n var re = new RegExp(needle, modifier);\n }\n catch (e) {\n re = false;\n }\n return options.re = re;\n };\n Search.prototype.$assembleMultilineRegExp = function (needle, modifier) {\n var parts = needle.replace(/\\r\\n|\\r|\\n/g, \"$\\n^\").split(\"\\n\");\n var re = [];\n for (var i = 0; i < parts.length; i++)\n try {\n re.push(new RegExp(parts[i], modifier));\n }\n catch (e) {\n return false;\n }\n return re;\n };\n Search.prototype.$matchIterator = function (session, options) {\n var re = this.$assembleRegExp(options);\n if (!re)\n return false;\n var backwards = options.backwards == true;\n var skipCurrent = options.skipCurrent != false;\n var supportsUnicodeFlag = re.unicode;\n var range = options.range;\n var start = options.start;\n if (!start)\n start = range ? range[backwards ? \"end\" : \"start\"] : session.selection.getRange();\n if (start.start)\n start = start[skipCurrent != backwards ? \"end\" : \"start\"];\n var firstRow = range ? range.start.row : 0;\n var lastRow = range ? range.end.row : session.getLength() - 1;\n if (backwards) {\n var forEach = function (callback) {\n var row = start.row;\n if (forEachInLine(row, start.column, callback))\n return;\n for (row--; row >= firstRow; row--)\n if (forEachInLine(row, Number.MAX_VALUE, callback))\n return;\n if (options.wrap == false)\n return;\n for (row = lastRow, firstRow = start.row; row >= firstRow; row--)\n if (forEachInLine(row, Number.MAX_VALUE, callback))\n return;\n };\n }\n else {\n var forEach = function (callback) {\n var row = start.row;\n if (forEachInLine(row, start.column, callback))\n return;\n for (row = row + 1; row <= lastRow; row++)\n if (forEachInLine(row, 0, callback))\n return;\n if (options.wrap == false)\n return;\n for (row = firstRow, lastRow = start.row; row <= lastRow; row++)\n if (forEachInLine(row, 0, callback))\n return;\n };\n }\n if (options.$isMultiLine) {\n var len = re.length;\n var forEachInLine = function (row, offset, callback) {\n var startRow = backwards ? row - len + 1 : row;\n if (startRow < 0 || startRow + len > session.getLength())\n return;\n var line = session.getLine(startRow);\n var startIndex = line.search(re[0]);\n if (!backwards && startIndex < offset || startIndex === -1)\n return;\n for (var i = 1; i < len; i++) {\n line = session.getLine(startRow + i);\n if (line.search(re[i]) == -1)\n return;\n }\n var endIndex = line.match(re[len - 1])[0].length;\n if (backwards && endIndex > offset)\n return;\n if (callback(startRow, startIndex, startRow + len - 1, endIndex))\n return true;\n };\n }\n else if (backwards) {\n var forEachInLine = function (row, endIndex, callback) {\n var line = session.getLine(row);\n var matches = [];\n var m, last = 0;\n re.lastIndex = 0;\n while ((m = re.exec(line))) {\n var length = m[0].length;\n last = m.index;\n if (!length) {\n if (last >= line.length)\n break;\n re.lastIndex = last += lang.skipEmptyMatch(line, last, supportsUnicodeFlag);\n }\n if (m.index + length > endIndex)\n break;\n matches.push(m.index, length);\n }\n for (var i = matches.length - 1; i >= 0; i -= 2) {\n var column = matches[i - 1];\n var length = matches[i];\n if (callback(row, column, row, column + length))\n return true;\n }\n };\n }\n else {\n var forEachInLine = function (row, startIndex, callback) {\n var line = session.getLine(row);\n var last;\n var m;\n re.lastIndex = startIndex;\n while ((m = re.exec(line))) {\n var length = m[0].length;\n last = m.index;\n if (callback(row, last, row, last + length))\n return true;\n if (!length) {\n re.lastIndex = last += lang.skipEmptyMatch(line, last, supportsUnicodeFlag);\n if (last >= line.length)\n return false;\n }\n }\n };\n }\n return { forEach: forEach };\n };\n return Search;\n}());\nfunction addWordBoundary(needle, options) {\n var supportsLookbehind = lang.supportsLookbehind();\n function wordBoundary(c, firstChar) {\n if (firstChar === void 0) { firstChar = true; }\n var wordRegExp = supportsLookbehind && options.$supportsUnicodeFlag ? new RegExp(\"[\\\\p{L}\\\\p{N}_]\", \"u\") : new RegExp(\"\\\\w\");\n if (wordRegExp.test(c) || options.regExp) {\n if (supportsLookbehind && options.$supportsUnicodeFlag) {\n if (firstChar)\n return \"(?<=^|[^\\\\p{L}\\\\p{N}_])\";\n return \"(?=[^\\\\p{L}\\\\p{N}_]|$)\";\n }\n return \"\\\\b\";\n }\n return \"\";\n }\n var needleArray = Array.from(needle);\n var firstChar = needleArray[0];\n var lastChar = needleArray[needleArray.length - 1];\n return wordBoundary(firstChar) + needle + wordBoundary(lastChar, false);\n}\nexports.Search = Search;\n\n});\n\nace.define(\"ace/keyboard/hash_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})(); var keyUtil = require(\"../lib/keys\");\nvar useragent = require(\"../lib/useragent\");\nvar KEY_MODS = keyUtil.KEY_MODS;\nvar MultiHashHandler = /** @class */ (function () {\n function MultiHashHandler(config, platform) {\n this.$init(config, platform, false);\n }\n MultiHashHandler.prototype.$init = function (config, platform, $singleCommand) {\n this.platform = platform || (useragent.isMac ? \"mac\" : \"win\");\n this.commands = {};\n this.commandKeyBinding = {};\n this.addCommands(config);\n this.$singleCommand = $singleCommand;\n };\n MultiHashHandler.prototype.addCommand = function (command) {\n if (this.commands[command.name])\n this.removeCommand(command);\n this.commands[command.name] = command;\n if (command.bindKey)\n this._buildKeyHash(command);\n };\n MultiHashHandler.prototype.removeCommand = function (command, keepCommand) {\n var name = command && (typeof command === 'string' ? command : command.name);\n command = this.commands[name];\n if (!keepCommand)\n delete this.commands[name];\n var ckb = this.commandKeyBinding;\n for (var keyId in ckb) {\n var cmdGroup = ckb[keyId];\n if (cmdGroup == command) {\n delete ckb[keyId];\n }\n else if (Array.isArray(cmdGroup)) {\n var i = cmdGroup.indexOf(command);\n if (i != -1) {\n cmdGroup.splice(i, 1);\n if (cmdGroup.length == 1)\n ckb[keyId] = cmdGroup[0];\n }\n }\n }\n };\n MultiHashHandler.prototype.bindKey = function (key, command, position) {\n if (typeof key == \"object\" && key) {\n if (position == undefined)\n position = key.position;\n key = key[this.platform];\n }\n if (!key)\n return;\n if (typeof command == \"function\")\n return this.addCommand({ exec: command, bindKey: key, name: command.name || /**@type{string}*/ (key) }); (key).split(\"|\").forEach(function (keyPart) {\n var chain = \"\";\n if (keyPart.indexOf(\" \") != -1) {\n var parts = keyPart.split(/\\s+/);\n keyPart = parts.pop();\n parts.forEach(function (keyPart) {\n var binding = this.parseKeys(keyPart);\n var id = KEY_MODS[binding.hashId] + binding.key;\n chain += (chain ? \" \" : \"\") + id;\n this._addCommandToBinding(chain, \"chainKeys\");\n }, this);\n chain += \" \";\n }\n var binding = this.parseKeys(keyPart);\n var id = KEY_MODS[binding.hashId] + binding.key;\n this._addCommandToBinding(chain + id, command, position);\n }, this);\n };\n MultiHashHandler.prototype._addCommandToBinding = function (keyId, command, position) {\n var ckb = this.commandKeyBinding, i;\n if (!command) {\n delete ckb[keyId];\n }\n else if (!ckb[keyId] || this.$singleCommand) {\n ckb[keyId] = command;\n }\n else {\n if (!Array.isArray(ckb[keyId])) {\n ckb[keyId] = [ckb[keyId]];\n }\n else if ((i = ckb[keyId].indexOf(command)) != -1) {\n ckb[keyId].splice(i, 1);\n }\n if (typeof position != \"number\") {\n position = getPosition(command);\n }\n var commands = ckb[keyId];\n for (i = 0; i < commands.length; i++) {\n var other = commands[i];\n var otherPos = getPosition(other);\n if (otherPos > position)\n break;\n }\n commands.splice(i, 0, command);\n }\n };\n MultiHashHandler.prototype.addCommands = function (commands) {\n commands && Object.keys(commands).forEach(function (name) {\n var command = commands[name];\n if (!command)\n return;\n if (typeof command === \"string\")\n return this.bindKey(command, name);\n if (typeof command === \"function\")\n command = { exec: command };\n if (typeof command !== \"object\")\n return;\n if (!command.name)\n command.name = name;\n this.addCommand(command);\n }, this);\n };\n MultiHashHandler.prototype.removeCommands = function (commands) {\n Object.keys(commands).forEach(function (name) {\n this.removeCommand(commands[name]);\n }, this);\n };\n MultiHashHandler.prototype.bindKeys = function (keyList) {\n Object.keys(keyList).forEach(function (key) {\n this.bindKey(key, keyList[key]);\n }, this);\n };\n MultiHashHandler.prototype._buildKeyHash = function (command) {\n this.bindKey(command.bindKey, command);\n };\n MultiHashHandler.prototype.parseKeys = function (keys) {\n var parts = keys.toLowerCase().split(/[\\-\\+]([\\-\\+])?/).filter(function (x) { return x; });\n var key = parts.pop();\n var keyCode = keyUtil[key];\n if (keyUtil.FUNCTION_KEYS[keyCode])\n key = keyUtil.FUNCTION_KEYS[keyCode].toLowerCase();\n else if (!parts.length)\n return { key: key, hashId: -1 };\n else if (parts.length == 1 && parts[0] == \"shift\")\n return { key: key.toUpperCase(), hashId: -1 };\n var hashId = 0;\n for (var i = parts.length; i--;) {\n var modifier = keyUtil.KEY_MODS[parts[i]];\n if (modifier == null) {\n if (typeof console != \"undefined\")\n console.error(\"invalid modifier \" + parts[i] + \" in \" + keys);\n return false;\n }\n hashId |= modifier;\n }\n return { key: key, hashId: hashId };\n };\n MultiHashHandler.prototype.findKeyCommand = function (hashId, keyString) {\n var key = KEY_MODS[hashId] + keyString;\n return this.commandKeyBinding[key];\n };\n MultiHashHandler.prototype.handleKeyboard = function (data, hashId, keyString, keyCode) {\n if (keyCode < 0)\n return;\n var key = KEY_MODS[hashId] + keyString;\n var command = this.commandKeyBinding[key];\n if (data.$keyChain) {\n data.$keyChain += \" \" + key;\n command = this.commandKeyBinding[data.$keyChain] || command;\n }\n if (command) {\n if (command == \"chainKeys\" || command[command.length - 1] == \"chainKeys\") {\n data.$keyChain = data.$keyChain || key;\n return { command: \"null\" };\n }\n }\n if (data.$keyChain) {\n if ((!hashId || hashId == 4) && keyString.length == 1)\n data.$keyChain = data.$keyChain.slice(0, -key.length - 1); // wait for input\n else if (hashId == -1 || keyCode > 0)\n data.$keyChain = \"\"; // reset keyChain\n }\n return { command: command };\n };\n MultiHashHandler.prototype.getStatusText = function (editor, data) {\n return data.$keyChain || \"\";\n };\n return MultiHashHandler;\n}());\nfunction getPosition(command) {\n return typeof command == \"object\" && command.bindKey\n && command.bindKey.position\n || (command.isDefault ? -100 : 0);\n}\nvar HashHandler = /** @class */ (function (_super) {\n __extends(HashHandler, _super);\n function HashHandler(config, platform) {\n var _this = _super.call(this, config, platform) || this;\n _this.$singleCommand = true;\n return _this;\n }\n return HashHandler;\n}(MultiHashHandler));\nHashHandler.call = function (thisArg, config, platform) {\n MultiHashHandler.prototype.$init.call(thisArg, config, platform, true);\n};\nMultiHashHandler.call = function (thisArg, config, platform) {\n MultiHashHandler.prototype.$init.call(thisArg, config, platform, false);\n};\nexports.HashHandler = HashHandler;\nexports.MultiHashHandler = MultiHashHandler;\n\n});\n\nace.define(\"ace/commands/command_manager\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/keyboard/hash_handler\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar oop = require(\"../lib/oop\");\nvar MultiHashHandler = require(\"../keyboard/hash_handler\").MultiHashHandler;\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar CommandManager = /** @class */ (function (_super) {\n __extends(CommandManager, _super);\n function CommandManager(platform, commands) {\n var _this = _super.call(this, commands, platform) || this;\n _this.byName = _this.commands;\n _this.setDefaultHandler(\"exec\", function (e) {\n if (!e.args) {\n return e.command.exec(e.editor, {}, e.event, true);\n }\n return e.command.exec(e.editor, e.args, e.event, false);\n });\n return _this;\n }\n CommandManager.prototype.exec = function (command, editor, args) {\n if (Array.isArray(command)) {\n for (var i = command.length; i--;) {\n if (this.exec(command[i], editor, args))\n return true;\n }\n return false;\n }\n if (typeof command === \"string\")\n command = this.commands[command];\n if (!this.canExecute(command, editor)) {\n return false;\n }\n var e = { editor: editor, command: command, args: args };\n e.returnValue = this._emit(\"exec\", e);\n this._signal(\"afterExec\", e);\n return e.returnValue === false ? false : true;\n };\n CommandManager.prototype.canExecute = function (command, editor) {\n if (typeof command === \"string\")\n command = this.commands[command];\n if (!command)\n return false;\n if (editor && editor.$readOnly && !command.readOnly)\n return false;\n if (this.$checkCommandState != false && command.isAvailable && !command.isAvailable(editor))\n return false;\n return true;\n };\n CommandManager.prototype.toggleRecording = function (editor) {\n if (this.$inReplay)\n return;\n editor && editor._emit(\"changeStatus\");\n if (this.recording) {\n this.macro.pop();\n this.off(\"exec\", this.$addCommandToMacro);\n if (!this.macro.length)\n this.macro = this.oldMacro;\n return this.recording = false;\n }\n if (!this.$addCommandToMacro) {\n this.$addCommandToMacro = function (e) {\n this.macro.push([e.command, e.args]);\n }.bind(this);\n }\n this.oldMacro = this.macro;\n this.macro = [];\n this.on(\"exec\", this.$addCommandToMacro);\n return this.recording = true;\n };\n CommandManager.prototype.replay = function (editor) {\n if (this.$inReplay || !this.macro)\n return;\n if (this.recording)\n return this.toggleRecording(editor);\n try {\n this.$inReplay = true;\n this.macro.forEach(function (x) {\n if (typeof x == \"string\")\n this.exec(x, editor);\n else\n this.exec(x[0], editor, x[1]);\n }, this);\n }\n finally {\n this.$inReplay = false;\n }\n };\n CommandManager.prototype.trimMacro = function (m) {\n return m.map(function (x) {\n if (typeof x[0] != \"string\")\n x[0] = x[0].name;\n if (!x[1])\n x = x[0];\n return x;\n });\n };\n return CommandManager;\n}(MultiHashHandler));\noop.implement(CommandManager.prototype, EventEmitter);\nexports.CommandManager = CommandManager;\n\n});\n\nace.define(\"ace/commands/default_commands\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/config\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar lang = require(\"../lib/lang\");\nvar config = require(\"../config\");\nvar Range = require(\"../range\").Range;\nfunction bindKey(win, mac) {\n return { win: win, mac: mac };\n}\nexports.commands = [{\n name: \"showSettingsMenu\",\n description: \"Show settings menu\",\n bindKey: bindKey(\"Ctrl-,\", \"Command-,\"),\n exec: function (editor) {\n config.loadModule(\"ace/ext/settings_menu\", function (module) {\n module.init(editor);\n editor.showSettingsMenu();\n });\n },\n readOnly: true\n }, {\n name: \"goToNextError\",\n description: \"Go to next error\",\n bindKey: bindKey(\"Alt-E\", \"F4\"),\n exec: function (editor) {\n config.loadModule(\"ace/ext/error_marker\", function (module) {\n module.showErrorMarker(editor, 1);\n });\n },\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"goToPreviousError\",\n description: \"Go to previous error\",\n bindKey: bindKey(\"Alt-Shift-E\", \"Shift-F4\"),\n exec: function (editor) {\n config.loadModule(\"ace/ext/error_marker\", function (module) {\n module.showErrorMarker(editor, -1);\n });\n },\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"selectall\",\n description: \"Select all\",\n bindKey: bindKey(\"Ctrl-A\", \"Command-A\"),\n exec: function (editor) { editor.selectAll(); },\n readOnly: true\n }, {\n name: \"centerselection\",\n description: \"Center selection\",\n bindKey: bindKey(null, \"Ctrl-L\"),\n exec: function (editor) { editor.centerSelection(); },\n readOnly: true\n }, {\n name: \"gotoline\",\n description: \"Go to line...\",\n bindKey: bindKey(\"Ctrl-L\", \"Command-L\"),\n exec: function (editor, line) {\n if (typeof line === \"number\" && !isNaN(line))\n editor.gotoLine(line);\n editor.prompt({ $type: \"gotoLine\" });\n },\n readOnly: true\n }, {\n name: \"fold\",\n bindKey: bindKey(\"Alt-L|Ctrl-F1\", \"Command-Alt-L|Command-F1\"),\n exec: function (editor) { editor.session.toggleFold(false); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"unfold\",\n bindKey: bindKey(\"Alt-Shift-L|Ctrl-Shift-F1\", \"Command-Alt-Shift-L|Command-Shift-F1\"),\n exec: function (editor) { editor.session.toggleFold(true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"toggleFoldWidget\",\n description: \"Toggle fold widget\",\n bindKey: bindKey(\"F2\", \"F2\"),\n exec: function (editor) { editor.session.toggleFoldWidget(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"toggleParentFoldWidget\",\n description: \"Toggle parent fold widget\",\n bindKey: bindKey(\"Alt-F2\", \"Alt-F2\"),\n exec: function (editor) { editor.session.toggleFoldWidget(true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"foldall\",\n description: \"Fold all\",\n bindKey: bindKey(null, \"Ctrl-Command-Option-0\"),\n exec: function (editor) { editor.session.foldAll(); },\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"foldAllComments\",\n description: \"Fold all comments\",\n bindKey: bindKey(null, \"Ctrl-Command-Option-0\"),\n exec: function (editor) { editor.session.foldAllComments(); },\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"foldOther\",\n description: \"Fold other\",\n bindKey: bindKey(\"Alt-0\", \"Command-Option-0\"),\n exec: function (editor) {\n editor.session.foldAll();\n editor.session.unfold(editor.selection.getAllRanges());\n },\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"unfoldall\",\n description: \"Unfold all\",\n bindKey: bindKey(\"Alt-Shift-0\", \"Command-Option-Shift-0\"),\n exec: function (editor) { editor.session.unfold(); },\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"findnext\",\n description: \"Find next\",\n bindKey: bindKey(\"Ctrl-K\", \"Command-G\"),\n exec: function (editor) { editor.findNext(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"findprevious\",\n description: \"Find previous\",\n bindKey: bindKey(\"Ctrl-Shift-K\", \"Command-Shift-G\"),\n exec: function (editor) { editor.findPrevious(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"selectOrFindNext\",\n description: \"Select or find next\",\n bindKey: bindKey(\"Alt-K\", \"Ctrl-G\"),\n exec: function (editor) {\n if (editor.selection.isEmpty())\n editor.selection.selectWord();\n else\n editor.findNext();\n },\n readOnly: true\n }, {\n name: \"selectOrFindPrevious\",\n description: \"Select or find previous\",\n bindKey: bindKey(\"Alt-Shift-K\", \"Ctrl-Shift-G\"),\n exec: function (editor) {\n if (editor.selection.isEmpty())\n editor.selection.selectWord();\n else\n editor.findPrevious();\n },\n readOnly: true\n }, {\n name: \"find\",\n description: \"Find\",\n bindKey: bindKey(\"Ctrl-F\", \"Command-F\"),\n exec: function (editor) {\n config.loadModule(\"ace/ext/searchbox\", function (e) { e.Search(editor); });\n },\n readOnly: true\n }, {\n name: \"overwrite\",\n description: \"Overwrite\",\n bindKey: \"Insert\",\n exec: function (editor) { editor.toggleOverwrite(); },\n readOnly: true\n }, {\n name: \"selecttostart\",\n description: \"Select to start\",\n bindKey: bindKey(\"Ctrl-Shift-Home\", \"Command-Shift-Home|Command-Shift-Up\"),\n exec: function (editor) { editor.getSelection().selectFileStart(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"gotostart\",\n description: \"Go to start\",\n bindKey: bindKey(\"Ctrl-Home\", \"Command-Home|Command-Up\"),\n exec: function (editor) { editor.navigateFileStart(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"selectup\",\n description: \"Select up\",\n bindKey: bindKey(\"Shift-Up\", \"Shift-Up|Ctrl-Shift-P\"),\n exec: function (editor) { editor.getSelection().selectUp(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"golineup\",\n description: \"Go line up\",\n bindKey: bindKey(\"Up\", \"Up|Ctrl-P\"),\n exec: function (editor, args) { editor.navigateUp(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selecttoend\",\n description: \"Select to end\",\n bindKey: bindKey(\"Ctrl-Shift-End\", \"Command-Shift-End|Command-Shift-Down\"),\n exec: function (editor) { editor.getSelection().selectFileEnd(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"gotoend\",\n description: \"Go to end\",\n bindKey: bindKey(\"Ctrl-End\", \"Command-End|Command-Down\"),\n exec: function (editor) { editor.navigateFileEnd(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"selectdown\",\n description: \"Select down\",\n bindKey: bindKey(\"Shift-Down\", \"Shift-Down|Ctrl-Shift-N\"),\n exec: function (editor) { editor.getSelection().selectDown(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"golinedown\",\n description: \"Go line down\",\n bindKey: bindKey(\"Down\", \"Down|Ctrl-N\"),\n exec: function (editor, args) { editor.navigateDown(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectwordleft\",\n description: \"Select word left\",\n bindKey: bindKey(\"Ctrl-Shift-Left\", \"Option-Shift-Left\"),\n exec: function (editor) { editor.getSelection().selectWordLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotowordleft\",\n description: \"Go to word left\",\n bindKey: bindKey(\"Ctrl-Left\", \"Option-Left\"),\n exec: function (editor) { editor.navigateWordLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selecttolinestart\",\n description: \"Select to line start\",\n bindKey: bindKey(\"Alt-Shift-Left\", \"Command-Shift-Left|Ctrl-Shift-A\"),\n exec: function (editor) { editor.getSelection().selectLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotolinestart\",\n description: \"Go to line start\",\n bindKey: bindKey(\"Alt-Left|Home\", \"Command-Left|Home|Ctrl-A\"),\n exec: function (editor) { editor.navigateLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectleft\",\n description: \"Select left\",\n bindKey: bindKey(\"Shift-Left\", \"Shift-Left|Ctrl-Shift-B\"),\n exec: function (editor) { editor.getSelection().selectLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotoleft\",\n description: \"Go to left\",\n bindKey: bindKey(\"Left\", \"Left|Ctrl-B\"),\n exec: function (editor, args) { editor.navigateLeft(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectwordright\",\n description: \"Select word right\",\n bindKey: bindKey(\"Ctrl-Shift-Right\", \"Option-Shift-Right\"),\n exec: function (editor) { editor.getSelection().selectWordRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotowordright\",\n description: \"Go to word right\",\n bindKey: bindKey(\"Ctrl-Right\", \"Option-Right\"),\n exec: function (editor) { editor.navigateWordRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selecttolineend\",\n description: \"Select to line end\",\n bindKey: bindKey(\"Alt-Shift-Right\", \"Command-Shift-Right|Shift-End|Ctrl-Shift-E\"),\n exec: function (editor) { editor.getSelection().selectLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotolineend\",\n description: \"Go to line end\",\n bindKey: bindKey(\"Alt-Right|End\", \"Command-Right|End|Ctrl-E\"),\n exec: function (editor) { editor.navigateLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectright\",\n description: \"Select right\",\n bindKey: bindKey(\"Shift-Right\", \"Shift-Right\"),\n exec: function (editor) { editor.getSelection().selectRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotoright\",\n description: \"Go to right\",\n bindKey: bindKey(\"Right\", \"Right|Ctrl-F\"),\n exec: function (editor, args) { editor.navigateRight(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectpagedown\",\n description: \"Select page down\",\n bindKey: \"Shift-PageDown\",\n exec: function (editor) { editor.selectPageDown(); },\n readOnly: true\n }, {\n name: \"pagedown\",\n description: \"Page down\",\n bindKey: bindKey(null, \"Option-PageDown\"),\n exec: function (editor) { editor.scrollPageDown(); },\n readOnly: true\n }, {\n name: \"gotopagedown\",\n description: \"Go to page down\",\n bindKey: bindKey(\"PageDown\", \"PageDown|Ctrl-V\"),\n exec: function (editor) { editor.gotoPageDown(); },\n readOnly: true\n }, {\n name: \"selectpageup\",\n description: \"Select page up\",\n bindKey: \"Shift-PageUp\",\n exec: function (editor) { editor.selectPageUp(); },\n readOnly: true\n }, {\n name: \"pageup\",\n description: \"Page up\",\n bindKey: bindKey(null, \"Option-PageUp\"),\n exec: function (editor) { editor.scrollPageUp(); },\n readOnly: true\n }, {\n name: \"gotopageup\",\n description: \"Go to page up\",\n bindKey: \"PageUp\",\n exec: function (editor) { editor.gotoPageUp(); },\n readOnly: true\n }, {\n name: \"scrollup\",\n description: \"Scroll up\",\n bindKey: bindKey(\"Ctrl-Up\", null),\n exec: function (e) { e.renderer.scrollBy(0, -2 * e.renderer.layerConfig.lineHeight); },\n readOnly: true\n }, {\n name: \"scrolldown\",\n description: \"Scroll down\",\n bindKey: bindKey(\"Ctrl-Down\", null),\n exec: function (e) { e.renderer.scrollBy(0, 2 * e.renderer.layerConfig.lineHeight); },\n readOnly: true\n }, {\n name: \"selectlinestart\",\n description: \"Select line start\",\n bindKey: \"Shift-Home\",\n exec: function (editor) { editor.getSelection().selectLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectlineend\",\n description: \"Select line end\",\n bindKey: \"Shift-End\",\n exec: function (editor) { editor.getSelection().selectLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"togglerecording\",\n description: \"Toggle recording\",\n bindKey: bindKey(\"Ctrl-Alt-E\", \"Command-Option-E\"),\n exec: function (editor) { editor.commands.toggleRecording(editor); },\n readOnly: true\n }, {\n name: \"replaymacro\",\n description: \"Replay macro\",\n bindKey: bindKey(\"Ctrl-Shift-E\", \"Command-Shift-E\"),\n exec: function (editor) { editor.commands.replay(editor); },\n readOnly: true\n }, {\n name: \"jumptomatching\",\n description: \"Jump to matching\",\n bindKey: bindKey(\"Ctrl-\\\\|Ctrl-P\", \"Command-\\\\\"),\n exec: function (editor) { editor.jumpToMatching(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"selecttomatching\",\n description: \"Select to matching\",\n bindKey: bindKey(\"Ctrl-Shift-\\\\|Ctrl-Shift-P\", \"Command-Shift-\\\\\"),\n exec: function (editor) { editor.jumpToMatching(true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"expandToMatching\",\n description: \"Expand to matching\",\n bindKey: bindKey(\"Ctrl-Shift-M\", \"Ctrl-Shift-M\"),\n exec: function (editor) { editor.jumpToMatching(true, true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"passKeysToBrowser\",\n description: \"Pass keys to browser\",\n bindKey: bindKey(null, null),\n exec: function () { },\n passEvent: true,\n readOnly: true\n }, {\n name: \"copy\",\n description: \"Copy\",\n exec: function (editor) {\n },\n readOnly: true\n },\n {\n name: \"cut\",\n description: \"Cut\",\n exec: function (editor) {\n var cutLine = editor.$copyWithEmptySelection && editor.selection.isEmpty();\n var range = cutLine ? editor.selection.getLineRange() : editor.selection.getRange();\n editor._emit(\"cut\", range);\n if (!range.isEmpty())\n editor.session.remove(range);\n editor.clearSelection();\n },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"paste\",\n description: \"Paste\",\n exec: function (editor, args) {\n editor.$handlePaste(args);\n },\n scrollIntoView: \"cursor\"\n }, {\n name: \"removeline\",\n description: \"Remove line\",\n bindKey: bindKey(\"Ctrl-D\", \"Command-D\"),\n exec: function (editor) { editor.removeLines(); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEachLine\"\n }, {\n name: \"duplicateSelection\",\n description: \"Duplicate selection\",\n bindKey: bindKey(\"Ctrl-Shift-D\", \"Command-Shift-D\"),\n exec: function (editor) { editor.duplicateSelection(); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"sortlines\",\n description: \"Sort lines\",\n bindKey: bindKey(\"Ctrl-Alt-S\", \"Command-Alt-S\"),\n exec: function (editor) { editor.sortLines(); },\n scrollIntoView: \"selection\",\n multiSelectAction: \"forEachLine\"\n }, {\n name: \"togglecomment\",\n description: \"Toggle comment\",\n bindKey: bindKey(\"Ctrl-/\", \"Command-/\"),\n exec: function (editor) { editor.toggleCommentLines(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"toggleBlockComment\",\n description: \"Toggle block comment\",\n bindKey: bindKey(\"Ctrl-Shift-/\", \"Command-Shift-/\"),\n exec: function (editor) { editor.toggleBlockComment(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"modifyNumberUp\",\n description: \"Modify number up\",\n bindKey: bindKey(\"Ctrl-Shift-Up\", \"Alt-Shift-Up\"),\n exec: function (editor) { editor.modifyNumber(1); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"modifyNumberDown\",\n description: \"Modify number down\",\n bindKey: bindKey(\"Ctrl-Shift-Down\", \"Alt-Shift-Down\"),\n exec: function (editor) { editor.modifyNumber(-1); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"replace\",\n description: \"Replace\",\n bindKey: bindKey(\"Ctrl-H\", \"Command-Option-F\"),\n exec: function (editor) {\n config.loadModule(\"ace/ext/searchbox\", function (e) { e.Search(editor, true); });\n }\n }, {\n name: \"undo\",\n description: \"Undo\",\n bindKey: bindKey(\"Ctrl-Z\", \"Command-Z\"),\n exec: function (editor) { editor.undo(); }\n }, {\n name: \"redo\",\n description: \"Redo\",\n bindKey: bindKey(\"Ctrl-Shift-Z|Ctrl-Y\", \"Command-Shift-Z|Command-Y\"),\n exec: function (editor) { editor.redo(); }\n }, {\n name: \"copylinesup\",\n description: \"Copy lines up\",\n bindKey: bindKey(\"Alt-Shift-Up\", \"Command-Option-Up\"),\n exec: function (editor) { editor.copyLinesUp(); },\n scrollIntoView: \"cursor\"\n }, {\n name: \"movelinesup\",\n description: \"Move lines up\",\n bindKey: bindKey(\"Alt-Up\", \"Option-Up\"),\n exec: function (editor) { editor.moveLinesUp(); },\n scrollIntoView: \"cursor\"\n }, {\n name: \"copylinesdown\",\n description: \"Copy lines down\",\n bindKey: bindKey(\"Alt-Shift-Down\", \"Command-Option-Down\"),\n exec: function (editor) { editor.copyLinesDown(); },\n scrollIntoView: \"cursor\"\n }, {\n name: \"movelinesdown\",\n description: \"Move lines down\",\n bindKey: bindKey(\"Alt-Down\", \"Option-Down\"),\n exec: function (editor) { editor.moveLinesDown(); },\n scrollIntoView: \"cursor\"\n }, {\n name: \"del\",\n description: \"Delete\",\n bindKey: bindKey(\"Delete\", \"Delete|Ctrl-D|Shift-Delete\"),\n exec: function (editor) { editor.remove(\"right\"); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"backspace\",\n description: \"Backspace\",\n bindKey: bindKey(\"Shift-Backspace|Backspace\", \"Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H\"),\n exec: function (editor) { editor.remove(\"left\"); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"cut_or_delete\",\n description: \"Cut or delete\",\n bindKey: bindKey(\"Shift-Delete\", null),\n exec: function (editor) {\n if (editor.selection.isEmpty()) {\n editor.remove(\"left\");\n }\n else {\n return false;\n }\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolinestart\",\n description: \"Remove to line start\",\n bindKey: bindKey(\"Alt-Backspace\", \"Command-Backspace\"),\n exec: function (editor) { editor.removeToLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolineend\",\n description: \"Remove to line end\",\n bindKey: bindKey(\"Alt-Delete\", \"Ctrl-K|Command-Delete\"),\n exec: function (editor) { editor.removeToLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolinestarthard\",\n description: \"Remove to line start hard\",\n bindKey: bindKey(\"Ctrl-Shift-Backspace\", null),\n exec: function (editor) {\n var range = editor.selection.getRange();\n range.start.column = 0;\n editor.session.remove(range);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolineendhard\",\n description: \"Remove to line end hard\",\n bindKey: bindKey(\"Ctrl-Shift-Delete\", null),\n exec: function (editor) {\n var range = editor.selection.getRange();\n range.end.column = Number.MAX_VALUE;\n editor.session.remove(range);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removewordleft\",\n description: \"Remove word left\",\n bindKey: bindKey(\"Ctrl-Backspace\", \"Alt-Backspace|Ctrl-Alt-Backspace\"),\n exec: function (editor) { editor.removeWordLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removewordright\",\n description: \"Remove word right\",\n bindKey: bindKey(\"Ctrl-Delete\", \"Alt-Delete\"),\n exec: function (editor) { editor.removeWordRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"outdent\",\n description: \"Outdent\",\n bindKey: bindKey(\"Shift-Tab\", \"Shift-Tab\"),\n exec: function (editor) { editor.blockOutdent(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"indent\",\n description: \"Indent\",\n bindKey: bindKey(\"Tab\", \"Tab\"),\n exec: function (editor) { editor.indent(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"blockoutdent\",\n description: \"Block outdent\",\n bindKey: bindKey(\"Ctrl-[\", \"Ctrl-[\"),\n exec: function (editor) { editor.blockOutdent(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"blockindent\",\n description: \"Block indent\",\n bindKey: bindKey(\"Ctrl-]\", \"Ctrl-]\"),\n exec: function (editor) { editor.blockIndent(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"insertstring\",\n description: \"Insert string\",\n exec: function (editor, str) { editor.insert(str); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"inserttext\",\n description: \"Insert text\",\n exec: function (editor, args) {\n editor.insert(lang.stringRepeat(args.text || \"\", args.times || 1));\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"splitline\",\n description: \"Split line\",\n bindKey: bindKey(null, \"Ctrl-O\"),\n exec: function (editor) { editor.splitLine(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"transposeletters\",\n description: \"Transpose letters\",\n bindKey: bindKey(\"Alt-Shift-X\", \"Ctrl-T\"),\n exec: function (editor) { editor.transposeLetters(); },\n multiSelectAction: function (editor) { editor.transposeSelections(1); },\n scrollIntoView: \"cursor\"\n }, {\n name: \"touppercase\",\n description: \"To uppercase\",\n bindKey: bindKey(\"Ctrl-U\", \"Ctrl-U\"),\n exec: function (editor) { editor.toUpperCase(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"tolowercase\",\n description: \"To lowercase\",\n bindKey: bindKey(\"Ctrl-Shift-U\", \"Ctrl-Shift-U\"),\n exec: function (editor) { editor.toLowerCase(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"autoindent\",\n description: \"Auto Indent\",\n bindKey: bindKey(null, null),\n exec: function (editor) { editor.autoIndent(); },\n scrollIntoView: \"animate\"\n }, {\n name: \"expandtoline\",\n description: \"Expand to line\",\n bindKey: bindKey(\"Ctrl-Shift-L\", \"Command-Shift-L\"),\n exec: function (editor) {\n var range = editor.selection.getRange();\n range.start.column = range.end.column = 0;\n range.end.row++;\n editor.selection.setRange(range, false);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"openlink\",\n bindKey: bindKey(\"Ctrl+F3\", \"F3\"),\n exec: function (editor) { editor.openLink(); }\n }, {\n name: \"joinlines\",\n description: \"Join lines\",\n bindKey: bindKey(null, null),\n exec: function (editor) {\n var isBackwards = editor.selection.isBackwards();\n var selectionStart = isBackwards ? editor.selection.getSelectionLead() : editor.selection.getSelectionAnchor();\n var selectionEnd = isBackwards ? editor.selection.getSelectionAnchor() : editor.selection.getSelectionLead();\n var firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length;\n var selectedText = editor.session.doc.getTextRange(editor.selection.getRange());\n var selectedCount = selectedText.replace(/\\n\\s*/, \" \").length;\n var insertLine = editor.session.doc.getLine(selectionStart.row);\n for (var i = selectionStart.row + 1; i <= selectionEnd.row + 1; i++) {\n var curLine = lang.stringTrimLeft(lang.stringTrimRight(editor.session.doc.getLine(i)));\n if (curLine.length !== 0) {\n curLine = \" \" + curLine;\n }\n insertLine += curLine;\n }\n if (selectionEnd.row + 1 < (editor.session.doc.getLength() - 1)) {\n insertLine += editor.session.doc.getNewLineCharacter();\n }\n editor.clearSelection();\n editor.session.doc.replace(new Range(selectionStart.row, 0, selectionEnd.row + 2, 0), insertLine);\n if (selectedCount > 0) {\n editor.selection.moveCursorTo(selectionStart.row, selectionStart.column);\n editor.selection.selectTo(selectionStart.row, selectionStart.column + selectedCount);\n }\n else {\n firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length > firstLineEndCol ? (firstLineEndCol + 1) : firstLineEndCol;\n editor.selection.moveCursorTo(selectionStart.row, firstLineEndCol);\n }\n },\n multiSelectAction: \"forEach\",\n readOnly: true\n }, {\n name: \"invertSelection\",\n description: \"Invert selection\",\n bindKey: bindKey(null, null),\n exec: function (editor) {\n var endRow = editor.session.doc.getLength() - 1;\n var endCol = editor.session.doc.getLine(endRow).length;\n var ranges = editor.selection.rangeList.ranges;\n var newRanges = [];\n if (ranges.length < 1) {\n ranges = [editor.selection.getRange()];\n }\n for (var i = 0; i < ranges.length; i++) {\n if (i == (ranges.length - 1)) {\n if (!(ranges[i].end.row === endRow && ranges[i].end.column === endCol)) {\n newRanges.push(new Range(ranges[i].end.row, ranges[i].end.column, endRow, endCol));\n }\n }\n if (i === 0) {\n if (!(ranges[i].start.row === 0 && ranges[i].start.column === 0)) {\n newRanges.push(new Range(0, 0, ranges[i].start.row, ranges[i].start.column));\n }\n }\n else {\n newRanges.push(new Range(ranges[i - 1].end.row, ranges[i - 1].end.column, ranges[i].start.row, ranges[i].start.column));\n }\n }\n editor.exitMultiSelectMode();\n editor.clearSelection();\n for (var i = 0; i < newRanges.length; i++) {\n editor.selection.addRange(newRanges[i], false);\n }\n },\n readOnly: true,\n scrollIntoView: \"none\"\n }, {\n name: \"addLineAfter\",\n description: \"Add new line after the current line\",\n exec: function (editor) {\n editor.selection.clearSelection();\n editor.navigateLineEnd();\n editor.insert(\"\\n\");\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"addLineBefore\",\n description: \"Add new line before the current line\",\n exec: function (editor) {\n editor.selection.clearSelection();\n var cursor = editor.getCursorPosition();\n editor.selection.moveTo(cursor.row - 1, Number.MAX_VALUE);\n editor.insert(\"\\n\");\n if (cursor.row === 0)\n editor.navigateUp();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"openCommandPallete\",\n exec: function (editor) {\n console.warn(\"This is an obsolete command. Please use `openCommandPalette` instead.\");\n editor.prompt({ $type: \"commands\" });\n },\n readOnly: true\n }, {\n name: \"openCommandPalette\",\n description: \"Open command palette\",\n bindKey: bindKey(\"F1\", \"F1\"),\n exec: function (editor) {\n editor.prompt({ $type: \"commands\" });\n },\n readOnly: true\n }, {\n name: \"modeSelect\",\n description: \"Change language mode...\",\n bindKey: bindKey(null, null),\n exec: function (editor) {\n editor.prompt({ $type: \"modes\" });\n },\n readOnly: true\n }];\nfor (var i = 1; i < 9; i++) {\n exports.commands.push({\n name: \"foldToLevel\" + i,\n description: \"Fold To Level \" + i,\n level: i,\n exec: function (editor) { editor.session.foldToLevel(this.level); },\n scrollIntoView: \"center\",\n readOnly: true\n });\n}\n\n});\n\nace.define(\"ace/line_widgets\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"./lib/dom\");\nvar LineWidgets = /** @class */ (function () {\n function LineWidgets(session) {\n this.session = session;\n this.session.widgetManager = this;\n this.session.getRowLength = this.getRowLength;\n this.session.$getWidgetScreenLength = this.$getWidgetScreenLength;\n this.updateOnChange = this.updateOnChange.bind(this);\n this.renderWidgets = this.renderWidgets.bind(this);\n this.measureWidgets = this.measureWidgets.bind(this);\n this.session._changedWidgets = [];\n this.$onChangeEditor = this.$onChangeEditor.bind(this);\n this.session.on(\"change\", this.updateOnChange);\n this.session.on(\"changeFold\", this.updateOnFold);\n this.session.on(\"changeEditor\", this.$onChangeEditor);\n }\n LineWidgets.prototype.getRowLength = function (row) {\n var h;\n if (this.lineWidgets)\n h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\n else\n h = 0;\n if (!this[\"$useWrapMode\"] || !this[\"$wrapData\"][row]) {\n return 1 + h;\n }\n else {\n return this[\"$wrapData\"][row].length + 1 + h;\n }\n };\n LineWidgets.prototype.$getWidgetScreenLength = function () {\n var screenRows = 0;\n this.lineWidgets.forEach(function (w) {\n if (w && w.rowCount && !w.hidden)\n screenRows += w.rowCount;\n });\n return screenRows;\n };\n LineWidgets.prototype.$onChangeEditor = function (e) {\n this.attach(e.editor);\n };\n LineWidgets.prototype.attach = function (editor) {\n if (editor && editor.widgetManager && editor.widgetManager != this)\n editor.widgetManager.detach();\n if (this.editor == editor)\n return;\n this.detach();\n this.editor = editor;\n if (editor) {\n editor.widgetManager = this;\n editor.renderer.on(\"beforeRender\", this.measureWidgets);\n editor.renderer.on(\"afterRender\", this.renderWidgets);\n }\n };\n LineWidgets.prototype.detach = function (e) {\n var editor = this.editor;\n if (!editor)\n return;\n this.editor = null;\n editor.widgetManager = null;\n editor.renderer.off(\"beforeRender\", this.measureWidgets);\n editor.renderer.off(\"afterRender\", this.renderWidgets);\n var lineWidgets = this.session.lineWidgets;\n lineWidgets && lineWidgets.forEach(function (w) {\n if (w && w.el && w.el.parentNode) {\n w._inDocument = false;\n w.el.parentNode.removeChild(w.el);\n }\n });\n };\n LineWidgets.prototype.updateOnFold = function (e, session) {\n var lineWidgets = session.lineWidgets;\n if (!lineWidgets || !e.action)\n return;\n var fold = e.data;\n var start = fold.start.row;\n var end = fold.end.row;\n var hide = e.action == \"add\";\n for (var i = start + 1; i < end; i++) {\n if (lineWidgets[i])\n lineWidgets[i].hidden = hide;\n }\n if (lineWidgets[end]) {\n if (hide) {\n if (!lineWidgets[start])\n lineWidgets[start] = lineWidgets[end];\n else\n lineWidgets[end].hidden = hide;\n }\n else {\n if (lineWidgets[start] == lineWidgets[end])\n lineWidgets[start] = undefined;\n lineWidgets[end].hidden = hide;\n }\n }\n };\n LineWidgets.prototype.updateOnChange = function (delta) {\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets)\n return;\n var startRow = delta.start.row;\n var len = delta.end.row - startRow;\n if (len === 0) {\n }\n else if (delta.action == \"remove\") {\n var removed = lineWidgets.splice(startRow + 1, len);\n if (!lineWidgets[startRow] && removed[removed.length - 1]) {\n lineWidgets[startRow] = removed.pop();\n }\n removed.forEach(function (w) {\n w && this.removeLineWidget(w);\n }, this);\n this.$updateRows();\n }\n else {\n var args = new Array(len);\n if (lineWidgets[startRow] && lineWidgets[startRow].column != null) {\n if (delta.start.column > lineWidgets[startRow].column)\n startRow++;\n }\n args.unshift(startRow, 0);\n lineWidgets.splice.apply(lineWidgets, args);\n this.$updateRows();\n }\n };\n LineWidgets.prototype.$updateRows = function () {\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets)\n return;\n var noWidgets = true;\n lineWidgets.forEach(function (w, i) {\n if (w) {\n noWidgets = false;\n w.row = i;\n while (w.$oldWidget) {\n w.$oldWidget.row = i;\n w = w.$oldWidget;\n }\n }\n });\n if (noWidgets)\n this.session.lineWidgets = null;\n };\n LineWidgets.prototype.$registerLineWidget = function (w) {\n if (!this.session.lineWidgets)\n this.session.lineWidgets = new Array(this.session.getLength());\n var old = this.session.lineWidgets[w.row];\n if (old) {\n w.$oldWidget = old;\n if (old.el && old.el.parentNode) {\n old.el.parentNode.removeChild(old.el);\n old._inDocument = false;\n }\n }\n this.session.lineWidgets[w.row] = w;\n return w;\n };\n LineWidgets.prototype.addLineWidget = function (w) {\n this.$registerLineWidget(w);\n w.session = this.session;\n if (!this.editor)\n return w;\n var renderer = this.editor.renderer;\n if (w.html && !w.el) {\n w.el = dom.createElement(\"div\");\n w.el.innerHTML = w.html;\n }\n if (w.text && !w.el) {\n w.el = dom.createElement(\"div\");\n w.el.textContent = w.text;\n }\n if (w.el) {\n dom.addCssClass(w.el, \"ace_lineWidgetContainer\");\n if (w.className) {\n dom.addCssClass(w.el, w.className);\n }\n w.el.style.position = \"absolute\";\n w.el.style.zIndex = \"5\";\n renderer.container.appendChild(w.el);\n w._inDocument = true;\n if (!w.coverGutter) {\n w.el.style.zIndex = \"3\";\n }\n if (w.pixelHeight == null) {\n w.pixelHeight = w.el.offsetHeight;\n }\n }\n if (w.rowCount == null) {\n w.rowCount = w.pixelHeight / renderer.layerConfig.lineHeight;\n }\n var fold = this.session.getFoldAt(w.row, 0);\n w.$fold = fold;\n if (fold) {\n var lineWidgets = this.session.lineWidgets;\n if (w.row == fold.end.row && !lineWidgets[fold.start.row])\n lineWidgets[fold.start.row] = w;\n else\n w.hidden = true;\n }\n this.session._emit(\"changeFold\", { data: { start: { row: w.row } } });\n this.$updateRows();\n this.renderWidgets(null, renderer);\n this.onWidgetChanged(w);\n return w;\n };\n LineWidgets.prototype.removeLineWidget = function (w) {\n w._inDocument = false;\n w.session = null;\n if (w.el && w.el.parentNode)\n w.el.parentNode.removeChild(w.el);\n if (w.editor && w.editor.destroy)\n try {\n w.editor.destroy();\n }\n catch (e) { }\n if (this.session.lineWidgets) {\n var w1 = this.session.lineWidgets[w.row];\n if (w1 == w) {\n this.session.lineWidgets[w.row] = w.$oldWidget;\n if (w.$oldWidget)\n this.onWidgetChanged(w.$oldWidget);\n }\n else {\n while (w1) {\n if (w1.$oldWidget == w) {\n w1.$oldWidget = w.$oldWidget;\n break;\n }\n w1 = w1.$oldWidget;\n }\n }\n }\n this.session._emit(\"changeFold\", { data: { start: { row: w.row } } });\n this.$updateRows();\n };\n LineWidgets.prototype.getWidgetsAtRow = function (row) {\n var lineWidgets = this.session.lineWidgets;\n var w = lineWidgets && lineWidgets[row];\n var list = [];\n while (w) {\n list.push(w);\n w = w.$oldWidget;\n }\n return list;\n };\n LineWidgets.prototype.onWidgetChanged = function (w) {\n this.session._changedWidgets.push(w);\n this.editor && this.editor.renderer.updateFull();\n };\n LineWidgets.prototype.measureWidgets = function (e, renderer) {\n var changedWidgets = this.session._changedWidgets;\n var config = renderer.layerConfig;\n if (!changedWidgets || !changedWidgets.length)\n return;\n var min = Infinity;\n for (var i = 0; i < changedWidgets.length; i++) {\n var w = changedWidgets[i];\n if (!w || !w.el)\n continue;\n if (w.session != this.session)\n continue;\n if (!w._inDocument) {\n if (this.session.lineWidgets[w.row] != w)\n continue;\n w._inDocument = true;\n renderer.container.appendChild(w.el);\n }\n w.h = w.el.offsetHeight;\n if (!w.fixedWidth) {\n w.w = w.el.offsetWidth;\n w.screenWidth = Math.ceil(w.w / config.characterWidth);\n }\n var rowCount = w.h / config.lineHeight;\n if (w.coverLine) {\n rowCount -= this.session.getRowLineCount(w.row);\n if (rowCount < 0)\n rowCount = 0;\n }\n if (w.rowCount != rowCount) {\n w.rowCount = rowCount;\n if (w.row < min)\n min = w.row;\n }\n }\n if (min != Infinity) {\n this.session._emit(\"changeFold\", { data: { start: { row: min } } });\n this.session.lineWidgetWidth = null;\n }\n this.session._changedWidgets = [];\n };\n LineWidgets.prototype.renderWidgets = function (e, renderer) {\n var config = renderer.layerConfig;\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets)\n return;\n var first = Math.min(this.firstRow, config.firstRow);\n var last = Math.max(this.lastRow, config.lastRow, lineWidgets.length);\n while (first > 0 && !lineWidgets[first])\n first--;\n this.firstRow = config.firstRow;\n this.lastRow = config.lastRow;\n renderer.$cursorLayer.config = config;\n for (var i = first; i <= last; i++) {\n var w = lineWidgets[i];\n if (!w || !w.el)\n continue;\n if (w.hidden) {\n w.el.style.top = -100 - (w.pixelHeight || 0) + \"px\";\n continue;\n }\n if (!w._inDocument) {\n w._inDocument = true;\n renderer.container.appendChild(w.el);\n }\n var top = renderer.$cursorLayer.getPixelPosition({ row: i, column: 0 }, true).top;\n if (!w.coverLine)\n top += config.lineHeight * this.session.getRowLineCount(w.row);\n w.el.style.top = top - config.offset + \"px\";\n var left = w.coverGutter ? 0 : renderer.gutterWidth;\n if (!w.fixedWidth)\n left -= renderer.scrollLeft;\n w.el.style.left = left + \"px\";\n if (w.fullWidth && w.screenWidth) {\n w.el.style.minWidth = config.width + 2 * config.padding + \"px\";\n }\n if (w.fixedWidth) {\n w.el.style.right = renderer.scrollBar.getWidth() + \"px\";\n }\n else {\n w.el.style.right = \"\";\n }\n }\n };\n return LineWidgets;\n}());\nexports.LineWidgets = LineWidgets;\n\n});\n\nace.define(\"ace/keyboard/gutter_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/mouse/default_gutter_handler\"], function(require, exports, module){\"use strict\";\nvar keys = require('../lib/keys');\nvar GutterTooltip = require(\"../mouse/default_gutter_handler\").GutterTooltip;\nvar GutterKeyboardHandler = /** @class */ (function () {\n function GutterKeyboardHandler(editor) {\n this.editor = editor;\n this.gutterLayer = editor.renderer.$gutterLayer;\n this.element = editor.renderer.$gutter;\n this.lines = editor.renderer.$gutterLayer.$lines;\n this.activeRowIndex = null;\n this.activeLane = null;\n this.annotationTooltip = new GutterTooltip(this.editor);\n }\n GutterKeyboardHandler.prototype.addListener = function () {\n this.element.addEventListener(\"keydown\", this.$onGutterKeyDown.bind(this));\n this.element.addEventListener(\"focusout\", this.$blurGutter.bind(this));\n this.editor.on(\"mousewheel\", this.$blurGutter.bind(this));\n };\n GutterKeyboardHandler.prototype.removeListener = function () {\n this.element.removeEventListener(\"keydown\", this.$onGutterKeyDown.bind(this));\n this.element.removeEventListener(\"focusout\", this.$blurGutter.bind(this));\n this.editor.off(\"mousewheel\", this.$blurGutter.bind(this));\n };\n GutterKeyboardHandler.prototype.$onGutterKeyDown = function (e) {\n if (this.annotationTooltip.isOpen) {\n e.preventDefault();\n if (e.keyCode === keys[\"escape\"])\n this.annotationTooltip.hideTooltip();\n return;\n }\n if (e.target === this.element) {\n if (e.keyCode != keys[\"enter\"]) {\n return;\n }\n e.preventDefault();\n var row = this.editor.getCursorPosition().row;\n if (!this.editor.isRowVisible(row))\n this.editor.scrollToLine(row, true, true);\n setTimeout(\n function () {\n var index = this.$rowToRowIndex(this.gutterLayer.$cursorCell.row);\n var nearestFoldIndex = this.$findNearestFoldWidget(index);\n var nearestAnnotationIndex = this.$findNearestAnnotation(index);\n if (nearestFoldIndex === null && nearestAnnotationIndex === null)\n return;\n if (nearestFoldIndex === null && nearestAnnotationIndex !== null) {\n this.activeRowIndex = nearestAnnotationIndex;\n this.activeLane = \"annotation\";\n this.$focusAnnotation(this.activeRowIndex);\n return;\n }\n if (nearestFoldIndex !== null && nearestAnnotationIndex === null) {\n this.activeRowIndex = nearestFoldIndex;\n this.activeLane = \"fold\";\n this.$focusFoldWidget(this.activeRowIndex);\n return;\n }\n if (Math.abs(nearestAnnotationIndex - index) < Math.abs(nearestFoldIndex - index)) {\n this.activeRowIndex = nearestAnnotationIndex;\n this.activeLane = \"annotation\";\n this.$focusAnnotation(this.activeRowIndex);\n return;\n }\n else {\n this.activeRowIndex = nearestFoldIndex;\n this.activeLane = \"fold\";\n this.$focusFoldWidget(this.activeRowIndex);\n return;\n }\n }.bind(this), 10);\n return;\n }\n this.$handleGutterKeyboardInteraction(e);\n setTimeout(function () {\n this.editor._signal(\"gutterkeydown\", new GutterKeyboardEvent(e, this));\n }.bind(this), 10);\n };\n GutterKeyboardHandler.prototype.$handleGutterKeyboardInteraction = function (e) {\n if (e.keyCode === keys[\"tab\"]) {\n e.preventDefault();\n return;\n }\n if (e.keyCode === keys[\"escape\"]) {\n e.preventDefault();\n this.$blurGutter();\n this.element.focus();\n this.lane = null;\n return;\n }\n if (e.keyCode === keys[\"up\"]) {\n e.preventDefault();\n switch (this.activeLane) {\n case \"fold\":\n this.$moveFoldWidgetUp();\n break;\n case \"annotation\":\n this.$moveAnnotationUp();\n break;\n }\n return;\n }\n if (e.keyCode === keys[\"down\"]) {\n e.preventDefault();\n switch (this.activeLane) {\n case \"fold\":\n this.$moveFoldWidgetDown();\n break;\n case \"annotation\":\n this.$moveAnnotationDown();\n break;\n }\n return;\n }\n if (e.keyCode === keys[\"left\"]) {\n e.preventDefault();\n this.$switchLane(\"annotation\");\n return;\n }\n if (e.keyCode === keys[\"right\"]) {\n e.preventDefault();\n this.$switchLane(\"fold\");\n return;\n }\n if (e.keyCode === keys[\"enter\"] || e.keyCode === keys[\"space\"]) {\n e.preventDefault();\n switch (this.activeLane) {\n case \"fold\":\n if (this.gutterLayer.session.foldWidgets[this.$rowIndexToRow(this.activeRowIndex)] === 'start') {\n var rowFoldingWidget = this.$rowIndexToRow(this.activeRowIndex);\n this.editor.session.onFoldWidgetClick(this.$rowIndexToRow(this.activeRowIndex), e);\n setTimeout(\n function () {\n if (this.$rowIndexToRow(this.activeRowIndex) !== rowFoldingWidget) {\n this.$blurFoldWidget(this.activeRowIndex);\n this.activeRowIndex = this.$rowToRowIndex(rowFoldingWidget);\n this.$focusFoldWidget(this.activeRowIndex);\n }\n }.bind(this), 10);\n break;\n }\n else if (this.gutterLayer.session.foldWidgets[this.$rowIndexToRow(this.activeRowIndex)] === 'end') {\n break;\n }\n return;\n case \"annotation\":\n var gutterElement = this.lines.cells[this.activeRowIndex].element.childNodes[2];\n var rect = gutterElement.getBoundingClientRect();\n var style = this.annotationTooltip.getElement().style;\n style.left = rect.right + \"px\";\n style.top = rect.bottom + \"px\";\n this.annotationTooltip.showTooltip(this.$rowIndexToRow(this.activeRowIndex));\n break;\n }\n return;\n }\n };\n GutterKeyboardHandler.prototype.$blurGutter = function () {\n if (this.activeRowIndex !== null) {\n switch (this.activeLane) {\n case \"fold\":\n this.$blurFoldWidget(this.activeRowIndex);\n break;\n case \"annotation\":\n this.$blurAnnotation(this.activeRowIndex);\n break;\n }\n }\n if (this.annotationTooltip.isOpen)\n this.annotationTooltip.hideTooltip();\n return;\n };\n GutterKeyboardHandler.prototype.$isFoldWidgetVisible = function (index) {\n var isRowFullyVisible = this.editor.isRowFullyVisible(this.$rowIndexToRow(index));\n var isIconVisible = this.$getFoldWidget(index).style.display !== \"none\";\n return isRowFullyVisible && isIconVisible;\n };\n GutterKeyboardHandler.prototype.$isAnnotationVisible = function (index) {\n var isRowFullyVisible = this.editor.isRowFullyVisible(this.$rowIndexToRow(index));\n var isIconVisible = this.$getAnnotation(index).style.display !== \"none\";\n return isRowFullyVisible && isIconVisible;\n };\n GutterKeyboardHandler.prototype.$getFoldWidget = function (index) {\n var cell = this.lines.get(index);\n var element = cell.element;\n return element.childNodes[1];\n };\n GutterKeyboardHandler.prototype.$getAnnotation = function (index) {\n var cell = this.lines.get(index);\n var element = cell.element;\n return element.childNodes[2];\n };\n GutterKeyboardHandler.prototype.$findNearestFoldWidget = function (index) {\n if (this.$isFoldWidgetVisible(index))\n return index;\n var i = 0;\n while (index - i > 0 || index + i < this.lines.getLength() - 1) {\n i++;\n if (index - i >= 0 && this.$isFoldWidgetVisible(index - i))\n return index - i;\n if (index + i <= this.lines.getLength() - 1 && this.$isFoldWidgetVisible(index + i))\n return index + i;\n }\n return null;\n };\n GutterKeyboardHandler.prototype.$findNearestAnnotation = function (index) {\n if (this.$isAnnotationVisible(index))\n return index;\n var i = 0;\n while (index - i > 0 || index + i < this.lines.getLength() - 1) {\n i++;\n if (index - i >= 0 && this.$isAnnotationVisible(index - i))\n return index - i;\n if (index + i <= this.lines.getLength() - 1 && this.$isAnnotationVisible(index + i))\n return index + i;\n }\n return null;\n };\n GutterKeyboardHandler.prototype.$focusFoldWidget = function (index) {\n if (index == null)\n return;\n var foldWidget = this.$getFoldWidget(index);\n foldWidget.classList.add(this.editor.renderer.keyboardFocusClassName);\n foldWidget.focus();\n };\n GutterKeyboardHandler.prototype.$focusAnnotation = function (index) {\n if (index == null)\n return;\n var annotation = this.$getAnnotation(index);\n annotation.classList.add(this.editor.renderer.keyboardFocusClassName);\n annotation.focus();\n };\n GutterKeyboardHandler.prototype.$blurFoldWidget = function (index) {\n var foldWidget = this.$getFoldWidget(index);\n foldWidget.classList.remove(this.editor.renderer.keyboardFocusClassName);\n foldWidget.blur();\n };\n GutterKeyboardHandler.prototype.$blurAnnotation = function (index) {\n var annotation = this.$getAnnotation(index);\n annotation.classList.remove(this.editor.renderer.keyboardFocusClassName);\n annotation.blur();\n };\n GutterKeyboardHandler.prototype.$moveFoldWidgetUp = function () {\n var index = this.activeRowIndex;\n while (index > 0) {\n index--;\n if (this.$isFoldWidgetVisible(index)) {\n this.$blurFoldWidget(this.activeRowIndex);\n this.activeRowIndex = index;\n this.$focusFoldWidget(this.activeRowIndex);\n return;\n }\n }\n return;\n };\n GutterKeyboardHandler.prototype.$moveFoldWidgetDown = function () {\n var index = this.activeRowIndex;\n while (index < this.lines.getLength() - 1) {\n index++;\n if (this.$isFoldWidgetVisible(index)) {\n this.$blurFoldWidget(this.activeRowIndex);\n this.activeRowIndex = index;\n this.$focusFoldWidget(this.activeRowIndex);\n return;\n }\n }\n return;\n };\n GutterKeyboardHandler.prototype.$moveAnnotationUp = function () {\n var index = this.activeRowIndex;\n while (index > 0) {\n index--;\n if (this.$isAnnotationVisible(index)) {\n this.$blurAnnotation(this.activeRowIndex);\n this.activeRowIndex = index;\n this.$focusAnnotation(this.activeRowIndex);\n return;\n }\n }\n return;\n };\n GutterKeyboardHandler.prototype.$moveAnnotationDown = function () {\n var index = this.activeRowIndex;\n while (index < this.lines.getLength() - 1) {\n index++;\n if (this.$isAnnotationVisible(index)) {\n this.$blurAnnotation(this.activeRowIndex);\n this.activeRowIndex = index;\n this.$focusAnnotation(this.activeRowIndex);\n return;\n }\n }\n return;\n };\n GutterKeyboardHandler.prototype.$switchLane = function (desinationLane) {\n switch (desinationLane) {\n case \"annotation\":\n if (this.activeLane === \"annotation\") {\n break;\n }\n var annotationIndex = this.$findNearestAnnotation(this.activeRowIndex);\n if (annotationIndex == null) {\n break;\n }\n this.activeLane = \"annotation\";\n this.$blurFoldWidget(this.activeRowIndex);\n this.activeRowIndex = annotationIndex;\n this.$focusAnnotation(this.activeRowIndex);\n break;\n case \"fold\":\n if (this.activeLane === \"fold\") {\n break;\n }\n var foldWidgetIndex = this.$findNearestFoldWidget(this.activeRowIndex);\n if (foldWidgetIndex == null) {\n break;\n }\n this.activeLane = \"fold\";\n this.$blurAnnotation(this.activeRowIndex);\n this.activeRowIndex = foldWidgetIndex;\n this.$focusFoldWidget(this.activeRowIndex);\n break;\n }\n return;\n };\n GutterKeyboardHandler.prototype.$rowIndexToRow = function (index) {\n var cell = this.lines.get(index);\n if (cell)\n return cell.row;\n return null;\n };\n GutterKeyboardHandler.prototype.$rowToRowIndex = function (row) {\n for (var i = 0; i < this.lines.getLength(); i++) {\n var cell = this.lines.get(i);\n if (cell.row == row)\n return i;\n }\n return null;\n };\n return GutterKeyboardHandler;\n}());\nexports.GutterKeyboardHandler = GutterKeyboardHandler;\nvar GutterKeyboardEvent = /** @class */ (function () {\n function GutterKeyboardEvent(domEvent, gutterKeyboardHandler) {\n this.gutterKeyboardHandler = gutterKeyboardHandler;\n this.domEvent = domEvent;\n }\n GutterKeyboardEvent.prototype.getKey = function () {\n return keys.keyCodeToString(this.domEvent.keyCode);\n };\n GutterKeyboardEvent.prototype.getRow = function () {\n return this.gutterKeyboardHandler.$rowIndexToRow(this.gutterKeyboardHandler.activeRowIndex);\n };\n GutterKeyboardEvent.prototype.isInAnnotationLane = function () {\n return this.gutterKeyboardHandler.activeLane === \"annotation\";\n };\n GutterKeyboardEvent.prototype.isInFoldLane = function () {\n return this.gutterKeyboardHandler.activeLane === \"fold\";\n };\n return GutterKeyboardEvent;\n}());\nexports.GutterKeyboardEvent = GutterKeyboardEvent;\n\n});\n\nace.define(\"ace/editor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/keyboard/textinput\",\"ace/mouse/mouse_handler\",\"ace/mouse/fold_handler\",\"ace/keyboard/keybinding\",\"ace/edit_session\",\"ace/search\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/commands/command_manager\",\"ace/commands/default_commands\",\"ace/config\",\"ace/token_iterator\",\"ace/line_widgets\",\"ace/keyboard/gutter_handler\",\"ace/config\",\"ace/clipboard\",\"ace/lib/keys\"], function(require, exports, module){\"use strict\";\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar lang = require(\"./lib/lang\");\nvar useragent = require(\"./lib/useragent\");\nvar TextInput = require(\"./keyboard/textinput\").TextInput;\nvar MouseHandler = require(\"./mouse/mouse_handler\").MouseHandler;\nvar FoldHandler = require(\"./mouse/fold_handler\").FoldHandler;\nvar KeyBinding = require(\"./keyboard/keybinding\").KeyBinding;\nvar EditSession = require(\"./edit_session\").EditSession;\nvar Search = require(\"./search\").Search;\nvar Range = require(\"./range\").Range;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar CommandManager = require(\"./commands/command_manager\").CommandManager;\nvar defaultCommands = require(\"./commands/default_commands\").commands;\nvar config = require(\"./config\");\nvar TokenIterator = require(\"./token_iterator\").TokenIterator;\nvar LineWidgets = require(\"./line_widgets\").LineWidgets;\nvar GutterKeyboardHandler = require(\"./keyboard/gutter_handler\").GutterKeyboardHandler;\nvar nls = require(\"./config\").nls;\nvar clipboard = require(\"./clipboard\");\nvar keys = require('./lib/keys');\nvar Editor = /** @class */ (function () {\n function Editor(renderer, session, options) { this.session;\n this.$toDestroy = [];\n var container = renderer.getContainerElement();\n this.container = container;\n this.renderer = renderer;\n this.id = \"editor\" + (++Editor.$uid);\n this.commands = new CommandManager(useragent.isMac ? \"mac\" : \"win\", defaultCommands);\n if (typeof document == \"object\") {\n this.textInput = new TextInput(renderer.getTextAreaContainer(), this);\n this.renderer.textarea = this.textInput.getElement();\n this.$mouseHandler = new MouseHandler(this);\n new FoldHandler(this);\n }\n this.keyBinding = new KeyBinding(this);\n this.$search = new Search().set({\n wrap: true\n });\n this.$historyTracker = this.$historyTracker.bind(this);\n this.commands.on(\"exec\", this.$historyTracker);\n this.$initOperationListeners();\n this._$emitInputEvent = lang.delayedCall(function () {\n this._signal(\"input\", {});\n if (this.session && !this.session.destroyed)\n this.session.bgTokenizer.scheduleStart();\n }.bind(this));\n this.on(\"change\", function (_, _self) {\n _self._$emitInputEvent.schedule(31);\n });\n this.setSession(session || options && options.session || new EditSession(\"\"));\n config.resetOptions(this);\n if (options)\n this.setOptions(options);\n config._signal(\"editor\", this);\n }\n Editor.prototype.$initOperationListeners = function () {\n this.commands.on(\"exec\", this.startOperation.bind(this), true);\n this.commands.on(\"afterExec\", this.endOperation.bind(this), true);\n this.$opResetTimer = lang.delayedCall(this.endOperation.bind(this, true));\n this.on(\"change\", function () {\n if (!this.curOp) {\n this.startOperation();\n this.curOp.selectionBefore = this.$lastSel;\n }\n this.curOp.docChanged = true;\n }.bind(this), true);\n this.on(\"changeSelection\", function () {\n if (!this.curOp) {\n this.startOperation();\n this.curOp.selectionBefore = this.$lastSel;\n }\n this.curOp.selectionChanged = true;\n }.bind(this), true);\n };\n Editor.prototype.startOperation = function (commandEvent) {\n if (this.curOp) {\n if (!commandEvent || this.curOp.command)\n return;\n this.prevOp = this.curOp;\n }\n if (!commandEvent) {\n this.previousCommand = null;\n commandEvent = {};\n }\n this.$opResetTimer.schedule();\n this.curOp = this.session.curOp = {\n command: commandEvent.command || {},\n args: commandEvent.args,\n scrollTop: this.renderer.scrollTop\n };\n this.curOp.selectionBefore = this.selection.toJSON();\n };\n Editor.prototype.endOperation = function (e) {\n if (this.curOp && this.session) {\n if (e && e.returnValue === false || !this.session)\n return (this.curOp = null);\n if (e == true && this.curOp.command && this.curOp.command.name == \"mouse\")\n return;\n this._signal(\"beforeEndOperation\");\n if (!this.curOp)\n return;\n var command = this.curOp.command;\n var scrollIntoView = command && command.scrollIntoView;\n if (scrollIntoView) {\n switch (scrollIntoView) {\n case \"center-animate\":\n scrollIntoView = \"animate\";\n case \"center\":\n this.renderer.scrollCursorIntoView(null, 0.5);\n break;\n case \"animate\":\n case \"cursor\":\n this.renderer.scrollCursorIntoView();\n break;\n case \"selectionPart\":\n var range = this.selection.getRange();\n var config = this.renderer.layerConfig;\n if (range.start.row >= config.lastRow || range.end.row <= config.firstRow) {\n this.renderer.scrollSelectionIntoView(this.selection.anchor, this.selection.lead);\n }\n break;\n default:\n break;\n }\n if (scrollIntoView == \"animate\")\n this.renderer.animateScrolling(this.curOp.scrollTop);\n }\n var sel = this.selection.toJSON();\n this.curOp.selectionAfter = sel;\n this.$lastSel = this.selection.toJSON();\n this.session.getUndoManager().addSelection(sel);\n this.prevOp = this.curOp;\n this.curOp = null;\n }\n };\n Editor.prototype.$historyTracker = function (e) {\n if (!this.$mergeUndoDeltas)\n return;\n var prev = this.prevOp;\n var mergeableCommands = this.$mergeableCommands;\n var shouldMerge = prev.command && (e.command.name == prev.command.name);\n if (e.command.name == \"insertstring\") {\n var text = e.args;\n if (this.mergeNextCommand === undefined)\n this.mergeNextCommand = true;\n shouldMerge = shouldMerge\n && this.mergeNextCommand // previous command allows to coalesce with\n && (!/\\s/.test(text) || /\\s/.test(prev.args)); // previous insertion was of same type\n this.mergeNextCommand = true;\n }\n else {\n shouldMerge = shouldMerge\n && mergeableCommands.indexOf(e.command.name) !== -1; // the command is mergeable\n }\n if (this.$mergeUndoDeltas != \"always\"\n && Date.now() - this.sequenceStartTime > 2000) {\n shouldMerge = false; // the sequence is too long\n }\n if (shouldMerge)\n this.session.mergeUndoDeltas = true;\n else if (mergeableCommands.indexOf(e.command.name) !== -1)\n this.sequenceStartTime = Date.now();\n };\n Editor.prototype.setKeyboardHandler = function (keyboardHandler, cb) {\n if (keyboardHandler && typeof keyboardHandler === \"string\" && keyboardHandler != \"ace\") {\n this.$keybindingId = keyboardHandler;\n var _self = this;\n config.loadModule([\"keybinding\", keyboardHandler], function (module) {\n if (_self.$keybindingId == keyboardHandler)\n _self.keyBinding.setKeyboardHandler(module && module.handler);\n cb && cb();\n });\n }\n else {\n this.$keybindingId = null;\n this.keyBinding.setKeyboardHandler(keyboardHandler);\n cb && cb();\n }\n };\n Editor.prototype.getKeyboardHandler = function () {\n return this.keyBinding.getKeyboardHandler();\n };\n Editor.prototype.setSession = function (session) {\n if (this.session == session)\n return;\n if (this.curOp)\n this.endOperation();\n this.curOp = {};\n var oldSession = this.session;\n if (oldSession) {\n this.session.off(\"change\", this.$onDocumentChange);\n this.session.off(\"changeMode\", this.$onChangeMode);\n this.session.off(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n this.session.off(\"changeTabSize\", this.$onChangeTabSize);\n this.session.off(\"changeWrapLimit\", this.$onChangeWrapLimit);\n this.session.off(\"changeWrapMode\", this.$onChangeWrapMode);\n this.session.off(\"changeFold\", this.$onChangeFold);\n this.session.off(\"changeFrontMarker\", this.$onChangeFrontMarker);\n this.session.off(\"changeBackMarker\", this.$onChangeBackMarker);\n this.session.off(\"changeBreakpoint\", this.$onChangeBreakpoint);\n this.session.off(\"changeAnnotation\", this.$onChangeAnnotation);\n this.session.off(\"changeOverwrite\", this.$onCursorChange);\n this.session.off(\"changeScrollTop\", this.$onScrollTopChange);\n this.session.off(\"changeScrollLeft\", this.$onScrollLeftChange);\n var selection = this.session.getSelection();\n selection.off(\"changeCursor\", this.$onCursorChange);\n selection.off(\"changeSelection\", this.$onSelectionChange);\n }\n this.session = session;\n if (session) {\n this.$onDocumentChange = this.onDocumentChange.bind(this);\n session.on(\"change\", this.$onDocumentChange);\n this.renderer.setSession(session);\n this.$onChangeMode = this.onChangeMode.bind(this);\n session.on(\"changeMode\", this.$onChangeMode);\n this.$onTokenizerUpdate = this.onTokenizerUpdate.bind(this);\n session.on(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n this.$onChangeTabSize = this.renderer.onChangeTabSize.bind(this.renderer);\n session.on(\"changeTabSize\", this.$onChangeTabSize);\n this.$onChangeWrapLimit = this.onChangeWrapLimit.bind(this);\n session.on(\"changeWrapLimit\", this.$onChangeWrapLimit);\n this.$onChangeWrapMode = this.onChangeWrapMode.bind(this);\n session.on(\"changeWrapMode\", this.$onChangeWrapMode);\n this.$onChangeFold = this.onChangeFold.bind(this);\n session.on(\"changeFold\", this.$onChangeFold);\n this.$onChangeFrontMarker = this.onChangeFrontMarker.bind(this);\n this.session.on(\"changeFrontMarker\", this.$onChangeFrontMarker);\n this.$onChangeBackMarker = this.onChangeBackMarker.bind(this);\n this.session.on(\"changeBackMarker\", this.$onChangeBackMarker);\n this.$onChangeBreakpoint = this.onChangeBreakpoint.bind(this);\n this.session.on(\"changeBreakpoint\", this.$onChangeBreakpoint);\n this.$onChangeAnnotation = this.onChangeAnnotation.bind(this);\n this.session.on(\"changeAnnotation\", this.$onChangeAnnotation);\n this.$onCursorChange = this.onCursorChange.bind(this);\n this.session.on(\"changeOverwrite\", this.$onCursorChange);\n this.$onScrollTopChange = this.onScrollTopChange.bind(this);\n this.session.on(\"changeScrollTop\", this.$onScrollTopChange);\n this.$onScrollLeftChange = this.onScrollLeftChange.bind(this);\n this.session.on(\"changeScrollLeft\", this.$onScrollLeftChange);\n this.selection = session.getSelection();\n this.selection.on(\"changeCursor\", this.$onCursorChange);\n this.$onSelectionChange = this.onSelectionChange.bind(this);\n this.selection.on(\"changeSelection\", this.$onSelectionChange);\n this.onChangeMode();\n this.onCursorChange();\n this.onScrollTopChange();\n this.onScrollLeftChange();\n this.onSelectionChange();\n this.onChangeFrontMarker();\n this.onChangeBackMarker();\n this.onChangeBreakpoint();\n this.onChangeAnnotation();\n this.session.getUseWrapMode() && this.renderer.adjustWrapLimit();\n this.renderer.updateFull();\n }\n else {\n this.selection = null;\n this.renderer.setSession(session);\n }\n this._signal(\"changeSession\", {\n session: session,\n oldSession: oldSession\n });\n this.curOp = null;\n oldSession && oldSession._signal(\"changeEditor\", { oldEditor: this });\n session && session._signal(\"changeEditor\", { editor: this });\n if (session && !session.destroyed)\n session.bgTokenizer.scheduleStart();\n };\n Editor.prototype.getSession = function () {\n return this.session;\n };\n Editor.prototype.setValue = function (val, cursorPos) {\n this.session.doc.setValue(val);\n if (!cursorPos)\n this.selectAll();\n else if (cursorPos == 1)\n this.navigateFileEnd();\n else if (cursorPos == -1)\n this.navigateFileStart();\n return val;\n };\n Editor.prototype.getValue = function () {\n return this.session.getValue();\n };\n Editor.prototype.getSelection = function () {\n return this.selection;\n };\n Editor.prototype.resize = function (force) {\n this.renderer.onResize(force);\n };\n Editor.prototype.setTheme = function (theme, cb) {\n this.renderer.setTheme(theme, cb);\n };\n Editor.prototype.getTheme = function () {\n return this.renderer.getTheme();\n };\n Editor.prototype.setStyle = function (style) {\n this.renderer.setStyle(style);\n };\n Editor.prototype.unsetStyle = function (style) {\n this.renderer.unsetStyle(style);\n };\n Editor.prototype.getFontSize = function () {\n return this.getOption(\"fontSize\") ||\n dom.computedStyle(this.container).fontSize;\n };\n Editor.prototype.setFontSize = function (size) {\n this.setOption(\"fontSize\", size);\n };\n Editor.prototype.$highlightBrackets = function () {\n if (this.$highlightPending) {\n return;\n }\n var self = this;\n this.$highlightPending = true;\n setTimeout(function () {\n self.$highlightPending = false;\n var session = self.session;\n if (!session || session.destroyed)\n return;\n if (session.$bracketHighlight) {\n session.$bracketHighlight.markerIds.forEach(function (id) {\n session.removeMarker(id);\n });\n session.$bracketHighlight = null;\n }\n var pos = self.getCursorPosition();\n var handler = self.getKeyboardHandler();\n var isBackwards = handler && handler.$getDirectionForHighlight && handler.$getDirectionForHighlight(self);\n var ranges = session.getMatchingBracketRanges(pos, isBackwards);\n if (!ranges) {\n var iterator = new TokenIterator(session, pos.row, pos.column);\n var token = iterator.getCurrentToken();\n if (token && /\\b(?:tag-open|tag-name)/.test(token.type)) {\n var tagNamesRanges = session.getMatchingTags(pos);\n if (tagNamesRanges) {\n ranges = [\n tagNamesRanges.openTagName.isEmpty() ? tagNamesRanges.openTag : tagNamesRanges.openTagName,\n tagNamesRanges.closeTagName.isEmpty() ? tagNamesRanges.closeTag : tagNamesRanges.closeTagName\n ];\n }\n }\n }\n if (!ranges && session.$mode.getMatching)\n ranges = session.$mode.getMatching(self.session);\n if (!ranges) {\n if (self.getHighlightIndentGuides())\n self.renderer.$textLayer.$highlightIndentGuide();\n return;\n }\n var markerType = \"ace_bracket\";\n if (!Array.isArray(ranges)) {\n ranges = [ranges];\n }\n else if (ranges.length == 1) {\n markerType = \"ace_error_bracket\";\n }\n if (ranges.length == 2) {\n if (Range.comparePoints(ranges[0].end, ranges[1].start) == 0)\n ranges = [Range.fromPoints(ranges[0].start, ranges[1].end)];\n else if (Range.comparePoints(ranges[0].start, ranges[1].end) == 0)\n ranges = [Range.fromPoints(ranges[1].start, ranges[0].end)];\n }\n session.$bracketHighlight = {\n ranges: ranges,\n markerIds: ranges.map(function (range) {\n return session.addMarker(range, markerType, \"text\");\n })\n };\n if (self.getHighlightIndentGuides())\n self.renderer.$textLayer.$highlightIndentGuide();\n }, 50);\n };\n Editor.prototype.focus = function () {\n this.textInput.focus();\n };\n Editor.prototype.isFocused = function () {\n return this.textInput.isFocused();\n };\n Editor.prototype.blur = function () {\n this.textInput.blur();\n };\n Editor.prototype.onFocus = function (e) {\n if (this.$isFocused)\n return;\n this.$isFocused = true;\n this.renderer.showCursor();\n this.renderer.visualizeFocus();\n this._emit(\"focus\", e);\n };\n Editor.prototype.onBlur = function (e) {\n if (!this.$isFocused)\n return;\n this.$isFocused = false;\n this.renderer.hideCursor();\n this.renderer.visualizeBlur();\n this._emit(\"blur\", e);\n };\n Editor.prototype.$cursorChange = function () {\n this.renderer.updateCursor();\n this.$highlightBrackets();\n this.$updateHighlightActiveLine();\n };\n Editor.prototype.onDocumentChange = function (delta) {\n var wrap = this.session.$useWrapMode;\n var lastRow = (delta.start.row == delta.end.row ? delta.end.row : Infinity);\n this.renderer.updateLines(delta.start.row, lastRow, wrap);\n this._signal(\"change\", delta);\n this.$cursorChange();\n };\n Editor.prototype.onTokenizerUpdate = function (e) {\n var rows = e.data;\n this.renderer.updateLines(rows.first, rows.last);\n };\n Editor.prototype.onScrollTopChange = function () {\n this.renderer.scrollToY(this.session.getScrollTop());\n };\n Editor.prototype.onScrollLeftChange = function () {\n this.renderer.scrollToX(this.session.getScrollLeft());\n };\n Editor.prototype.onCursorChange = function () {\n this.$cursorChange();\n this._signal(\"changeSelection\");\n };\n Editor.prototype.$updateHighlightActiveLine = function () {\n var session = this.getSession();\n var highlight;\n if (this.$highlightActiveLine) {\n if (this.$selectionStyle != \"line\" || !this.selection.isMultiLine())\n highlight = this.getCursorPosition();\n if (this.renderer.theme && this.renderer.theme.$selectionColorConflict && !this.selection.isEmpty())\n highlight = false;\n if (this.renderer.$maxLines && this.session.getLength() === 1 && !(this.renderer.$minLines > 1))\n highlight = false;\n }\n if (session.$highlightLineMarker && !highlight) {\n session.removeMarker(session.$highlightLineMarker.id);\n session.$highlightLineMarker = null;\n }\n else if (!session.$highlightLineMarker && highlight) {\n var range = new Range(highlight.row, highlight.column, highlight.row, Infinity);\n range.id = session.addMarker(range, \"ace_active-line\", \"screenLine\");\n session.$highlightLineMarker = range;\n }\n else if (highlight) {\n session.$highlightLineMarker.start.row = highlight.row;\n session.$highlightLineMarker.end.row = highlight.row;\n session.$highlightLineMarker.start.column = highlight.column;\n session._signal(\"changeBackMarker\");\n }\n };\n Editor.prototype.onSelectionChange = function (e) {\n var session = this.session;\n if (session.$selectionMarker) {\n session.removeMarker(session.$selectionMarker);\n }\n session.$selectionMarker = null;\n if (!this.selection.isEmpty()) {\n var range = this.selection.getRange();\n var style = this.getSelectionStyle();\n session.$selectionMarker = session.addMarker(range, \"ace_selection\", style);\n }\n else {\n this.$updateHighlightActiveLine();\n }\n var re = this.$highlightSelectedWord && this.$getSelectionHighLightRegexp();\n this.session.highlight(re);\n this._signal(\"changeSelection\");\n };\n Editor.prototype.$getSelectionHighLightRegexp = function () {\n var session = this.session;\n var selection = this.getSelectionRange();\n if (selection.isEmpty() || selection.isMultiLine())\n return;\n var startColumn = selection.start.column;\n var endColumn = selection.end.column;\n var line = session.getLine(selection.start.row);\n var needle = line.substring(startColumn, endColumn);\n if (needle.length > 5000 || !/[\\w\\d]/.test(needle))\n return;\n var re = this.$search.$assembleRegExp({\n wholeWord: true,\n caseSensitive: true,\n needle: needle\n });\n var wordWithBoundary = line.substring(startColumn - 1, endColumn + 1);\n if (!re.test(wordWithBoundary))\n return;\n return re;\n };\n Editor.prototype.onChangeFrontMarker = function () {\n this.renderer.updateFrontMarkers();\n };\n Editor.prototype.onChangeBackMarker = function () {\n this.renderer.updateBackMarkers();\n };\n Editor.prototype.onChangeBreakpoint = function () {\n this.renderer.updateBreakpoints();\n };\n Editor.prototype.onChangeAnnotation = function () {\n this.renderer.setAnnotations(this.session.getAnnotations());\n };\n Editor.prototype.onChangeMode = function (e) {\n this.renderer.updateText();\n this._emit(\"changeMode\", e);\n };\n Editor.prototype.onChangeWrapLimit = function () {\n this.renderer.updateFull();\n };\n Editor.prototype.onChangeWrapMode = function () {\n this.renderer.onResize(true);\n };\n Editor.prototype.onChangeFold = function () {\n this.$updateHighlightActiveLine();\n this.renderer.updateFull();\n };\n Editor.prototype.getSelectedText = function () {\n return this.session.getTextRange(this.getSelectionRange());\n };\n Editor.prototype.getCopyText = function () {\n var text = this.getSelectedText();\n var nl = this.session.doc.getNewLineCharacter();\n var copyLine = false;\n if (!text && this.$copyWithEmptySelection) {\n copyLine = true;\n var ranges = this.selection.getAllRanges();\n for (var i = 0; i < ranges.length; i++) {\n var range = ranges[i];\n if (i && ranges[i - 1].start.row == range.start.row)\n continue;\n text += this.session.getLine(range.start.row) + nl;\n }\n }\n var e = { text: text };\n this._signal(\"copy\", e);\n clipboard.lineMode = copyLine ? e.text : false;\n return e.text;\n };\n Editor.prototype.onCopy = function () {\n this.commands.exec(\"copy\", this);\n };\n Editor.prototype.onCut = function () {\n this.commands.exec(\"cut\", this);\n };\n Editor.prototype.onPaste = function (text, event) {\n var e = { text: text, event: event };\n this.commands.exec(\"paste\", this, e);\n };\n Editor.prototype.$handlePaste = function (e) {\n if (typeof e == \"string\")\n e = { text: e };\n this._signal(\"paste\", e);\n var text = e.text;\n var lineMode = text === clipboard.lineMode;\n var session = this.session;\n if (!this.inMultiSelectMode || this.inVirtualSelectionMode) {\n if (lineMode)\n session.insert({ row: this.selection.lead.row, column: 0 }, text);\n else\n this.insert(text);\n }\n else if (lineMode) {\n this.selection.rangeList.ranges.forEach(function (range) {\n session.insert({ row: range.start.row, column: 0 }, text);\n });\n }\n else {\n var lines = text.split(/\\r\\n|\\r|\\n/);\n var ranges = this.selection.rangeList.ranges;\n var isFullLine = lines.length == 2 && (!lines[0] || !lines[1]);\n if (lines.length != ranges.length || isFullLine)\n return this.commands.exec(\"insertstring\", this, text);\n for (var i = ranges.length; i--;) {\n var range = ranges[i];\n if (!range.isEmpty())\n session.remove(range);\n session.insert(range.start, lines[i]);\n }\n }\n };\n Editor.prototype.execCommand = function (command, args) {\n return this.commands.exec(command, this, args);\n };\n Editor.prototype.insert = function (text, pasted) {\n var session = this.session;\n var mode = session.getMode();\n var cursor = this.getCursorPosition();\n if (this.getBehavioursEnabled() && !pasted) {\n var transform = mode.transformAction(session.getState(cursor.row), 'insertion', this, session, text);\n if (transform) {\n if (text !== transform.text) {\n if (!this.inVirtualSelectionMode) {\n this.session.mergeUndoDeltas = false;\n this.mergeNextCommand = false;\n }\n }\n text = transform.text;\n }\n }\n if (text == \"\\t\")\n text = this.session.getTabString();\n if (!this.selection.isEmpty()) {\n var range = this.getSelectionRange();\n cursor = this.session.remove(range);\n this.clearSelection();\n }\n else if (this.session.getOverwrite() && text.indexOf(\"\\n\") == -1) {\n var range = Range.fromPoints(cursor, cursor);\n range.end.column += text.length;\n this.session.remove(range);\n }\n if (text == \"\\n\" || text == \"\\r\\n\") {\n var line = session.getLine(cursor.row);\n if (cursor.column > line.search(/\\S|$/)) {\n var d = line.substr(cursor.column).search(/\\S|$/);\n session.doc.removeInLine(cursor.row, cursor.column, cursor.column + d);\n }\n }\n this.clearSelection();\n var start = cursor.column;\n var lineState = session.getState(cursor.row);\n var line = session.getLine(cursor.row);\n var shouldOutdent = mode.checkOutdent(lineState, line, text);\n session.insert(cursor, text);\n if (transform && transform.selection) {\n if (transform.selection.length == 2) { // Transform relative to the current column\n this.selection.setSelectionRange(new Range(cursor.row, start + transform.selection[0], cursor.row, start + transform.selection[1]));\n }\n else { // Transform relative to the current row.\n this.selection.setSelectionRange(new Range(cursor.row + transform.selection[0], transform.selection[1], cursor.row + transform.selection[2], transform.selection[3]));\n }\n }\n if (this.$enableAutoIndent) {\n if (session.getDocument().isNewLine(text)) {\n var lineIndent = mode.getNextLineIndent(lineState, line.slice(0, cursor.column), session.getTabString());\n session.insert({ row: cursor.row + 1, column: 0 }, lineIndent);\n }\n if (shouldOutdent)\n mode.autoOutdent(lineState, session, cursor.row);\n }\n };\n Editor.prototype.autoIndent = function () {\n var session = this.session;\n var mode = session.getMode();\n var ranges = this.selection.isEmpty()\n ? [new Range(0, 0, session.doc.getLength() - 1, 0)]\n : this.selection.getAllRanges();\n var prevLineState = \"\";\n var prevLine = \"\";\n var lineIndent = \"\";\n var tab = session.getTabString();\n for (var i = 0; i < ranges.length; i++) {\n var startRow = ranges[i].start.row;\n var endRow = ranges[i].end.row;\n for (var row = startRow; row <= endRow; row++) {\n if (row > 0) {\n prevLineState = session.getState(row - 1);\n prevLine = session.getLine(row - 1);\n lineIndent = mode.getNextLineIndent(prevLineState, prevLine, tab);\n }\n var line = session.getLine(row);\n var currIndent = mode.$getIndent(line);\n if (lineIndent !== currIndent) {\n if (currIndent.length > 0) {\n var range = new Range(row, 0, row, currIndent.length);\n session.remove(range);\n }\n if (lineIndent.length > 0) {\n session.insert({ row: row, column: 0 }, lineIndent);\n }\n }\n mode.autoOutdent(prevLineState, session, row);\n }\n }\n };\n Editor.prototype.onTextInput = function (text, composition) {\n if (!composition)\n return this.keyBinding.onTextInput(text);\n this.startOperation({ command: { name: \"insertstring\" } });\n var applyComposition = this.applyComposition.bind(this, text, composition);\n if (this.selection.rangeCount)\n this.forEachSelection(applyComposition);\n else\n applyComposition();\n this.endOperation();\n };\n Editor.prototype.applyComposition = function (text, composition) {\n if (composition.extendLeft || composition.extendRight) {\n var r = this.selection.getRange();\n r.start.column -= composition.extendLeft;\n r.end.column += composition.extendRight;\n if (r.start.column < 0) {\n r.start.row--;\n r.start.column += this.session.getLine(r.start.row).length + 1;\n }\n this.selection.setRange(r);\n if (!text && !r.isEmpty())\n this.remove();\n }\n if (text || !this.selection.isEmpty())\n this.insert(text, true);\n if (composition.restoreStart || composition.restoreEnd) {\n var r = this.selection.getRange();\n r.start.column -= composition.restoreStart;\n r.end.column -= composition.restoreEnd;\n this.selection.setRange(r);\n }\n };\n Editor.prototype.onCommandKey = function (e, hashId, keyCode) {\n return this.keyBinding.onCommandKey(e, hashId, keyCode);\n };\n Editor.prototype.setOverwrite = function (overwrite) {\n this.session.setOverwrite(overwrite);\n };\n Editor.prototype.getOverwrite = function () {\n return this.session.getOverwrite();\n };\n Editor.prototype.toggleOverwrite = function () {\n this.session.toggleOverwrite();\n };\n Editor.prototype.setScrollSpeed = function (speed) {\n this.setOption(\"scrollSpeed\", speed);\n };\n Editor.prototype.getScrollSpeed = function () {\n return this.getOption(\"scrollSpeed\");\n };\n Editor.prototype.setDragDelay = function (dragDelay) {\n this.setOption(\"dragDelay\", dragDelay);\n };\n Editor.prototype.getDragDelay = function () {\n return this.getOption(\"dragDelay\");\n };\n Editor.prototype.setSelectionStyle = function (val) {\n this.setOption(\"selectionStyle\", val);\n };\n Editor.prototype.getSelectionStyle = function () {\n return this.getOption(\"selectionStyle\");\n };\n Editor.prototype.setHighlightActiveLine = function (shouldHighlight) {\n this.setOption(\"highlightActiveLine\", shouldHighlight);\n };\n Editor.prototype.getHighlightActiveLine = function () {\n return this.getOption(\"highlightActiveLine\");\n };\n Editor.prototype.setHighlightGutterLine = function (shouldHighlight) {\n this.setOption(\"highlightGutterLine\", shouldHighlight);\n };\n Editor.prototype.getHighlightGutterLine = function () {\n return this.getOption(\"highlightGutterLine\");\n };\n Editor.prototype.setHighlightSelectedWord = function (shouldHighlight) {\n this.setOption(\"highlightSelectedWord\", shouldHighlight);\n };\n Editor.prototype.getHighlightSelectedWord = function () {\n return this.$highlightSelectedWord;\n };\n Editor.prototype.setAnimatedScroll = function (shouldAnimate) {\n this.renderer.setAnimatedScroll(shouldAnimate);\n };\n Editor.prototype.getAnimatedScroll = function () {\n return this.renderer.getAnimatedScroll();\n };\n Editor.prototype.setShowInvisibles = function (showInvisibles) {\n this.renderer.setShowInvisibles(showInvisibles);\n };\n Editor.prototype.getShowInvisibles = function () {\n return this.renderer.getShowInvisibles();\n };\n Editor.prototype.setDisplayIndentGuides = function (display) {\n this.renderer.setDisplayIndentGuides(display);\n };\n Editor.prototype.getDisplayIndentGuides = function () {\n return this.renderer.getDisplayIndentGuides();\n };\n Editor.prototype.setHighlightIndentGuides = function (highlight) {\n this.renderer.setHighlightIndentGuides(highlight);\n };\n Editor.prototype.getHighlightIndentGuides = function () {\n return this.renderer.getHighlightIndentGuides();\n };\n Editor.prototype.setShowPrintMargin = function (showPrintMargin) {\n this.renderer.setShowPrintMargin(showPrintMargin);\n };\n Editor.prototype.getShowPrintMargin = function () {\n return this.renderer.getShowPrintMargin();\n };\n Editor.prototype.setPrintMarginColumn = function (showPrintMargin) {\n this.renderer.setPrintMarginColumn(showPrintMargin);\n };\n Editor.prototype.getPrintMarginColumn = function () {\n return this.renderer.getPrintMarginColumn();\n };\n Editor.prototype.setReadOnly = function (readOnly) {\n this.setOption(\"readOnly\", readOnly);\n };\n Editor.prototype.getReadOnly = function () {\n return this.getOption(\"readOnly\");\n };\n Editor.prototype.setBehavioursEnabled = function (enabled) {\n this.setOption(\"behavioursEnabled\", enabled);\n };\n Editor.prototype.getBehavioursEnabled = function () {\n return this.getOption(\"behavioursEnabled\");\n };\n Editor.prototype.setWrapBehavioursEnabled = function (enabled) {\n this.setOption(\"wrapBehavioursEnabled\", enabled);\n };\n Editor.prototype.getWrapBehavioursEnabled = function () {\n return this.getOption(\"wrapBehavioursEnabled\");\n };\n Editor.prototype.setShowFoldWidgets = function (show) {\n this.setOption(\"showFoldWidgets\", show);\n };\n Editor.prototype.getShowFoldWidgets = function () {\n return this.getOption(\"showFoldWidgets\");\n };\n Editor.prototype.setFadeFoldWidgets = function (fade) {\n this.setOption(\"fadeFoldWidgets\", fade);\n };\n Editor.prototype.getFadeFoldWidgets = function () {\n return this.getOption(\"fadeFoldWidgets\");\n };\n Editor.prototype.remove = function (dir) {\n if (this.selection.isEmpty()) {\n if (dir == \"left\")\n this.selection.selectLeft();\n else\n this.selection.selectRight();\n }\n var range = this.getSelectionRange();\n if (this.getBehavioursEnabled()) {\n var session = this.session;\n var state = session.getState(range.start.row);\n var new_range = session.getMode().transformAction(state, 'deletion', this, session, range);\n if (range.end.column === 0) {\n var text = session.getTextRange(range);\n if (text[text.length - 1] == \"\\n\") {\n var line = session.getLine(range.end.row);\n if (/^\\s+$/.test(line)) {\n range.end.column = line.length;\n }\n }\n }\n if (new_range)\n range = new_range;\n }\n this.session.remove(range);\n this.clearSelection();\n };\n Editor.prototype.removeWordRight = function () {\n if (this.selection.isEmpty())\n this.selection.selectWordRight();\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n Editor.prototype.removeWordLeft = function () {\n if (this.selection.isEmpty())\n this.selection.selectWordLeft();\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n Editor.prototype.removeToLineStart = function () {\n if (this.selection.isEmpty())\n this.selection.selectLineStart();\n if (this.selection.isEmpty())\n this.selection.selectLeft();\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n Editor.prototype.removeToLineEnd = function () {\n if (this.selection.isEmpty())\n this.selection.selectLineEnd();\n var range = this.getSelectionRange();\n if (range.start.column == range.end.column && range.start.row == range.end.row) {\n range.end.column = 0;\n range.end.row++;\n }\n this.session.remove(range);\n this.clearSelection();\n };\n Editor.prototype.splitLine = function () {\n if (!this.selection.isEmpty()) {\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n }\n var cursor = this.getCursorPosition();\n this.insert(\"\\n\");\n this.moveCursorToPosition(cursor);\n };\n Editor.prototype.setGhostText = function (text, position) {\n if (!this.session.widgetManager) {\n this.session.widgetManager = new LineWidgets(this.session);\n this.session.widgetManager.attach(this);\n }\n this.renderer.setGhostText(text, position);\n };\n Editor.prototype.removeGhostText = function () {\n if (!this.session.widgetManager)\n return;\n this.renderer.removeGhostText();\n };\n Editor.prototype.transposeLetters = function () {\n if (!this.selection.isEmpty()) {\n return;\n }\n var cursor = this.getCursorPosition();\n var column = cursor.column;\n if (column === 0)\n return;\n var line = this.session.getLine(cursor.row);\n var swap, range;\n if (column < line.length) {\n swap = line.charAt(column) + line.charAt(column - 1);\n range = new Range(cursor.row, column - 1, cursor.row, column + 1);\n }\n else {\n swap = line.charAt(column - 1) + line.charAt(column - 2);\n range = new Range(cursor.row, column - 2, cursor.row, column);\n }\n this.session.replace(range, swap);\n this.session.selection.moveToPosition(range.end);\n };\n Editor.prototype.toLowerCase = function () {\n var originalRange = this.getSelectionRange();\n if (this.selection.isEmpty()) {\n this.selection.selectWord();\n }\n var range = this.getSelectionRange();\n var text = this.session.getTextRange(range);\n this.session.replace(range, text.toLowerCase());\n this.selection.setSelectionRange(originalRange);\n };\n Editor.prototype.toUpperCase = function () {\n var originalRange = this.getSelectionRange();\n if (this.selection.isEmpty()) {\n this.selection.selectWord();\n }\n var range = this.getSelectionRange();\n var text = this.session.getTextRange(range);\n this.session.replace(range, text.toUpperCase());\n this.selection.setSelectionRange(originalRange);\n };\n Editor.prototype.indent = function () {\n var session = this.session;\n var range = this.getSelectionRange();\n if (range.start.row < range.end.row) {\n var rows = this.$getSelectedRows();\n session.indentRows(rows.first, rows.last, \"\\t\");\n return;\n }\n else if (range.start.column < range.end.column) {\n var text = session.getTextRange(range);\n if (!/^\\s+$/.test(text)) {\n var rows = this.$getSelectedRows();\n session.indentRows(rows.first, rows.last, \"\\t\");\n return;\n }\n }\n var line = session.getLine(range.start.row);\n var position = range.start;\n var size = session.getTabSize();\n var column = session.documentToScreenColumn(position.row, position.column);\n if (this.session.getUseSoftTabs()) {\n var count = (size - column % size);\n var indentString = lang.stringRepeat(\" \", count);\n }\n else {\n var count = column % size;\n while (line[range.start.column - 1] == \" \" && count) {\n range.start.column--;\n count--;\n }\n this.selection.setSelectionRange(range);\n indentString = \"\\t\";\n }\n return this.insert(indentString);\n };\n Editor.prototype.blockIndent = function () {\n var rows = this.$getSelectedRows();\n this.session.indentRows(rows.first, rows.last, \"\\t\");\n };\n Editor.prototype.blockOutdent = function () {\n var selection = this.session.getSelection();\n this.session.outdentRows(selection.getRange());\n };\n Editor.prototype.sortLines = function () {\n var rows = this.$getSelectedRows();\n var session = this.session;\n var lines = [];\n for (var i = rows.first; i <= rows.last; i++)\n lines.push(session.getLine(i));\n lines.sort(function (a, b) {\n if (a.toLowerCase() < b.toLowerCase())\n return -1;\n if (a.toLowerCase() > b.toLowerCase())\n return 1;\n return 0;\n });\n var deleteRange = new Range(0, 0, 0, 0);\n for (var i = rows.first; i <= rows.last; i++) {\n var line = session.getLine(i);\n deleteRange.start.row = i;\n deleteRange.end.row = i;\n deleteRange.end.column = line.length;\n session.replace(deleteRange, lines[i - rows.first]);\n }\n };\n Editor.prototype.toggleCommentLines = function () {\n var state = this.session.getState(this.getCursorPosition().row);\n var rows = this.$getSelectedRows();\n this.session.getMode().toggleCommentLines(state, this.session, rows.first, rows.last);\n };\n Editor.prototype.toggleBlockComment = function () {\n var cursor = this.getCursorPosition();\n var state = this.session.getState(cursor.row);\n var range = this.getSelectionRange();\n this.session.getMode().toggleBlockComment(state, this.session, range, cursor);\n };\n Editor.prototype.getNumberAt = function (row, column) {\n var _numberRx = /[\\-]?[0-9]+(?:\\.[0-9]+)?/g;\n _numberRx.lastIndex = 0;\n var s = this.session.getLine(row);\n while (_numberRx.lastIndex < column) {\n var m = _numberRx.exec(s);\n if (m.index <= column && m.index + m[0].length >= column) {\n var number = {\n value: m[0],\n start: m.index,\n end: m.index + m[0].length\n };\n return number;\n }\n }\n return null;\n };\n Editor.prototype.modifyNumber = function (amount) {\n var row = this.selection.getCursor().row;\n var column = this.selection.getCursor().column;\n var charRange = new Range(row, column - 1, row, column);\n var c = this.session.getTextRange(charRange);\n if (!isNaN(parseFloat(c)) && isFinite(c)) {\n var nr = this.getNumberAt(row, column);\n if (nr) {\n var fp = nr.value.indexOf(\".\") >= 0 ? nr.start + nr.value.indexOf(\".\") + 1 : nr.end;\n var decimals = nr.start + nr.value.length - fp;\n var t = parseFloat(nr.value);\n t *= Math.pow(10, decimals);\n if (fp !== nr.end && column < fp) {\n amount *= Math.pow(10, nr.end - column - 1);\n }\n else {\n amount *= Math.pow(10, nr.end - column);\n }\n t += amount;\n t /= Math.pow(10, decimals);\n var nnr = t.toFixed(decimals);\n var replaceRange = new Range(row, nr.start, row, nr.end);\n this.session.replace(replaceRange, nnr);\n this.moveCursorTo(row, Math.max(nr.start + 1, column + nnr.length - nr.value.length));\n }\n }\n else {\n this.toggleWord();\n }\n };\n Editor.prototype.toggleWord = function () {\n var row = this.selection.getCursor().row;\n var column = this.selection.getCursor().column;\n this.selection.selectWord();\n var currentState = this.getSelectedText();\n var currWordStart = this.selection.getWordRange().start.column;\n var wordParts = currentState.replace(/([a-z]+|[A-Z]+)(?=[A-Z_]|$)/g, '$1 ').split(/\\s/);\n var delta = column - currWordStart - 1;\n if (delta < 0)\n delta = 0;\n var curLength = 0, itLength = 0;\n var that = this;\n if (currentState.match(/[A-Za-z0-9_]+/)) {\n wordParts.forEach(function (item, i) {\n itLength = curLength + item.length;\n if (delta >= curLength && delta <= itLength) {\n currentState = item;\n that.selection.clearSelection();\n that.moveCursorTo(row, curLength + currWordStart);\n that.selection.selectTo(row, itLength + currWordStart);\n }\n curLength = itLength;\n });\n }\n var wordPairs = this.$toggleWordPairs;\n var reg;\n for (var i = 0; i < wordPairs.length; i++) {\n var item = wordPairs[i];\n for (var j = 0; j <= 1; j++) {\n var negate = +!j;\n var firstCondition = currentState.match(new RegExp('^\\\\s?_?(' + lang.escapeRegExp(item[j]) + ')\\\\s?$', 'i'));\n if (firstCondition) {\n var secondCondition = currentState.match(new RegExp('([_]|^|\\\\s)(' + lang.escapeRegExp(firstCondition[1]) + ')($|\\\\s)', 'g'));\n if (secondCondition) {\n reg = currentState.replace(new RegExp(lang.escapeRegExp(item[j]), 'i'), function (result) {\n var res = item[negate];\n if (result.toUpperCase() == result) {\n res = res.toUpperCase();\n }\n else if (result.charAt(0).toUpperCase() == result.charAt(0)) {\n res = res.substr(0, 0) + item[negate].charAt(0).toUpperCase() + res.substr(1);\n }\n return res;\n });\n this.insert(reg);\n reg = \"\";\n }\n }\n }\n }\n };\n Editor.prototype.findLinkAt = function (row, column) {\n var e_1, _a;\n var line = this.session.getLine(row);\n var wordParts = line.split(/((?:https?|ftp):\\/\\/[\\S]+)/);\n var columnPosition = column;\n if (columnPosition < 0)\n columnPosition = 0;\n var previousPosition = 0, currentPosition = 0, match;\n try {\n for (var wordParts_1 = __values(wordParts), wordParts_1_1 = wordParts_1.next(); !wordParts_1_1.done; wordParts_1_1 = wordParts_1.next()) {\n var item = wordParts_1_1.value;\n currentPosition = previousPosition + item.length;\n if (columnPosition >= previousPosition && columnPosition <= currentPosition) {\n if (item.match(/((?:https?|ftp):\\/\\/[\\S]+)/)) {\n match = item.replace(/[\\s:.,'\";}\\]]+$/, \"\");\n break;\n }\n }\n previousPosition = currentPosition;\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (wordParts_1_1 && !wordParts_1_1.done && (_a = wordParts_1.return)) _a.call(wordParts_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return match;\n };\n Editor.prototype.openLink = function () {\n var cursor = this.selection.getCursor();\n var url = this.findLinkAt(cursor.row, cursor.column);\n if (url)\n window.open(url, '_blank');\n return url != null;\n };\n Editor.prototype.removeLines = function () {\n var rows = this.$getSelectedRows();\n this.session.removeFullLines(rows.first, rows.last);\n this.clearSelection();\n };\n Editor.prototype.duplicateSelection = function () {\n var sel = this.selection;\n var doc = this.session;\n var range = sel.getRange();\n var reverse = sel.isBackwards();\n if (range.isEmpty()) {\n var row = range.start.row;\n doc.duplicateLines(row, row);\n }\n else {\n var point = reverse ? range.start : range.end;\n var endPoint = doc.insert(point, doc.getTextRange(range));\n range.start = point;\n range.end = endPoint;\n sel.setSelectionRange(range, reverse);\n }\n };\n Editor.prototype.moveLinesDown = function () {\n this.$moveLines(1, false);\n };\n Editor.prototype.moveLinesUp = function () {\n this.$moveLines(-1, false);\n };\n Editor.prototype.moveText = function (range, toPosition, copy) {\n return this.session.moveText(range, toPosition, copy);\n };\n Editor.prototype.copyLinesUp = function () {\n this.$moveLines(-1, true);\n };\n Editor.prototype.copyLinesDown = function () {\n this.$moveLines(1, true);\n };\n Editor.prototype.$moveLines = function (dir, copy) {\n var rows, moved;\n var selection = this.selection;\n if (!selection.inMultiSelectMode || this.inVirtualSelectionMode) {\n var range = selection.toOrientedRange();\n rows = this.$getSelectedRows(range);\n moved = this.session.$moveLines(rows.first, rows.last, copy ? 0 : dir);\n if (copy && dir == -1)\n moved = 0;\n range.moveBy(moved, 0);\n selection.fromOrientedRange(range);\n }\n else {\n var ranges = selection.rangeList.ranges;\n selection.rangeList.detach(this.session);\n this.inVirtualSelectionMode = true;\n var diff = 0;\n var totalDiff = 0;\n var l = ranges.length;\n for (var i = 0; i < l; i++) {\n var rangeIndex = i;\n ranges[i].moveBy(diff, 0);\n rows = this.$getSelectedRows(ranges[i]);\n var first = rows.first;\n var last = rows.last;\n while (++i < l) {\n if (totalDiff)\n ranges[i].moveBy(totalDiff, 0);\n var subRows = this.$getSelectedRows(ranges[i]);\n if (copy && subRows.first != last)\n break;\n else if (!copy && subRows.first > last + 1)\n break;\n last = subRows.last;\n }\n i--;\n diff = this.session.$moveLines(first, last, copy ? 0 : dir);\n if (copy && dir == -1)\n rangeIndex = i + 1;\n while (rangeIndex <= i) {\n ranges[rangeIndex].moveBy(diff, 0);\n rangeIndex++;\n }\n if (!copy)\n diff = 0;\n totalDiff += diff;\n }\n selection.fromOrientedRange(selection.ranges[0]);\n selection.rangeList.attach(this.session);\n this.inVirtualSelectionMode = false;\n }\n };\n Editor.prototype.$getSelectedRows = function (range) {\n range = (range || this.getSelectionRange()).collapseRows();\n return {\n first: this.session.getRowFoldStart(range.start.row),\n last: this.session.getRowFoldEnd(range.end.row)\n };\n };\n Editor.prototype.onCompositionStart = function (compositionState) {\n this.renderer.showComposition(compositionState);\n };\n Editor.prototype.onCompositionUpdate = function (text) {\n this.renderer.setCompositionText(text);\n };\n Editor.prototype.onCompositionEnd = function () {\n this.renderer.hideComposition();\n };\n Editor.prototype.getFirstVisibleRow = function () {\n return this.renderer.getFirstVisibleRow();\n };\n Editor.prototype.getLastVisibleRow = function () {\n return this.renderer.getLastVisibleRow();\n };\n Editor.prototype.isRowVisible = function (row) {\n return (row >= this.getFirstVisibleRow() && row <= this.getLastVisibleRow());\n };\n Editor.prototype.isRowFullyVisible = function (row) {\n return (row >= this.renderer.getFirstFullyVisibleRow() && row <= this.renderer.getLastFullyVisibleRow());\n };\n Editor.prototype.$getVisibleRowCount = function () {\n return this.renderer.getScrollBottomRow() - this.renderer.getScrollTopRow() + 1;\n };\n Editor.prototype.$moveByPage = function (dir, select) {\n var renderer = this.renderer;\n var config = this.renderer.layerConfig;\n var rows = dir * Math.floor(config.height / config.lineHeight);\n if (select === true) {\n this.selection.$moveSelection(function () {\n this.moveCursorBy(rows, 0);\n });\n }\n else if (select === false) {\n this.selection.moveCursorBy(rows, 0);\n this.selection.clearSelection();\n }\n var scrollTop = renderer.scrollTop;\n renderer.scrollBy(0, rows * config.lineHeight);\n if (select != null)\n renderer.scrollCursorIntoView(null, 0.5);\n renderer.animateScrolling(scrollTop);\n };\n Editor.prototype.selectPageDown = function () {\n this.$moveByPage(1, true);\n };\n Editor.prototype.selectPageUp = function () {\n this.$moveByPage(-1, true);\n };\n Editor.prototype.gotoPageDown = function () {\n this.$moveByPage(1, false);\n };\n Editor.prototype.gotoPageUp = function () {\n this.$moveByPage(-1, false);\n };\n Editor.prototype.scrollPageDown = function () {\n this.$moveByPage(1);\n };\n Editor.prototype.scrollPageUp = function () {\n this.$moveByPage(-1);\n };\n Editor.prototype.scrollToRow = function (row) {\n this.renderer.scrollToRow(row);\n };\n Editor.prototype.scrollToLine = function (line, center, animate, callback) {\n this.renderer.scrollToLine(line, center, animate, callback);\n };\n Editor.prototype.centerSelection = function () {\n var range = this.getSelectionRange();\n var pos = {\n row: Math.floor(range.start.row + (range.end.row - range.start.row) / 2),\n column: Math.floor(range.start.column + (range.end.column - range.start.column) / 2)\n };\n this.renderer.alignCursor(pos, 0.5);\n };\n Editor.prototype.getCursorPosition = function () {\n return this.selection.getCursor();\n };\n Editor.prototype.getCursorPositionScreen = function () {\n return this.session.documentToScreenPosition(this.getCursorPosition());\n };\n Editor.prototype.getSelectionRange = function () {\n return this.selection.getRange();\n };\n Editor.prototype.selectAll = function () {\n this.selection.selectAll();\n };\n Editor.prototype.clearSelection = function () {\n this.selection.clearSelection();\n };\n Editor.prototype.moveCursorTo = function (row, column) {\n this.selection.moveCursorTo(row, column);\n };\n Editor.prototype.moveCursorToPosition = function (pos) {\n this.selection.moveCursorToPosition(pos);\n };\n Editor.prototype.jumpToMatching = function (select, expand) {\n var cursor = this.getCursorPosition();\n var iterator = new TokenIterator(this.session, cursor.row, cursor.column);\n var prevToken = iterator.getCurrentToken();\n var tokenCount = 0;\n if (prevToken && prevToken.type.indexOf('tag-name') !== -1) {\n prevToken = iterator.stepBackward();\n }\n var token = prevToken || iterator.stepForward();\n if (!token)\n return;\n var matchType;\n var found = false;\n var depth = {};\n var i = cursor.column - token.start;\n var bracketType;\n var brackets = {\n \")\": \"(\",\n \"(\": \"(\",\n \"]\": \"[\",\n \"[\": \"[\",\n \"{\": \"{\",\n \"}\": \"{\"\n };\n do {\n if (token.value.match(/[{}()\\[\\]]/g)) {\n for (; i < token.value.length && !found; i++) {\n if (!brackets[token.value[i]]) {\n continue;\n }\n bracketType = brackets[token.value[i]] + '.' + token.type.replace(\"rparen\", \"lparen\");\n if (isNaN(depth[bracketType])) {\n depth[bracketType] = 0;\n }\n switch (token.value[i]) {\n case '(':\n case '[':\n case '{':\n depth[bracketType]++;\n break;\n case ')':\n case ']':\n case '}':\n depth[bracketType]--;\n if (depth[bracketType] === -1) {\n matchType = 'bracket';\n found = true;\n }\n break;\n }\n }\n }\n else if (token.type.indexOf('tag-name') !== -1) {\n if (isNaN(depth[token.value])) {\n depth[token.value] = 0;\n }\n if (prevToken.value === '<' && tokenCount > 1) {\n depth[token.value]++;\n }\n else if (prevToken.value === '</') {\n depth[token.value]--;\n }\n if (depth[token.value] === -1) {\n matchType = 'tag';\n found = true;\n }\n }\n if (!found) {\n prevToken = token;\n tokenCount++;\n token = iterator.stepForward();\n i = 0;\n }\n } while (token && !found);\n if (!matchType)\n return;\n var range, pos;\n if (matchType === 'bracket') {\n range = this.session.getBracketRange(cursor);\n if (!range) {\n range = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + i - 1, iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + i - 1);\n pos = range.start;\n if (expand || pos.row === cursor.row && Math.abs(pos.column - cursor.column)\n < 2)\n range = this.session.getBracketRange(pos);\n }\n }\n else if (matchType === 'tag') {\n if (!token || token.type.indexOf('tag-name') === -1)\n return;\n range = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() - 2, iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() - 2);\n if (range.compare(cursor.row, cursor.column) === 0) {\n var tagsRanges = this.session.getMatchingTags(cursor);\n if (tagsRanges) {\n if (tagsRanges.openTag.contains(cursor.row, cursor.column)) {\n range = tagsRanges.closeTag;\n pos = range.start;\n }\n else {\n range = tagsRanges.openTag;\n if (tagsRanges.closeTag.start.row === cursor.row && tagsRanges.closeTag.start.column\n === cursor.column)\n pos = range.end;\n else\n pos = range.start;\n }\n }\n }\n pos = pos || range.start;\n }\n pos = range && range.cursor || pos;\n if (pos) {\n if (select) {\n if (range && expand) {\n this.selection.setRange(range);\n }\n else if (range && range.isEqual(this.getSelectionRange())) {\n this.clearSelection();\n }\n else {\n this.selection.selectTo(pos.row, pos.column);\n }\n }\n else {\n this.selection.moveTo(pos.row, pos.column);\n }\n }\n };\n Editor.prototype.gotoLine = function (lineNumber, column, animate) {\n this.selection.clearSelection();\n this.session.unfold({ row: lineNumber - 1, column: column || 0 });\n this.exitMultiSelectMode && this.exitMultiSelectMode();\n this.moveCursorTo(lineNumber - 1, column || 0);\n if (!this.isRowFullyVisible(lineNumber - 1))\n this.scrollToLine(lineNumber - 1, true, animate);\n };\n Editor.prototype.navigateTo = function (row, column) {\n this.selection.moveTo(row, column);\n };\n Editor.prototype.navigateUp = function (times) {\n if (this.selection.isMultiLine() && !this.selection.isBackwards()) {\n var selectionStart = this.selection.anchor.getPosition();\n return this.moveCursorToPosition(selectionStart);\n }\n this.selection.clearSelection();\n this.selection.moveCursorBy(-times || -1, 0);\n };\n Editor.prototype.navigateDown = function (times) {\n if (this.selection.isMultiLine() && this.selection.isBackwards()) {\n var selectionEnd = this.selection.anchor.getPosition();\n return this.moveCursorToPosition(selectionEnd);\n }\n this.selection.clearSelection();\n this.selection.moveCursorBy(times || 1, 0);\n };\n Editor.prototype.navigateLeft = function (times) {\n if (!this.selection.isEmpty()) {\n var selectionStart = this.getSelectionRange().start;\n this.moveCursorToPosition(selectionStart);\n }\n else {\n times = times || 1;\n while (times--) {\n this.selection.moveCursorLeft();\n }\n }\n this.clearSelection();\n };\n Editor.prototype.navigateRight = function (times) {\n if (!this.selection.isEmpty()) {\n var selectionEnd = this.getSelectionRange().end;\n this.moveCursorToPosition(selectionEnd);\n }\n else {\n times = times || 1;\n while (times--) {\n this.selection.moveCursorRight();\n }\n }\n this.clearSelection();\n };\n Editor.prototype.navigateLineStart = function () {\n this.selection.moveCursorLineStart();\n this.clearSelection();\n };\n Editor.prototype.navigateLineEnd = function () {\n this.selection.moveCursorLineEnd();\n this.clearSelection();\n };\n Editor.prototype.navigateFileEnd = function () {\n this.selection.moveCursorFileEnd();\n this.clearSelection();\n };\n Editor.prototype.navigateFileStart = function () {\n this.selection.moveCursorFileStart();\n this.clearSelection();\n };\n Editor.prototype.navigateWordRight = function () {\n this.selection.moveCursorWordRight();\n this.clearSelection();\n };\n Editor.prototype.navigateWordLeft = function () {\n this.selection.moveCursorWordLeft();\n this.clearSelection();\n };\n Editor.prototype.replace = function (replacement, options) {\n if (options)\n this.$search.set(options);\n var range = this.$search.find(this.session);\n var replaced = 0;\n if (!range)\n return replaced;\n if (this.$tryReplace(range, replacement)) {\n replaced = 1;\n }\n this.selection.setSelectionRange(range);\n this.renderer.scrollSelectionIntoView(range.start, range.end);\n return replaced;\n };\n Editor.prototype.replaceAll = function (replacement, options) {\n if (options) {\n this.$search.set(options);\n }\n var ranges = this.$search.findAll(this.session);\n var replaced = 0;\n if (!ranges.length)\n return replaced;\n var selection = this.getSelectionRange();\n this.selection.moveTo(0, 0);\n for (var i = ranges.length - 1; i >= 0; --i) {\n if (this.$tryReplace(ranges[i], replacement)) {\n replaced++;\n }\n }\n this.selection.setSelectionRange(selection);\n return replaced;\n };\n Editor.prototype.$tryReplace = function (range, replacement) {\n var input = this.session.getTextRange(range);\n replacement = this.$search.replace(input, replacement);\n if (replacement !== null) {\n range.end = this.session.replace(range, replacement);\n return range;\n }\n else {\n return null;\n }\n };\n Editor.prototype.getLastSearchOptions = function () {\n return this.$search.getOptions();\n };\n Editor.prototype.find = function (needle, options, animate) {\n if (!options)\n options = {};\n if (typeof needle == \"string\" || needle instanceof RegExp)\n options.needle = needle;\n else if (typeof needle == \"object\")\n oop.mixin(options, needle);\n var range = this.selection.getRange();\n if (options.needle == null) {\n needle = this.session.getTextRange(range)\n || this.$search.$options.needle;\n if (!needle) {\n range = this.session.getWordRange(range.start.row, range.start.column);\n needle = this.session.getTextRange(range);\n }\n this.$search.set({ needle: needle });\n }\n this.$search.set(options);\n if (!options.start)\n this.$search.set({ start: range });\n var newRange = this.$search.find(this.session);\n if (options.preventScroll)\n return newRange;\n if (newRange) {\n this.revealRange(newRange, animate);\n return newRange;\n }\n if (options.backwards)\n range.start = range.end;\n else\n range.end = range.start;\n this.selection.setRange(range);\n };\n Editor.prototype.findNext = function (options, animate) {\n this.find({ skipCurrent: true, backwards: false }, options, animate);\n };\n Editor.prototype.findPrevious = function (options, animate) {\n this.find(options, { skipCurrent: true, backwards: true }, animate);\n };\n Editor.prototype.revealRange = function (range, animate) {\n this.session.unfold(range);\n this.selection.setSelectionRange(range);\n var scrollTop = this.renderer.scrollTop;\n this.renderer.scrollSelectionIntoView(range.start, range.end, 0.5);\n if (animate !== false)\n this.renderer.animateScrolling(scrollTop);\n };\n Editor.prototype.undo = function () {\n this.session.getUndoManager().undo(this.session);\n this.renderer.scrollCursorIntoView(null, 0.5);\n };\n Editor.prototype.redo = function () {\n this.session.getUndoManager().redo(this.session);\n this.renderer.scrollCursorIntoView(null, 0.5);\n };\n Editor.prototype.destroy = function () {\n if (this.$toDestroy) {\n this.$toDestroy.forEach(function (el) {\n el.destroy();\n });\n this.$toDestroy = null;\n }\n if (this.$mouseHandler)\n this.$mouseHandler.destroy();\n this.renderer.destroy();\n this._signal(\"destroy\", this);\n if (this.session)\n this.session.destroy();\n if (this._$emitInputEvent)\n this._$emitInputEvent.cancel();\n this.removeAllListeners();\n };\n Editor.prototype.setAutoScrollEditorIntoView = function (enable) {\n if (!enable)\n return;\n var rect;\n var self = this;\n var shouldScroll = false;\n if (!this.$scrollAnchor)\n this.$scrollAnchor = document.createElement(\"div\");\n var scrollAnchor = this.$scrollAnchor;\n scrollAnchor.style.cssText = \"position:absolute\";\n this.container.insertBefore(scrollAnchor, this.container.firstChild);\n var onChangeSelection = this.on(\"changeSelection\", function () {\n shouldScroll = true;\n });\n var onBeforeRender = this.renderer.on(\"beforeRender\", function () {\n if (shouldScroll)\n rect = self.renderer.container.getBoundingClientRect();\n });\n var onAfterRender = this.renderer.on(\"afterRender\", function () {\n if (shouldScroll && rect && (self.isFocused()\n || self.searchBox && self.searchBox.isFocused())) {\n var renderer = self.renderer;\n var pos = renderer.$cursorLayer.$pixelPos;\n var config = renderer.layerConfig;\n var top = pos.top - config.offset;\n if (pos.top >= 0 && top + rect.top < 0) {\n shouldScroll = true;\n }\n else if (pos.top < config.height &&\n pos.top + rect.top + config.lineHeight > window.innerHeight) {\n shouldScroll = false;\n }\n else {\n shouldScroll = null;\n }\n if (shouldScroll != null) {\n scrollAnchor.style.top = top + \"px\";\n scrollAnchor.style.left = pos.left + \"px\";\n scrollAnchor.style.height = config.lineHeight + \"px\";\n scrollAnchor.scrollIntoView(shouldScroll);\n }\n shouldScroll = rect = null;\n }\n });\n this.setAutoScrollEditorIntoView = function (enable) {\n if (enable)\n return;\n delete this.setAutoScrollEditorIntoView;\n this.off(\"changeSelection\", onChangeSelection);\n this.renderer.off(\"afterRender\", onAfterRender);\n this.renderer.off(\"beforeRender\", onBeforeRender);\n };\n };\n Editor.prototype.$resetCursorStyle = function () {\n var style = this.$cursorStyle || \"ace\";\n var cursorLayer = this.renderer.$cursorLayer;\n if (!cursorLayer)\n return;\n cursorLayer.setSmoothBlinking(/smooth/.test(style));\n cursorLayer.isBlinking = !this.$readOnly && style != \"wide\";\n dom.setCssClass(cursorLayer.element, \"ace_slim-cursors\", /slim/.test(style));\n };\n Editor.prototype.prompt = function (message, options, callback) {\n var editor = this;\n config.loadModule(\"ace/ext/prompt\", function (module) {\n module.prompt(editor, message, options, callback);\n });\n };\n return Editor;\n}());\nEditor.$uid = 0;\nEditor.prototype.curOp = null;\nEditor.prototype.prevOp = {};\nEditor.prototype.$mergeableCommands = [\"backspace\", \"del\", \"insertstring\"];\nEditor.prototype.$toggleWordPairs = [\n [\"first\", \"last\"],\n [\"true\", \"false\"],\n [\"yes\", \"no\"],\n [\"width\", \"height\"],\n [\"top\", \"bottom\"],\n [\"right\", \"left\"],\n [\"on\", \"off\"],\n [\"x\", \"y\"],\n [\"get\", \"set\"],\n [\"max\", \"min\"],\n [\"horizontal\", \"vertical\"],\n [\"show\", \"hide\"],\n [\"add\", \"remove\"],\n [\"up\", \"down\"],\n [\"before\", \"after\"],\n [\"even\", \"odd\"],\n [\"in\", \"out\"],\n [\"inside\", \"outside\"],\n [\"next\", \"previous\"],\n [\"increase\", \"decrease\"],\n [\"attach\", \"detach\"],\n [\"&&\", \"||\"],\n [\"==\", \"!=\"]\n];\noop.implement(Editor.prototype, EventEmitter);\nconfig.defineOptions(Editor.prototype, \"editor\", {\n selectionStyle: {\n set: function (style) {\n this.onSelectionChange();\n this._signal(\"changeSelectionStyle\", { data: style });\n },\n initialValue: \"line\"\n },\n highlightActiveLine: {\n set: function () { this.$updateHighlightActiveLine(); },\n initialValue: true\n },\n highlightSelectedWord: {\n set: function (shouldHighlight) { this.$onSelectionChange(); },\n initialValue: true\n },\n readOnly: {\n set: function (readOnly) {\n this.textInput.setReadOnly(readOnly);\n this.$resetCursorStyle();\n },\n initialValue: false\n },\n copyWithEmptySelection: {\n set: function (value) {\n this.textInput.setCopyWithEmptySelection(value);\n },\n initialValue: false\n },\n cursorStyle: {\n set: function (val) { this.$resetCursorStyle(); },\n values: [\"ace\", \"slim\", \"smooth\", \"wide\"],\n initialValue: \"ace\"\n },\n mergeUndoDeltas: {\n values: [false, true, \"always\"],\n initialValue: true\n },\n behavioursEnabled: { initialValue: true },\n wrapBehavioursEnabled: { initialValue: true },\n enableAutoIndent: { initialValue: true },\n autoScrollEditorIntoView: {\n set: function (val) { this.setAutoScrollEditorIntoView(val); }\n },\n keyboardHandler: {\n set: function (val) { this.setKeyboardHandler(val); },\n get: function () { return this.$keybindingId; },\n handlesSet: true\n },\n value: {\n set: function (val) { this.session.setValue(val); },\n get: function () { return this.getValue(); },\n handlesSet: true,\n hidden: true\n },\n session: {\n set: function (val) { this.setSession(val); },\n get: function () { return this.session; },\n handlesSet: true,\n hidden: true\n },\n showLineNumbers: {\n set: function (show) {\n this.renderer.$gutterLayer.setShowLineNumbers(show);\n this.renderer.$loop.schedule(this.renderer.CHANGE_GUTTER);\n if (show && this.$relativeLineNumbers)\n relativeNumberRenderer.attach(this);\n else\n relativeNumberRenderer.detach(this);\n },\n initialValue: true\n },\n relativeLineNumbers: {\n set: function (value) {\n if (this.$showLineNumbers && value)\n relativeNumberRenderer.attach(this);\n else\n relativeNumberRenderer.detach(this);\n }\n },\n placeholder: {\n set: function (message) {\n if (!this.$updatePlaceholder) {\n this.$updatePlaceholder = function () {\n var hasValue = this.session && (this.renderer.$composition ||\n this.session.getLength() > 1 || this.session.getLine(0).length > 0);\n if (hasValue && this.renderer.placeholderNode) {\n this.renderer.off(\"afterRender\", this.$updatePlaceholder);\n dom.removeCssClass(this.container, \"ace_hasPlaceholder\");\n this.renderer.placeholderNode.remove();\n this.renderer.placeholderNode = null;\n }\n else if (!hasValue && !this.renderer.placeholderNode) {\n this.renderer.on(\"afterRender\", this.$updatePlaceholder);\n dom.addCssClass(this.container, \"ace_hasPlaceholder\");\n var el = dom.createElement(\"div\");\n el.className = \"ace_placeholder\";\n el.textContent = this.$placeholder || \"\";\n this.renderer.placeholderNode = el;\n this.renderer.content.appendChild(this.renderer.placeholderNode);\n }\n else if (!hasValue && this.renderer.placeholderNode) {\n this.renderer.placeholderNode.textContent = this.$placeholder || \"\";\n }\n }.bind(this);\n this.on(\"input\", this.$updatePlaceholder);\n }\n this.$updatePlaceholder();\n }\n },\n enableKeyboardAccessibility: {\n set: function (value) {\n var blurCommand = {\n name: \"blurTextInput\",\n description: \"Set focus to the editor content div to allow tabbing through the page\",\n bindKey: \"Esc\",\n exec: function (editor) {\n editor.blur();\n editor.renderer.scroller.focus();\n },\n readOnly: true\n };\n var focusOnEnterKeyup = function (e) {\n if (e.target == this.renderer.scroller && e.keyCode === keys['enter']) {\n e.preventDefault();\n var row = this.getCursorPosition().row;\n if (!this.isRowVisible(row))\n this.scrollToLine(row, true, true);\n this.focus();\n }\n };\n var gutterKeyboardHandler;\n if (value) {\n this.renderer.enableKeyboardAccessibility = true;\n this.renderer.keyboardFocusClassName = \"ace_keyboard-focus\";\n this.textInput.getElement().setAttribute(\"tabindex\", -1);\n this.textInput.setNumberOfExtraLines(useragent.isWin ? 3 : 0);\n this.renderer.scroller.setAttribute(\"tabindex\", 0);\n this.renderer.scroller.setAttribute(\"role\", \"group\");\n this.renderer.scroller.setAttribute(\"aria-roledescription\", nls(\"editor.scroller.aria-roledescription\", \"editor\"));\n this.renderer.scroller.classList.add(this.renderer.keyboardFocusClassName);\n this.renderer.scroller.setAttribute(\"aria-label\", nls(\"editor.scroller.aria-label\", \"Editor content, press Enter to start editing, press Escape to exit\"));\n this.renderer.scroller.addEventListener(\"keyup\", focusOnEnterKeyup.bind(this));\n this.commands.addCommand(blurCommand);\n this.renderer.$gutter.setAttribute(\"tabindex\", 0);\n this.renderer.$gutter.setAttribute(\"aria-hidden\", false);\n this.renderer.$gutter.setAttribute(\"role\", \"group\");\n this.renderer.$gutter.setAttribute(\"aria-roledescription\", nls(\"editor.gutter.aria-roledescription\", \"editor\"));\n this.renderer.$gutter.setAttribute(\"aria-label\", nls(\"editor.gutter.aria-label\", \"Editor gutter, press Enter to interact with controls using arrow keys, press Escape to exit\"));\n this.renderer.$gutter.classList.add(this.renderer.keyboardFocusClassName);\n this.renderer.content.setAttribute(\"aria-hidden\", true);\n if (!gutterKeyboardHandler)\n gutterKeyboardHandler = new GutterKeyboardHandler(this);\n gutterKeyboardHandler.addListener();\n this.textInput.setAriaOptions({\n setLabel: true\n });\n }\n else {\n this.renderer.enableKeyboardAccessibility = false;\n this.textInput.getElement().setAttribute(\"tabindex\", 0);\n this.textInput.setNumberOfExtraLines(0);\n this.renderer.scroller.setAttribute(\"tabindex\", -1);\n this.renderer.scroller.removeAttribute(\"role\");\n this.renderer.scroller.removeAttribute(\"aria-roledescription\");\n this.renderer.scroller.classList.remove(this.renderer.keyboardFocusClassName);\n this.renderer.scroller.removeAttribute(\"aria-label\");\n this.renderer.scroller.removeEventListener(\"keyup\", focusOnEnterKeyup.bind(this));\n this.commands.removeCommand(blurCommand);\n this.renderer.content.removeAttribute(\"aria-hidden\");\n this.renderer.$gutter.setAttribute(\"tabindex\", -1);\n this.renderer.$gutter.setAttribute(\"aria-hidden\", true);\n this.renderer.$gutter.removeAttribute(\"role\");\n this.renderer.$gutter.removeAttribute(\"aria-roledescription\");\n this.renderer.$gutter.removeAttribute(\"aria-label\");\n this.renderer.$gutter.classList.remove(this.renderer.keyboardFocusClassName);\n if (gutterKeyboardHandler)\n gutterKeyboardHandler.removeListener();\n }\n },\n initialValue: false\n },\n textInputAriaLabel: {\n set: function (val) { this.$textInputAriaLabel = val; },\n initialValue: \"\"\n },\n enableMobileMenu: {\n set: function (val) { this.$enableMobileMenu = val; },\n initialValue: true\n },\n customScrollbar: \"renderer\",\n hScrollBarAlwaysVisible: \"renderer\",\n vScrollBarAlwaysVisible: \"renderer\",\n highlightGutterLine: \"renderer\",\n animatedScroll: \"renderer\",\n showInvisibles: \"renderer\",\n showPrintMargin: \"renderer\",\n printMarginColumn: \"renderer\",\n printMargin: \"renderer\",\n fadeFoldWidgets: \"renderer\",\n showFoldWidgets: \"renderer\",\n displayIndentGuides: \"renderer\",\n highlightIndentGuides: \"renderer\",\n showGutter: \"renderer\",\n fontSize: \"renderer\",\n fontFamily: \"renderer\",\n maxLines: \"renderer\",\n minLines: \"renderer\",\n scrollPastEnd: \"renderer\",\n fixedWidthGutter: \"renderer\",\n theme: \"renderer\",\n hasCssTransforms: \"renderer\",\n maxPixelHeight: \"renderer\",\n useTextareaForIME: \"renderer\",\n useResizeObserver: \"renderer\",\n useSvgGutterIcons: \"renderer\",\n showFoldedAnnotations: \"renderer\",\n scrollSpeed: \"$mouseHandler\",\n dragDelay: \"$mouseHandler\",\n dragEnabled: \"$mouseHandler\",\n focusTimeout: \"$mouseHandler\",\n tooltipFollowsMouse: \"$mouseHandler\",\n firstLineNumber: \"session\",\n overwrite: \"session\",\n newLineMode: \"session\",\n useWorker: \"session\",\n useSoftTabs: \"session\",\n navigateWithinSoftTabs: \"session\",\n tabSize: \"session\",\n wrap: \"session\",\n indentedSoftWrap: \"session\",\n foldStyle: \"session\",\n mode: \"session\"\n});\nvar relativeNumberRenderer = {\n getText: function (/**@type{EditSession}*/ session, /**@type{number}*/ row) {\n return (Math.abs(session.selection.lead.row - row) || (row + 1 + (row < 9 ? \"\\xb7\" : \"\"))) + \"\";\n },\n getWidth: function (session, /**@type{number}*/ lastLineNumber, config) {\n return Math.max(lastLineNumber.toString().length, (config.lastRow + 1).toString().length, 2) * config.characterWidth;\n },\n update: function (e, /**@type{Editor}*/ editor) {\n editor.renderer.$loop.schedule(editor.renderer.CHANGE_GUTTER);\n },\n attach: function (/**@type{Editor}*/ editor) {\n editor.renderer.$gutterLayer.$renderer = this;\n editor.on(\"changeSelection\", this.update);\n this.update(null, editor);\n },\n detach: function (/**@type{Editor}*/ editor) {\n if (editor.renderer.$gutterLayer.$renderer == this)\n editor.renderer.$gutterLayer.$renderer = null;\n editor.off(\"changeSelection\", this.update);\n this.update(null, editor);\n }\n};\nexports.Editor = Editor;\n\n});\n\nace.define(\"ace/layer/lines\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar Lines = /** @class */ (function () {\n function Lines(element, canvasHeight) {\n this.element = element;\n this.canvasHeight = canvasHeight || 500000;\n this.element.style.height = (this.canvasHeight * 2) + \"px\";\n this.cells = [];\n this.cellCache = [];\n this.$offsetCoefficient = 0;\n }\n Lines.prototype.moveContainer = function (config) {\n dom.translate(this.element, 0, -((config.firstRowScreen * config.lineHeight) % this.canvasHeight) - config.offset * this.$offsetCoefficient);\n };\n Lines.prototype.pageChanged = function (oldConfig, newConfig) {\n return (Math.floor((oldConfig.firstRowScreen * oldConfig.lineHeight) / this.canvasHeight) !==\n Math.floor((newConfig.firstRowScreen * newConfig.lineHeight) / this.canvasHeight));\n };\n Lines.prototype.computeLineTop = function (row, config, session) {\n var screenTop = config.firstRowScreen * config.lineHeight;\n var screenPage = Math.floor(screenTop / this.canvasHeight);\n var lineTop = session.documentToScreenRow(row, 0) * config.lineHeight;\n return lineTop - (screenPage * this.canvasHeight);\n };\n Lines.prototype.computeLineHeight = function (row, config, session) {\n return config.lineHeight * session.getRowLineCount(row);\n };\n Lines.prototype.getLength = function () {\n return this.cells.length;\n };\n Lines.prototype.get = function (index) {\n return this.cells[index];\n };\n Lines.prototype.shift = function () {\n this.$cacheCell(this.cells.shift());\n };\n Lines.prototype.pop = function () {\n this.$cacheCell(this.cells.pop());\n };\n Lines.prototype.push = function (cell) {\n if (Array.isArray(cell)) {\n this.cells.push.apply(this.cells, cell);\n var fragment = dom.createFragment(this.element);\n for (var i = 0; i < cell.length; i++) {\n fragment.appendChild(cell[i].element);\n }\n this.element.appendChild(fragment);\n }\n else {\n this.cells.push(cell);\n this.element.appendChild(cell.element);\n }\n };\n Lines.prototype.unshift = function (cell) {\n if (Array.isArray(cell)) {\n this.cells.unshift.apply(this.cells, cell);\n var fragment = dom.createFragment(this.element);\n for (var i = 0; i < cell.length; i++) {\n fragment.appendChild(cell[i].element);\n }\n if (this.element.firstChild)\n this.element.insertBefore(fragment, this.element.firstChild);\n else\n this.element.appendChild(fragment);\n }\n else {\n this.cells.unshift(cell);\n this.element.insertAdjacentElement(\"afterbegin\", cell.element);\n }\n };\n Lines.prototype.last = function () {\n if (this.cells.length)\n return this.cells[this.cells.length - 1];\n else\n return null;\n };\n Lines.prototype.$cacheCell = function (cell) {\n if (!cell)\n return;\n cell.element.remove();\n this.cellCache.push(cell);\n };\n Lines.prototype.createCell = function (row, config, session, initElement) {\n var cell = this.cellCache.pop();\n if (!cell) {\n var element = dom.createElement(\"div\");\n if (initElement)\n initElement(element);\n this.element.appendChild(element);\n cell = {\n element: element,\n text: \"\",\n row: row\n };\n }\n cell.row = row;\n return cell;\n };\n return Lines;\n}());\nexports.Lines = Lines;\n\n});\n\nace.define(\"ace/layer/gutter\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/layer/lines\",\"ace/config\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar Lines = require(\"./lines\").Lines;\nvar nls = require(\"../config\").nls;\nvar Gutter = /** @class */ (function () {\n function Gutter(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_gutter-layer\";\n parentEl.appendChild(this.element);\n this.setShowFoldWidgets(this.$showFoldWidgets);\n this.gutterWidth = 0;\n this.$annotations = [];\n this.$updateAnnotations = this.$updateAnnotations.bind(this);\n this.$lines = new Lines(this.element);\n this.$lines.$offsetCoefficient = 1;\n }\n Gutter.prototype.setSession = function (session) {\n if (this.session)\n this.session.off(\"change\", this.$updateAnnotations);\n this.session = session;\n if (session)\n session.on(\"change\", this.$updateAnnotations);\n };\n Gutter.prototype.addGutterDecoration = function (row, className) {\n if (window.console)\n console.warn && console.warn(\"deprecated use session.addGutterDecoration\");\n this.session.addGutterDecoration(row, className);\n };\n Gutter.prototype.removeGutterDecoration = function (row, className) {\n if (window.console)\n console.warn && console.warn(\"deprecated use session.removeGutterDecoration\");\n this.session.removeGutterDecoration(row, className);\n };\n Gutter.prototype.setAnnotations = function (annotations) {\n this.$annotations = [];\n for (var i = 0; i < annotations.length; i++) {\n var annotation = annotations[i];\n var row = annotation.row;\n var rowInfo = this.$annotations[row];\n if (!rowInfo)\n rowInfo = this.$annotations[row] = { text: [], type: [], displayText: [] };\n var annoText = annotation.text;\n var displayAnnoText = annotation.text;\n var annoType = annotation.type;\n annoText = annoText ? lang.escapeHTML(annoText) : annotation.html || \"\";\n displayAnnoText = displayAnnoText ? displayAnnoText : annotation.html || \"\";\n if (rowInfo.text.indexOf(annoText) === -1) {\n rowInfo.text.push(annoText);\n rowInfo.type.push(annoType);\n rowInfo.displayText.push(displayAnnoText);\n }\n var className = annotation.className;\n if (className) {\n rowInfo.className = className;\n }\n else if (annoType === \"error\") {\n rowInfo.className = \" ace_error\";\n }\n else if (annoType === \"security\" && !/\\bace_error\\b/.test(rowInfo.className)) {\n rowInfo.className = \" ace_security\";\n }\n else if (annoType === \"warning\" && !/\\bace_(error|security)\\b/.test(rowInfo.className)) {\n rowInfo.className = \" ace_warning\";\n }\n else if (annoType === \"info\" && !rowInfo.className) {\n rowInfo.className = \" ace_info\";\n }\n else if (annoType === \"hint\" && !rowInfo.className) {\n rowInfo.className = \" ace_hint\";\n }\n }\n };\n Gutter.prototype.$updateAnnotations = function (delta) {\n if (!this.$annotations.length)\n return;\n var firstRow = delta.start.row;\n var len = delta.end.row - firstRow;\n if (len === 0) {\n }\n else if (delta.action == 'remove') {\n this.$annotations.splice(firstRow, len + 1, null);\n }\n else {\n var args = new Array(len + 1);\n args.unshift(firstRow, 1);\n this.$annotations.splice.apply(this.$annotations, args);\n }\n };\n Gutter.prototype.update = function (config) {\n this.config = config;\n var session = this.session;\n var firstRow = config.firstRow;\n var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar\n session.getLength() - 1);\n this.oldLastRow = lastRow;\n this.config = config;\n this.$lines.moveContainer(config);\n this.$updateCursorRow();\n var fold = session.getNextFoldLine(firstRow);\n var foldStart = fold ? fold.start.row : Infinity;\n var cell = null;\n var index = -1;\n var row = firstRow;\n while (true) {\n if (row > foldStart) {\n row = fold.end.row + 1;\n fold = session.getNextFoldLine(row, fold);\n foldStart = fold ? fold.start.row : Infinity;\n }\n if (row > lastRow) {\n while (this.$lines.getLength() > index + 1)\n this.$lines.pop();\n break;\n }\n cell = this.$lines.get(++index);\n if (cell) {\n cell.row = row;\n }\n else {\n cell = this.$lines.createCell(row, config, this.session, onCreateCell);\n this.$lines.push(cell);\n }\n this.$renderCell(cell, config, fold, row);\n row++;\n }\n this._signal(\"afterRender\");\n this.$updateGutterWidth(config);\n };\n Gutter.prototype.$updateGutterWidth = function (config) {\n var session = this.session;\n var gutterRenderer = session.gutterRenderer || this.$renderer;\n var firstLineNumber = session.$firstLineNumber;\n var lastLineText = this.$lines.last() ? this.$lines.last().text : \"\";\n if (this.$fixedWidth || session.$useWrapMode)\n lastLineText = session.getLength() + firstLineNumber - 1;\n var gutterWidth = gutterRenderer\n ? gutterRenderer.getWidth(session, lastLineText, config)\n : lastLineText.toString().length * config.characterWidth;\n var padding = this.$padding || this.$computePadding();\n gutterWidth += padding.left + padding.right;\n if (gutterWidth !== this.gutterWidth && !isNaN(gutterWidth)) {\n this.gutterWidth = gutterWidth; (this.element.parentNode).style.width =\n this.element.style.width = Math.ceil(this.gutterWidth) + \"px\";\n this._signal(\"changeGutterWidth\", gutterWidth);\n }\n };\n Gutter.prototype.$updateCursorRow = function () {\n if (!this.$highlightGutterLine)\n return;\n var position = this.session.selection.getCursor();\n if (this.$cursorRow === position.row)\n return;\n this.$cursorRow = position.row;\n };\n Gutter.prototype.updateLineHighlight = function () {\n if (!this.$highlightGutterLine)\n return;\n var row = this.session.selection.cursor.row;\n this.$cursorRow = row;\n if (this.$cursorCell && this.$cursorCell.row == row)\n return;\n if (this.$cursorCell)\n this.$cursorCell.element.className = this.$cursorCell.element.className.replace(\"ace_gutter-active-line \", \"\");\n var cells = this.$lines.cells;\n this.$cursorCell = null;\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i];\n if (cell.row >= this.$cursorRow) {\n if (cell.row > this.$cursorRow) {\n var fold = this.session.getFoldLine(this.$cursorRow);\n if (i > 0 && fold && fold.start.row == cells[i - 1].row)\n cell = cells[i - 1];\n else\n break;\n }\n cell.element.className = \"ace_gutter-active-line \" + cell.element.className;\n this.$cursorCell = cell;\n break;\n }\n }\n };\n Gutter.prototype.scrollLines = function (config) {\n var oldConfig = this.config;\n this.config = config;\n this.$updateCursorRow();\n if (this.$lines.pageChanged(oldConfig, config))\n return this.update(config);\n this.$lines.moveContainer(config);\n var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar\n this.session.getLength() - 1);\n var oldLastRow = this.oldLastRow;\n this.oldLastRow = lastRow;\n if (!oldConfig || oldLastRow < config.firstRow)\n return this.update(config);\n if (lastRow < oldConfig.firstRow)\n return this.update(config);\n if (oldConfig.firstRow < config.firstRow)\n for (var row = this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row > 0; row--)\n this.$lines.shift();\n if (oldLastRow > lastRow)\n for (var row = this.session.getFoldedRowCount(lastRow + 1, oldLastRow); row > 0; row--)\n this.$lines.pop();\n if (config.firstRow < oldConfig.firstRow) {\n this.$lines.unshift(this.$renderLines(config, config.firstRow, oldConfig.firstRow - 1));\n }\n if (lastRow > oldLastRow) {\n this.$lines.push(this.$renderLines(config, oldLastRow + 1, lastRow));\n }\n this.updateLineHighlight();\n this._signal(\"afterRender\");\n this.$updateGutterWidth(config);\n };\n Gutter.prototype.$renderLines = function (config, firstRow, lastRow) {\n var fragment = [];\n var row = firstRow;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row + 1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n if (row > lastRow)\n break;\n var cell = this.$lines.createCell(row, config, this.session, onCreateCell);\n this.$renderCell(cell, config, foldLine, row);\n fragment.push(cell);\n row++;\n }\n return fragment;\n };\n Gutter.prototype.$renderCell = function (cell, config, fold, row) {\n var element = cell.element;\n var session = this.session;\n var textNode = element.childNodes[0];\n var foldWidget = element.childNodes[1];\n var annotationNode = element.childNodes[2];\n var annotationIconNode = annotationNode.firstChild;\n var firstLineNumber = session.$firstLineNumber;\n var breakpoints = session.$breakpoints;\n var decorations = session.$decorations;\n var gutterRenderer = session.gutterRenderer || this.$renderer;\n var foldWidgets = this.$showFoldWidgets && session.foldWidgets;\n var foldStart = fold ? fold.start.row : Number.MAX_VALUE;\n var lineHeight = config.lineHeight + \"px\";\n var className = this.$useSvgGutterIcons ? \"ace_gutter-cell_svg-icons \" : \"ace_gutter-cell \";\n var iconClassName = this.$useSvgGutterIcons ? \"ace_icon_svg\" : \"ace_icon\";\n var rowText = (gutterRenderer\n ? gutterRenderer.getText(session, row)\n : row + firstLineNumber).toString();\n if (this.$highlightGutterLine) {\n if (row == this.$cursorRow || (fold && row < this.$cursorRow && row >= foldStart && this.$cursorRow <= fold.end.row)) {\n className += \"ace_gutter-active-line \";\n if (this.$cursorCell != cell) {\n if (this.$cursorCell)\n this.$cursorCell.element.className = this.$cursorCell.element.className.replace(\"ace_gutter-active-line \", \"\");\n this.$cursorCell = cell;\n }\n }\n }\n if (breakpoints[row])\n className += breakpoints[row];\n if (decorations[row])\n className += decorations[row];\n if (this.$annotations[row] && row !== foldStart)\n className += this.$annotations[row].className;\n if (foldWidgets) {\n var c = foldWidgets[row];\n if (c == null)\n c = foldWidgets[row] = session.getFoldWidget(row);\n }\n if (c) {\n var foldClass = \"ace_fold-widget ace_\" + c;\n var isClosedFold = c == \"start\" && row == foldStart && row < fold.end.row;\n if (isClosedFold) {\n foldClass += \" ace_closed\";\n var foldAnnotationClass = \"\";\n var annotationInFold = false;\n for (var i = row + 1; i <= fold.end.row; i++) {\n if (!this.$annotations[i])\n continue;\n if (this.$annotations[i].className === \" ace_error\") {\n annotationInFold = true;\n foldAnnotationClass = \" ace_error_fold\";\n break;\n }\n if (this.$annotations[i].className === \" ace_security\") {\n annotationInFold = true;\n foldAnnotationClass = \" ace_security_fold\";\n }\n else if (this.$annotations[i].className === \" ace_warning\" &&\n foldAnnotationClass !== \" ace_security_fold\") {\n annotationInFold = true;\n foldAnnotationClass = \" ace_warning_fold\";\n }\n }\n className += foldAnnotationClass;\n }\n else\n foldClass += \" ace_open\";\n if (foldWidget.className != foldClass)\n foldWidget.className = foldClass;\n dom.setStyle(foldWidget.style, \"height\", lineHeight);\n dom.setStyle(foldWidget.style, \"display\", \"inline-block\");\n foldWidget.setAttribute(\"role\", \"button\");\n foldWidget.setAttribute(\"tabindex\", \"-1\");\n var foldRange = session.getFoldWidgetRange(row);\n if (foldRange)\n foldWidget.setAttribute(\"aria-label\", nls(\"gutter.code-folding.range.aria-label\", \"Toggle code folding, rows $0 through $1\", [\n foldRange.start.row + 1,\n foldRange.end.row + 1\n ]));\n else {\n if (fold)\n foldWidget.setAttribute(\"aria-label\", nls(\"gutter.code-folding.closed.aria-label\", \"Toggle code folding, rows $0 through $1\", [\n fold.start.row + 1,\n fold.end.row + 1\n ]));\n else\n foldWidget.setAttribute(\"aria-label\", nls(\"gutter.code-folding.open.aria-label\", \"Toggle code folding, row $0\", [row + 1]));\n }\n if (isClosedFold) {\n foldWidget.setAttribute(\"aria-expanded\", \"false\");\n foldWidget.setAttribute(\"title\", nls(\"gutter.code-folding.closed.title\", \"Unfold code\"));\n }\n else {\n foldWidget.setAttribute(\"aria-expanded\", \"true\");\n foldWidget.setAttribute(\"title\", nls(\"gutter.code-folding.open.title\", \"Fold code\"));\n }\n }\n else {\n if (foldWidget) {\n dom.setStyle(foldWidget.style, \"display\", \"none\");\n foldWidget.setAttribute(\"tabindex\", \"0\");\n foldWidget.removeAttribute(\"role\");\n foldWidget.removeAttribute(\"aria-label\");\n }\n }\n if (annotationInFold && this.$showFoldedAnnotations) {\n annotationNode.className = \"ace_gutter_annotation\";\n annotationIconNode.className = iconClassName;\n annotationIconNode.className += foldAnnotationClass;\n dom.setStyle(annotationIconNode.style, \"height\", lineHeight);\n dom.setStyle(annotationNode.style, \"display\", \"block\");\n dom.setStyle(annotationNode.style, \"height\", lineHeight);\n var ariaLabel;\n switch (foldAnnotationClass) {\n case \" ace_error_fold\":\n ariaLabel = nls(\"gutter.annotation.aria-label.error\", \"Error, read annotations row $0\", [rowText]);\n break;\n case \" ace_security_fold\":\n ariaLabel = nls(\"gutter.annotation.aria-label.security\", \"Security finding, read annotations row $0\", [rowText]);\n break;\n case \" ace_warning_fold\":\n ariaLabel = nls(\"gutter.annotation.aria-label.warning\", \"Warning, read annotations row $0\", [rowText]);\n break;\n }\n annotationNode.setAttribute(\"aria-label\", ariaLabel);\n annotationNode.setAttribute(\"tabindex\", \"-1\");\n annotationNode.setAttribute(\"role\", \"button\");\n }\n else if (this.$annotations[row]) {\n annotationNode.className = \"ace_gutter_annotation\";\n annotationIconNode.className = iconClassName;\n if (this.$useSvgGutterIcons)\n annotationIconNode.className += this.$annotations[row].className;\n else\n element.classList.add(this.$annotations[row].className.replace(\" \", \"\"));\n dom.setStyle(annotationIconNode.style, \"height\", lineHeight);\n dom.setStyle(annotationNode.style, \"display\", \"block\");\n dom.setStyle(annotationNode.style, \"height\", lineHeight);\n var ariaLabel;\n switch (this.$annotations[row].className) {\n case \" ace_error\":\n ariaLabel = nls(\"gutter.annotation.aria-label.error\", \"Error, read annotations row $0\", [rowText]);\n break;\n case \" ace_security\":\n ariaLabel = nls(\"gutter.annotation.aria-label.security\", \"Security finding, read annotations row $0\", [rowText]);\n break;\n case \" ace_warning\":\n ariaLabel = nls(\"gutter.annotation.aria-label.warning\", \"Warning, read annotations row $0\", [rowText]);\n break;\n case \" ace_info\":\n ariaLabel = nls(\"gutter.annotation.aria-label.info\", \"Info, read annotations row $0\", [rowText]);\n break;\n case \" ace_hint\":\n ariaLabel = nls(\"gutter.annotation.aria-label.hint\", \"Suggestion, read annotations row $0\", [rowText]);\n break;\n }\n annotationNode.setAttribute(\"aria-label\", ariaLabel);\n annotationNode.setAttribute(\"tabindex\", \"-1\");\n annotationNode.setAttribute(\"role\", \"button\");\n }\n else {\n dom.setStyle(annotationNode.style, \"display\", \"none\");\n annotationNode.removeAttribute(\"aria-label\");\n annotationNode.removeAttribute(\"role\");\n annotationNode.setAttribute(\"tabindex\", \"0\");\n }\n if (rowText !== textNode.data) {\n textNode.data = rowText;\n }\n if (element.className != className)\n element.className = className;\n dom.setStyle(cell.element.style, \"height\", this.$lines.computeLineHeight(row, config, session) + \"px\");\n dom.setStyle(cell.element.style, \"top\", this.$lines.computeLineTop(row, config, session) + \"px\");\n cell.text = rowText;\n if (annotationNode.style.display === \"none\" && foldWidget.style.display === \"none\")\n cell.element.setAttribute(\"aria-hidden\", true);\n else\n cell.element.setAttribute(\"aria-hidden\", false);\n return cell;\n };\n Gutter.prototype.setHighlightGutterLine = function (highlightGutterLine) {\n this.$highlightGutterLine = highlightGutterLine;\n };\n Gutter.prototype.setShowLineNumbers = function (show) {\n this.$renderer = !show && {\n getWidth: function () { return 0; },\n getText: function () { return \"\"; }\n };\n };\n Gutter.prototype.getShowLineNumbers = function () {\n return this.$showLineNumbers;\n };\n Gutter.prototype.setShowFoldWidgets = function (show) {\n if (show)\n dom.addCssClass(this.element, \"ace_folding-enabled\");\n else\n dom.removeCssClass(this.element, \"ace_folding-enabled\");\n this.$showFoldWidgets = show;\n this.$padding = null;\n };\n Gutter.prototype.getShowFoldWidgets = function () {\n return this.$showFoldWidgets;\n };\n Gutter.prototype.$computePadding = function () {\n if (!this.element.firstChild)\n return { left: 0, right: 0 };\n var style = dom.computedStyle(/**@type{Element}*/ (this.element.firstChild));\n this.$padding = {};\n this.$padding.left = (parseInt(style.borderLeftWidth) || 0)\n + (parseInt(style.paddingLeft) || 0) + 1;\n this.$padding.right = (parseInt(style.borderRightWidth) || 0)\n + (parseInt(style.paddingRight) || 0);\n return this.$padding;\n };\n Gutter.prototype.getRegion = function (point) {\n var padding = this.$padding || this.$computePadding();\n var rect = this.element.getBoundingClientRect();\n if (point.x < padding.left + rect.left)\n return \"markers\";\n if (this.$showFoldWidgets && point.x > rect.right - padding.right)\n return \"foldWidgets\";\n };\n return Gutter;\n}());\nGutter.prototype.$fixedWidth = false;\nGutter.prototype.$highlightGutterLine = true;\nGutter.prototype.$renderer = \"\";\nGutter.prototype.$showLineNumbers = true;\nGutter.prototype.$showFoldWidgets = true;\noop.implement(Gutter.prototype, EventEmitter);\nfunction onCreateCell(element) {\n var textNode = document.createTextNode('');\n element.appendChild(textNode);\n var foldWidget = dom.createElement(\"span\");\n element.appendChild(foldWidget);\n var annotationNode = dom.createElement(\"span\");\n element.appendChild(annotationNode);\n var annotationIconNode = dom.createElement(\"span\");\n annotationNode.appendChild(annotationIconNode);\n return element;\n}\nexports.Gutter = Gutter;\n\n});\n\nace.define(\"ace/layer/marker\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar dom = require(\"../lib/dom\");\nvar Marker = /** @class */ (function () {\n function Marker(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_marker-layer\";\n parentEl.appendChild(this.element);\n }\n Marker.prototype.setPadding = function (padding) {\n this.$padding = padding;\n };\n Marker.prototype.setSession = function (session) {\n this.session = session;\n };\n Marker.prototype.setMarkers = function (markers) {\n this.markers = markers;\n };\n Marker.prototype.elt = function (className, css) {\n var x = this.i != -1 && this.element.childNodes[this.i];\n if (!x) {\n x = document.createElement(\"div\");\n this.element.appendChild(x);\n this.i = -1;\n }\n else {\n this.i++;\n }\n x.style.cssText = css;\n x.className = className;\n };\n Marker.prototype.update = function (config) {\n if (!config)\n return;\n this.config = config;\n this.i = 0;\n var html;\n for (var key in this.markers) {\n var marker = this.markers[key];\n if (!marker.range) {\n marker.update(html, this, this.session, config);\n continue;\n }\n var range = marker.range.clipRows(config.firstRow, config.lastRow);\n if (range.isEmpty())\n continue;\n range = range.toScreenRange(this.session);\n if (marker.renderer) {\n var top = this.$getTop(range.start.row, config);\n var left = this.$padding + range.start.column * config.characterWidth;\n marker.renderer(html, range, left, top, config);\n }\n else if (marker.type == \"fullLine\") {\n this.drawFullLineMarker(html, range, marker.clazz, config);\n }\n else if (marker.type == \"screenLine\") {\n this.drawScreenLineMarker(html, range, marker.clazz, config);\n }\n else if (range.isMultiLine()) {\n if (marker.type == \"text\")\n this.drawTextMarker(html, range, marker.clazz, config);\n else\n this.drawMultiLineMarker(html, range, marker.clazz, config);\n }\n else {\n this.drawSingleLineMarker(html, range, marker.clazz + \" ace_start\" + \" ace_br15\", config);\n }\n }\n if (this.i != -1) {\n while (this.i < this.element.childElementCount)\n this.element.removeChild(this.element.lastChild);\n }\n };\n Marker.prototype.$getTop = function (row, layerConfig) {\n return (row - layerConfig.firstRowScreen) * layerConfig.lineHeight;\n };\n Marker.prototype.drawTextMarker = function (stringBuilder, range, clazz, layerConfig, extraStyle) {\n var session = this.session;\n var start = range.start.row;\n var end = range.end.row;\n var row = start;\n var prev = 0;\n var curr = 0;\n var next = session.getScreenLastRowColumn(row);\n var lineRange = new Range(row, range.start.column, row, curr);\n for (; row <= end; row++) {\n lineRange.start.row = lineRange.end.row = row;\n lineRange.start.column = row == start ? range.start.column : session.getRowWrapIndent(row);\n lineRange.end.column = next;\n prev = curr;\n curr = next;\n next = row + 1 < end ? session.getScreenLastRowColumn(row + 1) : row == end ? 0 : range.end.column;\n this.drawSingleLineMarker(stringBuilder, lineRange, clazz + (row == start ? \" ace_start\" : \"\") + \" ace_br\"\n + getBorderClass(row == start || row == start + 1 && range.start.column, prev < curr, curr > next, row == end), layerConfig, row == end ? 0 : 1, extraStyle);\n }\n };\n Marker.prototype.drawMultiLineMarker = function (stringBuilder, range, clazz, config, extraStyle) {\n var padding = this.$padding;\n var height = config.lineHeight;\n var top = this.$getTop(range.start.row, config);\n var left = padding + range.start.column * config.characterWidth;\n extraStyle = extraStyle || \"\";\n if (this.session.$bidiHandler.isBidiRow(range.start.row)) {\n var range1 = range.clone();\n range1.end.row = range1.start.row;\n range1.end.column = this.session.getLine(range1.start.row).length;\n this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + \" ace_br1 ace_start\", config, null, extraStyle);\n }\n else {\n this.elt(clazz + \" ace_br1 ace_start\", \"height:\" + height + \"px;\" + \"right:\" + padding + \"px;\" + \"top:\" + top + \"px;left:\" + left + \"px;\" + (extraStyle || \"\"));\n }\n if (this.session.$bidiHandler.isBidiRow(range.end.row)) {\n var range1 = range.clone();\n range1.start.row = range1.end.row;\n range1.start.column = 0;\n this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + \" ace_br12\", config, null, extraStyle);\n }\n else {\n top = this.$getTop(range.end.row, config);\n var width = range.end.column * config.characterWidth;\n this.elt(clazz + \" ace_br12\", \"height:\" + height + \"px;\" +\n \"width:\" + width + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:\" + padding + \"px;\" + (extraStyle || \"\"));\n }\n height = (range.end.row - range.start.row - 1) * config.lineHeight;\n if (height <= 0)\n return;\n top = this.$getTop(range.start.row + 1, config);\n var radiusClass = (range.start.column ? 1 : 0) | (range.end.column ? 0 : 8);\n this.elt(clazz + (radiusClass ? \" ace_br\" + radiusClass : \"\"), \"height:\" + height + \"px;\" +\n \"right:\" + padding + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:\" + padding + \"px;\" + (extraStyle || \"\"));\n };\n Marker.prototype.drawSingleLineMarker = function (stringBuilder, range, clazz, config, extraLength, extraStyle) {\n if (this.session.$bidiHandler.isBidiRow(range.start.row))\n return this.drawBidiSingleLineMarker(stringBuilder, range, clazz, config, extraLength, extraStyle);\n var height = config.lineHeight;\n var width = (range.end.column + (extraLength || 0) - range.start.column) * config.characterWidth;\n var top = this.$getTop(range.start.row, config);\n var left = this.$padding + range.start.column * config.characterWidth;\n this.elt(clazz, \"height:\" + height + \"px;\" +\n \"width:\" + width + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:\" + left + \"px;\" + (extraStyle || \"\"));\n };\n Marker.prototype.drawBidiSingleLineMarker = function (stringBuilder, range, clazz, config, extraLength, extraStyle) {\n var height = config.lineHeight, top = this.$getTop(range.start.row, config), padding = this.$padding;\n var selections = this.session.$bidiHandler.getSelections(range.start.column, range.end.column);\n selections.forEach(function (selection) {\n this.elt(clazz, \"height:\" + height + \"px;\" +\n \"width:\" + (selection.width + (extraLength || 0)) + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:\" + (padding + selection.left) + \"px;\" + (extraStyle || \"\"));\n }, this);\n };\n Marker.prototype.drawFullLineMarker = function (stringBuilder, range, clazz, config, extraStyle) {\n var top = this.$getTop(range.start.row, config);\n var height = config.lineHeight;\n if (range.start.row != range.end.row)\n height += this.$getTop(range.end.row, config) - top;\n this.elt(clazz, \"height:\" + height + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:0;right:0;\" + (extraStyle || \"\"));\n };\n Marker.prototype.drawScreenLineMarker = function (stringBuilder, range, clazz, config, extraStyle) {\n var top = this.$getTop(range.start.row, config);\n var height = config.lineHeight;\n this.elt(clazz, \"height:\" + height + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:0;right:0;\" + (extraStyle || \"\"));\n };\n return Marker;\n}());\nMarker.prototype.$padding = 0;\nfunction getBorderClass(tl, tr, br, bl) {\n return (tl ? 1 : 0) | (tr ? 2 : 0) | (br ? 4 : 0) | (bl ? 8 : 0);\n}\nexports.Marker = Marker;\n\n});\n\nace.define(\"ace/layer/text_util\",[\"require\",\"exports\",\"module\"], function(require, exports, module){// Tokens for which Ace just uses a simple TextNode and does not add any special className.\nvar textTokens = new Set([\"text\", \"rparen\", \"lparen\"]);\nexports.isTextToken = function (tokenType) {\n return textTokens.has(tokenType);\n};\n\n});\n\nace.define(\"ace/layer/text\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/layer/lines\",\"ace/lib/event_emitter\",\"ace/config\",\"ace/layer/text_util\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar Lines = require(\"./lines\").Lines;\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar nls = require(\"../config\").nls;\nvar isTextToken = require(\"./text_util\").isTextToken;\nvar Text = /** @class */ (function () {\n function Text(parentEl) {\n this.dom = dom;\n this.element = this.dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_text-layer\";\n parentEl.appendChild(this.element);\n this.$updateEolChar = this.$updateEolChar.bind(this);\n this.$lines = new Lines(this.element);\n }\n Text.prototype.$updateEolChar = function () {\n var doc = this.session.doc;\n var unixMode = doc.getNewLineCharacter() == \"\\n\" && doc.getNewLineMode() != \"windows\";\n var EOL_CHAR = unixMode ? this.EOL_CHAR_LF : this.EOL_CHAR_CRLF;\n if (this.EOL_CHAR != EOL_CHAR) {\n this.EOL_CHAR = EOL_CHAR;\n return true;\n }\n };\n Text.prototype.setPadding = function (padding) {\n this.$padding = padding;\n this.element.style.margin = \"0 \" + padding + \"px\";\n };\n Text.prototype.getLineHeight = function () {\n return this.$fontMetrics.$characterSize.height || 0;\n };\n Text.prototype.getCharacterWidth = function () {\n return this.$fontMetrics.$characterSize.width || 0;\n };\n Text.prototype.$setFontMetrics = function (measure) {\n this.$fontMetrics = measure;\n this.$fontMetrics.on(\"changeCharacterSize\", \n function (e) {\n this._signal(\"changeCharacterSize\", e);\n }.bind(this));\n this.$pollSizeChanges();\n };\n Text.prototype.checkForSizeChanges = function () {\n this.$fontMetrics.checkForSizeChanges();\n };\n Text.prototype.$pollSizeChanges = function () {\n return this.$pollSizeChangesTimer = this.$fontMetrics.$pollSizeChanges();\n };\n Text.prototype.setSession = function (session) {\n this.session = session;\n if (session)\n this.$computeTabString();\n };\n Text.prototype.setShowInvisibles = function (showInvisibles) {\n if (this.showInvisibles == showInvisibles)\n return false;\n this.showInvisibles = showInvisibles;\n if (typeof showInvisibles == \"string\") {\n this.showSpaces = /tab/i.test(showInvisibles);\n this.showTabs = /space/i.test(showInvisibles);\n this.showEOL = /eol/i.test(showInvisibles);\n }\n else {\n this.showSpaces = this.showTabs = this.showEOL = showInvisibles;\n }\n this.$computeTabString();\n return true;\n };\n Text.prototype.setDisplayIndentGuides = function (display) {\n if (this.displayIndentGuides == display)\n return false;\n this.displayIndentGuides = display;\n this.$computeTabString();\n return true;\n };\n Text.prototype.setHighlightIndentGuides = function (highlight) {\n if (this.$highlightIndentGuides === highlight)\n return false;\n this.$highlightIndentGuides = highlight;\n return highlight;\n };\n Text.prototype.$computeTabString = function () {\n var tabSize = this.session.getTabSize();\n this.tabSize = tabSize; var tabStr = this.$tabStrings = [0];\n for (var i = 1; i < tabSize + 1; i++) {\n if (this.showTabs) {\n var span = this.dom.createElement(\"span\");\n span.className = \"ace_invisible ace_invisible_tab\";\n span.textContent = lang.stringRepeat(this.TAB_CHAR, i);\n tabStr.push(span);\n }\n else {\n tabStr.push(this.dom.createTextNode(lang.stringRepeat(\" \", i), this.element));\n }\n }\n if (this.displayIndentGuides) {\n this.$indentGuideRe = /\\s\\S| \\t|\\t |\\s$/;\n var className = \"ace_indent-guide\";\n var spaceClass = this.showSpaces ? \" ace_invisible ace_invisible_space\" : \"\";\n var spaceContent = this.showSpaces\n ? lang.stringRepeat(this.SPACE_CHAR, this.tabSize)\n : lang.stringRepeat(\" \", this.tabSize);\n var tabClass = this.showTabs ? \" ace_invisible ace_invisible_tab\" : \"\";\n var tabContent = this.showTabs\n ? lang.stringRepeat(this.TAB_CHAR, this.tabSize)\n : spaceContent;\n var span = this.dom.createElement(\"span\");\n span.className = className + spaceClass;\n span.textContent = spaceContent;\n this.$tabStrings[\" \"] = span;\n var span = this.dom.createElement(\"span\");\n span.className = className + tabClass;\n span.textContent = tabContent;\n this.$tabStrings[\"\\t\"] = span;\n }\n };\n Text.prototype.updateLines = function (config, firstRow, lastRow) {\n if (this.config.lastRow != config.lastRow ||\n this.config.firstRow != config.firstRow) {\n return this.update(config);\n }\n this.config = config;\n var first = Math.max(firstRow, config.firstRow);\n var last = Math.min(lastRow, config.lastRow);\n var lineElements = this.element.childNodes;\n var lineElementsIdx = 0;\n for (var row = config.firstRow; row < first; row++) {\n var foldLine = this.session.getFoldLine(row);\n if (foldLine) {\n if (foldLine.containsRow(first)) {\n first = foldLine.start.row;\n break;\n }\n else {\n row = foldLine.end.row;\n }\n }\n lineElementsIdx++;\n }\n var heightChanged = false;\n var row = first;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row + 1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n if (row > last)\n break; var lineElement = lineElements[lineElementsIdx++];\n if (lineElement) {\n this.dom.removeChildren(lineElement);\n this.$renderLine(lineElement, row, row == foldStart ? foldLine : false);\n if (heightChanged)\n lineElement.style.top = this.$lines.computeLineTop(row, config, this.session) + \"px\";\n var height = (config.lineHeight * this.session.getRowLength(row)) + \"px\";\n if (lineElement.style.height != height) {\n heightChanged = true;\n lineElement.style.height = height;\n }\n }\n row++;\n }\n if (heightChanged) {\n while (lineElementsIdx < this.$lines.cells.length) {\n var cell = this.$lines.cells[lineElementsIdx++];\n cell.element.style.top = this.$lines.computeLineTop(cell.row, config, this.session) + \"px\";\n }\n }\n };\n Text.prototype.scrollLines = function (config) {\n var oldConfig = this.config;\n this.config = config;\n if (this.$lines.pageChanged(oldConfig, config))\n return this.update(config);\n this.$lines.moveContainer(config);\n var lastRow = config.lastRow;\n var oldLastRow = oldConfig ? oldConfig.lastRow : -1;\n if (!oldConfig || oldLastRow < config.firstRow)\n return this.update(config);\n if (lastRow < oldConfig.firstRow)\n return this.update(config);\n if (!oldConfig || oldConfig.lastRow < config.firstRow)\n return this.update(config);\n if (config.lastRow < oldConfig.firstRow)\n return this.update(config);\n if (oldConfig.firstRow < config.firstRow)\n for (var row = this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row > 0; row--)\n this.$lines.shift();\n if (oldConfig.lastRow > config.lastRow)\n for (var row = this.session.getFoldedRowCount(config.lastRow + 1, oldConfig.lastRow); row > 0; row--)\n this.$lines.pop();\n if (config.firstRow < oldConfig.firstRow) {\n this.$lines.unshift(this.$renderLinesFragment(config, config.firstRow, oldConfig.firstRow - 1));\n }\n if (config.lastRow > oldConfig.lastRow) {\n this.$lines.push(this.$renderLinesFragment(config, oldConfig.lastRow + 1, config.lastRow));\n }\n this.$highlightIndentGuide();\n };\n Text.prototype.$renderLinesFragment = function (config, firstRow, lastRow) {\n var fragment = [];\n var row = firstRow;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row + 1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n if (row > lastRow)\n break;\n var line = this.$lines.createCell(row, config, this.session);\n var lineEl = line.element;\n this.dom.removeChildren(lineEl);\n dom.setStyle(lineEl.style, \"height\", this.$lines.computeLineHeight(row, config, this.session) + \"px\");\n dom.setStyle(lineEl.style, \"top\", this.$lines.computeLineTop(row, config, this.session) + \"px\");\n this.$renderLine(lineEl, row, row == foldStart ? foldLine : false);\n if (this.$useLineGroups()) {\n lineEl.className = \"ace_line_group\";\n }\n else {\n lineEl.className = \"ace_line\";\n }\n fragment.push(line);\n row++;\n }\n return fragment;\n };\n Text.prototype.update = function (config) {\n this.$lines.moveContainer(config);\n this.config = config;\n var firstRow = config.firstRow;\n var lastRow = config.lastRow;\n var lines = this.$lines;\n while (lines.getLength())\n lines.pop();\n lines.push(this.$renderLinesFragment(config, firstRow, lastRow));\n };\n Text.prototype.$renderToken = function (parent, screenColumn, token, value) {\n var self = this;\n var re = /(\\t)|( +)|([\\x00-\\x1f\\x80-\\xa0\\xad\\u1680\\u180E\\u2000-\\u200f\\u2028\\u2029\\u202F\\u205F\\uFEFF\\uFFF9-\\uFFFC\\u2066\\u2067\\u2068\\u202A\\u202B\\u202D\\u202E\\u202C\\u2069]+)|(\\u3000)|([\\u1100-\\u115F\\u11A3-\\u11A7\\u11FA-\\u11FF\\u2329-\\u232A\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFB\\u3001-\\u303E\\u3041-\\u3096\\u3099-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u3190-\\u31BA\\u31C0-\\u31E3\\u31F0-\\u321E\\u3220-\\u3247\\u3250-\\u32FE\\u3300-\\u4DBF\\u4E00-\\uA48C\\uA490-\\uA4C6\\uA960-\\uA97C\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFAFF\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE66\\uFE68-\\uFE6B\\uFF01-\\uFF60\\uFFE0-\\uFFE6]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF])/g;\n var valueFragment = this.dom.createFragment(this.element);\n var m;\n var i = 0;\n while (m = re.exec(value)) {\n var tab = m[1];\n var simpleSpace = m[2];\n var controlCharacter = m[3];\n var cjkSpace = m[4];\n var cjk = m[5];\n if (!self.showSpaces && simpleSpace)\n continue;\n var before = i != m.index ? value.slice(i, m.index) : \"\";\n i = m.index + m[0].length;\n if (before) {\n valueFragment.appendChild(this.dom.createTextNode(before, this.element));\n }\n if (tab) {\n var tabSize = self.session.getScreenTabSize(screenColumn + m.index);\n valueFragment.appendChild(self.$tabStrings[tabSize].cloneNode(true));\n screenColumn += tabSize - 1;\n }\n else if (simpleSpace) {\n if (self.showSpaces) {\n var span = this.dom.createElement(\"span\");\n span.className = \"ace_invisible ace_invisible_space\";\n span.textContent = lang.stringRepeat(self.SPACE_CHAR, simpleSpace.length);\n valueFragment.appendChild(span);\n }\n else {\n valueFragment.appendChild(this.dom.createTextNode(simpleSpace, this.element));\n }\n }\n else if (controlCharacter) {\n var span = this.dom.createElement(\"span\");\n span.className = \"ace_invisible ace_invisible_space ace_invalid\";\n span.textContent = lang.stringRepeat(self.SPACE_CHAR, controlCharacter.length);\n valueFragment.appendChild(span);\n }\n else if (cjkSpace) {\n screenColumn += 1;\n var span = this.dom.createElement(\"span\");\n span.style.width = (self.config.characterWidth * 2) + \"px\";\n span.className = self.showSpaces ? \"ace_cjk ace_invisible ace_invisible_space\" : \"ace_cjk\";\n span.textContent = self.showSpaces ? self.SPACE_CHAR : cjkSpace;\n valueFragment.appendChild(span);\n }\n else if (cjk) {\n screenColumn += 1;\n var span = this.dom.createElement(\"span\");\n span.style.width = (self.config.characterWidth * 2) + \"px\";\n span.className = \"ace_cjk\";\n span.textContent = cjk;\n valueFragment.appendChild(span);\n }\n }\n valueFragment.appendChild(this.dom.createTextNode(i ? value.slice(i) : value, this.element));\n if (!isTextToken(token.type)) {\n var classes = \"ace_\" + token.type.replace(/\\./g, \" ace_\");\n var span = this.dom.createElement(\"span\");\n if (token.type == \"fold\") {\n span.style.width = (token.value.length * this.config.characterWidth) + \"px\";\n span.setAttribute(\"title\", nls(\"inline-fold.closed.title\", \"Unfold code\"));\n }\n span.className = classes;\n span.appendChild(valueFragment);\n parent.appendChild(span);\n }\n else {\n parent.appendChild(valueFragment);\n }\n return screenColumn + value.length;\n };\n Text.prototype.renderIndentGuide = function (parent, value, max) {\n var cols = value.search(this.$indentGuideRe);\n if (cols <= 0 || cols >= max)\n return value;\n if (value[0] == \" \") {\n cols -= cols % this.tabSize;\n var count = cols / this.tabSize;\n for (var i = 0; i < count; i++) {\n parent.appendChild(this.$tabStrings[\" \"].cloneNode(true));\n }\n this.$highlightIndentGuide();\n return value.substr(cols);\n }\n else if (value[0] == \"\\t\") {\n for (var i = 0; i < cols; i++) {\n parent.appendChild(this.$tabStrings[\"\\t\"].cloneNode(true));\n }\n this.$highlightIndentGuide();\n return value.substr(cols);\n }\n this.$highlightIndentGuide();\n return value;\n };\n Text.prototype.$highlightIndentGuide = function () {\n if (!this.$highlightIndentGuides || !this.displayIndentGuides)\n return;\n this.$highlightIndentGuideMarker = {\n indentLevel: undefined,\n start: undefined,\n end: undefined,\n dir: undefined\n };\n var lines = this.session.doc.$lines;\n if (!lines)\n return;\n var cursor = this.session.selection.getCursor();\n var initialIndent = /^\\s*/.exec(this.session.doc.getLine(cursor.row))[0].length;\n var elementIndentLevel = Math.floor(initialIndent / this.tabSize);\n this.$highlightIndentGuideMarker = {\n indentLevel: elementIndentLevel,\n start: cursor.row\n };\n var bracketHighlight = this.session.$bracketHighlight;\n if (bracketHighlight) {\n var ranges = this.session.$bracketHighlight.ranges;\n for (var i = 0; i < ranges.length; i++) {\n if (cursor.row !== ranges[i].start.row) {\n this.$highlightIndentGuideMarker.end = ranges[i].start.row;\n if (cursor.row > ranges[i].start.row) {\n this.$highlightIndentGuideMarker.dir = -1;\n }\n else {\n this.$highlightIndentGuideMarker.dir = 1;\n }\n break;\n }\n }\n }\n if (!this.$highlightIndentGuideMarker.end) {\n if (lines[cursor.row] !== '' && cursor.column === lines[cursor.row].length) {\n this.$highlightIndentGuideMarker.dir = 1;\n for (var i = cursor.row + 1; i < lines.length; i++) {\n var line = lines[i];\n var currentIndent = /^\\s*/.exec(line)[0].length;\n if (line !== '') {\n this.$highlightIndentGuideMarker.end = i;\n if (currentIndent <= initialIndent)\n break;\n }\n }\n }\n }\n this.$renderHighlightIndentGuide();\n };\n Text.prototype.$clearActiveIndentGuide = function () {\n var cells = this.$lines.cells;\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i];\n var childNodes = cell.element.childNodes;\n if (childNodes.length > 0) {\n for (var j = 0; j < childNodes.length; j++) {\n if (childNodes[j].classList && childNodes[j].classList.contains(\"ace_indent-guide-active\")) {\n childNodes[j].classList.remove(\"ace_indent-guide-active\");\n break;\n }\n }\n }\n }\n };\n Text.prototype.$setIndentGuideActive = function (cell, indentLevel) {\n var line = this.session.doc.getLine(cell.row);\n if (line !== \"\") {\n var childNodes = cell.element.childNodes;\n if (childNodes) {\n var node = childNodes[indentLevel - 1];\n if (node && node.classList && node.classList.contains(\"ace_indent-guide\"))\n node.classList.add(\"ace_indent-guide-active\");\n }\n }\n };\n Text.prototype.$renderHighlightIndentGuide = function () {\n if (!this.$lines)\n return;\n var cells = this.$lines.cells;\n this.$clearActiveIndentGuide();\n var indentLevel = this.$highlightIndentGuideMarker.indentLevel;\n if (indentLevel !== 0) {\n if (this.$highlightIndentGuideMarker.dir === 1) {\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i];\n if (this.$highlightIndentGuideMarker.end && cell.row >= this.$highlightIndentGuideMarker.start\n + 1) {\n if (cell.row >= this.$highlightIndentGuideMarker.end)\n break;\n this.$setIndentGuideActive(cell, indentLevel);\n }\n }\n }\n else {\n for (var i = cells.length - 1; i >= 0; i--) {\n var cell = cells[i];\n if (this.$highlightIndentGuideMarker.end && cell.row < this.$highlightIndentGuideMarker.start) {\n if (cell.row <= this.$highlightIndentGuideMarker.end)\n break;\n this.$setIndentGuideActive(cell, indentLevel);\n }\n }\n }\n }\n };\n Text.prototype.$createLineElement = function (parent) {\n var lineEl = this.dom.createElement(\"div\");\n lineEl.className = \"ace_line\";\n lineEl.style.height = this.config.lineHeight + \"px\";\n return lineEl;\n };\n Text.prototype.$renderWrappedLine = function (parent, tokens, splits) {\n var chars = 0;\n var split = 0;\n var splitChars = splits[0];\n var screenColumn = 0;\n var lineEl = this.$createLineElement();\n parent.appendChild(lineEl);\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n var value = token.value;\n if (i == 0 && this.displayIndentGuides) {\n chars = value.length;\n value = this.renderIndentGuide(lineEl, value, splitChars);\n if (!value)\n continue;\n chars -= value.length;\n }\n if (chars + value.length < splitChars) {\n screenColumn = this.$renderToken(lineEl, screenColumn, token, value);\n chars += value.length;\n }\n else {\n while (chars + value.length >= splitChars) {\n screenColumn = this.$renderToken(lineEl, screenColumn, token, value.substring(0, splitChars - chars));\n value = value.substring(splitChars - chars);\n chars = splitChars;\n lineEl = this.$createLineElement();\n parent.appendChild(lineEl);\n lineEl.appendChild(this.dom.createTextNode(lang.stringRepeat(\"\\xa0\", splits.indent), this.element));\n split++;\n screenColumn = 0;\n splitChars = splits[split] || Number.MAX_VALUE;\n }\n if (value.length != 0) {\n chars += value.length;\n screenColumn = this.$renderToken(lineEl, screenColumn, token, value);\n }\n }\n }\n if (splits[splits.length - 1] > this.MAX_LINE_LENGTH)\n this.$renderOverflowMessage(lineEl, screenColumn, null, \"\", true);\n };\n Text.prototype.$renderSimpleLine = function (parent, tokens) {\n var screenColumn = 0;\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n var value = token.value;\n if (i == 0 && this.displayIndentGuides) {\n value = this.renderIndentGuide(parent, value);\n if (!value)\n continue;\n }\n if (screenColumn + value.length > this.MAX_LINE_LENGTH)\n return this.$renderOverflowMessage(parent, screenColumn, token, value);\n screenColumn = this.$renderToken(parent, screenColumn, token, value);\n }\n };\n Text.prototype.$renderOverflowMessage = function (parent, screenColumn, token, value, hide) {\n token && this.$renderToken(parent, screenColumn, token, value.slice(0, this.MAX_LINE_LENGTH - screenColumn));\n var overflowEl = this.dom.createElement(\"span\");\n overflowEl.className = \"ace_inline_button ace_keyword ace_toggle_wrap\";\n overflowEl.textContent = hide ? \"<hide>\" : \"<click to see more...>\";\n parent.appendChild(overflowEl);\n };\n Text.prototype.$renderLine = function (parent, row, foldLine) {\n if (!foldLine && foldLine != false)\n foldLine = this.session.getFoldLine(row);\n if (foldLine)\n var tokens = this.$getFoldLineTokens(row, foldLine);\n else\n var tokens = this.session.getTokens(row);\n var lastLineEl = parent;\n if (tokens.length) {\n var splits = this.session.getRowSplitData(row);\n if (splits && splits.length) {\n this.$renderWrappedLine(parent, tokens, splits);\n var lastLineEl = parent.lastChild;\n }\n else {\n var lastLineEl = parent;\n if (this.$useLineGroups()) {\n lastLineEl = this.$createLineElement();\n parent.appendChild(lastLineEl);\n }\n this.$renderSimpleLine(lastLineEl, tokens);\n }\n }\n else if (this.$useLineGroups()) {\n lastLineEl = this.$createLineElement();\n parent.appendChild(lastLineEl);\n }\n if (this.showEOL && lastLineEl) {\n if (foldLine)\n row = foldLine.end.row;\n var invisibleEl = this.dom.createElement(\"span\");\n invisibleEl.className = \"ace_invisible ace_invisible_eol\";\n invisibleEl.textContent = row == this.session.getLength() - 1 ? this.EOF_CHAR : this.EOL_CHAR;\n lastLineEl.appendChild(invisibleEl);\n }\n };\n Text.prototype.$getFoldLineTokens = function (row, foldLine) {\n var session = this.session;\n var renderTokens = [];\n function addTokens(tokens, from, to) {\n var idx = 0, col = 0;\n while ((col + tokens[idx].value.length) < from) {\n col += tokens[idx].value.length;\n idx++;\n if (idx == tokens.length)\n return;\n }\n if (col != from) {\n var value = tokens[idx].value.substring(from - col);\n if (value.length > (to - from))\n value = value.substring(0, to - from);\n renderTokens.push({\n type: tokens[idx].type,\n value: value\n });\n col = from + value.length;\n idx += 1;\n }\n while (col < to && idx < tokens.length) {\n var value = tokens[idx].value;\n if (value.length + col > to) {\n renderTokens.push({\n type: tokens[idx].type,\n value: value.substring(0, to - col)\n });\n }\n else\n renderTokens.push(tokens[idx]);\n col += value.length;\n idx += 1;\n }\n }\n var tokens = session.getTokens(row);\n foldLine.walk(function (placeholder, row, column, lastColumn, isNewRow) {\n if (placeholder != null) {\n renderTokens.push({\n type: \"fold\",\n value: placeholder\n });\n }\n else {\n if (isNewRow)\n tokens = session.getTokens(row);\n if (tokens.length)\n addTokens(tokens, lastColumn, column);\n }\n }, foldLine.end.row, this.session.getLine(foldLine.end.row).length);\n return renderTokens;\n };\n Text.prototype.$useLineGroups = function () {\n return this.session.getUseWrapMode();\n };\n return Text;\n}());\nText.prototype.EOF_CHAR = \"\\xB6\";\nText.prototype.EOL_CHAR_LF = \"\\xAC\";\nText.prototype.EOL_CHAR_CRLF = \"\\xa4\";\nText.prototype.EOL_CHAR = Text.prototype.EOL_CHAR_LF;\nText.prototype.TAB_CHAR = \"\\u2014\"; //\"\\u21E5\";\nText.prototype.SPACE_CHAR = \"\\xB7\";\nText.prototype.$padding = 0;\nText.prototype.MAX_LINE_LENGTH = 10000;\nText.prototype.showInvisibles = false;\nText.prototype.showSpaces = false;\nText.prototype.showTabs = false;\nText.prototype.showEOL = false;\nText.prototype.displayIndentGuides = true;\nText.prototype.$highlightIndentGuides = true;\nText.prototype.$tabStrings = [];\nText.prototype.destroy = {};\nText.prototype.onChangeTabSize = Text.prototype.$computeTabString;\noop.implement(Text.prototype, EventEmitter);\nexports.Text = Text;\n\n});\n\nace.define(\"ace/layer/cursor\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar Cursor = /** @class */ (function () {\n function Cursor(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_cursor-layer\";\n parentEl.appendChild(this.element);\n this.isVisible = false;\n this.isBlinking = true;\n this.blinkInterval = 1000;\n this.smoothBlinking = false;\n this.cursors = [];\n this.cursor = this.addCursor();\n dom.addCssClass(this.element, \"ace_hidden-cursors\");\n this.$updateCursors = this.$updateOpacity.bind(this);\n }\n Cursor.prototype.$updateOpacity = function (val) {\n var cursors = this.cursors;\n for (var i = cursors.length; i--;)\n dom.setStyle(cursors[i].style, \"opacity\", val ? \"\" : \"0\");\n };\n Cursor.prototype.$startCssAnimation = function () {\n var cursors = this.cursors;\n for (var i = cursors.length; i--;)\n cursors[i].style.animationDuration = this.blinkInterval + \"ms\";\n this.$isAnimating = true;\n setTimeout(function () {\n if (this.$isAnimating) {\n dom.addCssClass(this.element, \"ace_animate-blinking\");\n }\n }.bind(this));\n };\n Cursor.prototype.$stopCssAnimation = function () {\n this.$isAnimating = false;\n dom.removeCssClass(this.element, \"ace_animate-blinking\");\n };\n Cursor.prototype.setPadding = function (padding) {\n this.$padding = padding;\n };\n Cursor.prototype.setSession = function (session) {\n this.session = session;\n };\n Cursor.prototype.setBlinking = function (blinking) {\n if (blinking != this.isBlinking) {\n this.isBlinking = blinking;\n this.restartTimer();\n }\n };\n Cursor.prototype.setBlinkInterval = function (blinkInterval) {\n if (blinkInterval != this.blinkInterval) {\n this.blinkInterval = blinkInterval;\n this.restartTimer();\n }\n };\n Cursor.prototype.setSmoothBlinking = function (smoothBlinking) {\n if (smoothBlinking != this.smoothBlinking) {\n this.smoothBlinking = smoothBlinking;\n dom.setCssClass(this.element, \"ace_smooth-blinking\", smoothBlinking);\n this.$updateCursors(true);\n this.restartTimer();\n }\n };\n Cursor.prototype.addCursor = function () {\n var el = dom.createElement(\"div\");\n el.className = \"ace_cursor\";\n this.element.appendChild(el);\n this.cursors.push(el);\n return el;\n };\n Cursor.prototype.removeCursor = function () {\n if (this.cursors.length > 1) {\n var el = this.cursors.pop();\n el.parentNode.removeChild(el);\n return el;\n }\n };\n Cursor.prototype.hideCursor = function () {\n this.isVisible = false;\n dom.addCssClass(this.element, \"ace_hidden-cursors\");\n this.restartTimer();\n };\n Cursor.prototype.showCursor = function () {\n this.isVisible = true;\n dom.removeCssClass(this.element, \"ace_hidden-cursors\");\n this.restartTimer();\n };\n Cursor.prototype.restartTimer = function () {\n var update = this.$updateCursors;\n clearInterval(this.intervalId);\n clearTimeout(this.timeoutId);\n this.$stopCssAnimation();\n if (this.smoothBlinking) {\n this.$isSmoothBlinking = false;\n dom.removeCssClass(this.element, \"ace_smooth-blinking\");\n }\n update(true);\n if (!this.isBlinking || !this.blinkInterval || !this.isVisible) {\n this.$stopCssAnimation();\n return;\n }\n if (this.smoothBlinking) {\n this.$isSmoothBlinking = true;\n setTimeout(function () {\n if (this.$isSmoothBlinking) {\n dom.addCssClass(this.element, \"ace_smooth-blinking\");\n }\n }.bind(this));\n }\n if (dom.HAS_CSS_ANIMATION) {\n this.$startCssAnimation();\n }\n else {\n var blink = /**@this{Cursor}*/ function () {\n this.timeoutId = setTimeout(function () {\n update(false);\n }, 0.6 * this.blinkInterval);\n }.bind(this);\n this.intervalId = setInterval(function () {\n update(true);\n blink();\n }, this.blinkInterval);\n blink();\n }\n };\n Cursor.prototype.getPixelPosition = function (position, onScreen) {\n if (!this.config || !this.session)\n return { left: 0, top: 0 };\n if (!position)\n position = this.session.selection.getCursor();\n var pos = this.session.documentToScreenPosition(position);\n var cursorLeft = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, position.row)\n ? this.session.$bidiHandler.getPosLeft(pos.column)\n : pos.column * this.config.characterWidth);\n var cursorTop = (pos.row - (onScreen ? this.config.firstRowScreen : 0)) *\n this.config.lineHeight;\n return { left: cursorLeft, top: cursorTop };\n };\n Cursor.prototype.isCursorInView = function (pixelPos, config) {\n return pixelPos.top >= 0 && pixelPos.top < config.maxHeight;\n };\n Cursor.prototype.update = function (config) {\n this.config = config;\n var selections = this.session.$selectionMarkers;\n var i = 0, cursorIndex = 0;\n if (selections === undefined || selections.length === 0) {\n selections = [{ cursor: null }];\n }\n for (var i = 0, n = selections.length; i < n; i++) {\n var pixelPos = this.getPixelPosition(selections[i].cursor, true);\n if ((pixelPos.top > config.height + config.offset ||\n pixelPos.top < 0) && i > 1) {\n continue;\n }\n var element = this.cursors[cursorIndex++] || this.addCursor();\n var style = element.style;\n if (!this.drawCursor) {\n if (!this.isCursorInView(pixelPos, config)) {\n dom.setStyle(style, \"display\", \"none\");\n }\n else {\n dom.setStyle(style, \"display\", \"block\");\n dom.translate(element, pixelPos.left, pixelPos.top);\n dom.setStyle(style, \"width\", Math.round(config.characterWidth) + \"px\");\n dom.setStyle(style, \"height\", config.lineHeight + \"px\");\n }\n }\n else {\n this.drawCursor(element, pixelPos, config, selections[i], this.session);\n }\n }\n while (this.cursors.length > cursorIndex)\n this.removeCursor();\n var overwrite = this.session.getOverwrite();\n this.$setOverwrite(overwrite);\n this.$pixelPos = pixelPos;\n this.restartTimer();\n };\n Cursor.prototype.$setOverwrite = function (overwrite) {\n if (overwrite != this.overwrite) {\n this.overwrite = overwrite;\n if (overwrite)\n dom.addCssClass(this.element, \"ace_overwrite-cursors\");\n else\n dom.removeCssClass(this.element, \"ace_overwrite-cursors\");\n }\n };\n Cursor.prototype.destroy = function () {\n clearInterval(this.intervalId);\n clearTimeout(this.timeoutId);\n };\n return Cursor;\n}());\nCursor.prototype.$padding = 0;\nCursor.prototype.drawCursor = null;\nexports.Cursor = Cursor;\n\n});\n\nace.define(\"ace/scrollbar\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar event = require(\"./lib/event\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar MAX_SCROLL_H = 0x8000;\nvar Scrollbar = /** @class */ (function () {\n function Scrollbar(parent, classSuffix) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_scrollbar ace_scrollbar\" + classSuffix;\n this.inner = dom.createElement(\"div\");\n this.inner.className = \"ace_scrollbar-inner\";\n this.inner.textContent = \"\\xa0\";\n this.element.appendChild(this.inner);\n parent.appendChild(this.element);\n this.setVisible(false);\n this.skipEvent = false;\n event.addListener(this.element, \"scroll\", this.onScroll.bind(this));\n event.addListener(this.element, \"mousedown\", event.preventDefault);\n }\n Scrollbar.prototype.setVisible = function (isVisible) {\n this.element.style.display = isVisible ? \"\" : \"none\";\n this.isVisible = isVisible;\n this.coeff = 1;\n };\n return Scrollbar;\n}());\noop.implement(Scrollbar.prototype, EventEmitter);\nvar VScrollBar = /** @class */ (function (_super) {\n __extends(VScrollBar, _super);\n function VScrollBar(parent, renderer) {\n var _this = _super.call(this, parent, '-v') || this;\n _this.scrollTop = 0;\n _this.scrollHeight = 0;\n renderer.$scrollbarWidth =\n _this.width = dom.scrollbarWidth(parent.ownerDocument);\n _this.inner.style.width =\n _this.element.style.width = (_this.width || 15) + 5 + \"px\";\n _this.$minWidth = 0;\n return _this;\n }\n VScrollBar.prototype.onScroll = function () {\n if (!this.skipEvent) {\n this.scrollTop = this.element.scrollTop;\n if (this.coeff != 1) {\n var h = this.element.clientHeight / this.scrollHeight;\n this.scrollTop = this.scrollTop * (1 - h) / (this.coeff - h);\n }\n this._emit(\"scroll\", { data: this.scrollTop });\n }\n this.skipEvent = false;\n };\n VScrollBar.prototype.getWidth = function () {\n return Math.max(this.isVisible ? this.width : 0, this.$minWidth || 0);\n };\n VScrollBar.prototype.setHeight = function (height) {\n this.element.style.height = height + \"px\";\n };\n VScrollBar.prototype.setScrollHeight = function (height) {\n this.scrollHeight = height;\n if (height > MAX_SCROLL_H) {\n this.coeff = MAX_SCROLL_H / height;\n height = MAX_SCROLL_H;\n }\n else if (this.coeff != 1) {\n this.coeff = 1;\n }\n this.inner.style.height = height + \"px\";\n };\n VScrollBar.prototype.setScrollTop = function (scrollTop) {\n if (this.scrollTop != scrollTop) {\n this.skipEvent = true;\n this.scrollTop = scrollTop;\n this.element.scrollTop = scrollTop * this.coeff;\n }\n };\n return VScrollBar;\n}(Scrollbar));\nVScrollBar.prototype.setInnerHeight = VScrollBar.prototype.setScrollHeight;\nvar HScrollBar = /** @class */ (function (_super) {\n __extends(HScrollBar, _super);\n function HScrollBar(parent, renderer) {\n var _this = _super.call(this, parent, '-h') || this;\n _this.scrollLeft = 0;\n _this.height = renderer.$scrollbarWidth;\n _this.inner.style.height =\n _this.element.style.height = (_this.height || 15) + 5 + \"px\";\n return _this;\n }\n HScrollBar.prototype.onScroll = function () {\n if (!this.skipEvent) {\n this.scrollLeft = this.element.scrollLeft;\n this._emit(\"scroll\", { data: this.scrollLeft });\n }\n this.skipEvent = false;\n };\n HScrollBar.prototype.getHeight = function () {\n return this.isVisible ? this.height : 0;\n };\n HScrollBar.prototype.setWidth = function (width) {\n this.element.style.width = width + \"px\";\n };\n HScrollBar.prototype.setInnerWidth = function (width) {\n this.inner.style.width = width + \"px\";\n };\n HScrollBar.prototype.setScrollWidth = function (width) {\n this.inner.style.width = width + \"px\";\n };\n HScrollBar.prototype.setScrollLeft = function (scrollLeft) {\n if (this.scrollLeft != scrollLeft) {\n this.skipEvent = true;\n this.scrollLeft = this.element.scrollLeft = scrollLeft;\n }\n };\n return HScrollBar;\n}(Scrollbar));\nexports.ScrollBar = VScrollBar; // backward compatibility\nexports.ScrollBarV = VScrollBar; // backward compatibility\nexports.ScrollBarH = HScrollBar; // backward compatibility\nexports.VScrollBar = VScrollBar;\nexports.HScrollBar = HScrollBar;\n\n});\n\nace.define(\"ace/scrollbar_custom\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar event = require(\"./lib/event\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\ndom.importCssString(\".ace_editor>.ace_sb-v div, .ace_editor>.ace_sb-h div{\\n position: absolute;\\n background: rgba(128, 128, 128, 0.6);\\n -moz-box-sizing: border-box;\\n box-sizing: border-box;\\n border: 1px solid #bbb;\\n border-radius: 2px;\\n z-index: 8;\\n}\\n.ace_editor>.ace_sb-v, .ace_editor>.ace_sb-h {\\n position: absolute;\\n z-index: 6;\\n background: none;\\n overflow: hidden!important;\\n}\\n.ace_editor>.ace_sb-v {\\n z-index: 6;\\n right: 0;\\n top: 0;\\n width: 12px;\\n}\\n.ace_editor>.ace_sb-v div {\\n z-index: 8;\\n right: 0;\\n width: 100%;\\n}\\n.ace_editor>.ace_sb-h {\\n bottom: 0;\\n left: 0;\\n height: 12px;\\n}\\n.ace_editor>.ace_sb-h div {\\n bottom: 0;\\n height: 100%;\\n}\\n.ace_editor>.ace_sb_grabbed {\\n z-index: 8;\\n background: #000;\\n}\", \"ace_scrollbar.css\", false);\nvar ScrollBar = /** @class */ (function () {\n function ScrollBar(parent, classSuffix) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_sb\" + classSuffix;\n this.inner = dom.createElement(\"div\");\n this.inner.className = \"\";\n this.element.appendChild(this.inner);\n this.VScrollWidth = 12;\n this.HScrollHeight = 12;\n parent.appendChild(this.element);\n this.setVisible(false);\n this.skipEvent = false;\n event.addMultiMouseDownListener(this.element, [500, 300, 300], this, \"onMouseDown\");\n }\n ScrollBar.prototype.setVisible = function (isVisible) {\n this.element.style.display = isVisible ? \"\" : \"none\";\n this.isVisible = isVisible;\n this.coeff = 1;\n };\n return ScrollBar;\n}());\noop.implement(ScrollBar.prototype, EventEmitter);\nvar VScrollBar = /** @class */ (function (_super) {\n __extends(VScrollBar, _super);\n function VScrollBar(parent, renderer) {\n var _this = _super.call(this, parent, '-v') || this;\n _this.scrollTop = 0;\n _this.scrollHeight = 0;\n _this.parent = parent;\n _this.width = _this.VScrollWidth;\n _this.renderer = renderer;\n _this.inner.style.width = _this.element.style.width = (_this.width || 15) + \"px\";\n _this.$minWidth = 0;\n return _this;\n }\n VScrollBar.prototype.onMouseDown = function (eType, e) {\n if (eType !== \"mousedown\")\n return;\n if (event.getButton(e) !== 0 || e.detail === 2) {\n return;\n }\n if (e.target === this.inner) {\n var self = this;\n var mousePageY = e.clientY;\n var onMouseMove = function (e) {\n mousePageY = e.clientY;\n };\n var onMouseUp = function () {\n clearInterval(timerId);\n };\n var startY = e.clientY;\n var startTop = this.thumbTop;\n var onScrollInterval = function () {\n if (mousePageY === undefined)\n return;\n var scrollTop = self.scrollTopFromThumbTop(startTop + mousePageY - startY);\n if (scrollTop === self.scrollTop)\n return;\n self._emit(\"scroll\", { data: scrollTop });\n };\n event.capture(this.inner, onMouseMove, onMouseUp);\n var timerId = setInterval(onScrollInterval, 20);\n return event.preventDefault(e);\n }\n var top = e.clientY - this.element.getBoundingClientRect().top - this.thumbHeight / 2;\n this._emit(\"scroll\", { data: this.scrollTopFromThumbTop(top) });\n return event.preventDefault(e);\n };\n VScrollBar.prototype.getHeight = function () {\n return this.height;\n };\n VScrollBar.prototype.scrollTopFromThumbTop = function (thumbTop) {\n var scrollTop = thumbTop * (this.pageHeight - this.viewHeight) / (this.slideHeight - this.thumbHeight);\n scrollTop = scrollTop >> 0;\n if (scrollTop < 0) {\n scrollTop = 0;\n }\n else if (scrollTop > this.pageHeight - this.viewHeight) {\n scrollTop = this.pageHeight - this.viewHeight;\n }\n return scrollTop;\n };\n VScrollBar.prototype.getWidth = function () {\n return Math.max(this.isVisible ? this.width : 0, this.$minWidth || 0);\n };\n VScrollBar.prototype.setHeight = function (height) {\n this.height = Math.max(0, height);\n this.slideHeight = this.height;\n this.viewHeight = this.height;\n this.setScrollHeight(this.pageHeight, true);\n };\n VScrollBar.prototype.setScrollHeight = function (height, force) {\n if (this.pageHeight === height && !force)\n return;\n this.pageHeight = height;\n this.thumbHeight = this.slideHeight * this.viewHeight / this.pageHeight;\n if (this.thumbHeight > this.slideHeight)\n this.thumbHeight = this.slideHeight;\n if (this.thumbHeight < 15)\n this.thumbHeight = 15;\n this.inner.style.height = this.thumbHeight + \"px\";\n if (this.scrollTop > (this.pageHeight - this.viewHeight)) {\n this.scrollTop = (this.pageHeight - this.viewHeight);\n if (this.scrollTop < 0)\n this.scrollTop = 0;\n this._emit(\"scroll\", { data: this.scrollTop });\n }\n };\n VScrollBar.prototype.setScrollTop = function (scrollTop) {\n this.scrollTop = scrollTop;\n if (scrollTop < 0)\n scrollTop = 0;\n this.thumbTop = scrollTop * (this.slideHeight - this.thumbHeight) / (this.pageHeight - this.viewHeight);\n this.inner.style.top = this.thumbTop + \"px\";\n };\n return VScrollBar;\n}(ScrollBar));\nVScrollBar.prototype.setInnerHeight = VScrollBar.prototype.setScrollHeight;\nvar HScrollBar = /** @class */ (function (_super) {\n __extends(HScrollBar, _super);\n function HScrollBar(parent, renderer) {\n var _this = _super.call(this, parent, '-h') || this;\n _this.scrollLeft = 0;\n _this.scrollWidth = 0;\n _this.height = _this.HScrollHeight;\n _this.inner.style.height = _this.element.style.height = (_this.height || 12) + \"px\";\n _this.renderer = renderer;\n return _this;\n }\n HScrollBar.prototype.onMouseDown = function (eType, e) {\n if (eType !== \"mousedown\")\n return;\n if (event.getButton(e) !== 0 || e.detail === 2) {\n return;\n }\n if (e.target === this.inner) {\n var self = this;\n var mousePageX = e.clientX;\n var onMouseMove = function (e) {\n mousePageX = e.clientX;\n };\n var onMouseUp = function () {\n clearInterval(timerId);\n };\n var startX = e.clientX;\n var startLeft = this.thumbLeft;\n var onScrollInterval = function () {\n if (mousePageX === undefined)\n return;\n var scrollLeft = self.scrollLeftFromThumbLeft(startLeft + mousePageX - startX);\n if (scrollLeft === self.scrollLeft)\n return;\n self._emit(\"scroll\", { data: scrollLeft });\n };\n event.capture(this.inner, onMouseMove, onMouseUp);\n var timerId = setInterval(onScrollInterval, 20);\n return event.preventDefault(e);\n }\n var left = e.clientX - this.element.getBoundingClientRect().left - this.thumbWidth / 2;\n this._emit(\"scroll\", { data: this.scrollLeftFromThumbLeft(left) });\n return event.preventDefault(e);\n };\n HScrollBar.prototype.getHeight = function () {\n return this.isVisible ? this.height : 0;\n };\n HScrollBar.prototype.scrollLeftFromThumbLeft = function (thumbLeft) {\n var scrollLeft = thumbLeft * (this.pageWidth - this.viewWidth) / (this.slideWidth - this.thumbWidth);\n scrollLeft = scrollLeft >> 0;\n if (scrollLeft < 0) {\n scrollLeft = 0;\n }\n else if (scrollLeft > this.pageWidth - this.viewWidth) {\n scrollLeft = this.pageWidth - this.viewWidth;\n }\n return scrollLeft;\n };\n HScrollBar.prototype.setWidth = function (width) {\n this.width = Math.max(0, width);\n this.element.style.width = this.width + \"px\";\n this.slideWidth = this.width;\n this.viewWidth = this.width;\n this.setScrollWidth(this.pageWidth, true);\n };\n HScrollBar.prototype.setScrollWidth = function (width, force) {\n if (this.pageWidth === width && !force)\n return;\n this.pageWidth = width;\n this.thumbWidth = this.slideWidth * this.viewWidth / this.pageWidth;\n if (this.thumbWidth > this.slideWidth)\n this.thumbWidth = this.slideWidth;\n if (this.thumbWidth < 15)\n this.thumbWidth = 15;\n this.inner.style.width = this.thumbWidth + \"px\";\n if (this.scrollLeft > (this.pageWidth - this.viewWidth)) {\n this.scrollLeft = (this.pageWidth - this.viewWidth);\n if (this.scrollLeft < 0)\n this.scrollLeft = 0;\n this._emit(\"scroll\", { data: this.scrollLeft });\n }\n };\n HScrollBar.prototype.setScrollLeft = function (scrollLeft) {\n this.scrollLeft = scrollLeft;\n if (scrollLeft < 0)\n scrollLeft = 0;\n this.thumbLeft = scrollLeft * (this.slideWidth - this.thumbWidth) / (this.pageWidth - this.viewWidth);\n this.inner.style.left = (this.thumbLeft) + \"px\";\n };\n return HScrollBar;\n}(ScrollBar));\nHScrollBar.prototype.setInnerWidth = HScrollBar.prototype.setScrollWidth;\nexports.ScrollBar = VScrollBar; // backward compatibility\nexports.ScrollBarV = VScrollBar; // backward compatibility\nexports.ScrollBarH = HScrollBar; // backward compatibility\nexports.VScrollBar = VScrollBar;\nexports.HScrollBar = HScrollBar;\n\n});\n\nace.define(\"ace/renderloop\",[\"require\",\"exports\",\"module\",\"ace/lib/event\"], function(require, exports, module){\"use strict\";\nvar event = require(\"./lib/event\");\nvar RenderLoop = /** @class */ (function () {\n function RenderLoop(onRender, win) {\n this.onRender = onRender;\n this.pending = false;\n this.changes = 0;\n this.$recursionLimit = 2;\n this.window = win || window;\n var _self = this;\n this._flush = function (ts) {\n _self.pending = false;\n var changes = _self.changes;\n if (changes) {\n event.blockIdle(100);\n _self.changes = 0;\n _self.onRender(changes);\n }\n if (_self.changes) {\n if (_self.$recursionLimit-- < 0)\n return;\n _self.schedule();\n }\n else {\n _self.$recursionLimit = 2;\n }\n };\n }\n RenderLoop.prototype.schedule = function (change) {\n this.changes = this.changes | change;\n if (this.changes && !this.pending) {\n event.nextFrame(this._flush);\n this.pending = true;\n }\n };\n RenderLoop.prototype.clear = function (change) {\n var changes = this.changes;\n this.changes = 0;\n return changes;\n };\n return RenderLoop;\n}());\nexports.RenderLoop = RenderLoop;\n\n});\n\nace.define(\"ace/layer/font_metrics\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/lib/event_emitter\"], function(require, exports, module){var oop = require(\"../lib/oop\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar CHAR_COUNT = 512;\nvar USE_OBSERVER = typeof ResizeObserver == \"function\";\nvar L = 200;\nvar FontMetrics = /** @class */ (function () {\n function FontMetrics(parentEl) {\n this.el = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.el.style, true);\n this.$main = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.$main.style);\n this.$measureNode = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.$measureNode.style);\n this.el.appendChild(this.$main);\n this.el.appendChild(this.$measureNode);\n parentEl.appendChild(this.el);\n this.$measureNode.textContent = lang.stringRepeat(\"X\", CHAR_COUNT);\n this.$characterSize = { width: 0, height: 0 };\n if (USE_OBSERVER)\n this.$addObserver();\n else\n this.checkForSizeChanges();\n }\n FontMetrics.prototype.$setMeasureNodeStyles = function (style, isRoot) {\n style.width = style.height = \"auto\";\n style.left = style.top = \"0px\";\n style.visibility = \"hidden\";\n style.position = \"absolute\";\n style.whiteSpace = \"pre\";\n if (useragent.isIE < 8) {\n style[\"font-family\"] = \"inherit\";\n }\n else {\n style.font = \"inherit\";\n }\n style.overflow = isRoot ? \"hidden\" : \"visible\";\n };\n FontMetrics.prototype.checkForSizeChanges = function (size) {\n if (size === undefined)\n size = this.$measureSizes();\n if (size && (this.$characterSize.width !== size.width || this.$characterSize.height !== size.height)) {\n this.$measureNode.style.fontWeight = \"bold\";\n var boldSize = this.$measureSizes();\n this.$measureNode.style.fontWeight = \"\";\n this.$characterSize = size;\n this.charSizes = Object.create(null);\n this.allowBoldFonts = boldSize && boldSize.width === size.width && boldSize.height === size.height;\n this._emit(\"changeCharacterSize\", { data: size });\n }\n };\n FontMetrics.prototype.$addObserver = function () {\n var self = this;\n this.$observer = new window.ResizeObserver(function (e) {\n self.checkForSizeChanges();\n });\n this.$observer.observe(this.$measureNode);\n };\n FontMetrics.prototype.$pollSizeChanges = function () {\n if (this.$pollSizeChangesTimer || this.$observer)\n return this.$pollSizeChangesTimer;\n var self = this;\n return this.$pollSizeChangesTimer = event.onIdle(function cb() {\n self.checkForSizeChanges();\n event.onIdle(cb, 500);\n }, 500);\n };\n FontMetrics.prototype.setPolling = function (val) {\n if (val) {\n this.$pollSizeChanges();\n }\n else if (this.$pollSizeChangesTimer) {\n clearInterval(this.$pollSizeChangesTimer);\n this.$pollSizeChangesTimer = 0;\n }\n };\n FontMetrics.prototype.$measureSizes = function (node) {\n var size = {\n height: (node || this.$measureNode).clientHeight,\n width: (node || this.$measureNode).clientWidth / CHAR_COUNT\n };\n if (size.width === 0 || size.height === 0)\n return null;\n return size;\n };\n FontMetrics.prototype.$measureCharWidth = function (ch) {\n this.$main.textContent = lang.stringRepeat(ch, CHAR_COUNT);\n var rect = this.$main.getBoundingClientRect();\n return rect.width / CHAR_COUNT;\n };\n FontMetrics.prototype.getCharacterWidth = function (ch) {\n var w = this.charSizes[ch];\n if (w === undefined) {\n w = this.charSizes[ch] = this.$measureCharWidth(ch) / this.$characterSize.width;\n }\n return w;\n };\n FontMetrics.prototype.destroy = function () {\n clearInterval(this.$pollSizeChangesTimer);\n if (this.$observer)\n this.$observer.disconnect();\n if (this.el && this.el.parentNode)\n this.el.parentNode.removeChild(this.el);\n };\n FontMetrics.prototype.$getZoom = function (element) {\n if (!element || !element.parentElement)\n return 1;\n return (Number(window.getComputedStyle(element)[\"zoom\"]) || 1) * this.$getZoom(element.parentElement);\n };\n FontMetrics.prototype.$initTransformMeasureNodes = function () {\n var t = function (t, l) {\n return [\"div\", {\n style: \"position: absolute;top:\" + t + \"px;left:\" + l + \"px;\"\n }];\n };\n this.els = dom.buildDom([t(0, 0), t(L, 0), t(0, L), t(L, L)], this.el);\n };\n FontMetrics.prototype.transformCoordinates = function (clientPos, elPos) {\n if (clientPos) {\n var zoom = this.$getZoom(this.el);\n clientPos = mul(1 / zoom, clientPos);\n }\n function solve(l1, l2, r) {\n var det = l1[1] * l2[0] - l1[0] * l2[1];\n return [\n (-l2[1] * r[0] + l2[0] * r[1]) / det,\n (+l1[1] * r[0] - l1[0] * r[1]) / det\n ];\n }\n function sub(a, b) { return [a[0] - b[0], a[1] - b[1]]; }\n function add(a, b) { return [a[0] + b[0], a[1] + b[1]]; }\n function mul(a, b) { return [a * b[0], a * b[1]]; }\n if (!this.els)\n this.$initTransformMeasureNodes();\n function p(el) {\n var r = el.getBoundingClientRect();\n return [r.left, r.top];\n }\n var a = p(this.els[0]);\n var b = p(this.els[1]);\n var c = p(this.els[2]);\n var d = p(this.els[3]);\n var h = solve(sub(d, b), sub(d, c), sub(add(b, c), add(d, a)));\n var m1 = mul(1 + h[0], sub(b, a));\n var m2 = mul(1 + h[1], sub(c, a));\n if (elPos) {\n var x = elPos;\n var k = h[0] * x[0] / L + h[1] * x[1] / L + 1;\n var ut = add(mul(x[0], m1), mul(x[1], m2));\n return add(mul(1 / k / L, ut), a);\n }\n var u = sub(clientPos, a);\n var f = solve(sub(m1, mul(h[0], u)), sub(m2, mul(h[1], u)), u);\n return mul(L, f);\n };\n return FontMetrics;\n}());\nFontMetrics.prototype.$characterSize = { width: 0, height: 0 };\noop.implement(FontMetrics.prototype, EventEmitter);\nexports.FontMetrics = FontMetrics;\n\n});\n\nace.define(\"ace/css/editor-css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){/*\nstyles = []\nfor (var i = 1; i < 16; i++) {\n styles.push(\".ace_br\" + i + \"{\" + (\n [\"top-left\", \"top-right\", \"bottom-right\", \"bottom-left\"]\n ).map(function(x, j) {\n return i & (1<<j) ? \"border-\" + x + \"-radius: 3px;\" : \"\"\n }).filter(Boolean).join(\" \") + \"}\")\n}\nstyles.join(\"\\\\n\")\n*/\nmodule.exports = \"\\n.ace_br1 {border-top-left-radius : 3px;}\\n.ace_br2 {border-top-right-radius : 3px;}\\n.ace_br3 {border-top-left-radius : 3px; border-top-right-radius: 3px;}\\n.ace_br4 {border-bottom-right-radius: 3px;}\\n.ace_br5 {border-top-left-radius : 3px; border-bottom-right-radius: 3px;}\\n.ace_br6 {border-top-right-radius : 3px; border-bottom-right-radius: 3px;}\\n.ace_br7 {border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px;}\\n.ace_br8 {border-bottom-left-radius : 3px;}\\n.ace_br9 {border-top-left-radius : 3px; border-bottom-left-radius: 3px;}\\n.ace_br10{border-top-right-radius : 3px; border-bottom-left-radius: 3px;}\\n.ace_br11{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px;}\\n.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\n.ace_br13{border-top-left-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\n.ace_br14{border-top-right-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\n.ace_br15{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\n\\n\\n.ace_editor {\\n position: relative;\\n overflow: hidden;\\n padding: 0;\\n font: 12px/normal 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'Source Code Pro', 'source-code-pro', monospace;\\n direction: ltr;\\n text-align: left;\\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\\n forced-color-adjust: none;\\n}\\n\\n.ace_scroller {\\n position: absolute;\\n overflow: hidden;\\n top: 0;\\n bottom: 0;\\n background-color: inherit;\\n -ms-user-select: none;\\n -moz-user-select: none;\\n -webkit-user-select: none;\\n user-select: none;\\n cursor: text;\\n}\\n\\n.ace_content {\\n position: absolute;\\n box-sizing: border-box;\\n min-width: 100%;\\n contain: style size layout;\\n font-variant-ligatures: no-common-ligatures;\\n}\\n\\n.ace_keyboard-focus:focus {\\n box-shadow: inset 0 0 0 2px #5E9ED6;\\n outline: none;\\n}\\n\\n.ace_dragging .ace_scroller:before{\\n position: absolute;\\n top: 0;\\n left: 0;\\n right: 0;\\n bottom: 0;\\n content: '';\\n background: rgba(250, 250, 250, 0.01);\\n z-index: 1000;\\n}\\n.ace_dragging.ace_dark .ace_scroller:before{\\n background: rgba(0, 0, 0, 0.01);\\n}\\n\\n.ace_gutter {\\n position: absolute;\\n overflow : hidden;\\n width: auto;\\n top: 0;\\n bottom: 0;\\n left: 0;\\n cursor: default;\\n z-index: 4;\\n -ms-user-select: none;\\n -moz-user-select: none;\\n -webkit-user-select: none;\\n user-select: none;\\n contain: style size layout;\\n}\\n\\n.ace_gutter-active-line {\\n position: absolute;\\n left: 0;\\n right: 0;\\n}\\n\\n.ace_scroller.ace_scroll-left:after {\\n content: \\\"\\\";\\n position: absolute;\\n top: 0;\\n right: 0;\\n bottom: 0;\\n left: 0;\\n box-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;\\n pointer-events: none;\\n}\\n\\n.ace_gutter-cell, .ace_gutter-cell_svg-icons {\\n position: absolute;\\n top: 0;\\n left: 0;\\n right: 0;\\n padding-left: 19px;\\n padding-right: 6px;\\n background-repeat: no-repeat;\\n}\\n\\n.ace_gutter-cell_svg-icons .ace_gutter_annotation {\\n margin-left: -14px;\\n float: left;\\n}\\n\\n.ace_gutter-cell .ace_gutter_annotation {\\n margin-left: -19px;\\n float: left;\\n}\\n\\n.ace_gutter-cell.ace_error, .ace_icon.ace_error, .ace_icon.ace_error_fold, .ace_gutter-cell.ace_security, .ace_icon.ace_security, .ace_icon.ace_security_fold {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==\\\");\\n background-repeat: no-repeat;\\n background-position: 2px center;\\n}\\n\\n.ace_gutter-cell.ace_warning, .ace_icon.ace_warning, .ace_icon.ace_warning_fold {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==\\\");\\n background-repeat: no-repeat;\\n background-position: 2px center;\\n}\\n\\n.ace_gutter-cell.ace_info, .ace_icon.ace_info, .ace_gutter-cell.ace_hint, .ace_icon.ace_hint {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=\\\");\\n background-repeat: no-repeat;\\n background-position: 2px center;\\n}\\n\\n.ace_dark .ace_gutter-cell.ace_info, .ace_dark .ace_icon.ace_info, .ace_dark .ace_gutter-cell.ace_hint, .ace_dark .ace_icon.ace_hint {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC\\\");\\n}\\n\\n.ace_icon_svg.ace_error {\\n -webkit-mask-image: url(\\\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCAxNiI+CjxnIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlPSJyZWQiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KPGNpcmNsZSBmaWxsPSJub25lIiBjeD0iOCIgY3k9IjgiIHI9IjciIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPGxpbmUgeDE9IjExIiB5MT0iNSIgeDI9IjUiIHkyPSIxMSIvPgo8bGluZSB4MT0iMTEiIHkxPSIxMSIgeDI9IjUiIHkyPSI1Ii8+CjwvZz4KPC9zdmc+\\\");\\n background-color: crimson;\\n}\\n.ace_icon_svg.ace_security {\\n -webkit-mask-image: url(\\\"data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjAgMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgICA8ZyBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZT0iZGFya29yYW5nZSIgZmlsbD0ibm9uZSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgogICAgICAgIDxwYXRoIGNsYXNzPSJzdHJva2UtbGluZWpvaW4tcm91bmQiIGQ9Ik04IDE0LjgzMDdDOCAxNC44MzA3IDIgMTIuOTA0NyAyIDguMDg5OTJWMy4yNjU0OEM1LjMxIDMuMjY1NDggNy45ODk5OSAxLjM0OTE4IDcuOTg5OTkgMS4zNDkxOEM3Ljk4OTk5IDEuMzQ5MTggMTAuNjkgMy4yNjU0OCAxNCAzLjI2NTQ4VjguMDg5OTJDMTQgMTIuOTA0NyA4IDE0LjgzMDcgOCAxNC44MzA3WiIvPgogICAgICAgIDxwYXRoIGQ9Ik0yIDguMDg5OTJWMy4yNjU0OEM1LjMxIDMuMjY1NDggNy45ODk5OSAxLjM0OTE4IDcuOTg5OTkgMS4zNDkxOCIvPgogICAgICAgIDxwYXRoIGQ9Ik0xMy45OSA4LjA4OTkyVjMuMjY1NDhDMTAuNjggMy4yNjU0OCA4IDEuMzQ5MTggOCAxLjM0OTE4Ii8+CiAgICAgICAgPHBhdGggY2xhc3M9InN0cm9rZS1saW5lam9pbi1yb3VuZCIgZD0iTTggNFY5Ii8+CiAgICAgICAgPHBhdGggY2xhc3M9InN0cm9rZS1saW5lam9pbi1yb3VuZCIgZD0iTTggMTBWMTIiLz4KICAgIDwvZz4KPC9zdmc+\\\");\\n background-color: crimson;\\n}\\n.ace_icon_svg.ace_warning {\\n -webkit-mask-image: url(\\\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCAxNiI+CjxnIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlPSJkYXJrb3JhbmdlIiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiI+Cjxwb2x5Z29uIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGZpbGw9Im5vbmUiIHBvaW50cz0iOCAxIDE1IDE1IDEgMTUgOCAxIi8+CjxyZWN0IHg9IjgiIHk9IjEyIiB3aWR0aD0iMC4wMSIgaGVpZ2h0PSIwLjAxIi8+CjxsaW5lIHgxPSI4IiB5MT0iNiIgeDI9IjgiIHkyPSIxMCIvPgo8L2c+Cjwvc3ZnPg==\\\");\\n background-color: darkorange;\\n}\\n.ace_icon_svg.ace_info {\\n -webkit-mask-image: url(\\\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCAxNiI+CjxnIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlPSJibHVlIiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiI+CjxjaXJjbGUgZmlsbD0ibm9uZSIgY3g9IjgiIGN5PSI4IiByPSI3IiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+Cjxwb2x5bGluZSBwb2ludHM9IjggMTEgOCA4Ii8+Cjxwb2x5bGluZSBwb2ludHM9IjkgOCA2IDgiLz4KPGxpbmUgeDE9IjEwIiB5MT0iMTEiIHgyPSI2IiB5Mj0iMTEiLz4KPHJlY3QgeD0iOCIgeT0iNSIgd2lkdGg9IjAuMDEiIGhlaWdodD0iMC4wMSIvPgo8L2c+Cjwvc3ZnPg==\\\");\\n background-color: royalblue;\\n}\\n.ace_icon_svg.ace_hint {\\n -webkit-mask-image: url(\\\"data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjAgMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgICA8ZyBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZT0ic2lsdmVyIiBmaWxsPSJub25lIiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiI+CiAgICAgICAgPHBhdGggY2xhc3M9InN0cm9rZS1saW5lam9pbi1yb3VuZCIgZD0iTTYgMTRIMTAiLz4KICAgICAgICA8cGF0aCBkPSJNOCAxMUg5QzkgOS40NzAwMiAxMiA4LjU0MDAyIDEyIDUuNzYwMDJDMTIuMDIgNC40MDAwMiAxMS4zOSAzLjM2MDAyIDEwLjQzIDIuNjcwMDJDOSAxLjY0MDAyIDcuMDAwMDEgMS42NDAwMiA1LjU3MDAxIDIuNjcwMDJDNC42MTAwMSAzLjM2MDAyIDMuOTggNC40MDAwMiA0IDUuNzYwMDJDNCA4LjU0MDAyIDcuMDAwMDEgOS40NzAwMiA3LjAwMDAxIDExSDhaIi8+CiAgICA8L2c+Cjwvc3ZnPg==\\\");\\n background-color: silver;\\n}\\n\\n.ace_icon_svg.ace_error_fold {\\n -webkit-mask-image: url(\\\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCAxNiIgZmlsbD0ibm9uZSI+CiAgPHBhdGggZD0ibSAxOC45Mjk4NTEsNy44Mjk4MDc2IGMgMC4xNDYzNTMsNi4zMzc0NjA0IC02LjMyMzE0Nyw3Ljc3Nzg0NDQgLTcuNDc3OTEyLDcuNzc3ODQ0NCAtMi4xMDcyNzI2LC0wLjEyODc1IDUuMTE3Njc4LDAuMzU2MjQ5IDUuMDUxNjk4LC03Ljg3MDA2MTggLTAuNjA0NjcyLC04LjAwMzk3MzQ5IC03LjA3NzI3MDYsLTcuNTYzMTE4OSAtNC44NTczLC03LjQzMDM5NTU2IDEuNjA2LC0wLjExNTE0MjI1IDYuODk3NDg1LDEuMjYyNTQ1OTYgNy4yODM1MTQsNy41MjI2MTI5NiB6IiBmaWxsPSJjcmltc29uIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0ibSA4LjExNDc1NjIsMi4wNTI5ODI4IGMgMy4zNDkxNjk4LDAgNi4wNjQxMzI4LDIuNjc2ODYyNyA2LjA2NDEzMjgsNS45Nzg5NTMgMCwzLjMwMjExMjIgLTIuNzE0OTYzLDUuOTc4OTIwMiAtNi4wNjQxMzI4LDUuOTc4OTIwMiAtMy4zNDkxNDczLDAgLTYuMDY0MTc3MiwtMi42NzY4MDggLTYuMDY0MTc3MiwtNS45Nzg5MjAyIDAuMDA1MzksLTMuMjk5ODg2MSAyLjcxNzI2NTYsLTUuOTczNjQwOCA2LjA2NDE3NzIsLTUuOTc4OTUzIHogbSAwLC0xLjczNTgyNzE5IGMgLTQuMzIxNDgzNiwwIC03LjgyNDc0MDM4LDMuNDU0MDE4NDkgLTcuODI0NzQwMzgsNy43MTQ3ODAxOSAwLDQuMjYwNzI4MiAzLjUwMzI1Njc4LDcuNzE0NzQ1MiA3LjgyNDc0MDM4LDcuNzE0NzQ1MiA0LjMyMTQ0OTgsMCA3LjgyNDY5OTgsLTMuNDU0MDE3IDcuODI0Njk5OCwtNy43MTQ3NDUyIDAsLTIuMDQ2MDkxNCAtMC44MjQzOTIsLTQuMDA4MzY3MiAtMi4yOTE3NTYsLTUuNDU1MTc0NiBDIDEyLjE4MDIyNSwxLjEyOTk2NDggMTAuMTkwMDEzLDAuMzE3MTU1NjEgOC4xMTQ3NTYyLDAuMzE3MTU1NjEgWiBNIDYuOTM3NDU2Myw4LjI0MDU5ODUgNC42NzE4Njg1LDEwLjQ4NTg1MiA2LjAwODY4MTQsMTEuODc2NzI4IDguMzE3MDAzNSw5LjYwMDc5MTEgMTAuNjI1MzM3LDExLjg3NjcyOCAxMS45NjIxMzgsMTAuNDg1ODUyIDkuNjk2NTUwOCw4LjI0MDU5ODUgMTEuOTYyMTM4LDYuMDA2ODA2NiAxMC41NzMyNDYsNC42Mzc0MzM1IDguMzE3MDAzNSw2Ljg3MzQyOTcgNi4wNjA3NjA3LDQuNjM3NDMzNSA0LjY3MTg2ODUsNi4wMDY4MDY2IFoiIGZpbGw9ImNyaW1zb24iIHN0cm9rZS13aWR0aD0iMiIvPgo8L3N2Zz4=\\\");\\n background-color: crimson;\\n}\\n.ace_icon_svg.ace_security_fold {\\n -webkit-mask-image: url(\\\"data:image/svg+xml;base64,CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMTcgMTQiIGZpbGw9Im5vbmUiPgogICAgPHBhdGggZD0iTTEwLjAwMDEgMTMuNjk5MkMxMC4wMDAxIDEzLjY5OTIgMTEuOTI0MSAxMy40NzYzIDEzIDEyLjY5OTJDMTQuNDEzOSAxMS42NzgxIDE2IDEwLjUgMTYuMTI1MSA2LjgxMTI2VjIuNTg5ODdDMTYuMTI1MSAyLjU0NzY4IDE2LjEyMjEgMi41MDYxOSAxNi4xMTY0IDIuNDY1NTlWMS43MTQ4NUgxNS4yNDE0TDE1LjIzMDcgMS43MTQ4NEwxNC42MjUxIDEuNjk5MjJWNi44MTEyM0MxNC42MjUxIDguNTEwNjEgMTQuNjI1MSA5LjQ2NDYxIDEyLjc4MjQgMTEuNzIxQzEyLjE1ODYgMTIuNDg0OCAxMC4wMDAxIDEzLjY5OTIgMTAuMDAwMSAxMy42OTkyWiIgZmlsbD0iY3JpbXNvbiIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTcuMzM2MDkgMC4zNjc0NzVDNy4wMzIxNCAwLjE1MjY1MiA2LjYyNTQ4IDAuMTUzNjE0IDYuMzIyNTMgMC4zNjk5OTdMNi4zMDg2OSAwLjM3OTU1NEM2LjI5NTUzIDAuMzg4NTg4IDYuMjczODggMC40MDMyNjYgNi4yNDQxNyAwLjQyMjc4OUM2LjE4NDcxIDAuNDYxODYgNi4wOTMyMSAwLjUyMDE3MSA1Ljk3MzEzIDAuNTkxMzczQzUuNzMyNTEgMC43MzQwNTkgNS4zNzk5IDAuOTI2ODY0IDQuOTQyNzkgMS4xMjAwOUM0LjA2MTQ0IDEuNTA5NyAyLjg3NTQxIDEuODgzNzcgMS41ODk4NCAxLjg4Mzc3SDAuNzE0ODQ0VjIuNzU4NzdWNi45ODAxNUMwLjcxNDg0NCA5LjQ5Mzc0IDIuMjg4NjYgMTEuMTk3MyAzLjcwMjU0IDEyLjIxODVDNC40MTg0NSAxMi43MzU1IDUuMTI4NzQgMTMuMTA1MyA1LjY1NzMzIDEzLjM0NTdDNS45MjI4NCAxMy40NjY0IDYuMTQ1NjYgMTMuNTU1OSA2LjMwNDY1IDEzLjYxNjFDNi4zODQyMyAxMy42NDYyIDYuNDQ4MDUgMTMuNjY5IDYuNDkzNDkgMTMuNjg0OEM2LjUxNjIyIDEzLjY5MjcgNi41MzQzOCAxMy42OTg5IDYuNTQ3NjQgMTMuNzAzM0w2LjU2MzgyIDEzLjcwODdMNi41NjkwOCAxMy43MTA0TDYuNTcwOTkgMTMuNzExTDYuODM5ODQgMTMuNzUzM0w2LjU3MjQyIDEzLjcxMTVDNi43NDYzMyAxMy43NjczIDYuOTMzMzUgMTMuNzY3MyA3LjEwNzI3IDEzLjcxMTVMNy4xMDg3IDEzLjcxMUw3LjExMDYxIDEzLjcxMDRMNy4xMTU4NyAxMy43MDg3TDcuMTMyMDUgMTMuNzAzM0M3LjE0NTMxIDEzLjY5ODkgNy4xNjM0NiAxMy42OTI3IDcuMTg2MTkgMTMuNjg0OEM3LjIzMTY0IDEzLjY2OSA3LjI5NTQ2IDEzLjY0NjIgNy4zNzUwMyAxMy42MTYxQzcuNTM0MDMgMTMuNTU1OSA3Ljc1Njg1IDEzLjQ2NjQgOC4wMjIzNiAxMy4zNDU3QzguNTUwOTUgMTMuMTA1MyA5LjI2MTIzIDEyLjczNTUgOS45NzcxNSAxMi4yMTg1QzExLjM5MSAxMS4xOTczIDEyLjk2NDggOS40OTM3NyAxMi45NjQ4IDYuOTgwMThWMi43NTg4QzEyLjk2NDggMi43MTY2IDEyLjk2MTkgMi42NzUxMSAxMi45NTYxIDIuNjM0NTFWMS44ODM3N0gxMi4wODExQzEyLjA3NzUgMS44ODM3NyAxMi4wNzQgMS44ODM3NyAxMi4wNzA0IDEuODgzNzdDMTAuNzk3OSAxLjg4MDA0IDkuNjE5NjIgMS41MTEwMiA4LjczODk0IDEuMTI0ODZDOC43MzUzNCAxLjEyMzI3IDguNzMxNzQgMS4xMjE2OCA4LjcyODE0IDEuMTIwMDlDOC4yOTEwMyAwLjkyNjg2NCA3LjkzODQyIDAuNzM0MDU5IDcuNjk3NzkgMC41OTEzNzNDNy41Nzc3MiAwLjUyMDE3MSA3LjQ4NjIyIDAuNDYxODYgNy40MjY3NiAwLjQyMjc4OUM3LjM5NzA1IDAuNDAzMjY2IDcuMzc1MzkgMC4zODg1ODggNy4zNjIyNCAwLjM3OTU1NEw3LjM0ODk2IDAuMzcwMzVDNy4zNDg5NiAwLjM3MDM1IDcuMzQ4NDcgMC4zNzAwMiA3LjM0NTYzIDAuMzc0MDU0TDcuMzM3NzkgMC4zNjg2NTlMNy4zMzYwOSAwLjM2NzQ3NVpNOC4wMzQ3MSAyLjcyNjkxQzguODYwNCAzLjA5MDYzIDkuOTYwNjYgMy40NjMwOSAxMS4yMDYxIDMuNTg5MDdWNi45ODAxNUgxMS4yMTQ4QzExLjIxNDggOC42Nzk1MyAxMC4xNjM3IDkuOTI1MDcgOC45NTI1NCAxMC43OTk4QzguMzU1OTUgMTEuMjMwNiA3Ljc1Mzc0IDExLjU0NTQgNy4yOTc5NiAxMS43NTI3QzcuMTE2NzEgMTEuODM1MSA2Ljk2MDYyIDExLjg5OTYgNi44Mzk4NCAxMS45NDY5QzYuNzE5MDYgMTEuODk5NiA2LjU2Mjk3IDExLjgzNTEgNi4zODE3MyAxMS43NTI3QzUuOTI1OTUgMTEuNTQ1NCA1LjMyMzczIDExLjIzMDYgNC43MjcxNSAxMC43OTk4QzMuNTE2MDMgOS45MjUwNyAyLjQ2NDg0IDguNjc5NTUgMi40NjQ4NCA2Ljk4MDE4VjMuNTg5MDlDMy43MTczOCAzLjQ2MjM5IDQuODIzMDggMy4wODYzOSA1LjY1MDMzIDIuNzIwNzFDNi4xNDIyOCAyLjUwMzI0IDYuNTQ0ODUgMi4yODUzNyA2LjgzMjU0IDIuMTE2MjRDNy4xMjE4MSAyLjI4NTM1IDcuNTI3IDIuNTAzNTIgOC4wMjE5NiAyLjcyMTMxQzguMDI2MiAyLjcyMzE3IDguMDMwNDUgMi43MjUwNCA4LjAzNDcxIDIuNzI2OTFaTTUuOTY0ODQgMy40MDE0N1Y3Ljc3NjQ3SDcuNzE0ODRWMy40MDE0N0g1Ljk2NDg0Wk01Ljk2NDg0IDEwLjQwMTVWOC42NTE0N0g3LjcxNDg0VjEwLjQwMTVINS45NjQ4NFoiIGZpbGw9ImNyaW1zb24iIHN0cm9rZS13aWR0aD0iMiIvPgo8L3N2Zz4=\\\");\\n background-color: crimson;\\n}\\n.ace_icon_svg.ace_warning_fold {\\n -webkit-mask-image: url(\\\"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAyMCAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNC43NzY5IDE0LjczMzdMOC42NTE5MiAyLjQ4MzY5QzguMzI5NDYgMS44Mzg3NyA3LjQwOTEzIDEuODM4NzcgNy4wODY2NyAyLjQ4MzY5TDAuOTYxNjY5IDE0LjczMzdDMC42NzA3NzUgMTUuMzE1NSAxLjA5MzgzIDE2IDEuNzQ0MjkgMTZIMTMuOTk0M0MxNC42NDQ4IDE2IDE1LjA2NzggMTUuMzE1NSAxNC43NzY5IDE0LjczMzdaTTMuMTYwMDcgMTQuMjVMNy44NjkyOSA0LjgzMTU2TDEyLjU3ODUgMTQuMjVIMy4xNjAwN1pNOC43NDQyOSAxMS42MjVWMTMuMzc1SDYuOTk0MjlWMTEuNjI1SDguNzQ0MjlaTTYuOTk0MjkgMTAuNzVWNy4yNUg4Ljc0NDI5VjEwLjc1SDYuOTk0MjlaIiBmaWxsPSIjRUM3MjExIi8+CjxwYXRoIGQ9Ik0xMS4xOTkxIDIuOTUyMzhDMTAuODgwOSAyLjMxNDY3IDEwLjM1MzcgMS44MDUyNiA5LjcwNTUgMS41MDlMMTEuMDQxIDEuMDY5NzhDMTEuNjg4MyAwLjk0OTgxNCAxMi4zMzcgMS4yNzI2MyAxMi42MzE3IDEuODYxNDFMMTcuNjEzNiAxMS44MTYxQzE4LjM1MjcgMTMuMjkyOSAxNy41OTM4IDE1LjA4MDQgMTYuMDE4IDE1LjU3NDVDMTYuNDA0NCAxNC40NTA3IDE2LjMyMzEgMTMuMjE4OCAxNS43OTI0IDEyLjE1NTVMMTEuMTk5MSAyLjk1MjM4WiIgZmlsbD0iI0VDNzIxMSIvPgo8L3N2Zz4=\\\");\\n background-color: darkorange;\\n}\\n\\n.ace_scrollbar {\\n contain: strict;\\n position: absolute;\\n right: 0;\\n bottom: 0;\\n z-index: 6;\\n}\\n\\n.ace_scrollbar-inner {\\n position: absolute;\\n cursor: text;\\n left: 0;\\n top: 0;\\n}\\n\\n.ace_scrollbar-v{\\n overflow-x: hidden;\\n overflow-y: scroll;\\n top: 0;\\n}\\n\\n.ace_scrollbar-h {\\n overflow-x: scroll;\\n overflow-y: hidden;\\n left: 0;\\n}\\n\\n.ace_print-margin {\\n position: absolute;\\n height: 100%;\\n}\\n\\n.ace_text-input {\\n position: absolute;\\n z-index: 0;\\n width: 0.5em;\\n height: 1em;\\n opacity: 0;\\n background: transparent;\\n -moz-appearance: none;\\n appearance: none;\\n border: none;\\n resize: none;\\n outline: none;\\n overflow: hidden;\\n font: inherit;\\n padding: 0 1px;\\n margin: 0 -1px;\\n contain: strict;\\n -ms-user-select: text;\\n -moz-user-select: text;\\n -webkit-user-select: text;\\n user-select: text;\\n /*with `pre-line` chrome inserts &nbsp; instead of space*/\\n white-space: pre!important;\\n}\\n.ace_text-input.ace_composition {\\n background: transparent;\\n color: inherit;\\n z-index: 1000;\\n opacity: 1;\\n}\\n.ace_composition_placeholder { color: transparent }\\n.ace_composition_marker { \\n border-bottom: 1px solid;\\n position: absolute;\\n border-radius: 0;\\n margin-top: 1px;\\n}\\n\\n[ace_nocontext=true] {\\n transform: none!important;\\n filter: none!important;\\n clip-path: none!important;\\n mask : none!important;\\n contain: none!important;\\n perspective: none!important;\\n mix-blend-mode: initial!important;\\n z-index: auto;\\n}\\n\\n.ace_layer {\\n z-index: 1;\\n position: absolute;\\n overflow: hidden;\\n /* workaround for chrome bug https://github.com/ajaxorg/ace/issues/2312*/\\n word-wrap: normal;\\n white-space: pre;\\n height: 100%;\\n width: 100%;\\n box-sizing: border-box;\\n /* setting pointer-events: auto; on node under the mouse, which changes\\n during scroll, will break mouse wheel scrolling in Safari */\\n pointer-events: none;\\n}\\n\\n.ace_gutter-layer {\\n position: relative;\\n width: auto;\\n text-align: right;\\n pointer-events: auto;\\n height: 1000000px;\\n contain: style size layout;\\n}\\n\\n.ace_text-layer {\\n font: inherit !important;\\n position: absolute;\\n height: 1000000px;\\n width: 1000000px;\\n contain: style size layout;\\n}\\n\\n.ace_text-layer > .ace_line, .ace_text-layer > .ace_line_group {\\n contain: style size layout;\\n position: absolute;\\n top: 0;\\n left: 0;\\n right: 0;\\n}\\n\\n.ace_hidpi .ace_text-layer,\\n.ace_hidpi .ace_gutter-layer,\\n.ace_hidpi .ace_content,\\n.ace_hidpi .ace_gutter {\\n contain: strict;\\n}\\n.ace_hidpi .ace_text-layer > .ace_line, \\n.ace_hidpi .ace_text-layer > .ace_line_group {\\n contain: strict;\\n}\\n\\n.ace_cjk {\\n display: inline-block;\\n text-align: center;\\n}\\n\\n.ace_cursor-layer {\\n z-index: 4;\\n}\\n\\n.ace_cursor {\\n z-index: 4;\\n position: absolute;\\n box-sizing: border-box;\\n border-left: 2px solid;\\n /* workaround for smooth cursor repaintng whole screen in chrome */\\n transform: translatez(0);\\n}\\n\\n.ace_multiselect .ace_cursor {\\n border-left-width: 1px;\\n}\\n\\n.ace_slim-cursors .ace_cursor {\\n border-left-width: 1px;\\n}\\n\\n.ace_overwrite-cursors .ace_cursor {\\n border-left-width: 0;\\n border-bottom: 1px solid;\\n}\\n\\n.ace_hidden-cursors .ace_cursor {\\n opacity: 0.2;\\n}\\n\\n.ace_hasPlaceholder .ace_hidden-cursors .ace_cursor {\\n opacity: 0;\\n}\\n\\n.ace_smooth-blinking .ace_cursor {\\n transition: opacity 0.18s;\\n}\\n\\n.ace_animate-blinking .ace_cursor {\\n animation-duration: 1000ms;\\n animation-timing-function: step-end;\\n animation-name: blink-ace-animate;\\n animation-iteration-count: infinite;\\n}\\n\\n.ace_animate-blinking.ace_smooth-blinking .ace_cursor {\\n animation-duration: 1000ms;\\n animation-timing-function: ease-in-out;\\n animation-name: blink-ace-animate-smooth;\\n}\\n \\n@keyframes blink-ace-animate {\\n from, to { opacity: 1; }\\n 60% { opacity: 0; }\\n}\\n\\n@keyframes blink-ace-animate-smooth {\\n from, to { opacity: 1; }\\n 45% { opacity: 1; }\\n 60% { opacity: 0; }\\n 85% { opacity: 0; }\\n}\\n\\n.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {\\n position: absolute;\\n z-index: 3;\\n}\\n\\n.ace_marker-layer .ace_selection {\\n position: absolute;\\n z-index: 5;\\n}\\n\\n.ace_marker-layer .ace_bracket {\\n position: absolute;\\n z-index: 6;\\n}\\n\\n.ace_marker-layer .ace_error_bracket {\\n position: absolute;\\n border-bottom: 1px solid #DE5555;\\n border-radius: 0;\\n}\\n\\n.ace_marker-layer .ace_active-line {\\n position: absolute;\\n z-index: 2;\\n}\\n\\n.ace_marker-layer .ace_selected-word {\\n position: absolute;\\n z-index: 4;\\n box-sizing: border-box;\\n}\\n\\n.ace_line .ace_fold {\\n box-sizing: border-box;\\n\\n display: inline-block;\\n height: 11px;\\n margin-top: -2px;\\n vertical-align: middle;\\n\\n background-image:\\n url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\n url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=\\\");\\n background-repeat: no-repeat, repeat-x;\\n background-position: center center, top left;\\n color: transparent;\\n\\n border: 1px solid black;\\n border-radius: 2px;\\n\\n cursor: pointer;\\n pointer-events: auto;\\n}\\n\\n.ace_dark .ace_fold {\\n}\\n\\n.ace_fold:hover{\\n background-image:\\n url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\n url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC\\\");\\n}\\n\\n.ace_tooltip {\\n background-color: #f5f5f5;\\n border: 1px solid gray;\\n border-radius: 1px;\\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\\n color: black;\\n max-width: 100%;\\n padding: 3px 4px;\\n position: fixed;\\n z-index: 999999;\\n box-sizing: border-box;\\n cursor: default;\\n white-space: pre-wrap;\\n word-wrap: break-word;\\n line-height: normal;\\n font-style: normal;\\n font-weight: normal;\\n letter-spacing: normal;\\n pointer-events: none;\\n overflow: auto;\\n max-width: min(60em, 66vw);\\n overscroll-behavior: contain;\\n}\\n.ace_tooltip pre {\\n white-space: pre-wrap;\\n}\\n\\n.ace_tooltip.ace_dark {\\n background-color: #636363;\\n color: #fff;\\n}\\n\\n.ace_tooltip:focus {\\n outline: 1px solid #5E9ED6;\\n}\\n\\n.ace_icon {\\n display: inline-block;\\n width: 18px;\\n vertical-align: top;\\n}\\n\\n.ace_icon_svg {\\n display: inline-block;\\n width: 12px;\\n vertical-align: top;\\n -webkit-mask-repeat: no-repeat;\\n -webkit-mask-size: 12px;\\n -webkit-mask-position: center;\\n}\\n\\n.ace_folding-enabled > .ace_gutter-cell, .ace_folding-enabled > .ace_gutter-cell_svg-icons {\\n padding-right: 13px;\\n}\\n\\n.ace_fold-widget {\\n box-sizing: border-box;\\n\\n margin: 0 -12px 0 1px;\\n display: none;\\n width: 11px;\\n vertical-align: top;\\n\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==\\\");\\n background-repeat: no-repeat;\\n background-position: center;\\n\\n border-radius: 3px;\\n \\n border: 1px solid transparent;\\n cursor: pointer;\\n}\\n\\n.ace_folding-enabled .ace_fold-widget {\\n display: inline-block; \\n}\\n\\n.ace_fold-widget.ace_end {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==\\\");\\n}\\n\\n.ace_fold-widget.ace_closed {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==\\\");\\n}\\n\\n.ace_fold-widget:hover {\\n border: 1px solid rgba(0, 0, 0, 0.3);\\n background-color: rgba(255, 255, 255, 0.2);\\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\\n}\\n\\n.ace_fold-widget:active {\\n border: 1px solid rgba(0, 0, 0, 0.4);\\n background-color: rgba(0, 0, 0, 0.05);\\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\\n}\\n/**\\n * Dark version for fold widgets\\n */\\n.ace_dark .ace_fold-widget {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC\\\");\\n}\\n.ace_dark .ace_fold-widget.ace_end {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==\\\");\\n}\\n.ace_dark .ace_fold-widget.ace_closed {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==\\\");\\n}\\n.ace_dark .ace_fold-widget:hover {\\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\n background-color: rgba(255, 255, 255, 0.1);\\n}\\n.ace_dark .ace_fold-widget:active {\\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\n}\\n\\n.ace_inline_button {\\n border: 1px solid lightgray;\\n display: inline-block;\\n margin: -1px 8px;\\n padding: 0 5px;\\n pointer-events: auto;\\n cursor: pointer;\\n}\\n.ace_inline_button:hover {\\n border-color: gray;\\n background: rgba(200,200,200,0.2);\\n display: inline-block;\\n pointer-events: auto;\\n}\\n\\n.ace_fold-widget.ace_invalid {\\n background-color: #FFB4B4;\\n border-color: #DE5555;\\n}\\n\\n.ace_fade-fold-widgets .ace_fold-widget {\\n transition: opacity 0.4s ease 0.05s;\\n opacity: 0;\\n}\\n\\n.ace_fade-fold-widgets:hover .ace_fold-widget {\\n transition: opacity 0.05s ease 0.05s;\\n opacity:1;\\n}\\n\\n.ace_underline {\\n text-decoration: underline;\\n}\\n\\n.ace_bold {\\n font-weight: bold;\\n}\\n\\n.ace_nobold .ace_bold {\\n font-weight: normal;\\n}\\n\\n.ace_italic {\\n font-style: italic;\\n}\\n\\n\\n.ace_error-marker {\\n background-color: rgba(255, 0, 0,0.2);\\n position: absolute;\\n z-index: 9;\\n}\\n\\n.ace_highlight-marker {\\n background-color: rgba(255, 255, 0,0.2);\\n position: absolute;\\n z-index: 8;\\n}\\n\\n.ace_mobile-menu {\\n position: absolute;\\n line-height: 1.5;\\n border-radius: 4px;\\n -ms-user-select: none;\\n -moz-user-select: none;\\n -webkit-user-select: none;\\n user-select: none;\\n background: white;\\n box-shadow: 1px 3px 2px grey;\\n border: 1px solid #dcdcdc;\\n color: black;\\n}\\n.ace_dark > .ace_mobile-menu {\\n background: #333;\\n color: #ccc;\\n box-shadow: 1px 3px 2px grey;\\n border: 1px solid #444;\\n\\n}\\n.ace_mobile-button {\\n padding: 2px;\\n cursor: pointer;\\n overflow: hidden;\\n}\\n.ace_mobile-button:hover {\\n background-color: #eee;\\n opacity:1;\\n}\\n.ace_mobile-button:active {\\n background-color: #ddd;\\n}\\n\\n.ace_placeholder {\\n position: relative;\\n font-family: arial;\\n transform: scale(0.9);\\n transform-origin: left;\\n white-space: pre;\\n opacity: 0.7;\\n margin: 0 10px;\\n z-index: 1;\\n}\\n\\n.ace_ghost_text {\\n opacity: 0.5;\\n font-style: italic;\\n}\\n\\n.ace_ghost_text_container > div {\\n white-space: pre;\\n}\\n\\n.ghost_text_line_wrapped::after {\\n content: \\\"\\u21A9\\\";\\n position: absolute;\\n}\\n\\n.ace_lineWidgetContainer.ace_ghost_text {\\n margin: 0px 4px\\n}\\n\\n.ace_screenreader-only {\\n position:absolute;\\n left:-10000px;\\n top:auto;\\n width:1px;\\n height:1px;\\n overflow:hidden;\\n}\\n\\n.ace_hidden_token {\\n display: none;\\n}\";\n\n});\n\nace.define(\"ace/layer/decorators\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar oop = require(\"../lib/oop\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar Decorator = /** @class */ (function () {\n function Decorator(parent, renderer) {\n this.canvas = dom.createElement(\"canvas\");\n this.renderer = renderer;\n this.pixelRatio = 1;\n this.maxHeight = renderer.layerConfig.maxHeight;\n this.lineHeight = renderer.layerConfig.lineHeight;\n this.canvasHeight = parent.parent.scrollHeight;\n this.heightRatio = this.canvasHeight / this.maxHeight;\n this.canvasWidth = parent.width;\n this.minDecorationHeight = (2 * this.pixelRatio) | 0;\n this.halfMinDecorationHeight = (this.minDecorationHeight / 2) | 0;\n this.canvas.width = this.canvasWidth;\n this.canvas.height = this.canvasHeight;\n this.canvas.style.top = 0 + \"px\";\n this.canvas.style.right = 0 + \"px\";\n this.canvas.style.zIndex = 7 + \"px\";\n this.canvas.style.position = \"absolute\";\n this.colors = {};\n this.colors.dark = {\n \"error\": \"rgba(255, 18, 18, 1)\",\n \"warning\": \"rgba(18, 136, 18, 1)\",\n \"info\": \"rgba(18, 18, 136, 1)\"\n };\n this.colors.light = {\n \"error\": \"rgb(255,51,51)\",\n \"warning\": \"rgb(32,133,72)\",\n \"info\": \"rgb(35,68,138)\"\n };\n parent.element.appendChild(this.canvas);\n }\n Decorator.prototype.$updateDecorators = function (config) {\n var colors = (this.renderer.theme.isDark === true) ? this.colors.dark : this.colors.light;\n if (config) {\n this.maxHeight = config.maxHeight;\n this.lineHeight = config.lineHeight;\n this.canvasHeight = config.height;\n var allLineHeight = (config.lastRow + 1) * this.lineHeight;\n if (allLineHeight < this.canvasHeight) {\n this.heightRatio = 1;\n }\n else {\n this.heightRatio = this.canvasHeight / this.maxHeight;\n }\n }\n var ctx = this.canvas.getContext(\"2d\");\n function compare(a, b) {\n if (a.priority < b.priority)\n return -1;\n if (a.priority > b.priority)\n return 1;\n return 0;\n }\n var annotations = this.renderer.session.$annotations;\n ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n if (annotations) {\n var priorities = {\n \"info\": 1,\n \"warning\": 2,\n \"error\": 3\n };\n annotations.forEach(function (item) {\n item.priority = priorities[item.type] || null;\n });\n annotations = annotations.sort(compare);\n var foldData = this.renderer.session.$foldData;\n for (var i = 0; i < annotations.length; i++) {\n var row = annotations[i].row;\n var compensateFold = this.compensateFoldRows(row, foldData);\n var currentY = Math.round((row - compensateFold) * this.lineHeight * this.heightRatio);\n var y1 = Math.round(((row - compensateFold) * this.lineHeight * this.heightRatio));\n var y2 = Math.round((((row - compensateFold) * this.lineHeight + this.lineHeight) * this.heightRatio));\n var height = y2 - y1;\n if (height < this.minDecorationHeight) {\n var yCenter = ((y1 + y2) / 2) | 0;\n if (yCenter < this.halfMinDecorationHeight) {\n yCenter = this.halfMinDecorationHeight;\n }\n else if (yCenter + this.halfMinDecorationHeight > this.canvasHeight) {\n yCenter = this.canvasHeight - this.halfMinDecorationHeight;\n }\n y1 = Math.round(yCenter - this.halfMinDecorationHeight);\n y2 = Math.round(yCenter + this.halfMinDecorationHeight);\n }\n ctx.fillStyle = colors[annotations[i].type] || null;\n ctx.fillRect(0, currentY, this.canvasWidth, y2 - y1);\n }\n }\n var cursor = this.renderer.session.selection.getCursor();\n if (cursor) {\n var compensateFold = this.compensateFoldRows(cursor.row, foldData);\n var currentY = Math.round((cursor.row - compensateFold) * this.lineHeight * this.heightRatio);\n ctx.fillStyle = \"rgba(0, 0, 0, 0.5)\";\n ctx.fillRect(0, currentY, this.canvasWidth, 2);\n }\n };\n Decorator.prototype.compensateFoldRows = function (row, foldData) {\n var compensateFold = 0;\n if (foldData && foldData.length > 0) {\n for (var j = 0; j < foldData.length; j++) {\n if (row > foldData[j].start.row && row < foldData[j].end.row) {\n compensateFold += row - foldData[j].start.row;\n }\n else if (row >= foldData[j].end.row) {\n compensateFold += foldData[j].end.row - foldData[j].start.row;\n }\n }\n }\n return compensateFold;\n };\n return Decorator;\n}());\noop.implement(Decorator.prototype, EventEmitter);\nexports.Decorator = Decorator;\n\n});\n\nace.define(\"ace/virtual_renderer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/config\",\"ace/layer/gutter\",\"ace/layer/marker\",\"ace/layer/text\",\"ace/layer/cursor\",\"ace/scrollbar\",\"ace/scrollbar\",\"ace/scrollbar_custom\",\"ace/scrollbar_custom\",\"ace/renderloop\",\"ace/layer/font_metrics\",\"ace/lib/event_emitter\",\"ace/css/editor-css\",\"ace/layer/decorators\",\"ace/lib/useragent\",\"ace/layer/text_util\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar lang = require(\"./lib/lang\");\nvar config = require(\"./config\");\nvar GutterLayer = require(\"./layer/gutter\").Gutter;\nvar MarkerLayer = require(\"./layer/marker\").Marker;\nvar TextLayer = require(\"./layer/text\").Text;\nvar CursorLayer = require(\"./layer/cursor\").Cursor;\nvar HScrollBar = require(\"./scrollbar\").HScrollBar;\nvar VScrollBar = require(\"./scrollbar\").VScrollBar;\nvar HScrollBarCustom = require(\"./scrollbar_custom\").HScrollBar;\nvar VScrollBarCustom = require(\"./scrollbar_custom\").VScrollBar;\nvar RenderLoop = require(\"./renderloop\").RenderLoop;\nvar FontMetrics = require(\"./layer/font_metrics\").FontMetrics;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar editorCss = require(\"./css/editor-css\");\nvar Decorator = require(\"./layer/decorators\").Decorator;\nvar useragent = require(\"./lib/useragent\");\nvar isTextToken = require(\"./layer/text_util\").isTextToken;\ndom.importCssString(editorCss, \"ace_editor.css\", false);\nvar VirtualRenderer = /** @class */ (function () {\n function VirtualRenderer(container, theme) {\n var _self = this;\n this.container = container || dom.createElement(\"div\");\n dom.addCssClass(this.container, \"ace_editor\");\n if (dom.HI_DPI)\n dom.addCssClass(this.container, \"ace_hidpi\");\n this.setTheme(theme);\n if (config.get(\"useStrictCSP\") == null)\n config.set(\"useStrictCSP\", false);\n this.$gutter = dom.createElement(\"div\");\n this.$gutter.className = \"ace_gutter\";\n this.container.appendChild(this.$gutter);\n this.$gutter.setAttribute(\"aria-hidden\", \"true\");\n this.scroller = dom.createElement(\"div\");\n this.scroller.className = \"ace_scroller\";\n this.container.appendChild(this.scroller);\n this.content = dom.createElement(\"div\");\n this.content.className = \"ace_content\";\n this.scroller.appendChild(this.content);\n this.$gutterLayer = new GutterLayer(this.$gutter);\n this.$gutterLayer.on(\"changeGutterWidth\", this.onGutterResize.bind(this));\n this.$markerBack = new MarkerLayer(this.content);\n var textLayer = this.$textLayer = new TextLayer(this.content);\n this.canvas = textLayer.element;\n this.$markerFront = new MarkerLayer(this.content);\n this.$cursorLayer = new CursorLayer(this.content);\n this.$horizScroll = false;\n this.$vScroll = false;\n this.scrollBar =\n this.scrollBarV = new VScrollBar(this.container, this);\n this.scrollBarH = new HScrollBar(this.container, this);\n this.scrollBarV.on(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollTop(e.data - _self.scrollMargin.top);\n });\n this.scrollBarH.on(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\n });\n this.scrollTop = 0;\n this.scrollLeft = 0;\n this.cursorPos = {\n row: 0,\n column: 0\n };\n this.$fontMetrics = new FontMetrics(this.container);\n this.$textLayer.$setFontMetrics(this.$fontMetrics);\n this.$textLayer.on(\"changeCharacterSize\", function (e) {\n _self.updateCharacterSize();\n _self.onResize(true, _self.gutterWidth, _self.$size.width, _self.$size.height);\n _self._signal(\"changeCharacterSize\", e);\n });\n this.$size = {\n width: 0,\n height: 0,\n scrollerHeight: 0,\n scrollerWidth: 0,\n $dirty: true\n };\n this.layerConfig = {\n width: 1,\n padding: 0,\n firstRow: 0,\n firstRowScreen: 0,\n lastRow: 0,\n lineHeight: 0,\n characterWidth: 0,\n minHeight: 1,\n maxHeight: 1,\n offset: 0,\n height: 1,\n gutterOffset: 1\n };\n this.scrollMargin = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n v: 0,\n h: 0\n };\n this.margin = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n v: 0,\n h: 0\n };\n this.$keepTextAreaAtCursor = !useragent.isIOS;\n this.$loop = new RenderLoop(this.$renderChanges.bind(this), this.container.ownerDocument.defaultView);\n this.$loop.schedule(this.CHANGE_FULL);\n this.updateCharacterSize();\n this.setPadding(4);\n this.$addResizeObserver();\n config.resetOptions(this);\n config._signal(\"renderer\", this);\n }\n VirtualRenderer.prototype.updateCharacterSize = function () {\n if (this.$textLayer.allowBoldFonts != this.$allowBoldFonts) {\n this.$allowBoldFonts = this.$textLayer.allowBoldFonts;\n this.setStyle(\"ace_nobold\", !this.$allowBoldFonts);\n }\n this.layerConfig.characterWidth =\n this.characterWidth = this.$textLayer.getCharacterWidth();\n this.layerConfig.lineHeight =\n this.lineHeight = this.$textLayer.getLineHeight();\n this.$updatePrintMargin();\n dom.setStyle(this.scroller.style, \"line-height\", this.lineHeight + \"px\");\n };\n VirtualRenderer.prototype.setSession = function (session) {\n if (this.session)\n this.session.doc.off(\"changeNewLineMode\", this.onChangeNewLineMode);\n this.session = session;\n if (session && this.scrollMargin.top && session.getScrollTop() <= 0)\n session.setScrollTop(-this.scrollMargin.top);\n this.$cursorLayer.setSession(session);\n this.$markerBack.setSession(session);\n this.$markerFront.setSession(session);\n this.$gutterLayer.setSession(session);\n this.$textLayer.setSession(session);\n if (!session)\n return;\n this.$loop.schedule(this.CHANGE_FULL);\n this.session.$setFontMetrics(this.$fontMetrics);\n this.scrollBarH.scrollLeft = this.scrollBarV.scrollTop = null;\n this.onChangeNewLineMode = this.onChangeNewLineMode.bind(this);\n this.onChangeNewLineMode();\n this.session.doc.on(\"changeNewLineMode\", this.onChangeNewLineMode);\n };\n VirtualRenderer.prototype.updateLines = function (firstRow, lastRow, force) {\n if (lastRow === undefined)\n lastRow = Infinity;\n if (!this.$changedLines) {\n this.$changedLines = {\n firstRow: firstRow,\n lastRow: lastRow\n };\n }\n else {\n if (this.$changedLines.firstRow > firstRow)\n this.$changedLines.firstRow = firstRow;\n if (this.$changedLines.lastRow < lastRow)\n this.$changedLines.lastRow = lastRow;\n }\n if (this.$changedLines.lastRow < this.layerConfig.firstRow) {\n if (force)\n this.$changedLines.lastRow = this.layerConfig.lastRow;\n else\n return;\n }\n if (this.$changedLines.firstRow > this.layerConfig.lastRow)\n return;\n this.$loop.schedule(this.CHANGE_LINES);\n };\n VirtualRenderer.prototype.onChangeNewLineMode = function () {\n this.$loop.schedule(this.CHANGE_TEXT);\n this.$textLayer.$updateEolChar();\n this.session.$bidiHandler.setEolChar(this.$textLayer.EOL_CHAR);\n };\n VirtualRenderer.prototype.onChangeTabSize = function () {\n this.$loop.schedule(this.CHANGE_TEXT | this.CHANGE_MARKER);\n this.$textLayer.onChangeTabSize();\n };\n VirtualRenderer.prototype.updateText = function () {\n this.$loop.schedule(this.CHANGE_TEXT);\n };\n VirtualRenderer.prototype.updateFull = function (force) {\n if (force)\n this.$renderChanges(this.CHANGE_FULL, true);\n else\n this.$loop.schedule(this.CHANGE_FULL);\n };\n VirtualRenderer.prototype.updateFontSize = function () {\n this.$textLayer.checkForSizeChanges();\n };\n VirtualRenderer.prototype.$updateSizeAsync = function () {\n if (this.$loop.pending)\n this.$size.$dirty = true;\n else\n this.onResize();\n };\n VirtualRenderer.prototype.onResize = function (force, gutterWidth, width, height) {\n if (this.resizing > 2)\n return;\n else if (this.resizing > 0)\n this.resizing++;\n else\n this.resizing = force ? 1 : 0;\n var el = this.container;\n if (!height)\n height = el.clientHeight || el.scrollHeight;\n if (!height && this.$maxLines && this.lineHeight > 1) {\n if (!el.style.height || el.style.height == \"0px\") {\n el.style.height = \"1px\";\n height = el.clientHeight || el.scrollHeight;\n }\n }\n if (!width)\n width = el.clientWidth || el.scrollWidth;\n var changes = this.$updateCachedSize(force, gutterWidth, width, height);\n if (this.$resizeTimer)\n this.$resizeTimer.cancel();\n if (!this.$size.scrollerHeight || (!width && !height))\n return this.resizing = 0;\n if (force)\n this.$gutterLayer.$padding = null;\n if (force)\n this.$renderChanges(changes | this.$changes, true);\n else\n this.$loop.schedule(changes | this.$changes);\n if (this.resizing)\n this.resizing = 0;\n this.scrollBarH.scrollLeft = this.scrollBarV.scrollTop = null;\n if (this.$customScrollbar) {\n this.$updateCustomScrollbar(true);\n }\n };\n VirtualRenderer.prototype.$updateCachedSize = function (force, gutterWidth, width, height) {\n height -= (this.$extraHeight || 0);\n var changes = 0;\n var size = this.$size;\n var oldSize = {\n width: size.width,\n height: size.height,\n scrollerHeight: size.scrollerHeight,\n scrollerWidth: size.scrollerWidth\n };\n if (height && (force || size.height != height)) {\n size.height = height;\n changes |= this.CHANGE_SIZE;\n size.scrollerHeight = size.height;\n if (this.$horizScroll)\n size.scrollerHeight -= this.scrollBarH.getHeight();\n this.scrollBarV.setHeight(size.scrollerHeight);\n this.scrollBarV.element.style.bottom = this.scrollBarH.getHeight() + \"px\";\n changes = changes | this.CHANGE_SCROLL;\n }\n if (width && (force || size.width != width)) {\n changes |= this.CHANGE_SIZE;\n size.width = width;\n if (gutterWidth == null)\n gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0;\n this.gutterWidth = gutterWidth;\n dom.setStyle(this.scrollBarH.element.style, \"left\", gutterWidth + \"px\");\n dom.setStyle(this.scroller.style, \"left\", gutterWidth + this.margin.left + \"px\");\n size.scrollerWidth = Math.max(0, width - gutterWidth - this.scrollBarV.getWidth() - this.margin.h);\n dom.setStyle(this.$gutter.style, \"left\", this.margin.left + \"px\");\n var right = this.scrollBarV.getWidth() + \"px\";\n dom.setStyle(this.scrollBarH.element.style, \"right\", right);\n dom.setStyle(this.scroller.style, \"right\", right);\n dom.setStyle(this.scroller.style, \"bottom\", this.scrollBarH.getHeight());\n this.scrollBarH.setWidth(size.scrollerWidth);\n if (this.session && this.session.getUseWrapMode() && this.adjustWrapLimit() || force) {\n changes |= this.CHANGE_FULL;\n }\n }\n size.$dirty = !width || !height;\n if (changes)\n this._signal(\"resize\", oldSize);\n return changes;\n };\n VirtualRenderer.prototype.onGutterResize = function (width) {\n var gutterWidth = this.$showGutter ? width : 0;\n if (gutterWidth != this.gutterWidth)\n this.$changes |= this.$updateCachedSize(true, gutterWidth, this.$size.width, this.$size.height);\n if (this.session.getUseWrapMode() && this.adjustWrapLimit()) {\n this.$loop.schedule(this.CHANGE_FULL);\n }\n else if (this.$size.$dirty) {\n this.$loop.schedule(this.CHANGE_FULL);\n }\n else {\n this.$computeLayerConfig();\n }\n };\n VirtualRenderer.prototype.adjustWrapLimit = function () {\n var availableWidth = this.$size.scrollerWidth - this.$padding * 2;\n var limit = Math.floor(availableWidth / this.characterWidth);\n return this.session.adjustWrapLimit(limit, this.$showPrintMargin && this.$printMarginColumn);\n };\n VirtualRenderer.prototype.setAnimatedScroll = function (shouldAnimate) {\n this.setOption(\"animatedScroll\", shouldAnimate);\n };\n VirtualRenderer.prototype.getAnimatedScroll = function () {\n return this.$animatedScroll;\n };\n VirtualRenderer.prototype.setShowInvisibles = function (showInvisibles) {\n this.setOption(\"showInvisibles\", showInvisibles);\n this.session.$bidiHandler.setShowInvisibles(showInvisibles);\n };\n VirtualRenderer.prototype.getShowInvisibles = function () {\n return this.getOption(\"showInvisibles\");\n };\n VirtualRenderer.prototype.getDisplayIndentGuides = function () {\n return this.getOption(\"displayIndentGuides\");\n };\n VirtualRenderer.prototype.setDisplayIndentGuides = function (display) {\n this.setOption(\"displayIndentGuides\", display);\n };\n VirtualRenderer.prototype.getHighlightIndentGuides = function () {\n return this.getOption(\"highlightIndentGuides\");\n };\n VirtualRenderer.prototype.setHighlightIndentGuides = function (highlight) {\n this.setOption(\"highlightIndentGuides\", highlight);\n };\n VirtualRenderer.prototype.setShowPrintMargin = function (showPrintMargin) {\n this.setOption(\"showPrintMargin\", showPrintMargin);\n };\n VirtualRenderer.prototype.getShowPrintMargin = function () {\n return this.getOption(\"showPrintMargin\");\n };\n VirtualRenderer.prototype.setPrintMarginColumn = function (printMarginColumn) {\n this.setOption(\"printMarginColumn\", printMarginColumn);\n };\n VirtualRenderer.prototype.getPrintMarginColumn = function () {\n return this.getOption(\"printMarginColumn\");\n };\n VirtualRenderer.prototype.getShowGutter = function () {\n return this.getOption(\"showGutter\");\n };\n VirtualRenderer.prototype.setShowGutter = function (show) {\n return this.setOption(\"showGutter\", show);\n };\n VirtualRenderer.prototype.getFadeFoldWidgets = function () {\n return this.getOption(\"fadeFoldWidgets\");\n };\n VirtualRenderer.prototype.setFadeFoldWidgets = function (show) {\n this.setOption(\"fadeFoldWidgets\", show);\n };\n VirtualRenderer.prototype.setHighlightGutterLine = function (shouldHighlight) {\n this.setOption(\"highlightGutterLine\", shouldHighlight);\n };\n VirtualRenderer.prototype.getHighlightGutterLine = function () {\n return this.getOption(\"highlightGutterLine\");\n };\n VirtualRenderer.prototype.$updatePrintMargin = function () {\n if (!this.$showPrintMargin && !this.$printMarginEl)\n return;\n if (!this.$printMarginEl) {\n var containerEl = dom.createElement(\"div\");\n containerEl.className = \"ace_layer ace_print-margin-layer\";\n this.$printMarginEl = dom.createElement(\"div\");\n this.$printMarginEl.className = \"ace_print-margin\";\n containerEl.appendChild(this.$printMarginEl);\n this.content.insertBefore(containerEl, this.content.firstChild);\n }\n var style = this.$printMarginEl.style;\n style.left = Math.round(this.characterWidth * this.$printMarginColumn + this.$padding) + \"px\";\n style.visibility = this.$showPrintMargin ? \"visible\" : \"hidden\";\n if (this.session && this.session.$wrap == -1)\n this.adjustWrapLimit();\n };\n VirtualRenderer.prototype.getContainerElement = function () {\n return this.container;\n };\n VirtualRenderer.prototype.getMouseEventTarget = function () {\n return this.scroller;\n };\n VirtualRenderer.prototype.getTextAreaContainer = function () {\n return this.container;\n };\n VirtualRenderer.prototype.$moveTextAreaToCursor = function () {\n if (this.$isMousePressed)\n return;\n var style = this.textarea.style;\n var composition = this.$composition;\n if (!this.$keepTextAreaAtCursor && !composition) {\n dom.translate(this.textarea, -100, 0);\n return;\n }\n var pixelPos = this.$cursorLayer.$pixelPos;\n if (!pixelPos)\n return;\n if (composition && composition.markerRange)\n pixelPos = this.$cursorLayer.getPixelPosition(composition.markerRange.start, true);\n var config = this.layerConfig;\n var posTop = pixelPos.top;\n var posLeft = pixelPos.left;\n posTop -= config.offset;\n var h = composition && composition.useTextareaForIME || useragent.isMobile ? this.lineHeight : 1;\n if (posTop < 0 || posTop > config.height - h) {\n dom.translate(this.textarea, 0, 0);\n return;\n }\n var w = 1;\n var maxTop = this.$size.height - h;\n if (!composition) {\n posTop += this.lineHeight;\n }\n else {\n if (composition.useTextareaForIME) {\n var val = this.textarea.value;\n w = this.characterWidth * (this.session.$getStringScreenWidth(val)[0]);\n }\n else {\n posTop += this.lineHeight + 2;\n }\n }\n posLeft -= this.scrollLeft;\n if (posLeft > this.$size.scrollerWidth - w)\n posLeft = this.$size.scrollerWidth - w;\n posLeft += this.gutterWidth + this.margin.left;\n dom.setStyle(style, \"height\", h + \"px\");\n dom.setStyle(style, \"width\", w + \"px\");\n dom.translate(this.textarea, Math.min(posLeft, this.$size.scrollerWidth - w), Math.min(posTop, maxTop));\n };\n VirtualRenderer.prototype.getFirstVisibleRow = function () {\n return this.layerConfig.firstRow;\n };\n VirtualRenderer.prototype.getFirstFullyVisibleRow = function () {\n return this.layerConfig.firstRow + (this.layerConfig.offset === 0 ? 0 : 1);\n };\n VirtualRenderer.prototype.getLastFullyVisibleRow = function () {\n var config = this.layerConfig;\n var lastRow = config.lastRow;\n var top = this.session.documentToScreenRow(lastRow, 0) * config.lineHeight;\n if (top - this.session.getScrollTop() > config.height - config.lineHeight)\n return lastRow - 1;\n return lastRow;\n };\n VirtualRenderer.prototype.getLastVisibleRow = function () {\n return this.layerConfig.lastRow;\n };\n VirtualRenderer.prototype.setPadding = function (padding) {\n this.$padding = padding;\n this.$textLayer.setPadding(padding);\n this.$cursorLayer.setPadding(padding);\n this.$markerFront.setPadding(padding);\n this.$markerBack.setPadding(padding);\n this.$loop.schedule(this.CHANGE_FULL);\n this.$updatePrintMargin();\n };\n VirtualRenderer.prototype.setScrollMargin = function (top, bottom, left, right) {\n var sm = this.scrollMargin;\n sm.top = top | 0;\n sm.bottom = bottom | 0;\n sm.right = right | 0;\n sm.left = left | 0;\n sm.v = sm.top + sm.bottom;\n sm.h = sm.left + sm.right;\n if (sm.top && this.scrollTop <= 0 && this.session)\n this.session.setScrollTop(-sm.top);\n this.updateFull();\n };\n VirtualRenderer.prototype.setMargin = function (top, bottom, left, right) {\n var sm = this.margin;\n sm.top = top | 0;\n sm.bottom = bottom | 0;\n sm.right = right | 0;\n sm.left = left | 0;\n sm.v = sm.top + sm.bottom;\n sm.h = sm.left + sm.right;\n this.$updateCachedSize(true, this.gutterWidth, this.$size.width, this.$size.height);\n this.updateFull();\n };\n VirtualRenderer.prototype.getHScrollBarAlwaysVisible = function () {\n return this.$hScrollBarAlwaysVisible;\n };\n VirtualRenderer.prototype.setHScrollBarAlwaysVisible = function (alwaysVisible) {\n this.setOption(\"hScrollBarAlwaysVisible\", alwaysVisible);\n };\n VirtualRenderer.prototype.getVScrollBarAlwaysVisible = function () {\n return this.$vScrollBarAlwaysVisible;\n };\n VirtualRenderer.prototype.setVScrollBarAlwaysVisible = function (alwaysVisible) {\n this.setOption(\"vScrollBarAlwaysVisible\", alwaysVisible);\n };\n VirtualRenderer.prototype.$updateScrollBarV = function () {\n var scrollHeight = this.layerConfig.maxHeight;\n var scrollerHeight = this.$size.scrollerHeight;\n if (!this.$maxLines && this.$scrollPastEnd) {\n scrollHeight -= (scrollerHeight - this.lineHeight) * this.$scrollPastEnd;\n if (this.scrollTop > scrollHeight - scrollerHeight) {\n scrollHeight = this.scrollTop + scrollerHeight;\n this.scrollBarV.scrollTop = null;\n }\n }\n this.scrollBarV.setScrollHeight(scrollHeight + this.scrollMargin.v);\n this.scrollBarV.setScrollTop(this.scrollTop + this.scrollMargin.top);\n };\n VirtualRenderer.prototype.$updateScrollBarH = function () {\n this.scrollBarH.setScrollWidth(this.layerConfig.width + 2 * this.$padding + this.scrollMargin.h);\n this.scrollBarH.setScrollLeft(this.scrollLeft + this.scrollMargin.left);\n };\n VirtualRenderer.prototype.freeze = function () {\n this.$frozen = true;\n };\n VirtualRenderer.prototype.unfreeze = function () {\n this.$frozen = false;\n };\n VirtualRenderer.prototype.$renderChanges = function (changes, force) {\n if (this.$changes) {\n changes |= this.$changes;\n this.$changes = 0;\n }\n if ((!this.session || !this.container.offsetWidth || this.$frozen) || (!changes && !force)) {\n this.$changes |= changes;\n return;\n }\n if (this.$size.$dirty) {\n this.$changes |= changes;\n return this.onResize(true);\n }\n if (!this.lineHeight) {\n this.$textLayer.checkForSizeChanges();\n }\n this._signal(\"beforeRender\", changes);\n if (this.session && this.session.$bidiHandler)\n this.session.$bidiHandler.updateCharacterWidths(this.$fontMetrics);\n var config = this.layerConfig;\n if (changes & this.CHANGE_FULL ||\n changes & this.CHANGE_SIZE ||\n changes & this.CHANGE_TEXT ||\n changes & this.CHANGE_LINES ||\n changes & this.CHANGE_SCROLL ||\n changes & this.CHANGE_H_SCROLL) {\n changes |= this.$computeLayerConfig() | this.$loop.clear();\n if (config.firstRow != this.layerConfig.firstRow && config.firstRowScreen == this.layerConfig.firstRowScreen) {\n var st = this.scrollTop + (config.firstRow - Math.max(this.layerConfig.firstRow, 0)) * this.lineHeight;\n if (st > 0) {\n this.scrollTop = st;\n changes = changes | this.CHANGE_SCROLL;\n changes |= this.$computeLayerConfig() | this.$loop.clear();\n }\n }\n config = this.layerConfig;\n this.$updateScrollBarV();\n if (changes & this.CHANGE_H_SCROLL)\n this.$updateScrollBarH();\n dom.translate(this.content, -this.scrollLeft, -config.offset);\n var width = config.width + 2 * this.$padding + \"px\";\n var height = config.minHeight + \"px\";\n dom.setStyle(this.content.style, \"width\", width);\n dom.setStyle(this.content.style, \"height\", height);\n }\n if (changes & this.CHANGE_H_SCROLL) {\n dom.translate(this.content, -this.scrollLeft, -config.offset);\n this.scroller.className = this.scrollLeft <= 0 ? \"ace_scroller \" : \"ace_scroller ace_scroll-left \";\n if (this.enableKeyboardAccessibility)\n this.scroller.className += this.keyboardFocusClassName;\n }\n if (changes & this.CHANGE_FULL) {\n this.$changedLines = null;\n this.$textLayer.update(config);\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n this.$markerBack.update(config);\n this.$markerFront.update(config);\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n this._signal(\"afterRender\", changes);\n return;\n }\n if (changes & this.CHANGE_SCROLL) {\n this.$changedLines = null;\n if (changes & this.CHANGE_TEXT || changes & this.CHANGE_LINES)\n this.$textLayer.update(config);\n else\n this.$textLayer.scrollLines(config);\n if (this.$showGutter) {\n if (changes & this.CHANGE_GUTTER || changes & this.CHANGE_LINES)\n this.$gutterLayer.update(config);\n else\n this.$gutterLayer.scrollLines(config);\n }\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n this.$markerBack.update(config);\n this.$markerFront.update(config);\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n this._signal(\"afterRender\", changes);\n return;\n }\n if (changes & this.CHANGE_TEXT) {\n this.$changedLines = null;\n this.$textLayer.update(config);\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n }\n else if (changes & this.CHANGE_LINES) {\n if (this.$updateLines() || (changes & this.CHANGE_GUTTER) && this.$showGutter)\n this.$gutterLayer.update(config);\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n }\n else if (changes & this.CHANGE_TEXT || changes & this.CHANGE_GUTTER) {\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n }\n else if (changes & this.CHANGE_CURSOR) {\n if (this.$highlightGutterLine)\n this.$gutterLayer.updateLineHighlight(config);\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n }\n if (changes & this.CHANGE_CURSOR) {\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n }\n if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_FRONT)) {\n this.$markerFront.update(config);\n }\n if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_BACK)) {\n this.$markerBack.update(config);\n }\n this._signal(\"afterRender\", changes);\n };\n VirtualRenderer.prototype.$autosize = function () {\n var height = this.session.getScreenLength() * this.lineHeight;\n var maxHeight = this.$maxLines * this.lineHeight;\n var desiredHeight = Math.min(maxHeight, Math.max((this.$minLines || 1) * this.lineHeight, height)) + this.scrollMargin.v + (this.$extraHeight || 0);\n if (this.$horizScroll)\n desiredHeight += this.scrollBarH.getHeight();\n if (this.$maxPixelHeight && desiredHeight > this.$maxPixelHeight)\n desiredHeight = this.$maxPixelHeight;\n var hideScrollbars = desiredHeight <= 2 * this.lineHeight;\n var vScroll = !hideScrollbars && height > maxHeight;\n if (desiredHeight != this.desiredHeight ||\n this.$size.height != this.desiredHeight || vScroll != this.$vScroll) {\n if (vScroll != this.$vScroll) {\n this.$vScroll = vScroll;\n this.scrollBarV.setVisible(vScroll);\n }\n var w = this.container.clientWidth;\n this.container.style.height = desiredHeight + \"px\";\n this.$updateCachedSize(true, this.$gutterWidth, w, desiredHeight);\n this.desiredHeight = desiredHeight;\n this._signal(\"autosize\");\n }\n };\n VirtualRenderer.prototype.$computeLayerConfig = function () {\n var session = this.session;\n var size = this.$size;\n var hideScrollbars = size.height <= 2 * this.lineHeight;\n var screenLines = this.session.getScreenLength();\n var maxHeight = screenLines * this.lineHeight;\n var longestLine = this.$getLongestLine();\n var horizScroll = !hideScrollbars && (this.$hScrollBarAlwaysVisible ||\n size.scrollerWidth - longestLine - 2 * this.$padding < 0);\n var hScrollChanged = this.$horizScroll !== horizScroll;\n if (hScrollChanged) {\n this.$horizScroll = horizScroll;\n this.scrollBarH.setVisible(horizScroll);\n }\n var vScrollBefore = this.$vScroll; // autosize can change vscroll value in which case we need to update longestLine\n if (this.$maxLines && this.lineHeight > 1)\n this.$autosize();\n var minHeight = size.scrollerHeight + this.lineHeight;\n var scrollPastEnd = !this.$maxLines && this.$scrollPastEnd\n ? (size.scrollerHeight - this.lineHeight) * this.$scrollPastEnd\n : 0;\n maxHeight += scrollPastEnd;\n var sm = this.scrollMargin;\n this.session.setScrollTop(Math.max(-sm.top, Math.min(this.scrollTop, maxHeight - size.scrollerHeight + sm.bottom)));\n this.session.setScrollLeft(Math.max(-sm.left, Math.min(this.scrollLeft, longestLine + 2 * this.$padding - size.scrollerWidth + sm.right)));\n var vScroll = !hideScrollbars && (this.$vScrollBarAlwaysVisible ||\n size.scrollerHeight - maxHeight + scrollPastEnd < 0 || this.scrollTop > sm.top);\n var vScrollChanged = vScrollBefore !== vScroll;\n if (vScrollChanged) {\n this.$vScroll = vScroll;\n this.scrollBarV.setVisible(vScroll);\n }\n var offset = this.scrollTop % this.lineHeight;\n var lineCount = Math.ceil(minHeight / this.lineHeight) - 1;\n var firstRow = Math.max(0, Math.round((this.scrollTop - offset) / this.lineHeight));\n var lastRow = firstRow + lineCount;\n var firstRowScreen, firstRowHeight;\n var lineHeight = this.lineHeight;\n firstRow = session.screenToDocumentRow(firstRow, 0);\n var foldLine = session.getFoldLine(firstRow);\n if (foldLine) {\n firstRow = foldLine.start.row;\n }\n firstRowScreen = session.documentToScreenRow(firstRow, 0);\n firstRowHeight = session.getRowLength(firstRow) * lineHeight;\n lastRow = Math.min(session.screenToDocumentRow(lastRow, 0), session.getLength() - 1);\n minHeight = size.scrollerHeight + session.getRowLength(lastRow) * lineHeight +\n firstRowHeight;\n offset = this.scrollTop - firstRowScreen * lineHeight;\n var changes = 0;\n if (this.layerConfig.width != longestLine || hScrollChanged)\n changes = this.CHANGE_H_SCROLL;\n if (hScrollChanged || vScrollChanged) {\n changes |= this.$updateCachedSize(true, this.gutterWidth, size.width, size.height);\n this._signal(\"scrollbarVisibilityChanged\");\n if (vScrollChanged)\n longestLine = this.$getLongestLine();\n }\n this.layerConfig = {\n width: longestLine,\n padding: this.$padding,\n firstRow: firstRow,\n firstRowScreen: firstRowScreen,\n lastRow: lastRow,\n lineHeight: lineHeight,\n characterWidth: this.characterWidth,\n minHeight: minHeight,\n maxHeight: maxHeight,\n offset: offset,\n gutterOffset: lineHeight ? Math.max(0, Math.ceil((offset + size.height - size.scrollerHeight) / lineHeight)) : 0,\n height: this.$size.scrollerHeight\n };\n if (this.session.$bidiHandler)\n this.session.$bidiHandler.setContentWidth(longestLine - this.$padding);\n return changes;\n };\n VirtualRenderer.prototype.$updateLines = function () {\n if (!this.$changedLines)\n return;\n var firstRow = this.$changedLines.firstRow;\n var lastRow = this.$changedLines.lastRow;\n this.$changedLines = null;\n var layerConfig = this.layerConfig;\n if (firstRow > layerConfig.lastRow + 1) {\n return;\n }\n if (lastRow < layerConfig.firstRow) {\n return;\n }\n if (lastRow === Infinity) {\n if (this.$showGutter)\n this.$gutterLayer.update(layerConfig);\n this.$textLayer.update(layerConfig);\n return;\n }\n this.$textLayer.updateLines(layerConfig, firstRow, lastRow);\n return true;\n };\n VirtualRenderer.prototype.$getLongestLine = function () {\n var charCount = this.session.getScreenWidth();\n if (this.showInvisibles && !this.session.$useWrapMode)\n charCount += 1;\n if (this.$textLayer && charCount > this.$textLayer.MAX_LINE_LENGTH)\n charCount = this.$textLayer.MAX_LINE_LENGTH + 30;\n return Math.max(this.$size.scrollerWidth - 2 * this.$padding, Math.round(charCount * this.characterWidth));\n };\n VirtualRenderer.prototype.updateFrontMarkers = function () {\n this.$markerFront.setMarkers(this.session.getMarkers(true));\n this.$loop.schedule(this.CHANGE_MARKER_FRONT);\n };\n VirtualRenderer.prototype.updateBackMarkers = function () {\n this.$markerBack.setMarkers(this.session.getMarkers());\n this.$loop.schedule(this.CHANGE_MARKER_BACK);\n };\n VirtualRenderer.prototype.addGutterDecoration = function (row, className) {\n this.$gutterLayer.addGutterDecoration(row, className);\n };\n VirtualRenderer.prototype.removeGutterDecoration = function (row, className) {\n this.$gutterLayer.removeGutterDecoration(row, className);\n };\n VirtualRenderer.prototype.updateBreakpoints = function (rows) {\n this._rows = rows;\n this.$loop.schedule(this.CHANGE_GUTTER);\n };\n VirtualRenderer.prototype.setAnnotations = function (annotations) {\n this.$gutterLayer.setAnnotations(annotations);\n this.$loop.schedule(this.CHANGE_GUTTER);\n };\n VirtualRenderer.prototype.updateCursor = function () {\n this.$loop.schedule(this.CHANGE_CURSOR);\n };\n VirtualRenderer.prototype.hideCursor = function () {\n this.$cursorLayer.hideCursor();\n };\n VirtualRenderer.prototype.showCursor = function () {\n this.$cursorLayer.showCursor();\n };\n VirtualRenderer.prototype.scrollSelectionIntoView = function (anchor, lead, offset) {\n this.scrollCursorIntoView(anchor, offset);\n this.scrollCursorIntoView(lead, offset);\n };\n VirtualRenderer.prototype.scrollCursorIntoView = function (cursor, offset, $viewMargin) {\n if (this.$size.scrollerHeight === 0)\n return;\n var pos = this.$cursorLayer.getPixelPosition(cursor);\n var newLeft = pos.left;\n var newTop = pos.top;\n var topMargin = $viewMargin && $viewMargin.top || 0;\n var bottomMargin = $viewMargin && $viewMargin.bottom || 0;\n if (this.$scrollAnimation) {\n this.$stopAnimation = true;\n }\n var currentTop = this.$scrollAnimation ? this.session.getScrollTop() : this.scrollTop;\n if (currentTop + topMargin > newTop) {\n if (offset && currentTop + topMargin > newTop + this.lineHeight)\n newTop -= offset * this.$size.scrollerHeight;\n if (newTop === 0)\n newTop = -this.scrollMargin.top;\n this.session.setScrollTop(newTop);\n }\n else if (currentTop + this.$size.scrollerHeight - bottomMargin < newTop + this.lineHeight) {\n if (offset && currentTop + this.$size.scrollerHeight - bottomMargin < newTop - this.lineHeight)\n newTop += offset * this.$size.scrollerHeight;\n this.session.setScrollTop(newTop + this.lineHeight + bottomMargin - this.$size.scrollerHeight);\n }\n var currentLeft = this.scrollLeft;\n var twoCharsWidth = 2 * this.layerConfig.characterWidth;\n if (newLeft - twoCharsWidth < currentLeft) {\n newLeft -= twoCharsWidth;\n if (newLeft < this.$padding + twoCharsWidth) {\n newLeft = -this.scrollMargin.left;\n }\n this.session.setScrollLeft(newLeft);\n }\n else {\n newLeft += twoCharsWidth;\n if (currentLeft + this.$size.scrollerWidth < newLeft + this.characterWidth) {\n this.session.setScrollLeft(Math.round(newLeft + this.characterWidth - this.$size.scrollerWidth));\n }\n else if (currentLeft <= this.$padding && newLeft - currentLeft < this.characterWidth) {\n this.session.setScrollLeft(0);\n }\n }\n };\n VirtualRenderer.prototype.getScrollTop = function () {\n return this.session.getScrollTop();\n };\n VirtualRenderer.prototype.getScrollLeft = function () {\n return this.session.getScrollLeft();\n };\n VirtualRenderer.prototype.getScrollTopRow = function () {\n return this.scrollTop / this.lineHeight;\n };\n VirtualRenderer.prototype.getScrollBottomRow = function () {\n return Math.max(0, Math.floor((this.scrollTop + this.$size.scrollerHeight) / this.lineHeight) - 1);\n };\n VirtualRenderer.prototype.scrollToRow = function (row) {\n this.session.setScrollTop(row * this.lineHeight);\n };\n VirtualRenderer.prototype.alignCursor = function (cursor, alignment) {\n if (typeof cursor == \"number\")\n cursor = { row: cursor, column: 0 };\n var pos = this.$cursorLayer.getPixelPosition(cursor);\n var h = this.$size.scrollerHeight - this.lineHeight;\n var offset = pos.top - h * (alignment || 0);\n this.session.setScrollTop(offset);\n return offset;\n };\n VirtualRenderer.prototype.$calcSteps = function (fromValue, toValue) {\n var i = 0;\n var l = this.STEPS;\n var steps = [];\n var func = function (t, x_min, dx) {\n return dx * (Math.pow(t - 1, 3) + 1) + x_min;\n };\n for (i = 0; i < l; ++i)\n steps.push(func(i / this.STEPS, fromValue, toValue - fromValue));\n return steps;\n };\n VirtualRenderer.prototype.scrollToLine = function (line, center, animate, callback) {\n var pos = this.$cursorLayer.getPixelPosition({ row: line, column: 0 });\n var offset = pos.top;\n if (center)\n offset -= this.$size.scrollerHeight / 2;\n var initialScroll = this.scrollTop;\n this.session.setScrollTop(offset);\n if (animate !== false)\n this.animateScrolling(initialScroll, callback);\n };\n VirtualRenderer.prototype.animateScrolling = function (fromValue, callback) {\n var toValue = this.scrollTop;\n if (!this.$animatedScroll)\n return;\n var _self = this;\n if (fromValue == toValue)\n return;\n if (this.$scrollAnimation) {\n var oldSteps = this.$scrollAnimation.steps;\n if (oldSteps.length) {\n fromValue = oldSteps[0];\n if (fromValue == toValue)\n return;\n }\n }\n var steps = _self.$calcSteps(fromValue, toValue);\n this.$scrollAnimation = { from: fromValue, to: toValue, steps: steps };\n clearInterval(this.$timer);\n _self.session.setScrollTop(steps.shift());\n _self.session.$scrollTop = toValue;\n function endAnimation() {\n _self.$timer = clearInterval(_self.$timer);\n _self.$scrollAnimation = null;\n _self.$stopAnimation = false;\n callback && callback();\n }\n this.$timer = setInterval(function () {\n if (_self.$stopAnimation) {\n endAnimation();\n return;\n }\n if (!_self.session)\n return clearInterval(_self.$timer);\n if (steps.length) {\n _self.session.setScrollTop(steps.shift());\n _self.session.$scrollTop = toValue;\n }\n else if (toValue != null) {\n _self.session.$scrollTop = -1;\n _self.session.setScrollTop(toValue);\n toValue = null;\n }\n else {\n endAnimation();\n }\n }, 10);\n };\n VirtualRenderer.prototype.scrollToY = function (scrollTop) {\n if (this.scrollTop !== scrollTop) {\n this.$loop.schedule(this.CHANGE_SCROLL);\n this.scrollTop = scrollTop;\n }\n };\n VirtualRenderer.prototype.scrollToX = function (scrollLeft) {\n if (this.scrollLeft !== scrollLeft)\n this.scrollLeft = scrollLeft;\n this.$loop.schedule(this.CHANGE_H_SCROLL);\n };\n VirtualRenderer.prototype.scrollTo = function (x, y) {\n this.session.setScrollTop(y);\n this.session.setScrollLeft(x);\n };\n VirtualRenderer.prototype.scrollBy = function (deltaX, deltaY) {\n deltaY && this.session.setScrollTop(this.session.getScrollTop() + deltaY);\n deltaX && this.session.setScrollLeft(this.session.getScrollLeft() + deltaX);\n };\n VirtualRenderer.prototype.isScrollableBy = function (deltaX, deltaY) {\n if (deltaY < 0 && this.session.getScrollTop() >= 1 - this.scrollMargin.top)\n return true;\n if (deltaY > 0 && this.session.getScrollTop() + this.$size.scrollerHeight\n - this.layerConfig.maxHeight < -1 + this.scrollMargin.bottom)\n return true;\n if (deltaX < 0 && this.session.getScrollLeft() >= 1 - this.scrollMargin.left)\n return true;\n if (deltaX > 0 && this.session.getScrollLeft() + this.$size.scrollerWidth\n - this.layerConfig.width < -1 + this.scrollMargin.right)\n return true;\n };\n VirtualRenderer.prototype.pixelToScreenCoordinates = function (x, y) {\n var canvasPos;\n if (this.$hasCssTransforms) {\n canvasPos = { top: 0, left: 0 };\n var p = this.$fontMetrics.transformCoordinates([x, y]);\n x = p[1] - this.gutterWidth - this.margin.left;\n y = p[0];\n }\n else {\n canvasPos = this.scroller.getBoundingClientRect();\n }\n var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding;\n var offset = offsetX / this.characterWidth;\n var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight);\n var col = this.$blockCursor ? Math.floor(offset) : Math.round(offset);\n return { row: row, column: col, side: offset - col > 0 ? 1 : -1, offsetX: offsetX };\n };\n VirtualRenderer.prototype.screenToTextCoordinates = function (x, y) {\n var canvasPos;\n if (this.$hasCssTransforms) {\n canvasPos = { top: 0, left: 0 };\n var p = this.$fontMetrics.transformCoordinates([x, y]);\n x = p[1] - this.gutterWidth - this.margin.left;\n y = p[0];\n }\n else {\n canvasPos = this.scroller.getBoundingClientRect();\n }\n var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding;\n var offset = offsetX / this.characterWidth;\n var col = this.$blockCursor ? Math.floor(offset) : Math.round(offset);\n var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight);\n return this.session.screenToDocumentPosition(row, Math.max(col, 0), offsetX);\n };\n VirtualRenderer.prototype.textToScreenCoordinates = function (row, column) {\n var canvasPos = this.scroller.getBoundingClientRect();\n var pos = this.session.documentToScreenPosition(row, column);\n var x = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, row)\n ? this.session.$bidiHandler.getPosLeft(pos.column)\n : Math.round(pos.column * this.characterWidth));\n var y = pos.row * this.lineHeight;\n return {\n pageX: canvasPos.left + x - this.scrollLeft,\n pageY: canvasPos.top + y - this.scrollTop\n };\n };\n VirtualRenderer.prototype.visualizeFocus = function () {\n dom.addCssClass(this.container, \"ace_focus\");\n };\n VirtualRenderer.prototype.visualizeBlur = function () {\n dom.removeCssClass(this.container, \"ace_focus\");\n };\n VirtualRenderer.prototype.showComposition = function (composition) {\n this.$composition = composition;\n if (!composition.cssText) {\n composition.cssText = this.textarea.style.cssText;\n }\n if (composition.useTextareaForIME == undefined)\n composition.useTextareaForIME = this.$useTextareaForIME;\n if (this.$useTextareaForIME) {\n dom.addCssClass(this.textarea, \"ace_composition\");\n this.textarea.style.cssText = \"\";\n this.$moveTextAreaToCursor();\n this.$cursorLayer.element.style.display = \"none\";\n }\n else {\n composition.markerId = this.session.addMarker(composition.markerRange, \"ace_composition_marker\", \"text\");\n }\n };\n VirtualRenderer.prototype.setCompositionText = function (text) {\n var cursor = this.session.selection.cursor;\n this.addToken(text, \"composition_placeholder\", cursor.row, cursor.column);\n this.$moveTextAreaToCursor();\n };\n VirtualRenderer.prototype.hideComposition = function () {\n if (!this.$composition)\n return;\n if (this.$composition.markerId)\n this.session.removeMarker(this.$composition.markerId);\n dom.removeCssClass(this.textarea, \"ace_composition\");\n this.textarea.style.cssText = this.$composition.cssText;\n var cursor = this.session.selection.cursor;\n this.removeExtraToken(cursor.row, cursor.column);\n this.$composition = null;\n this.$cursorLayer.element.style.display = \"\";\n };\n VirtualRenderer.prototype.setGhostText = function (text, position) {\n var cursor = this.session.selection.cursor;\n var insertPosition = position || { row: cursor.row, column: cursor.column };\n this.removeGhostText();\n var textChunks = this.$calculateWrappedTextChunks(text, insertPosition);\n this.addToken(textChunks[0].text, \"ghost_text\", insertPosition.row, insertPosition.column);\n this.$ghostText = {\n text: text,\n position: {\n row: insertPosition.row,\n column: insertPosition.column\n }\n };\n var widgetDiv = dom.createElement(\"div\");\n if (textChunks.length > 1) {\n var hiddenTokens = this.hideTokensAfterPosition(insertPosition.row, insertPosition.column);\n var lastLineDiv;\n textChunks.slice(1).forEach(function (el) {\n var chunkDiv = dom.createElement(\"div\");\n var chunkSpan = dom.createElement(\"span\");\n chunkSpan.className = \"ace_ghost_text\";\n if (el.wrapped)\n chunkDiv.className = \"ghost_text_line_wrapped\";\n if (el.text.length === 0)\n el.text = \" \";\n chunkSpan.appendChild(dom.createTextNode(el.text));\n chunkDiv.appendChild(chunkSpan);\n widgetDiv.appendChild(chunkDiv);\n lastLineDiv = chunkDiv;\n });\n hiddenTokens.forEach(function (token) {\n var element = dom.createElement(\"span\");\n if (!isTextToken(token.type))\n element.className = \"ace_\" + token.type.replace(/\\./g, \" ace_\");\n element.appendChild(dom.createTextNode(token.value));\n lastLineDiv.appendChild(element);\n });\n this.$ghostTextWidget = {\n el: widgetDiv,\n row: insertPosition.row,\n column: insertPosition.column,\n className: \"ace_ghost_text_container\"\n };\n this.session.widgetManager.addLineWidget(this.$ghostTextWidget);\n var pixelPosition = this.$cursorLayer.getPixelPosition(insertPosition, true);\n var el = this.container;\n var height = el.getBoundingClientRect().height;\n var ghostTextHeight = textChunks.length * this.lineHeight;\n var fitsY = ghostTextHeight < (height - pixelPosition.top);\n if (fitsY)\n return;\n if (ghostTextHeight < height) {\n this.scrollBy(0, (textChunks.length - 1) * this.lineHeight);\n }\n else {\n this.scrollToRow(insertPosition.row);\n }\n }\n };\n VirtualRenderer.prototype.$calculateWrappedTextChunks = function (text, position) {\n var availableWidth = this.$size.scrollerWidth - this.$padding * 2;\n var limit = Math.floor(availableWidth / this.characterWidth) - 2;\n limit = limit <= 0 ? 60 : limit; // this is a hack to prevent the editor from crashing when the window is too small\n var textLines = text.split(/\\r?\\n/);\n var textChunks = [];\n for (var i = 0; i < textLines.length; i++) {\n var displayTokens = this.session.$getDisplayTokens(textLines[i], position.column);\n var wrapSplits = this.session.$computeWrapSplits(displayTokens, limit, this.session.$tabSize);\n if (wrapSplits.length > 0) {\n var start = 0;\n wrapSplits.push(textLines[i].length);\n for (var j = 0; j < wrapSplits.length; j++) {\n var textSlice = textLines[i].slice(start, wrapSplits[j]);\n textChunks.push({ text: textSlice, wrapped: true });\n start = wrapSplits[j];\n }\n }\n else {\n textChunks.push({ text: textLines[i], wrapped: false });\n }\n }\n return textChunks;\n };\n VirtualRenderer.prototype.removeGhostText = function () {\n if (!this.$ghostText)\n return;\n var position = this.$ghostText.position;\n this.removeExtraToken(position.row, position.column);\n if (this.$ghostTextWidget) {\n this.session.widgetManager.removeLineWidget(this.$ghostTextWidget);\n this.$ghostTextWidget = null;\n }\n this.$ghostText = null;\n };\n VirtualRenderer.prototype.addToken = function (text, type, row, column) {\n var session = this.session;\n session.bgTokenizer.lines[row] = null;\n var newToken = { type: type, value: text };\n var tokens = session.getTokens(row);\n if (column == null || !tokens.length) {\n tokens.push(newToken);\n }\n else {\n var l = 0;\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n l += token.value.length;\n if (column <= l) {\n var diff = token.value.length - (l - column);\n var before = token.value.slice(0, diff);\n var after = token.value.slice(diff);\n tokens.splice(i, 1, { type: token.type, value: before }, newToken, { type: token.type, value: after });\n break;\n }\n }\n }\n this.updateLines(row, row);\n };\n VirtualRenderer.prototype.hideTokensAfterPosition = function (row, column) {\n var tokens = this.session.getTokens(row);\n var l = 0;\n var hasPassedCursor = false;\n var hiddenTokens = [];\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n l += token.value.length;\n if (token.type === \"ghost_text\")\n continue;\n if (hasPassedCursor) {\n hiddenTokens.push({ type: token.type, value: token.value });\n token.type = \"hidden_token\";\n continue;\n }\n if (l === column) {\n hasPassedCursor = true;\n }\n }\n this.updateLines(row, row);\n return hiddenTokens;\n };\n VirtualRenderer.prototype.removeExtraToken = function (row, column) {\n this.session.bgTokenizer.lines[row] = null;\n this.updateLines(row, row);\n };\n VirtualRenderer.prototype.setTheme = function (theme, cb) {\n var _self = this;\n this.$themeId = theme;\n _self._dispatchEvent('themeChange', { theme: theme });\n if (!theme || typeof theme == \"string\") {\n var moduleName = theme || this.$options.theme.initialValue;\n config.loadModule([\"theme\", moduleName], afterLoad);\n }\n else {\n afterLoad(theme);\n }\n function afterLoad(module) {\n if (_self.$themeId != theme)\n return cb && cb();\n if (!module || !module.cssClass)\n throw new Error(\"couldn't load module \" + theme + \" or it didn't call define\");\n if (module.$id)\n _self.$themeId = module.$id;\n dom.importCssString(module.cssText, module.cssClass, _self.container);\n if (_self.theme)\n dom.removeCssClass(_self.container, _self.theme.cssClass);\n var padding = \"padding\" in module ? module.padding\n : \"padding\" in (_self.theme || {}) ? 4 : _self.$padding;\n if (_self.$padding && padding != _self.$padding)\n _self.setPadding(padding);\n _self.$theme = module.cssClass;\n _self.theme = module;\n dom.addCssClass(_self.container, module.cssClass);\n dom.setCssClass(_self.container, \"ace_dark\", module.isDark);\n if (_self.$size) {\n _self.$size.width = 0;\n _self.$updateSizeAsync();\n }\n _self._dispatchEvent('themeLoaded', { theme: module });\n cb && cb();\n if (useragent.isSafari && _self.scroller) {\n _self.scroller.style.background = \"red\";\n _self.scroller.style.background = \"\";\n }\n }\n };\n VirtualRenderer.prototype.getTheme = function () {\n return this.$themeId;\n };\n VirtualRenderer.prototype.setStyle = function (style, include) {\n dom.setCssClass(this.container, style, include !== false);\n };\n VirtualRenderer.prototype.unsetStyle = function (style) {\n dom.removeCssClass(this.container, style);\n };\n VirtualRenderer.prototype.setCursorStyle = function (style) {\n dom.setStyle(this.scroller.style, \"cursor\", style);\n };\n VirtualRenderer.prototype.setMouseCursor = function (cursorStyle) {\n dom.setStyle(this.scroller.style, \"cursor\", cursorStyle);\n };\n VirtualRenderer.prototype.attachToShadowRoot = function () {\n dom.importCssString(editorCss, \"ace_editor.css\", this.container);\n };\n VirtualRenderer.prototype.destroy = function () {\n this.freeze();\n this.$fontMetrics.destroy();\n this.$cursorLayer.destroy();\n this.removeAllListeners();\n this.container.textContent = \"\";\n this.setOption(\"useResizeObserver\", false);\n };\n VirtualRenderer.prototype.$updateCustomScrollbar = function (val) {\n var _self = this;\n this.$horizScroll = this.$vScroll = null;\n this.scrollBarV.element.remove();\n this.scrollBarH.element.remove();\n if (this.$scrollDecorator) {\n delete this.$scrollDecorator;\n }\n if (val === true) {\n this.scrollBarV = new VScrollBarCustom(this.container, this);\n this.scrollBarH = new HScrollBarCustom(this.container, this);\n this.scrollBarV.setHeight(this.$size.scrollerHeight);\n this.scrollBarH.setWidth(this.$size.scrollerWidth);\n this.scrollBarV.addEventListener(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollTop(e.data - _self.scrollMargin.top);\n });\n this.scrollBarH.addEventListener(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\n });\n this.$scrollDecorator = new Decorator(this.scrollBarV, this);\n this.$scrollDecorator.$updateDecorators();\n }\n else {\n this.scrollBarV = new VScrollBar(this.container, this);\n this.scrollBarH = new HScrollBar(this.container, this);\n this.scrollBarV.addEventListener(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollTop(e.data - _self.scrollMargin.top);\n });\n this.scrollBarH.addEventListener(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\n });\n }\n };\n VirtualRenderer.prototype.$addResizeObserver = function () {\n if (!window.ResizeObserver || this.$resizeObserver)\n return;\n var self = this;\n this.$resizeTimer = lang.delayedCall(function () {\n if (!self.destroyed)\n self.onResize();\n }, 50);\n this.$resizeObserver = new window.ResizeObserver(function (e) {\n var w = e[0].contentRect.width;\n var h = e[0].contentRect.height;\n if (Math.abs(self.$size.width - w) > 1\n || Math.abs(self.$size.height - h) > 1) {\n self.$resizeTimer.delay();\n }\n else {\n self.$resizeTimer.cancel();\n }\n });\n this.$resizeObserver.observe(this.container);\n };\n return VirtualRenderer;\n}());\nVirtualRenderer.prototype.CHANGE_CURSOR = 1;\nVirtualRenderer.prototype.CHANGE_MARKER = 2;\nVirtualRenderer.prototype.CHANGE_GUTTER = 4;\nVirtualRenderer.prototype.CHANGE_SCROLL = 8;\nVirtualRenderer.prototype.CHANGE_LINES = 16;\nVirtualRenderer.prototype.CHANGE_TEXT = 32;\nVirtualRenderer.prototype.CHANGE_SIZE = 64;\nVirtualRenderer.prototype.CHANGE_MARKER_BACK = 128;\nVirtualRenderer.prototype.CHANGE_MARKER_FRONT = 256;\nVirtualRenderer.prototype.CHANGE_FULL = 512;\nVirtualRenderer.prototype.CHANGE_H_SCROLL = 1024;\nVirtualRenderer.prototype.$changes = 0;\nVirtualRenderer.prototype.$padding = null;\nVirtualRenderer.prototype.$frozen = false;\nVirtualRenderer.prototype.STEPS = 8;\noop.implement(VirtualRenderer.prototype, EventEmitter);\nconfig.defineOptions(VirtualRenderer.prototype, \"renderer\", {\n useResizeObserver: {\n set: function (value) {\n if (!value && this.$resizeObserver) {\n this.$resizeObserver.disconnect();\n this.$resizeTimer.cancel();\n this.$resizeTimer = this.$resizeObserver = null;\n }\n else if (value && !this.$resizeObserver) {\n this.$addResizeObserver();\n }\n }\n },\n animatedScroll: { initialValue: false },\n showInvisibles: {\n set: function (value) {\n if (this.$textLayer.setShowInvisibles(value))\n this.$loop.schedule(this.CHANGE_TEXT);\n },\n initialValue: false\n },\n showPrintMargin: {\n set: function () { this.$updatePrintMargin(); },\n initialValue: true\n },\n printMarginColumn: {\n set: function () { this.$updatePrintMargin(); },\n initialValue: 80\n },\n printMargin: {\n set: function (val) {\n if (typeof val == \"number\")\n this.$printMarginColumn = val;\n this.$showPrintMargin = !!val;\n this.$updatePrintMargin();\n },\n get: function () {\n return this.$showPrintMargin && this.$printMarginColumn;\n }\n },\n showGutter: {\n set: function (show) {\n this.$gutter.style.display = show ? \"block\" : \"none\";\n this.$loop.schedule(this.CHANGE_FULL);\n this.onGutterResize();\n },\n initialValue: true\n },\n useSvgGutterIcons: {\n set: function (value) {\n this.$gutterLayer.$useSvgGutterIcons = value;\n },\n initialValue: false\n },\n showFoldedAnnotations: {\n set: function (value) {\n this.$gutterLayer.$showFoldedAnnotations = value;\n },\n initialValue: false\n },\n fadeFoldWidgets: {\n set: function (show) {\n dom.setCssClass(this.$gutter, \"ace_fade-fold-widgets\", show);\n },\n initialValue: false\n },\n showFoldWidgets: {\n set: function (show) {\n this.$gutterLayer.setShowFoldWidgets(show);\n this.$loop.schedule(this.CHANGE_GUTTER);\n },\n initialValue: true\n },\n displayIndentGuides: {\n set: function (show) {\n if (this.$textLayer.setDisplayIndentGuides(show))\n this.$loop.schedule(this.CHANGE_TEXT);\n },\n initialValue: true\n },\n highlightIndentGuides: {\n set: function (show) {\n if (this.$textLayer.setHighlightIndentGuides(show) == true) {\n this.$textLayer.$highlightIndentGuide();\n }\n else {\n this.$textLayer.$clearActiveIndentGuide(this.$textLayer.$lines.cells);\n }\n },\n initialValue: true\n },\n highlightGutterLine: {\n set: function (shouldHighlight) {\n this.$gutterLayer.setHighlightGutterLine(shouldHighlight);\n this.$loop.schedule(this.CHANGE_GUTTER);\n },\n initialValue: true\n },\n hScrollBarAlwaysVisible: {\n set: function (val) {\n if (!this.$hScrollBarAlwaysVisible || !this.$horizScroll)\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: false\n },\n vScrollBarAlwaysVisible: {\n set: function (val) {\n if (!this.$vScrollBarAlwaysVisible || !this.$vScroll)\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: false\n },\n fontSize: {\n set: function (size) {\n if (typeof size == \"number\")\n size = size + \"px\";\n this.container.style.fontSize = size;\n this.updateFontSize();\n },\n initialValue: 12\n },\n fontFamily: {\n set: function (name) {\n this.container.style.fontFamily = name;\n this.updateFontSize();\n }\n },\n maxLines: {\n set: function (val) {\n this.updateFull();\n }\n },\n minLines: {\n set: function (val) {\n if (!(this.$minLines < 0x1ffffffffffff))\n this.$minLines = 0;\n this.updateFull();\n }\n },\n maxPixelHeight: {\n set: function (val) {\n this.updateFull();\n },\n initialValue: 0\n },\n scrollPastEnd: {\n set: function (val) {\n val = +val || 0;\n if (this.$scrollPastEnd == val)\n return;\n this.$scrollPastEnd = val;\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: 0,\n handlesSet: true\n },\n fixedWidthGutter: {\n set: function (val) {\n this.$gutterLayer.$fixedWidth = !!val;\n this.$loop.schedule(this.CHANGE_GUTTER);\n }\n },\n customScrollbar: {\n set: function (val) {\n this.$updateCustomScrollbar(val);\n },\n initialValue: false\n },\n theme: {\n set: function (val) { this.setTheme(val); },\n get: function () { return this.$themeId || this.theme; },\n initialValue: \"./theme/textmate\",\n handlesSet: true\n },\n hasCssTransforms: {},\n useTextareaForIME: {\n initialValue: !useragent.isMobile && !useragent.isIE\n }\n});\nexports.VirtualRenderer = VirtualRenderer;\n\n});\n\nace.define(\"ace/worker/worker_client\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/event_emitter\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar net = require(\"../lib/net\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar config = require(\"../config\");\n\nfunction $workerBlob(workerUrl) {\n var script = \"importScripts('\" + net.qualifyURL(workerUrl) + \"');\";\n try {\n return new Blob([script], {\"type\": \"application/javascript\"});\n } catch (e) { // Backwards-compatibility\n var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder;\n var blobBuilder = new BlobBuilder();\n blobBuilder.append(script);\n return blobBuilder.getBlob(\"application/javascript\");\n }\n}\n\nfunction createWorker(workerUrl) {\n if (typeof Worker == \"undefined\")\n return { postMessage: function() {}, terminate: function() {} };\n if (config.get(\"loadWorkerFromBlob\")) {\n var blob = $workerBlob(workerUrl);\n var URL = window.URL || window.webkitURL;\n var blobURL = URL.createObjectURL(blob);\n return new Worker(blobURL);\n }\n return new Worker(workerUrl);\n}\n\nvar WorkerClient = function(worker) {\n if (!worker.postMessage)\n worker = this.$createWorkerFromOldConfig.apply(this, arguments);\n\n this.$worker = worker;\n this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this);\n this.changeListener = this.changeListener.bind(this);\n this.onMessage = this.onMessage.bind(this);\n\n this.callbackId = 1;\n this.callbacks = {};\n\n this.$worker.onmessage = this.onMessage;\n};\n\n(function(){\n\n oop.implement(this, EventEmitter);\n\n this.$createWorkerFromOldConfig = function(topLevelNamespaces, mod, classname, workerUrl, importScripts) {\n if (require.nameToUrl && !require.toUrl)\n require.toUrl = require.nameToUrl;\n\n if (config.get(\"packaged\") || !require.toUrl) {\n workerUrl = workerUrl || config.moduleUrl(mod, \"worker\");\n } else {\n var normalizePath = this.$normalizePath;\n workerUrl = workerUrl || normalizePath(require.toUrl(\"ace/worker/worker.js\", null, \"_\"));\n\n var tlns = {};\n topLevelNamespaces.forEach(function(ns) {\n tlns[ns] = normalizePath(require.toUrl(ns, null, \"_\").replace(/(\\.js)?(\\?.*)?$/, \"\"));\n });\n }\n\n this.$worker = createWorker(workerUrl);\n if (importScripts) {\n this.send(\"importScripts\", importScripts);\n }\n this.$worker.postMessage({\n init : true,\n tlns : tlns,\n module : mod,\n classname : classname\n });\n return this.$worker;\n };\n\n this.onMessage = function(e) {\n var msg = e.data;\n switch (msg.type) {\n case \"event\":\n this._signal(msg.name, {data: msg.data});\n break;\n case \"call\":\n var callback = this.callbacks[msg.id];\n if (callback) {\n callback(msg.data);\n delete this.callbacks[msg.id];\n }\n break;\n case \"error\":\n this.reportError(msg.data);\n break;\n case \"log\":\n window.console && console.log && console.log.apply(console, msg.data);\n break;\n }\n };\n \n this.reportError = function(err) {\n window.console && console.error && console.error(err);\n };\n\n this.$normalizePath = function(path) {\n return net.qualifyURL(path);\n };\n\n this.terminate = function() {\n this._signal(\"terminate\", {});\n this.deltaQueue = null;\n this.$worker.terminate();\n this.$worker.onerror = function(e) {\n e.preventDefault();\n };\n this.$worker = null;\n if (this.$doc)\n this.$doc.off(\"change\", this.changeListener);\n this.$doc = null;\n };\n\n this.send = function(cmd, args) {\n this.$worker.postMessage({command: cmd, args: args});\n };\n\n this.call = function(cmd, args, callback) {\n if (callback) {\n var id = this.callbackId++;\n this.callbacks[id] = callback;\n args.push(id);\n }\n this.send(cmd, args);\n };\n\n this.emit = function(event, data) {\n try {\n if (data.data && data.data.err)\n data.data.err = {message: data.data.err.message, stack: data.data.err.stack, code: data.data.err.code};\n this.$worker && this.$worker.postMessage({event: event, data: {data: data.data}});\n }\n catch(ex) {\n console.error(ex.stack);\n }\n };\n\n this.attachToDocument = function(doc) {\n if (this.$doc)\n this.terminate();\n\n this.$doc = doc;\n this.call(\"setValue\", [doc.getValue()]);\n doc.on(\"change\", this.changeListener, true);\n };\n\n this.changeListener = function(delta) {\n if (!this.deltaQueue) {\n this.deltaQueue = [];\n setTimeout(this.$sendDeltaQueue, 0);\n }\n if (delta.action == \"insert\")\n this.deltaQueue.push(delta.start, delta.lines);\n else\n this.deltaQueue.push(delta.start, delta.end);\n };\n\n this.$sendDeltaQueue = function() {\n var q = this.deltaQueue;\n if (!q) return;\n this.deltaQueue = null;\n if (q.length > 50 && q.length > this.$doc.getLength() >> 1) {\n this.call(\"setValue\", [this.$doc.getValue()]);\n } else\n this.emit(\"change\", {data: q});\n };\n\n}).call(WorkerClient.prototype);\n\n\nvar UIWorkerClient = function(topLevelNamespaces, mod, classname) {\n var main = null;\n var emitSync = false;\n var sender = Object.create(EventEmitter);\n\n var messageBuffer = [];\n var workerClient = new WorkerClient({\n messageBuffer: messageBuffer,\n terminate: function() {},\n postMessage: function(e) {\n messageBuffer.push(e);\n if (!main) return;\n if (emitSync)\n setTimeout(processNext);\n else\n processNext();\n }\n });\n\n workerClient.setEmitSync = function(val) { emitSync = val; };\n\n var processNext = function() {\n var msg = messageBuffer.shift();\n if (msg.command)\n main[msg.command].apply(main, msg.args);\n else if (msg.event)\n sender._signal(msg.event, msg.data);\n };\n\n sender.postMessage = function(msg) {\n workerClient.onMessage({data: msg});\n };\n sender.callback = function(data, callbackId) {\n this.postMessage({type: \"call\", id: callbackId, data: data});\n };\n sender.emit = function(name, data) {\n this.postMessage({type: \"event\", name: name, data: data});\n };\n\n config.loadModule([\"worker\", mod], function(Main) {\n main = new Main[classname](sender);\n while (messageBuffer.length)\n processNext();\n });\n\n return workerClient;\n};\n\nexports.UIWorkerClient = UIWorkerClient;\nexports.WorkerClient = WorkerClient;\nexports.createWorker = createWorker;\n\n\n});\n\nace.define(\"ace/placeholder\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/lib/oop\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"./range\").Range;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar oop = require(\"./lib/oop\");\nvar PlaceHolder = /** @class */ (function () {\n function PlaceHolder(session, length, pos, others, mainClass, othersClass) {\n var _self = this;\n this.length = length;\n this.session = session;\n this.doc = session.getDocument();\n this.mainClass = mainClass;\n this.othersClass = othersClass;\n this.$onUpdate = this.onUpdate.bind(this);\n this.doc.on(\"change\", this.$onUpdate, true);\n this.$others = others;\n this.$onCursorChange = function () {\n setTimeout(function () {\n _self.onCursorChange();\n });\n };\n this.$pos = pos;\n var undoStack = session.getUndoManager().$undoStack || session.getUndoManager()[\"$undostack\"] || { length: -1 };\n this.$undoStackDepth = undoStack.length;\n this.setup();\n session.selection.on(\"changeCursor\", this.$onCursorChange);\n }\n PlaceHolder.prototype.setup = function () {\n var _self = this;\n var doc = this.doc;\n var session = this.session;\n this.selectionBefore = session.selection.toJSON();\n if (session.selection.inMultiSelectMode)\n session.selection.toSingleRange();\n this.pos = doc.createAnchor(this.$pos.row, this.$pos.column);\n var pos = this.pos;\n pos.$insertRight = true;\n pos.detach();\n pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + this.length), this.mainClass, null, false);\n this.others = [];\n this.$others.forEach(function (other) {\n var anchor = doc.createAnchor(other.row, other.column);\n anchor.$insertRight = true;\n anchor.detach();\n _self.others.push(anchor);\n });\n session.setUndoSelect(false);\n };\n PlaceHolder.prototype.showOtherMarkers = function () {\n if (this.othersActive)\n return;\n var session = this.session;\n var _self = this;\n this.othersActive = true;\n this.others.forEach(function (anchor) {\n anchor.markerId = session.addMarker(new Range(anchor.row, anchor.column, anchor.row, anchor.column + _self.length), _self.othersClass, null, false);\n });\n };\n PlaceHolder.prototype.hideOtherMarkers = function () {\n if (!this.othersActive)\n return;\n this.othersActive = false;\n for (var i = 0; i < this.others.length; i++) {\n this.session.removeMarker(this.others[i].markerId);\n }\n };\n PlaceHolder.prototype.onUpdate = function (delta) {\n if (this.$updating)\n return this.updateAnchors(delta);\n var range = delta;\n if (range.start.row !== range.end.row)\n return;\n if (range.start.row !== this.pos.row)\n return;\n this.$updating = true;\n var lengthDiff = delta.action === \"insert\" ? range.end.column - range.start.column : range.start.column - range.end.column;\n var inMainRange = range.start.column >= this.pos.column && range.start.column <= this.pos.column + this.length + 1;\n var distanceFromStart = range.start.column - this.pos.column;\n this.updateAnchors(delta);\n if (inMainRange)\n this.length += lengthDiff;\n if (inMainRange && !this.session.$fromUndo) {\n if (delta.action === 'insert') {\n for (var i = this.others.length - 1; i >= 0; i--) {\n var otherPos = this.others[i];\n var newPos = { row: otherPos.row, column: otherPos.column + distanceFromStart };\n this.doc.insertMergedLines(newPos, delta.lines);\n }\n }\n else if (delta.action === 'remove') {\n for (var i = this.others.length - 1; i >= 0; i--) {\n var otherPos = this.others[i];\n var newPos = { row: otherPos.row, column: otherPos.column + distanceFromStart };\n this.doc.remove(new Range(newPos.row, newPos.column, newPos.row, newPos.column - lengthDiff));\n }\n }\n }\n this.$updating = false;\n this.updateMarkers();\n };\n PlaceHolder.prototype.updateAnchors = function (delta) {\n this.pos.onChange(delta);\n for (var i = this.others.length; i--;)\n this.others[i].onChange(delta);\n this.updateMarkers();\n };\n PlaceHolder.prototype.updateMarkers = function () {\n if (this.$updating)\n return;\n var _self = this;\n var session = this.session;\n var updateMarker = function (pos, className) {\n session.removeMarker(pos.markerId);\n pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + _self.length), className, null, false);\n };\n updateMarker(this.pos, this.mainClass);\n for (var i = this.others.length; i--;)\n updateMarker(this.others[i], this.othersClass);\n };\n PlaceHolder.prototype.onCursorChange = function (event) {\n if (this.$updating || !this.session)\n return;\n var pos = this.session.selection.getCursor();\n if (pos.row === this.pos.row && pos.column >= this.pos.column && pos.column <= this.pos.column + this.length) {\n this.showOtherMarkers();\n this._emit(\"cursorEnter\", event);\n }\n else {\n this.hideOtherMarkers();\n this._emit(\"cursorLeave\", event);\n }\n };\n PlaceHolder.prototype.detach = function () {\n this.session.removeMarker(this.pos && this.pos.markerId);\n this.hideOtherMarkers();\n this.doc.off(\"change\", this.$onUpdate);\n this.session.selection.off(\"changeCursor\", this.$onCursorChange);\n this.session.setUndoSelect(true);\n this.session = null;\n };\n PlaceHolder.prototype.cancel = function () {\n if (this.$undoStackDepth === -1)\n return;\n var undoManager = this.session.getUndoManager();\n var undosRequired = (undoManager.$undoStack || undoManager[\"$undostack\"]).length - this.$undoStackDepth;\n for (var i = 0; i < undosRequired; i++) {\n undoManager.undo(this.session, true);\n }\n if (this.selectionBefore)\n this.session.selection.fromJSON(this.selectionBefore);\n };\n return PlaceHolder;\n}());\noop.implement(PlaceHolder.prototype, EventEmitter);\nexports.PlaceHolder = PlaceHolder;\n\n});\n\nace.define(\"ace/mouse/multi_select_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module){var event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nfunction isSamePoint(p1, p2) {\n return p1.row == p2.row && p1.column == p2.column;\n}\nfunction onMouseDown(e) {\n var ev = e.domEvent;\n var alt = ev.altKey;\n var shift = ev.shiftKey;\n var ctrl = ev.ctrlKey;\n var accel = e.getAccelKey();\n var button = e.getButton();\n if (ctrl && useragent.isMac)\n button = ev.button;\n if (e.editor.inMultiSelectMode && button == 2) {\n e.editor.textInput.onContextMenu(e.domEvent);\n return;\n }\n if (!ctrl && !alt && !accel) {\n if (button === 0 && e.editor.inMultiSelectMode)\n e.editor.exitMultiSelectMode();\n return;\n }\n if (button !== 0)\n return;\n var editor = e.editor;\n var selection = editor.selection;\n var isMultiSelect = editor.inMultiSelectMode;\n var pos = e.getDocumentPosition();\n var cursor = selection.getCursor();\n var inSelection = e.inSelection() || (selection.isEmpty() && isSamePoint(pos, cursor));\n var mouseX = e.x, mouseY = e.y;\n var onMouseSelection = function (e) {\n mouseX = e.clientX;\n mouseY = e.clientY;\n };\n var session = editor.session;\n var screenAnchor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\n var screenCursor = screenAnchor;\n var selectionMode;\n if (editor.$mouseHandler.$enableJumpToDef) {\n if (ctrl && alt || accel && alt)\n selectionMode = shift ? \"block\" : \"add\";\n else if (alt && editor.$blockSelectEnabled)\n selectionMode = \"block\";\n }\n else {\n if (accel && !alt) {\n selectionMode = \"add\";\n if (!isMultiSelect && shift)\n return;\n }\n else if (alt && editor.$blockSelectEnabled) {\n selectionMode = \"block\";\n }\n }\n if (selectionMode && useragent.isMac && ev.ctrlKey) {\n editor.$mouseHandler.cancelContextMenu();\n }\n if (selectionMode == \"add\") {\n if (!isMultiSelect && inSelection)\n return; // dragging\n if (!isMultiSelect) {\n var range = selection.toOrientedRange();\n editor.addSelectionMarker(range);\n }\n var oldRange = selection.rangeList.rangeAtPoint(pos);\n editor.inVirtualSelectionMode = true;\n if (shift) {\n oldRange = null;\n range = selection.ranges[0] || range;\n editor.removeSelectionMarker(range);\n }\n editor.once(\"mouseup\", function () {\n var tmpSel = selection.toOrientedRange();\n if (oldRange && tmpSel.isEmpty() && isSamePoint(oldRange.cursor, tmpSel.cursor))\n selection.substractPoint(tmpSel.cursor);\n else {\n if (shift) {\n selection.substractPoint(range.cursor);\n }\n else if (range) {\n editor.removeSelectionMarker(range);\n selection.addRange(range);\n }\n selection.addRange(tmpSel);\n }\n editor.inVirtualSelectionMode = false;\n });\n }\n else if (selectionMode == \"block\") {\n e.stop();\n editor.inVirtualSelectionMode = true;\n var initialRange;\n var rectSel = [];\n var blockSelect = function () {\n var newCursor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\n var cursor = session.screenToDocumentPosition(newCursor.row, newCursor.column, newCursor.offsetX);\n if (isSamePoint(screenCursor, newCursor) && isSamePoint(cursor, selection.lead))\n return;\n screenCursor = newCursor;\n editor.selection.moveToPosition(cursor);\n editor.renderer.scrollCursorIntoView();\n editor.removeSelectionMarkers(rectSel);\n rectSel = selection.rectangularRangeBlock(screenCursor, screenAnchor);\n if (editor.$mouseHandler.$clickSelection && rectSel.length == 1 && rectSel[0].isEmpty())\n rectSel[0] = editor.$mouseHandler.$clickSelection.clone();\n rectSel.forEach(editor.addSelectionMarker, editor);\n editor.updateSelectionMarkers();\n };\n if (isMultiSelect && !accel) {\n selection.toSingleRange();\n }\n else if (!isMultiSelect && accel) {\n initialRange = selection.toOrientedRange();\n editor.addSelectionMarker(initialRange);\n }\n if (shift)\n screenAnchor = session.documentToScreenPosition(selection.lead);\n else\n selection.moveToPosition(pos);\n screenCursor = { row: -1, column: -1 };\n var onMouseSelectionEnd = function (e) {\n blockSelect();\n clearInterval(timerId);\n editor.removeSelectionMarkers(rectSel);\n if (!rectSel.length)\n rectSel = [selection.toOrientedRange()];\n if (initialRange) {\n editor.removeSelectionMarker(initialRange);\n selection.toSingleRange(initialRange);\n }\n for (var i = 0; i < rectSel.length; i++)\n selection.addRange(rectSel[i]);\n editor.inVirtualSelectionMode = false;\n editor.$mouseHandler.$clickSelection = null;\n };\n var onSelectionInterval = blockSelect;\n event.capture(editor.container, onMouseSelection, onMouseSelectionEnd);\n var timerId = setInterval(function () { onSelectionInterval(); }, 20);\n return e.preventDefault();\n }\n}\nexports.onMouseDown = onMouseDown;\n\n});\n\nace.define(\"ace/commands/multi_select_commands\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\"], function(require, exports, module){/**\n * commands to enter multiselect mode\n * @type {import(\"../../ace-internal\").Ace.Command[]}\n */\nexports.defaultCommands = [{\n name: \"addCursorAbove\",\n description: \"Add cursor above\",\n exec: function (editor) { editor.selectMoreLines(-1); },\n bindKey: { win: \"Ctrl-Alt-Up\", mac: \"Ctrl-Alt-Up\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"addCursorBelow\",\n description: \"Add cursor below\",\n exec: function (editor) { editor.selectMoreLines(1); },\n bindKey: { win: \"Ctrl-Alt-Down\", mac: \"Ctrl-Alt-Down\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"addCursorAboveSkipCurrent\",\n description: \"Add cursor above (skip current)\",\n exec: function (editor) { editor.selectMoreLines(-1, true); },\n bindKey: { win: \"Ctrl-Alt-Shift-Up\", mac: \"Ctrl-Alt-Shift-Up\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"addCursorBelowSkipCurrent\",\n description: \"Add cursor below (skip current)\",\n exec: function (editor) { editor.selectMoreLines(1, true); },\n bindKey: { win: \"Ctrl-Alt-Shift-Down\", mac: \"Ctrl-Alt-Shift-Down\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectMoreBefore\",\n description: \"Select more before\",\n exec: function (editor) { editor.selectMore(-1); },\n bindKey: { win: \"Ctrl-Alt-Left\", mac: \"Ctrl-Alt-Left\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectMoreAfter\",\n description: \"Select more after\",\n exec: function (editor) { editor.selectMore(1); },\n bindKey: { win: \"Ctrl-Alt-Right\", mac: \"Ctrl-Alt-Right\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectNextBefore\",\n description: \"Select next before\",\n exec: function (editor) { editor.selectMore(-1, true); },\n bindKey: { win: \"Ctrl-Alt-Shift-Left\", mac: \"Ctrl-Alt-Shift-Left\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectNextAfter\",\n description: \"Select next after\",\n exec: function (editor) { editor.selectMore(1, true); },\n bindKey: { win: \"Ctrl-Alt-Shift-Right\", mac: \"Ctrl-Alt-Shift-Right\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"toggleSplitSelectionIntoLines\",\n description: \"Split selection into lines\",\n exec: function (editor) {\n if (editor.multiSelect.rangeCount > 1)\n editor.multiSelect.joinSelections();\n else\n editor.multiSelect.splitIntoLines();\n },\n bindKey: { win: \"Ctrl-Alt-L\", mac: \"Ctrl-Alt-L\" },\n readOnly: true\n }, {\n name: \"splitSelectionIntoLines\",\n description: \"Split into lines\",\n exec: function (editor) { editor.multiSelect.splitIntoLines(); },\n readOnly: true\n }, {\n name: \"alignCursors\",\n description: \"Align cursors\",\n exec: function (editor) { editor.alignCursors(); },\n bindKey: { win: \"Ctrl-Alt-A\", mac: \"Ctrl-Alt-A\" },\n scrollIntoView: \"cursor\"\n }, {\n name: \"findAll\",\n description: \"Find all\",\n exec: function (editor) { editor.findAll(); },\n bindKey: { win: \"Ctrl-Alt-K\", mac: \"Ctrl-Alt-G\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }];\nexports.multiSelectCommands = [{\n name: \"singleSelection\",\n description: \"Single selection\",\n bindKey: \"esc\",\n exec: function (editor) { editor.exitMultiSelectMode(); },\n scrollIntoView: \"cursor\",\n readOnly: true,\n isAvailable: function (editor) { return editor && editor.inMultiSelectMode; }\n }];\nvar HashHandler = require(\"../keyboard/hash_handler\").HashHandler;\nexports.keyboardHandler = new HashHandler(exports.multiSelectCommands);\n\n});\n\nace.define(\"ace/multi_select\",[\"require\",\"exports\",\"module\",\"ace/range_list\",\"ace/range\",\"ace/selection\",\"ace/mouse/multi_select_handler\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/commands/multi_select_commands\",\"ace/search\",\"ace/edit_session\",\"ace/editor\",\"ace/config\"], function(require, exports, module){/**\n * @typedef {import(\"./anchor\").Anchor} Anchor\n * @typedef {import(\"../ace-internal\").Ace.Point} Point\n * @typedef {import(\"../ace-internal\").Ace.ScreenCoordinates} ScreenCoordinates\n */\nvar RangeList = require(\"./range_list\").RangeList;\nvar Range = require(\"./range\").Range;\nvar Selection = require(\"./selection\").Selection;\nvar onMouseDown = require(\"./mouse/multi_select_handler\").onMouseDown;\nvar event = require(\"./lib/event\");\nvar lang = require(\"./lib/lang\");\nvar commands = require(\"./commands/multi_select_commands\");\nexports.commands = commands.defaultCommands.concat(commands.multiSelectCommands);\nvar Search = require(\"./search\").Search;\nvar search = new Search();\nfunction find(session, needle, dir) {\n search.$options.wrap = true;\n search.$options.needle = needle;\n search.$options.backwards = dir == -1;\n return search.find(session);\n}\nvar EditSession = require(\"./edit_session\").EditSession;\n(function () {\n this.getSelectionMarkers = function () {\n return this.$selectionMarkers;\n };\n}).call(EditSession.prototype);\n(function () {\n this.ranges = null;\n this.rangeList = null;\n this.addRange = function (range, $blockChangeEvents) {\n if (!range)\n return;\n if (!this.inMultiSelectMode && this.rangeCount === 0) {\n var oldRange = this.toOrientedRange();\n this.rangeList.add(oldRange);\n this.rangeList.add(range);\n if (this.rangeList.ranges.length != 2) {\n this.rangeList.removeAll();\n return $blockChangeEvents || this.fromOrientedRange(range);\n }\n this.rangeList.removeAll();\n this.rangeList.add(oldRange);\n this.$onAddRange(oldRange);\n }\n if (!range.cursor)\n range.cursor = range.end;\n var removed = this.rangeList.add(range);\n this.$onAddRange(range);\n if (removed.length)\n this.$onRemoveRange(removed);\n if (this.rangeCount > 1 && !this.inMultiSelectMode) {\n this._signal(\"multiSelect\");\n this.inMultiSelectMode = true;\n this.session.$undoSelect = false;\n this.rangeList.attach(this.session);\n }\n return $blockChangeEvents || this.fromOrientedRange(range);\n };\n this.toSingleRange = function (range) {\n range = range || this.ranges[0];\n var removed = this.rangeList.removeAll();\n if (removed.length)\n this.$onRemoveRange(removed);\n range && this.fromOrientedRange(range);\n };\n this.substractPoint = function (pos) {\n var removed = this.rangeList.substractPoint(pos);\n if (removed) {\n this.$onRemoveRange(removed);\n return removed[0];\n }\n };\n this.mergeOverlappingRanges = function () {\n var removed = this.rangeList.merge();\n if (removed.length)\n this.$onRemoveRange(removed);\n };\n this.$onAddRange = function (range) {\n this.rangeCount = this.rangeList.ranges.length;\n this.ranges.unshift(range);\n this._signal(\"addRange\", { range: range });\n };\n this.$onRemoveRange = function (removed) {\n this.rangeCount = this.rangeList.ranges.length;\n if (this.rangeCount == 1 && this.inMultiSelectMode) {\n var lastRange = this.rangeList.ranges.pop();\n removed.push(lastRange);\n this.rangeCount = 0;\n }\n for (var i = removed.length; i--;) {\n var index = this.ranges.indexOf(removed[i]);\n this.ranges.splice(index, 1);\n }\n this._signal(\"removeRange\", { ranges: removed });\n if (this.rangeCount === 0 && this.inMultiSelectMode) {\n this.inMultiSelectMode = false;\n this._signal(\"singleSelect\");\n this.session.$undoSelect = true;\n this.rangeList.detach(this.session);\n }\n lastRange = lastRange || this.ranges[0];\n if (lastRange && !lastRange.isEqual(this.getRange()))\n this.fromOrientedRange(lastRange);\n };\n this.$initRangeList = function () {\n if (this.rangeList)\n return;\n this.rangeList = new RangeList();\n this.ranges = [];\n this.rangeCount = 0;\n };\n this.getAllRanges = function () {\n return this.rangeCount ? this.rangeList.ranges.concat() : [this.getRange()];\n };\n this.splitIntoLines = function () {\n var ranges = this.ranges.length ? this.ranges : [this.getRange()];\n var newRanges = [];\n for (var i = 0; i < ranges.length; i++) {\n var range = ranges[i];\n var row = range.start.row;\n var endRow = range.end.row;\n if (row === endRow) {\n newRanges.push(range.clone());\n }\n else {\n newRanges.push(new Range(row, range.start.column, row, this.session.getLine(row).length));\n while (++row < endRow)\n newRanges.push(this.getLineRange(row, true));\n newRanges.push(new Range(endRow, 0, endRow, range.end.column));\n }\n if (i == 0 && !this.isBackwards())\n newRanges = newRanges.reverse();\n }\n this.toSingleRange();\n for (var i = newRanges.length; i--;)\n this.addRange(newRanges[i]);\n };\n this.joinSelections = function () {\n var ranges = this.rangeList.ranges;\n var lastRange = ranges[ranges.length - 1];\n var range = Range.fromPoints(ranges[0].start, lastRange.end);\n this.toSingleRange();\n this.setSelectionRange(range, lastRange.cursor == lastRange.start);\n };\n this.toggleBlockSelection = function () {\n if (this.rangeCount > 1) {\n var ranges = this.rangeList.ranges;\n var lastRange = ranges[ranges.length - 1];\n var range = Range.fromPoints(ranges[0].start, lastRange.end);\n this.toSingleRange();\n this.setSelectionRange(range, lastRange.cursor == lastRange.start);\n }\n else {\n var cursor = this.session.documentToScreenPosition(this.cursor);\n var anchor = this.session.documentToScreenPosition(this.anchor);\n var rectSel = this.rectangularRangeBlock(cursor, anchor);\n rectSel.forEach(this.addRange, this);\n }\n };\n this.rectangularRangeBlock = function (screenCursor, screenAnchor, includeEmptyLines) {\n var rectSel = [];\n var xBackwards = screenCursor.column < screenAnchor.column;\n if (xBackwards) {\n var startColumn = screenCursor.column;\n var endColumn = screenAnchor.column;\n var startOffsetX = screenCursor.offsetX;\n var endOffsetX = screenAnchor.offsetX;\n }\n else {\n var startColumn = screenAnchor.column;\n var endColumn = screenCursor.column;\n var startOffsetX = screenAnchor.offsetX;\n var endOffsetX = screenCursor.offsetX;\n }\n var yBackwards = screenCursor.row < screenAnchor.row;\n if (yBackwards) {\n var startRow = screenCursor.row;\n var endRow = screenAnchor.row;\n }\n else {\n var startRow = screenAnchor.row;\n var endRow = screenCursor.row;\n }\n if (startColumn < 0)\n startColumn = 0;\n if (startRow < 0)\n startRow = 0;\n if (startRow == endRow)\n includeEmptyLines = true;\n var docEnd;\n for (var row = startRow; row <= endRow; row++) {\n var range = Range.fromPoints(this.session.screenToDocumentPosition(row, startColumn, startOffsetX), this.session.screenToDocumentPosition(row, endColumn, endOffsetX));\n if (range.isEmpty()) {\n if (docEnd && isSamePoint(range.end, docEnd))\n break;\n docEnd = range.end;\n }\n range.cursor = xBackwards ? range.start : range.end;\n rectSel.push(range);\n }\n if (yBackwards)\n rectSel.reverse();\n if (!includeEmptyLines) {\n var end = rectSel.length - 1;\n while (rectSel[end].isEmpty() && end > 0)\n end--;\n if (end > 0) {\n var start = 0;\n while (rectSel[start].isEmpty())\n start++;\n }\n for (var i = end; i >= start; i--) {\n if (rectSel[i].isEmpty())\n rectSel.splice(i, 1);\n }\n }\n return rectSel;\n };\n}).call(Selection.prototype);\nvar Editor = require(\"./editor\").Editor;\n(function () {\n this.updateSelectionMarkers = function () {\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n this.addSelectionMarker = function (orientedRange) {\n if (!orientedRange.cursor)\n orientedRange.cursor = orientedRange.end;\n var style = this.getSelectionStyle();\n orientedRange.marker = this.session.addMarker(orientedRange, \"ace_selection\", style);\n this.session.$selectionMarkers.push(orientedRange);\n this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\n return orientedRange;\n };\n this.removeSelectionMarker = function (range) {\n if (!range.marker)\n return;\n this.session.removeMarker(range.marker);\n var index = this.session.$selectionMarkers.indexOf(range);\n if (index != -1)\n this.session.$selectionMarkers.splice(index, 1);\n this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\n };\n this.removeSelectionMarkers = function (ranges) {\n var markerList = this.session.$selectionMarkers;\n for (var i = ranges.length; i--;) {\n var range = ranges[i];\n if (!range.marker)\n continue;\n this.session.removeMarker(range.marker);\n var index = markerList.indexOf(range);\n if (index != -1)\n markerList.splice(index, 1);\n }\n this.session.selectionMarkerCount = markerList.length;\n };\n this.$onAddRange = function (e) {\n this.addSelectionMarker(e.range);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n this.$onRemoveRange = function (e) {\n this.removeSelectionMarkers(e.ranges);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n this.$onMultiSelect = function (e) {\n if (this.inMultiSelectMode)\n return;\n this.inMultiSelectMode = true;\n this.setStyle(\"ace_multiselect\");\n this.keyBinding.addKeyboardHandler(commands.keyboardHandler);\n this.commands.setDefaultHandler(\"exec\", this.$onMultiSelectExec);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n this.$onSingleSelect = function (e) {\n if (this.session.multiSelect.inVirtualMode)\n return;\n this.inMultiSelectMode = false;\n this.unsetStyle(\"ace_multiselect\");\n this.keyBinding.removeKeyboardHandler(commands.keyboardHandler);\n this.commands.removeDefaultHandler(\"exec\", this.$onMultiSelectExec);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n this._emit(\"changeSelection\");\n };\n this.$onMultiSelectExec = function (e) {\n var command = e.command;\n var editor = e.editor;\n if (!editor.multiSelect)\n return;\n if (!command.multiSelectAction) {\n var result = command.exec(editor, e.args || {});\n editor.multiSelect.addRange(editor.multiSelect.toOrientedRange());\n editor.multiSelect.mergeOverlappingRanges();\n }\n else if (command.multiSelectAction == \"forEach\") {\n result = editor.forEachSelection(command, e.args);\n }\n else if (command.multiSelectAction == \"forEachLine\") {\n result = editor.forEachSelection(command, e.args, true);\n }\n else if (command.multiSelectAction == \"single\") {\n editor.exitMultiSelectMode();\n result = command.exec(editor, e.args || {});\n }\n else {\n result = command.multiSelectAction(editor, e.args || {});\n }\n return result;\n };\n this.forEachSelection = function (cmd, args, options) {\n if (this.inVirtualSelectionMode)\n return;\n var keepOrder = options && options.keepOrder;\n var $byLines = options == true || options && options.$byLines;\n var session = this.session;\n var selection = this.selection;\n var rangeList = selection.rangeList;\n var ranges = (keepOrder ? selection : rangeList).ranges;\n var result;\n if (!ranges.length)\n return cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\n var reg = selection._eventRegistry;\n selection._eventRegistry = {};\n var tmpSel = new Selection(session);\n this.inVirtualSelectionMode = true;\n for (var i = ranges.length; i--;) {\n if ($byLines) {\n while (i > 0 && ranges[i].start.row == ranges[i - 1].end.row)\n i--;\n }\n tmpSel.fromOrientedRange(ranges[i]);\n tmpSel.index = i;\n this.selection = session.selection = tmpSel;\n var cmdResult = cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\n if (!result && cmdResult !== undefined)\n result = cmdResult;\n tmpSel.toOrientedRange(ranges[i]);\n }\n tmpSel.detach();\n this.selection = session.selection = selection;\n this.inVirtualSelectionMode = false;\n selection._eventRegistry = reg;\n selection.mergeOverlappingRanges();\n if (selection.ranges[0])\n selection.fromOrientedRange(selection.ranges[0]);\n var anim = this.renderer.$scrollAnimation;\n this.onCursorChange();\n this.onSelectionChange();\n if (anim && anim.from == anim.to)\n this.renderer.animateScrolling(anim.from);\n return result;\n };\n this.exitMultiSelectMode = function () {\n if (!this.inMultiSelectMode || this.inVirtualSelectionMode)\n return;\n this.multiSelect.toSingleRange();\n };\n this.getSelectedText = function () {\n var text = \"\";\n if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\n var ranges = this.multiSelect.rangeList.ranges;\n var buf = [];\n for (var i = 0; i < ranges.length; i++) {\n buf.push(this.session.getTextRange(ranges[i]));\n }\n var nl = this.session.getDocument().getNewLineCharacter();\n text = buf.join(nl);\n if (text.length == (buf.length - 1) * nl.length)\n text = \"\";\n }\n else if (!this.selection.isEmpty()) {\n text = this.session.getTextRange(this.getSelectionRange());\n }\n return text;\n };\n this.$checkMultiselectChange = function (e, anchor) {\n if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\n var range = this.multiSelect.ranges[0];\n if (this.multiSelect.isEmpty() && anchor == this.multiSelect.anchor)\n return;\n var pos = anchor == this.multiSelect.anchor\n ? range.cursor == range.start ? range.end : range.start\n : range.cursor;\n if (pos.row != anchor.row\n || this.session.$clipPositionToDocument(pos.row, pos.column).column != anchor.column)\n this.multiSelect.toSingleRange(this.multiSelect.toOrientedRange());\n else\n this.multiSelect.mergeOverlappingRanges();\n }\n };\n this.findAll = function (needle, options, additive) {\n options = options || {};\n options.needle = needle || options.needle;\n if (options.needle == undefined) {\n var range = this.selection.isEmpty()\n ? this.selection.getWordRange()\n : this.selection.getRange();\n options.needle = this.session.getTextRange(range);\n }\n this.$search.set(options);\n var ranges = this.$search.findAll(this.session);\n if (!ranges.length)\n return 0;\n var selection = this.multiSelect;\n if (!additive)\n selection.toSingleRange(ranges[0]);\n for (var i = ranges.length; i--;)\n selection.addRange(ranges[i], true);\n if (range && selection.rangeList.rangeAtPoint(range.start))\n selection.addRange(range, true);\n return ranges.length;\n };\n this.selectMoreLines = function (dir, skip) {\n var range = this.selection.toOrientedRange();\n var isBackwards = range.cursor == range.end;\n var screenLead = this.session.documentToScreenPosition(range.cursor);\n if (this.selection.$desiredColumn)\n screenLead.column = this.selection.$desiredColumn;\n var lead = this.session.screenToDocumentPosition(screenLead.row + dir, screenLead.column);\n if (!range.isEmpty()) {\n var screenAnchor = this.session.documentToScreenPosition(isBackwards ? range.end : range.start);\n var anchor = this.session.screenToDocumentPosition(screenAnchor.row + dir, screenAnchor.column);\n }\n else {\n var anchor = lead;\n }\n if (isBackwards) {\n var newRange = Range.fromPoints(lead, anchor);\n newRange.cursor = newRange.start;\n }\n else {\n var newRange = Range.fromPoints(anchor, lead);\n newRange.cursor = newRange.end;\n }\n newRange.desiredColumn = screenLead.column;\n if (!this.selection.inMultiSelectMode) {\n this.selection.addRange(range);\n }\n else {\n if (skip)\n var toRemove = range.cursor;\n }\n this.selection.addRange(newRange);\n if (toRemove)\n this.selection.substractPoint(toRemove);\n };\n this.transposeSelections = function (dir) {\n var session = this.session;\n var sel = session.multiSelect;\n var all = sel.ranges;\n for (var i = all.length; i--;) {\n var range = all[i];\n if (range.isEmpty()) {\n var tmp_1 = session.getWordRange(range.start.row, range.start.column);\n range.start.row = tmp_1.start.row;\n range.start.column = tmp_1.start.column;\n range.end.row = tmp_1.end.row;\n range.end.column = tmp_1.end.column;\n }\n }\n sel.mergeOverlappingRanges();\n var words = [];\n for (var i = all.length; i--;) {\n var range = all[i];\n words.unshift(session.getTextRange(range));\n }\n if (dir < 0)\n words.unshift(words.pop());\n else\n words.push(words.shift());\n for (var i = all.length; i--;) {\n var range = all[i];\n var tmp = range.clone();\n session.replace(range, words[i]);\n range.start.row = tmp.start.row;\n range.start.column = tmp.start.column;\n }\n sel.fromOrientedRange(sel.ranges[0]);\n };\n this.selectMore = function (dir, skip, stopAtFirst) {\n var session = this.session;\n var sel = session.multiSelect;\n var range = sel.toOrientedRange();\n if (range.isEmpty()) {\n range = session.getWordRange(range.start.row, range.start.column);\n range.cursor = dir == -1 ? range.start : range.end;\n this.multiSelect.addRange(range);\n if (stopAtFirst)\n return;\n }\n var needle = session.getTextRange(range);\n var newRange = find(session, needle, dir);\n if (newRange) {\n newRange.cursor = dir == -1 ? newRange.start : newRange.end;\n this.session.unfold(newRange);\n this.multiSelect.addRange(newRange);\n this.renderer.scrollCursorIntoView(null, 0.5);\n }\n if (skip)\n this.multiSelect.substractPoint(range.cursor);\n };\n this.alignCursors = function () {\n var session = this.session;\n var sel = session.multiSelect;\n var ranges = sel.ranges;\n var row = -1;\n var sameRowRanges = ranges.filter(function (r) {\n if (r.cursor.row == row)\n return true;\n row = r.cursor.row;\n });\n if (!ranges.length || sameRowRanges.length == ranges.length - 1) {\n var range = this.selection.getRange();\n var fr = range.start.row, lr = range.end.row;\n var guessRange = fr == lr;\n if (guessRange) {\n var max = this.session.getLength();\n var line;\n do {\n line = this.session.getLine(lr);\n } while (/[=:]/.test(line) && ++lr < max);\n do {\n line = this.session.getLine(fr);\n } while (/[=:]/.test(line) && --fr > 0);\n if (fr < 0)\n fr = 0;\n if (lr >= max)\n lr = max - 1;\n }\n var lines = this.session.removeFullLines(fr, lr);\n lines = this.$reAlignText(lines, guessRange);\n this.session.insert({ row: fr, column: 0 }, lines.join(\"\\n\") + \"\\n\");\n if (!guessRange) {\n range.start.column = 0;\n range.end.column = lines[lines.length - 1].length;\n }\n this.selection.setRange(range);\n }\n else {\n sameRowRanges.forEach(function (r) {\n sel.substractPoint(r.cursor);\n });\n var maxCol = 0;\n var minSpace = Infinity;\n var spaceOffsets = ranges.map(function (r) {\n var p = r.cursor;\n var line = session.getLine(p.row);\n var spaceOffset = line.substr(p.column).search(/\\S/g);\n if (spaceOffset == -1)\n spaceOffset = 0;\n if (p.column > maxCol)\n maxCol = p.column;\n if (spaceOffset < minSpace)\n minSpace = spaceOffset;\n return spaceOffset;\n });\n ranges.forEach(function (r, i) {\n var p = r.cursor;\n var l = maxCol - p.column;\n var d = spaceOffsets[i] - minSpace;\n if (l > d)\n session.insert(p, lang.stringRepeat(\" \", l - d));\n else\n session.remove(new Range(p.row, p.column, p.row, p.column - l + d));\n r.start.column = r.end.column = maxCol;\n r.start.row = r.end.row = p.row;\n r.cursor = r.end;\n });\n sel.fromOrientedRange(ranges[0]);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n }\n };\n this.$reAlignText = function (lines, forceLeft) {\n var isLeftAligned = true, isRightAligned = true;\n var startW, textW, endW;\n return lines.map(function (line) {\n var m = line.match(/(\\s*)(.*?)(\\s*)([=:].*)/);\n if (!m)\n return [line];\n if (startW == null) {\n startW = m[1].length;\n textW = m[2].length;\n endW = m[3].length;\n return m;\n }\n if (startW + textW + endW != m[1].length + m[2].length + m[3].length)\n isRightAligned = false;\n if (startW != m[1].length)\n isLeftAligned = false;\n if (startW > m[1].length)\n startW = m[1].length;\n if (textW < m[2].length)\n textW = m[2].length;\n if (endW > m[3].length)\n endW = m[3].length;\n return m;\n }).map(forceLeft ? alignLeft :\n isLeftAligned ? isRightAligned ? alignRight : alignLeft : unAlign);\n function spaces(n) {\n return lang.stringRepeat(\" \", n);\n }\n function alignLeft(m) {\n return !m[2] ? m[0] : spaces(startW) + m[2]\n + spaces(textW - m[2].length + endW)\n + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n function alignRight(m) {\n return !m[2] ? m[0] : spaces(startW + textW - m[2].length) + m[2]\n + spaces(endW)\n + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n function unAlign(m) {\n return !m[2] ? m[0] : spaces(startW) + m[2]\n + spaces(endW)\n + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n };\n}).call(Editor.prototype);\nfunction isSamePoint(p1, p2) {\n return p1.row == p2.row && p1.column == p2.column;\n}\nexports.onSessionChange = function (e) {\n var session = e.session;\n if (session && !session.multiSelect) {\n session.$selectionMarkers = [];\n session.selection.$initRangeList();\n session.multiSelect = session.selection;\n }\n this.multiSelect = session && session.multiSelect;\n var oldSession = e.oldSession;\n if (oldSession) {\n oldSession.multiSelect.off(\"addRange\", this.$onAddRange);\n oldSession.multiSelect.off(\"removeRange\", this.$onRemoveRange);\n oldSession.multiSelect.off(\"multiSelect\", this.$onMultiSelect);\n oldSession.multiSelect.off(\"singleSelect\", this.$onSingleSelect);\n oldSession.multiSelect.lead.off(\"change\", this.$checkMultiselectChange);\n oldSession.multiSelect.anchor.off(\"change\", this.$checkMultiselectChange);\n }\n if (session) {\n session.multiSelect.on(\"addRange\", this.$onAddRange);\n session.multiSelect.on(\"removeRange\", this.$onRemoveRange);\n session.multiSelect.on(\"multiSelect\", this.$onMultiSelect);\n session.multiSelect.on(\"singleSelect\", this.$onSingleSelect);\n session.multiSelect.lead.on(\"change\", this.$checkMultiselectChange);\n session.multiSelect.anchor.on(\"change\", this.$checkMultiselectChange);\n }\n if (session && this.inMultiSelectMode != session.selection.inMultiSelectMode) {\n if (session.selection.inMultiSelectMode)\n this.$onMultiSelect();\n else\n this.$onSingleSelect();\n }\n};\nfunction MultiSelect(editor) {\n if (editor.$multiselectOnSessionChange)\n return;\n editor.$onAddRange = editor.$onAddRange.bind(editor);\n editor.$onRemoveRange = editor.$onRemoveRange.bind(editor);\n editor.$onMultiSelect = editor.$onMultiSelect.bind(editor);\n editor.$onSingleSelect = editor.$onSingleSelect.bind(editor);\n editor.$multiselectOnSessionChange = exports.onSessionChange.bind(editor);\n editor.$checkMultiselectChange = editor.$checkMultiselectChange.bind(editor);\n editor.$multiselectOnSessionChange(editor);\n editor.on(\"changeSession\", editor.$multiselectOnSessionChange);\n editor.on(\"mousedown\", onMouseDown);\n editor.commands.addCommands(commands.defaultCommands);\n addAltCursorListeners(editor);\n}\nfunction addAltCursorListeners(editor) {\n if (!editor.textInput)\n return;\n var el = editor.textInput.getElement();\n var altCursor = false;\n event.addListener(el, \"keydown\", function (e) {\n var altDown = e.keyCode == 18 && !(e.ctrlKey || e.shiftKey || e.metaKey);\n if (editor.$blockSelectEnabled && altDown) {\n if (!altCursor) {\n editor.renderer.setMouseCursor(\"crosshair\");\n altCursor = true;\n }\n }\n else if (altCursor) {\n reset();\n }\n }, editor);\n event.addListener(el, \"keyup\", reset, editor);\n event.addListener(el, \"blur\", reset, editor);\n function reset(e) {\n if (altCursor) {\n editor.renderer.setMouseCursor(\"\");\n altCursor = false;\n }\n }\n}\nexports.MultiSelect = MultiSelect;\nrequire(\"./config\").defineOptions(Editor.prototype, \"editor\", {\n enableMultiselect: {\n set: function (val) {\n MultiSelect(this);\n if (val) {\n this.on(\"mousedown\", onMouseDown);\n }\n else {\n this.off(\"mousedown\", onMouseDown);\n }\n },\n value: true\n },\n enableBlockSelect: {\n set: function (val) {\n this.$blockSelectEnabled = val;\n },\n value: true\n }\n});\n\n});\n\nace.define(\"ace/mode/folding/fold_mode\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../../range\").Range;\nvar FoldMode = exports.FoldMode = function () { };\n(function () {\n this.foldingStartMarker = null;\n this.foldingStopMarker = null;\n this.getFoldWidget = function (session, foldStyle, row) {\n var line = session.getLine(row);\n if (this.foldingStartMarker.test(line))\n return \"start\";\n if (foldStyle == \"markbeginend\"\n && this.foldingStopMarker\n && this.foldingStopMarker.test(line))\n return \"end\";\n return \"\";\n };\n this.getFoldWidgetRange = function (session, foldStyle, row) {\n return null;\n };\n this.indentationBlock = function (session, row, column) {\n var re = /\\S/;\n var line = session.getLine(row);\n var startLevel = line.search(re);\n if (startLevel == -1)\n return;\n var startColumn = column || line.length;\n var maxRow = session.getLength();\n var startRow = row;\n var endRow = row;\n while (++row < maxRow) {\n var level = session.getLine(row).search(re);\n if (level == -1)\n continue;\n if (level <= startLevel) {\n var token = session.getTokenAt(row, 0);\n if (!token || token.type !== \"string\")\n break;\n }\n endRow = row;\n }\n if (endRow > startRow) {\n var endColumn = session.getLine(endRow).length;\n return new Range(startRow, startColumn, endRow, endColumn);\n }\n };\n this.openingBracketBlock = function (session, bracket, row, column, typeRe) {\n var start = { row: row, column: column + 1 };\n var end = session.$findClosingBracket(bracket, start, typeRe);\n if (!end)\n return;\n var fw = session.foldWidgets[end.row];\n if (fw == null)\n fw = session.getFoldWidget(end.row);\n if (fw == \"start\" && end.row > start.row) {\n end.row--;\n end.column = session.getLine(end.row).length;\n }\n return Range.fromPoints(start, end);\n };\n this.closingBracketBlock = function (session, bracket, row, column, typeRe) {\n var end = { row: row, column: column };\n var start = session.$findOpeningBracket(bracket, end);\n if (!start)\n return;\n start.column++;\n end.column--;\n return Range.fromPoints(start, end);\n };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/ext/error_marker\",[\"require\",\"exports\",\"module\",\"ace/line_widgets\",\"ace/lib/dom\",\"ace/range\",\"ace/config\"], function(require, exports, module){\"use strict\";\nvar LineWidgets = require(\"../line_widgets\").LineWidgets;\nvar dom = require(\"../lib/dom\");\nvar Range = require(\"../range\").Range;\nvar nls = require(\"../config\").nls;\nfunction binarySearch(array, needle, comparator) {\n var first = 0;\n var last = array.length - 1;\n while (first <= last) {\n var mid = (first + last) >> 1;\n var c = comparator(needle, array[mid]);\n if (c > 0)\n first = mid + 1;\n else if (c < 0)\n last = mid - 1;\n else\n return mid;\n }\n return -(first + 1);\n}\nfunction findAnnotations(session, row, dir) {\n var annotations = session.getAnnotations().sort(Range.comparePoints);\n if (!annotations.length)\n return;\n var i = binarySearch(annotations, { row: row, column: -1 }, Range.comparePoints);\n if (i < 0)\n i = -i - 1;\n if (i >= annotations.length)\n i = dir > 0 ? 0 : annotations.length - 1;\n else if (i === 0 && dir < 0)\n i = annotations.length - 1;\n var annotation = annotations[i];\n if (!annotation || !dir)\n return;\n if (annotation.row === row) {\n do {\n annotation = annotations[i += dir];\n } while (annotation && annotation.row === row);\n if (!annotation)\n return annotations.slice();\n }\n var matched = [];\n row = annotation.row;\n do {\n matched[dir < 0 ? \"unshift\" : \"push\"](annotation);\n annotation = annotations[i += dir];\n } while (annotation && annotation.row == row);\n return matched.length && matched;\n}\nexports.showErrorMarker = function (editor, dir) {\n var session = editor.session;\n if (!session.widgetManager) {\n session.widgetManager = new LineWidgets(session);\n session.widgetManager.attach(editor);\n }\n var pos = editor.getCursorPosition();\n var row = pos.row;\n var oldWidget = session.widgetManager.getWidgetsAtRow(row).filter(function (w) {\n return w.type == \"errorMarker\";\n })[0];\n if (oldWidget) {\n oldWidget.destroy();\n }\n else {\n row -= dir;\n }\n var annotations = findAnnotations(session, row, dir);\n var gutterAnno;\n if (annotations) {\n var annotation = annotations[0];\n pos.column = (annotation.pos && typeof annotation.column != \"number\"\n ? annotation.pos.sc\n : annotation.column) || 0;\n pos.row = annotation.row;\n gutterAnno = editor.renderer.$gutterLayer.$annotations[pos.row];\n }\n else if (oldWidget) {\n return;\n }\n else {\n gutterAnno = {\n displayText: [nls(\"error-marker.good-state\", \"Looks good!\")],\n className: \"ace_ok\"\n };\n }\n editor.session.unfold(pos.row);\n editor.selection.moveToPosition(pos);\n var w = {\n row: pos.row,\n fixedWidth: true,\n coverGutter: true,\n el: dom.createElement(\"div\"),\n type: \"errorMarker\"\n };\n var el = w.el.appendChild(dom.createElement(\"div\"));\n var arrow = w.el.appendChild(dom.createElement(\"div\"));\n arrow.className = \"error_widget_arrow \" + gutterAnno.className;\n var left = editor.renderer.$cursorLayer\n .getPixelPosition(pos).left;\n arrow.style.left = left + editor.renderer.gutterWidth - 5 + \"px\";\n w.el.className = \"error_widget_wrapper\";\n el.className = \"error_widget \" + gutterAnno.className;\n gutterAnno.displayText.forEach(function (annoTextLine, i) {\n el.appendChild(dom.createTextNode(annoTextLine));\n if (i < gutterAnno.displayText.length - 1) {\n el.appendChild(dom.createElement(\"br\"));\n }\n });\n el.appendChild(dom.createElement(\"div\"));\n var kb = function (_, hashId, keyString) {\n if (hashId === 0 && (keyString === \"esc\" || keyString === \"return\")) {\n w.destroy();\n return { command: \"null\" };\n }\n };\n w.destroy = function () {\n if (editor.$mouseHandler.isMousePressed)\n return;\n editor.keyBinding.removeKeyboardHandler(kb);\n session.widgetManager.removeLineWidget(w);\n editor.off(\"changeSelection\", w.destroy);\n editor.off(\"changeSession\", w.destroy);\n editor.off(\"mouseup\", w.destroy);\n editor.off(\"change\", w.destroy);\n };\n editor.keyBinding.addKeyboardHandler(kb);\n editor.on(\"changeSelection\", w.destroy);\n editor.on(\"changeSession\", w.destroy);\n editor.on(\"mouseup\", w.destroy);\n editor.on(\"change\", w.destroy);\n editor.session.widgetManager.addLineWidget(w);\n w.el.onmousedown = editor.focus.bind(editor);\n editor.renderer.scrollCursorIntoView(null, 0.5, { bottom: w.el.offsetHeight });\n};\ndom.importCssString(\"\\n .error_widget_wrapper {\\n background: inherit;\\n color: inherit;\\n border:none\\n }\\n .error_widget {\\n border-top: solid 2px;\\n border-bottom: solid 2px;\\n margin: 5px 0;\\n padding: 10px 40px;\\n white-space: pre-wrap;\\n }\\n .error_widget.ace_error, .error_widget_arrow.ace_error{\\n border-color: #ff5a5a\\n }\\n .error_widget.ace_warning, .error_widget_arrow.ace_warning{\\n border-color: #F1D817\\n }\\n .error_widget.ace_info, .error_widget_arrow.ace_info{\\n border-color: #5a5a5a\\n }\\n .error_widget.ace_ok, .error_widget_arrow.ace_ok{\\n border-color: #5aaa5a\\n }\\n .error_widget_arrow {\\n position: absolute;\\n border: solid 5px;\\n border-top-color: transparent!important;\\n border-right-color: transparent!important;\\n border-left-color: transparent!important;\\n top: -5px;\\n }\\n\", \"error_marker.css\", false);\n\n});\n\nace.define(\"ace/ace\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/range\",\"ace/editor\",\"ace/edit_session\",\"ace/undomanager\",\"ace/virtual_renderer\",\"ace/worker/worker_client\",\"ace/keyboard/hash_handler\",\"ace/placeholder\",\"ace/multi_select\",\"ace/mode/folding/fold_mode\",\"ace/theme/textmate\",\"ace/ext/error_marker\",\"ace/config\",\"ace/loader_build\"], function(require, exports, module){/**\n * The main class required to set up an Ace instance in the browser.\n *\n * @namespace Ace\n **/\n\"use strict\";\nrequire(\"./loader_build\")(exports)\nvar dom = require(\"./lib/dom\");\nvar Range = require(\"./range\").Range;\nvar Editor = require(\"./editor\").Editor;\nvar EditSession = require(\"./edit_session\").EditSession;\nvar UndoManager = require(\"./undomanager\").UndoManager;\nvar Renderer = require(\"./virtual_renderer\").VirtualRenderer;\nrequire(\"./worker/worker_client\");\nrequire(\"./keyboard/hash_handler\");\nrequire(\"./placeholder\");\nrequire(\"./multi_select\");\nrequire(\"./mode/folding/fold_mode\");\nrequire(\"./theme/textmate\");\nrequire(\"./ext/error_marker\");\nexports.config = require(\"./config\");\nexports.edit = function (el, options) {\n if (typeof el == \"string\") {\n var _id = el;\n el = document.getElementById(_id);\n if (!el)\n throw new Error(\"ace.edit can't find div #\" + _id);\n }\n if (el && el.env && el.env.editor instanceof Editor)\n return el.env.editor;\n var value = \"\";\n if (el && /input|textarea/i.test(el.tagName)) {\n var oldNode = el;\n value = oldNode.value;\n el = dom.createElement(\"pre\");\n oldNode.parentNode.replaceChild(el, oldNode);\n }\n else if (el) {\n value = el.textContent;\n el.innerHTML = \"\";\n }\n var doc = exports.createEditSession(value);\n var editor = new Editor(new Renderer(el), doc, options);\n var env = {\n document: doc,\n editor: editor,\n onResize: editor.resize.bind(editor, null)\n };\n if (oldNode)\n env.textarea = oldNode;\n editor.on(\"destroy\", function () {\n env.editor.container.env = null; // prevent memory leak on old ie\n });\n editor.container.env = editor.env = env;\n return editor;\n};\nexports.createEditSession = function (text, mode) {\n var doc = new EditSession(text, mode);\n doc.setUndoManager(new UndoManager());\n return doc;\n};\nexports.Range = Range;\nexports.Editor = Editor;\nexports.EditSession = EditSession;\nexports.UndoManager = UndoManager;\nexports.VirtualRenderer = Renderer;\nexports.version = exports.config.version;\n\n}); (function() {\n ace.require([\"ace/ace\"], function(a) {\n if (a) {\n a.config.init(true);\n a.define = ace.define;\n }\n var global = (function () {\n return this;\n })();\n if (!global && typeof window != \"undefined\") global = window; // can happen in strict mode\n if (!global && typeof self != \"undefined\") global = self; // can happen in webworker\n \n if (!global.ace)\n global.ace = a;\n for (var key in a) if (a.hasOwnProperty(key))\n global.ace[key] = a[key];\n global.ace[\"default\"] = global.ace;\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = global.ace;\n }\n });\n })();\n "],"names":["ace","define","e","t","n","p","Date","toLocaleString","length","r","i","s","EventEmitter","o","u","Range","a","RangeList","f","HashHandler","l","Tokenizer","c","h","CURRENT_WORD","session","getTextRange","getWordRange","SELECTION","replace","CURRENT_LINE","getLine","getCursorPosition","row","PREV_LINE","LINE_INDEX","LINE_NUMBER","SOFT_TABS","getUseSoftTabs","TAB_SIZE","getTabSize","CLIPBOARD","getText","FILENAME","exec","this","FILEPATH","FILENAME_BASE","DIRECTORY","WORKSPACE_NAME","FULLNAME","BLOCK_COMMENT_START","$mode","blockComment","start","BLOCK_COMMENT_END","end","LINE_COMMENT","lineCommentStart","CURRENT_YEAR","bind","year","CURRENT_YEAR_SHORT","CURRENT_MONTH","month","CURRENT_MONTH_NAME","CURRENT_MONTH_NAME_SHORT","CURRENT_DATE","day","CURRENT_DAY_NAME","weekday","CURRENT_DAY_NAME_SHORT","CURRENT_HOUR","hour","hour12","CURRENT_MINUTE","minute","CURRENT_SECOND","second","SELECTED_TEXT","d","snippetMap","snippetNameMap","variables","prototype","getTokenizer","$tokenizer","createTokenizer","substr","test","tabstopId","parseInt","text","regex","onMatch","fmtString","guard","slice","flag","next","indexOf","shift","unshift","token","merge","snippetVar","split","map","value","choices","formatString","expectElse","ifEnd","elseEnd","changeCase","local","formatStringVar","formatFunction","tokenizeTmSnippet","getLineTokens","tokens","getVariableValue","__","hasOwnProperty","tmStrFormat","fmt","RegExp","call","arguments","resolveVariables","toUpperCase","toLowerCase","join","tmFormatFunction","push","getDisplayTextForSnippet","v","insertSnippetForSelection","getSelectionRange","m","inVirtualSelectionMode","selection","index","addTabstops","tabstops","insertSnippet","forEachSelection","keepOrder","tabstopManager","tabNext","$getScope","$id","pop","inlinePhp","getState","substring","getActiveScopes","includeScopes","apply","expandWithTab","expandSnippetForSelection","column","some","findMatchingSnippet","dryRun","doc","removeInLine","replaceBefore","replaceAfter","M__","matchBefore","T__","matchAfter","content","startRe","endRe","triggerRe","endTriggerRe","register","scope","name","unregister","prefix","tabTrigger","body","Array","isArray","trigger","escapeRegExp","endTrigger","endGuard","forEach","Object","keys","_signal","splice","parseSnippetFile","JSON","parse","match","getSnippetByName","implement","lastIndexOf","getTabString","excludeExtraIndent","parents","Math","max","concat","g","y","b","ranges","$onChange","onChange","$onChangeSelection","delayedCall","onChangeSelection","schedule","$onChangeSession","onChangeSession","$onAfterExec","onAfterExec","attach","$openTabstops","selectedTabstop","editor","on","commands","keyBinding","addKeyboardHandler","keyboardHandler","detach","removeTabstopMarkers","off","removeKeyboardHandler","action","rangeList","$bias","pointIndex","removeRange","$inChange","getLength","getValue","updateLinkedFields","hasLinkedRanges","firstNonLinked","linked","original","snippetManager","command","readOnly","lead","anchor","isEmpty","contains","min","selectTabstop","updateTabstopMarkers","addTabstopMarkers","cursor","fromOrientedRange","multiSelect","toSingleRange","addRange","clone","execCommand","matches","useLink","getOption","fromPoints","snippetId","tabstop","addList","markerId","addMarker","removeMarker","bindKeys","Tab","renderer","scrollCursorIntoView","Esc","importCssString","Editor","expandSnippet","VirtualRenderer","nls","isSafari","$maxLines","setHighlightActiveLine","setShowPrintMargin","setShowGutter","setHighlightGutterLine","$mouseHandler","$focusTimeout","$highlightTagPending","createElement","appendChild","style","display","setStyle","$textLayer","element","setAttribute","textarea","setOption","focus","$isFocused","$cursorLayer","restartTimer","opacity","$keepTextAreaAtCursor","highlight","$searchHighlight","clazz","getDocumentPosition","moveToPosition","stop","Infinity","id","setSelectOnHover","x","scrollTop","isMouseOver","setRow","$pos","getRow","childNodes","config","firstRow","document","activeElement","selectedNode","removeCssClass","removeAttribute","addCssClass","getData","caption","data","_emit","getHoveredRow","addListener","container","bgTokenizer","$tokenizeRow","type","className","filterText","matchMask","meta","message","$updateOnChange","$computeWidth","screenWidth","isOpen","isTopdown","autoSelect","setData","setValue","stringRepeat","clearSelection","moveCursorTo","hide","anchorPos","tryShow","top","left","window","innerHeight","innerWidth","bottom","$borderSize","$maxPixelHeight","offsetWidth","right","show","undefined","goTo","getTextLeftOffset","$padding","$imageSize","AcePopup","$singleLineEditor","getAriaId","screenReaderDiv","classList","add","setScreenReaderContent","popup","completer","_lines","firstChild","removeChild","createCodeBlock","destroy","remove","createTextNode","AceInlineScreenReader","inlineScreenReader","snippet","hideInlinePreview","startsWith","removeGhostText","setGhostText","$ghostText","AceInline","parForEach","retrievePrecedingIdentifier","reverse","retrieveFollowingIdentifier","getCompletionPrefix","completers","identifierRegexps","triggerAutocomplete","getPrecedingCharacter","triggerCharacters","includes","preventParentScroll","autoInsert","autoShown","exactMatch","inlineEnabled","parentNode","hasSeen","Set","showLoadingState","stickySelectionDelay","blurListener","changeListener","mousedownListener","mousewheelListener","onLayoutChange","changeTimer","updateCompletions","tooltipTimer","updateDocTooltip","popupTimer","$updatePopupPosition","stickySelectionTimer","stickySelection","$firstOpenTimer","completionProvider","initialPosition","completions","completionsForLoading","openPopup","defineProperty","get","enumerable","configurable","$init","documentElement","insertMatch","$onPopupShow","$onHidePopup","$onPopupChange","mouseOutListener","$onPopupRender","$initInline","inlineRenderer","getPopup","hideDocTooltip","cancel","$seen","has","onSeen","$updateGhostText","base","filtered","getFirstVisibleRow","getLastVisibleRow","observeLayoutChanges","$elements","addEventListener","passive","unObserveLayoutChanges","removeEventListener","layerConfig","lineHeight","getPixelPosition","getBoundingClientRect","offset","scrollLeft","gutterWidth","$ghostTextWidget","position","el","offsetHeight","textInput","setAriaOptions","activeDescendant","inline","setTheme","getTheme","setFontSize","getFontSize","tooltipNode","activated","getElement","relatedTarget","getCompletionProvider","showPopup","gatherCompletions","setFilter","createAnchor","$insertRight","getSession","ignoreCaption","pos","provideCompletions","emptyMessage","delay","cancelContextMenu","getDocTooltip","completerId","docText","docHTML","showDocTooltip","margin","pointerEvents","overscrollBehavior","tabIndex","onblur","onclick","onTooltipClick","theme","isDark","cssClass","innerHTML","textContent","offsetTop","isFocused","target","nodeName","href","rel","Up","Down","Return","deleteSuffix","Backspace","PageUp","gotoPageUp","PageDown","gotoPageDown","for","$sharedInstance","once","startCommand","bindKey","active","insertByIndex","startOperation","range","getAllRanges","$insertString","onInsert","endOperation","getCompletions","assign","finished","all","filterCompletions","sort","$score","localeCompare","filter","score","Autocomplete","CompletionProvider","FilteredList","create","abs","getTokenAt","escapeHTML","setCompleters","addCompleter","textCompleter","keyWordCompleter","snippetCompleter","$modes","files","snippetFileId","modes","loadModule","snippets","snippetText","$liveAutocompletionDelay","w","args","$liveAutocompletionThreshold","E","defineOptions","enableBasicAutocompletion","set","addCommand","removeCommand","enableLiveAutocompletion","liveAutocompletionDelay","initialValue","liveAutocompletionThreshold","enableSnippets","require","module","exports","activeInput","buildDom","placeholder","spellcheck","title","setSession","setEditor","searchBox","scroller","searchRange","$syncOptions","$initElements","querySelector","replaceBox","searchOption","replaceOption","regExpOption","caseSensitiveOption","wholeWordOption","searchInput","replaceInput","searchCounter","setTimeout","stopPropagation","srcElement","getAttribute","$searchBarKb","addCommandKeyListener","keyCodeToString","findKeyCommand","stopEvent","find","setSearchRange","searchRangeMarker","setCssClass","checked","getReadOnly","$search","$options","re","updateBackMarkers","skipCurrent","backwards","wrap","regExp","caseSensitive","wholeWord","preventScroll","updateCounter","unicode","positionToIndex","lastIndex","skipEmptyMatch","findNext","findPrev","findAll","replaceAndFindNext","replaceAll","$closeSearchBarKb","select","isReplace","esc","addCommands","win","mac","SearchBox","Search","TextHighlightRules","constantOtherSymbol","qString","qqString","tString","constantNumericHex","constantNumericBinary","constantNumericDecimal","constantNumericOctal","constantNumericRational","constantNumericComplex","constantNumericFloat","instanceVariable","$keywords","createKeywordMapper","keyword","$rules","defaultToken","stateName","splitRegex","rules","heredoc","indentedHeredoc","comment","qStateWithInterpolation","qStateWithoutInterpolation","sStateWithoutInterpolation","sStateWithInterpolation","rState","include","regex_character_class","normalizeRules","inherits","RubyHighlightRules","checkOutdent","autoOutdent","findMatchingBracket","$getIndent","MatchingBraceOutdent","FoldMode","TokenIterator","indentKeywords","def","unless","until","begin","elsif","rescue","ensure","when","foldingStartMarker","foldingStopMarker","getFoldWidget","getFoldWidgetRange","rubyBlock","openingBracketBlock","closingBracketBlock","getCurrentToken","getCurrentTokenRange","step","stepBackward","stepForward","getCurrentTokenRow","$tokenIndex","$rowTokens","Mode","HighlightRules","$outdent","$behaviour","$defaultBehaviour","foldingRules","getNextLineIndent","getMatching","cssText","ACE_NAMESPACE","global","requirejs","deps","payload","modules","payloads","console","error","trace","_require","parentId","callback","lookup","toString","params","dep","packagedModule","normalizeModule","moduleName","chunks","charAt","previous","mod","uri","packaged","req","returnValue","exportAce","ns","root","defineProp","obj","val","writable","String","searchString","endsWith","subjectString","repeat","count","result","string","str","TypeError","output","source","key","values","k","predicate","len","thisArg","kValue","findIndex","item","fill","O","relativeStart","relativeEnd","final","of","deepCopy","copy","last","stringReverse","trimBeginRegexp","trimEndRegexp","stringTrimLeft","stringTrimRight","copyObject","copyArray","array","arrayToMap","arr","createMap","props","arrayRemove","getMatchOffsets","deferredCall","fcn","timer","deferred","timeout","clearTimeout","isPending","defaultTimeout","_self","supportsLookbehind","line","supportsUnicodeFlag","codePointAt","OS","LINUX","MAC","WINDOWS","getOS","isMac","isLinux","_navigator","navigator","os","platform","ua","userAgent","appName","isWin","isIE","parseFloat","isOldIE","isGecko","isMozilla","isOpera","opera","isWebKit","isChrome","isEdge","isAIR","isAndroid","isChromeOS","isIOS","isMobile","strictCSP","useragent","XHTML_NS","parent","refs","txt","els","ch","options","childIndex","getDocumentHead","head","getElementsByTagName","tag","createElementNS","removeChildren","ownerDocument","createFragment","createDocumentFragment","hasCssClass","classes","toggleCssClass","node","hasCssString","sheets","querySelectorAll","removeElementById","getElementById","cssCache","insertPendingStyles","cache","getRootNode","insertBefore","useStrictCSP","importCssStylsheet","scrollbarWidth","inner","width","minWidth","height","outer","overflow","noScrollbar","withScrollbar","clientWidth","computedStyle","getComputedStyle","styles","property","HAS_CSS_ANIMATION","HAS_CSS_TRANSFORMS","HI_DPI","devicePixelRatio","div","transform","animationName","translate","tx","ty","round","dom","url","xhr","XMLHttpRequest","open","onreadystatechange","readyState","responseText","send","loadScript","path","src","onload","_","isAbort","qualifyURL","ctor","superCtor","super_","constructor","mixin","proto","propagationStopped","preventDefault","defaultPrevented","_dispatchEvent","eventName","_eventRegistry","_defaultHandlers","listeners","defaultHandler","newCallback","Promise","resolve","setDefaultHandler","handlers","_disabled_","old","disabled","removeDefaultHandler","capturing","removeListener","removeAllListeners","reportError","msg","Error","defaultEnglishMessages","messages","nlsPlaceholders","oop","optionsProvider","setOptions","optList","getOptions","optionNames","hidden","opt","warn","forwardTo","handlesSet","AppConfig","$defaultOptions","resetOptions","setDefaultValue","opts","setDefaultValues","optionHash","setMessages","placeholders","defaultString","translated","dollarMatch","curlyBracketMatch","lang","net","workerPath","modePath","themePath","basePath","suffix","$moduleUrls","loadWorkerFromBlob","sharedPopups","moduleUrl","component","parts","sep","setModuleUrl","subst","customLoader","loader","cb","setLoader","dynamicModules","$loading","$loaded","moduleId","onLoad","loadedModule","moduleType","load","afterLoad","err","reportErrorIfPathIsNotConfigured","then","default","$require","setModuleLoader","version","init","scriptOptions","scriptUrl","currentScript","_currentScript","currentDocument","scripts","script","attributes","j","attr","deHyphenate","m1","startRow","startColumn","endRow","endColumn","isEqual","compare","compareRange","cmp","comparePoint","containsRange","intersects","isEnd","isStart","setStart","setEnd","inside","insideStart","insideEnd","isMultiLine","compareStart","compareEnd","compareInside","clipRows","lastRow","extend","collapseRows","toScreenRange","screenPosStart","documentToScreenPosition","screenPosEnd","moveBy","comparePoints","p1","p2","Keys","MODIFIER_KEYS","KEY_MODS","FUNCTION_KEYS","PRINTABLE_KEYS","codeToKeyCode","Command","Enter","Pause","Escape","End","Home","Insert","Delete","ArrowLeft","ArrowUp","ArrowRight","ArrowDown","Backquote","Minus","Equal","BracketLeft","Backslash","BracketRight","Semicolon","Quote","Comma","Period","Slash","Space","NumpadAdd","NumpadDecimal","NumpadSubtract","NumpadDivide","NumpadMultiply","chr","fromCharCode","modifiers","Shift","Control","Alt","Meta","$codeToKeyCode","enter","escape","del","mods","pow","keyCode","keyString","activeListenerOptions","pressedKeys","ts","detectListenerOptionsSupport","createComment","getListenerOptions","EventListener","elem","destroyer","$toDestroy","getModifierHash","ctrlKey","altKey","shiftKey","metaKey","normalizeCommandKeys","hashId","code","getModifierState","altGr","location","timeStamp","dt","resetPressedKeys","getButton","button","capture","eventHandler","releaseCaptureHandler","onMouseUp","addMouseWheelListener","factor","deltaX","deltaY","deltaMode","DOM_DELTA_PIXEL","wheelX","wheelY","DOM_DELTA_LINE","linePixels","DOM_DELTA_PAGE","pagePixels","addMultiMouseDownListener","elements","timeouts","callbackName","startX","startY","clicks","eventNames","onMousedown","detail","isNewClick","clientX","clientY","_clicks","getModifierString","lastDefaultPrevented","postMessage","postMessageId","nextTick","messageName","listener","$idleBlocked","onIdle","handler","$idleBlockId","blockIdle","nextFrame","requestAnimationFrame","$cancelT","lineMode","pasteCancelled","now","TextInput","event","clipboard","BROKEN_SETDATA","USE_IE_MIME_TYPE","HAS_FOCUS_ARGS","MAX_LINE_LENGTH","KEYS","MODS","valueResetRegex","host","copied","pasted","inComposition","sendingText","tempStyle","fontSize","commandMode","ignoreFocusEvents","lastValue","lastSelectionStart","lastSelectionEnd","lastRestoreEnd","rowStart","Number","MAX_SAFE_INTEGER","rowEnd","MIN_SAFE_INTEGER","numberOfExtraLines","setNumberOfExtraLines","number","role","setLabel","arialLabel","$textInputAriaLabel","onBlur","hasFocus","onFocus","resetSelection","$focusScroll","enableKeyboardAccessibility","isTransformed","ancestors","parentElement","nodeType","blur","curOp","commandName","isUserAction","docChanged","selectionChanged","onCompositionEnd","positionToSelection","newValue","selectionStart","selectionEnd","setSelectionRange","afterContextMenu","getRange","lines","prevLine","nextLine","isAllSelected","onSelect","selectAll","inputHandler","setInputHandler","getInputHandler","sendText","fromInput","onPaste","extendLeft","extendRight","inserted","restoreStart","restoreEnd","endIndex","shouldReset","onTextInput","onInput","onCompositionUpdate","inputType","handleClipboardData","forceIEMime","clipboardData","mime","doCopy","isCut","getCopyText","onCut","onCopy","onCommandKey","onCompositionStart","$readOnly","useTextareaForIME","cancelComposition","markerRange","msGetInputContext","context","getInputContext","compositionStartOffset","closeTimeout","syncComposition","onKeyup","onContextMenuClose","$isMousePressed","$moveTextAreaToCursor","setCommandMode","setReadOnly","setCopyWithEmptySelection","onContextMenu","domEvent","moveToMouse","bringToFront","characterWidth","rect","borderTopWidth","borderLeftWidth","maxTop","clientHeight","move","addIosSelectionHandler","typingResetTimeout","typing","detectArrowKeys","isMousePressed","modifier","up","home","option","down","$setUserAgentForTests","_isMobile","_isIOS","DRAG_OFFSET","SCROLL_COOLDOWN_T","DefaultHandlers","mouseHandler","$clickSelection","onMouseDown","onDoubleClick","onTripleClick","onQuadClick","onMouseWheel","extendSelectionBy","ev","inSelection","mousedownEvent","selectionRange","selectionEmpty","time","inMultiSelectMode","captureMouse","startSelect","setState","waitForClickSelection","screenToTextCoordinates","getShiftKey","selectToPosition","orientedRange","calcRangeOrientation","setSelectionAnchor","unitName","cmpStart","cmpEnd","selectByLinesEnd","unsetStyle","focusWait","distance","calcDistance","getBracketRange","getLineRange","getAccelKey","$lastScroll","vx","vy","allowed","prevScroll","direction","canScroll","isScrollableBy","speed","isSlower","scrollBy","ax","ay","bx","by","sqrt","selectEnd","selectAllEnd","selectByWordsEnd","currentTarget","contentOverflows","scrollHeight","__extends","extendStatics","setPrototypeOf","__proto__","__values","Symbol","iterator","done","CLASSNAME","Tooltip","$element","$parentNode","setText","setHtml","html","setPosition","setClassName","getHeight","getWidth","PopupManager","popups","addPopup","updatePopups","removePopup","e_1","_a","e_2","_b","priority","visiblepopups","_c","_d","shouldDisplay","visiblepopups_1","visiblepopups_1_1","visiblePopup","doPopupsOverlap","e_2_1","return","e_1_1","popupA","popupB","rectA","rectB","popupManager","HoverTooltip","_super","_this","lastT","idleTime","lastEvent","onMouseOut","onMouseMove","waitForHover","whiteSpace","addToEditor","getMouseEventTarget","removeFromEditor","isOutsideOfText","$gatherData","docPos","screenPos","pixelToScreenCoordinates","clippedPos","setDataProvider","showForRange","domNode","startingEvent","MARGIN","$registerCloseEvents","textToScreenCoordinates","pageX","maxHeight","labelHeight","labelWidth","spaceBelow","pageY","isAbove","marker","$markerSession","$removeCloseEvents","GutterHandler","tooltipTimeout","mouseEvent","gutter","$gutterLayer","tooltip","GutterTooltip","showTooltip","maxRow","screenRow","documentToScreenRow","hideTooltip","$tooltipFollowsMouse","moveTooltip","gutterRow","getGutterRow","gutterCell","$lines","gutterElement","gutterRegion","getRegion","selectTo","$gutter","windowWidth","windowHeight","singular","plural","security","warning","info","hint","annotation","annotationsInRow","$annotations","displayText","from","fold","getFoldLine","$showFoldedAnnotations","mostSevereAnnotationTypeInFold","annotationsInFold","severityRank","annotationType","summaryFoldedAnnotations","annotationsToSummaryString","annotationMessages","iconClassName","$useSvgGutterIcons","lineElement","iconElement","annotationLabels","tooltipElement","annotations","summary","annotationTypes","annotationTypes_1","annotationTypes_1_1","label","MouseEvent","$inSelection","documentRow","screenTopRow","AUTOSCROLL_DELAY","SCROLL_CURSOR_DELAY","SCROLL_CURSOR_HYSTERESIS","DragdropHandler","dragImage","dragSelectionMarker","timerId","dragCursor","dragOperation","isInternal","autoScrollStartTime","cursorMovedTime","cursorPointOnCaretMoved","mouseTarget","counter","prevCursor","vMovement","hMovement","moveCursorToPosition","autoScroll","editorRect","offsets","nearestXOffset","nearestYOffset","scrollCursor","vScroll","hScroll","onDragInterval","addDragMarker","toOrientedRange","getSelectionStyle","setBlinking","clearInterval","setInterval","clearDragMarker","$resetCursorStyle","onDragStart","cancelDrag","draggable","self","dataTransfer","effectAllowed","setDragImage","clearData","onDragEnd","dropEffect","setCursorStyle","onDragEnter","canAccept","getDropEffect","onDragOver","onMouseMoveTimer","onDragLeave","onDrop","moveText","dropData","insert","types","copyAllowed","moveAllowed","copyModifierState","dragWait","interval","getDragDelay","startDrag","dragWaitEnd","dragReadyEnd","cursorStyle","onMouseDrag","state","dragDrop","$dragEnabled","clickCount","eventTarget","unselectable","addTouchListeners","touchStartT","longTouchTimer","animationTimer","pressed","contextMenu","mode","animationSteps","vX","vY","createContextMenu","updateMenu","selected","hasUndo","getUndoManager","replaceChild","canExecuteCommand","class","cmd","canExecute","handleClick","readText","writeText","ontouchstart","ontouchend","showContextMenu","pagePos","leftOffset","hideContextMenu","handleLongTap","selectWord","switchToSelectionMode","setRange","animate","oldScrollTop","getScrollTop","touches","touchObj","cursorPos","offsetLeft","weightedDistance","diff1","diff2","DefaultGutterHandler","MouseHandler","$dragDelay","$mouseMoved","focusEditor","windowBlurred","onMouseEvent","scrollBarV","scrollBarH","Boolean","gutterEl","character","mousemove","$scrollSpeed","mouseMoveHandler","which","releaseMouse","onCaptureEnd","onOperationEnd","onCaptureInterval","$onCaptureMouseMove","scrollSpeed","dragDelay","dragEnabled","focusTimeout","tooltipFollowsMouse","FoldHandler","getFoldAt","removeFold","expandFold","getUseWrapMode","foldWidgets","onFoldWidgetClick","getParentFoldRangeData","firstRange","addFold","keyUtil","KeyBinding","$editor","$data","$handlers","kb","$defaultHandler","setKeyboardHandler","handleKeyboard","getKeyboardHandler","getStatusText","$callKeyboardHandlers","toExecute","success","dir","hiLevel","lastArabic","hasUBAT_B","hasUBAT_S","impTab_LTR","impTab_RTL","LTR","RTL","L","R","EN","AN","ON","B","S","AL","WS","CS","ES","ET","NSM","LRE","RLE","PDF","LRO","RLO","BN","UnicodeTBL00","UnicodeTBL20","_computeLevels","chars","levels","charTypes","impTab","prevState","newClass","newLevel","newState","cond","condPos","ix","_getCharacterType","_getCharClass","_invertLevel","lev","_array","lo","hi","tmp","wType","nType","cType","rtlCandidate","uc","charCodeAt","ON_R","R_H","DOT","doBidiReorder","textCharTypes","isRtl","logicalFromVisual","bidiLevels","hasBidiCharacters","ret","getVisualFromLogicalIdx","logIdx","rowMap","bidiUtil","bidiRE","BidiHandler","bidiMap","currentRow","charWidths","EOL","showInvisibles","isRtlDir","$isRtl","wrapIndent","EOF","contentWidth","fontMetrics","rtlLineOffset","wrapOffset","isMoveLeftOperation","seenBidi","isBidiRow","docRow","splitIndex","updateRowLine","updateBidiMap","delta","getDocumentRow","rowCache","$screenRowCache","$getRowCacheIndex","$docRowCache","getSplitIndex","currentIndex","prevIndex","isLastRow","endOfLine","$useWrapMode","splits","$wrapData","indent","size","isFullWidth","getScreenTabSize","$main","markAsDirty","updateCharacterWidths","$characterSize","bidiCharWidth","$measureCharWidth","setShowInvisibles","setEolChar","eolChar","setContentWidth","isRtlLine","setRtlDirection","getSelectionAnchor","$bidiHandler","getPosLeft","col","leftBoundary","logicalIdx","getOverwrite","visualIdx","getSelections","startCol","endCol","level","selections","selColMin","selColMax","isSelected","isSelectedPrev","visIdx","offsetToCol","posX","charWidth","Selection","getDocument","$silent","$cursorChanged","$isEmpty","$keepDesiredColumnOnChange","$desiredColumn","$anchorChanged","getCursor","getPosition","setAnchor","getAnchor","getSelectionLead","isBackwards","$setSelection","MAX_VALUE","anchorRow","anchorColumn","cursorRow","cursorColumn","wasEmpty","wasMultiselect","$moveSelection","mover","moveTo","selectUp","moveCursorUp","selectDown","moveCursorDown","selectRight","moveCursorRight","selectLeft","moveCursorLeft","selectLineStart","moveCursorLineStart","selectLineEnd","moveCursorLineEnd","selectFileEnd","moveCursorFileEnd","selectFileStart","moveCursorFileStart","selectWordRight","moveCursorWordRight","selectWordLeft","moveCursorWordLeft","selectAWord","getAWordRange","excludeLastChar","foldLine","selectLine","moveCursorBy","wouldMoveIntoSoftTab","tabSize","isTabStop","getNavigateWithinSoftTabs","firstColumnPosition","screenToDocumentPosition","beforeCursor","getDisplayLine","leadingSpace","$useEmacsStyleLineStart","lineEnd","getDocumentLastRowColumnPosition","textEnd","search","moveCursorLongWordRight","rightOfCursor","nonTokenRe","tokenRe","moveCursorLongWordLeft","getFoldStringAt","leftOfCursor","$shortWordEndIndex","whitespaceRe","moveCursorShortWordRight","moveCursorShortWordLeft","$selectLongWords","rows","offsetX","lineWidgets","widget","rowsAbove","rowCount","keepDesiredColumn","moveCursorToScreen","desiredColumn","getRangeOfMovements","func","toJSON","rangeCount","r1","fromJSON","MAX_TOKEN_COUNT","states","regExps","matchMappings","ruleRegExps","matchTotal","mapping","splitterRurles","rule","caseInsensitive","adjustedregex","matchcount","groupCount","tokenArray","$arrayTokens","$applyToken","digit","removeCapturingGroups","createSplitterRegexp","$setMaxTokenCount","stack","inChClass","lastCapture","parenOpen","parenClose","square","startState","currentState","matchAttempts","skipped","consumeLineEnd","addRules","nextState","getRules","embedRules","escapeRules","append","$embeds","getEmbeds","pushState","popState","processState","toInsert","includeName","noEscape","keywordMap","ignoreCase","splitChar","keywords","$keywordList","list","word","getKeywords","Behaviour","$behaviours","addBehaviours","behaviours","inherit","getBehaviours","initialRow","initialColumn","$session","$row","getTokens","getCurrentTokenColumn","rowTokens","tokenIndex","getCurrentTokenPosition","CstyleBehaviour","SAFE_INSERT_IN_TOKENS","SAFE_INSERT_BEFORE_TOKENS","contextCache","defaultQuotes","initContext","autoInsertedBrackets","autoInsertedRow","autoInsertedLineEnd","maybeInsertedBrackets","maybeInsertedRow","maybeInsertedLineStart","maybeInsertedLineEnd","getWrapped","opening","closing","rowDiff","getWrapBehavioursEnabled","excludeTokens","recordAutoInsert","isSaneInsertion","braces","recordMaybeInsert","rightChar","matching","$findOpeningBracket","isAutoInsertedClosing","popAutoInsertedClosing","isMaybeInsertedClosing","clearMaybeInsertedClosing","openBracePos","next_indent","quotes","$quotes","quote","leftChar","rightToken","pair","stringBefore","stringAfter","wordRe","isWordBefore","isWordAfter","pairQuotesAfter","$pairQuotesAfter","shouldPairQuotes","charBefore","closeDocComment","currentToken","nextToken","cursorPosInToken","closeDocPos","openDocPos","$matchTokenType","iterator2","bracket","wordChars","$highlightRules","$highlightRuleConfig","toggleCommentLines","ignoreBlankLines","shouldRemove","minIndent","insertAtTabStop","regexpStart","uncomment","shouldInsertSpace","commentWithSpace","insertInLine","testRemove","before","after","spaces","lineCommentEnd","regexpEnd","iter","fun","minEmptyLength","floor","toggleBlockComment","colDiff","initialRange","startRange","endRange","tab","input","createWorker","createModeDelegates","delegations","_loop_1","functionName","$delegator","this_1","method","language","transformAction","param","completionKeywords","ruleItr","aLength","$createKeywordList","applyDelta","docLines","doNotValidate","Anchor","$clipPositionToDocument","point","$getTransformedPoint","noClip","$pointsInOrder","point1","point2","equalPointsInOrder","bColIsAfter","moveIfEqual","deltaIsInsert","deltaRowShift","deltaColShift","deltaStart","deltaEnd","Document","textOrLines","insertMergedLines","getAllLines","getNewLineCharacter","$detectNewLine","$autoNewLine","$newLineMode","setNewLineMode","newLineMode","getNewLineMode","isNewLine","getLines","getLinesForRange","insertLines","insertFullLines","removeLines","removeFullLines","insertNewLine","$split","clonePos","$clipPosition","deleteFirstNewLine","deleteLastNewLine","deletedLines","removeNewLine","applyDeltas","deltas","revertDeltas","revertDelta","isInsert","$splitAndapplyLargeDelta","$safeApplyDelta","docLength","MAX","to","chunk","indexToPosition","newlineLength","BackgroundTokenizer","tokenizer","running","currentLine","$worker","workerStart","endLine","startLine","processedLines","fireUpdateEvent","setTokenizer","setDocument","first","scheduleStart","cleanup","SearchHighlight","setRegexp","update","markerLayer","renderedMarkerRanges","MAX_RANGES","rangeToAddMarkerTo","rangeAsString","drawSingleLineMarker","UndoManager","$keepRedoStack","$maxRev","$fromUndo","$undoDepth","reset","addSession","allowMerge","$lastDelta","$redoStack","lastDeltas","undoStackLength","$undoStack","$rev","addSelection","rev","startNewGroup","markIgnored","ignore","getSelection","getRevision","getDeltas","getChangedRanges","getChangedLines","undo","dontSelect","rearrangeUndoStack","$redoStackBaseRev","deltaSet","undoSelectionRange","undoChanges","$syncRev","redo","diff","rebaseRedoStack","redoSelectionRange","redoChanges","nextDelta","mark","canUndo","canRedo","bookmark","isAtBookmark","json","$prettyPrint","stringifyDelta","swapped","swapGroups","hasRedo","isClean","markClean","cloneDelta","stringifyRange","swap","d1","d2","i1","i2","ds1","ds2","selectionBefore","selectionAfter","xform","c1","splitDelta","shiftPos","rowsBefore","otherLines","rest","moveDeltasByOne","redoStack","xformed","deltaSets","FoldLine","foldData","folds","setFoldLine","shiftRow","sameRow","containsRow","walk","lastEnd","isNewRow","getNextFoldTo","kind","addRemoveChars","log","foldBefore","newFoldLine","foldLineNext","idxToPosition","idx","lastFoldEndColumn","excludeEdges","startIndex","removed","substractPoint","containsPoint","rangeAtPoint","clipped","removeAll","lineDif","Fold","subFolds","subFold","collapseChildren","addSubFold","consumeRange","afterStart","firstConsumed","consumedFolds","restoreRange","consumePoint","restorePoint","Folding","side","getFoldsInRange","foldLines","$foldData","foundFolds","getFoldsInRangeList","getAllFolds","trim","lastFold","startFoldLine","getNextFoldLine","getFoldedRowCount","$addFoldLine","added","$clipRangeToDocument","startFold","endFold","removeFolds","$updateWrapData","$updateRowLengthCache","$modified","addFolds","$updating","cloneFolds","foldAll","expandFolds","unfold","expandInner","outermostFolds","isRowFolded","startFoldRow","getRowFoldEnd","getRowFoldStart","getFoldDisplayLine","textLine","lastColumn","$cloneFoldData","fd","toggleFold","tryToUnfold","bracketPos","getCommentFoldRange","initState","depth","foldToLevel","foldAllComments","$foldStyles","$foldStyle","setFoldStyle","$foldMode","$setFolding","foldMode","$updateFoldWidgets","$tokenizerUpdateFoldWidgets","updateFoldWidgets","tokenizerUpdateFoldWidgets","ignoreCurrent","fw","children","siblings","$toggleFoldWidget","toggleFoldWidget","toggleParent","BracketMatch","charBeforeCursor","$findClosingBracket","getMatchingBracketRanges","bracketsRegExp","$brackets","typeRe","openBracket","valueIndex","closingBracket","valueLength","getMatchingTags","$findTagName","prevToken","$findClosingTag","$findOpeningTag","found","backward","currentTag","openTagStart","openTagName","foundOpenTagEnd","openTagEnd","closeTagStart","closeTagName","closeTagEnd","openTag","closeTag","stepCount","tmpToken","TextMode","EditSession","$breakpoints","$decorations","$frontMarkers","$backMarkers","$markerId","$undoSelect","$uid","onChangeFold","setMode","destroyed","resetCaches","$resetRowCache","cacheArray","low","mid","$rowLengthCache","removedFolds","$updateInternalDataOnChange","$undoManager","mergeUndoDeltas","$informUndoManager","setUndoManager","undoManager","history","editSession","setAnnotations","setBreakpoints","breakpoints","setScrollLeft","setScrollTop","$scrollLeft","$scrollTop","$syncInformUndoManager","markUndoGroup","$defaultUndoManager","setUseSoftTabs","$useSoftTabs","$indentWithTabs","setTabSize","$tabSize","setNavigateWithinSoftTabs","navigateWithinSoftTabs","$navigateWithinSoftTabs","setOverwrite","overwrite","$overwrite","toggleOverwrite","addGutterDecoration","removeGutterDecoration","getBreakpoints","clearBreakpoints","setBreakpoint","clearBreakpoint","inFront","addDynamicMarker","markers","getMarkers","highlightLines","getAnnotations","clearAnnotations","inToken","wordRange","setUseWorker","useWorker","getUseWorker","$useWorker","onReloadTokenizer","$onChangeMode","$modeId","$isPlaceholder","oldMode","$stopWorker","$startWorker","attachToSession","wrapMethod","$wrapMethod","terminate","getMode","isNaN","getScrollLeft","getScreenWidth","getLineWidgetMaxWidth","lineWidgetsWidth","lineWidgetWidth","force","$wrapLimit","longestScreenLine","foldIndex","foldStart","$getStringScreenWidth","$getUndoSelection","setUndoSelect","enable","isUndo","fromRange","toPosition","toRange","collDiff","oldStart","newStart","indentRows","indentString","outdentRows","rowRange","deleteRange","$moveLines","$clipRowToDocument","moveLinesUp","moveLinesDown","duplicateLines","$clipColumnToRow","setUseWrapMode","useWrapMode","setWrapLimitRange","$wrapLimitRange","adjustWrapLimit","desiredLimit","$printMargin","limits","wrapLimit","$constrainWrapLimit","getWrapLimit","setWrapLimit","limit","getWrapLimitRange","foldLineBefore","wrapData","walkTokens","$getDisplayTokens","PLACEHOLDER_START","PLACEHOLDER_BODY","$computeWrapSplits","displayLength","lastSplit","lastDocSplit","isCode","$wrapAsCode","indentedSoftWrap","$indentedSoftWrap","maxIndent","getWrapIndent","indentation","SPACE","TAB","TAB_SPACE","addSplit","minSplit","PUNCTUATION","CHAR_EXT","CHAR","maxScreenColumn","screenColumn","getRowLength","getRowLineCount","getRowWrapIndent","getScreenLastRowColumn","documentToScreenColumn","getDocumentLastRowColumn","docColumn","getRowSplitData","screenToDocumentRow","screenToDocumentColumn","rowLength","doCache","foldStartRow","wrapRow","screenRowOffset","getScreenLength","screenRows","$getWidgetScreenLength","$setFontMetrics","fm","$enableVarChar","getCharacterWidth","$wrap","firstLineNumber","useSoftTabs","foldStyle","$matchIterator","sr","sc","er","ec","needle","$assembleRegExp","$isMultiLine","prevRange","replacement","preserveCase","$disableFakeMultiline","$supportsUnicodeFlag","addWordBoundary","$assembleMultilineRegExp","forEachInLine","wordBoundary","firstChar","wordRegExp","needleArray","lastChar","MultiHashHandler","$singleCommand","commandKeyBinding","_buildKeyHash","keepCommand","ckb","keyId","cmdGroup","keyPart","chain","binding","parseKeys","_addCommandToBinding","other","otherPos","removeCommands","keyList","$keyChain","isDefault","CommandManager","byName","$checkCommandState","isAvailable","toggleRecording","$inReplay","recording","macro","$addCommandToMacro","oldMacro","replay","trimMacro","description","showSettingsMenu","showErrorMarker","scrollIntoView","centerSelection","gotoLine","prompt","$type","multiSelectAction","findPrevious","aceCommandGroup","navigateFileStart","navigateUp","times","navigateFileEnd","navigateDown","navigateWordLeft","navigateLineStart","navigateLeft","navigateWordRight","navigateLineEnd","navigateRight","selectPageDown","scrollPageDown","selectPageUp","scrollPageUp","jumpToMatching","passEvent","cutLine","$copyWithEmptySelection","$handlePaste","duplicateSelection","sortLines","modifyNumber","copyLinesUp","copyLinesDown","removeToLineStart","removeToLineEnd","removeWordLeft","removeWordRight","blockOutdent","blockIndent","splitLine","transposeLetters","transposeSelections","autoIndent","openLink","firstLineEndCol","selectedText","selectedCount","insertLine","curLine","newRanges","exitMultiSelectMode","LineWidgets","widgetManager","updateOnChange","renderWidgets","measureWidgets","_changedWidgets","$onChangeEditor","updateOnFold","_inDocument","removeLineWidget","$updateRows","noWidgets","$oldWidget","$registerLineWidget","addLineWidget","zIndex","coverGutter","pixelHeight","$fold","onWidgetChanged","w1","getWidgetsAtRow","updateFull","changedWidgets","fixedWidth","ceil","coverLine","fullWidth","padding","scrollBar","GutterKeyboardHandler","gutterLayer","activeRowIndex","activeLane","annotationTooltip","$onGutterKeyDown","$blurGutter","isRowVisible","scrollToLine","$rowToRowIndex","$cursorCell","nearestFoldIndex","$findNearestFoldWidget","nearestAnnotationIndex","$findNearestAnnotation","$focusAnnotation","$focusFoldWidget","$handleGutterKeyboardInteraction","GutterKeyboardEvent","lane","$switchLane","$rowIndexToRow","rowFoldingWidget","$blurFoldWidget","cells","$moveFoldWidgetDown","$moveAnnotationDown","$moveFoldWidgetUp","$moveAnnotationUp","$blurAnnotation","$isFoldWidgetVisible","isRowFullyVisible","isIconVisible","$getFoldWidget","$isAnnotationVisible","$getAnnotation","cell","foldWidget","keyboardFocusClassName","desinationLane","annotationIndex","foldWidgetIndex","gutterKeyboardHandler","getKey","isInAnnotationLane","isInFoldLane","defaultCommands","getContainerElement","getTextAreaContainer","$historyTracker","$initOperationListeners","_$emitInputEvent","$opResetTimer","$lastSel","commandEvent","prevOp","previousCommand","scrollSelectionIntoView","animateScrolling","sel","$mergeUndoDeltas","prev","mergeableCommands","$mergeableCommands","shouldMerge","mergeNextCommand","sequenceStartTime","$keybindingId","oldSession","$onDocumentChange","$onTokenizerUpdate","$onChangeTabSize","$onChangeWrapLimit","$onChangeWrapMode","$onChangeFold","$onChangeFrontMarker","$onChangeBackMarker","$onChangeBreakpoint","$onChangeAnnotation","$onCursorChange","$onScrollTopChange","$onScrollLeftChange","$onSelectionChange","onDocumentChange","onChangeMode","onTokenizerUpdate","onChangeTabSize","onChangeWrapLimit","onChangeWrapMode","onChangeFrontMarker","onChangeBackMarker","onChangeBreakpoint","onChangeAnnotation","onCursorChange","onScrollTopChange","onScrollLeftChange","onSelectionChange","oldEditor","resize","onResize","$highlightBrackets","$highlightPending","$bracketHighlight","markerIds","$getDirectionForHighlight","tagNamesRanges","markerType","getHighlightIndentGuides","$highlightIndentGuide","showCursor","visualizeFocus","hideCursor","visualizeBlur","$cursorChange","updateCursor","$updateHighlightActiveLine","updateLines","scrollToY","scrollToX","$highlightActiveLine","$selectionStyle","$selectionColorConflict","$minLines","$highlightLineMarker","$selectionMarker","$highlightSelectedWord","$getSelectionHighLightRegexp","wordWithBoundary","updateFrontMarkers","updateBreakpoints","updateText","getSelectedText","nl","copyLine","isFullLine","getBehavioursEnabled","lineState","shouldOutdent","$enableAutoIndent","lineIndent","prevLineState","currIndent","composition","applyComposition","setScrollSpeed","getScrollSpeed","setDragDelay","setSelectionStyle","shouldHighlight","getHighlightActiveLine","getHighlightGutterLine","setHighlightSelectedWord","getHighlightSelectedWord","setAnimatedScroll","shouldAnimate","getAnimatedScroll","getShowInvisibles","setDisplayIndentGuides","getDisplayIndentGuides","setHighlightIndentGuides","showPrintMargin","getShowPrintMargin","setPrintMarginColumn","getPrintMarginColumn","setBehavioursEnabled","enabled","setWrapBehavioursEnabled","setShowFoldWidgets","getShowFoldWidgets","setFadeFoldWidgets","fade","getFadeFoldWidgets","new_range","originalRange","$getSelectedRows","getNumberAt","_numberRx","amount","charRange","isFinite","nr","fp","decimals","nnr","toFixed","replaceRange","toggleWord","currWordStart","wordParts","curLength","itLength","that","reg","wordPairs","$toggleWordPairs","negate","firstCondition","secondCondition","res","findLinkAt","columnPosition","previousPosition","currentPosition","wordParts_1","wordParts_1_1","endPoint","moved","totalDiff","rangeIndex","subRows","compositionState","showComposition","setCompositionText","hideComposition","getFirstFullyVisibleRow","getLastFullyVisibleRow","$getVisibleRowCount","getScrollBottomRow","getScrollTopRow","$moveByPage","scrollToRow","center","alignCursor","getCursorPositionScreen","expand","tokenCount","matchType","bracketType","brackets","tagsRanges","lineNumber","navigateTo","replaced","$tryReplace","getLastSearchOptions","newRange","revealRange","setAutoScrollEditorIntoView","shouldScroll","$scrollAnchor","scrollAnchor","onBeforeRender","onAfterRender","$pixelPos","$cursorStyle","cursorLayer","setSmoothBlinking","isBlinking","selectionStyle","highlightActiveLine","highlightSelectedWord","copyWithEmptySelection","behavioursEnabled","wrapBehavioursEnabled","enableAutoIndent","autoScrollEditorIntoView","showLineNumbers","setShowLineNumbers","$loop","CHANGE_GUTTER","$relativeLineNumbers","relativeNumberRenderer","relativeLineNumbers","$showLineNumbers","$updatePlaceholder","hasValue","$composition","placeholderNode","$placeholder","blurCommand","focusOnEnterKeyup","textInputAriaLabel","enableMobileMenu","$enableMobileMenu","customScrollbar","hScrollBarAlwaysVisible","vScrollBarAlwaysVisible","highlightGutterLine","animatedScroll","printMarginColumn","printMargin","fadeFoldWidgets","showFoldWidgets","displayIndentGuides","highlightIndentGuides","showGutter","fontFamily","maxLines","minLines","scrollPastEnd","fixedWidthGutter","hasCssTransforms","maxPixelHeight","useResizeObserver","useSvgGutterIcons","showFoldedAnnotations","lastLineNumber","$renderer","Lines","canvasHeight","cellCache","$offsetCoefficient","moveContainer","firstRowScreen","pageChanged","oldConfig","newConfig","computeLineTop","screenTop","screenPage","lineTop","computeLineHeight","$cacheCell","fragment","insertAdjacentElement","createCell","initElement","Gutter","parentEl","$showFoldWidgets","$updateAnnotations","rowInfo","annoText","displayAnnoText","annoType","gutterOffset","oldLastRow","$updateCursorRow","onCreateCell","$renderCell","$updateGutterWidth","gutterRenderer","$firstLineNumber","lastLineText","$fixedWidth","$computePadding","$highlightGutterLine","$cursorRow","updateLineHighlight","scrollLines","$renderLines","textNode","annotationNode","annotationIconNode","decorations","rowText","foldClass","isClosedFold","foldAnnotationClass","annotationInFold","foldRange","ariaLabel","getShowLineNumbers","paddingLeft","borderRightWidth","paddingRight","Marker","setPadding","setMarkers","elt","css","$getTop","drawFullLineMarker","drawScreenLineMarker","drawTextMarker","drawMultiLineMarker","childElementCount","lastChild","stringBuilder","extraStyle","curr","lineRange","getBorderClass","range1","drawBidiSingleLineMarker","radiusClass","extraLength","tl","tr","br","bl","textTokens","isTextToken","tokenType","Text","$updateEolChar","unixMode","EOL_CHAR","EOL_CHAR_LF","EOL_CHAR_CRLF","getLineHeight","$fontMetrics","measure","$pollSizeChanges","checkForSizeChanges","$pollSizeChangesTimer","$computeTabString","showSpaces","showTabs","showEOL","$highlightIndentGuides","tabStr","$tabStrings","span","TAB_CHAR","$indentGuideRe","spaceClass","spaceContent","SPACE_CHAR","tabClass","tabContent","lineElements","lineElementsIdx","heightChanged","$renderLine","$renderLinesFragment","lineEl","$useLineGroups","$renderToken","valueFragment","simpleSpace","controlCharacter","cjkSpace","cjk","cloneNode","renderIndentGuide","cols","$highlightIndentGuideMarker","indentLevel","initialIndent","elementIndentLevel","bracketHighlight","currentIndent","$renderHighlightIndentGuide","$clearActiveIndentGuide","$setIndentGuideActive","$createLineElement","$renderWrappedLine","splitChars","$renderOverflowMessage","$renderSimpleLine","overflowEl","$getFoldLineTokens","lastLineEl","invisibleEl","EOF_CHAR","renderTokens","addTokens","Cursor","isVisible","blinkInterval","smoothBlinking","cursors","addCursor","$updateCursors","$updateOpacity","$startCssAnimation","animationDuration","$isAnimating","$stopCssAnimation","blinking","setBlinkInterval","removeCursor","intervalId","timeoutId","$isSmoothBlinking","blink","onScreen","cursorLeft","cursorTop","isCursorInView","pixelPos","$selectionMarkers","cursorIndex","drawCursor","$setOverwrite","MAX_SCROLL_H","Scrollbar","classSuffix","setVisible","skipEvent","onScroll","coeff","VScrollBar","$scrollbarWidth","$minWidth","setHeight","setScrollHeight","setInnerHeight","HScrollBar","setWidth","setInnerWidth","setScrollWidth","ScrollBar","ScrollBarV","ScrollBarH","VScrollWidth","HScrollHeight","eType","mousePageY","startTop","thumbTop","onScrollInterval","scrollTopFromThumbTop","thumbHeight","pageHeight","viewHeight","slideHeight","scrollWidth","mousePageX","startLeft","thumbLeft","scrollLeftFromThumbLeft","thumbWidth","pageWidth","viewWidth","slideWidth","RenderLoop","onRender","pending","changes","$recursionLimit","_flush","change","clear","CHAR_COUNT","USE_OBSERVER","ResizeObserver","FontMetrics","$setMeasureNodeStyles","$measureNode","$addObserver","isRoot","visibility","font","$measureSizes","fontWeight","boldSize","charSizes","allowBoldFonts","$observer","observe","setPolling","disconnect","$getZoom","$initTransformMeasureNodes","transformCoordinates","clientPos","elPos","zoom","mul","solve","l1","l2","det","sub","m2","ut","Decorator","canvas","pixelRatio","heightRatio","canvasWidth","minDecorationHeight","halfMinDecorationHeight","colors","dark","light","$updateDecorators","allLineHeight","ctx","getContext","clearRect","priorities","compensateFold","compensateFoldRows","currentY","y1","y2","yCenter","fillStyle","fillRect","GutterLayer","MarkerLayer","TextLayer","CursorLayer","HScrollBarCustom","VScrollBarCustom","editorCss","onGutterResize","$markerBack","textLayer","$markerFront","$horizScroll","$vScroll","$scrollAnimation","scrollMargin","updateCharacterSize","$size","scrollerHeight","scrollerWidth","$dirty","minHeight","$renderChanges","defaultView","CHANGE_FULL","$addResizeObserver","$allowBoldFonts","$updatePrintMargin","onChangeNewLineMode","$changedLines","CHANGE_LINES","CHANGE_TEXT","CHANGE_MARKER","updateFontSize","$updateSizeAsync","resizing","$updateCachedSize","$resizeTimer","$changes","$customScrollbar","$updateCustomScrollbar","$extraHeight","oldSize","CHANGE_SIZE","CHANGE_SCROLL","$showGutter","$computeLayerConfig","availableWidth","$showPrintMargin","$printMarginColumn","$animatedScroll","getShowGutter","$printMarginEl","containerEl","posTop","posLeft","setScrollMargin","sm","setMargin","getHScrollBarAlwaysVisible","$hScrollBarAlwaysVisible","setHScrollBarAlwaysVisible","alwaysVisible","getVScrollBarAlwaysVisible","$vScrollBarAlwaysVisible","setVScrollBarAlwaysVisible","$updateScrollBarV","$scrollPastEnd","$updateScrollBarH","freeze","$frozen","unfreeze","CHANGE_H_SCROLL","st","$scrollDecorator","$updateLines","CHANGE_CURSOR","CHANGE_MARKER_FRONT","CHANGE_MARKER_BACK","$autosize","desiredHeight","hideScrollbars","$gutterWidth","screenLines","longestLine","$getLongestLine","horizScroll","hScrollChanged","vScrollBefore","vScrollChanged","firstRowHeight","lineCount","charCount","_rows","$viewMargin","newLeft","newTop","topMargin","bottomMargin","$stopAnimation","currentTop","currentLeft","twoCharsWidth","alignment","$calcSteps","fromValue","toValue","STEPS","steps","x_min","dx","initialScroll","oldSteps","$timer","endAnimation","scrollTo","canvasPos","$hasCssTransforms","$blockCursor","$useTextareaForIME","addToken","removeExtraToken","insertPosition","textChunks","$calculateWrappedTextChunks","widgetDiv","lastLineDiv","hiddenTokens","hideTokensAfterPosition","chunkDiv","chunkSpan","wrapped","pixelPosition","ghostTextHeight","fitsY","textLines","displayTokens","wrapSplits","textSlice","newToken","hasPassedCursor","$themeId","$theme","background","setMouseCursor","attachToShadowRoot","$resizeObserver","contentRect","$workerBlob","workerUrl","Blob","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","blobBuilder","getBlob","Worker","blob","URL","webkitURL","blobURL","createObjectURL","WorkerClient","worker","$createWorkerFromOldConfig","$sendDeltaQueue","onMessage","callbackId","callbacks","onmessage","topLevelNamespaces","classname","importScripts","nameToUrl","toUrl","normalizePath","$normalizePath","tlns","deltaQueue","onerror","$doc","emit","ex","attachToDocument","q","UIWorkerClient","main","emitSync","sender","messageBuffer","workerClient","processNext","setEmitSync","Main","PlaceHolder","others","mainClass","othersClass","$onUpdate","onUpdate","$others","undoStack","$undoStackDepth","setup","showOtherMarkers","othersActive","hideOtherMarkers","updateAnchors","lengthDiff","inMainRange","distanceFromStart","newPos","updateMarkers","updateMarker","undosRequired","isSamePoint","alt","ctrl","accel","selectionMode","isMultiSelect","mouseX","mouseY","onMouseSelection","screenAnchor","screenCursor","$enableJumpToDef","$blockSelectEnabled","addSelectionMarker","oldRange","removeSelectionMarker","tmpSel","rectSel","blockSelect","newCursor","removeSelectionMarkers","rectangularRangeBlock","updateSelectionMarkers","onMouseSelectionEnd","onSelectionInterval","selectMoreLines","selectMore","joinSelections","splitIntoLines","alignCursors","multiSelectCommands","getSelectionMarkers","$blockChangeEvents","$onAddRange","$onRemoveRange","mergeOverlappingRanges","lastRange","$initRangeList","toggleBlockSelection","includeEmptyLines","xBackwards","startOffsetX","endOffsetX","docEnd","yBackwards","MultiSelect","$multiselectOnSessionChange","$onMultiSelect","$onSingleSelect","onSessionChange","$checkMultiselectChange","addAltCursorListeners","altCursor","altDown","selectionMarkerCount","markerList","$onMultiSelectExec","inVirtualMode","$byLines","cmdResult","anim","buf","additive","skip","screenLead","toRemove","tmp_1","words","stopAtFirst","sameRowRanges","maxCol","minSpace","spaceOffsets","spaceOffset","fr","lr","guessRange","$reAlignText","forceLeft","startW","textW","endW","isLeftAligned","isRightAligned","alignLeft","alignRight","unAlign","enableMultiselect","enableBlockSelect","indentationBlock","startLevel","binarySearch","comparator","findAnnotations","matched","oldWidget","gutterAnno","arrow","annoTextLine","onmousedown","Renderer","edit","_id","env","tagName","oldNode","createEditSession"],"sourceRoot":""}