Scripts n Styles - Version 3.3

Version Description

  • See the github repo commits
Download this release

Release Info

Developer WraithKenny
Plugin Icon wp plugin Scripts n Styles
Version 3.3
Comparing to
See all releases

Code changes from version 3.2.1 to 3.3

Files changed (55) hide show
  1. README.txt +10 -4
  2. css/code-editor.css +3 -23
  3. css/meta-box.css +42 -295
  4. css/options-styles.css +26 -179
  5. includes/class-sns-admin.php +35 -36
  6. includes/class-sns-ajax.php +158 -86
  7. includes/class-sns-code-editor.php +12 -7
  8. includes/class-sns-form.php +35 -34
  9. includes/class-sns-global-page.php +28 -23
  10. includes/class-sns-hoops-page.php +39 -39
  11. includes/class-sns-list-usage.php +25 -25
  12. includes/class-sns-meta-box.php +67 -67
  13. includes/class-sns-settings-page.php +23 -25
  14. includes/class-sns-theme-page.php +26 -26
  15. includes/class-sns-usage-page.php +19 -19
  16. js/code-editor.js +85 -25
  17. js/global-page.js +27 -22
  18. js/hoops-page.js +13 -13
  19. js/meta-box.js +204 -189
  20. js/theme-page.js +66 -54
  21. scripts-n-styles.php +133 -188
  22. vendor/CodeMirror2/LICENSE +0 -23
  23. vendor/CodeMirror2/lib/codemirror.css +0 -126
  24. vendor/CodeMirror2/lib/codemirror.js +0 -3074
  25. vendor/CodeMirror2/mode/clike/clike.js +0 -234
  26. vendor/CodeMirror2/mode/coffeescript/LICENSE +0 -22
  27. vendor/CodeMirror2/mode/coffeescript/coffeescript.js +0 -347
  28. vendor/CodeMirror2/mode/css/css.js +0 -124
  29. vendor/CodeMirror2/mode/gfm/gfm.js +0 -108
  30. vendor/CodeMirror2/mode/htmlmixed/htmlmixed.js +0 -85
  31. vendor/CodeMirror2/mode/javascript/javascript.js +0 -361
  32. vendor/CodeMirror2/mode/less/less.js +0 -232
  33. vendor/CodeMirror2/mode/markdown/markdown.js +0 -245
  34. vendor/CodeMirror2/mode/php/php.js +0 -150
  35. vendor/CodeMirror2/mode/xml/xml.js +0 -325
  36. vendor/CodeMirror2/theme/ambiance.css +0 -82
  37. vendor/CodeMirror2/theme/blackboard.css +0 -25
  38. vendor/CodeMirror2/theme/cobalt.css +0 -18
  39. vendor/CodeMirror2/theme/eclipse.css +0 -25
  40. vendor/CodeMirror2/theme/elegant.css +0 -10
  41. vendor/CodeMirror2/theme/erlang-dark.css +0 -21
  42. vendor/CodeMirror2/theme/lesser-dark.css +0 -45
  43. vendor/CodeMirror2/theme/monokai.css +0 -28
  44. vendor/CodeMirror2/theme/neat.css +0 -9
  45. vendor/CodeMirror2/theme/night.css +0 -21
  46. vendor/CodeMirror2/theme/rubyblue.css +0 -21
  47. vendor/CodeMirror2/theme/xq-dark.css +0 -46
  48. vendor/chosen/chosen-sprite.png +0 -0
  49. vendor/chosen/chosen-sprite@2x.png +0 -0
  50. vendor/chosen/chosen.css +0 -392
  51. vendor/chosen/chosen.jquery.min.js +2 -10
  52. vendor/chosen/chosen.min.css +3 -0
  53. vendor/codemirror/codemirror-compressed.css +659 -0
  54. vendor/codemirror/codemirror-compressed.js +9 -0
  55. vendor/coffee-script.js +11 -8
README.txt CHANGED
@@ -1,9 +1,9 @@
1
  === Scripts n Styles ===
2
  Contributors: WraithKenny, CaptainN
3
  Tags: admin, CSS, javascript, code, custom, Style
4
- Requires at least: 3.4
5
- Tested up to: 3.4
6
- Stable tag: 3.2.1
7
  License: GPLv3 or later
8
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
9
 
@@ -58,6 +58,9 @@ Sure, if you are an Admin, just go to the plugin editor and wipe out the uninsta
58
 
59
  == Changelog ==
60
 
 
 
 
61
  = 3.2.1 =
62
  * metabox add shortcode bugfix
63
 
@@ -130,6 +133,9 @@ Sure, if you are an Admin, just go to the plugin editor and wipe out the uninsta
130
 
131
  == Upgrade Notice ==
132
 
 
 
 
133
  = 3.2.1 =
134
  Bug fix (add shortcode)
135
 
@@ -167,4 +173,4 @@ Minor update. Adds a few new features.
167
  Some small plugin meta data updates.
168
 
169
  = 1.0 =
170
- Initial Release, there is nothing to upgrade from.
1
  === Scripts n Styles ===
2
  Contributors: WraithKenny, CaptainN
3
  Tags: admin, CSS, javascript, code, custom, Style
4
+ Requires at least: 3.6
5
+ Tested up to: 3.6
6
+ Stable tag: 3.3
7
  License: GPLv3 or later
8
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
9
 
58
 
59
  == Changelog ==
60
 
61
+ = 3.3 =
62
+ * See the github repo commits
63
+
64
  = 3.2.1 =
65
  * metabox add shortcode bugfix
66
 
133
 
134
  == Upgrade Notice ==
135
 
136
+ = 3.3 =
137
+ Bug fixes and lib upgrades
138
+
139
  = 3.2.1 =
140
  Bug fix (add shortcode)
141
 
173
  Some small plugin meta data updates.
174
 
175
  = 1.0 =
176
+ Initial Release, there is nothing to upgrade from.
css/code-editor.css CHANGED
@@ -1,23 +1,3 @@
1
- #newcontent {
2
- display: block;
3
- }
4
- .CodeMirror {
5
- border: 1px solid #DFDFDF;
6
- background-color: white;
7
- border-radius: 3px;
8
- margin: 8px 0;
9
- -moz-background-clip: padding;
10
- -webkit-background-clip: padding-box;
11
- background-clip: padding-box;
12
- overflow: hidden;
13
- }
14
- body .CodeMirror-scroll {
15
- height: auto;
16
- overflow: auto;
17
- }
18
- #template .CodeMirror {
19
- margin-right: 30px;
20
- }
21
- #template .CodeMirror div {
22
- margin-right: 0;
23
- }
1
+ #newcontent{display:block;}
2
+ .CodeMirror{border:1px solid #DFDFDF;background-color:white;margin:8px 0;}
3
+ #template .CodeMirror{margin-right:30px;}#template .CodeMirror div{margin-right:0;}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
css/meta-box.css CHANGED
@@ -1,295 +1,42 @@
1
- /* MetaBox.css */
2
- .CodeMirror {
3
- border: 1px solid #DFDFDF;
4
- background-color: white;
5
- border-radius: 3px;
6
- margin: 8px 0;
7
- -moz-background-clip: padding;
8
- -webkit-background-clip: padding-box;
9
- background-clip: padding-box;
10
- overflow: hidden;
11
- }
12
-
13
- /* Code Decorations */
14
- .style > .CodeMirror:before,
15
- .style > .CodeMirror:after {
16
- display: block;
17
- padding: .5em;
18
- background-color: #f5f5f5;
19
- }
20
- .style > .CodeMirror:before {
21
- border-bottom: 1px solid #dfdfdf;
22
- }
23
- .style > .CodeMirror:after {
24
- border-top: 1px solid #dfdfdf;
25
- }
26
- .style > .CodeMirror:before {
27
- content: '<style type="text/css">';
28
- }
29
- .style > .CodeMirror:after {
30
- content: '</style>';
31
- }
32
- .script > .CodeMirror:before,
33
- .script > .CodeMirror:after {
34
- display: block;
35
- padding: .5em;
36
- background-color: #f5f5f5;
37
- }
38
- .script > .CodeMirror:before {
39
- border-bottom: 1px solid #dfdfdf;
40
- }
41
- .script > .CodeMirror:after {
42
- border-top: 1px solid #dfdfdf;
43
- }
44
- .script > .CodeMirror:before {
45
- content: '<script type="text/javascript">';
46
- }
47
- .script > .CodeMirror:after {
48
- content: '</script>';
49
- }
50
- .less > .CodeMirror:before,
51
- .less > .CodeMirror:after {
52
- display: block;
53
- padding: .5em;
54
- background-color: #f5f5f5;
55
- }
56
- .less > .CodeMirror:before {
57
- border-bottom: 1px solid #dfdfdf;
58
- }
59
- .less > .CodeMirror:after {
60
- border-top: 1px solid #dfdfdf;
61
- }
62
- .less > .CodeMirror:before {
63
- content: '<style type="text/less">';
64
- }
65
- .less > .CodeMirror:after {
66
- content: '</style>';
67
- }
68
- .coffee > .CodeMirror:before,
69
- .coffee > .CodeMirror:after {
70
- display: block;
71
- padding: .5em;
72
- background-color: #f5f5f5;
73
- }
74
- .coffee > .CodeMirror:before {
75
- border-bottom: 1px solid #dfdfdf;
76
- }
77
- .coffee > .CodeMirror:after {
78
- border-top: 1px solid #dfdfdf;
79
- }
80
- .coffee > .CodeMirror:before {
81
- content: '<script type="text/coffeescript">';
82
- }
83
- .coffee > .CodeMirror:after {
84
- content: '</script>';
85
- }
86
- /* end Code Decorations */
87
-
88
-
89
- .CodeMirror,
90
- #editorcontainer #content {
91
- font-family: "Courier New", Courier, monospace;
92
- }
93
- .CodeMirror-scroll {
94
- height: auto;
95
- min-height: 50px;
96
- max-height: 300px;
97
- overflow: auto;
98
- }
99
- .sns-shortcode p {
100
- margin: 0;
101
- }
102
- .sns-collapsed-shortcode {
103
- overflow: hidden;
104
- }
105
- .sns-collapsed-shortcode .sns-collapsed-shortcode-btn {
106
- background-position: 1px -107px;
107
- }
108
- .sns-collapsed-shortcode-btn {
109
- cursor: pointer;
110
- float: left;
111
- height: 1.4em;
112
- width: 1.4em;
113
- background-image: url("data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%0F%00%00%00%7B%08%06%00%00%00%ABe%DA%9D%00%00%00%19tEXtSoftware%00Adobe%20ImageReadyq%C9e%3C%00%00%01%90IDATx%DA%EC%991N%C3%40%10E%D7%40%1D%A4(G%A0%A2%A0%E2%06Q%90%DB%5C%02%09%AA%F4%A1%8C%7BW%20%E5%10P%DA%22%E2%06%AERP%E5%08%08)%F4%D6%F2G%FA%C5j%E5%F5%AEM%81%10%B3%D2%D7%EC%3A~%1E%7Bci%BE%C6%99%B5%D6%8C%1D'%E6%07%E3%8F%C2g%FE%81%BA%AE%1B%84%0B.'%D0%17%E7%87%3C%CF%AFc%99%0B%E8%9C%CA%9Cy%E1%9F%98u%FDU%C8%FE%8A%B0p%0E%ED%90%F5%26%F5%99WP%CBy%CBu%DA%86!%CB%3B%C2%96%CB-%D7%83v%FB%01%B2%8C%DDC%9E9%A4%AA%AA%E6%7D%BFg%FAn%2B%AC%B0%C2%0A%2B%FC%CB0%EA%F4%BC%EF%F7%60%AD%028E%F8%80f(%B1%9FC3oh%2B6%832%23%EB%25%C2%1E%3A%A53%B8%EA*%F0%A1%CC%25A%C3X%26%DD6%B2.%3D3%23c%C1%E3%D1%CCk%E8HYg%BEN%DEm%7D%B7%15VXa%85%15V8v%82%D4e%B6%3F%E2%7D%12%CFZ%94%2C%F4%C7%D4%26%CB%94%26%E6%D6%B1%16%F1%0E%0D%7D%D7%8E.%C8%1D%93%E83%C3%F1%BC%89%EF%82%9E%9C%3E%89qZ%3C%FD%1B%26%86%0D%BA%17%FB%C4%BB0%A3Z%1Dlw%2C%A1F%5B%1D%0A%2B%AC%B0%C2%0A%2B%CC%22%DFt%F5%08R3%CB%B7%9Bg%F9%92Bo2%EA%B6%C5%CC%ECq%81Gz%95%24%D8%F5%20bj%EE%A4%D5%E3%F7%8AB%B0%EBAZz%94%19%3DK%DC%87q%88'Y%85%BE%DD%84%E0%03T%00z%E9%BB%F2%7F%F4%24%DF%02%0C%00%C9H%D9%18%7B.%E6%93%00%00%00%00IEND%AEB%60%82");
114
- background-attachment: scroll;
115
- background-repeat: no-repeat;
116
- background-position: 1px 1px;
117
- margin-right: .5em;
118
- }
119
- .sns-collapsed-shortcode .CodeMirror,
120
- .sns-collapsed-shortcode .sns-ajax-wrap {
121
- visibility: hidden;
122
- position: absolute;
123
- }
124
- #add-mce-dropdown-names label {
125
- width: 50px;
126
- display: inline-block;
127
- }
128
- .sns-ajax-loading {
129
- vertical-align: middle;
130
- }
131
- .sns-ajax-wrap {
132
- height: 23px;
133
- }
134
- #sns-classes {
135
- overflow: hidden;
136
- width: 100%;
137
- }
138
- #SnS_classes_mce_wrapper {
139
- margin: 6px 0;
140
- }
141
- #mce-dropdown-names {
142
- display: none;
143
- }
144
- body.js #mce-dropdown-names {
145
- display: block;
146
- }
147
- #delete-mce-dropdown-names .sns-ajax-delete {
148
- cursor: pointer;
149
- display: inline-block;
150
- height: 10px;
151
- overflow: hidden;
152
- text-indent: -9999px;
153
- width: 10px;
154
- background: url("/wp-admin/images/xit.gif") no-repeat scroll 0 0 transparent;
155
- }
156
- #delete-mce-dropdown-names .sns-ajax-delete:hover {
157
- background: url("/wp-admin/images/xit.gif") no-repeat scroll -10px 0 transparent;
158
- }
159
- body.js #SnS_meta_box .title {
160
- display: none;
161
- }
162
- #SnS_meta_box > .inside {
163
- height: 300px;
164
- overflow: auto;
165
- padding: 6px 10px 8px;
166
- margin: 0;
167
- position: static;
168
- }
169
- body.no-js #side-sortables #SnS_meta_box > .inside {
170
- margin-top: 33px;
171
- padding-top: 0;
172
- }
173
- body.js #SnS_meta_box > .inside {
174
- height: auto;
175
- padding: 0 10px;
176
- margin: 6px 0 8px;
177
- }
178
- body.no-js #SnS_meta_box .wp-tab-bar {
179
- position: absolute;
180
- top: 36px;
181
- }
182
- #SnS_meta_box .wp-tab-bar {
183
- text-align: right;
184
- overflow: auto;
185
- width: 100%;
186
- padding: 0;
187
- margin-top: 3px;
188
- margin-bottom: -1px;
189
- }
190
- #SnS_meta_box .wp-tab-bar li {
191
- float: left;
192
- background-color: inherit;
193
- border: 0 none;
194
- margin: 0;
195
- padding: 0;
196
- display: inline;
197
- }
198
- #SnS_meta_box .wp-tab-bar a {
199
- display: block;
200
- border-radius: 3px 3px 0 0;
201
- border-style: none;
202
- border-width: 1px 1px 0 1px;
203
- padding: 3px 5px 5px;
204
- margin-right: 3px;
205
- text-decoration: none;
206
- }
207
- #SnS_meta_box .wp-tab-active a {
208
- background-color: #FFFFFF;
209
- border-color: #DFDFDF;
210
- border-style: solid;
211
- margin-bottom: -1px;
212
- }
213
- /*
214
- * .wp-tab-panel rules
215
- */
216
- body.js #SnS_meta_box .wp-tab-panel {
217
- display: none;
218
- }
219
- body.js #SnS_meta_box .wp-tabs-panel-active {
220
- display: block;
221
- }
222
- body.no-js #SnS_meta_box .wp-tab-panel {
223
- margin-bottom: 1em;
224
- }
225
- body.js #SnS_meta_box .wp-tab-panel {
226
- margin-bottom: 0;
227
- }
228
- #SnS_meta_box .wp-tab-panel {
229
- border-style: solid;
230
- border-width: 1px;
231
- overflow: auto;
232
- padding: 0.5em 0.9em;
233
- min-height: 200px;
234
- height: auto;
235
- }
236
- /* See @media */
237
- #normal-sortables #SnS_meta_box .wp-tab-bar,
238
- #advanced-sortables #SnS_meta_box .wp-tab-bar {
239
- float: left;
240
- margin: 0 -1px 0 5px;
241
- width: 121px;
242
- overflow: visible;
243
- }
244
- #normal-sortables #SnS_meta_box .wp-tab-panel,
245
- #advanced-sortables #SnS_meta_box .wp-tab-panel {
246
- margin-left: 125px;
247
- margin-right: 5px;
248
- }
249
- #normal-sortables #SnS_meta_box .wp-tab-bar a,
250
- #advanced-sortables #SnS_meta_box .wp-tab-bar a {
251
- padding: 8px;
252
- width: 104px;
253
- }
254
- #normal-sortables #SnS_meta_box .wp-tab-active a,
255
- #advanced-sortables #SnS_meta_box .wp-tab-active a {
256
- border-radius: 3px 0 0 3px;
257
- border-style: solid none solid solid;
258
- border-width: 1px 0 1px 1px;
259
- margin-right: -1px;
260
- font-weight: bold;
261
- }
262
- @media only screen and (max-width: 1050px) {
263
- body.no-js #SnS_meta_box > .inside {
264
- margin-top: 33px;
265
- padding-top: 0;
266
- }
267
- #normal-sortables #SnS_meta_box .wp-tab-bar,
268
- #advanced-sortables #SnS_meta_box .wp-tab-bar {
269
- float: none;
270
- margin: 3px 0 -1px;
271
- width: 100%;
272
- overflow: hidden;
273
- }
274
- #normal-sortables #SnS_meta_box .wp-tab-panel,
275
- #advanced-sortables #SnS_meta_box .wp-tab-panel {
276
- margin: 0 0 1em;
277
- }
278
- body.js #normal-sortables #SnS_meta_box .wp-tab-panel,
279
- body.js #advanced-sortables #SnS_meta_box .wp-tab-panel {
280
- margin: 0;
281
- }
282
- #normal-sortables #SnS_meta_box .wp-tab-bar a,
283
- #advanced-sortables #SnS_meta_box .wp-tab-bar a {
284
- padding: 3px 5px 5px;
285
- width: auto;
286
- }
287
- #normal-sortables #SnS_meta_box .wp-tab-active a,
288
- #advanced-sortables #SnS_meta_box .wp-tab-active a {
289
- border-radius: 3px 3px 0 0;
290
- border-style: solid solid none solid;
291
- border-width: 1px 1px 0 1px;
292
- margin-right: 3px;
293
- font-weight: normal;
294
- }
295
- }
1
+ #editorcontainer #content{font-family:"Courier New",Courier,monospace;}
2
+ .CodeMirror{height:200px;border:1px solid #DFDFDF;}
3
+ .autoheight .CodeMirror{height:auto;}
4
+ .autoheight .CodeMirror-scroll{overflow-x:auto;overflow-y:hidden;}
5
+ .style,.script,.less,.coffee{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background-color:white;margin:8px 0;background-clip:padding-box;font-family:"Courier New",Courier,monospace;}.style:before,.script:before,.less:before,.coffee:before,.style:after,.script:after,.less:after,.coffee:after{border:1px solid #dfdfdf;position:relative;z-index:3;display:block;padding:.5em;background-color:#f5f5f5;color:#333;font-family:"Courier New",Courier,monospace;line-height:1em;text-shadow:none;}
6
+ .style:before,.script:before,.less:before,.coffee:before{border-bottom:0 none;border-radius:5px 5px 0px 0px;}
7
+ .style:after,.script:after,.less:after,.coffee:after{border-top:0 none;border-radius:0px 0px 5px 5px;}
8
+ .style:before{content:'<style type="text/css">';}
9
+ .style:after{content:'</style>';}
10
+ .script:before{content:'<script type="text/javascript">';}
11
+ .script:after{content:'</script>';}
12
+ .less:before{content:'<style type="text/less">';}
13
+ .less:after{content:'</style>';}
14
+ .coffee:before{content:'<script type="text/coffeescript">';}
15
+ .coffee:after{content:'</script>';}
16
+ .sns-shortcode p{margin:0;}
17
+ .sns-collapsed-shortcode{overflow:hidden;}.sns-collapsed-shortcode .sns-collapsed-shortcode-btn{background-position:1px -107px;}
18
+ .sns-collapsed-shortcode .CodeMirror,.sns-collapsed-shortcode .sns-ajax-wrap{visibility:hidden;position:absolute;}
19
+ .sns-collapsed-shortcode-btn{cursor:pointer;float:left;height:1.4em;width:1.4em;background-image:url("data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%0F%00%00%00%7B%08%06%00%00%00%ABe%DA%9D%00%00%00%19tEXtSoftware%00Adobe%20ImageReadyq%C9e%3C%00%00%01%90IDATx%DA%EC%991N%C3%40%10E%D7%40%1D%A4(G%A0%A2%A0%E2%06Q%90%DB%5C%02%09%AA%F4%A1%8C%7BW%20%E5%10P%DA%22%E2%06%AERP%E5%08%08)%F4%D6%F2G%FA%C5j%E5%F5%AEM%81%10%B3%D2%D7%EC%3A~%1E%7Bci%BE%C6%99%B5%D6%8C%1D'%E6%07%E3%8F%C2g%FE%81%BA%AE%1B%84%0B.'%D0%17%E7%87%3C%CF%AFc%99%0B%E8%9C%CA%9Cy%E1%9F%98u%FDU%C8%FE%8A%B0p%0E%ED%90%F5%26%F5%99WP%CBy%CBu%DA%86!%CB%3B%C2%96%CB-%D7%83v%FB%01%B2%8C%DDC%9E9%A4%AA%AA%E6%7D%BFg%FAn%2B%AC%B0%C2%0A%2B%FC%CB0%EA%F4%BC%EF%F7%60%AD%028E%F8%80f(%B1%9FC3oh%2B6%832%23%EB%25%C2%1E%3A%A53%B8%EA*%F0%A1%CC%25A%C3X%26%DD6%B2.%3D3%23c%C1%E3%D1%CCk%E8HYg%BEN%DEm%7D%B7%15VXa%85%15V8v%82%D4e%B6%3F%E2%7D%12%CFZ%94%2C%F4%C7%D4%26%CB%94%26%E6%D6%B1%16%F1%0E%0D%7D%D7%8E.%C8%1D%93%E83%C3%F1%BC%89%EF%82%9E%9C%3E%89qZ%3C%FD%1B%26%86%0D%BA%17%FB%C4%BB0%A3Z%1Dlw%2C%A1F%5B%1D%0A%2B%AC%B0%C2%0A%2B%CC%22%DFt%F5%08R3%CB%B7%9Bg%F9%92Bo2%EA%B6%C5%CC%ECq%81Gz%95%24%D8%F5%20bj%EE%A4%D5%E3%F7%8AB%B0%EBAZz%94%19%3DK%DC%87q%88'Y%85%BE%DD%84%E0%03T%00z%E9%BB%F2%7F%F4%24%DF%02%0C%00%C9H%D9%18%7B.%E6%93%00%00%00%00IEND%AEB%60%82");background-attachment:scroll;background-repeat:no-repeat;background-position:1px 1px;margin-right:.5em;}
20
+ #add-mce-dropdown-names label{width:50px;display:inline-block;}
21
+ .sns-ajax-loading{display:none;vertical-align:top;}.sns-ajax-loading .spinner{float:none;}
22
+ .sns-ajax-wrap{height:23px;height:auto;}
23
+ #sns-classes{overflow:hidden;width:100%;}
24
+ #SnS_classes_mce_wrapper{margin:6px 0;}
25
+ #mce-dropdown-names{display:none;}body.js #mce-dropdown-names{display:block;}
26
+ #delete-mce-dropdown-names .sns-ajax-delete{cursor:pointer;display:inline-block;height:10px;overflow:hidden;text-indent:-9999px;width:10px;background:url("/wp-admin/images/xit.gif") no-repeat scroll 0 0 transparent;}#delete-mce-dropdown-names .sns-ajax-delete:hover{background:url("/wp-admin/images/xit.gif") no-repeat scroll -10px 0 transparent;}
27
+ body.js #SnS_meta_box .title{display:none;}
28
+ body.js #SnS_meta_box>.inside{height:auto;padding:0 10px;margin:6px 0 8px;}
29
+ body.js #SnS_meta_box .wp-tab-panel{display:none;margin-bottom:0;}
30
+ body.js #SnS_meta_box .wp-tabs-panel-active{display:block;}
31
+ body.no-js #SnS_meta_box .wp-tab-bar{position:absolute;top:36px;}
32
+ body.no-js #SnS_meta_box .wp-tab-panel{margin-bottom:1em;}
33
+ body.no-js #side-sortables #SnS_meta_box>.inside{margin-top:33px;padding-top:0;}
34
+ #SnS_meta_box>.inside{height:300px;overflow:auto;padding:6px 10px 8px;margin:0;position:static;}
35
+ #SnS_meta_box .wp-tab-bar{text-align:right;overflow:auto;width:100%;padding:0;margin-top:3px;margin-bottom:-1px;}#SnS_meta_box .wp-tab-bar li{float:left;background-color:inherit;border:0 none;margin:0;padding:0;display:inline;}
36
+ #SnS_meta_box .wp-tab-bar a{display:block;border-radius:3px 3px 0 0;border-style:none;border-width:1px 1px 0 1px;padding:3px 5px 5px;margin-right:3px;text-decoration:none;}
37
+ #SnS_meta_box .wp-tab-active a{background-color:#FFFFFF;border-color:#DFDFDF;border-style:solid;margin-bottom:-1px;}
38
+ #SnS_meta_box .wp-tab-panel{border-style:solid;border-width:1px;overflow:auto;padding:0.5em 0.9em;min-height:200px;height:auto;}
39
+ #normal-sortables #SnS_meta_box .wp-tab-bar,#advanced-sortables #SnS_meta_box .wp-tab-bar{float:left;margin:0 -1px 0 5px;width:121px;overflow:visible;}#normal-sortables #SnS_meta_box .wp-tab-bar a,#advanced-sortables #SnS_meta_box .wp-tab-bar a{padding:8px;width:104px;}
40
+ #normal-sortables #SnS_meta_box .wp-tab-panel,#advanced-sortables #SnS_meta_box .wp-tab-panel{margin-left:125px;margin-right:5px;max-height:none;}
41
+ #normal-sortables #SnS_meta_box .wp-tab-active a,#advanced-sortables #SnS_meta_box .wp-tab-active a{border-radius:3px 0 0 3px;border-style:solid none solid solid;border-width:1px 0 1px 1px;margin-right:-1px;font-weight:bold;}
42
+ @media only screen and (max-width:1050px){body.no-js #SnS_meta_box>.inside{margin-top:33px;padding-top:0;} body.js #normal-sortables #SnS_meta_box .wp-tab-panel,body.js #advanced-sortables #SnS_meta_box .wp-tab-panel{margin:0;} #normal-sortables #SnS_meta_box .wp-tab-bar,#advanced-sortables #SnS_meta_box .wp-tab-bar{float:none;margin:3px 0 -1px;width:100%;overflow:hidden;} #normal-sortables #SnS_meta_box .wp-tab-panel,#advanced-sortables #SnS_meta_box .wp-tab-panel{margin:0 0 1em;} #normal-sortables #SnS_meta_box .wp-tab-bar a,#advanced-sortables #SnS_meta_box .wp-tab-bar a{padding:3px 5px 5px;width:auto;} #normal-sortables #SnS_meta_box .wp-tab-active a,#advanced-sortables #SnS_meta_box .wp-tab-active a{border-radius:3px 3px 0 0;border-style:solid solid none solid;border-width:1px 1px 0 1px;margin-right:3px;font-weight:normal;}}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
css/options-styles.css CHANGED
@@ -1,179 +1,26 @@
1
- /* Options.css */
2
-
3
- textarea.code {
4
- display: block;
5
- }
6
- .CodeMirror {
7
- border: 1px solid #DFDFDF;
8
- background-color: white;
9
- border-radius: 3px;
10
- margin: 8px 0 6px;
11
- -moz-background-clip: padding;
12
- -webkit-background-clip: padding-box;
13
- background-clip: padding-box;
14
- overflow: hidden;
15
- font-family: "Courier New", Courier, monospace;
16
- }
17
-
18
- /* Code Decorations */
19
- .style > .CodeMirror:before,
20
- .style > .CodeMirror:after {
21
- display: block;
22
- padding: .5em;
23
- background-color: #f5f5f5;
24
- }
25
- .style > .CodeMirror:before {
26
- border-bottom: 1px solid #dfdfdf;
27
- }
28
- .style > .CodeMirror:after {
29
- border-top: 1px solid #dfdfdf;
30
- }
31
- .style > .CodeMirror:before {
32
- content: '<style type="text/css">';
33
- }
34
- .style > .CodeMirror:after {
35
- content: '</style>';
36
- }
37
- .script > .CodeMirror:before,
38
- .script > .CodeMirror:after {
39
- display: block;
40
- padding: .5em;
41
- background-color: #f5f5f5;
42
- }
43
- .script > .CodeMirror:before {
44
- border-bottom: 1px solid #dfdfdf;
45
- }
46
- .script > .CodeMirror:after {
47
- border-top: 1px solid #dfdfdf;
48
- }
49
- .script > .CodeMirror:before {
50
- content: '<script type="text/javascript">';
51
- }
52
- .script > .CodeMirror:after {
53
- content: '</script>';
54
- }
55
- .less > .CodeMirror:before,
56
- .less > .CodeMirror:after {
57
- display: block;
58
- padding: .5em;
59
- background-color: #f5f5f5;
60
- }
61
- .less > .CodeMirror:before {
62
- border-bottom: 1px solid #dfdfdf;
63
- }
64
- .less > .CodeMirror:after {
65
- border-top: 1px solid #dfdfdf;
66
- }
67
- .less > .CodeMirror:before {
68
- content: '<style type="text/less">';
69
- }
70
- .less > .CodeMirror:after {
71
- content: '</style>';
72
- }
73
- .coffee > .CodeMirror:before,
74
- .coffee > .CodeMirror:after {
75
- display: block;
76
- padding: .5em;
77
- background-color: #f5f5f5;
78
- }
79
- .coffee > .CodeMirror:before {
80
- border-bottom: 1px solid #dfdfdf;
81
- }
82
- .coffee > .CodeMirror:after {
83
- border-top: 1px solid #dfdfdf;
84
- }
85
- .coffee > .CodeMirror:before {
86
- content: '<script type="text/coffeescript">';
87
- }
88
- .coffee > .CodeMirror:after {
89
- content: '</script>';
90
- }
91
- /* end Code Decorations */
92
-
93
-
94
- body .CodeMirror-scroll {
95
- height: auto;
96
- min-height: 50px;
97
- max-height: 300px;
98
- overflow: auto;
99
- }
100
- .scripts-n-styles_page_sns_theme .CodeMirror-scroll {
101
- max-height: none;
102
- }
103
- #icon-sns {
104
- background: no-repeat center url('../images/icon32.png');
105
- }
106
-
107
- .sns-less-ide .disabled {
108
- cursor: default;
109
- }
110
- .sns-less-ide .inside {
111
- margin: 6px 0;
112
- padding: 0 10px;
113
- line-height: 1.4em;
114
- }
115
- .sns-collapsed {
116
- overflow: hidden;
117
- }
118
- .sns-collapsed .sns-collapsed-btn {
119
- background-position: 1px -107px;
120
- }
121
- .sns-collapsed-btn + label,
122
- .sns-collapsed-btn + p {
123
- height: 1.4em;
124
- display: block;
125
- margin: 0;
126
- }
127
- .sns-collapsed-btn {
128
- cursor: pointer;
129
- float: left;
130
- height: 1.4em;
131
- width: 1.4em;
132
- background-image: url("data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%0F%00%00%00%7B%08%06%00%00%00%ABe%DA%9D%00%00%00%19tEXtSoftware%00Adobe%20ImageReadyq%C9e%3C%00%00%01%90IDATx%DA%EC%991N%C3%40%10E%D7%40%1D%A4(G%A0%A2%A0%E2%06Q%90%DB%5C%02%09%AA%F4%A1%8C%7BW%20%E5%10P%DA%22%E2%06%AERP%E5%08%08)%F4%D6%F2G%FA%C5j%E5%F5%AEM%81%10%B3%D2%D7%EC%3A~%1E%7Bci%BE%C6%99%B5%D6%8C%1D'%E6%07%E3%8F%C2g%FE%81%BA%AE%1B%84%0B.'%D0%17%E7%87%3C%CF%AFc%99%0B%E8%9C%CA%9Cy%E1%9F%98u%FDU%C8%FE%8A%B0p%0E%ED%90%F5%26%F5%99WP%CBy%CBu%DA%86!%CB%3B%C2%96%CB-%D7%83v%FB%01%B2%8C%DDC%9E9%A4%AA%AA%E6%7D%BFg%FAn%2B%AC%B0%C2%0A%2B%FC%CB0%EA%F4%BC%EF%F7%60%AD%028E%F8%80f(%B1%9FC3oh%2B6%832%23%EB%25%C2%1E%3A%A53%B8%EA*%F0%A1%CC%25A%C3X%26%DD6%B2.%3D3%23c%C1%E3%D1%CCk%E8HYg%BEN%DEm%7D%B7%15VXa%85%15V8v%82%D4e%B6%3F%E2%7D%12%CFZ%94%2C%F4%C7%D4%26%CB%94%26%E6%D6%B1%16%F1%0E%0D%7D%D7%8E.%C8%1D%93%E83%C3%F1%BC%89%EF%82%9E%9C%3E%89qZ%3C%FD%1B%26%86%0D%BA%17%FB%C4%BB0%A3Z%1Dlw%2C%A1F%5B%1D%0A%2B%AC%B0%C2%0A%2B%CC%22%DFt%F5%08R3%CB%B7%9Bg%F9%92Bo2%EA%B6%C5%CC%ECq%81Gz%95%24%D8%F5%20bj%EE%A4%D5%E3%F7%8AB%B0%EBAZz%94%19%3DK%DC%87q%88'Y%85%BE%DD%84%E0%03T%00z%E9%BB%F2%7F%F4%24%DF%02%0C%00%C9H%D9%18%7B.%E6%93%00%00%00%00IEND%AEB%60%82");
133
- background-attachment: scroll;
134
- background-repeat: no-repeat;
135
- background-position: 1px 1px;
136
- margin-right: .5em;
137
-
138
- }
139
-
140
- .sns-collapsed .CodeMirror,
141
- .sns-collapsed .code,
142
- .sns-collapsed .sns-ajax-wrap,
143
- .sns-collapsed textarea {
144
- visibility: hidden;
145
- position: absolute;
146
- }
147
-
148
- .sns-ajax-loading {
149
- vertical-align: middle;
150
- }
151
- .sns-ajax-wrap {
152
- height: 23px;
153
- }
154
- .sns-ajax-wrap .single-status {
155
- display: inline-block;
156
- vertical-align: middle
157
- }
158
- .sns-ajax-wrap .single-status .settings-error {
159
- margin: 0;
160
- }
161
-
162
- .sns-shortcode {
163
- background-color: #F5F5F5;
164
- background-image: -moz-linear-gradient(center top , #F9F9F9, #F5F5F5);
165
- border-color: #DFDFDF;
166
- border-radius: 3px 3px 3px 3px;
167
- box-shadow: 0 1px 0 #FFFFFF inset;
168
- border-style: solid;
169
- border-width: 1px;
170
- line-height: 1;
171
- margin-bottom: 20px;
172
- padding: 0;
173
- }
174
- .sns-shortcode .inside {
175
- margin: 6px 0 8px;
176
- position: relative;
177
- line-height: 1.4em;
178
- padding: 0 10px;
179
- }
1
+ textarea.code{display:block;}
2
+ .CodeMirror{height:200px;border:1px solid #DFDFDF;}
3
+ .autoheight .CodeMirror{height:auto;}
4
+ .autoheight .CodeMirror-scroll{overflow-x:auto;overflow-y:hidden;}
5
+ .style,.script,.less,.coffee{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background-color:white;margin:8px 0 6px;background-clip:padding-box;font-family:"Courier New",Courier,monospace;}.style:before,.script:before,.less:before,.coffee:before,.style:after,.script:after,.less:after,.coffee:after{border:1px solid #dfdfdf;position:relative;z-index:3;display:block;padding:.5em;background-color:#f5f5f5;color:#333;font-family:"Courier New",Courier,monospace;line-height:1em;text-shadow:none;}
6
+ .style:before,.script:before,.less:before,.coffee:before{border-bottom:0 none;border-radius:5px 5px 0px 0px;}
7
+ .style:after,.script:after,.less:after,.coffee:after{border-top:0 none;border-radius:0px 0px 5px 5px;}
8
+ .style>label,.script>label,.less>label,.coffee>label{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;padding:3px 6px;border:1px solid #dfdfdf;border-top:0 none;}
9
+ .style:before{content:'<style type="text/css">';}
10
+ .style:after{content:'</style>';}
11
+ .script:before{content:'<script type="text/javascript">';}
12
+ .script:after{content:'</script>';}
13
+ .less:before{content:'<style type="text/less">';}
14
+ .less:after{content:'</style>';}
15
+ .coffee:before{content:'<script type="text/coffeescript">';}
16
+ .coffee:after{content:'</script>';}
17
+ .scripts-n-styles_page_sns_theme .CodeMirror-scroll{max-height:none;}
18
+ #icon-sns{background:no-repeat center url('../images/icon32.png');}
19
+ .sns-less-ide .disabled{cursor:default;}
20
+ .sns-less-ide .inside{margin:6px 0;padding:0 10px;line-height:1.4em;}
21
+ .sns-collapsed-btn{cursor:pointer;float:left;height:1.4em;width:1.4em;background-image:url("data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%0F%00%00%00%7B%08%06%00%00%00%ABe%DA%9D%00%00%00%19tEXtSoftware%00Adobe%20ImageReadyq%C9e%3C%00%00%01%90IDATx%DA%EC%991N%C3%40%10E%D7%40%1D%A4(G%A0%A2%A0%E2%06Q%90%DB%5C%02%09%AA%F4%A1%8C%7BW%20%E5%10P%DA%22%E2%06%AERP%E5%08%08)%F4%D6%F2G%FA%C5j%E5%F5%AEM%81%10%B3%D2%D7%EC%3A~%1E%7Bci%BE%C6%99%B5%D6%8C%1D'%E6%07%E3%8F%C2g%FE%81%BA%AE%1B%84%0B.'%D0%17%E7%87%3C%CF%AFc%99%0B%E8%9C%CA%9Cy%E1%9F%98u%FDU%C8%FE%8A%B0p%0E%ED%90%F5%26%F5%99WP%CBy%CBu%DA%86!%CB%3B%C2%96%CB-%D7%83v%FB%01%B2%8C%DDC%9E9%A4%AA%AA%E6%7D%BFg%FAn%2B%AC%B0%C2%0A%2B%FC%CB0%EA%F4%BC%EF%F7%60%AD%028E%F8%80f(%B1%9FC3oh%2B6%832%23%EB%25%C2%1E%3A%A53%B8%EA*%F0%A1%CC%25A%C3X%26%DD6%B2.%3D3%23c%C1%E3%D1%CCk%E8HYg%BEN%DEm%7D%B7%15VXa%85%15V8v%82%D4e%B6%3F%E2%7D%12%CFZ%94%2C%F4%C7%D4%26%CB%94%26%E6%D6%B1%16%F1%0E%0D%7D%D7%8E.%C8%1D%93%E83%C3%F1%BC%89%EF%82%9E%9C%3E%89qZ%3C%FD%1B%26%86%0D%BA%17%FB%C4%BB0%A3Z%1Dlw%2C%A1F%5B%1D%0A%2B%AC%B0%C2%0A%2B%CC%22%DFt%F5%08R3%CB%B7%9Bg%F9%92Bo2%EA%B6%C5%CC%ECq%81Gz%95%24%D8%F5%20bj%EE%A4%D5%E3%F7%8AB%B0%EBAZz%94%19%3DK%DC%87q%88'Y%85%BE%DD%84%E0%03T%00z%E9%BB%F2%7F%F4%24%DF%02%0C%00%C9H%D9%18%7B.%E6%93%00%00%00%00IEND%AEB%60%82");background-attachment:scroll;background-repeat:no-repeat;background-position:1px 1px;margin-right:.5em;}.sns-collapsed-btn+label,.sns-collapsed-btn+p{height:1.4em;display:block;margin:0;}
22
+ .sns-collapsed{overflow:hidden;}.sns-collapsed .sns-collapsed-btn{background-position:1px -107px;}
23
+ .sns-collapsed .CodeMirror,.sns-collapsed .code,.sns-collapsed .sns-ajax-wrap,.sns-collapsed textarea{visibility:hidden;position:absolute;}
24
+ .sns-ajax-loading{display:none;vertical-align:top;}.sns-ajax-loading .spinner{float:none;}
25
+ .sns-ajax-wrap{height:23px;}.sns-ajax-wrap .single-status{display:inline-block;vertical-align:middle;}.sns-ajax-wrap .single-status .settings-error{margin:0;}
26
+ .sns-shortcode{background-color:#F5F5F5;background-image:-moz-linear-gradient(center top, #f9f9f9, #f5f5f5);border-color:#DFDFDF;border-radius:3px 3px 3px 3px;box-shadow:0 1px 0 #FFFFFF inset;border-style:solid;border-width:1px;line-height:1;margin-bottom:20px;padding:0;}.sns-shortcode .inside{margin:6px 0 8px;position:relative;line-height:1.4em;padding:0 10px;}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/class-sns-admin.php CHANGED
@@ -1,12 +1,12 @@
1
  <?php
2
  /**
3
  * Scripts n Styles Admin Class
4
- *
5
  * Allows WordPress admin users the ability to add custom CSS
6
  * and JavaScript directly to individual Post, Pages or custom
7
  * post types.
8
  */
9
-
10
  require_once( 'class-sns-meta-box.php' );
11
  require_once( 'class-sns-code-editor.php' );
12
  require_once( 'class-sns-settings-page.php' );
@@ -24,10 +24,9 @@ class SnS_Admin
24
  */
25
  const OPTION_GROUP = 'scripts_n_styles';
26
  const MENU_SLUG = 'sns';
27
- static $cm_themes = array( 'default', 'ambiance', 'blackboard', 'cobalt', 'eclipse', 'elegant', 'lesser-dark', 'monokai', 'neat', 'night', 'rubyblue', 'xq-dark' );
28
  static $parent_slug = '';
29
  /**#@-*/
30
-
31
  /**
32
  * Initializing method.
33
  * @static
@@ -36,35 +35,35 @@ class SnS_Admin
36
  add_action( 'admin_menu', array( 'SnS_Admin_Meta_Box', 'init' ) );
37
  add_action( 'admin_menu', array( 'SnS_Admin_Code_Editor', 'init' ) );
38
  add_action( 'network_admin_menu', array( 'SnS_Admin_Code_Editor', 'init' ) );
39
-
40
  add_action( 'admin_menu', array( __CLASS__, 'menu' ) );
41
-
42
  add_action( 'admin_init', array( 'SnS_AJAX', 'init' ) );
43
  add_action( 'admin_init', array( __CLASS__, 'load_plugin_textdomain' ) );
44
-
45
- $plugin_file = plugin_basename( Scripts_n_Styles::$file );
46
  add_filter( "plugin_action_links_$plugin_file", array( __CLASS__, 'plugin_action_links') );
47
-
48
  register_activation_hook( Scripts_n_Styles::$file, array( __CLASS__, 'upgrade' ) );
49
  }
50
-
51
- function load_plugin_textdomain() {
52
  load_plugin_textdomain( 'scripts-n-styles', false, dirname( plugin_basename( Scripts_n_Styles::$file ) ) . '/languages/' );
53
  }
54
- function menu() {
55
  if ( ! current_user_can( 'manage_options' ) || ! current_user_can( 'unfiltered_html' ) ) return;
56
-
57
  $options = get_option( 'SnS_options' );
58
  $menu_spot = isset( $options[ 'menu_position' ] ) ? $options[ 'menu_position' ]: '';
59
  $top_spots = array( 'menu', 'object', 'utility' );
60
  $sub_spots = array( 'tools.php', 'options-general.php', 'themes.php' );
61
-
62
  if ( in_array( $menu_spot, $top_spots ) ) $parent_slug = SnS_Admin::MENU_SLUG;
63
  else if ( in_array( $menu_spot, $sub_spots ) ) $parent_slug = $menu_spot;
64
  else $parent_slug = 'tools.php';
65
-
66
  self::$parent_slug = $parent_slug;
67
-
68
  switch( $menu_spot ) {
69
  case 'menu':
70
  add_menu_page( __( 'Scripts n Styles', 'scripts-n-styles' ), __( 'Scripts n Styles', 'scripts-n-styles' ), 'unfiltered_html', $parent_slug, array( 'SnS_Form', 'page' ), plugins_url( 'images/menu.png', Scripts_n_Styles::$file ) );
@@ -78,16 +77,16 @@ class SnS_Admin
78
  }
79
  SnS_Global_Page::init();
80
  SnS_Hoops_Page::init();
81
- if ( current_theme_supports( 'scripts-n-styles' ) )
82
  SnS_Theme_Page::init();
83
  SnS_Settings_Page::init();
84
  SnS_Usage_Page::init();
85
  }
86
-
87
  /**
88
  * Nav Tabs
89
  */
90
- function nav() {
91
  $options = get_option( 'SnS_options' );
92
  $page = $_REQUEST[ 'page' ];
93
  ?>
@@ -106,11 +105,11 @@ class SnS_Admin
106
  </h3>
107
  <?php
108
  }
109
-
110
  /**
111
  * Settings Page help
112
  */
113
- function help() {
114
  $help = '<p>' . __( 'In default (non MultiSite) WordPress installs, both <em>Administrators</em> and <em>Editors</em> can access <em>Scripts-n-Styles</em> on individual edit screens. Only <em>Administrators</em> can access this Options Page. In MultiSite WordPress installs, only <em>"Super Admin"</em> users can access either <em>Scripts-n-Styles</em> on individual edit screens or this Options Page. If other plugins change capabilities (specifically "unfiltered_html"), other users can be granted access.', 'scripts-n-styles' ) . '</p>';
115
  $help .= '<p><strong>' . __( 'Reference: jQuery Wrappers', 'scripts-n-styles' ) . '</strong></p>' .
116
  '<pre><code>jQuery(document).ready(function($) {
@@ -131,13 +130,13 @@ class SnS_Admin
131
  'content' => $help
132
  )
133
  );
134
- if ( 'post' != $screen->id )
135
  $screen->set_help_sidebar( $sidebar );
136
  } else {
137
  add_contextual_help( $screen, $help . $sidebar );
138
  }
139
  }
140
-
141
  /**
142
  * Utility Method: Sets defaults if not previously set. Sets stored 'version' to VERSION.
143
  */
@@ -146,7 +145,7 @@ class SnS_Admin
146
  if ( ! $options ) $options = array();
147
  $options[ 'version' ] = Scripts_n_Styles::VERSION;
148
  update_option( 'SnS_options', $options );
149
-
150
  /*
151
  * upgrade proceedure
152
  */
@@ -164,34 +163,34 @@ class SnS_Admin
164
  )
165
  )
166
  );
167
-
168
  foreach( $posts as $post) {
169
  $styles = get_post_meta( $post->ID, '_SnS_styles', true );
170
  if ( empty( $styles ) )
171
  $styles = get_post_meta( $post->ID, 'uFp_styles', true );
172
-
173
  $scripts = get_post_meta( $post->ID, '_SnS_scripts', true );
174
  if ( empty( $scripts ) )
175
  $scripts = get_post_meta( $post->ID, 'uFp_scripts', true );
176
-
177
  $SnS = array();
178
- if ( ! empty( $styles ) )
179
  $SnS[ 'styles' ] = $styles;
180
-
181
- if ( ! empty( $scripts ) )
182
  $SnS[ 'scripts' ] = $scripts;
183
-
184
- if ( ! empty( $SnS ) )
185
  update_post_meta( $post->ID, '_SnS', $SnS );
186
-
187
  delete_post_meta( $post->ID, 'uFp_styles' );
188
  delete_post_meta( $post->ID, 'uFp_scripts' );
189
  delete_post_meta( $post->ID, '_SnS_styles' );
190
  delete_post_meta( $post->ID, '_SnS_scripts' );
191
  }
192
-
193
  }
194
-
195
  /**
196
  * Adds link to the Settings Page in the WordPress "Plugin Action Links" array.
197
  * @param array $actions
@@ -201,7 +200,7 @@ class SnS_Admin
201
  $actions[ 'settings' ] = '<a href="' . menu_page_url( SnS_Settings_Page::MENU_SLUG, false ) . '"/>' . __( 'Settings' ) . '</a>';
202
  return $actions;
203
  }
204
-
205
  }
206
 
207
  ?>
1
  <?php
2
  /**
3
  * Scripts n Styles Admin Class
4
+ *
5
  * Allows WordPress admin users the ability to add custom CSS
6
  * and JavaScript directly to individual Post, Pages or custom
7
  * post types.
8
  */
9
+
10
  require_once( 'class-sns-meta-box.php' );
11
  require_once( 'class-sns-code-editor.php' );
12
  require_once( 'class-sns-settings-page.php' );
24
  */
25
  const OPTION_GROUP = 'scripts_n_styles';
26
  const MENU_SLUG = 'sns';
 
27
  static $parent_slug = '';
28
  /**#@-*/
29
+
30
  /**
31
  * Initializing method.
32
  * @static
35
  add_action( 'admin_menu', array( 'SnS_Admin_Meta_Box', 'init' ) );
36
  add_action( 'admin_menu', array( 'SnS_Admin_Code_Editor', 'init' ) );
37
  add_action( 'network_admin_menu', array( 'SnS_Admin_Code_Editor', 'init' ) );
38
+
39
  add_action( 'admin_menu', array( __CLASS__, 'menu' ) );
40
+
41
  add_action( 'admin_init', array( 'SnS_AJAX', 'init' ) );
42
  add_action( 'admin_init', array( __CLASS__, 'load_plugin_textdomain' ) );
43
+
44
+ $plugin_file = plugin_basename( Scripts_n_Styles::$file );
45
  add_filter( "plugin_action_links_$plugin_file", array( __CLASS__, 'plugin_action_links') );
46
+
47
  register_activation_hook( Scripts_n_Styles::$file, array( __CLASS__, 'upgrade' ) );
48
  }
49
+
50
+ static function load_plugin_textdomain() {
51
  load_plugin_textdomain( 'scripts-n-styles', false, dirname( plugin_basename( Scripts_n_Styles::$file ) ) . '/languages/' );
52
  }
53
+ static function menu() {
54
  if ( ! current_user_can( 'manage_options' ) || ! current_user_can( 'unfiltered_html' ) ) return;
55
+
56
  $options = get_option( 'SnS_options' );
57
  $menu_spot = isset( $options[ 'menu_position' ] ) ? $options[ 'menu_position' ]: '';
58
  $top_spots = array( 'menu', 'object', 'utility' );
59
  $sub_spots = array( 'tools.php', 'options-general.php', 'themes.php' );
60
+
61
  if ( in_array( $menu_spot, $top_spots ) ) $parent_slug = SnS_Admin::MENU_SLUG;
62
  else if ( in_array( $menu_spot, $sub_spots ) ) $parent_slug = $menu_spot;
63
  else $parent_slug = 'tools.php';
64
+
65
  self::$parent_slug = $parent_slug;
66
+
67
  switch( $menu_spot ) {
68
  case 'menu':
69
  add_menu_page( __( 'Scripts n Styles', 'scripts-n-styles' ), __( 'Scripts n Styles', 'scripts-n-styles' ), 'unfiltered_html', $parent_slug, array( 'SnS_Form', 'page' ), plugins_url( 'images/menu.png', Scripts_n_Styles::$file ) );
77
  }
78
  SnS_Global_Page::init();
79
  SnS_Hoops_Page::init();
80
+ if ( current_theme_supports( 'scripts-n-styles' ) )
81
  SnS_Theme_Page::init();
82
  SnS_Settings_Page::init();
83
  SnS_Usage_Page::init();
84
  }
85
+
86
  /**
87
  * Nav Tabs
88
  */
89
+ static function nav() {
90
  $options = get_option( 'SnS_options' );
91
  $page = $_REQUEST[ 'page' ];
92
  ?>
105
  </h3>
106
  <?php
107
  }
108
+
109
  /**
110
  * Settings Page help
111
  */
112
+ static function help() {
113
  $help = '<p>' . __( 'In default (non MultiSite) WordPress installs, both <em>Administrators</em> and <em>Editors</em> can access <em>Scripts-n-Styles</em> on individual edit screens. Only <em>Administrators</em> can access this Options Page. In MultiSite WordPress installs, only <em>"Super Admin"</em> users can access either <em>Scripts-n-Styles</em> on individual edit screens or this Options Page. If other plugins change capabilities (specifically "unfiltered_html"), other users can be granted access.', 'scripts-n-styles' ) . '</p>';
114
  $help .= '<p><strong>' . __( 'Reference: jQuery Wrappers', 'scripts-n-styles' ) . '</strong></p>' .
115
  '<pre><code>jQuery(document).ready(function($) {
130
  'content' => $help
131
  )
132
  );
133
+ if ( 'post' != $screen->id )
134
  $screen->set_help_sidebar( $sidebar );
135
  } else {
136
  add_contextual_help( $screen, $help . $sidebar );
137
  }
138
  }
139
+
140
  /**
141
  * Utility Method: Sets defaults if not previously set. Sets stored 'version' to VERSION.
142
  */
145
  if ( ! $options ) $options = array();
146
  $options[ 'version' ] = Scripts_n_Styles::VERSION;
147
  update_option( 'SnS_options', $options );
148
+
149
  /*
150
  * upgrade proceedure
151
  */
163
  )
164
  )
165
  );
166
+
167
  foreach( $posts as $post) {
168
  $styles = get_post_meta( $post->ID, '_SnS_styles', true );
169
  if ( empty( $styles ) )
170
  $styles = get_post_meta( $post->ID, 'uFp_styles', true );
171
+
172
  $scripts = get_post_meta( $post->ID, '_SnS_scripts', true );
173
  if ( empty( $scripts ) )
174
  $scripts = get_post_meta( $post->ID, 'uFp_scripts', true );
175
+
176
  $SnS = array();
177
+ if ( ! empty( $styles ) )
178
  $SnS[ 'styles' ] = $styles;
179
+
180
+ if ( ! empty( $scripts ) )
181
  $SnS[ 'scripts' ] = $scripts;
182
+
183
+ if ( ! empty( $SnS ) )
184
  update_post_meta( $post->ID, '_SnS', $SnS );
185
+
186
  delete_post_meta( $post->ID, 'uFp_styles' );
187
  delete_post_meta( $post->ID, 'uFp_scripts' );
188
  delete_post_meta( $post->ID, '_SnS_styles' );
189
  delete_post_meta( $post->ID, '_SnS_scripts' );
190
  }
191
+
192
  }
193
+
194
  /**
195
  * Adds link to the Settings Page in the WordPress "Plugin Action Links" array.
196
  * @param array $actions
200
  $actions[ 'settings' ] = '<a href="' . menu_page_url( SnS_Settings_Page::MENU_SLUG, false ) . '"/>' . __( 'Settings' ) . '</a>';
201
  return $actions;
202
  }
203
+
204
  }
205
 
206
  ?>
includes/class-sns-ajax.php CHANGED
@@ -1,12 +1,12 @@
1
  <?php
2
  class SnS_AJAX
3
  {
4
- function init() {
5
  // Keep track of current tab.
6
  add_action( 'wp_ajax_sns_update_tab', array( __CLASS__, 'update_tab' ) );
7
  // TinyMCE requests a css file.
8
  add_action( 'wp_ajax_sns_tinymce_styles', array( __CLASS__, 'tinymce_styles' ) );
9
-
10
  // Ajax Saves.
11
  add_action( 'wp_ajax_sns_classes', array( __CLASS__, 'classes' ) );
12
  add_action( 'wp_ajax_sns_scripts', array( __CLASS__, 'scripts' ) );
@@ -15,70 +15,142 @@ class SnS_AJAX
15
  add_action( 'wp_ajax_sns_delete_class', array( __CLASS__, 'delete_class' ) );
16
  add_action( 'wp_ajax_sns_shortcodes', array( __CLASS__, 'shortcodes' ) );
17
  add_action( 'wp_ajax_sns_open_theme_panels', array( __CLASS__, 'open_theme_panels' ) );
 
18
  }
19
- function open_theme_panels() {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20
  check_ajax_referer( SnS_Admin::OPTION_GROUP . "-options" );
21
-
22
  $name = isset( $_POST[ 'file-name' ] ) ? $_POST[ 'file-name' ] : '';
23
  if ( empty( $name ) ) exit( 'empty name');
24
-
25
  $collapsed = isset( $_POST[ 'collapsed' ] ) ? $_POST[ 'collapsed' ] : '';
26
  if ( empty( $collapsed ) ) exit( 'empty value');
27
-
28
  if ( ! $user = get_current_user_id() ) exit( 'Bad User' );
29
-
30
  $open_theme_panels = json_decode( get_user_option( 'sns_open_theme_panels', $user ), true );
31
  $open_theme_panels = is_array( $open_theme_panels ) ? $open_theme_panels : array();
32
  $open_theme_panels[ $name ] = $collapsed;
33
  $open_theme_panels = json_encode( $open_theme_panels );
34
  update_user_option( $user, 'sns_open_theme_panels', $open_theme_panels );
35
-
36
  exit();
37
  }
38
- function update_tab() {
39
  check_ajax_referer( Scripts_n_Styles::$file );
40
-
41
  $active_tab = isset( $_POST[ 'active_tab' ] ) ? 's'.$_POST[ 'active_tab' ] : 's0';
42
-
43
  if ( ! $user = wp_get_current_user() ) exit( 'Bad User' );
44
-
45
  $success = update_user_option( $user->ID, 'current_sns_tab', $active_tab, true);
46
  exit();
47
  }
48
- function tinymce_styles() {
49
  check_ajax_referer( 'sns_tinymce_styles' );
50
-
51
  if ( empty( $_REQUEST[ 'post_id' ] ) ) exit( 'Bad post ID.' );
52
  $post_id = absint( $_REQUEST[ 'post_id' ] );
53
-
54
  $options = get_option( 'SnS_options' );
55
  $SnS = get_post_meta( $post_id, '_SnS', true );
56
  $styles = isset( $SnS['styles'] ) ? $SnS[ 'styles' ]: array();
57
-
58
- header('Content-Type: text/css; charset=' . get_option('blog_charset'));
59
-
60
  if ( ! empty( $options[ 'styles' ] ) ) echo $options[ 'styles' ];
61
-
62
  if ( ! empty( $styles[ 'styles' ] ) ) echo $styles[ 'styles' ];
63
-
64
  exit();
65
  }
66
-
67
  // AJAX handlers
68
- function classes() {
69
  check_ajax_referer( Scripts_n_Styles::$file );
70
  if ( ! current_user_can( 'unfiltered_html' ) || ! current_user_can( 'edit_posts' ) ) exit( 'Insufficient Privileges.' );
71
-
72
  if ( empty( $_REQUEST[ 'post_id' ] ) ) exit( 'Bad post ID.' );
73
  if ( ! isset( $_REQUEST[ 'classes_body' ], $_REQUEST[ 'classes_post' ] ) ) exit( 'Data missing.' );
74
-
75
  $post_id = absint( $_REQUEST[ 'post_id' ] );
76
  $SnS = get_post_meta( $post_id, '_SnS', true );
77
  $styles = isset( $SnS['styles'] ) ? $SnS[ 'styles' ]: array();
78
-
79
  $styles = self::maybe_set( $styles, 'classes_body' );
80
  $styles = self::maybe_set( $styles, 'classes_post' );
81
-
82
  if ( empty( $styles ) ) {
83
  if ( isset( $SnS['styles'] ) )
84
  unset( $SnS['styles'] );
@@ -86,29 +158,29 @@ class SnS_AJAX
86
  $SnS[ 'styles' ] = $styles;
87
  }
88
  self::maybe_update( $post_id, '_SnS', $SnS );
89
-
90
- header('Content-Type: application/json; charset=' . get_option('blog_charset'));
91
  echo json_encode( array(
92
  "classes_post" => $_REQUEST[ 'classes_post' ]
93
  , "classes_body" => $_REQUEST[ 'classes_body' ]
94
  ) );
95
-
96
  exit();
97
  }
98
- function scripts() {
99
  check_ajax_referer( Scripts_n_Styles::$file );
100
  if ( ! current_user_can( 'unfiltered_html' ) || ! current_user_can( 'edit_posts' ) ) exit( 'Insufficient Privileges.' );
101
-
102
  if ( empty( $_REQUEST[ 'post_id' ] ) ) exit( 'Bad post ID.' );
103
  if ( ! isset( $_REQUEST[ 'scripts' ], $_REQUEST[ 'scripts_in_head' ] ) ) exit( 'Data incorrectly sent.' );
104
-
105
  $post_id = absint( $_REQUEST[ 'post_id' ] );
106
  $SnS = get_post_meta( $post_id, '_SnS', true );
107
  $scripts = isset( $SnS['scripts'] ) ? $SnS[ 'scripts' ]: array();
108
-
109
  $scripts = self::maybe_set( $scripts, 'scripts_in_head' );
110
  $scripts = self::maybe_set( $scripts, 'scripts' );
111
-
112
  if ( empty( $scripts ) ) {
113
  if ( isset( $SnS['scripts'] ) )
114
  unset( $SnS['scripts'] );
@@ -116,28 +188,28 @@ class SnS_AJAX
116
  $SnS[ 'scripts' ] = $scripts;
117
  }
118
  self::maybe_update( $post_id, '_SnS', $SnS );
119
-
120
- header('Content-Type: application/json; charset=' . get_option('blog_charset'));
121
  echo json_encode( array(
122
  "scripts" => $_REQUEST[ 'scripts' ]
123
  , "scripts_in_head" => $_REQUEST[ 'scripts_in_head' ]
124
  ) );
125
-
126
  exit();
127
  }
128
- function styles() {
129
  check_ajax_referer( Scripts_n_Styles::$file );
130
  if ( ! current_user_can( 'unfiltered_html' ) || ! current_user_can( 'edit_posts' ) ) exit( 'Insufficient Privileges.' );
131
-
132
  if ( empty( $_REQUEST[ 'post_id' ] ) ) exit( 'Bad post ID.' );
133
  if ( ! isset( $_REQUEST[ 'styles' ] ) ) exit( 'Data incorrectly sent.' );
134
-
135
  $post_id = absint( $_REQUEST[ 'post_id' ] );
136
  $SnS = get_post_meta( $post_id, '_SnS', true );
137
  $styles = isset( $SnS['styles'] ) ? $SnS[ 'styles' ]: array();
138
-
139
  $styles = self::maybe_set( $styles, 'styles' );
140
-
141
  if ( empty( $styles ) ) {
142
  if ( isset( $SnS['styles'] ) )
143
  unset( $SnS['styles'] );
@@ -145,18 +217,18 @@ class SnS_AJAX
145
  $SnS[ 'styles' ] = $styles;
146
  }
147
  self::maybe_update( $post_id, '_SnS', $SnS );
148
-
149
- header('Content-Type: application/json; charset=' . get_option('blog_charset'));
150
  echo json_encode( array(
151
  "styles" => $_REQUEST[ 'styles' ],
152
  ) );
153
-
154
  exit();
155
  }
156
- function dropdown() {
157
  check_ajax_referer( Scripts_n_Styles::$file );
158
  if ( ! current_user_can( 'unfiltered_html' ) || ! current_user_can( 'edit_posts' ) ) exit( 'Insufficient Privileges.' );
159
-
160
  if ( empty( $_REQUEST[ 'format' ] ) ) exit( 'Missing Format.' );
161
  if ( empty( $_REQUEST[ 'format' ][ 'title' ] ) ) exit( 'Title is required.' );
162
  if ( empty( $_REQUEST[ 'format' ][ 'classes' ] ) ) exit( 'Classes is required.' );
@@ -165,44 +237,44 @@ class SnS_AJAX
165
  empty( $_REQUEST[ 'format' ][ 'block' ] ) &&
166
  empty( $_REQUEST[ 'format' ][ 'selector' ] )
167
  ) exit( 'A type is required.' );
168
-
169
  if ( empty( $_REQUEST[ 'post_id' ] ) ) exit( 'Bad post ID.' );
170
  $post_id = absint( $_REQUEST[ 'post_id' ] );
171
-
172
  $SnS = get_post_meta( $post_id, '_SnS', true );
173
  $styles = isset( $SnS['styles'] ) ? $SnS[ 'styles' ]: array();
174
-
175
  if ( ! isset( $styles[ 'classes_mce' ] ) ) $styles[ 'classes_mce' ] = array();
176
-
177
  // pass title as key to be able to delete.
178
  $styles[ 'classes_mce' ][ $_REQUEST[ 'format' ][ 'title' ] ] = $_REQUEST[ 'format' ];
179
-
180
  $SnS[ 'styles' ] = $styles;
181
  update_post_meta( $post_id, '_SnS', $SnS );
182
-
183
- header('Content-Type: application/json; charset=' . get_option('blog_charset'));
184
  echo json_encode( array(
185
  "classes_mce" => array_values( $styles[ 'classes_mce' ] )
186
  ) );
187
-
188
  exit();
189
  }
190
- function delete_class() {
191
  check_ajax_referer( Scripts_n_Styles::$file );
192
  if ( ! current_user_can( 'unfiltered_html' ) || ! current_user_can( 'edit_posts' ) ) exit( 'Insufficient Privileges.' );
193
-
194
  if ( empty( $_REQUEST[ 'post_id' ] ) ) exit( 'Bad post ID.' );
195
  $post_id = absint( $_REQUEST[ 'post_id' ] );
196
  $SnS = get_post_meta( $post_id, '_SnS', true );
197
  $styles = isset( $SnS['styles'] ) ? $SnS[ 'styles' ]: array();
198
-
199
  $title = $_REQUEST[ 'delete' ];
200
-
201
  if ( isset( $styles[ 'classes_mce' ][ $title ] ) ) unset( $styles[ 'classes_mce' ][ $title ] );
202
  else exit ( 'No Format of that name.' );
203
-
204
  if ( empty( $styles[ 'classes_mce' ] ) ) unset( $styles[ 'classes_mce' ] );
205
-
206
  if ( empty( $styles ) ) {
207
  if ( isset( $SnS['styles'] ) )
208
  unset( $SnS['styles'] );
@@ -210,28 +282,28 @@ class SnS_AJAX
210
  $SnS[ 'styles' ] = $styles;
211
  }
212
  self::maybe_update( $post_id, '_SnS', $SnS );
213
-
214
  if ( ! isset( $styles[ 'classes_mce' ] ) ) $styles[ 'classes_mce' ] = array( 'Empty' );
215
-
216
- header('Content-Type: application/json; charset=' . get_option('blog_charset'));
217
  echo json_encode( array(
218
  "classes_mce" => array_values( $styles[ 'classes_mce' ] )
219
  ) );
220
-
221
  exit();
222
  }
223
- function shortcodes( $action ) {
224
  check_ajax_referer( Scripts_n_Styles::$file );
225
  if ( ! current_user_can( 'unfiltered_html' ) || ! current_user_can( 'edit_posts' ) ) exit( 'Insufficient Privileges.' );
226
-
227
  if ( empty( $_REQUEST[ 'post_id' ] ) ) exit( 'Bad post ID.' );
228
  if ( empty( $_REQUEST[ 'subaction' ] ) ) exit( 'missing directive' );
229
-
230
  if ( in_array( $_REQUEST[ 'subaction' ], array( 'add', 'update', 'delete' ) ) )
231
  $subaction = $_REQUEST[ 'subaction' ];
232
  else
233
  exit( 'unknown directive' );
234
-
235
  $post_id = absint( $_REQUEST[ 'post_id' ] );
236
  $SnS = get_post_meta( $post_id, '_SnS', true );
237
  $shortcodes = isset( $SnS[ 'shortcodes' ] ) ? $SnS[ 'shortcodes' ]: array();
@@ -239,36 +311,36 @@ class SnS_AJAX
239
  $code = 0;
240
  $key = '';
241
  $value = '';
242
-
243
  if ( isset( $_REQUEST[ 'name' ] ) )
244
  $key = $_REQUEST[ 'name' ];
245
  else
246
  exit( 'bad directive.' );
247
-
248
  if ( '' == $key ) {
249
  $key = count( $shortcodes );
250
  while ( isset( $shortcodes[ $key ] ) )
251
  $key++;
252
  }
253
-
254
  switch ( $subaction ) {
255
  case 'add':
256
  if ( empty( $_REQUEST[ 'shortcode' ] ) )
257
  exit( 'empty value.' );
258
  else
259
  $value = $_REQUEST[ 'shortcode' ];
260
-
261
  if ( isset( $shortcodes[ $key ] ) ) {
262
  $countr = 1;
263
  while ( isset( $shortcodes[ $key . '_' . $countr ] ) )
264
  $countr++;
265
  $key .= '_' . $countr;
266
- }
267
-
268
  $code = 1;
269
  $shortcodes[ $key ] = $value;
270
  break;
271
-
272
  case 'update':
273
  if ( empty( $_REQUEST[ 'shortcode' ] ) ) {
274
  if ( isset( $shortcodes[ $key ] ) )
@@ -285,7 +357,7 @@ class SnS_AJAX
285
  $message = 'updated ' . $key;
286
  }
287
  break;
288
-
289
  case 'delete':
290
  if ( isset( $shortcodes[ $key ] ) )
291
  unset( $shortcodes[ $key ] );
@@ -295,7 +367,7 @@ class SnS_AJAX
295
  $message = $key;
296
  break;
297
  }
298
-
299
  if ( empty( $shortcodes ) ) {
300
  if ( isset( $SnS[ 'shortcodes' ] ) )
301
  unset( $SnS[ 'shortcodes' ] );
@@ -303,9 +375,9 @@ class SnS_AJAX
303
  $SnS[ 'shortcodes' ] = $shortcodes;
304
  }
305
  self::maybe_update( $post_id, '_SnS', $SnS );
306
-
307
  if ( 1 < $code ) {
308
- header('Content-Type: application/json; charset=' . get_option('blog_charset'));
309
  echo json_encode( array(
310
  "message" => $message
311
  , "code" => $code
@@ -314,24 +386,24 @@ class SnS_AJAX
314
  header('Content-Type: text/html; charset=' . get_option('blog_charset'));
315
  ?><div class="sns-shortcode widget">
316
  <div class="inside">
317
- <p>[sns_shortcode name="<?php echo esc_attr( $key ) ?>"]</p>
318
  <textarea style="width: 98%;" cols="40" rows="5" name="SnS_shortcodes[existing][<?php echo esc_attr( $key ) ?>]"
319
- data-sns-shortcode-key="<?php echo esc_attr( $key ) ?>" class="codemirror-new htmlmixed"><?php echo esc_textarea( stripslashes ( $value ) ) ?></textarea>
320
- <div class="sns-ajax-wrap"><a href="#" class="sns-ajax-delete-shortcode button">Delete</a> &nbsp; <a href="#" class="sns-ajax-update-shortcode button">Update</a> <img src="/wp-admin/images/wpspin_light.gif" class="sns-ajax-loading" style="display: none;"></div>
321
  </div>
322
  </div><?php
323
  }
324
  exit();
325
  }
326
-
327
  // Differs from SnS_Admin_Meta_Box::maybe_set() in that this needs no prefix.
328
- function maybe_set( $o, $i ) {
329
  if ( empty( $_REQUEST[ $i ] ) ) {
330
  if ( isset( $o[ $i ] ) ) unset( $o[ $i ] );
331
  } else $o[ $i ] = $_REQUEST[ $i ];
332
  return $o;
333
  }
334
- function maybe_update( $id, $name, $meta ) {
335
  if ( empty( $meta ) ) {
336
  delete_post_meta( $id, $name );
337
  } else {
1
  <?php
2
  class SnS_AJAX
3
  {
4
+ static function init() {
5
  // Keep track of current tab.
6
  add_action( 'wp_ajax_sns_update_tab', array( __CLASS__, 'update_tab' ) );
7
  // TinyMCE requests a css file.
8
  add_action( 'wp_ajax_sns_tinymce_styles', array( __CLASS__, 'tinymce_styles' ) );
9
+
10
  // Ajax Saves.
11
  add_action( 'wp_ajax_sns_classes', array( __CLASS__, 'classes' ) );
12
  add_action( 'wp_ajax_sns_scripts', array( __CLASS__, 'scripts' ) );
15
  add_action( 'wp_ajax_sns_delete_class', array( __CLASS__, 'delete_class' ) );
16
  add_action( 'wp_ajax_sns_shortcodes', array( __CLASS__, 'shortcodes' ) );
17
  add_action( 'wp_ajax_sns_open_theme_panels', array( __CLASS__, 'open_theme_panels' ) );
18
+ add_action( 'wp_ajax_sns_plugin_editor', array( __CLASS__, 'plugin_editor' ) );
19
  }
20
+
21
+ static function plugin_editor() {
22
+ check_ajax_referer( 'sns_plugin_editor' );
23
+ if ( ! current_user_can( 'edit_plugins' ) ) exit( 'Insufficient Privileges.' );
24
+
25
+ $active = false;
26
+ $plugin = '';
27
+ $debug = array();
28
+ $need_update = false;
29
+ $plugins = array_keys( get_plugins() );
30
+ $file = $_REQUEST[ 'file' ];
31
+ $short = substr( $file, 0, strpos( $file, '/' ) );
32
+
33
+ if ( ! in_array( $file, $plugins ) ) {
34
+ $need_update = true;
35
+
36
+ if ( in_array( $_REQUEST[ 'plugin' ], $plugins ) ) {
37
+ $plugin = $_REQUEST[ 'plugin' ];
38
+ } else {
39
+ foreach ( $plugins as $maybe ) {
40
+ if ( false !== strpos( $maybe, $short ) ) {
41
+ $plugin = $maybe;
42
+ break;
43
+ }
44
+ }
45
+ }
46
+ } else {
47
+ $plugin = $file;
48
+ while ( 1 < substr_count( $plugin, "/" ) ) {
49
+ $plugin = dirname( $plugin );
50
+ }
51
+ }
52
+
53
+ $active = is_plugin_active( $plugin ) || is_plugin_active_for_network( $plugin );
54
+
55
+ $files = get_plugin_files( $plugin );
56
+
57
+ add_filter( 'editable_extensions', array( 'SnS_Admin_Code_Editor', 'extend' ) );
58
+ $editable_extensions = array('php', 'txt', 'text', 'js', 'css', 'html', 'htm', 'xml', 'inc', 'include');
59
+ $editable_extensions = (array) apply_filters('editable_extensions', $editable_extensions);
60
+ $ul = '';
61
+ foreach ( $files as $plugin_file ) {
62
+ // Get the extension of the file
63
+ if ( preg_match( '/\.([^.]+)$/', $plugin_file, $matches ) ) {
64
+ $ext = strtolower( $matches[1] );
65
+ // If extension is not in the acceptable list, skip it
66
+ if ( ! in_array( $ext, $editable_extensions ) )
67
+ continue;
68
+ } else {
69
+ // No extension found
70
+ continue;
71
+ }
72
+ $ul .= '<li';
73
+ $ul .= $file == $plugin_file ? ' class="highlight">' : '>';
74
+ $ul .= '<a href="plugin-editor.php?file=' . urlencode( $plugin_file ) . '&amp;plugin=' . urlencode( $plugin ) . '">';
75
+ $ul .= str_replace( $short . '/', '', $plugin_file );
76
+ $ul .= '</a>';
77
+ $ul .= '</li>';
78
+ }
79
+
80
+ header('Content-Type: application/json; charset=UTF-8');
81
+ echo json_encode( array(
82
+ "plugin" => $plugin,
83
+ "active" => $active,
84
+ "files" => $files,
85
+ "need_update" => $need_update,
86
+ "ul" => $ul,
87
+ ) );
88
+
89
+ exit();
90
+ }
91
+ static function open_theme_panels() {
92
  check_ajax_referer( SnS_Admin::OPTION_GROUP . "-options" );
93
+
94
  $name = isset( $_POST[ 'file-name' ] ) ? $_POST[ 'file-name' ] : '';
95
  if ( empty( $name ) ) exit( 'empty name');
96
+
97
  $collapsed = isset( $_POST[ 'collapsed' ] ) ? $_POST[ 'collapsed' ] : '';
98
  if ( empty( $collapsed ) ) exit( 'empty value');
99
+
100
  if ( ! $user = get_current_user_id() ) exit( 'Bad User' );
101
+
102
  $open_theme_panels = json_decode( get_user_option( 'sns_open_theme_panels', $user ), true );
103
  $open_theme_panels = is_array( $open_theme_panels ) ? $open_theme_panels : array();
104
  $open_theme_panels[ $name ] = $collapsed;
105
  $open_theme_panels = json_encode( $open_theme_panels );
106
  update_user_option( $user, 'sns_open_theme_panels', $open_theme_panels );
107
+
108
  exit();
109
  }
110
+ static function update_tab() {
111
  check_ajax_referer( Scripts_n_Styles::$file );
112
+
113
  $active_tab = isset( $_POST[ 'active_tab' ] ) ? 's'.$_POST[ 'active_tab' ] : 's0';
114
+
115
  if ( ! $user = wp_get_current_user() ) exit( 'Bad User' );
116
+
117
  $success = update_user_option( $user->ID, 'current_sns_tab', $active_tab, true);
118
  exit();
119
  }
120
+ static function tinymce_styles() {
121
  check_ajax_referer( 'sns_tinymce_styles' );
122
+
123
  if ( empty( $_REQUEST[ 'post_id' ] ) ) exit( 'Bad post ID.' );
124
  $post_id = absint( $_REQUEST[ 'post_id' ] );
125
+
126
  $options = get_option( 'SnS_options' );
127
  $SnS = get_post_meta( $post_id, '_SnS', true );
128
  $styles = isset( $SnS['styles'] ) ? $SnS[ 'styles' ]: array();
129
+
130
+ header('Content-Type: text/css; charset=UTF-8');
131
+
132
  if ( ! empty( $options[ 'styles' ] ) ) echo $options[ 'styles' ];
133
+
134
  if ( ! empty( $styles[ 'styles' ] ) ) echo $styles[ 'styles' ];
135
+
136
  exit();
137
  }
138
+
139
  // AJAX handlers
140
+ static function classes() {
141
  check_ajax_referer( Scripts_n_Styles::$file );
142
  if ( ! current_user_can( 'unfiltered_html' ) || ! current_user_can( 'edit_posts' ) ) exit( 'Insufficient Privileges.' );
143
+
144
  if ( empty( $_REQUEST[ 'post_id' ] ) ) exit( 'Bad post ID.' );
145
  if ( ! isset( $_REQUEST[ 'classes_body' ], $_REQUEST[ 'classes_post' ] ) ) exit( 'Data missing.' );
146
+
147
  $post_id = absint( $_REQUEST[ 'post_id' ] );
148
  $SnS = get_post_meta( $post_id, '_SnS', true );
149
  $styles = isset( $SnS['styles'] ) ? $SnS[ 'styles' ]: array();
150
+
151
  $styles = self::maybe_set( $styles, 'classes_body' );
152
  $styles = self::maybe_set( $styles, 'classes_post' );
153
+
154
  if ( empty( $styles ) ) {
155
  if ( isset( $SnS['styles'] ) )
156
  unset( $SnS['styles'] );
158
  $SnS[ 'styles' ] = $styles;
159
  }
160
  self::maybe_update( $post_id, '_SnS', $SnS );
161
+
162
+ header('Content-Type: application/json; charset=UTF-8');
163
  echo json_encode( array(
164
  "classes_post" => $_REQUEST[ 'classes_post' ]
165
  , "classes_body" => $_REQUEST[ 'classes_body' ]
166
  ) );
167
+
168
  exit();
169
  }
170
+ static function scripts() {
171
  check_ajax_referer( Scripts_n_Styles::$file );
172
  if ( ! current_user_can( 'unfiltered_html' ) || ! current_user_can( 'edit_posts' ) ) exit( 'Insufficient Privileges.' );
173
+
174
  if ( empty( $_REQUEST[ 'post_id' ] ) ) exit( 'Bad post ID.' );
175
  if ( ! isset( $_REQUEST[ 'scripts' ], $_REQUEST[ 'scripts_in_head' ] ) ) exit( 'Data incorrectly sent.' );
176
+
177
  $post_id = absint( $_REQUEST[ 'post_id' ] );
178
  $SnS = get_post_meta( $post_id, '_SnS', true );
179
  $scripts = isset( $SnS['scripts'] ) ? $SnS[ 'scripts' ]: array();
180
+
181
  $scripts = self::maybe_set( $scripts, 'scripts_in_head' );
182
  $scripts = self::maybe_set( $scripts, 'scripts' );
183
+
184
  if ( empty( $scripts ) ) {
185
  if ( isset( $SnS['scripts'] ) )
186
  unset( $SnS['scripts'] );
188
  $SnS[ 'scripts' ] = $scripts;
189
  }
190
  self::maybe_update( $post_id, '_SnS', $SnS );
191
+
192
+ header('Content-Type: application/json; charset=UTF-8');
193
  echo json_encode( array(
194
  "scripts" => $_REQUEST[ 'scripts' ]
195
  , "scripts_in_head" => $_REQUEST[ 'scripts_in_head' ]
196
  ) );
197
+
198
  exit();
199
  }
200
+ static function styles() {
201
  check_ajax_referer( Scripts_n_Styles::$file );
202
  if ( ! current_user_can( 'unfiltered_html' ) || ! current_user_can( 'edit_posts' ) ) exit( 'Insufficient Privileges.' );
203
+
204
  if ( empty( $_REQUEST[ 'post_id' ] ) ) exit( 'Bad post ID.' );
205
  if ( ! isset( $_REQUEST[ 'styles' ] ) ) exit( 'Data incorrectly sent.' );
206
+
207
  $post_id = absint( $_REQUEST[ 'post_id' ] );
208
  $SnS = get_post_meta( $post_id, '_SnS', true );
209
  $styles = isset( $SnS['styles'] ) ? $SnS[ 'styles' ]: array();
210
+
211
  $styles = self::maybe_set( $styles, 'styles' );
212
+
213
  if ( empty( $styles ) ) {
214
  if ( isset( $SnS['styles'] ) )
215
  unset( $SnS['styles'] );
217
  $SnS[ 'styles' ] = $styles;
218
  }
219
  self::maybe_update( $post_id, '_SnS', $SnS );
220
+
221
+ header('Content-Type: application/json; charset=UTF-8');
222
  echo json_encode( array(
223
  "styles" => $_REQUEST[ 'styles' ],
224
  ) );
225
+
226
  exit();
227
  }
228
+ static function dropdown() {
229
  check_ajax_referer( Scripts_n_Styles::$file );
230
  if ( ! current_user_can( 'unfiltered_html' ) || ! current_user_can( 'edit_posts' ) ) exit( 'Insufficient Privileges.' );
231
+
232
  if ( empty( $_REQUEST[ 'format' ] ) ) exit( 'Missing Format.' );
233
  if ( empty( $_REQUEST[ 'format' ][ 'title' ] ) ) exit( 'Title is required.' );
234
  if ( empty( $_REQUEST[ 'format' ][ 'classes' ] ) ) exit( 'Classes is required.' );
237
  empty( $_REQUEST[ 'format' ][ 'block' ] ) &&
238
  empty( $_REQUEST[ 'format' ][ 'selector' ] )
239
  ) exit( 'A type is required.' );
240
+
241
  if ( empty( $_REQUEST[ 'post_id' ] ) ) exit( 'Bad post ID.' );
242
  $post_id = absint( $_REQUEST[ 'post_id' ] );
243
+
244
  $SnS = get_post_meta( $post_id, '_SnS', true );
245
  $styles = isset( $SnS['styles'] ) ? $SnS[ 'styles' ]: array();
246
+
247
  if ( ! isset( $styles[ 'classes_mce' ] ) ) $styles[ 'classes_mce' ] = array();
248
+
249
  // pass title as key to be able to delete.
250
  $styles[ 'classes_mce' ][ $_REQUEST[ 'format' ][ 'title' ] ] = $_REQUEST[ 'format' ];
251
+
252
  $SnS[ 'styles' ] = $styles;
253
  update_post_meta( $post_id, '_SnS', $SnS );
254
+
255
+ header('Content-Type: application/json; charset=UTF-8');
256
  echo json_encode( array(
257
  "classes_mce" => array_values( $styles[ 'classes_mce' ] )
258
  ) );
259
+
260
  exit();
261
  }
262
+ static function delete_class() {
263
  check_ajax_referer( Scripts_n_Styles::$file );
264
  if ( ! current_user_can( 'unfiltered_html' ) || ! current_user_can( 'edit_posts' ) ) exit( 'Insufficient Privileges.' );
265
+
266
  if ( empty( $_REQUEST[ 'post_id' ] ) ) exit( 'Bad post ID.' );
267
  $post_id = absint( $_REQUEST[ 'post_id' ] );
268
  $SnS = get_post_meta( $post_id, '_SnS', true );
269
  $styles = isset( $SnS['styles'] ) ? $SnS[ 'styles' ]: array();
270
+
271
  $title = $_REQUEST[ 'delete' ];
272
+
273
  if ( isset( $styles[ 'classes_mce' ][ $title ] ) ) unset( $styles[ 'classes_mce' ][ $title ] );
274
  else exit ( 'No Format of that name.' );
275
+
276
  if ( empty( $styles[ 'classes_mce' ] ) ) unset( $styles[ 'classes_mce' ] );
277
+
278
  if ( empty( $styles ) ) {
279
  if ( isset( $SnS['styles'] ) )
280
  unset( $SnS['styles'] );
282
  $SnS[ 'styles' ] = $styles;
283
  }
284
  self::maybe_update( $post_id, '_SnS', $SnS );
285
+
286
  if ( ! isset( $styles[ 'classes_mce' ] ) ) $styles[ 'classes_mce' ] = array( 'Empty' );
287
+
288
+ header('Content-Type: application/json; charset=UTF-8');
289
  echo json_encode( array(
290
  "classes_mce" => array_values( $styles[ 'classes_mce' ] )
291
  ) );
292
+
293
  exit();
294
  }
295
+ static function shortcodes() {
296
  check_ajax_referer( Scripts_n_Styles::$file );
297
  if ( ! current_user_can( 'unfiltered_html' ) || ! current_user_can( 'edit_posts' ) ) exit( 'Insufficient Privileges.' );
298
+
299
  if ( empty( $_REQUEST[ 'post_id' ] ) ) exit( 'Bad post ID.' );
300
  if ( empty( $_REQUEST[ 'subaction' ] ) ) exit( 'missing directive' );
301
+
302
  if ( in_array( $_REQUEST[ 'subaction' ], array( 'add', 'update', 'delete' ) ) )
303
  $subaction = $_REQUEST[ 'subaction' ];
304
  else
305
  exit( 'unknown directive' );
306
+
307
  $post_id = absint( $_REQUEST[ 'post_id' ] );
308
  $SnS = get_post_meta( $post_id, '_SnS', true );
309
  $shortcodes = isset( $SnS[ 'shortcodes' ] ) ? $SnS[ 'shortcodes' ]: array();
311
  $code = 0;
312
  $key = '';
313
  $value = '';
314
+
315
  if ( isset( $_REQUEST[ 'name' ] ) )
316
  $key = $_REQUEST[ 'name' ];
317
  else
318
  exit( 'bad directive.' );
319
+
320
  if ( '' == $key ) {
321
  $key = count( $shortcodes );
322
  while ( isset( $shortcodes[ $key ] ) )
323
  $key++;
324
  }
325
+
326
  switch ( $subaction ) {
327
  case 'add':
328
  if ( empty( $_REQUEST[ 'shortcode' ] ) )
329
  exit( 'empty value.' );
330
  else
331
  $value = $_REQUEST[ 'shortcode' ];
332
+
333
  if ( isset( $shortcodes[ $key ] ) ) {
334
  $countr = 1;
335
  while ( isset( $shortcodes[ $key . '_' . $countr ] ) )
336
  $countr++;
337
  $key .= '_' . $countr;
338
+ }
339
+
340
  $code = 1;
341
  $shortcodes[ $key ] = $value;
342
  break;
343
+
344
  case 'update':
345
  if ( empty( $_REQUEST[ 'shortcode' ] ) ) {
346
  if ( isset( $shortcodes[ $key ] ) )
357
  $message = 'updated ' . $key;
358
  }
359
  break;
360
+
361
  case 'delete':
362
  if ( isset( $shortcodes[ $key ] ) )
363
  unset( $shortcodes[ $key ] );
367
  $message = $key;
368
  break;
369
  }
370
+
371
  if ( empty( $shortcodes ) ) {
372
  if ( isset( $SnS[ 'shortcodes' ] ) )
373
  unset( $SnS[ 'shortcodes' ] );
375
  $SnS[ 'shortcodes' ] = $shortcodes;
376
  }
377
  self::maybe_update( $post_id, '_SnS', $SnS );
378
+
379
  if ( 1 < $code ) {
380
+ header('Content-Type: application/json; charset=UTF-8');
381
  echo json_encode( array(
382
  "message" => $message
383
  , "code" => $code
386
  header('Content-Type: text/html; charset=' . get_option('blog_charset'));
387
  ?><div class="sns-shortcode widget">
388
  <div class="inside">
389
+ <p>[hoops name="<?php echo esc_attr( $key ) ?>"]</p>
390
  <textarea style="width: 98%;" cols="40" rows="5" name="SnS_shortcodes[existing][<?php echo esc_attr( $key ) ?>]"
391
+ data-sns-shortcode-key="<?php echo esc_attr( $key ) ?>" class="codemirror-new htmlmixed"><?php echo esc_textarea( stripslashes( $value ) ) ?></textarea>
392
+ <div class="sns-ajax-wrap"><a href="#" class="sns-ajax-delete-shortcode button">Delete</a> &nbsp; <a href="#" class="sns-ajax-update-shortcode button">Update</a> <span class="sns-ajax-loading"><span class="spinner" style="display: inline-block;"></span></span></div>
393
  </div>
394
  </div><?php
395
  }
396
  exit();
397
  }
398
+
399
  // Differs from SnS_Admin_Meta_Box::maybe_set() in that this needs no prefix.
400
+ static function maybe_set( $o, $i ) {
401
  if ( empty( $_REQUEST[ $i ] ) ) {
402
  if ( isset( $o[ $i ] ) ) unset( $o[ $i ] );
403
  } else $o[ $i ] = $_REQUEST[ $i ];
404
  return $o;
405
  }
406
+ static function maybe_update( $id, $name, $meta ) {
407
  if ( empty( $meta ) ) {
408
  delete_post_meta( $id, $name );
409
  } else {
includes/class-sns-code-editor.php CHANGED
@@ -2,30 +2,35 @@
2
  /**
3
  * SnS_Admin_Code_Editor
4
  */
5
-
6
  class SnS_Admin_Code_Editor
7
  {
8
  /**
9
- * Initializing method.
10
  */
11
- function init() {
12
  add_action( 'admin_head-theme-editor.php', array( __CLASS__, 'styles' ) );
13
  add_action( 'admin_head-plugin-editor.php', array( __CLASS__, 'styles' ) );
14
  add_filter( 'editable_extensions', array( __CLASS__, 'extend' ) );
15
  }
16
-
17
- function extend( $editable_extensions ) {
18
  $editable_extensions[] = 'less';
19
  $editable_extensions[] = 'coffee';
 
20
  return $editable_extensions;
21
  }
22
-
23
- function styles() {
24
  $options = get_option( 'SnS_options' );
25
  $cm_theme = isset( $options[ 'cm_theme' ] ) ? $options[ 'cm_theme' ] : 'default';
26
  wp_enqueue_style( 'sns-code-editor' );
27
  wp_enqueue_script( 'sns-code-editor' );
28
  wp_localize_script( 'sns-code-editor', 'codemirror_options', array( 'theme' => $cm_theme ) );
 
 
 
 
29
  }
30
  }
31
  ?>
2
  /**
3
  * SnS_Admin_Code_Editor
4
  */
5
+
6
  class SnS_Admin_Code_Editor
7
  {
8
  /**
9
+ * Initializing method.
10
  */
11
+ static function init() {
12
  add_action( 'admin_head-theme-editor.php', array( __CLASS__, 'styles' ) );
13
  add_action( 'admin_head-plugin-editor.php', array( __CLASS__, 'styles' ) );
14
  add_filter( 'editable_extensions', array( __CLASS__, 'extend' ) );
15
  }
16
+
17
+ static function extend( $editable_extensions ) {
18
  $editable_extensions[] = 'less';
19
  $editable_extensions[] = 'coffee';
20
+ $editable_extensions[] = 'md';
21
  return $editable_extensions;
22
  }
23
+
24
+ static function styles() {
25
  $options = get_option( 'SnS_options' );
26
  $cm_theme = isset( $options[ 'cm_theme' ] ) ? $options[ 'cm_theme' ] : 'default';
27
  wp_enqueue_style( 'sns-code-editor' );
28
  wp_enqueue_script( 'sns-code-editor' );
29
  wp_localize_script( 'sns-code-editor', 'codemirror_options', array( 'theme' => $cm_theme ) );
30
+ wp_localize_script( 'sns-code-editor', 'sns_plugin_editor_options', array(
31
+ 'action' => 'sns_plugin_editor',
32
+ 'nonce' => wp_create_nonce( 'sns_plugin_editor')
33
+ ) );
34
  }
35
  }
36
  ?>
includes/class-sns-form.php CHANGED
@@ -1,24 +1,25 @@
1
  <?php
2
  /**
3
  * SnS_Global_Page
4
- *
5
  * Allows WordPress admin users the ability to add custom CSS
6
  * and JavaScript directly to individual Post, Pages or custom
7
  * post types.
8
  */
9
-
10
  class SnS_Form
11
  {
12
  /**
13
  * Settings Page
14
  * Outputs a textarea for setting 'scripts_in_head'.
15
  */
16
- function textarea( $args ) {
17
  extract( $args );
18
  $options = get_option( $setting );
19
  $value = isset( $options[ $label_for ] ) ? $options[ $label_for ] : '';
20
- if ( isset( $wrap_class ) ) echo '<div class="'. $wrap_class . '"';
21
- $output = '<textarea';
 
22
  $output .= ( $style ) ? ' style="' . $style . '"': '';
23
  $output .= ( $class ) ? ' class="' . $class . '"': '';
24
  $output .= ( $rows ) ? ' rows="' . $rows . '"': '';
@@ -26,14 +27,14 @@ class SnS_Form
26
  $output .= ' name="' . $setting . '[' . $label_for . ']"';
27
  $output .= ' id="' . $label_for . '">';
28
  $output .= esc_textarea( $value ) . '</textarea>';
29
- if ( isset( $wrap_class ) ) echo '</div>';
30
  if ( $description ) {
31
  $output .= $description;
32
  }
33
  echo $output;
34
  }
35
-
36
- function radio( $args ) {
37
  extract( $args );
38
  $options = get_option( $setting );
39
  $default = isset( $default ) ? $default : '';
@@ -59,16 +60,16 @@ class SnS_Form
59
  }
60
  echo $output;
61
  }
62
-
63
  /**
64
  * Settings Page
65
  * Outputs a select element for selecting options to set scripts for including.
66
  */
67
- function select( $args ) {
68
  extract( $args );
69
  $options = get_option( $setting );
70
  $selected = isset( $options[ $label_for ] ) ? $options[ $label_for ] : array();
71
-
72
  $output = '<select';
73
  $output .= ' id="' . $label_for . '"';
74
  $output .= ' name="' . $setting . '[' . $label_for . ']';
@@ -95,52 +96,52 @@ class SnS_Form
95
  }
96
  echo $output;
97
  }
98
-
99
  /**
100
  * Settings Page
101
  * Outputs the Admin Page and calls the Settings registered with the Settings API.
102
  */
103
- function take_action() {
104
  global $action, $option_page, $page, $new_whitelist_options;
105
-
106
  if ( ! current_user_can( 'manage_options' ) || ! current_user_can( 'unfiltered_html' ) || ( is_multisite() && ! is_super_admin() ) )
107
  wp_die( __( 'Cheatin&#8217; uh?' ) );
108
-
109
  // Handle menu-redirected update message.
110
  if ( isset( $_REQUEST[ 'message' ] ) && $_REQUEST[ 'message' ] )
111
  add_settings_error( $page, 'settings_updated', __( 'Settings saved.' ), 'updated' );
112
-
113
  if ( ! isset( $_REQUEST[ 'action' ], $_REQUEST[ 'option_page' ], $_REQUEST[ 'page' ] ) )
114
  return;
115
-
116
  wp_reset_vars( array( 'action', 'option_page', 'page' ) );
117
-
118
  check_admin_referer( $option_page . '-options' );
119
-
120
  if ( ! isset( $new_whitelist_options[ $option_page ] ) )
121
  return;
122
-
123
  $options = $new_whitelist_options[ $option_page ];
124
  foreach ( (array) $options as $option ) {
125
  $old = get_option( $option );
126
  $option = trim( $option );
127
- $value = null;
128
  if ( isset($_POST[ $option ]) )
129
- $value = $_POST[ $option ];
130
- if ( !is_array( $value ) )
131
- $value = trim( $value );
132
-
133
- $value = array_merge( $old, stripslashes_deep( $value ) );
134
-
135
  // Allow modification of $value
136
- $value = apply_filters( 'sns_options_pre_update_option', $value, $page, $action );
137
-
138
  update_option( $option, $value );
139
  }
140
-
141
  if ( ! count( get_settings_errors() ) )
142
  add_settings_error( $page, 'settings_updated', __( 'Settings saved.' ), 'updated' );
143
-
144
  if ( isset( $_REQUEST[ 'ajaxsubmit' ] ) && $_REQUEST[ 'ajaxsubmit' ] ) {
145
  ob_start();
146
  settings_errors( $page );
@@ -148,7 +149,7 @@ class SnS_Form
148
  ob_end_clean();
149
  exit( $output );
150
  }
151
-
152
  // Redirect to new page if changed.
153
  if ( isset( $_POST[ $option ][ 'menu_position' ] ) && ( $value[ 'menu_position' ] != SnS_Admin::$parent_slug ) ) {
154
  switch( $value[ 'menu_position' ] ) {
@@ -169,7 +170,7 @@ class SnS_Form
169
  * Settings Page
170
  * Outputs the Admin Page and calls the Settings registered with the Settings API in init_options_page().
171
  */
172
- function page() {
173
  ?>
174
  <div class="wrap">
175
  <?php SnS_Admin::nav(); ?>
@@ -182,4 +183,4 @@ class SnS_Form
182
  <?php
183
  }
184
  }
185
- ?>
1
  <?php
2
  /**
3
  * SnS_Global_Page
4
+ *
5
  * Allows WordPress admin users the ability to add custom CSS
6
  * and JavaScript directly to individual Post, Pages or custom
7
  * post types.
8
  */
9
+
10
  class SnS_Form
11
  {
12
  /**
13
  * Settings Page
14
  * Outputs a textarea for setting 'scripts_in_head'.
15
  */
16
+ static function textarea( $args ) {
17
  extract( $args );
18
  $options = get_option( $setting );
19
  $value = isset( $options[ $label_for ] ) ? $options[ $label_for ] : '';
20
+ $output = '';
21
+ if ( isset( $wrap_class ) ) $output .= '<div class="'. $wrap_class . '">';
22
+ $output .= '<textarea';
23
  $output .= ( $style ) ? ' style="' . $style . '"': '';
24
  $output .= ( $class ) ? ' class="' . $class . '"': '';
25
  $output .= ( $rows ) ? ' rows="' . $rows . '"': '';
27
  $output .= ' name="' . $setting . '[' . $label_for . ']"';
28
  $output .= ' id="' . $label_for . '">';
29
  $output .= esc_textarea( $value ) . '</textarea>';
30
+ if ( isset( $wrap_class ) ) $output .= '</div>';
31
  if ( $description ) {
32
  $output .= $description;
33
  }
34
  echo $output;
35
  }
36
+
37
+ static function radio( $args ) {
38
  extract( $args );
39
  $options = get_option( $setting );
40
  $default = isset( $default ) ? $default : '';
60
  }
61
  echo $output;
62
  }
63
+
64
  /**
65
  * Settings Page
66
  * Outputs a select element for selecting options to set scripts for including.
67
  */
68
+ static function select( $args ) {
69
  extract( $args );
70
  $options = get_option( $setting );
71
  $selected = isset( $options[ $label_for ] ) ? $options[ $label_for ] : array();
72
+
73
  $output = '<select';
74
  $output .= ' id="' . $label_for . '"';
75
  $output .= ' name="' . $setting . '[' . $label_for . ']';
96
  }
97
  echo $output;
98
  }
99
+
100
  /**
101
  * Settings Page
102
  * Outputs the Admin Page and calls the Settings registered with the Settings API.
103
  */
104
+ static function take_action() {
105
  global $action, $option_page, $page, $new_whitelist_options;
106
+
107
  if ( ! current_user_can( 'manage_options' ) || ! current_user_can( 'unfiltered_html' ) || ( is_multisite() && ! is_super_admin() ) )
108
  wp_die( __( 'Cheatin&#8217; uh?' ) );
109
+
110
  // Handle menu-redirected update message.
111
  if ( isset( $_REQUEST[ 'message' ] ) && $_REQUEST[ 'message' ] )
112
  add_settings_error( $page, 'settings_updated', __( 'Settings saved.' ), 'updated' );
113
+
114
  if ( ! isset( $_REQUEST[ 'action' ], $_REQUEST[ 'option_page' ], $_REQUEST[ 'page' ] ) )
115
  return;
116
+
117
  wp_reset_vars( array( 'action', 'option_page', 'page' ) );
118
+
119
  check_admin_referer( $option_page . '-options' );
120
+
121
  if ( ! isset( $new_whitelist_options[ $option_page ] ) )
122
  return;
123
+
124
  $options = $new_whitelist_options[ $option_page ];
125
  foreach ( (array) $options as $option ) {
126
  $old = get_option( $option );
127
  $option = trim( $option );
128
+ $new = null;
129
  if ( isset($_POST[ $option ]) )
130
+ $new = $_POST[ $option ];
131
+ if ( !is_array( $new ) )
132
+ $new = trim( $new );
133
+ $new = stripslashes_deep( $new );
134
+ $value = array_merge( $old, $new );
135
+
136
  // Allow modification of $value
137
+ $value = apply_filters( 'sns_options_pre_update_option', $value, $page, $action, $new, $old );
138
+
139
  update_option( $option, $value );
140
  }
141
+
142
  if ( ! count( get_settings_errors() ) )
143
  add_settings_error( $page, 'settings_updated', __( 'Settings saved.' ), 'updated' );
144
+
145
  if ( isset( $_REQUEST[ 'ajaxsubmit' ] ) && $_REQUEST[ 'ajaxsubmit' ] ) {
146
  ob_start();
147
  settings_errors( $page );
149
  ob_end_clean();
150
  exit( $output );
151
  }
152
+
153
  // Redirect to new page if changed.
154
  if ( isset( $_POST[ $option ][ 'menu_position' ] ) && ( $value[ 'menu_position' ] != SnS_Admin::$parent_slug ) ) {
155
  switch( $value[ 'menu_position' ] ) {
170
  * Settings Page
171
  * Outputs the Admin Page and calls the Settings registered with the Settings API in init_options_page().
172
  */
173
+ static function page() {
174
  ?>
175
  <div class="wrap">
176
  <?php SnS_Admin::nav(); ?>
183
  <?php
184
  }
185
  }
186
+ ?>
includes/class-sns-global-page.php CHANGED
@@ -1,38 +1,37 @@
1
  <?php
2
  /**
3
  * SnS_Global_Page
4
- *
5
  * Allows WordPress admin users the ability to add custom CSS
6
  * and JavaScript directly to individual Post, Pages or custom
7
  * post types.
8
  */
9
-
10
  class SnS_Global_Page
11
  {
12
  /**
13
  * Initializing method.
14
  * @static
15
  */
16
- function init() {
17
  if ( SnS_Admin::$parent_slug == SnS_Admin::MENU_SLUG ) $menu_title = __( 'Global', 'scripts-n-styles' );
18
  else $menu_title = __( 'Scripts n Styles', 'scripts-n-styles' );
19
-
20
  $hook_suffix = add_submenu_page( SnS_Admin::$parent_slug, __( 'Scripts n Styles', 'scripts-n-styles' ), $menu_title, 'unfiltered_html', SnS_Admin::MENU_SLUG, array( 'SnS_Form', 'page' ) );
21
-
22
  add_action( "load-$hook_suffix", array( __CLASS__, 'admin_load' ) );
23
  add_action( "load-$hook_suffix", array( 'SnS_Admin', 'help' ) );
24
  add_action( "load-$hook_suffix", array( 'SnS_Form', 'take_action' ), 49 );
25
  add_action( "admin_print_styles-$hook_suffix", array( __CLASS__, 'admin_enqueue_scripts' ) );
26
  }
27
-
28
- function admin_enqueue_scripts() {
29
  $options = get_option( 'SnS_options' );
30
  $cm_theme = isset( $options[ 'cm_theme' ] ) ? $options[ 'cm_theme' ] : 'default';
31
-
32
  wp_enqueue_style( 'chosen' );
33
  wp_enqueue_style( 'sns-options' );
34
- wp_enqueue_style( 'codemirror-theme' );
35
-
36
  wp_enqueue_script( 'sns-global-page' );
37
  wp_localize_script( 'sns-global-page', '_SnS_options', array( 'theme' => $cm_theme ) );
38
  }
@@ -40,24 +39,24 @@ class SnS_Global_Page
40
  * Settings Page
41
  * Adds Admin Menu Item via WordPress' "Administration Menus" API. Also hook actions to register options via WordPress' Settings API.
42
  */
43
- function admin_load() {
44
-
45
  register_setting(
46
  SnS_Admin::OPTION_GROUP,
47
  'SnS_options' );
48
-
49
  add_settings_section(
50
  'global_styles',
51
  __( 'Blog Wide CSS Styles', 'scripts-n-styles' ),
52
  array( __CLASS__, 'global_styles_section' ),
53
  SnS_Admin::MENU_SLUG );
54
-
55
  add_settings_section(
56
  'global_scripts',
57
  __( 'Blog Wide JavaScript', 'scripts-n-styles' ),
58
  array( __CLASS__, 'global_scripts_section' ),
59
  SnS_Admin::MENU_SLUG );
60
-
61
  add_settings_field(
62
  'less',
63
  __( '<strong>LESS:</strong> ', 'scripts-n-styles' ),
@@ -135,9 +134,15 @@ class SnS_Global_Page
135
  'multiple' => true,
136
  'show_current' => __( 'Currently Enqueued Scripts: ', 'scripts-n-styles' )
137
  ) );
 
138
  }
139
-
140
- function less_fields() {
 
 
 
 
 
141
  $options = get_option( 'SnS_options' );
142
  $less = isset( $options[ 'less' ] ) ? $options[ 'less' ] : '';
143
  $compiled = isset( $options[ 'compiled' ] ) ? $options[ 'compiled' ] : '';
@@ -153,7 +158,7 @@ class SnS_Global_Page
153
  </div>
154
  <?php
155
  }
156
- function coffee_fields() {
157
  $options = get_option( 'SnS_options' );
158
  $coffee = isset( $options[ 'coffee' ] ) ? $options[ 'coffee' ] : '';
159
  $compiled = isset( $options[ 'coffee_compiled' ] ) ? $options[ 'coffee_compiled' ] : '';
@@ -169,24 +174,24 @@ class SnS_Global_Page
169
  </div>
170
  <?php
171
  }
172
-
173
  /**
174
  * Settings Page
175
  * Outputs Description text for the Global Section.
176
  */
177
- function global_scripts_section() {
178
  ?>
179
  <div style="max-width: 55em;">
180
  <p><?php _e( 'Code entered here will be included in <em>every page (and post) of your site</em>, including the homepage and archives. The code will appear <strong>before</strong> Scripts that were registered individually.', 'scripts-n-styles' )?></p>
181
  </div>
182
  <?php
183
  }
184
-
185
  /**
186
  * Settings Page
187
  * Outputs Description text for the Global Section.
188
  */
189
- function global_styles_section() {
190
  ?>
191
  <div style="max-width: 55em;">
192
  <p><?php _e( 'Code entered here will be included in <em>every page (and post) of your site</em>, including the homepage and archives. The code will appear <strong>before</strong> Styles that were registered individually.', 'scripts-n-styles' )?></p>
@@ -194,4 +199,4 @@ class SnS_Global_Page
194
  <?php
195
  }
196
  }
197
- ?>
1
  <?php
2
  /**
3
  * SnS_Global_Page
4
+ *
5
  * Allows WordPress admin users the ability to add custom CSS
6
  * and JavaScript directly to individual Post, Pages or custom
7
  * post types.
8
  */
9
+
10
  class SnS_Global_Page
11
  {
12
  /**
13
  * Initializing method.
14
  * @static
15
  */
16
+ static function init() {
17
  if ( SnS_Admin::$parent_slug == SnS_Admin::MENU_SLUG ) $menu_title = __( 'Global', 'scripts-n-styles' );
18
  else $menu_title = __( 'Scripts n Styles', 'scripts-n-styles' );
19
+
20
  $hook_suffix = add_submenu_page( SnS_Admin::$parent_slug, __( 'Scripts n Styles', 'scripts-n-styles' ), $menu_title, 'unfiltered_html', SnS_Admin::MENU_SLUG, array( 'SnS_Form', 'page' ) );
21
+
22
  add_action( "load-$hook_suffix", array( __CLASS__, 'admin_load' ) );
23
  add_action( "load-$hook_suffix", array( 'SnS_Admin', 'help' ) );
24
  add_action( "load-$hook_suffix", array( 'SnS_Form', 'take_action' ), 49 );
25
  add_action( "admin_print_styles-$hook_suffix", array( __CLASS__, 'admin_enqueue_scripts' ) );
26
  }
27
+
28
+ static function admin_enqueue_scripts() {
29
  $options = get_option( 'SnS_options' );
30
  $cm_theme = isset( $options[ 'cm_theme' ] ) ? $options[ 'cm_theme' ] : 'default';
31
+
32
  wp_enqueue_style( 'chosen' );
33
  wp_enqueue_style( 'sns-options' );
34
+
 
35
  wp_enqueue_script( 'sns-global-page' );
36
  wp_localize_script( 'sns-global-page', '_SnS_options', array( 'theme' => $cm_theme ) );
37
  }
39
  * Settings Page
40
  * Adds Admin Menu Item via WordPress' "Administration Menus" API. Also hook actions to register options via WordPress' Settings API.
41
  */
42
+ static function admin_load() {
43
+
44
  register_setting(
45
  SnS_Admin::OPTION_GROUP,
46
  'SnS_options' );
47
+
48
  add_settings_section(
49
  'global_styles',
50
  __( 'Blog Wide CSS Styles', 'scripts-n-styles' ),
51
  array( __CLASS__, 'global_styles_section' ),
52
  SnS_Admin::MENU_SLUG );
53
+
54
  add_settings_section(
55
  'global_scripts',
56
  __( 'Blog Wide JavaScript', 'scripts-n-styles' ),
57
  array( __CLASS__, 'global_scripts_section' ),
58
  SnS_Admin::MENU_SLUG );
59
+
60
  add_settings_field(
61
  'less',
62
  __( '<strong>LESS:</strong> ', 'scripts-n-styles' ),
134
  'multiple' => true,
135
  'show_current' => __( 'Currently Enqueued Scripts: ', 'scripts-n-styles' )
136
  ) );
137
+ add_filter( 'sns_options_pre_update_option', array( __CLASS__, 'enqueue_scripts'), 10, 5 );
138
  }
139
+ static function enqueue_scripts( $value, $page, $action, $new, $old ) {
140
+ if ( empty( $new['enqueue_scripts'] ) && ! empty( $old['enqueue_scripts'] ) )
141
+ unset( $value['enqueue_scripts'] );
142
+ return $value;
143
+ }
144
+
145
+ static function less_fields() {
146
  $options = get_option( 'SnS_options' );
147
  $less = isset( $options[ 'less' ] ) ? $options[ 'less' ] : '';
148
  $compiled = isset( $options[ 'compiled' ] ) ? $options[ 'compiled' ] : '';
158
  </div>
159
  <?php
160
  }
161
+ static function coffee_fields() {
162
  $options = get_option( 'SnS_options' );
163
  $coffee = isset( $options[ 'coffee' ] ) ? $options[ 'coffee' ] : '';
164
  $compiled = isset( $options[ 'coffee_compiled' ] ) ? $options[ 'coffee_compiled' ] : '';
174
  </div>
175
  <?php
176
  }
177
+
178
  /**
179
  * Settings Page
180
  * Outputs Description text for the Global Section.
181
  */
182
+ static function global_scripts_section() {
183
  ?>
184
  <div style="max-width: 55em;">
185
  <p><?php _e( 'Code entered here will be included in <em>every page (and post) of your site</em>, including the homepage and archives. The code will appear <strong>before</strong> Scripts that were registered individually.', 'scripts-n-styles' )?></p>
186
  </div>
187
  <?php
188
  }
189
+
190
  /**
191
  * Settings Page
192
  * Outputs Description text for the Global Section.
193
  */
194
+ static function global_styles_section() {
195
  ?>
196
  <div style="max-width: 55em;">
197
  <p><?php _e( 'Code entered here will be included in <em>every page (and post) of your site</em>, including the homepage and archives. The code will appear <strong>before</strong> Styles that were registered individually.', 'scripts-n-styles' )?></p>
199
  <?php
200
  }
201
  }
202
+ ?>
includes/class-sns-hoops-page.php CHANGED
@@ -1,31 +1,31 @@
1
  <?php
2
  /**
3
  * SnS_Hoops_Page
4
- *
5
  * Allows WordPress admin users the ability to add custom CSS
6
  * and JavaScript directly to individual Post, Pages or custom
7
  * post types.
8
  */
9
-
10
  class SnS_Hoops_Page
11
  {
12
  /**
13
  * Constants
14
  */
15
  const MENU_SLUG = 'sns_hoops';
16
-
17
  /**
18
  * Initializing method.
19
  * @static
20
  */
21
- function init() {
22
  $hook_suffix = add_submenu_page( SnS_Admin::$parent_slug, __( 'Scripts n Styles', 'scripts-n-styles' ), __( 'Hoops' ), 'unfiltered_html', self::MENU_SLUG, array( 'SnS_Form', 'page' ) );
23
-
24
  add_action( "load-$hook_suffix", array( __CLASS__, 'admin_load' ) );
25
  add_action( "load-$hook_suffix", array( 'SnS_Admin', 'help' ) );
26
  add_action( "load-$hook_suffix", array( 'SnS_Form', 'take_action' ), 49 );
27
  add_action( "admin_print_styles-$hook_suffix", array( __CLASS__, 'admin_enqueue_scripts' ) );
28
-
29
  // Make the page into a tab.
30
  if ( SnS_Admin::MENU_SLUG != SnS_Admin::$parent_slug ) {
31
  remove_submenu_page( SnS_Admin::$parent_slug, self::MENU_SLUG );
@@ -37,14 +37,14 @@ class SnS_Hoops_Page
37
  if ( self::MENU_SLUG == $plugin_page ) $submenu_file = SnS_Admin::MENU_SLUG;
38
  return $parent_file;
39
  }
40
-
41
- function admin_enqueue_scripts() {
42
  $options = get_option( 'SnS_options' );
43
  $cm_theme = isset( $options[ 'cm_theme' ] ) ? $options[ 'cm_theme' ] : 'default';
44
-
45
  wp_enqueue_style( 'sns-options' );
46
  wp_enqueue_style( 'codemirror-theme' );
47
-
48
  wp_enqueue_script( 'sns-hoops-page' );
49
  wp_localize_script( 'sns-hoops-page', '_SnS_options', array( 'theme' => $cm_theme ) );
50
  }
@@ -52,48 +52,48 @@ class SnS_Hoops_Page
52
  * Settings Page
53
  * Adds Admin Menu Item via WordPress' "Administration Menus" API. Also hook actions to register options via WordPress' Settings API.
54
  */
55
- function admin_load() {
56
  // added here to not effect other pages.
57
  add_filter( 'sns_options_pre_update_option', array( __CLASS__, 'new_hoops') );
58
-
59
  register_setting(
60
  SnS_Admin::OPTION_GROUP,
61
  'SnS_options' );
62
-
63
  add_settings_section(
64
  'hoops_section',
65
  __( 'The Hoops Shortcodes', 'scripts-n-styles' ),
66
  array( __CLASS__, 'hoops_section' ),
67
  SnS_Admin::MENU_SLUG );
68
  }
69
- function new_hoops( $options ) {
70
  // Get Hoops. (Shouldn't be empty.)
71
  $hoops = $options[ 'hoops' ];
72
-
73
  /*
74
- add_settings_error( 'sns_hoops', 'settings_updated', '<pre>'
75
  . '$hoops '
76
  . print_r(
77
  $hoops, true ) . '</pre>', 'updated' );
78
  */
79
-
80
  // take out new. (Also shouldn't be empty.)
81
  $new = $hoops[ 'new' ];
82
  unset( $hoops[ 'new' ] );
83
-
84
  // Get Shortcodes. (Could be empty.)
85
  $shortcodes = empty( $hoops[ 'shortcodes' ] ) ? array() : $hoops[ 'shortcodes' ];
86
-
87
  // prune shortcodes with blank values.
88
  foreach( $shortcodes as $key => $value ){
89
  if ( empty( $value ) )
90
  unset( $shortcodes[ $key ] );
91
  }
92
-
93
  // Add new (if not empty).
94
  if ( ! empty( $new[ 'code' ] ) ) {
95
  $name = empty( $new[ 'name' ] ) ? '' : $new[ 'name' ];
96
-
97
  if ( '' == $name ) {
98
  // If blank, find next index..
99
  $name = 0;
@@ -106,11 +106,11 @@ class SnS_Hoops_Page
106
  $countr++;
107
  $name .= '_' . $countr;
108
  }
109
-
110
  // Add new to shortcodes.
111
  $shortcodes[ $name ] = $new[ 'code' ];
112
  }
113
-
114
  // Put in Shortcodes... if not empty.
115
  if ( empty( $shortcodes ) ) {
116
  if ( isset( $hoops[ 'shortcodes' ] ) )
@@ -118,7 +118,7 @@ class SnS_Hoops_Page
118
  } else {
119
  $hoops[ 'shortcodes' ] = $shortcodes;
120
  }
121
-
122
  // Put in Hoops... if not empty.
123
  if ( empty( $hoops ) ) {
124
  if ( isset( $options[ 'hoops' ] ) )
@@ -126,34 +126,34 @@ class SnS_Hoops_Page
126
  } else {
127
  $options[ 'hoops' ] = $hoops;
128
  }
129
-
130
  return $options; // Finish Filter.
131
  }
132
-
133
  /**
134
  * Settings Page
135
  * Outputs Description text for the Global Section.
136
  */
137
- function hoops_section() {
138
  echo '<div style="max-width: 55em;">';
139
- _e( '<p>"Hoops" are shortcodes invented to get around some limitations of vanilla WordPress.</p>'
140
  . '<p> Normally, certain HTML is very problematic to use in the Post Editor, because it either gets '
141
  . 'jumbled during Switching between HTML and Visual Tabs, stripped out by WPAutoP (rare) or stripped '
142
- . 'out because the User doesn&#8217;t have the proper Permissions.</p>'
143
  . '<p>With Hoops, an Admin user (who has `unfiltered_html` and `manage_options` capablilities) can '
144
- . 'write and approve snippets of HTML for other user to use via Shortcodes.</p>', 'scripts-n-styles' );
145
  echo '</div>';
146
-
147
  $options = get_option( 'SnS_options' );
148
-
149
  $meta_name = 'SnS_options[hoops]';
150
  $hoops = isset( $options[ 'hoops' ] ) ? $options[ 'hoops' ] : array();
151
  $shortcodes = isset( $hoops[ 'shortcodes' ] ) ? $hoops[ 'shortcodes' ] : array();
152
  ?>
153
- <strong class="title">Add New: </strong>
154
  <div id="sns-shortcodes">
 
155
  <div class="sns-less-ide" style="overflow: hidden">
156
- <div class="widget"><div class="inside">
157
  <label style="display:inline" for="<?php echo $meta_name; ?>">Name: </label>
158
  <input id="<?php echo $meta_name; ?>" name="<?php echo $meta_name . '[new][name]'; ?>" type="text" />
159
  <?php /** / ?>
@@ -162,23 +162,23 @@ class SnS_Hoops_Page
162
  <textarea id="<?php echo $meta_name; ?>_new" class="code htmlmixed" name="<?php echo $meta_name . '[new][code]'; ?>" rows="5" cols="40" style="width: 98%;"></textarea>
163
  </div></div>
164
  </div>
165
-
166
  <?php if ( ! empty( $shortcodes ) ) { ?>
167
  <h4>Existing Codes: </h4>
168
  <div id="sns-shortcodes-wrap">
169
  <?php if ( ! empty( $shortcodes ) ) { ?>
170
  <?php foreach ( $shortcodes as $key => $value ) { ?>
171
-
172
  <div class="sns-less-ide" style="overflow: hidden">
173
- <div class="widget"><div class="sns-collapsed inside">
174
  <span class="sns-collapsed-btn"></span>
175
  <p style="margin-bottom: 0;">[hoops name="<?php echo $key ?>"]</p>
176
  <textarea class="code htmlmixed" data-sns-shortcode-key="<?php echo $key ?>" name="<?php echo $meta_name . '[shortcodes][' . $key . ']'; ?>" rows="5" cols="40" style="width: 98%;"><?php echo esc_textarea( $value ); ?></textarea>
177
  <?php /** / ?>
178
  <div class="sns-ajax-wrap">
179
- <a class="sns-ajax-delete-shortcode button" href="#">Delete</a> &nbsp;
180
  <a class="sns-ajax-update-shortcode button" href="#">Update</a>
181
- <img class="sns-ajax-loading" src="/wp-admin/images/wpspin_light.gif">
182
  </div>
183
  <?php /**/ ?>
184
  </div></div>
1
  <?php
2
  /**
3
  * SnS_Hoops_Page
4
+ *
5
  * Allows WordPress admin users the ability to add custom CSS
6
  * and JavaScript directly to individual Post, Pages or custom
7
  * post types.
8
  */
9
+
10
  class SnS_Hoops_Page
11
  {
12
  /**
13
  * Constants
14
  */
15
  const MENU_SLUG = 'sns_hoops';
16
+
17
  /**
18
  * Initializing method.
19
  * @static
20
  */
21
+ static function init() {
22
  $hook_suffix = add_submenu_page( SnS_Admin::$parent_slug, __( 'Scripts n Styles', 'scripts-n-styles' ), __( 'Hoops' ), 'unfiltered_html', self::MENU_SLUG, array( 'SnS_Form', 'page' ) );
23
+
24
  add_action( "load-$hook_suffix", array( __CLASS__, 'admin_load' ) );
25
  add_action( "load-$hook_suffix", array( 'SnS_Admin', 'help' ) );
26
  add_action( "load-$hook_suffix", array( 'SnS_Form', 'take_action' ), 49 );
27
  add_action( "admin_print_styles-$hook_suffix", array( __CLASS__, 'admin_enqueue_scripts' ) );
28
+
29
  // Make the page into a tab.
30
  if ( SnS_Admin::MENU_SLUG != SnS_Admin::$parent_slug ) {
31
  remove_submenu_page( SnS_Admin::$parent_slug, self::MENU_SLUG );
37
  if ( self::MENU_SLUG == $plugin_page ) $submenu_file = SnS_Admin::MENU_SLUG;
38
  return $parent_file;
39
  }
40
+
41
+ static function admin_enqueue_scripts() {
42
  $options = get_option( 'SnS_options' );
43
  $cm_theme = isset( $options[ 'cm_theme' ] ) ? $options[ 'cm_theme' ] : 'default';
44
+
45
  wp_enqueue_style( 'sns-options' );
46
  wp_enqueue_style( 'codemirror-theme' );
47
+
48
  wp_enqueue_script( 'sns-hoops-page' );
49
  wp_localize_script( 'sns-hoops-page', '_SnS_options', array( 'theme' => $cm_theme ) );
50
  }
52
  * Settings Page
53
  * Adds Admin Menu Item via WordPress' "Administration Menus" API. Also hook actions to register options via WordPress' Settings API.
54
  */
55
+ static function admin_load() {
56
  // added here to not effect other pages.
57
  add_filter( 'sns_options_pre_update_option', array( __CLASS__, 'new_hoops') );
58
+
59
  register_setting(
60
  SnS_Admin::OPTION_GROUP,
61
  'SnS_options' );
62
+
63
  add_settings_section(
64
  'hoops_section',
65
  __( 'The Hoops Shortcodes', 'scripts-n-styles' ),
66
  array( __CLASS__, 'hoops_section' ),
67
  SnS_Admin::MENU_SLUG );
68
  }
69
+ static function new_hoops( $options ) {
70
  // Get Hoops. (Shouldn't be empty.)
71
  $hoops = $options[ 'hoops' ];
72
+
73
  /*
74
+ add_settings_error( 'sns_hoops', 'settings_updated', '<pre>'
75
  . '$hoops '
76
  . print_r(
77
  $hoops, true ) . '</pre>', 'updated' );
78
  */
79
+
80
  // take out new. (Also shouldn't be empty.)
81
  $new = $hoops[ 'new' ];
82
  unset( $hoops[ 'new' ] );
83
+
84
  // Get Shortcodes. (Could be empty.)
85
  $shortcodes = empty( $hoops[ 'shortcodes' ] ) ? array() : $hoops[ 'shortcodes' ];
86
+
87
  // prune shortcodes with blank values.
88
  foreach( $shortcodes as $key => $value ){
89
  if ( empty( $value ) )
90
  unset( $shortcodes[ $key ] );
91
  }
92
+
93
  // Add new (if not empty).
94
  if ( ! empty( $new[ 'code' ] ) ) {
95
  $name = empty( $new[ 'name' ] ) ? '' : $new[ 'name' ];
96
+
97
  if ( '' == $name ) {
98
  // If blank, find next index..
99
  $name = 0;
106
  $countr++;
107
  $name .= '_' . $countr;
108
  }
109
+
110
  // Add new to shortcodes.
111
  $shortcodes[ $name ] = $new[ 'code' ];
112
  }
113
+
114
  // Put in Shortcodes... if not empty.
115
  if ( empty( $shortcodes ) ) {
116
  if ( isset( $hoops[ 'shortcodes' ] ) )
118
  } else {
119
  $hoops[ 'shortcodes' ] = $shortcodes;
120
  }
121
+
122
  // Put in Hoops... if not empty.
123
  if ( empty( $hoops ) ) {
124
  if ( isset( $options[ 'hoops' ] ) )
126
  } else {
127
  $options[ 'hoops' ] = $hoops;
128
  }
129
+
130
  return $options; // Finish Filter.
131
  }
132
+
133
  /**
134
  * Settings Page
135
  * Outputs Description text for the Global Section.
136
  */
137
+ static function hoops_section() {
138
  echo '<div style="max-width: 55em;">';
139
+ _e( '<p>"Hoops" are shortcodes invented to get around some limitations of vanilla WordPress.</p>'
140
  . '<p> Normally, certain HTML is very problematic to use in the Post Editor, because it either gets '
141
  . 'jumbled during Switching between HTML and Visual Tabs, stripped out by WPAutoP (rare) or stripped '
142
+ . 'out because the User doesn&#8217;t have the proper Permissions.</p>'
143
  . '<p>With Hoops, an Admin user (who has `unfiltered_html` and `manage_options` capablilities) can '
144
+ . 'write and approve snippets of HTML for other users to use via Shortcodes.</p>', 'scripts-n-styles' );
145
  echo '</div>';
146
+
147
  $options = get_option( 'SnS_options' );
148
+
149
  $meta_name = 'SnS_options[hoops]';
150
  $hoops = isset( $options[ 'hoops' ] ) ? $options[ 'hoops' ] : array();
151
  $shortcodes = isset( $hoops[ 'shortcodes' ] ) ? $hoops[ 'shortcodes' ] : array();
152
  ?>
 
153
  <div id="sns-shortcodes">
154
+ <h4>Add New: </h4>
155
  <div class="sns-less-ide" style="overflow: hidden">
156
+ <div class="widget sns-shortcodes"><div class="inside">
157
  <label style="display:inline" for="<?php echo $meta_name; ?>">Name: </label>
158
  <input id="<?php echo $meta_name; ?>" name="<?php echo $meta_name . '[new][name]'; ?>" type="text" />
159
  <?php /** / ?>
162
  <textarea id="<?php echo $meta_name; ?>_new" class="code htmlmixed" name="<?php echo $meta_name . '[new][code]'; ?>" rows="5" cols="40" style="width: 98%;"></textarea>
163
  </div></div>
164
  </div>
165
+
166
  <?php if ( ! empty( $shortcodes ) ) { ?>
167
  <h4>Existing Codes: </h4>
168
  <div id="sns-shortcodes-wrap">
169
  <?php if ( ! empty( $shortcodes ) ) { ?>
170
  <?php foreach ( $shortcodes as $key => $value ) { ?>
171
+
172
  <div class="sns-less-ide" style="overflow: hidden">
173
+ <div class="widget sns-shortcodes"><div class="sns-collapsed inside">
174
  <span class="sns-collapsed-btn"></span>
175
  <p style="margin-bottom: 0;">[hoops name="<?php echo $key ?>"]</p>
176
  <textarea class="code htmlmixed" data-sns-shortcode-key="<?php echo $key ?>" name="<?php echo $meta_name . '[shortcodes][' . $key . ']'; ?>" rows="5" cols="40" style="width: 98%;"><?php echo esc_textarea( $value ); ?></textarea>
177
  <?php /** / ?>
178
  <div class="sns-ajax-wrap">
179
+ <a class="sns-ajax-delete-shortcode button" href="#">Delete</a> &nbsp;
180
  <a class="sns-ajax-update-shortcode button" href="#">Update</a>
181
+ <span class="sns-ajax-loading"><span class="spinner" style="display: inline-block;"></span></span>
182
  </div>
183
  <?php /**/ ?>
184
  </div></div>
includes/class-sns-list-usage.php CHANGED
@@ -2,11 +2,11 @@
2
  if ( ! class_exists( 'WP_List_Table' ) ) require_once( ABSPATH . 'wp-admin/includes/class-wp-list-table.php' );
3
 
4
  class SnS_List_Usage extends WP_List_Table {
5
-
6
  function ajax_user_can() {
7
  return current_user_can( 'unfiltered_html' ) && current_user_can( 'manage_options' );
8
  }
9
-
10
  function column_default( $post, $column_name ) {
11
  $return = '';
12
  switch( $column_name ){
@@ -44,15 +44,15 @@ class SnS_List_Usage extends WP_List_Table {
44
  return print_r( $post, true );
45
  }
46
  }
47
-
48
  function column_title( $post ) {
49
  $edit_link = esc_url( get_edit_post_link( $post->ID ) );
50
  $edit_title = esc_attr( sprintf( __( 'Edit &#8220;%s&#8221;' ), $post->post_title ) );
51
-
52
  $actions = array(
53
  'edit' => sprintf( '<a title="%s" href="%s">%s</a>', $edit_title, $edit_link, __( 'Edit' ) ),
54
  );
55
-
56
  $return = '<strong>';
57
  if ( $this->ajax_user_can() && $post->post_status != 'trash' ) {
58
  $return .= '<a class="row-title"';
@@ -66,10 +66,10 @@ class SnS_List_Usage extends WP_List_Table {
66
  $this->_post_states( $post );
67
  $return .= '</strong>';
68
  $return .= $this->row_actions( $actions );
69
-
70
  return $return;
71
  }
72
-
73
  function get_columns() {
74
  $columns = array(
75
  'title' => __( 'Title' ),
@@ -79,20 +79,20 @@ class SnS_List_Usage extends WP_List_Table {
79
  'script_data' => __( 'Script Data', 'scripts-n-styles' ),
80
  'style_data' => __( 'Style Data', 'scripts-n-styles' )
81
  );
82
-
83
  return $columns;
84
  }
85
-
86
  function prepare_items() {
87
  $screen_id = get_current_screen()->id;
88
  $per_page = $this->get_items_per_page( str_replace( '-', '_', "{$screen_id}_per_page" ) );
89
-
90
  $this->_column_headers = array(
91
  $this->get_columns(),
92
  array(),
93
  $this->get_sortable_columns()
94
  );
95
-
96
  /**
97
  * Get Relavent Posts.
98
  */
@@ -104,23 +104,23 @@ class SnS_List_Usage extends WP_List_Table {
104
  'order' => 'ASC',
105
  'meta_key' => '_SnS'
106
  ) );
107
-
108
  $items = $this->_add_meta_data( $posts );
109
-
110
  $total_items = count( $items );
111
-
112
  /**
113
- * Reduce items to current page's posts.
114
  */
115
  $this->items = array_slice(
116
  $items,
117
  ( ( $this->get_pagenum() - 1 ) * $per_page ),
118
  $per_page
119
  );
120
-
121
  $this->set_pagination_args( compact( 'total_items', 'per_page' ) );
122
  }
123
-
124
  function _post_states( $post ) {
125
  $post_states = array();
126
  $return = '';
@@ -128,7 +128,7 @@ class SnS_List_Usage extends WP_List_Table {
128
  $post_status = $_GET[ 'post_status' ];
129
  else
130
  $post_status = '';
131
-
132
  if ( ! empty( $post->post_password ) )
133
  $post_states[ 'protected' ] = __( 'Password protected' );
134
  if ( 'private' == $post->post_status && 'private' != $post_status )
@@ -140,9 +140,9 @@ class SnS_List_Usage extends WP_List_Table {
140
  $post_states[ 'pending' ] = _x( 'Pending', 'post state' );
141
  if ( is_sticky($post->ID) )
142
  $post_states[ 'sticky' ] = __( 'Sticky' );
143
-
144
  $post_states = apply_filters( 'display_post_states', $post_states );
145
-
146
  if ( ! empty( $post_states ) ) {
147
  $state_count = count( $post_states );
148
  $i = 0;
@@ -153,21 +153,21 @@ class SnS_List_Usage extends WP_List_Table {
153
  $return .= "<span class='post-state'>$state$sep</span>";
154
  }
155
  }
156
-
157
  if ( get_post_format( $post->ID ) )
158
  $return .= ' - <span class="post-state-format">' . get_post_format_string( get_post_format( $post->ID ) ) . '</span>';
159
-
160
  return $return;
161
  }
162
-
163
  function _add_meta_data( $posts ) {
164
  foreach( $posts as $post) {
165
  $SnS = get_post_meta( $post->ID, '_SnS', true );
166
  $styles = isset( $SnS[ 'styles' ] ) ? $SnS[ 'styles' ]: array();
167
  $scripts = isset( $SnS[ 'scripts' ] ) ? $SnS[ 'scripts' ]: array();
168
- if ( ! empty( $styles ) )
169
  $post->sns_styles = $styles;
170
- if ( ! empty( $scripts ) )
171
  $post->sns_scripts = $scripts;
172
  }
173
  return $posts;
2
  if ( ! class_exists( 'WP_List_Table' ) ) require_once( ABSPATH . 'wp-admin/includes/class-wp-list-table.php' );
3
 
4
  class SnS_List_Usage extends WP_List_Table {
5
+
6
  function ajax_user_can() {
7
  return current_user_can( 'unfiltered_html' ) && current_user_can( 'manage_options' );
8
  }
9
+
10
  function column_default( $post, $column_name ) {
11
  $return = '';
12
  switch( $column_name ){
44
  return print_r( $post, true );
45
  }
46
  }
47
+
48
  function column_title( $post ) {
49
  $edit_link = esc_url( get_edit_post_link( $post->ID ) );
50
  $edit_title = esc_attr( sprintf( __( 'Edit &#8220;%s&#8221;' ), $post->post_title ) );
51
+
52
  $actions = array(
53
  'edit' => sprintf( '<a title="%s" href="%s">%s</a>', $edit_title, $edit_link, __( 'Edit' ) ),
54
  );
55
+
56
  $return = '<strong>';
57
  if ( $this->ajax_user_can() && $post->post_status != 'trash' ) {
58
  $return .= '<a class="row-title"';
66
  $this->_post_states( $post );
67
  $return .= '</strong>';
68
  $return .= $this->row_actions( $actions );
69
+
70
  return $return;
71
  }
72
+
73
  function get_columns() {
74
  $columns = array(
75
  'title' => __( 'Title' ),
79
  'script_data' => __( 'Script Data', 'scripts-n-styles' ),
80
  'style_data' => __( 'Style Data', 'scripts-n-styles' )
81
  );
82
+
83
  return $columns;
84
  }
85
+
86
  function prepare_items() {
87
  $screen_id = get_current_screen()->id;
88
  $per_page = $this->get_items_per_page( str_replace( '-', '_', "{$screen_id}_per_page" ) );
89
+
90
  $this->_column_headers = array(
91
  $this->get_columns(),
92
  array(),
93
  $this->get_sortable_columns()
94
  );
95
+
96
  /**
97
  * Get Relavent Posts.
98
  */
104
  'order' => 'ASC',
105
  'meta_key' => '_SnS'
106
  ) );
107
+
108
  $items = $this->_add_meta_data( $posts );
109
+
110
  $total_items = count( $items );
111
+
112
  /**
113
+ * Reduce items to current page's posts.
114
  */
115
  $this->items = array_slice(
116
  $items,
117
  ( ( $this->get_pagenum() - 1 ) * $per_page ),
118
  $per_page
119
  );
120
+
121
  $this->set_pagination_args( compact( 'total_items', 'per_page' ) );
122
  }
123
+
124
  function _post_states( $post ) {
125
  $post_states = array();
126
  $return = '';
128
  $post_status = $_GET[ 'post_status' ];
129
  else
130
  $post_status = '';
131
+
132
  if ( ! empty( $post->post_password ) )
133
  $post_states[ 'protected' ] = __( 'Password protected' );
134
  if ( 'private' == $post->post_status && 'private' != $post_status )
140
  $post_states[ 'pending' ] = _x( 'Pending', 'post state' );
141
  if ( is_sticky($post->ID) )
142
  $post_states[ 'sticky' ] = __( 'Sticky' );
143
+
144
  $post_states = apply_filters( 'display_post_states', $post_states );
145
+
146
  if ( ! empty( $post_states ) ) {
147
  $state_count = count( $post_states );
148
  $i = 0;
153
  $return .= "<span class='post-state'>$state$sep</span>";
154
  }
155
  }
156
+
157
  if ( get_post_format( $post->ID ) )
158
  $return .= ' - <span class="post-state-format">' . get_post_format_string( get_post_format( $post->ID ) ) . '</span>';
159
+
160
  return $return;
161
  }
162
+
163
  function _add_meta_data( $posts ) {
164
  foreach( $posts as $post) {
165
  $SnS = get_post_meta( $post->ID, '_SnS', true );
166
  $styles = isset( $SnS[ 'styles' ] ) ? $SnS[ 'styles' ]: array();
167
  $scripts = isset( $SnS[ 'scripts' ] ) ? $SnS[ 'scripts' ]: array();
168
+ if ( ! empty( $styles ) )
169
  $post->sns_styles = $styles;
170
+ if ( ! empty( $scripts ) )
171
  $post->sns_scripts = $scripts;
172
  }
173
  return $posts;
includes/class-sns-meta-box.php CHANGED
@@ -1,73 +1,73 @@
1
  <?php
2
  /**
3
  * SnS_Admin_Meta_Box
4
- *
5
  * Allows WordPress admin users the ability to add custom CSS
6
  * and JavaScript directly to individual Post, Pages or custom
7
  * post types.
8
  */
9
-
10
  class SnS_Admin_Meta_Box
11
  {
12
  /*
13
  * Constants
14
  */
15
  const NONCE_NAME = 'scripts_n_styles_noncename';
16
-
17
  static $post_types;
18
-
19
  /**
20
- * Initializing method.
21
  */
22
  static function init() {
23
  add_action( 'add_meta_boxes', array( __CLASS__, 'add_meta_boxes' ) );
24
  add_action( 'save_post', array( __CLASS__, 'save_post' ) );
25
  }
26
-
27
- function mce_buttons_2( $buttons ) {
28
  global $post;
29
  $SnS = get_post_meta( $post->ID, '_SnS', true );
30
  $styles = isset( $SnS['styles'] ) ? $SnS[ 'styles' ]: array();
31
-
32
  if ( ! empty( $styles[ 'classes_mce' ] ) )
33
  array_unshift( $buttons, 'styleselect' );
34
-
35
  return $buttons;
36
  }
37
- function tiny_mce_before_init( $initArray ) {
38
  global $post;
39
  $SnS = get_post_meta( $post->ID, '_SnS', true );
40
  $styles = isset( $SnS['styles'] ) ? $SnS[ 'styles' ]: array();
41
-
42
  // Add div as a format option, should probably use a string replace thing here.
43
  // Better yet, a setting for adding these. Postpone for now.
44
  //$initArray['theme_advanced_blockformats'] = "p,address,pre,h1,h2,h3,h4,h5,h6,div";
45
-
46
  if ( ( ! empty( $styles[ 'classes_body' ] ) || ! empty( $styles[ 'classes_post' ] ) ) && ! isset( $initArray['body_class'] ) )
47
- $initArray['body_class'] = '';
48
-
49
  // Add body_class (and/or maybe post_class) values... somewhat problematic.
50
  if ( ! empty( $styles[ 'classes_body' ] ) )
51
  $initArray['body_class'] .= ' ' . $styles[ 'classes_body' ];
52
  if ( ! empty( $styles[ 'classes_post' ] ) )
53
  $initArray['body_class'] .= ' ' . $styles[ 'classes_post' ];
54
-
55
  // In case Themes or plugins have added style_formats, not tested.
56
  if ( isset( $initArray['style_formats'] ) )
57
  $style_formats = json_decode( $initArray['style_formats'], true );
58
  else
59
  $style_formats = array();
60
-
61
  if ( ! empty( $styles[ 'classes_mce' ] ) )
62
  foreach ( $styles[ 'classes_mce' ] as $format )
63
  $style_formats[] = $format;
64
-
65
  if ( ! empty( $style_formats ) )
66
  $initArray['style_formats'] = json_encode( $style_formats );
67
-
68
  return $initArray;
69
  }
70
-
71
  /**
72
  * Admin Action: 'mce_css'
73
  * Adds a styles sheet to TinyMCE via ajax that contains the current styles data.
@@ -81,7 +81,7 @@ class SnS_Admin_Meta_Box
81
  $mce_css .= ',' . $url;
82
  return $mce_css;
83
  }
84
-
85
  /**
86
  * Admin Action: 'add_meta_boxes'
87
  * Main Meta Box function. Checks restriction options and display options, calls add_meta_box() and adds actions for adding admin CSS and JavaScript.
@@ -101,7 +101,7 @@ class SnS_Admin_Meta_Box
101
  }
102
  }
103
  }
104
-
105
  static function default_hidden_meta_boxes( $hidden ) {
106
  $options = get_option( 'SnS_options' );
107
  if ( ! ( isset( $options[ 'metabox' ] ) && 'yes' == $options[ 'metabox' ] ) ) {
@@ -110,7 +110,7 @@ class SnS_Admin_Meta_Box
110
  }
111
  return $hidden;
112
  }
113
-
114
  /**
115
  * Admin Action: 'add_meta_boxes'
116
  * Outputs the Meta Box. Only called on callback from add_meta_box() during the add_meta_boxes action.
@@ -121,7 +121,7 @@ class SnS_Admin_Meta_Box
121
  $SnS = get_post_meta( $post->ID, '_SnS', true );
122
  $styles = isset( $SnS['styles'] ) ? $SnS[ 'styles' ]: array();
123
  $scripts = isset( $SnS['scripts'] ) ? $SnS[ 'scripts' ]: array();
124
-
125
  $position = get_user_option( "current_sns_tab" );
126
  if ( ! in_array( $position, array( 's0', 's1', 's2', 's3', 's4', 's5' ) ) ) $position = 's0';
127
  wp_nonce_field( Scripts_n_Styles::$file, self::NONCE_NAME );
@@ -134,7 +134,7 @@ class SnS_Admin_Meta_Box
134
  <li<?php echo ( 's4' == $position ) ? ' class="wp-tab-active"': ''; ?>><a href="#SnS_shortcodes-tab"><?php _e( 'Shortcodes', 'scripts-n-styles' ) ?></a></li>
135
  <li<?php echo ( 's5' == $position ) ? ' class="wp-tab-active"': ''; ?> style="display:none"><a href="#SnS_post_styles-tab"><?php _e( 'Dropdown', 'scripts-n-styles' ) ?></a></li>
136
  </ul>
137
-
138
  <div class="wp-tab-panel" id="SnS_scripts-tab">
139
  <p><em><?php _e( "This code will be included <strong>verbatim</strong> in <code>&lt;script></code> tags at the end of your page's (or post's)", 'scripts-n-styles' ) ?> ...</em></p>
140
  <label for="SnS_scripts_in_head" class="title"><?php _e( '<strong>Scripts</strong> (for the <code>head</code> element):', 'scripts-n-styles' ) ?> </label>
@@ -148,7 +148,7 @@ class SnS_Admin_Meta_Box
148
  </div>
149
  <p><em>... <code>&lt;/body></code> <?php _e( 'tag', 'scripts-n-styles' ) ?>.</em></p>
150
  </div>
151
-
152
  <div class="wp-tab-panel" id="SnS_styles-tab">
153
  <label for="SnS_styles" class="title"><?php _e( '<strong>Styles</strong>:', 'scripts-n-styles' ) ?> </label>
154
  <div class="style">
@@ -156,7 +156,7 @@ class SnS_Admin_Meta_Box
156
  </div>
157
  <p><em><?php _e( 'This code will be included <strong>verbatim</strong> in <code>&lt;style></code> tags in the <code>&lt;head></code> tag of your page (or post).', 'scripts-n-styles' ) ?></em></p>
158
  </div>
159
-
160
  <div class="wp-tab-panel" id="SnS_classes_body-tab">
161
  <strong class="title"><?php _e( 'Classes', 'scripts-n-styles' ) ?></strong>
162
  <div id="sns-classes">
@@ -173,7 +173,7 @@ class SnS_Admin_Meta_Box
173
  <p><em><?php _e( 'These <strong>space separated</strong> class names will be added to the <code>body_class()</code> or <code>post_class()</code> function (provided your theme uses these functions).', 'scripts-n-styles' ) ?></em></p>
174
  </div>
175
  </div>
176
- <?php
177
  /*
178
  * Note: Styles Dropdown section only makes sense when Javascript is enabled. (Otherwise, no TinyMCE.)
179
  */
@@ -212,24 +212,24 @@ class SnS_Admin_Meta_Box
212
  <input name="SnS_classes_mce_wrapper" id="SnS_classes_mce_wrapper" type="checkbox" value="true" />
213
  </p>
214
  </div>
215
-
216
  <div id="delete-mce-dropdown-names" style="display: none;">
217
  <p id="instructions-mce-dropdown-names"><?php _e( 'Classes currently in the dropdown:', 'scripts-n-styles' ) ?></p>
218
  </div>
219
  </div>
220
  </div>
221
-
222
  <div class="wp-tab-panel" id="SnS_enqueue_scripts-tab">
223
  <strong class="title">Include Scripts</strong>
224
  <select name="SnS_enqueue_scripts[]" id="SnS_enqueue_scripts" size="5" multiple="multiple" style="height: auto; float: left; margin: 6px 10px 8px 0;">
225
- <?php
226
  if ( ! empty( $scripts[ 'enqueue_scripts' ] ) && is_array( $scripts[ 'enqueue_scripts' ] ) ) {
227
  foreach ( $registered_handles as $value ) { ?>
228
- <option value="<?php echo esc_attr( $value ) ?>"<?php foreach ( $scripts[ 'enqueue_scripts' ] as $handle ) selected( $handle, $value ); ?>><?php echo esc_html( $value ) ?></option>
229
  <?php }
230
  } else {
231
  foreach ( $registered_handles as $value ) { ?>
232
- <option value="<?php echo esc_attr( $value ) ?>"><?php echo esc_html( $value ) ?></option>
233
  <?php }
234
  } ?>
235
  </select>
@@ -240,7 +240,7 @@ class SnS_Admin_Meta_Box
240
  <?php } ?>
241
  <p><em><?php _e( 'The chosen scripts will be enqueued and placed before your codes if your code is dependant on certain scripts (like jQuery).', 'scripts-n-styles' ) ?></em></p>
242
  </div>
243
-
244
  <div class="wp-tab-panel" id="SnS_shortcodes-tab">
245
  <strong class="title">Shortcodes</strong>
246
  <div id="sns-add-shortcode">
@@ -269,11 +269,11 @@ class SnS_Admin_Meta_Box
269
  </div>
270
  <?php
271
  }
272
-
273
- function current_classes( $type, $post_id ) {
274
  if ( 'body' == $type ) {
275
  global $wp_query, $pagenow;
276
-
277
  if ( 'post-new.php' == $pagenow ) {
278
  echo join( ' ', get_body_class( '', $post_id ) );
279
  echo ' ' . __( '(plus others once saved.)', 'scripts-n-styles' );
@@ -285,12 +285,12 @@ class SnS_Admin_Meta_Box
285
  $wp_query = new WP_Query( "$param=$post_id" );
286
  echo join( ' ', get_body_class( '', $post_id ) );
287
  $wp_query = $save;
288
-
289
  } else {
290
  echo join( ' ', get_post_class( '', $post_id ) );
291
  }
292
  }
293
-
294
  /**
295
  * Admin Action: 'admin_print_styles' Action added during 'add_meta_boxes' (which restricts output to Edit Screens).
296
  * Enqueues the CSS for admin styling of the Meta Box.
@@ -299,7 +299,7 @@ class SnS_Admin_Meta_Box
299
  wp_enqueue_style( 'chosen' );
300
  wp_enqueue_style( 'sns-meta-box' );
301
  }
302
-
303
  /**
304
  * Admin Action: 'admin_print_styles' Action added during 'add_meta_boxes' (which restricts output to Edit Screens).
305
  * Enqueues the JavaScript for the admin Meta Box.
@@ -307,11 +307,11 @@ class SnS_Admin_Meta_Box
307
  static function meta_box_scripts() {
308
  $options = get_option( 'SnS_options' );
309
  $cm_theme = isset( $options[ 'cm_theme' ] ) ? $options[ 'cm_theme' ] : 'default';
310
-
311
  wp_enqueue_script( 'sns-meta-box' );
312
  wp_localize_script( 'sns-meta-box', 'codemirror_options', array( 'theme' => $cm_theme ) );
313
  }
314
-
315
  /**
316
  * Admin Action: 'save_post'
317
  * Saves the values entered in the Meta Box when a post is saved (on the Edit Screen only, excluding autosaves) if the user has permission.
@@ -319,96 +319,96 @@ class SnS_Admin_Meta_Box
319
  */
320
  static function save_post( $post_id ) {
321
  if ( ! isset( $_POST[ self::NONCE_NAME ] ) || ! wp_verify_nonce( $_POST[ self::NONCE_NAME ], Scripts_n_Styles::$file )
322
- || ! current_user_can( 'unfiltered_html' )
323
  || wp_is_post_revision( $post_id ) // is needed for get_post_meta compatibility.
324
  || ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
325
  ) return;
326
-
327
- /*
328
- NOTE: There is no current_user_can( 'edit_post' ) check here, because as far as I
329
- can tell, in /wp-admin/post.php the calls edit_post(), write_post(), post_preview(),
330
- wp_untrash_post(), etc., the check is already done prior to the 'save_post' action,
331
- which is where this function is called. Other calls are from other pages so the
332
- NONCE covers those cases, and that leaves autosave, which is also checked here.
333
  */
334
-
335
  $SnS = get_post_meta( $post_id, '_SnS', true );
336
  $scripts = isset( $SnS['scripts'] ) ? $SnS[ 'scripts' ]: array();
337
  $styles = isset( $SnS['styles'] ) ? $SnS[ 'styles' ]: array();
338
-
339
  $scripts = self::maybe_set( $scripts, 'scripts_in_head' );
340
  $scripts = self::maybe_set( $scripts, 'scripts' );
341
  $scripts = self::maybe_set( $scripts, 'enqueue_scripts' );
342
  $styles = self::maybe_set( $styles, 'styles' );
343
  $styles = self::maybe_set( $styles, 'classes_body' );
344
  $styles = self::maybe_set( $styles, 'classes_post' );
345
-
346
  $shortcodes = array();
347
  $SnS_shortcodes = isset( $_REQUEST[ 'SnS_shortcodes' ] ) ? $_REQUEST[ 'SnS_shortcodes' ]: array();
348
-
349
  $existing_shortcodes = isset( $SnS_shortcodes[ 'existing' ] ) ? $SnS_shortcodes[ 'existing' ]: array();
350
  foreach ( $existing_shortcodes as $key => $value )
351
  if ( ! empty( $value ) )
352
  $shortcodes[ $key ] = $value;
353
-
354
  $new_shortcode = isset( $SnS_shortcodes[ 'new' ] ) ? $SnS_shortcodes[ 'new' ]: array();
355
  if ( ! empty( $new_shortcode[ 'value' ] ) ) {
356
-
357
  $key = ( isset( $new_shortcode[ 'name' ] ) ) ? $new_shortcode[ 'name' ] : '';
358
-
359
  if ( '' == $key ) {
360
  $key = count( $shortcodes );
361
  while ( isset( $shortcodes[ $key ] ) )
362
  $key++;
363
  }
364
-
365
  if ( isset( $shortcodes[ $key ] ) ) {
366
  $countr = 1;
367
  while ( isset( $shortcodes[ $key . '_' . $countr ] ) )
368
  $countr++;
369
  $key .= '_' . $countr;
370
- }
371
-
372
  $shortcodes[ $key ] = $new_shortcode[ 'value' ];
373
-
374
  }
375
-
376
  // This one isn't posted, it's ajax only. Cleanup anyway.
377
  if ( isset( $styles[ 'classes_mce' ] ) && empty( $styles[ 'classes_mce' ] ) )
378
  unset( $styles[ 'classes_mce' ] );
379
-
380
  if ( empty( $scripts ) ) {
381
  if ( isset( $SnS['scripts'] ) )
382
  unset( $SnS['scripts'] );
383
  } else {
384
  $SnS['scripts'] = $scripts;
385
  }
386
-
387
  if ( empty( $styles ) ) {
388
  if ( isset( $SnS['styles'] ) )
389
  unset( $SnS['styles'] );
390
  } else {
391
  $SnS['styles'] = $styles;
392
  }
393
-
394
  if ( empty( $shortcodes ) ) {
395
  if ( isset( $SnS['shortcodes'] ) )
396
  unset( $SnS['shortcodes'] );
397
  } else {
398
  $SnS['shortcodes'] = $shortcodes;
399
  }
400
-
401
  if ( empty( $SnS ) )
402
  delete_post_meta( $post_id, '_SnS' );
403
  else
404
  update_post_meta( $post_id, '_SnS', $SnS );
405
  }
406
-
407
  /**
408
  * maybe_set()
409
  * Filters $o and Checks if the sent data $i is empty (intended to clear). If not, updates.
410
  */
411
- function maybe_set( $o, $i, $p = 'SnS_' ) {
412
  if ( empty( $_REQUEST[ $p . $i ] ) ) {
413
  if ( isset( $o[ $i ] ) ) unset( $o[ $i ] );
414
  } else {
1
  <?php
2
  /**
3
  * SnS_Admin_Meta_Box
4
+ *
5
  * Allows WordPress admin users the ability to add custom CSS
6
  * and JavaScript directly to individual Post, Pages or custom
7
  * post types.
8
  */
9
+
10
  class SnS_Admin_Meta_Box
11
  {
12
  /*
13
  * Constants
14
  */
15
  const NONCE_NAME = 'scripts_n_styles_noncename';
16
+
17
  static $post_types;
18
+
19
  /**
20
+ * Initializing method.
21
  */
22
  static function init() {
23
  add_action( 'add_meta_boxes', array( __CLASS__, 'add_meta_boxes' ) );
24
  add_action( 'save_post', array( __CLASS__, 'save_post' ) );
25
  }
26
+
27
+ static function mce_buttons_2( $buttons ) {
28
  global $post;
29
  $SnS = get_post_meta( $post->ID, '_SnS', true );
30
  $styles = isset( $SnS['styles'] ) ? $SnS[ 'styles' ]: array();
31
+
32
  if ( ! empty( $styles[ 'classes_mce' ] ) )
33
  array_unshift( $buttons, 'styleselect' );
34
+
35
  return $buttons;
36
  }
37
+ static function tiny_mce_before_init( $initArray ) {
38
  global $post;
39
  $SnS = get_post_meta( $post->ID, '_SnS', true );
40
  $styles = isset( $SnS['styles'] ) ? $SnS[ 'styles' ]: array();
41
+
42
  // Add div as a format option, should probably use a string replace thing here.
43
  // Better yet, a setting for adding these. Postpone for now.
44
  //$initArray['theme_advanced_blockformats'] = "p,address,pre,h1,h2,h3,h4,h5,h6,div";
45
+
46
  if ( ( ! empty( $styles[ 'classes_body' ] ) || ! empty( $styles[ 'classes_post' ] ) ) && ! isset( $initArray['body_class'] ) )
47
+ $initArray['body_class'] = '';
48
+
49
  // Add body_class (and/or maybe post_class) values... somewhat problematic.
50
  if ( ! empty( $styles[ 'classes_body' ] ) )
51
  $initArray['body_class'] .= ' ' . $styles[ 'classes_body' ];
52
  if ( ! empty( $styles[ 'classes_post' ] ) )
53
  $initArray['body_class'] .= ' ' . $styles[ 'classes_post' ];
54
+
55
  // In case Themes or plugins have added style_formats, not tested.
56
  if ( isset( $initArray['style_formats'] ) )
57
  $style_formats = json_decode( $initArray['style_formats'], true );
58
  else
59
  $style_formats = array();
60
+
61
  if ( ! empty( $styles[ 'classes_mce' ] ) )
62
  foreach ( $styles[ 'classes_mce' ] as $format )
63
  $style_formats[] = $format;
64
+
65
  if ( ! empty( $style_formats ) )
66
  $initArray['style_formats'] = json_encode( $style_formats );
67
+
68
  return $initArray;
69
  }
70
+
71
  /**
72
  * Admin Action: 'mce_css'
73
  * Adds a styles sheet to TinyMCE via ajax that contains the current styles data.
81
  $mce_css .= ',' . $url;
82
  return $mce_css;
83
  }
84
+
85
  /**
86
  * Admin Action: 'add_meta_boxes'
87
  * Main Meta Box function. Checks restriction options and display options, calls add_meta_box() and adds actions for adding admin CSS and JavaScript.
101
  }
102
  }
103
  }
104
+
105
  static function default_hidden_meta_boxes( $hidden ) {
106
  $options = get_option( 'SnS_options' );
107
  if ( ! ( isset( $options[ 'metabox' ] ) && 'yes' == $options[ 'metabox' ] ) ) {
110
  }
111
  return $hidden;
112
  }
113
+
114
  /**
115
  * Admin Action: 'add_meta_boxes'
116
  * Outputs the Meta Box. Only called on callback from add_meta_box() during the add_meta_boxes action.
121
  $SnS = get_post_meta( $post->ID, '_SnS', true );
122
  $styles = isset( $SnS['styles'] ) ? $SnS[ 'styles' ]: array();
123
  $scripts = isset( $SnS['scripts'] ) ? $SnS[ 'scripts' ]: array();
124
+
125
  $position = get_user_option( "current_sns_tab" );
126
  if ( ! in_array( $position, array( 's0', 's1', 's2', 's3', 's4', 's5' ) ) ) $position = 's0';
127
  wp_nonce_field( Scripts_n_Styles::$file, self::NONCE_NAME );
134
  <li<?php echo ( 's4' == $position ) ? ' class="wp-tab-active"': ''; ?>><a href="#SnS_shortcodes-tab"><?php _e( 'Shortcodes', 'scripts-n-styles' ) ?></a></li>
135
  <li<?php echo ( 's5' == $position ) ? ' class="wp-tab-active"': ''; ?> style="display:none"><a href="#SnS_post_styles-tab"><?php _e( 'Dropdown', 'scripts-n-styles' ) ?></a></li>
136
  </ul>
137
+
138
  <div class="wp-tab-panel" id="SnS_scripts-tab">
139
  <p><em><?php _e( "This code will be included <strong>verbatim</strong> in <code>&lt;script></code> tags at the end of your page's (or post's)", 'scripts-n-styles' ) ?> ...</em></p>
140
  <label for="SnS_scripts_in_head" class="title"><?php _e( '<strong>Scripts</strong> (for the <code>head</code> element):', 'scripts-n-styles' ) ?> </label>
148
  </div>
149
  <p><em>... <code>&lt;/body></code> <?php _e( 'tag', 'scripts-n-styles' ) ?>.</em></p>
150
  </div>
151
+
152
  <div class="wp-tab-panel" id="SnS_styles-tab">
153
  <label for="SnS_styles" class="title"><?php _e( '<strong>Styles</strong>:', 'scripts-n-styles' ) ?> </label>
154
  <div class="style">
156
  </div>
157
  <p><em><?php _e( 'This code will be included <strong>verbatim</strong> in <code>&lt;style></code> tags in the <code>&lt;head></code> tag of your page (or post).', 'scripts-n-styles' ) ?></em></p>
158
  </div>
159
+
160
  <div class="wp-tab-panel" id="SnS_classes_body-tab">
161
  <strong class="title"><?php _e( 'Classes', 'scripts-n-styles' ) ?></strong>
162
  <div id="sns-classes">
173
  <p><em><?php _e( 'These <strong>space separated</strong> class names will be added to the <code>body_class()</code> or <code>post_class()</code> function (provided your theme uses these functions).', 'scripts-n-styles' ) ?></em></p>
174
  </div>
175
  </div>
176
+ <?php
177
  /*
178
  * Note: Styles Dropdown section only makes sense when Javascript is enabled. (Otherwise, no TinyMCE.)
179
  */
212
  <input name="SnS_classes_mce_wrapper" id="SnS_classes_mce_wrapper" type="checkbox" value="true" />
213
  </p>
214
  </div>
215
+
216
  <div id="delete-mce-dropdown-names" style="display: none;">
217
  <p id="instructions-mce-dropdown-names"><?php _e( 'Classes currently in the dropdown:', 'scripts-n-styles' ) ?></p>
218
  </div>
219
  </div>
220
  </div>
221
+
222
  <div class="wp-tab-panel" id="SnS_enqueue_scripts-tab">
223
  <strong class="title">Include Scripts</strong>
224
  <select name="SnS_enqueue_scripts[]" id="SnS_enqueue_scripts" size="5" multiple="multiple" style="height: auto; float: left; margin: 6px 10px 8px 0;">
225
+ <?php
226
  if ( ! empty( $scripts[ 'enqueue_scripts' ] ) && is_array( $scripts[ 'enqueue_scripts' ] ) ) {
227
  foreach ( $registered_handles as $value ) { ?>
228
+ <option value="<?php echo esc_attr( $value ) ?>"<?php foreach ( $scripts[ 'enqueue_scripts' ] as $handle ) selected( $handle, $value ); ?>><?php echo esc_html( $value ) ?></option>
229
  <?php }
230
  } else {
231
  foreach ( $registered_handles as $value ) { ?>
232
+ <option value="<?php echo esc_attr( $value ) ?>"><?php echo esc_html( $value ) ?></option>
233
  <?php }
234
  } ?>
235
  </select>
240
  <?php } ?>
241
  <p><em><?php _e( 'The chosen scripts will be enqueued and placed before your codes if your code is dependant on certain scripts (like jQuery).', 'scripts-n-styles' ) ?></em></p>
242
  </div>
243
+
244
  <div class="wp-tab-panel" id="SnS_shortcodes-tab">
245
  <strong class="title">Shortcodes</strong>
246
  <div id="sns-add-shortcode">
269
  </div>
270
  <?php
271
  }
272
+
273
+ static function current_classes( $type, $post_id ) {
274
  if ( 'body' == $type ) {
275
  global $wp_query, $pagenow;
276
+
277
  if ( 'post-new.php' == $pagenow ) {
278
  echo join( ' ', get_body_class( '', $post_id ) );
279
  echo ' ' . __( '(plus others once saved.)', 'scripts-n-styles' );
285
  $wp_query = new WP_Query( "$param=$post_id" );
286
  echo join( ' ', get_body_class( '', $post_id ) );
287
  $wp_query = $save;
288
+
289
  } else {
290
  echo join( ' ', get_post_class( '', $post_id ) );
291
  }
292
  }
293
+
294
  /**
295
  * Admin Action: 'admin_print_styles' Action added during 'add_meta_boxes' (which restricts output to Edit Screens).
296
  * Enqueues the CSS for admin styling of the Meta Box.
299
  wp_enqueue_style( 'chosen' );
300
  wp_enqueue_style( 'sns-meta-box' );
301
  }
302
+
303
  /**
304
  * Admin Action: 'admin_print_styles' Action added during 'add_meta_boxes' (which restricts output to Edit Screens).
305
  * Enqueues the JavaScript for the admin Meta Box.
307
  static function meta_box_scripts() {
308
  $options = get_option( 'SnS_options' );
309
  $cm_theme = isset( $options[ 'cm_theme' ] ) ? $options[ 'cm_theme' ] : 'default';
310
+
311
  wp_enqueue_script( 'sns-meta-box' );
312
  wp_localize_script( 'sns-meta-box', 'codemirror_options', array( 'theme' => $cm_theme ) );
313
  }
314
+
315
  /**
316
  * Admin Action: 'save_post'
317
  * Saves the values entered in the Meta Box when a post is saved (on the Edit Screen only, excluding autosaves) if the user has permission.
319
  */
320
  static function save_post( $post_id ) {
321
  if ( ! isset( $_POST[ self::NONCE_NAME ] ) || ! wp_verify_nonce( $_POST[ self::NONCE_NAME ], Scripts_n_Styles::$file )
322
+ || ! current_user_can( 'unfiltered_html' )
323
  || wp_is_post_revision( $post_id ) // is needed for get_post_meta compatibility.
324
  || ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
325
  ) return;
326
+
327
+ /*
328
+ NOTE: There is no current_user_can( 'edit_post' ) check here, because as far as I
329
+ can tell, in /wp-admin/post.php the calls edit_post(), write_post(), post_preview(),
330
+ wp_untrash_post(), etc., the check is already done prior to the 'save_post' action,
331
+ which is where this function is called. Other calls are from other pages so the
332
+ NONCE covers those cases, and that leaves autosave, which is also checked here.
333
  */
334
+
335
  $SnS = get_post_meta( $post_id, '_SnS', true );
336
  $scripts = isset( $SnS['scripts'] ) ? $SnS[ 'scripts' ]: array();
337
  $styles = isset( $SnS['styles'] ) ? $SnS[ 'styles' ]: array();
338
+
339
  $scripts = self::maybe_set( $scripts, 'scripts_in_head' );
340
  $scripts = self::maybe_set( $scripts, 'scripts' );
341
  $scripts = self::maybe_set( $scripts, 'enqueue_scripts' );
342
  $styles = self::maybe_set( $styles, 'styles' );
343
  $styles = self::maybe_set( $styles, 'classes_body' );
344
  $styles = self::maybe_set( $styles, 'classes_post' );
345
+
346
  $shortcodes = array();
347
  $SnS_shortcodes = isset( $_REQUEST[ 'SnS_shortcodes' ] ) ? $_REQUEST[ 'SnS_shortcodes' ]: array();
348
+
349
  $existing_shortcodes = isset( $SnS_shortcodes[ 'existing' ] ) ? $SnS_shortcodes[ 'existing' ]: array();
350
  foreach ( $existing_shortcodes as $key => $value )
351
  if ( ! empty( $value ) )
352
  $shortcodes[ $key ] = $value;
353
+
354
  $new_shortcode = isset( $SnS_shortcodes[ 'new' ] ) ? $SnS_shortcodes[ 'new' ]: array();
355
  if ( ! empty( $new_shortcode[ 'value' ] ) ) {
356
+
357
  $key = ( isset( $new_shortcode[ 'name' ] ) ) ? $new_shortcode[ 'name' ] : '';
358
+
359
  if ( '' == $key ) {
360
  $key = count( $shortcodes );
361
  while ( isset( $shortcodes[ $key ] ) )
362
  $key++;
363
  }
364
+
365
  if ( isset( $shortcodes[ $key ] ) ) {
366
  $countr = 1;
367
  while ( isset( $shortcodes[ $key . '_' . $countr ] ) )
368
  $countr++;
369
  $key .= '_' . $countr;
370
+ }
371
+
372
  $shortcodes[ $key ] = $new_shortcode[ 'value' ];
373
+
374
  }
375
+
376
  // This one isn't posted, it's ajax only. Cleanup anyway.
377
  if ( isset( $styles[ 'classes_mce' ] ) && empty( $styles[ 'classes_mce' ] ) )
378
  unset( $styles[ 'classes_mce' ] );
379
+
380
  if ( empty( $scripts ) ) {
381
  if ( isset( $SnS['scripts'] ) )
382
  unset( $SnS['scripts'] );
383
  } else {
384
  $SnS['scripts'] = $scripts;
385
  }
386
+
387
  if ( empty( $styles ) ) {
388
  if ( isset( $SnS['styles'] ) )
389
  unset( $SnS['styles'] );
390
  } else {
391
  $SnS['styles'] = $styles;
392
  }
393
+
394
  if ( empty( $shortcodes ) ) {
395
  if ( isset( $SnS['shortcodes'] ) )
396
  unset( $SnS['shortcodes'] );
397
  } else {
398
  $SnS['shortcodes'] = $shortcodes;
399
  }
400
+
401
  if ( empty( $SnS ) )
402
  delete_post_meta( $post_id, '_SnS' );
403
  else
404
  update_post_meta( $post_id, '_SnS', $SnS );
405
  }
406
+
407
  /**
408
  * maybe_set()
409
  * Filters $o and Checks if the sent data $i is empty (intended to clear). If not, updates.
410
  */
411
+ static function maybe_set( $o, $i, $p = 'SnS_' ) {
412
  if ( empty( $_REQUEST[ $p . $i ] ) ) {
413
  if ( isset( $o[ $i ] ) ) unset( $o[ $i ] );
414
  } else {
includes/class-sns-settings-page.php CHANGED
@@ -1,31 +1,31 @@
1
  <?php
2
  /**
3
  * SnS_Settings_Page
4
- *
5
  * Allows WordPress admin users the ability to add custom CSS
6
  * and JavaScript directly to individual Post, Pages or custom
7
  * post types.
8
  */
9
-
10
  class SnS_Settings_Page
11
  {
12
  /**
13
  * Constants
14
  */
15
  const MENU_SLUG = 'sns_settings';
16
-
17
  /**
18
  * Initializing method.
19
  * @static
20
  */
21
- function init() {
22
  $hook_suffix = add_submenu_page( SnS_Admin::$parent_slug, __( 'Scripts n Styles', 'scripts-n-styles' ), __( 'Settings' ), 'unfiltered_html', self::MENU_SLUG, array( 'SnS_Form', 'page' ) );
23
-
24
  add_action( "load-$hook_suffix", array( __CLASS__, 'admin_load' ) );
25
  add_action( "load-$hook_suffix", array( 'SnS_Admin', 'help' ) );
26
  add_action( "load-$hook_suffix", array( 'SnS_Form', 'take_action' ), 49 );
27
  add_action( "admin_print_styles-$hook_suffix", array( __CLASS__, 'admin_enqueue_scripts' ) );
28
-
29
  // Make the page into a tab.
30
  if ( SnS_Admin::MENU_SLUG != SnS_Admin::$parent_slug ) {
31
  remove_submenu_page( SnS_Admin::$parent_slug, self::MENU_SLUG );
@@ -37,36 +37,34 @@ class SnS_Settings_Page
37
  if ( self::MENU_SLUG == $plugin_page ) $submenu_file = SnS_Admin::MENU_SLUG;
38
  return $parent_file;
39
  }
40
-
41
- function admin_enqueue_scripts() {
42
  $options = get_option( 'SnS_options' );
43
  $cm_theme = isset( $options[ 'cm_theme' ] ) ? $options[ 'cm_theme' ] : '';
 
44
  wp_enqueue_style( 'sns-options' );
45
-
46
- foreach ( SnS_Admin::$cm_themes as $theme )
47
- wp_enqueue_style( "codemirror-$theme" );
48
-
49
  wp_enqueue_script( 'sns-settings-page' );
50
  wp_localize_script( 'sns-settings-page', 'codemirror_options', array( 'theme' => $cm_theme ) );
51
  }
52
-
53
  /**
54
  * Settings Page
55
  * Adds Admin Menu Item via WordPress' "Administration Menus" API. Also hook actions to register options via WordPress' Settings API.
56
  */
57
- function admin_load() {
58
  wp_enqueue_style( 'sns-options' );
59
-
60
  register_setting(
61
  SnS_Admin::OPTION_GROUP,
62
  'SnS_options' );
63
-
64
  add_settings_section(
65
  'settings',
66
  __( 'Scripts n Styles Settings', 'scripts-n-styles' ),
67
  array( __CLASS__, 'settings_section' ),
68
  SnS_Admin::MENU_SLUG );
69
-
70
  add_settings_field(
71
  'metabox',
72
  __( '<strong>Hide Metabox by default</strong>: ', 'scripts-n-styles' ),
@@ -82,7 +80,7 @@ class SnS_Settings_Page
82
  'legend' => __( 'Hide Metabox by default', 'scripts-n-styles' ),
83
  'description' => __( '<span class="description" style="max-width: 500px; display: inline-block;">This is overridable via Screen Options on each edit screen.</span>', 'scripts-n-styles' )
84
  ) );
85
-
86
  add_settings_field(
87
  'menu_position',
88
  __( '<strong>Menu Position</strong>: ', 'scripts-n-styles' ),
@@ -98,13 +96,13 @@ class SnS_Settings_Page
98
  'layout' => 'vertical',
99
  'description' => __( '<span class="description" style="max-width: 500px; display: inline-block;">Some people are fussy about where the menu goes, so I made an option.</span>', 'scripts-n-styles' ),
100
  ) );
101
-
102
  add_settings_section(
103
  'demo',
104
  __( 'Code Mirror Demo', 'scripts-n-styles' ),
105
  array( __CLASS__, 'demo_section' ),
106
  SnS_Admin::MENU_SLUG );
107
-
108
  add_settings_field(
109
  'cm_theme',
110
  __( '<strong>Theme</strong>: ', 'scripts-n-styles' ),
@@ -114,7 +112,7 @@ class SnS_Settings_Page
114
  array(
115
  'label_for' => 'cm_theme',
116
  'setting' => 'SnS_options',
117
- 'choices' => SnS_Admin::$cm_themes,
118
  'default' => 'default',
119
  'legend' => __( 'Theme', 'scripts-n-styles' ),
120
  'layout' => 'horizontal',
@@ -136,24 +134,24 @@ class SnS_Settings_Page
136
  'description' => __( '<span class="description" style="max-width: 500px; display: inline-block;">This enables Hoops shortcodes to be used via a "Hoops" Text Widget.</span>', 'scripts-n-styles' )
137
  ) );
138
  }
139
-
140
  /**
141
  * Settings Page
142
  * Outputs Description text for the Global Section.
143
  */
144
- function settings_section() {
145
  ?>
146
  <div style="max-width: 55em;">
147
  <p><?php _e( 'Control how and where Scripts n Styles menus and metaboxes appear. These options are here because sometimes users really care about this stuff. Feel free to adjust to your liking. :-)', 'scripts-n-styles' ) ?></p>
148
  </div>
149
  <?php
150
  }
151
-
152
  /**
153
  * Settings Page
154
  * Outputs Description text for the Global Section.
155
  */
156
- function demo_section() {
157
  ?>
158
  <div style="max-width: 55em;">
159
  <textarea id="codemirror_demo" name="code" style="min-width: 500px; width:97%;" rows="5" cols="40">
1
  <?php
2
  /**
3
  * SnS_Settings_Page
4
+ *
5
  * Allows WordPress admin users the ability to add custom CSS
6
  * and JavaScript directly to individual Post, Pages or custom
7
  * post types.
8
  */
9
+
10
  class SnS_Settings_Page
11
  {
12
  /**
13
  * Constants
14
  */
15
  const MENU_SLUG = 'sns_settings';
16
+
17
  /**
18
  * Initializing method.
19
  * @static
20
  */
21
+ static function init() {
22
  $hook_suffix = add_submenu_page( SnS_Admin::$parent_slug, __( 'Scripts n Styles', 'scripts-n-styles' ), __( 'Settings' ), 'unfiltered_html', self::MENU_SLUG, array( 'SnS_Form', 'page' ) );
23
+
24
  add_action( "load-$hook_suffix", array( __CLASS__, 'admin_load' ) );
25
  add_action( "load-$hook_suffix", array( 'SnS_Admin', 'help' ) );
26
  add_action( "load-$hook_suffix", array( 'SnS_Form', 'take_action' ), 49 );
27
  add_action( "admin_print_styles-$hook_suffix", array( __CLASS__, 'admin_enqueue_scripts' ) );
28
+
29
  // Make the page into a tab.
30
  if ( SnS_Admin::MENU_SLUG != SnS_Admin::$parent_slug ) {
31
  remove_submenu_page( SnS_Admin::$parent_slug, self::MENU_SLUG );
37
  if ( self::MENU_SLUG == $plugin_page ) $submenu_file = SnS_Admin::MENU_SLUG;
38
  return $parent_file;
39
  }
40
+
41
+ static function admin_enqueue_scripts() {
42
  $options = get_option( 'SnS_options' );
43
  $cm_theme = isset( $options[ 'cm_theme' ] ) ? $options[ 'cm_theme' ] : '';
44
+
45
  wp_enqueue_style( 'sns-options' );
46
+
 
 
 
47
  wp_enqueue_script( 'sns-settings-page' );
48
  wp_localize_script( 'sns-settings-page', 'codemirror_options', array( 'theme' => $cm_theme ) );
49
  }
50
+
51
  /**
52
  * Settings Page
53
  * Adds Admin Menu Item via WordPress' "Administration Menus" API. Also hook actions to register options via WordPress' Settings API.
54
  */
55
+ static function admin_load() {
56
  wp_enqueue_style( 'sns-options' );
57
+
58
  register_setting(
59
  SnS_Admin::OPTION_GROUP,
60
  'SnS_options' );
61
+
62
  add_settings_section(
63
  'settings',
64
  __( 'Scripts n Styles Settings', 'scripts-n-styles' ),
65
  array( __CLASS__, 'settings_section' ),
66
  SnS_Admin::MENU_SLUG );
67
+
68
  add_settings_field(
69
  'metabox',
70
  __( '<strong>Hide Metabox by default</strong>: ', 'scripts-n-styles' ),
80
  'legend' => __( 'Hide Metabox by default', 'scripts-n-styles' ),
81
  'description' => __( '<span class="description" style="max-width: 500px; display: inline-block;">This is overridable via Screen Options on each edit screen.</span>', 'scripts-n-styles' )
82
  ) );
83
+
84
  add_settings_field(
85
  'menu_position',
86
  __( '<strong>Menu Position</strong>: ', 'scripts-n-styles' ),
96
  'layout' => 'vertical',
97
  'description' => __( '<span class="description" style="max-width: 500px; display: inline-block;">Some people are fussy about where the menu goes, so I made an option.</span>', 'scripts-n-styles' ),
98
  ) );
99
+
100
  add_settings_section(
101
  'demo',
102
  __( 'Code Mirror Demo', 'scripts-n-styles' ),
103
  array( __CLASS__, 'demo_section' ),
104
  SnS_Admin::MENU_SLUG );
105
+
106
  add_settings_field(
107
  'cm_theme',
108
  __( '<strong>Theme</strong>: ', 'scripts-n-styles' ),
112
  array(
113
  'label_for' => 'cm_theme',
114
  'setting' => 'SnS_options',
115
+ 'choices' => Scripts_n_Styles::$cm_themes,
116
  'default' => 'default',
117
  'legend' => __( 'Theme', 'scripts-n-styles' ),
118
  'layout' => 'horizontal',
134
  'description' => __( '<span class="description" style="max-width: 500px; display: inline-block;">This enables Hoops shortcodes to be used via a "Hoops" Text Widget.</span>', 'scripts-n-styles' )
135
  ) );
136
  }
137
+
138
  /**
139
  * Settings Page
140
  * Outputs Description text for the Global Section.
141
  */
142
+ static function settings_section() {
143
  ?>
144
  <div style="max-width: 55em;">
145
  <p><?php _e( 'Control how and where Scripts n Styles menus and metaboxes appear. These options are here because sometimes users really care about this stuff. Feel free to adjust to your liking. :-)', 'scripts-n-styles' ) ?></p>
146
  </div>
147
  <?php
148
  }
149
+
150
  /**
151
  * Settings Page
152
  * Outputs Description text for the Global Section.
153
  */
154
+ static function demo_section() {
155
  ?>
156
  <div style="max-width: 55em;">
157
  <textarea id="codemirror_demo" name="code" style="min-width: 500px; width:97%;" rows="5" cols="40">
includes/class-sns-theme-page.php CHANGED
@@ -1,36 +1,36 @@
1
  <?php
2
  /**
3
  * SnS_Theme_Page
4
- *
5
  * Allows WordPress admin users the ability to edit theme CSS
6
  * and LESS directly in the admin via CodeMirror.
7
- *
8
  * On the `wp_enqueue_scripts` action, use `wp_enqueue_style( 'theme_style', get_stylesheet_uri() );` to add your style.css instead of inline.
9
  * On the `after_setup_theme` action, use `add_theme_support( 'scripts-n-styles', array( '/less/variables.less', '/less/mixins.less' ) );` but use the appropriate file locations.
10
- *
11
  */
12
-
13
  class SnS_Theme_Page
14
  {
15
  /**
16
  * Constants
17
  */
18
  const MENU_SLUG = 'sns_theme';
19
-
20
  static $files = array();
21
 
22
  /**
23
  * Initializing method.
24
  * @static
25
  */
26
- function init() {
27
  $hook_suffix = add_submenu_page( SnS_Admin::$parent_slug, __( 'Scripts n Styles', 'scripts-n-styles' ), __( 'Theme' ), 'unfiltered_html', self::MENU_SLUG, array( 'SnS_Form', 'page' ) );
28
-
29
  add_action( "load-$hook_suffix", array( __CLASS__, 'admin_load' ) );
30
  add_action( "load-$hook_suffix", array( 'SnS_Admin', 'help' ) );
31
  add_action( "load-$hook_suffix", array( 'SnS_Form', 'take_action' ), 49 );
32
  add_action( "admin_print_styles-$hook_suffix", array( __CLASS__, 'admin_enqueue_scripts' ) );
33
-
34
  // Make the page into a tab.
35
  if ( SnS_Admin::MENU_SLUG != SnS_Admin::$parent_slug ) {
36
  remove_submenu_page( SnS_Admin::$parent_slug, self::MENU_SLUG );
@@ -42,14 +42,14 @@ class SnS_Theme_Page
42
  if ( self::MENU_SLUG == $plugin_page ) $submenu_file = SnS_Admin::MENU_SLUG;
43
  return $parent_file;
44
  }
45
-
46
- function admin_enqueue_scripts() {
47
  $options = get_option( 'SnS_options' );
48
  $cm_theme = isset( $options[ 'cm_theme' ] ) ? $options[ 'cm_theme' ] : 'default';
49
-
50
  wp_enqueue_style( 'sns-options' );
51
  wp_enqueue_style( 'codemirror-theme' );
52
-
53
  wp_enqueue_script( 'sns-theme-page' );
54
  wp_localize_script( 'sns-theme-page', '_SnS_options', array( 'theme' => $cm_theme ) );
55
  }
@@ -57,35 +57,35 @@ class SnS_Theme_Page
57
  * Settings Page
58
  * Adds Admin Menu Item via WordPress' "Administration Menus" API. Also hook actions to register options via WordPress' Settings API.
59
  */
60
- function admin_load() {
61
  // added here to not effect other pages. Theme page requires JavaScript (less.js) or it doesn't make sense to save.
62
  add_filter( 'sns_show_submit_button', '__return_false' );
63
-
64
  register_setting(
65
  SnS_Admin::OPTION_GROUP,
66
  'SnS_options' );
67
-
68
  add_settings_section(
69
  'theme',
70
  __( 'Scripts n Styles Theme Files', 'scripts-n-styles' ),
71
  array( __CLASS__, 'less_fields' ),
72
  SnS_Admin::MENU_SLUG );
73
  }
74
-
75
- function less_fields() {
76
  $files = array();
77
  $support_files = get_theme_support( 'scripts-n-styles' );
78
-
79
  if ( is_child_theme() )
80
  $root = get_stylesheet_directory();
81
  else
82
  $root = get_template_directory();
83
-
84
  foreach( $support_files[0] as $file ) {
85
  if ( is_file( $root . $file ) )
86
  $files[] = $root . $file;
87
  }
88
-
89
  $slug = get_stylesheet();
90
  $options = get_option( 'SnS_options' );
91
  // Stores data on a theme by theme basis.
@@ -93,9 +93,9 @@ class SnS_Theme_Page
93
  $stored = isset( $theme[ 'less' ] ) ? $theme[ 'less' ] : array(); // is an array of stored imported less file data
94
  $compiled = isset( $theme[ 'compiled' ] ) ? $theme[ 'compiled' ] : ''; // the complete compiled down css
95
  $slug = esc_attr( $slug );
96
-
97
  $open_theme_panels = json_decode( get_user_option( 'sns_open_theme_panels', get_current_user_id() ), true );
98
-
99
  ?>
100
  <div style="overflow: hidden">
101
  <div id="less_area" style="width: 49%; float: left; overflow: hidden; margin-right: 2%;">
@@ -129,7 +129,7 @@ class SnS_Theme_Page
129
  <div class="sns-ajax-wrap">
130
  <a class="sns-ajax-load button" href="#">Load Source File</a>
131
  <a class="sns-ajax-save button" href="#">Save All Changes</a>
132
- <img class="sns-ajax-loading" src="/wp-admin/images/wpspin_light.gif" style="display: none;">
133
  <div class="single-status"><div class="updated settings-error below-h2"></div></div>
134
  </div>
135
  </div></div>
@@ -140,7 +140,7 @@ class SnS_Theme_Page
140
  </div>
141
  <div id="css_area" class="sns-less-ide" style="width: 49%; float: left; overflow: hidden;">
142
  <div id="compile_status" style="display: none" class="updated settings-error below-h2">
143
- <p><img class="sns-ajax-loading" src="/wp-admin/images/wpspin_light.gif" />
144
  <span class="status-text">Keystokes detected. 1 second delay, then compiling...</span></p>
145
  </div>
146
  <div class="widget"><div class="sns-collapsed inside">
@@ -155,12 +155,12 @@ class SnS_Theme_Page
155
  </div>
156
  <?php
157
  }
158
-
159
  /**
160
  * Settings Page
161
  * Outputs Description text for the Global Section.
162
  */
163
- function global_section() {
164
  ?>
165
  <div style="max-width: 55em;">
166
  <p><?php _e( 'Code entered here will be included in <em>every page (and post) of your site</em>, including the homepage and archives. The code will appear <strong>before</strong> Scripts and Styles registered individually.', 'scripts-n-styles' )?></p>
1
  <?php
2
  /**
3
  * SnS_Theme_Page
4
+ *
5
  * Allows WordPress admin users the ability to edit theme CSS
6
  * and LESS directly in the admin via CodeMirror.
7
+ *
8
  * On the `wp_enqueue_scripts` action, use `wp_enqueue_style( 'theme_style', get_stylesheet_uri() );` to add your style.css instead of inline.
9
  * On the `after_setup_theme` action, use `add_theme_support( 'scripts-n-styles', array( '/less/variables.less', '/less/mixins.less' ) );` but use the appropriate file locations.
10
+ *
11
  */
12
+
13
  class SnS_Theme_Page
14
  {
15
  /**
16
  * Constants
17
  */
18
  const MENU_SLUG = 'sns_theme';
19
+
20
  static $files = array();
21
 
22
  /**
23
  * Initializing method.
24
  * @static
25
  */
26
+ static function init() {
27
  $hook_suffix = add_submenu_page( SnS_Admin::$parent_slug, __( 'Scripts n Styles', 'scripts-n-styles' ), __( 'Theme' ), 'unfiltered_html', self::MENU_SLUG, array( 'SnS_Form', 'page' ) );
28
+
29
  add_action( "load-$hook_suffix", array( __CLASS__, 'admin_load' ) );
30
  add_action( "load-$hook_suffix", array( 'SnS_Admin', 'help' ) );
31
  add_action( "load-$hook_suffix", array( 'SnS_Form', 'take_action' ), 49 );
32
  add_action( "admin_print_styles-$hook_suffix", array( __CLASS__, 'admin_enqueue_scripts' ) );
33
+
34
  // Make the page into a tab.
35
  if ( SnS_Admin::MENU_SLUG != SnS_Admin::$parent_slug ) {
36
  remove_submenu_page( SnS_Admin::$parent_slug, self::MENU_SLUG );
42
  if ( self::MENU_SLUG == $plugin_page ) $submenu_file = SnS_Admin::MENU_SLUG;
43
  return $parent_file;
44
  }
45
+
46
+ static function admin_enqueue_scripts() {
47
  $options = get_option( 'SnS_options' );
48
  $cm_theme = isset( $options[ 'cm_theme' ] ) ? $options[ 'cm_theme' ] : 'default';
49
+
50
  wp_enqueue_style( 'sns-options' );
51
  wp_enqueue_style( 'codemirror-theme' );
52
+
53
  wp_enqueue_script( 'sns-theme-page' );
54
  wp_localize_script( 'sns-theme-page', '_SnS_options', array( 'theme' => $cm_theme ) );
55
  }
57
  * Settings Page
58
  * Adds Admin Menu Item via WordPress' "Administration Menus" API. Also hook actions to register options via WordPress' Settings API.
59
  */
60
+ static function admin_load() {
61
  // added here to not effect other pages. Theme page requires JavaScript (less.js) or it doesn't make sense to save.
62
  add_filter( 'sns_show_submit_button', '__return_false' );
63
+
64
  register_setting(
65
  SnS_Admin::OPTION_GROUP,
66
  'SnS_options' );
67
+
68
  add_settings_section(
69
  'theme',
70
  __( 'Scripts n Styles Theme Files', 'scripts-n-styles' ),
71
  array( __CLASS__, 'less_fields' ),
72
  SnS_Admin::MENU_SLUG );
73
  }
74
+
75
+ static function less_fields() {
76
  $files = array();
77
  $support_files = get_theme_support( 'scripts-n-styles' );
78
+
79
  if ( is_child_theme() )
80
  $root = get_stylesheet_directory();
81
  else
82
  $root = get_template_directory();
83
+
84
  foreach( $support_files[0] as $file ) {
85
  if ( is_file( $root . $file ) )
86
  $files[] = $root . $file;
87
  }
88
+
89
  $slug = get_stylesheet();
90
  $options = get_option( 'SnS_options' );
91
  // Stores data on a theme by theme basis.
93
  $stored = isset( $theme[ 'less' ] ) ? $theme[ 'less' ] : array(); // is an array of stored imported less file data
94
  $compiled = isset( $theme[ 'compiled' ] ) ? $theme[ 'compiled' ] : ''; // the complete compiled down css
95
  $slug = esc_attr( $slug );
96
+
97
  $open_theme_panels = json_decode( get_user_option( 'sns_open_theme_panels', get_current_user_id() ), true );
98
+
99
  ?>
100
  <div style="overflow: hidden">
101
  <div id="less_area" style="width: 49%; float: left; overflow: hidden; margin-right: 2%;">
129
  <div class="sns-ajax-wrap">
130
  <a class="sns-ajax-load button" href="#">Load Source File</a>
131
  <a class="sns-ajax-save button" href="#">Save All Changes</a>
132
+ <span class="sns-ajax-loading"><span class="spinner" style="display: inline-block;"></span></span>
133
  <div class="single-status"><div class="updated settings-error below-h2"></div></div>
134
  </div>
135
  </div></div>
140
  </div>
141
  <div id="css_area" class="sns-less-ide" style="width: 49%; float: left; overflow: hidden;">
142
  <div id="compile_status" style="display: none" class="updated settings-error below-h2">
143
+ <p><span class="sns-ajax-loading"><span class="spinner" style="display: inline-block;"></span></span>
144
  <span class="status-text">Keystokes detected. 1 second delay, then compiling...</span></p>
145
  </div>
146
  <div class="widget"><div class="sns-collapsed inside">
155
  </div>
156
  <?php
157
  }
158
+
159
  /**
160
  * Settings Page
161
  * Outputs Description text for the Global Section.
162
  */
163
+ static function global_section() {
164
  ?>
165
  <div style="max-width: 55em;">
166
  <p><?php _e( 'Code entered here will be included in <em>every page (and post) of your site</em>, including the homepage and archives. The code will appear <strong>before</strong> Scripts and Styles registered individually.', 'scripts-n-styles' )?></p>
includes/class-sns-usage-page.php CHANGED
@@ -1,82 +1,82 @@
1
  <?php
2
  /**
3
  * SnS_Settings_Page
4
- *
5
  * Allows WordPress admin users the ability to add custom CSS
6
  * and JavaScript directly to individual Post, Pages or custom
7
  * post types.
8
  */
9
-
10
  class SnS_Usage_Page
11
  {
12
  /**
13
  * Constants
14
  */
15
  const MENU_SLUG = 'sns_usage';
16
-
17
  /**
18
  * Initializing method.
19
  * @static
20
  */
21
- function init() {
22
  $hook_suffix = add_submenu_page( SnS_Admin::$parent_slug, __( 'Scripts n Styles', 'scripts-n-styles' ), __( 'Usage', 'scripts-n-styles' ), 'unfiltered_html', self::MENU_SLUG, array( 'SnS_Form', 'page' ) );
23
-
24
  add_action( "load-$hook_suffix", array( __CLASS__, 'admin_load' ) );
25
  add_action( "load-$hook_suffix", array( 'SnS_Admin', 'help' ) );
26
-
 
27
  // Make the page into a tab.
28
  if ( SnS_Admin::MENU_SLUG != SnS_Admin::$parent_slug ) {
29
  remove_submenu_page( SnS_Admin::$parent_slug, self::MENU_SLUG );
30
  add_filter( 'parent_file', array( __CLASS__, 'parent_file') );
31
  }
32
- add_action( 'admin_enqueue_scripts', array( __CLASS__, 'admin_enqueue_scripts' ) );
33
  }
34
  static function parent_file( $parent_file ) {
35
  global $plugin_page, $submenu_file;
36
  if ( self::MENU_SLUG == $plugin_page ) $submenu_file = SnS_Admin::MENU_SLUG;
37
  return $parent_file;
38
  }
39
-
40
- function admin_enqueue_scripts() {
41
  wp_enqueue_style( 'sns-options' );
42
  }
43
-
44
  /**
45
  * Settings Page
46
  * Adds Admin Menu Item via WordPress' "Administration Menus" API. Also hook actions to register options via WordPress' Settings API.
47
  */
48
- function admin_load() {
49
-
50
  add_screen_option( 'per_page', array( 'label' => __( 'Per Page' ), 'default' => 20 ) );
51
  add_filter( 'set-screen-option', array( __CLASS__, 'set_screen_option' ), 10, 3 );
52
  // hack for core limitation: see http://core.trac.wordpress.org/ticket/18954
53
  set_screen_options();
54
-
55
  add_settings_section(
56
  'usage',
57
  __( 'Scripts n Styles Usage', 'scripts-n-styles' ),
58
  array( __CLASS__, 'usage_section' ),
59
  SnS_Admin::MENU_SLUG );
60
  }
61
-
62
- function set_screen_option( $false, $option, $value ) {
63
  $screen_id = get_current_screen()->id;
64
  $this_option = str_replace( '-', '_', "{$screen_id}_per_page" );
65
  if ( $this_option != $option )
66
  return false;
67
-
68
  $value = (int) $value;
69
  if ( $value < 1 || $value > 999 )
70
  return false;
71
-
72
  return $value;
73
  }
74
-
75
  /**
76
  * Settings Page
77
  * Outputs the Usage Section.
78
  */
79
- function usage_section() { ?>
80
  <div style="max-width: 55em;">
81
  <p><?php _e( 'The following table shows content that utilizes Scripts n Styles.', 'scripts-n-styles' ) ?></p>
82
  </div>
1
  <?php
2
  /**
3
  * SnS_Settings_Page
4
+ *
5
  * Allows WordPress admin users the ability to add custom CSS
6
  * and JavaScript directly to individual Post, Pages or custom
7
  * post types.
8
  */
9
+
10
  class SnS_Usage_Page
11
  {
12
  /**
13
  * Constants
14
  */
15
  const MENU_SLUG = 'sns_usage';
16
+
17
  /**
18
  * Initializing method.
19
  * @static
20
  */
21
+ static function init() {
22
  $hook_suffix = add_submenu_page( SnS_Admin::$parent_slug, __( 'Scripts n Styles', 'scripts-n-styles' ), __( 'Usage', 'scripts-n-styles' ), 'unfiltered_html', self::MENU_SLUG, array( 'SnS_Form', 'page' ) );
23
+
24
  add_action( "load-$hook_suffix", array( __CLASS__, 'admin_load' ) );
25
  add_action( "load-$hook_suffix", array( 'SnS_Admin', 'help' ) );
26
+ add_action( "admin_print_styles-$hook_suffix", array( __CLASS__, 'admin_enqueue_scripts' ) );
27
+
28
  // Make the page into a tab.
29
  if ( SnS_Admin::MENU_SLUG != SnS_Admin::$parent_slug ) {
30
  remove_submenu_page( SnS_Admin::$parent_slug, self::MENU_SLUG );
31
  add_filter( 'parent_file', array( __CLASS__, 'parent_file') );
32
  }
 
33
  }
34
  static function parent_file( $parent_file ) {
35
  global $plugin_page, $submenu_file;
36
  if ( self::MENU_SLUG == $plugin_page ) $submenu_file = SnS_Admin::MENU_SLUG;
37
  return $parent_file;
38
  }
39
+
40
+ static function admin_enqueue_scripts() {
41
  wp_enqueue_style( 'sns-options' );
42
  }
43
+
44
  /**
45
  * Settings Page
46
  * Adds Admin Menu Item via WordPress' "Administration Menus" API. Also hook actions to register options via WordPress' Settings API.
47
  */
48
+ static function admin_load() {
49
+
50
  add_screen_option( 'per_page', array( 'label' => __( 'Per Page' ), 'default' => 20 ) );
51
  add_filter( 'set-screen-option', array( __CLASS__, 'set_screen_option' ), 10, 3 );
52
  // hack for core limitation: see http://core.trac.wordpress.org/ticket/18954
53
  set_screen_options();
54
+
55
  add_settings_section(
56
  'usage',
57
  __( 'Scripts n Styles Usage', 'scripts-n-styles' ),
58
  array( __CLASS__, 'usage_section' ),
59
  SnS_Admin::MENU_SLUG );
60
  }
61
+
62
+ static function set_screen_option( $false, $option, $value ) {
63
  $screen_id = get_current_screen()->id;
64
  $this_option = str_replace( '-', '_', "{$screen_id}_per_page" );
65
  if ( $this_option != $option )
66
  return false;
67
+
68
  $value = (int) $value;
69
  if ( $value < 1 || $value > 999 )
70
  return false;
71
+
72
  return $value;
73
  }
74
+
75
  /**
76
  * Settings Page
77
  * Outputs the Usage Section.
78
  */
79
+ static function usage_section() { ?>
80
  <div style="max-width: 55em;">
81
  <p><?php _e( 'The following table shows content that utilizes Scripts n Styles.', 'scripts-n-styles' ) ?></p>
82
  </div>
js/code-editor.js CHANGED
@@ -1,27 +1,75 @@
1
  // Options JavaScript
2
 
3
  jQuery( document ).ready( function( $ ) {
4
- var theme = codemirror_options.theme ? codemirror_options.theme: 'default';
5
- var file = $( 'input[name="file"]' ).val();
6
- var fileType = file.slice( file.lastIndexOf(".")+1 );
7
- var $new = $( '#newcontent' );
8
- var $submitWrap = $( '#submit' ).parent();
9
- var modHeight = $submitWrap.height()
10
- + parseInt( $submitWrap.css( 'marginTop' ) )
11
- + parseInt( $submitWrap.css( 'marginBottom' ) )
12
- + parseInt( $submitWrap.css( 'paddingTop' ) )
13
- + parseInt( $submitWrap.css( 'paddingBottom' ) );
14
-
15
- var $documentation = $( '#documentation:visible' );
16
- if ( $documentation.length ) {
17
- modHeight += $documentation.height() + parseInt( $documentation.css( 'marginTop' ) );
18
- }
19
-
20
- var height = $(window).height() - $new.offset().top - $( '#wpadminbar' ).height() - modHeight;
21
-
22
- var config = { lineNumbers: true, mode: "javascript", theme: theme };
23
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
24
  switch ( fileType ) {
 
 
 
25
  case "js":
26
  config.mode = "javascript";
27
  break;
@@ -45,10 +93,22 @@ jQuery( document ).ready( function( $ ) {
45
  config.mode = "markdown";
46
  break;
47
  }
48
-
49
  CodeMirror.commands.save = function (){ jQuery('#submit').click(); };
50
-
51
- CodeMirror.fromTextArea( $new.get(0), config );
52
-
53
- if ( height < $( '.CodeMirror-scroll ' ).height() ) $( '.CodeMirror-scroll ' ).height( height );
 
 
 
 
 
 
 
 
 
 
 
 
54
  });
1
  // Options JavaScript
2
 
3
  jQuery( document ).ready( function( $ ) {
4
+ if ( 'plugin-editor' == pagenow )
5
+ $.ajax({
6
+ type: "POST",
7
+ url: ajaxurl,
8
+ data: {
9
+ _ajax_nonce: sns_plugin_editor_options.nonce,
10
+ action: sns_plugin_editor_options.action,
11
+ file: $('input[name="file"]').val(),
12
+ plugin: $('input[name="plugin"]').val()
13
+ },
14
+ success: function( data ) {
15
+ $('#templateside > ul').html( data.ul );
16
+ if ( ! data.need_update ) return;
17
+
18
+ var warning = "<p><strong>Warning:</strong> Making changes to active plugins is not recommended. If your changes cause a fatal error, the plugin will be automatically deactivated.</p>";
19
+ if ( data.active ) {
20
+ $('p.submit').before(warning);
21
+ $('.fileedit-sub .alignleft big').html( 'Editing <strong>' + $('.fileedit-sub .alignleft big strong').html() + '</strong> (active)' );
22
+ }
23
+ $('#plugin').val( data.plugin );
24
+ console.dir( data );
25
+ }
26
+ });
27
+ });
28
+ jQuery( document ).ready( function( $ ) {
29
+ var theme = codemirror_options.theme ? codemirror_options.theme: 'default',
30
+ file = $( 'input[name="file"]' ).val(),
31
+ $new = $( '#newcontent' ),
32
+ $template = $( '#template' ),
33
+ $wpbody = $( '#wpbody-content' ),
34
+ $documentation = $( '#documentation' ),
35
+ $submit = $( 'p.submit' ).first(),
36
+ $warning = $( '#documentation + p:not(.submit)' ).first(),
37
+ $templateside = $( '#templateside' ),
38
+ templateOffset, bottomPadding, docHeight, submitHeight, resizeTimer, fileType, cmheight;
39
+
40
+ fileType = file.slice( file.lastIndexOf(".")+1 );
41
+
42
+ templateOffset = parseInt( jQuery('#template').offset().top ),
43
+ bottomPadding = parseInt( $('#wpbody-content').css('padding-bottom') );
44
+ docHeight = ( $documentation.length ) ? parseInt( $documentation.height() )
45
+ + parseInt( $documentation.css('padding-top') )
46
+ + parseInt( $documentation.css('padding-bottom') )
47
+ + parseInt( $documentation.css('margin-top') )
48
+ + parseInt( $documentation.css('margin-bottom') )
49
+ : 0;
50
+ warningHeight = ( $warning.length ) ? parseInt( $warning.height() )
51
+ + parseInt( $warning.css('padding-top') )
52
+ + parseInt( $warning.css('padding-bottom') )
53
+ + parseInt( $warning.css('margin-top') )
54
+ + parseInt( $warning.css('margin-bottom') )
55
+ : 0;
56
+ submitHeight = parseInt( $submit.height() )
57
+ + parseInt( $submit.css('padding-top') )
58
+ + parseInt( $submit.css('padding-bottom') )
59
+ + parseInt( $submit.css('margin-top') )
60
+ + parseInt( $submit.css('margin-bottom') );
61
+ templateside = parseInt( $templateside.height() );
62
+
63
+ var config = {
64
+ lineNumbers: true,
65
+ theme: theme,
66
+ //viewportMargin: Infinity
67
+ };
68
+
69
  switch ( fileType ) {
70
+ case "md":
71
+ config.mode = "gfm";
72
+ break;
73
  case "js":
74
  config.mode = "javascript";
75
  break;
93
  config.mode = "markdown";
94
  break;
95
  }
96
+
97
  CodeMirror.commands.save = function (){ jQuery('#submit').click(); };
98
+
99
+ var cmeditor = CodeMirror.fromTextArea( $new.get(0), config );
100
+
101
+ $(window).resize(function(){
102
+ clearTimeout(resizeTimer);
103
+ resizeTimer = setTimeout( cmresizer, 100 );
104
+ });
105
+ function cmresizer() {
106
+ cmheight = Math.max( 300, $(window).height() - ( templateOffset + bottomPadding + docHeight + warningHeight + submitHeight + 40 ) );
107
+ if ( cmheight > templateside )
108
+ cmeditor.setSize( null, cmheight );
109
+ else
110
+ cmeditor.setSize( null, $(window).height() - ( templateOffset + docHeight + warningHeight + submitHeight ) );
111
+ }
112
+ cmresizer();
113
+
114
  });
js/global-page.js CHANGED
@@ -5,31 +5,35 @@ jQuery( document ).ready( function( $ ) {
5
  var theme = _SnS_options.theme ? _SnS_options.theme: 'default';
6
  var lessMirror, lessOutput, errorLine, errorText, errors, loaded,
7
  coffeeMirror, coffeeOutput, coffee_errorLine, coffee_errorText, coffee_errors, coffee_loaded,
8
- lessMirrorConfig = { lineNumbers: true, mode: "text/x-less", theme: theme, indentWithTabs: true, onChange: compile },
9
- coffeeMirrorConfig = { lineNumbers: true, mode: "text/x-coffeescript", theme: theme, onChange: coffee_compile };
10
-
 
 
11
  $("#enqueue_scripts").data( 'placeholder', 'Enqueue Registered Scripts...' ).width(350).chosen();
12
- $(".chzn-container-multi .chzn-choices .search-field input").height('26px');
13
- $(".chzn-container .chzn-results").css( 'max-height', '176px');
14
-
15
  //CodeMirror.commands.save = saveLessMirror;
16
-
17
  $( "textarea.js" ).not( '#coffee_compiled' ).each( function() {
18
  CodeMirror.fromTextArea( this, { lineNumbers: true, mode: "javascript", theme: theme } );
19
  });
20
-
21
  $( "textarea.css" ).not( '#compiled' ).each( function() {
22
  CodeMirror.fromTextArea( this, { lineNumbers: true, mode: "css", theme: theme } );
23
  });
24
-
25
  lessOutput = CodeMirror.fromTextArea( $( '#compiled' ).get(0), { lineNumbers: true, mode: "css", theme: theme, readOnly: true } );
26
  coffeeOutput = CodeMirror.fromTextArea( $( '#coffee_compiled' ).get(0), { lineNumbers: true, mode: "javascript", theme: theme, readOnly: true } );
27
-
28
  $( "textarea.less" ).each( function() {
29
  lessMirror = CodeMirror.fromTextArea( this, lessMirrorConfig );
 
30
  });
31
  $( "textarea.coffee" ).each( function() {
32
  coffeeMirror = CodeMirror.fromTextArea( this, coffeeMirrorConfig );
 
33
  });
34
  $('#coffee').parent().append('<label><input type="checkbox" id="coffee_spacing"> Double Spaced</label>');
35
  $('#coffee_spacing').change( coffee_compile );
@@ -39,13 +43,13 @@ jQuery( document ).ready( function( $ ) {
39
  coffee_loaded = true;
40
  $( "#less" ).closest('form').submit( compile );
41
  $( "#coffee" ).closest('form').submit( coffee_compile );
42
-
43
  //function saveLessMirror(){
44
  // Ajax Save.
45
  //}
 
46
  function compile() {
47
  lessMirror.save();
48
- var parser = new( less.Parser );
49
  parser.parse( lessMirror.getValue(), function ( err, tree ) {
50
  if ( err ){
51
  doError( err );
@@ -77,10 +81,11 @@ jQuery( document ).ready( function( $ ) {
77
  coffeeOutput.setValue( trimmed );
78
  }
79
  coffeeOutput.save();
80
-
81
  $( '#coffee_compiled' ).next( '.CodeMirror' ).show();
82
  }
83
  catch ( err ) {
 
84
  $( '#coffee_compiled' ).next( '.CodeMirror' ).hide();
85
  if ( coffee_loaded ) {
86
  $( '#coffee_compiled_error' ).removeClass( 'error' ).addClass( 'updated' );
@@ -100,26 +105,26 @@ jQuery( document ).ready( function( $ ) {
100
  $( '#compiled_error' ).show().html( "<p><strong>Error: &nbsp; </strong>" + err.message + "</p>" );
101
  }
102
  clearCompileError();
103
-
104
- errorLine = lessMirror.setMarker( err.line - 1, '<strong>*%N%</strong>', "cm-error");
105
- lessMirror.setLineClass( errorLine, "cm-error");
106
-
107
  var pos = lessMirror.posFromIndex( err.index + 1 );
108
  var token = lessMirror.getTokenAt( pos );
109
  var start = lessMirror.posFromIndex( err.index );
110
  var end = lessMirror.posFromIndex( err.index + token.string.length )
111
- errorText = lessMirror.markText( start, end, "cm-error");
112
-
113
  lessOutput.setValue( "" );
114
  lessOutput.save();
115
  }
116
  function clearCompileError() {
117
  if ( errorLine ) {
118
- lessMirror.clearMarker( errorLine );
119
- lessMirror.setLineClass( errorLine, null );
120
  errorLine = false;
121
  }
122
  if ( errorText ) errorText.clear();
123
  errorText = false;
124
  }
125
- });
5
  var theme = _SnS_options.theme ? _SnS_options.theme: 'default';
6
  var lessMirror, lessOutput, errorLine, errorText, errors, loaded,
7
  coffeeMirror, coffeeOutput, coffee_errorLine, coffee_errorText, coffee_errors, coffee_loaded,
8
+ lessMirrorConfig = { gutters: ["note-gutter", "CodeMirror-linenumbers"],
9
+ lineNumbers: true, mode: "text/x-less", theme: theme, indentWithTabs: true },
10
+ coffeeMirrorConfig = { lineNumbers: true, mode: "text/x-coffeescript", theme: theme };
11
+
12
+ var parser = new( less.Parser )({});
13
  $("#enqueue_scripts").data( 'placeholder', 'Enqueue Registered Scripts...' ).width(350).chosen();
14
+ $(".chosen-container-multi .chosen-choices .search-field input").height('26px');
15
+ $(".chosen-container .chosen-results").css( 'max-height', '176px');
16
+
17
  //CodeMirror.commands.save = saveLessMirror;
18
+
19
  $( "textarea.js" ).not( '#coffee_compiled' ).each( function() {
20
  CodeMirror.fromTextArea( this, { lineNumbers: true, mode: "javascript", theme: theme } );
21
  });
22
+
23
  $( "textarea.css" ).not( '#compiled' ).each( function() {
24
  CodeMirror.fromTextArea( this, { lineNumbers: true, mode: "css", theme: theme } );
25
  });
26
+
27
  lessOutput = CodeMirror.fromTextArea( $( '#compiled' ).get(0), { lineNumbers: true, mode: "css", theme: theme, readOnly: true } );
28
  coffeeOutput = CodeMirror.fromTextArea( $( '#coffee_compiled' ).get(0), { lineNumbers: true, mode: "javascript", theme: theme, readOnly: true } );
29
+
30
  $( "textarea.less" ).each( function() {
31
  lessMirror = CodeMirror.fromTextArea( this, lessMirrorConfig );
32
+ lessMirror.on( "change", compile );
33
  });
34
  $( "textarea.coffee" ).each( function() {
35
  coffeeMirror = CodeMirror.fromTextArea( this, coffeeMirrorConfig );
36
+ coffeeMirror.on( "change", coffee_compile );
37
  });
38
  $('#coffee').parent().append('<label><input type="checkbox" id="coffee_spacing"> Double Spaced</label>');
39
  $('#coffee_spacing').change( coffee_compile );
43
  coffee_loaded = true;
44
  $( "#less" ).closest('form').submit( compile );
45
  $( "#coffee" ).closest('form').submit( coffee_compile );
46
+
47
  //function saveLessMirror(){
48
  // Ajax Save.
49
  //}
50
+
51
  function compile() {
52
  lessMirror.save();
 
53
  parser.parse( lessMirror.getValue(), function ( err, tree ) {
54
  if ( err ){
55
  doError( err );
81
  coffeeOutput.setValue( trimmed );
82
  }
83
  coffeeOutput.save();
84
+
85
  $( '#coffee_compiled' ).next( '.CodeMirror' ).show();
86
  }
87
  catch ( err ) {
88
+ console.dir( err );
89
  $( '#coffee_compiled' ).next( '.CodeMirror' ).hide();
90
  if ( coffee_loaded ) {
91
  $( '#coffee_compiled_error' ).removeClass( 'error' ).addClass( 'updated' );
105
  $( '#compiled_error' ).show().html( "<p><strong>Error: &nbsp; </strong>" + err.message + "</p>" );
106
  }
107
  clearCompileError();
108
+
109
+ errorLine = lessMirror.setGutterMarker( err.line - 1, 'note-gutter', document.createTextNode("*") );
110
+ //lessMirror.setLineClass( errorLine, "cm-error");
111
+
112
  var pos = lessMirror.posFromIndex( err.index + 1 );
113
  var token = lessMirror.getTokenAt( pos );
114
  var start = lessMirror.posFromIndex( err.index );
115
  var end = lessMirror.posFromIndex( err.index + token.string.length )
116
+ errorText = lessMirror.markText( start, end, { className: "cm-error" } );
117
+
118
  lessOutput.setValue( "" );
119
  lessOutput.save();
120
  }
121
  function clearCompileError() {
122
  if ( errorLine ) {
123
+ lessMirror.clearGutter( 'note-gutter' );
124
+ //lessMirror.setLineClass( errorLine, null );
125
  errorLine = false;
126
  }
127
  if ( errorText ) errorText.clear();
128
  errorText = false;
129
  }
130
+ });
js/hoops-page.js CHANGED
@@ -6,7 +6,7 @@ jQuery( document ).ready( function( $ ) { "use strict"
6
  , theme = _SnS_options.theme ? _SnS_options.theme: 'default'
7
  , $form
8
  , config;
9
-
10
  config = {
11
  mode: "text/html",
12
  theme: theme,
@@ -17,11 +17,11 @@ jQuery( document ).ready( function( $ ) { "use strict"
17
  enterMode: "keep",
18
  matchBrackets: true
19
  };
20
-
21
  CodeMirror.commands.save = function() {
22
  $form.submit();
23
- };
24
-
25
  // Each "IDE"
26
  $( ".sns-less-ide", context ).each( function() {
27
  var $text = $('.code',this);
@@ -35,7 +35,7 @@ jQuery( document ).ready( function( $ ) { "use strict"
35
  ide.cm.toTextArea();
36
  collection.push( ide );
37
  });
38
-
39
  // Collapsable
40
  $( context ).on( "click", '.sns-collapsed-btn, .sns-collapsed-btn + label', function( event ){
41
  var $this = $( this )
@@ -60,12 +60,12 @@ jQuery( document ).ready( function( $ ) { "use strict"
60
  $form = $( context ).closest( 'form' );
61
  $form.submit( function( event ){
62
  event.preventDefault();
63
- $.ajax({
64
- type: "POST",
65
- url: window.location,
66
  data: $(this).serialize()+'&ajaxsubmit=1',
67
  cache: false,
68
- success: saved
69
  });
70
  });
71
  // Save
@@ -79,20 +79,20 @@ jQuery( document ).ready( function( $ ) { "use strict"
79
  $(data).insertAfter( '#icon-sns + h2' ).delay(3000).fadeOut();
80
  $( '.sns-ajax-loading' ).hide();
81
  }
82
-
83
  * Expects return data.
84
  $('#sns-ajax-add-shortcode').click(function( event ){
85
  event.preventDefault();
86
  $(this).next().show();
87
  $(collection).each(function (){ this.save(); });
88
-
89
  var args = { _ajax_nonce: nonce };
90
-
91
  args.action = 'sns_hoops';
92
  args.subaction = 'add';
93
  args.name = $( '#SnS_shortcodes' ).val();
94
  args.shortcode = $( '#SnS_shortcodes_new' ).val();
95
-
96
  $.post( ajaxurl, args, function( data ) { refreshShortcodes( data ); } );
97
  });
98
  $('#SnS_shortcodes').keypress(function( event ) {
6
  , theme = _SnS_options.theme ? _SnS_options.theme: 'default'
7
  , $form
8
  , config;
9
+
10
  config = {
11
  mode: "text/html",
12
  theme: theme,
17
  enterMode: "keep",
18
  matchBrackets: true
19
  };
20
+
21
  CodeMirror.commands.save = function() {
22
  $form.submit();
23
+ };
24
+
25
  // Each "IDE"
26
  $( ".sns-less-ide", context ).each( function() {
27
  var $text = $('.code',this);
35
  ide.cm.toTextArea();
36
  collection.push( ide );
37
  });
38
+
39
  // Collapsable
40
  $( context ).on( "click", '.sns-collapsed-btn, .sns-collapsed-btn + label', function( event ){
41
  var $this = $( this )
60
  $form = $( context ).closest( 'form' );
61
  $form.submit( function( event ){
62
  event.preventDefault();
63
+ $.ajax({
64
+ type: "POST",
65
+ url: window.location,
66
  data: $(this).serialize()+'&ajaxsubmit=1',
67
  cache: false,
68
+ success: saved
69
  });
70
  });
71
  // Save
79
  $(data).insertAfter( '#icon-sns + h2' ).delay(3000).fadeOut();
80
  $( '.sns-ajax-loading' ).hide();
81
  }
82
+
83
  * Expects return data.
84
  $('#sns-ajax-add-shortcode').click(function( event ){
85
  event.preventDefault();
86
  $(this).next().show();
87
  $(collection).each(function (){ this.save(); });
88
+
89
  var args = { _ajax_nonce: nonce };
90
+
91
  args.action = 'sns_hoops';
92
  args.subaction = 'add';
93
  args.name = $( '#SnS_shortcodes' ).val();
94
  args.shortcode = $( '#SnS_shortcodes_new' ).val();
95
+
96
  $.post( ajaxurl, args, function( data ) { refreshShortcodes( data ); } );
97
  });
98
  $('#SnS_shortcodes').keypress(function( event ) {
js/meta-box.js CHANGED
@@ -1,61 +1,66 @@
1
  jQuery( document ).ready( function( $ ) {
2
-
3
- // For CPTs that don't have an editor, prevent "tinyMCEPreInit is 'undefined'"
4
- var initData = ( typeof tinyMCEPreInit !== 'undefined' && tinyMCEPreInit.mceInit["content"] ) ? tinyMCEPreInit.mceInit["content"]: false,
5
- context = '#SnS_meta_box',
6
- currentCodeMirror = [],
7
- mceBodyClass = getMCEBodyClasses(),
8
  nonce = $( '#scripts_n_styles_noncename' ).val(),
9
  theme = codemirror_options.theme ? codemirror_options.theme: 'default';
10
-
11
- $("#SnS_enqueue_scripts").data( 'placeholder', 'Enqueue Registered Scripts...' ).width(350).chosen();
12
- $(".chzn-container-multi .chzn-choices .search-field input").height('26px');
13
- $(".chzn-container .chzn-results").css( 'max-height', '176px');
 
 
 
 
 
 
 
 
14
 
15
  //$('textarea', context).attr('autocomplete','off');
16
-
17
  // Refresh when panel becomes unhidden
18
- $( '#adv-settings' ).on( 'click', context + '-hide, ', refreshCodeMirrors );
19
  $( context ).on( 'click', '.hndle, .handlediv', refreshCodeMirrors );
20
-
21
  // add tab-switch handler
22
  $( context ).on( 'click', '.wp-tab-bar a', onTabSwitch );
23
-
24
  // activate first run
25
  $( '.wp-tab-active a', context ).click();
26
-
27
  // must run before ajax click handlers are added.
28
  setupAjaxUI();
29
-
30
  refreshDeleteBtns();
31
-
32
 
33
-
 
34
  $('#sns-ajax-update-scripts').click(function( event ){
35
  event.preventDefault();
36
  $(this).next().show();
37
  $(currentCodeMirror).each(function (){ this.save(); });
38
  var args = { _ajax_nonce: nonce, post_id: $( '#post_ID' ).val(), };
39
-
40
  args.action = 'sns_scripts';
41
  args.scripts = $( '#SnS_scripts' ).val();
42
  args.scripts_in_head = $( '#SnS_scripts_in_head' ).val();
43
-
44
  $.post( ajaxurl, args, function() { refreshMCE(); } );
45
  });
46
-
47
  $('#sns-ajax-update-styles').click(function( event ){
48
  event.preventDefault();
49
  $(this).next().show();
50
  $(currentCodeMirror).each(function (){ this.save(); });
51
  var args = { _ajax_nonce: nonce, post_id: $( '#post_ID' ).val(), };
52
-
53
  args.action = 'sns_styles';
54
  args.styles = $( '#SnS_styles' ).val();
55
-
56
  $.post( ajaxurl, args, function() { refreshMCE(); } );
57
  });
58
-
59
  /*
60
  * Expects return data.
61
  */
@@ -63,11 +68,11 @@ jQuery( document ).ready( function( $ ) {
63
  event.preventDefault();
64
  $(this).next().show();
65
  var args = { _ajax_nonce: nonce, post_id: $( '#post_ID' ).val(), };
66
-
67
  args.action = 'sns_classes';
68
  args.classes_body = $( '#SnS_classes_body' ).val();
69
  args.classes_post = $( '#SnS_classes_post' ).val();
70
-
71
  $.post( ajaxurl, args, function( data ) { refreshBodyClass( data ); } );
72
  });
73
  $('#SnS_classes_body, #SnS_classes_body').keypress(function( event ) {
@@ -76,7 +81,7 @@ jQuery( document ).ready( function( $ ) {
76
  $("#sns-ajax-update-classes").click();
77
  }
78
  });
79
-
80
  /*
81
  * Expects return data.
82
  */
@@ -84,7 +89,7 @@ jQuery( document ).ready( function( $ ) {
84
  event.preventDefault();
85
  $(this).next().show();
86
  var args = { _ajax_nonce: nonce, post_id: $( '#post_ID' ).val(), };
87
-
88
  args.action = 'sns_dropdown';
89
  var format = {};
90
  format.title = $( '#SnS_classes_mce_title' ).val();
@@ -105,7 +110,7 @@ jQuery( document ).ready( function( $ ) {
105
  return;
106
  }
107
  args.format = format;
108
-
109
  $.post( ajaxurl, args, function( data ) { refreshStyleFormats( data ); } );
110
  });
111
  $('#SnS_classes_mce_classes, #SnS_classes_mce_element, #SnS_classes_mce_title').keypress(function( event ) {
@@ -114,7 +119,7 @@ jQuery( document ).ready( function( $ ) {
114
  $("#sns-ajax-update-dropdown").click();
115
  }
116
  });
117
-
118
  /*
119
  * Expects return data.
120
  */
@@ -122,15 +127,15 @@ jQuery( document ).ready( function( $ ) {
122
  event.preventDefault();
123
  $(this).next().show();
124
  var args = { _ajax_nonce: nonce, post_id: $( '#post_ID' ).val(), };
125
-
126
  args.action = 'sns_delete_class';
127
  args.delete = $( this ).attr( 'id' );
128
-
129
  $.post( ajaxurl, args, function( data ) { refreshStyleFormats( data ); } );
130
  });
131
-
132
-
133
-
134
  /*
135
  * Expects return data.
136
  */
@@ -138,14 +143,14 @@ jQuery( document ).ready( function( $ ) {
138
  event.preventDefault();
139
  $(this).next().show();
140
  $(currentCodeMirror).each(function (){ this.save(); });
141
-
142
  var args = { _ajax_nonce: nonce, post_id: $( '#post_ID' ).val(), };
143
-
144
  args.action = 'sns_shortcodes';
145
  args.subaction = 'add';
146
  args.name = $( '#SnS_shortcodes' ).val();
147
  args.shortcode = $( '#SnS_shortcodes_new' ).val();
148
-
149
  $.post( ajaxurl, args, function( data ) { refreshShortcodes( data ); } );
150
  });
151
  $('#SnS_shortcodes').keypress(function( event ) {
@@ -154,7 +159,7 @@ jQuery( document ).ready( function( $ ) {
154
  $("#sns-ajax-add-shortcode").click();
155
  }
156
  });
157
-
158
  $('#sns-shortcodes').on( "click", ".sns-ajax-delete-shortcode", function( event ){
159
  event.preventDefault();
160
  if($(this).data('lock'))return;else $(this).data('lock',true);
@@ -162,11 +167,11 @@ jQuery( document ).ready( function( $ ) {
162
  $(this).next().show();
163
  $(currentCodeMirror).each(function (){ this.save(); });
164
  var args = { _ajax_nonce: nonce, post_id: $( '#post_ID' ).val(), };
165
-
166
  args.action = 'sns_shortcodes';
167
  args.subaction = 'delete';
168
  args.name = $( this ).parent().siblings('textarea').attr( 'data-sns-shortcode-key' );
169
-
170
  $.post( ajaxurl, args, function( data ) { refreshShortcodes( data ); } );
171
  });
172
  $('#sns-shortcodes').on( "click", ".sns-ajax-update-shortcode", function( event ){
@@ -174,40 +179,45 @@ jQuery( document ).ready( function( $ ) {
174
  $(this).next().show();
175
  $(currentCodeMirror).each(function (){ this.save(); });
176
  var args = { _ajax_nonce: nonce, post_id: $( '#post_ID' ).val(), };
177
-
178
  args.action = 'sns_shortcodes';
179
  args.subaction = 'update';
180
  args.name = $( this ).parent().siblings('textarea').attr( 'data-sns-shortcode-key' );
181
  args.shortcode = $( this ).parent().siblings('textarea').val();
182
-
183
  $.post( ajaxurl, args, function( data ) { refreshShortcodes( data ); } );
184
  });
185
-
186
  /*
187
  * Returns the body_class of TinyMCE minus the Scripts n Styles values.
188
  */
189
  function getMCEBodyClasses() {
190
- var t = [];
191
- if ( initData.body_class )
192
- t = initData.body_class.split(' ');
193
-
194
- var bc = $('#SnS_classes_body').val().split(' ');
195
- var pc = $('#SnS_classes_post').val().split(' ');
196
- var p;
197
- for ( var i = 0; i < t.length; i++ ) {
198
- p = $.inArray( bc[i], t )
199
- if ( -1 != p )
200
- t.splice( p, 1 );
201
- }
202
- for ( var i = 0; i < t.length; i++ ) {
203
- p = $.inArray( pc[i], t )
204
- if ( -1 != p )
205
- t.splice( p, 1 );
206
- }
207
- t = t.join(' ');
208
- return t;
 
 
 
 
 
209
  }
210
-
211
  /*
212
  * Builds and Adds the DOM for AJAX functionality.
213
  */
@@ -217,39 +227,39 @@ jQuery( document ).ready( function( $ ) {
217
  '<div class="sns-ajax-wrap">'
218
  + '<a id="sns-ajax-update-scripts" href="#" class="button">Update Scripts</a>'
219
  + ' '
220
- + '<img class="sns-ajax-loading" src="/wp-admin/images/wpspin_light.gif">'
221
  + '</div>'
222
  );
223
-
224
  $('#SnS_styles-tab').append(
225
  '<div class="sns-ajax-wrap">'
226
  + '<a id="sns-ajax-update-styles" href="#" class="button">Update Styles</a>'
227
  + ' '
228
- + '<img class="sns-ajax-loading" src="/wp-admin/images/wpspin_light.gif">'
229
  + '</div>'
230
  );
231
-
232
  $('#sns-classes').append(
233
  '<div class="sns-ajax-wrap">'
234
  + '<a id="sns-ajax-update-classes" href="#" class="button">Update Classes</a>'
235
  + ' '
236
- + '<img class="sns-ajax-loading" src="/wp-admin/images/wpspin_light.gif">'
237
  + '</div>'
238
  );
239
-
240
  $('#add-mce-dropdown-names').append(
241
  '<div class="sns-ajax-wrap">'
242
  + '<a id="sns-ajax-update-dropdown" href="#" class="button">Add Class</a>'
243
  + ' '
244
- + '<img class="sns-ajax-loading" src="/wp-admin/images/wpspin_light.gif">'
245
  + '</div>'
246
  );
247
-
248
  $('#SnS_shortcodes').after(
249
  ' &nbsp; '
250
  + '<a id="sns-ajax-add-shortcode" href="#" class="button">Add New</a>'
251
  + ' '
252
- + '<img class="sns-ajax-loading" src="/wp-admin/images/wpspin_light.gif">'
253
  );
254
  $('#sns-shortcodes .sns-shortcode .inside').append(
255
  '<div class="sns-ajax-wrap">'
@@ -257,18 +267,18 @@ jQuery( document ).ready( function( $ ) {
257
  + ' &nbsp; '
258
  + '<a class="sns-ajax-update-shortcode button" href="#">Update</a>'
259
  + ' '
260
- + '<img class="sns-ajax-loading" src="/wp-admin/images/wpspin_light.gif">'
261
  + '</div>'
262
  );
263
-
264
- $('.sns-ajax-loading').hide();
265
-
266
  if ( $( '#SnS_classes_mce_type').val() == 'block' ) {
267
  $('#add-mce-dropdown-names .sns-mce-wrapper').show();
268
  } else {
269
  $('#add-mce-dropdown-names .sns-mce-wrapper').hide();
270
  }
271
-
272
  $( '#SnS_classes_mce_type' ).change(function() {
273
  if ( $(this).val() == 'block' ) {
274
  $('#add-mce-dropdown-names .sns-mce-wrapper').show();
@@ -276,18 +286,18 @@ jQuery( document ).ready( function( $ ) {
276
  $('#add-mce-dropdown-names .sns-mce-wrapper').hide();
277
  }
278
  });
279
-
280
  $( '.wp-tab-bar li', context ).show();
281
  }
282
-
283
  /*
284
  * Main Tab Switch Handler.
285
  */
286
  function onTabSwitch( event ) {
287
  event.preventDefault();
288
-
289
  clearCodeMirrors();
290
-
291
  /*
292
  * There is a weird bug where if clearCodeMirrors() is called right before
293
  * loadCodeMirrors(), loading the page with the Styles tab active, and
@@ -296,16 +306,16 @@ jQuery( document ).ready( function( $ ) {
296
  * going on there. Leaving code inbetween them is a fraggle, but working,
297
  * workaround. Maybe has to do with execution time? No idea.
298
  */
299
-
300
  // switch active classes
301
  $( '.wp-tab-active', context ).removeClass( 'wp-tab-active' );
302
  $( this ).parent( 'li' ).addClass( 'wp-tab-active' );
303
-
304
  $( '.wp-tabs-panel-active', context ).hide().removeClass( 'wp-tabs-panel-active' );
305
  $( $( this ).attr( 'href' ) ).show().addClass( 'wp-tabs-panel-active' );
306
-
307
  loadCodeMirrors();
308
-
309
  $.post( ajaxurl, {
310
  action: 'sns_update_tab',
311
  _ajax_nonce: nonce,
@@ -313,7 +323,7 @@ jQuery( document ).ready( function( $ ) {
313
  }
314
  );
315
  }
316
-
317
  /*
318
  * CodeMirror Utilities.
319
  */
@@ -383,102 +393,109 @@ jQuery( document ).ready( function( $ ) {
383
  };*/
384
  else
385
  return;
386
-
387
  // initialize and store active codemirrors
388
  currentCodeMirror.push( CodeMirror.fromTextArea( this, settings ) );
389
  });
390
  }
391
-
392
  /*
393
  * Refresh after AJAX.
394
  */
395
  function refreshDeleteBtns() {
396
- // responsible for clearing out Delete Buttons, and Adding new ones.
397
- // initData should always contain the latest settings.
398
- if ( initData.style_formats && initData.style_formats.length ) {
399
- $( '#delete-mce-dropdown-names .sns-ajax-delete-p' ).remove();
400
- $( '#delete-mce-dropdown-names', context ).show();
401
- var formats = initData.style_formats;
402
- for ( var i = 0; i < formats.length; i++ ) {
403
- var deleteBtn = {};
404
- if ( formats[i].inline ) {
405
- deleteBtn.element = formats[i].inline;
406
- deleteBtn.wrapper = '';
407
- } else if ( formats[i].block ) {
408
- deleteBtn.element = formats[i].block;
409
- if ( formats[i].wrapper )
410
- deleteBtn.wrapper = ' (wrapper)';
411
- else
412
  deleteBtn.wrapper = '';
413
- } else if ( formats[i].selector ) {
414
- deleteBtn.element = formats[i].selector;
415
- deleteBtn.wrapper = '';
416
- } else {
417
- alert( 'ERROR!' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
418
  }
419
- deleteBtn.title = formats[i].title;
420
- deleteBtn.classes = formats[i].classes;
421
- $( '#instructions-mce-dropdown-names', context ).after(
422
- '<p class="sns-ajax-delete-p"><a title="delete" class="sns-ajax-delete" id="'
423
- + deleteBtn.title + '">X</a> "'
424
- + deleteBtn.title + '" <code>&lt;'
425
- + deleteBtn.element + ' class="'
426
- + deleteBtn.classes + '"&gt;</code>'
427
- + deleteBtn.wrapper + '</p>'
428
- );
429
  }
430
- } else {
431
- $( '#delete-mce-dropdown-names', context ).hide();
432
- }
433
  }
434
  function refreshBodyClass( data ) {
435
- initData.body_class = mceBodyClass + ' ' + data.classes_body + ' ' + data.classes_post;
436
-
 
437
  refreshMCE();
438
  }
439
  function refreshStyleFormats( data ) {
440
- // error check
441
- console.log(data.classes_mce);
442
- if ( typeof data.classes_mce === 'undefined' ) {
443
- alert( data );
444
- $('.sns-ajax-loading').hide();
445
- return;
446
- } else if ( data.classes_mce.length && data.classes_mce != 'Empty' ) {
447
- var style_formats = [];
448
-
449
- for ( var i = 0; i < data.classes_mce.length; i++ ) { // loop returned classes_mce
450
- var format = {};
451
- format.title = data.classes_mce[i].title;
452
-
453
- if ( data.classes_mce[i].inline )
454
- format.inline = data.classes_mce[i].inline;
455
- else if ( data.classes_mce[i].block ) {
456
- format.block = data.classes_mce[i].block;
457
- if (data.classes_mce[i].wrapper)
458
- format.wrapper = true;
459
- } else if ( data.classes_mce[i].selector )
460
- format.selector = data.classes_mce[i].selector;
461
- else
462
- alert('dropdown format has bad type.');
463
-
464
- format.classes = data.classes_mce[i].classes;
465
- style_formats.push( format );
466
- }
467
- initData.style_formats = style_formats;
468
-
469
- if ( initData.theme_advanced_buttons2.indexOf( "styleselect" ) == -1 ) {
470
- var tempString = "styleselect,";
471
- initData.theme_advanced_buttons2 = tempString.concat(initData.theme_advanced_buttons2);
 
 
 
 
 
 
 
 
 
 
472
  }
473
-
474
- $( '#delete-mce-dropdown-names', context ).show();
475
- } else {
476
- delete initData.style_formats;
477
- initData.theme_advanced_buttons2 = initData.theme_advanced_buttons2.replace("styleselect,", "");
478
-
479
- $( '#delete-mce-dropdown-names', context ).hide();
480
- }
481
-
482
  refreshDeleteBtns();
483
  refreshMCE();
484
  }
@@ -521,7 +538,7 @@ jQuery( document ).ready( function( $ ) {
521
  $('#SnS_shortcodes').val('');
522
  $('#SnS_shortcodes_new').val('');
523
  loadCodeMirrors();
524
-
525
  } else if ( 0 == data.indexOf( "empty value." ) ) {
526
  console.log('empty value');
527
  } else if ( 0 == data.indexOf( "Use delete instead." ) ) {
@@ -530,7 +547,7 @@ jQuery( document ).ready( function( $ ) {
530
  alert( 'Scripts n Styles: ' + '\n\n' + 'Sorry, there was an AJAX error: (' + data + ')' + '\n\n' + 'Please use the post update button instead.' );
531
  }
532
  }
533
- $('.sns-ajax-loading').hide();
534
  }
535
  addShortcodeBtns();
536
  function addShortcodeBtns() {
@@ -541,33 +558,31 @@ jQuery( document ).ready( function( $ ) {
541
  $('.sns-collapsed-shortcode-btn').click();
542
  }
543
  function refreshMCE() {
544
- var ed = tinyMCE.editors["content"];
545
- // If Visual has been activated.
546
- if ( ed ) {
547
- if ( ed.isHidden() ) {
548
- refreshMCEhelper(ed);
549
- } else {
550
- $('#content-html').click(); // 3.3
551
-
552
- refreshMCEhelper(ed);
553
-
554
- $('#content-tmce').click(); // 3.3
 
555
  }
556
-
557
- }
558
- // Else nothing.
559
-
560
- $('.sns-ajax-loading').hide();
561
  }
562
- function refreshMCEhelper(ed) {
563
  ed.save();
564
  ed.destroy();
565
  ed.remove();
566
- if ( initData && initData.wpautop )
567
- $('#content').val( switchEditors.wpautop( $('#content').val() ) );
568
- ed = new tinymce.Editor( 'content', initData );
569
  ed.render();
570
  ed.hide();
571
  }
572
-
573
  });
1
  jQuery( document ).ready( function( $ ) {
2
+
3
+ var context = '#SnS_meta_box',
4
+ currentCodeMirror = [], keys = [],
 
 
 
5
  nonce = $( '#scripts_n_styles_noncename' ).val(),
6
  theme = codemirror_options.theme ? codemirror_options.theme: 'default';
7
+
8
+ // For CPTs that don't have an editor, prevent "tinyMCEPreInit is 'undefined'"
9
+ var initDatas = ( typeof tinyMCEPreInit !== 'undefined' && tinyMCEPreInit.mceInit ) ? tinyMCEPreInit.mceInit: false;
10
+ for ( var prop in initDatas ) {
11
+ keys.push( prop );
12
+ }
13
+
14
+ var mceBodyClass = getMCEBodyClasses();
15
+
16
+ $("#SnS_enqueue_scripts").data( 'placeholder', 'Enqueue Registered Scripts...' ).chosen({ width: "356px" });
17
+ $(".chosen-container-multi .chosen-choices .search-field input").height('26px');
18
+ $(".chosen-container .chosen-results").css( 'max-height', '176px');
19
 
20
  //$('textarea', context).attr('autocomplete','off');
21
+
22
  // Refresh when panel becomes unhidden
23
+ $( '#adv-settings' ).on( 'click', context + '-hide', refreshCodeMirrors );
24
  $( context ).on( 'click', '.hndle, .handlediv', refreshCodeMirrors );
25
+
26
  // add tab-switch handler
27
  $( context ).on( 'click', '.wp-tab-bar a', onTabSwitch );
28
+
29
  // activate first run
30
  $( '.wp-tab-active a', context ).click();
31
+
32
  // must run before ajax click handlers are added.
33
  setupAjaxUI();
34
+
35
  refreshDeleteBtns();
 
36
 
37
+
38
+
39
  $('#sns-ajax-update-scripts').click(function( event ){
40
  event.preventDefault();
41
  $(this).next().show();
42
  $(currentCodeMirror).each(function (){ this.save(); });
43
  var args = { _ajax_nonce: nonce, post_id: $( '#post_ID' ).val(), };
44
+
45
  args.action = 'sns_scripts';
46
  args.scripts = $( '#SnS_scripts' ).val();
47
  args.scripts_in_head = $( '#SnS_scripts_in_head' ).val();
48
+
49
  $.post( ajaxurl, args, function() { refreshMCE(); } );
50
  });
51
+
52
  $('#sns-ajax-update-styles').click(function( event ){
53
  event.preventDefault();
54
  $(this).next().show();
55
  $(currentCodeMirror).each(function (){ this.save(); });
56
  var args = { _ajax_nonce: nonce, post_id: $( '#post_ID' ).val(), };
57
+
58
  args.action = 'sns_styles';
59
  args.styles = $( '#SnS_styles' ).val();
60
+
61
  $.post( ajaxurl, args, function() { refreshMCE(); } );
62
  });
63
+
64
  /*
65
  * Expects return data.
66
  */
68
  event.preventDefault();
69
  $(this).next().show();
70
  var args = { _ajax_nonce: nonce, post_id: $( '#post_ID' ).val(), };
71
+
72
  args.action = 'sns_classes';
73
  args.classes_body = $( '#SnS_classes_body' ).val();
74
  args.classes_post = $( '#SnS_classes_post' ).val();
75
+
76
  $.post( ajaxurl, args, function( data ) { refreshBodyClass( data ); } );
77
  });
78
  $('#SnS_classes_body, #SnS_classes_body').keypress(function( event ) {
81
  $("#sns-ajax-update-classes").click();
82
  }
83
  });
84
+
85
  /*
86
  * Expects return data.
87
  */
89
  event.preventDefault();
90
  $(this).next().show();
91
  var args = { _ajax_nonce: nonce, post_id: $( '#post_ID' ).val(), };
92
+
93
  args.action = 'sns_dropdown';
94
  var format = {};
95
  format.title = $( '#SnS_classes_mce_title' ).val();
110
  return;
111
  }
112
  args.format = format;
113
+
114
  $.post( ajaxurl, args, function( data ) { refreshStyleFormats( data ); } );
115
  });
116
  $('#SnS_classes_mce_classes, #SnS_classes_mce_element, #SnS_classes_mce_title').keypress(function( event ) {
119
  $("#sns-ajax-update-dropdown").click();
120
  }
121
  });
122
+
123
  /*
124
  * Expects return data.
125
  */
127
  event.preventDefault();
128
  $(this).next().show();
129
  var args = { _ajax_nonce: nonce, post_id: $( '#post_ID' ).val(), };
130
+
131
  args.action = 'sns_delete_class';
132
  args.delete = $( this ).attr( 'id' );
133
+
134
  $.post( ajaxurl, args, function( data ) { refreshStyleFormats( data ); } );
135
  });
136
+
137
+
138
+
139
  /*
140
  * Expects return data.
141
  */
143
  event.preventDefault();
144
  $(this).next().show();
145
  $(currentCodeMirror).each(function (){ this.save(); });
146
+
147
  var args = { _ajax_nonce: nonce, post_id: $( '#post_ID' ).val(), };
148
+
149
  args.action = 'sns_shortcodes';
150
  args.subaction = 'add';
151
  args.name = $( '#SnS_shortcodes' ).val();
152
  args.shortcode = $( '#SnS_shortcodes_new' ).val();
153
+
154
  $.post( ajaxurl, args, function( data ) { refreshShortcodes( data ); } );
155
  });
156
  $('#SnS_shortcodes').keypress(function( event ) {
159
  $("#sns-ajax-add-shortcode").click();
160
  }
161
  });
162
+
163
  $('#sns-shortcodes').on( "click", ".sns-ajax-delete-shortcode", function( event ){
164
  event.preventDefault();
165
  if($(this).data('lock'))return;else $(this).data('lock',true);
167
  $(this).next().show();
168
  $(currentCodeMirror).each(function (){ this.save(); });
169
  var args = { _ajax_nonce: nonce, post_id: $( '#post_ID' ).val(), };
170
+
171
  args.action = 'sns_shortcodes';
172
  args.subaction = 'delete';
173
  args.name = $( this ).parent().siblings('textarea').attr( 'data-sns-shortcode-key' );
174
+
175
  $.post( ajaxurl, args, function( data ) { refreshShortcodes( data ); } );
176
  });
177
  $('#sns-shortcodes').on( "click", ".sns-ajax-update-shortcode", function( event ){
179
  $(this).next().show();
180
  $(currentCodeMirror).each(function (){ this.save(); });
181
  var args = { _ajax_nonce: nonce, post_id: $( '#post_ID' ).val(), };
182
+
183
  args.action = 'sns_shortcodes';
184
  args.subaction = 'update';
185
  args.name = $( this ).parent().siblings('textarea').attr( 'data-sns-shortcode-key' );
186
  args.shortcode = $( this ).parent().siblings('textarea').val();
187
+
188
  $.post( ajaxurl, args, function( data ) { refreshShortcodes( data ); } );
189
  });
190
+
191
  /*
192
  * Returns the body_class of TinyMCE minus the Scripts n Styles values.
193
  */
194
  function getMCEBodyClasses() {
195
+ var t = [], a = [];
196
+ $(keys).each(function(index, element) {
197
+ var data = initDatas[element];
198
+ if ( data.body_class )
199
+ t = data.body_class.split(' ');
200
+
201
+ var bc = $('#SnS_classes_body').val().split(' ');
202
+ var pc = $('#SnS_classes_post').val().split(' ');
203
+ var p;
204
+ for ( var i = 0; i < t.length; i++ ) {
205
+ p = $.inArray( bc[i], t )
206
+ if ( -1 != p )
207
+ t.splice( p, 1 );
208
+ }
209
+ for ( var i = 0; i < t.length; i++ ) {
210
+ p = $.inArray( pc[i], t )
211
+ if ( -1 != p )
212
+ t.splice( p, 1 );
213
+ }
214
+ t = t.join(' ');
215
+
216
+ a[element] = t;
217
+ });
218
+ return a;
219
  }
220
+
221
  /*
222
  * Builds and Adds the DOM for AJAX functionality.
223
  */
227
  '<div class="sns-ajax-wrap">'
228
  + '<a id="sns-ajax-update-scripts" href="#" class="button">Update Scripts</a>'
229
  + ' '
230
+ + '<span class="sns-ajax-loading"><span class="spinner" style="display: inline-block;"></span></span>'
231
  + '</div>'
232
  );
233
+
234
  $('#SnS_styles-tab').append(
235
  '<div class="sns-ajax-wrap">'
236
  + '<a id="sns-ajax-update-styles" href="#" class="button">Update Styles</a>'
237
  + ' '
238
+ + '<span class="sns-ajax-loading"><span class="spinner" style="display: inline-block;"></span></span>'
239
  + '</div>'
240
  );
241
+
242
  $('#sns-classes').append(
243
  '<div class="sns-ajax-wrap">'
244
  + '<a id="sns-ajax-update-classes" href="#" class="button">Update Classes</a>'
245
  + ' '
246
+ + '<span class="sns-ajax-loading"><span class="spinner" style="display: inline-block;"></span></span>'
247
  + '</div>'
248
  );
249
+
250
  $('#add-mce-dropdown-names').append(
251
  '<div class="sns-ajax-wrap">'
252
  + '<a id="sns-ajax-update-dropdown" href="#" class="button">Add Class</a>'
253
  + ' '
254
+ + '<span class="sns-ajax-loading"><span class="spinner" style="display: inline-block;"></span></span>'
255
  + '</div>'
256
  );
257
+
258
  $('#SnS_shortcodes').after(
259
  ' &nbsp; '
260
  + '<a id="sns-ajax-add-shortcode" href="#" class="button">Add New</a>'
261
  + ' '
262
+ + '<span class="sns-ajax-loading"><span class="spinner" style="display: inline-block;"></span></span>'
263
  );
264
  $('#sns-shortcodes .sns-shortcode .inside').append(
265
  '<div class="sns-ajax-wrap">'
267
  + ' &nbsp; '
268
  + '<a class="sns-ajax-update-shortcode button" href="#">Update</a>'
269
  + ' '
270
+ + '<span class="sns-ajax-loading"><span class="spinner" style="display: inline-block;"></span></span>'
271
  + '</div>'
272
  );
273
+
274
+ $( '.sns-ajax-loading' ).hide();
275
+
276
  if ( $( '#SnS_classes_mce_type').val() == 'block' ) {
277
  $('#add-mce-dropdown-names .sns-mce-wrapper').show();
278
  } else {
279
  $('#add-mce-dropdown-names .sns-mce-wrapper').hide();
280
  }
281
+
282
  $( '#SnS_classes_mce_type' ).change(function() {
283
  if ( $(this).val() == 'block' ) {
284
  $('#add-mce-dropdown-names .sns-mce-wrapper').show();
286
  $('#add-mce-dropdown-names .sns-mce-wrapper').hide();
287
  }
288
  });
289
+
290
  $( '.wp-tab-bar li', context ).show();
291
  }
292
+
293
  /*
294
  * Main Tab Switch Handler.
295
  */
296
  function onTabSwitch( event ) {
297
  event.preventDefault();
298
+
299
  clearCodeMirrors();
300
+
301
  /*
302
  * There is a weird bug where if clearCodeMirrors() is called right before
303
  * loadCodeMirrors(), loading the page with the Styles tab active, and
306
  * going on there. Leaving code inbetween them is a fraggle, but working,
307
  * workaround. Maybe has to do with execution time? No idea.
308
  */
309
+
310
  // switch active classes
311
  $( '.wp-tab-active', context ).removeClass( 'wp-tab-active' );
312
  $( this ).parent( 'li' ).addClass( 'wp-tab-active' );
313
+
314
  $( '.wp-tabs-panel-active', context ).hide().removeClass( 'wp-tabs-panel-active' );
315
  $( $( this ).attr( 'href' ) ).show().addClass( 'wp-tabs-panel-active' );
316
+
317
  loadCodeMirrors();
318
+
319
  $.post( ajaxurl, {
320
  action: 'sns_update_tab',
321
  _ajax_nonce: nonce,
323
  }
324
  );
325
  }
326
+
327
  /*
328
  * CodeMirror Utilities.
329
  */
393
  };*/
394
  else
395
  return;
396
+
397
  // initialize and store active codemirrors
398
  currentCodeMirror.push( CodeMirror.fromTextArea( this, settings ) );
399
  });
400
  }
401
+
402
  /*
403
  * Refresh after AJAX.
404
  */
405
  function refreshDeleteBtns() {
406
+ $(keys).each(function(index, key) {
407
+ var initData = initDatas[key]
408
+
409
+ // responsible for clearing out Delete Buttons, and Adding new ones.
410
+ // initData should always contain the latest settings.
411
+ if ( initData.style_formats && initData.style_formats.length ) {
412
+ $( '#delete-mce-dropdown-names .sns-ajax-delete-p' ).remove();
413
+ $( '#delete-mce-dropdown-names', context ).show();
414
+ var formats = initData.style_formats;
415
+ for ( var i = 0; i < formats.length; i++ ) {
416
+ var deleteBtn = {};
417
+ if ( formats[i].inline ) {
418
+ deleteBtn.element = formats[i].inline;
 
 
 
419
  deleteBtn.wrapper = '';
420
+ } else if ( formats[i].block ) {
421
+ deleteBtn.element = formats[i].block;
422
+ if ( formats[i].wrapper )
423
+ deleteBtn.wrapper = ' (wrapper)';
424
+ else
425
+ deleteBtn.wrapper = '';
426
+ } else if ( formats[i].selector ) {
427
+ deleteBtn.element = formats[i].selector;
428
+ deleteBtn.wrapper = '';
429
+ } else {
430
+ alert( 'ERROR!' );
431
+ }
432
+ deleteBtn.title = formats[i].title;
433
+ deleteBtn.classes = formats[i].classes;
434
+ $( '#instructions-mce-dropdown-names', context ).after(
435
+ '<p class="sns-ajax-delete-p"><a title="delete" class="sns-ajax-delete" id="'
436
+ + deleteBtn.title + '">X</a> "'
437
+ + deleteBtn.title + '" <code>&lt;'
438
+ + deleteBtn.element + ' class="'
439
+ + deleteBtn.classes + '"&gt;</code>'
440
+ + deleteBtn.wrapper + '</p>'
441
+ );
442
  }
443
+ } else {
444
+ $( '#delete-mce-dropdown-names', context ).hide();
 
 
 
 
 
 
 
 
445
  }
446
+ });
 
 
447
  }
448
  function refreshBodyClass( data ) {
449
+ $(keys).each(function(index, key) {
450
+ initDatas[key].body_class = mceBodyClass[key] + ' ' + data.classes_body + ' ' + data.classes_post;
451
+ });
452
  refreshMCE();
453
  }
454
  function refreshStyleFormats( data ) {
455
+ $(keys).each(function(index, key) {
456
+ var initData = initDatas[key]
457
+ // error check
458
+ //console.log(data.classes_mce);
459
+ if ( typeof data.classes_mce === 'undefined' ) {
460
+ alert( data );
461
+ /*$( '.sns-ajax-loading' ).hide();
462
+ return;*/ // Don't block
463
+ } else if ( data.classes_mce.length && data.classes_mce != 'Empty' ) {
464
+ var style_formats = [];
465
+
466
+ for ( var i = 0; i < data.classes_mce.length; i++ ) { // loop returned classes_mce
467
+ var format = {};
468
+ format.title = data.classes_mce[i].title;
469
+
470
+ if ( data.classes_mce[i].inline )
471
+ format.inline = data.classes_mce[i].inline;
472
+ else if ( data.classes_mce[i].block ) {
473
+ format.block = data.classes_mce[i].block;
474
+ if (data.classes_mce[i].wrapper)
475
+ format.wrapper = true;
476
+ } else if ( data.classes_mce[i].selector )
477
+ format.selector = data.classes_mce[i].selector;
478
+ else
479
+ alert('dropdown format has bad type.');
480
+
481
+ format.classes = data.classes_mce[i].classes;
482
+ style_formats.push( format );
483
+ }
484
+ initData.style_formats = style_formats;
485
+
486
+ if ( initData.theme_advanced_buttons2.indexOf( "styleselect" ) == -1 ) {
487
+ var tempString = "styleselect,";
488
+ initData.theme_advanced_buttons2 = tempString.concat(initData.theme_advanced_buttons2);
489
+ }
490
+
491
+ $( '#delete-mce-dropdown-names', context ).show();
492
+ } else {
493
+ delete initData.style_formats;
494
+ initData.theme_advanced_buttons2 = initData.theme_advanced_buttons2.replace("styleselect,", "");
495
+
496
+ $( '#delete-mce-dropdown-names', context ).hide();
497
  }
498
+ });
 
 
 
 
 
 
 
 
499
  refreshDeleteBtns();
500
  refreshMCE();
501
  }
538
  $('#SnS_shortcodes').val('');
539
  $('#SnS_shortcodes_new').val('');
540
  loadCodeMirrors();
541
+
542
  } else if ( 0 == data.indexOf( "empty value." ) ) {
543
  console.log('empty value');
544
  } else if ( 0 == data.indexOf( "Use delete instead." ) ) {
547
  alert( 'Scripts n Styles: ' + '\n\n' + 'Sorry, there was an AJAX error: (' + data + ')' + '\n\n' + 'Please use the post update button instead.' );
548
  }
549
  }
550
+ $( '.sns-ajax-loading' ).hide();
551
  }
552
  addShortcodeBtns();
553
  function addShortcodeBtns() {
558
  $('.sns-collapsed-shortcode-btn').click();
559
  }
560
  function refreshMCE() {
561
+ $( tinyMCE.editors ).each( function( index, ed ){
562
+ // If Visual has been activated.
563
+ if ( ed ) {
564
+ if ( ed.isHidden() ) {
565
+ refreshMCEhelper( ed );
566
+ } else {
567
+ $('#'+ed.id+'-html').click(); // 3.3
568
+
569
+ refreshMCEhelper( ed );
570
+
571
+ $('#'+ed.id+'-tmce').click(); // 3.3
572
+ }
573
  }
574
+ });
575
+ $( '.sns-ajax-loading' ).hide();
 
 
 
576
  }
577
+ function refreshMCEhelper( ed ) {
578
  ed.save();
579
  ed.destroy();
580
  ed.remove();
581
+ if ( initDatas[ed.id] && initDatas[ed.id].wpautop )
582
+ $('#'+ed.id).val( switchEditors.wpautop( $('#'+ed.id).val() ) );
583
+ ed = new tinymce.Editor( ed.id, initDatas[ed.id] );
584
  ed.render();
585
  ed.hide();
586
  }
587
+
588
  });
js/theme-page.js CHANGED
@@ -8,11 +8,11 @@ jQuery( document ).ready( function( $ ) { "use strict"
8
  , loaded = false
9
  , preview = false
10
  , compiled
11
- , $codemirror, $error, $status, $form, $css
12
  , onChange
13
  , errorMarker, errorText, errorMirror
14
  , config;
15
-
16
  // Prevent keystoke compile buildup
17
  onChange = function onChange( cm ){
18
  $status.show();
@@ -25,17 +25,19 @@ jQuery( document ).ready( function( $ ) { "use strict"
25
  }
26
  }
27
  config = {
 
28
  lineNumbers: true,
29
  mode: "text/x-less",
30
  theme: theme,
31
  indentWithTabs: true,
32
- onChange: onChange
 
33
  };
34
-
35
  CodeMirror.commands.save = function() {
36
  $form.submit();
37
- };
38
-
39
  // Each "IDE"
40
  $( ".sns-less-ide", context ).each( function() {
41
  var $text = $('.code',this);
@@ -47,15 +49,18 @@ jQuery( document ).ready( function( $ ) { "use strict"
47
  lines : 0,
48
  startLine : 0,
49
  endLine : 0,
 
 
50
  errorLine : null,
51
  errorText : null,
52
  cm : CodeMirror.fromTextArea( $text.get(0), config )
53
  };
 
54
  if ( $text.parent().hasClass( 'sns-collapsed' ) )
55
  ide.cm.toTextArea();
56
  collection.push( ide );
57
  });
58
-
59
  // Collapsable
60
  $( context ).on( "click", '.sns-collapsed-btn, .sns-collapsed-btn + label', function( event ){
61
  var $this = $( this )
@@ -73,6 +78,7 @@ jQuery( document ).ready( function( $ ) { "use strict"
73
  thisIDE.cm.toTextArea();
74
  } else {
75
  thisIDE.cm = CodeMirror.fromTextArea( thisIDE.$text.get(0), config );
 
76
  }
77
  $.post( ajaxurl,
78
  { action: 'sns_open_theme_panels'
@@ -91,10 +97,10 @@ jQuery( document ).ready( function( $ ) { "use strict"
91
  else
92
  compiled.toTextArea();
93
  });
94
-
95
  $( '.single-status' ).hide();
96
  $( '.sns-ajax-loading' ).hide();
97
-
98
  // Load
99
  $( context ).on( "click", ".sns-ajax-load", function( event ){
100
  event.preventDefault();
@@ -112,7 +118,7 @@ jQuery( document ).ready( function( $ ) { "use strict"
112
  .show().delay(3000).fadeOut()
113
  .children('.settings-error').text( 'Original Source File Loaded.' );
114
  });
115
-
116
  // Save
117
  $( context ).on( "click", ".sns-ajax-save", function( event ){
118
  event.preventDefault();
@@ -123,51 +129,59 @@ jQuery( document ).ready( function( $ ) { "use strict"
123
  $(data).insertAfter( '#icon-sns + h2' ).delay(3000).fadeOut();
124
  $( '.sns-ajax-loading' ).hide();
125
  }
126
-
127
  // The CSS output side.
128
  $css = $( '.css', "#css_area" );
129
  if ( preview ) {
130
  compiled = createCSSEditor();
131
  }
132
- $codemirror = $css.next( '.CodeMirror' );
133
  $error = $( "#compiled_error" );
134
  $status = $( "#compile_status" );
135
-
136
  // Start.
137
  compile();
138
  loaded = true;
139
-
140
  $form = $( "#less_area" ).closest( 'form' );
141
  $form.submit( function( event ){
142
  event.preventDefault();
143
  compile();
144
- $.ajax({
145
- type: "POST",
146
- url: window.location,
147
  data: $(this).serialize()+'&ajaxsubmit=1',
148
  cache: false,
149
- success: saved
150
  });
151
  });
152
  function createCSSEditor() {
153
  return CodeMirror.fromTextArea(
154
  $css.get(0),
155
- { lineNumbers: true, mode: "css", theme: theme, readOnly: true }
156
  );
157
  }
158
  function compile() {
159
  var lessValue = '';
160
  var totalLines = 0;
 
161
  var compiledValue;
162
  $( collection ).each(function(){
163
  //this.cm.save();
164
  lessValue += "\n" + this.$text.val();
 
165
  this.lines = this.cm.lineCount();
166
  this.startLine = totalLines;
167
  totalLines += this.lines;
168
  this.endLine = totalLines;
 
 
 
 
 
169
  });
170
- var parser = new( less.Parser );
 
171
  parser.parse( lessValue, function ( err, tree ) {
172
  if ( err ){
173
  doError( err );
@@ -175,17 +189,16 @@ jQuery( document ).ready( function( $ ) { "use strict"
175
  try {
176
  $error.hide();
177
  if ( preview ) {
 
178
  compiledValue = tree.toCSS();
179
  compiled.setValue( compiledValue );
180
  compiled.save();
181
- //$codemirror.show();
182
  compiled.refresh();
183
- clearCompileError();
184
  } else {
185
  compiledValue = tree.toCSS({ compress: true });
186
  $css.val( compiledValue );
187
- clearCompileError();
188
  }
 
189
  }
190
  catch ( err ) {
191
  doError( err );
@@ -196,29 +209,25 @@ jQuery( document ).ready( function( $ ) { "use strict"
196
  $status.hide();
197
  }
198
  function doError( err ) {
199
- console.log( err );
200
- var pos, token, start, end, errLine, fileName, errMessage;
201
  errLine = err.line-1;
202
-
203
  errorMirror = null;
204
  $( collection ).each(function( i ){
205
  if ( this.startLine <= errLine && errLine < this.endLine ) {
206
  errorMirror = this.cm;
207
  errLine = errLine - this.startLine -1;
208
  fileName = this.name;
 
209
  return;
210
  }
211
  });
212
-
213
- //$codemirror.hide();
214
-
215
  var errMessage = '';
216
-
217
- if ( err.type == 'Parse' )
218
- errMessage = " &nbsp; <em>LESS Parse Error</em> <br /> on line " + ( errLine + 1 ) + " of " + fileName + ".</p>";
219
- else
220
- errMessage = " &nbsp; <em>LESS " + err.type +" Error</em> on line " + ( errLine + 1 ) + " of " + fileName + ". <br />" + err.message + "</p>";
221
-
222
  if ( loaded ) {
223
  $error
224
  .removeClass( 'error' )
@@ -230,35 +239,38 @@ jQuery( document ).ready( function( $ ) { "use strict"
230
  .show()
231
  .html( "<p><strong>Error: &nbsp; </strong>" + errMessage + "</p>" );
232
  }
233
-
234
  clearCompileError();
235
-
236
  if (!errorMirror) return;
237
-
238
- errorMarker = errorMirror.setMarker( errLine, '<strong>*%N%</strong>', "cm-error" );
239
-
240
- errorMirror.setLineClass( errorMarker, "cm-error" );
241
-
242
- pos = errorMirror.posFromIndex( err.index + 1 );
243
  token = errorMirror.getTokenAt( pos );
244
- start = errorMirror.posFromIndex( err.index );
245
- end = errorMirror.posFromIndex( err.index + token.string.length );
246
-
247
- errorText = errorMirror.markText( start, end, "cm-error" );
248
  if ( preview ) {
249
- compiled.setValue( "" );
250
- compiled.save();
251
- compiled.refresh();
252
  }
253
  }
254
  function clearCompileError() {
255
  if ( errorMarker ) {
256
- errorMirror.clearMarker( errorMarker );
257
- errorMirror.setLineClass( errorMarker, null );
 
 
258
  errorMarker = false;
259
  }
260
- if ( errorText ) errorText.clear();
261
- errorText = false;
 
 
262
  }
263
  _SnS_options.theme_compiler = compile;
264
  });
8
  , loaded = false
9
  , preview = false
10
  , compiled
11
+ , $error, $status, $form, $css
12
  , onChange
13
  , errorMarker, errorText, errorMirror
14
  , config;
15
+
16
  // Prevent keystoke compile buildup
17
  onChange = function onChange( cm ){
18
  $status.show();
25
  }
26
  }
27
  config = {
28
+ gutters: ["note-gutter", "CodeMirror-linenumbers"],
29
  lineNumbers: true,
30
  mode: "text/x-less",
31
  theme: theme,
32
  indentWithTabs: true,
33
+ tabSize: 4,
34
+ indentUnit: 4
35
  };
36
+
37
  CodeMirror.commands.save = function() {
38
  $form.submit();
39
+ };
40
+
41
  // Each "IDE"
42
  $( ".sns-less-ide", context ).each( function() {
43
  var $text = $('.code',this);
49
  lines : 0,
50
  startLine : 0,
51
  endLine : 0,
52
+ startChars : 0,
53
+ endChars : 0,
54
  errorLine : null,
55
  errorText : null,
56
  cm : CodeMirror.fromTextArea( $text.get(0), config )
57
  };
58
+ ide.cm.on( "change", onChange );
59
  if ( $text.parent().hasClass( 'sns-collapsed' ) )
60
  ide.cm.toTextArea();
61
  collection.push( ide );
62
  });
63
+
64
  // Collapsable
65
  $( context ).on( "click", '.sns-collapsed-btn, .sns-collapsed-btn + label', function( event ){
66
  var $this = $( this )
78
  thisIDE.cm.toTextArea();
79
  } else {
80
  thisIDE.cm = CodeMirror.fromTextArea( thisIDE.$text.get(0), config );
81
+ thisIDE.cm.on( "change", onChange );
82
  }
83
  $.post( ajaxurl,
84
  { action: 'sns_open_theme_panels'
97
  else
98
  compiled.toTextArea();
99
  });
100
+
101
  $( '.single-status' ).hide();
102
  $( '.sns-ajax-loading' ).hide();
103
+
104
  // Load
105
  $( context ).on( "click", ".sns-ajax-load", function( event ){
106
  event.preventDefault();
118
  .show().delay(3000).fadeOut()
119
  .children('.settings-error').text( 'Original Source File Loaded.' );
120
  });
121
+
122
  // Save
123
  $( context ).on( "click", ".sns-ajax-save", function( event ){
124
  event.preventDefault();
129
  $(data).insertAfter( '#icon-sns + h2' ).delay(3000).fadeOut();
130
  $( '.sns-ajax-loading' ).hide();
131
  }
132
+
133
  // The CSS output side.
134
  $css = $( '.css', "#css_area" );
135
  if ( preview ) {
136
  compiled = createCSSEditor();
137
  }
138
+
139
  $error = $( "#compiled_error" );
140
  $status = $( "#compile_status" );
141
+
142
  // Start.
143
  compile();
144
  loaded = true;
145
+
146
  $form = $( "#less_area" ).closest( 'form' );
147
  $form.submit( function( event ){
148
  event.preventDefault();
149
  compile();
150
+ $.ajax({
151
+ type: "POST",
152
+ url: window.location,
153
  data: $(this).serialize()+'&ajaxsubmit=1',
154
  cache: false,
155
+ success: saved
156
  });
157
  });
158
  function createCSSEditor() {
159
  return CodeMirror.fromTextArea(
160
  $css.get(0),
161
+ { lineNumbers: true, mode: "css", theme: theme, indentWithTabs: true, tabSize: 4, indentUnit: 4 }
162
  );
163
  }
164
  function compile() {
165
  var lessValue = '';
166
  var totalLines = 0;
167
+ var totalChars = 0;
168
  var compiledValue;
169
  $( collection ).each(function(){
170
  //this.cm.save();
171
  lessValue += "\n" + this.$text.val();
172
+
173
  this.lines = this.cm.lineCount();
174
  this.startLine = totalLines;
175
  totalLines += this.lines;
176
  this.endLine = totalLines;
177
+
178
+ this.chars = this.$text.val().length + 1;
179
+ this.startChars = totalChars;
180
+ totalChars += this.chars;
181
+ this.endChars = totalChars;
182
  });
183
+
184
+ var parser = new( less.Parser )({});
185
  parser.parse( lessValue, function ( err, tree ) {
186
  if ( err ){
187
  doError( err );
189
  try {
190
  $error.hide();
191
  if ( preview ) {
192
+ $( compiled.getWrapperElement() ).show();
193
  compiledValue = tree.toCSS();
194
  compiled.setValue( compiledValue );
195
  compiled.save();
 
196
  compiled.refresh();
 
197
  } else {
198
  compiledValue = tree.toCSS({ compress: true });
199
  $css.val( compiledValue );
 
200
  }
201
+ clearCompileError();
202
  }
203
  catch ( err ) {
204
  doError( err );
209
  $status.hide();
210
  }
211
  function doError( err ) {
212
+ var pos, token, start, end, errLine, fileName, errMessage, errIndex;
 
213
  errLine = err.line-1;
214
+
215
  errorMirror = null;
216
  $( collection ).each(function( i ){
217
  if ( this.startLine <= errLine && errLine < this.endLine ) {
218
  errorMirror = this.cm;
219
  errLine = errLine - this.startLine -1;
220
  fileName = this.name;
221
+ errIndex = err.index - this.startChars;
222
  return;
223
  }
224
  });
225
+ if ( preview )
226
+ $( compiled.getWrapperElement()).hide();
 
227
  var errMessage = '';
228
+
229
+ errMessage = " &nbsp; <em>LESS " + err.type +" Error</em> on line " + ( errLine + 1 ) + " of " + fileName + ". <br />" + err.message + "</p>";
230
+
 
 
 
231
  if ( loaded ) {
232
  $error
233
  .removeClass( 'error' )
239
  .show()
240
  .html( "<p><strong>Error: &nbsp; </strong>" + errMessage + "</p>" );
241
  }
242
+
243
  clearCompileError();
244
+
245
  if (!errorMirror) return;
246
+
247
+ errorMarker = errorMirror.setGutterMarker( errLine, 'note-gutter', $('<span></span>').addClass('cm-error').css('marginLeft','4px').text('✖').get(0) );
248
+
249
+ //errorMirror.addLineClass( errLine, "wrap", cm-error" );
250
+
251
+ pos = errorMirror.posFromIndex( errIndex );
252
  token = errorMirror.getTokenAt( pos );
253
+ start = errorMirror.posFromIndex( errIndex - 1 );
254
+ end = errorMirror.posFromIndex( errIndex + token.string.length - 1 );
255
+ errorText = errorMirror.markText( start, end, { className: "cm-error" } );
 
256
  if ( preview ) {
257
+ //compiled.setValue( "" );
258
+ //compiled.save();
259
+ //compiled.refresh();
260
  }
261
  }
262
  function clearCompileError() {
263
  if ( errorMarker ) {
264
+ $( collection ).each(function( i ){
265
+ this.cm.clearGutter( 'note-gutter' );
266
+ });
267
+ //errorMirror.removeLineClass( errLine, "wrap", "cm-error" );
268
  errorMarker = false;
269
  }
270
+ if ( errorText ) {
271
+ errorText.clear();
272
+ errorText = false;
273
+ }
274
  }
275
  _SnS_options.theme_compiler = compile;
276
  });
scripts-n-styles.php CHANGED
@@ -5,58 +5,57 @@ Plugin URI: http://www.unfocus.com/projects/scripts-n-styles/
5
  Description: Allows WordPress admin users the ability to add custom CSS and JavaScript directly to individual Post, Pages or custom post types.
6
  Author: unFocus Projects
7
  Author URI: http://www.unfocus.com/
8
- Version: 3.2.1
9
  License: GPLv3 or later
10
  Text Domain: scripts-n-styles
11
- Network: true
12
  */
13
 
14
  /* The Scripts n Styles WordPress Plugin
15
- Copyright (c) 2010-2012 Kenneth Newman <http://www.unfocus.com/>
16
  Copyright (c) 2012 Kevin Newman <http://www.unfocus.com/>
17
- Copyright (c) 2012 adcSTUDIO LLC <http://www.adcstudio.com/>
18
 
19
  Scripts n Styles is free software; you can redistribute it and/or
20
  modify it under the terms of the GNU General Public License
21
  as published by the Free Software Foundation; either version 3
22
  of the License, or (at your option) any later version.
23
-
24
  Scripts n Styles is distributed in the hope that it will be useful,
25
  but WITHOUT ANY WARRANTY; without even the implied warranty of
26
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
27
  GNU General Public License for more details.
28
-
29
  You should have received a copy of the GNU General Public License
30
  along with this program. If not, see <http://www.gnu.org/licenses/>.
31
-
32
  This file incorporates work covered by other licenses and permissions.
33
  */
34
 
35
  /**
36
  * Scripts n Styles
37
- *
38
  * Allows WordPress admin users the ability to add custom CSS
39
  * and JavaScript directly to individual Post, Pages or custom
40
  * post types.
41
- *
42
  * NOTE: No user except the "Super Admin" can use this plugin in MultiSite. I'll add features for MultiSite later, perhaps the ones below...
43
- * The "Super Admin" user has exclusive 'unfiltered_html' capabilities in MultiSite. Also, options.php checks for is_super_admin()
44
- * so the 'manage_options' capability for blog admins is insufficient to pass the check to manage options directly.
45
- *
46
- * The Tentative plan is for Super Admins to create Snippets or Shortcodes approved for use by users with certain capabilities
47
  * ('unfiltered_html' and/or 'manage_options'). The 'unfiltered_html' capability can be granted via another plugin. This plugin will
48
  * not deal with granting any capabilities.
49
- *
50
  * @package Scripts_n_Styles
51
  * @link http://www.unfocus.com/projects/scripts-n-styles/ Plugin URI
52
  * @author unFocus Projects
53
  * @link http://www.unfocus.com/ Author URI
54
- * @version 3.2.1
55
  * @license http://opensource.org/licenses/gpl-license.php GNU Public License
56
- * @copyright Copyright (c) 2010 - 2012, Kenneth Newman
57
  * @copyright Copyright (c) 2012, Kevin Newman
58
- * @copyright Copyright (c) 2012, adcSTUDIO LLC
59
- *
60
  * @todo Create ability to add and register scripts and styles for enqueueing (via Options page).
61
  * @todo Create selection on Option page of which to pick registered scripts to make available on edit screens.
62
  * @todo Create shortcode registration on Options page to make those snippets available on edit screens.
@@ -69,11 +68,17 @@ class Scripts_n_Styles
69
  /**#@+
70
  * @static
71
  */
72
- const VERSION = '3.2.1';
73
  static $file = __FILE__;
74
- static $cm_themes = array( 'default', 'ambiance', 'blackboard', 'cobalt', 'eclipse', 'elegant', 'lesser-dark', 'monokai', 'neat', 'night', 'rubyblue', 'xq-dark' );
 
 
 
 
 
 
75
  /**#@-*/
76
-
77
  /**
78
  * Initializing method. Checks if is_admin() and registers action hooks for admin if true. Sets filters and actions for Theme side functions.
79
  * @static
@@ -87,38 +92,39 @@ class Scripts_n_Styles
87
  include_once( 'includes/class-sns-admin.php' );
88
  SnS_Admin::init();
89
  }
 
90
  add_action( 'plugins_loaded', array( __CLASS__, 'upgrade_check' ) );
91
-
92
  add_filter( 'body_class', array( __CLASS__, 'body_classes' ) );
93
  add_filter( 'post_class', array( __CLASS__, 'post_classes' ) );
94
-
95
  add_action( 'wp_head', array( __CLASS__, 'styles' ), 11 );
96
  add_action( 'wp_enqueue_scripts', array( __CLASS__, 'enqueue_scripts' ), 11 );
97
  add_action( 'wp_head', array( __CLASS__, 'scripts_in_head' ), 11 );
98
  add_action( 'wp_footer', array( __CLASS__, 'scripts' ), 11 );
99
-
100
  add_action( 'plugins_loaded', array( __CLASS__, 'add_shortcodes' ) );
101
  add_action( 'widgets_init', array( __CLASS__, 'add_widget' ) );
102
-
103
  add_action( 'wp_enqueue_scripts', array( __CLASS__, 'register' ) );
104
  add_action( 'admin_enqueue_scripts', array( __CLASS__, 'register' ) );
105
-
106
  add_action( 'wp_print_styles', array( __CLASS__, 'theme_style' ) );
107
  add_action( 'wp_ajax_sns_theme_css', array( __CLASS__, 'theme_css' ) );
108
  add_action( 'wp_ajax_nopriv_sns_theme_css', array( __CLASS__, 'theme_css' ) );
109
  }
110
- function theme_style() {
111
  if ( current_theme_supports( 'scripts-n-styles' ) ) {
112
  $options = get_option( 'SnS_options' );
113
  $slug = get_stylesheet();
114
-
115
  if ( ! empty( $options[ 'themes' ][ $slug ][ 'compiled' ] ) ) {
116
  wp_deregister_style( 'theme_style' );
117
  wp_enqueue_style( 'theme_style', add_query_arg( array( 'action' => 'sns_theme_css' ), admin_url( "admin-ajax.php" ) ) );
118
  }
119
  }
120
  }
121
- function theme_css() {
122
  $options = get_option( 'SnS_options' );
123
  $slug = get_stylesheet();
124
  $compiled = $options[ 'themes' ][ $slug ][ 'compiled' ];
@@ -128,177 +134,116 @@ class Scripts_n_Styles
128
  echo $compiled;
129
  die();
130
  }
131
- function add_widget() {
132
  $options = get_option( 'SnS_options' );
133
  if ( isset( $options[ 'hoops_widget' ] ) && 'yes' == $options[ 'hoops_widget' ] )
134
  register_widget( 'SnS_Widget' );
135
  }
136
- function add_shortcodes() {
137
  add_shortcode( 'sns_shortcode', array( __CLASS__, 'shortcode' ) );
138
  add_shortcode( 'hoops', array( __CLASS__, 'shortcode' ) );
139
  }
140
- function shortcode( $atts, $content = null, $tag ) {
141
- $id = get_the_ID();
142
-
143
  extract( shortcode_atts( array( 'name' => 0, ), $atts ) );
144
  $output = '';
145
-
146
  $options = get_option( 'SnS_options' );
147
  $hoops = isset( $options['hoops']['shortcodes'] ) ? $options['hoops']['shortcodes'] : array();
148
-
149
- $SnS = get_post_meta( $id, '_SnS', true );
150
- $shortcodes = isset( $SnS['shortcodes'] ) ? $SnS[ 'shortcodes' ]: array();
151
-
 
 
152
  if ( isset( $shortcodes[ $name ] ) )
153
  $output .= $shortcodes[ $name ];
154
  else if ( isset( $hoops[ $name ] ) )
155
  $output .= $hoops[ $name ];
156
-
157
  if ( ! empty( $content ) && empty( $output ) )
158
  $output = $content;
159
  $output = do_shortcode( $output );
160
-
161
  return $output;
162
  }
163
- function hoops_widget( $atts, $content = null, $tag ) {
164
  $options = get_option( 'SnS_options' );
165
  $hoops = $options['hoops']['shortcodes'];
166
-
167
  extract( shortcode_atts( array( 'name' => 0, ), $atts ) );
168
  $output = '';
169
-
170
  $shortcodes = isset( $SnS['shortcodes'] ) ? $SnS[ 'shortcodes' ]: array();
171
-
172
  if ( isset( $hoops[ $name ] ) )
173
  $output .= $hoops[ $name ];
174
-
175
  if ( ! empty( $content ) && empty( $output ) )
176
  $output = $content;
177
  $output = do_shortcode( $output );
178
-
179
  return $output;
180
  }
181
-
182
  /**
183
  * Utility Method
184
  */
185
  static function get_wp_registered() {
 
186
  return array(
187
- // Starting with the list of Scripts registered by default on the Theme side (index page of twentyten).
188
- 'l10n',
189
- 'utils',
190
- 'common',
191
- 'sack',
192
- 'quicktags',
193
- 'colorpicker',
194
- 'editor',
195
- 'prototype',
196
- 'wp-ajax-response',
197
- 'autosave',
198
- 'wp-lists',
199
- 'scriptaculous-root',
200
- 'scriptaculous-builder',
201
- 'scriptaculous-dragdrop',
202
- 'scriptaculous-effects',
203
- 'scriptaculous-slider',
204
- 'scriptaculous-sound',
205
- 'scriptaculous-controls',
206
- 'scriptaculous',
207
- 'cropper',
208
- 'jquery',
209
- 'jquery-ui-core',
210
- 'jquery-ui-position',
211
- 'jquery-ui-widget',
212
- 'jquery-ui-mouse',
213
- 'jquery-ui-button',
214
- 'jquery-ui-tabs',
215
- 'jquery-ui-sortable',
216
- 'jquery-ui-draggable',
217
- 'jquery-ui-droppable',
218
- 'jquery-ui-selectable',
219
- 'jquery-ui-resizable',
220
- 'jquery-ui-dialog',
221
- 'jquery-form',
222
- 'jquery-color',
223
- 'suggest',
224
- 'schedule',
225
- 'jquery-query',
226
- 'jquery-serialize-object',
227
- 'jquery-hotkeys',
228
- 'jquery-table-hotkeys',
229
- 'thickbox',
230
- 'jcrop',
231
- 'swfobject',
232
- 'swfupload',
233
- 'swfupload-swfobject',
234
- 'swfupload-queue',
235
- 'swfupload-speed',
236
- 'swfupload-all',
237
- 'swfupload-handlers',
238
- 'comment-reply',
239
- 'json2',
240
- 'imgareaselect',
241
- 'password-strength-meter',
242
- 'user-profile',
243
- 'admin-bar',
244
- 'wplink',
245
- 'wpdialogs-popup',
246
- 'less.js',
247
- 'coffeescript',
248
- 'chosen',
249
- );
250
  }
251
- function register() {
252
  $dir = plugins_url( '/', __FILE__);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
253
  $js = $dir . 'js/';
 
 
 
 
 
 
 
254
  $css = $dir . 'css/';
255
- $cm_version = '2.25';
256
- $chosen_version = '0.9.8';
257
- $cm_dir = $dir . 'vendor/CodeMirror2/';
258
- $less_dir = $dir . 'vendor/';
259
- $coffee_dir = $dir . 'vendor/';
260
- $chosen_dir = $dir . 'vendor/chosen/';
261
- //$localize = array( 'theme' => $cm_theme );
262
- $options = get_option( 'SnS_options' );
263
- $cm_theme = isset( $options[ 'cm_theme' ] ) ? $options[ 'cm_theme' ] : 'default';
264
-
265
- wp_register_script( 'less.js', $less_dir . 'less.js', array(), '1.3.0-min' );
266
- wp_register_script( 'coffeescript', $coffee_dir . 'coffee-script.js', array(), '1.3.3-min' );
267
- wp_register_script( 'chosen', $chosen_dir . 'chosen.jquery.min.js', array( 'jquery' ), $chosen_version, true );
268
- wp_register_style( 'chosen', $chosen_dir . 'chosen.css', array(), $chosen_version );
269
-
270
- wp_register_script( 'codemirror', $cm_dir . 'lib/codemirror.js', array(), $cm_version );
271
- wp_register_script( 'codemirror-css', $cm_dir . 'mode/css/css.js', array( 'codemirror' ), $cm_version );
272
- wp_register_script( 'codemirror-coffeescript', $cm_dir . 'mode/coffeescript/coffeescript.js', array( 'codemirror' ), $cm_version );
273
- wp_register_script( 'codemirror-less', $cm_dir . 'mode/less/less.js', array( 'codemirror' ), $cm_version );
274
- wp_register_script( 'codemirror-javascript', $cm_dir . 'mode/javascript/javascript.js', array( 'codemirror' ), $cm_version );
275
- wp_register_script( 'codemirror-xml', $cm_dir . 'mode/xml/xml.js', array( 'codemirror' ), $cm_version );
276
- wp_register_script( 'codemirror-clike', $cm_dir . 'mode/clike/clike.js', array( 'codemirror' ), $cm_version );
277
- wp_register_script( 'codemirror-markdown', $cm_dir . 'mode/markdown/markdown.js', array( 'codemirror-xml' ), $cm_version );
278
- wp_register_script( 'codemirror-gfm', $cm_dir . 'mode/gfm/gfm.js', array( 'codemirror-php', 'codemirror-htmlmixed' ), $cm_version );
279
- wp_register_script( 'codemirror-htmlmixed', $cm_dir . 'mode/htmlmixed/htmlmixed.js', array( 'codemirror-xml', 'codemirror-css', 'codemirror-javascript' ), $cm_version );
280
- wp_register_script( 'codemirror-php', $cm_dir . 'mode/php/php.js', array( 'codemirror-xml', 'codemirror-css', 'codemirror-javascript', 'codemirror-clike' ), $cm_version );
281
-
282
- wp_register_style( 'codemirror-default', $cm_dir . 'lib/codemirror.css', array(), $cm_version );
283
- foreach ( self::$cm_themes as $theme ) if ( 'default' !== $theme )
284
- wp_register_style( "codemirror-$theme", $cm_dir . "theme/$theme.css", array( 'codemirror-default' ), $cm_version );
285
-
286
- if ( 'default' == $cm_theme )
287
- wp_register_style( 'codemirror-theme', $cm_dir . 'lib/codemirror.css', array(), $cm_version );
288
- else
289
- wp_register_style( 'codemirror-theme', $cm_dir . "theme/$cm_theme.css", array( 'codemirror-default' ), $cm_version );
290
-
291
- wp_register_style( 'sns-options', $css . 'options-styles.css', array(), self::VERSION );
292
- wp_register_script( 'sns-global-page', $js . 'global-page.js', array( 'jquery', 'codemirror-less', 'codemirror-coffeescript', 'codemirror-css', 'codemirror-javascript', 'less.js', 'coffeescript', 'chosen' ), self::VERSION, true );
293
- wp_register_script( 'sns-theme-page', $js . 'theme-page.js', array( 'jquery', 'codemirror-css', 'codemirror-less', 'less.js', ), self::VERSION, true );
294
- wp_register_script( 'sns-hoops-page', $js . 'hoops-page.js', array( 'jquery', 'codemirror-htmlmixed' ), self::VERSION, true );
295
- wp_register_script( 'sns-settings-page', $js . 'settings-page.js', array( 'jquery', 'codemirror-php' ), self::VERSION, true );
296
- wp_register_style( 'sns-meta-box', $css . 'meta-box.css', array( 'codemirror-theme' ), self::VERSION );
297
- wp_register_script( 'sns-meta-box', $js . 'meta-box.js', array( 'editor', 'jquery-ui-tabs', 'codemirror-less', 'codemirror-htmlmixed', 'chosen' ), self::VERSION, true );
298
- wp_register_style( 'sns-code-editor', $css . 'code-editor.css', array( 'codemirror-theme' ), self::VERSION );
299
- wp_register_script( 'sns-code-editor', $js . 'code-editor.js', array( 'editor', 'jquery-ui-tabs', 'codemirror-less', 'codemirror-coffeescript', 'codemirror-htmlmixed', 'codemirror-php', 'codemirror-markdown' ), self::VERSION, true );
300
  }
301
-
302
  /**
303
  * Theme Action: 'wp_head()'
304
  * Outputs the globally and individually set Styles in the Theme's head element.
@@ -316,7 +261,7 @@ class Scripts_n_Styles
316
  echo $options[ 'compiled' ];
317
  ?></style><?php
318
  }
319
-
320
  if ( ! is_singular() ) return;
321
  // Individual
322
  global $post;
@@ -328,7 +273,7 @@ class Scripts_n_Styles
328
  ?></style><?php
329
  }
330
  }
331
-
332
  /**
333
  * Theme Action: 'wp_footer()'
334
  * Outputs the globally and individually set Scripts at the end of the Theme's body element.
@@ -346,7 +291,7 @@ class Scripts_n_Styles
346
  echo $options[ 'coffee_compiled' ];
347
  ?></script><?php
348
  }
349
-
350
  if ( ! is_singular() ) return;
351
  // Individual
352
  global $post;
@@ -358,7 +303,7 @@ class Scripts_n_Styles
358
  ?></script><?php
359
  }
360
  }
361
-
362
  /**
363
  * Theme Action: 'wp_head()'
364
  * Outputs the globally and individually set Scripts in the Theme's head element.
@@ -371,7 +316,7 @@ class Scripts_n_Styles
371
  echo $options[ 'scripts_in_head' ];
372
  ?></script><?php
373
  }
374
-
375
  if ( ! is_singular() ) return;
376
  // Individual
377
  global $post;
@@ -383,45 +328,45 @@ class Scripts_n_Styles
383
  ?></script><?php
384
  }
385
  }
386
-
387
  /**
388
  * Theme Filter: 'body_class()'
389
  * Adds classes to the Theme's body tag.
390
  * @uses self::get_styles()
391
- * @param array $classes
392
- * @return array $classes
393
  */
394
  static function body_classes( $classes ) {
395
  if ( ! is_singular() || is_admin() ) return $classes;
396
-
397
  global $post;
398
  $SnS = get_post_meta( $post->ID, '_SnS', true );
399
  $styles = isset( $SnS['styles'] ) ? $SnS[ 'styles' ]: array();
400
  if ( ! empty( $styles ) && ! empty( $styles[ 'classes_body' ] ) )
401
  $classes = array_merge( $classes, explode( " ", $styles[ 'classes_body' ] ) );
402
-
403
  return $classes;
404
  }
405
-
406
  /**
407
  * Theme Filter: 'post_class()'
408
  * Adds classes to the Theme's post container.
409
- * @param array $classes
410
- * @return array $classes
411
  */
412
  static function post_classes( $classes ) {
413
  if ( ! is_singular() || is_admin() ) return $classes;
414
-
415
  global $post;
416
  $SnS = get_post_meta( $post->ID, '_SnS', true );
417
  $styles = isset( $SnS['styles'] ) ? $SnS[ 'styles' ]: array();
418
-
419
  if ( ! empty( $styles ) && ! empty( $styles[ 'classes_post' ] ) )
420
  $classes = array_merge( $classes, explode( " ", $styles[ 'classes_post' ] ) );
421
-
422
  return $classes;
423
  }
424
-
425
  /**
426
  * Theme Action: 'wp_enqueue_scripts'
427
  * Enqueues chosen Scripts.
@@ -436,19 +381,19 @@ class Scripts_n_Styles
436
 
437
  foreach ( $enqueue_scripts as $handle )
438
  wp_enqueue_script( $handle );
439
-
440
  if ( ! is_singular() ) return;
441
  // Individual
442
  global $post;
443
  $SnS = get_post_meta( $post->ID, '_SnS', true );
444
  $scripts = isset( $SnS['scripts'] ) ? $SnS[ 'scripts' ]: array();
445
-
446
  if ( ! empty( $scripts[ 'enqueue_scripts' ] ) && is_array( $scripts[ 'enqueue_scripts' ] ) ) {
447
  foreach ( $scripts[ 'enqueue_scripts' ] as $handle )
448
  wp_enqueue_script( $handle );
449
  }
450
  }
451
-
452
  /**
453
  * Utility Method: Compares VERSION to stored 'version' value.
454
  */
@@ -473,27 +418,27 @@ class SnS_Widget extends WP_Widget
473
 
474
  function widget( $args, $instance ) {
475
  global $shortcode_tags;
476
-
477
  extract( $args );
478
  $title = apply_filters( 'widget_title', empty( $instance[ 'title' ] ) ? '' : $instance[ 'title' ], $instance, $this->id_base );
479
  $text = apply_filters( 'widget_text', empty( $instance[ 'text' ] ) ? '' : $instance[ 'text' ], $instance );
480
-
481
  echo $before_widget;
482
  if ( ! empty( $title ) )
483
  echo $before_title . $title . $after_title;
484
  echo '<div class="hoopstextwidget">';
485
  $content = ! empty( $instance[ 'filter' ] ) ? wpautop( $text ) : $text;
486
-
487
  $backup = $shortcode_tags;
488
  remove_all_shortcodes();
489
-
490
  add_shortcode( 'sns_shortcode', array( 'Scripts_n_Styles', 'hoops_widget' ) );
491
  add_shortcode( 'hoops', array( 'Scripts_n_Styles', 'hoops_widget' ) );
492
-
493
  $content = do_shortcode( $content );
494
-
495
  $shortcode_tags = $backup;
496
-
497
  echo $content;
498
  echo '</div>';
499
  echo $after_widget;
@@ -517,11 +462,11 @@ class SnS_Widget extends WP_Widget
517
  ?>
518
  <p><label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:' ); ?></label>
519
  <input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>" /></p>
520
-
521
  <textarea class="widefat" rows="16" cols="20" id="<?php echo $this->get_field_id( 'text' ); ?>" name="<?php echo $this->get_field_name( 'text' ); ?>"><?php echo $text; ?></textarea>
522
-
523
  <p><input id="<?php echo $this->get_field_id( 'filter' ); ?>" name="<?php echo $this->get_field_name( 'filter' ); ?>" type="checkbox" <?php checked( isset( $instance[ 'filter' ] ) ? $instance[ 'filter' ] : 0 ); ?> />&nbsp;<label for="<?php echo $this->get_field_id( 'filter' ); ?>"><?php _e( 'Automatically add paragraphs' ); ?></label></p>
524
  <?php
525
  }
526
  }
527
- ?>
5
  Description: Allows WordPress admin users the ability to add custom CSS and JavaScript directly to individual Post, Pages or custom post types.
6
  Author: unFocus Projects
7
  Author URI: http://www.unfocus.com/
8
+ Version: 3.3
9
  License: GPLv3 or later
10
  Text Domain: scripts-n-styles
 
11
  */
12
 
13
  /* The Scripts n Styles WordPress Plugin
14
+ Copyright (c) 2010-2013 Kenneth Newman <http://www.unfocus.com/>
15
  Copyright (c) 2012 Kevin Newman <http://www.unfocus.com/>
16
+ Copyright (c) 2012-2013 adcSTUDIO LLC <http://www.adcstudio.com/>
17
 
18
  Scripts n Styles is free software; you can redistribute it and/or
19
  modify it under the terms of the GNU General Public License
20
  as published by the Free Software Foundation; either version 3
21
  of the License, or (at your option) any later version.
22
+
23
  Scripts n Styles is distributed in the hope that it will be useful,
24
  but WITHOUT ANY WARRANTY; without even the implied warranty of
25
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26
  GNU General Public License for more details.
27
+
28
  You should have received a copy of the GNU General Public License
29
  along with this program. If not, see <http://www.gnu.org/licenses/>.
30
+
31
  This file incorporates work covered by other licenses and permissions.
32
  */
33
 
34
  /**
35
  * Scripts n Styles
36
+ *
37
  * Allows WordPress admin users the ability to add custom CSS
38
  * and JavaScript directly to individual Post, Pages or custom
39
  * post types.
40
+ *
41
  * NOTE: No user except the "Super Admin" can use this plugin in MultiSite. I'll add features for MultiSite later, perhaps the ones below...
42
+ * The "Super Admin" user has exclusive 'unfiltered_html' capabilities in MultiSite. Also, options.php checks for is_super_admin()
43
+ * so the 'manage_options' capability for blog admins is insufficient to pass the check to manage options directly.
44
+ *
45
+ * The Tentative plan is for Super Admins to create Snippets or Shortcodes approved for use by users with certain capabilities
46
  * ('unfiltered_html' and/or 'manage_options'). The 'unfiltered_html' capability can be granted via another plugin. This plugin will
47
  * not deal with granting any capabilities.
48
+ *
49
  * @package Scripts_n_Styles
50
  * @link http://www.unfocus.com/projects/scripts-n-styles/ Plugin URI
51
  * @author unFocus Projects
52
  * @link http://www.unfocus.com/ Author URI
53
+ * @version 3.3
54
  * @license http://opensource.org/licenses/gpl-license.php GNU Public License
55
+ * @copyright Copyright (c) 2010 - 2013, Kenneth Newman
56
  * @copyright Copyright (c) 2012, Kevin Newman
57
+ * @copyright Copyright (c) 2012 - 2013, adcSTUDIO LLC
58
+ *
59
  * @todo Create ability to add and register scripts and styles for enqueueing (via Options page).
60
  * @todo Create selection on Option page of which to pick registered scripts to make available on edit screens.
61
  * @todo Create shortcode registration on Options page to make those snippets available on edit screens.
68
  /**#@+
69
  * @static
70
  */
71
+ const VERSION = '3.3';
72
  static $file = __FILE__;
73
+ static $cm_themes = array( 'default', '3024-day', '3024-night', 'ambiance',
74
+ 'base16-dark', 'base16-light',
75
+ 'blackboard', 'cobalt', 'eclipse',
76
+ 'elegant', 'erlang-dark', 'lesser-dark', 'midnight', 'monokai',
77
+ 'neat', 'night', 'paraiso-dark', 'paraiso-light', 'rubyblue',
78
+ 'solarized', 'the-matrix', 'tomorrow-night-eighties', 'twilight', 'vibrant-ink',
79
+ 'xq-dark', 'xq-light' );
80
  /**#@-*/
81
+
82
  /**
83
  * Initializing method. Checks if is_admin() and registers action hooks for admin if true. Sets filters and actions for Theme side functions.
84
  * @static
92
  include_once( 'includes/class-sns-admin.php' );
93
  SnS_Admin::init();
94
  }
95
+ //register_theme_directory( WP_PLUGIN_DIR . "/" . basename( dirname( __FILE__ ) ) . '/theme/' );
96
  add_action( 'plugins_loaded', array( __CLASS__, 'upgrade_check' ) );
97
+
98
  add_filter( 'body_class', array( __CLASS__, 'body_classes' ) );
99
  add_filter( 'post_class', array( __CLASS__, 'post_classes' ) );
100
+
101
  add_action( 'wp_head', array( __CLASS__, 'styles' ), 11 );
102
  add_action( 'wp_enqueue_scripts', array( __CLASS__, 'enqueue_scripts' ), 11 );
103
  add_action( 'wp_head', array( __CLASS__, 'scripts_in_head' ), 11 );
104
  add_action( 'wp_footer', array( __CLASS__, 'scripts' ), 11 );
105
+
106
  add_action( 'plugins_loaded', array( __CLASS__, 'add_shortcodes' ) );
107
  add_action( 'widgets_init', array( __CLASS__, 'add_widget' ) );
108
+
109
  add_action( 'wp_enqueue_scripts', array( __CLASS__, 'register' ) );
110
  add_action( 'admin_enqueue_scripts', array( __CLASS__, 'register' ) );
111
+
112
  add_action( 'wp_print_styles', array( __CLASS__, 'theme_style' ) );
113
  add_action( 'wp_ajax_sns_theme_css', array( __CLASS__, 'theme_css' ) );
114
  add_action( 'wp_ajax_nopriv_sns_theme_css', array( __CLASS__, 'theme_css' ) );
115
  }
116
+ static function theme_style() {
117
  if ( current_theme_supports( 'scripts-n-styles' ) ) {
118
  $options = get_option( 'SnS_options' );
119
  $slug = get_stylesheet();
120
+
121
  if ( ! empty( $options[ 'themes' ][ $slug ][ 'compiled' ] ) ) {
122
  wp_deregister_style( 'theme_style' );
123
  wp_enqueue_style( 'theme_style', add_query_arg( array( 'action' => 'sns_theme_css' ), admin_url( "admin-ajax.php" ) ) );
124
  }
125
  }
126
  }
127
+ static function theme_css() {
128
  $options = get_option( 'SnS_options' );
129
  $slug = get_stylesheet();
130
  $compiled = $options[ 'themes' ][ $slug ][ 'compiled' ];
134
  echo $compiled;
135
  die();
136
  }
137
+ static function add_widget() {
138
  $options = get_option( 'SnS_options' );
139
  if ( isset( $options[ 'hoops_widget' ] ) && 'yes' == $options[ 'hoops_widget' ] )
140
  register_widget( 'SnS_Widget' );
141
  }
142
+ static function add_shortcodes() {
143
  add_shortcode( 'sns_shortcode', array( __CLASS__, 'shortcode' ) );
144
  add_shortcode( 'hoops', array( __CLASS__, 'shortcode' ) );
145
  }
146
+ static function shortcode( $atts, $content = null, $tag ) {
147
+ global $post;
 
148
  extract( shortcode_atts( array( 'name' => 0, ), $atts ) );
149
  $output = '';
150
+
151
  $options = get_option( 'SnS_options' );
152
  $hoops = isset( $options['hoops']['shortcodes'] ) ? $options['hoops']['shortcodes'] : array();
153
+
154
+ if ( isset( $post->ID ) ) {
155
+ $SnS = get_post_meta( $post->ID, '_SnS', true );
156
+ $shortcodes = isset( $SnS['shortcodes'] ) ? $SnS[ 'shortcodes' ]: array();
157
+ }
158
+
159
  if ( isset( $shortcodes[ $name ] ) )
160
  $output .= $shortcodes[ $name ];
161
  else if ( isset( $hoops[ $name ] ) )
162
  $output .= $hoops[ $name ];
163
+
164
  if ( ! empty( $content ) && empty( $output ) )
165
  $output = $content;
166
  $output = do_shortcode( $output );
167
+
168
  return $output;
169
  }
170
+ static function hoops_widget( $atts, $content = null, $tag ) {
171
  $options = get_option( 'SnS_options' );
172
  $hoops = $options['hoops']['shortcodes'];
173
+
174
  extract( shortcode_atts( array( 'name' => 0, ), $atts ) );
175
  $output = '';
176
+
177
  $shortcodes = isset( $SnS['shortcodes'] ) ? $SnS[ 'shortcodes' ]: array();
178
+
179
  if ( isset( $hoops[ $name ] ) )
180
  $output .= $hoops[ $name ];
181
+
182
  if ( ! empty( $content ) && empty( $output ) )
183
  $output = $content;
184
  $output = do_shortcode( $output );
185
+
186
  return $output;
187
  }
188
+
189
  /**
190
  * Utility Method
191
  */
192
  static function get_wp_registered() {
193
+ /* This is a collection of scripts that are listed as registered after running `wp_head` and `wp_footer` actions on the theme side. */
194
  return array(
195
+ 'utils', 'common', 'sack', 'quicktags', 'colorpicker', 'editor', 'wp-fullscreen', 'wp-ajax-response', 'wp-pointer', 'autosave',
196
+ 'heartbeat', 'wp-auth-check', 'wp-lists', 'prototype', 'scriptaculous-root', 'scriptaculous-builder', 'scriptaculous-dragdrop',
197
+ 'scriptaculous-effects', 'scriptaculous-slider', 'scriptaculous-sound', 'scriptaculous-controls', 'scriptaculous', 'cropper',
198
+ 'jquery', 'jquery-core', 'jquery-migrate', 'jquery-ui-core', 'jquery-effects-core', 'jquery-effects-blind', 'jquery-effects-bounce',
199
+ 'jquery-effects-clip', 'jquery-effects-drop', 'jquery-effects-explode', 'jquery-effects-fade', 'jquery-effects-fold',
200
+ 'jquery-effects-highlight', 'jquery-effects-pulsate', 'jquery-effects-scale', 'jquery-effects-shake', 'jquery-effects-slide',
201
+ 'jquery-effects-transfer', 'jquery-ui-accordion', 'jquery-ui-autocomplete', 'jquery-ui-button', 'jquery-ui-datepicker',
202
+ 'jquery-ui-dialog', 'jquery-ui-draggable', 'jquery-ui-droppable', 'jquery-ui-menu', 'jquery-ui-mouse', 'jquery-ui-position',
203
+ 'jquery-ui-progressbar', 'jquery-ui-resizable', 'jquery-ui-selectable', 'jquery-ui-slider', 'jquery-ui-sortable',
204
+ 'jquery-ui-spinner', 'jquery-ui-tabs', 'jquery-ui-tooltip', 'jquery-ui-widget', 'jquery-form', 'jquery-color', 'suggest',
205
+ 'schedule', 'jquery-query', 'jquery-serialize-object', 'jquery-hotkeys', 'jquery-table-hotkeys', 'jquery-touch-punch',
206
+ 'jquery-masonry', 'thickbox', 'jcrop', 'swfobject', 'plupload', 'plupload-html5', 'plupload-flash', 'plupload-silverlight',
207
+ 'plupload-html4', 'plupload-all', 'plupload-handlers', 'wp-plupload', 'swfupload', 'swfupload-swfobject', 'swfupload-queue',
208
+ 'swfupload-speed', 'swfupload-all', 'swfupload-handlers', 'comment-reply', 'json2', 'underscore', 'backbone', 'wp-util',
209
+ 'wp-backbone', 'revisions', 'imgareaselect', 'mediaelement', 'wp-mediaelement', 'password-strength-meter', 'user-profile',
210
+ 'user-suggest', 'admin-bar', 'wplink', 'wpdialogs', 'wpdialogs-popup', 'word-count', 'media-upload', 'hoverIntent', 'customize-base',
211
+ 'customize-loader', 'customize-preview', 'customize-controls', 'accordion', 'shortcode', 'media-models', 'media-views',
212
+ 'media-editor', 'mce-view', 'less.js', 'coffeescript', 'chosen', 'coffeelint', 'mustache', 'html5shiv', 'html5shiv-printshiv',
213
+ 'google-diff-match-patch', 'codemirror'
214
+ );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
215
  }
216
+ static function register() {
217
  $dir = plugins_url( '/', __FILE__);
218
+
219
+ $vendor = $dir . 'vendor/';
220
+ wp_register_script( 'less.js', $vendor . 'less.min.js', array(), '1.4.2-min' );
221
+ wp_register_script( 'coffeescript', $vendor . 'coffee-script.js', array(), '1.6.3-min' );
222
+ wp_register_script( 'chosen', $vendor . 'chosen/chosen.jquery.min.js', array( 'jquery' ), '1.0.0', true );
223
+ wp_register_style( 'chosen', $vendor . 'chosen/chosen.min.css', array(), '1.0.0' );
224
+ //wp_register_script( 'coffeelint', $vendor . 'coffeelint.js', array(), '0.5.6' );
225
+ //wp_register_script( 'mustache', $vendor . 'chosen/jquery.mustache.min.js', array( 'jquery' ), '0.7.2', true );
226
+ //wp_register_script( 'html5shiv', $vendor . 'html5shiv.js', array(), '3.6.2' );
227
+ //wp_register_script( 'html5shiv-printshiv', $vendor . 'html5shiv-printshiv.js', array(), '3.6.2' );
228
+
229
+ //wp_register_script( 'google-diff-match-patch', $vendor . 'codemirror/diff_match_patch.js', array() );
230
+ wp_register_script( 'codemirror', $vendor . 'codemirror/codemirror-compressed.js', array( /*'google-diff-match-patch'*/ ), '3.16' );
231
+ wp_register_style( 'codemirror', $vendor . 'codemirror/codemirror-compressed.css', array(), '3.16' );
232
+
233
  $js = $dir . 'js/';
234
+ wp_register_script( 'sns-global-page', $js . 'global-page.js', array( 'jquery', 'codemirror', 'less.js', 'coffeescript', 'chosen' ), self::VERSION, true );
235
+ wp_register_script( 'sns-theme-page', $js . 'theme-page.js', array( 'jquery', 'codemirror', 'less.js', ), self::VERSION, true );
236
+ wp_register_script( 'sns-hoops-page', $js . 'hoops-page.js', array( 'jquery', 'codemirror' ), self::VERSION, true );
237
+ wp_register_script( 'sns-settings-page', $js . 'settings-page.js', array( 'jquery', 'codemirror' ), self::VERSION, true );
238
+ wp_register_script( 'sns-meta-box', $js . 'meta-box.js', array( 'editor', 'jquery-ui-tabs', 'codemirror', 'chosen' ), self::VERSION, true );
239
+ wp_register_script( 'sns-code-editor', $js . 'code-editor.js', array( 'editor', 'jquery-ui-tabs', 'codemirror' ), self::VERSION, true );
240
+
241
  $css = $dir . 'css/';
242
+ wp_register_style( 'sns-options', $css . 'options-styles.css', array( 'codemirror' ), self::VERSION );
243
+ wp_register_style( 'sns-meta-box', $css . 'meta-box.css', array( 'codemirror' ), self::VERSION );
244
+ wp_register_style( 'sns-code-editor', $css . 'code-editor.css', array( 'codemirror' ), self::VERSION );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
245
  }
246
+
247
  /**
248
  * Theme Action: 'wp_head()'
249
  * Outputs the globally and individually set Styles in the Theme's head element.
261
  echo $options[ 'compiled' ];
262
  ?></style><?php
263
  }
264
+
265
  if ( ! is_singular() ) return;
266
  // Individual
267
  global $post;
273
  ?></style><?php
274
  }
275
  }
276
+
277
  /**
278
  * Theme Action: 'wp_footer()'
279
  * Outputs the globally and individually set Scripts at the end of the Theme's body element.
291
  echo $options[ 'coffee_compiled' ];
292
  ?></script><?php
293
  }
294
+
295
  if ( ! is_singular() ) return;
296
  // Individual
297
  global $post;
303
  ?></script><?php
304
  }
305
  }
306
+
307
  /**
308
  * Theme Action: 'wp_head()'
309
  * Outputs the globally and individually set Scripts in the Theme's head element.
316
  echo $options[ 'scripts_in_head' ];
317
  ?></script><?php
318
  }
319
+
320
  if ( ! is_singular() ) return;
321
  // Individual
322
  global $post;
328
  ?></script><?php
329
  }
330
  }
331
+
332
  /**
333
  * Theme Filter: 'body_class()'
334
  * Adds classes to the Theme's body tag.
335
  * @uses self::get_styles()
336
+ * @param array $classes
337
+ * @return array $classes
338
  */
339
  static function body_classes( $classes ) {
340
  if ( ! is_singular() || is_admin() ) return $classes;
341
+
342
  global $post;
343
  $SnS = get_post_meta( $post->ID, '_SnS', true );
344
  $styles = isset( $SnS['styles'] ) ? $SnS[ 'styles' ]: array();
345
  if ( ! empty( $styles ) && ! empty( $styles[ 'classes_body' ] ) )
346
  $classes = array_merge( $classes, explode( " ", $styles[ 'classes_body' ] ) );
347
+
348
  return $classes;
349
  }
350
+
351
  /**
352
  * Theme Filter: 'post_class()'
353
  * Adds classes to the Theme's post container.
354
+ * @param array $classes
355
+ * @return array $classes
356
  */
357
  static function post_classes( $classes ) {
358
  if ( ! is_singular() || is_admin() ) return $classes;
359
+
360
  global $post;
361
  $SnS = get_post_meta( $post->ID, '_SnS', true );
362
  $styles = isset( $SnS['styles'] ) ? $SnS[ 'styles' ]: array();
363
+
364
  if ( ! empty( $styles ) && ! empty( $styles[ 'classes_post' ] ) )
365
  $classes = array_merge( $classes, explode( " ", $styles[ 'classes_post' ] ) );
366
+
367
  return $classes;
368
  }
369
+
370
  /**
371
  * Theme Action: 'wp_enqueue_scripts'
372
  * Enqueues chosen Scripts.
381
 
382
  foreach ( $enqueue_scripts as $handle )
383
  wp_enqueue_script( $handle );
384
+
385
  if ( ! is_singular() ) return;
386
  // Individual
387
  global $post;
388
  $SnS = get_post_meta( $post->ID, '_SnS', true );
389
  $scripts = isset( $SnS['scripts'] ) ? $SnS[ 'scripts' ]: array();
390
+
391
  if ( ! empty( $scripts[ 'enqueue_scripts' ] ) && is_array( $scripts[ 'enqueue_scripts' ] ) ) {
392
  foreach ( $scripts[ 'enqueue_scripts' ] as $handle )
393
  wp_enqueue_script( $handle );
394
  }
395
  }
396
+
397
  /**
398
  * Utility Method: Compares VERSION to stored 'version' value.
399
  */
418
 
419
  function widget( $args, $instance ) {
420
  global $shortcode_tags;
421
+
422
  extract( $args );
423
  $title = apply_filters( 'widget_title', empty( $instance[ 'title' ] ) ? '' : $instance[ 'title' ], $instance, $this->id_base );
424
  $text = apply_filters( 'widget_text', empty( $instance[ 'text' ] ) ? '' : $instance[ 'text' ], $instance );
425
+
426
  echo $before_widget;
427
  if ( ! empty( $title ) )
428
  echo $before_title . $title . $after_title;
429
  echo '<div class="hoopstextwidget">';
430
  $content = ! empty( $instance[ 'filter' ] ) ? wpautop( $text ) : $text;
431
+
432
  $backup = $shortcode_tags;
433
  remove_all_shortcodes();
434
+
435
  add_shortcode( 'sns_shortcode', array( 'Scripts_n_Styles', 'hoops_widget' ) );
436
  add_shortcode( 'hoops', array( 'Scripts_n_Styles', 'hoops_widget' ) );
437
+
438
  $content = do_shortcode( $content );
439
+
440
  $shortcode_tags = $backup;
441
+
442
  echo $content;
443
  echo '</div>';
444
  echo $after_widget;
462
  ?>
463
  <p><label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:' ); ?></label>
464
  <input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>" /></p>
465
+
466
  <textarea class="widefat" rows="16" cols="20" id="<?php echo $this->get_field_id( 'text' ); ?>" name="<?php echo $this->get_field_name( 'text' ); ?>"><?php echo $text; ?></textarea>
467
+
468
  <p><input id="<?php echo $this->get_field_id( 'filter' ); ?>" name="<?php echo $this->get_field_name( 'filter' ); ?>" type="checkbox" <?php checked( isset( $instance[ 'filter' ] ) ? $instance[ 'filter' ] : 0 ); ?> />&nbsp;<label for="<?php echo $this->get_field_id( 'filter' ); ?>"><?php _e( 'Automatically add paragraphs' ); ?></label></p>
469
  <?php
470
  }
471
  }
472
+ ?>
vendor/CodeMirror2/LICENSE DELETED
@@ -1,23 +0,0 @@
1
- Copyright (C) 2012 by Marijn Haverbeke <marijnh@gmail.com>
2
-
3
- Permission is hereby granted, free of charge, to any person obtaining a copy
4
- of this software and associated documentation files (the "Software"), to deal
5
- in the Software without restriction, including without limitation the rights
6
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
- copies of the Software, and to permit persons to whom the Software is
8
- furnished to do so, subject to the following conditions:
9
-
10
- The above copyright notice and this permission notice shall be included in
11
- all copies or substantial portions of the Software.
12
-
13
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
- THE SOFTWARE.
20
-
21
- Please note that some subdirectories of the CodeMirror distribution
22
- include their own LICENSE files, and are released under different
23
- licences.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/CodeMirror2/lib/codemirror.css DELETED
@@ -1,126 +0,0 @@
1
- .CodeMirror {
2
- line-height: 1em;
3
- font-family: monospace;
4
- }
5
-
6
- .CodeMirror-scroll {
7
- overflow: auto;
8
- height: 300px;
9
- /* This is needed to prevent an IE[67] bug where the scrolled content
10
- is visible outside of the scrolling box. */
11
- position: relative;
12
- outline: none;
13
- }
14
-
15
- .CodeMirror-gutter {
16
- position: absolute; left: 0; top: 0;
17
- z-index: 10;
18
- background-color: #f7f7f7;
19
- border-right: 1px solid #eee;
20
- min-width: 2em;
21
- height: 100%;
22
- }
23
- .CodeMirror-gutter-text {
24
- color: #aaa;
25
- text-align: right;
26
- padding: .4em .2em .4em .4em;
27
- white-space: pre !important;
28
- }
29
- .CodeMirror-lines {
30
- padding: .4em;
31
- white-space: pre;
32
- }
33
-
34
- .CodeMirror pre {
35
- -moz-border-radius: 0;
36
- -webkit-border-radius: 0;
37
- -o-border-radius: 0;
38
- border-radius: 0;
39
- border-width: 0; margin: 0; padding: 0; background: transparent;
40
- font-family: inherit;
41
- font-size: inherit;
42
- padding: 0; margin: 0;
43
- white-space: pre;
44
- word-wrap: normal;
45
- line-height: inherit;
46
- color: inherit;
47
- }
48
-
49
- .CodeMirror-wrap pre {
50
- word-wrap: break-word;
51
- white-space: pre-wrap;
52
- word-break: normal;
53
- }
54
- .CodeMirror-wrap .CodeMirror-scroll {
55
- overflow-x: hidden;
56
- }
57
-
58
- .CodeMirror textarea {
59
- outline: none !important;
60
- }
61
-
62
- .CodeMirror pre.CodeMirror-cursor {
63
- z-index: 10;
64
- position: absolute;
65
- visibility: hidden;
66
- border-left: 1px solid black;
67
- border-right: none;
68
- width: 0;
69
- }
70
- .cm-keymap-fat-cursor pre.CodeMirror-cursor {
71
- width: auto;
72
- border: 0;
73
- background: transparent;
74
- background: rgba(0, 200, 0, .4);
75
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#6600c800, endColorstr=#4c00c800);
76
- }
77
- /* Kludge to turn off filter in ie9+, which also accepts rgba */
78
- .cm-keymap-fat-cursor pre.CodeMirror-cursor:not(#nonsense_id) {
79
- filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
80
- }
81
- .CodeMirror pre.CodeMirror-cursor.CodeMirror-overwrite {}
82
- .CodeMirror-focused pre.CodeMirror-cursor {
83
- visibility: visible;
84
- }
85
-
86
- div.CodeMirror-selected { background: #d9d9d9; }
87
- .CodeMirror-focused div.CodeMirror-selected { background: #d7d4f0; }
88
-
89
- .CodeMirror-searching {
90
- background: #ffa;
91
- background: rgba(255, 255, 0, .4);
92
- }
93
-
94
- /* Default theme */
95
-
96
- .cm-s-default span.cm-keyword {color: #708;}
97
- .cm-s-default span.cm-atom {color: #219;}
98
- .cm-s-default span.cm-number {color: #164;}
99
- .cm-s-default span.cm-def {color: #00f;}
100
- .cm-s-default span.cm-variable {color: black;}
101
- .cm-s-default span.cm-variable-2 {color: #05a;}
102
- .cm-s-default span.cm-variable-3 {color: #085;}
103
- .cm-s-default span.cm-property {color: black;}
104
- .cm-s-default span.cm-operator {color: black;}
105
- .cm-s-default span.cm-comment {color: #a50;}
106
- .cm-s-default span.cm-string {color: #a11;}
107
- .cm-s-default span.cm-string-2 {color: #f50;}
108
- .cm-s-default span.cm-meta {color: #555;}
109
- .cm-s-default span.cm-error {color: #f00;}
110
- .cm-s-default span.cm-qualifier {color: #555;}
111
- .cm-s-default span.cm-builtin {color: #30a;}
112
- .cm-s-default span.cm-bracket {color: #cc7;}
113
- .cm-s-default span.cm-tag {color: #170;}
114
- .cm-s-default span.cm-attribute {color: #00c;}
115
- .cm-s-default span.cm-header {color: blue;}
116
- .cm-s-default span.cm-quote {color: #090;}
117
- .cm-s-default span.cm-hr {color: #999;}
118
- .cm-s-default span.cm-link {color: #00c;}
119
-
120
- span.cm-header, span.cm-strong {font-weight: bold;}
121
- span.cm-em {font-style: italic;}
122
- span.cm-emstrong {font-style: italic; font-weight: bold;}
123
- span.cm-link {text-decoration: underline;}
124
-
125
- div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;}
126
- div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/CodeMirror2/lib/codemirror.js DELETED
@@ -1,3074 +0,0 @@
1
- // All functions that need access to the editor's state live inside
2
- // the CodeMirror function. Below that, at the bottom of the file,
3
- // some utilities are defined.
4
-
5
- // CodeMirror is the only global var we claim
6
- var CodeMirror = (function() {
7
- // This is the function that produces an editor instance. Its
8
- // closure is used to store the editor state.
9
- function CodeMirror(place, givenOptions) {
10
- // Determine effective options based on given values and defaults.
11
- var options = {}, defaults = CodeMirror.defaults;
12
- for (var opt in defaults)
13
- if (defaults.hasOwnProperty(opt))
14
- options[opt] = (givenOptions && givenOptions.hasOwnProperty(opt) ? givenOptions : defaults)[opt];
15
-
16
- // The element in which the editor lives.
17
- var wrapper = document.createElement("div");
18
- wrapper.className = "CodeMirror" + (options.lineWrapping ? " CodeMirror-wrap" : "");
19
- // This mess creates the base DOM structure for the editor.
20
- wrapper.innerHTML =
21
- '<div style="overflow: hidden; position: relative; width: 3px; height: 0px;">' + // Wraps and hides input textarea
22
- '<textarea style="position: absolute; padding: 0; width: 1px; height: 1em" wrap="off" ' +
23
- 'autocorrect="off" autocapitalize="off"></textarea></div>' +
24
- '<div class="CodeMirror-scroll" tabindex="-1">' +
25
- '<div style="position: relative">' + // Set to the height of the text, causes scrolling
26
- '<div style="position: relative">' + // Moved around its parent to cover visible view
27
- '<div class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div>' +
28
- // Provides positioning relative to (visible) text origin
29
- '<div class="CodeMirror-lines"><div style="position: relative; z-index: 0">' +
30
- '<div style="position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden;"></div>' +
31
- '<pre class="CodeMirror-cursor">&#160;</pre>' + // Absolutely positioned blinky cursor
32
- '<div style="position: relative; z-index: -1"></div><div></div>' + // DIVs containing the selection and the actual code
33
- '</div></div></div></div></div>';
34
- if (place.appendChild) place.appendChild(wrapper); else place(wrapper);
35
- // I've never seen more elegant code in my life.
36
- var inputDiv = wrapper.firstChild, input = inputDiv.firstChild,
37
- scroller = wrapper.lastChild, code = scroller.firstChild,
38
- mover = code.firstChild, gutter = mover.firstChild, gutterText = gutter.firstChild,
39
- lineSpace = gutter.nextSibling.firstChild, measure = lineSpace.firstChild,
40
- cursor = measure.nextSibling, selectionDiv = cursor.nextSibling,
41
- lineDiv = selectionDiv.nextSibling;
42
- themeChanged(); keyMapChanged();
43
- // Needed to hide big blue blinking cursor on Mobile Safari
44
- if (ios) input.style.width = "0px";
45
- if (!webkit) lineSpace.draggable = true;
46
- lineSpace.style.outline = "none";
47
- if (options.tabindex != null) input.tabIndex = options.tabindex;
48
- if (options.autofocus) focusInput();
49
- if (!options.gutter && !options.lineNumbers) gutter.style.display = "none";
50
- // Needed to handle Tab key in KHTML
51
- if (khtml) inputDiv.style.height = "1px", inputDiv.style.position = "absolute";
52
-
53
- // Check for problem with IE innerHTML not working when we have a
54
- // P (or similar) parent node.
55
- try { stringWidth("x"); }
56
- catch (e) {
57
- if (e.message.match(/runtime/i))
58
- e = new Error("A CodeMirror inside a P-style element does not work in Internet Explorer. (innerHTML bug)");
59
- throw e;
60
- }
61
-
62
- // Delayed object wrap timeouts, making sure only one is active. blinker holds an interval.
63
- var poll = new Delayed(), highlight = new Delayed(), blinker;
64
-
65
- // mode holds a mode API object. doc is the tree of Line objects,
66
- // work an array of lines that should be parsed, and history the
67
- // undo history (instance of History constructor).
68
- var mode, doc = new BranchChunk([new LeafChunk([new Line("")])]), work, focused;
69
- loadMode();
70
- // The selection. These are always maintained to point at valid
71
- // positions. Inverted is used to remember that the user is
72
- // selecting bottom-to-top.
73
- var sel = {from: {line: 0, ch: 0}, to: {line: 0, ch: 0}, inverted: false};
74
- // Selection-related flags. shiftSelecting obviously tracks
75
- // whether the user is holding shift.
76
- var shiftSelecting, lastClick, lastDoubleClick, lastScrollPos = 0, draggingText,
77
- overwrite = false, suppressEdits = false;
78
- // Variables used by startOperation/endOperation to track what
79
- // happened during the operation.
80
- var updateInput, userSelChange, changes, textChanged, selectionChanged, leaveInputAlone,
81
- gutterDirty, callbacks, maxLengthChanged;
82
- // Current visible range (may be bigger than the view window).
83
- var displayOffset = 0, showingFrom = 0, showingTo = 0, lastSizeC = 0;
84
- // bracketHighlighted is used to remember that a bracket has been
85
- // marked.
86
- var bracketHighlighted;
87
- // Tracks the maximum line length so that the horizontal scrollbar
88
- // can be kept static when scrolling.
89
- var maxLine = "", maxWidth;
90
- var tabCache = {};
91
-
92
- // Initialize the content.
93
- operation(function(){setValue(options.value || ""); updateInput = false;})();
94
- var history = new History();
95
-
96
- // Register our event handlers.
97
- connect(scroller, "mousedown", operation(onMouseDown));
98
- connect(scroller, "dblclick", operation(onDoubleClick));
99
- connect(lineSpace, "selectstart", e_preventDefault);
100
- // Gecko browsers fire contextmenu *after* opening the menu, at
101
- // which point we can't mess with it anymore. Context menu is
102
- // handled in onMouseDown for Gecko.
103
- if (!gecko) connect(scroller, "contextmenu", onContextMenu);
104
- connect(scroller, "scroll", function() {
105
- lastScrollPos = scroller.scrollTop;
106
- updateDisplay([]);
107
- if (options.fixedGutter) gutter.style.left = scroller.scrollLeft + "px";
108
- if (options.onScroll) options.onScroll(instance);
109
- });
110
- connect(window, "resize", function() {updateDisplay(true);});
111
- connect(input, "keyup", operation(onKeyUp));
112
- connect(input, "input", fastPoll);
113
- connect(input, "keydown", operation(onKeyDown));
114
- connect(input, "keypress", operation(onKeyPress));
115
- connect(input, "focus", onFocus);
116
- connect(input, "blur", onBlur);
117
-
118
- if (options.dragDrop) {
119
- connect(lineSpace, "dragstart", onDragStart);
120
- function drag_(e) {
121
- if (options.onDragEvent && options.onDragEvent(instance, addStop(e))) return;
122
- e_stop(e);
123
- }
124
- connect(scroller, "dragenter", drag_);
125
- connect(scroller, "dragover", drag_);
126
- connect(scroller, "drop", operation(onDrop));
127
- }
128
- connect(scroller, "paste", function(){focusInput(); fastPoll();});
129
- connect(input, "paste", fastPoll);
130
- connect(input, "cut", operation(function(){
131
- if (!options.readOnly) replaceSelection("");
132
- }));
133
-
134
- // Needed to handle Tab key in KHTML
135
- if (khtml) connect(code, "mouseup", function() {
136
- if (document.activeElement == input) input.blur();
137
- focusInput();
138
- });
139
-
140
- // IE throws unspecified error in certain cases, when
141
- // trying to access activeElement before onload
142
- var hasFocus; try { hasFocus = (document.activeElement == input); } catch(e) { }
143
- if (hasFocus || options.autofocus) setTimeout(onFocus, 20);
144
- else onBlur();
145
-
146
- function isLine(l) {return l >= 0 && l < doc.size;}
147
- // The instance object that we'll return. Mostly calls out to
148
- // local functions in the CodeMirror function. Some do some extra
149
- // range checking and/or clipping. operation is used to wrap the
150
- // call so that changes it makes are tracked, and the display is
151
- // updated afterwards.
152
- var instance = wrapper.CodeMirror = {
153
- getValue: getValue,
154
- setValue: operation(setValue),
155
- getSelection: getSelection,
156
- replaceSelection: operation(replaceSelection),
157
- focus: function(){window.focus(); focusInput(); onFocus(); fastPoll();},
158
- setOption: function(option, value) {
159
- var oldVal = options[option];
160
- options[option] = value;
161
- if (option == "mode" || option == "indentUnit") loadMode();
162
- else if (option == "readOnly" && value == "nocursor") {onBlur(); input.blur();}
163
- else if (option == "readOnly" && !value) {resetInput(true);}
164
- else if (option == "theme") themeChanged();
165
- else if (option == "lineWrapping" && oldVal != value) operation(wrappingChanged)();
166
- else if (option == "tabSize") updateDisplay(true);
167
- else if (option == "keyMap") keyMapChanged();
168
- if (option == "lineNumbers" || option == "gutter" || option == "firstLineNumber" || option == "theme") {
169
- gutterChanged();
170
- updateDisplay(true);
171
- }
172
- },
173
- getOption: function(option) {return options[option];},
174
- undo: operation(undo),
175
- redo: operation(redo),
176
- indentLine: operation(function(n, dir) {
177
- if (typeof dir != "string") {
178
- if (dir == null) dir = options.smartIndent ? "smart" : "prev";
179
- else dir = dir ? "add" : "subtract";
180
- }
181
- if (isLine(n)) indentLine(n, dir);
182
- }),
183
- indentSelection: operation(indentSelected),
184
- historySize: function() {return {undo: history.done.length, redo: history.undone.length};},
185
- clearHistory: function() {history = new History();},
186
- matchBrackets: operation(function(){matchBrackets(true);}),
187
- getTokenAt: operation(function(pos) {
188
- pos = clipPos(pos);
189
- return getLine(pos.line).getTokenAt(mode, getStateBefore(pos.line), pos.ch);
190
- }),
191
- getStateAfter: function(line) {
192
- line = clipLine(line == null ? doc.size - 1: line);
193
- return getStateBefore(line + 1);
194
- },
195
- cursorCoords: function(start, mode) {
196
- if (start == null) start = sel.inverted;
197
- return this.charCoords(start ? sel.from : sel.to, mode);
198
- },
199
- charCoords: function(pos, mode) {
200
- pos = clipPos(pos);
201
- if (mode == "local") return localCoords(pos, false);
202
- if (mode == "div") return localCoords(pos, true);
203
- return pageCoords(pos);
204
- },
205
- coordsChar: function(coords) {
206
- var off = eltOffset(lineSpace);
207
- return coordsChar(coords.x - off.left, coords.y - off.top);
208
- },
209
- markText: operation(markText),
210
- setBookmark: setBookmark,
211
- findMarksAt: findMarksAt,
212
- setMarker: operation(addGutterMarker),
213
- clearMarker: operation(removeGutterMarker),
214
- setLineClass: operation(setLineClass),
215
- hideLine: operation(function(h) {return setLineHidden(h, true);}),
216
- showLine: operation(function(h) {return setLineHidden(h, false);}),
217
- onDeleteLine: function(line, f) {
218
- if (typeof line == "number") {
219
- if (!isLine(line)) return null;
220
- line = getLine(line);
221
- }
222
- (line.handlers || (line.handlers = [])).push(f);
223
- return line;
224
- },
225
- lineInfo: lineInfo,
226
- addWidget: function(pos, node, scroll, vert, horiz) {
227
- pos = localCoords(clipPos(pos));
228
- var top = pos.yBot, left = pos.x;
229
- node.style.position = "absolute";
230
- code.appendChild(node);
231
- if (vert == "over") top = pos.y;
232
- else if (vert == "near") {
233
- var vspace = Math.max(scroller.offsetHeight, doc.height * textHeight()),
234
- hspace = Math.max(code.clientWidth, lineSpace.clientWidth) - paddingLeft();
235
- if (pos.yBot + node.offsetHeight > vspace && pos.y > node.offsetHeight)
236
- top = pos.y - node.offsetHeight;
237
- if (left + node.offsetWidth > hspace)
238
- left = hspace - node.offsetWidth;
239
- }
240
- node.style.top = (top + paddingTop()) + "px";
241
- node.style.left = node.style.right = "";
242
- if (horiz == "right") {
243
- left = code.clientWidth - node.offsetWidth;
244
- node.style.right = "0px";
245
- } else {
246
- if (horiz == "left") left = 0;
247
- else if (horiz == "middle") left = (code.clientWidth - node.offsetWidth) / 2;
248
- node.style.left = (left + paddingLeft()) + "px";
249
- }
250
- if (scroll)
251
- scrollIntoView(left, top, left + node.offsetWidth, top + node.offsetHeight);
252
- },
253
-
254
- lineCount: function() {return doc.size;},
255
- clipPos: clipPos,
256
- getCursor: function(start) {
257
- if (start == null) start = sel.inverted;
258
- return copyPos(start ? sel.from : sel.to);
259
- },
260
- somethingSelected: function() {return !posEq(sel.from, sel.to);},
261
- setCursor: operation(function(line, ch, user) {
262
- if (ch == null && typeof line.line == "number") setCursor(line.line, line.ch, user);
263
- else setCursor(line, ch, user);
264
- }),
265
- setSelection: operation(function(from, to, user) {
266
- (user ? setSelectionUser : setSelection)(clipPos(from), clipPos(to || from));
267
- }),
268
- getLine: function(line) {if (isLine(line)) return getLine(line).text;},
269
- getLineHandle: function(line) {if (isLine(line)) return getLine(line);},
270
- setLine: operation(function(line, text) {
271
- if (isLine(line)) replaceRange(text, {line: line, ch: 0}, {line: line, ch: getLine(line).text.length});
272
- }),
273
- removeLine: operation(function(line) {
274
- if (isLine(line)) replaceRange("", {line: line, ch: 0}, clipPos({line: line+1, ch: 0}));
275
- }),
276
- replaceRange: operation(replaceRange),
277
- getRange: function(from, to) {return getRange(clipPos(from), clipPos(to));},
278
-
279
- triggerOnKeyDown: operation(onKeyDown),
280
- execCommand: function(cmd) {return commands[cmd](instance);},
281
- // Stuff used by commands, probably not much use to outside code.
282
- moveH: operation(moveH),
283
- deleteH: operation(deleteH),
284
- moveV: operation(moveV),
285
- toggleOverwrite: function() {
286
- if(overwrite){
287
- overwrite = false;
288
- cursor.className = cursor.className.replace(" CodeMirror-overwrite", "");
289
- } else {
290
- overwrite = true;
291
- cursor.className += " CodeMirror-overwrite";
292
- }
293
- },
294
-
295
- posFromIndex: function(off) {
296
- var lineNo = 0, ch;
297
- doc.iter(0, doc.size, function(line) {
298
- var sz = line.text.length + 1;
299
- if (sz > off) { ch = off; return true; }
300
- off -= sz;
301
- ++lineNo;
302
- });
303
- return clipPos({line: lineNo, ch: ch});
304
- },
305
- indexFromPos: function (coords) {
306
- if (coords.line < 0 || coords.ch < 0) return 0;
307
- var index = coords.ch;
308
- doc.iter(0, coords.line, function (line) {
309
- index += line.text.length + 1;
310
- });
311
- return index;
312
- },
313
- scrollTo: function(x, y) {
314
- if (x != null) scroller.scrollLeft = x;
315
- if (y != null) scroller.scrollTop = y;
316
- updateDisplay([]);
317
- },
318
-
319
- operation: function(f){return operation(f)();},
320
- compoundChange: function(f){return compoundChange(f);},
321
- refresh: function(){
322
- updateDisplay(true);
323
- if (scroller.scrollHeight > lastScrollPos)
324
- scroller.scrollTop = lastScrollPos;
325
- },
326
- getInputField: function(){return input;},
327
- getWrapperElement: function(){return wrapper;},
328
- getScrollerElement: function(){return scroller;},
329
- getGutterElement: function(){return gutter;}
330
- };
331
-
332
- function getLine(n) { return getLineAt(doc, n); }
333
- function updateLineHeight(line, height) {
334
- gutterDirty = true;
335
- var diff = height - line.height;
336
- for (var n = line; n; n = n.parent) n.height += diff;
337
- }
338
-
339
- function setValue(code) {
340
- var top = {line: 0, ch: 0};
341
- updateLines(top, {line: doc.size - 1, ch: getLine(doc.size-1).text.length},
342
- splitLines(code), top, top);
343
- updateInput = true;
344
- }
345
- function getValue() {
346
- var text = [];
347
- doc.iter(0, doc.size, function(line) { text.push(line.text); });
348
- return text.join("\n");
349
- }
350
-
351
- function onMouseDown(e) {
352
- setShift(e_prop(e, "shiftKey"));
353
- // Check whether this is a click in a widget
354
- for (var n = e_target(e); n != wrapper; n = n.parentNode)
355
- if (n.parentNode == code && n != mover) return;
356
-
357
- // See if this is a click in the gutter
358
- for (var n = e_target(e); n != wrapper; n = n.parentNode)
359
- if (n.parentNode == gutterText) {
360
- if (options.onGutterClick)
361
- options.onGutterClick(instance, indexOf(gutterText.childNodes, n) + showingFrom, e);
362
- return e_preventDefault(e);
363
- }
364
-
365
- var start = posFromMouse(e);
366
-
367
- switch (e_button(e)) {
368
- case 3:
369
- if (gecko && !mac) onContextMenu(e);
370
- return;
371
- case 2:
372
- if (start) setCursor(start.line, start.ch, true);
373
- setTimeout(focusInput, 20);
374
- return;
375
- }
376
- // For button 1, if it was clicked inside the editor
377
- // (posFromMouse returning non-null), we have to adjust the
378
- // selection.
379
- if (!start) {if (e_target(e) == scroller) e_preventDefault(e); return;}
380
-
381
- if (!focused) onFocus();
382
-
383
- var now = +new Date;
384
- if (lastDoubleClick && lastDoubleClick.time > now - 400 && posEq(lastDoubleClick.pos, start)) {
385
- e_preventDefault(e);
386
- setTimeout(focusInput, 20);
387
- return selectLine(start.line);
388
- } else if (lastClick && lastClick.time > now - 400 && posEq(lastClick.pos, start)) {
389
- lastDoubleClick = {time: now, pos: start};
390
- e_preventDefault(e);
391
- return selectWordAt(start);
392
- } else { lastClick = {time: now, pos: start}; }
393
-
394
- var last = start, going;
395
- if (options.dragDrop && dragAndDrop && !options.readOnly && !posEq(sel.from, sel.to) &&
396
- !posLess(start, sel.from) && !posLess(sel.to, start)) {
397
- // Let the drag handler handle this.
398
- if (webkit) lineSpace.draggable = true;
399
- function dragEnd(e2) {
400
- if (webkit) lineSpace.draggable = false;
401
- draggingText = false;
402
- up(); drop();
403
- if (Math.abs(e.clientX - e2.clientX) + Math.abs(e.clientY - e2.clientY) < 10) {
404
- e_preventDefault(e2);
405
- setCursor(start.line, start.ch, true);
406
- focusInput();
407
- }
408
- }
409
- var up = connect(document, "mouseup", operation(dragEnd), true);
410
- var drop = connect(scroller, "drop", operation(dragEnd), true);
411
- draggingText = true;
412
- // IE's approach to draggable
413
- if (lineSpace.dragDrop) lineSpace.dragDrop();
414
- return;
415
- }
416
- e_preventDefault(e);
417
- setCursor(start.line, start.ch, true);
418
-
419
- function extend(e) {
420
- var cur = posFromMouse(e, true);
421
- if (cur && !posEq(cur, last)) {
422
- if (!focused) onFocus();
423
- last = cur;
424
- setSelectionUser(start, cur);
425
- updateInput = false;
426
- var visible = visibleLines();
427
- if (cur.line >= visible.to || cur.line < visible.from)
428
- going = setTimeout(operation(function(){extend(e);}), 150);
429
- }
430
- }
431
-
432
- function done(e) {
433
- clearTimeout(going);
434
- var cur = posFromMouse(e);
435
- if (cur) setSelectionUser(start, cur);
436
- e_preventDefault(e);
437
- focusInput();
438
- updateInput = true;
439
- move(); up();
440
- }
441
- var move = connect(document, "mousemove", operation(function(e) {
442
- clearTimeout(going);
443
- e_preventDefault(e);
444
- if (!ie && !e_button(e)) done(e);
445
- else extend(e);
446
- }), true);
447
- var up = connect(document, "mouseup", operation(done), true);
448
- }
449
- function onDoubleClick(e) {
450
- for (var n = e_target(e); n != wrapper; n = n.parentNode)
451
- if (n.parentNode == gutterText) return e_preventDefault(e);
452
- var start = posFromMouse(e);
453
- if (!start) return;
454
- lastDoubleClick = {time: +new Date, pos: start};
455
- e_preventDefault(e);
456
- selectWordAt(start);
457
- }
458
- function onDrop(e) {
459
- if (options.onDragEvent && options.onDragEvent(instance, addStop(e))) return;
460
- e.preventDefault();
461
- var pos = posFromMouse(e, true), files = e.dataTransfer.files;
462
- if (!pos || options.readOnly) return;
463
- if (files && files.length && window.FileReader && window.File) {
464
- function loadFile(file, i) {
465
- var reader = new FileReader;
466
- reader.onload = function() {
467
- text[i] = reader.result;
468
- if (++read == n) {
469
- pos = clipPos(pos);
470
- operation(function() {
471
- var end = replaceRange(text.join(""), pos, pos);
472
- setSelectionUser(pos, end);
473
- })();
474
- }
475
- };
476
- reader.readAsText(file);
477
- }
478
- var n = files.length, text = Array(n), read = 0;
479
- for (var i = 0; i < n; ++i) loadFile(files[i], i);
480
- }
481
- else {
482
- try {
483
- var text = e.dataTransfer.getData("Text");
484
- if (text) {
485
- compoundChange(function() {
486
- var curFrom = sel.from, curTo = sel.to;
487
- setSelectionUser(pos, pos);
488
- if (draggingText) replaceRange("", curFrom, curTo);
489
- replaceSelection(text);
490
- focusInput();
491
- });
492
- }
493
- }
494
- catch(e){}
495
- }
496
- }
497
- function onDragStart(e) {
498
- var txt = getSelection();
499
- e.dataTransfer.setData("Text", txt);
500
-
501
- // Use dummy image instead of default browsers image.
502
- if (gecko || chrome) {
503
- var img = document.createElement('img');
504
- img.scr = 'data:image/gif;base64,R0lGODdhAgACAIAAAAAAAP///ywAAAAAAgACAAACAoRRADs='; //1x1 image
505
- e.dataTransfer.setDragImage(img, 0, 0);
506
- }
507
- }
508
-
509
- function doHandleBinding(bound, dropShift) {
510
- if (typeof bound == "string") {
511
- bound = commands[bound];
512
- if (!bound) return false;
513
- }
514
- var prevShift = shiftSelecting;
515
- try {
516
- if (options.readOnly) suppressEdits = true;
517
- if (dropShift) shiftSelecting = null;
518
- bound(instance);
519
- } catch(e) {
520
- if (e != Pass) throw e;
521
- return false;
522
- } finally {
523
- shiftSelecting = prevShift;
524
- suppressEdits = false;
525
- }
526
- return true;
527
- }
528
- function handleKeyBinding(e) {
529
- // Handle auto keymap transitions
530
- var startMap = getKeyMap(options.keyMap), next = startMap.auto;
531
- clearTimeout(maybeTransition);
532
- if (next && !isModifierKey(e)) maybeTransition = setTimeout(function() {
533
- if (getKeyMap(options.keyMap) == startMap) {
534
- options.keyMap = (next.call ? next.call(null, instance) : next);
535
- }
536
- }, 50);
537
-
538
- var name = keyNames[e_prop(e, "keyCode")], handled = false;
539
- if (name == null || e.altGraphKey) return false;
540
- if (e_prop(e, "altKey")) name = "Alt-" + name;
541
- if (e_prop(e, "ctrlKey")) name = "Ctrl-" + name;
542
- if (e_prop(e, "metaKey")) name = "Cmd-" + name;
543
-
544
- var stopped = false;
545
- function stop() { stopped = true; }
546
-
547
- if (e_prop(e, "shiftKey")) {
548
- handled = lookupKey("Shift-" + name, options.extraKeys, options.keyMap,
549
- function(b) {return doHandleBinding(b, true);}, stop)
550
- || lookupKey(name, options.extraKeys, options.keyMap, function(b) {
551
- if (typeof b == "string" && /^go[A-Z]/.test(b)) return doHandleBinding(b);
552
- }, stop);
553
- } else {
554
- handled = lookupKey(name, options.extraKeys, options.keyMap, doHandleBinding, stop);
555
- }
556
- if (stopped) handled = false;
557
- if (handled) {
558
- e_preventDefault(e);
559
- restartBlink();
560
- if (ie) { e.oldKeyCode = e.keyCode; e.keyCode = 0; }
561
- }
562
- return handled;
563
- }
564
- function handleCharBinding(e, ch) {
565
- var handled = lookupKey("'" + ch + "'", options.extraKeys,
566
- options.keyMap, function(b) { return doHandleBinding(b, true); });
567
- if (handled) {
568
- e_preventDefault(e);
569
- restartBlink();
570
- }
571
- return handled;
572
- }
573
-
574
- var lastStoppedKey = null, maybeTransition;
575
- function onKeyDown(e) {
576
- if (!focused) onFocus();
577
- if (ie && e.keyCode == 27) { e.returnValue = false; }
578
- if (pollingFast) { if (readInput()) pollingFast = false; }
579
- if (options.onKeyEvent && options.onKeyEvent(instance, addStop(e))) return;
580
- var code = e_prop(e, "keyCode");
581
- // IE does strange things with escape.
582
- setShift(code == 16 || e_prop(e, "shiftKey"));
583
- // First give onKeyEvent option a chance to handle this.
584
- var handled = handleKeyBinding(e);
585
- if (window.opera) {
586
- lastStoppedKey = handled ? code : null;
587
- // Opera has no cut event... we try to at least catch the key combo
588
- if (!handled && code == 88 && e_prop(e, mac ? "metaKey" : "ctrlKey"))
589
- replaceSelection("");
590
- }
591
- }
592
- function onKeyPress(e) {
593
- if (pollingFast) readInput();
594
- if (options.onKeyEvent && options.onKeyEvent(instance, addStop(e))) return;
595
- var keyCode = e_prop(e, "keyCode"), charCode = e_prop(e, "charCode");
596
- if (window.opera && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return;}
597
- if (((window.opera && (!e.which || e.which < 10)) || khtml) && handleKeyBinding(e)) return;
598
- var ch = String.fromCharCode(charCode == null ? keyCode : charCode);
599
- if (options.electricChars && mode.electricChars && options.smartIndent && !options.readOnly) {
600
- if (mode.electricChars.indexOf(ch) > -1)
601
- setTimeout(operation(function() {indentLine(sel.to.line, "smart");}), 75);
602
- }
603
- if (handleCharBinding(e, ch)) return;
604
- fastPoll();
605
- }
606
- function onKeyUp(e) {
607
- if (options.onKeyEvent && options.onKeyEvent(instance, addStop(e))) return;
608
- if (e_prop(e, "keyCode") == 16) shiftSelecting = null;
609
- }
610
-
611
- function onFocus() {
612
- if (options.readOnly == "nocursor") return;
613
- if (!focused) {
614
- if (options.onFocus) options.onFocus(instance);
615
- focused = true;
616
- if (wrapper.className.search(/\bCodeMirror-focused\b/) == -1)
617
- wrapper.className += " CodeMirror-focused";
618
- if (!leaveInputAlone) resetInput(true);
619
- }
620
- slowPoll();
621
- restartBlink();
622
- }
623
- function onBlur() {
624
- if (focused) {
625
- if (options.onBlur) options.onBlur(instance);
626
- focused = false;
627
- if (bracketHighlighted)
628
- operation(function(){
629
- if (bracketHighlighted) { bracketHighlighted(); bracketHighlighted = null; }
630
- })();
631
- wrapper.className = wrapper.className.replace(" CodeMirror-focused", "");
632
- }
633
- clearInterval(blinker);
634
- setTimeout(function() {if (!focused) shiftSelecting = null;}, 150);
635
- }
636
-
637
- // Replace the range from from to to by the strings in newText.
638
- // Afterwards, set the selection to selFrom, selTo.
639
- function updateLines(from, to, newText, selFrom, selTo) {
640
- if (suppressEdits) return;
641
- if (history) {
642
- var old = [];
643
- doc.iter(from.line, to.line + 1, function(line) { old.push(line.text); });
644
- history.addChange(from.line, newText.length, old);
645
- while (history.done.length > options.undoDepth) history.done.shift();
646
- }
647
- updateLinesNoUndo(from, to, newText, selFrom, selTo);
648
- }
649
- function unredoHelper(from, to) {
650
- if (!from.length) return;
651
- var set = from.pop(), out = [];
652
- for (var i = set.length - 1; i >= 0; i -= 1) {
653
- var change = set[i];
654
- var replaced = [], end = change.start + change.added;
655
- doc.iter(change.start, end, function(line) { replaced.push(line.text); });
656
- out.push({start: change.start, added: change.old.length, old: replaced});
657
- var pos = clipPos({line: change.start + change.old.length - 1,
658
- ch: editEnd(replaced[replaced.length-1], change.old[change.old.length-1])});
659
- updateLinesNoUndo({line: change.start, ch: 0}, {line: end - 1, ch: getLine(end-1).text.length}, change.old, pos, pos);
660
- }
661
- updateInput = true;
662
- to.push(out);
663
- }
664
- function undo() {unredoHelper(history.done, history.undone);}
665
- function redo() {unredoHelper(history.undone, history.done);}
666
-
667
- function updateLinesNoUndo(from, to, newText, selFrom, selTo) {
668
- if (suppressEdits) return;
669
- var recomputeMaxLength = false, maxLineLength = maxLine.length;
670
- if (!options.lineWrapping)
671
- doc.iter(from.line, to.line + 1, function(line) {
672
- if (!line.hidden && line.text.length == maxLineLength) {recomputeMaxLength = true; return true;}
673
- });
674
- if (from.line != to.line || newText.length > 1) gutterDirty = true;
675
-
676
- var nlines = to.line - from.line, firstLine = getLine(from.line), lastLine = getLine(to.line);
677
- // First adjust the line structure, taking some care to leave highlighting intact.
678
- if (from.ch == 0 && to.ch == 0 && newText[newText.length - 1] == "") {
679
- // This is a whole-line replace. Treated specially to make
680
- // sure line objects move the way they are supposed to.
681
- var added = [], prevLine = null;
682
- if (from.line) {
683
- prevLine = getLine(from.line - 1);
684
- prevLine.fixMarkEnds(lastLine);
685
- } else lastLine.fixMarkStarts();
686
- for (var i = 0, e = newText.length - 1; i < e; ++i)
687
- added.push(Line.inheritMarks(newText[i], prevLine));
688
- if (nlines) doc.remove(from.line, nlines, callbacks);
689
- if (added.length) doc.insert(from.line, added);
690
- } else if (firstLine == lastLine) {
691
- if (newText.length == 1)
692
- firstLine.replace(from.ch, to.ch, newText[0]);
693
- else {
694
- lastLine = firstLine.split(to.ch, newText[newText.length-1]);
695
- firstLine.replace(from.ch, null, newText[0]);
696
- firstLine.fixMarkEnds(lastLine);
697
- var added = [];
698
- for (var i = 1, e = newText.length - 1; i < e; ++i)
699
- added.push(Line.inheritMarks(newText[i], firstLine));
700
- added.push(lastLine);
701
- doc.insert(from.line + 1, added);
702
- }
703
- } else if (newText.length == 1) {
704
- firstLine.replace(from.ch, null, newText[0]);
705
- lastLine.replace(null, to.ch, "");
706
- firstLine.append(lastLine);
707
- doc.remove(from.line + 1, nlines, callbacks);
708
- } else {
709
- var added = [];
710
- firstLine.replace(from.ch, null, newText[0]);
711
- lastLine.replace(null, to.ch, newText[newText.length-1]);
712
- firstLine.fixMarkEnds(lastLine);
713
- for (var i = 1, e = newText.length - 1; i < e; ++i)
714
- added.push(Line.inheritMarks(newText[i], firstLine));
715
- if (nlines > 1) doc.remove(from.line + 1, nlines - 1, callbacks);
716
- doc.insert(from.line + 1, added);
717
- }
718
- if (options.lineWrapping) {
719
- var perLine = Math.max(5, scroller.clientWidth / charWidth() - 3);
720
- doc.iter(from.line, from.line + newText.length, function(line) {
721
- if (line.hidden) return;
722
- var guess = Math.ceil(line.text.length / perLine) || 1;
723
- if (guess != line.height) updateLineHeight(line, guess);
724
- });
725
- } else {
726
- doc.iter(from.line, from.line + newText.length, function(line) {
727
- var l = line.text;
728
- if (!line.hidden && l.length > maxLineLength) {
729
- maxLine = l; maxLineLength = l.length; maxWidth = null;
730
- recomputeMaxLength = false;
731
- }
732
- });
733
- if (recomputeMaxLength) maxLengthChanged = true;
734
- }
735
-
736
- // Add these lines to the work array, so that they will be
737
- // highlighted. Adjust work lines if lines were added/removed.
738
- var newWork = [], lendiff = newText.length - nlines - 1;
739
- for (var i = 0, l = work.length; i < l; ++i) {
740
- var task = work[i];
741
- if (task < from.line) newWork.push(task);
742
- else if (task > to.line) newWork.push(task + lendiff);
743
- }
744
- var hlEnd = from.line + Math.min(newText.length, 500);
745
- highlightLines(from.line, hlEnd);
746
- newWork.push(hlEnd);
747
- work = newWork;
748
- startWorker(100);
749
- // Remember that these lines changed, for updating the display
750
- changes.push({from: from.line, to: to.line + 1, diff: lendiff});
751
- var changeObj = {from: from, to: to, text: newText};
752
- if (textChanged) {
753
- for (var cur = textChanged; cur.next; cur = cur.next) {}
754
- cur.next = changeObj;
755
- } else textChanged = changeObj;
756
-
757
- // Update the selection
758
- function updateLine(n) {return n <= Math.min(to.line, to.line + lendiff) ? n : n + lendiff;}
759
- setSelection(selFrom, selTo, updateLine(sel.from.line), updateLine(sel.to.line));
760
-
761
- // Make sure the scroll-size div has the correct height.
762
- if (scroller.clientHeight)
763
- code.style.height = (doc.height * textHeight() + 2 * paddingTop()) + "px";
764
- }
765
-
766
- function computeMaxLength() {
767
- var maxLineLength = 0;
768
- maxLine = ""; maxWidth = null;
769
- doc.iter(0, doc.size, function(line) {
770
- var l = line.text;
771
- if (!line.hidden && l.length > maxLineLength) {
772
- maxLineLength = l.length; maxLine = l;
773
- }
774
- });
775
- maxLengthChanged = false;
776
- }
777
-
778
- function replaceRange(code, from, to) {
779
- from = clipPos(from);
780
- if (!to) to = from; else to = clipPos(to);
781
- code = splitLines(code);
782
- function adjustPos(pos) {
783
- if (posLess(pos, from)) return pos;
784
- if (!posLess(to, pos)) return end;
785
- var line = pos.line + code.length - (to.line - from.line) - 1;
786
- var ch = pos.ch;
787
- if (pos.line == to.line)
788
- ch += code[code.length-1].length - (to.ch - (to.line == from.line ? from.ch : 0));
789
- return {line: line, ch: ch};
790
- }
791
- var end;
792
- replaceRange1(code, from, to, function(end1) {
793
- end = end1;
794
- return {from: adjustPos(sel.from), to: adjustPos(sel.to)};
795
- });
796
- return end;
797
- }
798
- function replaceSelection(code, collapse) {
799
- replaceRange1(splitLines(code), sel.from, sel.to, function(end) {
800
- if (collapse == "end") return {from: end, to: end};
801
- else if (collapse == "start") return {from: sel.from, to: sel.from};
802
- else return {from: sel.from, to: end};
803
- });
804
- }
805
- function replaceRange1(code, from, to, computeSel) {
806
- var endch = code.length == 1 ? code[0].length + from.ch : code[code.length-1].length;
807
- var newSel = computeSel({line: from.line + code.length - 1, ch: endch});
808
- updateLines(from, to, code, newSel.from, newSel.to);
809
- }
810
-
811
- function getRange(from, to) {
812
- var l1 = from.line, l2 = to.line;
813
- if (l1 == l2) return getLine(l1).text.slice(from.ch, to.ch);
814
- var code = [getLine(l1).text.slice(from.ch)];
815
- doc.iter(l1 + 1, l2, function(line) { code.push(line.text); });
816
- code.push(getLine(l2).text.slice(0, to.ch));
817
- return code.join("\n");
818
- }
819
- function getSelection() {
820
- return getRange(sel.from, sel.to);
821
- }
822
-
823
- var pollingFast = false; // Ensures slowPoll doesn't cancel fastPoll
824
- function slowPoll() {
825
- if (pollingFast) return;
826
- poll.set(options.pollInterval, function() {
827
- startOperation();
828
- readInput();
829
- if (focused) slowPoll();
830
- endOperation();
831
- });
832
- }
833
- function fastPoll() {
834
- var missed = false;
835
- pollingFast = true;
836
- function p() {
837
- startOperation();
838
- var changed = readInput();
839
- if (!changed && !missed) {missed = true; poll.set(60, p);}
840
- else {pollingFast = false; slowPoll();}
841
- endOperation();
842
- }
843
- poll.set(20, p);
844
- }
845
-
846
- // Previnput is a hack to work with IME. If we reset the textarea
847
- // on every change, that breaks IME. So we look for changes
848
- // compared to the previous content instead. (Modern browsers have
849
- // events that indicate IME taking place, but these are not widely
850
- // supported or compatible enough yet to rely on.)
851
- var prevInput = "";
852
- function readInput() {
853
- if (leaveInputAlone || !focused || hasSelection(input) || options.readOnly) return false;
854
- var text = input.value;
855
- if (text == prevInput) return false;
856
- shiftSelecting = null;
857
- var same = 0, l = Math.min(prevInput.length, text.length);
858
- while (same < l && prevInput[same] == text[same]) ++same;
859
- if (same < prevInput.length)
860
- sel.from = {line: sel.from.line, ch: sel.from.ch - (prevInput.length - same)};
861
- else if (overwrite && posEq(sel.from, sel.to))
862
- sel.to = {line: sel.to.line, ch: Math.min(getLine(sel.to.line).text.length, sel.to.ch + (text.length - same))};
863
- replaceSelection(text.slice(same), "end");
864
- if (text.length > 1000) { input.value = prevInput = ""; }
865
- else prevInput = text;
866
- return true;
867
- }
868
- function resetInput(user) {
869
- if (!posEq(sel.from, sel.to)) {
870
- prevInput = "";
871
- input.value = getSelection();
872
- selectInput(input);
873
- } else if (user) prevInput = input.value = "";
874
- }
875
-
876
- function focusInput() {
877
- if (options.readOnly != "nocursor") input.focus();
878
- }
879
-
880
- function scrollEditorIntoView() {
881
- if (!cursor.getBoundingClientRect) return;
882
- var rect = cursor.getBoundingClientRect();
883
- // IE returns bogus coordinates when the instance sits inside of an iframe and the cursor is hidden
884
- if (ie && rect.top == rect.bottom) return;
885
- var winH = window.innerHeight || Math.max(document.body.offsetHeight, document.documentElement.offsetHeight);
886
- if (rect.top < 0 || rect.bottom > winH) cursor.scrollIntoView();
887
- }
888
- function scrollCursorIntoView() {
889
- var cursor = localCoords(sel.inverted ? sel.from : sel.to);
890
- var x = options.lineWrapping ? Math.min(cursor.x, lineSpace.offsetWidth) : cursor.x;
891
- return scrollIntoView(x, cursor.y, x, cursor.yBot);
892
- }
893
- function scrollIntoView(x1, y1, x2, y2) {
894
- var pl = paddingLeft(), pt = paddingTop();
895
- y1 += pt; y2 += pt; x1 += pl; x2 += pl;
896
- var screen = scroller.clientHeight, screentop = scroller.scrollTop, scrolled = false, result = true;
897
- if (y1 < screentop) {scroller.scrollTop = Math.max(0, y1); scrolled = true;}
898
- else if (y2 > screentop + screen) {scroller.scrollTop = y2 - screen; scrolled = true;}
899
-
900
- var screenw = scroller.clientWidth, screenleft = scroller.scrollLeft;
901
- var gutterw = options.fixedGutter ? gutter.clientWidth : 0;
902
- var atLeft = x1 < gutterw + pl + 10;
903
- if (x1 < screenleft + gutterw || atLeft) {
904
- if (atLeft) x1 = 0;
905
- scroller.scrollLeft = Math.max(0, x1 - 10 - gutterw);
906
- scrolled = true;
907
- }
908
- else if (x2 > screenw + screenleft - 3) {
909
- scroller.scrollLeft = x2 + 10 - screenw;
910
- scrolled = true;
911
- if (x2 > code.clientWidth) result = false;
912
- }
913
- if (scrolled && options.onScroll) options.onScroll(instance);
914
- return result;
915
- }
916
-
917
- function visibleLines() {
918
- var lh = textHeight(), top = scroller.scrollTop - paddingTop();
919
- var fromHeight = Math.max(0, Math.floor(top / lh));
920
- var toHeight = Math.ceil((top + scroller.clientHeight) / lh);
921
- return {from: lineAtHeight(doc, fromHeight),
922
- to: lineAtHeight(doc, toHeight)};
923
- }
924
- // Uses a set of changes plus the current scroll position to
925
- // determine which DOM updates have to be made, and makes the
926
- // updates.
927
- function updateDisplay(changes, suppressCallback) {
928
- if (!scroller.clientWidth) {
929
- showingFrom = showingTo = displayOffset = 0;
930
- return;
931
- }
932
- // Compute the new visible window
933
- var visible = visibleLines();
934
- // Bail out if the visible area is already rendered and nothing changed.
935
- if (changes !== true && changes.length == 0 && visible.from > showingFrom && visible.to < showingTo) return;
936
- var from = Math.max(visible.from - 100, 0), to = Math.min(doc.size, visible.to + 100);
937
- if (showingFrom < from && from - showingFrom < 20) from = showingFrom;
938
- if (showingTo > to && showingTo - to < 20) to = Math.min(doc.size, showingTo);
939
-
940
- // Create a range of theoretically intact lines, and punch holes
941
- // in that using the change info.
942
- var intact = changes === true ? [] :
943
- computeIntact([{from: showingFrom, to: showingTo, domStart: 0}], changes);
944
- // Clip off the parts that won't be visible
945
- var intactLines = 0;
946
- for (var i = 0; i < intact.length; ++i) {
947
- var range = intact[i];
948
- if (range.from < from) {range.domStart += (from - range.from); range.from = from;}
949
- if (range.to > to) range.to = to;
950
- if (range.from >= range.to) intact.splice(i--, 1);
951
- else intactLines += range.to - range.from;
952
- }
953
- if (intactLines == to - from && from == showingFrom && to == showingTo) return;
954
- intact.sort(function(a, b) {return a.domStart - b.domStart;});
955
-
956
- var th = textHeight(), gutterDisplay = gutter.style.display;
957
- lineDiv.style.display = "none";
958
- patchDisplay(from, to, intact);
959
- lineDiv.style.display = gutter.style.display = "";
960
-
961
- // Position the mover div to align with the lines it's supposed
962
- // to be showing (which will cover the visible display)
963
- var different = from != showingFrom || to != showingTo || lastSizeC != scroller.clientHeight + th;
964
- // This is just a bogus formula that detects when the editor is
965
- // resized or the font size changes.
966
- if (different) lastSizeC = scroller.clientHeight + th;
967
- showingFrom = from; showingTo = to;
968
- displayOffset = heightAtLine(doc, from);
969
- mover.style.top = (displayOffset * th) + "px";
970
- if (scroller.clientHeight)
971
- code.style.height = (doc.height * th + 2 * paddingTop()) + "px";
972
-
973
- // Since this is all rather error prone, it is honoured with the
974
- // only assertion in the whole file.
975
- if (lineDiv.childNodes.length != showingTo - showingFrom)
976
- throw new Error("BAD PATCH! " + JSON.stringify(intact) + " size=" + (showingTo - showingFrom) +
977
- " nodes=" + lineDiv.childNodes.length);
978
-
979
- function checkHeights() {
980
- maxWidth = scroller.clientWidth;
981
- var curNode = lineDiv.firstChild, heightChanged = false;
982
- doc.iter(showingFrom, showingTo, function(line) {
983
- if (!line.hidden) {
984
- var height = Math.round(curNode.offsetHeight / th) || 1;
985
- if (line.height != height) {
986
- updateLineHeight(line, height);
987
- gutterDirty = heightChanged = true;
988
- }
989
- }
990
- curNode = curNode.nextSibling;
991
- });
992
- if (heightChanged)
993
- code.style.height = (doc.height * th + 2 * paddingTop()) + "px";
994
- return heightChanged;
995
- }
996
-
997
- if (options.lineWrapping) {
998
- checkHeights();
999
- } else {
1000
- if (maxWidth == null) maxWidth = stringWidth(maxLine);
1001
- if (maxWidth > scroller.clientWidth) {
1002
- lineSpace.style.width = maxWidth + "px";
1003
- // Needed to prevent odd wrapping/hiding of widgets placed in here.
1004
- code.style.width = "";
1005
- code.style.width = scroller.scrollWidth + "px";
1006
- } else {
1007
- lineSpace.style.width = code.style.width = "";
1008
- }
1009
- }
1010
-
1011
- gutter.style.display = gutterDisplay;
1012
- if (different || gutterDirty) {
1013
- // If the gutter grew in size, re-check heights. If those changed, re-draw gutter.
1014
- updateGutter() && options.lineWrapping && checkHeights() && updateGutter();
1015
- }
1016
- updateSelection();
1017
- if (!suppressCallback && options.onUpdate) options.onUpdate(instance);
1018
- return true;
1019
- }
1020
-
1021
- function computeIntact(intact, changes) {
1022
- for (var i = 0, l = changes.length || 0; i < l; ++i) {
1023
- var change = changes[i], intact2 = [], diff = change.diff || 0;
1024
- for (var j = 0, l2 = intact.length; j < l2; ++j) {
1025
- var range = intact[j];
1026
- if (change.to <= range.from && change.diff)
1027
- intact2.push({from: range.from + diff, to: range.to + diff,
1028
- domStart: range.domStart});
1029
- else if (change.to <= range.from || change.from >= range.to)
1030
- intact2.push(range);
1031
- else {
1032
- if (change.from > range.from)
1033
- intact2.push({from: range.from, to: change.from, domStart: range.domStart});
1034
- if (change.to < range.to)
1035
- intact2.push({from: change.to + diff, to: range.to + diff,
1036
- domStart: range.domStart + (change.to - range.from)});
1037
- }
1038
- }
1039
- intact = intact2;
1040
- }
1041
- return intact;
1042
- }
1043
-
1044
- function patchDisplay(from, to, intact) {
1045
- // The first pass removes the DOM nodes that aren't intact.
1046
- if (!intact.length) lineDiv.innerHTML = "";
1047
- else {
1048
- function killNode(node) {
1049
- var tmp = node.nextSibling;
1050
- node.parentNode.removeChild(node);
1051
- return tmp;
1052
- }
1053
- var domPos = 0, curNode = lineDiv.firstChild, n;
1054
- for (var i = 0; i < intact.length; ++i) {
1055
- var cur = intact[i];
1056
- while (cur.domStart > domPos) {curNode = killNode(curNode); domPos++;}
1057
- for (var j = 0, e = cur.to - cur.from; j < e; ++j) {curNode = curNode.nextSibling; domPos++;}
1058
- }
1059
- while (curNode) curNode = killNode(curNode);
1060
- }
1061
- // This pass fills in the lines that actually changed.
1062
- var nextIntact = intact.shift(), curNode = lineDiv.firstChild, j = from;
1063
- var scratch = document.createElement("div");
1064
- doc.iter(from, to, function(line) {
1065
- if (nextIntact && nextIntact.to == j) nextIntact = intact.shift();
1066
- if (!nextIntact || nextIntact.from > j) {
1067
- if (line.hidden) var html = scratch.innerHTML = "<pre></pre>";
1068
- else {
1069
- var html = '<pre' + (line.className ? ' class="' + line.className + '"' : '') + '>'
1070
- + line.getHTML(makeTab) + '</pre>';
1071
- // Kludge to make sure the styled element lies behind the selection (by z-index)
1072
- if (line.bgClassName)
1073
- html = '<div style="position: relative"><pre class="' + line.bgClassName +
1074
- '" style="position: absolute; left: 0; right: 0; top: 0; bottom: 0; z-index: -2">&#160;</pre>' + html + "</div>";
1075
- }
1076
- scratch.innerHTML = html;
1077
- lineDiv.insertBefore(scratch.firstChild, curNode);
1078
- } else {
1079
- curNode = curNode.nextSibling;
1080
- }
1081
- ++j;
1082
- });
1083
- }
1084
-
1085
- function updateGutter() {
1086
- if (!options.gutter && !options.lineNumbers) return;
1087
- var hText = mover.offsetHeight, hEditor = scroller.clientHeight;
1088
- gutter.style.height = (hText - hEditor < 2 ? hEditor : hText) + "px";
1089
- var html = [], i = showingFrom, normalNode;
1090
- doc.iter(showingFrom, Math.max(showingTo, showingFrom + 1), function(line) {
1091
- if (line.hidden) {
1092
- html.push("<pre></pre>");
1093
- } else {
1094
- var marker = line.gutterMarker;
1095
- var text = options.lineNumbers ? i + options.firstLineNumber : null;
1096
- if (marker && marker.text)
1097
- text = marker.text.replace("%N%", text != null ? text : "");
1098
- else if (text == null)
1099
- text = "\u00a0";
1100
- html.push((marker && marker.style ? '<pre class="' + marker.style + '">' : "<pre>"), text);
1101
- for (var j = 1; j < line.height; ++j) html.push("<br/>&#160;");
1102
- html.push("</pre>");
1103
- if (!marker) normalNode = i;
1104
- }
1105
- ++i;
1106
- });
1107
- gutter.style.display = "none";
1108
- gutterText.innerHTML = html.join("");
1109
- // Make sure scrolling doesn't cause number gutter size to pop
1110
- if (normalNode != null) {
1111
- var node = gutterText.childNodes[normalNode - showingFrom];
1112
- var minwidth = String(doc.size).length, val = eltText(node), pad = "";
1113
- while (val.length + pad.length < minwidth) pad += "\u00a0";
1114
- if (pad) node.insertBefore(document.createTextNode(pad), node.firstChild);
1115
- }
1116
- gutter.style.display = "";
1117
- var resized = Math.abs((parseInt(lineSpace.style.marginLeft) || 0) - gutter.offsetWidth) > 2;
1118
- lineSpace.style.marginLeft = gutter.offsetWidth + "px";
1119
- gutterDirty = false;
1120
- return resized;
1121
- }
1122
- function updateSelection() {
1123
- var collapsed = posEq(sel.from, sel.to);
1124
- var fromPos = localCoords(sel.from, true);
1125
- var toPos = collapsed ? fromPos : localCoords(sel.to, true);
1126
- var headPos = sel.inverted ? fromPos : toPos, th = textHeight();
1127
- var wrapOff = eltOffset(wrapper), lineOff = eltOffset(lineDiv);
1128
- inputDiv.style.top = Math.max(0, Math.min(scroller.offsetHeight, headPos.y + lineOff.top - wrapOff.top)) + "px";
1129
- inputDiv.style.left = Math.max(0, Math.min(scroller.offsetWidth, headPos.x + lineOff.left - wrapOff.left)) + "px";
1130
- if (collapsed) {
1131
- cursor.style.top = headPos.y + "px";
1132
- cursor.style.left = (options.lineWrapping ? Math.min(headPos.x, lineSpace.offsetWidth) : headPos.x) + "px";
1133
- cursor.style.display = "";
1134
- selectionDiv.style.display = "none";
1135
- } else {
1136
- var sameLine = fromPos.y == toPos.y, html = "";
1137
- var clientWidth = lineSpace.clientWidth || lineSpace.offsetWidth;
1138
- var clientHeight = lineSpace.clientHeight || lineSpace.offsetHeight;
1139
- function add(left, top, right, height) {
1140
- var rstyle = quirksMode ? "width: " + (!right ? clientWidth : clientWidth - right - left) + "px"
1141
- : "right: " + right + "px";
1142
- html += '<div class="CodeMirror-selected" style="position: absolute; left: ' + left +
1143
- 'px; top: ' + top + 'px; ' + rstyle + '; height: ' + height + 'px"></div>';
1144
- }
1145
- if (sel.from.ch && fromPos.y >= 0) {
1146
- var right = sameLine ? clientWidth - toPos.x : 0;
1147
- add(fromPos.x, fromPos.y, right, th);
1148
- }
1149
- var middleStart = Math.max(0, fromPos.y + (sel.from.ch ? th : 0));
1150
- var middleHeight = Math.min(toPos.y, clientHeight) - middleStart;
1151
- if (middleHeight > 0.2 * th)
1152
- add(0, middleStart, 0, middleHeight);
1153
- if ((!sameLine || !sel.from.ch) && toPos.y < clientHeight - .5 * th)
1154
- add(0, toPos.y, clientWidth - toPos.x, th);
1155
- selectionDiv.innerHTML = html;
1156
- cursor.style.display = "none";
1157
- selectionDiv.style.display = "";
1158
- }
1159
- }
1160
-
1161
- function setShift(val) {
1162
- if (val) shiftSelecting = shiftSelecting || (sel.inverted ? sel.to : sel.from);
1163
- else shiftSelecting = null;
1164
- }
1165
- function setSelectionUser(from, to) {
1166
- var sh = shiftSelecting && clipPos(shiftSelecting);
1167
- if (sh) {
1168
- if (posLess(sh, from)) from = sh;
1169
- else if (posLess(to, sh)) to = sh;
1170
- }
1171
- setSelection(from, to);
1172
- userSelChange = true;
1173
- }
1174
- // Update the selection. Last two args are only used by
1175
- // updateLines, since they have to be expressed in the line
1176
- // numbers before the update.
1177
- function setSelection(from, to, oldFrom, oldTo) {
1178
- goalColumn = null;
1179
- if (oldFrom == null) {oldFrom = sel.from.line; oldTo = sel.to.line;}
1180
- if (posEq(sel.from, from) && posEq(sel.to, to)) return;
1181
- if (posLess(to, from)) {var tmp = to; to = from; from = tmp;}
1182
-
1183
- // Skip over hidden lines.
1184
- if (from.line != oldFrom) {
1185
- var from1 = skipHidden(from, oldFrom, sel.from.ch);
1186
- // If there is no non-hidden line left, force visibility on current line
1187
- if (!from1) setLineHidden(from.line, false);
1188
- else from = from1;
1189
- }
1190
- if (to.line != oldTo) to = skipHidden(to, oldTo, sel.to.ch);
1191
-
1192
- if (posEq(from, to)) sel.inverted = false;
1193
- else if (posEq(from, sel.to)) sel.inverted = false;
1194
- else if (posEq(to, sel.from)) sel.inverted = true;
1195
-
1196
- if (options.autoClearEmptyLines && posEq(sel.from, sel.to)) {
1197
- var head = sel.inverted ? from : to;
1198
- if (head.line != sel.from.line && sel.from.line < doc.size) {
1199
- var oldLine = getLine(sel.from.line);
1200
- if (/^\s+$/.test(oldLine.text))
1201
- setTimeout(operation(function() {
1202
- if (oldLine.parent && /^\s+$/.test(oldLine.text)) {
1203
- var no = lineNo(oldLine);
1204
- replaceRange("", {line: no, ch: 0}, {line: no, ch: oldLine.text.length});
1205
- }
1206
- }, 10));
1207
- }
1208
- }
1209
-
1210
- sel.from = from; sel.to = to;
1211
- selectionChanged = true;
1212
- }
1213
- function skipHidden(pos, oldLine, oldCh) {
1214
- function getNonHidden(dir) {
1215
- var lNo = pos.line + dir, end = dir == 1 ? doc.size : -1;
1216
- while (lNo != end) {
1217
- var line = getLine(lNo);
1218
- if (!line.hidden) {
1219
- var ch = pos.ch;
1220
- if (toEnd || ch > oldCh || ch > line.text.length) ch = line.text.length;
1221
- return {line: lNo, ch: ch};
1222
- }
1223
- lNo += dir;
1224
- }
1225
- }
1226
- var line = getLine(pos.line);
1227
- var toEnd = pos.ch == line.text.length && pos.ch != oldCh;
1228
- if (!line.hidden) return pos;
1229
- if (pos.line >= oldLine) return getNonHidden(1) || getNonHidden(-1);
1230
- else return getNonHidden(-1) || getNonHidden(1);
1231
- }
1232
- function setCursor(line, ch, user) {
1233
- var pos = clipPos({line: line, ch: ch || 0});
1234
- (user ? setSelectionUser : setSelection)(pos, pos);
1235
- }
1236
-
1237
- function clipLine(n) {return Math.max(0, Math.min(n, doc.size-1));}
1238
- function clipPos(pos) {
1239
- if (pos.line < 0) return {line: 0, ch: 0};
1240
- if (pos.line >= doc.size) return {line: doc.size-1, ch: getLine(doc.size-1).text.length};
1241
- var ch = pos.ch, linelen = getLine(pos.line).text.length;
1242
- if (ch == null || ch > linelen) return {line: pos.line, ch: linelen};
1243
- else if (ch < 0) return {line: pos.line, ch: 0};
1244
- else return pos;
1245
- }
1246
-
1247
- function findPosH(dir, unit) {
1248
- var end = sel.inverted ? sel.from : sel.to, line = end.line, ch = end.ch;
1249
- var lineObj = getLine(line);
1250
- function findNextLine() {
1251
- for (var l = line + dir, e = dir < 0 ? -1 : doc.size; l != e; l += dir) {
1252
- var lo = getLine(l);
1253
- if (!lo.hidden) { line = l; lineObj = lo; return true; }
1254
- }
1255
- }
1256
- function moveOnce(boundToLine) {
1257
- if (ch == (dir < 0 ? 0 : lineObj.text.length)) {
1258
- if (!boundToLine && findNextLine()) ch = dir < 0 ? lineObj.text.length : 0;
1259
- else return false;
1260
- } else ch += dir;
1261
- return true;
1262
- }
1263
- if (unit == "char") moveOnce();
1264
- else if (unit == "column") moveOnce(true);
1265
- else if (unit == "word") {
1266
- var sawWord = false;
1267
- for (;;) {
1268
- if (dir < 0) if (!moveOnce()) break;
1269
- if (isWordChar(lineObj.text.charAt(ch))) sawWord = true;
1270
- else if (sawWord) {if (dir < 0) {dir = 1; moveOnce();} break;}
1271
- if (dir > 0) if (!moveOnce()) break;
1272
- }
1273
- }
1274
- return {line: line, ch: ch};
1275
- }
1276
- function moveH(dir, unit) {
1277
- var pos = dir < 0 ? sel.from : sel.to;
1278
- if (shiftSelecting || posEq(sel.from, sel.to)) pos = findPosH(dir, unit);
1279
- setCursor(pos.line, pos.ch, true);
1280
- }
1281
- function deleteH(dir, unit) {
1282
- if (!posEq(sel.from, sel.to)) replaceRange("", sel.from, sel.to);
1283
- else if (dir < 0) replaceRange("", findPosH(dir, unit), sel.to);
1284
- else replaceRange("", sel.from, findPosH(dir, unit));
1285
- userSelChange = true;
1286
- }
1287
- var goalColumn = null;
1288
- function moveV(dir, unit) {
1289
- var dist = 0, pos = localCoords(sel.inverted ? sel.from : sel.to, true);
1290
- if (goalColumn != null) pos.x = goalColumn;
1291
- if (unit == "page") dist = Math.min(scroller.clientHeight, window.innerHeight || document.documentElement.clientHeight);
1292
- else if (unit == "line") dist = textHeight();
1293
- var target = coordsChar(pos.x, pos.y + dist * dir + 2);
1294
- if (unit == "page") scroller.scrollTop += localCoords(target, true).y - pos.y;
1295
- setCursor(target.line, target.ch, true);
1296
- goalColumn = pos.x;
1297
- }
1298
-
1299
- function selectWordAt(pos) {
1300
- var line = getLine(pos.line).text;
1301
- var start = pos.ch, end = pos.ch;
1302
- while (start > 0 && isWordChar(line.charAt(start - 1))) --start;
1303
- while (end < line.length && isWordChar(line.charAt(end))) ++end;
1304
- setSelectionUser({line: pos.line, ch: start}, {line: pos.line, ch: end});
1305
- }
1306
- function selectLine(line) {
1307
- setSelectionUser({line: line, ch: 0}, clipPos({line: line + 1, ch: 0}));
1308
- }
1309
- function indentSelected(mode) {
1310
- if (posEq(sel.from, sel.to)) return indentLine(sel.from.line, mode);
1311
- var e = sel.to.line - (sel.to.ch ? 0 : 1);
1312
- for (var i = sel.from.line; i <= e; ++i) indentLine(i, mode);
1313
- }
1314
-
1315
- function indentLine(n, how) {
1316
- if (!how) how = "add";
1317
- if (how == "smart") {
1318
- if (!mode.indent) how = "prev";
1319
- else var state = getStateBefore(n);
1320
- }
1321
-
1322
- var line = getLine(n), curSpace = line.indentation(options.tabSize),
1323
- curSpaceString = line.text.match(/^\s*/)[0], indentation;
1324
- if (how == "prev") {
1325
- if (n) indentation = getLine(n-1).indentation(options.tabSize);
1326
- else indentation = 0;
1327
- }
1328
- else if (how == "smart") indentation = mode.indent(state, line.text.slice(curSpaceString.length), line.text);
1329
- else if (how == "add") indentation = curSpace + options.indentUnit;
1330
- else if (how == "subtract") indentation = curSpace - options.indentUnit;
1331
- indentation = Math.max(0, indentation);
1332
- var diff = indentation - curSpace;
1333
-
1334
- if (!diff) {
1335
- if (sel.from.line != n && sel.to.line != n) return;
1336
- var indentString = curSpaceString;
1337
- }
1338
- else {
1339
- var indentString = "", pos = 0;
1340
- if (options.indentWithTabs)
1341
- for (var i = Math.floor(indentation / options.tabSize); i; --i) {pos += options.tabSize; indentString += "\t";}
1342
- while (pos < indentation) {++pos; indentString += " ";}
1343
- }
1344
-
1345
- replaceRange(indentString, {line: n, ch: 0}, {line: n, ch: curSpaceString.length});
1346
- }
1347
-
1348
- function loadMode() {
1349
- mode = CodeMirror.getMode(options, options.mode);
1350
- doc.iter(0, doc.size, function(line) { line.stateAfter = null; });
1351
- work = [0];
1352
- startWorker();
1353
- }
1354
- function gutterChanged() {
1355
- var visible = options.gutter || options.lineNumbers;
1356
- gutter.style.display = visible ? "" : "none";
1357
- if (visible) gutterDirty = true;
1358
- else lineDiv.parentNode.style.marginLeft = 0;
1359
- }
1360
- function wrappingChanged(from, to) {
1361
- if (options.lineWrapping) {
1362
- wrapper.className += " CodeMirror-wrap";
1363
- var perLine = scroller.clientWidth / charWidth() - 3;
1364
- doc.iter(0, doc.size, function(line) {
1365
- if (line.hidden) return;
1366
- var guess = Math.ceil(line.text.length / perLine) || 1;
1367
- if (guess != 1) updateLineHeight(line, guess);
1368
- });
1369
- lineSpace.style.width = code.style.width = "";
1370
- } else {
1371
- wrapper.className = wrapper.className.replace(" CodeMirror-wrap", "");
1372
- maxWidth = null; maxLine = "";
1373
- doc.iter(0, doc.size, function(line) {
1374
- if (line.height != 1 && !line.hidden) updateLineHeight(line, 1);
1375
- if (line.text.length > maxLine.length) maxLine = line.text;
1376
- });
1377
- }
1378
- changes.push({from: 0, to: doc.size});
1379
- }
1380
- function makeTab(col) {
1381
- var w = options.tabSize - col % options.tabSize, cached = tabCache[w];
1382
- if (cached) return cached;
1383
- for (var str = '<span class="cm-tab">', i = 0; i < w; ++i) str += " ";
1384
- return (tabCache[w] = {html: str + "</span>", width: w});
1385
- }
1386
- function themeChanged() {
1387
- scroller.className = scroller.className.replace(/\s*cm-s-\S+/g, "") +
1388
- options.theme.replace(/(^|\s)\s*/g, " cm-s-");
1389
- }
1390
- function keyMapChanged() {
1391
- var style = keyMap[options.keyMap].style;
1392
- wrapper.className = wrapper.className.replace(/\s*cm-keymap-\S+/g, "") +
1393
- (style ? " cm-keymap-" + style : "");
1394
- }
1395
-
1396
- function TextMarker() { this.set = []; }
1397
- TextMarker.prototype.clear = operation(function() {
1398
- var min = Infinity, max = -Infinity;
1399
- for (var i = 0, e = this.set.length; i < e; ++i) {
1400
- var line = this.set[i], mk = line.marked;
1401
- if (!mk || !line.parent) continue;
1402
- var lineN = lineNo(line);
1403
- min = Math.min(min, lineN); max = Math.max(max, lineN);
1404
- for (var j = 0; j < mk.length; ++j)
1405
- if (mk[j].marker == this) mk.splice(j--, 1);
1406
- }
1407
- if (min != Infinity)
1408
- changes.push({from: min, to: max + 1});
1409
- });
1410
- TextMarker.prototype.find = function() {
1411
- var from, to;
1412
- for (var i = 0, e = this.set.length; i < e; ++i) {
1413
- var line = this.set[i], mk = line.marked;
1414
- for (var j = 0; j < mk.length; ++j) {
1415
- var mark = mk[j];
1416
- if (mark.marker == this) {
1417
- if (mark.from != null || mark.to != null) {
1418
- var found = lineNo(line);
1419
- if (found != null) {
1420
- if (mark.from != null) from = {line: found, ch: mark.from};
1421
- if (mark.to != null) to = {line: found, ch: mark.to};
1422
- }
1423
- }
1424
- }
1425
- }
1426
- }
1427
- return {from: from, to: to};
1428
- };
1429
-
1430
- function markText(from, to, className) {
1431
- from = clipPos(from); to = clipPos(to);
1432
- var tm = new TextMarker();
1433
- if (!posLess(from, to)) return tm;
1434
- function add(line, from, to, className) {
1435
- getLine(line).addMark(new MarkedText(from, to, className, tm));
1436
- }
1437
- if (from.line == to.line) add(from.line, from.ch, to.ch, className);
1438
- else {
1439
- add(from.line, from.ch, null, className);
1440
- for (var i = from.line + 1, e = to.line; i < e; ++i)
1441
- add(i, null, null, className);
1442
- add(to.line, null, to.ch, className);
1443
- }
1444
- changes.push({from: from.line, to: to.line + 1});
1445
- return tm;
1446
- }
1447
-
1448
- function setBookmark(pos) {
1449
- pos = clipPos(pos);
1450
- var bm = new Bookmark(pos.ch);
1451
- getLine(pos.line).addMark(bm);
1452
- return bm;
1453
- }
1454
-
1455
- function findMarksAt(pos) {
1456
- pos = clipPos(pos);
1457
- var markers = [], marked = getLine(pos.line).marked;
1458
- if (!marked) return markers;
1459
- for (var i = 0, e = marked.length; i < e; ++i) {
1460
- var m = marked[i];
1461
- if ((m.from == null || m.from <= pos.ch) &&
1462
- (m.to == null || m.to >= pos.ch))
1463
- markers.push(m.marker || m);
1464
- }
1465
- return markers;
1466
- }
1467
-
1468
- function addGutterMarker(line, text, className) {
1469
- if (typeof line == "number") line = getLine(clipLine(line));
1470
- line.gutterMarker = {text: text, style: className};
1471
- gutterDirty = true;
1472
- return line;
1473
- }
1474
- function removeGutterMarker(line) {
1475
- if (typeof line == "number") line = getLine(clipLine(line));
1476
- line.gutterMarker = null;
1477
- gutterDirty = true;
1478
- }
1479
-
1480
- function changeLine(handle, op) {
1481
- var no = handle, line = handle;
1482
- if (typeof handle == "number") line = getLine(clipLine(handle));
1483
- else no = lineNo(handle);
1484
- if (no == null) return null;
1485
- if (op(line, no)) changes.push({from: no, to: no + 1});
1486
- else return null;
1487
- return line;
1488
- }
1489
- function setLineClass(handle, className, bgClassName) {
1490
- return changeLine(handle, function(line) {
1491
- if (line.className != className || line.bgClassName != bgClassName) {
1492
- line.className = className;
1493
- line.bgClassName = bgClassName;
1494
- return true;
1495
- }
1496
- });
1497
- }
1498
- function setLineHidden(handle, hidden) {
1499
- return changeLine(handle, function(line, no) {
1500
- if (line.hidden != hidden) {
1501
- line.hidden = hidden;
1502
- if (!options.lineWrapping) {
1503
- var l = line.text;
1504
- if (hidden && l.length == maxLine.length) {
1505
- maxLengthChanged = true;
1506
- }
1507
- else if (!hidden && l.length > maxLine.length) {
1508
- maxLine = l; maxWidth = null;
1509
- maxLengthChanged = false;
1510
- }
1511
- }
1512
- updateLineHeight(line, hidden ? 0 : 1);
1513
- var fline = sel.from.line, tline = sel.to.line;
1514
- if (hidden && (fline == no || tline == no)) {
1515
- var from = fline == no ? skipHidden({line: fline, ch: 0}, fline, 0) : sel.from;
1516
- var to = tline == no ? skipHidden({line: tline, ch: 0}, tline, 0) : sel.to;
1517
- // Can't hide the last visible line, we'd have no place to put the cursor
1518
- if (!to) return;
1519
- setSelection(from, to);
1520
- }
1521
- return (gutterDirty = true);
1522
- }
1523
- });
1524
- }
1525
-
1526
- function lineInfo(line) {
1527
- if (typeof line == "number") {
1528
- if (!isLine(line)) return null;
1529
- var n = line;
1530
- line = getLine(line);
1531
- if (!line) return null;
1532
- }
1533
- else {
1534
- var n = lineNo(line);
1535
- if (n == null) return null;
1536
- }
1537
- var marker = line.gutterMarker;
1538
- return {line: n, handle: line, text: line.text, markerText: marker && marker.text,
1539
- markerClass: marker && marker.style, lineClass: line.className, bgClass: line.bgClassName};
1540
- }
1541
-
1542
- function stringWidth(str) {
1543
- measure.innerHTML = "<pre><span>x</span></pre>";
1544
- measure.firstChild.firstChild.firstChild.nodeValue = str;
1545
- return measure.firstChild.firstChild.offsetWidth || 10;
1546
- }
1547
- // These are used to go from pixel positions to character
1548
- // positions, taking varying character widths into account.
1549
- function charFromX(line, x) {
1550
- if (x <= 0) return 0;
1551
- var lineObj = getLine(line), text = lineObj.text;
1552
- function getX(len) {
1553
- return measureLine(lineObj, len).left;
1554
- }
1555
- var from = 0, fromX = 0, to = text.length, toX;
1556
- // Guess a suitable upper bound for our search.
1557
- var estimated = Math.min(to, Math.ceil(x / charWidth()));
1558
- for (;;) {
1559
- var estX = getX(estimated);
1560
- if (estX <= x && estimated < to) estimated = Math.min(to, Math.ceil(estimated * 1.2));
1561
- else {toX = estX; to = estimated; break;}
1562
- }
1563
- if (x > toX) return to;
1564
- // Try to guess a suitable lower bound as well.
1565
- estimated = Math.floor(to * 0.8); estX = getX(estimated);
1566
- if (estX < x) {from = estimated; fromX = estX;}
1567
- // Do a binary search between these bounds.
1568
- for (;;) {
1569
- if (to - from <= 1) return (toX - x > x - fromX) ? from : to;
1570
- var middle = Math.ceil((from + to) / 2), middleX = getX(middle);
1571
- if (middleX > x) {to = middle; toX = middleX;}
1572
- else {from = middle; fromX = middleX;}
1573
- }
1574
- }
1575
-
1576
- var tempId = "CodeMirror-temp-" + Math.floor(Math.random() * 0xffffff).toString(16);
1577
- function measureLine(line, ch) {
1578
- if (ch == 0) return {top: 0, left: 0};
1579
- var wbr = options.lineWrapping && ch < line.text.length &&
1580
- spanAffectsWrapping.test(line.text.slice(ch - 1, ch + 1));
1581
- measure.innerHTML = "<pre>" + line.getHTML(makeTab, ch, tempId, wbr) + "</pre>";
1582
- var elt = document.getElementById(tempId);
1583
- var top = elt.offsetTop, left = elt.offsetLeft;
1584
- // Older IEs report zero offsets for spans directly after a wrap
1585
- if (ie && top == 0 && left == 0) {
1586
- var backup = document.createElement("span");
1587
- backup.innerHTML = "x";
1588
- elt.parentNode.insertBefore(backup, elt.nextSibling);
1589
- top = backup.offsetTop;
1590
- }
1591
- return {top: top, left: left};
1592
- }
1593
- function localCoords(pos, inLineWrap) {
1594
- var x, lh = textHeight(), y = lh * (heightAtLine(doc, pos.line) - (inLineWrap ? displayOffset : 0));
1595
- if (pos.ch == 0) x = 0;
1596
- else {
1597
- var sp = measureLine(getLine(pos.line), pos.ch);
1598
- x = sp.left;
1599
- if (options.lineWrapping) y += Math.max(0, sp.top);
1600
- }
1601
- return {x: x, y: y, yBot: y + lh};
1602
- }
1603
- // Coords must be lineSpace-local
1604
- function coordsChar(x, y) {
1605
- if (y < 0) y = 0;
1606
- var th = textHeight(), cw = charWidth(), heightPos = displayOffset + Math.floor(y / th);
1607
- var lineNo = lineAtHeight(doc, heightPos);
1608
- if (lineNo >= doc.size) return {line: doc.size - 1, ch: getLine(doc.size - 1).text.length};
1609
- var lineObj = getLine(lineNo), text = lineObj.text;
1610
- var tw = options.lineWrapping, innerOff = tw ? heightPos - heightAtLine(doc, lineNo) : 0;
1611
- if (x <= 0 && innerOff == 0) return {line: lineNo, ch: 0};
1612
- function getX(len) {
1613
- var sp = measureLine(lineObj, len);
1614
- if (tw) {
1615
- var off = Math.round(sp.top / th);
1616
- return Math.max(0, sp.left + (off - innerOff) * scroller.clientWidth);
1617
- }
1618
- return sp.left;
1619
- }
1620
- var from = 0, fromX = 0, to = text.length, toX;
1621
- // Guess a suitable upper bound for our search.
1622
- var estimated = Math.min(to, Math.ceil((x + innerOff * scroller.clientWidth * .9) / cw));
1623
- for (;;) {
1624
- var estX = getX(estimated);
1625
- if (estX <= x && estimated < to) estimated = Math.min(to, Math.ceil(estimated * 1.2));
1626
- else {toX = estX; to = estimated; break;}
1627
- }
1628
- if (x > toX) return {line: lineNo, ch: to};
1629
- // Try to guess a suitable lower bound as well.
1630
- estimated = Math.floor(to * 0.8); estX = getX(estimated);
1631
- if (estX < x) {from = estimated; fromX = estX;}
1632
- // Do a binary search between these bounds.
1633
- for (;;) {
1634
- if (to - from <= 1) return {line: lineNo, ch: (toX - x > x - fromX) ? from : to};
1635
- var middle = Math.ceil((from + to) / 2), middleX = getX(middle);
1636
- if (middleX > x) {to = middle; toX = middleX;}
1637
- else {from = middle; fromX = middleX;}
1638
- }
1639
- }
1640
- function pageCoords(pos) {
1641
- var local = localCoords(pos, true), off = eltOffset(lineSpace);
1642
- return {x: off.left + local.x, y: off.top + local.y, yBot: off.top + local.yBot};
1643
- }
1644
-
1645
- var cachedHeight, cachedHeightFor, measureText;
1646
- function textHeight() {
1647
- if (measureText == null) {
1648
- measureText = "<pre>";
1649
- for (var i = 0; i < 49; ++i) measureText += "x<br/>";
1650
- measureText += "x</pre>";
1651
- }
1652
- var offsetHeight = lineDiv.clientHeight;
1653
- if (offsetHeight == cachedHeightFor) return cachedHeight;
1654
- cachedHeightFor = offsetHeight;
1655
- measure.innerHTML = measureText;
1656
- cachedHeight = measure.firstChild.offsetHeight / 50 || 1;
1657
- measure.innerHTML = "";
1658
- return cachedHeight;
1659
- }
1660
- var cachedWidth, cachedWidthFor = 0;
1661
- function charWidth() {
1662
- if (scroller.clientWidth == cachedWidthFor) return cachedWidth;
1663
- cachedWidthFor = scroller.clientWidth;
1664
- return (cachedWidth = stringWidth("x"));
1665
- }
1666
- function paddingTop() {return lineSpace.offsetTop;}
1667
- function paddingLeft() {return lineSpace.offsetLeft;}
1668
-
1669
- function posFromMouse(e, liberal) {
1670
- var offW = eltOffset(scroller, true), x, y;
1671
- // Fails unpredictably on IE[67] when mouse is dragged around quickly.
1672
- try { x = e.clientX; y = e.clientY; } catch (e) { return null; }
1673
- // This is a mess of a heuristic to try and determine whether a
1674
- // scroll-bar was clicked or not, and to return null if one was
1675
- // (and !liberal).
1676
- if (!liberal && (x - offW.left > scroller.clientWidth || y - offW.top > scroller.clientHeight))
1677
- return null;
1678
- var offL = eltOffset(lineSpace, true);
1679
- return coordsChar(x - offL.left, y - offL.top);
1680
- }
1681
- function onContextMenu(e) {
1682
- var pos = posFromMouse(e), scrollPos = scroller.scrollTop;
1683
- if (!pos || window.opera) return; // Opera is difficult.
1684
- if (posEq(sel.from, sel.to) || posLess(pos, sel.from) || !posLess(pos, sel.to))
1685
- operation(setCursor)(pos.line, pos.ch);
1686
-
1687
- var oldCSS = input.style.cssText;
1688
- inputDiv.style.position = "absolute";
1689
- input.style.cssText = "position: fixed; width: 30px; height: 30px; top: " + (e.clientY - 5) +
1690
- "px; left: " + (e.clientX - 5) + "px; z-index: 1000; background: white; " +
1691
- "border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);";
1692
- leaveInputAlone = true;
1693
- var val = input.value = getSelection();
1694
- focusInput();
1695
- selectInput(input);
1696
- function rehide() {
1697
- var newVal = splitLines(input.value).join("\n");
1698
- if (newVal != val) operation(replaceSelection)(newVal, "end");
1699
- inputDiv.style.position = "relative";
1700
- input.style.cssText = oldCSS;
1701
- if (ie_lt9) scroller.scrollTop = scrollPos;
1702
- leaveInputAlone = false;
1703
- resetInput(true);
1704
- slowPoll();
1705
- }
1706
-
1707
- if (gecko) {
1708
- e_stop(e);
1709
- var mouseup = connect(window, "mouseup", function() {
1710
- mouseup();
1711
- setTimeout(rehide, 20);
1712
- }, true);
1713
- } else {
1714
- setTimeout(rehide, 50);
1715
- }
1716
- }
1717
-
1718
- // Cursor-blinking
1719
- function restartBlink() {
1720
- clearInterval(blinker);
1721
- var on = true;
1722
- cursor.style.visibility = "";
1723
- blinker = setInterval(function() {
1724
- cursor.style.visibility = (on = !on) ? "" : "hidden";
1725
- }, 650);
1726
- }
1727
-
1728
- var matching = {"(": ")>", ")": "(<", "[": "]>", "]": "[<", "{": "}>", "}": "{<"};
1729
- function matchBrackets(autoclear) {
1730
- var head = sel.inverted ? sel.from : sel.to, line = getLine(head.line), pos = head.ch - 1;
1731
- var match = (pos >= 0 && matching[line.text.charAt(pos)]) || matching[line.text.charAt(++pos)];
1732
- if (!match) return;
1733
- var ch = match.charAt(0), forward = match.charAt(1) == ">", d = forward ? 1 : -1, st = line.styles;
1734
- for (var off = pos + 1, i = 0, e = st.length; i < e; i+=2)
1735
- if ((off -= st[i].length) <= 0) {var style = st[i+1]; break;}
1736
-
1737
- var stack = [line.text.charAt(pos)], re = /[(){}[\]]/;
1738
- function scan(line, from, to) {
1739
- if (!line.text) return;
1740
- var st = line.styles, pos = forward ? 0 : line.text.length - 1, cur;
1741
- for (var i = forward ? 0 : st.length - 2, e = forward ? st.length : -2; i != e; i += 2*d) {
1742
- var text = st[i];
1743
- if (st[i+1] != null && st[i+1] != style) {pos += d * text.length; continue;}
1744
- for (var j = forward ? 0 : text.length - 1, te = forward ? text.length : -1; j != te; j += d, pos+=d) {
1745
- if (pos >= from && pos < to && re.test(cur = text.charAt(j))) {
1746
- var match = matching[cur];
1747
- if (match.charAt(1) == ">" == forward) stack.push(cur);
1748
- else if (stack.pop() != match.charAt(0)) return {pos: pos, match: false};
1749
- else if (!stack.length) return {pos: pos, match: true};
1750
- }
1751
- }
1752
- }
1753
- }
1754
- for (var i = head.line, e = forward ? Math.min(i + 100, doc.size) : Math.max(-1, i - 100); i != e; i+=d) {
1755
- var line = getLine(i), first = i == head.line;
1756
- var found = scan(line, first && forward ? pos + 1 : 0, first && !forward ? pos : line.text.length);
1757
- if (found) break;
1758
- }
1759
- if (!found) found = {pos: null, match: false};
1760
- var style = found.match ? "CodeMirror-matchingbracket" : "CodeMirror-nonmatchingbracket";
1761
- var one = markText({line: head.line, ch: pos}, {line: head.line, ch: pos+1}, style),
1762
- two = found.pos != null && markText({line: i, ch: found.pos}, {line: i, ch: found.pos + 1}, style);
1763
- var clear = operation(function(){one.clear(); two && two.clear();});
1764
- if (autoclear) setTimeout(clear, 800);
1765
- else bracketHighlighted = clear;
1766
- }
1767
-
1768
- // Finds the line to start with when starting a parse. Tries to
1769
- // find a line with a stateAfter, so that it can start with a
1770
- // valid state. If that fails, it returns the line with the
1771
- // smallest indentation, which tends to need the least context to
1772
- // parse correctly.
1773
- function findStartLine(n) {
1774
- var minindent, minline;
1775
- for (var search = n, lim = n - 40; search > lim; --search) {
1776
- if (search == 0) return 0;
1777
- var line = getLine(search-1);
1778
- if (line.stateAfter) return search;
1779
- var indented = line.indentation(options.tabSize);
1780
- if (minline == null || minindent > indented) {
1781
- minline = search - 1;
1782
- minindent = indented;
1783
- }
1784
- }
1785
- return minline;
1786
- }
1787
- function getStateBefore(n) {
1788
- var start = findStartLine(n), state = start && getLine(start-1).stateAfter;
1789
- if (!state) state = startState(mode);
1790
- else state = copyState(mode, state);
1791
- doc.iter(start, n, function(line) {
1792
- line.highlight(mode, state, options.tabSize);
1793
- line.stateAfter = copyState(mode, state);
1794
- });
1795
- if (start < n) changes.push({from: start, to: n});
1796
- if (n < doc.size && !getLine(n).stateAfter) work.push(n);
1797
- return state;
1798
- }
1799
- function highlightLines(start, end) {
1800
- var state = getStateBefore(start);
1801
- doc.iter(start, end, function(line) {
1802
- line.highlight(mode, state, options.tabSize);
1803
- line.stateAfter = copyState(mode, state);
1804
- });
1805
- }
1806
- function highlightWorker() {
1807
- var end = +new Date + options.workTime;
1808
- var foundWork = work.length;
1809
- while (work.length) {
1810
- if (!getLine(showingFrom).stateAfter) var task = showingFrom;
1811
- else var task = work.pop();
1812
- if (task >= doc.size) continue;
1813
- var start = findStartLine(task), state = start && getLine(start-1).stateAfter;
1814
- if (state) state = copyState(mode, state);
1815
- else state = startState(mode);
1816
-
1817
- var unchanged = 0, compare = mode.compareStates, realChange = false,
1818
- i = start, bail = false;
1819
- doc.iter(i, doc.size, function(line) {
1820
- var hadState = line.stateAfter;
1821
- if (+new Date > end) {
1822
- work.push(i);
1823
- startWorker(options.workDelay);
1824
- if (realChange) changes.push({from: task, to: i + 1});
1825
- return (bail = true);
1826
- }
1827
- var changed = line.highlight(mode, state, options.tabSize);
1828
- if (changed) realChange = true;
1829
- line.stateAfter = copyState(mode, state);
1830
- var done = null;
1831
- if (compare) {
1832
- var same = hadState && compare(hadState, state);
1833
- if (same != Pass) done = !!same;
1834
- }
1835
- if (done == null) {
1836
- if (changed !== false || !hadState) unchanged = 0;
1837
- else if (++unchanged > 3 && (!mode.indent || mode.indent(hadState, "") == mode.indent(state, "")))
1838
- done = true;
1839
- }
1840
- if (done) return true;
1841
- ++i;
1842
- });
1843
- if (bail) return;
1844
- if (realChange) changes.push({from: task, to: i + 1});
1845
- }
1846
- if (foundWork && options.onHighlightComplete)
1847
- options.onHighlightComplete(instance);
1848
- }
1849
- function startWorker(time) {
1850
- if (!work.length) return;
1851
- highlight.set(time, operation(highlightWorker));
1852
- }
1853
-
1854
- // Operations are used to wrap changes in such a way that each
1855
- // change won't have to update the cursor and display (which would
1856
- // be awkward, slow, and error-prone), but instead updates are
1857
- // batched and then all combined and executed at once.
1858
- function startOperation() {
1859
- updateInput = userSelChange = textChanged = null;
1860
- changes = []; selectionChanged = false; callbacks = [];
1861
- }
1862
- function endOperation() {
1863
- var reScroll = false, updated;
1864
- if (maxLengthChanged) computeMaxLength();
1865
- if (selectionChanged) reScroll = !scrollCursorIntoView();
1866
- if (changes.length) updated = updateDisplay(changes, true);
1867
- else {
1868
- if (selectionChanged) updateSelection();
1869
- if (gutterDirty) updateGutter();
1870
- }
1871
- if (reScroll) scrollCursorIntoView();
1872
- if (selectionChanged) {scrollEditorIntoView(); restartBlink();}
1873
-
1874
- if (focused && !leaveInputAlone &&
1875
- (updateInput === true || (updateInput !== false && selectionChanged)))
1876
- resetInput(userSelChange);
1877
-
1878
- if (selectionChanged && options.matchBrackets)
1879
- setTimeout(operation(function() {
1880
- if (bracketHighlighted) {bracketHighlighted(); bracketHighlighted = null;}
1881
- if (posEq(sel.from, sel.to)) matchBrackets(false);
1882
- }), 20);
1883
- var tc = textChanged, cbs = callbacks; // these can be reset by callbacks
1884
- if (selectionChanged && options.onCursorActivity)
1885
- options.onCursorActivity(instance);
1886
- if (tc && options.onChange && instance)
1887
- options.onChange(instance, tc);
1888
- for (var i = 0; i < cbs.length; ++i) cbs[i](instance);
1889
- if (updated && options.onUpdate) options.onUpdate(instance);
1890
- }
1891
- var nestedOperation = 0;
1892
- function operation(f) {
1893
- return function() {
1894
- if (!nestedOperation++) startOperation();
1895
- try {var result = f.apply(this, arguments);}
1896
- finally {if (!--nestedOperation) endOperation();}
1897
- return result;
1898
- };
1899
- }
1900
-
1901
- function compoundChange(f) {
1902
- history.startCompound();
1903
- try { return f(); } finally { history.endCompound(); }
1904
- }
1905
-
1906
- for (var ext in extensions)
1907
- if (extensions.propertyIsEnumerable(ext) &&
1908
- !instance.propertyIsEnumerable(ext))
1909
- instance[ext] = extensions[ext];
1910
- return instance;
1911
- } // (end of function CodeMirror)
1912
-
1913
- // The default configuration options.
1914
- CodeMirror.defaults = {
1915
- value: "",
1916
- mode: null,
1917
- theme: "default",
1918
- indentUnit: 2,
1919
- indentWithTabs: false,
1920
- smartIndent: true,
1921
- tabSize: 4,
1922
- keyMap: "default",
1923
- extraKeys: null,
1924
- electricChars: true,
1925
- autoClearEmptyLines: false,
1926
- onKeyEvent: null,
1927
- onDragEvent: null,
1928
- lineWrapping: false,
1929
- lineNumbers: false,
1930
- gutter: false,
1931
- fixedGutter: false,
1932
- firstLineNumber: 1,
1933
- readOnly: false,
1934
- dragDrop: true,
1935
- onChange: null,
1936
- onCursorActivity: null,
1937
- onGutterClick: null,
1938
- onHighlightComplete: null,
1939
- onUpdate: null,
1940
- onFocus: null, onBlur: null, onScroll: null,
1941
- matchBrackets: false,
1942
- workTime: 100,
1943
- workDelay: 200,
1944
- pollInterval: 100,
1945
- undoDepth: 40,
1946
- tabindex: null,
1947
- autofocus: null
1948
- };
1949
-
1950
- var ios = /AppleWebKit/.test(navigator.userAgent) && /Mobile\/\w+/.test(navigator.userAgent);
1951
- var mac = ios || /Mac/.test(navigator.platform);
1952
- var win = /Win/.test(navigator.platform);
1953
-
1954
- // Known modes, by name and by MIME
1955
- var modes = CodeMirror.modes = {}, mimeModes = CodeMirror.mimeModes = {};
1956
- CodeMirror.defineMode = function(name, mode) {
1957
- if (!CodeMirror.defaults.mode && name != "null") CodeMirror.defaults.mode = name;
1958
- if (arguments.length > 2) {
1959
- mode.dependencies = [];
1960
- for (var i = 2; i < arguments.length; ++i) mode.dependencies.push(arguments[i]);
1961
- }
1962
- modes[name] = mode;
1963
- };
1964
- CodeMirror.defineMIME = function(mime, spec) {
1965
- mimeModes[mime] = spec;
1966
- };
1967
- CodeMirror.resolveMode = function(spec) {
1968
- if (typeof spec == "string" && mimeModes.hasOwnProperty(spec))
1969
- spec = mimeModes[spec];
1970
- else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+xml$/.test(spec))
1971
- return CodeMirror.resolveMode("application/xml");
1972
- if (typeof spec == "string") return {name: spec};
1973
- else return spec || {name: "null"};
1974
- };
1975
- CodeMirror.getMode = function(options, spec) {
1976
- var spec = CodeMirror.resolveMode(spec);
1977
- var mfactory = modes[spec.name];
1978
- if (!mfactory) return CodeMirror.getMode(options, "text/plain");
1979
- return mfactory(options, spec);
1980
- };
1981
- CodeMirror.listModes = function() {
1982
- var list = [];
1983
- for (var m in modes)
1984
- if (modes.propertyIsEnumerable(m)) list.push(m);
1985
- return list;
1986
- };
1987
- CodeMirror.listMIMEs = function() {
1988
- var list = [];
1989
- for (var m in mimeModes)
1990
- if (mimeModes.propertyIsEnumerable(m)) list.push({mime: m, mode: mimeModes[m]});
1991
- return list;
1992
- };
1993
-
1994
- var extensions = CodeMirror.extensions = {};
1995
- CodeMirror.defineExtension = function(name, func) {
1996
- extensions[name] = func;
1997
- };
1998
-
1999
- var commands = CodeMirror.commands = {
2000
- selectAll: function(cm) {cm.setSelection({line: 0, ch: 0}, {line: cm.lineCount() - 1});},
2001
- killLine: function(cm) {
2002
- var from = cm.getCursor(true), to = cm.getCursor(false), sel = !posEq(from, to);
2003
- if (!sel && cm.getLine(from.line).length == from.ch) cm.replaceRange("", from, {line: from.line + 1, ch: 0});
2004
- else cm.replaceRange("", from, sel ? to : {line: from.line});
2005
- },
2006
- deleteLine: function(cm) {var l = cm.getCursor().line; cm.replaceRange("", {line: l, ch: 0}, {line: l});},
2007
- undo: function(cm) {cm.undo();},
2008
- redo: function(cm) {cm.redo();},
2009
- goDocStart: function(cm) {cm.setCursor(0, 0, true);},
2010
- goDocEnd: function(cm) {cm.setSelection({line: cm.lineCount() - 1}, null, true);},
2011
- goLineStart: function(cm) {cm.setCursor(cm.getCursor().line, 0, true);},
2012
- goLineStartSmart: function(cm) {
2013
- var cur = cm.getCursor();
2014
- var text = cm.getLine(cur.line), firstNonWS = Math.max(0, text.search(/\S/));
2015
- cm.setCursor(cur.line, cur.ch <= firstNonWS && cur.ch ? 0 : firstNonWS, true);
2016
- },
2017
- goLineEnd: function(cm) {cm.setSelection({line: cm.getCursor().line}, null, true);},
2018
- goLineUp: function(cm) {cm.moveV(-1, "line");},
2019
- goLineDown: function(cm) {cm.moveV(1, "line");},
2020
- goPageUp: function(cm) {cm.moveV(-1, "page");},
2021
- goPageDown: function(cm) {cm.moveV(1, "page");},
2022
- goCharLeft: function(cm) {cm.moveH(-1, "char");},
2023
- goCharRight: function(cm) {cm.moveH(1, "char");},
2024
- goColumnLeft: function(cm) {cm.moveH(-1, "column");},
2025
- goColumnRight: function(cm) {cm.moveH(1, "column");},
2026
- goWordLeft: function(cm) {cm.moveH(-1, "word");},
2027
- goWordRight: function(cm) {cm.moveH(1, "word");},
2028
- delCharLeft: function(cm) {cm.deleteH(-1, "char");},
2029
- delCharRight: function(cm) {cm.deleteH(1, "char");},
2030
- delWordLeft: function(cm) {cm.deleteH(-1, "word");},
2031
- delWordRight: function(cm) {cm.deleteH(1, "word");},
2032
- indentAuto: function(cm) {cm.indentSelection("smart");},
2033
- indentMore: function(cm) {cm.indentSelection("add");},
2034
- indentLess: function(cm) {cm.indentSelection("subtract");},
2035
- insertTab: function(cm) {cm.replaceSelection("\t", "end");},
2036
- defaultTab: function(cm) {
2037
- if (cm.somethingSelected()) cm.indentSelection("add");
2038
- else cm.replaceSelection("\t", "end");
2039
- },
2040
- transposeChars: function(cm) {
2041
- var cur = cm.getCursor(), line = cm.getLine(cur.line);
2042
- if (cur.ch > 0 && cur.ch < line.length - 1)
2043
- cm.replaceRange(line.charAt(cur.ch) + line.charAt(cur.ch - 1),
2044
- {line: cur.line, ch: cur.ch - 1}, {line: cur.line, ch: cur.ch + 1});
2045
- },
2046
- newlineAndIndent: function(cm) {
2047
- cm.replaceSelection("\n", "end");
2048
- cm.indentLine(cm.getCursor().line);
2049
- },
2050
- toggleOverwrite: function(cm) {cm.toggleOverwrite();}
2051
- };
2052
-
2053
- var keyMap = CodeMirror.keyMap = {};
2054
- keyMap.basic = {
2055
- "Left": "goCharLeft", "Right": "goCharRight", "Up": "goLineUp", "Down": "goLineDown",
2056
- "End": "goLineEnd", "Home": "goLineStartSmart", "PageUp": "goPageUp", "PageDown": "goPageDown",
2057
- "Delete": "delCharRight", "Backspace": "delCharLeft", "Tab": "defaultTab", "Shift-Tab": "indentAuto",
2058
- "Enter": "newlineAndIndent", "Insert": "toggleOverwrite"
2059
- };
2060
- // Note that the save and find-related commands aren't defined by
2061
- // default. Unknown commands are simply ignored.
2062
- keyMap.pcDefault = {
2063
- "Ctrl-A": "selectAll", "Ctrl-D": "deleteLine", "Ctrl-Z": "undo", "Shift-Ctrl-Z": "redo", "Ctrl-Y": "redo",
2064
- "Ctrl-Home": "goDocStart", "Alt-Up": "goDocStart", "Ctrl-End": "goDocEnd", "Ctrl-Down": "goDocEnd",
2065
- "Ctrl-Left": "goWordLeft", "Ctrl-Right": "goWordRight", "Alt-Left": "goLineStart", "Alt-Right": "goLineEnd",
2066
- "Ctrl-Backspace": "delWordLeft", "Ctrl-Delete": "delWordRight", "Ctrl-S": "save", "Ctrl-F": "find",
2067
- "Ctrl-G": "findNext", "Shift-Ctrl-G": "findPrev", "Shift-Ctrl-F": "replace", "Shift-Ctrl-R": "replaceAll",
2068
- "Ctrl-[": "indentLess", "Ctrl-]": "indentMore",
2069
- fallthrough: "basic"
2070
- };
2071
- keyMap.macDefault = {
2072
- "Cmd-A": "selectAll", "Cmd-D": "deleteLine", "Cmd-Z": "undo", "Shift-Cmd-Z": "redo", "Cmd-Y": "redo",
2073
- "Cmd-Up": "goDocStart", "Cmd-End": "goDocEnd", "Cmd-Down": "goDocEnd", "Alt-Left": "goWordLeft",
2074
- "Alt-Right": "goWordRight", "Cmd-Left": "goLineStart", "Cmd-Right": "goLineEnd", "Alt-Backspace": "delWordLeft",
2075
- "Ctrl-Alt-Backspace": "delWordRight", "Alt-Delete": "delWordRight", "Cmd-S": "save", "Cmd-F": "find",
2076
- "Cmd-G": "findNext", "Shift-Cmd-G": "findPrev", "Cmd-Alt-F": "replace", "Shift-Cmd-Alt-F": "replaceAll",
2077
- "Cmd-[": "indentLess", "Cmd-]": "indentMore",
2078
- fallthrough: ["basic", "emacsy"]
2079
- };
2080
- keyMap["default"] = mac ? keyMap.macDefault : keyMap.pcDefault;
2081
- keyMap.emacsy = {
2082
- "Ctrl-F": "goCharRight", "Ctrl-B": "goCharLeft", "Ctrl-P": "goLineUp", "Ctrl-N": "goLineDown",
2083
- "Alt-F": "goWordRight", "Alt-B": "goWordLeft", "Ctrl-A": "goLineStart", "Ctrl-E": "goLineEnd",
2084
- "Ctrl-V": "goPageUp", "Shift-Ctrl-V": "goPageDown", "Ctrl-D": "delCharRight", "Ctrl-H": "delCharLeft",
2085
- "Alt-D": "delWordRight", "Alt-Backspace": "delWordLeft", "Ctrl-K": "killLine", "Ctrl-T": "transposeChars"
2086
- };
2087
-
2088
- function getKeyMap(val) {
2089
- if (typeof val == "string") return keyMap[val];
2090
- else return val;
2091
- }
2092
- function lookupKey(name, extraMap, map, handle, stop) {
2093
- function lookup(map) {
2094
- map = getKeyMap(map);
2095
- var found = map[name];
2096
- if (found != null && handle(found)) return true;
2097
- if (map.nofallthrough) {
2098
- if (stop) stop();
2099
- return true;
2100
- }
2101
- var fallthrough = map.fallthrough;
2102
- if (fallthrough == null) return false;
2103
- if (Object.prototype.toString.call(fallthrough) != "[object Array]")
2104
- return lookup(fallthrough);
2105
- for (var i = 0, e = fallthrough.length; i < e; ++i) {
2106
- if (lookup(fallthrough[i])) return true;
2107
- }
2108
- return false;
2109
- }
2110
- if (extraMap && lookup(extraMap)) return true;
2111
- return lookup(map);
2112
- }
2113
- function isModifierKey(event) {
2114
- var name = keyNames[e_prop(event, "keyCode")];
2115
- return name == "Ctrl" || name == "Alt" || name == "Shift" || name == "Mod";
2116
- }
2117
-
2118
- CodeMirror.fromTextArea = function(textarea, options) {
2119
- if (!options) options = {};
2120
- options.value = textarea.value;
2121
- if (!options.tabindex && textarea.tabindex)
2122
- options.tabindex = textarea.tabindex;
2123
- if (options.autofocus == null && textarea.getAttribute("autofocus") != null)
2124
- options.autofocus = true;
2125
-
2126
- function save() {textarea.value = instance.getValue();}
2127
- if (textarea.form) {
2128
- // Deplorable hack to make the submit method do the right thing.
2129
- var rmSubmit = connect(textarea.form, "submit", save, true);
2130
- if (typeof textarea.form.submit == "function") {
2131
- var realSubmit = textarea.form.submit;
2132
- function wrappedSubmit() {
2133
- save();
2134
- textarea.form.submit = realSubmit;
2135
- textarea.form.submit();
2136
- textarea.form.submit = wrappedSubmit;
2137
- }
2138
- textarea.form.submit = wrappedSubmit;
2139
- }
2140
- }
2141
-
2142
- textarea.style.display = "none";
2143
- var instance = CodeMirror(function(node) {
2144
- textarea.parentNode.insertBefore(node, textarea.nextSibling);
2145
- }, options);
2146
- instance.save = save;
2147
- instance.getTextArea = function() { return textarea; };
2148
- instance.toTextArea = function() {
2149
- save();
2150
- textarea.parentNode.removeChild(instance.getWrapperElement());
2151
- textarea.style.display = "";
2152
- if (textarea.form) {
2153
- rmSubmit();
2154
- if (typeof textarea.form.submit == "function")
2155
- textarea.form.submit = realSubmit;
2156
- }
2157
- };
2158
- return instance;
2159
- };
2160
-
2161
- // Utility functions for working with state. Exported because modes
2162
- // sometimes need to do this.
2163
- function copyState(mode, state) {
2164
- if (state === true) return state;
2165
- if (mode.copyState) return mode.copyState(state);
2166
- var nstate = {};
2167
- for (var n in state) {
2168
- var val = state[n];
2169
- if (val instanceof Array) val = val.concat([]);
2170
- nstate[n] = val;
2171
- }
2172
- return nstate;
2173
- }
2174
- CodeMirror.copyState = copyState;
2175
- function startState(mode, a1, a2) {
2176
- return mode.startState ? mode.startState(a1, a2) : true;
2177
- }
2178
- CodeMirror.startState = startState;
2179
-
2180
- // The character stream used by a mode's parser.
2181
- function StringStream(string, tabSize) {
2182
- this.pos = this.start = 0;
2183
- this.string = string;
2184
- this.tabSize = tabSize || 8;
2185
- }
2186
- StringStream.prototype = {
2187
- eol: function() {return this.pos >= this.string.length;},
2188
- sol: function() {return this.pos == 0;},
2189
- peek: function() {return this.string.charAt(this.pos);},
2190
- next: function() {
2191
- if (this.pos < this.string.length)
2192
- return this.string.charAt(this.pos++);
2193
- },
2194
- eat: function(match) {
2195
- var ch = this.string.charAt(this.pos);
2196
- if (typeof match == "string") var ok = ch == match;
2197
- else var ok = ch && (match.test ? match.test(ch) : match(ch));
2198
- if (ok) {++this.pos; return ch;}
2199
- },
2200
- eatWhile: function(match) {
2201
- var start = this.pos;
2202
- while (this.eat(match)){}
2203
- return this.pos > start;
2204
- },
2205
- eatSpace: function() {
2206
- var start = this.pos;
2207
- while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) ++this.pos;
2208
- return this.pos > start;
2209
- },
2210
- skipToEnd: function() {this.pos = this.string.length;},
2211
- skipTo: function(ch) {
2212
- var found = this.string.indexOf(ch, this.pos);
2213
- if (found > -1) {this.pos = found; return true;}
2214
- },
2215
- backUp: function(n) {this.pos -= n;},
2216
- column: function() {return countColumn(this.string, this.start, this.tabSize);},
2217
- indentation: function() {return countColumn(this.string, null, this.tabSize);},
2218
- match: function(pattern, consume, caseInsensitive) {
2219
- if (typeof pattern == "string") {
2220
- function cased(str) {return caseInsensitive ? str.toLowerCase() : str;}
2221
- if (cased(this.string).indexOf(cased(pattern), this.pos) == this.pos) {
2222
- if (consume !== false) this.pos += pattern.length;
2223
- return true;
2224
- }
2225
- }
2226
- else {
2227
- var match = this.string.slice(this.pos).match(pattern);
2228
- if (match && consume !== false) this.pos += match[0].length;
2229
- return match;
2230
- }
2231
- },
2232
- current: function(){return this.string.slice(this.start, this.pos);}
2233
- };
2234
- CodeMirror.StringStream = StringStream;
2235
-
2236
- function MarkedText(from, to, className, marker) {
2237
- this.from = from; this.to = to; this.style = className; this.marker = marker;
2238
- }
2239
- MarkedText.prototype = {
2240
- attach: function(line) { this.marker.set.push(line); },
2241
- detach: function(line) {
2242
- var ix = indexOf(this.marker.set, line);
2243
- if (ix > -1) this.marker.set.splice(ix, 1);
2244
- },
2245
- split: function(pos, lenBefore) {
2246
- if (this.to <= pos && this.to != null) return null;
2247
- var from = this.from < pos || this.from == null ? null : this.from - pos + lenBefore;
2248
- var to = this.to == null ? null : this.to - pos + lenBefore;
2249
- return new MarkedText(from, to, this.style, this.marker);
2250
- },
2251
- dup: function() { return new MarkedText(null, null, this.style, this.marker); },
2252
- clipTo: function(fromOpen, from, toOpen, to, diff) {
2253
- if (fromOpen && to > this.from && (to < this.to || this.to == null))
2254
- this.from = null;
2255
- else if (this.from != null && this.from >= from)
2256
- this.from = Math.max(to, this.from) + diff;
2257
- if (toOpen && (from < this.to || this.to == null) && (from > this.from || this.from == null))
2258
- this.to = null;
2259
- else if (this.to != null && this.to > from)
2260
- this.to = to < this.to ? this.to + diff : from;
2261
- },
2262
- isDead: function() { return this.from != null && this.to != null && this.from >= this.to; },
2263
- sameSet: function(x) { return this.marker == x.marker; }
2264
- };
2265
-
2266
- function Bookmark(pos) {
2267
- this.from = pos; this.to = pos; this.line = null;
2268
- }
2269
- Bookmark.prototype = {
2270
- attach: function(line) { this.line = line; },
2271
- detach: function(line) { if (this.line == line) this.line = null; },
2272
- split: function(pos, lenBefore) {
2273
- if (pos < this.from) {
2274
- this.from = this.to = (this.from - pos) + lenBefore;
2275
- return this;
2276
- }
2277
- },
2278
- isDead: function() { return this.from > this.to; },
2279
- clipTo: function(fromOpen, from, toOpen, to, diff) {
2280
- if ((fromOpen || from < this.from) && (toOpen || to > this.to)) {
2281
- this.from = 0; this.to = -1;
2282
- } else if (this.from > from) {
2283
- this.from = this.to = Math.max(to, this.from) + diff;
2284
- }
2285
- },
2286
- sameSet: function(x) { return false; },
2287
- find: function() {
2288
- if (!this.line || !this.line.parent) return null;
2289
- return {line: lineNo(this.line), ch: this.from};
2290
- },
2291
- clear: function() {
2292
- if (this.line) {
2293
- var found = indexOf(this.line.marked, this);
2294
- if (found != -1) this.line.marked.splice(found, 1);
2295
- this.line = null;
2296
- }
2297
- }
2298
- };
2299
-
2300
- // Line objects. These hold state related to a line, including
2301
- // highlighting info (the styles array).
2302
- function Line(text, styles) {
2303
- this.styles = styles || [text, null];
2304
- this.text = text;
2305
- this.height = 1;
2306
- this.marked = this.gutterMarker = this.className = this.bgClassName = this.handlers = null;
2307
- this.stateAfter = this.parent = this.hidden = null;
2308
- }
2309
- Line.inheritMarks = function(text, orig) {
2310
- var ln = new Line(text), mk = orig && orig.marked;
2311
- if (mk) {
2312
- for (var i = 0; i < mk.length; ++i) {
2313
- if (mk[i].to == null && mk[i].style) {
2314
- var newmk = ln.marked || (ln.marked = []), mark = mk[i];
2315
- var nmark = mark.dup(); newmk.push(nmark); nmark.attach(ln);
2316
- }
2317
- }
2318
- }
2319
- return ln;
2320
- }
2321
- Line.prototype = {
2322
- // Replace a piece of a line, keeping the styles around it intact.
2323
- replace: function(from, to_, text) {
2324
- var st = [], mk = this.marked, to = to_ == null ? this.text.length : to_;
2325
- copyStyles(0, from, this.styles, st);
2326
- if (text) st.push(text, null);
2327
- copyStyles(to, this.text.length, this.styles, st);
2328
- this.styles = st;
2329
- this.text = this.text.slice(0, from) + text + this.text.slice(to);
2330
- this.stateAfter = null;
2331
- if (mk) {
2332
- var diff = text.length - (to - from);
2333
- for (var i = 0; i < mk.length; ++i) {
2334
- var mark = mk[i];
2335
- mark.clipTo(from == null, from || 0, to_ == null, to, diff);
2336
- if (mark.isDead()) {mark.detach(this); mk.splice(i--, 1);}
2337
- }
2338
- }
2339
- },
2340
- // Split a part off a line, keeping styles and markers intact.
2341
- split: function(pos, textBefore) {
2342
- var st = [textBefore, null], mk = this.marked;
2343
- copyStyles(pos, this.text.length, this.styles, st);
2344
- var taken = new Line(textBefore + this.text.slice(pos), st);
2345
- if (mk) {
2346
- for (var i = 0; i < mk.length; ++i) {
2347
- var mark = mk[i];
2348
- var newmark = mark.split(pos, textBefore.length);
2349
- if (newmark) {
2350
- if (!taken.marked) taken.marked = [];
2351
- taken.marked.push(newmark); newmark.attach(taken);
2352
- if (newmark == mark) mk.splice(i--, 1);
2353
- }
2354
- }
2355
- }
2356
- return taken;
2357
- },
2358
- append: function(line) {
2359
- var mylen = this.text.length, mk = line.marked, mymk = this.marked;
2360
- this.text += line.text;
2361
- copyStyles(0, line.text.length, line.styles, this.styles);
2362
- if (mymk) {
2363
- for (var i = 0; i < mymk.length; ++i)
2364
- if (mymk[i].to == null) mymk[i].to = mylen;
2365
- }
2366
- if (mk && mk.length) {
2367
- if (!mymk) this.marked = mymk = [];
2368
- outer: for (var i = 0; i < mk.length; ++i) {
2369
- var mark = mk[i];
2370
- if (!mark.from) {
2371
- for (var j = 0; j < mymk.length; ++j) {
2372
- var mymark = mymk[j];
2373
- if (mymark.to == mylen && mymark.sameSet(mark)) {
2374
- mymark.to = mark.to == null ? null : mark.to + mylen;
2375
- if (mymark.isDead()) {
2376
- mymark.detach(this);
2377
- mk.splice(i--, 1);
2378
- }
2379
- continue outer;
2380
- }
2381
- }
2382
- }
2383
- mymk.push(mark);
2384
- mark.attach(this);
2385
- mark.from += mylen;
2386
- if (mark.to != null) mark.to += mylen;
2387
- }
2388
- }
2389
- },
2390
- fixMarkEnds: function(other) {
2391
- var mk = this.marked, omk = other.marked;
2392
- if (!mk) return;
2393
- for (var i = 0; i < mk.length; ++i) {
2394
- var mark = mk[i], close = mark.to == null;
2395
- if (close && omk) {
2396
- for (var j = 0; j < omk.length; ++j)
2397
- if (omk[j].sameSet(mark)) {close = false; break;}
2398
- }
2399
- if (close) mark.to = this.text.length;
2400
- }
2401
- },
2402
- fixMarkStarts: function() {
2403
- var mk = this.marked;
2404
- if (!mk) return;
2405
- for (var i = 0; i < mk.length; ++i)
2406
- if (mk[i].from == null) mk[i].from = 0;
2407
- },
2408
- addMark: function(mark) {
2409
- mark.attach(this);
2410
- if (this.marked == null) this.marked = [];
2411
- this.marked.push(mark);
2412
- this.marked.sort(function(a, b){return (a.from || 0) - (b.from || 0);});
2413
- },
2414
- // Run the given mode's parser over a line, update the styles
2415
- // array, which contains alternating fragments of text and CSS
2416
- // classes.
2417
- highlight: function(mode, state, tabSize) {
2418
- var stream = new StringStream(this.text, tabSize), st = this.styles, pos = 0;
2419
- var changed = false, curWord = st[0], prevWord;
2420
- if (this.text == "" && mode.blankLine) mode.blankLine(state);
2421
- while (!stream.eol()) {
2422
- var style = mode.token(stream, state);
2423
- var substr = this.text.slice(stream.start, stream.pos);
2424
- stream.start = stream.pos;
2425
- if (pos && st[pos-1] == style)
2426
- st[pos-2] += substr;
2427
- else if (substr) {
2428
- if (!changed && (st[pos+1] != style || (pos && st[pos-2] != prevWord))) changed = true;
2429
- st[pos++] = substr; st[pos++] = style;
2430
- prevWord = curWord; curWord = st[pos];
2431
- }
2432
- // Give up when line is ridiculously long
2433
- if (stream.pos > 5000) {
2434
- st[pos++] = this.text.slice(stream.pos); st[pos++] = null;
2435
- break;
2436
- }
2437
- }
2438
- if (st.length != pos) {st.length = pos; changed = true;}
2439
- if (pos && st[pos-2] != prevWord) changed = true;
2440
- // Short lines with simple highlights return null, and are
2441
- // counted as changed by the driver because they are likely to
2442
- // highlight the same way in various contexts.
2443
- return changed || (st.length < 5 && this.text.length < 10 ? null : false);
2444
- },
2445
- // Fetch the parser token for a given character. Useful for hacks
2446
- // that want to inspect the mode state (say, for completion).
2447
- getTokenAt: function(mode, state, ch) {
2448
- var txt = this.text, stream = new StringStream(txt);
2449
- while (stream.pos < ch && !stream.eol()) {
2450
- stream.start = stream.pos;
2451
- var style = mode.token(stream, state);
2452
- }
2453
- return {start: stream.start,
2454
- end: stream.pos,
2455
- string: stream.current(),
2456
- className: style || null,
2457
- state: state};
2458
- },
2459
- indentation: function(tabSize) {return countColumn(this.text, null, tabSize);},
2460
- // Produces an HTML fragment for the line, taking selection,
2461
- // marking, and highlighting into account.
2462
- getHTML: function(makeTab, wrapAt, wrapId, wrapWBR) {
2463
- var html = [], first = true, col = 0;
2464
- function span_(text, style) {
2465
- if (!text) return;
2466
- // Work around a bug where, in some compat modes, IE ignores leading spaces
2467
- if (first && ie && text.charAt(0) == " ") text = "\u00a0" + text.slice(1);
2468
- first = false;
2469
- if (text.indexOf("\t") == -1) {
2470
- col += text.length;
2471
- var escaped = htmlEscape(text);
2472
- } else {
2473
- var escaped = "";
2474
- for (var pos = 0;;) {
2475
- var idx = text.indexOf("\t", pos);
2476
- if (idx == -1) {
2477
- escaped += htmlEscape(text.slice(pos));
2478
- col += text.length - pos;
2479
- break;
2480
- } else {
2481
- col += idx - pos;
2482
- var tab = makeTab(col);
2483
- escaped += htmlEscape(text.slice(pos, idx)) + tab.html;
2484
- col += tab.width;
2485
- pos = idx + 1;
2486
- }
2487
- }
2488
- }
2489
- if (style) html.push('<span class="', style, '">', escaped, "</span>");
2490
- else html.push(escaped);
2491
- }
2492
- var span = span_;
2493
- if (wrapAt != null) {
2494
- var outPos = 0, open = "<span id=\"" + wrapId + "\">";
2495
- span = function(text, style) {
2496
- var l = text.length;
2497
- if (wrapAt >= outPos && wrapAt < outPos + l) {
2498
- if (wrapAt > outPos) {
2499
- span_(text.slice(0, wrapAt - outPos), style);
2500
- // See comment at the definition of spanAffectsWrapping
2501
- if (wrapWBR) html.push("<wbr>");
2502
- }
2503
- html.push(open);
2504
- var cut = wrapAt - outPos;
2505
- span_(window.opera ? text.slice(cut, cut + 1) : text.slice(cut), style);
2506
- html.push("</span>");
2507
- if (window.opera) span_(text.slice(cut + 1), style);
2508
- wrapAt--;
2509
- outPos += l;
2510
- } else {
2511
- outPos += l;
2512
- span_(text, style);
2513
- // Output empty wrapper when at end of line
2514
- if (outPos == wrapAt && outPos == len) html.push(open + " </span>");
2515
- // Stop outputting HTML when gone sufficiently far beyond measure
2516
- else if (outPos > wrapAt + 10 && /\s/.test(text)) span = function(){};
2517
- }
2518
- }
2519
- }
2520
-
2521
- var st = this.styles, allText = this.text, marked = this.marked;
2522
- var len = allText.length;
2523
- function styleToClass(style) {
2524
- if (!style) return null;
2525
- return "cm-" + style.replace(/ +/g, " cm-");
2526
- }
2527
-
2528
- if (!allText && wrapAt == null) {
2529
- span(" ");
2530
- } else if (!marked || !marked.length) {
2531
- for (var i = 0, ch = 0; ch < len; i+=2) {
2532
- var str = st[i], style = st[i+1], l = str.length;
2533
- if (ch + l > len) str = str.slice(0, len - ch);
2534
- ch += l;
2535
- span(str, styleToClass(style));
2536
- }
2537
- } else {
2538
- var pos = 0, i = 0, text = "", style, sg = 0;
2539
- var nextChange = marked[0].from || 0, marks = [], markpos = 0;
2540
- function advanceMarks() {
2541
- var m;
2542
- while (markpos < marked.length &&
2543
- ((m = marked[markpos]).from == pos || m.from == null)) {
2544
- if (m.style != null) marks.push(m);
2545
- ++markpos;
2546
- }
2547
- nextChange = markpos < marked.length ? marked[markpos].from : Infinity;
2548
- for (var i = 0; i < marks.length; ++i) {
2549
- var to = marks[i].to || Infinity;
2550
- if (to == pos) marks.splice(i--, 1);
2551
- else nextChange = Math.min(to, nextChange);
2552
- }
2553
- }
2554
- var m = 0;
2555
- while (pos < len) {
2556
- if (nextChange == pos) advanceMarks();
2557
- var upto = Math.min(len, nextChange);
2558
- while (true) {
2559
- if (text) {
2560
- var end = pos + text.length;
2561
- var appliedStyle = style;
2562
- for (var j = 0; j < marks.length; ++j)
2563
- appliedStyle = (appliedStyle ? appliedStyle + " " : "") + marks[j].style;
2564
- span(end > upto ? text.slice(0, upto - pos) : text, appliedStyle);
2565
- if (end >= upto) {text = text.slice(upto - pos); pos = upto; break;}
2566
- pos = end;
2567
- }
2568
- text = st[i++]; style = styleToClass(st[i++]);
2569
- }
2570
- }
2571
- }
2572
- return html.join("");
2573
- },
2574
- cleanUp: function() {
2575
- this.parent = null;
2576
- if (this.marked)
2577
- for (var i = 0, e = this.marked.length; i < e; ++i) this.marked[i].detach(this);
2578
- }
2579
- };
2580
- // Utility used by replace and split above
2581
- function copyStyles(from, to, source, dest) {
2582
- for (var i = 0, pos = 0, state = 0; pos < to; i+=2) {
2583
- var part = source[i], end = pos + part.length;
2584
- if (state == 0) {
2585
- if (end > from) dest.push(part.slice(from - pos, Math.min(part.length, to - pos)), source[i+1]);
2586
- if (end >= from) state = 1;
2587
- }
2588
- else if (state == 1) {
2589
- if (end > to) dest.push(part.slice(0, to - pos), source[i+1]);
2590
- else dest.push(part, source[i+1]);
2591
- }
2592
- pos = end;
2593
- }
2594
- }
2595
-
2596
- // Data structure that holds the sequence of lines.
2597
- function LeafChunk(lines) {
2598
- this.lines = lines;
2599
- this.parent = null;
2600
- for (var i = 0, e = lines.length, height = 0; i < e; ++i) {
2601
- lines[i].parent = this;
2602
- height += lines[i].height;
2603
- }
2604
- this.height = height;
2605
- }
2606
- LeafChunk.prototype = {
2607
- chunkSize: function() { return this.lines.length; },
2608
- remove: function(at, n, callbacks) {
2609
- for (var i = at, e = at + n; i < e; ++i) {
2610
- var line = this.lines[i];
2611
- this.height -= line.height;
2612
- line.cleanUp();
2613
- if (line.handlers)
2614
- for (var j = 0; j < line.handlers.length; ++j) callbacks.push(line.handlers[j]);
2615
- }
2616
- this.lines.splice(at, n);
2617
- },
2618
- collapse: function(lines) {
2619
- lines.splice.apply(lines, [lines.length, 0].concat(this.lines));
2620
- },
2621
- insertHeight: function(at, lines, height) {
2622
- this.height += height;
2623
- this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at));
2624
- for (var i = 0, e = lines.length; i < e; ++i) lines[i].parent = this;
2625
- },
2626
- iterN: function(at, n, op) {
2627
- for (var e = at + n; at < e; ++at)
2628
- if (op(this.lines[at])) return true;
2629
- }
2630
- };
2631
- function BranchChunk(children) {
2632
- this.children = children;
2633
- var size = 0, height = 0;
2634
- for (var i = 0, e = children.length; i < e; ++i) {
2635
- var ch = children[i];
2636
- size += ch.chunkSize(); height += ch.height;
2637
- ch.parent = this;
2638
- }
2639
- this.size = size;
2640
- this.height = height;
2641
- this.parent = null;
2642
- }
2643
- BranchChunk.prototype = {
2644
- chunkSize: function() { return this.size; },
2645
- remove: function(at, n, callbacks) {
2646
- this.size -= n;
2647
- for (var i = 0; i < this.children.length; ++i) {
2648
- var child = this.children[i], sz = child.chunkSize();
2649
- if (at < sz) {
2650
- var rm = Math.min(n, sz - at), oldHeight = child.height;
2651
- child.remove(at, rm, callbacks);
2652
- this.height -= oldHeight - child.height;
2653
- if (sz == rm) { this.children.splice(i--, 1); child.parent = null; }
2654
- if ((n -= rm) == 0) break;
2655
- at = 0;
2656
- } else at -= sz;
2657
- }
2658
- if (this.size - n < 25) {
2659
- var lines = [];
2660
- this.collapse(lines);
2661
- this.children = [new LeafChunk(lines)];
2662
- this.children[0].parent = this;
2663
- }
2664
- },
2665
- collapse: function(lines) {
2666
- for (var i = 0, e = this.children.length; i < e; ++i) this.children[i].collapse(lines);
2667
- },
2668
- insert: function(at, lines) {
2669
- var height = 0;
2670
- for (var i = 0, e = lines.length; i < e; ++i) height += lines[i].height;
2671
- this.insertHeight(at, lines, height);
2672
- },
2673
- insertHeight: function(at, lines, height) {
2674
- this.size += lines.length;
2675
- this.height += height;
2676
- for (var i = 0, e = this.children.length; i < e; ++i) {
2677
- var child = this.children[i], sz = child.chunkSize();
2678
- if (at <= sz) {
2679
- child.insertHeight(at, lines, height);
2680
- if (child.lines && child.lines.length > 50) {
2681
- while (child.lines.length > 50) {
2682
- var spilled = child.lines.splice(child.lines.length - 25, 25);
2683
- var newleaf = new LeafChunk(spilled);
2684
- child.height -= newleaf.height;
2685
- this.children.splice(i + 1, 0, newleaf);
2686
- newleaf.parent = this;
2687
- }
2688
- this.maybeSpill();
2689
- }
2690
- break;
2691
- }
2692
- at -= sz;
2693
- }
2694
- },
2695
- maybeSpill: function() {
2696
- if (this.children.length <= 10) return;
2697
- var me = this;
2698
- do {
2699
- var spilled = me.children.splice(me.children.length - 5, 5);
2700
- var sibling = new BranchChunk(spilled);
2701
- if (!me.parent) { // Become the parent node
2702
- var copy = new BranchChunk(me.children);
2703
- copy.parent = me;
2704
- me.children = [copy, sibling];
2705
- me = copy;
2706
- } else {
2707
- me.size -= sibling.size;
2708
- me.height -= sibling.height;
2709
- var myIndex = indexOf(me.parent.children, me);
2710
- me.parent.children.splice(myIndex + 1, 0, sibling);
2711
- }
2712
- sibling.parent = me.parent;
2713
- } while (me.children.length > 10);
2714
- me.parent.maybeSpill();
2715
- },
2716
- iter: function(from, to, op) { this.iterN(from, to - from, op); },
2717
- iterN: function(at, n, op) {
2718
- for (var i = 0, e = this.children.length; i < e; ++i) {
2719
- var child = this.children[i], sz = child.chunkSize();
2720
- if (at < sz) {
2721
- var used = Math.min(n, sz - at);
2722
- if (child.iterN(at, used, op)) return true;
2723
- if ((n -= used) == 0) break;
2724
- at = 0;
2725
- } else at -= sz;
2726
- }
2727
- }
2728
- };
2729
-
2730
- function getLineAt(chunk, n) {
2731
- while (!chunk.lines) {
2732
- for (var i = 0;; ++i) {
2733
- var child = chunk.children[i], sz = child.chunkSize();
2734
- if (n < sz) { chunk = child; break; }
2735
- n -= sz;
2736
- }
2737
- }
2738
- return chunk.lines[n];
2739
- }
2740
- function lineNo(line) {
2741
- if (line.parent == null) return null;
2742
- var cur = line.parent, no = indexOf(cur.lines, line);
2743
- for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) {
2744
- for (var i = 0, e = chunk.children.length; ; ++i) {
2745
- if (chunk.children[i] == cur) break;
2746
- no += chunk.children[i].chunkSize();
2747
- }
2748
- }
2749
- return no;
2750
- }
2751
- function lineAtHeight(chunk, h) {
2752
- var n = 0;
2753
- outer: do {
2754
- for (var i = 0, e = chunk.children.length; i < e; ++i) {
2755
- var child = chunk.children[i], ch = child.height;
2756
- if (h < ch) { chunk = child; continue outer; }
2757
- h -= ch;
2758
- n += child.chunkSize();
2759
- }
2760
- return n;
2761
- } while (!chunk.lines);
2762
- for (var i = 0, e = chunk.lines.length; i < e; ++i) {
2763
- var line = chunk.lines[i], lh = line.height;
2764
- if (h < lh) break;
2765
- h -= lh;
2766
- }
2767
- return n + i;
2768
- }
2769
- function heightAtLine(chunk, n) {
2770
- var h = 0;
2771
- outer: do {
2772
- for (var i = 0, e = chunk.children.length; i < e; ++i) {
2773
- var child = chunk.children[i], sz = child.chunkSize();
2774
- if (n < sz) { chunk = child; continue outer; }
2775
- n -= sz;
2776
- h += child.height;
2777
- }
2778
- return h;
2779
- } while (!chunk.lines);
2780
- for (var i = 0; i < n; ++i) h += chunk.lines[i].height;
2781
- return h;
2782
- }
2783
-
2784
- // The history object 'chunks' changes that are made close together
2785
- // and at almost the same time into bigger undoable units.
2786
- function History() {
2787
- this.time = 0;
2788
- this.done = []; this.undone = [];
2789
- this.compound = 0;
2790
- this.closed = false;
2791
- }
2792
- History.prototype = {
2793
- addChange: function(start, added, old) {
2794
- this.undone.length = 0;
2795
- var time = +new Date, cur = this.done[this.done.length - 1], last = cur && cur[cur.length - 1];
2796
- var dtime = time - this.time;
2797
-
2798
- if (this.compound && cur && !this.closed) {
2799
- cur.push({start: start, added: added, old: old});
2800
- } else if (dtime > 400 || !last || this.closed ||
2801
- last.start > start + old.length || last.start + last.added < start) {
2802
- this.done.push([{start: start, added: added, old: old}]);
2803
- this.closed = false;
2804
- } else {
2805
- var startBefore = Math.max(0, last.start - start),
2806
- endAfter = Math.max(0, (start + old.length) - (last.start + last.added));
2807
- for (var i = startBefore; i > 0; --i) last.old.unshift(old[i - 1]);
2808
- for (var i = endAfter; i > 0; --i) last.old.push(old[old.length - i]);
2809
- if (startBefore) last.start = start;
2810
- last.added += added - (old.length - startBefore - endAfter);
2811
- }
2812
- this.time = time;
2813
- },
2814
- startCompound: function() {
2815
- if (!this.compound++) this.closed = true;
2816
- },
2817
- endCompound: function() {
2818
- if (!--this.compound) this.closed = true;
2819
- }
2820
- };
2821
-
2822
- function stopMethod() {e_stop(this);}
2823
- // Ensure an event has a stop method.
2824
- function addStop(event) {
2825
- if (!event.stop) event.stop = stopMethod;
2826
- return event;
2827
- }
2828
-
2829
- function e_preventDefault(e) {
2830
- if (e.preventDefault) e.preventDefault();
2831
- else e.returnValue = false;
2832
- }
2833
- function e_stopPropagation(e) {
2834
- if (e.stopPropagation) e.stopPropagation();
2835
- else e.cancelBubble = true;
2836
- }
2837
- function e_stop(e) {e_preventDefault(e); e_stopPropagation(e);}
2838
- CodeMirror.e_stop = e_stop;
2839
- CodeMirror.e_preventDefault = e_preventDefault;
2840
- CodeMirror.e_stopPropagation = e_stopPropagation;
2841
-
2842
- function e_target(e) {return e.target || e.srcElement;}
2843
- function e_button(e) {
2844
- if (e.which) return e.which;
2845
- else if (e.button & 1) return 1;
2846
- else if (e.button & 2) return 3;
2847
- else if (e.button & 4) return 2;
2848
- }
2849
-
2850
- // Allow 3rd-party code to override event properties by adding an override
2851
- // object to an event object.
2852
- function e_prop(e, prop) {
2853
- var overridden = e.override && e.override.hasOwnProperty(prop);
2854
- return overridden ? e.override[prop] : e[prop];
2855
- }
2856
-
2857
- // Event handler registration. If disconnect is true, it'll return a
2858
- // function that unregisters the handler.
2859
- function connect(node, type, handler, disconnect) {
2860
- if (typeof node.addEventListener == "function") {
2861
- node.addEventListener(type, handler, false);
2862
- if (disconnect) return function() {node.removeEventListener(type, handler, false);};
2863
- }
2864
- else {
2865
- var wrapHandler = function(event) {handler(event || window.event);};
2866
- node.attachEvent("on" + type, wrapHandler);
2867
- if (disconnect) return function() {node.detachEvent("on" + type, wrapHandler);};
2868
- }
2869
- }
2870
- CodeMirror.connect = connect;
2871
-
2872
- function Delayed() {this.id = null;}
2873
- Delayed.prototype = {set: function(ms, f) {clearTimeout(this.id); this.id = setTimeout(f, ms);}};
2874
-
2875
- var Pass = CodeMirror.Pass = {toString: function(){return "CodeMirror.Pass";}};
2876
-
2877
- var gecko = /gecko\/\d{7}/i.test(navigator.userAgent);
2878
- var ie = /MSIE \d/.test(navigator.userAgent);
2879
- var ie_lt9 = /MSIE [1-8]\b/.test(navigator.userAgent);
2880
- var quirksMode = ie && document.documentMode == 5;
2881
- var webkit = /WebKit\//.test(navigator.userAgent);
2882
- var chrome = /Chrome\//.test(navigator.userAgent);
2883
- var safari = /Apple Computer/.test(navigator.vendor);
2884
- var khtml = /KHTML\//.test(navigator.userAgent);
2885
-
2886
- // Detect drag-and-drop
2887
- var dragAndDrop = function() {
2888
- // There is *some* kind of drag-and-drop support in IE6-8, but I
2889
- // couldn't get it to work yet.
2890
- if (ie_lt9) return false;
2891
- var div = document.createElement('div');
2892
- return "draggable" in div || "dragDrop" in div;
2893
- }();
2894
-
2895
- // Feature-detect whether newlines in textareas are converted to \r\n
2896
- var lineSep = function () {
2897
- var te = document.createElement("textarea");
2898
- te.value = "foo\nbar";
2899
- if (te.value.indexOf("\r") > -1) return "\r\n";
2900
- return "\n";
2901
- }();
2902
-
2903
- // For a reason I have yet to figure out, some browsers disallow
2904
- // word wrapping between certain characters *only* if a new inline
2905
- // element is started between them. This makes it hard to reliably
2906
- // measure the position of things, since that requires inserting an
2907
- // extra span. This terribly fragile set of regexps matches the
2908
- // character combinations that suffer from this phenomenon on the
2909
- // various browsers.
2910
- var spanAffectsWrapping = /^$/; // Won't match any two-character string
2911
- if (gecko) spanAffectsWrapping = /$'/;
2912
- else if (safari) spanAffectsWrapping = /\-[^ \-?]|\?[^ !'\"\),.\-\/:;\?\]\}]/;
2913
- else if (chrome) spanAffectsWrapping = /\-[^ \-\.?]|\?[^ \-\.?\]\}:;!'\"\),\/]|[\.!\"#&%\)*+,:;=>\]|\}~][\(\{\[<]|\$'/;
2914
-
2915
- // Counts the column offset in a string, taking tabs into account.
2916
- // Used mostly to find indentation.
2917
- function countColumn(string, end, tabSize) {
2918
- if (end == null) {
2919
- end = string.search(/[^\s\u00a0]/);
2920
- if (end == -1) end = string.length;
2921
- }
2922
- for (var i = 0, n = 0; i < end; ++i) {
2923
- if (string.charAt(i) == "\t") n += tabSize - (n % tabSize);
2924
- else ++n;
2925
- }
2926
- return n;
2927
- }
2928
-
2929
- function computedStyle(elt) {
2930
- if (elt.currentStyle) return elt.currentStyle;
2931
- return window.getComputedStyle(elt, null);
2932
- }
2933
-
2934
- // Find the position of an element by following the offsetParent chain.
2935
- // If screen==true, it returns screen (rather than page) coordinates.
2936
- function eltOffset(node, screen) {
2937
- var bod = node.ownerDocument.body;
2938
- var x = 0, y = 0, skipBody = false;
2939
- for (var n = node; n; n = n.offsetParent) {
2940
- var ol = n.offsetLeft, ot = n.offsetTop;
2941
- // Firefox reports weird inverted offsets when the body has a border.
2942
- if (n == bod) { x += Math.abs(ol); y += Math.abs(ot); }
2943
- else { x += ol, y += ot; }
2944
- if (screen && computedStyle(n).position == "fixed")
2945
- skipBody = true;
2946
- }
2947
- var e = screen && !skipBody ? null : bod;
2948
- for (var n = node.parentNode; n != e; n = n.parentNode)
2949
- if (n.scrollLeft != null) { x -= n.scrollLeft; y -= n.scrollTop;}
2950
- return {left: x, top: y};
2951
- }
2952
- // Use the faster and saner getBoundingClientRect method when possible.
2953
- if (document.documentElement.getBoundingClientRect != null) eltOffset = function(node, screen) {
2954
- // Take the parts of bounding client rect that we are interested in so we are able to edit if need be,
2955
- // since the returned value cannot be changed externally (they are kept in sync as the element moves within the page)
2956
- try { var box = node.getBoundingClientRect(); box = { top: box.top, left: box.left }; }
2957
- catch(e) { box = {top: 0, left: 0}; }
2958
- if (!screen) {
2959
- // Get the toplevel scroll, working around browser differences.
2960
- if (window.pageYOffset == null) {
2961
- var t = document.documentElement || document.body.parentNode;
2962
- if (t.scrollTop == null) t = document.body;
2963
- box.top += t.scrollTop; box.left += t.scrollLeft;
2964
- } else {
2965
- box.top += window.pageYOffset; box.left += window.pageXOffset;
2966
- }
2967
- }
2968
- return box;
2969
- };
2970
-
2971
- // Get a node's text content.
2972
- function eltText(node) {
2973
- return node.textContent || node.innerText || node.nodeValue || "";
2974
- }
2975
- function selectInput(node) {
2976
- if (ios) { // Mobile Safari apparently has a bug where select() is broken.
2977
- node.selectionStart = 0;
2978
- node.selectionEnd = node.value.length;
2979
- } else node.select();
2980
- }
2981
-
2982
- // Operations on {line, ch} objects.
2983
- function posEq(a, b) {return a.line == b.line && a.ch == b.ch;}
2984
- function posLess(a, b) {return a.line < b.line || (a.line == b.line && a.ch < b.ch);}
2985
- function copyPos(x) {return {line: x.line, ch: x.ch};}
2986
-
2987
- var escapeElement = document.createElement("pre");
2988
- function htmlEscape(str) {
2989
- escapeElement.textContent = str;
2990
- return escapeElement.innerHTML;
2991
- }
2992
- // Recent (late 2011) Opera betas insert bogus newlines at the start
2993
- // of the textContent, so we strip those.
2994
- if (htmlEscape("a") == "\na")
2995
- htmlEscape = function(str) {
2996
- escapeElement.textContent = str;
2997
- return escapeElement.innerHTML.slice(1);
2998
- };
2999
- // Some IEs don't preserve tabs through innerHTML
3000
- else if (htmlEscape("\t") != "\t")
3001
- htmlEscape = function(str) {
3002
- escapeElement.innerHTML = "";
3003
- escapeElement.appendChild(document.createTextNode(str));
3004
- return escapeElement.innerHTML;
3005
- };
3006
- CodeMirror.htmlEscape = htmlEscape;
3007
-
3008
- // Used to position the cursor after an undo/redo by finding the
3009
- // last edited character.
3010
- function editEnd(from, to) {
3011
- if (!to) return 0;
3012
- if (!from) return to.length;
3013
- for (var i = from.length, j = to.length; i >= 0 && j >= 0; --i, --j)
3014
- if (from.charAt(i) != to.charAt(j)) break;
3015
- return j + 1;
3016
- }
3017
-
3018
- function indexOf(collection, elt) {
3019
- if (collection.indexOf) return collection.indexOf(elt);
3020
- for (var i = 0, e = collection.length; i < e; ++i)
3021
- if (collection[i] == elt) return i;
3022
- return -1;
3023
- }
3024
- function isWordChar(ch) {
3025
- return /\w/.test(ch) || ch.toUpperCase() != ch.toLowerCase();
3026
- }
3027
-
3028
- // See if "".split is the broken IE version, if so, provide an
3029
- // alternative way to split lines.
3030
- var splitLines = "\n\nb".split(/\n/).length != 3 ? function(string) {
3031
- var pos = 0, nl, result = [];
3032
- while ((nl = string.indexOf("\n", pos)) > -1) {
3033
- result.push(string.slice(pos, string.charAt(nl-1) == "\r" ? nl - 1 : nl));
3034
- pos = nl + 1;
3035
- }
3036
- result.push(string.slice(pos));
3037
- return result;
3038
- } : function(string){return string.split(/\r?\n/);};
3039
- CodeMirror.splitLines = splitLines;
3040
-
3041
- var hasSelection = window.getSelection ? function(te) {
3042
- try { return te.selectionStart != te.selectionEnd; }
3043
- catch(e) { return false; }
3044
- } : function(te) {
3045
- try {var range = te.ownerDocument.selection.createRange();}
3046
- catch(e) {}
3047
- if (!range || range.parentElement() != te) return false;
3048
- return range.compareEndPoints("StartToEnd", range) != 0;
3049
- };
3050
-
3051
- CodeMirror.defineMode("null", function() {
3052
- return {token: function(stream) {stream.skipToEnd();}};
3053
- });
3054
- CodeMirror.defineMIME("text/plain", "null");
3055
-
3056
- var keyNames = {3: "Enter", 8: "Backspace", 9: "Tab", 13: "Enter", 16: "Shift", 17: "Ctrl", 18: "Alt",
3057
- 19: "Pause", 20: "CapsLock", 27: "Esc", 32: "Space", 33: "PageUp", 34: "PageDown", 35: "End",
3058
- 36: "Home", 37: "Left", 38: "Up", 39: "Right", 40: "Down", 44: "PrintScrn", 45: "Insert",
3059
- 46: "Delete", 59: ";", 91: "Mod", 92: "Mod", 93: "Mod", 127: "Delete", 186: ";", 187: "=", 188: ",",
3060
- 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\", 221: "]", 222: "'", 63276: "PageUp",
3061
- 63277: "PageDown", 63275: "End", 63273: "Home", 63234: "Left", 63232: "Up", 63235: "Right",
3062
- 63233: "Down", 63302: "Insert", 63272: "Delete"};
3063
- CodeMirror.keyNames = keyNames;
3064
- (function() {
3065
- // Number keys
3066
- for (var i = 0; i < 10; i++) keyNames[i + 48] = String(i);
3067
- // Alphabetic keys
3068
- for (var i = 65; i <= 90; i++) keyNames[i] = String.fromCharCode(i);
3069
- // Function keys
3070
- for (var i = 1; i <= 12; i++) keyNames[i + 111] = keyNames[i + 63235] = "F" + i;
3071
- })();
3072
-
3073
- return CodeMirror;
3074
- })();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/CodeMirror2/mode/clike/clike.js DELETED
@@ -1,234 +0,0 @@
1
- CodeMirror.defineMode("clike", function(config, parserConfig) {
2
- var indentUnit = config.indentUnit,
3
- keywords = parserConfig.keywords || {},
4
- blockKeywords = parserConfig.blockKeywords || {},
5
- atoms = parserConfig.atoms || {},
6
- hooks = parserConfig.hooks || {},
7
- multiLineStrings = parserConfig.multiLineStrings;
8
- var isOperatorChar = /[+\-*&%=<>!?|\/]/;
9
-
10
- var curPunc;
11
-
12
- function tokenBase(stream, state) {
13
- var ch = stream.next();
14
- if (hooks[ch]) {
15
- var result = hooks[ch](stream, state);
16
- if (result !== false) return result;
17
- }
18
- if (ch == '"' || ch == "'") {
19
- state.tokenize = tokenString(ch);
20
- return state.tokenize(stream, state);
21
- }
22
- if (/[\[\]{}\(\),;\:\.]/.test(ch)) {
23
- curPunc = ch;
24
- return null;
25
- }
26
- if (/\d/.test(ch)) {
27
- stream.eatWhile(/[\w\.]/);
28
- return "number";
29
- }
30
- if (ch == "/") {
31
- if (stream.eat("*")) {
32
- state.tokenize = tokenComment;
33
- return tokenComment(stream, state);
34
- }
35
- if (stream.eat("/")) {
36
- stream.skipToEnd();
37
- return "comment";
38
- }
39
- }
40
- if (isOperatorChar.test(ch)) {
41
- stream.eatWhile(isOperatorChar);
42
- return "operator";
43
- }
44
- stream.eatWhile(/[\w\$_]/);
45
- var cur = stream.current();
46
- if (keywords.propertyIsEnumerable(cur)) {
47
- if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement";
48
- return "keyword";
49
- }
50
- if (atoms.propertyIsEnumerable(cur)) return "atom";
51
- return "word";
52
- }
53
-
54
- function tokenString(quote) {
55
- return function(stream, state) {
56
- var escaped = false, next, end = false;
57
- while ((next = stream.next()) != null) {
58
- if (next == quote && !escaped) {end = true; break;}
59
- escaped = !escaped && next == "\\";
60
- }
61
- if (end || !(escaped || multiLineStrings))
62
- state.tokenize = null;
63
- return "string";
64
- };
65
- }
66
-
67
- function tokenComment(stream, state) {
68
- var maybeEnd = false, ch;
69
- while (ch = stream.next()) {
70
- if (ch == "/" && maybeEnd) {
71
- state.tokenize = null;
72
- break;
73
- }
74
- maybeEnd = (ch == "*");
75
- }
76
- return "comment";
77
- }
78
-
79
- function Context(indented, column, type, align, prev) {
80
- this.indented = indented;
81
- this.column = column;
82
- this.type = type;
83
- this.align = align;
84
- this.prev = prev;
85
- }
86
- function pushContext(state, col, type) {
87
- return state.context = new Context(state.indented, col, type, null, state.context);
88
- }
89
- function popContext(state) {
90
- var t = state.context.type;
91
- if (t == ")" || t == "]" || t == "}")
92
- state.indented = state.context.indented;
93
- return state.context = state.context.prev;
94
- }
95
-
96
- // Interface
97
-
98
- return {
99
- startState: function(basecolumn) {
100
- return {
101
- tokenize: null,
102
- context: new Context((basecolumn || 0) - indentUnit, 0, "top", false),
103
- indented: 0,
104
- startOfLine: true
105
- };
106
- },
107
-
108
- token: function(stream, state) {
109
- var ctx = state.context;
110
- if (stream.sol()) {
111
- if (ctx.align == null) ctx.align = false;
112
- state.indented = stream.indentation();
113
- state.startOfLine = true;
114
- }
115
- if (stream.eatSpace()) return null;
116
- curPunc = null;
117
- var style = (state.tokenize || tokenBase)(stream, state);
118
- if (style == "comment" || style == "meta") return style;
119
- if (ctx.align == null) ctx.align = true;
120
-
121
- if ((curPunc == ";" || curPunc == ":") && ctx.type == "statement") popContext(state);
122
- else if (curPunc == "{") pushContext(state, stream.column(), "}");
123
- else if (curPunc == "[") pushContext(state, stream.column(), "]");
124
- else if (curPunc == "(") pushContext(state, stream.column(), ")");
125
- else if (curPunc == "}") {
126
- while (ctx.type == "statement") ctx = popContext(state);
127
- if (ctx.type == "}") ctx = popContext(state);
128
- while (ctx.type == "statement") ctx = popContext(state);
129
- }
130
- else if (curPunc == ctx.type) popContext(state);
131
- else if (ctx.type == "}" || ctx.type == "top" || (ctx.type == "statement" && curPunc == "newstatement"))
132
- pushContext(state, stream.column(), "statement");
133
- state.startOfLine = false;
134
- return style;
135
- },
136
-
137
- indent: function(state, textAfter) {
138
- if (state.tokenize != tokenBase && state.tokenize != null) return 0;
139
- var ctx = state.context, firstChar = textAfter && textAfter.charAt(0);
140
- if (ctx.type == "statement" && firstChar == "}") ctx = ctx.prev;
141
- var closing = firstChar == ctx.type;
142
- if (ctx.type == "statement") return ctx.indented + (firstChar == "{" ? 0 : indentUnit);
143
- else if (ctx.align) return ctx.column + (closing ? 0 : 1);
144
- else return ctx.indented + (closing ? 0 : indentUnit);
145
- },
146
-
147
- electricChars: "{}"
148
- };
149
- });
150
-
151
- (function() {
152
- function words(str) {
153
- var obj = {}, words = str.split(" ");
154
- for (var i = 0; i < words.length; ++i) obj[words[i]] = true;
155
- return obj;
156
- }
157
- var cKeywords = "auto if break int case long char register continue return default short do sizeof " +
158
- "double static else struct entry switch extern typedef float union for unsigned " +
159
- "goto while enum void const signed volatile";
160
-
161
- function cppHook(stream, state) {
162
- if (!state.startOfLine) return false;
163
- stream.skipToEnd();
164
- return "meta";
165
- }
166
-
167
- // C#-style strings where "" escapes a quote.
168
- function tokenAtString(stream, state) {
169
- var next;
170
- while ((next = stream.next()) != null) {
171
- if (next == '"' && !stream.eat('"')) {
172
- state.tokenize = null;
173
- break;
174
- }
175
- }
176
- return "string";
177
- }
178
-
179
- CodeMirror.defineMIME("text/x-csrc", {
180
- name: "clike",
181
- keywords: words(cKeywords),
182
- blockKeywords: words("case do else for if switch while struct"),
183
- atoms: words("null"),
184
- hooks: {"#": cppHook}
185
- });
186
- CodeMirror.defineMIME("text/x-c++src", {
187
- name: "clike",
188
- keywords: words(cKeywords + " asm dynamic_cast namespace reinterpret_cast try bool explicit new " +
189
- "static_cast typeid catch operator template typename class friend private " +
190
- "this using const_cast inline public throw virtual delete mutable protected " +
191
- "wchar_t"),
192
- blockKeywords: words("catch class do else finally for if struct switch try while"),
193
- atoms: words("true false null"),
194
- hooks: {"#": cppHook}
195
- });
196
- CodeMirror.defineMIME("text/x-java", {
197
- name: "clike",
198
- keywords: words("abstract assert boolean break byte case catch char class const continue default " +
199
- "do double else enum extends final finally float for goto if implements import " +
200
- "instanceof int interface long native new package private protected public " +
201
- "return short static strictfp super switch synchronized this throw throws transient " +
202
- "try void volatile while"),
203
- blockKeywords: words("catch class do else finally for if switch try while"),
204
- atoms: words("true false null"),
205
- hooks: {
206
- "@": function(stream, state) {
207
- stream.eatWhile(/[\w\$_]/);
208
- return "meta";
209
- }
210
- }
211
- });
212
- CodeMirror.defineMIME("text/x-csharp", {
213
- name: "clike",
214
- keywords: words("abstract as base bool break byte case catch char checked class const continue decimal" +
215
- " default delegate do double else enum event explicit extern finally fixed float for" +
216
- " foreach goto if implicit in int interface internal is lock long namespace new object" +
217
- " operator out override params private protected public readonly ref return sbyte sealed short" +
218
- " sizeof stackalloc static string struct switch this throw try typeof uint ulong unchecked" +
219
- " unsafe ushort using virtual void volatile while add alias ascending descending dynamic from get" +
220
- " global group into join let orderby partial remove select set value var yield"),
221
- blockKeywords: words("catch class do else finally for foreach if struct switch try while"),
222
- atoms: words("true false null"),
223
- hooks: {
224
- "@": function(stream, state) {
225
- if (stream.eat('"')) {
226
- state.tokenize = tokenAtString;
227
- return tokenAtString(stream, state);
228
- }
229
- stream.eatWhile(/[\w\$_]/);
230
- return "meta";
231
- }
232
- }
233
- });
234
- }());
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/CodeMirror2/mode/coffeescript/LICENSE DELETED
@@ -1,22 +0,0 @@
1
- The MIT License
2
-
3
- Copyright (c) 2011 Jeff Pickhardt
4
- Modified from the Python CodeMirror mode, Copyright (c) 2010 Timothy Farrell
5
-
6
- Permission is hereby granted, free of charge, to any person obtaining a copy
7
- of this software and associated documentation files (the "Software"), to deal
8
- in the Software without restriction, including without limitation the rights
9
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
- copies of the Software, and to permit persons to whom the Software is
11
- furnished to do so, subject to the following conditions:
12
-
13
- The above copyright notice and this permission notice shall be included in
14
- all copies or substantial portions of the Software.
15
-
16
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22
- THE SOFTWARE.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/CodeMirror2/mode/coffeescript/coffeescript.js DELETED
@@ -1,347 +0,0 @@
1
- /**
2
- * Link to the project's GitHub page:
3
- * https://github.com/pickhardt/coffeescript-codemirror-mode
4
- */
5
- CodeMirror.defineMode('coffeescript', function(conf) {
6
- var ERRORCLASS = 'error';
7
-
8
- function wordRegexp(words) {
9
- return new RegExp("^((" + words.join(")|(") + "))\\b");
10
- }
11
-
12
- var singleOperators = new RegExp("^[\\+\\-\\*/%&|\\^~<>!\?]");
13
- var singleDelimiters = new RegExp('^[\\(\\)\\[\\]\\{\\}@,:`=;\\.]');
14
- var doubleOperators = new RegExp("^((\->)|(\=>)|(\\+\\+)|(\\+\\=)|(\\-\\-)|(\\-\\=)|(\\*\\*)|(\\*\\=)|(\\/\\/)|(\\/\\=)|(==)|(!=)|(<=)|(>=)|(<>)|(<<)|(>>)|(//))");
15
- var doubleDelimiters = new RegExp("^((\\.\\.)|(\\+=)|(\\-=)|(\\*=)|(%=)|(/=)|(&=)|(\\|=)|(\\^=))");
16
- var tripleDelimiters = new RegExp("^((\\.\\.\\.)|(//=)|(>>=)|(<<=)|(\\*\\*=))");
17
- var identifiers = new RegExp("^[_A-Za-z$][_A-Za-z$0-9]*");
18
-
19
- var wordOperators = wordRegexp(['and', 'or', 'not',
20
- 'is', 'isnt', 'in',
21
- 'instanceof', 'typeof']);
22
- var indentKeywords = ['for', 'while', 'loop', 'if', 'unless', 'else',
23
- 'switch', 'try', 'catch', 'finally', 'class'];
24
- var commonKeywords = ['break', 'by', 'continue', 'debugger', 'delete',
25
- 'do', 'in', 'of', 'new', 'return', 'then',
26
- 'this', 'throw', 'when', 'until'];
27
-
28
- var keywords = wordRegexp(indentKeywords.concat(commonKeywords));
29
-
30
- indentKeywords = wordRegexp(indentKeywords);
31
-
32
-
33
- var stringPrefixes = new RegExp("^('{3}|\"{3}|['\"])");
34
- var regexPrefixes = new RegExp("^(/{3}|/)");
35
- var commonConstants = ['Infinity', 'NaN', 'undefined', 'null', 'true', 'false', 'on', 'off', 'yes', 'no'];
36
- var constants = wordRegexp(commonConstants);
37
-
38
- // Tokenizers
39
- function tokenBase(stream, state) {
40
- // Handle scope changes
41
- if (stream.sol()) {
42
- var scopeOffset = state.scopes[0].offset;
43
- if (stream.eatSpace()) {
44
- var lineOffset = stream.indentation();
45
- if (lineOffset > scopeOffset) {
46
- return 'indent';
47
- } else if (lineOffset < scopeOffset) {
48
- return 'dedent';
49
- }
50
- return null;
51
- } else {
52
- if (scopeOffset > 0) {
53
- dedent(stream, state);
54
- }
55
- }
56
- }
57
- if (stream.eatSpace()) {
58
- return null;
59
- }
60
-
61
- var ch = stream.peek();
62
-
63
- // Handle docco title comment (single line)
64
- if (stream.match("####")) {
65
- stream.skipToEnd();
66
- return 'comment';
67
- }
68
-
69
- // Handle multi line comments
70
- if (stream.match("###")) {
71
- state.tokenize = longComment;
72
- return state.tokenize(stream, state);
73
- }
74
-
75
- // Single line comment
76
- if (ch === '#') {
77
- stream.skipToEnd();
78
- return 'comment';
79
- }
80
-
81
- // Handle number literals
82
- if (stream.match(/^-?[0-9\.]/, false)) {
83
- var floatLiteral = false;
84
- // Floats
85
- if (stream.match(/^-?\d*\.\d+(e[\+\-]?\d+)?/i)) {
86
- floatLiteral = true;
87
- }
88
- if (stream.match(/^-?\d+\.\d*/)) {
89
- floatLiteral = true;
90
- }
91
- if (stream.match(/^-?\.\d+/)) {
92
- floatLiteral = true;
93
- }
94
-
95
- if (floatLiteral) {
96
- // prevent from getting extra . on 1..
97
- if (stream.peek() == "."){
98
- stream.backUp(1);
99
- }
100
- return 'number';
101
- }
102
- // Integers
103
- var intLiteral = false;
104
- // Hex
105
- if (stream.match(/^-?0x[0-9a-f]+/i)) {
106
- intLiteral = true;
107
- }
108
- // Decimal
109
- if (stream.match(/^-?[1-9]\d*(e[\+\-]?\d+)?/)) {
110
- intLiteral = true;
111
- }
112
- // Zero by itself with no other piece of number.
113
- if (stream.match(/^-?0(?![\dx])/i)) {
114
- intLiteral = true;
115
- }
116
- if (intLiteral) {
117
- return 'number';
118
- }
119
- }
120
-
121
- // Handle strings
122
- if (stream.match(stringPrefixes)) {
123
- state.tokenize = tokenFactory(stream.current(), 'string');
124
- return state.tokenize(stream, state);
125
- }
126
- // Handle regex literals
127
- if (stream.match(regexPrefixes)) {
128
- if (stream.current() != '/' || stream.match(/^.*\//, false)) { // prevent highlight of division
129
- state.tokenize = tokenFactory(stream.current(), 'string-2');
130
- return state.tokenize(stream, state);
131
- } else {
132
- stream.backUp(1);
133
- }
134
- }
135
-
136
- // Handle operators and delimiters
137
- if (stream.match(tripleDelimiters) || stream.match(doubleDelimiters)) {
138
- return 'punctuation';
139
- }
140
- if (stream.match(doubleOperators)
141
- || stream.match(singleOperators)
142
- || stream.match(wordOperators)) {
143
- return 'operator';
144
- }
145
- if (stream.match(singleDelimiters)) {
146
- return 'punctuation';
147
- }
148
-
149
- if (stream.match(constants)) {
150
- return 'atom';
151
- }
152
-
153
- if (stream.match(keywords)) {
154
- return 'keyword';
155
- }
156
-
157
- if (stream.match(identifiers)) {
158
- return 'variable';
159
- }
160
-
161
- // Handle non-detected items
162
- stream.next();
163
- return ERRORCLASS;
164
- }
165
-
166
- function tokenFactory(delimiter, outclass) {
167
- var singleline = delimiter.length == 1;
168
- return function tokenString(stream, state) {
169
- while (!stream.eol()) {
170
- stream.eatWhile(/[^'"\/\\]/);
171
- if (stream.eat('\\')) {
172
- stream.next();
173
- if (singleline && stream.eol()) {
174
- return outclass;
175
- }
176
- } else if (stream.match(delimiter)) {
177
- state.tokenize = tokenBase;
178
- return outclass;
179
- } else {
180
- stream.eat(/['"\/]/);
181
- }
182
- }
183
- if (singleline) {
184
- if (conf.mode.singleLineStringErrors) {
185
- outclass = ERRORCLASS
186
- } else {
187
- state.tokenize = tokenBase;
188
- }
189
- }
190
- return outclass;
191
- };
192
- }
193
-
194
- function longComment(stream, state) {
195
- while (!stream.eol()) {
196
- stream.eatWhile(/[^#]/);
197
- if (stream.match("###")) {
198
- state.tokenize = tokenBase;
199
- break;
200
- }
201
- stream.eatWhile("#");
202
- }
203
- return "comment"
204
- }
205
-
206
- function indent(stream, state, type) {
207
- type = type || 'coffee';
208
- var indentUnit = 0;
209
- if (type === 'coffee') {
210
- for (var i = 0; i < state.scopes.length; i++) {
211
- if (state.scopes[i].type === 'coffee') {
212
- indentUnit = state.scopes[i].offset + conf.indentUnit;
213
- break;
214
- }
215
- }
216
- } else {
217
- indentUnit = stream.column() + stream.current().length;
218
- }
219
- state.scopes.unshift({
220
- offset: indentUnit,
221
- type: type
222
- });
223
- }
224
-
225
- function dedent(stream, state) {
226
- if (state.scopes.length == 1) return;
227
- if (state.scopes[0].type === 'coffee') {
228
- var _indent = stream.indentation();
229
- var _indent_index = -1;
230
- for (var i = 0; i < state.scopes.length; ++i) {
231
- if (_indent === state.scopes[i].offset) {
232
- _indent_index = i;
233
- break;
234
- }
235
- }
236
- if (_indent_index === -1) {
237
- return true;
238
- }
239
- while (state.scopes[0].offset !== _indent) {
240
- state.scopes.shift();
241
- }
242
- return false
243
- } else {
244
- state.scopes.shift();
245
- return false;
246
- }
247
- }
248
-
249
- function tokenLexer(stream, state) {
250
- var style = state.tokenize(stream, state);
251
- var current = stream.current();
252
-
253
- // Handle '.' connected identifiers
254
- if (current === '.') {
255
- style = state.tokenize(stream, state);
256
- current = stream.current();
257
- if (style === 'variable') {
258
- return 'variable';
259
- } else {
260
- return ERRORCLASS;
261
- }
262
- }
263
-
264
- // Handle properties
265
- if (current === '@') {
266
- stream.eat('@');
267
- return 'keyword';
268
- }
269
-
270
- // Handle scope changes.
271
- if (current === 'return') {
272
- state.dedent += 1;
273
- }
274
- if (((current === '->' || current === '=>') &&
275
- !state.lambda &&
276
- state.scopes[0].type == 'coffee' &&
277
- stream.peek() === '')
278
- || style === 'indent') {
279
- indent(stream, state);
280
- }
281
- var delimiter_index = '[({'.indexOf(current);
282
- if (delimiter_index !== -1) {
283
- indent(stream, state, '])}'.slice(delimiter_index, delimiter_index+1));
284
- }
285
- if (indentKeywords.exec(current)){
286
- indent(stream, state);
287
- }
288
- if (current == 'then'){
289
- dedent(stream, state);
290
- }
291
-
292
-
293
- if (style === 'dedent') {
294
- if (dedent(stream, state)) {
295
- return ERRORCLASS;
296
- }
297
- }
298
- delimiter_index = '])}'.indexOf(current);
299
- if (delimiter_index !== -1) {
300
- if (dedent(stream, state)) {
301
- return ERRORCLASS;
302
- }
303
- }
304
- if (state.dedent > 0 && stream.eol() && state.scopes[0].type == 'coffee') {
305
- if (state.scopes.length > 1) state.scopes.shift();
306
- state.dedent -= 1;
307
- }
308
-
309
- return style;
310
- }
311
-
312
- var external = {
313
- startState: function(basecolumn) {
314
- return {
315
- tokenize: tokenBase,
316
- scopes: [{offset:basecolumn || 0, type:'coffee'}],
317
- lastToken: null,
318
- lambda: false,
319
- dedent: 0
320
- };
321
- },
322
-
323
- token: function(stream, state) {
324
- var style = tokenLexer(stream, state);
325
-
326
- state.lastToken = {style:style, content: stream.current()};
327
-
328
- if (stream.eol() && stream.lambda) {
329
- state.lambda = false;
330
- }
331
-
332
- return style;
333
- },
334
-
335
- indent: function(state, textAfter) {
336
- if (state.tokenize != tokenBase) {
337
- return 0;
338
- }
339
-
340
- return state.scopes[0].offset;
341
- }
342
-
343
- };
344
- return external;
345
- });
346
-
347
- CodeMirror.defineMIME('text/x-coffeescript', 'coffeescript');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/CodeMirror2/mode/css/css.js DELETED
@@ -1,124 +0,0 @@
1
- CodeMirror.defineMode("css", function(config) {
2
- var indentUnit = config.indentUnit, type;
3
- function ret(style, tp) {type = tp; return style;}
4
-
5
- function tokenBase(stream, state) {
6
- var ch = stream.next();
7
- if (ch == "@") {stream.eatWhile(/[\w\\\-]/); return ret("meta", stream.current());}
8
- else if (ch == "/" && stream.eat("*")) {
9
- state.tokenize = tokenCComment;
10
- return tokenCComment(stream, state);
11
- }
12
- else if (ch == "<" && stream.eat("!")) {
13
- state.tokenize = tokenSGMLComment;
14
- return tokenSGMLComment(stream, state);
15
- }
16
- else if (ch == "=") ret(null, "compare");
17
- else if ((ch == "~" || ch == "|") && stream.eat("=")) return ret(null, "compare");
18
- else if (ch == "\"" || ch == "'") {
19
- state.tokenize = tokenString(ch);
20
- return state.tokenize(stream, state);
21
- }
22
- else if (ch == "#") {
23
- stream.eatWhile(/[\w\\\-]/);
24
- return ret("atom", "hash");
25
- }
26
- else if (ch == "!") {
27
- stream.match(/^\s*\w*/);
28
- return ret("keyword", "important");
29
- }
30
- else if (/\d/.test(ch)) {
31
- stream.eatWhile(/[\w.%]/);
32
- return ret("number", "unit");
33
- }
34
- else if (/[,.+>*\/]/.test(ch)) {
35
- return ret(null, "select-op");
36
- }
37
- else if (/[;{}:\[\]]/.test(ch)) {
38
- return ret(null, ch);
39
- }
40
- else {
41
- stream.eatWhile(/[\w\\\-]/);
42
- return ret("variable", "variable");
43
- }
44
- }
45
-
46
- function tokenCComment(stream, state) {
47
- var maybeEnd = false, ch;
48
- while ((ch = stream.next()) != null) {
49
- if (maybeEnd && ch == "/") {
50
- state.tokenize = tokenBase;
51
- break;
52
- }
53
- maybeEnd = (ch == "*");
54
- }
55
- return ret("comment", "comment");
56
- }
57
-
58
- function tokenSGMLComment(stream, state) {
59
- var dashes = 0, ch;
60
- while ((ch = stream.next()) != null) {
61
- if (dashes >= 2 && ch == ">") {
62
- state.tokenize = tokenBase;
63
- break;
64
- }
65
- dashes = (ch == "-") ? dashes + 1 : 0;
66
- }
67
- return ret("comment", "comment");
68
- }
69
-
70
- function tokenString(quote) {
71
- return function(stream, state) {
72
- var escaped = false, ch;
73
- while ((ch = stream.next()) != null) {
74
- if (ch == quote && !escaped)
75
- break;
76
- escaped = !escaped && ch == "\\";
77
- }
78
- if (!escaped) state.tokenize = tokenBase;
79
- return ret("string", "string");
80
- };
81
- }
82
-
83
- return {
84
- startState: function(base) {
85
- return {tokenize: tokenBase,
86
- baseIndent: base || 0,
87
- stack: []};
88
- },
89
-
90
- token: function(stream, state) {
91
- if (stream.eatSpace()) return null;
92
- var style = state.tokenize(stream, state);
93
-
94
- var context = state.stack[state.stack.length-1];
95
- if (type == "hash" && context != "rule") style = "string-2";
96
- else if (style == "variable") {
97
- if (context == "rule") style = "number";
98
- else if (!context || context == "@media{") style = "tag";
99
- }
100
-
101
- if (context == "rule" && /^[\{\};]$/.test(type))
102
- state.stack.pop();
103
- if (type == "{") {
104
- if (context == "@media") state.stack[state.stack.length-1] = "@media{";
105
- else state.stack.push("{");
106
- }
107
- else if (type == "}") state.stack.pop();
108
- else if (type == "@media") state.stack.push("@media");
109
- else if (context == "{" && type != "comment") state.stack.push("rule");
110
- return style;
111
- },
112
-
113
- indent: function(state, textAfter) {
114
- var n = state.stack.length;
115
- if (/^\}/.test(textAfter))
116
- n -= state.stack[state.stack.length-1] == "rule" ? 2 : 1;
117
- return state.baseIndent + n * indentUnit;
118
- },
119
-
120
- electricChars: "}"
121
- };
122
- });
123
-
124
- CodeMirror.defineMIME("text/css", "css");
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/CodeMirror2/mode/gfm/gfm.js DELETED
@@ -1,108 +0,0 @@
1
- CodeMirror.defineMode("gfm", function(config, parserConfig) {
2
- var mdMode = CodeMirror.getMode(config, "markdown");
3
- var aliases = {
4
- html: "htmlmixed",
5
- js: "javascript",
6
- json: "application/json",
7
- c: "text/x-csrc",
8
- "c++": "text/x-c++src",
9
- java: "text/x-java",
10
- csharp: "text/x-csharp",
11
- "c#": "text/x-csharp"
12
- };
13
-
14
- // make this lazy so that we don't need to load GFM last
15
- var getMode = (function () {
16
- var i, modes = {}, mimes = {}, mime;
17
-
18
- var list = CodeMirror.listModes();
19
- for (i = 0; i < list.length; i++) {
20
- modes[list[i]] = list[i];
21
- }
22
- var mimesList = CodeMirror.listMIMEs();
23
- for (i = 0; i < mimesList.length; i++) {
24
- mime = mimesList[i].mime;
25
- mimes[mime] = mimesList[i].mime;
26
- }
27
-
28
- for (var a in aliases) {
29
- if (aliases[a] in modes || aliases[a] in mimes)
30
- modes[a] = aliases[a];
31
- }
32
-
33
- return function (lang) {
34
- return modes[lang] ? CodeMirror.getMode(config, modes[lang]) : null;
35
- }
36
- }());
37
-
38
- function markdown(stream, state) {
39
- // intercept fenced code blocks
40
- if (stream.sol() && stream.match(/^```([\w+#]*)/)) {
41
- // try switching mode
42
- state.localMode = getMode(RegExp.$1)
43
- if (state.localMode)
44
- state.localState = state.localMode.startState();
45
-
46
- state.token = local;
47
- return 'code';
48
- }
49
-
50
- return mdMode.token(stream, state.mdState);
51
- }
52
-
53
- function local(stream, state) {
54
- if (stream.sol() && stream.match(/^```/)) {
55
- state.localMode = state.localState = null;
56
- state.token = markdown;
57
- return 'code';
58
- }
59
- else if (state.localMode) {
60
- return state.localMode.token(stream, state.localState);
61
- } else {
62
- stream.skipToEnd();
63
- return 'code';
64
- }
65
- }
66
-
67
- // custom handleText to prevent emphasis in the middle of a word
68
- // and add autolinking
69
- function handleText(stream, mdState) {
70
- var match;
71
- if (stream.match(/^\w+:\/\/\S+/)) {
72
- return 'linkhref';
73
- }
74
- if (stream.match(/^[^\[*\\<>` _][^\[*\\<>` ]*[^\[*\\<>` _]/)) {
75
- return mdMode.getType(mdState);
76
- }
77
- if (match = stream.match(/^[^\[*\\<>` ]+/)) {
78
- var word = match[0];
79
- if (word[0] === '_' && word[word.length-1] === '_') {
80
- stream.backUp(word.length);
81
- return undefined;
82
- }
83
- return mdMode.getType(mdState);
84
- }
85
- if (stream.eatSpace()) {
86
- return null;
87
- }
88
- }
89
-
90
- return {
91
- startState: function() {
92
- var mdState = mdMode.startState();
93
- mdState.text = handleText;
94
- return {token: markdown, mode: "markdown", mdState: mdState,
95
- localMode: null, localState: null};
96
- },
97
-
98
- copyState: function(state) {
99
- return {token: state.token, mode: state.mode, mdState: CodeMirror.copyState(mdMode, state.mdState),
100
- localMode: state.localMode,
101
- localState: state.localMode ? CodeMirror.copyState(state.localMode, state.localState) : null};
102
- },
103
-
104
- token: function(stream, state) {
105
- return state.token(stream, state);
106
- }
107
- }
108
- }, "markdown");
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/CodeMirror2/mode/htmlmixed/htmlmixed.js DELETED
@@ -1,85 +0,0 @@
1
- CodeMirror.defineMode("htmlmixed", function(config, parserConfig) {
2
- var htmlMode = CodeMirror.getMode(config, {name: "xml", htmlMode: true});
3
- var jsMode = CodeMirror.getMode(config, "javascript");
4
- var cssMode = CodeMirror.getMode(config, "css");
5
-
6
- function html(stream, state) {
7
- var style = htmlMode.token(stream, state.htmlState);
8
- if (style == "tag" && stream.current() == ">" && state.htmlState.context) {
9
- if (/^script$/i.test(state.htmlState.context.tagName)) {
10
- state.token = javascript;
11
- state.localState = jsMode.startState(htmlMode.indent(state.htmlState, ""));
12
- state.mode = "javascript";
13
- }
14
- else if (/^style$/i.test(state.htmlState.context.tagName)) {
15
- state.token = css;
16
- state.localState = cssMode.startState(htmlMode.indent(state.htmlState, ""));
17
- state.mode = "css";
18
- }
19
- }
20
- return style;
21
- }
22
- function maybeBackup(stream, pat, style) {
23
- var cur = stream.current();
24
- var close = cur.search(pat);
25
- if (close > -1) stream.backUp(cur.length - close);
26
- return style;
27
- }
28
- function javascript(stream, state) {
29
- if (stream.match(/^<\/\s*script\s*>/i, false)) {
30
- state.token = html;
31
- state.localState = null;
32
- state.mode = "html";
33
- return html(stream, state);
34
- }
35
- return maybeBackup(stream, /<\/\s*script\s*>/,
36
- jsMode.token(stream, state.localState));
37
- }
38
- function css(stream, state) {
39
- if (stream.match(/^<\/\s*style\s*>/i, false)) {
40
- state.token = html;
41
- state.localState = null;
42
- state.mode = "html";
43
- return html(stream, state);
44
- }
45
- return maybeBackup(stream, /<\/\s*style\s*>/,
46
- cssMode.token(stream, state.localState));
47
- }
48
-
49
- return {
50
- startState: function() {
51
- var state = htmlMode.startState();
52
- return {token: html, localState: null, mode: "html", htmlState: state};
53
- },
54
-
55
- copyState: function(state) {
56
- if (state.localState)
57
- var local = CodeMirror.copyState(state.token == css ? cssMode : jsMode, state.localState);
58
- return {token: state.token, localState: local, mode: state.mode,
59
- htmlState: CodeMirror.copyState(htmlMode, state.htmlState)};
60
- },
61
-
62
- token: function(stream, state) {
63
- return state.token(stream, state);
64
- },
65
-
66
- indent: function(state, textAfter) {
67
- if (state.token == html || /^\s*<\//.test(textAfter))
68
- return htmlMode.indent(state.htmlState, textAfter);
69
- else if (state.token == javascript)
70
- return jsMode.indent(state.localState, textAfter);
71
- else
72
- return cssMode.indent(state.localState, textAfter);
73
- },
74
-
75
- compareStates: function(a, b) {
76
- if (a.mode != b.mode) return false;
77
- if (a.localState) return CodeMirror.Pass;
78
- return htmlMode.compareStates(a.htmlState, b.htmlState);
79
- },
80
-
81
- electricChars: "/{}:"
82
- }
83
- }, "xml", "javascript", "css");
84
-
85
- CodeMirror.defineMIME("text/html", "htmlmixed");
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/CodeMirror2/mode/javascript/javascript.js DELETED
@@ -1,361 +0,0 @@
1
- CodeMirror.defineMode("javascript", function(config, parserConfig) {
2
- var indentUnit = config.indentUnit;
3
- var jsonMode = parserConfig.json;
4
-
5
- // Tokenizer
6
-
7
- var keywords = function(){
8
- function kw(type) {return {type: type, style: "keyword"};}
9
- var A = kw("keyword a"), B = kw("keyword b"), C = kw("keyword c");
10
- var operator = kw("operator"), atom = {type: "atom", style: "atom"};
11
- return {
12
- "if": A, "while": A, "with": A, "else": B, "do": B, "try": B, "finally": B,
13
- "return": C, "break": C, "continue": C, "new": C, "delete": C, "throw": C,
14
- "var": kw("var"), "const": kw("var"), "let": kw("var"),
15
- "function": kw("function"), "catch": kw("catch"),
16
- "for": kw("for"), "switch": kw("switch"), "case": kw("case"), "default": kw("default"),
17
- "in": operator, "typeof": operator, "instanceof": operator,
18
- "true": atom, "false": atom, "null": atom, "undefined": atom, "NaN": atom, "Infinity": atom
19
- };
20
- }();
21
-
22
- var isOperatorChar = /[+\-*&%=<>!?|]/;
23
-
24
- function chain(stream, state, f) {
25
- state.tokenize = f;
26
- return f(stream, state);
27
- }
28
-
29
- function nextUntilUnescaped(stream, end) {
30
- var escaped = false, next;
31
- while ((next = stream.next()) != null) {
32
- if (next == end && !escaped)
33
- return false;
34
- escaped = !escaped && next == "\\";
35
- }
36
- return escaped;
37
- }
38
-
39
- // Used as scratch variables to communicate multiple values without
40
- // consing up tons of objects.
41
- var type, content;
42
- function ret(tp, style, cont) {
43
- type = tp; content = cont;
44
- return style;
45
- }
46
-
47
- function jsTokenBase(stream, state) {
48
- var ch = stream.next();
49
- if (ch == '"' || ch == "'")
50
- return chain(stream, state, jsTokenString(ch));
51
- else if (/[\[\]{}\(\),;\:\.]/.test(ch))
52
- return ret(ch);
53
- else if (ch == "0" && stream.eat(/x/i)) {
54
- stream.eatWhile(/[\da-f]/i);
55
- return ret("number", "number");
56
- }
57
- else if (/\d/.test(ch) || ch == "-" && stream.eat(/\d/)) {
58
- stream.match(/^\d*(?:\.\d*)?(?:[eE][+\-]?\d+)?/);
59
- return ret("number", "number");
60
- }
61
- else if (ch == "/") {
62
- if (stream.eat("*")) {
63
- return chain(stream, state, jsTokenComment);
64
- }
65
- else if (stream.eat("/")) {
66
- stream.skipToEnd();
67
- return ret("comment", "comment");
68
- }
69
- else if (state.reAllowed) {
70
- nextUntilUnescaped(stream, "/");
71
- stream.eatWhile(/[gimy]/); // 'y' is "sticky" option in Mozilla
72
- return ret("regexp", "string-2");
73
- }
74
- else {
75
- stream.eatWhile(isOperatorChar);
76
- return ret("operator", null, stream.current());
77
- }
78
- }
79
- else if (ch == "#") {
80
- stream.skipToEnd();
81
- return ret("error", "error");
82
- }
83
- else if (isOperatorChar.test(ch)) {
84
- stream.eatWhile(isOperatorChar);
85
- return ret("operator", null, stream.current());
86
- }
87
- else {
88
- stream.eatWhile(/[\w\$_]/);
89
- var word = stream.current(), known = keywords.propertyIsEnumerable(word) && keywords[word];
90
- return (known && state.kwAllowed) ? ret(known.type, known.style, word) :
91
- ret("variable", "variable", word);
92
- }
93
- }
94
-
95
- function jsTokenString(quote) {
96
- return function(stream, state) {
97
- if (!nextUntilUnescaped(stream, quote))
98
- state.tokenize = jsTokenBase;
99
- return ret("string", "string");
100
- };
101
- }
102
-
103
- function jsTokenComment(stream, state) {
104
- var maybeEnd = false, ch;
105
- while (ch = stream.next()) {
106
- if (ch == "/" && maybeEnd) {
107
- state.tokenize = jsTokenBase;
108
- break;
109
- }
110
- maybeEnd = (ch == "*");
111
- }
112
- return ret("comment", "comment");
113
- }
114
-
115
- // Parser
116
-
117
- var atomicTypes = {"atom": true, "number": true, "variable": true, "string": true, "regexp": true};
118
-
119
- function JSLexical(indented, column, type, align, prev, info) {
120
- this.indented = indented;
121
- this.column = column;
122
- this.type = type;
123
- this.prev = prev;
124
- this.info = info;
125
- if (align != null) this.align = align;
126
- }
127
-
128
- function inScope(state, varname) {
129
- for (var v = state.localVars; v; v = v.next)
130
- if (v.name == varname) return true;
131
- }
132
-
133
- function parseJS(state, style, type, content, stream) {
134
- var cc = state.cc;
135
- // Communicate our context to the combinators.
136
- // (Less wasteful than consing up a hundred closures on every call.)
137
- cx.state = state; cx.stream = stream; cx.marked = null, cx.cc = cc;
138
-
139
- if (!state.lexical.hasOwnProperty("align"))
140
- state.lexical.align = true;
141
-
142
- while(true) {
143
- var combinator = cc.length ? cc.pop() : jsonMode ? expression : statement;
144
- if (combinator(type, content)) {
145
- while(cc.length && cc[cc.length - 1].lex)
146
- cc.pop()();
147
- if (cx.marked) return cx.marked;
148
- if (type == "variable" && inScope(state, content)) return "variable-2";
149
- return style;
150
- }
151
- }
152
- }
153
-
154
- // Combinator utils
155
-
156
- var cx = {state: null, column: null, marked: null, cc: null};
157
- function pass() {
158
- for (var i = arguments.length - 1; i >= 0; i--) cx.cc.push(arguments[i]);
159
- }
160
- function cont() {
161
- pass.apply(null, arguments);
162
- return true;
163
- }
164
- function register(varname) {
165
- var state = cx.state;
166
- if (state.context) {
167
- cx.marked = "def";
168
- for (var v = state.localVars; v; v = v.next)
169
- if (v.name == varname) return;
170
- state.localVars = {name: varname, next: state.localVars};
171
- }
172
- }
173
-
174
- // Combinators
175
-
176
- var defaultVars = {name: "this", next: {name: "arguments"}};
177
- function pushcontext() {
178
- if (!cx.state.context) cx.state.localVars = defaultVars;
179
- cx.state.context = {prev: cx.state.context, vars: cx.state.localVars};
180
- }
181
- function popcontext() {
182
- cx.state.localVars = cx.state.context.vars;
183
- cx.state.context = cx.state.context.prev;
184
- }
185
- function pushlex(type, info) {
186
- var result = function() {
187
- var state = cx.state;
188
- state.lexical = new JSLexical(state.indented, cx.stream.column(), type, null, state.lexical, info)
189
- };
190
- result.lex = true;
191
- return result;
192
- }
193
- function poplex() {
194
- var state = cx.state;
195
- if (state.lexical.prev) {
196
- if (state.lexical.type == ")")
197
- state.indented = state.lexical.indented;
198
- state.lexical = state.lexical.prev;
199
- }
200
- }
201
- poplex.lex = true;
202
-
203
- function expect(wanted) {
204
- return function expecting(type) {
205
- if (type == wanted) return cont();
206
- else if (wanted == ";") return pass();
207
- else return cont(arguments.callee);
208
- };
209
- }
210
-
211
- function statement(type) {
212
- if (type == "var") return cont(pushlex("vardef"), vardef1, expect(";"), poplex);
213
- if (type == "keyword a") return cont(pushlex("form"), expression, statement, poplex);
214
- if (type == "keyword b") return cont(pushlex("form"), statement, poplex);
215
- if (type == "{") return cont(pushlex("}"), block, poplex);
216
- if (type == ";") return cont();
217
- if (type == "function") return cont(functiondef);
218
- if (type == "for") return cont(pushlex("form"), expect("("), pushlex(")"), forspec1, expect(")"),
219
- poplex, statement, poplex);
220
- if (type == "variable") return cont(pushlex("stat"), maybelabel);
221
- if (type == "switch") return cont(pushlex("form"), expression, pushlex("}", "switch"), expect("{"),
222
- block, poplex, poplex);
223
- if (type == "case") return cont(expression, expect(":"));
224
- if (type == "default") return cont(expect(":"));
225
- if (type == "catch") return cont(pushlex("form"), pushcontext, expect("("), funarg, expect(")"),
226
- statement, poplex, popcontext);
227
- return pass(pushlex("stat"), expression, expect(";"), poplex);
228
- }
229
- function expression(type) {
230
- if (atomicTypes.hasOwnProperty(type)) return cont(maybeoperator);
231
- if (type == "function") return cont(functiondef);
232
- if (type == "keyword c") return cont(maybeexpression);
233
- if (type == "(") return cont(pushlex(")"), maybeexpression, expect(")"), poplex, maybeoperator);
234
- if (type == "operator") return cont(expression);
235
- if (type == "[") return cont(pushlex("]"), commasep(expression, "]"), poplex, maybeoperator);
236
- if (type == "{") return cont(pushlex("}"), commasep(objprop, "}"), poplex, maybeoperator);
237
- return cont();
238
- }
239
- function maybeexpression(type) {
240
- if (type.match(/[;\}\)\],]/)) return pass();
241
- return pass(expression);
242
- }
243
-
244
- function maybeoperator(type, value) {
245
- if (type == "operator" && /\+\+|--/.test(value)) return cont(maybeoperator);
246
- if (type == "operator" || type == ":") return cont(expression);
247
- if (type == ";") return;
248
- if (type == "(") return cont(pushlex(")"), commasep(expression, ")"), poplex, maybeoperator);
249
- if (type == ".") return cont(property, maybeoperator);
250
- if (type == "[") return cont(pushlex("]"), expression, expect("]"), poplex, maybeoperator);
251
- }
252
- function maybelabel(type) {
253
- if (type == ":") return cont(poplex, statement);
254
- return pass(maybeoperator, expect(";"), poplex);
255
- }
256
- function property(type) {
257
- if (type == "variable") {cx.marked = "property"; return cont();}
258
- }
259
- function objprop(type) {
260
- if (type == "variable") cx.marked = "property";
261
- if (atomicTypes.hasOwnProperty(type)) return cont(expect(":"), expression);
262
- }
263
- function commasep(what, end) {
264
- function proceed(type) {
265
- if (type == ",") return cont(what, proceed);
266
- if (type == end) return cont();
267
- return cont(expect(end));
268
- }
269
- return function commaSeparated(type) {
270
- if (type == end) return cont();
271
- else return pass(what, proceed);
272
- };
273
- }
274
- function block(type) {
275
- if (type == "}") return cont();
276
- return pass(statement, block);
277
- }
278
- function vardef1(type, value) {
279
- if (type == "variable"){register(value); return cont(vardef2);}
280
- return cont();
281
- }
282
- function vardef2(type, value) {
283
- if (value == "=") return cont(expression, vardef2);
284
- if (type == ",") return cont(vardef1);
285
- }
286
- function forspec1(type) {
287
- if (type == "var") return cont(vardef1, forspec2);
288
- if (type == ";") return pass(forspec2);
289
- if (type == "variable") return cont(formaybein);
290
- return pass(forspec2);
291
- }
292
- function formaybein(type, value) {
293
- if (value == "in") return cont(expression);
294
- return cont(maybeoperator, forspec2);
295
- }
296
- function forspec2(type, value) {
297
- if (type == ";") return cont(forspec3);
298
- if (value == "in") return cont(expression);
299
- return cont(expression, expect(";"), forspec3);
300
- }
301
- function forspec3(type) {
302
- if (type != ")") cont(expression);
303
- }
304
- function functiondef(type, value) {
305
- if (type == "variable") {register(value); return cont(functiondef);}
306
- if (type == "(") return cont(pushlex(")"), pushcontext, commasep(funarg, ")"), poplex, statement, popcontext);
307
- }
308
- function funarg(type, value) {
309
- if (type == "variable") {register(value); return cont();}
310
- }
311
-
312
- // Interface
313
-
314
- return {
315
- startState: function(basecolumn) {
316
- return {
317
- tokenize: jsTokenBase,
318
- reAllowed: true,
319
- kwAllowed: true,
320
- cc: [],
321
- lexical: new JSLexical((basecolumn || 0) - indentUnit, 0, "block", false),
322
- localVars: parserConfig.localVars,
323
- context: parserConfig.localVars && {vars: parserConfig.localVars},
324
- indented: 0
325
- };
326
- },
327
-
328
- token: function(stream, state) {
329
- if (stream.sol()) {
330
- if (!state.lexical.hasOwnProperty("align"))
331
- state.lexical.align = false;
332
- state.indented = stream.indentation();
333
- }
334
- if (stream.eatSpace()) return null;
335
- var style = state.tokenize(stream, state);
336
- if (type == "comment") return style;
337
- state.reAllowed = !!(type == "operator" || type == "keyword c" || type.match(/^[\[{}\(,;:]$/));
338
- state.kwAllowed = type != '.';
339
- return parseJS(state, style, type, content, stream);
340
- },
341
-
342
- indent: function(state, textAfter) {
343
- if (state.tokenize != jsTokenBase) return 0;
344
- var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical;
345
- if (lexical.type == "stat" && firstChar == "}") lexical = lexical.prev;
346
- var type = lexical.type, closing = firstChar == type;
347
- if (type == "vardef") return lexical.indented + 4;
348
- else if (type == "form" && firstChar == "{") return lexical.indented;
349
- else if (type == "stat" || type == "form") return lexical.indented + indentUnit;
350
- else if (lexical.info == "switch" && !closing)
351
- return lexical.indented + (/^(?:case|default)\b/.test(textAfter) ? indentUnit : 2 * indentUnit);
352
- else if (lexical.align) return lexical.column + (closing ? 0 : 1);
353
- else return lexical.indented + (closing ? 0 : indentUnit);
354
- },
355
-
356
- electricChars: ":{}"
357
- };
358
- });
359
-
360
- CodeMirror.defineMIME("text/javascript", "javascript");
361
- CodeMirror.defineMIME("application/json", {name: "javascript", json: true});
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/CodeMirror2/mode/less/less.js DELETED
@@ -1,232 +0,0 @@
1
- /*
2
- LESS mode - http://www.lesscss.org/
3
- Ported to CodeMirror by Peter Kroon
4
- */
5
-
6
- CodeMirror.defineMode("less", function(config) {
7
- var indentUnit = config.indentUnit, type;
8
- function ret(style, tp) {type = tp; return style;}
9
- //html5 tags
10
- var tags = ["a","abbr","acronym","address","applet","area","article","aside","audio","b","base","basefont","bdi","bdo","big","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","command","datalist","dd","del","details","dfn","dir","div","dl","dt","em","embed","fieldset","figcaption","figure","font","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","keygen","kbd","label","legend","li","link","map","mark","menu","meta","meter","nav","noframes","noscript","object","ol","optgroup","option","output","p","param","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strike","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","title","tr","track","tt","u","ul","var","video","wbr"];
11
-
12
- function inTagsArray(val){
13
- for(var i=0; i<tags.length; i++){
14
- if(val === tags[i]){
15
- return true;
16
- }
17
- }
18
- }
19
-
20
- function tokenBase(stream, state) {
21
- var ch = stream.next();
22
-
23
- if (ch == "@") {stream.eatWhile(/[\w\-]/); return ret("meta", stream.current());}
24
- else if (ch == "/" && stream.eat("*")) {
25
- state.tokenize = tokenCComment;
26
- return tokenCComment(stream, state);
27
- }
28
- else if (ch == "<" && stream.eat("!")) {
29
- state.tokenize = tokenSGMLComment;
30
- return tokenSGMLComment(stream, state);
31
- }
32
- else if (ch == "=") ret(null, "compare");
33
- else if ((ch == "~" || ch == "|") && stream.eat("=")) return ret(null, "compare");
34
- else if (ch == "\"" || ch == "'") {
35
- state.tokenize = tokenString(ch);
36
- return state.tokenize(stream, state);
37
- }
38
- else if (ch == "/") { // lesscss e.g.: .png will not be parsed as a class
39
- if(stream.eat("/")){
40
- state.tokenize = tokenSComment
41
- return tokenSComment(stream, state);
42
- }else{
43
- stream.eatWhile(/[\a-zA-Z0-9\-_.\s]/);
44
- if(/\/|\)|#/.test(stream.peek() || stream.eol() || (stream.eatSpace() && stream.peek() == ")")))return ret("string", "string");//let url(/images/logo.png) without quotes return as string
45
- return ret("number", "unit");
46
- }
47
- }
48
- else if (ch == "!") {
49
- stream.match(/^\s*\w*/);
50
- return ret("keyword", "important");
51
- }
52
- else if (/\d/.test(ch)) {
53
- stream.eatWhile(/[\w.%]/);
54
- return ret("number", "unit");
55
- }
56
- else if (/[,+<>*\/]/.test(ch)) {//removed . dot character original was [,.+>*\/]
57
- return ret(null, "select-op");
58
- }
59
- else if (/[;{}:\[\]()]/.test(ch)) { //added () char for lesscss original was [;{}:\[\]]
60
- if(ch == ":"){
61
- stream.eatWhile(/[active|hover|link|visited]/);
62
- if( stream.current().match(/active|hover|link|visited/)){
63
- return ret("tag", "tag");
64
- }else{
65
- return ret(null, ch);
66
- }
67
- }else{
68
- return ret(null, ch);
69
- }
70
- }
71
- else if (ch == ".") { // lesscss
72
- stream.eatWhile(/[\a-zA-Z0-9\-_]/);
73
- return ret("tag", "tag");
74
- }
75
- else if (ch == "#") { // lesscss
76
- //we don't eat white-space, we want the hex color and or id only
77
- stream.eatWhile(/[A-Za-z0-9]/);
78
- //check if there is a proper hex color length e.g. #eee || #eeeEEE
79
- if(stream.current().length ===4 || stream.current().length ===7){
80
- if(stream.current().match(/[A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}/,false) != null){//is there a valid hex color value present in the current stream
81
- //when not a valid hex value, parse as id
82
- if(stream.current().substring(1) != stream.current().match(/[A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}/,false))return ret("atom", "tag");
83
- //eat white-space
84
- stream.eatSpace();
85
- //when hex value declaration doesn't end with [;,] but is does with a slash/cc comment treat it as an id, just like the other hex values that don't end with[;,]
86
- if( /[\/<>.(){!$%^&*_\-\\?=+\|#'~`]/.test(stream.peek()) )return ret("atom", "tag");
87
- //#time { color: #aaa }
88
- else if(stream.peek() == "}" )return ret("number", "unit");
89
- //we have a valid hex color value, parse as id whenever an element/class is defined after the hex(id) value e.g. #eee aaa || #eee .aaa
90
- else if( /[a-zA-Z\\]/.test(stream.peek()) )return ret("atom", "tag");
91
- //when a hex value is on the end of a line, parse as id
92
- else if(stream.eol())return ret("atom", "tag");
93
- //default
94
- else return ret("number", "unit");
95
- }else{//when not a valid hexvalue in the current stream e.g. #footer
96
- stream.eatWhile(/[\w\\\-]/);
97
- return ret("atom", "tag");
98
- }
99
- }else{
100
- stream.eatWhile(/[\w\\\-]/);
101
- return ret("atom", "tag");
102
- }
103
- }
104
- else if (ch == "&") {
105
- stream.eatWhile(/[\w\-]/);
106
- return ret(null, ch);
107
- }
108
- else {
109
- stream.eatWhile(/[\w\\\-_%.{]/);
110
- if(stream.current().match(/http|https/) != null){
111
- stream.eatWhile(/[\w\\\-_%.{:\/]/);
112
- return ret("string", "string");
113
- }else if(stream.peek() == "<" || stream.peek() == ">"){
114
- return ret("tag", "tag");
115
- }else if( stream.peek().match(/\(/) != null ){// lessc
116
- return ret(null, ch);
117
- }else if (stream.peek() == "/" && state.stack[state.stack.length-1] != undefined){ // url(dir/center/image.png)
118
- return ret("string", "string");
119
- }else if( stream.current().match(/\-\d|\-.\d/) ){ // lesscss match e.g.: -5px -0.4 etc... only colorize the minus sign
120
- //stream.backUp(stream.current().length-1); //commment out these 2 comment if you want the minus sign to be parsed as null -500px
121
- //return ret(null, ch);
122
- return ret("number", "unit");
123
- }else if( inTagsArray(stream.current()) ){ // lesscss match html tags
124
- return ret("tag", "tag");
125
- }else if( /\/|[\s\)]/.test(stream.peek() || stream.eol() || (stream.eatSpace() && stream.peek() == "/")) && stream.current().indexOf(".") !== -1){
126
- if(stream.current().substring(stream.current().length-1,stream.current().length) == "{"){
127
- stream.backUp(1);
128
- return ret("tag", "tag");
129
- }//end if
130
- if( (stream.eatSpace() && stream.peek().match(/[{<>.a-zA-Z]/) != null) || stream.eol() )return ret("tag", "tag");//e.g. button.icon-plus
131
- return ret("string", "string");//let url(/images/logo.png) without quotes return as string
132
- }else if( stream.eol() ){
133
- if(stream.current().substring(stream.current().length-1,stream.current().length) == "{")stream.backUp(1);
134
- return ret("tag", "tag");
135
- }else{
136
- return ret("variable", "variable");
137
- }
138
- }
139
-
140
- }
141
-
142
- function tokenSComment(stream, state) {// SComment = Slash comment
143
- stream.skipToEnd();
144
- state.tokenize = tokenBase;
145
- return ret("comment", "comment");
146
- }
147
-
148
- function tokenCComment(stream, state) {
149
- var maybeEnd = false, ch;
150
- while ((ch = stream.next()) != null) {
151
- if (maybeEnd && ch == "/") {
152
- state.tokenize = tokenBase;
153
- break;
154
- }
155
- maybeEnd = (ch == "*");
156
- }
157
- return ret("comment", "comment");
158
- }
159
-
160
- function tokenSGMLComment(stream, state) {
161
- var dashes = 0, ch;
162
- while ((ch = stream.next()) != null) {
163
- if (dashes >= 2 && ch == ">") {
164
- state.tokenize = tokenBase;
165
- break;
166
- }
167
- dashes = (ch == "-") ? dashes + 1 : 0;
168
- }
169
- return ret("comment", "comment");
170
- }
171
-
172
- function tokenString(quote) {
173
- return function(stream, state) {
174
- var escaped = false, ch;
175
- while ((ch = stream.next()) != null) {
176
- if (ch == quote && !escaped)
177
- break;
178
- escaped = !escaped && ch == "\\";
179
- }
180
- if (!escaped) state.tokenize = tokenBase;
181
- return ret("string", "string");
182
- };
183
- }
184
-
185
- return {
186
- startState: function(base) {
187
- return {tokenize: tokenBase,
188
- baseIndent: base || 0,
189
- stack: []};
190
- },
191
-
192
- token: function(stream, state) {
193
- if (stream.eatSpace()) return null;
194
- var style = state.tokenize(stream, state);
195
-
196
- var context = state.stack[state.stack.length-1];
197
- if (type == "hash" && context == "rule") style = "atom";
198
- else if (style == "variable") {
199
- if (context == "rule") style = null; //"tag"
200
- else if (!context || context == "@media{"){
201
- style = stream.current() == "when" ? "variable" :
202
- stream.string.match(/#/g) != undefined ? null :
203
- /[\s,|\s\)]/.test(stream.peek()) ? "tag" : null;
204
- }
205
- }
206
-
207
- if (context == "rule" && /^[\{\};]$/.test(type))
208
- state.stack.pop();
209
- if (type == "{") {
210
- if (context == "@media") state.stack[state.stack.length-1] = "@media{";
211
- else state.stack.push("{");
212
- }
213
- else if (type == "}") state.stack.pop();
214
- else if (type == "@media") state.stack.push("@media");
215
- else if (context == "{" && type != "comment") state.stack.push("rule");
216
- return style;
217
- },
218
-
219
- indent: function(state, textAfter) {
220
- var n = state.stack.length;
221
- if (/^\}/.test(textAfter))
222
- n -= state.stack[state.stack.length-1] == "rule" ? 2 : 1;
223
- return state.baseIndent + n * indentUnit;
224
- },
225
-
226
- electricChars: "}"
227
- };
228
- });
229
-
230
- CodeMirror.defineMIME("text/x-less", "less");
231
- if (!CodeMirror.mimeModes.hasOwnProperty("text/css"))
232
- CodeMirror.defineMIME("text/css", "less");
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/CodeMirror2/mode/markdown/markdown.js DELETED
@@ -1,245 +0,0 @@
1
- CodeMirror.defineMode("markdown", function(cmCfg, modeCfg) {
2
-
3
- var htmlMode = CodeMirror.getMode(cmCfg, { name: 'xml', htmlMode: true });
4
-
5
- var header = 'header'
6
- , code = 'comment'
7
- , quote = 'quote'
8
- , list = 'string'
9
- , hr = 'hr'
10
- , linktext = 'link'
11
- , linkhref = 'string'
12
- , em = 'em'
13
- , strong = 'strong'
14
- , emstrong = 'emstrong';
15
-
16
- var hrRE = /^([*\-=_])(?:\s*\1){2,}\s*$/
17
- , ulRE = /^[*\-+]\s+/
18
- , olRE = /^[0-9]+\.\s+/
19
- , headerRE = /^(?:\={3,}|-{3,})$/
20
- , textRE = /^[^\[*_\\<>`]+/;
21
-
22
- function switchInline(stream, state, f) {
23
- state.f = state.inline = f;
24
- return f(stream, state);
25
- }
26
-
27
- function switchBlock(stream, state, f) {
28
- state.f = state.block = f;
29
- return f(stream, state);
30
- }
31
-
32
-
33
- // Blocks
34
-
35
- function blankLine(state) {
36
- // Reset EM state
37
- state.em = false;
38
- // Reset STRONG state
39
- state.strong = false;
40
- return null;
41
- }
42
-
43
- function blockNormal(stream, state) {
44
- var match;
45
- if (state.indentationDiff >= 4) {
46
- state.indentation -= state.indentationDiff;
47
- stream.skipToEnd();
48
- return code;
49
- } else if (stream.eatSpace()) {
50
- return null;
51
- } else if (stream.peek() === '#' || stream.match(headerRE)) {
52
- state.header = true;
53
- } else if (stream.eat('>')) {
54
- state.indentation++;
55
- state.quote = true;
56
- } else if (stream.peek() === '[') {
57
- return switchInline(stream, state, footnoteLink);
58
- } else if (stream.match(hrRE, true)) {
59
- return hr;
60
- } else if (match = stream.match(ulRE, true) || stream.match(olRE, true)) {
61
- state.indentation += match[0].length;
62
- return list;
63
- }
64
-
65
- return switchInline(stream, state, state.inline);
66
- }
67
-
68
- function htmlBlock(stream, state) {
69
- var style = htmlMode.token(stream, state.htmlState);
70
- if (style === 'tag' && state.htmlState.type !== 'openTag' && !state.htmlState.context) {
71
- state.f = inlineNormal;
72
- state.block = blockNormal;
73
- }
74
- return style;
75
- }
76
-
77
-
78
- // Inline
79
- function getType(state) {
80
- var styles = [];
81
-
82
- if (state.strong) { styles.push(state.em ? emstrong : strong); }
83
- else if (state.em) { styles.push(em); }
84
-
85
- if (state.header) { styles.push(header); }
86
- if (state.quote) { styles.push(quote); }
87
-
88
- return styles.length ? styles.join(' ') : null;
89
- }
90
-
91
- function handleText(stream, state) {
92
- if (stream.match(textRE, true)) {
93
- return getType(state);
94
- }
95
- return undefined;
96
- }
97
-
98
- function inlineNormal(stream, state) {
99
- var style = state.text(stream, state)
100
- if (typeof style !== 'undefined')
101
- return style;
102
-
103
- var ch = stream.next();
104
-
105
- if (ch === '\\') {
106
- stream.next();
107
- return getType(state);
108
- }
109
- if (ch === '`') {
110
- return switchInline(stream, state, inlineElement(code, '`'));
111
- }
112
- if (ch === '[') {
113
- return switchInline(stream, state, linkText);
114
- }
115
- if (ch === '<' && stream.match(/^\w/, false)) {
116
- stream.backUp(1);
117
- return switchBlock(stream, state, htmlBlock);
118
- }
119
-
120
- var t = getType(state);
121
- if (ch === '*' || ch === '_') {
122
- if (stream.eat(ch)) {
123
- return (state.strong = !state.strong) ? getType(state) : t;
124
- }
125
- return (state.em = !state.em) ? getType(state) : t;
126
- }
127
-
128
- return getType(state);
129
- }
130
-
131
- function linkText(stream, state) {
132
- while (!stream.eol()) {
133
- var ch = stream.next();
134
- if (ch === '\\') stream.next();
135
- if (ch === ']') {
136
- state.inline = state.f = linkHref;
137
- return linktext;
138
- }
139
- }
140
- return linktext;
141
- }
142
-
143
- function linkHref(stream, state) {
144
- stream.eatSpace();
145
- var ch = stream.next();
146
- if (ch === '(' || ch === '[') {
147
- return switchInline(stream, state, inlineElement(linkhref, ch === '(' ? ')' : ']'));
148
- }
149
- return 'error';
150
- }
151
-
152
- function footnoteLink(stream, state) {
153
- if (stream.match(/^[^\]]*\]:/, true)) {
154
- state.f = footnoteUrl;
155
- return linktext;
156
- }
157
- return switchInline(stream, state, inlineNormal);
158
- }
159
-
160
- function footnoteUrl(stream, state) {
161
- stream.eatSpace();
162
- stream.match(/^[^\s]+/, true);
163
- state.f = state.inline = inlineNormal;
164
- return linkhref;
165
- }
166
-
167
- function inlineRE(endChar) {
168
- if (!inlineRE[endChar]) {
169
- // match any not-escaped-non-endChar and any escaped char
170
- // then match endChar or eol
171
- inlineRE[endChar] = new RegExp('^(?:[^\\\\\\' + endChar + ']|\\\\.)*(?:\\' + endChar + '|$)');
172
- }
173
- return inlineRE[endChar];
174
- }
175
-
176
- function inlineElement(type, endChar, next) {
177
- next = next || inlineNormal;
178
- return function(stream, state) {
179
- stream.match(inlineRE(endChar));
180
- state.inline = state.f = next;
181
- return type;
182
- };
183
- }
184
-
185
- return {
186
- startState: function() {
187
- return {
188
- f: blockNormal,
189
-
190
- block: blockNormal,
191
- htmlState: htmlMode.startState(),
192
- indentation: 0,
193
-
194
- inline: inlineNormal,
195
- text: handleText,
196
- em: false,
197
- strong: false,
198
- header: false,
199
- quote: false
200
- };
201
- },
202
-
203
- copyState: function(s) {
204
- return {
205
- f: s.f,
206
-
207
- block: s.block,
208
- htmlState: CodeMirror.copyState(htmlMode, s.htmlState),
209
- indentation: s.indentation,
210
-
211
- inline: s.inline,
212
- text: s.text,
213
- em: s.em,
214
- strong: s.strong,
215
- header: s.header,
216
- quote: s.quote
217
- };
218
- },
219
-
220
- token: function(stream, state) {
221
- if (stream.sol()) {
222
- if (stream.match(/^\s*$/, true)) { return blankLine(state); }
223
-
224
- // Reset state.header
225
- state.header = false;
226
- // Reset state.quote
227
- state.quote = false;
228
-
229
- state.f = state.block;
230
- var indentation = stream.match(/^\s*/, true)[0].replace(/\t/g, ' ').length;
231
- state.indentationDiff = indentation - state.indentation;
232
- state.indentation = indentation;
233
- if (indentation > 0) { return null; }
234
- }
235
- return state.f(stream, state);
236
- },
237
-
238
- blankLine: blankLine,
239
-
240
- getType: getType
241
- };
242
-
243
- }, "xml");
244
-
245
- CodeMirror.defineMIME("text/x-markdown", "markdown");
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/CodeMirror2/mode/php/php.js DELETED
@@ -1,150 +0,0 @@
1
- (function() {
2
- function keywords(str) {
3
- var obj = {}, words = str.split(" ");
4
- for (var i = 0; i < words.length; ++i) obj[words[i]] = true;
5
- return obj;
6
- }
7
- function heredoc(delim) {
8
- return function(stream, state) {
9
- if (stream.match(delim)) state.tokenize = null;
10
- else stream.skipToEnd();
11
- return "string";
12
- }
13
- }
14
- var phpConfig = {
15
- name: "clike",
16
- keywords: keywords("abstract and array as break case catch class clone const continue declare default " +
17
- "do else elseif enddeclare endfor endforeach endif endswitch endwhile extends final " +
18
- "for foreach function global goto if implements interface instanceof namespace " +
19
- "new or private protected public static switch throw trait try use var while xor " +
20
- "die echo empty exit eval include include_once isset list require require_once return " +
21
- "print unset __halt_compiler self static parent"),
22
- blockKeywords: keywords("catch do else elseif for foreach if switch try while"),
23
- atoms: keywords("true false null TRUE FALSE NULL"),
24
- multiLineStrings: true,
25
- hooks: {
26
- "$": function(stream, state) {
27
- stream.eatWhile(/[\w\$_]/);
28
- return "variable-2";
29
- },
30
- "<": function(stream, state) {
31
- if (stream.match(/<</)) {
32
- stream.eatWhile(/[\w\.]/);
33
- state.tokenize = heredoc(stream.current().slice(3));
34
- return state.tokenize(stream, state);
35
- }
36
- return false;
37
- },
38
- "#": function(stream, state) {
39
- while (!stream.eol() && !stream.match("?>", false)) stream.next();
40
- return "comment";
41
- },
42
- "/": function(stream, state) {
43
- if (stream.eat("/")) {
44
- while (!stream.eol() && !stream.match("?>", false)) stream.next();
45
- return "comment";
46
- }
47
- return false;
48
- }
49
- }
50
- };
51
-
52
- CodeMirror.defineMode("php", function(config, parserConfig) {
53
- var htmlMode = CodeMirror.getMode(config, {name: "xml", htmlMode: true});
54
- var jsMode = CodeMirror.getMode(config, "javascript");
55
- var cssMode = CodeMirror.getMode(config, "css");
56
- var phpMode = CodeMirror.getMode(config, phpConfig);
57
-
58
- function dispatch(stream, state) { // TODO open PHP inside text/css
59
- var isPHP = state.mode == "php";
60
- if (stream.sol() && state.pending != '"') state.pending = null;
61
- if (state.curMode == htmlMode) {
62
- if (stream.match(/^<\?\w*/)) {
63
- state.curMode = phpMode;
64
- state.curState = state.php;
65
- state.curClose = "?>";
66
- state.mode = "php";
67
- return "meta";
68
- }
69
- if (state.pending == '"') {
70
- while (!stream.eol() && stream.next() != '"') {}
71
- var style = "string";
72
- } else if (state.pending && stream.pos < state.pending.end) {
73
- stream.pos = state.pending.end;
74
- var style = state.pending.style;
75
- } else {
76
- var style = htmlMode.token(stream, state.curState);
77
- }
78
- state.pending = null;
79
- var cur = stream.current(), openPHP = cur.search(/<\?/);
80
- if (openPHP != -1) {
81
- if (style == "string" && /\"$/.test(cur) && !/\?>/.test(cur)) state.pending = '"';
82
- else state.pending = {end: stream.pos, style: style};
83
- stream.backUp(cur.length - openPHP);
84
- } else if (style == "tag" && stream.current() == ">" && state.curState.context) {
85
- if (/^script$/i.test(state.curState.context.tagName)) {
86
- state.curMode = jsMode;
87
- state.curState = jsMode.startState(htmlMode.indent(state.curState, ""));
88
- state.curClose = /^<\/\s*script\s*>/i;
89
- state.mode = "javascript";
90
- }
91
- else if (/^style$/i.test(state.curState.context.tagName)) {
92
- state.curMode = cssMode;
93
- state.curState = cssMode.startState(htmlMode.indent(state.curState, ""));
94
- state.curClose = /^<\/\s*style\s*>/i;
95
- state.mode = "css";
96
- }
97
- }
98
- return style;
99
- } else if ((!isPHP || state.php.tokenize == null) &&
100
- stream.match(state.curClose, isPHP)) {
101
- state.curMode = htmlMode;
102
- state.curState = state.html;
103
- state.curClose = null;
104
- state.mode = "html";
105
- if (isPHP) return "meta";
106
- else return dispatch(stream, state);
107
- } else {
108
- return state.curMode.token(stream, state.curState);
109
- }
110
- }
111
-
112
- return {
113
- startState: function() {
114
- var html = htmlMode.startState();
115
- return {html: html,
116
- php: phpMode.startState(),
117
- curMode: parserConfig.startOpen ? phpMode : htmlMode,
118
- curState: parserConfig.startOpen ? phpMode.startState() : html,
119
- curClose: parserConfig.startOpen ? /^\?>/ : null,
120
- mode: parserConfig.startOpen ? "php" : "html",
121
- pending: null}
122
- },
123
-
124
- copyState: function(state) {
125
- var html = state.html, htmlNew = CodeMirror.copyState(htmlMode, html),
126
- php = state.php, phpNew = CodeMirror.copyState(phpMode, php), cur;
127
- if (state.curState == html) cur = htmlNew;
128
- else if (state.curState == php) cur = phpNew;
129
- else cur = CodeMirror.copyState(state.curMode, state.curState);
130
- return {html: htmlNew, php: phpNew, curMode: state.curMode, curState: cur,
131
- curClose: state.curClose, mode: state.mode,
132
- pending: state.pending};
133
- },
134
-
135
- token: dispatch,
136
-
137
- indent: function(state, textAfter) {
138
- if ((state.curMode != phpMode && /^\s*<\//.test(textAfter)) ||
139
- (state.curMode == phpMode && /^\?>/.test(textAfter)))
140
- return htmlMode.indent(state.html, textAfter);
141
- return state.curMode.indent(state.curState, textAfter);
142
- },
143
-
144
- electricChars: "/{}:"
145
- }
146
- }, "xml", "clike", "javascript", "css");
147
- CodeMirror.defineMIME("application/x-httpd-php", "php");
148
- CodeMirror.defineMIME("application/x-httpd-php-open", {name: "php", startOpen: true});
149
- CodeMirror.defineMIME("text/x-php", phpConfig);
150
- })();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/CodeMirror2/mode/xml/xml.js DELETED
@@ -1,325 +0,0 @@
1
- CodeMirror.defineMode("xml", function(config, parserConfig) {
2
- var indentUnit = config.indentUnit;
3
- var Kludges = parserConfig.htmlMode ? {
4
- autoSelfClosers: {'area': true, 'base': true, 'br': true, 'col': true, 'command': true,
5
- 'embed': true, 'frame': true, 'hr': true, 'img': true, 'input': true,
6
- 'keygen': true, 'link': true, 'meta': true, 'param': true, 'source': true,
7
- 'track': true, 'wbr': true},
8
- implicitlyClosed: {'dd': true, 'li': true, 'optgroup': true, 'option': true, 'p': true,
9
- 'rp': true, 'rt': true, 'tbody': true, 'td': true, 'tfoot': true,
10
- 'th': true, 'tr': true},
11
- contextGrabbers: {
12
- 'dd': {'dd': true, 'dt': true},
13
- 'dt': {'dd': true, 'dt': true},
14
- 'li': {'li': true},
15
- 'option': {'option': true, 'optgroup': true},
16
- 'optgroup': {'optgroup': true},
17
- 'p': {'address': true, 'article': true, 'aside': true, 'blockquote': true, 'dir': true,
18
- 'div': true, 'dl': true, 'fieldset': true, 'footer': true, 'form': true,
19
- 'h1': true, 'h2': true, 'h3': true, 'h4': true, 'h5': true, 'h6': true,
20
- 'header': true, 'hgroup': true, 'hr': true, 'menu': true, 'nav': true, 'ol': true,
21
- 'p': true, 'pre': true, 'section': true, 'table': true, 'ul': true},
22
- 'rp': {'rp': true, 'rt': true},
23
- 'rt': {'rp': true, 'rt': true},
24
- 'tbody': {'tbody': true, 'tfoot': true},
25
- 'td': {'td': true, 'th': true},
26
- 'tfoot': {'tbody': true},
27
- 'th': {'td': true, 'th': true},
28
- 'thead': {'tbody': true, 'tfoot': true},
29
- 'tr': {'tr': true}
30
- },
31
- doNotIndent: {"pre": true},
32
- allowUnquoted: true,
33
- allowMissing: false
34
- } : {
35
- autoSelfClosers: {},
36
- implicitlyClosed: {},
37
- contextGrabbers: {},
38
- doNotIndent: {},
39
- allowUnquoted: false,
40
- allowMissing: false
41
- };
42
- var alignCDATA = parserConfig.alignCDATA;
43
-
44
- // Return variables for tokenizers
45
- var tagName, type;
46
-
47
- function inText(stream, state) {
48
- function chain(parser) {
49
- state.tokenize = parser;
50
- return parser(stream, state);
51
- }
52
-
53
- var ch = stream.next();
54
- if (ch == "<") {
55
- if (stream.eat("!")) {
56
- if (stream.eat("[")) {
57
- if (stream.match("CDATA[")) return chain(inBlock("atom", "]]>"));
58
- else return null;
59
- }
60
- else if (stream.match("--")) return chain(inBlock("comment", "-->"));
61
- else if (stream.match("DOCTYPE", true, true)) {
62
- stream.eatWhile(/[\w\._\-]/);
63
- return chain(doctype(1));
64
- }
65
- else return null;
66
- }
67
- else if (stream.eat("?")) {
68
- stream.eatWhile(/[\w\._\-]/);
69
- state.tokenize = inBlock("meta", "?>");
70
- return "meta";
71
- }
72
- else {
73
- type = stream.eat("/") ? "closeTag" : "openTag";
74
- stream.eatSpace();
75
- tagName = "";
76
- var c;
77
- while ((c = stream.eat(/[^\s\u00a0=<>\"\'\/?]/))) tagName += c;
78
- state.tokenize = inTag;
79
- return "tag";
80
- }
81
- }
82
- else if (ch == "&") {
83
- var ok;
84
- if (stream.eat("#")) {
85
- if (stream.eat("x")) {
86
- ok = stream.eatWhile(/[a-fA-F\d]/) && stream.eat(";");
87
- } else {
88
- ok = stream.eatWhile(/[\d]/) && stream.eat(";");
89
- }
90
- } else {
91
- ok = stream.eatWhile(/[\w\.\-:]/) && stream.eat(";");
92
- }
93
- return ok ? "atom" : "error";
94
- }
95
- else {
96
- stream.eatWhile(/[^&<]/);
97
- return null;
98
- }
99
- }
100
-
101
- function inTag(stream, state) {
102
- var ch = stream.next();
103
- if (ch == ">" || (ch == "/" && stream.eat(">"))) {
104
- state.tokenize = inText;
105
- type = ch == ">" ? "endTag" : "selfcloseTag";
106
- return "tag";
107
- }
108
- else if (ch == "=") {
109
- type = "equals";
110
- return null;
111
- }
112
- else if (/[\'\"]/.test(ch)) {
113
- state.tokenize = inAttribute(ch);
114
- return state.tokenize(stream, state);
115
- }
116
- else {
117
- stream.eatWhile(/[^\s\u00a0=<>\"\'\/?]/);
118
- return "word";
119
- }
120
- }
121
-
122
- function inAttribute(quote) {
123
- return function(stream, state) {
124
- while (!stream.eol()) {
125
- if (stream.next() == quote) {
126
- state.tokenize = inTag;
127
- break;
128
- }
129
- }
130
- return "string";
131
- };
132
- }
133
-
134
- function inBlock(style, terminator) {
135
- return function(stream, state) {
136
- while (!stream.eol()) {
137
- if (stream.match(terminator)) {
138
- state.tokenize = inText;
139
- break;
140
- }
141
- stream.next();
142
- }
143
- return style;
144
- };
145
- }
146
- function doctype(depth) {
147
- return function(stream, state) {
148
- var ch;
149
- while ((ch = stream.next()) != null) {
150
- if (ch == "<") {
151
- state.tokenize = doctype(depth + 1);
152
- return state.tokenize(stream, state);
153
- } else if (ch == ">") {
154
- if (depth == 1) {
155
- state.tokenize = inText;
156
- break;
157
- } else {
158
- state.tokenize = doctype(depth - 1);
159
- return state.tokenize(stream, state);
160
- }
161
- }
162
- }
163
- return "meta";
164
- };
165
- }
166
-
167
- var curState, setStyle;
168
- function pass() {
169
- for (var i = arguments.length - 1; i >= 0; i--) curState.cc.push(arguments[i]);
170
- }
171
- function cont() {
172
- pass.apply(null, arguments);
173
- return true;
174
- }
175
-
176
- function pushContext(tagName, startOfLine) {
177
- var noIndent = Kludges.doNotIndent.hasOwnProperty(tagName) || (curState.context && curState.context.noIndent);
178
- curState.context = {
179
- prev: curState.context,
180
- tagName: tagName,
181
- indent: curState.indented,
182
- startOfLine: startOfLine,
183
- noIndent: noIndent
184
- };
185
- }
186
- function popContext() {
187
- if (curState.context) curState.context = curState.context.prev;
188
- }
189
-
190
- function element(type) {
191
- if (type == "openTag") {
192
- curState.tagName = tagName;
193
- return cont(attributes, endtag(curState.startOfLine));
194
- } else if (type == "closeTag") {
195
- var err = false;
196
- if (curState.context) {
197
- if (curState.context.tagName != tagName) {
198
- if (Kludges.implicitlyClosed.hasOwnProperty(curState.context.tagName.toLowerCase())) {
199
- popContext();
200
- }
201
- err = !curState.context || curState.context.tagName != tagName;
202
- }
203
- } else {
204
- err = true;
205
- }
206
- if (err) setStyle = "error";
207
- return cont(endclosetag(err));
208
- }
209
- return cont();
210
- }
211
- function endtag(startOfLine) {
212
- return function(type) {
213
- if (type == "selfcloseTag" ||
214
- (type == "endTag" && Kludges.autoSelfClosers.hasOwnProperty(curState.tagName.toLowerCase()))) {
215
- maybePopContext(curState.tagName.toLowerCase());
216
- return cont();
217
- }
218
- if (type == "endTag") {
219
- maybePopContext(curState.tagName.toLowerCase());
220
- pushContext(curState.tagName, startOfLine);
221
- return cont();
222
- }
223
- return cont();
224
- };
225
- }
226
- function endclosetag(err) {
227
- return function(type) {
228
- if (err) setStyle = "error";
229
- if (type == "endTag") { popContext(); return cont(); }
230
- setStyle = "error";
231
- return cont(arguments.callee);
232
- }
233
- }
234
- function maybePopContext(nextTagName) {
235
- var parentTagName;
236
- while (true) {
237
- if (!curState.context) {
238
- return;
239
- }
240
- parentTagName = curState.context.tagName.toLowerCase();
241
- if (!Kludges.contextGrabbers.hasOwnProperty(parentTagName) ||
242
- !Kludges.contextGrabbers[parentTagName].hasOwnProperty(nextTagName)) {
243
- return;
244
- }
245
- popContext();
246
- }
247
- }
248
-
249
- function attributes(type) {
250
- if (type == "word") {setStyle = "attribute"; return cont(attribute, attributes);}
251
- if (type == "endTag" || type == "selfcloseTag") return pass();
252
- setStyle = "error";
253
- return cont(attributes);
254
- }
255
- function attribute(type) {
256
- if (type == "equals") return cont(attvalue, attributes);
257
- if (!Kludges.allowMissing) setStyle = "error";
258
- return (type == "endTag" || type == "selfcloseTag") ? pass() : cont();
259
- }
260
- function attvalue(type) {
261
- if (type == "string") return cont(attvaluemaybe);
262
- if (type == "word" && Kludges.allowUnquoted) {setStyle = "string"; return cont();}
263
- setStyle = "error";
264
- return (type == "endTag" || type == "selfCloseTag") ? pass() : cont();
265
- }
266
- function attvaluemaybe(type) {
267
- if (type == "string") return cont(attvaluemaybe);
268
- else return pass();
269
- }
270
-
271
- return {
272
- startState: function() {
273
- return {tokenize: inText, cc: [], indented: 0, startOfLine: true, tagName: null, context: null};
274
- },
275
-
276
- token: function(stream, state) {
277
- if (stream.sol()) {
278
- state.startOfLine = true;
279
- state.indented = stream.indentation();
280
- }
281
- if (stream.eatSpace()) return null;
282
-
283
- setStyle = type = tagName = null;
284
- var style = state.tokenize(stream, state);
285
- state.type = type;
286
- if ((style || type) && style != "comment") {
287
- curState = state;
288
- while (true) {
289
- var comb = state.cc.pop() || element;
290
- if (comb(type || style)) break;
291
- }
292
- }
293
- state.startOfLine = false;
294
- return setStyle || style;
295
- },
296
-
297
- indent: function(state, textAfter, fullLine) {
298
- var context = state.context;
299
- if ((state.tokenize != inTag && state.tokenize != inText) ||
300
- context && context.noIndent)
301
- return fullLine ? fullLine.match(/^(\s*)/)[0].length : 0;
302
- if (alignCDATA && /<!\[CDATA\[/.test(textAfter)) return 0;
303
- if (context && /^<\//.test(textAfter))
304
- context = context.prev;
305
- while (context && !context.startOfLine)
306
- context = context.prev;
307
- if (context) return context.indent + indentUnit;
308
- else return 0;
309
- },
310
-
311
- compareStates: function(a, b) {
312
- if (a.indented != b.indented || a.tokenize != b.tokenize) return false;
313
- for (var ca = a.context, cb = b.context; ; ca = ca.prev, cb = cb.prev) {
314
- if (!ca || !cb) return ca == cb;
315
- if (ca.tagName != cb.tagName) return false;
316
- }
317
- },
318
-
319
- electricChars: "/"
320
- };
321
- });
322
-
323
- CodeMirror.defineMIME("application/xml", "xml");
324
- if (!CodeMirror.mimeModes.hasOwnProperty("text/html"))
325
- CodeMirror.defineMIME("text/html", {name: "xml", htmlMode: true});
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/CodeMirror2/theme/ambiance.css DELETED
@@ -1,82 +0,0 @@
1
- /* ambiance theme for code-mirror */
2
-
3
- /* Color scheme */
4
-
5
- .cm-s-ambiance .cm-keyword { color: #cda869; }
6
- .cm-s-ambiance .cm-atom { color: #CF7EA9; }
7
- .cm-s-ambiance .cm-number { color: #78CF8A; }
8
- .cm-s-ambiance .cm-def { color: #aac6e3; }
9
- .cm-s-ambiance .cm-variable { color: #ffb795; }
10
- .cm-s-ambiance .cm-variable-2 { color: #eed1b3; }
11
- .cm-s-ambiance .cm-variable-3 { color: #faded3; }
12
- .cm-s-ambiance .cm-property { color: #eed1b3; }
13
- .cm-s-ambiance .cm-operator {color: #fa8d6a;}
14
- .cm-s-ambiance .cm-comment { color: #555; font-style:italic; }
15
- .cm-s-ambiance .cm-string { color: #8f9d6a; }
16
- .cm-s-ambiance .cm-string-2 { color: #9d937c; }
17
- .cm-s-ambiance .cm-meta { color: #D2A8A1; }
18
- .cm-s-ambiance .cm-error { color: #AF2018; }
19
- .cm-s-ambiance .cm-qualifier { color: yellow; }
20
- .cm-s-ambiance .cm-builtin { color: #9999cc; }
21
- .cm-s-ambiance .cm-bracket { color: #24C2C7; }
22
- .cm-s-ambiance .cm-tag { color: #fee4ff }
23
- .cm-s-ambiance .cm-attribute { color: #9B859D; }
24
- .cm-s-ambiance .cm-header {color: #blue;}
25
- .cm-s-ambiance .cm-quote { color: #24C2C7; }
26
- .cm-s-ambiance .cm-hr { color: pink; }
27
- .cm-s-ambiance .cm-link { color: #F4C20B; }
28
- .cm-s-ambiance .cm-special { color: #FF9D00; }
29
-
30
- .cm-s-ambiance .CodeMirror-matchingbracket { color: #0f0; }
31
- .cm-s-ambiance .CodeMirror-nonmatchingbracket { color: #f22; }
32
-
33
- .cm-s-ambiance .CodeMirror-selected {
34
- background: rgba(255, 255, 255, 0.15);
35
- }
36
- .CodeMirror-focused .cm-s-ambiance .CodeMirror-selected {
37
- background: rgba(255, 255, 255, 0.10);
38
- }
39
-
40
- /* Editor styling */
41
-
42
- .cm-s-ambiance {
43
- line-height: 1.40em;
44
- font-family: Monaco, Menlo,"Andale Mono","lucida console","Courier New",monospace !important;
45
- font-size: 12px;
46
- color: #E6E1DC;
47
- background-color: #202020;
48
- -webkit-box-shadow: inset 0 0 10px black;
49
- -moz-box-shadow: inset 0 0 10px black;
50
- -o-box-shadow: inset 0 0 10px black;
51
- box-shadow: inset 0 0 10px black;
52
- }
53
-
54
- .cm-s-ambiance .CodeMirror-gutter {
55
- background: #3D3D3D;
56
- padding: 0 5px;
57
- text-shadow: #333 1px 1px;
58
- border-right: 1px solid #4D4D4D;
59
- box-shadow: 0 10px 20px black;
60
- }
61
-
62
- .cm-s-ambiance .CodeMirror-gutter .CodeMirror-gutter-text {
63
- text-shadow: 0px 1px 1px #4d4d4d;
64
- color: #222;
65
- }
66
-
67
- .cm-s-ambiance .CodeMirror-lines {
68
-
69
- }
70
-
71
- .cm-s-ambiance .CodeMirror-lines .CodeMirror-cursor {
72
- border-left: 1px solid #7991E8;
73
- }
74
-
75
- .cm-s-ambiance .activeline {
76
- background: none repeat scroll 0% 0% rgba(255, 255, 255, 0.031);
77
- }
78
-
79
- .cm-s-ambiance,
80
- .cm-s-ambiance .CodeMirror-gutter {
81
- background-image: url("data:image/png;base64,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");
82
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/CodeMirror2/theme/blackboard.css DELETED
@@ -1,25 +0,0 @@
1
- /* Port of TextMate's Blackboard theme */
2
-
3
- .cm-s-blackboard { background: #0C1021; color: #F8F8F8; }
4
- .cm-s-blackboard .CodeMirror-selected { background: #253B76 !important; }
5
- .cm-s-blackboard .CodeMirror-gutter { background: #0C1021; border-right: 0; }
6
- .cm-s-blackboard .CodeMirror-gutter-text { color: #888; }
7
- .cm-s-blackboard .CodeMirror-cursor { border-left: 1px solid #A7A7A7 !important; }
8
-
9
- .cm-s-blackboard .cm-keyword { color: #FBDE2D; }
10
- .cm-s-blackboard .cm-atom { color: #D8FA3C; }
11
- .cm-s-blackboard .cm-number { color: #D8FA3C; }
12
- .cm-s-blackboard .cm-def { color: #8DA6CE; }
13
- .cm-s-blackboard .cm-variable { color: #FF6400; }
14
- .cm-s-blackboard .cm-operator { color: #FBDE2D;}
15
- .cm-s-blackboard .cm-comment { color: #AEAEAE; }
16
- .cm-s-blackboard .cm-string { color: #61CE3C; }
17
- .cm-s-blackboard .cm-string-2 { color: #61CE3C; }
18
- .cm-s-blackboard .cm-meta { color: #D8FA3C; }
19
- .cm-s-blackboard .cm-error { background: #9D1E15; color: #F8F8F8; }
20
- .cm-s-blackboard .cm-builtin { color: #8DA6CE; }
21
- .cm-s-blackboard .cm-tag { color: #8DA6CE; }
22
- .cm-s-blackboard .cm-attribute { color: #8DA6CE; }
23
- .cm-s-blackboard .cm-header { color: #FF6400; }
24
- .cm-s-blackboard .cm-hr { color: #AEAEAE; }
25
- .cm-s-blackboard .cm-link { color: #8DA6CE; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/CodeMirror2/theme/cobalt.css DELETED
@@ -1,18 +0,0 @@
1
- .cm-s-cobalt { background: #002240; color: white; }
2
- .cm-s-cobalt div.CodeMirror-selected { background: #b36539 !important; }
3
- .cm-s-cobalt .CodeMirror-gutter { background: #002240; border-right: 1px solid #aaa; }
4
- .cm-s-cobalt .CodeMirror-gutter-text { color: #d0d0d0; }
5
- .cm-s-cobalt .CodeMirror-cursor { border-left: 1px solid white !important; }
6
-
7
- .cm-s-cobalt span.cm-comment { color: #08f; }
8
- .cm-s-cobalt span.cm-atom { color: #845dc4; }
9
- .cm-s-cobalt span.cm-number, .cm-s-cobalt span.cm-attribute { color: #ff80e1; }
10
- .cm-s-cobalt span.cm-keyword { color: #ffee80; }
11
- .cm-s-cobalt span.cm-string { color: #3ad900; }
12
- .cm-s-cobalt span.cm-meta { color: #ff9d00; }
13
- .cm-s-cobalt span.cm-variable-2, .cm-s-cobalt span.cm-tag { color: #9effff; }
14
- .cm-s-cobalt span.cm-variable-3, .cm-s-cobalt span.cm-def { color: white; }
15
- .cm-s-cobalt span.cm-error { color: #9d1e15; }
16
- .cm-s-cobalt span.cm-bracket { color: #d8d8d8; }
17
- .cm-s-cobalt span.cm-builtin, .cm-s-cobalt span.cm-special { color: #ff9e59; }
18
- .cm-s-cobalt span.cm-link { color: #845dc4; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/CodeMirror2/theme/eclipse.css DELETED
@@ -1,25 +0,0 @@
1
- .cm-s-eclipse span.cm-meta {color: #FF1717;}
2
- .cm-s-eclipse span.cm-keyword { line-height: 1em; font-weight: bold; color: #7F0055; }
3
- .cm-s-eclipse span.cm-atom {color: #219;}
4
- .cm-s-eclipse span.cm-number {color: #164;}
5
- .cm-s-eclipse span.cm-def {color: #00f;}
6
- .cm-s-eclipse span.cm-variable {color: black;}
7
- .cm-s-eclipse span.cm-variable-2 {color: #0000C0;}
8
- .cm-s-eclipse span.cm-variable-3 {color: #0000C0;}
9
- .cm-s-eclipse span.cm-property {color: black;}
10
- .cm-s-eclipse span.cm-operator {color: black;}
11
- .cm-s-eclipse span.cm-comment {color: #3F7F5F;}
12
- .cm-s-eclipse span.cm-string {color: #2A00FF;}
13
- .cm-s-eclipse span.cm-string-2 {color: #f50;}
14
- .cm-s-eclipse span.cm-error {color: #f00;}
15
- .cm-s-eclipse span.cm-qualifier {color: #555;}
16
- .cm-s-eclipse span.cm-builtin {color: #30a;}
17
- .cm-s-eclipse span.cm-bracket {color: #cc7;}
18
- .cm-s-eclipse span.cm-tag {color: #170;}
19
- .cm-s-eclipse span.cm-attribute {color: #00c;}
20
- .cm-s-eclipse span.cm-link {color: #219;}
21
-
22
- .cm-s-eclipse .CodeMirror-matchingbracket {
23
- border:1px solid grey;
24
- color:black !important;;
25
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/CodeMirror2/theme/elegant.css DELETED
@@ -1,10 +0,0 @@
1
- .cm-s-elegant span.cm-number, .cm-s-elegant span.cm-string, .cm-s-elegant span.cm-atom {color: #762;}
2
- .cm-s-elegant span.cm-comment {color: #262; font-style: italic; line-height: 1em;}
3
- .cm-s-elegant span.cm-meta {color: #555; font-style: italic; line-height: 1em;}
4
- .cm-s-elegant span.cm-variable {color: black;}
5
- .cm-s-elegant span.cm-variable-2 {color: #b11;}
6
- .cm-s-elegant span.cm-qualifier {color: #555;}
7
- .cm-s-elegant span.cm-keyword {color: #730;}
8
- .cm-s-elegant span.cm-builtin {color: #30a;}
9
- .cm-s-elegant span.cm-error {background-color: #fdd;}
10
- .cm-s-elegant span.cm-link {color: #762;}
 
 
 
 
 
 
 
 
 
 
vendor/CodeMirror2/theme/erlang-dark.css DELETED
@@ -1,21 +0,0 @@
1
- .cm-s-erlang-dark { background: #002240; color: white; }
2
- .cm-s-erlang-dark div.CodeMirror-selected { background: #b36539 !important; }
3
- .cm-s-erlang-dark .CodeMirror-gutter { background: #002240; border-right: 1px solid #aaa; }
4
- .cm-s-erlang-dark .CodeMirror-gutter-text { color: #d0d0d0; }
5
- .cm-s-erlang-dark .CodeMirror-cursor { border-left: 1px solid white !important; }
6
-
7
- .cm-s-erlang-dark span.cm-atom { color: #845dc4; }
8
- .cm-s-erlang-dark span.cm-attribute { color: #ff80e1; }
9
- .cm-s-erlang-dark span.cm-bracket { color: #ff9d00; }
10
- .cm-s-erlang-dark span.cm-builtin { color: #eeaaaa; }
11
- .cm-s-erlang-dark span.cm-comment { color: #7777ff; }
12
- .cm-s-erlang-dark span.cm-def { color: #ee77aa; }
13
- .cm-s-erlang-dark span.cm-error { color: #9d1e15; }
14
- .cm-s-erlang-dark span.cm-keyword { color: #ffee80; }
15
- .cm-s-erlang-dark span.cm-meta { color: #50fefe; }
16
- .cm-s-erlang-dark span.cm-number { color: #ffd0d0; }
17
- .cm-s-erlang-dark span.cm-operator { color: #dd1111; }
18
- .cm-s-erlang-dark span.cm-string { color: #3ad900; }
19
- .cm-s-erlang-dark span.cm-tag { color: #9effff; }
20
- .cm-s-erlang-dark span.cm-variable { color: #50fe50; }
21
- .cm-s-erlang-dark span.cm-variable-2 { color: #ee00ee; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/CodeMirror2/theme/lesser-dark.css DELETED
@@ -1,45 +0,0 @@
1
- /*
2
- http://lesscss.org/ dark theme
3
- Ported to CodeMirror by Peter Kroon
4
- */
5
- .CodeMirror{
6
- line-height: 15px;
7
- }
8
- .cm-s-lesser-dark {
9
- font-family: 'Bitstream Vera Sans Mono', 'DejaVu Sans Mono', 'Monaco', Courier, monospace !important;
10
- font-size:12px;
11
- }
12
-
13
- .cm-s-lesser-dark { background: #262626; color: #EBEFE7; text-shadow: 0 -1px 1px #262626; }
14
- .cm-s-lesser-dark div.CodeMirror-selected {background: #45443B !important;} /* 33322B*/
15
- .cm-s-lesser-dark .CodeMirror-cursor { border-left: 1px solid white !important; }
16
- .cm-s-lesser-dark .CodeMirror-lines { margin-left:3px; margin-right:3px; }/*editable code holder*/
17
-
18
- div.CodeMirror span.CodeMirror-matchingbracket { color: #7EFC7E; }/*65FC65*/
19
-
20
- .cm-s-lesser-dark .CodeMirror-gutter { background: #262626; border-right:1px solid #aaa; padding-right:3px; min-width:2.5em; }
21
- .cm-s-lesser-dark .CodeMirror-gutter-text { color: #777; }
22
-
23
- .cm-s-lesser-dark span.cm-keyword { color: #599eff; }
24
- .cm-s-lesser-dark span.cm-atom { color: #C2B470; }
25
- .cm-s-lesser-dark span.cm-number { color: #B35E4D; }
26
- .cm-s-lesser-dark span.cm-def {color: white;}
27
- .cm-s-lesser-dark span.cm-variable { color:#D9BF8C; }
28
- .cm-s-lesser-dark span.cm-variable-2 { color: #669199; }
29
- .cm-s-lesser-dark span.cm-variable-3 { color: white; }
30
- .cm-s-lesser-dark span.cm-property {color: #92A75C;}
31
- .cm-s-lesser-dark span.cm-operator {color: #92A75C;}
32
- .cm-s-lesser-dark span.cm-comment { color: #666; }
33
- .cm-s-lesser-dark span.cm-string { color: #BCD279; }
34
- .cm-s-lesser-dark span.cm-string-2 {color: #f50;}
35
- .cm-s-lesser-dark span.cm-meta { color: #738C73; }
36
- .cm-s-lesser-dark span.cm-error { color: #9d1e15; }
37
- .cm-s-lesser-dark span.cm-qualifier {color: #555;}
38
- .cm-s-lesser-dark span.cm-builtin { color: #ff9e59; }
39
- .cm-s-lesser-dark span.cm-bracket { color: #EBEFE7; }
40
- .cm-s-lesser-dark span.cm-tag { color: #669199; }
41
- .cm-s-lesser-dark span.cm-attribute {color: #00c;}
42
- .cm-s-lesser-dark span.cm-header {color: #a0a;}
43
- .cm-s-lesser-dark span.cm-quote {color: #090;}
44
- .cm-s-lesser-dark span.cm-hr {color: #999;}
45
- .cm-s-lesser-dark span.cm-link {color: #00c;}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/CodeMirror2/theme/monokai.css DELETED
@@ -1,28 +0,0 @@
1
- /* Based on Sublime Text's Monokai theme */
2
-
3
- .cm-s-monokai {background: #272822; color: #f8f8f2;}
4
- .cm-s-monokai div.CodeMirror-selected {background: #49483E !important;}
5
- .cm-s-monokai .CodeMirror-gutter {background: #272822; border-right: 0px;}
6
- .cm-s-monokai .CodeMirror-gutter-text {color: #d0d0d0;}
7
- .cm-s-monokai .CodeMirror-cursor {border-left: 1px solid #f8f8f0 !important;}
8
-
9
- .cm-s-monokai span.cm-comment {color: #75715e;}
10
- .cm-s-monokai span.cm-atom {color: #ae81ff;}
11
- .cm-s-monokai span.cm-number {color: #ae81ff;}
12
-
13
- .cm-s-monokai span.cm-property, .cm-s-monokai span.cm-attribute {color: #a6e22e;}
14
- .cm-s-monokai span.cm-keyword {color: #f92672;}
15
- .cm-s-monokai span.cm-string {color: #e6db74;}
16
-
17
- .cm-s-monokai span.cm-variable {color: #a6e22e;}
18
- .cm-s-monokai span.cm-variable-2 {color: #9effff;}
19
- .cm-s-monokai span.cm-def {color: #fd971f;}
20
- .cm-s-monokai span.cm-error {background: #f92672; color: #f8f8f0;}
21
- .cm-s-monokai span.cm-bracket {color: #f8f8f2;}
22
- .cm-s-monokai span.cm-tag {color: #f92672;}
23
- .cm-s-monokai span.cm-link {color: #ae81ff;}
24
-
25
- .cm-s-monokai .CodeMirror-matchingbracket {
26
- text-decoration: underline;
27
- color: white !important;
28
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/CodeMirror2/theme/neat.css DELETED
@@ -1,9 +0,0 @@
1
- .cm-s-neat span.cm-comment { color: #a86; }
2
- .cm-s-neat span.cm-keyword { line-height: 1em; font-weight: bold; color: blue; }
3
- .cm-s-neat span.cm-string { color: #a22; }
4
- .cm-s-neat span.cm-builtin { line-height: 1em; font-weight: bold; color: #077; }
5
- .cm-s-neat span.cm-special { line-height: 1em; font-weight: bold; color: #0aa; }
6
- .cm-s-neat span.cm-variable { color: black; }
7
- .cm-s-neat span.cm-number, .cm-s-neat span.cm-atom { color: #3a3; }
8
- .cm-s-neat span.cm-meta {color: #555;}
9
- .cm-s-neat span.cm-link { color: #3a3; }
 
 
 
 
 
 
 
 
 
vendor/CodeMirror2/theme/night.css DELETED
@@ -1,21 +0,0 @@
1
- /* Loosely based on the Midnight Textmate theme */
2
-
3
- .cm-s-night { background: #0a001f; color: #f8f8f8; }
4
- .cm-s-night div.CodeMirror-selected { background: #a8f !important; }
5
- .cm-s-night .CodeMirror-gutter { background: #0a001f; border-right: 1px solid #aaa; }
6
- .cm-s-night .CodeMirror-gutter-text { color: #f8f8f8; }
7
- .cm-s-night .CodeMirror-cursor { border-left: 1px solid white !important; }
8
-
9
- .cm-s-night span.cm-comment { color: #6900a1; }
10
- .cm-s-night span.cm-atom { color: #845dc4; }
11
- .cm-s-night span.cm-number, .cm-s-night span.cm-attribute { color: #ffd500; }
12
- .cm-s-night span.cm-keyword { color: #599eff; }
13
- .cm-s-night span.cm-string { color: #37f14a; }
14
- .cm-s-night span.cm-meta { color: #7678e2; }
15
- .cm-s-night span.cm-variable-2, .cm-s-night span.cm-tag { color: #99b2ff; }
16
- .cm-s-night span.cm-variable-3, .cm-s-night span.cm-def { color: white; }
17
- .cm-s-night span.cm-error { color: #9d1e15; }
18
- .cm-s-night span.cm-bracket { color: #8da6ce; }
19
- .cm-s-night span.cm-comment { color: #6900a1; }
20
- .cm-s-night span.cm-builtin, .cm-s-night span.cm-special { color: #ff9e59; }
21
- .cm-s-night span.cm-link { color: #845dc4; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/CodeMirror2/theme/rubyblue.css DELETED
@@ -1,21 +0,0 @@
1
- .cm-s-rubyblue { font:13px/1.4em Trebuchet, Verdana, sans-serif; } /* - customized editor font - */
2
-
3
- .cm-s-rubyblue { background: #112435; color: white; }
4
- .cm-s-rubyblue div.CodeMirror-selected { background: #38566F !important; }
5
- .cm-s-rubyblue .CodeMirror-gutter { background: #1F4661; border-right: 7px solid #3E7087; min-width:2.5em; }
6
- .cm-s-rubyblue .CodeMirror-gutter-text { color: white; }
7
- .cm-s-rubyblue .CodeMirror-cursor { border-left: 1px solid white !important; }
8
-
9
- .cm-s-rubyblue span.cm-comment { color: #999; font-style:italic; line-height: 1em; }
10
- .cm-s-rubyblue span.cm-atom { color: #F4C20B; }
11
- .cm-s-rubyblue span.cm-number, .cm-s-rubyblue span.cm-attribute { color: #82C6E0; }
12
- .cm-s-rubyblue span.cm-keyword { color: #F0F; }
13
- .cm-s-rubyblue span.cm-string { color: #F08047; }
14
- .cm-s-rubyblue span.cm-meta { color: #F0F; }
15
- .cm-s-rubyblue span.cm-variable-2, .cm-s-rubyblue span.cm-tag { color: #7BD827; }
16
- .cm-s-rubyblue span.cm-variable-3, .cm-s-rubyblue span.cm-def { color: white; }
17
- .cm-s-rubyblue span.cm-error { color: #AF2018; }
18
- .cm-s-rubyblue span.cm-bracket { color: #F0F; }
19
- .cm-s-rubyblue span.cm-link { color: #F4C20B; }
20
- .cm-s-rubyblue span.CodeMirror-matchingbracket { color:#F0F !important; }
21
- .cm-s-rubyblue span.cm-builtin, .cm-s-rubyblue span.cm-special { color: #FF9D00; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/CodeMirror2/theme/xq-dark.css DELETED
@@ -1,46 +0,0 @@
1
- /*
2
- Copyright (C) 2011 by MarkLogic Corporation
3
- Author: Mike Brevoort <mike@brevoort.com>
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in
13
- all copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- THE SOFTWARE.
22
- */
23
- .cm-s-xq-dark { background: #0a001f; color: #f8f8f8; }
24
- .cm-s-xq-dark span.CodeMirror-selected { background: #a8f !important; }
25
- .cm-s-xq-dark .CodeMirror-gutter { background: #0a001f; border-right: 1px solid #aaa; }
26
- .cm-s-xq-dark .CodeMirror-gutter-text { color: #f8f8f8; }
27
- .cm-s-xq-dark .CodeMirror-cursor { border-left: 1px solid white !important; }
28
-
29
- .cm-s-xq-dark span.cm-keyword {color: #FFBD40;}
30
- .cm-s-xq-dark span.cm-atom {color: #6C8CD5;}
31
- .cm-s-xq-dark span.cm-number {color: #164;}
32
- .cm-s-xq-dark span.cm-def {color: #FFF; text-decoration:underline;}
33
- .cm-s-xq-dark span.cm-variable {color: #FFF;}
34
- .cm-s-xq-dark span.cm-variable-2 {color: #EEE;}
35
- .cm-s-xq-dark span.cm-variable-3 {color: #DDD;}
36
- .cm-s-xq-dark span.cm-property {}
37
- .cm-s-xq-dark span.cm-operator {}
38
- .cm-s-xq-dark span.cm-comment {color: gray;}
39
- .cm-s-xq-dark span.cm-string {color: #9FEE00;}
40
- .cm-s-xq-dark span.cm-meta {color: yellow;}
41
- .cm-s-xq-dark span.cm-error {color: #f00;}
42
- .cm-s-xq-dark span.cm-qualifier {color: #FFF700;}
43
- .cm-s-xq-dark span.cm-builtin {color: #30a;}
44
- .cm-s-xq-dark span.cm-bracket {color: #cc7;}
45
- .cm-s-xq-dark span.cm-tag {color: #FFBD40;}
46
- .cm-s-xq-dark span.cm-attribute {color: #FFF700;}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/chosen/chosen-sprite.png CHANGED
Binary file
vendor/chosen/chosen-sprite@2x.png ADDED
Binary file
vendor/chosen/chosen.css DELETED
@@ -1,392 +0,0 @@
1
- /* @group Base */
2
- .chzn-container {
3
- font-size: 13px;
4
- position: relative;
5
- display: inline-block;
6
- zoom: 1;
7
- *display: inline;
8
- }
9
- .chzn-container .chzn-drop {
10
- background: #fff;
11
- border: 1px solid #aaa;
12
- border-top: 0;
13
- position: absolute;
14
- top: 29px;
15
- left: 0;
16
- -webkit-box-shadow: 0 4px 5px rgba(0,0,0,.15);
17
- -moz-box-shadow : 0 4px 5px rgba(0,0,0,.15);
18
- -o-box-shadow : 0 4px 5px rgba(0,0,0,.15);
19
- box-shadow : 0 4px 5px rgba(0,0,0,.15);
20
- z-index: 999;
21
- }
22
- /* @end */
23
-
24
- /* @group Single Chosen */
25
- .chzn-container-single .chzn-single {
26
- background-color: #ffffff;
27
- filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#eeeeee', GradientType=0 );
28
- background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(20%, #ffffff), color-stop(50%, #f6f6f6), color-stop(52%, #eeeeee), color-stop(100%, #f4f4f4));
29
- background-image: -webkit-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);
30
- background-image: -moz-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);
31
- background-image: -o-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);
32
- background-image: -ms-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);
33
- background-image: linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);
34
- -webkit-border-radius: 5px;
35
- -moz-border-radius : 5px;
36
- border-radius : 5px;
37
- -moz-background-clip : padding;
38
- -webkit-background-clip: padding-box;
39
- background-clip : padding-box;
40
- border: 1px solid #aaaaaa;
41
- -webkit-box-shadow: 0 0 3px #ffffff inset, 0 1px 1px rgba(0,0,0,0.1);
42
- -moz-box-shadow : 0 0 3px #ffffff inset, 0 1px 1px rgba(0,0,0,0.1);
43
- box-shadow : 0 0 3px #ffffff inset, 0 1px 1px rgba(0,0,0,0.1);
44
- display: block;
45
- overflow: hidden;
46
- white-space: nowrap;
47
- position: relative;
48
- height: 23px;
49
- line-height: 24px;
50
- padding: 0 0 0 8px;
51
- color: #444444;
52
- text-decoration: none;
53
- }
54
- .chzn-container-single .chzn-default {
55
- color: #999;
56
- }
57
- .chzn-container-single .chzn-single span {
58
- margin-right: 26px;
59
- display: block;
60
- overflow: hidden;
61
- white-space: nowrap;
62
- -o-text-overflow: ellipsis;
63
- -ms-text-overflow: ellipsis;
64
- text-overflow: ellipsis;
65
- }
66
- .chzn-container-single .chzn-single abbr {
67
- display: block;
68
- position: absolute;
69
- right: 26px;
70
- top: 6px;
71
- width: 12px;
72
- height: 13px;
73
- font-size: 1px;
74
- background: url(chosen-sprite.png) right top no-repeat;
75
- }
76
- .chzn-container-single .chzn-single abbr:hover {
77
- background-position: right -11px;
78
- }
79
- .chzn-container-single .chzn-single div {
80
- position: absolute;
81
- right: 0;
82
- top: 0;
83
- display: block;
84
- height: 100%;
85
- width: 18px;
86
- }
87
- .chzn-container-single .chzn-single div b {
88
- background: url('chosen-sprite.png') no-repeat 0 0;
89
- display: block;
90
- width: 100%;
91
- height: 100%;
92
- }
93
- .chzn-container-single .chzn-search {
94
- padding: 3px 4px;
95
- position: relative;
96
- margin: 0;
97
- white-space: nowrap;
98
- z-index: 1010;
99
- }
100
- .chzn-container-single .chzn-search input {
101
- background: #fff url('chosen-sprite.png') no-repeat 100% -22px;
102
- background: url('chosen-sprite.png') no-repeat 100% -22px, -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(1%, #eeeeee), color-stop(15%, #ffffff));
103
- background: url('chosen-sprite.png') no-repeat 100% -22px, -webkit-linear-gradient(top, #eeeeee 1%, #ffffff 15%);
104
- background: url('chosen-sprite.png') no-repeat 100% -22px, -moz-linear-gradient(top, #eeeeee 1%, #ffffff 15%);
105
- background: url('chosen-sprite.png') no-repeat 100% -22px, -o-linear-gradient(top, #eeeeee 1%, #ffffff 15%);
106
- background: url('chosen-sprite.png') no-repeat 100% -22px, -ms-linear-gradient(top, #eeeeee 1%, #ffffff 15%);
107
- background: url('chosen-sprite.png') no-repeat 100% -22px, linear-gradient(top, #eeeeee 1%, #ffffff 15%);
108
- margin: 1px 0;
109
- padding: 4px 20px 4px 5px;
110
- outline: 0;
111
- border: 1px solid #aaa;
112
- font-family: sans-serif;
113
- font-size: 1em;
114
- }
115
- .chzn-container-single .chzn-drop {
116
- -webkit-border-radius: 0 0 4px 4px;
117
- -moz-border-radius : 0 0 4px 4px;
118
- border-radius : 0 0 4px 4px;
119
- -moz-background-clip : padding;
120
- -webkit-background-clip: padding-box;
121
- background-clip : padding-box;
122
- }
123
- /* @end */
124
-
125
- .chzn-container-single-nosearch .chzn-search input {
126
- position: absolute;
127
- left: -9000px;
128
- }
129
-
130
- /* @group Multi Chosen */
131
- .chzn-container-multi .chzn-choices {
132
- background-color: #fff;
133
- background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(1%, #eeeeee), color-stop(15%, #ffffff));
134
- background-image: -webkit-linear-gradient(top, #eeeeee 1%, #ffffff 15%);
135
- background-image: -moz-linear-gradient(top, #eeeeee 1%, #ffffff 15%);
136
- background-image: -o-linear-gradient(top, #eeeeee 1%, #ffffff 15%);
137
- background-image: -ms-linear-gradient(top, #eeeeee 1%, #ffffff 15%);
138
- background-image: linear-gradient(top, #eeeeee 1%, #ffffff 15%);
139
- border: 1px solid #aaa;
140
- margin: 0;
141
- padding: 0;
142
- cursor: text;
143
- overflow: hidden;
144
- height: auto !important;
145
- height: 1%;
146
- position: relative;
147
- }
148
- .chzn-container-multi .chzn-choices li {
149
- float: left;
150
- list-style: none;
151
- }
152
- .chzn-container-multi .chzn-choices .search-field {
153
- white-space: nowrap;
154
- margin: 0;
155
- padding: 0;
156
- }
157
- .chzn-container-multi .chzn-choices .search-field input {
158
- color: #666;
159
- background: transparent !important;
160
- border: 0 !important;
161
- font-family: sans-serif;
162
- font-size: 100%;
163
- height: 15px;
164
- padding: 5px;
165
- margin: 1px 0;
166
- outline: 0;
167
- -webkit-box-shadow: none;
168
- -moz-box-shadow : none;
169
- -o-box-shadow : none;
170
- box-shadow : none;
171
- }
172
- .chzn-container-multi .chzn-choices .search-field .default {
173
- color: #999;
174
- }
175
- .chzn-container-multi .chzn-choices .search-choice {
176
- -webkit-border-radius: 3px;
177
- -moz-border-radius : 3px;
178
- border-radius : 3px;
179
- -moz-background-clip : padding;
180
- -webkit-background-clip: padding-box;
181
- background-clip : padding-box;
182
- background-color: #e4e4e4;
183
- filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f4f4f4', endColorstr='#eeeeee', GradientType=0 );
184
- background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eeeeee));
185
- background-image: -webkit-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
186
- background-image: -moz-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
187
- background-image: -o-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
188
- background-image: -ms-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
189
- background-image: linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
190
- -webkit-box-shadow: 0 0 2px #ffffff inset, 0 1px 0 rgba(0,0,0,0.05);
191
- -moz-box-shadow : 0 0 2px #ffffff inset, 0 1px 0 rgba(0,0,0,0.05);
192
- box-shadow : 0 0 2px #ffffff inset, 0 1px 0 rgba(0,0,0,0.05);
193
- color: #333;
194
- border: 1px solid #aaaaaa;
195
- line-height: 13px;
196
- padding: 3px 20px 3px 5px;
197
- margin: 3px 0 3px 5px;
198
- position: relative;
199
- cursor: default;
200
- }
201
- .chzn-container-multi .chzn-choices .search-choice-focus {
202
- background: #d4d4d4;
203
- }
204
- .chzn-container-multi .chzn-choices .search-choice .search-choice-close {
205
- display: block;
206
- position: absolute;
207
- right: 3px;
208
- top: 4px;
209
- width: 12px;
210
- height: 13px;
211
- font-size: 1px;
212
- background: url(chosen-sprite.png) right top no-repeat;
213
- }
214
- .chzn-container-multi .chzn-choices .search-choice .search-choice-close:hover {
215
- background-position: right -11px;
216
- }
217
- .chzn-container-multi .chzn-choices .search-choice-focus .search-choice-close {
218
- background-position: right -11px;
219
- }
220
- /* @end */
221
-
222
- /* @group Results */
223
- .chzn-container .chzn-results {
224
- margin: 0 4px 4px 0;
225
- max-height: 240px;
226
- padding: 0 0 0 4px;
227
- position: relative;
228
- overflow-x: hidden;
229
- overflow-y: auto;
230
- }
231
- .chzn-container-multi .chzn-results {
232
- margin: -1px 0 0;
233
- padding: 0;
234
- }
235
- .chzn-container .chzn-results li {
236
- display: none;
237
- line-height: 15px;
238
- padding: 5px 6px;
239
- margin: 0;
240
- list-style: none;
241
- }
242
- .chzn-container .chzn-results .active-result {
243
- cursor: pointer;
244
- display: list-item;
245
- }
246
- .chzn-container .chzn-results .highlighted {
247
- background-color: #3875d7;
248
- filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#3875d7', endColorstr='#2a62bc', GradientType=0 );
249
- background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(20%, #3875d7), color-stop(90%, #2a62bc));
250
- background-image: -webkit-linear-gradient(top, #3875d7 20%, #2a62bc 90%);
251
- background-image: -moz-linear-gradient(top, #3875d7 20%, #2a62bc 90%);
252
- background-image: -o-linear-gradient(top, #3875d7 20%, #2a62bc 90%);
253
- background-image: -ms-linear-gradient(top, #3875d7 20%, #2a62bc 90%);
254
- background-image: linear-gradient(top, #3875d7 20%, #2a62bc 90%);
255
- color: #fff;
256
- }
257
- .chzn-container .chzn-results li em {
258
- background: #feffde;
259
- font-style: normal;
260
- }
261
- .chzn-container .chzn-results .highlighted em {
262
- background: transparent;
263
- }
264
- .chzn-container .chzn-results .no-results {
265
- background: #f4f4f4;
266
- display: list-item;
267
- }
268
- .chzn-container .chzn-results .group-result {
269
- cursor: default;
270
- color: #999;
271
- font-weight: bold;
272
- }
273
- .chzn-container .chzn-results .group-option {
274
- padding-left: 15px;
275
- }
276
- .chzn-container-multi .chzn-drop .result-selected {
277
- display: none;
278
- }
279
- .chzn-container .chzn-results-scroll {
280
- background: white;
281
- margin: 0 4px;
282
- position: absolute;
283
- text-align: center;
284
- width: 321px; /* This should by dynamic with js */
285
- z-index: 1;
286
- }
287
- .chzn-container .chzn-results-scroll span {
288
- display: inline-block;
289
- height: 17px;
290
- text-indent: -5000px;
291
- width: 9px;
292
- }
293
- .chzn-container .chzn-results-scroll-down {
294
- bottom: 0;
295
- }
296
- .chzn-container .chzn-results-scroll-down span {
297
- background: url('chosen-sprite.png') no-repeat -4px -3px;
298
- }
299
- .chzn-container .chzn-results-scroll-up span {
300
- background: url('chosen-sprite.png') no-repeat -22px -3px;
301
- }
302
- /* @end */
303
-
304
- /* @group Active */
305
- .chzn-container-active .chzn-single {
306
- -webkit-box-shadow: 0 0 5px rgba(0,0,0,.3);
307
- -moz-box-shadow : 0 0 5px rgba(0,0,0,.3);
308
- -o-box-shadow : 0 0 5px rgba(0,0,0,.3);
309
- box-shadow : 0 0 5px rgba(0,0,0,.3);
310
- border: 1px solid #5897fb;
311
- }
312
- .chzn-container-active .chzn-single-with-drop {
313
- border: 1px solid #aaa;
314
- -webkit-box-shadow: 0 1px 0 #fff inset;
315
- -moz-box-shadow : 0 1px 0 #fff inset;
316
- -o-box-shadow : 0 1px 0 #fff inset;
317
- box-shadow : 0 1px 0 #fff inset;
318
- background-color: #eee;
319
- filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0 );
320
- background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(20%, #eeeeee), color-stop(80%, #ffffff));
321
- background-image: -webkit-linear-gradient(top, #eeeeee 20%, #ffffff 80%);
322
- background-image: -moz-linear-gradient(top, #eeeeee 20%, #ffffff 80%);
323
- background-image: -o-linear-gradient(top, #eeeeee 20%, #ffffff 80%);
324
- background-image: -ms-linear-gradient(top, #eeeeee 20%, #ffffff 80%);
325
- background-image: linear-gradient(top, #eeeeee 20%, #ffffff 80%);
326
- -webkit-border-bottom-left-radius : 0;
327
- -webkit-border-bottom-right-radius: 0;
328
- -moz-border-radius-bottomleft : 0;
329
- -moz-border-radius-bottomright: 0;
330
- border-bottom-left-radius : 0;
331
- border-bottom-right-radius: 0;
332
- }
333
- .chzn-container-active .chzn-single-with-drop div {
334
- background: transparent;
335
- border-left: none;
336
- }
337
- .chzn-container-active .chzn-single-with-drop div b {
338
- background-position: -18px 1px;
339
- }
340
- .chzn-container-active .chzn-choices {
341
- -webkit-box-shadow: 0 0 5px rgba(0,0,0,.3);
342
- -moz-box-shadow : 0 0 5px rgba(0,0,0,.3);
343
- -o-box-shadow : 0 0 5px rgba(0,0,0,.3);
344
- box-shadow : 0 0 5px rgba(0,0,0,.3);
345
- border: 1px solid #5897fb;
346
- }
347
- .chzn-container-active .chzn-choices .search-field input {
348
- color: #111 !important;
349
- }
350
- /* @end */
351
-
352
- /* @group Disabled Support */
353
- .chzn-disabled {
354
- cursor: default;
355
- opacity:0.5 !important;
356
- }
357
- .chzn-disabled .chzn-single {
358
- cursor: default;
359
- }
360
- .chzn-disabled .chzn-choices .search-choice .search-choice-close {
361
- cursor: default;
362
- }
363
-
364
- /* @group Right to Left */
365
- .chzn-rtl { text-align: right; }
366
- .chzn-rtl .chzn-single { padding: 0 8px 0 0; overflow: visible; }
367
- .chzn-rtl .chzn-single span { margin-left: 26px; margin-right: 0; direction: rtl; }
368
-
369
- .chzn-rtl .chzn-single div { left: 3px; right: auto; }
370
- .chzn-rtl .chzn-single abbr {
371
- left: 26px;
372
- right: auto;
373
- }
374
- .chzn-rtl .chzn-choices .search-field input { direction: rtl; }
375
- .chzn-rtl .chzn-choices li { float: right; }
376
- .chzn-rtl .chzn-choices .search-choice { padding: 3px 5px 3px 19px; margin: 3px 5px 3px 0; }
377
- .chzn-rtl .chzn-choices .search-choice .search-choice-close { left: 4px; right: auto; background-position: right top;}
378
- .chzn-rtl.chzn-container-single .chzn-results { margin: 0 0 4px 4px; padding: 0 4px 0 0; }
379
- .chzn-rtl .chzn-results .group-option { padding-left: 0; padding-right: 15px; }
380
- .chzn-rtl.chzn-container-active .chzn-single-with-drop div { border-right: none; }
381
- .chzn-rtl .chzn-search input {
382
- background: #fff url('chosen-sprite.png') no-repeat -38px -22px;
383
- background: url('chosen-sprite.png') no-repeat -38px -22px, -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(1%, #eeeeee), color-stop(15%, #ffffff));
384
- background: url('chosen-sprite.png') no-repeat -38px -22px, -webkit-linear-gradient(top, #eeeeee 1%, #ffffff 15%);
385
- background: url('chosen-sprite.png') no-repeat -38px -22px, -moz-linear-gradient(top, #eeeeee 1%, #ffffff 15%);
386
- background: url('chosen-sprite.png') no-repeat -38px -22px, -o-linear-gradient(top, #eeeeee 1%, #ffffff 15%);
387
- background: url('chosen-sprite.png') no-repeat -38px -22px, -ms-linear-gradient(top, #eeeeee 1%, #ffffff 15%);
388
- background: url('chosen-sprite.png') no-repeat -38px -22px, linear-gradient(top, #eeeeee 1%, #ffffff 15%);
389
- padding: 4px 5px 4px 20px;
390
- direction: rtl;
391
- }
392
- /* @end */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/chosen/chosen.jquery.min.js CHANGED
@@ -1,10 +1,2 @@
1
- // Chosen, a Select Box Enhancer for jQuery and Protoype
2
- // by Patrick Filler for Harvest, http://getharvest.com
3
- //
4
- // Version 0.9.8
5
- // Full source at https://github.com/harvesthq/chosen
6
- // Copyright (c) 2011 Harvest http://getharvest.com
7
-
8
- // MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md
9
- // This file is generated by `cake build`, do not edit it by hand.
10
- ((function(){var a;a=function(){function a(){this.options_index=0,this.parsed=[]}return a.prototype.add_node=function(a){return a.nodeName==="OPTGROUP"?this.add_group(a):this.add_option(a)},a.prototype.add_group=function(a){var b,c,d,e,f,g;b=this.parsed.length,this.parsed.push({array_index:b,group:!0,label:a.label,children:0,disabled:a.disabled}),f=a.childNodes,g=[];for(d=0,e=f.length;d<e;d++)c=f[d],g.push(this.add_option(c,b,a.disabled));return g},a.prototype.add_option=function(a,b,c){if(a.nodeName==="OPTION")return a.text!==""?(b!=null&&(this.parsed[b].children+=1),this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,value:a.value,text:a.text,html:a.innerHTML,selected:a.selected,disabled:c===!0?c:a.disabled,group_array_index:b,classes:a.className,style:a.style.cssText})):this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,empty:!0}),this.options_index+=1},a}(),a.select_to_array=function(b){var c,d,e,f,g;d=new a,g=b.childNodes;for(e=0,f=g.length;e<f;e++)c=g[e],d.add_node(c);return d.parsed},this.SelectParser=a})).call(this),function(){var a,b;b=this,a=function(){function a(a,b){this.form_field=a,this.options=b!=null?b:{},this.set_default_values(),this.is_multiple=this.form_field.multiple,this.default_text_default=this.is_multiple?"Select Some Options":"Select an Option",this.setup(),this.set_up_html(),this.register_observers(),this.finish_setup()}return a.prototype.set_default_values=function(){var a=this;return this.click_test_action=function(b){return a.test_active_click(b)},this.activate_action=function(b){return a.activate_field(b)},this.active_field=!1,this.mouse_on_container=!1,this.results_showing=!1,this.result_highlighted=null,this.result_single_selected=null,this.allow_single_deselect=this.options.allow_single_deselect!=null&&this.form_field.options[0]!=null&&this.form_field.options[0].text===""?this.options.allow_single_deselect:!1,this.disable_search_threshold=this.options.disable_search_threshold||0,this.search_contains=this.options.search_contains||!1,this.choices=0,this.results_none_found=this.options.no_results_text||"No results match"},a.prototype.mouse_enter=function(){return this.mouse_on_container=!0},a.prototype.mouse_leave=function(){return this.mouse_on_container=!1},a.prototype.input_focus=function(a){var b=this;if(!this.active_field)return setTimeout(function(){return b.container_mousedown()},50)},a.prototype.input_blur=function(a){var b=this;if(!this.mouse_on_container)return this.active_field=!1,setTimeout(function(){return b.blur_test()},100)},a.prototype.result_add_option=function(a){var b,c;return a.disabled?"":(a.dom_id=this.container_id+"_o_"+a.array_index,b=a.selected&&this.is_multiple?[]:["active-result"],a.selected&&b.push("result-selected"),a.group_array_index!=null&&b.push("group-option"),a.classes!==""&&b.push(a.classes),c=a.style.cssText!==""?' style="'+a.style+'"':"",'<li id="'+a.dom_id+'" class="'+b.join(" ")+'"'+c+">"+a.html+"</li>")},a.prototype.results_update_field=function(){return this.result_clear_highlight(),this.result_single_selected=null,this.results_build()},a.prototype.results_toggle=function(){return this.results_showing?this.results_hide():this.results_show()},a.prototype.results_search=function(a){return this.results_showing?this.winnow_results():this.results_show()},a.prototype.keyup_checker=function(a){var b,c;b=(c=a.which)!=null?c:a.keyCode,this.search_field_scale();switch(b){case 8:if(this.is_multiple&&this.backstroke_length<1&&this.choices>0)return this.keydown_backstroke();if(!this.pending_backstroke)return this.result_clear_highlight(),this.results_search();break;case 13:a.preventDefault();if(this.results_showing)return this.result_select(a);break;case 27:return this.results_showing&&this.results_hide(),!0;case 9:case 38:case 40:case 16:case 91:case 17:break;default:return this.results_search()}},a.prototype.generate_field_id=function(){var a;return a=this.generate_random_id(),this.form_field.id=a,a},a.prototype.generate_random_char=function(){var a,b,c;return a="0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZ",c=Math.floor(Math.random()*a.length),b=a.substring(c,c+1)},a}(),b.AbstractChosen=a}.call(this),function(){var a,b,c,d,e=Object.prototype.hasOwnProperty,f=function(a,b){function d(){this.constructor=a}for(var c in b)e.call(b,c)&&(a[c]=b[c]);return d.prototype=b.prototype,a.prototype=new d,a.__super__=b.prototype,a};d=this,a=jQuery,a.fn.extend({chosen:function(c){return!a.browser.msie||a.browser.version!=="6.0"&&a.browser.version!=="7.0"?a(this).each(function(d){if(!a(this).hasClass("chzn-done"))return new b(this,c)}):this}}),b=function(b){function e(){e.__super__.constructor.apply(this,arguments)}return f(e,b),e.prototype.setup=function(){return this.form_field_jq=a(this.form_field),this.is_rtl=this.form_field_jq.hasClass("chzn-rtl")},e.prototype.finish_setup=function(){return this.form_field_jq.addClass("chzn-done")},e.prototype.set_up_html=function(){var b,d,e,f;return this.container_id=this.form_field.id.length?this.form_field.id.replace(/(:|\.)/g,"_"):this.generate_field_id(),this.container_id+="_chzn",this.f_width=this.form_field_jq.outerWidth(),this.default_text=this.form_field_jq.data("placeholder")?this.form_field_jq.data("placeholder"):this.default_text_default,b=a("<div />",{id:this.container_id,"class":"chzn-container"+(this.is_rtl?" chzn-rtl":""),style:"width: "+this.f_width+"px;"}),this.is_multiple?b.html('<ul class="chzn-choices"><li class="search-field"><input type="text" value="'+this.default_text+'" class="default" autocomplete="off" style="width:25px;" /></li></ul><div class="chzn-drop" style="left:-9000px;"><ul class="chzn-results"></ul></div>'):b.html('<a href="javascript:void(0)" class="chzn-single chzn-default"><span>'+this.default_text+'</span><div><b></b></div></a><div class="chzn-drop" style="left:-9000px;"><div class="chzn-search"><input type="text" autocomplete="off" /></div><ul class="chzn-results"></ul></div>'),this.form_field_jq.hide().after(b),this.container=a("#"+this.container_id),this.container.addClass("chzn-container-"+(this.is_multiple?"multi":"single")),this.dropdown=this.container.find("div.chzn-drop").first(),d=this.container.height(),e=this.f_width-c(this.dropdown),this.dropdown.css({width:e+"px",top:d+"px"}),this.search_field=this.container.find("input").first(),this.search_results=this.container.find("ul.chzn-results").first(),this.search_field_scale(),this.search_no_results=this.container.find("li.no-results").first(),this.is_multiple?(this.search_choices=this.container.find("ul.chzn-choices").first(),this.search_container=this.container.find("li.search-field").first()):(this.search_container=this.container.find("div.chzn-search").first(),this.selected_item=this.container.find(".chzn-single").first(),f=e-c(this.search_container)-c(this.search_field),this.search_field.css({width:f+"px"})),this.results_build(),this.set_tab_index(),this.form_field_jq.trigger("liszt:ready",{chosen:this})},e.prototype.register_observers=function(){var a=this;return this.container.mousedown(function(b){return a.container_mousedown(b)}),this.container.mouseup(function(b){return a.container_mouseup(b)}),this.container.mouseenter(function(b){return a.mouse_enter(b)}),this.container.mouseleave(function(b){return a.mouse_leave(b)}),this.search_results.mouseup(function(b){return a.search_results_mouseup(b)}),this.search_results.mouseover(function(b){return a.search_results_mouseover(b)}),this.search_results.mouseout(function(b){return a.search_results_mouseout(b)}),this.form_field_jq.bind("liszt:updated",function(b){return a.results_update_field(b)}),this.search_field.blur(function(b){return a.input_blur(b)}),this.search_field.keyup(function(b){return a.keyup_checker(b)}),this.search_field.keydown(function(b){return a.keydown_checker(b)}),this.is_multiple?(this.search_choices.click(function(b){return a.choices_click(b)}),this.search_field.focus(function(b){return a.input_focus(b)})):this.container.click(function(a){return a.preventDefault()})},e.prototype.search_field_disabled=function(){this.is_disabled=this.form_field_jq[0].disabled;if(this.is_disabled)return this.container.addClass("chzn-disabled"),this.search_field[0].disabled=!0,this.is_multiple||this.selected_item.unbind("focus",this.activate_action),this.close_field();this.container.removeClass("chzn-disabled"),this.search_field[0].disabled=!1;if(!this.is_multiple)return this.selected_item.bind("focus",this.activate_action)},e.prototype.container_mousedown=function(b){var c;if(!this.is_disabled)return c=b!=null?a(b.target).hasClass("search-choice-close"):!1,b&&b.type==="mousedown"&&!this.results_showing&&b.stopPropagation(),!this.pending_destroy_click&&!c?(this.active_field?!this.is_multiple&&b&&(a(b.target)[0]===this.selected_item[0]||a(b.target).parents("a.chzn-single").length)&&(b.preventDefault(),this.results_toggle()):(this.is_multiple&&this.search_field.val(""),a(document).click(this.click_test_action),this.results_show()),this.activate_field()):this.pending_destroy_click=!1},e.prototype.container_mouseup=function(a){if(a.target.nodeName==="ABBR")return this.results_reset(a)},e.prototype.blur_test=function(a){if(!this.active_field&&this.container.hasClass("chzn-container-active"))return this.close_field()},e.prototype.close_field=function(){return a(document).unbind("click",this.click_test_action),this.is_multiple||(this.selected_item.attr("tabindex",this.search_field.attr("tabindex")),this.search_field.attr("tabindex",-1)),this.active_field=!1,this.results_hide(),this.container.removeClass("chzn-container-active"),this.winnow_results_clear(),this.clear_backstroke(),this.show_search_field_default(),this.search_field_scale()},e.prototype.activate_field=function(){return!this.is_multiple&&!this.active_field&&(this.search_field.attr("tabindex",this.selected_item.attr("tabindex")),this.selected_item.attr("tabindex",-1)),this.container.addClass("chzn-container-active"),this.active_field=!0,this.search_field.val(this.search_field.val()),this.search_field.focus()},e.prototype.test_active_click=function(b){return a(b.target).parents("#"+this.container_id).length?this.active_field=!0:this.close_field()},e.prototype.results_build=function(){var a,b,c,e,f;this.parsing=!0,this.results_data=d.SelectParser.select_to_array(this.form_field),this.is_multiple&&this.choices>0?(this.search_choices.find("li.search-choice").remove(),this.choices=0):this.is_multiple||(this.selected_item.find("span").text(this.default_text),this.form_field.options.length<=this.disable_search_threshold?this.container.addClass("chzn-container-single-nosearch"):this.container.removeClass("chzn-container-single-nosearch")),a="",f=this.results_data;for(c=0,e=f.length;c<e;c++)b=f[c],b.group?a+=this.result_add_group(b):b.empty||(a+=this.result_add_option(b),b.selected&&this.is_multiple?this.choice_build(b):b.selected&&!this.is_multiple&&(this.selected_item.removeClass("chzn-default").find("span").text(b.text),this.allow_single_deselect&&this.single_deselect_control_build()));return this.search_field_disabled(),this.show_search_field_default(),this.search_field_scale(),this.search_results.html(a),this.parsing=!1},e.prototype.result_add_group=function(b){return b.disabled?"":(b.dom_id=this.container_id+"_g_"+b.array_index,'<li id="'+b.dom_id+'" class="group-result">'+a("<div />").text(b.label).html()+"</li>")},e.prototype.result_do_highlight=function(a){var b,c,d,e,f;if(a.length){this.result_clear_highlight(),this.result_highlight=a,this.result_highlight.addClass("highlighted"),d=parseInt(this.search_results.css("maxHeight"),10),f=this.search_results.scrollTop(),e=d+f,c=this.result_highlight.position().top+this.search_results.scrollTop(),b=c+this.result_highlight.outerHeight();if(b>=e)return this.search_results.scrollTop(b-d>0?b-d:0);if(c<f)return this.search_results.scrollTop(c)}},e.prototype.result_clear_highlight=function(){return this.result_highlight&&this.result_highlight.removeClass("highlighted"),this.result_highlight=null},e.prototype.results_show=function(){var a;return this.is_multiple||(this.selected_item.addClass("chzn-single-with-drop"),this.result_single_selected&&this.result_do_highlight(this.result_single_selected)),a=this.is_multiple?this.container.height():this.container.height()-1,this.dropdown.css({top:a+"px",left:0}),this.results_showing=!0,this.search_field.focus(),this.search_field.val(this.search_field.val()),this.winnow_results()},e.prototype.results_hide=function(){return this.is_multiple||this.selected_item.removeClass("chzn-single-with-drop"),this.result_clear_highlight(),this.dropdown.css({left:"-9000px"}),this.results_showing=!1},e.prototype.set_tab_index=function(a){var b;if(this.form_field_jq.attr("tabindex"))return b=this.form_field_jq.attr("tabindex"),this.form_field_jq.attr("tabindex",-1),this.is_multiple?this.search_field.attr("tabindex",b):(this.selected_item.attr("tabindex",b),this.search_field.attr("tabindex",-1))},e.prototype.show_search_field_default=function(){return this.is_multiple&&this.choices<1&&!this.active_field?(this.search_field.val(this.default_text),this.search_field.addClass("default")):(this.search_field.val(""),this.search_field.removeClass("default"))},e.prototype.search_results_mouseup=function(b){var c;c=a(b.target).hasClass("active-result")?a(b.target):a(b.target).parents(".active-result").first();if(c.length)return this.result_highlight=c,this.result_select(b)},e.prototype.search_results_mouseover=function(b){var c;c=a(b.target).hasClass("active-result")?a(b.target):a(b.target).parents(".active-result").first();if(c)return this.result_do_highlight(c)},e.prototype.search_results_mouseout=function(b){if(a(b.target).hasClass("active-result"))return this.result_clear_highlight()},e.prototype.choices_click=function(b){b.preventDefault();if(this.active_field&&!a(b.target).hasClass("search-choice")&&!this.results_showing)return this.results_show()},e.prototype.choice_build=function(b){var c,d,e=this;return c=this.container_id+"_c_"+b.array_index,this.choices+=1,this.search_container.before('<li class="search-choice" id="'+c+'"><span>'+b.html+'</span><a href="javascript:void(0)" class="search-choice-close" rel="'+b.array_index+'"></a></li>'),d=a("#"+c).find("a").first(),d.click(function(a){return e.choice_destroy_link_click(a)})},e.prototype.choice_destroy_link_click=function(b){return b.preventDefault(),this.is_disabled?b.stopPropagation:(this.pending_destroy_click=!0,this.choice_destroy(a(b.target)))},e.prototype.choice_destroy=function(a){return this.choices-=1,this.show_search_field_default(),this.is_multiple&&this.choices>0&&this.search_field.val().length<1&&this.results_hide(),this.result_deselect(a.attr("rel")),a.parents("li").first().remove()},e.prototype.results_reset=function(b){this.form_field.options[0].selected=!0,this.selected_item.find("span").text(this.default_text),this.is_multiple||this.selected_item.addClass("chzn-default"),this.show_search_field_default(),a(b.target).remove(),this.form_field_jq.trigger("change");if(this.active_field)return this.results_hide()},e.prototype.result_select=function(a){var b,c,d,e;if(this.result_highlight)return b=this.result_highlight,c=b.attr("id"),this.result_clear_highlight(),this.is_multiple?this.result_deactivate(b):(this.search_results.find(".result-selected").removeClass("result-selected"),this.result_single_selected=b,this.selected_item.removeClass("chzn-default")),b.addClass("result-selected"),e=c.substr(c.lastIndexOf("_")+1),d=this.results_data[e],d.selected=!0,this.form_field.options[d.options_index].selected=!0,this.is_multiple?this.choice_build(d):(this.selected_item.find("span").first().text(d.text),this.allow_single_deselect&&this.single_deselect_control_build()),(!a.metaKey||!this.is_multiple)&&this.results_hide(),this.search_field.val(""),this.form_field_jq.trigger("change"),this.search_field_scale()},e.prototype.result_activate=function(a){return a.addClass("active-result")},e.prototype.result_deactivate=function(a){return a.removeClass("active-result")},e.prototype.result_deselect=function(b){var c,d;return d=this.results_data[b],d.selected=!1,this.form_field.options[d.options_index].selected=!1,c=a("#"+this.container_id+"_o_"+b),c.removeClass("result-selected").addClass("active-result").show(),this.result_clear_highlight(),this.winnow_results(),this.form_field_jq.trigger("change"),this.search_field_scale()},e.prototype.single_deselect_control_build=function(){if(this.allow_single_deselect&&this.selected_item.find("abbr").length<1)return this.selected_item.find("span").first().after('<abbr class="search-choice-close"></abbr>')},e.prototype.winnow_results=function(){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s;this.no_results_clear(),j=0,k=this.search_field.val()===this.default_text?"":a("<div/>").text(a.trim(this.search_field.val())).html(),g=this.search_contains?"":"^",f=new RegExp(g+k.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),"i"),n=new RegExp(k.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),"i"),s=this.results_data;for(o=0,q=s.length;o<q;o++){c=s[o];if(!c.disabled&&!c.empty)if(c.group)a("#"+c.dom_id).css("display","none");else if(!this.is_multiple||!c.selected){b=!1,i=c.dom_id,h=a("#"+i);if(f.test(c.html))b=!0,j+=1;else if(c.html.indexOf(" ")>=0||c.html.indexOf("[")===0){e=c.html.replace(/\[|\]/g,"").split(" ");if(e.length)for(p=0,r=e.length;p<r;p++)d=e[p],f.test(d)&&(b=!0,j+=1)}b?(k.length?(l=c.html.search(n),m=c.html.substr(0,l+k.length)+"</em>"+c.html.substr(l+k.length),m=m.substr(0,l)+"<em>"+m.substr(l)):m=c.html,h.html(m),this.result_activate(h),c.group_array_index!=null&&a("#"+this.results_data[c.group_array_index].dom_id).css("display","list-item")):(this.result_highlight&&i===this.result_highlight.attr("id")&&this.result_clear_highlight(),this.result_deactivate(h))}}return j<1&&k.length?this.no_results(k):this.winnow_results_set_highlight()},e.prototype.winnow_results_clear=function(){var b,c,d,e,f;this.search_field.val(""),c=this.search_results.find("li"),f=[];for(d=0,e=c.length;d<e;d++)b=c[d],b=a(b),b.hasClass("group-result")?f.push(b.css("display","auto")):!this.is_multiple||!b.hasClass("result-selected")?f.push(this.result_activate(b)):f.push(void 0);return f},e.prototype.winnow_results_set_highlight=function(){var a,b;if(!this.result_highlight){b=this.is_multiple?[]:this.search_results.find(".result-selected.active-result"),a=b.length?b.first():this.search_results.find(".active-result").first();if(a!=null)return this.result_do_highlight(a)}},e.prototype.no_results=function(b){var c;return c=a('<li class="no-results">'+this.results_none_found+' "<span></span>"</li>'),c.find("span").first().html(b),this.search_results.append(c)},e.prototype.no_results_clear=function(){return this.search_results.find(".no-results").remove()},e.prototype.keydown_arrow=function(){var b,c;this.result_highlight?this.results_showing&&(c=this.result_highlight.nextAll("li.active-result").first(),c&&this.result_do_highlight(c)):(b=this.search_results.find("li.active-result").first(),b&&this.result_do_highlight(a(b)));if(!this.results_showing)return this.results_show()},e.prototype.keyup_arrow=function(){var a;if(!this.results_showing&&!this.is_multiple)return this.results_show();if(this.result_highlight)return a=this.result_highlight.prevAll("li.active-result"),a.length?this.result_do_highlight(a.first()):(this.choices>0&&this.results_hide(),this.result_clear_highlight())},e.prototype.keydown_backstroke=function(){return this.pending_backstroke?(this.choice_destroy(this.pending_backstroke.find("a").first()),this.clear_backstroke()):(this.pending_backstroke=this.search_container.siblings("li.search-choice").last(),this.pending_backstroke.addClass("search-choice-focus"))},e.prototype.clear_backstroke=function(){return this.pending_backstroke&&this.pending_backstroke.removeClass("search-choice-focus"),this.pending_backstroke=null},e.prototype.keydown_checker=function(a){var b,c;b=(c=a.which)!=null?c:a.keyCode,this.search_field_scale(),b!==8&&this.pending_backstroke&&this.clear_backstroke();switch(b){case 8:this.backstroke_length=this.search_field.val().length;break;case 9:this.results_showing&&!this.is_multiple&&this.result_select(a),this.mouse_on_container=!1;break;case 13:a.preventDefault();break;case 38:a.preventDefault(),this.keyup_arrow();break;case 40:this.keydown_arrow()}},e.prototype.search_field_scale=function(){var b,c,d,e,f,g,h,i,j;if(this.is_multiple){d=0,h=0,f="position:absolute; left: -1000px; top: -1000px; display:none;",g=["font-size","font-style","font-weight","font-family","line-height","text-transform","letter-spacing"];for(i=0,j=g.length;i<j;i++)e=g[i],f+=e+":"+this.search_field.css(e)+";";return c=a("<div />",{style:f}),c.text(this.search_field.val()),a("body").append(c),h=c.width()+25,c.remove(),h>this.f_width-10&&(h=this.f_width-10),this.search_field.css({width:h+"px"}),b=this.container.height(),this.dropdown.css({top:b+"px"})}},e.prototype.generate_random_id=function(){var b;b="sel"+this.generate_random_char()+this.generate_random_char()+this.generate_random_char();while(a("#"+b).length>0)b+=this.generate_random_char();return b},e}(AbstractChosen),c=function(a){var b;return b=a.outerWidth()-a.width()},d.get_side_border_padding=c}.call(this)
1
+ /* Chosen v1.0.0 | (c) 2011-2013 by Harvest | MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md */
2
+ !function(){var a,AbstractChosen,Chosen,SelectParser,b,c={}.hasOwnProperty,d=function(a,b){function d(){this.constructor=a}for(var e in b)c.call(b,e)&&(a[e]=b[e]);return d.prototype=b.prototype,a.prototype=new d,a.__super__=b.prototype,a};SelectParser=function(){function SelectParser(){this.options_index=0,this.parsed=[]}return SelectParser.prototype.add_node=function(a){return"OPTGROUP"===a.nodeName.toUpperCase()?this.add_group(a):this.add_option(a)},SelectParser.prototype.add_group=function(a){var b,c,d,e,f,g;for(b=this.parsed.length,this.parsed.push({array_index:b,group:!0,label:this.escapeExpression(a.label),children:0,disabled:a.disabled}),f=a.childNodes,g=[],d=0,e=f.length;e>d;d++)c=f[d],g.push(this.add_option(c,b,a.disabled));return g},SelectParser.prototype.add_option=function(a,b,c){return"OPTION"===a.nodeName.toUpperCase()?(""!==a.text?(null!=b&&(this.parsed[b].children+=1),this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,value:a.value,text:a.text,html:a.innerHTML,selected:a.selected,disabled:c===!0?c:a.disabled,group_array_index:b,classes:a.className,style:a.style.cssText})):this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,empty:!0}),this.options_index+=1):void 0},SelectParser.prototype.escapeExpression=function(a){var b,c;return null==a||a===!1?"":/[\&\<\>\"\'\`]/.test(a)?(b={"<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","`":"&#x60;"},c=/&(?!\w+;)|[\<\>\"\'\`]/g,a.replace(c,function(a){return b[a]||"&amp;"})):a},SelectParser}(),SelectParser.select_to_array=function(a){var b,c,d,e,f;for(c=new SelectParser,f=a.childNodes,d=0,e=f.length;e>d;d++)b=f[d],c.add_node(b);return c.parsed},AbstractChosen=function(){function AbstractChosen(a,b){this.form_field=a,this.options=null!=b?b:{},AbstractChosen.browser_is_supported()&&(this.is_multiple=this.form_field.multiple,this.set_default_text(),this.set_default_values(),this.setup(),this.set_up_html(),this.register_observers())}return AbstractChosen.prototype.set_default_values=function(){var a=this;return this.click_test_action=function(b){return a.test_active_click(b)},this.activate_action=function(b){return a.activate_field(b)},this.active_field=!1,this.mouse_on_container=!1,this.results_showing=!1,this.result_highlighted=null,this.result_single_selected=null,this.allow_single_deselect=null!=this.options.allow_single_deselect&&null!=this.form_field.options[0]&&""===this.form_field.options[0].text?this.options.allow_single_deselect:!1,this.disable_search_threshold=this.options.disable_search_threshold||0,this.disable_search=this.options.disable_search||!1,this.enable_split_word_search=null!=this.options.enable_split_word_search?this.options.enable_split_word_search:!0,this.group_search=null!=this.options.group_search?this.options.group_search:!0,this.search_contains=this.options.search_contains||!1,this.single_backstroke_delete=null!=this.options.single_backstroke_delete?this.options.single_backstroke_delete:!0,this.max_selected_options=this.options.max_selected_options||1/0,this.inherit_select_classes=this.options.inherit_select_classes||!1,this.display_selected_options=null!=this.options.display_selected_options?this.options.display_selected_options:!0,this.display_disabled_options=null!=this.options.display_disabled_options?this.options.display_disabled_options:!0},AbstractChosen.prototype.set_default_text=function(){return this.default_text=this.form_field.getAttribute("data-placeholder")?this.form_field.getAttribute("data-placeholder"):this.is_multiple?this.options.placeholder_text_multiple||this.options.placeholder_text||AbstractChosen.default_multiple_text:this.options.placeholder_text_single||this.options.placeholder_text||AbstractChosen.default_single_text,this.results_none_found=this.form_field.getAttribute("data-no_results_text")||this.options.no_results_text||AbstractChosen.default_no_result_text},AbstractChosen.prototype.mouse_enter=function(){return this.mouse_on_container=!0},AbstractChosen.prototype.mouse_leave=function(){return this.mouse_on_container=!1},AbstractChosen.prototype.input_focus=function(){var a=this;if(this.is_multiple){if(!this.active_field)return setTimeout(function(){return a.container_mousedown()},50)}else if(!this.active_field)return this.activate_field()},AbstractChosen.prototype.input_blur=function(){var a=this;return this.mouse_on_container?void 0:(this.active_field=!1,setTimeout(function(){return a.blur_test()},100))},AbstractChosen.prototype.results_option_build=function(a){var b,c,d,e,f;for(b="",f=this.results_data,d=0,e=f.length;e>d;d++)c=f[d],b+=c.group?this.result_add_group(c):this.result_add_option(c),(null!=a?a.first:void 0)&&(c.selected&&this.is_multiple?this.choice_build(c):c.selected&&!this.is_multiple&&this.single_set_selected_text(c.text));return b},AbstractChosen.prototype.result_add_option=function(a){var b,c;return a.search_match?this.include_option_in_results(a)?(b=[],a.disabled||a.selected&&this.is_multiple||b.push("active-result"),!a.disabled||a.selected&&this.is_multiple||b.push("disabled-result"),a.selected&&b.push("result-selected"),null!=a.group_array_index&&b.push("group-option"),""!==a.classes&&b.push(a.classes),c=""!==a.style.cssText?' style="'+a.style+'"':"",'<li class="'+b.join(" ")+'"'+c+' data-option-array-index="'+a.array_index+'">'+a.search_text+"</li>"):"":""},AbstractChosen.prototype.result_add_group=function(a){return a.search_match||a.group_match?a.active_options>0?'<li class="group-result">'+a.search_text+"</li>":"":""},AbstractChosen.prototype.results_update_field=function(){return this.set_default_text(),this.is_multiple||this.results_reset_cleanup(),this.result_clear_highlight(),this.result_single_selected=null,this.results_build(),this.results_showing?this.winnow_results():void 0},AbstractChosen.prototype.results_toggle=function(){return this.results_showing?this.results_hide():this.results_show()},AbstractChosen.prototype.results_search=function(){return this.results_showing?this.winnow_results():this.results_show()},AbstractChosen.prototype.winnow_results=function(){var a,b,c,d,e,f,g,h,i,j,k,l,m;for(this.no_results_clear(),e=0,g=this.get_search_text(),a=g.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),d=this.search_contains?"":"^",c=new RegExp(d+a,"i"),j=new RegExp(a,"i"),m=this.results_data,k=0,l=m.length;l>k;k++)b=m[k],b.search_match=!1,f=null,this.include_option_in_results(b)&&(b.group&&(b.group_match=!1,b.active_options=0),null!=b.group_array_index&&this.results_data[b.group_array_index]&&(f=this.results_data[b.group_array_index],0===f.active_options&&f.search_match&&(e+=1),f.active_options+=1),(!b.group||this.group_search)&&(b.search_text=b.group?b.label:b.html,b.search_match=this.search_string_match(b.search_text,c),b.search_match&&!b.group&&(e+=1),b.search_match?(g.length&&(h=b.search_text.search(j),i=b.search_text.substr(0,h+g.length)+"</em>"+b.search_text.substr(h+g.length),b.search_text=i.substr(0,h)+"<em>"+i.substr(h)),null!=f&&(f.group_match=!0)):null!=b.group_array_index&&this.results_data[b.group_array_index].search_match&&(b.search_match=!0)));return this.result_clear_highlight(),1>e&&g.length?(this.update_results_content(""),this.no_results(g)):(this.update_results_content(this.results_option_build()),this.winnow_results_set_highlight())},AbstractChosen.prototype.search_string_match=function(a,b){var c,d,e,f;if(b.test(a))return!0;if(this.enable_split_word_search&&(a.indexOf(" ")>=0||0===a.indexOf("["))&&(d=a.replace(/\[|\]/g,"").split(" "),d.length))for(e=0,f=d.length;f>e;e++)if(c=d[e],b.test(c))return!0},AbstractChosen.prototype.choices_count=function(){var a,b,c,d;if(null!=this.selected_option_count)return this.selected_option_count;for(this.selected_option_count=0,d=this.form_field.options,b=0,c=d.length;c>b;b++)a=d[b],a.selected&&(this.selected_option_count+=1);return this.selected_option_count},AbstractChosen.prototype.choices_click=function(a){return a.preventDefault(),this.results_showing||this.is_disabled?void 0:this.results_show()},AbstractChosen.prototype.keyup_checker=function(a){var b,c;switch(b=null!=(c=a.which)?c:a.keyCode,this.search_field_scale(),b){case 8:if(this.is_multiple&&this.backstroke_length<1&&this.choices_count()>0)return this.keydown_backstroke();if(!this.pending_backstroke)return this.result_clear_highlight(),this.results_search();break;case 13:if(a.preventDefault(),this.results_showing)return this.result_select(a);break;case 27:return this.results_showing&&this.results_hide(),!0;case 9:case 38:case 40:case 16:case 91:case 17:break;default:return this.results_search()}},AbstractChosen.prototype.container_width=function(){return null!=this.options.width?this.options.width:""+this.form_field.offsetWidth+"px"},AbstractChosen.prototype.include_option_in_results=function(a){return this.is_multiple&&!this.display_selected_options&&a.selected?!1:!this.display_disabled_options&&a.disabled?!1:a.empty?!1:!0},AbstractChosen.browser_is_supported=function(){return"Microsoft Internet Explorer"===window.navigator.appName?document.documentMode>=8:/iP(od|hone)/i.test(window.navigator.userAgent)?!1:/Android/i.test(window.navigator.userAgent)&&/Mobile/i.test(window.navigator.userAgent)?!1:!0},AbstractChosen.default_multiple_text="Select Some Options",AbstractChosen.default_single_text="Select an Option",AbstractChosen.default_no_result_text="No results match",AbstractChosen}(),a=jQuery,a.fn.extend({chosen:function(b){return AbstractChosen.browser_is_supported()?this.each(function(){var c,d;c=a(this),d=c.data("chosen"),"destroy"===b&&d?d.destroy():d||c.data("chosen",new Chosen(this,b))}):this}}),Chosen=function(c){function Chosen(){return b=Chosen.__super__.constructor.apply(this,arguments)}return d(Chosen,c),Chosen.prototype.setup=function(){return this.form_field_jq=a(this.form_field),this.current_selectedIndex=this.form_field.selectedIndex,this.is_rtl=this.form_field_jq.hasClass("chosen-rtl")},Chosen.prototype.set_up_html=function(){var b,c;return b=["chosen-container"],b.push("chosen-container-"+(this.is_multiple?"multi":"single")),this.inherit_select_classes&&this.form_field.className&&b.push(this.form_field.className),this.is_rtl&&b.push("chosen-rtl"),c={"class":b.join(" "),style:"width: "+this.container_width()+";",title:this.form_field.title},this.form_field.id.length&&(c.id=this.form_field.id.replace(/[^\w]/g,"_")+"_chosen"),this.container=a("<div />",c),this.is_multiple?this.container.html('<ul class="chosen-choices"><li class="search-field"><input type="text" value="'+this.default_text+'" class="default" autocomplete="off" style="width:25px;" /></li></ul><div class="chosen-drop"><ul class="chosen-results"></ul></div>'):this.container.html('<a class="chosen-single chosen-default" tabindex="-1"><span>'+this.default_text+'</span><div><b></b></div></a><div class="chosen-drop"><div class="chosen-search"><input type="text" autocomplete="off" /></div><ul class="chosen-results"></ul></div>'),this.form_field_jq.hide().after(this.container),this.dropdown=this.container.find("div.chosen-drop").first(),this.search_field=this.container.find("input").first(),this.search_results=this.container.find("ul.chosen-results").first(),this.search_field_scale(),this.search_no_results=this.container.find("li.no-results").first(),this.is_multiple?(this.search_choices=this.container.find("ul.chosen-choices").first(),this.search_container=this.container.find("li.search-field").first()):(this.search_container=this.container.find("div.chosen-search").first(),this.selected_item=this.container.find(".chosen-single").first()),this.results_build(),this.set_tab_index(),this.set_label_behavior(),this.form_field_jq.trigger("chosen:ready",{chosen:this})},Chosen.prototype.register_observers=function(){var a=this;return this.container.bind("mousedown.chosen",function(b){a.container_mousedown(b)}),this.container.bind("mouseup.chosen",function(b){a.container_mouseup(b)}),this.container.bind("mouseenter.chosen",function(b){a.mouse_enter(b)}),this.container.bind("mouseleave.chosen",function(b){a.mouse_leave(b)}),this.search_results.bind("mouseup.chosen",function(b){a.search_results_mouseup(b)}),this.search_results.bind("mouseover.chosen",function(b){a.search_results_mouseover(b)}),this.search_results.bind("mouseout.chosen",function(b){a.search_results_mouseout(b)}),this.search_results.bind("mousewheel.chosen DOMMouseScroll.chosen",function(b){a.search_results_mousewheel(b)}),this.form_field_jq.bind("chosen:updated.chosen",function(b){a.results_update_field(b)}),this.form_field_jq.bind("chosen:activate.chosen",function(b){a.activate_field(b)}),this.form_field_jq.bind("chosen:open.chosen",function(b){a.container_mousedown(b)}),this.search_field.bind("blur.chosen",function(b){a.input_blur(b)}),this.search_field.bind("keyup.chosen",function(b){a.keyup_checker(b)}),this.search_field.bind("keydown.chosen",function(b){a.keydown_checker(b)}),this.search_field.bind("focus.chosen",function(b){a.input_focus(b)}),this.is_multiple?this.search_choices.bind("click.chosen",function(b){a.choices_click(b)}):this.container.bind("click.chosen",function(a){a.preventDefault()})},Chosen.prototype.destroy=function(){return a(document).unbind("click.chosen",this.click_test_action),this.search_field[0].tabIndex&&(this.form_field_jq[0].tabIndex=this.search_field[0].tabIndex),this.container.remove(),this.form_field_jq.removeData("chosen"),this.form_field_jq.show()},Chosen.prototype.search_field_disabled=function(){return this.is_disabled=this.form_field_jq[0].disabled,this.is_disabled?(this.container.addClass("chosen-disabled"),this.search_field[0].disabled=!0,this.is_multiple||this.selected_item.unbind("focus.chosen",this.activate_action),this.close_field()):(this.container.removeClass("chosen-disabled"),this.search_field[0].disabled=!1,this.is_multiple?void 0:this.selected_item.bind("focus.chosen",this.activate_action))},Chosen.prototype.container_mousedown=function(b){return this.is_disabled||(b&&"mousedown"===b.type&&!this.results_showing&&b.preventDefault(),null!=b&&a(b.target).hasClass("search-choice-close"))?void 0:(this.active_field?this.is_multiple||!b||a(b.target)[0]!==this.selected_item[0]&&!a(b.target).parents("a.chosen-single").length||(b.preventDefault(),this.results_toggle()):(this.is_multiple&&this.search_field.val(""),a(document).bind("click.chosen",this.click_test_action),this.results_show()),this.activate_field())},Chosen.prototype.container_mouseup=function(a){return"ABBR"!==a.target.nodeName||this.is_disabled?void 0:this.results_reset(a)},Chosen.prototype.search_results_mousewheel=function(a){var b,c,d;return b=-(null!=(c=a.originalEvent)?c.wheelDelta:void 0)||(null!=(d=a.originialEvent)?d.detail:void 0),null!=b?(a.preventDefault(),"DOMMouseScroll"===a.type&&(b=40*b),this.search_results.scrollTop(b+this.search_results.scrollTop())):void 0},Chosen.prototype.blur_test=function(){return!this.active_field&&this.container.hasClass("chosen-container-active")?this.close_field():void 0},Chosen.prototype.close_field=function(){return a(document).unbind("click.chosen",this.click_test_action),this.active_field=!1,this.results_hide(),this.container.removeClass("chosen-container-active"),this.clear_backstroke(),this.show_search_field_default(),this.search_field_scale()},Chosen.prototype.activate_field=function(){return this.container.addClass("chosen-container-active"),this.active_field=!0,this.search_field.val(this.search_field.val()),this.search_field.focus()},Chosen.prototype.test_active_click=function(b){return this.container.is(a(b.target).closest(".chosen-container"))?this.active_field=!0:this.close_field()},Chosen.prototype.results_build=function(){return this.parsing=!0,this.selected_option_count=null,this.results_data=SelectParser.select_to_array(this.form_field),this.is_multiple?this.search_choices.find("li.search-choice").remove():this.is_multiple||(this.single_set_selected_text(),this.disable_search||this.form_field.options.length<=this.disable_search_threshold?(this.search_field[0].readOnly=!0,this.container.addClass("chosen-container-single-nosearch")):(this.search_field[0].readOnly=!1,this.container.removeClass("chosen-container-single-nosearch"))),this.update_results_content(this.results_option_build({first:!0})),this.search_field_disabled(),this.show_search_field_default(),this.search_field_scale(),this.parsing=!1},Chosen.prototype.result_do_highlight=function(a){var b,c,d,e,f;if(a.length){if(this.result_clear_highlight(),this.result_highlight=a,this.result_highlight.addClass("highlighted"),d=parseInt(this.search_results.css("maxHeight"),10),f=this.search_results.scrollTop(),e=d+f,c=this.result_highlight.position().top+this.search_results.scrollTop(),b=c+this.result_highlight.outerHeight(),b>=e)return this.search_results.scrollTop(b-d>0?b-d:0);if(f>c)return this.search_results.scrollTop(c)}},Chosen.prototype.result_clear_highlight=function(){return this.result_highlight&&this.result_highlight.removeClass("highlighted"),this.result_highlight=null},Chosen.prototype.results_show=function(){return this.is_multiple&&this.max_selected_options<=this.choices_count()?(this.form_field_jq.trigger("chosen:maxselected",{chosen:this}),!1):(this.container.addClass("chosen-with-drop"),this.form_field_jq.trigger("chosen:showing_dropdown",{chosen:this}),this.results_showing=!0,this.search_field.focus(),this.search_field.val(this.search_field.val()),this.winnow_results())},Chosen.prototype.update_results_content=function(a){return this.search_results.html(a)},Chosen.prototype.results_hide=function(){return this.results_showing&&(this.result_clear_highlight(),this.container.removeClass("chosen-with-drop"),this.form_field_jq.trigger("chosen:hiding_dropdown",{chosen:this})),this.results_showing=!1},Chosen.prototype.set_tab_index=function(){var a;return this.form_field.tabIndex?(a=this.form_field.tabIndex,this.form_field.tabIndex=-1,this.search_field[0].tabIndex=a):void 0},Chosen.prototype.set_label_behavior=function(){var b=this;return this.form_field_label=this.form_field_jq.parents("label"),!this.form_field_label.length&&this.form_field.id.length&&(this.form_field_label=a("label[for='"+this.form_field.id+"']")),this.form_field_label.length>0?this.form_field_label.bind("click.chosen",function(a){return b.is_multiple?b.container_mousedown(a):b.activate_field()}):void 0},Chosen.prototype.show_search_field_default=function(){return this.is_multiple&&this.choices_count()<1&&!this.active_field?(this.search_field.val(this.default_text),this.search_field.addClass("default")):(this.search_field.val(""),this.search_field.removeClass("default"))},Chosen.prototype.search_results_mouseup=function(b){var c;return c=a(b.target).hasClass("active-result")?a(b.target):a(b.target).parents(".active-result").first(),c.length?(this.result_highlight=c,this.result_select(b),this.search_field.focus()):void 0},Chosen.prototype.search_results_mouseover=function(b){var c;return c=a(b.target).hasClass("active-result")?a(b.target):a(b.target).parents(".active-result").first(),c?this.result_do_highlight(c):void 0},Chosen.prototype.search_results_mouseout=function(b){return a(b.target).hasClass("active-result")?this.result_clear_highlight():void 0},Chosen.prototype.choice_build=function(b){var c,d,e=this;return c=a("<li />",{"class":"search-choice"}).html("<span>"+b.html+"</span>"),b.disabled?c.addClass("search-choice-disabled"):(d=a("<a />",{"class":"search-choice-close","data-option-array-index":b.array_index}),d.bind("click.chosen",function(a){return e.choice_destroy_link_click(a)}),c.append(d)),this.search_container.before(c)},Chosen.prototype.choice_destroy_link_click=function(b){return b.preventDefault(),b.stopPropagation(),this.is_disabled?void 0:this.choice_destroy(a(b.target))},Chosen.prototype.choice_destroy=function(a){return this.result_deselect(a[0].getAttribute("data-option-array-index"))?(this.show_search_field_default(),this.is_multiple&&this.choices_count()>0&&this.search_field.val().length<1&&this.results_hide(),a.parents("li").first().remove(),this.search_field_scale()):void 0},Chosen.prototype.results_reset=function(){return this.form_field.options[0].selected=!0,this.selected_option_count=null,this.single_set_selected_text(),this.show_search_field_default(),this.results_reset_cleanup(),this.form_field_jq.trigger("change"),this.active_field?this.results_hide():void 0},Chosen.prototype.results_reset_cleanup=function(){return this.current_selectedIndex=this.form_field.selectedIndex,this.selected_item.find("abbr").remove()},Chosen.prototype.result_select=function(a){var b,c,d;return this.result_highlight?(b=this.result_highlight,this.result_clear_highlight(),this.is_multiple&&this.max_selected_options<=this.choices_count()?(this.form_field_jq.trigger("chosen:maxselected",{chosen:this}),!1):(this.is_multiple?b.removeClass("active-result"):(this.result_single_selected&&(this.result_single_selected.removeClass("result-selected"),d=this.result_single_selected[0].getAttribute("data-option-array-index"),this.results_data[d].selected=!1),this.result_single_selected=b),b.addClass("result-selected"),c=this.results_data[b[0].getAttribute("data-option-array-index")],c.selected=!0,this.form_field.options[c.options_index].selected=!0,this.selected_option_count=null,this.is_multiple?this.choice_build(c):this.single_set_selected_text(c.text),(a.metaKey||a.ctrlKey)&&this.is_multiple||this.results_hide(),this.search_field.val(""),(this.is_multiple||this.form_field.selectedIndex!==this.current_selectedIndex)&&this.form_field_jq.trigger("change",{selected:this.form_field.options[c.options_index].value}),this.current_selectedIndex=this.form_field.selectedIndex,this.search_field_scale())):void 0},Chosen.prototype.single_set_selected_text=function(a){return null==a&&(a=this.default_text),a===this.default_text?this.selected_item.addClass("chosen-default"):(this.single_deselect_control_build(),this.selected_item.removeClass("chosen-default")),this.selected_item.find("span").text(a)},Chosen.prototype.result_deselect=function(a){var b;return b=this.results_data[a],this.form_field.options[b.options_index].disabled?!1:(b.selected=!1,this.form_field.options[b.options_index].selected=!1,this.selected_option_count=null,this.result_clear_highlight(),this.results_showing&&this.winnow_results(),this.form_field_jq.trigger("change",{deselected:this.form_field.options[b.options_index].value}),this.search_field_scale(),!0)},Chosen.prototype.single_deselect_control_build=function(){return this.allow_single_deselect?(this.selected_item.find("abbr").length||this.selected_item.find("span").first().after('<abbr class="search-choice-close"></abbr>'),this.selected_item.addClass("chosen-single-with-deselect")):void 0},Chosen.prototype.get_search_text=function(){return this.search_field.val()===this.default_text?"":a("<div/>").text(a.trim(this.search_field.val())).html()},Chosen.prototype.winnow_results_set_highlight=function(){var a,b;return b=this.is_multiple?[]:this.search_results.find(".result-selected.active-result"),a=b.length?b.first():this.search_results.find(".active-result").first(),null!=a?this.result_do_highlight(a):void 0},Chosen.prototype.no_results=function(b){var c;return c=a('<li class="no-results">'+this.results_none_found+' "<span></span>"</li>'),c.find("span").first().html(b),this.search_results.append(c)},Chosen.prototype.no_results_clear=function(){return this.search_results.find(".no-results").remove()},Chosen.prototype.keydown_arrow=function(){var a;return this.results_showing&&this.result_highlight?(a=this.result_highlight.nextAll("li.active-result").first())?this.result_do_highlight(a):void 0:this.results_show()},Chosen.prototype.keyup_arrow=function(){var a;return this.results_showing||this.is_multiple?this.result_highlight?(a=this.result_highlight.prevAll("li.active-result"),a.length?this.result_do_highlight(a.first()):(this.choices_count()>0&&this.results_hide(),this.result_clear_highlight())):void 0:this.results_show()},Chosen.prototype.keydown_backstroke=function(){var a;return this.pending_backstroke?(this.choice_destroy(this.pending_backstroke.find("a").first()),this.clear_backstroke()):(a=this.search_container.siblings("li.search-choice").last(),a.length&&!a.hasClass("search-choice-disabled")?(this.pending_backstroke=a,this.single_backstroke_delete?this.keydown_backstroke():this.pending_backstroke.addClass("search-choice-focus")):void 0)},Chosen.prototype.clear_backstroke=function(){return this.pending_backstroke&&this.pending_backstroke.removeClass("search-choice-focus"),this.pending_backstroke=null},Chosen.prototype.keydown_checker=function(a){var b,c;switch(b=null!=(c=a.which)?c:a.keyCode,this.search_field_scale(),8!==b&&this.pending_backstroke&&this.clear_backstroke(),b){case 8:this.backstroke_length=this.search_field.val().length;break;case 9:this.results_showing&&!this.is_multiple&&this.result_select(a),this.mouse_on_container=!1;break;case 13:a.preventDefault();break;case 38:a.preventDefault(),this.keyup_arrow();break;case 40:a.preventDefault(),this.keydown_arrow()}},Chosen.prototype.search_field_scale=function(){var b,c,d,e,f,g,h,i,j;if(this.is_multiple){for(d=0,h=0,f="position:absolute; left: -1000px; top: -1000px; display:none;",g=["font-size","font-style","font-weight","font-family","line-height","text-transform","letter-spacing"],i=0,j=g.length;j>i;i++)e=g[i],f+=e+":"+this.search_field.css(e)+";";return b=a("<div />",{style:f}),b.text(this.search_field.val()),a("body").append(b),h=b.width()+25,b.remove(),c=this.container.outerWidth(),h>c-10&&(h=c-10),this.search_field.css({width:h+"px"})}},Chosen}(AbstractChosen)}.call(this);
 
 
 
 
 
 
 
 
vendor/chosen/chosen.min.css ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /* Chosen v1.0.0 | (c) 2011-2013 by Harvest | MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md */
2
+
3
+ .chosen-container{position:relative;display:inline-block;vertical-align:middle;font-size:13px;zoom:1;*display:inline;-webkit-user-select:none;-moz-user-select:none;user-select:none}.chosen-container .chosen-drop{position:absolute;top:100%;left:-9999px;z-index:1010;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:100%;border:1px solid #aaa;border-top:0;background:#fff;box-shadow:0 4px 5px rgba(0,0,0,.15)}.chosen-container.chosen-with-drop .chosen-drop{left:0}.chosen-container a{cursor:pointer}.chosen-container-single .chosen-single{position:relative;display:block;overflow:hidden;padding:0 0 0 8px;height:23px;border:1px solid #aaa;border-radius:5px;background-color:#fff;background:-webkit-gradient(linear,50% 0,50% 100%,color-stop(20%,#fff),color-stop(50%,#f6f6f6),color-stop(52%,#eee),color-stop(100%,#f4f4f4));background:-webkit-linear-gradient(top,#fff 20%,#f6f6f6 50%,#eee 52%,#f4f4f4 100%);background:-moz-linear-gradient(top,#fff 20%,#f6f6f6 50%,#eee 52%,#f4f4f4 100%);background:-o-linear-gradient(top,#fff 20%,#f6f6f6 50%,#eee 52%,#f4f4f4 100%);background:linear-gradient(top,#fff 20%,#f6f6f6 50%,#eee 52%,#f4f4f4 100%);background-clip:padding-box;box-shadow:0 0 3px #fff inset,0 1px 1px rgba(0,0,0,.1);color:#444;text-decoration:none;white-space:nowrap;line-height:24px}.chosen-container-single .chosen-default{color:#999}.chosen-container-single .chosen-single span{display:block;overflow:hidden;margin-right:26px;text-overflow:ellipsis;white-space:nowrap}.chosen-container-single .chosen-single-with-deselect span{margin-right:38px}.chosen-container-single .chosen-single abbr{position:absolute;top:6px;right:26px;display:block;width:12px;height:12px;background:url(chosen-sprite.png) -42px 1px no-repeat;font-size:1px}.chosen-container-single .chosen-single abbr:hover{background-position:-42px -10px}.chosen-container-single.chosen-disabled .chosen-single abbr:hover{background-position:-42px -10px}.chosen-container-single .chosen-single div{position:absolute;top:0;right:0;display:block;width:18px;height:100%}.chosen-container-single .chosen-single div b{display:block;width:100%;height:100%;background:url(chosen-sprite.png) no-repeat 0 2px}.chosen-container-single .chosen-search{position:relative;z-index:1010;margin:0;padding:3px 4px;white-space:nowrap}.chosen-container-single .chosen-search input[type=text]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:1px 0;padding:4px 20px 4px 5px;width:100%;height:auto;outline:0;border:1px solid #aaa;background:#fff url(chosen-sprite.png) no-repeat 100% -20px;background:url(chosen-sprite.png) no-repeat 100% -20px,-webkit-gradient(linear,50% 0,50% 100%,color-stop(1%,#eee),color-stop(15%,#fff));background:url(chosen-sprite.png) no-repeat 100% -20px,-webkit-linear-gradient(#eee 1%,#fff 15%);background:url(chosen-sprite.png) no-repeat 100% -20px,-moz-linear-gradient(#eee 1%,#fff 15%);background:url(chosen-sprite.png) no-repeat 100% -20px,-o-linear-gradient(#eee 1%,#fff 15%);background:url(chosen-sprite.png) no-repeat 100% -20px,linear-gradient(#eee 1%,#fff 15%);font-size:1em;font-family:sans-serif;line-height:normal;border-radius:0}.chosen-container-single .chosen-drop{margin-top:-1px;border-radius:0 0 4px 4px;background-clip:padding-box}.chosen-container-single.chosen-container-single-nosearch .chosen-search{position:absolute;left:-9999px}.chosen-container .chosen-results{position:relative;overflow-x:hidden;overflow-y:auto;margin:0 4px 4px 0;padding:0 0 0 4px;max-height:240px;-webkit-overflow-scrolling:touch}.chosen-container .chosen-results li{display:none;margin:0;padding:5px 6px;list-style:none;line-height:15px}.chosen-container .chosen-results li.active-result{display:list-item;cursor:pointer}.chosen-container .chosen-results li.disabled-result{display:list-item;color:#ccc;cursor:default}.chosen-container .chosen-results li.highlighted{background-color:#3875d7;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(20%,#3875d7),color-stop(90%,#2a62bc));background-image:-webkit-linear-gradient(#3875d7 20%,#2a62bc 90%);background-image:-moz-linear-gradient(#3875d7 20%,#2a62bc 90%);background-image:-o-linear-gradient(#3875d7 20%,#2a62bc 90%);background-image:linear-gradient(#3875d7 20%,#2a62bc 90%);color:#fff}.chosen-container .chosen-results li.no-results{display:list-item;background:#f4f4f4}.chosen-container .chosen-results li.group-result{display:list-item;font-weight:700;cursor:default}.chosen-container .chosen-results li.group-option{padding-left:15px}.chosen-container .chosen-results li em{font-style:normal;text-decoration:underline}.chosen-container-multi .chosen-choices{position:relative;overflow:hidden;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;width:100%;height:auto!important;height:1%;border:1px solid #aaa;background-color:#fff;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(1%,#eee),color-stop(15%,#fff));background-image:-webkit-linear-gradient(#eee 1%,#fff 15%);background-image:-moz-linear-gradient(#eee 1%,#fff 15%);background-image:-o-linear-gradient(#eee 1%,#fff 15%);background-image:linear-gradient(#eee 1%,#fff 15%);cursor:text}.chosen-container-multi .chosen-choices li{float:left;list-style:none}.chosen-container-multi .chosen-choices li.search-field{margin:0;padding:0;white-space:nowrap}.chosen-container-multi .chosen-choices li.search-field input[type=text]{margin:1px 0;padding:5px;height:15px;outline:0;border:0!important;background:transparent!important;box-shadow:none;color:#666;font-size:100%;font-family:sans-serif;line-height:normal;border-radius:0}.chosen-container-multi .chosen-choices li.search-field .default{color:#999}.chosen-container-multi .chosen-choices li.search-choice{position:relative;margin:3px 0 3px 5px;padding:3px 20px 3px 5px;border:1px solid #aaa;border-radius:3px;background-color:#e4e4e4;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(20%,#f4f4f4),color-stop(50%,#f0f0f0),color-stop(52%,#e8e8e8),color-stop(100%,#eee));background-image:-webkit-linear-gradient(#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:-moz-linear-gradient(#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:-o-linear-gradient(#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:linear-gradient(#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-clip:padding-box;box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);color:#333;line-height:13px;cursor:default}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close{position:absolute;top:4px;right:3px;display:block;width:12px;height:12px;background:url(chosen-sprite.png) -42px 1px no-repeat;font-size:1px}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover{background-position:-42px -10px}.chosen-container-multi .chosen-choices li.search-choice-disabled{padding-right:5px;border:1px solid #ccc;background-color:#e4e4e4;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(20%,#f4f4f4),color-stop(50%,#f0f0f0),color-stop(52%,#e8e8e8),color-stop(100%,#eee));background-image:-webkit-linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:-moz-linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:-o-linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);color:#666}.chosen-container-multi .chosen-choices li.search-choice-focus{background:#d4d4d4}.chosen-container-multi .chosen-choices li.search-choice-focus .search-choice-close{background-position:-42px -10px}.chosen-container-multi .chosen-results{margin:0;padding:0}.chosen-container-multi .chosen-drop .result-selected{display:list-item;color:#ccc;cursor:default}.chosen-container-active .chosen-single{border:1px solid #5897fb;box-shadow:0 0 5px rgba(0,0,0,.3)}.chosen-container-active.chosen-with-drop .chosen-single{border:1px solid #aaa;-moz-border-radius-bottomright:0;border-bottom-right-radius:0;-moz-border-radius-bottomleft:0;border-bottom-left-radius:0;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(20%,#eee),color-stop(80%,#fff));background-image:-webkit-linear-gradient(#eee 20%,#fff 80%);background-image:-moz-linear-gradient(#eee 20%,#fff 80%);background-image:-o-linear-gradient(#eee 20%,#fff 80%);background-image:linear-gradient(#eee 20%,#fff 80%);box-shadow:0 1px 0 #fff inset}.chosen-container-active.chosen-with-drop .chosen-single div{border-left:0;background:transparent}.chosen-container-active.chosen-with-drop .chosen-single div b{background-position:-18px 2px}.chosen-container-active .chosen-choices{border:1px solid #5897fb;box-shadow:0 0 5px rgba(0,0,0,.3)}.chosen-container-active .chosen-choices li.search-field input[type=text]{color:#111!important}.chosen-disabled{opacity:.5!important;cursor:default}.chosen-disabled .chosen-single{cursor:default}.chosen-disabled .chosen-choices .search-choice .search-choice-close{cursor:default}.chosen-rtl{text-align:right}.chosen-rtl .chosen-single{overflow:visible;padding:0 8px 0 0}.chosen-rtl .chosen-single span{margin-right:0;margin-left:26px;direction:rtl}.chosen-rtl .chosen-single-with-deselect span{margin-left:38px}.chosen-rtl .chosen-single div{right:auto;left:3px}.chosen-rtl .chosen-single abbr{right:auto;left:26px}.chosen-rtl .chosen-choices li{float:right}.chosen-rtl .chosen-choices li.search-field input[type=text]{direction:rtl}.chosen-rtl .chosen-choices li.search-choice{margin:3px 5px 3px 0;padding:3px 5px 3px 19px}.chosen-rtl .chosen-choices li.search-choice .search-choice-close{right:auto;left:4px}.chosen-rtl.chosen-container-single-nosearch .chosen-search,.chosen-rtl .chosen-drop{left:9999px}.chosen-rtl.chosen-container-single .chosen-results{margin:0 0 4px 4px;padding:0 4px 0 0}.chosen-rtl .chosen-results li.group-option{padding-right:15px;padding-left:0}.chosen-rtl.chosen-container-active.chosen-with-drop .chosen-single div{border-right:0}.chosen-rtl .chosen-search input[type=text]{padding:4px 5px 4px 20px;background:#fff url(chosen-sprite.png) no-repeat -30px -20px;background:url(chosen-sprite.png) no-repeat -30px -20px,-webkit-gradient(linear,50% 0,50% 100%,color-stop(1%,#eee),color-stop(15%,#fff));background:url(chosen-sprite.png) no-repeat -30px -20px,-webkit-linear-gradient(#eee 1%,#fff 15%);background:url(chosen-sprite.png) no-repeat -30px -20px,-moz-linear-gradient(#eee 1%,#fff 15%);background:url(chosen-sprite.png) no-repeat -30px -20px,-o-linear-gradient(#eee 1%,#fff 15%);background:url(chosen-sprite.png) no-repeat -30px -20px,linear-gradient(#eee 1%,#fff 15%);direction:rtl}.chosen-rtl.chosen-container-single .chosen-single div b{background-position:6px 2px}.chosen-rtl.chosen-container-single.chosen-with-drop .chosen-single div b{background-position:-12px 2px}@media only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min-resolution:144dpi){.chosen-rtl .chosen-search input[type=text],.chosen-container-single .chosen-single abbr,.chosen-container-single .chosen-single div b,.chosen-container-single .chosen-search input[type=text],.chosen-container-multi .chosen-choices .search-choice .search-choice-close,.chosen-container .chosen-results-scroll-down span,.chosen-container .chosen-results-scroll-up span{background-image:url(chosen-sprite@2x.png)!important;background-size:52px 37px!important;background-repeat:no-repeat!important}}
vendor/codemirror/codemirror-compressed.css ADDED
@@ -0,0 +1,659 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .CodeMirror{font-family:monospace;height:300px}
2
+ .CodeMirror-scroll{overflow:auto}
3
+ .CodeMirror-lines{padding:4px 0;}
4
+ .CodeMirror pre{padding:0 4px;}
5
+ .CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{background-color:#fff;}
6
+ .CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}
7
+ .CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999}
8
+ .CodeMirror div.CodeMirror-cursor{border-left:1px solid #000;z-index:3}
9
+ .CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid #c0c0c0}
10
+ .CodeMirror.cm-keymap-fat-cursor div.CodeMirror-cursor{width:auto;border:0;background:#7e7;z-index:1}
11
+ .cm-tab{display:inline-block}
12
+ .cm-s-default .cm-keyword{color:#708}
13
+ .cm-s-default .cm-atom{color:#219}
14
+ .cm-s-default .cm-number{color:#164}
15
+ .cm-s-default .cm-def{color:#00f}
16
+ .cm-s-default .cm-variable{color:#000}
17
+ .cm-s-default .cm-variable-2{color:#05a}
18
+ .cm-s-default .cm-variable-3{color:#085}
19
+ .cm-s-default .cm-property{color:#000}
20
+ .cm-s-default .cm-operator{color:#000}
21
+ .cm-s-default .cm-comment{color:#a50}
22
+ .cm-s-default .cm-string{color:#a11}
23
+ .cm-s-default .cm-string-2{color:#f50}
24
+ .cm-s-default .cm-meta{color:#555}
25
+ .cm-s-default .cm-error{color:#f00}
26
+ .cm-s-default .cm-qualifier{color:#555}
27
+ .cm-s-default .cm-builtin{color:#30a}
28
+ .cm-s-default .cm-bracket{color:#997}
29
+ .cm-s-default .cm-tag{color:#170}
30
+ .cm-s-default .cm-attribute{color:#00c}
31
+ .cm-s-default .cm-header{color:#00f}
32
+ .cm-s-default .cm-quote{color:#090}
33
+ .cm-s-default .cm-hr{color:#999}
34
+ .cm-s-default .cm-link{color:#00c}
35
+ .cm-negative{color:#d44}
36
+ .cm-positive{color:#292}
37
+ .cm-header,.cm-strong{font-weight:bold}
38
+ .cm-em{font-style:italic}
39
+ .cm-link{text-decoration:underline}
40
+ .cm-invalidchar{color:#f00}
41
+ div.CodeMirror span.CodeMirror-matchingbracket{color:#0f0}
42
+ div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#f22}
43
+ .CodeMirror-activeline-background{background:#e8f2ff}
44
+ .CodeMirror{line-height:1;position:relative;overflow:hidden;background:#fff;color:#000}
45
+ .CodeMirror-scroll{margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;padding-right:30px;height:100%;outline:none;position:relative}
46
+ .CodeMirror-sizer{position:relative}
47
+ .CodeMirror-vscrollbar,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{position:absolute;z-index:6;display:none}
48
+ .CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}
49
+ .CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}
50
+ .CodeMirror-scrollbar-filler{right:0;bottom:0}
51
+ .CodeMirror-gutter-filler{left:0;bottom:0}
52
+ .CodeMirror-gutters{position:absolute;left:0;top:0;padding-bottom:30px;z-index:3}
53
+ .CodeMirror-gutter{white-space:normal;height:100%;padding-bottom:30px;margin-bottom:-32px;display:inline-block;*zoom:1;*display:inline}
54
+ .CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}
55
+ .CodeMirror-lines{cursor:text}
56
+ .CodeMirror pre{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:transparent;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible}
57
+ .CodeMirror-wrap pre{word-wrap:break-word;white-space:pre-wrap;word-break:normal}
58
+ .CodeMirror-code pre{border-right:30px solid transparent;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}
59
+ .CodeMirror-wrap .CodeMirror-code pre{border-right:none;width:auto}
60
+ .CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}
61
+ .CodeMirror-linewidget{position:relative;z-index:2;overflow:auto}
62
+ .CodeMirror-wrap .CodeMirror-scroll{overflow-x:hidden}
63
+ .CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}
64
+ .CodeMirror-measure pre{position:static}
65
+ .CodeMirror div.CodeMirror-cursor{position:absolute;visibility:hidden;border-right:none;width:0}
66
+ .CodeMirror-focused div.CodeMirror-cursor{visibility:visible}
67
+ .CodeMirror-selected{background:#d9d9d9}
68
+ .CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}
69
+ .cm-searching{background:#ffa;background:rgba(255,255,0,0.4)}
70
+ .CodeMirror span{*vertical-align:text-bottom}
71
+ @media print{.CodeMirror div.CodeMirror-cursor{visibility:hidden}}.cm-s-3024-day.CodeMirror{background:#f7f7f7;color:#3a3432}
72
+ .cm-s-3024-day div.CodeMirror-selected{background:#d6d5d4 !important}
73
+ .cm-s-3024-day .CodeMirror-gutters{background:#f7f7f7;border-right:0}
74
+ .cm-s-3024-day .CodeMirror-linenumber{color:#807d7c}
75
+ .cm-s-3024-day .CodeMirror-cursor{border-left:1px solid #5c5855 !important}
76
+ .cm-s-3024-day span.cm-comment{color:#cdab53}
77
+ .cm-s-3024-day span.cm-atom{color:#a16a94}
78
+ .cm-s-3024-day span.cm-number{color:#a16a94}
79
+ .cm-s-3024-day span.cm-property,.cm-s-3024-day span.cm-attribute{color:#01a252}
80
+ .cm-s-3024-day span.cm-keyword{color:#db2d20}
81
+ .cm-s-3024-day span.cm-string{color:#fded02}
82
+ .cm-s-3024-day span.cm-variable{color:#01a252}
83
+ .cm-s-3024-day span.cm-variable-2{color:#01a0e4}
84
+ .cm-s-3024-day span.cm-def{color:#e8bbd0}
85
+ .cm-s-3024-day span.cm-error{background:#db2d20;color:#5c5855}
86
+ .cm-s-3024-day span.cm-bracket{color:#3a3432}
87
+ .cm-s-3024-day span.cm-tag{color:#db2d20}
88
+ .cm-s-3024-day span.cm-link{color:#a16a94}
89
+ .cm-s-3024-day .CodeMirror-activeline-background{background:#e8f2ff !important}
90
+ .cm-s-3024-day .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}
91
+ .cm-s-3024-night.CodeMirror{background:#090300;color:#d6d5d4}
92
+ .cm-s-3024-night div.CodeMirror-selected{background:#3a3432 !important}
93
+ .cm-s-3024-night .CodeMirror-gutters{background:#090300;border-right:0}
94
+ .cm-s-3024-night .CodeMirror-linenumber{color:#5c5855}
95
+ .cm-s-3024-night .CodeMirror-cursor{border-left:1px solid #807d7c !important}
96
+ .cm-s-3024-night span.cm-comment{color:#cdab53}
97
+ .cm-s-3024-night span.cm-atom{color:#a16a94}
98
+ .cm-s-3024-night span.cm-number{color:#a16a94}
99
+ .cm-s-3024-night span.cm-property,.cm-s-3024-night span.cm-attribute{color:#01a252}
100
+ .cm-s-3024-night span.cm-keyword{color:#db2d20}
101
+ .cm-s-3024-night span.cm-string{color:#fded02}
102
+ .cm-s-3024-night span.cm-variable{color:#01a252}
103
+ .cm-s-3024-night span.cm-variable-2{color:#01a0e4}
104
+ .cm-s-3024-night span.cm-def{color:#e8bbd0}
105
+ .cm-s-3024-night span.cm-error{background:#db2d20;color:#807d7c}
106
+ .cm-s-3024-night span.cm-bracket{color:#d6d5d4}
107
+ .cm-s-3024-night span.cm-tag{color:#db2d20}
108
+ .cm-s-3024-night span.cm-link{color:#a16a94}
109
+ .cm-s-3024-night .CodeMirror-activeline-background{background:#2f2f2f !important}
110
+ .cm-s-3024-night .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}
111
+ .cm-s-ambiance .cm-keyword{color:#cda869}
112
+ .cm-s-ambiance .cm-atom{color:#cf7ea9}
113
+ .cm-s-ambiance .cm-number{color:#78cf8a}
114
+ .cm-s-ambiance .cm-def{color:#aac6e3}
115
+ .cm-s-ambiance .cm-variable{color:#ffb795}
116
+ .cm-s-ambiance .cm-variable-2{color:#eed1b3}
117
+ .cm-s-ambiance .cm-variable-3{color:#faded3}
118
+ .cm-s-ambiance .cm-property{color:#eed1b3}
119
+ .cm-s-ambiance .cm-operator{color:#fa8d6a}
120
+ .cm-s-ambiance .cm-comment{color:#555;font-style:italic}
121
+ .cm-s-ambiance .cm-string{color:#8f9d6a}
122
+ .cm-s-ambiance .cm-string-2{color:#9d937c}
123
+ .cm-s-ambiance .cm-meta{color:#d2a8a1}
124
+ .cm-s-ambiance .cm-error{color:#af2018}
125
+ .cm-s-ambiance .cm-qualifier{color:#ff0}
126
+ .cm-s-ambiance .cm-builtin{color:#99c}
127
+ .cm-s-ambiance .cm-bracket{color:#24c2c7}
128
+ .cm-s-ambiance .cm-tag{color:#fee4ff}
129
+ .cm-s-ambiance .cm-attribute{color:#9b859d}
130
+ .cm-s-ambiance .cm-header{color:#00f}
131
+ .cm-s-ambiance .cm-quote{color:#24c2c7}
132
+ .cm-s-ambiance .cm-hr{color:#ffc0cb}
133
+ .cm-s-ambiance .cm-link{color:#f4c20b}
134
+ .cm-s-ambiance .cm-special{color:#ff9d00}
135
+ .cm-s-ambiance .CodeMirror-matchingbracket{color:#0f0}
136
+ .cm-s-ambiance .CodeMirror-nonmatchingbracket{color:#f22}
137
+ .cm-s-ambiance .CodeMirror-selected{background:rgba(255,255,255,0.15)}
138
+ .cm-s-ambiance .CodeMirror-focused .CodeMirror-selected{background:rgba(255,255,255,0.1)}
139
+ .cm-s-ambiance.CodeMirror{line-height:1.4em;font-family:Monaco,Menlo,"Andale Mono","lucida console","Courier New",monospace !important;color:#e6e1dc;background-color:#202020;-webkit-box-shadow:inset 0 0 10px #000;-moz-box-shadow:inset 0 0 10px #000;box-shadow:inset 0 0 10px #000}
140
+ .cm-s-ambiance .CodeMirror-gutters{background:#3d3d3d;border-right:1px solid #4d4d4d;box-shadow:0 10px 20px #000}
141
+ .cm-s-ambiance .CodeMirror-linenumber{text-shadow:0 1px 1px #4d4d4d;color:#222;padding:0 5px}
142
+ .cm-s-ambiance .CodeMirror-lines .CodeMirror-cursor{border-left:1px solid #7991e8}
143
+ .cm-s-ambiance .CodeMirror-activeline-background{background:none repeat scroll 0 0 rgba(255,255,255,0.031)}
144
+ .cm-s-ambiance.CodeMirror,.cm-s-ambiance .CodeMirror-gutters{background-image:url("data:image/png;base64,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")}
145
+ .cm-s-base16-dark.CodeMirror{background:#151515;color:#e0e0e0}
146
+ .cm-s-base16-dark div.CodeMirror-selected{background:#202020 !important}
147
+ .cm-s-base16-dark .CodeMirror-gutters{background:#151515;border-right:0}
148
+ .cm-s-base16-dark .CodeMirror-linenumber{color:#505050}
149
+ .cm-s-base16-dark .CodeMirror-cursor{border-left:1px solid #b0b0b0 !important}
150
+ .cm-s-base16-dark span.cm-comment{color:#8f5536}
151
+ .cm-s-base16-dark span.cm-atom{color:#aa759f}
152
+ .cm-s-base16-dark span.cm-number{color:#aa759f}
153
+ .cm-s-base16-dark span.cm-property,.cm-s-base16-dark span.cm-attribute{color:#90a959}
154
+ .cm-s-base16-dark span.cm-keyword{color:#ac4142}
155
+ .cm-s-base16-dark span.cm-string{color:#f4bf75}
156
+ .cm-s-base16-dark span.cm-variable{color:#90a959}
157
+ .cm-s-base16-dark span.cm-variable-2{color:#6a9fb5}
158
+ .cm-s-base16-dark span.cm-def{color:#d28445}
159
+ .cm-s-base16-dark span.cm-error{background:#ac4142;color:#b0b0b0}
160
+ .cm-s-base16-dark span.cm-bracket{color:#e0e0e0}
161
+ .cm-s-base16-dark span.cm-tag{color:#ac4142}
162
+ .cm-s-base16-dark span.cm-link{color:#aa759f}
163
+ .cm-s-base16-dark .CodeMirror-activeline-background{background:#2f2f2f !important}
164
+ .cm-s-base16-dark .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}
165
+ .cm-s-base16-light.CodeMirror{background:#f5f5f5;color:#202020}
166
+ .cm-s-base16-light div.CodeMirror-selected{background:#e0e0e0 !important}
167
+ .cm-s-base16-light .CodeMirror-gutters{background:#f5f5f5;border-right:0}
168
+ .cm-s-base16-light .CodeMirror-linenumber{color:#b0b0b0}
169
+ .cm-s-base16-light .CodeMirror-cursor{border-left:1px solid #505050 !important}
170
+ .cm-s-base16-light span.cm-comment{color:#8f5536}
171
+ .cm-s-base16-light span.cm-atom{color:#aa759f}
172
+ .cm-s-base16-light span.cm-number{color:#aa759f}
173
+ .cm-s-base16-light span.cm-property,.cm-s-base16-light span.cm-attribute{color:#90a959}
174
+ .cm-s-base16-light span.cm-keyword{color:#ac4142}
175
+ .cm-s-base16-light span.cm-string{color:#f4bf75}
176
+ .cm-s-base16-light span.cm-variable{color:#90a959}
177
+ .cm-s-base16-light span.cm-variable-2{color:#6a9fb5}
178
+ .cm-s-base16-light span.cm-def{color:#d28445}
179
+ .cm-s-base16-light span.cm-error{background:#ac4142;color:#505050}
180
+ .cm-s-base16-light span.cm-bracket{color:#202020}
181
+ .cm-s-base16-light span.cm-tag{color:#ac4142}
182
+ .cm-s-base16-light span.cm-link{color:#aa759f}
183
+ .cm-s-base16-light .CodeMirror-activeline-background{background:#dddcdc !important}
184
+ .cm-s-base16-light .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}
185
+ .cm-s-blackboard.CodeMirror{background:#0c1021;color:#f8f8f8}
186
+ .cm-s-blackboard .CodeMirror-selected{background:#253b76 !important}
187
+ .cm-s-blackboard .CodeMirror-gutters{background:#0c1021;border-right:0}
188
+ .cm-s-blackboard .CodeMirror-linenumber{color:#888}
189
+ .cm-s-blackboard .CodeMirror-cursor{border-left:1px solid #a7a7a7 !important}
190
+ .cm-s-blackboard .cm-keyword{color:#fbde2d}
191
+ .cm-s-blackboard .cm-atom{color:#d8fa3c}
192
+ .cm-s-blackboard .cm-number{color:#d8fa3c}
193
+ .cm-s-blackboard .cm-def{color:#8da6ce}
194
+ .cm-s-blackboard .cm-variable{color:#ff6400}
195
+ .cm-s-blackboard .cm-operator{color:#fbde2d}
196
+ .cm-s-blackboard .cm-comment{color:#aeaeae}
197
+ .cm-s-blackboard .cm-string{color:#61ce3c}
198
+ .cm-s-blackboard .cm-string-2{color:#61ce3c}
199
+ .cm-s-blackboard .cm-meta{color:#d8fa3c}
200
+ .cm-s-blackboard .cm-error{background:#9d1e15;color:#f8f8f8}
201
+ .cm-s-blackboard .cm-builtin{color:#8da6ce}
202
+ .cm-s-blackboard .cm-tag{color:#8da6ce}
203
+ .cm-s-blackboard .cm-attribute{color:#8da6ce}
204
+ .cm-s-blackboard .cm-header{color:#ff6400}
205
+ .cm-s-blackboard .cm-hr{color:#aeaeae}
206
+ .cm-s-blackboard .cm-link{color:#8da6ce}
207
+ .cm-s-blackboard .CodeMirror-activeline-background{background:#3c3636 !important}
208
+ .cm-s-blackboard .CodeMirror-matchingbracket{outline:1px solid #808080;color:#fff !important}
209
+ .cm-s-cobalt.CodeMirror{background:#002240;color:#fff}
210
+ .cm-s-cobalt div.CodeMirror-selected{background:#b36539 !important}
211
+ .cm-s-cobalt .CodeMirror-gutters{background:#002240;border-right:1px solid #aaa}
212
+ .cm-s-cobalt .CodeMirror-linenumber{color:#d0d0d0}
213
+ .cm-s-cobalt .CodeMirror-cursor{border-left:1px solid #fff !important}
214
+ .cm-s-cobalt span.cm-comment{color:#08f}
215
+ .cm-s-cobalt span.cm-atom{color:#845dc4}
216
+ .cm-s-cobalt span.cm-number,.cm-s-cobalt span.cm-attribute{color:#ff80e1}
217
+ .cm-s-cobalt span.cm-keyword{color:#ffee80}
218
+ .cm-s-cobalt span.cm-string{color:#3ad900}
219
+ .cm-s-cobalt span.cm-meta{color:#ff9d00}
220
+ .cm-s-cobalt span.cm-variable-2,.cm-s-cobalt span.cm-tag{color:#9effff}
221
+ .cm-s-cobalt span.cm-variable-3,.cm-s-cobalt span.cm-def{color:#fff}
222
+ .cm-s-cobalt span.cm-error{color:#9d1e15}
223
+ .cm-s-cobalt span.cm-bracket{color:#d8d8d8}
224
+ .cm-s-cobalt span.cm-builtin,.cm-s-cobalt span.cm-special{color:#ff9e59}
225
+ .cm-s-cobalt span.cm-link{color:#845dc4}
226
+ .cm-s-cobalt .CodeMirror-activeline-background{background:#002d57 !important}
227
+ .cm-s-cobalt .CodeMirror-matchingbracket{outline:1px solid #808080;color:#fff !important}
228
+ .cm-s-eclipse span.cm-meta{color:#ff1717}
229
+ .cm-s-eclipse span.cm-keyword{line-height:1em;font-weight:bold;color:#7f0055}
230
+ .cm-s-eclipse span.cm-atom{color:#219}
231
+ .cm-s-eclipse span.cm-number{color:#164}
232
+ .cm-s-eclipse span.cm-def{color:#00f}
233
+ .cm-s-eclipse span.cm-variable{color:#000}
234
+ .cm-s-eclipse span.cm-variable-2{color:#0000c0}
235
+ .cm-s-eclipse span.cm-variable-3{color:#0000c0}
236
+ .cm-s-eclipse span.cm-property{color:#000}
237
+ .cm-s-eclipse span.cm-operator{color:#000}
238
+ .cm-s-eclipse span.cm-comment{color:#3f7f5f}
239
+ .cm-s-eclipse span.cm-string{color:#2a00ff}
240
+ .cm-s-eclipse span.cm-string-2{color:#f50}
241
+ .cm-s-eclipse span.cm-error{color:#f00}
242
+ .cm-s-eclipse span.cm-qualifier{color:#555}
243
+ .cm-s-eclipse span.cm-builtin{color:#30a}
244
+ .cm-s-eclipse span.cm-bracket{color:#cc7}
245
+ .cm-s-eclipse span.cm-tag{color:#170}
246
+ .cm-s-eclipse span.cm-attribute{color:#00c}
247
+ .cm-s-eclipse span.cm-link{color:#219}
248
+ .cm-s-eclipse .CodeMirror-activeline-background{background:#e8f2ff !important}
249
+ .cm-s-eclipse .CodeMirror-matchingbracket{outline:1px solid #808080;color:#000 !important}
250
+ .cm-s-elegant span.cm-number,.cm-s-elegant span.cm-string,.cm-s-elegant span.cm-atom{color:#762}
251
+ .cm-s-elegant span.cm-comment{color:#262;font-style:italic;line-height:1em}
252
+ .cm-s-elegant span.cm-meta{color:#555;font-style:italic;line-height:1em}
253
+ .cm-s-elegant span.cm-variable{color:#000}
254
+ .cm-s-elegant span.cm-variable-2{color:#b11}
255
+ .cm-s-elegant span.cm-qualifier{color:#555}
256
+ .cm-s-elegant span.cm-keyword{color:#730}
257
+ .cm-s-elegant span.cm-builtin{color:#30a}
258
+ .cm-s-elegant span.cm-error{background-color:#fdd}
259
+ .cm-s-elegant span.cm-link{color:#762}
260
+ .cm-s-elegant .CodeMirror-activeline-background{background:#e8f2ff !important}
261
+ .cm-s-elegant .CodeMirror-matchingbracket{outline:1px solid #808080;color:#000 !important}
262
+ .cm-s-erlang-dark.CodeMirror{background:#002240;color:#fff}
263
+ .cm-s-erlang-dark div.CodeMirror-selected{background:#b36539 !important}
264
+ .cm-s-erlang-dark .CodeMirror-gutters{background:#002240;border-right:1px solid #aaa}
265
+ .cm-s-erlang-dark .CodeMirror-linenumber{color:#d0d0d0}
266
+ .cm-s-erlang-dark .CodeMirror-cursor{border-left:1px solid #fff !important}
267
+ .cm-s-erlang-dark span.cm-atom{color:#f133f1}
268
+ .cm-s-erlang-dark span.cm-attribute{color:#ff80e1}
269
+ .cm-s-erlang-dark span.cm-bracket{color:#ff9d00}
270
+ .cm-s-erlang-dark span.cm-builtin{color:#eaa}
271
+ .cm-s-erlang-dark span.cm-comment{color:#77f}
272
+ .cm-s-erlang-dark span.cm-def{color:#e7a}
273
+ .cm-s-erlang-dark span.cm-error{color:#9d1e15}
274
+ .cm-s-erlang-dark span.cm-keyword{color:#ffee80}
275
+ .cm-s-erlang-dark span.cm-meta{color:#50fefe}
276
+ .cm-s-erlang-dark span.cm-number{color:#ffd0d0}
277
+ .cm-s-erlang-dark span.cm-operator{color:#d55}
278
+ .cm-s-erlang-dark span.cm-property{color:#ccc}
279
+ .cm-s-erlang-dark span.cm-qualifier{color:#ccc}
280
+ .cm-s-erlang-dark span.cm-quote{color:#ccc}
281
+ .cm-s-erlang-dark span.cm-special{color:#fbb}
282
+ .cm-s-erlang-dark span.cm-string{color:#3ad900}
283
+ .cm-s-erlang-dark span.cm-string-2{color:#ccc}
284
+ .cm-s-erlang-dark span.cm-tag{color:#9effff}
285
+ .cm-s-erlang-dark span.cm-variable{color:#50fe50}
286
+ .cm-s-erlang-dark span.cm-variable-2{color:#e0e}
287
+ .cm-s-erlang-dark span.cm-variable-3{color:#ccc}
288
+ .cm-s-erlang-dark .CodeMirror-activeline-background{background:#013461 !important}
289
+ .cm-s-erlang-dark .CodeMirror-matchingbracket{outline:1px solid #808080;color:#fff !important}
290
+ .cm-s-lesser-dark{line-height:1.3em}
291
+ .cm-s-lesser-dark{font-family:'Bitstream Vera Sans Mono','DejaVu Sans Mono','Monaco',Courier,monospace !important}
292
+ .cm-s-lesser-dark.CodeMirror{background:#262626;color:#ebefe7;text-shadow:0 -1px 1px #262626}
293
+ .cm-s-lesser-dark div.CodeMirror-selected{background:#45443b !important}
294
+ .cm-s-lesser-dark .CodeMirror-cursor{border-left:1px solid #fff !important}
295
+ .cm-s-lesser-dark pre{padding:0 8px}
296
+ .cm-s-lesser-dark.CodeMirror span.CodeMirror-matchingbracket{color:#7efc7e}
297
+ .cm-s-lesser-dark .CodeMirror-gutters{background:#262626;border-right:1px solid #aaa}
298
+ .cm-s-lesser-dark .CodeMirror-linenumber{color:#777}
299
+ .cm-s-lesser-dark span.cm-keyword{color:#599eff}
300
+ .cm-s-lesser-dark span.cm-atom{color:#c2b470}
301
+ .cm-s-lesser-dark span.cm-number{color:#b35e4d}
302
+ .cm-s-lesser-dark span.cm-def{color:#fff}
303
+ .cm-s-lesser-dark span.cm-variable{color:#d9bf8c}
304
+ .cm-s-lesser-dark span.cm-variable-2{color:#669199}
305
+ .cm-s-lesser-dark span.cm-variable-3{color:#fff}
306
+ .cm-s-lesser-dark span.cm-property{color:#92a75c}
307
+ .cm-s-lesser-dark span.cm-operator{color:#92a75c}
308
+ .cm-s-lesser-dark span.cm-comment{color:#666}
309
+ .cm-s-lesser-dark span.cm-string{color:#bcd279}
310
+ .cm-s-lesser-dark span.cm-string-2{color:#f50}
311
+ .cm-s-lesser-dark span.cm-meta{color:#738c73}
312
+ .cm-s-lesser-dark span.cm-error{color:#9d1e15}
313
+ .cm-s-lesser-dark span.cm-qualifier{color:#555}
314
+ .cm-s-lesser-dark span.cm-builtin{color:#ff9e59}
315
+ .cm-s-lesser-dark span.cm-bracket{color:#ebefe7}
316
+ .cm-s-lesser-dark span.cm-tag{color:#669199}
317
+ .cm-s-lesser-dark span.cm-attribute{color:#00c}
318
+ .cm-s-lesser-dark span.cm-header{color:#a0a}
319
+ .cm-s-lesser-dark span.cm-quote{color:#090}
320
+ .cm-s-lesser-dark span.cm-hr{color:#999}
321
+ .cm-s-lesser-dark span.cm-link{color:#00c}
322
+ .cm-s-lesser-dark .CodeMirror-activeline-background{background:#3c3a3a !important}
323
+ .cm-s-lesser-dark .CodeMirror-matchingbracket{outline:1px solid #808080;color:#fff !important}
324
+ .cm-s-midnight span.CodeMirror-matchhighlight{background:#494949}
325
+ .cm-s-midnight.CodeMirror-focused span.CodeMirror-matchhighlight{background:#314d67 !important}
326
+ .cm-s-midnight .CodeMirror-activeline-background{background:#253540 !important}
327
+ .cm-s-midnight.CodeMirror{background:#0f192a;color:#d1edff}
328
+ .cm-s-midnight.CodeMirror{border-top:1px solid #000;border-bottom:1px solid #000}
329
+ .cm-s-midnight div.CodeMirror-selected{background:#314d67 !important}
330
+ .cm-s-midnight .CodeMirror-gutters{background:#0f192a;border-right:1px solid}
331
+ .cm-s-midnight .CodeMirror-linenumber{color:#d0d0d0}
332
+ .cm-s-midnight .CodeMirror-cursor{border-left:1px solid #f8f8f0 !important}
333
+ .cm-s-midnight span.cm-comment{color:#428bdd}
334
+ .cm-s-midnight span.cm-atom{color:#ae81ff}
335
+ .cm-s-midnight span.cm-number{color:#d1edff}
336
+ .cm-s-midnight span.cm-property,.cm-s-midnight span.cm-attribute{color:#a6e22e}
337
+ .cm-s-midnight span.cm-keyword{color:#e83737}
338
+ .cm-s-midnight span.cm-string{color:#1dc116}
339
+ .cm-s-midnight span.cm-variable{color:#ffaa3e}
340
+ .cm-s-midnight span.cm-variable-2{color:#ffaa3e}
341
+ .cm-s-midnight span.cm-def{color:#4dd}
342
+ .cm-s-midnight span.cm-error{background:#f92672;color:#f8f8f0}
343
+ .cm-s-midnight span.cm-bracket{color:#d1edff}
344
+ .cm-s-midnight span.cm-tag{color:#449}
345
+ .cm-s-midnight span.cm-link{color:#ae81ff}
346
+ .cm-s-midnight .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}
347
+ .cm-s-monokai.CodeMirror{background:#272822;color:#f8f8f2}
348
+ .cm-s-monokai div.CodeMirror-selected{background:#49483e !important}
349
+ .cm-s-monokai .CodeMirror-gutters{background:#272822;border-right:0}
350
+ .cm-s-monokai .CodeMirror-linenumber{color:#d0d0d0}
351
+ .cm-s-monokai .CodeMirror-cursor{border-left:1px solid #f8f8f0 !important}
352
+ .cm-s-monokai span.cm-comment{color:#75715e}
353
+ .cm-s-monokai span.cm-atom{color:#ae81ff}
354
+ .cm-s-monokai span.cm-number{color:#ae81ff}
355
+ .cm-s-monokai span.cm-property,.cm-s-monokai span.cm-attribute{color:#a6e22e}
356
+ .cm-s-monokai span.cm-keyword{color:#f92672}
357
+ .cm-s-monokai span.cm-string{color:#e6db74}
358
+ .cm-s-monokai span.cm-variable{color:#a6e22e}
359
+ .cm-s-monokai span.cm-variable-2{color:#9effff}
360
+ .cm-s-monokai span.cm-def{color:#fd971f}
361
+ .cm-s-monokai span.cm-error{background:#f92672;color:#f8f8f0}
362
+ .cm-s-monokai span.cm-bracket{color:#f8f8f2}
363
+ .cm-s-monokai span.cm-tag{color:#f92672}
364
+ .cm-s-monokai span.cm-link{color:#ae81ff}
365
+ .cm-s-monokai .CodeMirror-activeline-background{background:#373831 !important}
366
+ .cm-s-monokai .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}
367
+ .cm-s-neat span.cm-comment{color:#a86}
368
+ .cm-s-neat span.cm-keyword{line-height:1em;font-weight:bold;color:#00f}
369
+ .cm-s-neat span.cm-string{color:#a22}
370
+ .cm-s-neat span.cm-builtin{line-height:1em;font-weight:bold;color:#077}
371
+ .cm-s-neat span.cm-special{line-height:1em;font-weight:bold;color:#0aa}
372
+ .cm-s-neat span.cm-variable{color:#000}
373
+ .cm-s-neat span.cm-number,.cm-s-neat span.cm-atom{color:#3a3}
374
+ .cm-s-neat span.cm-meta{color:#555}
375
+ .cm-s-neat span.cm-link{color:#3a3}
376
+ .cm-s-neat .CodeMirror-activeline-background{background:#e8f2ff !important}
377
+ .cm-s-neat .CodeMirror-matchingbracket{outline:1px solid #808080;color:#000 !important}
378
+ .cm-s-night.CodeMirror{background:#0a001f;color:#f8f8f8}
379
+ .cm-s-night div.CodeMirror-selected{background:#447 !important}
380
+ .cm-s-night .CodeMirror-gutters{background:#0a001f;border-right:1px solid #aaa}
381
+ .cm-s-night .CodeMirror-linenumber{color:#f8f8f8}
382
+ .cm-s-night .CodeMirror-cursor{border-left:1px solid #fff !important}
383
+ .cm-s-night span.cm-comment{color:#6900a1}
384
+ .cm-s-night span.cm-atom{color:#845dc4}
385
+ .cm-s-night span.cm-number,.cm-s-night span.cm-attribute{color:#ffd500}
386
+ .cm-s-night span.cm-keyword{color:#599eff}
387
+ .cm-s-night span.cm-string{color:#37f14a}
388
+ .cm-s-night span.cm-meta{color:#7678e2}
389
+ .cm-s-night span.cm-variable-2,.cm-s-night span.cm-tag{color:#99b2ff}
390
+ .cm-s-night span.cm-variable-3,.cm-s-night span.cm-def{color:#fff}
391
+ .cm-s-night span.cm-error{color:#9d1e15}
392
+ .cm-s-night span.cm-bracket{color:#8da6ce}
393
+ .cm-s-night span.cm-comment{color:#6900a1}
394
+ .cm-s-night span.cm-builtin,.cm-s-night span.cm-special{color:#ff9e59}
395
+ .cm-s-night span.cm-link{color:#845dc4}
396
+ .cm-s-night .CodeMirror-activeline-background{background:#1c005a !important}
397
+ .cm-s-night .CodeMirror-matchingbracket{outline:1px solid #808080;color:#fff !important}
398
+ .cm-s-paraiso-dark.CodeMirror{background:#2f1e2e;color:#b9b6b0}
399
+ .cm-s-paraiso-dark div.CodeMirror-selected{background:#41323f !important}
400
+ .cm-s-paraiso-dark .CodeMirror-gutters{background:#2f1e2e;border-right:0}
401
+ .cm-s-paraiso-dark .CodeMirror-linenumber{color:#776e71}
402
+ .cm-s-paraiso-dark .CodeMirror-cursor{border-left:1px solid #8d8687 !important}
403
+ .cm-s-paraiso-dark span.cm-comment{color:#e96ba8}
404
+ .cm-s-paraiso-dark span.cm-atom{color:#815ba4}
405
+ .cm-s-paraiso-dark span.cm-number{color:#815ba4}
406
+ .cm-s-paraiso-dark span.cm-property,.cm-s-paraiso-dark span.cm-attribute{color:#48b685}
407
+ .cm-s-paraiso-dark span.cm-keyword{color:#ef6155}
408
+ .cm-s-paraiso-dark span.cm-string{color:#fec418}
409
+ .cm-s-paraiso-dark span.cm-variable{color:#48b685}
410
+ .cm-s-paraiso-dark span.cm-variable-2{color:#06b6ef}
411
+ .cm-s-paraiso-dark span.cm-def{color:#f99b15}
412
+ .cm-s-paraiso-dark span.cm-error{background:#ef6155;color:#8d8687}
413
+ .cm-s-paraiso-dark span.cm-bracket{color:#b9b6b0}
414
+ .cm-s-paraiso-dark span.cm-tag{color:#ef6155}
415
+ .cm-s-paraiso-dark span.cm-link{color:#815ba4}
416
+ .cm-s-paraiso-dark .CodeMirror-activeline-background{background:#4d344a !important}
417
+ .cm-s-paraiso-dark .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}
418
+ .cm-s-paraiso-light.CodeMirror{background:#e7e9db;color:#41323f}
419
+ .cm-s-paraiso-light div.CodeMirror-selected{background:#b9b6b0 !important}
420
+ .cm-s-paraiso-light .CodeMirror-gutters{background:#e7e9db;border-right:0}
421
+ .cm-s-paraiso-light .CodeMirror-linenumber{color:#8d8687}
422
+ .cm-s-paraiso-light .CodeMirror-cursor{border-left:1px solid #776e71 !important}
423
+ .cm-s-paraiso-light span.cm-comment{color:#e96ba8}
424
+ .cm-s-paraiso-light span.cm-atom{color:#815ba4}
425
+ .cm-s-paraiso-light span.cm-number{color:#815ba4}
426
+ .cm-s-paraiso-light span.cm-property,.cm-s-paraiso-light span.cm-attribute{color:#48b685}
427
+ .cm-s-paraiso-light span.cm-keyword{color:#ef6155}
428
+ .cm-s-paraiso-light span.cm-string{color:#fec418}
429
+ .cm-s-paraiso-light span.cm-variable{color:#48b685}
430
+ .cm-s-paraiso-light span.cm-variable-2{color:#06b6ef}
431
+ .cm-s-paraiso-light span.cm-def{color:#f99b15}
432
+ .cm-s-paraiso-light span.cm-error{background:#ef6155;color:#776e71}
433
+ .cm-s-paraiso-light span.cm-bracket{color:#41323f}
434
+ .cm-s-paraiso-light span.cm-tag{color:#ef6155}
435
+ .cm-s-paraiso-light span.cm-link{color:#815ba4}
436
+ .cm-s-paraiso-light .CodeMirror-activeline-background{background:#cfd1c4 !important}
437
+ .cm-s-paraiso-light .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}
438
+ .cm-s-rubyblue{font-family:Trebuchet,Verdana,sans-serif}
439
+ .cm-s-rubyblue.CodeMirror{background:#112435;color:#fff}
440
+ .cm-s-rubyblue div.CodeMirror-selected{background:#38566f !important}
441
+ .cm-s-rubyblue .CodeMirror-gutters{background:#1f4661;border-right:7px solid #3e7087}
442
+ .cm-s-rubyblue .CodeMirror-linenumber{color:#fff}
443
+ .cm-s-rubyblue .CodeMirror-cursor{border-left:1px solid #fff !important}
444
+ .cm-s-rubyblue span.cm-comment{color:#999;font-style:italic;line-height:1em}
445
+ .cm-s-rubyblue span.cm-atom{color:#f4c20b}
446
+ .cm-s-rubyblue span.cm-number,.cm-s-rubyblue span.cm-attribute{color:#82c6e0}
447
+ .cm-s-rubyblue span.cm-keyword{color:#f0f}
448
+ .cm-s-rubyblue span.cm-string{color:#f08047}
449
+ .cm-s-rubyblue span.cm-meta{color:#f0f}
450
+ .cm-s-rubyblue span.cm-variable-2,.cm-s-rubyblue span.cm-tag{color:#7bd827}
451
+ .cm-s-rubyblue span.cm-variable-3,.cm-s-rubyblue span.cm-def{color:#fff}
452
+ .cm-s-rubyblue span.cm-error{color:#af2018}
453
+ .cm-s-rubyblue span.cm-bracket{color:#f0f}
454
+ .cm-s-rubyblue span.cm-link{color:#f4c20b}
455
+ .cm-s-rubyblue span.CodeMirror-matchingbracket{color:#f0f !important}
456
+ .cm-s-rubyblue span.cm-builtin,.cm-s-rubyblue span.cm-special{color:#ff9d00}
457
+ .cm-s-rubyblue .CodeMirror-activeline-background{background:#173047 !important}
458
+ .solarized.base03{color:#002b36}
459
+ .solarized.base02{color:#073642}
460
+ .solarized.base01{color:#586e75}
461
+ .solarized.base00{color:#657b83}
462
+ .solarized.base0{color:#839496}
463
+ .solarized.base1{color:#93a1a1}
464
+ .solarized.base2{color:#eee8d5}
465
+ .solarized.base3{color:#fdf6e3}
466
+ .solarized.solar-yellow{color:#b58900}
467
+ .solarized.solar-orange{color:#cb4b16}
468
+ .solarized.solar-red{color:#dc322f}
469
+ .solarized.solar-magenta{color:#d33682}
470
+ .solarized.solar-violet{color:#6c71c4}
471
+ .solarized.solar-blue{color:#268bd2}
472
+ .solarized.solar-cyan{color:#2aa198}
473
+ .solarized.solar-green{color:#859900}
474
+ .cm-s-solarized{line-height:1.45em;font-family:Menlo,Monaco,"Andale Mono","lucida console","Courier New",monospace !important;color-profile:sRGB;rendering-intent:auto}
475
+ .cm-s-solarized.cm-s-dark{color:#839496;background-color:#002b36;text-shadow:#002b36 0 1px}
476
+ .cm-s-solarized.cm-s-light{background-color:#fdf6e3;color:#657b83;text-shadow:#eee8d5 0 1px}
477
+ .cm-s-solarized .CodeMirror-widget{text-shadow:none}
478
+ .cm-s-solarized .cm-keyword{color:#cb4b16}
479
+ .cm-s-solarized .cm-atom{color:#d33682}
480
+ .cm-s-solarized .cm-number{color:#d33682}
481
+ .cm-s-solarized .cm-def{color:#2aa198}
482
+ .cm-s-solarized .cm-variable{color:#268bd2}
483
+ .cm-s-solarized .cm-variable-2{color:#b58900}
484
+ .cm-s-solarized .cm-variable-3{color:#6c71c4}
485
+ .cm-s-solarized .cm-property{color:#2aa198}
486
+ .cm-s-solarized .cm-operator{color:#6c71c4}
487
+ .cm-s-solarized .cm-comment{color:#586e75;font-style:italic}
488
+ .cm-s-solarized .cm-string{color:#859900}
489
+ .cm-s-solarized .cm-string-2{color:#b58900}
490
+ .cm-s-solarized .cm-meta{color:#859900}
491
+ .cm-s-solarized .cm-error,.cm-s-solarized .cm-invalidchar{color:#586e75;border-bottom:1px dotted #dc322f}
492
+ .cm-s-solarized .cm-qualifier{color:#b58900}
493
+ .cm-s-solarized .cm-builtin{color:#d33682}
494
+ .cm-s-solarized .cm-bracket{color:#cb4b16}
495
+ .cm-s-solarized .CodeMirror-matchingbracket{color:#859900}
496
+ .cm-s-solarized .CodeMirror-nonmatchingbracket{color:#dc322f}
497
+ .cm-s-solarized .cm-tag{color:#93a1a1}
498
+ .cm-s-solarized .cm-attribute{color:#2aa198}
499
+ .cm-s-solarized .cm-header{color:#586e75}
500
+ .cm-s-solarized .cm-quote{color:#93a1a1}
501
+ .cm-s-solarized .cm-hr{color:transparent;border-top:1px solid #586e75;display:block}
502
+ .cm-s-solarized .cm-link{color:#93a1a1;cursor:pointer}
503
+ .cm-s-solarized .cm-special{color:#6c71c4}
504
+ .cm-s-solarized .cm-em{color:#999;text-decoration:underline;text-decoration-style:dotted}
505
+ .cm-s-solarized .cm-strong{color:#eee}
506
+ .cm-s-solarized .cm-tab:before{content:"➤";color:#586e75}
507
+ .cm-s-solarized.cm-s-dark .CodeMirror-focused .CodeMirror-selected{background:#386774;color:inherit}
508
+ .cm-s-solarized.cm-s-dark ::selection{background:#386774;color:inherit}
509
+ .cm-s-solarized.cm-s-dark .CodeMirror-selected{background:#586e75}
510
+ .cm-s-solarized.cm-s-light .CodeMirror-focused .CodeMirror-selected{background:#eee8d5;color:inherit}
511
+ .cm-s-solarized.cm-s-light ::selection{background:#eee8d5;color:inherit}
512
+ .cm-s-solarized.cm-s-light .CodeMirror-selected{background:#93a1a1}
513
+ .cm-s-solarized.CodeMirror{-moz-box-shadow:inset 7px 0 12px -6px #000;-webkit-box-shadow:inset 7px 0 12px -6px #000;box-shadow:inset 7px 0 12px -6px #000}
514
+ .cm-s-solarized .CodeMirror-gutters{padding:0 15px 0 10px;box-shadow:0 10px 20px #000;border-right:1px solid}
515
+ .cm-s-solarized.cm-s-dark .CodeMirror-gutters{background-color:#073642;border-color:#00232c}
516
+ .cm-s-solarized.cm-s-dark .CodeMirror-linenumber{text-shadow:#021014 0 -1px}
517
+ .cm-s-solarized.cm-s-light .CodeMirror-gutters{background-color:#eee8d5;border-color:#eee8d5}
518
+ .cm-s-solarized .CodeMirror-linenumber{color:#586e75}
519
+ .cm-s-solarized .CodeMirror-gutter .CodeMirror-gutter-text{color:#586e75}
520
+ .cm-s-solarized .CodeMirror-lines{padding-left:5px}
521
+ .cm-s-solarized .CodeMirror-lines .CodeMirror-cursor{border-left:1px solid #819090}
522
+ .cm-s-solarized.cm-s-dark .CodeMirror-activeline-background{background:rgba(255,255,255,0.05)}
523
+ .cm-s-solarized.cm-s-light .CodeMirror-activeline-background{background:rgba(0,0,0,0.05)}
524
+ .cm-s-solarized.CodeMirror,.cm-s-solarized .CodeMirror-gutters{background-image:url("data:image/png;base64,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")}
525
+ .cm-s-the-matrix.CodeMirror{background:#000;color:#0f0}
526
+ .cm-s-the-matrix span.CodeMirror-selected{background:#a8f !important}
527
+ .cm-s-the-matrix .CodeMirror-gutters{background:#060;border-right:2px solid #0f0}
528
+ .cm-s-the-matrix .CodeMirror-linenumber{color:#fff}
529
+ .cm-s-the-matrix .CodeMirror-cursor{border-left:1px solid #0f0 !important}
530
+ .cm-s-the-matrix span.cm-keyword{color:#008803;font-weight:bold}
531
+ .cm-s-the-matrix span.cm-atom{color:#3ff}
532
+ .cm-s-the-matrix span.cm-number{color:#ffb94f}
533
+ .cm-s-the-matrix span.cm-def{color:#99c}
534
+ .cm-s-the-matrix span.cm-variable{color:#f6c}
535
+ .cm-s-the-matrix span.cm-variable-2{color:#c6f}
536
+ .cm-s-the-matrix span.cm-variable-3{color:#96f}
537
+ .cm-s-the-matrix span.cm-property{color:#62ffa0}
538
+ .cm-s-the-matrix span.cm-operator{color:#999}
539
+ .cm-s-the-matrix span.cm-comment{color:#ccc}
540
+ .cm-s-the-matrix span.cm-string{color:#39c}
541
+ .cm-s-the-matrix span.cm-meta{color:#c9f}
542
+ .cm-s-the-matrix span.cm-error{color:#f00}
543
+ .cm-s-the-matrix span.cm-qualifier{color:#fff700}
544
+ .cm-s-the-matrix span.cm-builtin{color:#30a}
545
+ .cm-s-the-matrix span.cm-bracket{color:#cc7}
546
+ .cm-s-the-matrix span.cm-tag{color:#ffbd40}
547
+ .cm-s-the-matrix span.cm-attribute{color:#fff700}
548
+ .cm-s-the-matrix .CodeMirror-activeline-background{background:#040}
549
+ .cm-s-tomorrow-night-eighties.CodeMirror{background:#000;color:#ccc}
550
+ .cm-s-tomorrow-night-eighties div.CodeMirror-selected{background:#2d2d2d !important}
551
+ .cm-s-tomorrow-night-eighties .CodeMirror-gutters{background:#000;border-right:0}
552
+ .cm-s-tomorrow-night-eighties .CodeMirror-linenumber{color:#515151}
553
+ .cm-s-tomorrow-night-eighties .CodeMirror-cursor{border-left:1px solid #6a6a6a !important}
554
+ .cm-s-tomorrow-night-eighties span.cm-comment{color:#d27b53}
555
+ .cm-s-tomorrow-night-eighties span.cm-atom{color:#a16a94}
556
+ .cm-s-tomorrow-night-eighties span.cm-number{color:#a16a94}
557
+ .cm-s-tomorrow-night-eighties span.cm-property,.cm-s-tomorrow-night-eighties span.cm-attribute{color:#9c9}
558
+ .cm-s-tomorrow-night-eighties span.cm-keyword{color:#f2777a}
559
+ .cm-s-tomorrow-night-eighties span.cm-string{color:#fc6}
560
+ .cm-s-tomorrow-night-eighties span.cm-variable{color:#9c9}
561
+ .cm-s-tomorrow-night-eighties span.cm-variable-2{color:#69c}
562
+ .cm-s-tomorrow-night-eighties span.cm-def{color:#f99157}
563
+ .cm-s-tomorrow-night-eighties span.cm-error{background:#f2777a;color:#6a6a6a}
564
+ .cm-s-tomorrow-night-eighties span.cm-bracket{color:#ccc}
565
+ .cm-s-tomorrow-night-eighties span.cm-tag{color:#f2777a}
566
+ .cm-s-tomorrow-night-eighties span.cm-link{color:#a16a94}
567
+ .cm-s-tomorrow-night-eighties .CodeMirror-activeline-background{background:#343600 !important}
568
+ .cm-s-tomorrow-night-eighties .CodeMirror-matchingbracket{text-decoration:underline;color:#fff !important}
569
+ .cm-s-twilight.CodeMirror{background:#141414;color:#f7f7f7}
570
+ .cm-s-twilight .CodeMirror-selected{background:#323232 !important}
571
+ .cm-s-twilight .CodeMirror-gutters{background:#222;border-right:1px solid #aaa}
572
+ .cm-s-twilight .CodeMirror-linenumber{color:#aaa}
573
+ .cm-s-twilight .CodeMirror-cursor{border-left:1px solid #fff !important}
574
+ .cm-s-twilight .cm-keyword{color:#f9ee98}
575
+ .cm-s-twilight .cm-atom{color:#fc0}
576
+ .cm-s-twilight .cm-number{color:#ca7841}
577
+ .cm-s-twilight .cm-def{color:#8da6ce}
578
+ .cm-s-twilight span.cm-variable-2,.cm-s-twilight span.cm-tag{color:#607392}
579
+ .cm-s-twilight span.cm-variable-3,.cm-s-twilight span.cm-def{color:#607392}
580
+ .cm-s-twilight .cm-operator{color:#cda869}
581
+ .cm-s-twilight .cm-comment{color:#777;font-style:italic;font-weight:normal}
582
+ .cm-s-twilight .cm-string{color:#8f9d6a;font-style:italic}
583
+ .cm-s-twilight .cm-string-2{color:#bd6b18}
584
+ .cm-s-twilight .cm-meta{background-color:#141414;color:#f7f7f7}
585
+ .cm-s-twilight .cm-error{border-bottom:1px solid #f00}
586
+ .cm-s-twilight .cm-builtin{color:#cda869}
587
+ .cm-s-twilight .cm-tag{color:#997643}
588
+ .cm-s-twilight .cm-attribute{color:#d6bb6d}
589
+ .cm-s-twilight .cm-header{color:#ff6400}
590
+ .cm-s-twilight .cm-hr{color:#aeaeae}
591
+ .cm-s-twilight .cm-link{color:#ad9361;font-style:italic;text-decoration:none}
592
+ .cm-s-twilight .CodeMirror-activeline-background{background:#27282e !important}
593
+ .cm-s-twilight .CodeMirror-matchingbracket{outline:1px solid #808080;color:#fff !important}
594
+ .cm-s-vibrant-ink.CodeMirror{background:#000;color:#fff}
595
+ .cm-s-vibrant-ink .CodeMirror-selected{background:#35493c !important}
596
+ .cm-s-vibrant-ink .CodeMirror-gutters{background:#002240;border-right:1px solid #aaa}
597
+ .cm-s-vibrant-ink .CodeMirror-linenumber{color:#d0d0d0}
598
+ .cm-s-vibrant-ink .CodeMirror-cursor{border-left:1px solid #fff !important}
599
+ .cm-s-vibrant-ink .cm-keyword{color:#cc7832}
600
+ .cm-s-vibrant-ink .cm-atom{color:#fc0}
601
+ .cm-s-vibrant-ink .cm-number{color:#ffee98}
602
+ .cm-s-vibrant-ink .cm-def{color:#8da6ce}
603
+ .cm-s-vibrant-ink span.cm-variable-2,.cm-s-vibrant span.cm-tag{color:#ffc66d}
604
+ .cm-s-vibrant-ink span.cm-variable-3,.cm-s-vibrant span.cm-def{color:#ffc66d}
605
+ .cm-s-vibrant-ink .cm-operator{color:#888}
606
+ .cm-s-vibrant-ink .cm-comment{color:#808080;font-weight:bold}
607
+ .cm-s-vibrant-ink .cm-string{color:#a5c25c}
608
+ .cm-s-vibrant-ink .cm-string-2{color:#f00}
609
+ .cm-s-vibrant-ink .cm-meta{color:#d8fa3c}
610
+ .cm-s-vibrant-ink .cm-error{border-bottom:1px solid #f00}
611
+ .cm-s-vibrant-ink .cm-builtin{color:#8da6ce}
612
+ .cm-s-vibrant-ink .cm-tag{color:#8da6ce}
613
+ .cm-s-vibrant-ink .cm-attribute{color:#8da6ce}
614
+ .cm-s-vibrant-ink .cm-header{color:#ff6400}
615
+ .cm-s-vibrant-ink .cm-hr{color:#aeaeae}
616
+ .cm-s-vibrant-ink .cm-link{color:#00f}
617
+ .cm-s-vibrant-ink .CodeMirror-activeline-background{background:#27282e !important}
618
+ .cm-s-vibrant-ink .CodeMirror-matchingbracket{outline:1px solid #808080;color:#fff !important}
619
+ .cm-s-xq-dark.CodeMirror{background:#0a001f;color:#f8f8f8}
620
+ .cm-s-xq-dark .CodeMirror-selected{background:#27007a !important}
621
+ .cm-s-xq-dark .CodeMirror-gutters{background:#0a001f;border-right:1px solid #aaa}
622
+ .cm-s-xq-dark .CodeMirror-linenumber{color:#f8f8f8}
623
+ .cm-s-xq-dark .CodeMirror-cursor{border-left:1px solid #fff !important}
624
+ .cm-s-xq-dark span.cm-keyword{color:#ffbd40}
625
+ .cm-s-xq-dark span.cm-atom{color:#6c8cd5}
626
+ .cm-s-xq-dark span.cm-number{color:#164}
627
+ .cm-s-xq-dark span.cm-def{color:#fff;text-decoration:underline}
628
+ .cm-s-xq-dark span.cm-variable{color:#fff}
629
+ .cm-s-xq-dark span.cm-variable-2{color:#eee}
630
+ .cm-s-xq-dark span.cm-variable-3{color:#ddd}
631
+ .cm-s-xq-dark span.cm-comment{color:#808080}
632
+ .cm-s-xq-dark span.cm-string{color:#9fee00}
633
+ .cm-s-xq-dark span.cm-meta{color:#ff0}
634
+ .cm-s-xq-dark span.cm-error{color:#f00}
635
+ .cm-s-xq-dark span.cm-qualifier{color:#fff700}
636
+ .cm-s-xq-dark span.cm-builtin{color:#30a}
637
+ .cm-s-xq-dark span.cm-bracket{color:#cc7}
638
+ .cm-s-xq-dark span.cm-tag{color:#ffbd40}
639
+ .cm-s-xq-dark span.cm-attribute{color:#fff700}
640
+ .cm-s-xq-dark .CodeMirror-activeline-background{background:#27282e !important}
641
+ .cm-s-xq-dark .CodeMirror-matchingbracket{outline:1px solid #808080;color:#fff !important}
642
+ .cm-s-xq-light span.cm-keyword{line-height:1em;font-weight:bold;color:#5a5cad}
643
+ .cm-s-xq-light span.cm-atom{color:#6c8cd5}
644
+ .cm-s-xq-light span.cm-number{color:#164}
645
+ .cm-s-xq-light span.cm-def{text-decoration:underline}
646
+ .cm-s-xq-light span.cm-variable{color:#000}
647
+ .cm-s-xq-light span.cm-variable-2{color:#000}
648
+ .cm-s-xq-light span.cm-variable-3{color:#000}
649
+ .cm-s-xq-light span.cm-comment{color:#0080ff;font-style:italic}
650
+ .cm-s-xq-light span.cm-string{color:#f00}
651
+ .cm-s-xq-light span.cm-meta{color:#ff0}
652
+ .cm-s-xq-light span.cm-error{color:#f00}
653
+ .cm-s-xq-light span.cm-qualifier{color:#808080}
654
+ .cm-s-xq-light span.cm-builtin{color:#7ea656}
655
+ .cm-s-xq-light span.cm-bracket{color:#cc7}
656
+ .cm-s-xq-light span.cm-tag{color:#3f7f7f}
657
+ .cm-s-xq-light span.cm-attribute{color:#7f007f}
658
+ .cm-s-xq-light .CodeMirror-activeline-background{background:#e8f2ff !important}
659
+ .cm-s-xq-light .CodeMirror-matchingbracket{outline:1px solid #808080;color:#000 !important;background:#ff0}
vendor/codemirror/codemirror-compressed.js ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ // CodeMirror 3.16
2
+ // Complied at http://codemirror.net/doc/compress.html
3
+ // using core library, and the modes: css, coffeescript, less, javascript, xml, clike, markdown, gfm, htmlmixed, php
4
+ window.CodeMirror=function(){"use strict";function w(a,c){if(!(this instanceof w))return new w(a,c);this.options=c=c||{};for(var d in $c)!c.hasOwnProperty(d)&&$c.hasOwnProperty(d)&&(c[d]=$c[d]);I(c);var e="string"==typeof c.value?0:c.value.first,f=this.display=x(a,e);f.wrapper.CodeMirror=this,F(this),c.autofocus&&!o&&Mb(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,focused:!1,suppressEdits:!1,pasteIncoming:!1,draggingText:!1,highlight:new We},D(this),c.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap");var g=c.value;"string"==typeof g&&(g=new fe(c.value,c.mode)),Eb(this,je)(this,g),b&&setTimeout(ef(Lb,this,!0),20),Ob(this);var h;try{h=document.activeElement==f.input}catch(i){}h||c.autofocus&&!o?setTimeout(ef(lc,this),20):mc(this),Eb(this,function(){for(var a in Zc)Zc.propertyIsEnumerable(a)&&Zc[a](this,c[a],ad);for(var b=0;b<ed.length;++b)ed[b](this)})()}function x(a,b){var d={},f=d.input=kf("textarea",null,null,"position: absolute; padding: 0; width: 1px; height: 1em; outline: none; font-size: 4px;");return e?f.style.width="1000px":f.setAttribute("wrap","off"),n&&(f.style.border="1px solid black"),f.setAttribute("autocorrect","off"),f.setAttribute("autocapitalize","off"),f.setAttribute("spellcheck","false"),d.inputDiv=kf("div",[f],null,"overflow: hidden; position: relative; width: 3px; height: 0px;"),d.scrollbarH=kf("div",[kf("div",null,null,"height: 1px")],"CodeMirror-hscrollbar"),d.scrollbarV=kf("div",[kf("div",null,null,"width: 1px")],"CodeMirror-vscrollbar"),d.scrollbarFiller=kf("div",null,"CodeMirror-scrollbar-filler"),d.gutterFiller=kf("div",null,"CodeMirror-gutter-filler"),d.lineDiv=kf("div",null,"CodeMirror-code"),d.selectionDiv=kf("div",null,null,"position: relative; z-index: 1"),d.cursor=kf("div","\xa0","CodeMirror-cursor"),d.otherCursor=kf("div","\xa0","CodeMirror-cursor CodeMirror-secondarycursor"),d.measure=kf("div",null,"CodeMirror-measure"),d.lineSpace=kf("div",[d.measure,d.selectionDiv,d.lineDiv,d.cursor,d.otherCursor],null,"position: relative; outline: none"),d.mover=kf("div",[kf("div",[d.lineSpace],"CodeMirror-lines")],null,"position: relative"),d.sizer=kf("div",[d.mover],"CodeMirror-sizer"),d.heightForcer=kf("div",null,null,"position: absolute; height: "+Ue+"px; width: 1px;"),d.gutters=kf("div",null,"CodeMirror-gutters"),d.lineGutter=null,d.scroller=kf("div",[d.sizer,d.heightForcer,d.gutters],"CodeMirror-scroll"),d.scroller.setAttribute("tabIndex","-1"),d.wrapper=kf("div",[d.inputDiv,d.scrollbarH,d.scrollbarV,d.scrollbarFiller,d.gutterFiller,d.scroller],"CodeMirror"),c&&(d.gutters.style.zIndex=-1,d.scroller.style.paddingRight=0),a.appendChild?a.appendChild(d.wrapper):a(d.wrapper),n&&(f.style.width="0px"),e||(d.scroller.draggable=!0),j?(d.inputDiv.style.height="1px",d.inputDiv.style.position="absolute"):c&&(d.scrollbarH.style.minWidth=d.scrollbarV.style.minWidth="18px"),d.viewOffset=d.lastSizeC=0,d.showingFrom=d.showingTo=b,d.lineNumWidth=d.lineNumInnerWidth=d.lineNumChars=null,d.prevInput="",d.alignWidgets=!1,d.pollingFast=!1,d.poll=new We,d.cachedCharWidth=d.cachedTextHeight=null,d.measureLineCache=[],d.measureLineCachePos=0,d.inaccurateSelection=!1,d.maxLine=null,d.maxLineLength=0,d.maxLineChanged=!1,d.wheelDX=d.wheelDY=d.wheelStartX=d.wheelStartY=null,d}function y(a){a.doc.mode=w.getMode(a.options,a.doc.modeOption),a.doc.iter(function(a){a.stateAfter&&(a.stateAfter=null),a.styles&&(a.styles=null)}),a.doc.frontier=a.doc.first,ab(a,100),a.state.modeGen++,a.curOp&&Hb(a)}function z(a){a.options.lineWrapping?(a.display.wrapper.className+=" CodeMirror-wrap",a.display.sizer.style.minWidth=""):(a.display.wrapper.className=a.display.wrapper.className.replace(" CodeMirror-wrap",""),H(a)),B(a),Hb(a),ob(a),setTimeout(function(){J(a)},100)}function A(a){var b=zb(a.display),c=a.options.lineWrapping,d=c&&Math.max(5,a.display.scroller.clientWidth/Ab(a.display)-3);return function(e){return Fd(a.doc,e)?0:c?(Math.ceil(e.text.length/d)||1)*b:b}}function B(a){var b=a.doc,c=A(a);b.iter(function(a){var b=c(a);b!=a.height&&ne(a,b)})}function C(a){var b=jd[a.options.keyMap],c=b.style;a.display.wrapper.className=a.display.wrapper.className.replace(/\s*cm-keymap-\S+/g,"")+(c?" cm-keymap-"+c:""),a.state.disableInput=b.disableInput}function D(a){a.display.wrapper.className=a.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+a.options.theme.replace(/(^|\s)\s*/g," cm-s-"),ob(a)}function E(a){F(a),Hb(a),setTimeout(function(){L(a)},20)}function F(a){var b=a.display.gutters,c=a.options.gutters;lf(b);for(var d=0;d<c.length;++d){var e=c[d],f=b.appendChild(kf("div",null,"CodeMirror-gutter "+e));"CodeMirror-linenumbers"==e&&(a.display.lineGutter=f,f.style.width=(a.display.lineNumWidth||1)+"px")}b.style.display=d?"":"none"}function G(a,b){if(0==b.height)return 0;for(var d,c=b.text.length,e=b;d=Cd(e);){var f=d.find();e=ke(a,f.from.line),c+=f.from.ch-f.to.ch}for(e=b;d=Dd(e);){var f=d.find();c-=e.text.length-f.from.ch,e=ke(a,f.to.line),c+=e.text.length-f.to.ch}return c}function H(a){var b=a.display,c=a.doc;b.maxLine=ke(c,c.first),b.maxLineLength=G(c,b.maxLine),b.maxLineChanged=!0,c.iter(function(a){var d=G(c,a);d>b.maxLineLength&&(b.maxLineLength=d,b.maxLine=a)})}function I(a){for(var b=!1,c=0;c<a.gutters.length;++c)"CodeMirror-linenumbers"==a.gutters[c]&&(a.lineNumbers?b=!0:a.gutters.splice(c--,1));!b&&a.lineNumbers&&a.gutters.push("CodeMirror-linenumbers")}function J(a){var b=a.display,c=a.doc.height,d=c+fb(b);b.sizer.style.minHeight=b.heightForcer.style.top=d+"px",b.gutters.style.height=Math.max(d,b.scroller.clientHeight-Ue)+"px";var e=Math.max(d,b.scroller.scrollHeight),f=b.scroller.scrollWidth>b.scroller.clientWidth+1,g=e>b.scroller.clientHeight+1;g?(b.scrollbarV.style.display="block",b.scrollbarV.style.bottom=f?sf(b.measure)+"px":"0",b.scrollbarV.firstChild.style.height=e-b.scroller.clientHeight+b.scrollbarV.clientHeight+"px"):(b.scrollbarV.style.display="",b.scrollbarV.firstChild.style.height="0"),f?(b.scrollbarH.style.display="block",b.scrollbarH.style.right=g?sf(b.measure)+"px":"0",b.scrollbarH.firstChild.style.width=b.scroller.scrollWidth-b.scroller.clientWidth+b.scrollbarH.clientWidth+"px"):(b.scrollbarH.style.display="",b.scrollbarH.firstChild.style.width="0"),f&&g?(b.scrollbarFiller.style.display="block",b.scrollbarFiller.style.height=b.scrollbarFiller.style.width=sf(b.measure)+"px"):b.scrollbarFiller.style.display="",f&&a.options.coverGutterNextToScrollbar&&a.options.fixedGutter?(b.gutterFiller.style.display="block",b.gutterFiller.style.height=sf(b.measure)+"px",b.gutterFiller.style.width=b.gutters.offsetWidth+"px"):b.gutterFiller.style.display="",k&&0===sf(b.measure)&&(b.scrollbarV.style.minWidth=b.scrollbarH.style.minHeight=l?"18px":"12px")}function K(a,b,c){var d=a.scroller.scrollTop,e=a.wrapper.clientHeight;"number"==typeof c?d=c:c&&(d=c.top,e=c.bottom-c.top),d=Math.floor(d-eb(a));var f=Math.ceil(d+e);return{from:pe(b,d),to:pe(b,f)}}function L(a){var b=a.display;if(b.alignWidgets||b.gutters.firstChild&&a.options.fixedGutter){for(var c=O(b)-b.scroller.scrollLeft+a.doc.scrollLeft,d=b.gutters.offsetWidth,e=c+"px",f=b.lineDiv.firstChild;f;f=f.nextSibling)if(f.alignable)for(var g=0,h=f.alignable;g<h.length;++g)h[g].style.left=e;a.options.fixedGutter&&(b.gutters.style.left=c+d+"px")}}function M(a){if(!a.options.lineNumbers)return!1;var b=a.doc,c=N(a.options,b.first+b.size-1),d=a.display;if(c.length!=d.lineNumChars){var e=d.measure.appendChild(kf("div",[kf("div",c)],"CodeMirror-linenumber CodeMirror-gutter-elt")),f=e.firstChild.offsetWidth,g=e.offsetWidth-f;return d.lineGutter.style.width="",d.lineNumInnerWidth=Math.max(f,d.lineGutter.offsetWidth-g),d.lineNumWidth=d.lineNumInnerWidth+g,d.lineNumChars=d.lineNumInnerWidth?c.length:-1,d.lineGutter.style.width=d.lineNumWidth+"px",!0}return!1}function N(a,b){return String(a.lineNumberFormatter(b+a.firstLineNumber))}function O(a){return of(a.scroller).left-of(a.sizer).left}function P(a,b,c,d){for(var g,e=a.display.showingFrom,f=a.display.showingTo,h=K(a.display,a.doc,c);Q(a,b,h,d)&&(d=!1,g=!0,Y(a),J(a),c&&(c=Math.min(a.display.scroller.scrollHeight-a.display.scroller.clientHeight,"number"==typeof c?c:c.top)),h=K(a.display,a.doc,c),!(h.from>=a.display.showingFrom&&h.to<=a.display.showingTo));)b=[];return g&&(Pe(a,"update",a),(a.display.showingFrom!=e||a.display.showingTo!=f)&&Pe(a,"viewportChange",a,a.display.showingFrom,a.display.showingTo)),g}function Q(a,b,c,d){var e=a.display,f=a.doc;if(!e.wrapper.clientWidth)return e.showingFrom=e.showingTo=f.first,e.viewOffset=0,void 0;if(!(!d&&0==b.length&&c.from>e.showingFrom&&c.to<e.showingTo)){M(a)&&(b=[{from:f.first,to:f.first+f.size}]);var g=e.sizer.style.marginLeft=e.gutters.offsetWidth+"px";e.scrollbarH.style.left=a.options.fixedGutter?g:"0";var h=1/0;if(a.options.lineNumbers)for(var i=0;i<b.length;++i)b[i].diff&&b[i].from<h&&(h=b[i].from);var j=f.first+f.size,k=Math.max(c.from-a.options.viewportMargin,f.first),l=Math.min(j,c.to+a.options.viewportMargin);if(e.showingFrom<k&&k-e.showingFrom<20&&(k=Math.max(f.first,e.showingFrom)),e.showingTo>l&&e.showingTo-l<20&&(l=Math.min(j,e.showingTo)),v)for(k=oe(Ed(f,ke(f,k)));j>l&&Fd(f,ke(f,l));)++l;var m=[{from:Math.max(e.showingFrom,f.first),to:Math.min(e.showingTo,j)}];if(m=m[0].from>=m[0].to?[]:T(m,b),v)for(var i=0;i<m.length;++i)for(var o,n=m[i];o=Dd(ke(f,n.to-1));){var p=o.find().from.line;if(!(p>n.from)){m.splice(i--,1);break}n.to=p}for(var q=0,i=0;i<m.length;++i){var n=m[i];n.from<k&&(n.from=k),n.to>l&&(n.to=l),n.from>=n.to?m.splice(i--,1):q+=n.to-n.from}if(!d&&q==l-k&&k==e.showingFrom&&l==e.showingTo)return S(a),void 0;m.sort(function(a,b){return a.from-b.from});try{var r=document.activeElement}catch(s){}.7*(l-k)>q&&(e.lineDiv.style.display="none"),V(a,k,l,m,h),e.lineDiv.style.display="",r&&document.activeElement!=r&&r.offsetHeight&&r.focus();var t=k!=e.showingFrom||l!=e.showingTo||e.lastSizeC!=e.wrapper.clientHeight;return t&&(e.lastSizeC=e.wrapper.clientHeight,ab(a,400)),e.showingFrom=k,e.showingTo=l,R(a),S(a),!0}}function R(a){for(var f,b=a.display,d=b.lineDiv.offsetTop,e=b.lineDiv.firstChild;e;e=e.nextSibling)if(e.lineObj){if(c){var g=e.offsetTop+e.offsetHeight;f=g-d,d=g}else{var h=of(e);f=h.bottom-h.top}var i=e.lineObj.height-f;if(2>f&&(f=zb(b)),i>.001||-.001>i){ne(e.lineObj,f);var j=e.lineObj.widgets;if(j)for(var k=0;k<j.length;++k)j[k].height=j[k].node.offsetHeight}}}function S(a){var b=a.display.viewOffset=qe(a,ke(a.doc,a.display.showingFrom));a.display.mover.style.top=b+"px"}function T(a,b){for(var c=0,d=b.length||0;d>c;++c){for(var e=b[c],f=[],g=e.diff||0,h=0,i=a.length;i>h;++h){var j=a[h];e.to<=j.from&&e.diff?f.push({from:j.from+g,to:j.to+g}):e.to<=j.from||e.from>=j.to?f.push(j):(e.from>j.from&&f.push({from:j.from,to:e.from}),e.to<j.to&&f.push({from:e.to+g,to:j.to+g}))}a=f}return a}function U(a){for(var b=a.display,c={},d={},e=b.gutters.firstChild,f=0;e;e=e.nextSibling,++f)c[a.options.gutters[f]]=e.offsetLeft,d[a.options.gutters[f]]=e.offsetWidth;return{fixedPos:O(b),gutterTotalWidth:b.gutters.offsetWidth,gutterLeft:c,gutterWidth:d,wrapperWidth:b.wrapper.clientWidth}}function V(a,b,c,d,f){function l(b){var c=b.nextSibling;return e&&p&&a.display.currentWheelTarget==b?(b.style.display="none",b.lineObj=null):b.parentNode.removeChild(b),c}var g=U(a),h=a.display,i=a.options.lineNumbers;d.length||e&&a.display.currentWheelTarget||lf(h.lineDiv);var j=h.lineDiv,k=j.firstChild,m=d.shift(),n=b;for(a.doc.iter(b,c,function(b){if(m&&m.to==n&&(m=d.shift()),Fd(a.doc,b)){if(0!=b.height&&ne(b,0),b.widgets&&k&&k.previousSibling)for(var c=0;c<b.widgets.length;++c){var e=b.widgets[c];if(e.showIfHidden){var h=k.previousSibling;if(/pre/i.test(h.nodeName)){var o=kf("div",null,null,"position: relative");h.parentNode.replaceChild(o,h),o.appendChild(h),h=o}var p=h.appendChild(kf("div",[e.node],"CodeMirror-linewidget"));e.handleMouseEvents||(p.ignoreEvents=!0),X(e,p,h,g)}}}else if(m&&m.from<=n&&m.to>n){for(;k.lineObj!=b;)k=l(k);i&&n>=f&&k.lineNumber&&nf(k.lineNumber,N(a.options,n)),k=k.nextSibling}else{if(b.widgets)for(var s,q=0,r=k;r&&20>q;++q,r=r.nextSibling)if(r.lineObj==b&&/div/i.test(r.nodeName)){s=r;break}var t=W(a,b,n,g,s);if(t!=s)j.insertBefore(t,k);else{for(;k!=s;)k=l(k);k=k.nextSibling}t.lineObj=b}++n});k;)k=l(k)}function W(a,b,d,e,f){var j,g=Wd(a,b),h=b.gutterMarkers,i=a.display;if(!(a.options.lineNumbers||h||b.bgClass||b.wrapClass||b.widgets))return g;if(f){f.alignable=null;for(var o,k=!0,l=0,m=null,n=f.firstChild;n;n=o)if(o=n.nextSibling,/\bCodeMirror-linewidget\b/.test(n.className)){for(var p=0;p<b.widgets.length;++p){var q=b.widgets[p];if(q.node==n.firstChild){q.above||m||(m=n),X(q,n,f,e),++l;break}}if(p==b.widgets.length){k=!1;break}}else f.removeChild(n);f.insertBefore(g,m),k&&l==b.widgets.length&&(j=f,f.className=b.wrapClass||"")}if(j||(j=kf("div",null,b.wrapClass,"position: relative"),j.appendChild(g)),b.bgClass&&j.insertBefore(kf("div",null,b.bgClass+" CodeMirror-linebackground"),j.firstChild),a.options.lineNumbers||h){var r=j.insertBefore(kf("div",null,null,"position: absolute; left: "+(a.options.fixedGutter?e.fixedPos:-e.gutterTotalWidth)+"px"),j.firstChild);if(a.options.fixedGutter&&(j.alignable||(j.alignable=[])).push(r),!a.options.lineNumbers||h&&h["CodeMirror-linenumbers"]||(j.lineNumber=r.appendChild(kf("div",N(a.options,d),"CodeMirror-linenumber CodeMirror-gutter-elt","left: "+e.gutterLeft["CodeMirror-linenumbers"]+"px; width: "+i.lineNumInnerWidth+"px"))),h)for(var s=0;s<a.options.gutters.length;++s){var t=a.options.gutters[s],u=h.hasOwnProperty(t)&&h[t];u&&r.appendChild(kf("div",[u],"CodeMirror-gutter-elt","left: "+e.gutterLeft[t]+"px; width: "+e.gutterWidth[t]+"px"))}}if(c&&(j.style.zIndex=2),b.widgets&&j!=f)for(var p=0,v=b.widgets;p<v.length;++p){var q=v[p],w=kf("div",[q.node],"CodeMirror-linewidget");q.handleMouseEvents||(w.ignoreEvents=!0),X(q,w,j,e),q.above?j.insertBefore(w,a.options.lineNumbers&&0!=b.height?r:g):j.appendChild(w),Pe(q,"redraw")}return j}function X(a,b,c,d){if(a.noHScroll){(c.alignable||(c.alignable=[])).push(b);var e=d.wrapperWidth;b.style.left=d.fixedPos+"px",a.coverGutter||(e-=d.gutterTotalWidth,b.style.paddingLeft=d.gutterTotalWidth+"px"),b.style.width=e+"px"}a.coverGutter&&(b.style.zIndex=5,b.style.position="relative",a.noHScroll||(b.style.marginLeft=-d.gutterTotalWidth+"px"))}function Y(a){var b=a.display,c=Bc(a.doc.sel.from,a.doc.sel.to);if(c||a.options.showCursorWhenSelecting?Z(a):b.cursor.style.display=b.otherCursor.style.display="none",c?b.selectionDiv.style.display="none":$(a),a.options.moveInputWithCursor){var d=ub(a,a.doc.sel.head,"div"),e=of(b.wrapper),f=of(b.lineDiv);b.inputDiv.style.top=Math.max(0,Math.min(b.wrapper.clientHeight-10,d.top+f.top-e.top))+"px",b.inputDiv.style.left=Math.max(0,Math.min(b.wrapper.clientWidth-10,d.left+f.left-e.left))+"px"}}function Z(a){var b=a.display,c=ub(a,a.doc.sel.head,"div");b.cursor.style.left=c.left+"px",b.cursor.style.top=c.top+"px",b.cursor.style.height=Math.max(0,c.bottom-c.top)*a.options.cursorHeight+"px",b.cursor.style.display="",c.other?(b.otherCursor.style.display="",b.otherCursor.style.left=c.other.left+"px",b.otherCursor.style.top=c.other.top+"px",b.otherCursor.style.height=.85*(c.other.bottom-c.other.top)+"px"):b.otherCursor.style.display="none"}function $(a){function h(a,b,c,d){0>b&&(b=0),e.appendChild(kf("div",null,"CodeMirror-selected","position: absolute; left: "+a+"px; top: "+b+"px; width: "+(null==c?f-a:c)+"px; height: "+(d-b)+"px"))}function i(b,d,e){function m(c,d){return tb(a,Ac(b,c),"div",i,d)}var k,l,i=ke(c,b),j=i.text.length;return zf(re(i),d||0,null==e?j:e,function(a,b,c){var n,o,p,i=m(a,"left");if(a==b)n=i,o=p=i.left;else{if(n=m(b-1,"right"),"rtl"==c){var q=i;i=n,n=q}o=i.left,p=n.right}null==d&&0==a&&(o=g),n.top-i.top>3&&(h(o,i.top,null,i.bottom),o=g,i.bottom<n.top&&h(o,i.bottom,null,n.top)),null==e&&b==j&&(p=f),(!k||i.top<k.top||i.top==k.top&&i.left<k.left)&&(k=i),(!l||n.bottom>l.bottom||n.bottom==l.bottom&&n.right>l.right)&&(l=n),g+1>o&&(o=g),h(o,n.top,p-o,n.bottom)}),{start:k,end:l}}var b=a.display,c=a.doc,d=a.doc.sel,e=document.createDocumentFragment(),f=b.lineSpace.offsetWidth,g=gb(a.display);if(d.from.line==d.to.line)i(d.from.line,d.from.ch,d.to.ch);else{var j=ke(c,d.from.line),k=ke(c,d.to.line),l=Ed(c,j)==Ed(c,k),m=i(d.from.line,d.from.ch,l?j.text.length:null).end,n=i(d.to.line,l?0:null,d.to.ch).start;l&&(m.top<n.top-2?(h(m.right,m.top,null,m.bottom),h(g,n.top,n.left,n.bottom)):h(m.right,m.top,n.left-m.right,m.bottom)),m.bottom<n.top&&h(g,m.bottom,null,n.top)}mf(b.selectionDiv,e),b.selectionDiv.style.display=""}function _(a){if(a.state.focused){var b=a.display;clearInterval(b.blinker);var c=!0;b.cursor.style.visibility=b.otherCursor.style.visibility="",a.options.cursorBlinkRate>0&&(b.blinker=setInterval(function(){b.cursor.style.visibility=b.otherCursor.style.visibility=(c=!c)?"":"hidden"},a.options.cursorBlinkRate))}}function ab(a,b){a.doc.mode.startState&&a.doc.frontier<a.display.showingTo&&a.state.highlight.set(b,ef(bb,a))}function bb(a){var b=a.doc;if(b.frontier<b.first&&(b.frontier=b.first),!(b.frontier>=a.display.showingTo)){var f,c=+new Date+a.options.workTime,d=gd(b.mode,db(a,b.frontier)),e=[];b.iter(b.frontier,Math.min(b.first+b.size,a.display.showingTo+500),function(g){if(b.frontier>=a.display.showingFrom){var h=g.styles;g.styles=Rd(a,g,d);for(var i=!h||h.length!=g.styles.length,j=0;!i&&j<h.length;++j)i=h[j]!=g.styles[j];i&&(f&&f.end==b.frontier?f.end++:e.push(f={start:b.frontier,end:b.frontier+1})),g.stateAfter=gd(b.mode,d)}else Td(a,g,d),g.stateAfter=0==b.frontier%5?gd(b.mode,d):null;return++b.frontier,+new Date>c?(ab(a,a.options.workDelay),!0):void 0}),e.length&&Eb(a,function(){for(var a=0;a<e.length;++a)Hb(this,e[a].start,e[a].end)})()}}function cb(a,b,c){for(var d,e,f=a.doc,g=a.doc.mode.innerMode?1e3:100,h=b,i=b-g;h>i;--h){if(h<=f.first)return f.first;var j=ke(f,h-1);if(j.stateAfter&&(!c||h<=f.frontier))return h;var k=Xe(j.text,null,a.options.tabSize);(null==e||d>k)&&(e=h-1,d=k)}return e}function db(a,b,c){var d=a.doc,e=a.display;if(!d.mode.startState)return!0;var f=cb(a,b,c),g=f>d.first&&ke(d,f-1).stateAfter;return g=g?gd(d.mode,g):hd(d.mode),d.iter(f,b,function(c){Td(a,c,g);var h=f==b-1||0==f%5||f>=e.showingFrom&&f<e.showingTo;c.stateAfter=h?gd(d.mode,g):null,++f}),g}function eb(a){return a.lineSpace.offsetTop}function fb(a){return a.mover.offsetHeight-a.lineSpace.offsetHeight}function gb(a){var b=mf(a.measure,kf("pre",null,null,"text-align: left")).appendChild(kf("span","x"));return b.offsetLeft}function hb(a,b,c,d,e){var f=-1;if(d=d||kb(a,b),d.crude){var g=d.left+c*d.width;return{left:g,right:g+d.width,top:d.top,bottom:d.bottom}}for(var h=c;;h+=f){var i=d[h];if(i)break;0>f&&0==h&&(f=1)}return e=h>c?"left":c>h?"right":e,"left"==e&&i.leftSide?i=i.leftSide:"right"==e&&i.rightSide&&(i=i.rightSide),{left:c>h?i.right:i.left,right:h>c?i.left:i.right,top:i.top,bottom:i.bottom}}function ib(a,b){for(var c=a.display.measureLineCache,d=0;d<c.length;++d){var e=c[d];if(e.text==b.text&&e.markedSpans==b.markedSpans&&a.display.scroller.clientWidth==e.width&&e.classes==b.textClass+"|"+b.bgClass+"|"+b.wrapClass)return e}}function jb(a,b){var c=ib(a,b);c&&(c.text=c.measure=c.markedSpans=null)}function kb(a,b){var c=ib(a,b);if(c)return c.measure;var d=lb(a,b),e=a.display.measureLineCache,f={text:b.text,width:a.display.scroller.clientWidth,markedSpans:b.markedSpans,measure:d,classes:b.textClass+"|"+b.bgClass+"|"+b.wrapClass};return 16==e.length?e[++a.display.measureLineCachePos%16]=f:e.push(f),d}function lb(a,e){function t(a){var b=a.top-p.top,c=a.bottom-p.top;c>s&&(c=s),0>b&&(b=0);for(var d=q.length-2;d>=0;d-=2){var e=q[d],f=q[d+1];if(!(e>c||b>f)&&(b>=e&&f>=c||e>=b&&c>=f||Math.min(c,f)-Math.max(b,e)>=c-b>>1)){q[d]=Math.min(b,e),q[d+1]=Math.max(c,f);break}}return 0>d&&(d=q.length,q.push(b,c)),{left:a.left-p.left,right:a.right-p.left,top:d,bottom:null}}function u(a){a.bottom=q[a.top+1],a.top=q[a.top]}if(!a.options.lineWrapping&&e.text.length>=a.options.crudeMeasuringFrom)return mb(a,e);var f=a.display,g=df(e.text.length),h=Wd(a,e,g,!0);if(b&&!c&&!a.options.lineWrapping&&h.childNodes.length>100){for(var i=document.createDocumentFragment(),j=10,k=h.childNodes.length,l=0,m=Math.ceil(k/j);m>l;++l){for(var n=kf("div",null,null,"display: inline-block"),o=0;j>o&&k;++o)n.appendChild(h.firstChild),--k;i.appendChild(n)}h.appendChild(i)}mf(f.measure,h);var p=of(f.lineDiv),q=[],r=df(e.text.length),s=h.offsetHeight;d&&f.measure.first!=h&&mf(f.measure,h);for(var v,l=0;l<g.length;++l)if(v=g[l]){var w=v,x=null;if(/\bCodeMirror-widget\b/.test(v.className)&&v.getClientRects){1==v.firstChild.nodeType&&(w=v.firstChild);var y=w.getClientRects();y.length>1&&(x=r[l]=t(y[0]),x.rightSide=t(y[y.length-1]))}x||(x=r[l]=t(of(w))),v.measureRight&&(x.right=of(v.measureRight).left),v.leftSide&&(x.leftSide=t(of(v.leftSide)))}lf(a.display.measure);for(var v,l=0;l<r.length;++l)(v=r[l])&&(u(v),v.leftSide&&u(v.leftSide),v.rightSide&&u(v.rightSide));return r}function mb(a,b){var c=new Nd(b.text.slice(0,100),null);b.textClass&&(c.textClass=b.textClass);var d=lb(a,c),e=hb(a,c,0,d,"left"),f=hb(a,c,99,d,"right");return{crude:!0,top:e.top,left:e.left,bottom:e.bottom,width:(f.right-e.left)/100}}function nb(a,b){var c=!1;if(b.markedSpans)for(var d=0;d<b.markedSpans;++d){var e=b.markedSpans[d];!e.collapsed||null!=e.to&&e.to!=b.text.length||(c=!0)}var f=!c&&ib(a,b);if(f||b.text.length>=a.options.crudeMeasuringFrom)return hb(a,b,b.text.length,f&&f.measure,"right").right;var g=Wd(a,b,null,!0),h=g.appendChild(uf(a.display.measure));return mf(a.display.measure,g),of(h).right-of(a.display.lineDiv).left}function ob(a){a.display.measureLineCache.length=a.display.measureLineCachePos=0,a.display.cachedCharWidth=a.display.cachedTextHeight=null,a.options.lineWrapping||(a.display.maxLineChanged=!0),a.display.lineNumChars=null}function pb(){return window.pageXOffset||(document.documentElement||document.body).scrollLeft}function qb(){return window.pageYOffset||(document.documentElement||document.body).scrollTop}function rb(a,b,c,d){if(b.widgets)for(var e=0;e<b.widgets.length;++e)if(b.widgets[e].above){var f=Ld(b.widgets[e]);c.top+=f,c.bottom+=f}if("line"==d)return c;d||(d="local");var g=qe(a,b);if("local"==d?g+=eb(a.display):g-=a.display.viewOffset,"page"==d||"window"==d){var h=of(a.display.lineSpace);g+=h.top+("window"==d?0:qb());var i=h.left+("window"==d?0:pb());c.left+=i,c.right+=i}return c.top+=g,c.bottom+=g,c}function sb(a,b,c){if("div"==c)return b;var d=b.left,e=b.top;if("page"==c)d-=pb(),e-=qb();else if("local"==c||!c){var f=of(a.display.sizer);d+=f.left,e+=f.top}var g=of(a.display.lineSpace);return{left:d-g.left,top:e-g.top}}function tb(a,b,c,d,e){return d||(d=ke(a.doc,b.line)),rb(a,d,hb(a,d,b.ch,null,e),c)}function ub(a,b,c,d,e){function f(b,f){var g=hb(a,d,b,e,f?"right":"left");return f?g.left=g.right:g.right=g.left,rb(a,d,g,c)}function g(a,b){var c=h[b],d=c.level%2;return a==Af(c)&&b&&c.level<h[b-1].level?(c=h[--b],a=Bf(c)-(c.level%2?0:1),d=!0):a==Bf(c)&&b<h.length-1&&c.level<h[b+1].level&&(c=h[++b],a=Af(c)-c.level%2,d=!1),d&&a==c.to&&a>c.from?f(a-1):f(a,d)}d=d||ke(a.doc,b.line),e||(e=kb(a,d));var h=re(d),i=b.ch;if(!h)return f(i);var j=If(h,i),k=g(i,j);return null!=Hf&&(k.other=g(i,Hf)),k}function vb(a,b,c,d){var e=new Ac(a,b);return e.xRel=d,c&&(e.outside=!0),e}function wb(a,b,c){var d=a.doc;if(c+=a.display.viewOffset,0>c)return vb(d.first,0,!0,-1);var e=pe(d,c),f=d.first+d.size-1;if(e>f)return vb(d.first+d.size-1,ke(d,f).text.length,!0,1);for(0>b&&(b=0);;){var g=ke(d,e),h=xb(a,g,e,b,c),i=Dd(g),j=i&&i.find();if(!i||!(h.ch>j.from.ch||h.ch==j.from.ch&&h.xRel>0))return h;e=j.to.line}}function xb(a,b,c,d,e){function j(d){var e=ub(a,Ac(c,d),"line",b,i);return g=!0,f>e.bottom?e.left-h:f<e.top?e.left+h:(g=!1,e.left)}var f=e-qe(a,b),g=!1,h=2*a.display.wrapper.clientWidth,i=kb(a,b),k=re(b),l=b.text.length,m=Cf(b),n=Df(b),o=j(m),p=g,q=j(n),r=g;if(d>q)return vb(c,n,r,1);for(;;){if(k?n==m||n==Kf(b,m,1):1>=n-m){for(var s=o>d||q-d>=d-o?m:n,t=d-(s==m?o:q);jf.test(b.text.charAt(s));)++s;var u=vb(c,s,s==m?p:r,0>t?-1:t?1:0);return u}var v=Math.ceil(l/2),w=m+v;if(k){w=m;for(var x=0;v>x;++x)w=Kf(b,w,1)}var y=j(w);y>d?(n=w,q=y,(r=g)&&(q+=1e3),l=v):(m=w,o=y,p=g,l-=v)}}function zb(a){if(null!=a.cachedTextHeight)return a.cachedTextHeight;if(null==yb){yb=kf("pre");for(var b=0;49>b;++b)yb.appendChild(document.createTextNode("x")),yb.appendChild(kf("br"));yb.appendChild(document.createTextNode("x"))}mf(a.measure,yb);var c=yb.offsetHeight/50;return c>3&&(a.cachedTextHeight=c),lf(a.measure),c||1}function Ab(a){if(null!=a.cachedCharWidth)return a.cachedCharWidth;var b=kf("span","x"),c=kf("pre",[b]);mf(a.measure,c);var d=b.offsetWidth;return d>2&&(a.cachedCharWidth=d),d||10}function Cb(a){a.curOp={changes:[],forceUpdate:!1,updateInput:null,userSelChange:null,textChanged:null,selectionChanged:!1,cursorActivity:!1,updateMaxLine:!1,updateScrollPos:!1,id:++Bb},Oe++||(Ne=[])}function Db(a){var b=a.curOp,c=a.doc,d=a.display;if(a.curOp=null,b.updateMaxLine&&H(a),d.maxLineChanged&&!a.options.lineWrapping&&d.maxLine){var e=nb(a,d.maxLine);d.sizer.style.minWidth=Math.max(0,e+3+Ue)+"px",d.maxLineChanged=!1;var f=Math.max(0,d.sizer.offsetLeft+d.sizer.offsetWidth-d.scroller.clientWidth);f<c.scrollLeft&&!b.updateScrollPos&&_b(a,Math.min(d.scroller.scrollLeft,f),!0)}var g,h;if(b.updateScrollPos)g=b.updateScrollPos;else if(b.selectionChanged&&d.scroller.clientHeight){var i=ub(a,c.sel.head);g=Qc(a,i.left,i.top,i.left,i.bottom)}(b.changes.length||b.forceUpdate||g&&null!=g.scrollTop)&&(h=P(a,b.changes,g&&g.scrollTop,b.forceUpdate),a.display.scroller.offsetHeight&&(a.doc.scrollTop=a.display.scroller.scrollTop)),!h&&b.selectionChanged&&Y(a),b.updateScrollPos?(d.scroller.scrollTop=d.scrollbarV.scrollTop=c.scrollTop=g.scrollTop,d.scroller.scrollLeft=d.scrollbarH.scrollLeft=c.scrollLeft=g.scrollLeft,L(a),b.scrollToPos&&Oc(a,Fc(a.doc,b.scrollToPos),b.scrollToPosMargin)):g&&Nc(a),b.selectionChanged&&_(a),a.state.focused&&b.updateInput&&Lb(a,b.userSelChange);var j=b.maybeHiddenMarkers,k=b.maybeUnhiddenMarkers;if(j)for(var l=0;l<j.length;++l)j[l].lines.length||Me(j[l],"hide");if(k)for(var l=0;l<k.length;++l)k[l].lines.length&&Me(k[l],"unhide");var m;if(--Oe||(m=Ne,Ne=null),b.textChanged&&Me(a,"change",a,b.textChanged),b.cursorActivity&&Me(a,"cursorActivity",a),m)for(var l=0;l<m.length;++l)m[l]()}function Eb(a,b){return function(){var c=a||this,d=!c.curOp;d&&Cb(c);try{var e=b.apply(c,arguments)}finally{d&&Db(c)}return e}}function Fb(a){return function(){var c,b=this.cm&&!this.cm.curOp;b&&Cb(this.cm);try{c=a.apply(this,arguments)}finally{b&&Db(this.cm)}return c}}function Gb(a,b){var d,c=!a.curOp;c&&Cb(a);try{d=b()}finally{c&&Db(a)}return d}function Hb(a,b,c,d){null==b&&(b=a.doc.first),null==c&&(c=a.doc.first+a.doc.size),a.curOp.changes.push({from:b,to:c,diff:d})}function Ib(a){a.display.pollingFast||a.display.poll.set(a.options.pollInterval,function(){Kb(a),a.state.focused&&Ib(a)})}function Jb(a){function c(){var d=Kb(a);d||b?(a.display.pollingFast=!1,Ib(a)):(b=!0,a.display.poll.set(60,c))}var b=!1;a.display.pollingFast=!0,a.display.poll.set(20,c)}function Kb(a){var c=a.display.input,e=a.display.prevInput,f=a.doc,g=f.sel;if(!a.state.focused||wf(c)||Nb(a)||a.state.disableInput)return!1;a.state.pasteIncoming&&a.state.fakedLastChar&&(c.value=c.value.substring(0,c.value.length-1),a.state.fakedLastChar=!1);var h=c.value;if(h==e&&Bc(g.from,g.to))return!1;if(b&&!d&&a.display.inputHasSelection===h)return Lb(a,!0),!1;var i=!a.curOp;i&&Cb(a),g.shift=!1;for(var j=0,k=Math.min(e.length,h.length);k>j&&e.charCodeAt(j)==h.charCodeAt(j);)++j;var l=g.from,m=g.to;j<e.length?l=Ac(l.line,l.ch-(e.length-j)):a.state.overwrite&&Bc(l,m)&&!a.state.pasteIncoming&&(m=Ac(m.line,Math.min(ke(f,m.line).text.length,m.ch+(h.length-j))));var n=a.curOp.updateInput,o={from:l,to:m,text:vf(h.slice(j)),origin:a.state.pasteIncoming?"paste":"+input"};return tc(a.doc,o,"end"),a.curOp.updateInput=n,Pe(a,"inputRead",a,o),h.length>1e3||h.indexOf("\n")>-1?c.value=a.display.prevInput="":a.display.prevInput=h,i&&Db(a),a.state.pasteIncoming=!1,!0}function Lb(a,c){var e,f,g=a.doc;if(Bc(g.sel.from,g.sel.to))c&&(a.display.prevInput=a.display.input.value="",b&&!d&&(a.display.inputHasSelection=null));else{a.display.prevInput="",e=xf&&(g.sel.to.line-g.sel.from.line>100||(f=a.getSelection()).length>1e3);var h=e?"-":f||a.getSelection();a.display.input.value=h,a.state.focused&&_e(a.display.input),b&&!d&&(a.display.inputHasSelection=h)}a.display.inaccurateSelection=e}function Mb(a){"nocursor"==a.options.readOnly||o&&document.activeElement==a.display.input||a.display.input.focus()}function Nb(a){return a.options.readOnly||a.doc.cantEdit}function Ob(a){function d(){a.state.focused&&setTimeout(ef(Mb,a),0)}function g(){null==f&&(f=setTimeout(function(){f=null,c.cachedCharWidth=c.cachedTextHeight=rf=null,ob(a),Gb(a,ef(Hb,a))},100))}function h(){for(var a=c.wrapper.parentNode;a&&a!=document.body;a=a.parentNode);a?setTimeout(h,5e3):Le(window,"resize",g)}function i(b){Qe(a,b)||a.options.onDragEvent&&a.options.onDragEvent(a,De(b))||He(b)}function k(){c.inaccurateSelection&&(c.prevInput="",c.inaccurateSelection=!1,c.input.value=a.getSelection(),_e(c.input))}var c=a.display;Ke(c.scroller,"mousedown",Eb(a,Tb)),b?Ke(c.scroller,"dblclick",Eb(a,function(b){if(!Qe(a,b)){var c=Qb(a,b);if(c&&!Wb(a,b)&&!Pb(a.display,b)){Ee(b);var d=Xc(ke(a.doc,c.line).text,c);Ic(a.doc,d.from,d.to)}}})):Ke(c.scroller,"dblclick",function(b){Qe(a,b)||Ee(b)}),Ke(c.lineSpace,"selectstart",function(a){Pb(c,a)||Ee(a)}),t||Ke(c.scroller,"contextmenu",function(b){oc(a,b)}),Ke(c.scroller,"scroll",function(){c.scroller.clientHeight&&($b(a,c.scroller.scrollTop),_b(a,c.scroller.scrollLeft,!0),Me(a,"scroll",a))}),Ke(c.scrollbarV,"scroll",function(){c.scroller.clientHeight&&$b(a,c.scrollbarV.scrollTop)}),Ke(c.scrollbarH,"scroll",function(){c.scroller.clientHeight&&_b(a,c.scrollbarH.scrollLeft)}),Ke(c.scroller,"mousewheel",function(b){cc(a,b)}),Ke(c.scroller,"DOMMouseScroll",function(b){cc(a,b)}),Ke(c.scrollbarH,"mousedown",d),Ke(c.scrollbarV,"mousedown",d),Ke(c.wrapper,"scroll",function(){c.wrapper.scrollTop=c.wrapper.scrollLeft=0});var f;Ke(window,"resize",g),setTimeout(h,5e3),Ke(c.input,"keyup",Eb(a,function(b){Qe(a,b)||a.options.onKeyEvent&&a.options.onKeyEvent(a,De(b))||16==b.keyCode&&(a.doc.sel.shift=!1)})),Ke(c.input,"input",ef(Jb,a)),Ke(c.input,"keydown",Eb(a,jc)),Ke(c.input,"keypress",Eb(a,kc)),Ke(c.input,"focus",ef(lc,a)),Ke(c.input,"blur",ef(mc,a)),a.options.dragDrop&&(Ke(c.scroller,"dragstart",function(b){Zb(a,b)}),Ke(c.scroller,"dragenter",i),Ke(c.scroller,"dragover",i),Ke(c.scroller,"drop",Eb(a,Yb))),Ke(c.scroller,"paste",function(b){Pb(c,b)||(Mb(a),Jb(a))}),Ke(c.input,"paste",function(){if(e&&!a.state.fakedLastChar&&!(new Date-a.state.lastMiddleDown<200)){var b=c.input.selectionStart,d=c.input.selectionEnd;c.input.value+="$",c.input.selectionStart=b,c.input.selectionEnd=d,a.state.fakedLastChar=!0}a.state.pasteIncoming=!0,Jb(a)}),Ke(c.input,"cut",k),Ke(c.input,"copy",k),j&&Ke(c.sizer,"mouseup",function(){document.activeElement==c.input&&c.input.blur(),Mb(a)})}function Pb(a,b){for(var c=Ie(b);c!=a.wrapper;c=c.parentNode)if(!c||c.ignoreEvents||c.parentNode==a.sizer&&c!=a.mover)return!0}function Qb(a,b,c){var d=a.display;if(!c){var e=Ie(b);if(e==d.scrollbarH||e==d.scrollbarH.firstChild||e==d.scrollbarV||e==d.scrollbarV.firstChild||e==d.scrollbarFiller||e==d.gutterFiller)return null}var f,g,h=of(d.lineSpace);try{f=b.clientX,g=b.clientY}catch(b){return null}return wb(a,f-h.left,g-h.top)}function Tb(a){function q(a){if(!Bc(p,a)){if(p=a,"single"==j)return Ic(c.doc,Fc(f,h),a),void 0;if(n=Fc(f,n),o=Fc(f,o),"double"==j){var b=Xc(ke(f,a.line).text,a);Cc(a,n)?Ic(c.doc,b.from,o):Ic(c.doc,n,b.to)}else"triple"==j&&(Cc(a,n)?Ic(c.doc,o,Fc(f,Ac(a.line,0))):Ic(c.doc,n,Fc(f,Ac(a.line+1,0))))}}function u(a){var b=++s,e=Qb(c,a,!0);if(e)if(Bc(e,l)){var h=a.clientY<r.top?-20:a.clientY>r.bottom?20:0;h&&setTimeout(Eb(c,function(){s==b&&(d.scroller.scrollTop+=h,u(a))}),50)}else{c.state.focused||lc(c),l=e,q(e);var g=K(d,f);(e.line>=g.to||e.line<g.from)&&setTimeout(Eb(c,function(){s==b&&u(a)
5
+ }),150)}}function v(a){s=1/0,Ee(a),Mb(c),Le(document,"mousemove",w),Le(document,"mouseup",x)}if(!Qe(this,a)){var c=this,d=c.display,f=c.doc,g=f.sel;if(g.shift=a.shiftKey,Pb(d,a))return e||(d.scroller.draggable=!1,setTimeout(function(){d.scroller.draggable=!0},100)),void 0;if(!Wb(c,a)){var h=Qb(c,a);switch(Je(a)){case 3:return t&&oc.call(c,c,a),void 0;case 2:return e&&(c.state.lastMiddleDown=+new Date),h&&Ic(c.doc,h),setTimeout(ef(Mb,c),20),Ee(a),void 0}if(!h)return Ie(a)==d.scroller&&Ee(a),void 0;c.state.focused||lc(c);var i=+new Date,j="single";if(Sb&&Sb.time>i-400&&Bc(Sb.pos,h))j="triple",Ee(a),setTimeout(ef(Mb,c),20),Yc(c,h.line);else if(Rb&&Rb.time>i-400&&Bc(Rb.pos,h)){j="double",Sb={time:i,pos:h},Ee(a);var k=Xc(ke(f,h.line).text,h);Ic(c.doc,k.from,k.to)}else Rb={time:i,pos:h};var l=h;if(c.options.dragDrop&&pf&&!Nb(c)&&!Bc(g.from,g.to)&&!Cc(h,g.from)&&!Cc(g.to,h)&&"single"==j){var m=Eb(c,function(b){e&&(d.scroller.draggable=!1),c.state.draggingText=!1,Le(document,"mouseup",m),Le(d.scroller,"drop",m),Math.abs(a.clientX-b.clientX)+Math.abs(a.clientY-b.clientY)<10&&(Ee(b),Ic(c.doc,h),Mb(c))});return e&&(d.scroller.draggable=!0),c.state.draggingText=m,d.scroller.dragDrop&&d.scroller.dragDrop(),Ke(document,"mouseup",m),Ke(d.scroller,"drop",m),void 0}Ee(a),"single"==j&&Ic(c.doc,Fc(f,h));var n=g.from,o=g.to,p=h,r=of(d.wrapper),s=0,w=Eb(c,function(a){b||Je(a)?u(a):v(a)}),x=Eb(c,v);Ke(document,"mousemove",w),Ke(document,"mouseup",x)}}}function Ub(a,b,c,d,e){try{var f=b.clientX,g=b.clientY}catch(b){return!1}if(f>=Math.floor(of(a.display.gutters).right))return!1;d&&Ee(b);var h=a.display,i=of(h.lineDiv);if(g>i.bottom||!Se(a,c))return Ge(b);g-=i.top-h.viewOffset;for(var j=0;j<a.options.gutters.length;++j){var k=h.gutters.childNodes[j];if(k&&of(k).right>=f){var l=pe(a.doc,g),m=a.options.gutters[j];return e(a,c,a,l,m,b),Ge(b)}}}function Vb(a,b){return Se(a,"gutterContextMenu")?Ub(a,b,"gutterContextMenu",!1,Me):!1}function Wb(a,b){return Ub(a,b,"gutterClick",!0,Pe)}function Yb(a){var c=this;if(!(Qe(c,a)||Pb(c.display,a)||c.options.onDragEvent&&c.options.onDragEvent(c,De(a)))){Ee(a),b&&(Xb=+new Date);var d=Qb(c,a,!0),e=a.dataTransfer.files;if(d&&!Nb(c))if(e&&e.length&&window.FileReader&&window.File)for(var f=e.length,g=Array(f),h=0,i=function(a,b){var e=new FileReader;e.onload=function(){g[b]=e.result,++h==f&&(d=Fc(c.doc,d),tc(c.doc,{from:d,to:d,text:vf(g.join("\n")),origin:"paste"},"around"))},e.readAsText(a)},j=0;f>j;++j)i(e[j],j);else{if(c.state.draggingText&&!Cc(d,c.doc.sel.from)&&!Cc(c.doc.sel.to,d))return c.state.draggingText(a),setTimeout(ef(Mb,c),20),void 0;try{var g=a.dataTransfer.getData("Text");if(g){var k=c.doc.sel.from,l=c.doc.sel.to;Kc(c.doc,d,d),c.state.draggingText&&zc(c.doc,"",k,l,"paste"),c.replaceSelection(g,null,"paste"),Mb(c),lc(c)}}catch(a){}}}}function Zb(a,c){if(b&&(!a.state.draggingText||+new Date-Xb<100))return He(c),void 0;if(!Qe(a,c)&&!Pb(a.display,c)){var d=a.getSelection();if(c.dataTransfer.setData("Text",d),c.dataTransfer.setDragImage&&!i){var e=kf("img",null,null,"position: fixed; left: 0; top: 0;");h&&(e.width=e.height=1,a.display.wrapper.appendChild(e),e._top=e.offsetTop),c.dataTransfer.setDragImage(e,0,0),h&&e.parentNode.removeChild(e)}}}function $b(b,c){Math.abs(b.doc.scrollTop-c)<2||(b.doc.scrollTop=c,a||P(b,[],c),b.display.scroller.scrollTop!=c&&(b.display.scroller.scrollTop=c),b.display.scrollbarV.scrollTop!=c&&(b.display.scrollbarV.scrollTop=c),a&&P(b,[]),ab(b,100))}function _b(a,b,c){(c?b==a.doc.scrollLeft:Math.abs(a.doc.scrollLeft-b)<2)||(b=Math.min(b,a.display.scroller.scrollWidth-a.display.scroller.clientWidth),a.doc.scrollLeft=b,L(a),a.display.scroller.scrollLeft!=b&&(a.display.scroller.scrollLeft=b),a.display.scrollbarH.scrollLeft!=b&&(a.display.scrollbarH.scrollLeft=b))}function cc(b,c){var d=c.wheelDeltaX,f=c.wheelDeltaY;null==d&&c.detail&&c.axis==c.HORIZONTAL_AXIS&&(d=c.detail),null==f&&c.detail&&c.axis==c.VERTICAL_AXIS?f=c.detail:null==f&&(f=c.wheelDelta);var g=b.display,i=g.scroller;if(d&&i.scrollWidth>i.clientWidth||f&&i.scrollHeight>i.clientHeight){if(f&&p&&e)for(var j=c.target;j!=i;j=j.parentNode)if(j.lineObj){b.display.currentWheelTarget=j;break}if(d&&!a&&!h&&null!=bc)return f&&$b(b,Math.max(0,Math.min(i.scrollTop+f*bc,i.scrollHeight-i.clientHeight))),_b(b,Math.max(0,Math.min(i.scrollLeft+d*bc,i.scrollWidth-i.clientWidth))),Ee(c),g.wheelStartX=null,void 0;if(f&&null!=bc){var k=f*bc,l=b.doc.scrollTop,m=l+g.wrapper.clientHeight;0>k?l=Math.max(0,l+k-50):m=Math.min(b.doc.height,m+k+50),P(b,[],{top:l,bottom:m})}20>ac&&(null==g.wheelStartX?(g.wheelStartX=i.scrollLeft,g.wheelStartY=i.scrollTop,g.wheelDX=d,g.wheelDY=f,setTimeout(function(){if(null!=g.wheelStartX){var a=i.scrollLeft-g.wheelStartX,b=i.scrollTop-g.wheelStartY,c=b&&g.wheelDY&&b/g.wheelDY||a&&g.wheelDX&&a/g.wheelDX;g.wheelStartX=g.wheelStartY=null,c&&(bc=(bc*ac+c)/(ac+1),++ac)}},200)):(g.wheelDX+=d,g.wheelDY+=f))}}function dc(a,b,c){if("string"==typeof b&&(b=id[b],!b))return!1;a.display.pollingFast&&Kb(a)&&(a.display.pollingFast=!1);var d=a.doc,e=d.sel.shift,f=!1;try{Nb(a)&&(a.state.suppressEdits=!0),c&&(d.sel.shift=!1),f=b(a)!=Ve}finally{d.sel.shift=e,a.state.suppressEdits=!1}return f}function ec(a){var b=a.state.keyMaps.slice(0);return a.options.extraKeys&&b.push(a.options.extraKeys),b.push(a.options.keyMap),b}function gc(a,b){var c=kd(a.options.keyMap),e=c.auto;clearTimeout(fc),e&&!md(b)&&(fc=setTimeout(function(){kd(a.options.keyMap)==c&&(a.options.keyMap=e.call?e.call(null,a):e,C(a))},50));var f=nd(b,!0),g=!1;if(!f)return!1;var h=ec(a);return g=b.shiftKey?ld("Shift-"+f,h,function(b){return dc(a,b,!0)})||ld(f,h,function(b){return("string"==typeof b?/^go[A-Z]/.test(b):b.motion)?dc(a,b):void 0}):ld(f,h,function(b){return dc(a,b)}),g&&(Ee(b),_(a),d&&(b.oldKeyCode=b.keyCode,b.keyCode=0),Pe(a,"keyHandled",a,f,b)),g}function hc(a,b,c){var d=ld("'"+c+"'",ec(a),function(b){return dc(a,b,!0)});return d&&(Ee(b),_(a),Pe(a,"keyHandled",a,"'"+c+"'",b)),d}function jc(a){var c=this;if(c.state.focused||lc(c),!(Qe(c,a)||c.options.onKeyEvent&&c.options.onKeyEvent(c,De(a)))){b&&27==a.keyCode&&(a.returnValue=!1);var d=a.keyCode;c.doc.sel.shift=16==d||a.shiftKey;var e=gc(c,a);h&&(ic=e?d:null,!e&&88==d&&!xf&&(p?a.metaKey:a.ctrlKey)&&c.replaceSelection(""))}}function kc(a){var c=this;if(!(Qe(c,a)||c.options.onKeyEvent&&c.options.onKeyEvent(c,De(a)))){var e=a.keyCode,f=a.charCode;if(h&&e==ic)return ic=null,Ee(a),void 0;if(!(h&&(!a.which||a.which<10)||j)||!gc(c,a)){var g=String.fromCharCode(null==f?e:f);this.options.electricChars&&this.doc.mode.electricChars&&this.options.smartIndent&&!Nb(this)&&this.doc.mode.electricChars.indexOf(g)>-1&&setTimeout(Eb(c,function(){Tc(c,c.doc.sel.to.line,"smart")}),75),hc(c,a,g)||(b&&!d&&(c.display.inputHasSelection=null),Jb(c))}}}function lc(a){"nocursor"!=a.options.readOnly&&(a.state.focused||(Me(a,"focus",a),a.state.focused=!0,-1==a.display.wrapper.className.search(/\bCodeMirror-focused\b/)&&(a.display.wrapper.className+=" CodeMirror-focused"),a.curOp||(Lb(a,!0),e&&setTimeout(ef(Lb,a,!0),0))),Ib(a),_(a))}function mc(a){a.state.focused&&(Me(a,"blur",a),a.state.focused=!1,a.display.wrapper.className=a.display.wrapper.className.replace(" CodeMirror-focused","")),clearInterval(a.display.blinker),setTimeout(function(){a.state.focused||(a.doc.sel.shift=!1)},150)}function oc(a,c){function k(){if(null!=e.input.selectionStart){var a=e.input.value="\u200b"+(Bc(f.from,f.to)?"":e.input.value);e.prevInput="\u200b",e.input.selectionStart=1,e.input.selectionEnd=a.length}}function l(){if(e.inputDiv.style.position="relative",e.input.style.cssText=j,d&&(e.scrollbarV.scrollTop=e.scroller.scrollTop=i),Ib(a),null!=e.input.selectionStart){(!b||d)&&k(),clearTimeout(nc);var c=0,f=function(){" "==e.prevInput&&0==e.input.selectionStart?Eb(a,id.selectAll)(a):c++<10?nc=setTimeout(f,500):Lb(a)};nc=setTimeout(f,200)}}if(!Qe(a,c,"contextmenu")){var e=a.display,f=a.doc.sel;if(!Pb(e,c)&&!Vb(a,c)){var g=Qb(a,c),i=e.scroller.scrollTop;if(g&&!h){(Bc(f.from,f.to)||Cc(g,f.from)||!Cc(g,f.to))&&Eb(a,Kc)(a.doc,g,g);var j=e.input.style.cssText;if(e.inputDiv.style.position="absolute",e.input.style.cssText="position: fixed; width: 30px; height: 30px; top: "+(c.clientY-5)+"px; left: "+(c.clientX-5)+"px; z-index: 1000; background: white; outline: none;"+"border-width: 0; outline: none; overflow: hidden; opacity: .05; -ms-opacity: .05; filter: alpha(opacity=5);",Mb(a),Lb(a,!0),Bc(f.from,f.to)&&(e.input.value=e.prevInput=" "),b&&!d&&k(),t){He(c);var m=function(){Le(window,"mouseup",m),setTimeout(l,20)};Ke(window,"mouseup",m)}else setTimeout(l,50)}}}}function qc(a,b,c){if(!Cc(b.from,c))return Fc(a,c);var d=b.text.length-1-(b.to.line-b.from.line);if(c.line>b.to.line+d){var e=c.line-d,f=a.first+a.size-1;return e>f?Ac(f,ke(a,f).text.length):Gc(c,ke(a,e).text.length)}if(c.line==b.to.line+d)return Gc(c,$e(b.text).length+(1==b.text.length?b.from.ch:0)+ke(a,b.to.line).text.length-b.to.ch);var g=c.line-b.from.line;return Gc(c,b.text[g].length+(g?0:b.from.ch))}function rc(a,b,c){if(c&&"object"==typeof c)return{anchor:qc(a,b,c.anchor),head:qc(a,b,c.head)};if("start"==c)return{anchor:b.from,head:b.from};var d=pc(b);if("around"==c)return{anchor:b.from,head:d};if("end"==c)return{anchor:d,head:d};var e=function(a){if(Cc(a,b.from))return a;if(!Cc(b.to,a))return d;var c=a.line+b.text.length-(b.to.line-b.from.line)-1,e=a.ch;return a.line==b.to.line&&(e+=d.ch-b.to.ch),Ac(c,e)};return{anchor:e(a.sel.anchor),head:e(a.sel.head)}}function sc(a,b,c){var d={canceled:!1,from:b.from,to:b.to,text:b.text,origin:b.origin,cancel:function(){this.canceled=!0}};return c&&(d.update=function(b,c,d,e){b&&(this.from=Fc(a,b)),c&&(this.to=Fc(a,c)),d&&(this.text=d),void 0!==e&&(this.origin=e)}),Me(a,"beforeChange",a,d),a.cm&&Me(a.cm,"beforeChange",a.cm,d),d.canceled?null:{from:d.from,to:d.to,text:d.text,origin:d.origin}}function tc(a,b,c,d){if(a.cm){if(!a.cm.curOp)return Eb(a.cm,tc)(a,b,c,d);if(a.cm.state.suppressEdits)return}if(!(Se(a,"beforeChange")||a.cm&&Se(a.cm,"beforeChange"))||(b=sc(a,b,!0))){var e=u&&!d&&Ad(a,b.from,b.to);if(e){for(var f=e.length-1;f>=1;--f)uc(a,{from:e[f].from,to:e[f].to,text:[""]});e.length&&uc(a,{from:e[0].from,to:e[0].to,text:b.text},c)}else uc(a,b,c)}}function uc(a,b,c){var d=rc(a,b,c);ve(a,b,d,a.cm?a.cm.curOp.id:0/0),xc(a,b,d,yd(a,b));var e=[];ie(a,function(a,c){c||-1!=af(e,a.history)||(Be(a.history,b),e.push(a.history)),xc(a,b,null,yd(a,b))})}function vc(a,b){if(!a.cm||!a.cm.state.suppressEdits){var c=a.history,d=("undo"==b?c.done:c.undone).pop();if(d){var e={changes:[],anchorBefore:d.anchorAfter,headBefore:d.headAfter,anchorAfter:d.anchorBefore,headAfter:d.headBefore,generation:c.generation};("undo"==b?c.undone:c.done).push(e),c.generation=d.generation||++c.maxGeneration;for(var f=Se(a,"beforeChange")||a.cm&&Se(a.cm,"beforeChange"),g=d.changes.length-1;g>=0;--g){var h=d.changes[g];if(h.origin=b,f&&!sc(a,h,!1))return("undo"==b?c.done:c.undone).length=0,void 0;e.changes.push(ue(a,h));var i=g?rc(a,h,null):{anchor:d.anchorBefore,head:d.headBefore};xc(a,h,i,zd(a,h));var j=[];ie(a,function(a,b){b||-1!=af(j,a.history)||(Be(a.history,h),j.push(a.history)),xc(a,h,null,zd(a,h))})}}}}function wc(a,b){function c(a){return Ac(a.line+b,a.ch)}a.first+=b,a.cm&&Hb(a.cm,a.first,a.first,b),a.sel.head=c(a.sel.head),a.sel.anchor=c(a.sel.anchor),a.sel.from=c(a.sel.from),a.sel.to=c(a.sel.to)}function xc(a,b,c,d){if(a.cm&&!a.cm.curOp)return Eb(a.cm,xc)(a,b,c,d);if(b.to.line<a.first)return wc(a,b.text.length-1-(b.to.line-b.from.line)),void 0;if(!(b.from.line>a.lastLine())){if(b.from.line<a.first){var e=b.text.length-1-(a.first-b.from.line);wc(a,e),b={from:Ac(a.first,0),to:Ac(b.to.line+e,b.to.ch),text:[$e(b.text)],origin:b.origin}}var f=a.lastLine();b.to.line>f&&(b={from:b.from,to:Ac(f,ke(a,f).text.length),text:[b.text[0]],origin:b.origin}),b.removed=le(a,b.from,b.to),c||(c=rc(a,b,null)),a.cm?yc(a.cm,b,d,c):be(a,b,d,c)}}function yc(a,b,c,d){var e=a.doc,f=a.display,g=b.from,h=b.to,i=!1,j=g.line;a.options.lineWrapping||(j=oe(Ed(e,ke(e,g.line))),e.iter(j,h.line+1,function(a){return a==f.maxLine?(i=!0,!0):void 0})),Cc(e.sel.head,b.from)||Cc(b.to,e.sel.head)||(a.curOp.cursorActivity=!0),be(e,b,c,d,A(a)),a.options.lineWrapping||(e.iter(j,g.line+b.text.length,function(a){var b=G(e,a);b>f.maxLineLength&&(f.maxLine=a,f.maxLineLength=b,f.maxLineChanged=!0,i=!1)}),i&&(a.curOp.updateMaxLine=!0)),e.frontier=Math.min(e.frontier,g.line),ab(a,400);var k=b.text.length-(h.line-g.line)-1;if(Hb(a,g.line,h.line+1,k),Se(a,"change")){var l={from:g,to:h,text:b.text,removed:b.removed,origin:b.origin};if(a.curOp.textChanged){for(var m=a.curOp.textChanged;m.next;m=m.next);m.next=l}else a.curOp.textChanged=l}}function zc(a,b,c,d,e){if(d||(d=c),Cc(d,c)){var f=d;d=c,c=f}"string"==typeof b&&(b=vf(b)),tc(a,{from:c,to:d,text:b,origin:e},null)}function Ac(a,b){return this instanceof Ac?(this.line=a,this.ch=b,void 0):new Ac(a,b)}function Bc(a,b){return a.line==b.line&&a.ch==b.ch}function Cc(a,b){return a.line<b.line||a.line==b.line&&a.ch<b.ch}function Dc(a){return Ac(a.line,a.ch)}function Ec(a,b){return Math.max(a.first,Math.min(b,a.first+a.size-1))}function Fc(a,b){if(b.line<a.first)return Ac(a.first,0);var c=a.first+a.size-1;return b.line>c?Ac(c,ke(a,c).text.length):Gc(b,ke(a,b.line).text.length)}function Gc(a,b){var c=a.ch;return null==c||c>b?Ac(a.line,b):0>c?Ac(a.line,0):a}function Hc(a,b){return b>=a.first&&b<a.first+a.size}function Ic(a,b,c,d){if(a.sel.shift||a.sel.extend){var e=a.sel.anchor;if(c){var f=Cc(b,e);f!=Cc(c,e)?(e=b,b=c):f!=Cc(b,c)&&(b=c)}Kc(a,e,b,d)}else Kc(a,b,c||b,d);a.cm&&(a.cm.curOp.userSelChange=!0)}function Jc(a,b,c){var d={anchor:b,head:c};return Me(a,"beforeSelectionChange",a,d),a.cm&&Me(a.cm,"beforeSelectionChange",a.cm,d),d.anchor=Fc(a,d.anchor),d.head=Fc(a,d.head),d}function Kc(a,b,c,d,e){if(!e&&Se(a,"beforeSelectionChange")||a.cm&&Se(a.cm,"beforeSelectionChange")){var f=Jc(a,b,c);c=f.head,b=f.anchor}var g=a.sel;if(g.goalColumn=null,(e||!Bc(b,g.anchor))&&(b=Mc(a,b,d,"push"!=e)),(e||!Bc(c,g.head))&&(c=Mc(a,c,d,"push"!=e)),!Bc(g.anchor,b)||!Bc(g.head,c)){g.anchor=b,g.head=c;var h=Cc(c,b);g.from=h?c:b,g.to=h?b:c,a.cm&&(a.cm.curOp.updateInput=a.cm.curOp.selectionChanged=a.cm.curOp.cursorActivity=!0),Pe(a,"cursorActivity",a)}}function Lc(a){Kc(a.doc,a.doc.sel.from,a.doc.sel.to,null,"push")}function Mc(a,b,c,d){var e=!1,f=b,g=c||1;a.cantEdit=!1;a:for(;;){var h=ke(a,f.line);if(h.markedSpans)for(var i=0;i<h.markedSpans.length;++i){var j=h.markedSpans[i],k=j.marker;if((null==j.from||(k.inclusiveLeft?j.from<=f.ch:j.from<f.ch))&&(null==j.to||(k.inclusiveRight?j.to>=f.ch:j.to>f.ch))){if(d&&(Me(k,"beforeCursorEnter"),k.explicitlyCleared)){if(h.markedSpans){--i;continue}break}if(!k.atomic)continue;var l=k.find()[0>g?"from":"to"];if(Bc(l,f)&&(l.ch+=g,l.ch<0?l=l.line>a.first?Fc(a,Ac(l.line-1)):null:l.ch>h.text.length&&(l=l.line<a.first+a.size-1?Ac(l.line+1,0):null),!l)){if(e)return d?(a.cantEdit=!0,Ac(a.first,0)):Mc(a,b,c,!0);e=!0,l=b,g=-g}f=l;continue a}}return f}}function Nc(a){var b=Oc(a,a.doc.sel.head,a.options.cursorScrollMargin);if(a.state.focused){var c=a.display,d=of(c.sizer),e=null;if(b.top+d.top<0?e=!0:b.bottom+d.top>(window.innerHeight||document.documentElement.clientHeight)&&(e=!1),null!=e&&!m){var f="none"==c.cursor.style.display;f&&(c.cursor.style.display="",c.cursor.style.left=b.left+"px",c.cursor.style.top=b.top-c.viewOffset+"px"),c.cursor.scrollIntoView(e),f&&(c.cursor.style.display="none")}}}function Oc(a,b,c){for(null==c&&(c=0);;){var d=!1,e=ub(a,b),f=Qc(a,e.left,e.top-c,e.left,e.bottom+c),g=a.doc.scrollTop,h=a.doc.scrollLeft;if(null!=f.scrollTop&&($b(a,f.scrollTop),Math.abs(a.doc.scrollTop-g)>1&&(d=!0)),null!=f.scrollLeft&&(_b(a,f.scrollLeft),Math.abs(a.doc.scrollLeft-h)>1&&(d=!0)),!d)return e}}function Pc(a,b,c,d,e){var f=Qc(a,b,c,d,e);null!=f.scrollTop&&$b(a,f.scrollTop),null!=f.scrollLeft&&_b(a,f.scrollLeft)}function Qc(a,b,c,d,e){var f=a.display,g=zb(a.display);0>c&&(c=0);var h=f.scroller.clientHeight-Ue,i=f.scroller.scrollTop,j={},k=a.doc.height+fb(f),l=g>c,m=e>k-g;if(i>c)j.scrollTop=l?0:c;else if(e>i+h){var n=Math.min(c,(m?k:e)-h);n!=i&&(j.scrollTop=n)}var o=f.scroller.clientWidth-Ue,p=f.scroller.scrollLeft;b+=f.gutters.offsetWidth,d+=f.gutters.offsetWidth;var q=f.gutters.offsetWidth,r=q+10>b;return p+q>b||r?(r&&(b=0),j.scrollLeft=Math.max(0,b-10-q)):d>o+p-3&&(j.scrollLeft=d+10-o),j}function Rc(a,b,c){a.curOp.updateScrollPos={scrollLeft:null==b?a.doc.scrollLeft:b,scrollTop:null==c?a.doc.scrollTop:c}}function Sc(a,b,c){var d=a.curOp.updateScrollPos||(a.curOp.updateScrollPos={scrollLeft:a.doc.scrollLeft,scrollTop:a.doc.scrollTop}),e=a.display.scroller;d.scrollTop=Math.max(0,Math.min(e.scrollHeight-e.clientHeight,d.scrollTop+c)),d.scrollLeft=Math.max(0,Math.min(e.scrollWidth-e.clientWidth,d.scrollLeft+b))}function Tc(a,b,c,d){var e=a.doc;if(null==c&&(c="add"),"smart"==c)if(a.doc.mode.indent)var f=db(a,b);else c="prev";var k,g=a.options.tabSize,h=ke(e,b),i=Xe(h.text,null,g),j=h.text.match(/^\s*/)[0];if("smart"==c&&(k=a.doc.mode.indent(f,h.text.slice(j.length),h.text),k==Ve)){if(!d)return;c="prev"}"prev"==c?k=b>e.first?Xe(ke(e,b-1).text,null,g):0:"add"==c?k=i+a.options.indentUnit:"subtract"==c?k=i-a.options.indentUnit:"number"==typeof c&&(k=i+c),k=Math.max(0,k);var l="",m=0;if(a.options.indentWithTabs)for(var n=Math.floor(k/g);n;--n)m+=g,l+=" ";k>m&&(l+=Ze(k-m)),l!=j&&zc(a.doc,l,Ac(b,0),Ac(b,j.length),"+input"),h.stateAfter=null}function Uc(a,b,c){var d=b,e=b,f=a.doc;return"number"==typeof b?e=ke(f,Ec(f,b)):d=oe(b),null==d?null:c(e,d)?(Hb(a,d,d+1),e):null}function Vc(a,b,c,d,e){function k(){var b=f+c;return b<a.first||b>=a.first+a.size?j=!1:(f=b,i=ke(a,b))}function l(a){var b=(e?Kf:Lf)(i,g,c,!0);if(null==b){if(a||!k())return j=!1;g=e?(0>c?Df:Cf)(i):0>c?i.text.length:0}else g=b;return!0}var f=b.line,g=b.ch,h=c,i=ke(a,f),j=!0;if("char"==d)l();else if("column"==d)l(!0);else if("word"==d||"group"==d)for(var m=null,n="group"==d,o=!0;!(0>c)||l(!o);o=!1){var p=i.text.charAt(g)||"\n",q=gf(p)?"w":n?/\s/.test(p)?null:"p":null;if(m&&m!=q){0>c&&(c=1,l());break}if(q&&(m=q),c>0&&!l(!o))break}var r=Mc(a,Ac(f,g),h,!0);return j||(r.hitSide=!0),r}function Wc(a,b,c,d){var g,e=a.doc,f=b.left;if("page"==d){var h=Math.min(a.display.wrapper.clientHeight,window.innerHeight||document.documentElement.clientHeight);g=b.top+c*(h-(0>c?1.5:.5)*zb(a.display))}else"line"==d&&(g=c>0?b.bottom+3:b.top-3);for(;;){var i=wb(a,f,g);if(!i.outside)break;if(0>c?0>=g:g>=e.height){i.hitSide=!0;break}g+=5*c}return i}function Xc(a,b){var c=b.ch,d=b.ch;if(a){(b.xRel<0||d==a.length)&&c?--c:++d;for(var e=a.charAt(c),f=gf(e)?gf:/\s/.test(e)?function(a){return/\s/.test(a)}:function(a){return!/\s/.test(a)&&!gf(a)};c>0&&f(a.charAt(c-1));)--c;for(;d<a.length&&f(a.charAt(d));)++d}return{from:Ac(b.line,c),to:Ac(b.line,d)}}function Yc(a,b){Ic(a.doc,Ac(b,0),Fc(a.doc,Ac(b+1,0)))}function _c(a,b,c,d){w.defaults[a]=b,c&&(Zc[a]=d?function(a,b,d){d!=ad&&c(a,b,d)}:c)}function gd(a,b){if(b===!0)return b;if(a.copyState)return a.copyState(b);var c={};for(var d in b){var e=b[d];e instanceof Array&&(e=e.concat([])),c[d]=e}return c}function hd(a,b,c){return a.startState?a.startState(b,c):!0}function kd(a){return"string"==typeof a?jd[a]:a}function ld(a,b,c){function d(b){b=kd(b);var e=b[a];if(e===!1)return"stop";if(null!=e&&c(e))return!0;if(b.nofallthrough)return"stop";var f=b.fallthrough;if(null==f)return!1;if("[object Array]"!=Object.prototype.toString.call(f))return d(f);for(var g=0,h=f.length;h>g;++g){var i=d(f[g]);if(i)return i}return!1}for(var e=0;e<b.length;++e){var f=d(b[e]);if(f)return"stop"!=f}}function md(a){var b=yf[a.keyCode];return"Ctrl"==b||"Alt"==b||"Shift"==b||"Mod"==b}function nd(a,b){if(h&&34==a.keyCode&&a["char"])return!1;var c=yf[a.keyCode];return null==c||a.altGraphKey?!1:(a.altKey&&(c="Alt-"+c),(s?a.metaKey:a.ctrlKey)&&(c="Ctrl-"+c),(s?a.ctrlKey:a.metaKey)&&(c="Cmd-"+c),!b&&a.shiftKey&&(c="Shift-"+c),c)}function od(a,b){this.pos=this.start=0,this.string=a,this.tabSize=b||8,this.lastColumnPos=this.lastColumnValue=0}function pd(a,b){this.lines=[],this.type=b,this.doc=a}function qd(a,b,c,d,e){if(d&&d.shared)return sd(a,b,c,d,e);if(a.cm&&!a.cm.curOp)return Eb(a.cm,qd)(a,b,c,d,e);var f=new pd(a,e);if("range"==e&&!Cc(b,c))return f;d&&cf(d,f),f.replacedWith&&(f.collapsed=!0,f.replacedWith=kf("span",[f.replacedWith],"CodeMirror-widget"),d.handleMouseEvents||(f.replacedWith.ignoreEvents=!0)),f.collapsed&&(v=!0),f.addToHistory&&ve(a,{from:b,to:c,origin:"markText"},{head:a.sel.head,anchor:a.sel.anchor},0/0);var i,j,l,g=b.line,h=0,k=a.cm;if(a.iter(g,c.line+1,function(d){k&&f.collapsed&&!k.options.lineWrapping&&Ed(a,d)==k.display.maxLine&&(l=!0);var e={from:null,to:null,marker:f};h+=d.text.length,g==b.line&&(e.from=b.ch,h-=b.ch),g==c.line&&(e.to=c.ch,h-=d.text.length-c.ch),f.collapsed&&(g==c.line&&(j=Bd(d,c.ch)),g==b.line?i=Bd(d,b.ch):ne(d,0)),vd(d,e),++g}),f.collapsed&&a.iter(b.line,c.line+1,function(b){Fd(a,b)&&ne(b,0)}),f.clearOnEnter&&Ke(f,"beforeCursorEnter",function(){f.clear()}),f.readOnly&&(u=!0,(a.history.done.length||a.history.undone.length)&&a.clearHistory()),f.collapsed){if(i!=j)throw new Error("Inserting collapsed marker overlapping an existing one");f.size=h,f.atomic=!0}return k&&(l&&(k.curOp.updateMaxLine=!0),(f.className||f.title||f.startStyle||f.endStyle||f.collapsed)&&Hb(k,b.line,c.line+1),f.atomic&&Lc(k)),f}function rd(a,b){this.markers=a,this.primary=b;for(var c=0,d=this;c<a.length;++c)a[c].parent=this,Ke(a[c],"clear",function(){d.clear()})}function sd(a,b,c,d,e){d=cf(d),d.shared=!1;var f=[qd(a,b,c,d,e)],g=f[0],h=d.replacedWith;return ie(a,function(a){h&&(d.replacedWith=h.cloneNode(!0)),f.push(qd(a,Fc(a,b),Fc(a,c),d,e));for(var i=0;i<a.linked.length;++i)if(a.linked[i].isParent)return;g=$e(f)}),new rd(f,g)}function td(a,b){if(a)for(var c=0;c<a.length;++c){var d=a[c];if(d.marker==b)return d}}function ud(a,b){for(var c,d=0;d<a.length;++d)a[d]!=b&&(c||(c=[])).push(a[d]);return c}function vd(a,b){a.markedSpans=a.markedSpans?a.markedSpans.concat([b]):[b],b.marker.attachLine(a)}function wd(a,b,c){if(a)for(var e,d=0;d<a.length;++d){var f=a[d],g=f.marker,h=null==f.from||(g.inclusiveLeft?f.from<=b:f.from<b);if(h||"bookmark"==g.type&&f.from==b&&(!c||!f.marker.insertLeft)){var i=null==f.to||(g.inclusiveRight?f.to>=b:f.to>b);(e||(e=[])).push({from:f.from,to:i?null:f.to,marker:g})}}return e}function xd(a,b,c){if(a)for(var e,d=0;d<a.length;++d){var f=a[d],g=f.marker,h=null==f.to||(g.inclusiveRight?f.to>=b:f.to>b);if(h||"bookmark"==g.type&&f.from==b&&(!c||f.marker.insertLeft)){var i=null==f.from||(g.inclusiveLeft?f.from<=b:f.from<b);(e||(e=[])).push({from:i?null:f.from-b,to:null==f.to?null:f.to-b,marker:g})}}return e}function yd(a,b){var c=Hc(a,b.from.line)&&ke(a,b.from.line).markedSpans,d=Hc(a,b.to.line)&&ke(a,b.to.line).markedSpans;if(!c&&!d)return null;var e=b.from.ch,f=b.to.ch,g=Bc(b.from,b.to),h=wd(c,e,g),i=xd(d,f,g),j=1==b.text.length,k=$e(b.text).length+(j?e:0);if(h)for(var l=0;l<h.length;++l){var m=h[l];if(null==m.to){var n=td(i,m.marker);n?j&&(m.to=null==n.to?null:n.to+k):m.to=e}}if(i)for(var l=0;l<i.length;++l){var m=i[l];if(null!=m.to&&(m.to+=k),null==m.from){var n=td(h,m.marker);n||(m.from=k,j&&(h||(h=[])).push(m))}else m.from+=k,j&&(h||(h=[])).push(m)}if(j&&h){for(var l=0;l<h.length;++l)null!=h[l].from&&h[l].from==h[l].to&&"bookmark"!=h[l].marker.type&&h.splice(l--,1);h.length||(h=null)}var o=[h];if(!j){var q,p=b.text.length-2;if(p>0&&h)for(var l=0;l<h.length;++l)null==h[l].to&&(q||(q=[])).push({from:null,to:null,marker:h[l].marker});for(var l=0;p>l;++l)o.push(q);o.push(i)}return o}function zd(a,b){var c=xe(a,b),d=yd(a,b);if(!c)return d;if(!d)return c;for(var e=0;e<c.length;++e){var f=c[e],g=d[e];if(f&&g)a:for(var h=0;h<g.length;++h){for(var i=g[h],j=0;j<f.length;++j)if(f[j].marker==i.marker)continue a;f.push(i)}else g&&(c[e]=g)}return c}function Ad(a,b,c){var d=null;if(a.iter(b.line,c.line+1,function(a){if(a.markedSpans)for(var b=0;b<a.markedSpans.length;++b){var c=a.markedSpans[b].marker;!c.readOnly||d&&-1!=af(d,c)||(d||(d=[])).push(c)}}),!d)return null;for(var e=[{from:b,to:c}],f=0;f<d.length;++f)for(var g=d[f],h=g.find(),i=0;i<e.length;++i){var j=e[i];if(!Cc(j.to,h.from)&&!Cc(h.to,j.from)){var k=[i,1];(Cc(j.from,h.from)||!g.inclusiveLeft&&Bc(j.from,h.from))&&k.push({from:j.from,to:h.from}),(Cc(h.to,j.to)||!g.inclusiveRight&&Bc(j.to,h.to))&&k.push({from:h.to,to:j.to}),e.splice.apply(e,k),i+=k.length-1}}return e}function Bd(a,b){var d,c=v&&a.markedSpans;if(c)for(var e,f=0;f<c.length;++f)e=c[f],e.marker.collapsed&&(null==e.from||e.from<b)&&(null==e.to||e.to>b)&&(!d||d.width<e.marker.width)&&(d=e.marker);return d}function Cd(a){return Bd(a,-1)}function Dd(a){return Bd(a,a.text.length+1)}function Ed(a,b){for(var c;c=Cd(b);)b=ke(a,c.find().from.line);return b}function Fd(a,b){var c=v&&b.markedSpans;if(c)for(var d,e=0;e<c.length;++e)if(d=c[e],d.marker.collapsed){if(null==d.from)return!0;if(!d.marker.replacedWith&&0==d.from&&d.marker.inclusiveLeft&&Gd(a,b,d))return!0}}function Gd(a,b,c){if(null==c.to){var d=c.marker.find().to,e=ke(a,d.line);return Gd(a,e,td(e.markedSpans,c.marker))}if(c.marker.inclusiveRight&&c.to==b.text.length)return!0;for(var f,g=0;g<b.markedSpans.length;++g)if(f=b.markedSpans[g],f.marker.collapsed&&!f.marker.replacedWith&&f.from==c.to&&(f.marker.inclusiveLeft||c.marker.inclusiveRight)&&Gd(a,b,f))return!0}function Hd(a){var b=a.markedSpans;if(b){for(var c=0;c<b.length;++c)b[c].marker.detachLine(a);a.markedSpans=null}}function Id(a,b){if(b){for(var c=0;c<b.length;++c)b[c].marker.attachLine(a);a.markedSpans=b}}function Kd(a){return function(){var b=!this.cm.curOp;b&&Cb(this.cm);try{var c=a.apply(this,arguments)}finally{b&&Db(this.cm)}return c}}function Ld(a){return null!=a.height?a.height:(a.node.parentNode&&1==a.node.parentNode.nodeType||mf(a.cm.display.measure,kf("div",[a.node],null,"position: relative")),a.height=a.node.offsetHeight)}function Md(a,b,c,d){var e=new Jd(a,c,d);return e.noHScroll&&(a.display.alignWidgets=!0),Uc(a,b,function(b){var c=b.widgets||(b.widgets=[]);if(null==e.insertAt?c.push(e):c.splice(Math.min(c.length-1,Math.max(0,e.insertAt)),0,e),e.line=b,!Fd(a.doc,b)||e.showIfHidden){var d=qe(a,b)<a.doc.scrollTop;ne(b,b.height+Ld(e)),d&&Sc(a,0,e.height)}return!0}),e}function Od(a,b,c,d){a.text=b,a.stateAfter&&(a.stateAfter=null),a.styles&&(a.styles=null),null!=a.order&&(a.order=null),Hd(a),Id(a,c);var e=d?d(a):1;e!=a.height&&ne(a,e)}function Pd(a){a.parent=null,Hd(a)}function Qd(a,b,c,d,e){var f=c.flattenSpans;null==f&&(f=a.options.flattenSpans);var j,g=0,h=null,i=new od(b,a.options.tabSize);for(""==b&&c.blankLine&&c.blankLine(d);!i.eol();)i.pos>a.options.maxHighlightLength?(f=!1,i.pos=b.length,j=null):j=c.token(i,d),f&&h==j||(g<i.start&&e(i.start,h),g=i.start,h=j),i.start=i.pos;for(;g<i.pos;){var k=Math.min(i.pos,g+5e4);e(k,h),g=k}}function Rd(a,b,c){var d=[a.state.modeGen];Qd(a,b.text,a.doc.mode,c,function(a,b){d.push(a,b)});for(var e=0;e<a.state.overlays.length;++e){var f=a.state.overlays[e],g=1,h=0;Qd(a,b.text,f.mode,!0,function(a,b){for(var c=g;a>h;){var e=d[g];e>a&&d.splice(g,1,a,d[g+1],e),g+=2,h=Math.min(a,e)}if(b)if(f.opaque)d.splice(c,g-c,a,b),g=c+2;else for(;g>c;c+=2){var i=d[c+1];d[c+1]=i?i+" "+b:b}})}return d}function Sd(a,b){return b.styles&&b.styles[0]==a.state.modeGen||(b.styles=Rd(a,b,b.stateAfter=db(a,oe(b)))),b.styles}function Td(a,b,c){var d=a.doc.mode,e=new od(b.text,a.options.tabSize);for(""==b.text&&d.blankLine&&d.blankLine(c);!e.eol()&&e.pos<=a.options.maxHighlightLength;)d.token(e,c),e.start=e.pos}function Vd(a){return a?Ud[a]||(Ud[a]="cm-"+a.replace(/ +/g," cm-")):null}function Wd(a,c,d,f){for(var g,h=c,i=!0;g=Cd(h);)h=ke(a.doc,g.find().from.line);var j={pre:kf("pre"),col:0,pos:0,measure:null,measuredSomething:!1,cm:a,copyWidgets:f};h.textClass&&(j.pre.className=h.textClass);do{h.text&&(i=!1),j.measure=h==c&&d,j.pos=0,j.addToken=j.measure?Zd:Yd,(b||e)&&a.getOption("lineWrapping")&&(j.addToken=$d(j.addToken));var k=ae(h,j,Sd(a,h));d&&h==c&&!j.measuredSomething&&(d[0]=j.pre.appendChild(uf(a.display.measure)),j.measuredSomething=!0),k&&(h=ke(a.doc,k.to.line))}while(k);!d||j.measuredSomething||d[0]||(d[0]=j.pre.appendChild(i?kf("span","\xa0"):uf(a.display.measure))),j.pre.firstChild||Fd(a.doc,c)||j.pre.appendChild(document.createTextNode("\xa0"));var l;if(d&&b&&(l=re(h))){var m=l.length-1;l[m].from==l[m].to&&--m;var n=l[m],o=l[m-1];if(n.from+1==n.to&&o&&n.level<o.level){var p=d[j.pos-1];p&&p.parentNode.insertBefore(p.measureRight=uf(a.display.measure),p.nextSibling)}}return Me(a,"renderLine",a,c,j.pre),j.pre}function Yd(a,b,c,d,e,f){if(b){if(Xd.test(b))for(var g=document.createDocumentFragment(),h=0;;){Xd.lastIndex=h;var i=Xd.exec(b),j=i?i.index-h:b.length-h;if(j&&(g.appendChild(document.createTextNode(b.slice(h,h+j))),a.col+=j),!i)break;if(h+=j+1," "==i[0]){var k=a.cm.options.tabSize,l=k-a.col%k;g.appendChild(kf("span",Ze(l),"cm-tab")),a.col+=l}else{var m=kf("span","\u2022","cm-invalidchar");m.title="\\u"+i[0].charCodeAt(0).toString(16),g.appendChild(m),a.col+=1}}else{a.col+=b.length;var g=document.createTextNode(b)}if(c||d||e||a.measure){var n=c||"";d&&(n+=d),e&&(n+=e);var m=kf("span",[g],n);return f&&(m.title=f),a.pre.appendChild(m)}a.pre.appendChild(g)}}function Zd(a,c,d,e,f){for(var g=a.cm.options.lineWrapping,h=0;h<c.length;++h){var i=c.charAt(h),j=0==h;i>="\ud800"&&"\udbff">i&&h<c.length-1?(i=c.slice(h,h+2),++h):h&&g&&qf(c,h)&&a.pre.appendChild(kf("wbr"));var k=a.measure[a.pos],l=a.measure[a.pos]=Yd(a,i,d,j&&e,h==c.length-1&&f);k&&(l.leftSide=k.leftSide||k),b&&g&&" "==i&&h&&!/\s/.test(c.charAt(h-1))&&h<c.length-1&&!/\s/.test(c.charAt(h+1))&&(l.style.whiteSpace="normal"),a.pos+=i.length}c.length&&(a.measuredSomething=!0)}function $d(a){function b(a){for(var b=" ",c=0;c<a.length-2;++c)b+=c%2?" ":"\xa0";return b+=" "}return function(c,d,e,f,g,h){return a(c,d.replace(/ {3,}/,b),e,f,g,h)}}function _d(a,b,c,d){var e=!d&&c.replacedWith;if(e&&(a.copyWidgets&&(e=e.cloneNode(!0)),a.pre.appendChild(e),a.measure)){if(b)a.measure[a.pos]=e;else{var f=uf(a.cm.display.measure);if("bookmark"!=c.type||c.insertLeft){if(a.measure[a.pos])return;a.measure[a.pos]=a.pre.insertBefore(f,e)}else a.measure[a.pos]=a.pre.appendChild(f)}a.measuredSomething=!0}a.pos+=b}function ae(a,b,c){var d=a.markedSpans,e=a.text,f=0;if(d)for(var k,m,n,o,p,q,h=e.length,i=0,g=1,j="",l=0;;){if(l==i){m=n=o=p="",q=null,l=1/0;for(var r=[],s=0;s<d.length;++s){var t=d[s],u=t.marker;t.from<=i&&(null==t.to||t.to>i)?(null!=t.to&&l>t.to&&(l=t.to,n=""),u.className&&(m+=" "+u.className),u.startStyle&&t.from==i&&(o+=" "+u.startStyle),u.endStyle&&t.to==l&&(n+=" "+u.endStyle),u.title&&!p&&(p=u.title),u.collapsed&&(!q||q.marker.size<u.size)&&(q=t)):t.from>i&&l>t.from&&(l=t.from),"bookmark"==u.type&&t.from==i&&u.replacedWith&&r.push(u)}if(q&&(q.from||0)==i&&(_d(b,(null==q.to?h:q.to)-i,q.marker,null==q.from),null==q.to))return q.marker.find();if(!q&&r.length)for(var s=0;s<r.length;++s)_d(b,0,r[s])}if(i>=h)break;for(var v=Math.min(h,l);;){if(j){var w=i+j.length;if(!q){var x=w>v?j.slice(0,v-i):j;b.addToken(b,x,k?k+m:m,o,i+x.length==l?n:"",p)}if(w>=v){j=j.slice(v-i),i=v;break}i=w,o=""}j=e.slice(f,f=c[g++]),k=Vd(c[g++])}}else for(var g=1;g<c.length;g+=2)b.addToken(b,e.slice(f,f=c[g]),Vd(c[g+1]))}function be(a,b,c,d,e){function f(a){return c?c[a]:null}function g(a,c,d){Od(a,c,d,e),Pe(a,"change",a,b)}var h=b.from,i=b.to,j=b.text,k=ke(a,h.line),l=ke(a,i.line),m=$e(j),n=f(j.length-1),o=i.line-h.line;if(0==h.ch&&0==i.ch&&""==m){for(var p=0,q=j.length-1,r=[];q>p;++p)r.push(new Nd(j[p],f(p),e));g(l,l.text,n),o&&a.remove(h.line,o),r.length&&a.insert(h.line,r)}else if(k==l)if(1==j.length)g(k,k.text.slice(0,h.ch)+m+k.text.slice(i.ch),n);else{for(var r=[],p=1,q=j.length-1;q>p;++p)r.push(new Nd(j[p],f(p),e));r.push(new Nd(m+k.text.slice(i.ch),n,e)),g(k,k.text.slice(0,h.ch)+j[0],f(0)),a.insert(h.line+1,r)}else if(1==j.length)g(k,k.text.slice(0,h.ch)+j[0]+l.text.slice(i.ch),f(0)),a.remove(h.line+1,o);else{g(k,k.text.slice(0,h.ch)+j[0],f(0)),g(l,m+l.text.slice(i.ch),n);for(var p=1,q=j.length-1,r=[];q>p;++p)r.push(new Nd(j[p],f(p),e));
6
+ o>1&&a.remove(h.line+1,o-1),a.insert(h.line+1,r)}Pe(a,"change",a,b),Kc(a,d.anchor,d.head,null,!0)}function ce(a){this.lines=a,this.parent=null;for(var b=0,c=a.length,d=0;c>b;++b)a[b].parent=this,d+=a[b].height;this.height=d}function de(a){this.children=a;for(var b=0,c=0,d=0,e=a.length;e>d;++d){var f=a[d];b+=f.chunkSize(),c+=f.height,f.parent=this}this.size=b,this.height=c,this.parent=null}function ie(a,b,c){function d(a,e,f){if(a.linked)for(var g=0;g<a.linked.length;++g){var h=a.linked[g];if(h.doc!=e){var i=f&&h.sharedHist;(!c||i)&&(b(h.doc,i),d(h.doc,a,i))}}}d(a,null,!0)}function je(a,b){if(b.cm)throw new Error("This document is already in use.");a.doc=b,b.cm=a,B(a),y(a),a.options.lineWrapping||H(a),a.options.mode=b.modeOption,Hb(a)}function ke(a,b){for(b-=a.first;!a.lines;)for(var c=0;;++c){var d=a.children[c],e=d.chunkSize();if(e>b){a=d;break}b-=e}return a.lines[b]}function le(a,b,c){var d=[],e=b.line;return a.iter(b.line,c.line+1,function(a){var f=a.text;e==c.line&&(f=f.slice(0,c.ch)),e==b.line&&(f=f.slice(b.ch)),d.push(f),++e}),d}function me(a,b,c){var d=[];return a.iter(b,c,function(a){d.push(a.text)}),d}function ne(a,b){for(var c=b-a.height,d=a;d;d=d.parent)d.height+=c}function oe(a){if(null==a.parent)return null;for(var b=a.parent,c=af(b.lines,a),d=b.parent;d;b=d,d=d.parent)for(var e=0;d.children[e]!=b;++e)c+=d.children[e].chunkSize();return c+b.first}function pe(a,b){var c=a.first;a:do{for(var d=0,e=a.children.length;e>d;++d){var f=a.children[d],g=f.height;if(g>b){a=f;continue a}b-=g,c+=f.chunkSize()}return c}while(!a.lines);for(var d=0,e=a.lines.length;e>d;++d){var h=a.lines[d],i=h.height;if(i>b)break;b-=i}return c+d}function qe(a,b){b=Ed(a.doc,b);for(var c=0,d=b.parent,e=0;e<d.lines.length;++e){var f=d.lines[e];if(f==b)break;c+=f.height}for(var g=d.parent;g;d=g,g=d.parent)for(var e=0;e<g.children.length;++e){var h=g.children[e];if(h==d)break;c+=h.height}return c}function re(a){var b=a.order;return null==b&&(b=a.order=Mf(a.text)),b}function se(a){return{done:[],undone:[],undoDepth:1/0,lastTime:0,lastOp:null,lastOrigin:null,generation:a||1,maxGeneration:a||1}}function te(a,b,c,d){var e=b["spans_"+a.id],f=0;a.iter(Math.max(a.first,c),Math.min(a.first+a.size,d),function(c){c.markedSpans&&((e||(e=b["spans_"+a.id]={}))[f]=c.markedSpans),++f})}function ue(a,b){var c={line:b.from.line,ch:b.from.ch},d={from:c,to:pc(b),text:le(a,b.from,b.to)};return te(a,d,b.from.line,b.to.line+1),ie(a,function(a){te(a,d,b.from.line,b.to.line+1)},!0),d}function ve(a,b,c,d){var e=a.history;e.undone.length=0;var f=+new Date,g=$e(e.done);if(g&&(e.lastOp==d||e.lastOrigin==b.origin&&b.origin&&("+"==b.origin.charAt(0)&&a.cm&&e.lastTime>f-a.cm.options.historyEventDelay||"*"==b.origin.charAt(0)))){var h=$e(g.changes);Bc(b.from,b.to)&&Bc(b.from,h.to)?h.to=pc(b):g.changes.push(ue(a,b)),g.anchorAfter=c.anchor,g.headAfter=c.head}else for(g={changes:[ue(a,b)],generation:e.generation,anchorBefore:a.sel.anchor,headBefore:a.sel.head,anchorAfter:c.anchor,headAfter:c.head},e.done.push(g),e.generation=++e.maxGeneration;e.done.length>e.undoDepth;)e.done.shift();e.lastTime=f,e.lastOp=d,e.lastOrigin=b.origin}function we(a){if(!a)return null;for(var c,b=0;b<a.length;++b)a[b].marker.explicitlyCleared?c||(c=a.slice(0,b)):c&&c.push(a[b]);return c?c.length?c:null:a}function xe(a,b){var c=b["spans_"+a.id];if(!c)return null;for(var d=0,e=[];d<b.text.length;++d)e.push(we(c[d]));return e}function ye(a,b){for(var c=0,d=[];c<a.length;++c){var e=a[c],f=e.changes,g=[];d.push({changes:g,anchorBefore:e.anchorBefore,headBefore:e.headBefore,anchorAfter:e.anchorAfter,headAfter:e.headAfter});for(var h=0;h<f.length;++h){var j,i=f[h];if(g.push({from:i.from,to:i.to,text:i.text}),b)for(var k in i)(j=k.match(/^spans_(\d+)$/))&&af(b,Number(j[1]))>-1&&($e(g)[k]=i[k],delete i[k])}}return d}function ze(a,b,c,d){c<a.line?a.line+=d:b<a.line&&(a.line=b,a.ch=0)}function Ae(a,b,c,d){for(var e=0;e<a.length;++e){for(var f=a[e],g=!0,h=0;h<f.changes.length;++h){var i=f.changes[h];if(f.copied||(i.from=Dc(i.from),i.to=Dc(i.to)),c<i.from.line)i.from.line+=d,i.to.line+=d;else if(b<=i.to.line){g=!1;break}}f.copied||(f.anchorBefore=Dc(f.anchorBefore),f.headBefore=Dc(f.headBefore),f.anchorAfter=Dc(f.anchorAfter),f.readAfter=Dc(f.headAfter),f.copied=!0),g?(ze(f.anchorBefore),ze(f.headBefore),ze(f.anchorAfter),ze(f.headAfter)):(a.splice(0,e+1),e=0)}}function Be(a,b){var c=b.from.line,d=b.to.line,e=b.text.length-(d-c)-1;Ae(a.done,c,d,e),Ae(a.undone,c,d,e)}function Ce(){He(this)}function De(a){return a.stop||(a.stop=Ce),a}function Ee(a){a.preventDefault?a.preventDefault():a.returnValue=!1}function Fe(a){a.stopPropagation?a.stopPropagation():a.cancelBubble=!0}function Ge(a){return null!=a.defaultPrevented?a.defaultPrevented:0==a.returnValue}function He(a){Ee(a),Fe(a)}function Ie(a){return a.target||a.srcElement}function Je(a){var b=a.which;return null==b&&(1&a.button?b=1:2&a.button?b=3:4&a.button&&(b=2)),p&&a.ctrlKey&&1==b&&(b=3),b}function Ke(a,b,c){if(a.addEventListener)a.addEventListener(b,c,!1);else if(a.attachEvent)a.attachEvent("on"+b,c);else{var d=a._handlers||(a._handlers={}),e=d[b]||(d[b]=[]);e.push(c)}}function Le(a,b,c){if(a.removeEventListener)a.removeEventListener(b,c,!1);else if(a.detachEvent)a.detachEvent("on"+b,c);else{var d=a._handlers&&a._handlers[b];if(!d)return;for(var e=0;e<d.length;++e)if(d[e]==c){d.splice(e,1);break}}}function Me(a,b){var c=a._handlers&&a._handlers[b];if(c)for(var d=Array.prototype.slice.call(arguments,2),e=0;e<c.length;++e)c[e].apply(null,d)}function Pe(a,b){function e(a){return function(){a.apply(null,d)}}var c=a._handlers&&a._handlers[b];if(c){var d=Array.prototype.slice.call(arguments,2);Ne||(++Oe,Ne=[],setTimeout(Re,0));for(var f=0;f<c.length;++f)Ne.push(e(c[f]))}}function Qe(a,b,c){return Me(a,c||b.type,a,b),Ge(b)||b.codemirrorIgnore}function Re(){--Oe;var a=Ne;Ne=null;for(var b=0;b<a.length;++b)a[b]()}function Se(a,b){var c=a._handlers&&a._handlers[b];return c&&c.length>0}function Te(a){a.prototype.on=function(a,b){Ke(this,a,b)},a.prototype.off=function(a,b){Le(this,a,b)}}function We(){this.id=null}function Xe(a,b,c,d,e){null==b&&(b=a.search(/[^\s\u00a0]/),-1==b&&(b=a.length));for(var f=d||0,g=e||0;b>f;++f)" "==a.charAt(f)?g+=c-g%c:++g;return g}function Ze(a){for(;Ye.length<=a;)Ye.push($e(Ye)+" ");return Ye[a]}function $e(a){return a[a.length-1]}function _e(a){if(n)a.selectionStart=0,a.selectionEnd=a.value.length;else try{a.select()}catch(b){}}function af(a,b){if(a.indexOf)return a.indexOf(b);for(var c=0,d=a.length;d>c;++c)if(a[c]==b)return c;return-1}function bf(a,b){function c(){}c.prototype=a;var d=new c;return b&&cf(b,d),d}function cf(a,b){b||(b={});for(var c in a)a.hasOwnProperty(c)&&(b[c]=a[c]);return b}function df(a){for(var b=[],c=0;a>c;++c)b.push(void 0);return b}function ef(a){var b=Array.prototype.slice.call(arguments,1);return function(){return a.apply(null,b)}}function gf(a){return/\w/.test(a)||a>"\x80"&&(a.toUpperCase()!=a.toLowerCase()||ff.test(a))}function hf(a){for(var b in a)if(a.hasOwnProperty(b)&&a[b])return!1;return!0}function kf(a,b,c,d){var e=document.createElement(a);if(c&&(e.className=c),d&&(e.style.cssText=d),"string"==typeof b)nf(e,b);else if(b)for(var f=0;f<b.length;++f)e.appendChild(b[f]);return e}function lf(a){for(var b=a.childNodes.length;b>0;--b)a.removeChild(a.firstChild);return a}function mf(a,b){return lf(a).appendChild(b)}function nf(a,b){d?(a.innerHTML="",a.appendChild(document.createTextNode(b))):a.textContent=b}function of(a){return a.getBoundingClientRect()}function qf(){return!1}function sf(a){if(null!=rf)return rf;var b=kf("div",null,null,"width: 50px; height: 50px; overflow-x: scroll");return mf(a,b),b.offsetWidth&&(rf=b.offsetHeight-b.clientHeight),rf||0}function uf(a){if(null==tf){var b=kf("span","\u200b");mf(a,kf("span",[b,document.createTextNode("x")])),0!=a.firstChild.offsetHeight&&(tf=b.offsetWidth<=1&&b.offsetHeight>2&&!c)}return tf?kf("span","\u200b"):kf("span","\xa0",null,"display: inline-block; width: 1px; margin-right: -1px")}function zf(a,b,c,d){if(!a)return d(b,c,"ltr");for(var e=!1,f=0;f<a.length;++f){var g=a[f];(g.from<c&&g.to>b||b==c&&g.to==b)&&(d(Math.max(g.from,b),Math.min(g.to,c),1==g.level?"rtl":"ltr"),e=!0)}e||d(b,c,"ltr")}function Af(a){return a.level%2?a.to:a.from}function Bf(a){return a.level%2?a.from:a.to}function Cf(a){var b=re(a);return b?Af(b[0]):0}function Df(a){var b=re(a);return b?Bf($e(b)):a.text.length}function Ef(a,b){var c=ke(a.doc,b),d=Ed(a.doc,c);d!=c&&(b=oe(d));var e=re(d),f=e?e[0].level%2?Df(d):Cf(d):0;return Ac(b,f)}function Ff(a,b){for(var c,d;c=Dd(d=ke(a.doc,b));)b=c.find().to.line;var e=re(d),f=e?e[0].level%2?Cf(d):Df(d):d.text.length;return Ac(b,f)}function Gf(a,b,c){var d=a[0].level;return b==d?!0:c==d?!1:c>b}function If(a,b){for(var d,c=0;c<a.length;++c){var e=a[c];if(e.from<b&&e.to>b)return Hf=null,c;if(e.from==b||e.to==b){if(null!=d)return Gf(a,e.level,a[d].level)?(Hf=d,c):(Hf=c,d);d=c}}return Hf=null,d}function Jf(a,b,c,d){if(!d)return b+c;do b+=c;while(b>0&&jf.test(a.text.charAt(b)));return b}function Kf(a,b,c,d){var e=re(a);if(!e)return Lf(a,b,c,d);for(var f=If(e,b),g=e[f],h=Jf(a,b,g.level%2?-c:c,d);;){if(h>g.from&&h<g.to)return h;if(h==g.from||h==g.to)return If(e,h)==f?h:(g=e[f+=c],c>0==g.level%2?g.to:g.from);if(g=e[f+=c],!g)return null;h=c>0==g.level%2?Jf(a,g.to,-1,d):Jf(a,g.from,1,d)}}function Lf(a,b,c,d){var e=b+c;if(d)for(;e>0&&jf.test(a.text.charAt(e));)e+=c;return 0>e||e>a.text.length?null:e}var a=/gecko\/\d/i.test(navigator.userAgent),b=/MSIE \d/.test(navigator.userAgent),c=b&&(null==document.documentMode||document.documentMode<8),d=b&&(null==document.documentMode||document.documentMode<9),e=/WebKit\//.test(navigator.userAgent),f=e&&/Qt\/\d+\.\d+/.test(navigator.userAgent),g=/Chrome\//.test(navigator.userAgent),h=/Opera\//.test(navigator.userAgent),i=/Apple Computer/.test(navigator.vendor),j=/KHTML\//.test(navigator.userAgent),k=/Mac OS X 1\d\D([7-9]|\d\d)\D/.test(navigator.userAgent),l=/Mac OS X 1\d\D([8-9]|\d\d)\D/.test(navigator.userAgent),m=/PhantomJS/.test(navigator.userAgent),n=/AppleWebKit/.test(navigator.userAgent)&&/Mobile\/\w+/.test(navigator.userAgent),o=n||/Android|webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(navigator.userAgent),p=n||/Mac/.test(navigator.platform),q=/win/i.test(navigator.platform),r=h&&navigator.userAgent.match(/Version\/(\d*\.\d*)/);r&&(r=Number(r[1])),r&&r>=15&&(h=!1,e=!0);var yb,Rb,Sb,s=p&&(f||h&&(null==r||12.11>r)),t=a||b&&!d,u=!1,v=!1,Bb=0,Xb=0,ac=0,bc=null;b?bc=-.53:a?bc=15:g?bc=-.7:i&&(bc=-1/3);var fc,nc,ic=null,pc=w.changeEnd=function(a){return a.text?Ac(a.from.line+a.text.length-1,$e(a.text).length+(1==a.text.length?a.from.ch:0)):a.to};w.Pos=Ac,w.prototype={constructor:w,focus:function(){window.focus(),Mb(this),lc(this),Jb(this)},setOption:function(a,b){var c=this.options,d=c[a];(c[a]!=b||"mode"==a)&&(c[a]=b,Zc.hasOwnProperty(a)&&Eb(this,Zc[a])(this,b,d))},getOption:function(a){return this.options[a]},getDoc:function(){return this.doc},addKeyMap:function(a,b){this.state.keyMaps[b?"push":"unshift"](a)},removeKeyMap:function(a){for(var b=this.state.keyMaps,c=0;c<b.length;++c)if(b[c]==a||"string"!=typeof b[c]&&b[c].name==a)return b.splice(c,1),!0},addOverlay:Eb(null,function(a,b){var c=a.token?a:w.getMode(this.options,a);if(c.startState)throw new Error("Overlays may not be stateful.");this.state.overlays.push({mode:c,modeSpec:a,opaque:b&&b.opaque}),this.state.modeGen++,Hb(this)}),removeOverlay:Eb(null,function(a){for(var b=this.state.overlays,c=0;c<b.length;++c){var d=b[c].modeSpec;if(d==a||"string"==typeof a&&d.name==a)return b.splice(c,1),this.state.modeGen++,Hb(this),void 0}}),indentLine:Eb(null,function(a,b,c){"string"!=typeof b&&"number"!=typeof b&&(b=null==b?this.options.smartIndent?"smart":"prev":b?"add":"subtract"),Hc(this.doc,a)&&Tc(this,a,b,c)}),indentSelection:Eb(null,function(a){var b=this.doc.sel;if(Bc(b.from,b.to))return Tc(this,b.from.line,a);for(var c=b.to.line-(b.to.ch?0:1),d=b.from.line;c>=d;++d)Tc(this,d,a)}),getTokenAt:function(a,b){var c=this.doc;a=Fc(c,a);for(var d=db(this,a.line,b),e=this.doc.mode,f=ke(c,a.line),g=new od(f.text,this.options.tabSize);g.pos<a.ch&&!g.eol();){g.start=g.pos;var h=e.token(g,d)}return{start:g.start,end:g.pos,string:g.current(),className:h||null,type:h||null,state:d}},getTokenTypeAt:function(a){a=Fc(this.doc,a);var b=Sd(this,ke(this.doc,a.line)),c=0,d=(b.length-1)/2,e=a.ch;if(0==e)return b[2];for(;;){var f=c+d>>1;if((f?b[2*f-1]:0)>=e)d=f;else{if(!(b[2*f+1]<e))return b[2*f+2];c=f+1}}},getModeAt:function(a){var b=this.doc.mode;return b.innerMode?w.innerMode(b,this.getTokenAt(a).state).mode:b},getHelper:function(a,b){if(fd.hasOwnProperty(b)){var c=fd[b],d=this.getModeAt(a);return d[b]&&c[d[b]]||d.helperType&&c[d.helperType]||c[d.name]}},getStateAfter:function(a,b){var c=this.doc;return a=Ec(c,null==a?c.first+c.size-1:a),db(this,a+1,b)},cursorCoords:function(a,b){var c,d=this.doc.sel;return c=null==a?d.head:"object"==typeof a?Fc(this.doc,a):a?d.from:d.to,ub(this,c,b||"page")},charCoords:function(a,b){return tb(this,Fc(this.doc,a),b||"page")},coordsChar:function(a,b){return a=sb(this,a,b||"page"),wb(this,a.left,a.top)},lineAtHeight:function(a,b){return a=sb(this,{top:a,left:0},b||"page").top,pe(this.doc,a+this.display.viewOffset)},heightAtLine:function(a,b){var c=!1,d=this.doc.first+this.doc.size-1;a<this.doc.first?a=this.doc.first:a>d&&(a=d,c=!0);var e=ke(this.doc,a);return rb(this,ke(this.doc,a),{top:0,left:0},b||"page").top+(c?e.height:0)},defaultTextHeight:function(){return zb(this.display)},defaultCharWidth:function(){return Ab(this.display)},setGutterMarker:Eb(null,function(a,b,c){return Uc(this,a,function(a){var d=a.gutterMarkers||(a.gutterMarkers={});return d[b]=c,!c&&hf(d)&&(a.gutterMarkers=null),!0})}),clearGutter:Eb(null,function(a){var b=this,c=b.doc,d=c.first;c.iter(function(c){c.gutterMarkers&&c.gutterMarkers[a]&&(c.gutterMarkers[a]=null,Hb(b,d,d+1),hf(c.gutterMarkers)&&(c.gutterMarkers=null)),++d})}),addLineClass:Eb(null,function(a,b,c){return Uc(this,a,function(a){var d="text"==b?"textClass":"background"==b?"bgClass":"wrapClass";if(a[d]){if(new RegExp("(?:^|\\s)"+c+"(?:$|\\s)").test(a[d]))return!1;a[d]+=" "+c}else a[d]=c;return!0})}),removeLineClass:Eb(null,function(a,b,c){return Uc(this,a,function(a){var d="text"==b?"textClass":"background"==b?"bgClass":"wrapClass",e=a[d];if(!e)return!1;if(null==c)a[d]=null;else{var f=e.match(new RegExp("(?:^|\\s+)"+c+"(?:$|\\s+)"));if(!f)return!1;var g=f.index+f[0].length;a[d]=e.slice(0,f.index)+(f.index&&g!=e.length?" ":"")+e.slice(g)||null}return!0})}),addLineWidget:Eb(null,function(a,b,c){return Md(this,a,b,c)}),removeLineWidget:function(a){a.clear()},lineInfo:function(a){if("number"==typeof a){if(!Hc(this.doc,a))return null;var b=a;if(a=ke(this.doc,a),!a)return null}else{var b=oe(a);if(null==b)return null}return{line:b,handle:a,text:a.text,gutterMarkers:a.gutterMarkers,textClass:a.textClass,bgClass:a.bgClass,wrapClass:a.wrapClass,widgets:a.widgets}},getViewport:function(){return{from:this.display.showingFrom,to:this.display.showingTo}},addWidget:function(a,b,c,d,e){var f=this.display;a=ub(this,Fc(this.doc,a));var g=a.bottom,h=a.left;if(b.style.position="absolute",f.sizer.appendChild(b),"over"==d)g=a.top;else if("above"==d||"near"==d){var i=Math.max(f.wrapper.clientHeight,this.doc.height),j=Math.max(f.sizer.clientWidth,f.lineSpace.clientWidth);("above"==d||a.bottom+b.offsetHeight>i)&&a.top>b.offsetHeight?g=a.top-b.offsetHeight:a.bottom+b.offsetHeight<=i&&(g=a.bottom),h+b.offsetWidth>j&&(h=j-b.offsetWidth)}b.style.top=g+"px",b.style.left=b.style.right="","right"==e?(h=f.sizer.clientWidth-b.offsetWidth,b.style.right="0px"):("left"==e?h=0:"middle"==e&&(h=(f.sizer.clientWidth-b.offsetWidth)/2),b.style.left=h+"px"),c&&Pc(this,h,g,h+b.offsetWidth,g+b.offsetHeight)},triggerOnKeyDown:Eb(null,jc),execCommand:function(a){return id[a](this)},findPosH:function(a,b,c,d){var e=1;0>b&&(e=-1,b=-b);for(var f=0,g=Fc(this.doc,a);b>f&&(g=Vc(this.doc,g,e,c,d),!g.hitSide);++f);return g},moveH:Eb(null,function(a,b){var d,c=this.doc.sel;d=c.shift||c.extend||Bc(c.from,c.to)?Vc(this.doc,c.head,a,b,this.options.rtlMoveVisually):0>a?c.from:c.to,Ic(this.doc,d,d,a)}),deleteH:Eb(null,function(a,b){var c=this.doc.sel;Bc(c.from,c.to)?zc(this.doc,"",c.from,Vc(this.doc,c.head,a,b,!1),"+delete"):zc(this.doc,"",c.from,c.to,"+delete"),this.curOp.userSelChange=!0}),findPosV:function(a,b,c,d){var e=1,f=d;0>b&&(e=-1,b=-b);for(var g=0,h=Fc(this.doc,a);b>g;++g){var i=ub(this,h,"div");if(null==f?f=i.left:i.left=f,h=Wc(this,i,e,c),h.hitSide)break}return h},moveV:Eb(null,function(a,b){var c=this.doc.sel,d=ub(this,c.head,"div");null!=c.goalColumn&&(d.left=c.goalColumn);var e=Wc(this,d,a,b);"page"==b&&Sc(this,0,tb(this,e,"div").top-d.top),Ic(this.doc,e,e,a),c.goalColumn=d.left}),toggleOverwrite:function(a){(null==a||a!=this.state.overwrite)&&((this.state.overwrite=!this.state.overwrite)?this.display.cursor.className+=" CodeMirror-overwrite":this.display.cursor.className=this.display.cursor.className.replace(" CodeMirror-overwrite",""))},hasFocus:function(){return this.state.focused},scrollTo:Eb(null,function(a,b){Rc(this,a,b)}),getScrollInfo:function(){var a=this.display.scroller,b=Ue;return{left:a.scrollLeft,top:a.scrollTop,height:a.scrollHeight-b,width:a.scrollWidth-b,clientHeight:a.clientHeight-b,clientWidth:a.clientWidth-b}},scrollIntoView:Eb(null,function(a,b){"number"==typeof a&&(a=Ac(a,0)),b||(b=0);var c=a;a&&null==a.line||(this.curOp.scrollToPos=a?Fc(this.doc,a):this.doc.sel.head,this.curOp.scrollToPosMargin=b,c=ub(this,this.curOp.scrollToPos));var d=Qc(this,c.left,c.top-b,c.right,c.bottom+b);Rc(this,d.scrollLeft,d.scrollTop)}),setSize:Eb(null,function(a,b){function c(a){return"number"==typeof a||/^\d+$/.test(String(a))?a+"px":a}null!=a&&(this.display.wrapper.style.width=c(a)),null!=b&&(this.display.wrapper.style.height=c(b)),this.options.lineWrapping&&(this.display.measureLineCache.length=this.display.measureLineCachePos=0),this.curOp.forceUpdate=!0}),operation:function(a){return Gb(this,a)},refresh:Eb(null,function(){ob(this),Rc(this,this.doc.scrollLeft,this.doc.scrollTop),Hb(this)}),swapDoc:Eb(null,function(a){var b=this.doc;return b.cm=null,je(this,a),ob(this),Lb(this,!0),Rc(this,a.scrollLeft,a.scrollTop),b}),getInputField:function(){return this.display.input},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},Te(w);var Zc=w.optionHandlers={},$c=w.defaults={},ad=w.Init={toString:function(){return"CodeMirror.Init"}};_c("value","",function(a,b){a.setValue(b)},!0),_c("mode",null,function(a,b){a.doc.modeOption=b,y(a)},!0),_c("indentUnit",2,y,!0),_c("indentWithTabs",!1),_c("smartIndent",!0),_c("tabSize",4,function(a){y(a),ob(a),Hb(a)},!0),_c("electricChars",!0),_c("rtlMoveVisually",!q),_c("theme","default",function(a){D(a),E(a)},!0),_c("keyMap","default",C),_c("extraKeys",null),_c("onKeyEvent",null),_c("onDragEvent",null),_c("lineWrapping",!1,z,!0),_c("gutters",[],function(a){I(a.options),E(a)},!0),_c("fixedGutter",!0,function(a,b){a.display.gutters.style.left=b?O(a.display)+"px":"0",a.refresh()},!0),_c("coverGutterNextToScrollbar",!1,J,!0),_c("lineNumbers",!1,function(a){I(a.options),E(a)},!0),_c("firstLineNumber",1,E,!0),_c("lineNumberFormatter",function(a){return a},E,!0),_c("showCursorWhenSelecting",!1,Y,!0),_c("readOnly",!1,function(a,b){"nocursor"==b?(mc(a),a.display.input.blur()):b||Lb(a,!0)}),_c("dragDrop",!0),_c("cursorBlinkRate",530),_c("cursorScrollMargin",0),_c("cursorHeight",1),_c("workTime",100),_c("workDelay",100),_c("flattenSpans",!0),_c("pollInterval",100),_c("undoDepth",40,function(a,b){a.doc.history.undoDepth=b}),_c("historyEventDelay",500),_c("viewportMargin",10,function(a){a.refresh()},!0),_c("maxHighlightLength",1e4,function(a){y(a),a.refresh()},!0),_c("crudeMeasuringFrom",1e4),_c("moveInputWithCursor",!0,function(a,b){b||(a.display.inputDiv.style.top=a.display.inputDiv.style.left=0)}),_c("tabindex",null,function(a,b){a.display.input.tabIndex=b||""}),_c("autofocus",null);var bd=w.modes={},cd=w.mimeModes={};w.defineMode=function(a,b){if(w.defaults.mode||"null"==a||(w.defaults.mode=a),arguments.length>2){b.dependencies=[];for(var c=2;c<arguments.length;++c)b.dependencies.push(arguments[c])}bd[a]=b},w.defineMIME=function(a,b){cd[a]=b},w.resolveMode=function(a){if("string"==typeof a&&cd.hasOwnProperty(a))a=cd[a];else if(a&&"string"==typeof a.name&&cd.hasOwnProperty(a.name)){var b=cd[a.name];a=bf(b,a),a.name=b.name}else if("string"==typeof a&&/^[\w\-]+\/[\w\-]+\+xml$/.test(a))return w.resolveMode("application/xml");return"string"==typeof a?{name:a}:a||{name:"null"}},w.getMode=function(a,b){var b=w.resolveMode(b),c=bd[b.name];if(!c)return w.getMode(a,"text/plain");var d=c(a,b);if(dd.hasOwnProperty(b.name)){var e=dd[b.name];for(var f in e)e.hasOwnProperty(f)&&(d.hasOwnProperty(f)&&(d["_"+f]=d[f]),d[f]=e[f])}return d.name=b.name,d},w.defineMode("null",function(){return{token:function(a){a.skipToEnd()}}}),w.defineMIME("text/plain","null");var dd=w.modeExtensions={};w.extendMode=function(a,b){var c=dd.hasOwnProperty(a)?dd[a]:dd[a]={};cf(b,c)},w.defineExtension=function(a,b){w.prototype[a]=b},w.defineDocExtension=function(a,b){fe.prototype[a]=b},w.defineOption=_c;var ed=[];w.defineInitHook=function(a){ed.push(a)};var fd=w.helpers={};w.registerHelper=function(a,b,c){fd.hasOwnProperty(a)||(fd[a]=w[a]={}),fd[a][b]=c},w.isWordChar=gf,w.copyState=gd,w.startState=hd,w.innerMode=function(a,b){for(;a.innerMode;){var c=a.innerMode(b);if(!c||c.mode==a)break;b=c.state,a=c.mode}return c||{mode:a,state:b}};var id=w.commands={selectAll:function(a){a.setSelection(Ac(a.firstLine(),0),Ac(a.lastLine()))},killLine:function(a){var b=a.getCursor(!0),c=a.getCursor(!1),d=!Bc(b,c);d||a.getLine(b.line).length!=b.ch?a.replaceRange("",b,d?c:Ac(b.line),"+delete"):a.replaceRange("",b,Ac(b.line+1,0),"+delete")},deleteLine:function(a){var b=a.getCursor().line;a.replaceRange("",Ac(b,0),Ac(b),"+delete")},delLineLeft:function(a){var b=a.getCursor();a.replaceRange("",Ac(b.line,0),b,"+delete")},undo:function(a){a.undo()},redo:function(a){a.redo()},goDocStart:function(a){a.extendSelection(Ac(a.firstLine(),0))},goDocEnd:function(a){a.extendSelection(Ac(a.lastLine()))},goLineStart:function(a){a.extendSelection(Ef(a,a.getCursor().line))},goLineStartSmart:function(a){var b=a.getCursor(),c=Ef(a,b.line),d=a.getLineHandle(c.line),e=re(d);if(e&&0!=e[0].level)a.extendSelection(c);else{var f=Math.max(0,d.text.search(/\S/)),g=b.line==c.line&&b.ch<=f&&b.ch;a.extendSelection(Ac(c.line,g?0:f))}},goLineEnd:function(a){a.extendSelection(Ff(a,a.getCursor().line))},goLineRight:function(a){var b=a.charCoords(a.getCursor(),"div").top+5;a.extendSelection(a.coordsChar({left:a.display.lineDiv.offsetWidth+100,top:b},"div"))},goLineLeft:function(a){var b=a.charCoords(a.getCursor(),"div").top+5;a.extendSelection(a.coordsChar({left:0,top:b},"div"))},goLineUp:function(a){a.moveV(-1,"line")},goLineDown:function(a){a.moveV(1,"line")},goPageUp:function(a){a.moveV(-1,"page")},goPageDown:function(a){a.moveV(1,"page")},goCharLeft:function(a){a.moveH(-1,"char")},goCharRight:function(a){a.moveH(1,"char")},goColumnLeft:function(a){a.moveH(-1,"column")},goColumnRight:function(a){a.moveH(1,"column")},goWordLeft:function(a){a.moveH(-1,"word")},goGroupRight:function(a){a.moveH(1,"group")},goGroupLeft:function(a){a.moveH(-1,"group")},goWordRight:function(a){a.moveH(1,"word")},delCharBefore:function(a){a.deleteH(-1,"char")},delCharAfter:function(a){a.deleteH(1,"char")},delWordBefore:function(a){a.deleteH(-1,"word")},delWordAfter:function(a){a.deleteH(1,"word")},delGroupBefore:function(a){a.deleteH(-1,"group")},delGroupAfter:function(a){a.deleteH(1,"group")},indentAuto:function(a){a.indentSelection("smart")},indentMore:function(a){a.indentSelection("add")},indentLess:function(a){a.indentSelection("subtract")},insertTab:function(a){a.replaceSelection(" ","end","+input")},defaultTab:function(a){a.somethingSelected()?a.indentSelection("add"):a.replaceSelection(" ","end","+input")},transposeChars:function(a){var b=a.getCursor(),c=a.getLine(b.line);b.ch>0&&b.ch<c.length-1&&a.replaceRange(c.charAt(b.ch)+c.charAt(b.ch-1),Ac(b.line,b.ch-1),Ac(b.line,b.ch+1))},newlineAndIndent:function(a){Eb(a,function(){a.replaceSelection("\n","end","+input"),a.indentLine(a.getCursor().line,null,!0)})()},toggleOverwrite:function(a){a.toggleOverwrite()}},jd=w.keyMap={};jd.basic={Left:"goCharLeft",Right:"goCharRight",Up:"goLineUp",Down:"goLineDown",End:"goLineEnd",Home:"goLineStartSmart",PageUp:"goPageUp",PageDown:"goPageDown",Delete:"delCharAfter",Backspace:"delCharBefore",Tab:"defaultTab","Shift-Tab":"indentAuto",Enter:"newlineAndIndent",Insert:"toggleOverwrite"},jd.pcDefault={"Ctrl-A":"selectAll","Ctrl-D":"deleteLine","Ctrl-Z":"undo","Shift-Ctrl-Z":"redo","Ctrl-Y":"redo","Ctrl-Home":"goDocStart","Alt-Up":"goDocStart","Ctrl-End":"goDocEnd","Ctrl-Down":"goDocEnd","Ctrl-Left":"goGroupLeft","Ctrl-Right":"goGroupRight","Alt-Left":"goLineStart","Alt-Right":"goLineEnd","Ctrl-Backspace":"delGroupBefore","Ctrl-Delete":"delGroupAfter","Ctrl-S":"save","Ctrl-F":"find","Ctrl-G":"findNext","Shift-Ctrl-G":"findPrev","Shift-Ctrl-F":"replace","Shift-Ctrl-R":"replaceAll","Ctrl-[":"indentLess","Ctrl-]":"indentMore",fallthrough:"basic"},jd.macDefault={"Cmd-A":"selectAll","Cmd-D":"deleteLine","Cmd-Z":"undo","Shift-Cmd-Z":"redo","Cmd-Y":"redo","Cmd-Up":"goDocStart","Cmd-End":"goDocEnd","Cmd-Down":"goDocEnd","Alt-Left":"goGroupLeft","Alt-Right":"goGroupRight","Cmd-Left":"goLineStart","Cmd-Right":"goLineEnd","Alt-Backspace":"delGroupBefore","Ctrl-Alt-Backspace":"delGroupAfter","Alt-Delete":"delGroupAfter","Cmd-S":"save","Cmd-F":"find","Cmd-G":"findNext","Shift-Cmd-G":"findPrev","Cmd-Alt-F":"replace","Shift-Cmd-Alt-F":"replaceAll","Cmd-[":"indentLess","Cmd-]":"indentMore","Cmd-Backspace":"delLineLeft",fallthrough:["basic","emacsy"]},jd["default"]=p?jd.macDefault:jd.pcDefault,jd.emacsy={"Ctrl-F":"goCharRight","Ctrl-B":"goCharLeft","Ctrl-P":"goLineUp","Ctrl-N":"goLineDown","Alt-F":"goWordRight","Alt-B":"goWordLeft","Ctrl-A":"goLineStart","Ctrl-E":"goLineEnd","Ctrl-V":"goPageDown","Shift-Ctrl-V":"goPageUp","Ctrl-D":"delCharAfter","Ctrl-H":"delCharBefore","Alt-D":"delWordAfter","Alt-Backspace":"delWordBefore","Ctrl-K":"killLine","Ctrl-T":"transposeChars"},w.lookupKey=ld,w.isModifierKey=md,w.keyName=nd,w.fromTextArea=function(a,b){function e(){a.value=i.getValue()}if(b||(b={}),b.value=a.value,!b.tabindex&&a.tabindex&&(b.tabindex=a.tabindex),!b.placeholder&&a.placeholder&&(b.placeholder=a.placeholder),null==b.autofocus){var c=document.body;try{c=document.activeElement}catch(d){}b.autofocus=c==a||null!=a.getAttribute("autofocus")&&c==document.body}if(a.form&&(Ke(a.form,"submit",e),!b.leaveSubmitMethodAlone)){var f=a.form,g=f.submit;try{var h=f.submit=function(){e(),f.submit=g,f.submit(),f.submit=h}}catch(d){}}a.style.display="none";var i=w(function(b){a.parentNode.insertBefore(b,a.nextSibling)},b);return i.save=e,i.getTextArea=function(){return a},i.toTextArea=function(){e(),a.parentNode.removeChild(i.getWrapperElement()),a.style.display="",a.form&&(Le(a.form,"submit",e),"function"==typeof a.form.submit&&(a.form.submit=g))},i},od.prototype={eol:function(){return this.pos>=this.string.length},sol:function(){return 0==this.pos},peek:function(){return this.string.charAt(this.pos)||void 0},next:function(){return this.pos<this.string.length?this.string.charAt(this.pos++):void 0},eat:function(a){var b=this.string.charAt(this.pos);if("string"==typeof a)var c=b==a;else var c=b&&(a.test?a.test(b):a(b));return c?(++this.pos,b):void 0},eatWhile:function(a){for(var b=this.pos;this.eat(a););return this.pos>b},eatSpace:function(){for(var a=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>a},skipToEnd:function(){this.pos=this.string.length},skipTo:function(a){var b=this.string.indexOf(a,this.pos);return b>-1?(this.pos=b,!0):void 0},backUp:function(a){this.pos-=a},column:function(){return this.lastColumnPos<this.start&&(this.lastColumnValue=Xe(this.string,this.start,this.tabSize,this.lastColumnPos,this.lastColumnValue),this.lastColumnPos=this.start),this.lastColumnValue},indentation:function(){return Xe(this.string,null,this.tabSize)},match:function(a,b,c){if("string"!=typeof a){var f=this.string.slice(this.pos).match(a);return f&&f.index>0?null:(f&&b!==!1&&(this.pos+=f[0].length),f)}var d=function(a){return c?a.toLowerCase():a},e=this.string.substr(this.pos,a.length);return d(e)==d(a)?(b!==!1&&(this.pos+=a.length),!0):void 0},current:function(){return this.string.slice(this.start,this.pos)}},w.StringStream=od,w.TextMarker=pd,Te(pd),pd.prototype.clear=function(){if(!this.explicitlyCleared){var a=this.doc.cm,b=a&&!a.curOp;if(b&&Cb(a),Se(this,"clear")){var c=this.find();c&&Pe(this,"clear",c.from,c.to)}for(var d=null,e=null,f=0;f<this.lines.length;++f){var g=this.lines[f],h=td(g.markedSpans,this);null!=h.to&&(e=oe(g)),g.markedSpans=ud(g.markedSpans,h),null!=h.from?d=oe(g):this.collapsed&&!Fd(this.doc,g)&&a&&ne(g,zb(a.display))}if(a&&this.collapsed&&!a.options.lineWrapping)for(var f=0;f<this.lines.length;++f){var i=Ed(a.doc,this.lines[f]),j=G(a.doc,i);j>a.display.maxLineLength&&(a.display.maxLine=i,a.display.maxLineLength=j,a.display.maxLineChanged=!0)}null!=d&&a&&Hb(a,d,e+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,a&&Lc(a)),b&&Db(a)}},pd.prototype.find=function(){for(var a,b,c=0;c<this.lines.length;++c){var d=this.lines[c],e=td(d.markedSpans,this);if(null!=e.from||null!=e.to){var f=oe(d);null!=e.from&&(a=Ac(f,e.from)),null!=e.to&&(b=Ac(f,e.to))}}return"bookmark"==this.type?a:a&&{from:a,to:b}},pd.prototype.changed=function(){var a=this.find(),b=this.doc.cm;if(a&&b){"bookmark"!=this.type&&(a=a.from);var c=ke(this.doc,a.line);if(jb(b,c),a.line>=b.display.showingFrom&&a.line<b.display.showingTo){for(var d=b.display.lineDiv.firstChild;d;d=d.nextSibling)if(d.lineObj==c){d.offsetHeight!=c.height&&ne(c,d.offsetHeight);break}Gb(b,function(){b.curOp.selectionChanged=b.curOp.forceUpdate=b.curOp.updateMaxLine=!0})}}},pd.prototype.attachLine=function(a){if(!this.lines.length&&this.doc.cm){var b=this.doc.cm.curOp;b.maybeHiddenMarkers&&-1!=af(b.maybeHiddenMarkers,this)||(b.maybeUnhiddenMarkers||(b.maybeUnhiddenMarkers=[])).push(this)}this.lines.push(a)},pd.prototype.detachLine=function(a){if(this.lines.splice(af(this.lines,a),1),!this.lines.length&&this.doc.cm){var b=this.doc.cm.curOp;(b.maybeHiddenMarkers||(b.maybeHiddenMarkers=[])).push(this)}},w.SharedTextMarker=rd,Te(rd),rd.prototype.clear=function(){if(!this.explicitlyCleared){this.explicitlyCleared=!0;for(var a=0;a<this.markers.length;++a)this.markers[a].clear();Pe(this,"clear")}},rd.prototype.find=function(){return this.primary.find()};var Jd=w.LineWidget=function(a,b,c){if(c)for(var d in c)c.hasOwnProperty(d)&&(this[d]=c[d]);this.cm=a,this.node=b};Te(Jd),Jd.prototype.clear=Kd(function(){var a=this.line.widgets,b=oe(this.line);if(null!=b&&a){for(var c=0;c<a.length;++c)a[c]==this&&a.splice(c--,1);a.length||(this.line.widgets=null);var d=qe(this.cm,this.line)<this.cm.doc.scrollTop;ne(this.line,Math.max(0,this.line.height-Ld(this))),d&&Sc(this.cm,0,-this.height),Hb(this.cm,b,b+1)}}),Jd.prototype.changed=Kd(function(){var a=this.height;this.height=null;var b=Ld(this)-a;if(b){ne(this.line,this.line.height+b);var c=oe(this.line);Hb(this.cm,c,c+1)}});var Nd=w.Line=function(a,b,c){this.text=a,Id(this,b),this.height=c?c(this):1};Te(Nd);var Ud={},Xd=/[\t\u0000-\u0019\u00ad\u200b\u2028\u2029\uFEFF]/g;ce.prototype={chunkSize:function(){return this.lines.length},removeInner:function(a,b){for(var c=a,d=a+b;d>c;++c){var e=this.lines[c];this.height-=e.height,Pd(e),Pe(e,"delete")}this.lines.splice(a,b)},collapse:function(a){a.splice.apply(a,[a.length,0].concat(this.lines))},insertInner:function(a,b,c){this.height+=c,this.lines=this.lines.slice(0,a).concat(b).concat(this.lines.slice(a));for(var d=0,e=b.length;e>d;++d)b[d].parent=this
7
+ },iterN:function(a,b,c){for(var d=a+b;d>a;++a)if(c(this.lines[a]))return!0}},de.prototype={chunkSize:function(){return this.size},removeInner:function(a,b){this.size-=b;for(var c=0;c<this.children.length;++c){var d=this.children[c],e=d.chunkSize();if(e>a){var f=Math.min(b,e-a),g=d.height;if(d.removeInner(a,f),this.height-=g-d.height,e==f&&(this.children.splice(c--,1),d.parent=null),0==(b-=f))break;a=0}else a-=e}if(this.size-b<25){var h=[];this.collapse(h),this.children=[new ce(h)],this.children[0].parent=this}},collapse:function(a){for(var b=0,c=this.children.length;c>b;++b)this.children[b].collapse(a)},insertInner:function(a,b,c){this.size+=b.length,this.height+=c;for(var d=0,e=this.children.length;e>d;++d){var f=this.children[d],g=f.chunkSize();if(g>=a){if(f.insertInner(a,b,c),f.lines&&f.lines.length>50){for(;f.lines.length>50;){var h=f.lines.splice(f.lines.length-25,25),i=new ce(h);f.height-=i.height,this.children.splice(d+1,0,i),i.parent=this}this.maybeSpill()}break}a-=g}},maybeSpill:function(){if(!(this.children.length<=10)){var a=this;do{var b=a.children.splice(a.children.length-5,5),c=new de(b);if(a.parent){a.size-=c.size,a.height-=c.height;var e=af(a.parent.children,a);a.parent.children.splice(e+1,0,c)}else{var d=new de(a.children);d.parent=a,a.children=[d,c],a=d}c.parent=a.parent}while(a.children.length>10);a.parent.maybeSpill()}},iterN:function(a,b,c){for(var d=0,e=this.children.length;e>d;++d){var f=this.children[d],g=f.chunkSize();if(g>a){var h=Math.min(b,g-a);if(f.iterN(a,h,c))return!0;if(0==(b-=h))break;a=0}else a-=g}}};var ee=0,fe=w.Doc=function(a,b,c){if(!(this instanceof fe))return new fe(a,b,c);null==c&&(c=0),de.call(this,[new ce([new Nd("",null)])]),this.first=c,this.scrollTop=this.scrollLeft=0,this.cantEdit=!1,this.history=se(),this.cleanGeneration=1,this.frontier=c;var d=Ac(c,0);this.sel={from:d,to:d,head:d,anchor:d,shift:!1,extend:!1,goalColumn:null},this.id=++ee,this.modeOption=b,"string"==typeof a&&(a=vf(a)),be(this,{from:d,to:d,text:a},null,{head:d,anchor:d})};fe.prototype=bf(de.prototype,{constructor:fe,iter:function(a,b,c){c?this.iterN(a-this.first,b-a,c):this.iterN(this.first,this.first+this.size,a)},insert:function(a,b){for(var c=0,d=0,e=b.length;e>d;++d)c+=b[d].height;this.insertInner(a-this.first,b,c)},remove:function(a,b){this.removeInner(a-this.first,b)},getValue:function(a){var b=me(this,this.first,this.first+this.size);return a===!1?b:b.join(a||"\n")},setValue:function(a){var b=Ac(this.first,0),c=this.first+this.size-1;tc(this,{from:b,to:Ac(c,ke(this,c).text.length),text:vf(a),origin:"setValue"},{head:b,anchor:b},!0)},replaceRange:function(a,b,c,d){b=Fc(this,b),c=c?Fc(this,c):b,zc(this,a,b,c,d)},getRange:function(a,b,c){var d=le(this,Fc(this,a),Fc(this,b));return c===!1?d:d.join(c||"\n")},getLine:function(a){var b=this.getLineHandle(a);return b&&b.text},setLine:function(a,b){Hc(this,a)&&zc(this,b,Ac(a,0),Fc(this,Ac(a)))},removeLine:function(a){a?zc(this,"",Fc(this,Ac(a-1)),Fc(this,Ac(a))):zc(this,"",Ac(0,0),Fc(this,Ac(1,0)))},getLineHandle:function(a){return Hc(this,a)?ke(this,a):void 0},getLineNumber:function(a){return oe(a)},getLineHandleVisualStart:function(a){return"number"==typeof a&&(a=ke(this,a)),Ed(this,a)},lineCount:function(){return this.size},firstLine:function(){return this.first},lastLine:function(){return this.first+this.size-1},clipPos:function(a){return Fc(this,a)},getCursor:function(a){var c,b=this.sel;return c=null==a||"head"==a?b.head:"anchor"==a?b.anchor:"end"==a||a===!1?b.to:b.from,Dc(c)},somethingSelected:function(){return!Bc(this.sel.head,this.sel.anchor)},setCursor:Fb(function(a,b,c){var d=Fc(this,"number"==typeof a?Ac(a,b||0):a);c?Ic(this,d):Kc(this,d,d)}),setSelection:Fb(function(a,b,c){Kc(this,Fc(this,a),Fc(this,b||a),c)}),extendSelection:Fb(function(a,b,c){Ic(this,Fc(this,a),b&&Fc(this,b),c)}),getSelection:function(a){return this.getRange(this.sel.from,this.sel.to,a)},replaceSelection:function(a,b,c){tc(this,{from:this.sel.from,to:this.sel.to,text:vf(a),origin:c},b||"around")},undo:Fb(function(){vc(this,"undo")}),redo:Fb(function(){vc(this,"redo")}),setExtending:function(a){this.sel.extend=a},historySize:function(){var a=this.history;return{undo:a.done.length,redo:a.undone.length}},clearHistory:function(){this.history=se(this.history.maxGeneration)},markClean:function(){this.cleanGeneration=this.changeGeneration()},changeGeneration:function(){return this.history.lastOp=this.history.lastOrigin=null,this.history.generation},isClean:function(a){return this.history.generation==(a||this.cleanGeneration)},getHistory:function(){return{done:ye(this.history.done),undone:ye(this.history.undone)}},setHistory:function(a){var b=this.history=se(this.history.maxGeneration);b.done=a.done.slice(0),b.undone=a.undone.slice(0)},markText:function(a,b,c){return qd(this,Fc(this,a),Fc(this,b),c,"range")},setBookmark:function(a,b){var c={replacedWith:b&&(null==b.nodeType?b.widget:b),insertLeft:b&&b.insertLeft};return a=Fc(this,a),qd(this,a,a,c,"bookmark")},findMarksAt:function(a){a=Fc(this,a);var b=[],c=ke(this,a.line).markedSpans;if(c)for(var d=0;d<c.length;++d){var e=c[d];(null==e.from||e.from<=a.ch)&&(null==e.to||e.to>=a.ch)&&b.push(e.marker.parent||e.marker)}return b},getAllMarks:function(){var a=[];return this.iter(function(b){var c=b.markedSpans;if(c)for(var d=0;d<c.length;++d)null!=c[d].from&&a.push(c[d].marker)}),a},posFromIndex:function(a){var b,c=this.first;return this.iter(function(d){var e=d.text.length+1;return e>a?(b=a,!0):(a-=e,++c,void 0)}),Fc(this,Ac(c,b))},indexFromPos:function(a){a=Fc(this,a);var b=a.ch;return a.line<this.first||a.ch<0?0:(this.iter(this.first,a.line,function(a){b+=a.text.length+1}),b)},copy:function(a){var b=new fe(me(this,this.first,this.first+this.size),this.modeOption,this.first);return b.scrollTop=this.scrollTop,b.scrollLeft=this.scrollLeft,b.sel={from:this.sel.from,to:this.sel.to,head:this.sel.head,anchor:this.sel.anchor,shift:this.sel.shift,extend:!1,goalColumn:this.sel.goalColumn},a&&(b.history.undoDepth=this.history.undoDepth,b.setHistory(this.getHistory())),b},linkedDoc:function(a){a||(a={});var b=this.first,c=this.first+this.size;null!=a.from&&a.from>b&&(b=a.from),null!=a.to&&a.to<c&&(c=a.to);var d=new fe(me(this,b,c),a.mode||this.modeOption,b);return a.sharedHist&&(d.history=this.history),(this.linked||(this.linked=[])).push({doc:d,sharedHist:a.sharedHist}),d.linked=[{doc:this,isParent:!0,sharedHist:a.sharedHist}],d},unlinkDoc:function(a){if(a instanceof w&&(a=a.doc),this.linked)for(var b=0;b<this.linked.length;++b){var c=this.linked[b];if(c.doc==a){this.linked.splice(b,1),a.unlinkDoc(this);break}}if(a.history==this.history){var d=[a.id];ie(a,function(a){d.push(a.id)},!0),a.history=se(),a.history.done=ye(this.history.done,d),a.history.undone=ye(this.history.undone,d)}},iterLinkedDocs:function(a){ie(this,a)},getMode:function(){return this.mode},getEditor:function(){return this.cm}}),fe.prototype.eachLine=fe.prototype.iter;var ge="iter insert remove copy getEditor".split(" ");for(var he in fe.prototype)fe.prototype.hasOwnProperty(he)&&af(ge,he)<0&&(w.prototype[he]=function(a){return function(){return a.apply(this.doc,arguments)}}(fe.prototype[he]));Te(fe),w.e_stop=He,w.e_preventDefault=Ee,w.e_stopPropagation=Fe;var Ne,Oe=0;w.on=Ke,w.off=Le,w.signal=Me;var Ue=30,Ve=w.Pass={toString:function(){return"CodeMirror.Pass"}};We.prototype={set:function(a,b){clearTimeout(this.id),this.id=setTimeout(b,a)}},w.countColumn=Xe;var Ye=[""],ff=/[\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/,jf=/[\u0300-\u036F\u0483-\u0487\u0488-\u0489\u0591-\u05BD\u05BF\u05C1-\u05C2\u05C4-\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7-\u06E8\u06EA-\u06ED\uA66F\uA670-\uA672\uA674-\uA67D\uA69F\udc00-\udfff]/;w.replaceGetRect=function(a){of=a};var pf=function(){if(d)return!1;var a=kf("div");return"draggable"in a||"dragDrop"in a}();a?qf=function(a,b){return 36==a.charCodeAt(b-1)&&39==a.charCodeAt(b)}:i&&!/Version\/([6-9]|\d\d)\b/.test(navigator.userAgent)?qf=function(a,b){return/\-[^ \-?]|\?[^ !\'\"\),.\-\/:;\?\]\}]/.test(a.slice(b-1,b+1))}:e&&!/Chrome\/(?:29|[3-9]\d|\d\d\d)\./.test(navigator.userAgent)&&(qf=function(a,b){if(b>1&&45==a.charCodeAt(b-1)){if(/\w/.test(a.charAt(b-2))&&/[^\-?\.]/.test(a.charAt(b)))return!0;if(b>2&&/[\d\.,]/.test(a.charAt(b-2))&&/[\d\.,]/.test(a.charAt(b)))return!1}return/[~!#%&*)=+}\]|\"\.>,:;][({[<]|-[^\-?\.\u2010-\u201f\u2026]|\?[\w~`@#$%\^&*(_=+{[|><]|\u2026[\w~`@#$%\^&*(_=+{[><]/.test(a.slice(b-1,b+1))});var rf,tf,vf=3!="\n\nb".split(/\n/).length?function(a){for(var b=0,c=[],d=a.length;d>=b;){var e=a.indexOf("\n",b);-1==e&&(e=a.length);var f=a.slice(b,"\r"==a.charAt(e-1)?e-1:e),g=f.indexOf("\r");-1!=g?(c.push(f.slice(0,g)),b+=g+1):(c.push(f),b=e+1)}return c}:function(a){return a.split(/\r\n?|\n/)};w.splitLines=vf;var wf=window.getSelection?function(a){try{return a.selectionStart!=a.selectionEnd}catch(b){return!1}}:function(a){try{var b=a.ownerDocument.selection.createRange()}catch(c){}return b&&b.parentElement()==a?0!=b.compareEndPoints("StartToEnd",b):!1},xf=function(){var a=kf("div");return"oncopy"in a?!0:(a.setAttribute("oncopy","return;"),"function"==typeof a.oncopy)}(),yf={3:"Enter",8:"Backspace",9:"Tab",13:"Enter",16:"Shift",17:"Ctrl",18:"Alt",19:"Pause",20:"CapsLock",27:"Esc",32:"Space",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"Left",38:"Up",39:"Right",40:"Down",44:"PrintScrn",45:"Insert",46:"Delete",59:";",91:"Mod",92:"Mod",93:"Mod",109:"-",107:"=",127:"Delete",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'",63276:"PageUp",63277:"PageDown",63275:"End",63273:"Home",63234:"Left",63232:"Up",63235:"Right",63233:"Down",63302:"Insert",63272:"Delete"};w.keyNames=yf,function(){for(var a=0;10>a;a++)yf[a+48]=String(a);for(var a=65;90>=a;a++)yf[a]=String.fromCharCode(a);for(var a=1;12>=a;a++)yf[a+111]=yf[a+63235]="F"+a}();var Hf,Mf=function(){function c(c){return 255>=c?a.charAt(c):c>=1424&&1524>=c?"R":c>=1536&&1791>=c?b.charAt(c-1536):c>=1792&&2220>=c?"r":"L"}var a="bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLL",b="rrrrrrrrrrrr,rNNmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmrrrrrrrnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmNmmmmrrrrrrrrrrrrrrrrrr",d=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,e=/[stwN]/,f=/[LRr]/,g=/[Lb1n]/,h=/[1n]/,i="L";return function(a){if(!d.test(a))return!1;for(var l,b=a.length,j=[],k=0;b>k;++k)j.push(l=c(a.charCodeAt(k)));for(var k=0,m=i;b>k;++k){var l=j[k];"m"==l?j[k]=m:m=l}for(var k=0,n=i;b>k;++k){var l=j[k];"1"==l&&"r"==n?j[k]="n":f.test(l)&&(n=l,"r"==l&&(j[k]="R"))}for(var k=1,m=j[0];b-1>k;++k){var l=j[k];"+"==l&&"1"==m&&"1"==j[k+1]?j[k]="1":","!=l||m!=j[k+1]||"1"!=m&&"n"!=m||(j[k]=m),m=l}for(var k=0;b>k;++k){var l=j[k];if(","==l)j[k]="N";else if("%"==l){for(var o=k+1;b>o&&"%"==j[o];++o);for(var p=k&&"!"==j[k-1]||b-1>o&&"1"==j[o]?"1":"N",q=k;o>q;++q)j[q]=p;k=o-1}}for(var k=0,n=i;b>k;++k){var l=j[k];"L"==n&&"1"==l?j[k]="L":f.test(l)&&(n=l)}for(var k=0;b>k;++k)if(e.test(j[k])){for(var o=k+1;b>o&&e.test(j[o]);++o);for(var r="L"==(k?j[k-1]:i),s="L"==(b-1>o?j[o]:i),p=r||s?"L":"R",q=k;o>q;++q)j[q]=p;k=o-1}for(var u,t=[],k=0;b>k;)if(g.test(j[k])){var v=k;for(++k;b>k&&g.test(j[k]);++k);t.push({from:v,to:k,level:0})}else{var w=k,x=t.length;for(++k;b>k&&"L"!=j[k];++k);for(var q=w;k>q;)if(h.test(j[q])){q>w&&t.splice(x,0,{from:w,to:q,level:1});var y=q;for(++q;k>q&&h.test(j[q]);++q);t.splice(x,0,{from:y,to:q,level:2}),w=q}else++q;k>w&&t.splice(x,0,{from:w,to:k,level:1})}return 1==t[0].level&&(u=a.match(/^\s+/))&&(t[0].from=u[0].length,t.unshift({from:0,to:u[0].length,level:0})),1==$e(t).level&&(u=a.match(/\s+$/))&&($e(t).to-=u[0].length,t.push({from:b-u[0].length,to:b,level:0})),t[0].level!=$e(t).level&&t.push({from:b,to:b,level:t[0].level}),t}}();return w.version="3.16.1",w}(),CodeMirror.defineMode("clike",function(a,b){function n(a,b){var c=a.next();if(j[c]){var d=j[c](a,b);if(d!==!1)return d}if('"'==c||"'"==c)return b.tokenize=o(c),b.tokenize(a,b);if(/[\[\]{}\(\),;\:\.]/.test(c))return m=c,null;if(/\d/.test(c))return a.eatWhile(/[\w\.]/),"number";if("/"==c){if(a.eat("*"))return b.tokenize=p,p(a,b);if(a.eat("/"))return a.skipToEnd(),"comment"}if(l.test(c))return a.eatWhile(l),"operator";a.eatWhile(/[\w\$_]/);var e=a.current();return f.propertyIsEnumerable(e)?(h.propertyIsEnumerable(e)&&(m="newstatement"),"keyword"):g.propertyIsEnumerable(e)?(h.propertyIsEnumerable(e)&&(m="newstatement"),"builtin"):i.propertyIsEnumerable(e)?"atom":"variable"}function o(a){return function(b,c){for(var e,d=!1,f=!1;null!=(e=b.next());){if(e==a&&!d){f=!0;break}d=!d&&"\\"==e}return(f||!d&&!k)&&(c.tokenize=null),"string"}}function p(a,b){for(var d,c=!1;d=a.next();){if("/"==d&&c){b.tokenize=null;break}c="*"==d}return"comment"}function q(a,b,c,d,e){this.indented=a,this.column=b,this.type=c,this.align=d,this.prev=e}function r(a,b,c){var d=a.indented;return a.context&&"statement"==a.context.type&&(d=a.context.indented),a.context=new q(d,b,c,null,a.context)}function s(a){var b=a.context.type;return(")"==b||"]"==b||"}"==b)&&(a.indented=a.context.indented),a.context=a.context.prev}var m,c=a.indentUnit,d=b.statementIndentUnit||c,e=b.dontAlignCalls,f=b.keywords||{},g=b.builtin||{},h=b.blockKeywords||{},i=b.atoms||{},j=b.hooks||{},k=b.multiLineStrings,l=/[+\-*&%=<>!?|\/]/;return{startState:function(a){return{tokenize:null,context:new q((a||0)-c,0,"top",!1),indented:0,startOfLine:!0}},token:function(a,b){var c=b.context;if(a.sol()&&(null==c.align&&(c.align=!1),b.indented=a.indentation(),b.startOfLine=!0),a.eatSpace())return null;m=null;var d=(b.tokenize||n)(a,b);if("comment"==d||"meta"==d)return d;if(null==c.align&&(c.align=!0),";"!=m&&":"!=m&&","!=m||"statement"!=c.type)if("{"==m)r(b,a.column(),"}");else if("["==m)r(b,a.column(),"]");else if("("==m)r(b,a.column(),")");else if("}"==m){for(;"statement"==c.type;)c=s(b);for("}"==c.type&&(c=s(b));"statement"==c.type;)c=s(b)}else m==c.type?s(b):(("}"==c.type||"top"==c.type)&&";"!=m||"statement"==c.type&&"newstatement"==m)&&r(b,a.column(),"statement");else s(b);return b.startOfLine=!1,d},indent:function(a,b){if(a.tokenize!=n&&null!=a.tokenize)return CodeMirror.Pass;var f=a.context,g=b&&b.charAt(0);"statement"==f.type&&"}"==g&&(f=f.prev);var h=g==f.type;return"statement"==f.type?f.indented+("{"==g?0:d):!f.align||e&&")"==f.type?")"!=f.type||h?f.indented+(h?0:c):f.indented+d:f.column+(h?0:1)},electricChars:"{}",blockCommentStart:"/*",blockCommentEnd:"*/",lineComment:"//",fold:"brace"}}),function(){function a(a){for(var b={},c=a.split(" "),d=0;d<c.length;++d)b[c[d]]=!0;return b}function c(a,b){if(!b.startOfLine)return!1;for(;;){if(!a.skipTo("\\")){a.skipToEnd(),b.tokenize=null;break}if(a.next(),a.eol()){b.tokenize=c;break}}return"meta"}function d(a,b){for(var c;null!=(c=a.next());)if('"'==c&&!a.eat('"')){b.tokenize=null;break}return"string"}function e(a,b){for(var c=0;c<a.length;++c)CodeMirror.defineMIME(a[c],b)}var b="auto if break int case long char register continue return default short do sizeof double static else struct entry switch extern typedef float union for unsigned goto while enum void const signed volatile";e(["text/x-csrc","text/x-c","text/x-chdr"],{name:"clike",keywords:a(b),blockKeywords:a("case do else for if switch while struct"),atoms:a("null"),hooks:{"#":c}}),e(["text/x-c++src","text/x-c++hdr"],{name:"clike",keywords:a(b+" asm dynamic_cast namespace reinterpret_cast try bool explicit new "+"static_cast typeid catch operator template typename class friend private "+"this using const_cast inline public throw virtual delete mutable protected "+"wchar_t"),blockKeywords:a("catch class do else finally for if struct switch try while"),atoms:a("true false null"),hooks:{"#":c}}),CodeMirror.defineMIME("text/x-java",{name:"clike",keywords:a("abstract assert boolean break byte case catch char class const continue default do double else enum extends final finally float for goto if implements import instanceof int interface long native new package private protected public return short static strictfp super switch synchronized this throw throws transient try void volatile while"),blockKeywords:a("catch class do else finally for if switch try while"),atoms:a("true false null"),hooks:{"@":function(a){return a.eatWhile(/[\w\$_]/),"meta"}}}),CodeMirror.defineMIME("text/x-csharp",{name:"clike",keywords:a("abstract as base break case catch checked class const continue default delegate do else enum event explicit extern finally fixed for foreach goto if implicit in interface internal is lock namespace new operator out override params private protected public readonly ref return sealed sizeof stackalloc static struct switch this throw try typeof unchecked unsafe using virtual void volatile while add alias ascending descending dynamic from get global group into join let orderby partial remove select set value var yield"),blockKeywords:a("catch class do else finally for foreach if struct switch try while"),builtin:a("Boolean Byte Char DateTime DateTimeOffset Decimal Double Guid Int16 Int32 Int64 Object SByte Single String TimeSpan UInt16 UInt32 UInt64 bool byte char decimal double short int long object sbyte float string ushort uint ulong"),atoms:a("true false null"),hooks:{"@":function(a,b){return a.eat('"')?(b.tokenize=d,d(a,b)):(a.eatWhile(/[\w\$_]/),"meta")}}}),CodeMirror.defineMIME("text/x-scala",{name:"clike",keywords:a("abstract case catch class def do else extends false final finally for forSome if implicit import lazy match new null object override package private protected return sealed super this throw trait try trye type val var while with yield _ : = => <- <: <% >: # @ assert assume require print println printf readLine readBoolean readByte readShort readChar readInt readLong readFloat readDouble AnyVal App Application Array BufferedIterator BigDecimal BigInt Char Console Either Enumeration Equiv Error Exception Fractional Function IndexedSeq Integral Iterable Iterator List Map Numeric Nil NotNull Option Ordered Ordering PartialFunction PartialOrdering Product Proxy Range Responder Seq Serializable Set Specializable Stream StringBuilder StringContext Symbol Throwable Traversable TraversableOnce Tuple Unit Vector :: #:: Boolean Byte Character CharSequence Class ClassLoader Cloneable Comparable Compiler Double Exception Float Integer Long Math Number Object Package Pair Process Runtime Runnable SecurityManager Short StackTraceElement StrictMath String StringBuffer System Thread ThreadGroup ThreadLocal Throwable Triple Void"),blockKeywords:a("catch class do else finally for forSome if match switch try while"),atoms:a("true false null"),hooks:{"@":function(a){return a.eatWhile(/[\w\$_]/),"meta"}}}),e(["x-shader/x-vertex","x-shader/x-fragment"],{name:"clike",keywords:a("float int bool void vec2 vec3 vec4 ivec2 ivec3 ivec4 bvec2 bvec3 bvec4 mat2 mat3 mat4 sampler1D sampler2D sampler3D samplerCube sampler1DShadow sampler2DShadowconst attribute uniform varying break continue discard return for while do if else struct in out inout"),blockKeywords:a("for while do if else struct"),builtin:a("radians degrees sin cos tan asin acos atan pow exp log exp2 sqrt inversesqrt abs sign floor ceil fract mod min max clamp mix step smootstep length distance dot cross normalize ftransform faceforward reflect refract matrixCompMult lessThan lessThanEqual greaterThan greaterThanEqual equal notEqual any all not texture1D texture1DProj texture1DLod texture1DProjLod texture2D texture2DProj texture2DLod texture2DProjLod texture3D texture3DProj texture3DLod texture3DProjLod textureCube textureCubeLod shadow1D shadow2D shadow1DProj shadow2DProj shadow1DLod shadow2DLod shadow1DProjLod shadow2DProjLod dFdx dFdy fwidth noise1 noise2 noise3 noise4"),atoms:a("true false gl_FragColor gl_SecondaryColor gl_Normal gl_Vertex gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2 gl_MultiTexCoord3 gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 gl_FogCoord gl_Position gl_PointSize gl_ClipVertex gl_FrontColor gl_BackColor gl_FrontSecondaryColor gl_BackSecondaryColor gl_TexCoord gl_FogFragCoord gl_FragCoord gl_FrontFacing gl_FragColor gl_FragData gl_FragDepth gl_ModelViewMatrix gl_ProjectionMatrix gl_ModelViewProjectionMatrix gl_TextureMatrix gl_NormalMatrix gl_ModelViewMatrixInverse gl_ProjectionMatrixInverse gl_ModelViewProjectionMatrixInverse gl_TexureMatrixTranspose gl_ModelViewMatrixInverseTranspose gl_ProjectionMatrixInverseTranspose gl_ModelViewProjectionMatrixInverseTranspose gl_TextureMatrixInverseTranspose gl_NormalScale gl_DepthRange gl_ClipPlane gl_Point gl_FrontMaterial gl_BackMaterial gl_LightSource gl_LightModel gl_FrontLightModelProduct gl_BackLightModelProduct gl_TextureColor gl_EyePlaneS gl_EyePlaneT gl_EyePlaneR gl_EyePlaneQ gl_FogParameters gl_MaxLights gl_MaxClipPlanes gl_MaxTextureUnits gl_MaxTextureCoords gl_MaxVertexAttribs gl_MaxVertexUniformComponents gl_MaxVaryingFloats gl_MaxVertexTextureImageUnits gl_MaxTextureImageUnits gl_MaxFragmentUniformComponents gl_MaxCombineTextureImageUnits gl_MaxDrawBuffers"),hooks:{"#":c}})}(),CodeMirror.defineMode("coffeescript",function(a){function c(a){return new RegExp("^(("+a.join(")|(")+"))\\b")}function s(a,c){if(a.sol()){var l=c.scopes[0].offset;if(a.eatSpace()){var m=a.indentation();return m>l?"indent":l>m?"dedent":null}l>0&&w(a,c)}if(a.eatSpace())return null;var q=a.peek();if(a.match("####"))return a.skipToEnd(),"comment";if(a.match("###"))return c.tokenize=u,c.tokenize(a,c);if("#"===q)return a.skipToEnd(),"comment";if(a.match(/^-?[0-9\.]/,!1)){var s=!1;if(a.match(/^-?\d*\.\d+(e[\+\-]?\d+)?/i)&&(s=!0),a.match(/^-?\d+\.\d*/)&&(s=!0),a.match(/^-?\.\d+/)&&(s=!0),s)return"."==a.peek()&&a.backUp(1),"number";var v=!1;if(a.match(/^-?0x[0-9a-f]+/i)&&(v=!0),a.match(/^-?[1-9]\d*(e[\+\-]?\d+)?/)&&(v=!0),a.match(/^-?0(?![\dx])/i)&&(v=!0),v)return"number"}if(a.match(o))return c.tokenize=t(a.current(),"string"),c.tokenize(a,c);if(a.match(p)){if("/"!=a.current()||a.match(/^.*\//,!1))return c.tokenize=t(a.current(),"string-2"),c.tokenize(a,c);a.backUp(1)}return a.match(h)||a.match(g)?"punctuation":a.match(f)||a.match(d)||a.match(k)?"operator":a.match(e)?"punctuation":a.match(r)?"atom":a.match(n)?"keyword":a.match(i)?"variable":a.match(j)?"property":(a.next(),b)}function t(c,d){var e=1==c.length;return function(f,g){for(;!f.eol();)if(f.eatWhile(/[^'"\/\\]/),f.eat("\\")){if(f.next(),e&&f.eol())return d}else{if(f.match(c))return g.tokenize=s,d;f.eat(/['"\/]/)}return e&&(a.mode.singleLineStringErrors?d=b:g.tokenize=s),d}}function u(a,b){for(;!a.eol();){if(a.eatWhile(/[^#]/),a.match("###")){b.tokenize=s;break}a.eatWhile("#")}return"comment"}function v(b,c,d){d=d||"coffee";var e=0;if("coffee"===d){for(var f=0;f<c.scopes.length;f++)if("coffee"===c.scopes[f].type){e=c.scopes[f].offset+a.indentUnit;break}}else e=b.column()+b.current().length;c.scopes.unshift({offset:e,type:d})}function w(a,b){if(1!=b.scopes.length){if("coffee"===b.scopes[0].type){for(var c=a.indentation(),d=-1,e=0;e<b.scopes.length;++e)if(c===b.scopes[e].offset){d=e;break}if(-1===d)return!0;for(;b.scopes[0].offset!==c;)b.scopes.shift();return!1}return b.scopes.shift(),!1}}function x(a,c){var d=c.tokenize(a,c),e=a.current();if("."===e)return d=c.tokenize(a,c),e=a.current(),/^\.[\w$]+$/.test(e)?"variable":b;"return"===e&&(c.dedent+=1),("->"!==e&&"=>"!==e||c.lambda||"coffee"!=c.scopes[0].type||""!==a.peek())&&"indent"!==d||v(a,c);var f="[({".indexOf(e);return-1!==f&&v(a,c,"])}".slice(f,f+1)),l.exec(e)&&v(a,c),"then"==e&&w(a,c),"dedent"===d&&w(a,c)?b:(f="])}".indexOf(e),-1!==f&&w(a,c)?b:(c.dedent>0&&a.eol()&&"coffee"==c.scopes[0].type&&(c.scopes.length>1&&c.scopes.shift(),c.dedent-=1),d))}var b="error",d=new RegExp("^[\\+\\-\\*/%&|\\^~<>!?]"),e=new RegExp("^[\\(\\)\\[\\]\\{\\},:`=;\\.]"),f=new RegExp("^((->)|(=>)|(\\+\\+)|(\\+\\=)|(\\-\\-)|(\\-\\=)|(\\*\\*)|(\\*\\=)|(\\/\\/)|(\\/\\=)|(==)|(!=)|(<=)|(>=)|(<>)|(<<)|(>>)|(//))"),g=new RegExp("^((\\.\\.)|(\\+=)|(\\-=)|(\\*=)|(%=)|(/=)|(&=)|(\\|=)|(\\^=))"),h=new RegExp("^((\\.\\.\\.)|(//=)|(>>=)|(<<=)|(\\*\\*=))"),i=new RegExp("^[_A-Za-z$][_A-Za-z$0-9]*"),j=new RegExp("^(@|this.)[_A-Za-z$][_A-Za-z$0-9]*"),k=c(["and","or","not","is","isnt","in","instanceof","typeof"]),l=["for","while","loop","if","unless","else","switch","try","catch","finally","class"],m=["break","by","continue","debugger","delete","do","in","of","new","return","then","this","throw","when","until"],n=c(l.concat(m));l=c(l);var o=new RegExp("^('{3}|\"{3}|['\"])"),p=new RegExp("^(/{3}|/)"),q=["Infinity","NaN","undefined","null","true","false","on","off","yes","no"],r=c(q),y={startState:function(a){return{tokenize:s,scopes:[{offset:a||0,type:"coffee"}],lastToken:null,lambda:!1,dedent:0}},token:function(a,b){var c=x(a,b);return b.lastToken={style:c,content:a.current()},a.eol()&&a.lambda&&(b.lambda=!1),c},indent:function(a){return a.tokenize!=s?0:a.scopes[0].offset},lineComment:"#",fold:"indent"};return y}),CodeMirror.defineMIME("text/x-coffeescript","coffeescript"),CodeMirror.defineMode("css",function(a){return CodeMirror.getMode(a,"text/css")}),CodeMirror.defineMode("css-base",function(a,b){"use strict";function l(a,b){return k=b,a}function m(a,b){var c=a.next();if(d[c]){var e=d[c](a,b);if(e!==!1)return e}if("@"==c)return a.eatWhile(/[\w\\\-]/),l("def",a.current());if("="==c)l(null,"compare");else{if(("~"==c||"|"==c)&&a.eat("="))return l(null,"compare");if('"'==c||"'"==c)return b.tokenize=n(c),b.tokenize(a,b);if("#"==c)return a.eatWhile(/[\w\\\-]/),l("atom","hash");if("!"==c)return a.match(/^\s*\w*/),l("keyword","important");if(/\d/.test(c))return a.eatWhile(/[\w.%]/),l("number","unit");if("-"!==c)return/[,+>*\/]/.test(c)?l(null,"select-op"):"."==c&&a.match(/^-?[_a-z][_a-z0-9-]*/i)?l("qualifier","qualifier"):":"==c?l("operator",c):/[;{}\[\]\(\)]/.test(c)?l(null,c):"u"==c&&a.match("rl(")?(a.backUp(1),b.tokenize=o,l("property","variable")):(a.eatWhile(/[\w\\\-]/),l("property","variable"));if(/\d/.test(a.peek()))return a.eatWhile(/[\w.%]/),l("number","unit");if(a.match(/^[^-]+-/))return l("meta","meta")}}function n(a,b){return function(c,d){for(var f,e=!1;null!=(f=c.next())&&(f!=a||e);)e=!e&&"\\"==f;return e||(b&&c.backUp(1),d.tokenize=m),l("string","string")}}function o(a,b){return a.next(),b.tokenize=a.match(/\s*[\"\']/,!1)?m:n(")",!0),l(null,"(")}var c=a.indentUnit,d=b.hooks||{},e=b.atMediaTypes||{},f=b.atMediaFeatures||{},g=b.propertyKeywords||{},h=b.colorKeywords||{},i=b.valueKeywords||{},j=!!b.allowNested,k=null;return{startState:function(a){return{tokenize:m,baseIndent:a||0,stack:[],lastToken:null}},token:function(a,b){if(b.tokenize=b.tokenize||m,b.tokenize==m&&a.eatSpace())return null;var c=b.tokenize(a,b);c&&"string"!=typeof c&&(c=l(c[0],c[1]));var d=b.stack[b.stack.length-1];if("variable"==c)return"variable-definition"==k&&b.stack.push("propertyValue"),b.lastToken="variable-2";if("property"==c){var n=a.current().toLowerCase();"propertyValue"==d?c=i.hasOwnProperty(n)?"string-2":h.hasOwnProperty(n)?"keyword":"variable-2":"rule"==d?g.hasOwnProperty(n)||(c+=" error"):"block"==d?c=g.hasOwnProperty(n)?"property":h.hasOwnProperty(n)?"keyword":i.hasOwnProperty(n)?"string-2":"tag":d&&"@media{"!=d?"@media"==d?c=e[a.current()]?"attribute":/^(only|not)$/.test(n)?"keyword":"and"==n?"error":f.hasOwnProperty(n)?"error":"attribute error":"@mediaType"==d?c=e.hasOwnProperty(n)?"attribute":"and"==n?"operator":/^(only|not)$/.test(n)?"error":"error":"@mediaType("==d?g.hasOwnProperty(n)||(e.hasOwnProperty(n)?c="error":"and"==n?c="operator":/^(only|not)$/.test(n)?c="error":c+=" error"):c="@import"==d?"tag":"error":c="tag"}else"atom"==c?d&&"@media{"!=d&&"block"!=d?"propertyValue"==d?/^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/.test(a.current())||(c+=" error"):c="error":c="builtin":"@media"==d&&"{"==k&&(c="error");if("{"==k)if("@media"==d||"@mediaType"==d)b.stack[b.stack.length-1]="@media{";else{var o=j?"block":"rule";b.stack.push(o)}else"}"==k?("interpolation"==d&&(c="operator"),b.stack.pop(),"propertyValue"==d&&b.stack.pop()):"interpolation"==k?b.stack.push("interpolation"):"@media"==k?b.stack.push("@media"):"@import"==k?b.stack.push("@import"):"@media"==d&&/\b(keyword|attribute)\b/.test(c)?b.stack[b.stack.length-1]="@mediaType":"@mediaType"==d&&","==a.current()?b.stack[b.stack.length-1]="@media":"("==k?"@media"==d||"@mediaType"==d?(b.stack[b.stack.length-1]="@mediaType",b.stack.push("@mediaType(")):b.stack.push("("):")"==k?("propertyValue"==d&&b.stack.pop(),b.stack.pop()):":"==k&&"property"==b.lastToken?b.stack.push("propertyValue"):"propertyValue"==d&&";"==k?b.stack.pop():"@import"==d&&";"==k&&b.stack.pop();return b.lastToken=c},indent:function(a,b){var d=a.stack.length;return/^\}/.test(b)&&(d-="propertyValue"==a.stack[d-1]?2:1),a.baseIndent+d*c},electricChars:"}",blockCommentStart:"/*",blockCommentEnd:"*/",fold:"brace"}}),function(){function a(a){for(var b={},c=0;c<a.length;++c)b[a[c]]=!0;return b}function g(a,b){for(var d,c=!1;null!=(d=a.next());){if(c&&"/"==d){b.tokenize=null;break}c="*"==d}return["comment","comment"]}var b=a(["all","aural","braille","handheld","print","projection","screen","tty","tv","embossed"]),c=a(["width","min-width","max-width","height","min-height","max-height","device-width","min-device-width","max-device-width","device-height","min-device-height","max-device-height","aspect-ratio","min-aspect-ratio","max-aspect-ratio","device-aspect-ratio","min-device-aspect-ratio","max-device-aspect-ratio","color","min-color","max-color","color-index","min-color-index","max-color-index","monochrome","min-monochrome","max-monochrome","resolution","min-resolution","max-resolution","scan","grid"]),d=a(["align-content","align-items","align-self","alignment-adjust","alignment-baseline","anchor-point","animation","animation-delay","animation-direction","animation-duration","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","appearance","azimuth","backface-visibility","background","background-attachment","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","baseline-shift","binding","bleed","bookmark-label","bookmark-level","bookmark-state","bookmark-target","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","clear","clip","color","color-profile","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","content","counter-increment","counter-reset","crop","cue","cue-after","cue-before","cursor","direction","display","dominant-baseline","drop-initial-after-adjust","drop-initial-after-align","drop-initial-before-adjust","drop-initial-before-align","drop-initial-size","drop-initial-value","elevation","empty-cells","fit","fit-position","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","float-offset","flow-from","flow-into","font","font-feature-settings","font-family","font-kerning","font-language-override","font-size","font-size-adjust","font-stretch","font-style","font-synthesis","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-weight","grid-cell","grid-column","grid-column-align","grid-column-sizing","grid-column-span","grid-columns","grid-flow","grid-row","grid-row-align","grid-row-sizing","grid-row-span","grid-rows","grid-template","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","inline-box-align","justify-content","left","letter-spacing","line-break","line-height","line-stacking","line-stacking-ruby","line-stacking-shift","line-stacking-strategy","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marker-offset","marks","marquee-direction","marquee-loop","marquee-play-count","marquee-speed","marquee-style","max-height","max-width","min-height","min-width","move-to","nav-down","nav-index","nav-left","nav-right","nav-up","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-style","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","page-policy","pause","pause-after","pause-before","perspective","perspective-origin","pitch","pitch-range","play-during","position","presentation-level","punctuation-trim","quotes","region-break-after","region-break-before","region-break-inside","region-fragment","rendering-intent","resize","rest","rest-after","rest-before","richness","right","rotation","rotation-point","ruby-align","ruby-overhang","ruby-position","ruby-span","shape-inside","shape-outside","size","speak","speak-as","speak-header","speak-numeral","speak-punctuation","speech-rate","stress","string-set","tab-size","table-layout","target","target-name","target-new","target-position","text-align","text-align-last","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-height","text-indent","text-justify","text-outline","text-overflow","text-shadow","text-size-adjust","text-space-collapse","text-transform","text-underline-position","text-wrap","top","transform","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","volume","white-space","widows","width","word-break","word-spacing","word-wrap","z-index","zoom","clip-path","clip-rule","mask","enable-background","filter","flood-color","flood-opacity","lighting-color","stop-color","stop-opacity","pointer-events","color-interpolation","color-interpolation-filters","color-profile","color-rendering","fill","fill-opacity","fill-rule","image-rendering","marker","marker-end","marker-mid","marker-start","shape-rendering","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","text-rendering","baseline-shift","dominant-baseline","glyph-orientation-horizontal","glyph-orientation-vertical","kerning","text-anchor","writing-mode"]),e=a(["aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen"]),f=a(["above","absolute","activeborder","activecaption","afar","after-white-space","ahead","alias","all","all-scroll","alternate","always","amharic","amharic-abegede","antialiased","appworkspace","arabic-indic","armenian","asterisks","auto","avoid","avoid-column","avoid-page","avoid-region","background","backwards","baseline","below","bidi-override","binary","bengali","blink","block","block-axis","bold","bolder","border","border-box","both","bottom","break","break-all","break-word","button","button-bevel","buttonface","buttonhighlight","buttonshadow","buttontext","cambodian","capitalize","caps-lock-indicator","caption","captiontext","caret","cell","center","checkbox","circle","cjk-earthly-branch","cjk-heavenly-stem","cjk-ideographic","clear","clip","close-quote","col-resize","collapse","column","compact","condensed","contain","content","content-box","context-menu","continuous","copy","cover","crop","cross","crosshair","currentcolor","cursive","dashed","decimal","decimal-leading-zero","default","default-button","destination-atop","destination-in","destination-out","destination-over","devanagari","disc","discard","document","dot-dash","dot-dot-dash","dotted","double","down","e-resize","ease","ease-in","ease-in-out","ease-out","element","ellipse","ellipsis","embed","end","ethiopic","ethiopic-abegede","ethiopic-abegede-am-et","ethiopic-abegede-gez","ethiopic-abegede-ti-er","ethiopic-abegede-ti-et","ethiopic-halehame-aa-er","ethiopic-halehame-aa-et","ethiopic-halehame-am-et","ethiopic-halehame-gez","ethiopic-halehame-om-et","ethiopic-halehame-sid-et","ethiopic-halehame-so-et","ethiopic-halehame-ti-er","ethiopic-halehame-ti-et","ethiopic-halehame-tig","ew-resize","expanded","extra-condensed","extra-expanded","fantasy","fast","fill","fixed","flat","footnotes","forwards","from","geometricPrecision","georgian","graytext","groove","gujarati","gurmukhi","hand","hangul","hangul-consonant","hebrew","help","hidden","hide","higher","highlight","highlighttext","hiragana","hiragana-iroha","horizontal","hsl","hsla","icon","ignore","inactiveborder","inactivecaption","inactivecaptiontext","infinite","infobackground","infotext","inherit","initial","inline","inline-axis","inline-block","inline-table","inset","inside","intrinsic","invert","italic","justify","kannada","katakana","katakana-iroha","keep-all","khmer","landscape","lao","large","larger","left","level","lighter","line-through","linear","lines","list-item","listbox","listitem","local","logical","loud","lower","lower-alpha","lower-armenian","lower-greek","lower-hexadecimal","lower-latin","lower-norwegian","lower-roman","lowercase","ltr","malayalam","match","media-controls-background","media-current-time-display","media-fullscreen-button","media-mute-button","media-play-button","media-return-to-realtime-button","media-rewind-button","media-seek-back-button","media-seek-forward-button","media-slider","media-sliderthumb","media-time-remaining-display","media-volume-slider","media-volume-slider-container","media-volume-sliderthumb","medium","menu","menulist","menulist-button","menulist-text","menulist-textfield","menutext","message-box","middle","min-intrinsic","mix","mongolian","monospace","move","multiple","myanmar","n-resize","narrower","ne-resize","nesw-resize","no-close-quote","no-drop","no-open-quote","no-repeat","none","normal","not-allowed","nowrap","ns-resize","nw-resize","nwse-resize","oblique","octal","open-quote","optimizeLegibility","optimizeSpeed","oriya","oromo","outset","outside","outside-shape","overlay","overline","padding","padding-box","painted","page","paused","persian","plus-darker","plus-lighter","pointer","polygon","portrait","pre","pre-line","pre-wrap","preserve-3d","progress","push-button","radio","read-only","read-write","read-write-plaintext-only","rectangle","region","relative","repeat","repeat-x","repeat-y","reset","reverse","rgb","rgba","ridge","right","round","row-resize","rtl","run-in","running","s-resize","sans-serif","scroll","scrollbar","se-resize","searchfield","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","semi-condensed","semi-expanded","separate","serif","show","sidama","single","skip-white-space","slide","slider-horizontal","slider-vertical","sliderthumb-horizontal","sliderthumb-vertical","slow","small","small-caps","small-caption","smaller","solid","somali","source-atop","source-in","source-out","source-over","space","square","square-button","start","static","status-bar","stretch","stroke","sub","subpixel-antialiased","super","sw-resize","table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row","table-row-group","telugu","text","text-bottom","text-top","textarea","textfield","thai","thick","thin","threeddarkshadow","threedface","threedhighlight","threedlightshadow","threedshadow","tibetan","tigre","tigrinya-er","tigrinya-er-abegede","tigrinya-et","tigrinya-et-abegede","to","top","transparent","ultra-condensed","ultra-expanded","underline","up","upper-alpha","upper-armenian","upper-greek","upper-hexadecimal","upper-latin","upper-norwegian","upper-roman","uppercase","urdu","url","vertical","vertical-text","visible","visibleFill","visiblePainted","visibleStroke","visual","w-resize","wait","wave","wider","window","windowframe","windowtext","x-large","x-small","xor","xx-large","xx-small"]);
8
+ CodeMirror.defineMIME("text/css",{atMediaTypes:b,atMediaFeatures:c,propertyKeywords:d,colorKeywords:e,valueKeywords:f,hooks:{"<":function(a,b){function c(a,b){for(var d,c=0;null!=(d=a.next());){if(c>=2&&">"==d){b.tokenize=null;break}c="-"==d?c+1:0}return["comment","comment"]}return a.eat("!")?(b.tokenize=c,c(a,b)):void 0},"/":function(a,b){return a.eat("*")?(b.tokenize=g,g(a,b)):!1}},name:"css-base"}),CodeMirror.defineMIME("text/x-scss",{atMediaTypes:b,atMediaFeatures:c,propertyKeywords:d,colorKeywords:e,valueKeywords:f,allowNested:!0,hooks:{":":function(a){return a.match(/\s*{/)?[null,"{"]:!1},$:function(a){return a.match(/^[\w-]+/),":"==a.peek()?["variable","variable-definition"]:["variable","variable"]},"/":function(a,b){return a.eat("/")?(a.skipToEnd(),["comment","comment"]):a.eat("*")?(b.tokenize=g,g(a,b)):["operator","operator"]},"#":function(a){return a.eat("{")?["operator","interpolation"]:(a.eatWhile(/[\w\\\-]/),["atom","hash"])}},name:"css-base"})}(),CodeMirror.defineMode("gfm",function(a){function c(a){return a.code=!1,null}var b=0,d={startState:function(){return{code:!1,codeBlock:!1,ateSpace:!1}},copyState:function(a){return{code:a.code,codeBlock:a.codeBlock,ateSpace:a.ateSpace}},token:function(a,c){if(c.codeBlock)return a.match(/^```/)?(c.codeBlock=!1,null):(a.skipToEnd(),null);if(a.sol()&&(c.code=!1),a.sol()&&a.match(/^```/))return a.skipToEnd(),c.codeBlock=!0,null;if("`"===a.peek()){a.next();var d=a.pos;a.eatWhile("`");var e=1+a.pos-d;return c.code?e===b&&(c.code=!1):(b=e,c.code=!0),null}if(c.code)return a.next(),null;if(a.eatSpace())return c.ateSpace=!0,null;if(a.sol()||c.ateSpace){if(c.ateSpace=!1,a.match(/^(?:[a-zA-Z0-9\-_]+\/)?(?:[a-zA-Z0-9\-_]+@)?(?:[a-f0-9]{7,40}\b)/))return"link";if(a.match(/^(?:[a-zA-Z0-9\-_]+\/)?(?:[a-zA-Z0-9\-_]+)?#[0-9]+\b/))return"link"}return a.match(/^((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\([^\s()<>]*\))+(?:\([^\s()<>]*\)|[^\s`!()\[\]{};:'".,<>?\xab\xbb\u201c\u201d\u2018\u2019]))/i)?"link":(a.next(),null)},blankLine:c};return CodeMirror.defineMIME("gfmBase",{name:"markdown",underscoresBreakWords:!1,taskLists:!0,fencedCodeBlocks:!0}),CodeMirror.overlayMode(CodeMirror.getMode(a,"gfmBase"),d)},"markdown"),CodeMirror.defineMode("htmlmixed",function(a,b){function i(a,b){var f=b.htmlState.tagName,g=c.token(a,b.htmlState);if("script"==f&&/\btag\b/.test(g)&&">"==a.current()){var h=a.string.slice(Math.max(0,a.pos-100),a.pos).match(/\btype\s*=\s*("[^"]+"|'[^']+'|\S+)[^<]*$/i);h=h?h[1]:"",h&&/[\"\']/.test(h.charAt(0))&&(h=h.slice(1,h.length-1));for(var i=0;i<e.length;++i){var j=e[i];if("string"==typeof j.matches?h==j.matches:j.matches.test(h)){j.mode&&(b.token=k,b.localMode=j.mode,b.localState=j.mode.startState&&j.mode.startState(c.indent(b.htmlState,"")));break}}}else"style"==f&&/\btag\b/.test(g)&&">"==a.current()&&(b.token=l,b.localMode=d,b.localState=d.startState(c.indent(b.htmlState,"")));return g}function j(a,b,c){var f,d=a.current(),e=d.search(b);return e>-1?a.backUp(d.length-e):(f=d.match(/<\/?$/))&&(a.backUp(d.length),a.match(b,!1)||a.match(d[0])),c}function k(a,b){return a.match(/^<\/\s*script\s*>/i,!1)?(b.token=i,b.localState=b.localMode=null,i(a,b)):j(a,/<\/\s*script\s*>/,b.localMode.token(a,b.localState))}function l(a,b){return a.match(/^<\/\s*style\s*>/i,!1)?(b.token=i,b.localState=b.localMode=null,i(a,b)):j(a,/<\/\s*style\s*>/,d.token(a,b.localState))}var c=CodeMirror.getMode(a,{name:"xml",htmlMode:!0}),d=CodeMirror.getMode(a,"css"),e=[],f=b&&b.scriptTypes;if(e.push({matches:/^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^$/i,mode:CodeMirror.getMode(a,"javascript")}),f)for(var g=0;g<f.length;++g){var h=f[g];e.push({matches:h.matches,mode:h.mode&&CodeMirror.getMode(a,h.mode)})}return e.push({matches:/./,mode:CodeMirror.getMode(a,"text/plain")}),{startState:function(){var a=c.startState();return{token:i,localMode:null,localState:null,htmlState:a}},copyState:function(a){if(a.localState)var b=CodeMirror.copyState(a.localMode,a.localState);return{token:a.token,localMode:a.localMode,localState:b,htmlState:CodeMirror.copyState(c,a.htmlState)}},token:function(a,b){return b.token(a,b)},indent:function(a,b){return!a.localMode||/^\s*<\//.test(b)?c.indent(a.htmlState,b):a.localMode.indent?a.localMode.indent(a.localState,b):CodeMirror.Pass},electricChars:"/{}:",innerMode:function(a){return{state:a.localState||a.htmlState,mode:a.localMode||c}}}},"xml","javascript","css"),CodeMirror.defineMIME("text/html","htmlmixed"),CodeMirror.defineMode("javascript",function(a,b){function i(a,b,c){return b.tokenize=c,c(a,b)}function j(a,b){for(var d,c=!1;null!=(d=a.next());){if(d==b&&!c)return!1;c=!c&&"\\"==d}return c}function m(a,b,c){return k=a,l=c,b}function n(a,b){var c=a.next();if('"'==c||"'"==c)return i(a,b,o(c));if("."==c&&a.match(/^\d+(?:[eE][+\-]?\d+)?/))return m("number","number");if(/[\[\]{}\(\),;\:\.]/.test(c))return m(c);if("0"==c&&a.eat(/x/i))return a.eatWhile(/[\da-f]/i),m("number","number");if(/\d/.test(c))return a.match(/^\d*(?:\.\d*)?(?:[eE][+\-]?\d+)?/),m("number","number");if("/"==c)return a.eat("*")?i(a,b,p):a.eat("/")?(a.skipToEnd(),m("comment","comment")):"operator"==b.lastType||"keyword c"==b.lastType||/^[\[{}\(,;:]$/.test(b.lastType)?(j(a,"/"),a.eatWhile(/[gimy]/),m("regexp","string-2")):(a.eatWhile(h),m("operator",null,a.current()));if("#"==c)return a.skipToEnd(),m("error","error");if(h.test(c))return a.eatWhile(h),m("operator",null,a.current());a.eatWhile(/[\w\$_]/);var d=a.current(),e=g.propertyIsEnumerable(d)&&g[d];return e&&"."!=b.lastType?m(e.type,e.style,d):m("variable","variable",d)}function o(a){return function(b,c){return j(b,a)||(c.tokenize=n),m("string","string")}}function p(a,b){for(var d,c=!1;d=a.next();){if("/"==d&&c){b.tokenize=n;break}c="*"==d}return m("comment","comment")}function r(a,b,c,d,e,f){this.indented=a,this.column=b,this.type=c,this.prev=e,this.info=f,null!=d&&(this.align=d)}function s(a,b){for(var c=a.localVars;c;c=c.next)if(c.name==b)return!0}function t(a,b,c,d,f){var g=a.cc;for(u.state=a,u.stream=f,u.marked=null,u.cc=g,a.lexical.hasOwnProperty("align")||(a.lexical.align=!0);;){var h=g.length?g.pop():e?F:E;if(h(c,d)){for(;g.length&&g[g.length-1].lex;)g.pop()();return u.marked?u.marked:"variable"==c&&s(a,d)?"variable-2":b}}}function v(){for(var a=arguments.length-1;a>=0;a--)u.cc.push(arguments[a])}function w(){return v.apply(null,arguments),!0}function x(a){function b(b){for(var c=b;c;c=c.next)if(c.name==a)return!0;return!1}var c=u.state;if(c.context){if(u.marked="def",b(c.localVars))return;c.localVars={name:a,next:c.localVars}}else{if(b(c.globalVars))return;c.globalVars={name:a,next:c.globalVars}}}function z(){u.state.context={prev:u.state.context,vars:u.state.localVars},u.state.localVars=y}function A(){u.state.localVars=u.state.context.vars,u.state.context=u.state.context.prev}function B(a,b){var c=function(){var c=u.state,d=c.indented;"stat"==c.lexical.type&&(d=c.lexical.indented),c.lexical=new r(d,u.stream.column(),a,null,c.lexical,b)};return c.lex=!0,c}function C(){var a=u.state;a.lexical.prev&&(")"==a.lexical.type&&(a.indented=a.lexical.indented),a.lexical=a.lexical.prev)}function D(a){return function(b){return b==a?w():";"==a?v():w(arguments.callee)}}function E(a){return"var"==a?w(B("vardef"),U,D(";"),C):"keyword a"==a?w(B("form"),F,E,C):"keyword b"==a?w(B("form"),E,C):"{"==a?w(B("}"),R,C):";"==a?w():"if"==a?w(B("form"),F,E,C,W):"function"==a?w(_):"for"==a?w(B("form"),D("("),B(")"),X,D(")"),C,E,C):"variable"==a?w(B("stat"),M):"switch"==a?w(B("form"),F,B("}","switch"),D("{"),R,C,C):"case"==a?w(F,D(":")):"default"==a?w(D(":")):"catch"==a?w(B("form"),z,D("("),ab,D(")"),E,C,A):v(B("stat"),F,D(";"),C)}function F(a){return H(a,!1)}function G(a){return H(a,!0)}function H(a,b){var c=b?L:K;return q.hasOwnProperty(a)?w(c):"function"==a?w(_):"keyword c"==a?w(b?J:I):"("==a?w(B(")"),I,D(")"),C,c):"operator"==a?w(b?G:F):"["==a?w(B("]"),Q(G,"]"),C,c):"{"==a?w(B("}"),Q(O,"}"),C,c):w()}function I(a){return a.match(/[;\}\)\],]/)?v():v(F)}function J(a){return a.match(/[;\}\)\],]/)?v():v(G)}function K(a,b){return","==a?w(F):L(a,b,!1)}function L(a,b,c){var d=0==c?K:L,e=0==c?F:G;return"operator"==a?/\+\+|--/.test(b)?w(d):"?"==b?w(F,D(":"),e):w(e):";"!=a?"("==a?w(B(")","call"),Q(G,")"),C,d):"."==a?w(N,d):"["==a?w(B("]"),I,D("]"),C,d):void 0:void 0}function M(a){return":"==a?w(C,E):v(K,D(";"),C)}function N(a){return"variable"==a?(u.marked="property",w()):void 0}function O(a,b){if("variable"==a){if(u.marked="property","get"==b||"set"==b)return w(P)}else("number"==a||"string"==a)&&(u.marked=a+" property");return q.hasOwnProperty(a)?w(D(":"),G):void 0}function P(a){return":"==a?w(F):"variable"!=a?w(D(":"),F):(u.marked="property",w(_))}function Q(a,b){function c(d){if(","==d){var e=u.state.lexical;return"call"==e.info&&(e.pos=(e.pos||0)+1),w(a,c)}return d==b?w():w(D(b))}return function(d){return d==b?w():v(a,c)}}function R(a){return"}"==a?w():v(E,R)}function S(a){return":"==a?w(T):v()}function T(a){return"variable"==a?(u.marked="variable-3",w()):v()}function U(a,b){return"variable"==a?(x(b),f?w(S,V):w(V)):v()}function V(a,b){return"="==b?w(G,V):","==a?w(U):void 0}function W(a,b){return"keyword b"==a&&"else"==b?w(B("form"),E,C):void 0}function X(a){return"var"==a?w(U,D(";"),Z):";"==a?w(Z):"variable"==a?w(Y):v(F,D(";"),Z)}function Y(a,b){return"in"==b?w(F):w(K,Z)}function Z(a,b){return";"==a?w($):"in"==b?w(F):v(F,D(";"),$)}function $(a){")"!=a&&w(F)}function _(a,b){return"variable"==a?(x(b),w(_)):"("==a?w(B(")"),z,Q(ab,")"),C,E,A):void 0}function ab(a,b){return"variable"==a?(x(b),f?w(S):w()):void 0}var k,l,c=a.indentUnit,d=b.statementIndent,e=b.json,f=b.typescript,g=function(){function a(a){return{type:a,style:"keyword"}}var b=a("keyword a"),c=a("keyword b"),d=a("keyword c"),e=a("operator"),g={type:"atom",style:"atom"},h={"if":a("if"),"while":b,"with":b,"else":c,"do":c,"try":c,"finally":c,"return":d,"break":d,"continue":d,"new":d,"delete":d,"throw":d,"var":a("var"),"const":a("var"),let:a("var"),"function":a("function"),"catch":a("catch"),"for":a("for"),"switch":a("switch"),"case":a("case"),"default":a("default"),"in":e,"typeof":e,"instanceof":e,"true":g,"false":g,"null":g,undefined:g,NaN:g,Infinity:g,"this":a("this")};if(f){var i={type:"variable",style:"variable-3"},j={"interface":a("interface"),"class":a("class"),"extends":a("extends"),constructor:a("constructor"),"public":a("public"),"private":a("private"),"protected":a("protected"),"static":a("static"),"super":a("super"),string:i,number:i,bool:i,any:i};for(var k in j)h[k]=j[k]}return h}(),h=/[+\-*&%=<>!?|~^]/,q={atom:!0,number:!0,variable:!0,string:!0,regexp:!0,"this":!0},u={state:null,column:null,marked:null,cc:null},y={name:"this",next:{name:"arguments"}};return C.lex=!0,{startState:function(a){return{tokenize:n,lastType:null,cc:[],lexical:new r((a||0)-c,0,"block",!1),localVars:b.localVars,globalVars:b.globalVars,context:b.localVars&&{vars:b.localVars},indented:0}},token:function(a,b){if(a.sol()&&(b.lexical.hasOwnProperty("align")||(b.lexical.align=!1),b.indented=a.indentation()),b.tokenize!=p&&a.eatSpace())return null;var c=b.tokenize(a,b);return"comment"==k?c:(b.lastType="operator"!=k||"++"!=l&&"--"!=l?k:"incdec",t(b,c,k,l,a))},indent:function(a,e){if(a.tokenize==p)return CodeMirror.Pass;if(a.tokenize!=n)return 0;for(var f=e&&e.charAt(0),g=a.lexical,h=a.cc.length-1;h>=0;--h){var i=a.cc[h];if(i==C)g=g.prev;else if(i!=W||/^else\b/.test(e))break}"stat"==g.type&&"}"==f&&(g=g.prev),d&&")"==g.type&&"stat"==g.prev.type&&(g=g.prev);var j=g.type,k=f==j;return"vardef"==j?g.indented+("operator"==a.lastType||","==a.lastType?4:0):"form"==j&&"{"==f?g.indented:"form"==j?g.indented+c:"stat"==j?g.indented+("operator"==a.lastType||","==a.lastType?d||c:0):"switch"!=g.info||k||0==b.doubleIndentSwitch?g.align?g.column+(k?0:1):g.indented+(k?0:c):g.indented+(/^(?:case|default)\b/.test(e)?c:2*c)},electricChars:":{}",blockCommentStart:e?null:"/*",blockCommentEnd:e?null:"*/",lineComment:e?null:"//",fold:"brace",helperType:e?"json":"javascript",jsonMode:e}}),CodeMirror.defineMIME("text/javascript","javascript"),CodeMirror.defineMIME("text/ecmascript","javascript"),CodeMirror.defineMIME("application/javascript","javascript"),CodeMirror.defineMIME("application/ecmascript","javascript"),CodeMirror.defineMIME("application/json",{name:"javascript",json:!0}),CodeMirror.defineMIME("application/x-json",{name:"javascript",json:!0}),CodeMirror.defineMIME("text/typescript",{name:"javascript",typescript:!0}),CodeMirror.defineMIME("application/typescript",{name:"javascript",typescript:!0}),CodeMirror.defineMode("less",function(a){function d(a,b){return c=b,a}function f(a,b){var f=a.next();if("@"==f)return a.eatWhile(/[\w\-]/),d("meta",a.current());if("/"==f&&a.eat("*"))return b.tokenize=h,h(a,b);if("<"==f&&a.eat("!"))return b.tokenize=i,i(a,b);if("="==f)d(null,"compare");else{if("|"==f&&a.eat("="))return d(null,"compare");if('"'==f||"'"==f)return b.tokenize=j(f),b.tokenize(a,b);if("/"==f){if(a.eat("/"))return b.tokenize=g,g(a,b);if("string"==c||"("==c)return d("string","string");if(void 0!=b.stack[b.stack.length-1])return d(null,f);if(a.eatWhile(/[\a-zA-Z0-9\-_.\s]/),/\/|\)|#/.test(a.peek()||a.eatSpace()&&")"==a.peek())||a.eol())return d("string","string")}else{if("!"==f)return a.match(/^\s*\w*/),d("keyword","important");if(/\d/.test(f))return a.eatWhile(/[\w.%]/),d("number","unit");if(/[,+<>*\/]/.test(f))return"="==a.peek()||"a"==c?d("string","string"):d(null,"select-op");if(!/[;{}:\[\]()~\|]/.test(f)){if("."==f)return"("==c||"string"==c?d("string","string"):(a.eatWhile(/[\a-zA-Z0-9\-_]/)," "==a.peek()&&a.eatSpace(),")"==a.peek()?d("number","unit"):d("tag","tag"));if("#"==f)return a.eatWhile(/[A-Za-z0-9]/),4==a.current().length||7==a.current().length?null!=a.current().match(/[A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}/,!1)?a.current().substring(1)!=a.current().match(/[A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}/,!1)?d("atom","tag"):(a.eatSpace(),/[\/<>.(){!$%^&*_\-\\?=+\|#'~`]/.test(a.peek())?d("atom","tag"):"}"==a.peek()?d("number","unit"):/[a-zA-Z\\]/.test(a.peek())?d("atom","tag"):a.eol()?d("atom","tag"):d("number","unit")):(a.eatWhile(/[\w\\\-]/),d("atom","tag")):(a.eatWhile(/[\w\\\-]/),d("atom","tag"));if("&"==f)return a.eatWhile(/[\w\-]/),d(null,f);if(a.eatWhile(/[\w\\\-_%.{]/),"string"==c)return d("string","string");if(null!=a.current().match(/(^http$|^https$)/))return a.eatWhile(/[\w\\\-_%.{:\/]/),d("string","string");if("<"==a.peek()||">"==a.peek())return d("tag","tag");if(/\(/.test(a.peek()))return d(null,f);if("/"==a.peek()&&void 0!=b.stack[b.stack.length-1])return d("string","string");if(a.current().match(/\-\d|\-.\d/))return d("number","unit");if(/\/|[\s\)]/.test(a.peek()||a.eol()||a.eatSpace()&&"/"==a.peek())&&-1!==a.current().indexOf("."))return"{"==a.current().substring(a.current().length-1,a.current().length)?(a.backUp(1),d("tag","tag")):(a.eatSpace(),/[{<>.a-zA-Z\/]/.test(a.peek())||a.eol()?d("tag","tag"):d("string","string"));if(a.eol()||"["==a.peek()||"#"==a.peek()||"tag"==c)return"{"==a.current().substring(a.current().length-1,a.current().length)&&a.backUp(1),d("tag","tag");if("compare"==c||"a"==c||"("==c)return d("string","string");if("|"==c||"-"==a.current()||"["==c)return d(null,f);if(":"==a.peek()){a.next();var k=":"==a.peek()?!0:!1;if(k)a.backUp(1);else{var l=a.pos,m=a.current().length;a.eatWhile(/[a-z\\\-]/);var n=a.pos;if(null!=a.current().substring(m-1).match(e))return a.backUp(n-(l-1)),d("tag","tag");a.backUp(n-(l-1))}return k?d("tag","tag"):d("variable","variable")}return d("variable","variable")}if(":"==f)return a.eatWhile(/[a-z\\\-]/),e.test(a.current())?d("tag","tag"):":"==a.peek()?(a.next(),a.eatWhile(/[a-z\\\-]/),a.current().match(/\:\:\-(o|ms|moz|webkit)\-/)?d("string","string"):e.test(a.current().substring(1))?d("tag","tag"):d(null,f)):d(null,f);if("~"!=f)return d(null,f);if("r"==c)return d("string","string")}}}function g(a,b){return a.skipToEnd(),b.tokenize=f,d("comment","comment")}function h(a,b){for(var e,c=!1;null!=(e=a.next());){if(c&&"/"==e){b.tokenize=f;break}c="*"==e}return d("comment","comment")}function i(a,b){for(var e,c=0;null!=(e=a.next());){if(c>=2&&">"==e){b.tokenize=f;break}c="-"==e?c+1:0}return d("comment","comment")}function j(a){return function(b,c){for(var g,e=!1;null!=(g=b.next())&&(g!=a||e);)e=!e&&"\\"==g;return e||(c.tokenize=f),d("string","string")}}var c,b=a.indentUnit,e=/(^\:root$|^\:nth\-child$|^\:nth\-last\-child$|^\:nth\-of\-type$|^\:nth\-last\-of\-type$|^\:first\-child$|^\:last\-child$|^\:first\-of\-type$|^\:last\-of\-type$|^\:only\-child$|^\:only\-of\-type$|^\:empty$|^\:link|^\:visited$|^\:active$|^\:hover$|^\:focus$|^\:target$|^\:lang$|^\:enabled^\:disabled$|^\:checked$|^\:first\-line$|^\:first\-letter$|^\:before$|^\:after$|^\:not$|^\:required$|^\:invalid$)/;return{startState:function(a){return{tokenize:f,baseIndent:a||0,stack:[]}},token:function(a,b){if(a.eatSpace())return null;var d=b.tokenize(a,b),e=b.stack[b.stack.length-1];return"hash"==c&&"rule"==e?d="atom":"variable"==d&&("rule"==e?d=null:e&&"@media{"!=e||(d="when"==a.current()?"variable":/[\s,|\s\)|\s]/.test(a.peek())?"tag":c)),"rule"==e&&/^[\{\};]$/.test(c)&&b.stack.pop(),"{"==c?"@media"==e?b.stack[b.stack.length-1]="@media{":b.stack.push("{"):"}"==c?b.stack.pop():"@media"==c?b.stack.push("@media"):"{"==e&&"comment"!=c&&b.stack.push("rule"),d},indent:function(a,c){var d=a.stack.length;return/^\}/.test(c)&&(d-="rule"==a.stack[a.stack.length-1]?2:1),a.baseIndent+d*b},electricChars:"}"}}),CodeMirror.defineMIME("text/x-less","less"),CodeMirror.mimeModes.hasOwnProperty("text/css")||CodeMirror.defineMIME("text/css","less"),CodeMirror.defineMode("markdown",function(a,b){function C(a,b,c){return b.f=b.inline=c,c(a,b)}function D(a,b,c){return b.f=b.block=c,c(a,b)}function E(a){return a.linkTitle=!1,a.em=!1,a.strong=!1,a.quote=0,c||a.f!=G||(a.f=K,a.block=F),a.trailingSpace=0,a.trailingSpaceNewLine=!1,a.thisLineHasContent=!1,null}function F(a,c){var d=c.list!==!1;if(c.list!==!1&&c.indentationDiff>=0?(c.indentationDiff<4&&(c.indentation-=c.indentationDiff),c.list=null):c.list!==!1&&c.indentation>0?(c.list=null,c.listDepth=Math.floor(c.indentation/4)):c.list!==!1&&(c.list=!1,c.listDepth=0),c.indentationDiff>=4)return c.indentation-=4,a.skipToEnd(),i;if(a.eatSpace())return null;if("#"===a.peek()||c.prevLineHasContent&&a.match(A))c.header=!0;else if(a.eat(">"))for(c.indentation++,c.quote=1,a.eatSpace();a.eat(">");)a.eatSpace(),c.quote++;else{if("["===a.peek())return C(a,c,M);if(a.match(w,!0))return o;if(c.prevLineHasContent&&!d||!a.match(x,!0)&&!a.match(y,!0)){if(b.fencedCodeBlocks&&a.match(/^```([\w+#]*)/,!0))return c.localMode=f(RegExp.$1),c.localMode&&(c.localState=c.localMode.startState()),D(a,c,H),i}else c.indentation+=4,c.list=!0,c.listDepth++,b.taskLists&&a.match(z,!1)&&(c.taskList=!0)}return C(a,c,c.inline)}function G(a,b){var e=d.token(a,b.htmlState);return c&&"tag"===e&&"openTag"!==b.htmlState.type&&!b.htmlState.context&&(b.f=K,b.block=F),b.md_inside&&-1!=a.current().indexOf(">")&&(b.f=K,b.block=F,b.htmlState.context=void 0),e}function H(a,b){return a.sol()&&a.match(/^```/,!0)?(b.localMode=b.localState=null,b.f=K,b.block=F,i):b.localMode?b.localMode.token(a,b.localState):(a.skipToEnd(),i)}function I(a){var b=[];if(a.taskOpen)return"meta";if(a.taskClosed)return"property";if(a.strong&&b.push(v),a.em&&b.push(u),a.linkText&&b.push(s),a.code&&b.push(i),a.header&&b.push(h),a.quote&&b.push(a.quote%2?j:k),a.list!==!1){var c=(a.listDepth-1)%3;c?1===c?b.push(m):b.push(n):b.push(l)}return a.trailingSpaceNewLine?b.push("trailing-space-new-line"):a.trailingSpace&&b.push("trailing-space-"+(a.trailingSpace%2?"a":"b")),b.length?b.join(" "):null}function J(a,b){return a.match(B,!0)?I(b):void 0}function K(a,c){var d=c.text(a,c);if("undefined"!=typeof d)return d;if(c.list)return c.list=null,I(c);if(c.taskList){var e="x"!==a.match(z,!0)[1];return e?c.taskOpen=!0:c.taskClosed=!0,c.taskList=!1,I(c)}c.taskOpen=!1,c.taskClosed=!1;var f=a.next();if("\\"===f)return a.next(),I(c);if(c.linkTitle){c.linkTitle=!1;var h=f;"("===f&&(h=")"),h=(h+"").replace(/([.?*+^$[\]\\(){}|-])/g,"\\$1");var i="^\\s*(?:[^"+h+"\\\\]+|\\\\\\\\|\\\\.)"+h;if(a.match(new RegExp(i),!0))return t}if("`"===f){var j=I(c),k=a.pos;a.eatWhile("`");var l=1+a.pos-k;return c.code?l===g?(c.code=!1,j):I(c):(g=l,c.code=!0,I(c))}if(c.code)return I(c);if("!"===f&&a.match(/\[[^\]]*\] ?(?:\(|\[)/,!1))return a.match(/\[[^\]]*\]/),c.inline=c.f=L,p;if("["===f&&a.match(/.*\](\(| ?\[)/,!1))return c.linkText=!0,I(c);if("]"===f&&c.linkText){var m=I(c);return c.linkText=!1,c.inline=c.f=L,m}if("<"===f&&a.match(/^(https?|ftps?):\/\/(?:[^\\>]|\\.)+>/,!1))return C(a,c,Q(q,">"));if("<"===f&&a.match(/^[^> \\]+@(?:[^\\>]|\\.)+>/,!1))return C(a,c,Q(r,">"));if("<"===f&&a.match(/^\w/,!1)){if(-1!=a.string.indexOf(">")){var n=a.string.substring(1,a.string.indexOf(">"));/markdown\s*=\s*('|"){0,1}1('|"){0,1}/.test(n)&&(c.md_inside=!0)}return a.backUp(1),D(a,c,G)}if("<"===f&&a.match(/^\/\w*?>/))return c.md_inside=!1,"tag";var o=!1;if(!b.underscoresBreakWords&&"_"===f&&"_"!==a.peek()&&a.match(/(\w)/,!1)){var s=a.pos-2;if(s>=0){var u=a.string.charAt(s);"_"!==u&&u.match(/(\w)/,!1)&&(o=!0)}}var j=I(c);if("*"===f||"_"===f&&!o){if(c.strong===f&&a.eat(f))return c.strong=!1,j;if(!c.strong&&a.eat(f))return c.strong=f,I(c);if(c.em===f)return c.em=!1,j;if(!c.em)return c.em=f,I(c)}else if(" "===f&&(a.eat("*")||a.eat("_"))){if(" "===a.peek())return I(c);a.backUp(1)}return" "===f&&(a.match(/ +$/,!1)?c.trailingSpace++:c.trailingSpace&&(c.trailingSpaceNewLine=!0)),I(c)}function L(a,b){if(a.eatSpace())return null;var c=a.next();return"("===c||"["===c?C(a,b,Q(t,"("===c?")":"]")):"error"}function M(a,b){return a.match(/^[^\]]*\]:/,!0)?(b.f=N,s):C(a,b,K)}function N(a,b){return a.eatSpace()?null:(a.match(/^[^\s]+/,!0),void 0===a.peek()?b.linkTitle=!0:a.match(/^(?:\s+(?:"(?:[^"\\]|\\\\|\\.)+"|'(?:[^'\\]|\\\\|\\.)+'|\((?:[^)\\]|\\\\|\\.)+\)))?/,!0),b.f=b.inline=K,t)}function P(a){return O[a]||(a=(a+"").replace(/([.?*+^$[\]\\(){}|-])/g,"\\$1"),O[a]=new RegExp("^(?:[^\\\\]|\\\\.)*?("+a+")")),O[a]}function Q(a,b,c){return c=c||K,function(d,e){return d.match(P(b)),e.inline=e.f=c,a}}var c=CodeMirror.modes.hasOwnProperty("xml"),d=CodeMirror.getMode(a,c?{name:"xml",htmlMode:!0}:"text/plain"),e={html:"htmlmixed",js:"javascript",json:"application/json",c:"text/x-csrc","c++":"text/x-c++src",java:"text/x-java",csharp:"text/x-csharp","c#":"text/x-csharp",scala:"text/x-scala"},f=function(){var b,f,c={},d={},g=[];for(var h in CodeMirror.modes)CodeMirror.modes.propertyIsEnumerable(h)&&g.push(h);for(b=0;b<g.length;b++)c[g[b]]=g[b];var i=[];for(var h in CodeMirror.mimeModes)CodeMirror.mimeModes.propertyIsEnumerable(h)&&i.push({mime:h,mode:CodeMirror.mimeModes[h]});for(b=0;b<i.length;b++)f=i[b].mime,d[f]=i[b].mime;for(var j in e)(e[j]in c||e[j]in d)&&(c[j]=e[j]);return function(b){return c[b]?CodeMirror.getMode(a,c[b]):null}}();void 0===b.underscoresBreakWords&&(b.underscoresBreakWords=!0),void 0===b.fencedCodeBlocks&&(b.fencedCodeBlocks=!1),void 0===b.taskLists&&(b.taskLists=!1);var g=0,h="header",i="comment",j="atom",k="number",l="variable-2",m="variable-3",n="keyword",o="hr",p="tag",q="link",r="link",s="link",t="string",u="em",v="strong",w=/^([*\-=_])(?:\s*\1){2,}\s*$/,x=/^[*\-+]\s+/,y=/^[0-9]+\.\s+/,z=/^\[(x| )\](?=\s)/,A=/^(?:\={1,}|-{1,})$/,B=/^[^!\[\]*_\\<>` "'(]+/,O=[];return{startState:function(){return{f:F,prevLineHasContent:!1,thisLineHasContent:!1,block:F,htmlState:CodeMirror.startState(d),indentation:0,inline:K,text:J,linkText:!1,linkTitle:!1,em:!1,strong:!1,header:!1,taskList:!1,list:!1,listDepth:0,quote:0,trailingSpace:0,trailingSpaceNewLine:!1}},copyState:function(a){return{f:a.f,prevLineHasContent:a.prevLineHasContent,thisLineHasContent:a.thisLineHasContent,block:a.block,htmlState:CodeMirror.copyState(d,a.htmlState),indentation:a.indentation,localMode:a.localMode,localState:a.localMode?CodeMirror.copyState(a.localMode,a.localState):null,inline:a.inline,text:a.text,linkTitle:a.linkTitle,em:a.em,strong:a.strong,header:a.header,taskList:a.taskList,list:a.list,listDepth:a.listDepth,quote:a.quote,trailingSpace:a.trailingSpace,trailingSpaceNewLine:a.trailingSpaceNewLine,md_inside:a.md_inside}},token:function(a,b){if(a.sol()){if(a.match(/^\s*$/,!0))return b.prevLineHasContent=!1,E(b);b.prevLineHasContent=b.thisLineHasContent,b.thisLineHasContent=!0,b.header=!1,b.taskList=!1,b.code=!1,b.trailingSpace=0,b.trailingSpaceNewLine=!1,b.f=b.block;var c=a.match(/^\s*/,!0)[0].replace(/\t/g," ").length,d=4*Math.floor((c-b.indentation)/4);d>4&&(d=4);var e=b.indentation+d;if(b.indentationDiff=e-b.indentation,b.indentation=e,c>0)return null}return b.f(a,b)},blankLine:E,getType:I}},"xml"),CodeMirror.defineMIME("text/x-markdown","markdown"),function(){function a(a){for(var b={},c=a.split(" "),d=0;d<c.length;++d)b[c[d]]=!0;return b}function b(a){return function(b,c){return b.match(a)?c.tokenize=null:b.skipToEnd(),"string"}}var c={name:"clike",keywords:a("abstract and array as break case catch class clone const continue declare default do else elseif enddeclare endfor endforeach endif endswitch endwhile extends final for foreach function global goto if implements interface instanceof namespace new or private protected public static switch throw trait try use var while xor die echo empty exit eval include include_once isset list require require_once return print unset __halt_compiler self static parent"),blockKeywords:a("catch do else elseif for foreach if switch try while"),atoms:a("true false null TRUE FALSE NULL __CLASS__ __DIR__ __FILE__ __LINE__ __METHOD__ __FUNCTION__ __NAMESPACE__"),builtin:a("func_num_args func_get_arg func_get_args strlen strcmp strncmp strcasecmp strncasecmp each error_reporting define defined trigger_error user_error set_error_handler restore_error_handler get_declared_classes get_loaded_extensions extension_loaded get_extension_funcs debug_backtrace constant bin2hex sleep usleep time mktime gmmktime strftime gmstrftime strtotime date gmdate getdate localtime checkdate flush wordwrap htmlspecialchars htmlentities html_entity_decode md5 md5_file crc32 getimagesize image_type_to_mime_type phpinfo phpversion phpcredits strnatcmp strnatcasecmp substr_count strspn strcspn strtok strtoupper strtolower strpos strrpos strrev hebrev hebrevc nl2br basename dirname pathinfo stripslashes stripcslashes strstr stristr strrchr str_shuffle str_word_count strcoll substr substr_replace quotemeta ucfirst ucwords strtr addslashes addcslashes rtrim str_replace str_repeat count_chars chunk_split trim ltrim strip_tags similar_text explode implode setlocale localeconv parse_str str_pad chop strchr sprintf printf vprintf vsprintf sscanf fscanf parse_url urlencode urldecode rawurlencode rawurldecode readlink linkinfo link unlink exec system escapeshellcmd escapeshellarg passthru shell_exec proc_open proc_close rand srand getrandmax mt_rand mt_srand mt_getrandmax base64_decode base64_encode abs ceil floor round is_finite is_nan is_infinite bindec hexdec octdec decbin decoct dechex base_convert number_format fmod ip2long long2ip getenv putenv getopt microtime gettimeofday getrusage uniqid quoted_printable_decode set_time_limit get_cfg_var magic_quotes_runtime set_magic_quotes_runtime get_magic_quotes_gpc get_magic_quotes_runtime import_request_variables error_log serialize unserialize memory_get_usage var_dump var_export debug_zval_dump print_r highlight_file show_source highlight_string ini_get ini_get_all ini_set ini_alter ini_restore get_include_path set_include_path restore_include_path setcookie header headers_sent connection_aborted connection_status ignore_user_abort parse_ini_file is_uploaded_file move_uploaded_file intval floatval doubleval strval gettype settype is_null is_resource is_bool is_long is_float is_int is_integer is_double is_real is_numeric is_string is_array is_object is_scalar ereg ereg_replace eregi eregi_replace split spliti join sql_regcase dl pclose popen readfile rewind rmdir umask fclose feof fgetc fgets fgetss fread fopen fpassthru ftruncate fstat fseek ftell fflush fwrite fputs mkdir rename copy tempnam tmpfile file file_get_contents stream_select stream_context_create stream_context_set_params stream_context_set_option stream_context_get_options stream_filter_prepend stream_filter_append fgetcsv flock get_meta_tags stream_set_write_buffer set_file_buffer set_socket_blocking stream_set_blocking socket_set_blocking stream_get_meta_data stream_register_wrapper stream_wrapper_register stream_set_timeout socket_set_timeout socket_get_status realpath fnmatch fsockopen pfsockopen pack unpack get_browser crypt opendir closedir chdir getcwd rewinddir readdir dir glob fileatime filectime filegroup fileinode filemtime fileowner fileperms filesize filetype file_exists is_writable is_writeable is_readable is_executable is_file is_dir is_link stat lstat chown touch clearstatcache mail ob_start ob_flush ob_clean ob_end_flush ob_end_clean ob_get_flush ob_get_clean ob_get_length ob_get_level ob_get_status ob_get_contents ob_implicit_flush ob_list_handlers ksort krsort natsort natcasesort asort arsort sort rsort usort uasort uksort shuffle array_walk count end prev next reset current key min max in_array array_search extract compact array_fill range array_multisort array_push array_pop array_shift array_unshift array_splice array_slice array_merge array_merge_recursive array_keys array_values array_count_values array_reverse array_reduce array_pad array_flip array_change_key_case array_rand array_unique array_intersect array_intersect_assoc array_diff array_diff_assoc array_sum array_filter array_map array_chunk array_key_exists pos sizeof key_exists assert assert_options version_compare ftok str_rot13 aggregate session_name session_module_name session_save_path session_id session_regenerate_id session_decode session_register session_unregister session_is_registered session_encode session_start session_destroy session_unset session_set_save_handler session_cache_limiter session_cache_expire session_set_cookie_params session_get_cookie_params session_write_close preg_match preg_match_all preg_replace preg_replace_callback preg_split preg_quote preg_grep overload ctype_alnum ctype_alpha ctype_cntrl ctype_digit ctype_lower ctype_graph ctype_print ctype_punct ctype_space ctype_upper ctype_xdigit virtual apache_request_headers apache_note apache_lookup_uri apache_child_terminate apache_setenv apache_response_headers apache_get_version getallheaders mysql_connect mysql_pconnect mysql_close mysql_select_db mysql_create_db mysql_drop_db mysql_query mysql_unbuffered_query mysql_db_query mysql_list_dbs mysql_list_tables mysql_list_fields mysql_list_processes mysql_error mysql_errno mysql_affected_rows mysql_insert_id mysql_result mysql_num_rows mysql_num_fields mysql_fetch_row mysql_fetch_array mysql_fetch_assoc mysql_fetch_object mysql_data_seek mysql_fetch_lengths mysql_fetch_field mysql_field_seek mysql_free_result mysql_field_name mysql_field_table mysql_field_len mysql_field_type mysql_field_flags mysql_escape_string mysql_real_escape_string mysql_stat mysql_thread_id mysql_client_encoding mysql_get_client_info mysql_get_host_info mysql_get_proto_info mysql_get_server_info mysql_info mysql mysql_fieldname mysql_fieldtable mysql_fieldlen mysql_fieldtype mysql_fieldflags mysql_selectdb mysql_createdb mysql_dropdb mysql_freeresult mysql_numfields mysql_numrows mysql_listdbs mysql_listtables mysql_listfields mysql_db_name mysql_dbname mysql_tablename mysql_table_name pg_connect pg_pconnect pg_close pg_connection_status pg_connection_busy pg_connection_reset pg_host pg_dbname pg_port pg_tty pg_options pg_ping pg_query pg_send_query pg_cancel_query pg_fetch_result pg_fetch_row pg_fetch_assoc pg_fetch_array pg_fetch_object pg_fetch_all pg_affected_rows pg_get_result pg_result_seek pg_result_status pg_free_result pg_last_oid pg_num_rows pg_num_fields pg_field_name pg_field_num pg_field_size pg_field_type pg_field_prtlen pg_field_is_null pg_get_notify pg_get_pid pg_result_error pg_last_error pg_last_notice pg_put_line pg_end_copy pg_copy_to pg_copy_from pg_trace pg_untrace pg_lo_create pg_lo_unlink pg_lo_open pg_lo_close pg_lo_read pg_lo_write pg_lo_read_all pg_lo_import pg_lo_export pg_lo_seek pg_lo_tell pg_escape_string pg_escape_bytea pg_unescape_bytea pg_client_encoding pg_set_client_encoding pg_meta_data pg_convert pg_insert pg_update pg_delete pg_select pg_exec pg_getlastoid pg_cmdtuples pg_errormessage pg_numrows pg_numfields pg_fieldname pg_fieldsize pg_fieldtype pg_fieldnum pg_fieldprtlen pg_fieldisnull pg_freeresult pg_result pg_loreadall pg_locreate pg_lounlink pg_loopen pg_loclose pg_loread pg_lowrite pg_loimport pg_loexport echo print global static exit array empty eval isset unset die include require include_once require_once"),multiLineStrings:!0,hooks:{$:function(a){return a.eatWhile(/[\w\$_]/),"variable-2"
9
+ },"<":function(a,c){return a.match(/<</)?(a.eatWhile(/[\w\.]/),c.tokenize=b(a.current().slice(3)),c.tokenize(a,c)):!1},"#":function(a){for(;!a.eol()&&!a.match("?>",!1);)a.next();return"comment"},"/":function(a){if(a.eat("/")){for(;!a.eol()&&!a.match("?>",!1);)a.next();return"comment"}return!1}}};CodeMirror.defineMode("php",function(a,b){function f(a,b){var c=b.curMode==e;if(a.sol()&&'"'!=b.pending&&(b.pending=null),c)return c&&null==b.php.tokenize&&a.match("?>")?(b.curMode=d,b.curState=b.html,"meta"):e.token(a,b.curState);if(a.match(/^<\?\w*/))return b.curMode=e,b.curState=b.php,"meta";if('"'==b.pending){for(;!a.eol()&&'"'!=a.next(););var f="string"}else if(b.pending&&a.pos<b.pending.end){a.pos=b.pending.end;var f=b.pending.style}else var f=d.token(a,b.curState);b.pending=null;var g=a.current(),h=g.search(/<\?/);return-1!=h&&(b.pending="string"==f&&/\"$/.test(g)&&!/\?>/.test(g)?'"':{end:a.pos,style:f},a.backUp(g.length-h)),f}var d=CodeMirror.getMode(a,"text/html"),e=CodeMirror.getMode(a,c);return{startState:function(){var a=CodeMirror.startState(d),c=CodeMirror.startState(e);return{html:a,php:c,curMode:b.startOpen?e:d,curState:b.startOpen?c:a,pending:null}},copyState:function(a){var h,b=a.html,c=CodeMirror.copyState(d,b),f=a.php,g=CodeMirror.copyState(e,f);return h=a.curMode==d?c:g,{html:c,php:g,curMode:a.curMode,curState:h,pending:a.pending}},token:f,indent:function(a,b){return a.curMode!=e&&/^\s*<\//.test(b)||a.curMode==e&&/^\?>/.test(b)?d.indent(a.html,b):a.curMode.indent(a.curState,b)},electricChars:"/{}:",blockCommentStart:"/*",blockCommentEnd:"*/",lineComment:"//",innerMode:function(a){return{state:a.curState,mode:a.curMode}}}},"htmlmixed","clike"),CodeMirror.defineMIME("application/x-httpd-php","php"),CodeMirror.defineMIME("application/x-httpd-php-open",{name:"php",startOpen:!0}),CodeMirror.defineMIME("text/x-php",c)}(),CodeMirror.defineMode("xml",function(a,b){function j(a,b){function c(c){return b.tokenize=c,c(a,b)}var d=a.next();if("<"==d){if(a.eat("!"))return a.eat("[")?a.match("CDATA[")?c(m("atom","]]>")):null:a.match("--")?c(m("comment","-->")):a.match("DOCTYPE",!0,!0)?(a.eatWhile(/[\w\._\-]/),c(n(1))):null;if(a.eat("?"))return a.eatWhile(/[\w\._\-]/),b.tokenize=m("meta","?>"),"meta";var e=a.eat("/");h="";for(var f;f=a.eat(/[^\s\u00a0=<>\"\'\/?]/);)h+=f;return h?(i=e?"closeTag":"openTag",b.tokenize=k,"tag"):"error"}if("&"==d){var g;return g=a.eat("#")?a.eat("x")?a.eatWhile(/[a-fA-F\d]/)&&a.eat(";"):a.eatWhile(/[\d]/)&&a.eat(";"):a.eatWhile(/[\w\.\-:]/)&&a.eat(";"),g?"atom":"error"}return a.eatWhile(/[^&<]/),null}function k(a,b){var c=a.next();return">"==c||"/"==c&&a.eat(">")?(b.tokenize=j,i=">"==c?"endTag":"selfcloseTag","tag"):"="==c?(i="equals",null):"<"==c?"error":/[\'\"]/.test(c)?(b.tokenize=l(c),b.stringStartCol=a.column(),b.tokenize(a,b)):(a.eatWhile(/[^\s\u00a0=<>\"\']/),"word")}function l(a){var b=function(b,c){for(;!b.eol();)if(b.next()==a){c.tokenize=k;break}return"string"};return b.isInAttribute=!0,b}function m(a,b){return function(c,d){for(;!c.eol();){if(c.match(b)){d.tokenize=j;break}c.next()}return a}}function n(a){return function(b,c){for(var d;null!=(d=b.next());){if("<"==d)return c.tokenize=n(a+1),c.tokenize(b,c);if(">"==d){if(1==a){c.tokenize=j;break}return c.tokenize=n(a-1),c.tokenize(b,c)}}return"meta"}}function r(){for(var a=arguments.length-1;a>=0;a--)o.cc.push(arguments[a])}function s(){return r.apply(null,arguments),!0}function t(a,b){var c=f.doNotIndent.hasOwnProperty(a)||o.context&&o.context.noIndent;o.context={prev:o.context,tagName:a,indent:o.indented,startOfLine:b,noIndent:c}}function u(){o.context&&(o.context=o.context.prev)}function v(a){if("openTag"==a)return o.tagName=h,o.tagStart=p.column(),s(z,w(o.startOfLine));if("closeTag"==a){var b=!1;return o.context?o.context.tagName!=h&&(f.implicitlyClosed.hasOwnProperty(o.context.tagName.toLowerCase())&&u(),b=!o.context||o.context.tagName!=h):b=!0,b&&(q="error"),s(x(b))}return s()}function w(a){return function(b){var c=o.tagName;return o.tagName=o.tagStart=null,"selfcloseTag"==b||"endTag"==b&&f.autoSelfClosers.hasOwnProperty(c.toLowerCase())?(y(c.toLowerCase()),s()):"endTag"==b?(y(c.toLowerCase()),t(c,a),s()):s()}}function x(a){return function(b){return a&&(q="error"),"endTag"==b?(u(),s()):(q="error",s(arguments.callee))}}function y(a){for(var b;;){if(!o.context)return;if(b=o.context.tagName.toLowerCase(),!f.contextGrabbers.hasOwnProperty(b)||!f.contextGrabbers[b].hasOwnProperty(a))return;u()}}function z(a){return"word"==a?(q="attribute",s(A,z)):"endTag"==a||"selfcloseTag"==a?r():(q="error",s(z))}function A(a){if("equals"==a)return s(B,z);if(f.allowMissing){if("word"==a)return q="attribute",s(A,z)}else q="error";return"endTag"==a||"selfcloseTag"==a?r():s()}function B(a){return"string"==a?s(C):"word"==a&&f.allowUnquoted?(q="string",s()):(q="error","endTag"==a||"selfCloseTag"==a?r():s())}function C(a){return"string"==a?s(C):r()}var h,i,o,p,q,c=a.indentUnit,d=b.multilineTagIndentFactor||1,e=b.multilineTagIndentPastTag||!0,f=b.htmlMode?{autoSelfClosers:{area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0},implicitlyClosed:{dd:!0,li:!0,optgroup:!0,option:!0,p:!0,rp:!0,rt:!0,tbody:!0,td:!0,tfoot:!0,th:!0,tr:!0},contextGrabbers:{dd:{dd:!0,dt:!0},dt:{dd:!0,dt:!0},li:{li:!0},option:{option:!0,optgroup:!0},optgroup:{optgroup:!0},p:{address:!0,article:!0,aside:!0,blockquote:!0,dir:!0,div:!0,dl:!0,fieldset:!0,footer:!0,form:!0,h1:!0,h2:!0,h3:!0,h4:!0,h5:!0,h6:!0,header:!0,hgroup:!0,hr:!0,menu:!0,nav:!0,ol:!0,p:!0,pre:!0,section:!0,table:!0,ul:!0},rp:{rp:!0,rt:!0},rt:{rp:!0,rt:!0},tbody:{tbody:!0,tfoot:!0},td:{td:!0,th:!0},tfoot:{tbody:!0},th:{td:!0,th:!0},thead:{tbody:!0,tfoot:!0},tr:{tr:!0}},doNotIndent:{pre:!0},allowUnquoted:!0,allowMissing:!0}:{autoSelfClosers:{},implicitlyClosed:{},contextGrabbers:{},doNotIndent:{},allowUnquoted:!1,allowMissing:!1},g=b.alignCDATA;return{startState:function(){return{tokenize:j,cc:[],indented:0,startOfLine:!0,tagName:null,tagStart:null,context:null}},token:function(a,b){if(!b.tagName&&a.sol()&&(b.startOfLine=!0,b.indented=a.indentation()),a.eatSpace())return null;q=i=h=null;var c=b.tokenize(a,b);if(b.type=i,(c||i)&&"comment"!=c)for(o=b,p=a;;){var d=b.cc.pop()||v;if(d(i||c))break}return b.startOfLine=!1,q||c},indent:function(a,b,f){var h=a.context;if(a.tokenize.isInAttribute)return a.stringStartCol+1;if(a.tokenize!=k&&a.tokenize!=j||h&&h.noIndent)return f?f.match(/^(\s*)/)[0].length:0;if(a.tagName)return e?a.tagStart+a.tagName.length+2:a.tagStart+c*d;if(g&&/<!\[CDATA\[/.test(b))return 0;for(h&&/^<\//.test(b)&&(h=h.prev);h&&!h.startOfLine;)h=h.prev;return h?h.indent+c:0},electricChars:"/",blockCommentStart:"<!--",blockCommentEnd:"-->",configuration:b.htmlMode?"html":"xml",helperType:b.htmlMode?"html":"xml"}}),CodeMirror.defineMIME("text/xml","xml"),CodeMirror.defineMIME("application/xml","xml"),CodeMirror.mimeModes.hasOwnProperty("text/html")||CodeMirror.defineMIME("text/html",{name:"xml",htmlMode:!0});
vendor/coffee-script.js CHANGED
@@ -1,8 +1,12 @@
1
- /**
2
- * CoffeeScript Compiler v1.3.3
3
- * http://coffeescript.org
4
- *
5
- * Copyright 2011, Jeremy Ashkenas
6
- * Released under the MIT License
7
- */
8
- (function(root){var CoffeeScript=function(){function require(a){return require[a]}require["./helpers"]=new function(){var a=this;(function(){var b,c;a.starts=function(a,b,c){return b===a.substr(c,b.length)},a.ends=function(a,b,c){var d;d=b.length;return b===a.substr(a.length-d-(c||0),d)},a.compact=function(a){var b,c,d,e;e=[];for(c=0,d=a.length;c<d;c++)b=a[c],b&&e.push(b);return e},a.count=function(a,b){var c,d;c=d=0;if(!b.length)return 1/0;while(d=1+a.indexOf(b,d))c++;return c},a.merge=function(a,c){return b(b({},a),c)},b=a.extend=function(a,b){var c,d;for(c in b)d=b[c],a[c]=d;return a},a.flatten=c=function(a){var b,d,e,f;d=[];for(e=0,f=a.length;e<f;e++)b=a[e],b instanceof Array?d=d.concat(c(b)):d.push(b);return d},a.del=function(a,b){var c;c=a[b],delete a[b];return c},a.last=function(a,b){return a[a.length-(b||0)-1]}}).call(this)},require["./rewriter"]=new function(){var a=this;(function(){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t=[].indexOf||function(a){for(var b=0,c=this.length;b<c;b++)if(b in this&&this[b]===a)return b;return-1},u=[].slice;a.Rewriter=function(){function a(){}a.prototype.rewrite=function(a){this.tokens=a,this.removeLeadingNewlines(),this.removeMidExpressionNewlines(),this.closeOpenCalls(),this.closeOpenIndexes(),this.addImplicitIndentation(),this.tagPostfixConditionals(),this.addImplicitBraces(),this.addImplicitParentheses();return this.tokens},a.prototype.scanTokens=function(a){var b,c,d;d=this.tokens,b=0;while(c=d[b])b+=a.call(this,c,b,d);return!0},a.prototype.detectEnd=function(a,b,c){var f,g,h,i,j;h=this.tokens,f=0;while(g=h[a]){if(f===0&&b.call(this,g,a))return c.call(this,g,a);if(!g||f<0)return c.call(this,g,a-1);if(i=g[0],t.call(e,i)>=0)f+=1;else if(j=g[0],t.call(d,j)>=0)f-=1;a+=1}return a-1},a.prototype.removeLeadingNewlines=function(){var a,b,c,d,e;e=this.tokens;for(a=c=0,d=e.length;c<d;a=++c){b=e[a][0];if(b!=="TERMINATOR")break}if(a)return this.tokens.splice(0,a)},a.prototype.removeMidExpressionNewlines=function(){return this.scanTokens(function(a,b,d){var e;if(!(a[0]==="TERMINATOR"&&(e=this.tag(b+1),t.call(c,e)>=0)))return 1;d.splice(b,1);return 0})},a.prototype.closeOpenCalls=function(){var a,b;b=function(a,b){var c;return(c=a[0])===")"||c==="CALL_END"||a[0]==="OUTDENT"&&this.tag(b-1)===")"},a=function(a,b){return this.tokens[a[0]==="OUTDENT"?b-1:b][0]="CALL_END"};return this.scanTokens(function(c,d){c[0]==="CALL_START"&&this.detectEnd(d+1,b,a);return 1})},a.prototype.closeOpenIndexes=function(){var a,b;b=function(a,b){var c;return(c=a[0])==="]"||c==="INDEX_END"},a=function(a,b){return a[0]="INDEX_END"};return this.scanTokens(function(c,d){c[0]==="INDEX_START"&&this.detectEnd(d+1,b,a);return 1})},a.prototype.addImplicitBraces=function(){var a,b,c,f,g,i,j,k;f=[],g=null,k=null,c=!0,i=0,j=0,b=function(a,b){var d,e,f,g,i,m;i=this.tokens.slice(b+1,b+3+1||9e9),d=i[0],g=i[1],f=i[2];if("HERECOMMENT"===(d!=null?d[0]:void 0))return!1;e=a[0],t.call(l,e)>=0&&(c=!1);return(e==="TERMINATOR"||e==="OUTDENT"||t.call(h,e)>=0&&c&&b-j!==1)&&(!k&&this.tag(b-1)!==","||(g!=null?g[0]:void 0)!==":"&&((d!=null?d[0]:void 0)!=="@"||(f!=null?f[0]:void 0)!==":"))||e===","&&d&&(m=d[0])!=="IDENTIFIER"&&m!=="NUMBER"&&m!=="STRING"&&m!=="@"&&m!=="TERMINATOR"&&m!=="OUTDENT"},a=function(a,b){var c;c=this.generate("}","}",a[2]);return this.tokens.splice(b,0,c)};return this.scanTokens(function(h,i,m){var n,o,p,q,r,s,u,v;if(u=q=h[0],t.call(e,u)>=0){f.push([q==="INDENT"&&this.tag(i-1)==="{"?"{":q,i]);return 1}if(t.call(d,q)>=0){g=f.pop();return 1}if(q!==":"||(n=this.tag(i-2))!==":"&&((v=f[f.length-1])!=null?v[0]:void 0)==="{")return 1;c=!0,j=i+1,f.push(["{"]),o=n==="@"?i-2:i-1;while(this.tag(o-2)==="HERECOMMENT")o-=2;p=this.tag(o-1),k=!p||t.call(l,p)>=0,s=new String("{"),s.generated=!0,r=this.generate("{",s,h[2]),m.splice(o,0,r),this.detectEnd(i+2,b,a);return 2})},a.prototype.addImplicitParentheses=function(){var a,b,c,d,e;c=e=d=!1,b=function(a,b){var c,g,i,j;g=a[0];if(!e&&a.fromThen)return!0;if(g==="IF"||g==="ELSE"||g==="CATCH"||g==="->"||g==="=>"||g==="CLASS")e=!0;if(g==="IF"||g==="ELSE"||g==="SWITCH"||g==="TRY"||g==="=")d=!0;if((g==="."||g==="?."||g==="::")&&this.tag(b-1)==="OUTDENT")return!0;return!a.generated&&this.tag(b-1)!==","&&(t.call(h,g)>=0||g==="INDENT"&&!d)&&(g!=="INDENT"||(i=this.tag(b-2))!=="CLASS"&&i!=="EXTENDS"&&(j=this.tag(b-1),t.call(f,j)<0)&&(!(c=this.tokens[b+1])||!c.generated||c[0]!=="{"))},a=function(a,b){return this.tokens.splice(b,0,this.generate("CALL_END",")",a[2]))};return this.scanTokens(function(f,h,k){var m,n,o,p,q,r,s,u;q=f[0];if(q==="CLASS"||q==="IF"||q==="FOR"||q==="WHILE")c=!0;r=k.slice(h-1,h+1+1||9e9),p=r[0],n=r[1],o=r[2],m=!c&&q==="INDENT"&&o&&o.generated&&o[0]==="{"&&p&&(s=p[0],t.call(i,s)>=0),e=!1,d=!1,t.call(l,q)>=0&&(c=!1),p&&!p.spaced&&q==="?"&&(f.call=!0);if(f.fromThen)return 1;if(!(m||(p!=null?p.spaced:void 0)&&(p.call||(u=p[0],t.call(i,u)>=0))&&(t.call(g,q)>=0||!f.spaced&&!f.newLine&&t.call(j,q)>=0)))return 1;k.splice(h,0,this.generate("CALL_START","(",f[2])),this.detectEnd(h+1,b,a),p[0]==="?"&&(p[0]="FUNC_EXIST");return 2})},a.prototype.addImplicitIndentation=function(){var a,b,c,d,e;e=c=d=null,b=function(a,b){var c;return a[1]!==";"&&(c=a[0],t.call(m,c)>=0)&&(a[0]!=="ELSE"||e==="IF"||e==="THEN")},a=function(a,b){return this.tokens.splice(this.tag(b-1)===","?b-1:b,0,d)};return this.scanTokens(function(f,g,h){var i,j,k;i=f[0];if(i==="TERMINATOR"&&this.tag(g+1)==="THEN"){h.splice(g,1);return 0}if(i==="ELSE"&&this.tag(g-1)!=="OUTDENT"){h.splice.apply(h,[g,0].concat(u.call(this.indentation(f))));return 2}if(i==="CATCH"&&((j=this.tag(g+2))==="OUTDENT"||j==="TERMINATOR"||j==="FINALLY")){h.splice.apply(h,[g+2,0].concat(u.call(this.indentation(f))));return 4}if(t.call(n,i)>=0&&this.tag(g+1)!=="INDENT"&&(i!=="ELSE"||this.tag(g+1)!=="IF")){e=i,k=this.indentation(f,!0),c=k[0],d=k[1],e==="THEN"&&(c.fromThen=!0),h.splice(g+1,0,c),this.detectEnd(g+2,b,a),i==="THEN"&&h.splice(g,1);return 1}return 1})},a.prototype.tagPostfixConditionals=function(){var a,b,c;c=null,b=function(a,b){var c;return(c=a[0])==="TERMINATOR"||c==="INDENT"},a=function(a,b){if(a[0]!=="INDENT"||a.generated&&!a.fromThen)return c[0]="POST_"+c[0]};return this.scanTokens(function(d,e){if(d[0]!=="IF")return 1;c=d,this.detectEnd(e+1,b,a);return 1})},a.prototype.indentation=function(a,b){var c,d;b==null&&(b=!1),c=["INDENT",2,a[2]],d=["OUTDENT",2,a[2]],b&&(c.generated=d.generated=!0);return[c,d]},a.prototype.generate=function(a,b,c){var d;d=[a,b,c],d.generated=!0;return d},a.prototype.tag=function(a){var b;return(b=this.tokens[a])!=null?b[0]:void 0};return a}(),b=[["(",")"],["[","]"],["{","}"],["INDENT","OUTDENT"],["CALL_START","CALL_END"],["PARAM_START","PARAM_END"],["INDEX_START","INDEX_END"]],a.INVERSES=k={},e=[],d=[];for(q=0,r=b.length;q<r;q++)s=b[q],o=s[0],p=s[1],e.push(k[p]=o),d.push(k[o]=p);c=["CATCH","WHEN","ELSE","FINALLY"].concat(d),i=["IDENTIFIER","SUPER",")","CALL_END","]","INDEX_END","@","THIS"],g=["IDENTIFIER","NUMBER","STRING","JS","REGEX","NEW","PARAM_START","CLASS","IF","TRY","SWITCH","THIS","BOOL","NULL","UNDEFINED","UNARY","SUPER","@","->","=>","[","(","{","--","++"],j=["+","-"],f=["->","=>","{","[",","],h=["POST_IF","FOR","WHILE","UNTIL","WHEN","BY","LOOP","TERMINATOR"],n=["ELSE","->","=>","TRY","FINALLY","THEN"],m=["TERMINATOR","CATCH","FINALLY","ELSE","OUTDENT","LEADING_WHEN"],l=["TERMINATOR","INDENT","OUTDENT"]}).call(this)},require["./lexer"]=new function(){var a=this;(function(){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X=[].indexOf||function(a){for(var b=0,c=this.length;b<c;b++)if(b in this&&this[b]===a)return b;return-1};V=require("./rewriter"),J=V.Rewriter,r=V.INVERSES,W=require("./helpers"),R=W.count,U=W.starts,Q=W.compact,T=W.last,a.Lexer=y=function(){function a(){}a.prototype.tokenize=function(a,b){var c,d;b==null&&(b={}),P.test(a)&&(a="\n"+a),a=a.replace(/\r/g,"").replace(N,""),this.code=a,this.line=b.line||0,this.indent=0,this.indebt=0,this.outdebt=0,this.indents=[],this.ends=[],this.tokens=[],c=0;while(this.chunk=a.slice(c))c+=this.identifierToken()||this.commentToken()||this.whitespaceToken()||this.lineToken()||this.heredocToken()||this.stringToken()||this.numberToken()||this.regexToken()||this.jsToken()||this.literalToken();this.closeIndentation(),(d=this.ends.pop())&&this.error("missing "+d);if(b.rewrite===!1)return this.tokens;return(new J).rewrite(this.tokens)},a.prototype.identifierToken=function(){var a,b,c,d,h,i,j,k,l;if(!(h=p.exec(this.chunk)))return 0;d=h[0],c=h[1],a=h[2];if(c==="own"&&this.tag()==="FOR"){this.token("OWN",c);return c.length}b=a||(i=T(this.tokens))&&((k=i[0])==="."||k==="?."||k==="::"||!i.spaced&&i[0]==="@"),j="IDENTIFIER",!b&&(X.call(u,c)>=0||X.call(g,c)>=0)&&(j=c.toUpperCase(),j==="WHEN"&&(l=this.tag(),X.call(v,l)>=0)?j="LEADING_WHEN":j==="FOR"?this.seenFor=!0:j==="UNLESS"?j="IF":X.call(O,j)>=0?j="UNARY":X.call(H,j)>=0&&(j!=="INSTANCEOF"&&this.seenFor?(j="FOR"+j,this.seenFor=!1):(j="RELATION",this.value()==="!"&&(this.tokens.pop(),c="!"+c)))),X.call(t,c)>=0&&(b?(j="IDENTIFIER",c=new String(c),c.reserved=!0):X.call(I,c)>=0&&this.error('reserved word "'+c+'"')),b||(X.call(e,c)>=0&&(c=f[c]),j=function(){switch(c){case"!":return"UNARY";case"==":case"!=":return"COMPARE";case"&&":case"||":return"LOGIC";case"true":case"false":return"BOOL";case"break":case"continue":return"STATEMENT";default:return j}}()),this.token(j,c),a&&this.token(":",":");return d.length},a.prototype.numberToken=function(){var a,b,c,d,e;if(!(c=E.exec(this.chunk)))return 0;d=c[0],/^0[BOX]/.test(d)?this.error("radix prefix '"+d+"' must be lowercase"):/E/.test(d)&&!/^0x/.test(d)?this.error("exponential notation '"+d+"' must be indicated with a lowercase 'e'"):/^0\d*[89]/.test(d)?this.error("decimal literal '"+d+"' must not be prefixed with '0'"):/^0\d+/.test(d)&&this.error("octal literal '"+d+"' must be prefixed with '0o'"),b=d.length;if(e=/^0o([0-7]+)/.exec(d))d="0x"+parseInt(e[1],8).toString(16);if(a=/^0b([01]+)/.exec(d))d="0x"+parseInt(a[1],2).toString(16);this.token("NUMBER",d);return b},a.prototype.stringToken=function(){var a,b,c;switch(this.chunk.charAt(0)){case"'":if(!(a=L.exec(this.chunk)))return 0;this.token("STRING",(c=a[0]).replace(A,"\\\n"));break;case'"':if(!(c=this.balancedString(this.chunk,'"')))return 0;0<c.indexOf("#{",1)?this.interpolateString(c.slice(1,-1)):this.token("STRING",this.escapeLines(c));break;default:return 0}(b=/^(?:\\.|[^\\])*\\(?:0[0-7]|[1-7])/.test(c))&&this.error("octal escape sequences "+c+" are not allowed"),this.line+=R(c,"\n");return c.length},a.prototype.heredocToken=function(){var a,b,c,d;if(!(c=k.exec(this.chunk)))return 0;b=c[0],d=b.charAt(0),a=this.sanitizeHeredoc(c[2],{quote:d,indent:null}),d==='"'&&0<=a.indexOf("#{")?this.interpolateString(a,{heredoc:!0}):this.token("STRING",this.makeString(a,d,!0)),this.line+=R(b,"\n");return b.length},a.prototype.commentToken=function(){var a,b,c;if(!(c=this.chunk.match(h)))return 0;a=c[0],b=c[1],b&&this.token("HERECOMMENT",this.sanitizeHeredoc(b,{herecomment:!0,indent:Array(this.indent+1).join(" ")})),this.line+=R(a,"\n");return a.length},a.prototype.jsToken=function(){var a,b;if(this.chunk.charAt(0)!=="`"||!(a=s.exec(this.chunk)))return 0;this.token("JS",(b=a[0]).slice(1,-1));return b.length},a.prototype.regexToken=function(){var a,b,c,d,e,f,g;if(this.chunk.charAt(0)!=="/")return 0;if(c=n.exec(this.chunk)){b=this.heregexToken(c),this.line+=R(c[0],"\n");return b}d=T(this.tokens);if(d&&(f=d[0],X.call(d.spaced?C:D,f)>=0))return 0;if(!(c=G.exec(this.chunk)))return 0;g=c,c=g[0],e=g[1],a=g[2],e.slice(0,2)==="/*"&&this.error("regular expressions cannot begin with `*`"),e==="//"&&(e="/(?:)/"),this.token("REGEX",""+e+a);return c.length},a.prototype.heregexToken=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;d=a[0],b=a[1],c=a[2];if(0>b.indexOf("#{")){e=b.replace(o,"").replace(/\//g,"\\/"),e.match(/^\*/)&&this.error("regular expressions cannot begin with `*`"),this.token("REGEX","/"+(e||"(?:)")+"/"+c);return d.length}this.token("IDENTIFIER","RegExp"),this.tokens.push(["CALL_START","("]),g=[],k=this.interpolateString(b,{regex:!0});for(i=0,j=k.length;i<j;i++){l=k[i],f=l[0],h=l[1];if(f==="TOKENS")g.push.apply(g,h);else{if(!(h=h.replace(o,"")))continue;h=h.replace(/\\/g,"\\\\"),g.push(["STRING",this.makeString(h,'"',!0)])}g.push(["+","+"])}g.pop(),((m=g[0])!=null?m[0]:void 0)!=="STRING"&&this.tokens.push(["STRING",'""'],["+","+"]),(n=this.tokens).push.apply(n,g),c&&this.tokens.push([",",","],["STRING",'"'+c+'"']),this.token(")",")");return d.length},a.prototype.lineToken=function(){var a,b,c,d,e,f;if(!(c=B.exec(this.chunk)))return 0;b=c[0],this.line+=R(b,"\n"),this.seenFor=!1,e=T(this.tokens,1),f=b.length-1-b.lastIndexOf("\n"),d=this.unfinished();if(f-this.indebt===this.indent){d?this.suppressNewlines():this.newlineToken();return b.length}if(f>this.indent){if(d){this.indebt=f-this.indent,this.suppressNewlines();return b.length}a=f-this.indent+this.outdebt,this.token("INDENT",a),this.indents.push(a),this.ends.push("OUTDENT"),this.outdebt=this.indebt=0}else this.indebt=0,this.outdentToken(this.indent-f,d);this.indent=f;return b.length},a.prototype.outdentToken=function(a,b){var c,d;while(a>0)d=this.indents.length-1,this.indents[d]===void 0?a=0:this.indents[d]===this.outdebt?(a-=this.outdebt,this.outdebt=0):this.indents[d]<this.outdebt?(this.outdebt-=this.indents[d],a-=this.indents[d]):(c=this.indents.pop()-this.outdebt,a-=c,this.outdebt=0,this.pair("OUTDENT"),this.token("OUTDENT",c));c&&(this.outdebt-=a);while(this.value()===";")this.tokens.pop();this.tag()!=="TERMINATOR"&&!b&&this.token("TERMINATOR","\n");return this},a.prototype.whitespaceToken=function(){var a,b,c;if(!(a=P.exec(this.chunk))&&!(b=this.chunk.charAt(0)==="\n"))return 0;c=T(this.tokens),c&&(c[a?"spaced":"newLine"]=!0);return a?a[0].length:0},a.prototype.newlineToken=function(){while(this.value()===";")this.tokens.pop();this.tag()!=="TERMINATOR"&&this.token("TERMINATOR","\n");return this},a.prototype.suppressNewlines=function(){this.value()==="\\"&&this.tokens.pop();return this},a.prototype.literalToken=function(){var a,b,e,f,g,h,k,l;(a=F.exec(this.chunk))?(f=a[0],d.test(f)&&this.tagParameters()):f=this.chunk.charAt(0),e=f,b=T(this.tokens);if(f==="="&&b){!b[1].reserved&&(g=b[1],X.call(t,g)>=0)&&this.error('reserved word "'+this.value()+"\" can't be assigned");if((h=b[1])==="||"||h==="&&"){b[0]="COMPOUND_ASSIGN",b[1]+="=";return f.length}}if(f===";")this.seenFor=!1,e="TERMINATOR";else if(X.call(z,f)>=0)e="MATH";else if(X.call(i,f)>=0)e="COMPARE";else if(X.call(j,f)>=0)e="COMPOUND_ASSIGN";else if(X.call(O,f)>=0)e="UNARY";else if(X.call(K,f)>=0)e="SHIFT";else if(X.call(x,f)>=0||f==="?"&&(b!=null?b.spaced:void 0))e="LOGIC";else if(b&&!b.spaced)if(f==="("&&(k=b[0],X.call(c,k)>=0))b[0]==="?"&&(b[0]="FUNC_EXIST"),e="CALL_START";else if(f==="["&&(l=b[0],X.call(q,l)>=0)){e="INDEX_START";switch(b[0]){case"?":b[0]="INDEX_SOAK"}}switch(f){case"(":case"{":case"[":this.ends.push(r[f]);break;case")":case"}":case"]":this.pair(f)}this.token(e,f);return f.length},a.prototype.sanitizeHeredoc=function(a,b){var c,d,e,f,g;e=b.indent,d=b.herecomment;if(d){l.test(a)&&this.error('block comment cannot contain "*/", starting');if(a.indexOf("\n")<=0)return a}else while(f=m.exec(a)){c=f[1];if(e===null||0<(g=c.length)&&g<e.length)e=c}e&&(a=a.replace(RegExp("\\n"+e,"g"),"\n")),d||(a=a.replace(/^\n/,""));return a},a.prototype.tagParameters=function(){var a,b,c,d;if(this.tag()!==")")return this;b=[],d=this.tokens,a=d.length,d[--a][0]="PARAM_END";while(c=d[--a])switch(c[0]){case")":b.push(c);break;case"(":case"CALL_START":if(b.length)b.pop();else{if(c[0]==="("){c[0]="PARAM_START";return this}return this}}return this},a.prototype.closeIndentation=function(){return this.outdentToken(this.indent)},a.prototype.balancedString=function(a,b){var c,d,e,f,g,h,i,j;c=0,h=[b];for(d=i=1,j=a.length;1<=j?i<j:i>j;d=1<=j?++i:--i){if(c){--c;continue}switch(e=a.charAt(d)){case"\\":++c;continue;case b:h.pop();if(!h.length)return a.slice(0,d+1||9e9);b=h[h.length-1];continue}b!=="}"||e!=='"'&&e!=="'"?b==="}"&&e==="/"&&(f=n.exec(a.slice(d))||G.exec(a.slice(d)))?c+=f[0].length-1:b==="}"&&e==="{"?h.push(b="}"):b==='"'&&g==="#"&&e==="{"&&h.push(b="}"):h.push(b=e),g=e}return this.error("missing "+h.pop()+", starting")},a.prototype.interpolateString=function(b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;c==null&&(c={}),e=c.heredoc,m=c.regex,o=[],l=0,f=-1;while(j=b.charAt(f+=1)){if(j==="\\"){f+=1;continue}if(j!=="#"||b.charAt(f+1)!=="{"||!(d=this.balancedString(b.slice(f+1),"}")))continue;l<f&&o.push(["NEOSTRING",b.slice(l,f)]),g=d.slice(1,-1);if(g.length){k=(new a).tokenize(g,{line:this.line,rewrite:!1}),k.pop(),((s=k[0])!=null?s[0]:void 0)==="TERMINATOR"&&k.shift();if(i=k.length)i>1&&(k.unshift(["(","(",this.line]),k.push([")",")",this.line])),o.push(["TOKENS",k])}f+=d.length,l=f+1}f>l&&l<b.length&&o.push(["NEOSTRING",b.slice(l)]);if(m)return o;if(!o.length)return this.token("STRING",'""');o[0][0]!=="NEOSTRING"&&o.unshift(["",""]),(h=o.length>1)&&this.token("(","(");for(f=q=0,r=o.length;q<r;f=++q)t=o[f],n=t[0],p=t[1],f&&this.token("+","+"),n==="TOKENS"?(u=this.tokens).push.apply(u,p):this.token("STRING",this.makeString(p,'"',e));h&&this.token(")",")");return o},a.prototype.pair=function(a){var b,c;if(a!==(c=T(this.ends))){"OUTDENT"!==c&&this.error("unmatched "+a),this.indent-=b=T(this.indents),this.outdentToken(b,!0);return this.pair(a)}return this.ends.pop()},a.prototype.token=function(a,b){return this.tokens.push([a,b,this.line])},a.prototype.tag=function(a,b){var c;return(c=T(this.tokens,a))&&(b?c[0]=b:c[0])},a.prototype.value=function(a,b){var c;return(c=T(this.tokens,a))&&(b?c[1]=b:c[1])},a.prototype.unfinished=function(){var a;return w.test(this.chunk)||(a=this.tag())==="\\"||a==="."||a==="?."||a==="UNARY"||a==="MATH"||a==="+"||a==="-"||a==="SHIFT"||a==="RELATION"||a==="COMPARE"||a==="LOGIC"||a==="THROW"||a==="EXTENDS"},a.prototype.escapeLines=function(a,b){return a.replace(A,b?"\\n":"")},a.prototype.makeString=function(a,b,c){if(!a)return b+b;a=a.replace(/\\([\s\S])/g,function(a,c){return c==="\n"||c===b?c:a}),a=a.replace(RegExp(""+b,"g"),"\\$&");return b+this.escapeLines(a,c)+b},a.prototype.error=function(a){throw SyntaxError(""+a+" on line "+(this.line+1))};return a}(),u=["true","false","null","this","new","delete","typeof","in","instanceof","return","throw","break","continue","debugger","if","else","switch","for","while","do","try","catch","finally","class","extends","super"],g=["undefined","then","unless","until","loop","of","by","when"],f={and:"&&",or:"||",is:"==",isnt:"!=",not:"!",yes:"true",no:"false",on:"true",off:"false"},e=function(){var a;a=[];for(S in f)a.push(S);return a}(),g=g.concat(e),I=["case","default","function","var","void","with","const","let","enum","export","import","native","__hasProp","__extends","__slice","__bind","__indexOf","implements","interface","let","package","private","protected","public","static","yield"],M=["arguments","eval"],t=u.concat(I).concat(M),a.RESERVED=I.concat(u).concat(g).concat(M),a.STRICT_PROSCRIBED=M,p=/^([$A-Za-z_\x7f-\uffff][$\w\x7f-\uffff]*)([^\n\S]*:(?!:))?/,E=/^0b[01]+|^0o[0-7]+|^0x[\da-f]+|^\d*\.?\d+(?:e[+-]?\d+)?/i,k=/^("""|''')([\s\S]*?)(?:\n[^\n\S]*)?\1/,F=/^(?:[-=]>|[-+*\/%<>&|^!?=]=|>>>=?|([-+:])\1|([&|<>])\2=?|\?\.|\.{2,3})/,P=/^[^\n\S]+/,h=/^###([^#][\s\S]*?)(?:###[^\n\S]*|(?:###)?$)|^(?:\s*#(?!##[^#]).*)+/,d=/^[-=]>/,B=/^(?:\n[^\n\S]*)+/,L=/^'[^\\']*(?:\\.[^\\']*)*'/,s=/^`[^\\`]*(?:\\.[^\\`]*)*`/,G=/^(\/(?![\s=])[^[\/\n\\]*(?:(?:\\[\s\S]|\[[^\]\n\\]*(?:\\[\s\S][^\]\n\\]*)*])[^[\/\n\\]*)*\/)([imgy]{0,4})(?!\w)/,n=/^\/{3}([\s\S]+?)\/{3}([imgy]{0,4})(?!\w)/,o=/\s+(?:#.*)?/g,A=/\n/g,m=/\n+([^\n\S]*)/g,l=/\*\//,w=/^\s*(?:,|\??\.(?![.\d])|::)/,N=/\s+$/,j=["-=","+=","/=","*=","%=","||=","&&=","?=","<<=",">>=",">>>=","&=","^=","|="],O=["!","~","NEW","TYPEOF","DELETE","DO"],x=["&&","||","&","|","^"],K=["<<",">>",">>>"],i=["==","!=","<",">","<=",">="],z=["*","/","%"],H=["IN","OF","INSTANCEOF"],b=["TRUE","FALSE"],C=["NUMBER","REGEX","BOOL","NULL","UNDEFINED","++","--","]"],D=C.concat(")","}","THIS","IDENTIFIER","STRING"),c=["IDENTIFIER","STRING","REGEX",")","]","}","?","::","@","THIS","SUPER"],q=c.concat("NUMBER","BOOL","NULL","UNDEFINED"),v=["INDENT","OUTDENT","TERMINATOR"]}).call(this)},require["./parser"]=new function(){var a=this,b=function(){var a={trace:function(){},yy:{},symbols_:{error:2,Root:3,Body:4,Block:5,TERMINATOR:6,Line:7,Expression:8,Statement:9,Return:10,Comment:11,STATEMENT:12,Value:13,Invocation:14,Code:15,Operation:16,Assign:17,If:18,Try:19,While:20,For:21,Switch:22,Class:23,Throw:24,INDENT:25,OUTDENT:26,Identifier:27,IDENTIFIER:28,AlphaNumeric:29,NUMBER:30,STRING:31,Literal:32,JS:33,REGEX:34,DEBUGGER:35,UNDEFINED:36,NULL:37,BOOL:38,Assignable:39,"=":40,AssignObj:41,ObjAssignable:42,":":43,ThisProperty:44,RETURN:45,HERECOMMENT:46,PARAM_START:47,ParamList:48,PARAM_END:49,FuncGlyph:50,"->":51,"=>":52,OptComma:53,",":54,Param:55,ParamVar:56,"...":57,Array:58,Object:59,Splat:60,SimpleAssignable:61,Accessor:62,Parenthetical:63,Range:64,This:65,".":66,"?.":67,"::":68,Index:69,INDEX_START:70,IndexValue:71,INDEX_END:72,INDEX_SOAK:73,Slice:74,"{":75,AssignList:76,"}":77,CLASS:78,EXTENDS:79,OptFuncExist:80,Arguments:81,SUPER:82,FUNC_EXIST:83,CALL_START:84,CALL_END:85,ArgList:86,THIS:87,"@":88,"[":89,"]":90,RangeDots:91,"..":92,Arg:93,SimpleArgs:94,TRY:95,Catch:96,FINALLY:97,CATCH:98,THROW:99,"(":100,")":101,WhileSource:102,WHILE:103,WHEN:104,UNTIL:105,Loop:106,LOOP:107,ForBody:108,FOR:109,ForStart:110,ForSource:111,ForVariables:112,OWN:113,ForValue:114,FORIN:115,FOROF:116,BY:117,SWITCH:118,Whens:119,ELSE:120,When:121,LEADING_WHEN:122,IfBlock:123,IF:124,POST_IF:125,UNARY:126,"-":127,"+":128,"--":129,"++":130,"?":131,MATH:132,SHIFT:133,COMPARE:134,LOGIC:135,RELATION:136,COMPOUND_ASSIGN:137,$accept:0,$end:1},terminals_:{2:"error",6:"TERMINATOR",12:"STATEMENT",25:"INDENT",26:"OUTDENT",28:"IDENTIFIER",30:"NUMBER",31:"STRING",33:"JS",34:"REGEX",35:"DEBUGGER",36:"UNDEFINED",37:"NULL",38:"BOOL",40:"=",43:":",45:"RETURN",46:"HERECOMMENT",47:"PARAM_START",49:"PARAM_END",51:"->",52:"=>",54:",",57:"...",66:".",67:"?.",68:"::",70:"INDEX_START",72:"INDEX_END",73:"INDEX_SOAK",75:"{",77:"}",78:"CLASS",79:"EXTENDS",82:"SUPER",83:"FUNC_EXIST",84:"CALL_START",85:"CALL_END",87:"THIS",88:"@",89:"[",90:"]",92:"..",95:"TRY",97:"FINALLY",98:"CATCH",99:"THROW",100:"(",101:")",103:"WHILE",104:"WHEN",105:"UNTIL",107:"LOOP",109:"FOR",113:"OWN",115:"FORIN",116:"FOROF",117:"BY",118:"SWITCH",120:"ELSE",122:"LEADING_WHEN",124:"IF",125:"POST_IF",126:"UNARY",127:"-",128:"+",129:"--",130:"++",131:"?",132:"MATH",133:"SHIFT",134:"COMPARE",135:"LOGIC",136:"RELATION",137:"COMPOUND_ASSIGN"},productions_:[0,[3,0],[3,1],[3,2],[4,1],[4,3],[4,2],[7,1],[7,1],[9,1],[9,1],[9,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[5,2],[5,3],[27,1],[29,1],[29,1],[32,1],[32,1],[32,1],[32,1],[32,1],[32,1],[32,1],[17,3],[17,4],[17,5],[41,1],[41,3],[41,5],[41,1],[42,1],[42,1],[42,1],[10,2],[10,1],[11,1],[15,5],[15,2],[50,1],[50,1],[53,0],[53,1],[48,0],[48,1],[48,3],[48,4],[48,6],[55,1],[55,2],[55,3],[56,1],[56,1],[56,1],[56,1],[60,2],[61,1],[61,2],[61,2],[61,1],[39,1],[39,1],[39,1],[13,1],[13,1],[13,1],[13,1],[13,1],[62,2],[62,2],[62,2],[62,1],[62,1],[69,3],[69,2],[71,1],[71,1],[59,4],[76,0],[76,1],[76,3],[76,4],[76,6],[23,1],[23,2],[23,3],[23,4],[23,2],[23,3],[23,4],[23,5],[14,3],[14,3],[14,1],[14,2],[80,0],[80,1],[81,2],[81,4],[65,1],[65,1],[44,2],[58,2],[58,4],[91,1],[91,1],[64,5],[74,3],[74,2],[74,2],[74,1],[86,1],[86,3],[86,4],[86,4],[86,6],[93,1],[93,1],[94,1],[94,3],[19,2],[19,3],[19,4],[19,5],[96,3],[24,2],[63,3],[63,5],[102,2],[102,4],[102,2],[102,4],[20,2],[20,2],[20,2],[20,1],[106,2],[106,2],[21,2],[21,2],[21,2],[108,2],[108,2],[110,2],[110,3],[114,1],[114,1],[114,1],[114,1],[112,1],[112,3],[111,2],[111,2],[111,4],[111,4],[111,4],[111,6],[111,6],[22,5],[22,7],[22,4],[22,6],[119,1],[119,2],[121,3],[121,4],[123,3],[123,5],[18,1],[18,3],[18,3],[18,3],[16,2],[16,2],[16,2],[16,2],[16,2],[16,2],[16,2],[16,2],[16,3],[16,3],[16,3],[16,3],[16,3],[16,3],[16,3],[16,3],[16,5],[16,3]],performAction:function(a,b,c,d,e,f,g){var h=f.length-1;switch(e){case 1:return this.$=new d.Block;case 2:return this.$=f[h];case 3:return this.$=f[h-1];case 4:this.$=d.Block.wrap([f[h]]);break;case 5:this.$=f[h-2].push(f[h]);break;case 6:this.$=f[h-1];break;case 7:this.$=f[h];break;case 8:this.$=f[h];break;case 9:this.$=f[h];break;case 10:this.$=f[h];break;case 11:this.$=new d.Literal(f[h]);break;case 12:this.$=f[h];break;case 13:this.$=f[h];break;case 14:this.$=f[h];break;case 15:this.$=f[h];break;case 16:this.$=f[h];break;case 17:this.$=f[h];break;case 18:this.$=f[h];break;case 19:this.$=f[h];break;case 20:this.$=f[h];break;case 21:this.$=f[h];break;case 22:this.$=f[h];break;case 23:this.$=f[h];break;case 24:this.$=new d.Block;break;case 25:this.$=f[h-1];break;case 26:this.$=new d.Literal(f[h]);break;case 27:this.$=new d.Literal(f[h]);break;case 28:this.$=new d.Literal(f[h]);break;case 29:this.$=f[h];break;case 30:this.$=new d.Literal(f[h]);break;case 31:this.$=new d.Literal(f[h]);break;case 32:this.$=new d.Literal(f[h]);break;case 33:this.$=new d.Undefined;break;case 34:this.$=new d.Null;break;case 35:this.$=new d.Bool(f[h]);break;case 36:this.$=new d.Assign(f[h-2],f[h]);break;case 37:this.$=new d.Assign(f[h-3],f[h]);break;case 38:this.$=new d.Assign(f[h-4],f[h-1]);break;case 39:this.$=new d.Value(f[h]);break;case 40:this.$=new d.Assign(new d.Value(f[h-2]),f[h],"object");break;case 41:this.$=new d.Assign(new d.Value(f[h-4]),f[h-1],"object");break;case 42:this.$=f[h];break;case 43:this.$=f[h];break;case 44:this.$=f[h];break;case 45:this.$=f[h];break;case 46:this.$=new d.Return(f[h]);break;case 47:this.$=new d.Return;break;case 48:this.$=new d.Comment(f[h]);break;case 49:this.$=new d.Code(f[h-3],f[h],f[h-1]);break;case 50:this.$=new d.Code([],f[h],f[h-1]);break;case 51:this.$="func";break;case 52:this.$="boundfunc";break;case 53:this.$=f[h];break;case 54:this.$=f[h];break;case 55:this.$=[];break;case 56:this.$=[f[h]];break;case 57:this.$=f[h-2].concat(f[h]);break;case 58:this.$=f[h-3].concat(f[h]);break;case 59:this.$=f[h-5].concat(f[h-2]);break;case 60:this.$=new d.Param(f[h]);break;case 61:this.$=new d.Param(f[h-1],null,!0);break;case 62:this.$=new d.Param(f[h-2],f[h]);break;case 63:this.$=f[h];break;case 64:this.$=f[h];break;case 65:this.$=f[h];break;case 66:this.$=f[h];break;case 67:this.$=new d.Splat(f[h-1]);break;case 68:this.$=new d.Value(f[h]);break;case 69:this.$=f[h-1].add(f[h]);break;case 70:this.$=new d.Value(f[h-1],[].concat(f[h]));break;case 71:this.$=f[h];break;case 72:this.$=f[h];break;case 73:this.$=new d.Value(f[h]);break;case 74:this.$=new d.Value(f[h]);break;case 75:this.$=f[h];break;case 76:this.$=new d.Value(f[h]);break;case 77:this.$=new d.Value(f[h]);break;case 78:this.$=new d.Value(f[h]);break;case 79:this.$=f[h];break;case 80:this.$=new d.Access(f[h]);break;case 81:this.$=new d.Access(f[h],"soak");break;case 82:this.$=[new d.Access(new d.Literal("prototype")),new d.Access(f[h])];break;case 83:this.$=new d.Access(new d.Literal("prototype"));break;case 84:this.$=f[h];break;case 85:this.$=f[h-1];break;case 86:this.$=d.extend(f[h],{soak:!0});break;case 87:this.$=new d.Index(f[h]);break;case 88:this.$=new d.Slice(f[h]);break;case 89:this.$=new d.Obj(f[h-2],f[h-3].generated);break;case 90:this.$=[];break;case 91:this.$=[f[h]];break;case 92:this.$=f[h-2].concat(f[h]);break;case 93:this.$=f[h-3].concat(f[h]);break;case 94:this.$=f[h-5].concat(f[h-2]);break;case 95:this.$=new d.Class;break;case 96:this.$=new d.Class(null,null,f[h]);break;case 97:this.$=new d.Class(null,f[h]);break;case 98:this.$=new d.Class(null,f[h-1],f[h]);break;case 99:this.$=new d.Class(f[h]);break;case 100:this.$=new d.Class(f[h-1],null,f[h]);break;case 101:this.$=new d.Class(f[h-2],f[h]);break;case 102:this.$=new d.Class(f[h-3],f[h-1],f[h]);break;case 103:this.$=new d.Call(f[h-2],f[h],f[h-1]);break;case 104:this.$=new d.Call(f[h-2],f[h],f[h-1]);break;case 105:this.$=new d.Call("super",[new d.Splat(new d.Literal("arguments"))]);break;case 106:this.$=new d.Call("super",f[h]);break;case 107:this.$=!1;break;case 108:this.$=!0;break;case 109:this.$=[];break;case 110:this.$=f[h-2];break;case 111:this.$=new d.Value(new d.Literal("this"));break;case 112:this.$=new d.Value(new d.Literal("this"));break;case 113:this.$=new d.Value(new d.Literal("this"),[new d.Access(f[h])],"this");break;case 114:this.$=new d.Arr([]);break;case 115:this.$=new d.Arr(f[h-2]);break;case 116:this.$="inclusive";break;case 117:this.$="exclusive";break;case 118:this.$=new d.Range(f[h-3],f[h-1],f[h-2]);break;case 119:this.$=new d.Range(f[h-2],f[h],f[h-1]);break;case 120:this.$=new d.Range(f[h-1],null,f[h]);break;case 121:this.$=new d.Range(null,f[h],f[h-1]);break;case 122:this.$=new d.Range(null,null,f[h]);break;case 123:this.$=[f[h]];break;case 124:this.$=f[h-2].concat(f[h]);break;case 125:this.$=f[h-3].concat(f[h]);break;case 126:this.$=f[h-2];break;case 127:this.$=f[h-5].concat(f[h-2]);break;case 128:this.$=f[h];break;case 129:this.$=f[h];break;case 130:this.$=f[h];break;case 131:this.$=[].concat(f[h-2],f[h]);break;case 132:this.$=new d.Try(f[h]);break;case 133:this.$=new d.Try(f[h-1],f[h][0],f[h][1]);break;case 134:this.$=new d.Try(f[h-2],null,null,f[h]);break;case 135:this.$=new d.Try(f[h-3],f[h-2][0],f[h-2][1],f[h]);break;case 136:this.$=[f[h-1],f[h]];break;case 137:this.$=new d.Throw(f[h]);break;case 138:this.$=new d.Parens(f[h-1]);break;case 139:this.$=new d.Parens(f[h-2]);break;case 140:this.$=new d.While(f[h]);break;case 141:this.$=new d.While(f[h-2],{guard:f[h]});break;case 142:this.$=new d.While(f[h],{invert:!0});break;case 143:this.$=new d.While(f[h-2],{invert:!0,guard:f[h]});break;case 144:this.$=f[h-1].addBody(f[h]);break;case 145:this.$=f[h].addBody(d.Block.wrap([f[h-1]]));break;case 146:this.$=f[h].addBody(d.Block.wrap([f[h-1]]));break;case 147:this.$=f[h];break;case 148:this.$=(new d.While(new d.Literal("true"))).addBody(f[h]);break;case 149:this.$=(new d.While(new d.Literal("true"))).addBody(d.Block.wrap([f[h]]));break;case 150:this.$=new d.For(f[h-1],f[h]);break;case 151:this.$=new d.For(f[h-1],f[h]);break;case 152:this.$=new d.For(f[h],f[h-1]);break;case 153:this.$={source:new d.Value(f[h])};break;case 154:this.$=function(){f[h].own=f[h-1].own,f[h].name=f[h-1][0],f[h].index=f[h-1][1];return f[h]}();break;case 155:this.$=f[h];break;case 156:this.$=function(){f[h].own=!0;return f[h]}();break;case 157:this.$=f[h];break;case 158:this.$=f[h];break;case 159:this.$=new d.Value(f[h]);break;case 160:this.$=new d.Value(f[h]);break;case 161:this.$=[f[h]];break;case 162:this.$=[f[h-2],f[h]];break;case 163:this.$={source:f[h]};break;case 164:this.$={source:f[h],object:!0};break;case 165:this.$={source:f[h-2],guard:f[h]};break;case 166:this.$={source:f[h-2],guard:f[h],object:!0};break;case 167:this.$={source:f[h-2],step:f[h]};break;case 168:this.$={source:f[h-4],guard:f[h-2],step:f[h]};break;case 169:this.$={source:f[h-4],step:f[h-2],guard:f[h]};break;case 170:this.$=new d.Switch(f[h-3],f[h-1]);break;case 171:this.$=new d.Switch(f[h-5],f[h-3],f[h-1]);break;case 172:this.$=new d.Switch(null,f[h-1]);break;case 173:this.$=new d.Switch(null,f[h-3],f[h-1]);break;case 174:this.$=f[h];break;case 175:this.$=f[h-1].concat(f[h]);break;case 176:this.$=[[f[h-1],f[h]]];break;case 177:this.$=[[f[h-2],f[h-1]]];break;case 178:this.$=new d.If(f[h-1],f[h],{type:f[h-2]});break;case 179:this.$=f[h-4].addElse(new d.If(f[h-1],f[h],{type:f[h-2]}));break;case 180:this.$=f[h];break;case 181:this.$=f[h-2].addElse(f[h]);break;case 182:this.$=new d.If(f[h],d.Block.wrap([f[h-2]]),{type:f[h-1],statement:!0});break;case 183:this.$=new d.If(f[h],d.Block.wrap([f[h-2]]),{type:f[h-1],statement:!0});break;case 184:this.$=new d.Op(f[h-1],f[h]);break;case 185:this.$=new d.Op("-",f[h]);break;case 186:this.$=new d.Op("+",f[h]);break;case 187:this.$=new d.Op("--",f[h]);break;case 188:this.$=new d.Op("++",f[h]);break;case 189:this.$=new d.Op("--",f[h-1],null,!0);break;case 190:this.$=new d.Op("++",f[h-1],null,!0);break;case 191:this.$=new d.Existence(f[h-1]);break;case 192:this.$=new d.Op("+",f[h-2],f[h]);break;case 193:this.$=new d.Op("-",f[h-2],f[h]);break;case 194:this.$=new d.Op(f[h-1],f[h-2],f[h]);break;case 195:this.$=new d.Op(f[h-1],f[h-2],f[h]);break;case 196:this.$=new d.Op(f[h-1],f[h-2],f[h]);break;case 197:this.$=new d.Op(f[h-1],f[h-2],f[h]);break;case 198:this.$=function(){return f[h-1].charAt(0)==="!"?(new d.Op(f[h-1].slice(1),f[h-2],f[h])).invert():new d.Op(f[h-1],f[h-2],f[h])}();break;case 199:this.$=new d.Assign(f[h-2],f[h],f[h-1]);break;case 200:this.$=new d.Assign(f[h-4],f[h-1],f[h-3]);break;case 201:this.$=new d.Extends(f[h-2],f[h])}},table:[{1:[2,1],3:1,4:2,5:3,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,5],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[3]},{1:[2,2],6:[1,74]},{6:[1,75]},{1:[2,4],6:[2,4],26:[2,4],101:[2,4]},{4:77,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,26:[1,76],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,7],6:[2,7],26:[2,7],101:[2,7],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,8],6:[2,8],26:[2,8],101:[2,8],102:90,103:[1,65],105:[1,66],108:91,109:[1,68],110:69,125:[1,89]},{1:[2,12],6:[2,12],25:[2,12],26:[2,12],49:[2,12],54:[2,12],57:[2,12],62:93,66:[1,95],67:[1,96],68:[1,97],69:98,70:[1,99],72:[2,12],73:[1,100],77:[2,12],80:92,83:[1,94],84:[2,107],85:[2,12],90:[2,12],92:[2,12],101:[2,12],103:[2,12],104:[2,12],105:[2,12],109:[2,12],117:[2,12],125:[2,12],127:[2,12],128:[2,12],131:[2,12],132:[2,12],133:[2,12],134:[2,12],135:[2,12],136:[2,12]},{1:[2,13],6:[2,13],25:[2,13],26:[2,13],49:[2,13],54:[2,13],57:[2,13],62:102,66:[1,95],67:[1,96],68:[1,97],69:98,70:[1,99],72:[2,13],73:[1,100],77:[2,13],80:101,83:[1,94],84:[2,107],85:[2,13],90:[2,13],92:[2,13],101:[2,13],103:[2,13],104:[2,13],105:[2,13],109:[2,13],117:[2,13],125:[2,13],127:[2,13],128:[2,13],131:[2,13],132:[2,13],133:[2,13],134:[2,13],135:[2,13],136:[2,13]},{1:[2,14],6:[2,14],25:[2,14],26:[2,14],49:[2,14],54:[2,14],57:[2,14],72:[2,14],77:[2,14],85:[2,14],90:[2,14],92:[2,14],101:[2,14],103:[2,14],104:[2,14],105:[2,14],109:[2,14],117:[2,14],125:[2,14],127:[2,14],128:[2,14],131:[2,14],132:[2,14],133:[2,14],134:[2,14],135:[2,14],136:[2,14]},{1:[2,15],6:[2,15],25:[2,15],26:[2,15],49:[2,15],54:[2,15],57:[2,15],72:[2,15],77:[2,15],85:[2,15],90:[2,15],92:[2,15],101:[2,15],103:[2,15],104:[2,15],105:[2,15],109:[2,15],117:[2,15],125:[2,15],127:[2,15],128:[2,15],131:[2,15],132:[2,15],133:[2,15],134:[2,15],135:[2,15],136:[2,15]},{1:[2,16],6:[2,16],25:[2,16],26:[2,16],49:[2,16],54:[2,16],57:[2,16],72:[2,16],77:[2,16],85:[2,16],90:[2,16],92:[2,16],101:[2,16],103:[2,16],104:[2,16],105:[2,16],109:[2,16],117:[2,16],125:[2,16],127:[2,16],128:[2,16],131:[2,16],132:[2,16],133:[2,16],134:[2,16],135:[2,16],136:[2,16]},{1:[2,17],6:[2,17],25:[2,17],26:[2,17],49:[2,17],54:[2,17],57:[2,17],72:[2,17],77:[2,17],85:[2,17],90:[2,17],92:[2,17],101:[2,17],103:[2,17],104:[2,17],105:[2,17],109:[2,17],117:[2,17],125:[2,17],127:[2,17],128:[2,17],131:[2,17],132:[2,17],133:[2,17],134:[2,17],135:[2,17],136:[2,17]},{1:[2,18],6:[2,18],25:[2,18],26:[2,18],49:[2,18],54:[2,18],57:[2,18],72:[2,18],77:[2,18],85:[2,18],90:[2,18],92:[2,18],101:[2,18],103:[2,18],104:[2,18],105:[2,18],109:[2,18],117:[2,18],125:[2,18],127:[2,18],128:[2,18],131:[2,18],132:[2,18],133:[2,18],134:[2,18],135:[2,18],136:[2,18]},{1:[2,19],6:[2,19],25:[2,19],26:[2,19],49:[2,19],54:[2,19],57:[2,19],72:[2,19],77:[2,19],85:[2,19],90:[2,19],92:[2,19],101:[2,19],103:[2,19],104:[2,19],105:[2,19],109:[2,19],117:[2,19],125:[2,19],127:[2,19],128:[2,19],131:[2,19],132:[2,19],133:[2,19],134:[2,19],135:[2,19],136:[2,19]},{1:[2,20],6:[2,20],25:[2,20],26:[2,20],49:[2,20],54:[2,20],57:[2,20],72:[2,20],77:[2,20],85:[2,20],90:[2,20],92:[2,20],101:[2,20],103:[2,20],104:[2,20],105:[2,20],109:[2,20],117:[2,20],125:[2,20],127:[2,20],128:[2,20],131:[2,20],132:[2,20],133:[2,20],134:[2,20],135:[2,20],136:[2,20]},{1:[2,21],6:[2,21],25:[2,21],26:[2,21],49:[2,21],54:[2,21],57:[2,21],72:[2,21],77:[2,21],85:[2,21],90:[2,21],92:[2,21],101:[2,21],103:[2,21],104:[2,21],105:[2,21],109:[2,21],117:[2,21],125:[2,21],127:[2,21],128:[2,21],131:[2,21],132:[2,21],133:[2,21],134:[2,21],135:[2,21],136:[2,21]},{1:[2,22],6:[2,22],25:[2,22],26:[2,22],49:[2,22],54:[2,22],57:[2,22],72:[2,22],77:[2,22],85:[2,22],90:[2,22],92:[2,22],101:[2,22],103:[2,22],104:[2,22],105:[2,22],109:[2,22],117:[2,22],125:[2,22],127:[2,22],128:[2,22],131:[2,22],132:[2,22],133:[2,22],134:[2,22],135:[2,22],136:[2,22]},{1:[2,23],6:[2,23],25:[2,23],26:[2,23],49:[2,23],54:[2,23],57:[2,23],72:[2,23],77:[2,23],85:[2,23],90:[2,23],92:[2,23],101:[2,23],103:[2,23],104:[2,23],105:[2,23],109:[2,23],117:[2,23],125:[2,23],127:[2,23],128:[2,23],131:[2,23],132:[2,23],133:[2,23],134:[2,23],135:[2,23],136:[2,23]},{1:[2,9],6:[2,9],26:[2,9],101:[2,9],103:[2,9],105:[2,9],109:[2,9],125:[2,9]},{1:[2,10],6:[2,10],26:[2,10],101:[2,10],103:[2,10],105:[2,10],109:[2,10],125:[2,10]},{1:[2,11],6:[2,11],26:[2,11],101:[2,11],103:[2,11],105:[2,11],109:[2,11],125:[2,11]},{1:[2,75],6:[2,75],25:[2,75],26:[2,75],40:[1,103],49:[2,75],54:[2,75],57:[2,75],66:[2,75],67:[2,75],68:[2,75],70:[2,75],72:[2,75],73:[2,75],77:[2,75],83:[2,75],84:[2,75],85:[2,75],90:[2,75],92:[2,75],101:[2,75],103:[2,75],104:[2,75],105:[2,75],109:[2,75],117:[2,75],125:[2,75],127:[2,75],128:[2,75],131:[2,75],132:[2,75],133:[2,75],134:[2,75],135:[2,75],136:[2,75]},{1:[2,76],6:[2,76],25:[2,76],26:[2,76],49:[2,76],54:[2,76],57:[2,76],66:[2,76],67:[2,76],68:[2,76],70:[2,76],72:[2,76],73:[2,76],77:[2,76],83:[2,76],84:[2,76],85:[2,76],90:[2,76],92:[2,76],101:[2,76],103:[2,76],104:[2,76],105:[2,76],109:[2,76],117:[2,76],125:[2,76],127:[2,76],128:[2,76],131:[2,76],132:[2,76],133:[2,76],134:[2,76],135:[2,76],136:[2,76]},{1:[2,77],6:[2,77],25:[2,77],26:[2,77],49:[2,77],54:[2,77],57:[2,77],66:[2,77],67:[2,77],68:[2,77],70:[2,77],72:[2,77],73:[2,77],77:[2,77],83:[2,77],84:[2,77],85:[2,77],90:[2,77],92:[2,77],101:[2,77],103:[2,77],104:[2,77],105:[2,77],109:[2,77],117:[2,77],125:[2,77],127:[2,77],128:[2,77],131:[2,77],132:[2,77],133:[2,77],134:[2,77],135:[2,77],136:[2,77]},{1:[2,78],6:[2,78],25:[2,78],26:[2,78],49:[2,78],54:[2,78],57:[2,78],66:[2,78],67:[2,78],68:[2,78],70:[2,78],72:[2,78],73:[2,78],77:[2,78],83:[2,78],84:[2,78],85:[2,78],90:[2,78],92:[2,78],101:[2,78],103:[2,78],104:[2,78],105:[2,78],109:[2,78],117:[2,78],125:[2,78],127:[2,78],128:[2,78],131:[2,78],132:[2,78],133:[2,78],134:[2,78],135:[2,78],136:[2,78]},{1:[2,79],6:[2,79],25:[2,79],26:[2,79],49:[2,79],54:[2,79],57:[2,79],66:[2,79],67:[2,79],68:[2,79],70:[2,79],72:[2,79],73:[2,79],77:[2,79],83:[2,79],84:[2,79],85:[2,79],90:[2,79],92:[2,79],101:[2,79],103:[2,79],104:[2,79],105:[2,79],109:[2,79],117:[2,79],125:[2,79],127:[2,79],128:[2,79],131:[2,79],132:[2,79],133:[2,79],134:[2,79],135:[2,79],136:[2,79]},{1:[2,105],6:[2,105],25:[2,105],26:[2,105],49:[2,105],54:[2,105],57:[2,105],66:[2,105],67:[2,105],68:[2,105],70:[2,105],72:[2,105],73:[2,105],77:[2,105],81:104,83:[2,105],84:[1,105],85:[2,105],90:[2,105],92:[2,105],101:[2,105],103:[2,105],104:[2,105],105:[2,105],109:[2,105],117:[2,105],125:[2,105],127:[2,105],128:[2,105],131:[2,105],132:[2,105],133:[2,105],134:[2,105],135:[2,105],136:[2,105]},{6:[2,55],25:[2,55],27:109,28:[1,73],44:110,48:106,49:[2,55],54:[2,55],55:107,56:108,58:111,59:112,75:[1,70],88:[1,113],89:[1,114]},{5:115,25:[1,5]},{8:116,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:118,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:119,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{13:121,14:122,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:123,44:63,58:47,59:48,61:120,63:25,64:26,65:27,75:[1,70],82:[1,28],87:[1,58],88:[1,59],89:[1,57],100:[1,56]},{13:121,14:122,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:123,44:63,58:47,59:48,61:124,63:25,64:26,65:27,75:[1,70],82:[1,28],87:[1,58],88:[1,59],89:[1,57],100:[1,56]},{1:[2,72],6:[2,72],25:[2,72],26:[2,72],40:[2,72],49:[2,72],54:[2,72],57:[2,72],66:[2,72],67:[2,72],68:[2,72],70:[2,72],72:[2,72],73:[2,72],77:[2,72],79:[1,128],83:[2,72],84:[2,72],85:[2,72],90:[2,72],92:[2,72],101:[2,72],103:[2,72],104:[2,72],105:[2,72],109:[2,72],117:[2,72],125:[2,72],127:[2,72],128:[2,72],129:[1,125],130:[1,126],131:[2,72],132:[2,72],133:[2,72],134:[2,72],135:[2,72],136:[2,72],137:[1,127]},{1:[2,180],6:[2,180],25:[2,180],26:[2,180],49:[2,180],54:[2,180],57:[2,180],72:[2,180],77:[2,180],85:[2,180],90:[2,180],92:[2,180],101:[2,180],103:[2,180],104:[2,180],105:[2,180],109:[2,180],117:[2,180],120:[1,129],125:[2,180],127:[2,180],128:[2,180],131:[2,180],132:[2,180],133:[2,180],134:[2,180],135:[2,180],136:[2,180]},{5:130,25:[1,5]},{5:131,25:[1,5]},{1:[2,147],6:[2,147],25:[2,147],26:[2,147],49:[2,147],54:[2,147],57:[2,147],72:[2,147],77:[2,147],85:[2,147],90:[2,147],92:[2,147],101:[2,147],103:[2,147],104:[2,147],105:[2,147],109:[2,147],117:[2,147],125:[2,147],127:[2,147],128:[2,147],131:[2,147],132:[2,147],133:[2,147],134:[2,147],135:[2,147],136:[2,147]},{5:132,25:[1,5]},{8:133,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,134],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,95],5:135,6:[2,95],13:121,14:122,25:[1,5],26:[2,95],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:123,44:63,49:[2,95],54:[2,95],57:[2,95],58:47,59:48,61:137,63:25,64:26,65:27,72:[2,95],75:[1,70],77:[2,95],79:[1,136],82:[1,28],85:[2,95],87:[1,58],88:[1,59],89:[1,57],90:[2,95],92:[2,95],100:[1,56],101:[2,95],103:[2,95],104:[2,95],105:[2,95],109:[2,95],117:[2,95],125:[2,95],127:[2,95],128:[2,95],131:[2,95],132:[2,95],133:[2,95],134:[2,95],135:[2,95],136:[2,95]},{8:138,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,47],6:[2,47],8:139,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,26:[2,47],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],101:[2,47],102:39,103:[2,47],105:[2,47],106:40,107:[1,67],108:41,109:[2,47],110:69,118:[1,42],123:37,124:[1,64],125:[2,47],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,48],6:[2,48],25:[2,48],26:[2,48],54:[2,48],77:[2,48],101:[2,48],103:[2,48],105:[2,48],109:[2,48],125:[2,48]},{1:[2,73],6:[2,73],25:[2,73],26:[2,73],40:[2,73],49:[2,73],54:[2,73],57:[2,73],66:[2,73],67:[2,73],68:[2,73],70:[2,73],72:[2,73],73:[2,73],77:[2,73],83:[2,73],84:[2,73],85:[2,73],90:[2,73],92:[2,73],101:[2,73],103:[2,73],104:[2,73],105:[2,73],109:[2,73],117:[2,73],125:[2,73],127:[2,73],128:[2,73],131:[2,73],132:[2,73],133:[2,73],134:[2,73],135:[2,73],136:[2,73]},{1:[2,74],6:[2,74],25:[2,74],26:[2,74],40:[2,74],49:[2,74],54:[2,74],57:[2,74],66:[2,74],67:[2,74],68:[2,74],70:[2,74],72:[2,74],73:[2,74],77:[2,74],83:[2,74],84:[2,74],85:[2,74],90:[2,74],92:[2,74],101:[2,74],103:[2,74],104:[2,74],105:[2,74],109:[2,74],117:[2,74],125:[2,74],127:[2,74],128:[2,74],131:[2,74],132:[2,74],133:[2,74],134:[2,74],135:[2,74],136:[2,74]},{1:[2,29],6:[2,29],25:[2,29],26:[2,29],49:[2,29],54:[2,29],57:[2,29],66:[2,29],67:[2,29],68:[2,29],70:[2,29],72:[2,29],73:[2,29],77:[2,29],83:[2,29],84:[2,29],85:[2,29],90:[2,29],92:[2,29],101:[2,29],103:[2,29],104:[2,29],105:[2,29],109:[2,29],117:[2,29],125:[2,29],127:[2,29],128:[2,29],131:[2,29],132:[2,29],133:[2,29],134:[2,29],135:[2,29],136:[2,29]},{1:[2,30],6:[2,30],25:[2,30],26:[2,30],49:[2,30],54:[2,30],57:[2,30],66:[2,30],67:[2,30],68:[2,30],70:[2,30],72:[2,30],73:[2,30],77:[2,30],83:[2,30],84:[2,30],85:[2,30],90:[2,30],92:[2,30],101:[2,30],103:[2,30],104:[2,30],105:[2,30],109:[2,30],117:[2,30],125:[2,30],127:[2,30],128:[2,30],131:[2,30],132:[2,30],133:[2,30],134:[2,30],135:[2,30],136:[2,30]},{1:[2,31],6:[2,31],25:[2,31],26:[2,31],49:[2,31],54:[2,31],57:[2,31],66:[2,31],67:[2,31],68:[2,31],70:[2,31],72:[2,31],73:[2,31],77:[2,31],83:[2,31],84:[2,31],85:[2,31],90:[2,31],92:[2,31],101:[2,31],103:[2,31],104:[2,31],105:[2,31],109:[2,31],117:[2,31],125:[2,31],127:[2,31],128:[2,31],131:[2,31],132:[2,31],133:[2,31],134:[2,31],135:[2,31],136:[2,31]},{1:[2,32],6:[2,32],25:[2,32],26:[2,32],49:[2,32],54:[2,32],57:[2,32],66:[2,32],67:[2,32],68:[2,32],70:[2,32],72:[2,32],73:[2,32],77:[2,32],83:[2,32],84:[2,32],85:[2,32],90:[2,32],92:[2,32],101:[2,32],103:[2,32],104:[2,32],105:[2,32],109:[2,32],117:[2,32],125:[2,32],127:[2,32],128:[2,32],131:[2,32],132:[2,32],133:[2,32],134:[2,32],135:[2,32],136:[2,32]},{1:[2,33],6:[2,33],25:[2,33],26:[2,33],49:[2,33],54:[2,33],57:[2,33],66:[2,33],67:[2,33],68:[2,33],70:[2,33],72:[2,33],73:[2,33],77:[2,33],83:[2,33],84:[2,33],85:[2,33],90:[2,33],92:[2,33],101:[2,33],103:[2,33],104:[2,33],105:[2,33],109:[2,33],117:[2,33],125:[2,33],127:[2,33],128:[2,33],131:[2,33],132:[2,33],133:[2,33],134:[2,33],135:[2,33],136:[2,33]},{1:[2,34],6:[2,34],25:[2,34],26:[2,34],49:[2,34],54:[2,34],57:[2,34],66:[2,34],67:[2,34],68:[2,34],70:[2,34],72:[2,34],73:[2,34],77:[2,34],83:[2,34],84:[2,34],85:[2,34],90:[2,34],92:[2,34],101:[2,34],103:[2,34],104:[2,34],105:[2,34],109:[2,34],117:[2,34],125:[2,34],127:[2,34],128:[2,34],131:[2,34],132:[2,34],133:[2,34],134:[2,34],135:[2,34],136:[2,34]},{1:[2,35],6:[2,35],25:[2,35],26:[2,35],49:[2,35],54:[2,35],57:[2,35],66:[2,35],67:[2,35],68:[2,35],70:[2,35],72:[2,35],73:[2,35],77:[2,35],83:[2,35],84:[2,35],85:[2,35],90:[2,35],92:[2,35],101:[2,35],103:[2,35],104:[2,35],105:[2,35],109:[2,35],117:[2,35],125:[2,35],127:[2,35],128:[2,35],131:[2,35],132:[2,35],133:[2,35],134:[2,35],135:[2,35],136:[2,35]},{4:140,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,141],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:142,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,146],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:147,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],86:144,87:[1,58],88:[1,59],89:[1,57],90:[1,143],93:145,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,111],6:[2,111],25:[2,111],26:[2,111],49:[2,111],54:[2,111],57:[2,111],66:[2,111],67:[2,111],68:[2,111],70:[2,111],72:[2,111],73:[2,111],77:[2,111],83:[2,111],84:[2,111],85:[2,111],90:[2,111],92:[2,111],101:[2,111],103:[2,111],104:[2,111],105:[2,111],109:[2,111],117:[2,111],125:[2,111],127:[2,111],128:[2,111],131:[2,111],132:[2,111],133:[2,111],134:[2,111],135:[2,111],136:[2,111]},{1:[2,112],6:[2,112],25:[2,112],26:[2,112],27:148,28:[1,73],49:[2,112],54:[2,112],57:[2,112],66:[2,112],67:[2,112],68:[2,112],70:[2,112],72:[2,112],73:[2,112],77:[2,112],83:[2,112],84:[2,112],85:[2,112],90:[2,112],92:[2,112],101:[2,112],103:[2,112],104:[2,112],105:[2,112],109:[2,112],117:[2,112],125:[2,112],127:[2,112],128:[2,112],131:[2,112],132:[2,112],133:[2,112],134:[2,112],135:[2,112],136:[2,112]},{25:[2,51]},{25:[2,52]},{1:[2,68],6:[2,68],25:[2,68],26:[2,68],40:[2,68],49:[2,68],54:[2,68],57:[2,68],66:[2,68],67:[2,68],68:[2,68],70:[2,68],72:[2,68],73:[2,68],77:[2,68],79:[2,68],83:[2,68],84:[2,68],85:[2,68],90:[2,68],92:[2,68],101:[2,68],103:[2,68],104:[2,68],105:[2,68],109:[2,68],117:[2,68],125:[2,68],127:[2,68],128:[2,68],129:[2,68],130:[2,68],131:[2,68],132:[2,68],133:[2,68],134:[2,68],135:[2,68],136:[2,68],137:[2,68]},{1:[2,71],6:[2,71],25:[2,71],26:[2,71],40:[2,71],49:[2,71],54:[2,71],57:[2,71],66:[2,71],67:[2,71],68:[2,71],70:[2,71],72:[2,71],73:[2,71],77:[2,71],79:[2,71],83:[2,71],84:[2,71],85:[2,71],90:[2,71],92:[2,71],101:[2,71],103:[2,71],104:[2,71],105:[2,71],109:[2,71],117:[2,71],125:[2,71],127:[2,71],128:[2,71],129:[2,71],130:[2,71],131:[2,71],132:[2,71],133:[2,71],134:[2,71],135:[2,71],136:[2,71],137:[2,71]},{8:149,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:150,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:151,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{5:152,8:153,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,5],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{27:158,28:[1,73],44:159,58:160,59:161,64:154,75:[1,70],88:[1,113],89:[1,57],112:155,113:[1,156],114:157},{111:162,115:[1,163],116:[1,164]},{6:[2,90],11:168,25:[2,90],27:169,28:[1,73],29:170,30:[1,71],31:[1,72],41:166,42:167,44:171,46:[1,46],54:[2,90],76:165,77:[2,90],88:[1,113]},{1:[2,27],6:[2,27],25:[2,27],26:[2,27],43:[2,27],49:[2,27],54:[2,27],57:[2,27],66:[2,27],67:[2,27],68:[2,27],70:[2,27],72:[2,27],73:[2,27],77:[2,27],83:[2,27],84:[2,27],85:[2,27],90:[2,27],92:[2,27],101:[2,27],103:[2,27],104:[2,27],105:[2,27],109:[2,27],117:[2,27],125:[2,27],127:[2,27],128:[2,27],131:[2,27],132:[2,27],133:[2,27],134:[2,27],135:[2,27],136:[2,27]},{1:[2,28],6:[2,28],25:[2,28],26:[2,28],43:[2,28],49:[2,28],54:[2,28],57:[2,28],66:[2,28],67:[2,28],68:[2,28],70:[2,28],72:[2,28],73:[2,28],77:[2,28],83:[2,28],84:[2,28],85:[2,28],90:[2,28],92:[2,28],101:[2,28],103:[2,28],104:[2,28],105:[2,28],109:[2,28],117:[2,28],125:[2,28],127:[2,28],128:[2,28],131:[2,28],132:[2,28],133:[2,28],134:[2,28],135:[2,28],136:[2,28]},{1:[2,26],6:[2,26],25:[2,26],26:[2,26],40:[2,26],43:[2,26],49:[2,26],54:[2,26],57:[2,26],66:[2,26],67:[2,26],68:[2,26],70:[2,26],72:[2,26],73:[2,26],77:[2,26],79:[2,26],83:[2,26],84:[2,26],85:[2,26],90:[2,26],92:[2,26],101:[2,26],103:[2,26],104:[2,26],105:[2,26],109:[2,26],115:[2,26],116:[2,26],117:[2,26],125:[2,26],127:[2,26],128:[2,26],129:[2,26],130:[2,26],131:[2,26],132:[2,26],133:[2,26],134:[2,26],135:[2,26],136:[2,26],137:[2,26]},{1:[2,6],6:[2,6],7:172,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,26:[2,6],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],101:[2,6],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,3]},{1:[2,24],6:[2,24],25:[2,24],26:[2,24],49:[2,24],54:[2,24],57:[2,24],72:[2,24],77:[2,24],85:[2,24],90:[2,24],92:[2,24],97:[2,24],98:[2,24],101:[2,24],103:[2,24],104:[2,24],105:[2,24],109:[2,24],117:[2,24],120:[2,24],122:[2,24],125:[2,24],127:[2,24],128:[2,24],131:[2,24],132:[2,24],133:[2,24],134:[2,24],135:[2,24],136:[2,24]},{6:[1,74],26:[1,173]},{1:[2,191],6:[2,191],25:[2,191],26:[2,191],49:[2,191],54:[2,191],57:[2,191],72:[2,191],77:[2,191],85:[2,191],90:[2,191],92:[2,191],101:[2,191],103:[2,191],104:[2,191],105:[2,191],109:[2,191],117:[2,191],125:[2,191],127:[2,191],128:[2,191],131:[2,191],132:[2,191],133:[2,191],134:[2,191],135:[2,191],136:[2,191]},{8:174,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:175,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:176,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:177,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:178,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:179,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:180,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:181,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,146],6:[2,146],25:[2,146],26:[2,146],49:[2,146],54:[2,146],57:[2,146],72:[2,146],77:[2,146],85:[2,146],90:[2,146],92:[2,146],101:[2,146],103:[2,146],104:[2,146],105:[2,146],109:[2,146],117:[2,146],125:[2,146],127:[2,146],128:[2,146],131:[2,146],132:[2,146],133:[2,146],134:[2,146],135:[2,146],136:[2,146]},{1:[2,151],6:[2,151],25:[2,151],26:[2,151],49:[2,151],54:[2,151],57:[2,151],72:[2,151],77:[2,151],85:[2,151],90:[2,151],92:[2,151],101:[2,151],103:[2,151],104:[2,151],105:[2,151],109:[2,151],117:[2,151],125:[2,151],127:[2,151],128:[2,151],131:[2,151],132:[2,151],133:[2,151],134:[2,151],135:[2,151],136:[2,151]},{8:182,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,145],6:[2,145],25:[2,145],26:[2,145],49:[2,145],54:[2,145],57:[2,145],72:[2,145],77:[2,145],85:[2,145],90:[2,145],92:[2,145],101:[2,145],103:[2,145],104:[2,145],105:[2,145],109:[2,145],117:[2,145],125:[2,145],127:[2,145],128:[2,145],131:[2,145],132:[2,145],133:[2,145],134:[2,145],135:[2,145],136:[2,145]},{1:[2,150],6:[2,150],25:[2,150],26:[2,150],49:[2,150],54:[2,150],57:[2,150],72:[2,150],77:[2,150],85:[2,150],90:[2,150],92:[2,150],101:[2,150],103:[2,150],104:[2,150],105:[2,150],109:[2,150],117:[2,150],125:[2,150],127:[2,150],128:[2,150],131:[2,150],132:[2,150],133:[2,150],134:[2,150],135:[2,150],136:[2,150]},{81:183,84:[1,105]},{1:[2,69],6:[2,69],25:[2,69],26:[2,69],40:[2,69],49:[2,69],54:[2,69],57:[2,69],66:[2,69],67:[2,69],68:[2,69],70:[2,69],72:[2,69],73:[2,69],77:[2,69],79:[2,69],83:[2,69],84:[2,69],85:[2,69],90:[2,69],92:[2,69],101:[2,69],103:[2,69],104:[2,69],105:[2,69],109:[2,69],117:[2,69],125:[2,69],127:[2,69],128:[2,69],129:[2,69],130:[2,69],131:[2,69],132:[2,69],133:[2,69],134:[2,69],135:[2,69],136:[2,69],137:[2,69]},{84:[2,108]},{27:184,28:[1,73]},{27:185,28:[1,73]},{1:[2,83],6:[2,83],25:[2,83],26:[2,83],27:186,28:[1,73],40:[2,83],49:[2,83],54:[2,83],57:[2,83],66:[2,83],67:[2,83],68:[2,83],70:[2,83],72:[2,83],73:[2,83],77:[2,83],79:[2,83],83:[2,83],84:[2,83],85:[2,83],90:[2,83],92:[2,83],101:[2,83],103:[2,83],104:[2,83],105:[2,83],109:[2,83],117:[2,83],125:[2,83],127:[2,83],128:[2,83],129:[2,83],130:[2,83],131:[2,83],132:[2,83],133:[2,83],134:[2,83],135:[2,83],136:[2,83],137:[2,83]},{1:[2,84],6:[2,84],25:[2,84],26:[2,84],40:[2,84],49:[2,84],54:[2,84],57:[2,84],66:[2,84],67:[2,84],68:[2,84],70:[2,84],72:[2,84],73:[2,84],77:[2,84],79:[2,84],83:[2,84],84:[2,84],85:[2,84],90:[2,84],92:[2,84],101:[2,84],103:[2,84],104:[2,84],105:[2,84],109:[2,84],117:[2,84],125:[2,84],127:[2,84],128:[2,84],129:[2,84],130:[2,84],131:[2,84],132:[2,84],133:[2,84],134:[2,84],135:[2,84],136:[2,84],137:[2,84]},{8:188,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],57:[1,192],58:47,59:48,61:36,63:25,64:26,65:27,71:187,74:189,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],91:190,92:[1,191],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{69:193,70:[1,99],73:[1,100]},{81:194,84:[1,105]},{1:[2,70],6:[2,70],25:[2,70],26:[2,70],40:[2,70],49:[2,70],54:[2,70],57:[2,70],66:[2,70],67:[2,70],68:[2,70],70:[2,70],72:[2,70],73:[2,70],77:[2,70],79:[2,70],83:[2,70],84:[2,70],85:[2,70],90:[2,70],92:[2,70],101:[2,70],103:[2,70],104:[2,70],105:[2,70],109:[2,70],117:[2,70],125:[2,70],127:[2,70],128:[2,70],129:[2,70],130:[2,70],131:[2,70],132:[2,70],133:[2,70],134:[2,70],135:[2,70],136:[2,70],137:[2,70]},{6:[1,196],8:195,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,197],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,106],6:[2,106],25:[2,106],26:[2,106],49:[2,106],54:[2,106],57:[2,106],66:[2,106],67:[2,106],68:[2,106],70:[2,106],72:[2,106],73:[2,106],77:[2,106],83:[2,106],84:[2,106],85:[2,106],90:[2,106],92:[2,106],101:[2,106],103:[2,106],104:[2,106],105:[2,106],109:[2,106],117:[2,106],125:[2,106],127:[2,106],128:[2,106],131:[2,106],132:[2,106],133:[2,106],134:[2,106],135:[2,106],136:[2,106]},{8:200,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,146],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:147,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],85:[1,198],86:199,87:[1,58],88:[1,59],89:[1,57],93:145,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[2,53],25:[2,53],49:[1,201],53:203,54:[1,202]},{6:[2,56],25:[2,56],26:[2,56],49:[2,56],54:[2,56]},{6:[2,60],25:[2,60],26:[2,60],40:[1,205],49:[2,60],54:[2,60],57:[1,204]},{6:[2,63],25:[2,63],26:[2,63],40:[2,63],49:[2,63],54:[2,63],57:[2,63]},{6:[2,64],25:[2,64],26:[2,64],40:[2,64],49:[2,64],54:[2,64],57:[2,64]},{6:[2,65],25:[2,65],26:[2,65],40:[2,65],49:[2,65],54:[2,65],57:[2,65]},{6:[2,66],25:[2,66],26:[2,66],40:[2,66],49:[2,66],54:[2,66],57:[2,66]},{27:148,28:[1,73]},{8:200,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,146],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:147,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],86:144,87:[1,58],88:[1,59],89:[1,57],90:[1,143],93:145,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,50],6:[2,50],25:[2,50],26:[2,50],49:[2,50],54:[2,50],57:[2,50],72:[2,50],77:[2,50],85:[2,50],90:[2,50],92:[2,50],101:[2,50],103:[2,50],104:[2,50],105:[2,50],109:[2,50],117:[2,50],125:[2,50],127:[2,50],128:[2,50],131:[2,50],132:[2,50],133:[2,50],134:[2,50],135:[2,50],136:[2,50]},{1:[2,184],6:[2,184],25:[2,184],26:[2,184],49:[2,184],54:[2,184],57:[2,184],72:[2,184],77:[2,184],85:[2,184],90:[2,184],92:[2,184],101:[2,184],102:87,103:[2,184],104:[2,184],105:[2,184],108:88,109:[2,184],110:69,117:[2,184],125:[2,184],127:[2,184],128:[2,184],131:[1,78],132:[2,184],133:[2,184],134:[2,184],135:[2,184],136:[2,184]},{102:90,103:[1,65],105:[1,66],108:91,109:[1,68],110:69,125:[1,89]},{1:[2,185],6:[2,185],25:[2,185],26:[2,185],49:[2,185],54:[2,185],57:[2,185],72:[2,185],77:[2,185],85:[2,185],90:[2,185],92:[2,185],101:[2,185],102:87,103:[2,185],104:[2,185],105:[2,185],108:88,109:[2,185],110:69,117:[2,185],125:[2,185],127:[2,185],128:[2,185],131:[1,78],132:[2,185],133:[2,185],134:[2,185],135:[2,185],136:[2,185]},{1:[2,186],6:[2,186],25:[2,186],26:[2,186],49:[2,186],54:[2,186],57:[2,186],72:[2,186],77:[2,186],85:[2,186],90:[2,186],92:[2,186],101:[2,186],102:87,103:[2,186],104:[2,186],105:[2,186],108:88,109:[2,186],110:69,117:[2,186],125:[2,186],127:[2,186],128:[2,186],131:[1,78],132:[2,186],133:[2,186],134:[2,186],135:[2,186],136:[2,186]},{1:[2,187],6:[2,187],25:[2,187],26:[2,187],49:[2,187],54:[2,187],57:[2,187],66:[2,72],67:[2,72],68:[2,72],70:[2,72],72:[2,187],73:[2,72],77:[2,187],83:[2,72],84:[2,72],85:[2,187],90:[2,187],92:[2,187],101:[2,187],103:[2,187],104:[2,187],105:[2,187],109:[2,187],117:[2,187],125:[2,187],127:[2,187],128:[2,187],131:[2,187],132:[2,187],133:[2,187],134:[2,187],135:[2,187],136:[2,187]},{62:93,66:[1,95],67:[1,96],68:[1,97],69:98,70:[1,99],73:[1,100],80:92,83:[1,94],84:[2,107]},{62:102,66:[1,95],67:[1,96],68:[1,97],69:98,70:[1,99],73:[1,100],80:101,83:[1,94],84:[2,107]},{66:[2,75],67:[2,75],68:[2,75],70:[2,75],73:[2,75],83:[2,75],84:[2,75]},{1:[2,188],6:[2,188],25:[2,188],26:[2,188],49:[2,188],54:[2,188],57:[2,188],66:[2,72],67:[2,72],68:[2,72],70:[2,72],72:[2,188],73:[2,72],77:[2,188],83:[2,72],84:[2,72],85:[2,188],90:[2,188],92:[2,188],101:[2,188],103:[2,188],104:[2,188],105:[2,188],109:[2,188],117:[2,188],125:[2,188],127:[2,188],128:[2,188],131:[2,188],132:[2,188],133:[2,188],134:[2,188],135:[2,188],136:[2,188]},{1:[2,189],6:[2,189],25:[2,189],26:[2,189],49:[2,189],54:[2,189],57:[2,189],72:[2,189],77:[2,189],85:[2,189],90:[2,189],92:[2,189],101:[2,189],103:[2,189],104:[2,189],105:[2,189],109:[2,189],117:[2,189],125:[2,189],127:[2,189],128:[2,189],131:[2,189],132:[2,189],133:[2,189],134:[2,189],135:[2,189],136:[2,189]},{1:[2,190],6:[2,190],25:[2,190],26:[2,190],49:[2,190],54:[2,190],57:[2,190],72:[2,190],77:[2,190],85:[2,190],90:[2,190],92:[2,190],101:[2,190],103:[2,190],104:[2,190],105:[2,190],109:[2,190],117:[2,190],125:[2,190],127:[2,190],128:[2,190],131:[2,190],132:[2,190],133:[2,190],134:[2,190],135:[2,190],136:[2,190]},{8:206,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,207],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:208,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{5:209,25:[1,5],124:[1,210]},{1:[2,132],6:[2,132],25:[2,132],26:[2,132],49:[2,132],54:[2,132],57:[2,132],72:[2,132],77:[2,132],85:[2,132],90:[2,132],92:[2,132],96:211,97:[1,212],98:[1,213],101:[2,132],103:[2,132],104:[2,132],105:[2,132],109:[2,132],117:[2,132],125:[2,132],127:[2,132],128:[2,132],131:[2,132],132:[2,132],133:[2,132],134:[2,132],135:[2,132],136:[2,132]},{1:[2,144],6:[2,144],25:[2,144],26:[2,144],49:[2,144],54:[2,144],57:[2,144],72:[2,144],77:[2,144],85:[2,144],90:[2,144],92:[2,144],101:[2,144],103:[2,144],104:[2,144],105:[2,144],109:[2,144],117:[2,144],125:[2,144],127:[2,144],128:[2,144],131:[2,144],132:[2,144],133:[2,144],134:[2,144],135:[2,144],136:[2,144]},{1:[2,152],6:[2,152],25:[2,152],26:[2,152],49:[2,152],54:[2,152],57:[2,152],72:[2,152],77:[2,152],85:[2,152],90:[2,152],92:[2,152],101:[2,152],103:[2,152],104:[2,152],105:[2,152],109:[2,152],117:[2,152],125:[2,152],127:[2,152],128:[2,152],131:[2,152],132:[2,152],133:[2,152],134:[2,152],135:[2,152],136:[2,152]},{25:[1,214],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{119:215,121:216,122:[1,217]},{1:[2,96],6:[2,96],25:[2,96],26:[2,96],49:[2,96],54:[2,96],57:[2,96],72:[2,96],77:[2,96],85:[2,96],90:[2,96],92:[2,96],101:[2,96],103:[2,96],104:[2,96],105:[2,96],109:[2,96],117:[2,96],125:[2,96],127:[2,96],128:[2,96],131:[2,96],132:[2,96],133:[2,96],134:[2,96],135:[2,96],136:[2,96]},{8:218,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,99],5:219,6:[2,99],25:[1,5],26:[2,99],49:[2,99],54:[2,99],57:[2,99],66:[2,72],67:[2,72],68:[2,72],70:[2,72],72:[2,99],73:[2,72],77:[2,99],79:[1,220],83:[2,72],84:[2,72],85:[2,99],90:[2,99],92:[2,99],101:[2,99],103:[2,99],104:[2,99],105:[2,99],109:[2,99],117:[2,99],125:[2,99],127:[2,99],128:[2,99],131:[2,99],132:[2,99],133:[2,99],134:[2,99],135:[2,99],136:[2,99]},{1:[2,137],6:[2,137],25:[2,137],26:[2,137],49:[2,137],54:[2,137],57:[2,137],72:[2,137],77:[2,137],85:[2,137],90:[2,137],92:[2,137],101:[2,137],102:87,103:[2,137],104:[2,137],105:[2,137],108:88,109:[2,137],110:69,117:[2,137],125:[2,137],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,46],6:[2,46],26:[2,46],101:[2,46],102:87,103:[2,46],105:[2,46],108:88,109:[2,46],110:69,125:[2,46],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{6:[1,74],101:[1,221]},{4:222,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[2,128],25:[2,128],54:[2,128],57:[1,224],90:[2,128],91:223,92:[1,191],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,114],6:[2,114],25:[2,114],26:[2,114],40:[2,114],49:[2,114],54:[2,114],57:[2,114],66:[2,114],67:[2,114],68:[2,114],70:[2,114],72:[2,114],73:[2,114],77:[2,114],83:[2,114],84:[2,114],85:[2,114],90:[2,114],92:[2,114],101:[2,114],103:[2,114],104:[2,114],105:[2,114],109:[2,114],115:[2,114],116:[2,114],117:[2,114],125:[2,114],127:[2,114],128:[2,114],131:[2,114],132:[2,114],133:[2,114],134:[2,114],135:[2,114],136:[2,114]},{6:[2,53],25:[2,53],53:225,54:[1,226],90:[2,53]},{6:[2,123],25:[2,123],26:[2,123],54:[2,123],85:[2,123],90:[2,123]},{8:200,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,146],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:147,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],86:227,87:[1,58],88:[1,59],89:[1,57],93:145,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[2,129],25:[2,129],26:[2,129],54:[2,129],85:[2,129],90:[2,129]},{1:[2,113],6:[2,113],25:[2,113],26:[2,113],40:[2,113],43:[2,113],49:[2,113],54:[2,113],57:[2,113],66:[2,113],67:[2,113],68:[2,113],70:[2,113],72:[2,113],73:[2,113],77:[2,113],79:[2,113],83:[2,113],84:[2,113],85:[2,113],90:[2,113],92:[2,113],101:[2,113],103:[2,113],104:[2,113],105:[2,113],109:[2,113],115:[2,113],116:[2,113],117:[2,113],125:[2,113],127:[2,113],128:[2,113],129:[2,113],130:[2,113],131:[2,113],132:[2,113],133:[2,113],134:[2,113],135:[2,113],136:[2,113],137:[2,113]},{5:228,25:[1,5],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,140],6:[2,140],25:[2,140],26:[2,140],49:[2,140],54:[2,140],57:[2,140],72:[2,140],77:[2,140],85:[2,140],90:[2,140],92:[2,140],101:[2,140],102:87,103:[1,65],104:[1,229],105:[1,66],108:88,109:[1,68],110:69,117:[2,140],125:[2,140],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,142],6:[2,142],25:[2,142],26:[2,142],49:[2,142],54:[2,142],57:[2,142],72:[2,142],77:[2,142],85:[2,142],90:[2,142],92:[2,142],101:[2,142],102:87,103:[1,65],104:[1,230],105:[1,66],108:88,109:[1,68],110:69,117:[2,142],125:[2,142],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,148],6:[2,148],25:[2,148],26:[2,148],49:[2,148],54:[2,148],57:[2,148],72:[2,148],77:[2,148],85:[2,148],90:[2,148],92:[2,148],101:[2,148],103:[2,148],104:[2,148],105:[2,148],109:[2,148],117:[2,148],125:[2,148],127:[2,148],128:[2,148],131:[2,148],132:[2,148],133:[2,148],134:[2,148],135:[2,148],136:[2,148]},{1:[2,149],6:[2,149],25:[2,149],26:[2,149],49:[2,149],54:[2,149],57:[2,149],72:[2,149],77:[2,149],85:[2,149],90:[2,149],92:[2,149],101:[2,149],102:87,103:[1,65],104:[2,149],105:[1,66],108:88,109:[1,68],110:69,117:[2,149],125:[2,149],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,153],6:[2,153],25:[2,153],26:[2,153],49:[2,153],54:[2,153],57:[2,153],72:[2,153],77:[2,153],85:[2,153],90:[2,153],92:[2,153],101:[2,153],103:[2,153],104:[2,153],105:[2,153],109:[2,153],117:[2,153],125:[2,153],127:[2,153],128:[2,153],131:[2,153],132:[2,153],133:[2,153],134:[2,153],135:[2,153],136:[2,153]},{115:[2,155],116:[2,155]},{27:158,28:[1,73],44:159,58:160,59:161,75:[1,70],88:[1,113],89:[1,114],112:231,114:157},{54:[1,232],115:[2,161],116:[2,161]},{54:[2,157],115:[2,157],116:[2,157]},{54:[2,158],115:[2,158],116:[2,158]},{54:[2,159],115:[2,159],116:[2,159]},{54:[2,160],115:[2,160],116:[2,160]},{1:[2,154],6:[2,154],25:[2,154],26:[2,154],49:[2,154],54:[2,154],57:[2,154],72:[2,154],77:[2,154],85:[2,154],90:[2,154],92:[2,154],101:[2,154],103:[2,154],104:[2,154],105:[2,154],109:[2,154],117:[2,154],125:[2,154],127:[2,154],128:[2,154],131:[2,154],132:[2,154],133:[2,154],134:[2,154],135:[2,154],136:[2,154]},{8:233,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:234,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[2,53],25:[2,53],53:235,54:[1,236],77:[2,53]},{6:[2,91],25:[2,91],26:[2,91],54:[2,91],77:[2,91]},{6:[2,39],25:[2,39],26:[2,39],43:[1,237],54:[2,39],77:[2,39]},{6:[2,42],25:[2,42],26:[2,42],54:[2,42],77:[2,42]},{6:[2,43],25:[2,43],26:[2,43],43:[2,43],54:[2,43],77:[2,43]},{6:[2,44],25:[2,44],26:[2,44],43:[2,44],54:[2,44],77:[2,44]},{6:[2,45],25:[2,45],26:[2,45],43:[2,45],54:[2,45],77:[2,45]},{1:[2,5],6:[2,5],26:[2,5],101:[2,5]},{1:[2,25],6:[2,25],25:[2,25],26:[2,25],49:[2,25],54:[2,25],57:[2,25],72:[2,25],77:[2,25],85:[2,25],90:[2,25],92:[2,25],97:[2,25],98:[2,25],101:[2,25],103:[2,25],104:[2,25],105:[2,25],109:[2,25],117:[2,25],120:[2,25],122:[2,25],125:[2,25],127:[2,25],128:[2,25],131:[2,25],132:[2,25],133:[2,25],134:[2,25],135:[2,25],136:[2,25]},{1:[2,192],6:[2,192],25:[2,192],26:[2,192],49:[2,192],54:[2,192],57:[2,192],72:[2,192],77:[2,192],85:[2,192],90:[2,192],92:[2,192],101:[2,192],102:87,103:[2,192],104:[2,192],105:[2,192],108:88,109:[2,192],110:69,117:[2,192],125:[2,192],127:[2,192],128:[2,192],131:[1,78],132:[1,81],133:[2,192],134:[2,192],135:[2,192],136:[2,192]},{1:[2,193],6:[2,193],25:[2,193],26:[2,193],49:[2,193],54:[2,193],57:[2,193],72:[2,193],77:[2,193],85:[2,193],90:[2,193],92:[2,193],101:[2,193],102:87,103:[2,193],104:[2,193],105:[2,193],108:88,109:[2,193],110:69,117:[2,193],125:[2,193],127:[2,193],128:[2,193],131:[1,78],132:[1,81],133:[2,193],134:[2,193],135:[2,193],136:[2,193]},{1:[2,194],6:[2,194],25:[2,194],26:[2,194],49:[2,194],54:[2,194],57:[2,194],72:[2,194],77:[2,194],85:[2,194],90:[2,194],92:[2,194],101:[2,194],102:87,103:[2,194],104:[2,194],105:[2,194],108:88,109:[2,194],110:69,117:[2,194],125:[2,194],127:[2,194],128:[2,194],131:[1,78],132:[2,194],133:[2,194],134:[2,194],135:[2,194],136:[2,194]},{1:[2,195],6:[2,195],25:[2,195],26:[2,195],49:[2,195],54:[2,195],57:[2,195],72:[2,195],77:[2,195],85:[2,195],90:[2,195],92:[2,195],101:[2,195],102:87,103:[2,195],104:[2,195],105:[2,195],108:88,109:[2,195],110:69,117:[2,195],125:[2,195],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[2,195],134:[2,195],135:[2,195],136:[2,195]},{1:[2,196],6:[2,196],25:[2,196],26:[2,196],49:[2,196],54:[2,196],57:[2,196],72:[2,196],77:[2,196],85:[2,196],90:[2,196],92:[2,196],101:[2,196],102:87,103:[2,196],104:[2,196],105:[2,196],108:88,109:[2,196],110:69,117:[2,196],125:[2,196],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[2,196],135:[2,196],136:[1,85]},{1:[2,197],6:[2,197],25:[2,197],26:[2,197],49:[2,197],54:[2,197],57:[2,197],72:[2,197],77:[2,197],85:[2,197],90:[2,197],92:[2,197],101:[2,197],102:87,103:[2,197],104:[2,197],105:[2,197],108:88,109:[2,197],110:69,117:[2,197],125:[2,197],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[2,197],136:[1,85]},{1:[2,198],6:[2,198],25:[2,198],26:[2,198],49:[2,198],54:[2,198],57:[2,198],72:[2,198],77:[2,198],85:[2,198],90:[2,198],92:[2,198],101:[2,198],102:87,103:[2,198],104:[2,198],105:[2,198],108:88,109:[2,198],110:69,117:[2,198],125:[2,198],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[2,198],135:[2,198],136:[2,198]},{1:[2,183],6:[2,183],25:[2,183],26:[2,183],49:[2,183],54:[2,183],57:[2,183],72:[2,183],77:[2,183],85:[2,183],90:[2,183],92:[2,183],101:[2,183],102:87,103:[1,65],104:[2,183],105:[1,66],108:88,109:[1,68],110:69,117:[2,183],125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,182],6:[2,182],25:[2,182],26:[2,182],49:[2,182],54:[2,182],57:[2,182],72:[2,182],77:[2,182],85:[2,182],90:[2,182],92:[2,182],101:[2,182],102:87,103:[1,65],104:[2,182],105:[1,66],108:88,109:[1,68],110:69,117:[2,182],125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,103],6:[2,103],25:[2,103],26:[2,103],49:[2,103],54:[2,103],57:[2,103],66:[2,103],67:[2,103],68:[2,103],70:[2,103],72:[2,103],73:[2,103],77:[2,103],83:[2,103],84:[2,103],85:[2,103],90:[2,103],92:[2,103],101:[2,103],103:[2,103],104:[2,103],105:[2,103],109:[2,103],117:[2,103],125:[2,103],127:[2,103],128:[2,103],131:[2,103],132:[2,103],133:[2,103],134:[2,103],135:[2,103],136:[2,103]},{1:[2,80],6:[2,80],25:[2,80],26:[2,80],40:[2,80],49:[2,80],54:[2,80],57:[2,80],66:[2,80],67:[2,80],68:[2,80],70:[2,80],72:[2,80],73:[2,80],77:[2,80],79:[2,80],83:[2,80],84:[2,80],85:[2,80],90:[2,80],92:[2,80],101:[2,80],103:[2,80],104:[2,80],105:[2,80],109:[2,80],117:[2,80],125:[2,80],127:[2,80],128:[2,80],129:[2,80],130:[2,80],131:[2,80],132:[2,80],133:[2,80],134:[2,80],135:[2,80],136:[2,80],137:[2,80]},{1:[2,81],6:[2,81],25:[2,81],26:[2,81],40:[2,81],49:[2,81],54:[2,81],57:[2,81],66:[2,81],67:[2,81],68:[2,81],70:[2,81],72:[2,81],73:[2,81],77:[2,81],79:[2,81],83:[2,81],84:[2,81],85:[2,81],90:[2,81],92:[2,81],101:[2,81],103:[2,81],104:[2,81],105:[2,81],109:[2,81],117:[2,81],125:[2,81],127:[2,81],128:[2,81],129:[2,81],130:[2,81],131:[2,81],132:[2,81],133:[2,81],134:[2,81],135:[2,81],136:[2,81],137:[2,81]},{1:[2,82],6:[2,82],25:[2,82],26:[2,82],40:[2,82],49:[2,82],54:[2,82],57:[2,82],66:[2,82],67:[2,82],68:[2,82],70:[2,82],72:[2,82],73:[2,82],77:[2,82],79:[2,82],83:[2,82],84:[2,82],85:[2,82],90:[2,82],92:[2,82],101:[2,82],103:[2,82],104:[2,82],105:[2,82],109:[2,82],117:[2,82],125:[2,82],127:[2,82],128:[2,82],129:[2,82],130:[2,82],131:[2,82],132:[2,82],133:[2,82],134:[2,82],135:[2,82],136:[2,82],137:[2,82]},{72:[1,238]},{57:[1,192],72:[2,87],91:239,92:[1,191],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{72:[2,88]},{8:240,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,72:[2,122],75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{12:[2,116],28:[2,116],30:[2,116],31:[2,116],33:[2,116],34:[2,116],35:[2,116],36:[2,116],37:[2,116],38:[2,116],45:[2,116],46:[2,116],47:[2,116],51:[2,116],52:[2,116],72:[2,116],75:[2,116],78:[2,116],82:[2,116],87:[2,116],88:[2,116],89:[2,116],95:[2,116],99:[2,116],100:[2,116],103:[2,116],105:[2,116],107:[2,116],109:[2,116],118:[2,116],124:[2,116],126:[2,116],127:[2,116],128:[2,116],129:[2,116],130:[2,116]},{12:[2,117],28:[2,117],30:[2,117],31:[2,117],33:[2,117],34:[2,117],35:[2,117],36:[2,117],37:[2,117],38:[2,117],45:[2,117],46:[2,117],47:[2,117],51:[2,117],52:[2,117],72:[2,117],75:[2,117],78:[2,117],82:[2,117],87:[2,117],88:[2,117],89:[2,117],95:[2,117],99:[2,117],100:[2,117],103:[2,117],105:[2,117],107:[2,117],109:[2,117],118:[2,117],124:[2,117],126:[2,117],127:[2,117],128:[2,117],129:[2,117],130:[2,117]},{1:[2,86],6:[2,86],25:[2,86],26:[2,86],40:[2,86],49:[2,86],54:[2,86],57:[2,86],66:[2,86],67:[2,86],68:[2,86],70:[2,86],72:[2,86],73:[2,86],77:[2,86],79:[2,86],83:[2,86],84:[2,86],85:[2,86],90:[2,86],92:[2,86],101:[2,86],103:[2,86],104:[2,86],105:[2,86],109:[2,86],117:[2,86],125:[2,86],127:[2,86],128:[2,86],129:[2,86],130:[2,86],131:[2,86],132:[2,86],133:[2,86],134:[2,86],135:[2,86],136:[2,86],137:[2,86]},{1:[2,104],6:[2,104],25:[2,104],26:[2,104],49:[2,104],54:[2,104],57:[2,104],66:[2,104],67:[2,104],68:[2,104],70:[2,104],72:[2,104],73:[2,104],77:[2,104],83:[2,104],84:[2,104],85:[2,104],90:[2,104],92:[2,104],101:[2,104],103:[2,104],104:[2,104],105:[2,104],109:[2,104],117:[2,104],125:[2,104],127:[2,104],128:[2,104],131:[2,104],132:[2,104],133:[2,104],134:[2,104],135:[2,104],136:[2,104]},{1:[2,36],6:[2,36],25:[2,36],26:[2,36],49:[2,36],54:[2,36],57:[2,36],72:[2,36],77:[2,36],85:[2,36],90:[2,36],92:[2,36],101:[2,36],102:87,103:[2,36],104:[2,36],105:[2,36],108:88,109:[2,36],110:69,117:[2,36],125:[2,36],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{8:241,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:242,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,109],6:[2,109],25:[2,109],26:[2,109],49:[2,109],54:[2,109],57:[2,109],66:[2,109],67:[2,109],68:[2,109],70:[2,109],72:[2,109],73:[2,109],77:[2,109],83:[2,109],84:[2,109],85:[2,109],90:[2,109],92:[2,109],101:[2,109],103:[2,109],104:[2,109],105:[2,109],109:[2,109],117:[2,109],125:[2,109],127:[2,109],128:[2,109],131:[2,109],132:[2,109],133:[2,109],134:[2,109],135:[2,109],136:[2,109]},{6:[2,53],25:[2,53],53:243,54:[1,226],85:[2,53]},{6:[2,128],25:[2,128],26:[2,128],54:[2,128],57:[1,244],85:[2,128],90:[2,128],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{50:245,51:[1,60],52:[1,61]},{6:[2,54],25:[2,54],26:[2,54],27:109,28:[1,73],44:110,55:246,56:108,58:111,59:112,75:[1,70],88:[1,113],89:[1,114]},{6:[1,247],25:[1,248]},{6:[2,61],25:[2,61],26:[2,61],49:[2,61],54:[2,61]},{8:249,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,199],6:[2,199],25:[2,199],26:[2,199],49:[2,199],54:[2,199],57:[2,199],72:[2,199],77:[2,199],85:[2,199],90:[2,199],92:[2,199],101:[2,199],102:87,103:[2,199],104:[2,199],105:[2,199],108:88,109:[2,199],110:69,117:[2,199],125:[2,199],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{8:250,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,201],6:[2,201],25:[2,201],26:[2,201],49:[2,201],54:[2,201],57:[2,201],72:[2,201],77:[2,201],85:[2,201],90:[2,201],92:[2,201],101:[2,201],102:87,103:[2,201],104:[2,201],105:[2,201],108:88,109:[2,201],110:69,117:[2,201],125:[2,201],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,181],6:[2,181],25:[2,181],26:[2,181],49:[2,181],54:[2,181],57:[2,181],72:[2,181],77:[2,181],85:[2,181],90:[2,181],92:[2,181],101:[2,181],103:[2,181],104:[2,181],105:[2,181],109:[2,181],117:[2,181],125:[2,181],127:[2,181],128:[2,181],131:[2,181],132:[2,181],133:[2,181],134:[2,181],135:[2,181],136:[2,181]},{8:251,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,133],6:[2,133],25:[2,133],26:[2,133],49:[2,133],54:[2,133],57:[2,133],72:[2,133],77:[2,133],85:[2,133],90:[2,133],92:[2,133],97:[1,252],101:[2,133],103:[2,133],104:[2,133],105:[2,133],109:[2,133],117:[2,133],125:[2,133],127:[2,133],128:[2,133],131:[2,133],132:[2,133],133:[2,133],134:[2,133],135:[2,133],136:[2,133]},{5:253,25:[1,5]},{27:254,28:[1,73]},{119:255,121:216,122:[1,217]},{26:[1,256],120:[1,257],121:258,122:[1,217]},{26:[2,174],120:[2,174],122:[2,174]},{8:260,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],94:259,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,97],5:261,6:[2,97],25:[1,5],26:[2,97],49:[2,97],54:[2,97],57:[2,97],72:[2,97],77:[2,97],85:[2,97],90:[2,97],92:[2,97],101:[2,97],102:87,103:[1,65],104:[2,97],105:[1,66],108:88,109:[1,68],110:69,117:[2,97],125:[2,97],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,100],6:[2,100],25:[2,100],26:[2,100],49:[2,100],54:[2,100],57:[2,100],72:[2,100],77:[2,100],85:[2,100],90:[2,100],92:[2,100],101:[2,100],103:[2,100],104:[2,100],105:[2,100],109:[2,100],117:[2,100],125:[2,100],127:[2,100],128:[2,100],131:[2,100],132:[2,100],133:[2,100],134:[2,100],135:[2,100],136:[2,100]},{8:262,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,138],6:[2,138],25:[2,138],26:[2,138],49:[2,138],54:[2,138],57:[2,138],66:[2,138],67:[2,138],68:[2,138],70:[2,138],72:[2,138],73:[2,138],77:[2,138],83:[2,138],84:[2,138],85:[2,138],90:[2,138],92:[2,138],101:[2,138],103:[2,138],104:[2,138],105:[2,138],109:[2,138],117:[2,138],125:[2,138],127:[2,138],128:[2,138],131:[2,138],132:[2,138],133:[2,138],134:[2,138],135:[2,138],136:[2,138]},{6:[1,74],26:[1,263]},{8:264,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[2,67],12:[2,117],25:[2,67],28:[2,117],30:[2,117],31:[2,117],33:[2,117],34:[2,117],35:[2,117],36:[2,117],37:[2,117],38:[2,117],45:[2,117],46:[2,117],47:[2,117],51:[2,117],52:[2,117],54:[2,67],75:[2,117],78:[2,117],82:[2,117],87:[2,117],88:[2,117],89:[2,117],90:[2,67],95:[2,117],99:[2,117],100:[2,117],103:[2,117],105:[2,117],107:[2,117],109:[2,117],118:[2,117],124:[2,117],126:[2,117],127:[2,117],128:[2,117],129:[2,117],130:[2,117]},{6:[1,266],25:[1,267],90:[1,265]},{6:[2,54],8:200,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[2,54],26:[2,54],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:147,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],85:[2,54],87:[1,58],88:[1,59],89:[1,57],90:[2,54],93:268,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[2,53],25:[2,53],26:[2,53],53:269,54:[1,226]},{1:[2,178],6:[2,178],25:[2,178],26:[2,178],49:[2,178],54:[2,178],57:[2,178],72:[2,178],77:[2,178],85:[2,178],90:[2,178],92:[2,178],101:[2,178],103:[2,178],104:[2,178],105:[2,178],109:[2,178],117:[2,178],120:[2,178],125:[2,178],127:[2,178],128:[2,178],131:[2,178],132:[2,178],133:[2,178],134:[2,178],135:[2,178],136:[2,178]},{8:270,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:271,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{115:[2,156],116:[2,156]},{27:158,28:[1,73],44:159,58:160,59:161,75:[1,70],88:[1,113],89:[1,114],114:272},{1:[2,163],6:[2,163],25:[2,163],26:[2,163],49:[2,163],54:[2,163],57:[2,163],72:[2,163],77:[2,163],85:[2,163],90:[2,163],92:[2,163],101:[2,163],102:87,103:[2,163],104:[1,273],105:[2,163],108:88,109:[2,163],110:69,117:[1,274],125:[2,163],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,164],6:[2,164],25:[2,164],26:[2,164],49:[2,164],54:[2,164],57:[2,164],72:[2,164],77:[2,164],85:[2,164],90:[2,164],92:[2,164],101:[2,164],102:87,103:[2,164],104:[1,275],105:[2,164],108:88,109:[2,164],110:69,117:[2,164],125:[2,164],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{6:[1,277],25:[1,278],77:[1,276]},{6:[2,54],11:168,25:[2,54],26:[2,54],27:169,28:[1,73],29:170,30:[1,71],31:[1,72],41:279,42:167,44:171,46:[1,46],77:[2,54],88:[1,113]},{8:280,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,281],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,85],6:[2,85],25:[2,85],26:[2,85],40:[2,85],49:[2,85],54:[2,85],57:[2,85],66:[2,85],67:[2,85],68:[2,85],70:[2,85],72:[2,85],73:[2,85],77:[2,85],79:[2,85],83:[2,85],84:[2,85],85:[2,85],90:[2,85],92:[2,85],101:[2,85],103:[2,85],104:[2,85],105:[2,85],109:[2,85],117:[2,85],125:[2,85],127:[2,85],128:[2,85],129:[2,85],130:[2,85],131:[2,85],132:[2,85],133:[2,85],134:[2,85],135:[2,85],136:[2,85],137:[2,85]},{8:282,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,72:[2,120],75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{72:[2,121],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,37],6:[2,37],25:[2,37],26:[2,37],49:[2,37],54:[2,37],57:[2,37],72:[2,37],77:[2,37],85:[2,37],90:[2,37],92:[2,37],101:[2,37],102:87,103:[2,37],104:[2,37],105:[2,37],108:88,109:[2,37],110:69,117:[2,37],125:[2,37],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{26:[1,283],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{6:[1,266],25:[1,267],85:[1,284]},{6:[2,67],25:[2,67],26:[2,67],54:[2,67],85:[2,67],90:[2,67]},{5:285,25:[1,5]},{6:[2,57],25:[2,57],26:[2,57],49:[2,57],54:[2,57]},{27:109,28:[1,73],44:110,55:286,56:108,58:111,59:112,75:[1,70],88:[1,113],89:[1,114]},{6:[2,55],25:[2,55],26:[2,55],27:109,28:[1,73],44:110,48:287,54:[2,55],55:107,56:108,58:111,59:112,75:[1,70],88:[1,113],89:[1,114]},{6:[2,62],25:[2,62],26:[2,62],49:[2,62],54:[2,62],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{26:[1,288],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{5:289,25:[1,5],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{5:290,25:[1,5]},{1:[2,134],6:[2,134],25:[2,134],26:[2,134],49:[2,134],54:[2,134],57:[2,134],72:[2,134],77:[2,134],85:[2,134],90:[2,134],92:[2,134],101:[2,134],103:[2,134],104:[2,134],105:[2,134],109:[2,134],117:[2,134],125:[2,134],127:[2,134],128:[2,134],131:[2,134],132:[2,134],133:[2,134],134:[2,134],135:[2,134],136:[2,134]},{5:291,25:[1,5]},{26:[1,292],120:[1,293],121:258,122:[1,217]},{1:[2,172],6:[2,172],25:[2,172],26:[2,172],49:[2,172],54:[2,172],57:[2,172],72:[2,172],77:[2,172],85:[2,172],90:[2,172],92:[2,172],101:[2,172],103:[2,172],104:[2,172],105:[2,172],109:[2,172],117:[2,172],125:[2,172],127:[2,172],128:[2,172],131:[2,172],132:[2,172],133:[2,172],134:[2,172],135:[2,172],136:[2,172]},{5:294,25:[1,5]},{26:[2,175],120:[2,175],122:[2,175]},{5:295,25:[1,5],54:[1,296]},{25:[2,130],54:[2,130],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,98],6:[2,98],25:[2,98],26:[2,98],49:[2,98],54:[2,98],57:[2,98],72:[2,98],77:[2,98],85:[2,98],90:[2,98],92:[2,98],101:[2,98],103:[2,98],104:[2,98],105:[2,98],109:[2,98],117:[2,98],125:[2,98],127:[2,98],128:[2,98],131:[2,98],132:[2,98],133:[2,98],134:[2,98],135:[2,98],136:[2,98]},{1:[2,101],5:297,6:[2,101],25:[1,5],26:[2,101],49:[2,101],54:[2,101],57:[2,101],72:[2,101],77:[2,101],85:[2,101],90:[2,101],92:[2,101],101:[2,101],102:87,103:[1,65],104:[2,101],105:[1,66],108:88,109:[1,68],110:69,117:[2,101],125:[2,101],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{101:[1,298]},{90:[1,299],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,115],6:[2,115],25:[2,115],26:[2,115],40:[2,115],49:[2,115],54:[2,115],57:[2,115],66:[2,115],67:[2,115],68:[2,115],70:[2,115],72:[2,115],73:[2,115],77:[2,115],83:[2,115],84:[2,115],85:[2,115],90:[2,115],92:[2,115],101:[2,115],103:[2,115],104:[2,115],105:[2,115],109:[2,115],115:[2,115],116:[2,115],117:[2,115],125:[2,115],127:[2,115],128:[2,115],131:[2,115],132:[2,115],133:[2,115],134:[2,115],135:[2,115],136:[2,115]},{8:200,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:147,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],93:300,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:200,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,146],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:147,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],86:301,87:[1,58],88:[1,59],89:[1,57],93:145,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[2,124],25:[2,124],26:[2,124],54:[2,124],85:[2,124],90:[2,124]},{6:[1,266],25:[1,267],26:[1,302]},{1:[2,141],6:[2,141],25:[2,141],26:[2,141],49:[2,141],54:[2,141],57:[2,141],72:[2,141],77:[2,141],85:[2,141],90:[2,141],92:[2,141],101:[2,141],102:87,103:[1,65],104:[2,141],105:[1,66],108:88,109:[1,68],110:69,117:[2,141],125:[2,141],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,143],6:[2,143],25:[2,143],26:[2,143],49:[2,143],54:[2,143],57:[2,143],72:[2,143],77:[2,143],85:[2,143],90:[2,143],92:[2,143],101:[2,143],102:87,103:[1,65],104:[2,143],105:[1,66],108:88,109:[1,68],110:69,117:[2,143],125:[2,143],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{115:[2,162],116:[2,162]},{8:303,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:304,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:305,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,89],6:[2,89],25:[2,89],26:[2,89],40:[2,89],49:[2,89],54:[2,89],57:[2,89],66:[2,89],67:[2,89],68:[2,89],70:[2,89],72:[2,89],73:[2,89],77:[2,89],83:[2,89],84:[2,89],85:[2,89],90:[2,89],92:[2,89],101:[2,89],103:[2,89],104:[2,89],105:[2,89],109:[2,89],115:[2,89],116:[2,89],117:[2,89],125:[2,89],127:[2,89],128:[2,89],131:[2,89],132:[2,89],133:[2,89],134:[2,89],135:[2,89],136:[2,89]},{11:168,27:169,28:[1,73],29:170,30:[1,71],31:[1,72],41:306,42:167,44:171,46:[1,46],88:[1,113]},{6:[2,90],11:168,25:[2,90],26:[2,90],27:169,28:[1,73],29:170,30:[1,71],31:[1,72],41:166,42:167,44:171,46:[1,46],54:[2,90],76:307,88:[1,113]},{6:[2,92],25:[2,92],26:[2,92],54:[2,92],77:[2,92]},{6:[2,40],25:[2,40],26:[2,40],54:[2,40],77:[2,40],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{8:308,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{72:[2,119],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,38],6:[2,38],25:[2,38],26:[2,38],49:[2,38],54:[2,38],57:[2,38],72:[2,38],77:[2,38],85:[2,38],90:[2,38],92:[2,38],101:[2,38],103:[2,38],104:[2,38],105:[2,38],109:[2,38],117:[2,38],125:[2,38],127:[2,38],128:[2,38],131:[2,38],132:[2,38],133:[2,38],134:[2,38],135:[2,38],136:[2,38]},{1:[2,110],6:[2,110],25:[2,110],26:[2,110],49:[2,110],54:[2,110],57:[2,110],66:[2,110],67:[2,110],68:[2,110],70:[2,110],72:[2,110],73:[2,110],77:[2,110],83:[2,110],84:[2,110],85:[2,110],90:[2,110],92:[2,110],101:[2,110],103:[2,110],104:[2,110],105:[2,110],109:[2,110],117:[2,110],125:[2,110],127:[2,110],128:[2,110],131:[2,110],132:[2,110],133:[2,110],134:[2,110],135:[2,110],136:[2,110]},{1:[2,49],6:[2,49],25:[2,49],26:[2,49],49:[2,49],54:[2,49],57:[2,49],72:[2,49],77:[2,49],85:[2,49],90:[2,49],92:[2,49],101:[2,49],103:[2,49],104:[2,49],105:[2,49],109:[2,49],117:[2,49],125:[2,49],127:[2,49],128:[2,49],131:[2,49],132:[2,49],133:[2,49],134:[2,49],135:[2,49],136:[2,49]},{6:[2,58],25:[2,58],26:[2,58],49:[2,58],54:[2,58]},{6:[2,53],25:[2,53],26:[2,53],53:309,54:[1,202]},{1:[2,200],6:[2,200],25:[2,200],26:[2,200],49:[2,200],54:[2,200],57:[2,200],72:[2,200],77:[2,200],85:[2,200],90:[2,200],92:[2,200],101:[2,200],103:[2,200],104:[2,200],105:[2,200],109:[2,200],117:[2,200],125:[2,200],127:[2,200],128:[2,200],131:[2,200],132:[2,200],133:[2,200],134:[2,200],135:[2,200],136:[2,200]},{1:[2,179],6:[2,179],25:[2,179],26:[2,179],49:[2,179],54:[2,179],57:[2,179],72:[2,179],77:[2,179],85:[2,179],90:[2,179],92:[2,179],101:[2,179],103:[2,179],104:[2,179],105:[2,179],109:[2,179],117:[2,179],120:[2,179],125:[2,179],127:[2,179],128:[2,179],131:[2,179],132:[2,179],133:[2,179],134:[2,179],135:[2,179],136:[2,179]},{1:[2,135],6:[2,135],25:[2,135],26:[2,135],49:[2,135],54:[2,135],57:[2,135],72:[2,135],77:[2,135],85:[2,135],90:[2,135],92:[2,135],101:[2,135],103:[2,135],104:[2,135],105:[2,135],109:[2,135],117:[2,135],125:[2,135],127:[2,135],128:[2,135],131:[2,135],132:[2,135],133:[2,135],134:[2,135],135:[2,135],136:[2,135]},{1:[2,136],6:[2,136],25:[2,136],26:[2,136],49:[2,136],54:[2,136],57:[2,136],72:[2,136],77:[2,136],85:[2,136],90:[2,136],92:[2,136],97:[2,136],101:[2,136],103:[2,136],104:[2,136],105:[2,136],109:[2,136],117:[2,136],125:[2,136],127:[2,136],128:[2,136],131:[2,136],132:[2,136],133:[2,136],134:[2,136],135:[2,136],136:[2,136]},{1:[2,170],6:[2,170],25:[2,170],26:[2,170],49:[2,170],54:[2,170],57:[2,170],72:[2,170],77:[2,170],85:[2,170],90:[2,170],92:[2,170],101:[2,170],103:[2,170],104:[2,170],105:[2,170],109:[2,170],117:[2,170],125:[2,170],127:[2,170],128:[2,170],131:[2,170],132:[2,170],133:[2,170],134:[2,170],135:[2,170],136:[2,170]},{5:310,25:[1,5]},{26:[1,311]},{6:[1,312],26:[2,176],120:[2,176],122:[2,176]},{8:313,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,102],6:[2,102],25:[2,102],26:[2,102],49:[2,102],54:[2,102],57:[2,102],72:[2,102],77:[2,102],85:[2,102],90:[2,102],92:[2,102],101:[2,102],103:[2,102],104:[2,102],105:[2,102],109:[2,102],117:[2,102],125:[2,102],127:[2,102],128:[2,102],131:[2,102],132:[2,102],133:[2,102],134:[2,102],135:[2,102],136:[2,102]},{1:[2,139],6:[2,139],25:[2,139],26:[2,139],49:[2,139],54:[2,139],57:[2,139],66:[2,139],67:[2,139],68:[2,139],70:[2,139],72:[2,139],73:[2,139],77:[2,139],83:[2,139],84:[2,139],85:[2,139],90:[2,139],92:[2,139],101:[2,139],103:[2,139],104:[2,139],105:[2,139],109:[2,139],117:[2,139],125:[2,139],127:[2,139],128:[2,139],131:[2,139],132:[2,139],133:[2,139],134:[2,139],135:[2,139],136:[2,139]},{1:[2,118],6:[2,118],25:[2,118],26:[2,118],49:[2,118],54:[2,118],57:[2,118],66:[2,118],67:[2,118],68:[2,118],70:[2,118],72:[2,118],73:[2,118],77:[2,118],83:[2,118],84:[2,118],85:[2,118],90:[2,118],92:[2,118],101:[2,118],103:[2,118],104:[2,118],105:[2,118],109:[2,118],117:[2,118],125:[2,118],127:[2,118],128:[2,118],131:[2,118],132:[2,118],133:[2,118],134:[2,118],135:[2,118],136:[2,118]},{6:[2,125],25:[2,125],26:[2,125],54:[2,125],85:[2,125],90:[2,125]},{6:[2,53],25:[2,53],26:[2,53],53:314,54:[1,226]},{6:[2,126],25:[2,126],26:[2,126],54:[2,126],85:[2,126],90:[2,126]},{1:[2,165],6:[2,165],25:[2,165],26:[2,165],49:[2,165],54:[2,165],57:[2,165],72:[2,165],77:[2,165],85:[2,165],90:[2,165],92:[2,165],101:[2,165],102:87,103:[2,165],104:[2,165],105:[2,165],108:88,109:[2,165],110:69,117:[1,315],125:[2,165],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,167],6:[2,167],25:[2,167],26:[2,167],49:[2,167],54:[2,167],57:[2,167],72:[2,167],77:[2,167],85:[2,167],90:[2,167],92:[2,167],101:[2,167],102:87,103:[2,167],104:[1,316],105:[2,167],108:88,109:[2,167],110:69,117:[2,167],125:[2,167],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,166],6:[2,166],25:[2,166],26:[2,166],49:[2,166],54:[2,166],57:[2,166],72:[2,166],77:[2,166],85:[2,166],90:[2,166],92:[2,166],101:[2,166],102:87,103:[2,166],104:[2,166],105:[2,166],108:88,109:[2,166],110:69,117:[2,166],125:[2,166],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{6:[2,93],25:[2,93],26:[2,93],54:[2,93],77:[2,93]},{6:[2,53],25:[2,53],26:[2,53],53:317,54:[1,236]},{26:[1,318],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{6:[1,247],25:[1,248],26:[1,319]},{26:[1,320]},{1:[2,173],6:[2,173],25:[2,173],26:[2,173],49:[2,173],54:[2,173],57:[2,173],72:[2,173],77:[2,173],85:[2,173],90:[2,173],92:[2,173],101:[2,173],103:[2,173],104:[2,173],105:[2,173],109:[2,173],117:[2,173],125:[2,173],127:[2,173],128:[2,173],131:[2,173],132:[2,173],133:[2,173],134:[2,173],135:[2,173],136:[2,173]},{26:[2,177],120:[2,177],122:[2,177]},{25:[2,131],54:[2,131],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{6:[1,266],25:[1,267],26:[1,321]},{8:322,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:323,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[1,277],25:[1,278],26:[1,324]},{6:[2,41],25:[2,41],26:[2,41],54:[2,41],77:[2,41]},{6:[2,59],25:[2,59],26:[2,59],49:[2,59],54:[2,59]},{1:[2,171],6:[2,171],25:[2,171],26:[2,171],49:[2,171],54:[2,171],57:[2,171],72:[2,171],77:[2,171],85:[2,171],90:[2,171],92:[2,171],101:[2,171],103:[2,171],104:[2,171],105:[2,171],109:[2,171],117:[2,171],125:[2,171],127:[2,171],128:[2,171],131:[2,171],132:[2,171],133:[2,171],134:[2,171],135:[2,171],136:[2,171]},{6:[2,127],25:[2,127],26:[2,127],54:[2,127],85:[2,127],90:[2,127]},{1:[2,168],6:[2,168],25:[2,168],26:[2,168],49:[2,168],54:[2,168],57:[2,168],72:[2,168],77:[2,168],85:[2,168],90:[2,168],92:[2,168],101:[2,168],102:87,103:[2,168],104:[2,168],105:[2,168],108:88,109:[2,168],110:69,117:[2,168],125:[2,168],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,169],6:[2,169],25:[2,169],26:[2,169],49:[2,169],54:[2,169],57:[2,169],72:[2,169],77:[2,169],85:[2,169],90:[2,169],92:[2,169],101:[2,169],102:87,103:[2,169],104:[2,169],105:[2,169],108:88,109:[2,169],110:69,117:[2,169],125:[2,169],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{6:[2,94],25:[2,94],26:[2,94],54:[2,94],77:[2,94]}],defaultActions:{60:[2,51],61:[2,52],75:[2,3],94:[2,108],189:[2,88]},parseError:function(a,b){throw new Error(a)},parse:function(a){function o(){var a;a=b.lexer.lex()||1,typeof a!="number"&&(a=b.symbols_[a]||a);return a}function n(a){c.length=c.length-2*a,d.length=d.length-a,e.length=e.length-a}var b=this,c=[0],d=[null],e=[],f=this.table,g="",h=0,i=0,j=0,k=2,l=1;this.lexer.setInput(a),this.lexer.yy=this.yy,this.yy.lexer=this.lexer,typeof this.lexer.yylloc=="undefined"&&(this.lexer.yylloc={});var m=this.lexer.yylloc;e.push(m),typeof this.yy.parseError=="function"&&(this.parseError=this.yy.parseError);var p,q,r,s,t,u,v={},w,x,y,z;for(;;){r=c[c.length-1],this.defaultActions[r]?s=this.defaultActions[r]:(p==null&&(p=o()),s=f[r]&&f[r][p]);_handle_error:if(typeof s=="undefined"||!s.length||!s[0]){if(!j){z=[];for(w in f[r])this.terminals_[w]&&w>2&&z.push("'"+this.terminals_[w]+"'");var A="";this.lexer.showPosition?A="Parse error on line "+(h+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+z.join(", ")+", got '"+this.terminals_[p]+"'":A="Parse error on line "+(h+1)+": Unexpected "+(p==1?"end of input":"'"+(this.terminals_[p]||p)+"'"),this.parseError(A,{text:this.lexer.match,token:this.terminals_[p]||p,line:this.lexer.yylineno,loc:m,expected:z})}if(j==3){if(p==l)throw new Error(A||"Parsing halted.");i=this.lexer.yyleng,g=this.lexer.yytext,h=this.lexer.yylineno,m=this.lexer.yylloc,p=o()}for(;;){if(k.toString()in f[r])break;if(r==0)throw new Error(A||"Parsing halted.");n(1),r=c[c.length-1]}q=p,p=k,r=c[c.length-1],s=f[r]&&f[r][k],j=3}if(s[0]instanceof Array&&s.length>1)throw new Error("Parse Error: multiple actions possible at state: "+r+", token: "+p);switch(s[0]){case 1:c.push(p),d.push(this.lexer.yytext),e.push(this.lexer.yylloc),c.push(s[1]),p=null,q?(p=q,q=null):(i=this.lexer.yyleng,g=this.lexer.yytext,h=this.lexer.yylineno,m=this.lexer.yylloc,j>0&&j--);break;case 2:x=this.productions_[s[1]][1],v.$=d[d.length-x],v._$={first_line:e[e.length-(x||1)].first_line,last_line:e[e.length-1].last_line,first_column:e[e.length-(x||1)].first_column,last_column:e[e.length-1].last_column},u=this.performAction.call(v,g,i,h,this.yy,s[1],d,e);if(typeof u!="undefined")return u;x&&(c=c.slice(0,-1*x*2),d=d.slice(0,-1*x),e=e.slice(0,-1*x)),c.push(this.productions_[s[1]][0]),d.push(v.$),e.push(v._$),y=f[c[c.length-2]][c[c.length-1]],c.push(y);break;case 3:return!0}}return!0}};undefined;return a}();typeof require!="undefined"&&typeof a!="undefined"&&(a.parser=b,a.parse=function(){return b.parse.apply(b,arguments)},a.main=function(b){if(!b[1])throw new Error("Usage: "+b[0]+" FILE");if(typeof process!="undefined")var c=require("fs").readFileSync(require("path").join(process.cwd(),b[1]),"utf8");else var d=require("file").path(require("file").cwd()),c=d.join(b[1]).read({charset:"utf-8"});return a.parser.parse(c)},typeof module!="undefined"&&require.main===module&&a.main(typeof process!="undefined"?process.argv.slice(1):require("system").args))},require["./scope"]=new function(){var a=this;(function(){var b,c,d,e;e=require("./helpers"),c=e.extend,d=e.last,a.Scope=b=function(){function a(b,c,d){this.parent=b,this.expressions=c,this.method=d,this.variables=[{name:"arguments",type:"arguments"}],this.positions={},this.parent||(a.root=this)}a.root=null,a.prototype.add=function(a,b,c){if(this.shared&&!c)return this.parent.add(a,b,c);return Object.prototype.hasOwnProperty.call(this.positions,a)?this.variables[this.positions[a]].type=b:this.positions[a]=this.variables.push({name:a,type:b})-1},a.prototype.namedMethod=function(){if(this.method.name||!this.parent)return this.method;return this.parent.namedMethod()},a.prototype.find=function(a){if(this.check(a))return!0;this.add(a,"var");return!1},a.prototype.parameter=function(a){if(!this.shared||!this.parent.check(a,!0))return this.add(a,"param")},a.prototype.check=function(a){var b;return!!(this.type(a)||((b=this.parent)!=null?b.check(a):void 0))},a.prototype.temporary=function(a,b){return a.length>1?"_"+a+(b>1?b-1:""):"_"+(b+parseInt(a,36)).toString(36).replace(/\d/g,"a")},a.prototype.type=function(a){var b,c,d,e;e=this.variables;for(c=0,d=e.length;c<d;c++){b=e[c];if(b.name===a)return b.type}return null},a.prototype.freeVariable=function(a,b){var c,d;b==null&&(b=!0),c=0;while(this.check(d=this.temporary(a,c)))c++;b&&this.add(d,"var",!0);return d},a.prototype.assign=function(a,b){this.add(a,{value:b,assigned:!0},!0);return this.hasAssignments=!0},a.prototype.hasDeclarations=function(){return!!this.declaredVariables().length},a.prototype.declaredVariables=function(){var a,b,c,d,e,f;a=[],b=[],f=this.variables;for(d=0,e=f.length;d<e;d++)c=f[d],c.type==="var"&&(c.name.charAt(0)==="_"?b:a).push(c.name);return a.sort().concat(b.sort())},a.prototype.assignedVariables=function(){var a,b,c,d,e;d=this.variables,e=[];for(b=0,c=d.length;b<c;b++)a=d[b],a.type.assigned&&e.push(""+a.name+" = "+a.type.value);return e};return a}()}).call(this)},require["./nodes"]=new function(){var a=this;(function(){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,$,_,ba,bb,bc,bd,be,bf,bg,bh,bi,bj,bk=({}).hasOwnProperty,bl=function(a,b){function d(){this.constructor=a}for(var c in b)bk.call(b,c)&&(a[c]=b[c]);d.prototype=b.prototype,a.prototype=new d,a.__super__=b.prototype;return a},bm=[].indexOf||function(a){for(var b=0,c=this.length;b<c;b++)if(b in this&&this[b]===a)return b;return-1};N=require("./scope").Scope,bi=require("./lexer"),I=bi.RESERVED,M=bi.STRICT_PROSCRIBED,bj=require("./helpers"),Z=bj.compact,bb=bj.flatten,ba=bj.extend,bd=bj.merge,$=bj.del,bf=bj.starts,_=bj.ends,bc=bj.last,a.extend=ba,Y=function(){return!0},D=function(){return!1},S=function(){return this},C=function(){this.negated=!this.negated;return this},a.Base=e=function(){function a(){}a.prototype.compile=function(a,b){var c;a=ba({},a),b&&(a.level=b),c=this.unfoldSoak(a)||this,c.tab=a.indent;return a.level===z||!c.isStatement(a)?c.compileNode(a):c.compileClosure(a)},a.prototype.compileClosure=function(a){if(this.jumps())throw SyntaxError("cannot use a pure statement in an expression.");a.sharedScope=!0;return i.wrap(this).compileNode(a)},a.prototype.cache=function(a,b,c){var e,f;if(!this.isComplex()){e=b?this.compile(a,b):this;return[e,e]}e=new A(c||a.scope.freeVariable("ref")),f=new d(e,this);return b?[f.compile(a,b),e.value]:[f,e]},a.prototype.compileLoopReference=function(a,b){var c,d;c=d=this.compile(a,w),-Infinity<+c&&+c<Infinity||o.test(c)&&a.scope.check(c,!0)||(c=""+(d=a.scope.freeVariable(b))+" = "+c);return[c,d]},a.prototype.makeReturn=function(a){var b;b=this.unwrapAll();return a?new g(new A(""+a+".push"),[b]):new K(b)},a.prototype.contains=function(a){var b;b=!1,this.traverseChildren(!1,function(c){if(a(c)){b=!0;return!1}});return b},a.prototype.containsType=function(a){return this instanceof a||this.contains(function(b){return b instanceof a})},a.prototype.lastNonComment=function(a){var b;b=a.length;while(b--)if(!(a[b]instanceof k))return a[b];return null},a.prototype.toString=function(a,b){var c;a==null&&(a=""),b==null&&(b=this.constructor.name),c="\n"+a+b,this.soak&&(c+="?"),this.eachChild(function(b){return c+=b.toString(a+R)});return c},a.prototype.eachChild=function(a){var b,c,d,e,f,g,h,i;if(!this.children)return this;h=this.children;for(d=0,f=h.length;d<f;d++){b=h[d];if(this[b]){i=bb([this[b]]);for(e=0,g=i.length;e<g;e++){c=i[e];if(a(c)===!1)return this}}}return this},a.prototype.traverseChildren=function(a,b){return this.eachChild(function(c){if(b(c)===!1)return!1;return c.traverseChildren(a,b)})},a.prototype.invert=function(){return new F("!",this)},a.prototype.unwrapAll=function(){var a;a=this;while(a!==(a=a.unwrap()))continue;return a},a.prototype.children=[],a.prototype.isStatement=D,a.prototype.jumps=D,a.prototype.isComplex=Y,a.prototype.isChainable=D,a.prototype.isAssignable=D,a.prototype.unwrap=S,a.prototype.unfoldSoak=D,a.prototype.assigns=D;return a}(),a.Block=f=function(a){function b(a){this.expressions=Z(bb(a||[]))}bl(b,a),b.prototype.children=["expressions"],b.prototype.push=function(a){this.expressions.push(a);return this},b.prototype.pop=function(){return this.expressions.pop()},b.prototype.unshift=function(a){this.expressions.unshift(a);return this},b.prototype.unwrap=function(){return this.expressions.length===1?this.expressions[0]:this},b.prototype.isEmpty=function(){return!this.expressions.length},b.prototype.isStatement=function(a){var b,c,d,e;e=this.expressions;for(c=0,d=e.length;c<d;c++){b=e[c];if(b.isStatement(a))return!0}return!1},b.prototype.jumps=function(a){var b,c,d,e;e=this.expressions;for(c=0,d=e.length;c<d;c++){b=e[c];if(b.jumps(a))return b}},b.prototype.makeReturn=function(a){var b,c;c=this.expressions.length;while(c--){b=this.expressions[c];if(!(b instanceof k)){this.expressions[c]=b.makeReturn(a),b instanceof K&&!b.expression&&this.expressions.splice(c,1);break}}return this},b.prototype.compile=function(a,c){a==null&&(a={});return a.scope?b.__super__.compile.call(this,a,c):this.compileRoot(a)},b.prototype.compileNode=function(a){var c,d,e,f,g,h,i;this.tab=a.indent,f=a.level===z,d=[],i=this.expressions;for(g=0,h=i.length;g<h;g++)e=i[g],e=e.unwrapAll(),e=e.unfoldSoak(a)||e,e instanceof b?d.push(e.compileNode(a)):f?(e.front=!0,c=e.compile(a),e.isStatement(a)||(c=""+this.tab+c+";",e instanceof A&&(c=""+c+"\n")),d.push(c)):d.push(e.compile(a,w));if(f)return this.spaced?"\n"+d.join("\n\n")+"\n":d.join("\n");c=d.join(", ")||"void 0";return d.length>1&&a.level>=w?"("+c+")":c},b.prototype.compileRoot=function(a){var b,c,d,e,f,g;a.indent=a.bare?"":R,a.scope=new N(null,this,null),a.level=z,this.spaced=!0,e="",a.bare||(f=function(){var a,b,e,f;e=this.expressions,f=[];for(d=a=0,b=e.length;a<b;d=++a){c=e[d];if(!(c.unwrap()instanceof k))break;f.push(c)}return f}.call(this),g=this.expressions.slice(f.length),this.expressions=f,f.length&&(e=""+this.compileNode(bd(a,{indent:""}))+"\n"),this.expressions=g),b=this.compileWithDeclarations(a);if(a.bare)return b;return""+e+"(function() {\n"+b+"\n}).call(this);\n"},b.prototype.compileWithDeclarations=function(a){var b,c,d,e,f,g,h,i,j,l,m,n,o,p;c=g="",n=this.expressions;for(f=l=0,m=n.length;l<m;f=++l){e=n[f],e=e.unwrap();if(!(e instanceof k||e instanceof A))break}a=bd(a,{level:z}),f&&(h=this.expressions.splice(f,9e9),o=[this.spaced,!1],j=o[0],this.spaced=o[1],p=[this.compileNode(a),j],c=p[0],this.spaced=p[1],this.expressions=h),g=this.compileNode(a),i=a.scope;if(i.expressions===this){d=a.scope.hasDeclarations(),b=i.hasAssignments;if(d||b)f&&(c+="\n"),c+=""+this.tab+"var ",d&&(c+=i.declaredVariables().join(", ")),b&&(d&&(c+=",\n"+(this.tab+R)),c+=i.assignedVariables().join(",\n"+(this.tab+R))),c+=";\n"}return c+g},b.wrap=function(a){if(a.length===1&&a[0]instanceof b)return a[0];return new b(a)};return b}(e),a.Literal=A=function(a){function b(a){this.value=a}bl(b,a),b.prototype.makeReturn=function(){return this.isStatement()?this:b.__super__.makeReturn.apply(this,arguments)},b.prototype.isAssignable=function(){return o.test(this.value)},b.prototype.isStatement=function(){var a;return(a=this.value)==="break"||a==="continue"||a==="debugger"},b.prototype.isComplex=D,b.prototype.assigns=function(a){return a===this.value},b.prototype.jumps=function(a){if(this.value==="break"&&!((a!=null?a.loop:void 0)||(a!=null?a.block:void 0)))return this;if(this.value==="continue"&&(a!=null?!a.loop:!void 0))return this},b.prototype.compileNode=function(a){var b,c;b=this.value==="this"?((c=a.scope.method)!=null?c.bound:void 0)?a.scope.method.context:this.value:this.value.reserved?'"'+this.value+'"':this.value;return this.isStatement()?""+this.tab+b+";":b},b.prototype.toString=function(){return' "'+this.value+'"'};return b}(e),a.Undefined=function(a){function b(){return b.__super__.constructor.apply(this,arguments)}bl(b,a),b.prototype.isAssignable=D,b.prototype.isComplex=D,b.prototype.compileNode=function(a){return a.level>=u?"(void 0)":"void 0"};return b}(e),a.Null=function(a){function b(){return b.__super__.constructor.apply(this,arguments)}bl(b,a),b.prototype.isAssignable=D,b.prototype.isComplex=D,b.prototype.compileNode=function(){return"null"};return b}(e),a.Bool=function(a){function b(a){this.val=a}bl(b,a),b.prototype.isAssignable=D,b.prototype.isComplex=D,b.prototype.compileNode=function(){return this.val};return b}(e),a.Return=K=function(a){function b(a){a&&!a.unwrap().isUndefined&&(this.expression=a)}bl(b,a),b.prototype.children=["expression"],b.prototype.isStatement=Y,b.prototype.makeReturn=S,b.prototype.jumps=S,b.prototype.compile=function(a,c){var d,e;d=(e=this.expression)!=null?e.makeReturn():void 0;return!d||d instanceof b?b.__super__.compile.call(this,a,c):d.compile(a,c)},b.prototype.compileNode=function(a){return this.tab+("return"+[this.expression?" "+this.expression.compile(a,y):void 0]+";")};return b}(e),a.Value=W=function(a){function b(a,c,d){if(!c&&a instanceof b)return a;this.base=a,this.properties=c||[],d&&(this[d]=!0);return this}bl(b,a),b.prototype.children=["base","properties"],b.prototype.add=function(a){this.properties=this.properties.concat(a);return this},b.prototype.hasProperties=function(){return!!this.properties.length},b.prototype.isArray=function(){return!this.properties.length&&this.base instanceof c},b.prototype.isComplex=function(){return this.hasProperties()||this.base.isComplex()},b.prototype.isAssignable=function(){return this.hasProperties()||this.base.isAssignable()},b.prototype.isSimpleNumber=function(){return this.base instanceof A&&L.test(this.base.value)},b.prototype.isString=function(){return this.base instanceof A&&q.test(this.base.value)},b.prototype.isAtomic=function(){var a,b,c,d;d=this.properties.concat(this.base);for(b=0,c=d.length;b<c;b++){a=d[b];if(a.soak||a instanceof g)return!1}return!0},b.prototype.isStatement=function(a){return!this.properties.length&&this.base.isStatement(a)},b.prototype.assigns=function(a){return!this.properties.length&&this.base.assigns(a)},b.prototype.jumps=function(a){return!this.properties.length&&this.base.jumps(a)},b.prototype.isObject=function(a){if(this.properties.length)return!1;return this.base instanceof E&&(!a||this.base.generated)},b.prototype.isSplice=function(){return bc(this.properties)instanceof O},b.prototype.unwrap=function(){return this.properties.length?this:this.base},b.prototype.cacheReference=function(a){var c,e,f,g;f=bc(this.properties);if(this.properties.length<2&&!this.base.isComplex()&&(f!=null?!f.isComplex():!void 0))return[this,this];c=new b(this.base,this.properties.slice(0,-1)),c.isComplex()&&(e=new A(a.scope.freeVariable("base")),c=new b(new H(new d(e,c))));if(!f)return[c,e];f.isComplex()&&(g=new A(a.scope.freeVariable("name")),f=new t(new d(g,f.index)),g=new t(g));return[c.add(f),new b(e||c.base,[g||f])]},b.prototype.compileNode=function(a){var b,c,d,e,f;this.base.front=this.front,d=this.properties,b=this.base.compile(a,d.length?u:null),(this.base instanceof H||d.length)&&L.test(b)&&(b=""+b+".");for(e=0,f=d.length;e<f;e++)c=d[e],b+=c.compile(a);return b},b.prototype.unfoldSoak=function(a){var c,e=this;if(this.unfoldedSoak!=null)return this.unfoldedSoak;c=function(){var c,f,g,h,i,j,k,m,n;if(g=e.base.unfoldSoak(a)){Array.prototype.push.apply(g.body.properties,e.properties);return g}n=e.properties;for(f=k=0,m=n.length;k<m;f=++k){h=n[f];if(!h.soak)continue;h.soak=!1,c=new b(e.base,e.properties.slice(0,f)),j=new b(e.base,e.properties.slice(f)),c.isComplex()&&(i=new A(a.scope.freeVariable("ref")),c=new H(new d(i,c)),j.base=i);return new r(new l(c),j,{soak:!0})}return null}();return this.unfoldedSoak=c||!1};return b}(e),a.Comment=k=function(a){function b(a){this.comment=a}bl(b,a),b.prototype.isStatement=Y,b.prototype.makeReturn=S,b.prototype.compileNode=function(a,b){var c;c="/*"+be(this.comment,this.tab)+("\n"+this.tab+"*/\n"),(b||a.level)===z&&(c=a.indent+c);return c};return b}(e),a.Call=g=function(a){function c(a,b,c){this.args=b!=null?b:[],this.soak=c,this.isNew=!1,this.isSuper=a==="super",this.variable=this.isSuper?null:a}bl(c,a),c.prototype.children=["variable","args"],c.prototype.newInstance=function(){var a,b;a=((b=this.variable)!=null?b.base:void 0)||this.variable,a instanceof c&&!a.isNew?a.newInstance():this.isNew=!0;return this},c.prototype.superReference=function(a){var c,d,e;d=a.scope.namedMethod();if(!d)throw SyntaxError("cannot call super outside of a function.");e=d.name;if(e==null)throw SyntaxError("cannot call super on an anonymous function.");if(d.klass){c=[new b(new A("__super__"))],d["static"]&&c.push(new b(new A("constructor"))),c.push(new b(new A(e)));return(new W(new A(d.klass),c)).compile(a)}return""+e+".__super__.constructor"},c.prototype.superThis=function(a){var b;b=a.scope.method;return b&&!b.klass&&b.context||"this"},c.prototype.unfoldSoak=function(a){var b,d,e,f,g,h,i,j,k;if(this.soak){if(this.variable){if(d=bg(a,this,"variable"))return d;j=(new W(this.variable)).cacheReference(a),e=j[0],g=j[1]}else e=new A(this.superReference(a)),g=new W(e);g=new c(g,this.args),g.isNew=this.isNew,e=new A("typeof "+e.compile(a)+' === "function"');return new r(e,new W(g),{soak:!0})}b=this,f=[];for(;;){if(b.variable instanceof c){f.push(b),b=b.variable;continue}if(!(b.variable instanceof W))break;f.push(b);if(!((b=b.variable.base)instanceof c))break}k=f.reverse();for(h=0,i=k.length;h<i;h++)b=k[h],d&&(b.variable instanceof c?b.variable=d:b.variable.base=d),d=bg(a,b,"variable");return d},c.prototype.filterImplicitObjects=function(a){var b,c,e,f,g,h,i,j,l,m;c=[];for(h=0,j=a.length;h<j;h++){b=a[h];if(!((typeof b.isObject=="function"?b.isObject():void 0)&&b.base.generated)){c.push(b);continue}e=null,m=b.base.properties;for(i=0,l=m.length;i<l;i++)f=m[i],f instanceof d||f instanceof k?(e||c.push(e=new E(g=[],!0)),g.push(f)):(c.push(f),e=null)}return c},c.prototype.compileNode=function(a){var b,c,d,e;(e=this.variable)!=null&&(e.front=this.front);if(d=P.compileSplattedArray(a,this.args,!0))return this.compileSplat(a,d);c=this.filterImplicitObjects(this.args),c=function(){var d,e,f;f=[];for(d=0,e=c.length;d<e;d++)b=c[d],f.push(b.compile(a,w));return f}().join(", ");return this.isSuper?this.superReference(a)+(".call("+this.superThis(a)+(c&&", "+c)+")"):(this.isNew?"new ":"")+this.variable.compile(a,u)+("("+c+")")},c.prototype.compileSuper=function(a,b){return""+this.superReference(b)+".call("+this.superThis(b)+(a.length?", ":"")+a+")"},c.prototype.compileSplat=function(a,b){var c,d,e,f,g;if(this.isSuper)return""+this.superReference(a)+".apply("+this.superThis(a)+", "+b+")";if(this.isNew){e=this.tab+R;return"(function(func, args, ctor) {\n"+e+"ctor.prototype = func.prototype;\n"+e+"var child = new ctor, result = func.apply(child, args), t = typeof result;\n"+e+'return t == "object" || t == "function" ? result || child : child;\n'+this.tab+"})("+this.variable.compile(a,w)+", "+b+", function(){})"}c=new W(this.variable),(f=c.properties.pop())&&c.isComplex()?(g=a.scope.freeVariable("ref"),d="("+g+" = "+c.compile(a,w)+")"+f.compile(a)):(d=c.compile(a,u),L.test(d)&&(d="("+d+")"),f?(g=d,d+=f.compile(a)):g="null");return""+d+".apply("+g+", "+b+")"};return c}(e),a.Extends=m=function(a){function b(a,b){this.child=a,this.parent=b}bl(b,a),b.prototype.children=["child","parent"],b.prototype.compile=function(a){return(new g(new W(new A(bh("extends"))),[this.child,this.parent])).compile(a)};return b}(e),a.Access=b=function(a){function b(a,b){this.name=a,this.name.asKey=!0,this.soak=b==="soak"}bl(b,a),b.prototype.children=["name"],b.prototype.compile=function(a){var b;b=this.name.compile(a);return o.test(b)?"."+b:"["+b+"]"},b.prototype.isComplex=D;return b}(e),a.Index=t=function(a){function b(a){this.index=a}bl(b,a),b.prototype.children=["index"],b.prototype.compile=function(a){return"["+this.index.compile(a,y)+"]"},b.prototype.isComplex=function(){return this.index.isComplex()};return b}(e),a.Range=J=function(a){function b(a,b,c){this.from=a,this.to=b,this.exclusive=c==="exclusive",this.equals=this.exclusive?"":"="}bl(b,a),b.prototype.children=["from","to"],b.prototype.compileVariables=function(a){var b,c,d,e,f;a=bd(a,{top:!0}),c=this.from.cache(a,w),this.fromC=c[0],this.fromVar=c[1],d=this.to.cache(a,w),this.toC=d[0],this.toVar=d[1];if(b=$(a,"step"))e=b.cache(a,w),this.step=e[0],this.stepVar=e[1];f=[this.fromVar.match(L),this.toVar.match(L)],this.fromNum=f[0],this.toNum=f[1];if(this.stepVar)return this.stepNum=this.stepVar.match(L)},b.prototype.compileNode=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o;this.fromVar||this.compileVariables(a);if(!a.index)return this.compileArray(a);h=this.fromNum&&this.toNum,f=$(a,"index"),g=$(a,"name"),j=g&&g!==f,m=""+f+" = "+this.fromC,this.toC!==this.toVar&&(m+=", "+this.toC),this.step!==this.stepVar&&(m+=", "+this.step),n=[""+f+" <"+this.equals,""+f+" >"+this.equals],i=n[0],e=n[1],c=this.stepNum?+this.stepNum>0?""+i+" "+this.toVar:""+e+" "+this.toVar:h?(o=[+this.fromNum,+this.toNum],d=o[0],l=o[1],o,d<=l?""+i+" "+l:""+e+" "+l):(b=""+this.fromVar+" <= "+this.toVar,""+b+" ? "+i+" "+this.toVar+" : "+e+" "+this.toVar),k=this.stepVar?""+f+" += "+this.stepVar:h?j?d<=l?"++"+f:"--"+f:d<=l?""+f+"++":""+f+"--":j?""+b+" ? ++"+f+" : --"+f:""+b+" ? "+f+"++ : "+f+"--",j&&(m=""+g+" = "+m),j&&(k=""+g+" = "+k);return""+m+"; "+c+"; "+k},b.prototype.compileArray=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p;if(this.fromNum&&this.toNum&&Math.abs(this.fromNum-this.toNum)<=20){j=function(){p=[];for(var a=n=+this.fromNum,b=+this.toNum;n<=b?a<=b:a>=b;n<=b?a++:a--)p.push(a);return p}.apply(this),this.exclusive&&j.pop();return"["+j.join(", ")+"]"}g=this.tab+R,f=a.scope.freeVariable("i"),k=a.scope.freeVariable("results"),i="\n"+g+k+" = [];",this.fromNum&&this.toNum?(a.index=f,c=this.compileNode(a)):(l=""+f+" = "+this.fromC+(this.toC!==this.toVar?", "+this.toC:""),d=""+this.fromVar+" <= "+this.toVar,c="var "+l+"; "+d+" ? "+f+" <"+this.equals+" "+this.toVar+" : "+f+" >"+this.equals+" "+this.toVar+"; "+d+" ? "+f+"++ : "+f+"--"),h="{ "+k+".push("+f+"); }\n"+g+"return "+k+";\n"+a.indent,e=function(a){return a!=null?a.contains(function(a){return a instanceof A&&a.value==="arguments"&&!a.asKey}):void 0};if(e(this.from)||e(this.to))b=", arguments";return"(function() {"+i+"\n"+g+"for ("+c+")"+h+"}).apply(this"+(b!=null?b:"")+")"};return b}(e),a.Slice=O=function(a){function b(a){this.range=a,b.__super__.constructor.call(this)}bl(b,a),b.prototype.children=["range"],b.prototype.compileNode=function(a){var b,c,d,e,f,g;g=this.range,e=g.to,c=g.from,d=c&&c.compile(a,y)||"0",b=e&&e.compile(a,y),e&&(!!this.range.exclusive||+b!==-1)&&(f=", "+(this.range.exclusive?b:L.test(b)?""+(+b+1):(b=e.compile(a,u),""+b+" + 1 || 9e9")));return".slice("+d+(f||"")+")"};return b}(e),a.Obj=E=function(a){function b(a,b){this.generated=b!=null?b:!1,this.objects=this.properties=a||[]}bl(b,a),b.prototype.children=["properties"],b.prototype.compileNode=function(a){var b,c,e,f,g,h,i,j,l,m,n,o,p,q,r,s;n=this.properties,m=[],s=this.properties;for(o=0,q=s.length;o<q;o++){j=s[o],j.isComplex()&&(j=j.variable);if(j!=null){l=j.unwrapAll().value.toString();if(bm.call(m,l)>=0)throw SyntaxError('multiple object literal properties named "'+l+'"');m.push(l)}}if(!n.length)return this.front?"({})":"{}";if(this.generated)for(p=0,r=n.length;p<r;p++){h=n[p];if(h instanceof W)throw new Error("cannot have an implicit value in an implicit object")}c=a.indent+=R,g=this.lastNonComment(this.properties),n=function(){var h,i,l;l=[];for(b=h=0,i=n.length;h<i;b=++h)j=n[b],f=b===n.length-1?"":j===g||j instanceof k?"\n":",\n",e=j instanceof k?"":c,j instanceof W&&j["this"]&&(j=new d(j.properties[0].name,j,"object")),j instanceof k||(j instanceof d||(j=new d(j,j,"object")),(j.variable.base||j.variable).asKey=!0),l.push(e+j.compile(a,z)+f);return l}(),n=n.join(""),i="{"+(n&&"\n"+n+"\n"+this.tab)+"}";return this.front?"("+i+")":i},b.prototype.assigns=function(a){var b,c,d,e;e=this.properties;for(c=0,d=e.length;c<d;c++){b=e[c];if(b.assigns(a))return!0}return!1};return b}(e),a.Arr=c=function(a){function b(a){this.objects=a||[]}bl(b,a),b.prototype.children=["objects"],b.prototype.filterImplicitObjects=g.prototype.filterImplicitObjects,b.prototype.compileNode=function(a){var b,c,d;if(!this.objects.length)return"[]";a.indent+=R,d=this.filterImplicitObjects(this.objects);if(b=P.compileSplattedArray(a,d))return b;b=function(){var b,e,f;f=[];for(b=0,e=d.length;b<e;b++)c=d[b],f.push(c.compile(a,w));return f}().join(", ");return b.indexOf("\n")>=0?"[\n"+a.indent+b+"\n"+this.tab+"]":"["+b+"]"},b.prototype.assigns=function(a){var b,c,d,e;e=this.objects;for(c=0,d=e.length;c<d;c++){b=e[c];if(b.assigns(a))return!0}return!1};return b}(e),a.Class=h=function(a){function c(a,b,c){this.variable=a,this.parent=b,this.body=c!=null?c:new f,this.boundFuncs=[],this.body.classBody=!0}bl(c,a),c.prototype.children=["variable","parent","body"],c.prototype.determineName=function(){var a,c;if(!this.variable)return null;a=(c=bc(this.variable.properties))?c instanceof b&&c.name.value:this.variable.base.value;if(bm.call(M,a)>=0)throw SyntaxError("variable name may not be "+a);return a&&(a=o.test(a)&&a)},c.prototype.setContext=function(a){return this.body.traverseChildren(!1,function(b){if(b.classBody)return!1;if(b instanceof A&&b.value==="this")return b.value=a;if(b instanceof j){b.klass=a;if(b.bound)return b.context=a}})},c.prototype.addBoundFunctions=function(a){var c,d,e,f,g,h;if(this.boundFuncs.length){g=this.boundFuncs,h=[];for(e=0,f=g.length;e<f;e++)c=g[e],d=(new W(new A("this"),[new b(c)])).compile(a),h.push(this.ctor.body.unshift(new A(""+d+" = "+bh("bind")+"("+d+", this)")));return h}},c.prototype.addProperties=function(a,c,e){var f,g,h,i,k;k=a.base.properties.slice(0),h=function(){var a;a=[];while(f=k.shift()){if(f instanceof d){g=f.variable.base,delete f.context,i=f.value;if(g.value==="constructor"){if(this.ctor)throw new Error("cannot define more than one constructor in a class");if(i.bound)throw new Error("cannot define a constructor as a bound function");i instanceof j?f=this.ctor=i:(this.externalCtor=e.scope.freeVariable("class"),f=new d(new A(this.externalCtor),i))}else f.variable["this"]?(i["static"]=!0,i.bound&&(i.context=c)):(f.variable=new W(new A(c),[new b(new A("prototype")),new b(g)]),i instanceof j&&i.bound&&(this.boundFuncs.push(g),i.bound=!1))}a.push(f)}return a}.call(this);return Z(h)},c.prototype.walkBody=function(a,b){var d=this;return this.traverseChildren(!1,function(e){var g,h,i,j,k,l;if(e instanceof c)return!1;if(e instanceof f){l=g=e.expressions;for(h=j=0,k=l.length;j<k;h=++j)i=l[h],i instanceof W&&i.isObject(!0)&&(g[h]=d.addProperties(i,a,b));return e.expressions=g=bb(g)}})},c.prototype.hoistDirectivePrologue=function(){var a,b,c;b=0,a=this.body.expressions;while((c=a[b])&&c instanceof k||c instanceof W&&c.isString())++b;return this.directives=a.splice(0,b)},c.prototype.ensureConstructor=function(a){this.ctor||(this.ctor=new j,this.parent&&this.ctor.body.push(new A(""+a+".__super__.constructor.apply(this, arguments)")),this.externalCtor&&this.ctor.body.push(new A(""+this.externalCtor+".apply(this, arguments)")),this.ctor.body.makeReturn(),this.body.expressions.unshift(this.ctor)),this.ctor.ctor=this.ctor.name=a,this.ctor.klass=null;return this.ctor.noReturn=!0},c.prototype.compileNode=function(a){var b,c,e,f,g,h,k;c=this.determineName(),g=c||"_Class",g.reserved&&(g="_"+g),f=new A(g),this.hoistDirectivePrologue(),this.setContext(g),this.walkBody(g,a),this.ensureConstructor(g),this.body.spaced=!0,this.ctor instanceof j||this.body.expressions.unshift(this.ctor),this.body.expressions.push(f),(k=this.body.expressions).unshift.apply(k,this.directives),this.addBoundFunctions(a),b=i.wrap(this.body),this.parent&&(this.superClass=new A(a.scope.freeVariable("super",!1)),this.body.expressions.unshift(new m(f,this.superClass)),b.args.push(this.parent),h=b.variable.params||b.variable.base.params,h.push(new G(this.superClass))),e=new H(b,!0),this.variable&&(e=new d(this.variable,e));return e.compile(a)};return c}(e),a.Assign=d=function(a){function c(a,b,c,d){var e,f,g;this.variable=a,this.value=b,this.context=c,this.param=d&&d.param,this.subpattern=d&&d.subpattern,e=(g=f=this.variable.unwrapAll().value,bm.call(M,g)>=0);if(e&&this.context!=="object")throw SyntaxError('variable name may not be "'+f+'"')}bl(c,a),c.prototype.children=["variable","value"],c.prototype.isStatement=function(a){return(a!=null?a.level:void 0)===z&&this.context!=null&&bm.call(this.context,"?")>=0},c.prototype.assigns=function(a){return this[this.context==="object"?"value":"variable"].assigns(a)},c.prototype.unfoldSoak=function(a){return bg(a,this,"variable")},c.prototype.compileNode=function(a){var b,c,d,e,f,g,h,i,k;if(b=this.variable instanceof W){if(this.variable.isArray()||this.variable.isObject())return this.compilePatternMatch(a);if(this.variable.isSplice())return this.compileSplice(a);if((g=this.context)==="||="||g==="&&="||g==="?=")return this.compileConditional(a)}d=this.variable.compile(a,w);if(!this.context){if(!(f=this.variable.unwrapAll()).isAssignable())throw SyntaxError('"'+this.variable.compile(a)+'" cannot be assigned.');if(typeof f.hasProperties=="function"?!f.hasProperties():!void 0)this.param?a.scope.add(d,"var"):a.scope.find(d)}this.value instanceof j&&(c=B.exec(d))&&(c[1]&&(this.value.klass=c[1]),this.value.name=(h=(i=(k=c[2])!=null?k:c[3])!=null?i:c[4])!=null?h:c[5]),e=this.value.compile(a,w);if(this.context==="object")return""+d+": "+e;e=d+(" "+(this.context||"=")+" ")+e;return a.level<=w?e:"("+e+")"},c.prototype.compilePatternMatch=function(a){var d,e,f,g,h,i,j,k,l,m,n,p,q,r,s,u,v,y,B,C,D,E,F,G,J,K,L;s=a.level===z,v=this.value,m=this.variable.base.objects;if(!(n=m.length)){f=v.compile(a);return a.level>=x?"("+f+")":f}i=this.variable.isObject();if(s&&n===1&&!((l=m[0])instanceof P)){l instanceof c?(D=l,E=D.variable,h=E.base,l=D.value):l.base instanceof H?(F=(new W(l.unwrapAll())).cacheReference(a),l=F[0],h=F[1]):h=i?l["this"]?l.properties[0].name:l:new A(0),d=o.test(h.unwrap().value||0),v=new W(v),v.properties.push(new(d?b:t)(h));if(G=l.unwrap().value,bm.call(I,G)>=0)throw new SyntaxError("assignment to a reserved word: "+l.compile(a)+" = "+v.compile(a));return(new c(l,v,null,{param:this.param})).compile(a,z)}y=v.compile(a,w),e=[],r=!1;if(!o.test(y)||this.variable.assigns(y))e.push(""+(p=a.scope.freeVariable("ref"))+" = "+y),y=p;for(g=B=0,C=m.length;B<C;g=++B){l=m[g],h=g,i&&(l instanceof c?(J=l,K=J.variable,h=K.base,l=J.value):l.base instanceof H?(L=(new W(l.unwrapAll())).cacheReference(a),l=L[0],h=L[1]):h=l["this"]?l.properties[0].name:l);if(!r&&l instanceof P)k=l.name.unwrap().value,l=l.unwrap(),u=""+n+" <= "+y+".length ? "+bh("slice")+".call("+y+", "+g,(q=n-g-1)?(j=a.scope.freeVariable("i"),u+=", "+j+" = "+y+".length - "+q+") : ("+j+" = "+g+", [])"):u+=") : []",u=new A(u),r=""+j+"++";else{k=l.unwrap().value;if(l instanceof P){l=l.name.compile(a);throw new SyntaxError("multiple splats are disallowed in an assignment: "+l+"...")}typeof h=="number"?(h=new A(r||h),d=!1):d=i&&o.test(h.unwrap().value||0),u=new W(new A(y),[new(d?b:t)(h)])}if(k!=null&&bm.call(I,k)>=0)throw new SyntaxError("assignment to a reserved word: "+l.compile(a)+" = "+u.compile(a));e.push((new c(l,u,null,{param:this.param,subpattern:!0})).compile(a,w))}!s&&!this.subpattern&&e.push(y),f=e.join(", ");return a.level<w?f:"("+f+")"},c.prototype.compileConditional=function(a){var b,d,e;e=this.variable.cacheReference(a),b=e[0],d=e[1];if(!b.properties.length&&b.base instanceof A&&b.base.value!=="this"&&!a.scope.check(b.base.value))throw new Error('the variable "'+b.base.value+"\" can't be assigned with "+this.context+" because it has not been defined.");bm.call(this.context,"?")>=0&&(a.isExistentialEquals=!0);return(new F(this.context.slice(0,-1),b,new c(d,this.value,"="))).compile(a)},c.prototype.compileSplice=function(a){var b,c,d,e,f,g,h,i,j,k,l,m;k=this.variable.properties.pop().range,d=k.from,h=k.to,c=k.exclusive,g=this.variable.compile(a),l=(d!=null?d.cache(a,x):void 0)||["0","0"],e=l[0],f=l[1],h?(d!=null?d.isSimpleNumber():void 0)&&h.isSimpleNumber()?(h=+h.compile(a)- +f,c||(h+=1)):(h=h.compile(a,u)+" - "+f,c||(h+=" + 1")):h="9e9",m=this.value.cache(a,w),i=m[0],j=m[1],b="[].splice.apply("+g+", ["+e+", "+h+"].concat("+i+")), "+j;return a.level>z?"("+b+")":b};return c}(e),a.Code=j=function(a){function b(a,b,c){this.params=a||[],this.body=b||new f,this.bound=c==="boundfunc",this.bound&&(this.context="_this")}bl(b,a),b.prototype.children=["params","body"],b.prototype.isStatement=function(){return!!this.ctor},b.prototype.jumps=D,b.prototype.compileNode=function(a){var b,e,f,g,h,i,j,k,l,m,n,o,p,q,s,t,v,w,x,y,z,B,C,D,E,G,H,I,J,K,L,M,O;a.scope=new N(a.scope,this.body,this),a.scope.shared=$(a,"sharedScope"),a.indent+=R,delete a.bare,delete a.isExistentialEquals,l=[],e=[],H=this.paramNames();for(s=0,x=H.length;s<x;s++)i=H[s],a.scope.check(i)||a.scope.parameter(i);I=this.params;for(t=0,y=I.length;t<y;t++){k=I[t];if(!k.splat)continue;J=this.params;for(v=0,z=J.length;v<z;v++)j=J[v].name,j["this"]&&(j=j.properties[0].name),j.value&&a.scope.add(j.value,"var",!0);n=new d(new W(new c(function(){var b,c,d,e;d=this.params,e=[];for(b=0,c=d.length;b<c;b++)j=d[b],e.push(j.asReference(a));return e}.call(this))),new W(new A("arguments")));break}K=this.params;for(w=0,B=K.length;w<B;w++)k=K[w],k.isComplex()?(p=m=k.asReference(a),k.value&&(p=new F("?",m,k.value)),e.push(new d(new W(k.name),p,"=",{param:!0}))):(m=k,k.value&&(h=new A(m.name.value+" == null"),p=new d(new W(k.name),k.value,"="),e.push(new r(h,p)))),n||l.push(m);q=this.body.isEmpty(),n&&e.unshift(n),e.length&&(L=this.body.expressions).unshift.apply(L,e);for(f=E=0,C=l.length;E<C;f=++E)j=l[f],a.scope.parameter(l[f]=j.compile(a));o=[],M=this.paramNames();for(G=0,D=M.length;G<D;G++){i=M[G];if(bm.call(o,i)>=0)throw SyntaxError("multiple parameters named '"+i+"'");o.push(i)}!q&&!this.noReturn&&this.body.makeReturn(),this.bound&&(((O=a.scope.parent.method)!=null?O.bound:void 0)?this.bound=this.context=a.scope.parent.method.context:this["static"]||a.scope.parent.assign("_this","this")),g=a.indent,b="function",this.ctor&&(b+=" "+this.name),b+="("+l.join(", ")+") {",this.body.isEmpty()||(b+="\n"+this.body.compileWithDeclarations(a)+"\n"+this.tab),b+="}";if(this.ctor)return this.tab+b;return this.front||a.level>=u?"("+b+")":b},b.prototype.paramNames=function(){var a,b,c,d,e;a=[],e=this.params;for(c=0,d=e.length;c<d;c++)b=e[c],a.push.apply(a,b.names());return a},b.prototype.traverseChildren=function(a,c){if(a)return b.__super__.traverseChildren.call(this,a,c)};return b}(e),a.Param=G=function(a){function b(a,b,c){var d;this.name=a,this.value=b,this.splat=c;if(d=a=this.name.unwrapAll().value,bm.call(M,d)>=0)throw SyntaxError('parameter name "'+a+'" is not allowed')}bl(b,a),b.prototype.children=["name","value"],b.prototype.compile=function(a){return this.name.compile(a,w)},b.prototype.asReference=function(a){var b;if(this.reference)return this.reference;b=this.name,b["this"]?(b=b.properties[0].name,b.value.reserved&&(b=new A(a.scope.freeVariable(b.value)))):b.isComplex()&&(b=new A(a.scope.freeVariable("arg"))),b=new W(b),this.splat&&(b=new P(b));return this.reference=b},b.prototype.isComplex=function(){return this.name.isComplex()},b.prototype.names=function(a){var b,c,e,f,g,h;a==null&&(a=this.name),b=function(a){var b;b=a.properties[0].name.value;return b.reserved?[]:[b]};if(a instanceof A)return[a.value];if(a instanceof W)return b(a);c=[],h=a.objects;for(f=0,g=h.length;f<g;f++){e=h[f];if(e instanceof d)c.push(e.value.unwrap().value);else if(e instanceof P)c.push(e.name.unwrap().value);else if(e instanceof W)e.isArray()||e.isObject()?c.push.apply(c,this.names(e.base)):e["this"]?c.push.apply(c,b(e)):c.push(e.base.value);else throw SyntaxError("illegal parameter "+e.compile())}return c};return b}(e),a.Splat=P=function(a){function b(a){this.name=a.compile?a:new A(a)}bl(b,a),b.prototype.children=["name"],b.prototype.isAssignable=Y,b.prototype.assigns=function(a){return this.name.assigns(a)},b.prototype.compile=function(a){return this.index!=null?this.compileParam(a):this.name.compile(a)},b.prototype.unwrap=function(){return this.name},b.compileSplattedArray=function(a,c,d){var e,f,g,h,i,j,k,l;i=-1;while((j=c[++i])&&!(j instanceof b))continue;if(i>=c.length)return"";if(c.length===1){g=c[0].compile(a,w);if(d)return g;return""+bh("slice")+".call("+g+")"}e=c.slice(i);for(h=k=0,l=e.length;k<l;h=++k)j=e[h],g=j.compile(a,w),e[h]=j instanceof b?""+bh("slice")+".call("+g+")":"["+g+"]";if(i===0)return e[0]+(".concat("+e.slice(1).join(", ")+")");f=function(){var b,d,e,f;e=c.slice(0,i),f=[];for(b=0,d=e.length;b<d;b++)j=e[b],f.push(j.compile(a,w));return f}();return"["+f.join(", ")+"].concat("+e.join(", ")+")"};return b}(e),a.While=X=function(a){function b(a,b){this.condition=(b!=null?b.invert:void 0)?a.invert():a,this.guard=b!=null?b.guard:void 0}bl(b,a),b.prototype.children=["condition","guard","body"],b.prototype.isStatement=Y,b.prototype.makeReturn=function(a){if(a)return b.__super__.makeReturn.apply(this,arguments);this.returns=!this.jumps({loop:!0});return this},b.prototype.addBody=function(a){this.body=a;return this},b.prototype.jumps=function(){var a,b,c,d;a=this.body.expressions;if(!a.length)return!1;for(c=0,d=a.length;c<d;c++){b=a[c];if(b.jumps({loop:!0}))return b}return!1},b.prototype.compileNode=function(a){var b,c,d,e;a.indent+=R,e="",b=this.body,b.isEmpty()?b="":(this.returns&&(b.makeReturn(d=a.scope.freeVariable("results")),e=""+this.tab+d+" = [];\n"),this.guard&&(b.expressions.length>1?b.expressions.unshift(new r((new H(this.guard)).invert(),new A("continue"))):this.guard&&(b=f.wrap([new r(this.guard,b)]))),b="\n"+b.compile(a,z)+"\n"+this.tab),c=e+this.tab+("while ("+this.condition.compile(a,y)+") {"+b+"}"),this.returns&&(c+="\n"+this.tab+"return "+d+";");return c};return b}(e),a.Op=F=function(a){function e(a,c,d,e){if(a==="in")return new s(c,d);if(a==="do")return this.generateDo(c);if(a==="new"){if(c instanceof g&&!c["do"]&&!c.isNew)return c.newInstance();if(c instanceof j&&c.bound||c["do"])c=new H(c)}this.operator=b[a]||a,this.first=c,this.second=d,this.flip=!!e;return this}var b,c;bl(e,a),b={"==":"===","!=":"!==",of:"in"},c={"!==":"===","===":"!=="},e.prototype.children=["first","second"],e.prototype.isSimpleNumber=D,e.prototype.isUnary=function(){return!this.second},e.prototype.isComplex=function(){var a;return!this.isUnary()||(a=this.operator)!=="+"&&a!=="-"||this.first.isComplex()},e.prototype.isChainable=function(){var a;return(a=this.operator)==="<"||a===">"||a===">="||a==="<="||a==="==="||a==="!=="},e.prototype.invert=function(){var a,b,d,f,g;if(this.isChainable()&&this.first.isChainable()){a=!0,b=this;while(b&&b.operator)a&&(a=b.operator in c),b=b.first;if(!a)return(new H(this)).invert();b=this;while(b&&b.operator)b.invert=!b.invert,b.operator=c[b.operator],b=b.first;return this}if(f=c[this.operator]){this.operator=f,this.first.unwrap()instanceof e&&this.first.invert();return this}return this.second?(new H(this)).invert():this.operator==="!"&&(d=this.first.unwrap())instanceof e&&((g=d.operator)==="!"||g==="in"||g==="instanceof")?d:new e("!",this)},e.prototype.unfoldSoak=function(a){var b;return((b=this.operator)==="++"||b==="--"||b==="delete")&&bg(a,this,"first")},e.prototype.generateDo=function(a){var b,c,e,f,h,i,k,l;f=[],c=a instanceof d&&(h=a.value.unwrap())instanceof j?h:a,l=c.params||[];for(i=0,k=l.length;i<k;i++)e=l[i],e.value?(f.push(e.value),delete e.value):f.push(e);b=new g(a,f),b["do"]=!0;return b},e.prototype.compileNode=function(a){var b,c,d,e;c=this.isChainable()&&this.first.isChainable(),c||(this.first.front=this.front);if(this.operator==="delete"&&a.scope.check(this.first.unwrapAll().value))throw SyntaxError("delete operand may not be argument or var");if(((d=this.operator)==="--"||d==="++")&&(e=this.first.unwrapAll().value,bm.call(M,e)>=0))throw SyntaxError("prefix increment/decrement may not have eval or arguments operand");if(this.isUnary())return this.compileUnary(a);if(c)return this.compileChain(a);if(this.operator==="?")return this.compileExistence(a);b=this.first.compile(a,x)+" "+this.operator+" "+this.second.compile(a,x);return a.level<=x?b:"("+b+")"},e.prototype.compileChain=function(a){var b,c,d,e;e=this.first.second.cache(a),this.first.second=e[0],d=e[1],c=this.first.compile(a,x),b=""+c+" "+(this.invert?"&&":"||")+" "+d.compile(a)+" "+this.operator+" "+this.second.compile(a,x);return"("+b+")"},e.prototype.compileExistence=function(a){var b,c;this.first.isComplex()?(c=new A(a.scope.freeVariable("ref")),b=new H(new d(c,this.first))):(b=this.first,c=b);return(new r(new l(b),c,{type:"if"})).addElse(this.second).compile(a)},e.prototype.compileUnary=function(a){var b,c,d;if(a.level>=u)return(new H(this)).compile(a);c=[b=this.operator],d=b==="+"||b==="-",(b==="new"||b==="typeof"||b==="delete"||d&&this.first instanceof e&&this.first.operator===b)&&c.push(" ");if(d&&this.first instanceof e||b==="new"&&this.first.isStatement(a))this.first=new H(this.first);c.push(this.first.compile(a,x)),this.flip&&c.reverse();return c.join("")},e.prototype.toString=function(a){return e.__super__.toString.call(this,a,this.constructor.name+" "+this.operator)};return e}(e),a.In=s=function(a){function b(a,b){this.object=a,this.array=b}bl(b,a),b.prototype.children=["object","array"],b.prototype.invert=C,b.prototype.compileNode=function(a){var b,c,d,e,f;if(this.array instanceof W&&this.array.isArray()){f=this.array.base.objects;for(d=0,e=f.length;d<e;d++){c=f[d];if(!(c instanceof P))continue;b=!0;break}if(!b)return this.compileOrTest(a)}return this.compileLoopTest(a)},b.prototype.compileOrTest=function(a){var b,c,d,e,f,g,h,i,j;if(this.array.base.objects.length===0)return""+!!this.negated;i=this.object.cache(a,x),g=i[0],f=i[1],j=this.negated?[" !== "," && "]:[" === "," || "],b=j[0],c=j[1],h=function(){var c,h,i,j;i=this.array.base.objects,j=[];for(d=c=0,h=i.length;c<h;d=++c)e=i[d],j.push((d?f:g)+b+e.compile(a,u));return j}.call(this),h=h.join(c);return a.level<x?h:"("+h+")"},b.prototype.compileLoopTest=function(a){var b,c,d,e;e=this.object.cache(a,w),d=e[0],c=e[1],b=bh("indexOf")+(".call("+this.array.compile(a,w)+", "+c+") ")+(this.negated?"< 0":">= 0");if(d===c)return b;b=d+", "+b;return a.level<w?b:"("+b+")"},b.prototype.toString=function(a){return b.__super__.toString.call(this,a,this.constructor.name+(this.negated?"!":""))};return b}(e),a.Try=U=function(a){function b(a,b,c,d){this.attempt=a,this.error=b,this.recovery=c,this.ensure=d}bl(b,a),b.prototype.children=["attempt","recovery","ensure"],b.prototype.isStatement=Y,b.prototype.jumps=function(a){var b;return this.attempt.jumps(a)||((b=this.recovery)!=null?b.jumps(a):void 0)},b.prototype.makeReturn=function(a){this.attempt&&(this.attempt=this.attempt.makeReturn(a)),this.recovery&&(this.recovery=this.recovery.makeReturn(a));return this},b.prototype.compileNode=function(a){var b,c,d,e;a.indent+=R,d=this.error?" ("+this.error.compile(a)+") ":" ",e=this.attempt.compile(a,z),b=function(){var b;if(this.recovery){if(b=this.error.value,bm.call(M,b)>=0)throw SyntaxError('catch variable may not be "'+this.error.value+'"');a.scope.check(this.error.value)||a.scope.add(this.error.value,"param");return" catch"+d+"{\n"+this.recovery.compile(a,z)+"\n"+this.tab+"}"}if(!this.ensure&&!this.recovery)return" catch (_error) {}"}.call(this),c=this.ensure?" finally {\n"+this.ensure.compile(a,z)+"\n"+this.tab+"}":"";return""+this.tab+"try {\n"+e+"\n"+this.tab+"}"+(b||"")+c};return b}(e),a.Throw=T=function(a){function b(a){this.expression=a}bl(b,a),b.prototype.children=["expression"],b.prototype.isStatement=Y,b.prototype.jumps=D,b.prototype.makeReturn=S,b.prototype.compileNode=function(a){return this.tab+("throw "+this.expression.compile(a)+";")};return b}(e),a.Existence=l=function(a){function b(a){this.expression=a}bl(b,a),b.prototype.children=["expression"],b.prototype.invert=C,b.prototype.compileNode=function(a){var b,c,d,e;this.expression.front=this.front,d=this.expression.compile(a,x),o.test(d)&&!a.scope.check(d)?(e=this.negated?["===","||"]:["!==","&&"],b=e[0],c=e[1],d="typeof "+d+" "+b+' "undefined" '+c+" "+d+" "+b+" null"):d=""+d+" "+(this.negated?"==":"!=")+" null";return a.level<=v?d:"("+d+")"};return b}(e),a.Parens=H=function(a){function b(a){this.body=a}bl(b,a),b.prototype.children=["body"],b.prototype.unwrap=function(){return this.body},b.prototype.isComplex=function(){return this.body.isComplex()},b.prototype.compileNode=function(a){var b,c,d;d=this.body.unwrap();if(d instanceof W&&d.isAtomic()){d.front=this.front;return d.compile(a)}c=d.compile(a,y),b=a.level<x&&(d instanceof F||d instanceof g||d instanceof n&&d.returns);return b?c:"("+c+")"};return b}(e),a.For=n=function(a){function b(a,b){var c;this.source=b.source,this.guard=b.guard,this.step=b.step,this.name=b.name,this.index=b.index,this.body=f.wrap([a]),this.own=!!b.own,this.object=!!b.object,this.object&&(c=[this.index,this.name],this.name=c[0],this.index=c[1]);if(this.index instanceof W)throw SyntaxError("index cannot be a pattern matching expression");this.range=this.source instanceof W&&this.source.base instanceof J&&!this.source.properties.length,this.pattern=this.name instanceof W;if(this.range&&this.index)throw SyntaxError("indexes do not apply to range loops");if(this.range&&this.pattern)throw SyntaxError("cannot pattern match over range loops");this.returns=!1}bl(b,a),b.prototype.children=["body","source","guard","step"],b.prototype.compileNode=function(a){var b,c,e,g,h,i,j,k,l,m,n,p,q,s,t,u,v,y,B,C,D,E,F,G,I;b=f.wrap([this.body]),n=(I=bc(b.expressions))!=null?I.jumps():void 0,n&&n instanceof K&&(this.returns=!1),C=this.range?this.source.base:this.source,B=a.scope,q=this.name&&this.name.compile(a,w),j=this.index&&this.index.compile(a,w),q&&!this.pattern&&B.find(q),j&&B.find(j),this.returns&&(y=B.freeVariable("results")),k=this.object&&j||B.freeVariable("i"),l=this.range&&q||j||k,m=l!==k?""+l+" = ":"",this.step&&!this.range&&(E=B.freeVariable("step")),this.pattern&&(q=k),G="",h="",c="",i=this.tab+R,this.range?e=C.compile(bd(a,{index:k,name:q,step:this.step})):(F=this.source.compile(a,w),(q||this.own)&&!o.test(F)&&(c=""+this.tab+(t=B.freeVariable("ref"))+" = "+F+";\n",F=t),q&&!this.pattern&&(s=""+q+" = "+F+"["+l+"]"),this.object||(p=B.freeVariable("len"),g=""+m+k+" = 0, "+p+" = "+F+".length",this.step&&(g+=", "+E+" = "+this.step.compile(a,x)),D=""+m+(this.step?""+k+" += "+E:l!==k?"++"+k:""+k+"++"),e=""+g+"; "+k+" < "+p+"; "+D)),this.returns&&(u=""+this.tab+y+" = [];\n",v="\n"+this.tab+"return "+y+";",b.makeReturn(y)),this.guard&&(b.expressions.length>1?b.expressions.unshift(new r((new H(this.guard)).invert(),new A("continue"))):this.guard&&(b=f.wrap([new r(this.guard,b)]))),this.pattern&&b.expressions.unshift(new d(this.name,new A(""+F+"["+l+"]"))),c+=this.pluckDirectCall(a,b),s&&(G="\n"+i+s+";"),this.object&&(e=""+l+" in "+F,this.own&&(h="\n"+i+"if (!"+bh("hasProp")+".call("+F+", "+l+")) continue;")),b=b.compile(bd(a,{indent:i}),z),b&&(b="\n"+b+"\n");return""+c+(u||"")+this.tab+"for ("+e+") {"+h+G+b+this.tab+"}"+(v||"")},b.prototype.pluckDirectCall=function(a,b){var c,e,f,h,i,k,l,m,n,o,p,q,r,s,t;e="",o=b.expressions;for(i=m=0,n=o.length;m<n;i=++m){f=o[i],f=f.unwrapAll();if(!(f instanceof g))continue;l=f.variable.unwrapAll();if(!(l instanceof j||l instanceof W&&((p=l.base)!=null?p.unwrapAll():void 0)instanceof j&&l.properties.length===1&&((q=(r=l.properties[0].name)!=null?r.value:void 0)==="call"||q==="apply")))continue;h=((s=l.base)!=null?s.unwrapAll():void 0)||l,k=new A(a.scope.freeVariable("fn")),c=new W(k),l.base&&(t=[c,l],l.base=t[0],c=t[1]),b.expressions[i]=new g(c,f.args),e+=this.tab+(new d(k,h)).compile(a,z)+";\n"}return e};return b}(X),a.Switch=Q=function(a){function b(a,b,c){this.subject=a,this.cases=b,this.otherwise=c}bl(b,a),b.prototype.children=["subject","cases","otherwise"],b.prototype.isStatement=Y,b.prototype.jumps=function(a){var b,c,d,e,f,g,h;a==null&&(a={block:!0}),f=this.cases;for(d=0,e=f.length;d<e;d++){g=f[d],c=g[0],b=g[1];if(b.jumps(a))return b}return(h=this.otherwise)!=null?h.jumps(a):void 0},b.prototype.makeReturn=function(a){var b,c,d,e,g;e=this.cases;for(c=0,d=e.length;c<d;c++)b=e[c],b[1].makeReturn(a);a&&(this.otherwise||(this.otherwise=new f([new A("void 0")]))),(g=this.otherwise)!=null&&g.makeReturn(a);return this},b.prototype.compileNode=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;i=a.indent+R,j=a.indent=i+R,d=this.tab+("switch ("+(((o=this.subject)!=null?o.compile(a,y):void 0)||!1)+") {\n"),p=this.cases;for(h=k=0,m=p.length;k<m;h=++k){q=p[h],f=q[0],b=q[1],r=bb([f]);for(l=0,n=r.length;l<n;l++)e=r[l],this.subject||(e=e.invert()),d+=i+("case "+e.compile(a,y)+":\n");if(c=b.compile(a,z))d+=c+"\n";if(h===this.cases.length-1&&!this.otherwise)break;g=this.lastNonComment(b.expressions);if(g instanceof K||g instanceof A&&g.jumps()&&g.value!=="debugger")continue;d+=j+"break;\n"}this.otherwise&&this.otherwise.expressions.length&&(d+=i+("default:\n"+this.otherwise.compile(a,z)+"\n"));return d+this.tab+"}"};return b}(e),a.If=r=function(a){function b(a,b,c){this.body=b,c==null&&(c={}),this.condition=c.type==="unless"?a.invert():a,this.elseBody=null,this.isChain=!1,this.soak=c.soak}bl(b,a),b.prototype.children=["condition","body","elseBody"],b.prototype.bodyNode=function(){var a;return(a=this.body)!=null?a.unwrap():void 0},b.prototype.elseBodyNode=function(){var a;return(a=this.elseBody)!=null?a.unwrap():void 0},b.prototype.addElse=function(a){this.isChain?this.elseBodyNode().addElse(a):(this.isChain=a instanceof b,this.elseBody=this.ensureBlock(a));return this},b.prototype.isStatement=function(a){var b;return(a!=null?a.level:void 0)===z||this.bodyNode().isStatement(a)||((b=this.elseBodyNode())!=null?b.isStatement(a):void 0)},b.prototype.jumps=function(a){var b;return this.body.jumps(a)||((b=this.elseBody)!=null?b.jumps(a):void 0)},b.prototype.compileNode=function(a){return this.isStatement(a)?this.compileStatement(a):this.compileExpression(a)},b.prototype.makeReturn=function(a){a&&(this.elseBody||(this.elseBody=new f([new A("void 0")]))),this.body&&(this.body=new f([this.body.makeReturn(a)])),this.elseBody&&(this.elseBody=new f([this.elseBody.makeReturn(a)]));return this},b.prototype.ensureBlock=function(a){return a instanceof f?a:new f([a])},b.prototype.compileStatement=function(a){var c,d,e,f,g;d=$(a,"chainChild"),f=$(a,"isExistentialEquals");if(f)return(new b(this.condition.invert(),this.elseBodyNode(),{type:"if"})).compile(a);e=this.condition.compile(a,y),a.indent+=R,c=this.ensureBlock(this.body),g="if ("+e+") {\n"+c.compile(a)+"\n"+this.tab+"}",d||(g=this.tab+g);if(!this.elseBody)return g;return g+" else "+(this.isChain?(a.indent=this.tab,a.chainChild=!0,this.elseBody.unwrap().compile(a,z)):"{\n"+this.elseBody.compile(a,z)+"\n"+this.tab+"}")},b.prototype.compileExpression=function(a){var b,c,d,e;e=this.condition.compile(a,v),c=this.bodyNode().compile(a,w),b=this.elseBodyNode()?this.elseBodyNode().compile(a,w):"void 0",d=""+e+" ? "+c+" : "+b;return a.level>=v?"("+d+")":d},b.prototype.unfoldSoak=function(){return this.soak&&this};return b}(e),i={wrap:function(a,c,d){var e,h,i,k,l;if(a.jumps())return a;i=new j([],f.wrap([a])),e=[];if((k=a.contains(this.literalArgs))||a.contains(this.literalThis))l=new A(k?"apply":"call"),e=[new A("this")],k&&e.push(new A("arguments")),i=new W(i,[new b(l)]);i.noReturn=d,h=new g(i,e);return c?f.wrap([h]):h},literalArgs:function(a){return a instanceof A&&a.value==="arguments"&&!a.asKey},literalThis:function(a){return a instanceof A&&a.value==="this"&&!a.asKey||a instanceof j&&a.bound||a instanceof g&&a.isSuper}},bg=function(a,b,c){var d;if(!!(d=b[c].unfoldSoak(a))){b[c]=d.body,d.body=new W(b);return d}},V={"extends":function(){return"function(child, parent) { for (var key in parent) { if ("+bh("hasProp")+".call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }"},bind:function(){return"function(fn, me){ return function(){ return fn.apply(me, arguments); }; }"},indexOf:function(){return"[].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }"},hasProp:function(){return"{}.hasOwnProperty"},slice:function(){return"[].slice"}},z=1,y=2,w=3,v=4,x=5,u=6,R=" ",p="[$A-Za-z_\\x7f-\\uffff][$\\w\\x7f-\\uffff]*",o=RegExp("^"+p+"$"),L=/^[+-]?\d+$/,B=RegExp("^(?:("+p+")\\.prototype(?:\\.("+p+")|\\[(\"(?:[^\\\\\"\\r\\n]|\\\\.)*\"|'(?:[^\\\\'\\r\\n]|\\\\.)*')\\]|\\[(0x[\\da-fA-F]+|\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\]))|("+p+")$"),q=/^['"]/,bh=function(a){var b;b="__"+a,N.root.assign(b,V[a]());return b},be=function(a,b){a=a.replace(/\n/g,"$&"+b);return a.replace(/\s+$/,"")}}).call(this)},require["./coffee-script"]=new function(){var a=this;(function(){var b,c,d,e,f,g,h,i,j,k=({}).hasOwnProperty;e=require("fs"),h=require("path"),j=require("./lexer"),b=j.Lexer,c=j.RESERVED,g=require("./parser").parser,i=require("vm"),require.extensions?require.extensions[".coffee"]=function(a,b){var c;c=d(e.readFileSync(b,"utf8"),{filename:b});return a._compile(c,b)}:require.registerExtension&&require.registerExtension(".coffee",function(a){return d(a)}),a.VERSION="1.3.3",a.RESERVED=c,a.helpers=require("./helpers"),a.compile=d=function(b,c){var d,e,h;c==null&&(c={}),h=a.helpers.merge;try{e=g.parse(f.tokenize(b)).compile(c);if(!c.header)return e}catch(i){c.filename&&(i.message="In "+c.filename+", "+i.message);throw i}d="Generated by CoffeeScript "+this.VERSION;return"// "+d+"\n"+e},a.tokens=function(a,b){return f.tokenize(a,b)},a.nodes=function(a,b){return typeof a=="string"?g.parse(f.tokenize(a,b)):g.parse(a)},a.run=function(a,b){var c;b==null&&(b={}),c=require.main,c.filename=process.argv[1]=b.filename?e.realpathSync(b.filename):".",c.moduleCache&&(c.moduleCache={}),c.paths=require("module")._nodeModulePaths(h.dirname(e.realpathSync(b.filename)));return h.extname(c.filename)!==".coffee"||require.extensions?c._compile(d(a,b),c.filename):c._compile(a,c.filename)},a.eval=function(a,b){var c,e,f,g,j,l,m,n,o,p,q,r,s,t;b==null&&(b={});if(!!(a=a.trim())){e=i.Script;if(e){if(b.sandbox!=null){if(b.sandbox instanceof e.createContext().constructor)m=b.sandbox;else{m=e.createContext(),r=b.sandbox;for(g in r){if(!k.call(r,g))continue;n=r[g],m[g]=n}}m.global=m.root=m.GLOBAL=m}else m=global;m.__filename=b.filename||"eval",m.__dirname=h.dirname(m.__filename);if(m===global&&!m.module&&!m.require){c=require("module"),m.module=q=new c(b.modulename||"eval"),m.require=t=function(a){return c._load(a,q,!0)},q.filename=m.__filename,s=Object.getOwnPropertyNames(require);for(o=0,p=s.length;o<p;o++)l=s[o],l!=="paths"&&(t[l]=require[l]);t.paths=q.paths=c._nodeModulePaths(process.cwd()),t.resolve=function(a){return c._resolveFilename(a,q)}}}j={};for(g in b){if(!k.call(b,g))continue;n=b[g],j[g]=n}j.bare=!0,f=d(a,j);return m===global?i.runInThisContext(f):i.runInContext(f,m)}},f=new b,g.lexer={lex:function(){var a,b;b=this.tokens[this.pos++]||[""],a=b[0],this.yytext=b[1],this.yylineno=b[2];return a},setInput:function(a){this.tokens=a;return this.pos=0},upcomingInput:function(){return""}},g.yy=require("./nodes")}).call(this)},require["./browser"]=new function(){var exports=this;(function(){var CoffeeScript,runScripts;CoffeeScript=require("./coffee-script"),CoffeeScript.require=require,CoffeeScript.eval=function(code,options){var _ref;options==null&&(options={}),(_ref=options.bare)==null&&(options.bare=!0);return eval(CoffeeScript.compile(code,options))},CoffeeScript.run=function(a,b){b==null&&(b={}),b.bare=!0;return Function(CoffeeScript.compile(a,b))()};typeof window!="undefined"&&window!==null&&(CoffeeScript.load=function(a,b){var c;c=new(window.ActiveXObject||XMLHttpRequest)("Microsoft.XMLHTTP"),c.open("GET",a,!0),"overrideMimeType"in c&&c.overrideMimeType("text/plain"),c.onreadystatechange=function(){var d;if(c.readyState===4){if((d=c.status)===0||d===200)CoffeeScript.run(c.responseText);else throw new Error("Could not load "+a);if(b)return b()}};return c.send(null)},runScripts=function(){var a,b,c,d,e,f;f=document.getElementsByTagName("script"),a=function(){var a,b,c;c=[];for(a=0,b=f.length;a<b;a++)e=f[a],e.type==="text/coffeescript"&&c.push(e);return c}(),c=0,d=a.length,(b=function(){var d;d=a[c++];if((d!=null?d.type:void 0)==="text/coffeescript"){if(d.src)return CoffeeScript.load(d.src,b);CoffeeScript.run(d.innerHTML);return b()}})();return null},window.addEventListener?addEventListener("DOMContentLoaded",runScripts,!1):attachEvent("onload",runScripts))}).call(this)};return require["./coffee-script"]}();typeof define=="function"&&define.amd?define(function(){return CoffeeScript}):root.CoffeeScript=CoffeeScript})(this)
 
 
 
1
+ /**
2
+ * CoffeeScript Compiler v1.6.3
3
+ * http://coffeescript.org
4
+ *
5
+ * Copyright 2011, Jeremy Ashkenas
6
+ * Released under the MIT License
7
+ */
8
+ !function(root){var CoffeeScript=function(){function require(e){return require[e]}return require["./helpers"]=function(){var e={},t={exports:e};return function(){var t,n,i,s,r,o;e.starts=function(e,t,n){return t===e.substr(n,t.length)},e.ends=function(e,t,n){var i;return i=t.length,t===e.substr(e.length-i-(n||0),i)},e.repeat=r=function(e,t){var n;for(n="";t>0;)1&t&&(n+=e),t>>>=1,e+=e;return n},e.compact=function(e){var t,n,i,s;for(s=[],n=0,i=e.length;i>n;n++)t=e[n],t&&s.push(t);return s},e.count=function(e,t){var n,i;if(n=i=0,!t.length)return 1/0;for(;i=1+e.indexOf(t,i);)n++;return n},e.merge=function(e,t){return n(n({},e),t)},n=e.extend=function(e,t){var n,i;for(n in t)i=t[n],e[n]=i;return e},e.flatten=i=function(e){var t,n,s,r;for(n=[],s=0,r=e.length;r>s;s++)t=e[s],t instanceof Array?n=n.concat(i(t)):n.push(t);return n},e.del=function(e,t){var n;return n=e[t],delete e[t],n},e.last=s=function(e,t){return e[e.length-(t||0)-1]},e.some=null!=(o=Array.prototype.some)?o:function(e){var t,n,i;for(n=0,i=this.length;i>n;n++)if(t=this[n],e(t))return!0;return!1},e.invertLiterate=function(e){var t,n,i;return i=!0,n=function(){var n,s,r,o;for(r=e.split("\n"),o=[],n=0,s=r.length;s>n;n++)t=r[n],i&&/^([ ]{4}|[ ]{0,3}\t)/.test(t)?o.push(t):(i=/^\s*$/.test(t))?o.push(t):o.push("# "+t);return o}(),n.join("\n")},t=function(e,t){return t?{first_line:e.first_line,first_column:e.first_column,last_line:t.last_line,last_column:t.last_column}:e},e.addLocationDataFn=function(e,n){return function(i){return"object"==typeof i&&i.updateLocationDataIfMissing&&i.updateLocationDataIfMissing(t(e,n)),i}},e.locationDataToString=function(e){var t;return"2"in e&&"first_line"in e[2]?t=e[2]:"first_line"in e&&(t=e),t?""+(t.first_line+1)+":"+(t.first_column+1)+"-"+(""+(t.last_line+1)+":"+(t.last_column+1)):"No location data"},e.baseFileName=function(e,t,n){var i,s;return null==t&&(t=!1),null==n&&(n=!1),s=n?/\\|\//:/\//,i=e.split(s),e=i[i.length-1],t?(i=e.split("."),i.pop(),"coffee"===i[i.length-1]&&i.length>1&&i.pop(),i.join(".")):e},e.isCoffee=function(e){return/\.((lit)?coffee|coffee\.md)$/.test(e)},e.isLiterate=function(e){return/\.(litcoffee|coffee\.md)$/.test(e)},e.throwSyntaxError=function(e,t){var n;throw null==t.last_line&&(t.last_line=t.first_line),null==t.last_column&&(t.last_column=t.first_column),n=new SyntaxError(e),n.location=t,n},e.prettyErrorMessage=function(e,t,n,i){var s,o,a,c,h,l,u,p,d,f,m;return e.location?(m=e.location,h=m.first_line,c=m.first_column,u=m.last_line,l=m.last_column,s=n.split("\n")[h],f=c,a=h===u?l+1:s.length,p=r(" ",f)+r("^",a-f),i&&(o=function(e){return"[1;31m"+e+"[0m"},s=s.slice(0,f)+o(s.slice(f,a))+s.slice(a),p=o(p)),d=""+t+":"+(h+1)+":"+(c+1)+": error: "+e.message+"\n"+s+"\n"+p):e.stack||""+e}}.call(this),t.exports}(),require["./rewriter"]=function(){var e={},t={exports:e};return function(){var t,n,i,s,r,o,a,c,h,l,u,p,d,f,m,b,k,g,y=[].indexOf||function(e){for(var t=0,n=this.length;n>t;t++)if(t in this&&this[t]===e)return t;return-1},v=[].slice;for(d=function(e,t){var n;return n=[e,t],n.generated=!0,n},e.Rewriter=function(){function e(){}return e.prototype.rewrite=function(e){return this.tokens=e,this.removeLeadingNewlines(),this.removeMidExpressionNewlines(),this.closeOpenCalls(),this.closeOpenIndexes(),this.addImplicitIndentation(),this.tagPostfixConditionals(),this.addImplicitBracesAndParens(),this.addLocationDataToGeneratedTokens(),this.tokens},e.prototype.scanTokens=function(e){var t,n,i;for(i=this.tokens,t=0;n=i[t];)t+=e.call(this,n,t,i);return!0},e.prototype.detectEnd=function(e,t,n){var r,o,a,c,h;for(a=this.tokens,r=0;o=a[e];){if(0===r&&t.call(this,o,e))return n.call(this,o,e);if(!o||0>r)return n.call(this,o,e-1);c=o[0],y.call(s,c)>=0?r+=1:(h=o[0],y.call(i,h)>=0&&(r-=1)),e+=1}return e-1},e.prototype.removeLeadingNewlines=function(){var e,t,n,i,s;for(s=this.tokens,e=n=0,i=s.length;i>n&&(t=s[e][0],"TERMINATOR"===t);e=++n);return e?this.tokens.splice(0,e):void 0},e.prototype.removeMidExpressionNewlines=function(){return this.scanTokens(function(e,t,i){var s;return"TERMINATOR"===e[0]&&(s=this.tag(t+1),y.call(n,s)>=0)?(i.splice(t,1),0):1})},e.prototype.closeOpenCalls=function(){var e,t;return t=function(e,t){var n;return")"===(n=e[0])||"CALL_END"===n||"OUTDENT"===e[0]&&")"===this.tag(t-1)},e=function(e,t){return this.tokens["OUTDENT"===e[0]?t-1:t][0]="CALL_END"},this.scanTokens(function(n,i){return"CALL_START"===n[0]&&this.detectEnd(i+1,t,e),1})},e.prototype.closeOpenIndexes=function(){var e,t;return t=function(e){var t;return"]"===(t=e[0])||"INDEX_END"===t},e=function(e){return e[0]="INDEX_END"},this.scanTokens(function(n,i){return"INDEX_START"===n[0]&&this.detectEnd(i+1,t,e),1})},e.prototype.matchTags=function(){var e,t,n,i,s,r,o;for(t=arguments[0],i=2<=arguments.length?v.call(arguments,1):[],e=0,n=s=0,r=i.length;r>=0?r>s:s>r;n=r>=0?++s:--s){for(;"HERECOMMENT"===this.tag(t+n+e);)e+=2;if(null!=i[n]&&("string"==typeof i[n]&&(i[n]=[i[n]]),o=this.tag(t+n+e),y.call(i[n],o)<0))return!1}return!0},e.prototype.looksObjectish=function(e){return this.matchTags(e,"@",null,":")||this.matchTags(e,null,":")},e.prototype.findTagsBackwards=function(e,t){var n,r,o,a,c,h,u;for(n=[];e>=0&&(n.length||(a=this.tag(e),y.call(t,a)<0&&(c=this.tag(e),y.call(s,c)<0||this.tokens[e].generated)&&(h=this.tag(e),y.call(l,h)<0)));)r=this.tag(e),y.call(i,r)>=0&&n.push(this.tag(e)),o=this.tag(e),y.call(s,o)>=0&&n.length&&n.pop(),e-=1;return u=this.tag(e),y.call(t,u)>=0},e.prototype.addImplicitBracesAndParens=function(){var e;return e=[],this.scanTokens(function(t,n,h){var u,p,f,m,b,k,g,v,w,T,C,F,L,N,x,E,D,S,R,A,I,_,$,O,j,M;if(A=t[0],T=(n>0?h[n-1]:[])[0],v=(n<h.length-1?h[n+1]:[])[0],x=function(){return e[e.length-1]},E=n,f=function(e){return n-E+e},m=function(){var e,t;return null!=(e=x())?null!=(t=e[2])?t.ours:void 0:void 0},b=function(){var e;return m()&&"("===(null!=(e=x())?e[0]:void 0)},g=function(){var e;return m()&&"{"===(null!=(e=x())?e[0]:void 0)},k=function(){var e;return m&&"CONTROL"===(null!=(e=x())?e[0]:void 0)},D=function(t){var i;return i=null!=t?t:n,e.push(["(",i,{ours:!0}]),h.splice(i,0,d("CALL_START","(")),null==t?n+=1:void 0},u=function(){return e.pop(),h.splice(n,0,d("CALL_END",")")),n+=1},S=function(t,i){var s;return null==i&&(i=!0),s=null!=t?t:n,e.push(["{",s,{sameLine:!0,startsLine:i,ours:!0}]),h.splice(s,0,d("{",d(new String("{")))),null==t?n+=1:void 0},p=function(t){return t=null!=t?t:n,e.pop(),h.splice(t,0,d("}","}")),n+=1},b()&&("IF"===A||"TRY"===A||"FINALLY"===A||"CATCH"===A||"CLASS"===A||"SWITCH"===A))return e.push(["CONTROL",n,{ours:!0}]),f(1);if("INDENT"===A&&m()){if("=>"!==T&&"->"!==T&&"["!==T&&"("!==T&&","!==T&&"{"!==T&&"TRY"!==T&&"ELSE"!==T&&"="!==T)for(;b();)u();return k()&&e.pop(),e.push([A,n]),f(1)}if(y.call(s,A)>=0)return e.push([A,n]),f(1);if(y.call(i,A)>=0){for(;m();)b()?u():g()?p():e.pop();e.pop()}if((y.call(a,A)>=0&&t.spaced&&!t.stringEnd||"?"===A&&n>0&&!h[n-1].spaced)&&(y.call(r,v)>=0||y.call(c,v)>=0&&!(null!=(I=h[n+1])?I.spaced:void 0)&&!(null!=(_=h[n+1])?_.newLine:void 0)))return"?"===A&&(A=t[0]="FUNC_EXIST"),D(n+1),f(2);if(y.call(a,A)>=0&&this.matchTags(n+1,"INDENT",null,":")&&!this.findTagsBackwards(n,["CLASS","EXTENDS","IF","CATCH","SWITCH","LEADING_WHEN","FOR","WHILE","UNTIL"]))return D(n+1),e.push(["INDENT",n+2]),f(3);if(":"===A){for(C="@"===this.tag(n-2)?n-2:n-1;"HERECOMMENT"===this.tag(C-2);)C-=2;return R=0===C||($=this.tag(C-1),y.call(l,$)>=0)||h[C-1].newLine,x()&&(O=x(),N=O[0],L=O[1],("{"===N||"INDENT"===N&&"{"===this.tag(L-1))&&(R||","===this.tag(C-1)||"{"===this.tag(C-1)))?f(1):(S(C,!!R),f(2))}if("OUTDENT"===T&&b()&&("."===A||"?."===A||"::"===A||"?::"===A))return u(),f(1);if(g()&&y.call(l,A)>=0&&(x()[2].sameLine=!1),y.call(o,A)>=0)for(;m();)if(j=x(),N=j[0],L=j[1],M=j[2],F=M.sameLine,R=M.startsLine,b()&&","!==T)u();else if(g()&&F&&!R)p();else{if(!g()||"TERMINATOR"!==A||","===T||R&&this.looksObjectish(n+1))break;p()}if(","===A&&!this.looksObjectish(n+1)&&g()&&("TERMINATOR"!==v||!this.looksObjectish(n+2)))for(w="OUTDENT"===v?1:0;g();)p(n+w);return f(1)})},e.prototype.addLocationDataToGeneratedTokens=function(){return this.scanTokens(function(e,t,n){var i,s,r,o,a,c;return e[2]?1:e.generated||e.explicit?("{"===e[0]&&(r=null!=(a=n[t+1])?a[2]:void 0)?(s=r.first_line,i=r.first_column):(o=null!=(c=n[t-1])?c[2]:void 0)?(s=o.last_line,i=o.last_column):s=i=0,e[2]={first_line:s,first_column:i,last_line:s,last_column:i},1):1})},e.prototype.addImplicitIndentation=function(){var e,t,n,i,s;return s=n=i=null,t=function(e){var t,n;return";"!==e[1]&&(t=e[0],y.call(u,t)>=0)&&!("ELSE"===e[0]&&"THEN"!==s)&&!!("CATCH"!==(n=e[0])&&"FINALLY"!==n||"->"!==s&&"=>"!==s)},e=function(e,t){return this.tokens.splice(","===this.tag(t-1)?t-1:t,0,i)},this.scanTokens(function(r,o,a){var c,h,l,u,d;if(h=r[0],"TERMINATOR"===h&&"THEN"===this.tag(o+1))return a.splice(o,1),0;if("ELSE"===h&&"OUTDENT"!==this.tag(o-1))return a.splice.apply(a,[o,0].concat(v.call(this.indentation()))),2;if("CATCH"===h)for(c=l=1;2>=l;c=++l)if("OUTDENT"===(u=this.tag(o+c))||"TERMINATOR"===u||"FINALLY"===u)return a.splice.apply(a,[o+c,0].concat(v.call(this.indentation()))),2+c;return y.call(p,h)>=0&&"INDENT"!==this.tag(o+1)&&("ELSE"!==h||"IF"!==this.tag(o+1))?(s=h,d=this.indentation(!0),n=d[0],i=d[1],"THEN"===s&&(n.fromThen=!0),a.splice(o+1,0,n),this.detectEnd(o+2,t,e),"THEN"===h&&a.splice(o,1),1):1})},e.prototype.tagPostfixConditionals=function(){var e,t,n;return n=null,t=function(e,t){var n,i;return i=e[0],n=this.tokens[t-1][0],"TERMINATOR"===i||"INDENT"===i&&y.call(p,n)<0},e=function(e){return"INDENT"!==e[0]||e.generated&&!e.fromThen?n[0]="POST_"+n[0]:void 0},this.scanTokens(function(i,s){return"IF"!==i[0]?1:(n=i,this.detectEnd(s+1,t,e),1)})},e.prototype.indentation=function(e){var t,n;return null==e&&(e=!1),t=["INDENT",2],n=["OUTDENT",2],e&&(t.generated=n.generated=!0),e||(t.explicit=n.explicit=!0),[t,n]},e.prototype.generate=d,e.prototype.tag=function(e){var t;return null!=(t=this.tokens[e])?t[0]:void 0},e}(),t=[["(",")"],["[","]"],["{","}"],["INDENT","OUTDENT"],["CALL_START","CALL_END"],["PARAM_START","PARAM_END"],["INDEX_START","INDEX_END"]],e.INVERSES=h={},s=[],i=[],b=0,k=t.length;k>b;b++)g=t[b],f=g[0],m=g[1],s.push(h[m]=f),i.push(h[f]=m);n=["CATCH","WHEN","ELSE","FINALLY"].concat(i),a=["IDENTIFIER","SUPER",")","CALL_END","]","INDEX_END","@","THIS"],r=["IDENTIFIER","NUMBER","STRING","JS","REGEX","NEW","PARAM_START","CLASS","IF","TRY","SWITCH","THIS","BOOL","NULL","UNDEFINED","UNARY","SUPER","THROW","@","->","=>","[","(","{","--","++"],c=["+","-"],o=["POST_IF","FOR","WHILE","UNTIL","WHEN","BY","LOOP","TERMINATOR"],p=["ELSE","->","=>","TRY","FINALLY","THEN"],u=["TERMINATOR","CATCH","FINALLY","ELSE","OUTDENT","LEADING_WHEN"],l=["TERMINATOR","INDENT","OUTDENT"]}.call(this),t.exports}(),require["./lexer"]=function(){var e={},t={exports:e};return function(){var t,n,i,s,r,o,a,c,h,l,u,p,d,f,m,b,k,g,y,v,w,T,C,F,L,N,x,E,D,S,R,A,I,_,$,O,j,M,B,V,P,U,q,H,G,W,X,Y,K,z,J,Z,Q,et=[].indexOf||function(e){for(var t=0,n=this.length;n>t;t++)if(t in this&&this[t]===e)return t;return-1};Z=require("./rewriter"),O=Z.Rewriter,g=Z.INVERSES,Q=require("./helpers"),H=Q.count,z=Q.starts,q=Q.compact,X=Q.last,K=Q.repeat,G=Q.invertLiterate,Y=Q.locationDataToString,J=Q.throwSyntaxError,e.Lexer=L=function(){function e(){}return e.prototype.tokenize=function(e,t){var n,i,s,r;for(null==t&&(t={}),this.literate=t.literate,this.indent=0,this.indebt=0,this.outdebt=0,this.indents=[],this.ends=[],this.tokens=[],this.chunkLine=t.line||0,this.chunkColumn=t.column||0,e=this.clean(e),i=0;this.chunk=e.slice(i);)n=this.identifierToken()||this.commentToken()||this.whitespaceToken()||this.lineToken()||this.heredocToken()||this.stringToken()||this.numberToken()||this.regexToken()||this.jsToken()||this.literalToken(),r=this.getLineAndColumnFromChunk(n),this.chunkLine=r[0],this.chunkColumn=r[1],i+=n;return this.closeIndentation(),(s=this.ends.pop())&&this.error("missing "+s),t.rewrite===!1?this.tokens:(new O).rewrite(this.tokens)},e.prototype.clean=function(e){return e.charCodeAt(0)===t&&(e=e.slice(1)),e=e.replace(/\r/g,"").replace(V,""),U.test(e)&&(e="\n"+e,this.chunkLine--),this.literate&&(e=G(e)),e},e.prototype.identifierToken=function(){var e,t,n,i,s,c,h,l,u,p,d,f,m,k;return(h=b.exec(this.chunk))?(c=h[0],i=h[1],e=h[2],s=i.length,l=void 0,"own"===i&&"FOR"===this.tag()?(this.token("OWN",i),i.length):(n=e||(u=X(this.tokens))&&("."===(f=u[0])||"?."===f||"::"===f||"?::"===f||!u.spaced&&"@"===u[0]),p="IDENTIFIER",!n&&(et.call(w,i)>=0||et.call(a,i)>=0)&&(p=i.toUpperCase(),"WHEN"===p&&(m=this.tag(),et.call(T,m)>=0)?p="LEADING_WHEN":"FOR"===p?this.seenFor=!0:"UNLESS"===p?p="IF":et.call(P,p)>=0?p="UNARY":et.call(_,p)>=0&&("INSTANCEOF"!==p&&this.seenFor?(p="FOR"+p,this.seenFor=!1):(p="RELATION","!"===this.value()&&(l=this.tokens.pop(),i="!"+i)))),et.call(v,i)>=0&&(n?(p="IDENTIFIER",i=new String(i),i.reserved=!0):et.call($,i)>=0&&this.error('reserved word "'+i+'"')),n||(et.call(r,i)>=0&&(i=o[i]),p=function(){switch(i){case"!":return"UNARY";case"==":case"!=":return"COMPARE";case"&&":case"||":return"LOGIC";case"true":case"false":return"BOOL";case"break":case"continue":return"STATEMENT";default:return p}}()),d=this.token(p,i,0,s),l&&(k=[l[2].first_line,l[2].first_column],d[2].first_line=k[0],d[2].first_column=k[1]),e&&(t=c.lastIndexOf(":"),this.token(":",":",t,e.length)),c.length)):0},e.prototype.numberToken=function(){var e,t,n,i,s;return(n=R.exec(this.chunk))?(i=n[0],/^0[BOX]/.test(i)?this.error("radix prefix '"+i+"' must be lowercase"):/E/.test(i)&&!/^0x/.test(i)?this.error("exponential notation '"+i+"' must be indicated with a lowercase 'e'"):/^0\d*[89]/.test(i)?this.error("decimal literal '"+i+"' must not be prefixed with '0'"):/^0\d+/.test(i)&&this.error("octal literal '"+i+"' must be prefixed with '0o'"),t=i.length,(s=/^0o([0-7]+)/.exec(i))&&(i="0x"+parseInt(s[1],8).toString(16)),(e=/^0b([01]+)/.exec(i))&&(i="0x"+parseInt(e[1],2).toString(16)),this.token("NUMBER",i,0,t),t):0},e.prototype.stringToken=function(){var e,t,n;switch(this.chunk.charAt(0)){case"'":if(!(e=M.exec(this.chunk)))return 0;n=e[0],this.token("STRING",n.replace(x,"\\\n"),0,n.length);break;case'"':if(!(n=this.balancedString(this.chunk,'"')))return 0;0<n.indexOf("#{",1)?this.interpolateString(n.slice(1,-1),{strOffset:1,lexedLength:n.length}):this.token("STRING",this.escapeLines(n,0,n.length));break;default:return 0}return(t=/^(?:\\.|[^\\])*\\(?:0[0-7]|[1-7])/.test(n))&&this.error("octal escape sequences "+n+" are not allowed"),n.length},e.prototype.heredocToken=function(){var e,t,n,i;return(n=u.exec(this.chunk))?(t=n[0],i=t.charAt(0),e=this.sanitizeHeredoc(n[2],{quote:i,indent:null}),'"'===i&&0<=e.indexOf("#{")?this.interpolateString(e,{heredoc:!0,strOffset:3,lexedLength:t.length}):this.token("STRING",this.makeString(e,i,!0),0,t.length),t.length):0},e.prototype.commentToken=function(){var e,t,n;return(n=this.chunk.match(c))?(e=n[0],t=n[1],t&&this.token("HERECOMMENT",this.sanitizeHeredoc(t,{herecomment:!0,indent:K(" ",this.indent)}),0,e.length),e.length):0},e.prototype.jsToken=function(){var e,t;return"`"===this.chunk.charAt(0)&&(e=y.exec(this.chunk))?(this.token("JS",(t=e[0]).slice(1,-1),0,t.length),t.length):0},e.prototype.regexToken=function(){var e,t,n,i,s,r,o;return"/"!==this.chunk.charAt(0)?0:(n=f.exec(this.chunk))?t=this.heregexToken(n):(i=X(this.tokens),i&&(r=i[0],et.call(i.spaced?D:S,r)>=0)?0:(n=I.exec(this.chunk))?(o=n,n=o[0],s=o[1],e=o[2],"/*"===s.slice(0,2)&&this.error("regular expressions cannot begin with `*`"),"//"===s&&(s="/(?:)/"),this.token("REGEX",""+s+e,0,n.length),n.length):0)},e.prototype.heregexToken=function(e){var t,n,i,s,r,o,a,c,h,l,u,p,d,f,b,k;if(s=e[0],t=e[1],n=e[2],0>t.indexOf("#{"))return a=t.replace(m,"").replace(/\//g,"\\/"),a.match(/^\*/)&&this.error("regular expressions cannot begin with `*`"),this.token("REGEX","/"+(a||"(?:)")+"/"+n,0,s.length),s.length;for(this.token("IDENTIFIER","RegExp",0,0),this.token("CALL_START","(",0,0),l=[],f=this.interpolateString(t,{regex:!0}),p=0,d=f.length;d>p;p++){if(h=f[p],c=h[0],u=h[1],"TOKENS"===c)l.push.apply(l,u);else if("NEOSTRING"===c){if(!(u=u.replace(m,"")))continue;u=u.replace(/\\/g,"\\\\"),h[0]="STRING",h[1]=this.makeString(u,'"',!0),l.push(h)}else this.error("Unexpected "+c);o=X(this.tokens),r=["+","+"],r[2]=o[2],l.push(r)}return l.pop(),"STRING"!==(null!=(b=l[0])?b[0]:void 0)&&(this.token("STRING",'""',0,0),this.token("+","+",0,0)),(k=this.tokens).push.apply(k,l),n&&(i=s.lastIndexOf(n),this.token(",",",",i,0),this.token("STRING",'"'+n+'"',i,n.length)),this.token(")",")",s.length-1,0),s.length},e.prototype.lineToken=function(){var e,t,n,i,s;if(!(n=E.exec(this.chunk)))return 0;if(t=n[0],this.seenFor=!1,s=t.length-1-t.lastIndexOf("\n"),i=this.unfinished(),s-this.indebt===this.indent)return i?this.suppressNewlines():this.newlineToken(0),t.length;if(s>this.indent){if(i)return this.indebt=s-this.indent,this.suppressNewlines(),t.length;e=s-this.indent+this.outdebt,this.token("INDENT",e,t.length-s,s),this.indents.push(e),this.ends.push("OUTDENT"),this.outdebt=this.indebt=0}else this.indebt=0,this.outdentToken(this.indent-s,i,t.length);return this.indent=s,t.length},e.prototype.outdentToken=function(e,t,n){for(var i,s;e>0;)s=this.indents.length-1,void 0===this.indents[s]?e=0:this.indents[s]===this.outdebt?(e-=this.outdebt,this.outdebt=0):this.indents[s]<this.outdebt?(this.outdebt-=this.indents[s],e-=this.indents[s]):(i=this.indents.pop()+this.outdebt,e-=i,this.outdebt=0,this.pair("OUTDENT"),this.token("OUTDENT",i,0,n));for(i&&(this.outdebt-=e);";"===this.value();)this.tokens.pop();return"TERMINATOR"===this.tag()||t||this.token("TERMINATOR","\n",n,0),this},e.prototype.whitespaceToken=function(){var e,t,n;return(e=U.exec(this.chunk))||(t="\n"===this.chunk.charAt(0))?(n=X(this.tokens),n&&(n[e?"spaced":"newLine"]=!0),e?e[0].length:0):0},e.prototype.newlineToken=function(e){for(;";"===this.value();)this.tokens.pop();return"TERMINATOR"!==this.tag()&&this.token("TERMINATOR","\n",e,0),this},e.prototype.suppressNewlines=function(){return"\\"===this.value()&&this.tokens.pop(),this},e.prototype.literalToken=function(){var e,t,n,r,o,a,c,u;if((e=A.exec(this.chunk))?(r=e[0],s.test(r)&&this.tagParameters()):r=this.chunk.charAt(0),n=r,t=X(this.tokens),"="===r&&t&&(!t[1].reserved&&(o=t[1],et.call(v,o)>=0)&&this.error('reserved word "'+this.value()+"\" can't be assigned"),"||"===(a=t[1])||"&&"===a))return t[0]="COMPOUND_ASSIGN",t[1]+="=",r.length;if(";"===r)this.seenFor=!1,n="TERMINATOR";else if(et.call(N,r)>=0)n="MATH";else if(et.call(h,r)>=0)n="COMPARE";else if(et.call(l,r)>=0)n="COMPOUND_ASSIGN";else if(et.call(P,r)>=0)n="UNARY";else if(et.call(j,r)>=0)n="SHIFT";else if(et.call(F,r)>=0||"?"===r&&(null!=t?t.spaced:void 0))n="LOGIC";else if(t&&!t.spaced)if("("===r&&(c=t[0],et.call(i,c)>=0))"?"===t[0]&&(t[0]="FUNC_EXIST"),n="CALL_START";else if("["===r&&(u=t[0],et.call(k,u)>=0))switch(n="INDEX_START",t[0]){case"?":t[0]="INDEX_SOAK"}switch(r){case"(":case"{":case"[":this.ends.push(g[r]);break;case")":case"}":case"]":this.pair(r)}return this.token(n,r),r.length},e.prototype.sanitizeHeredoc=function(e,t){var n,i,s,r,o;if(s=t.indent,i=t.herecomment){if(p.test(e)&&this.error('block comment cannot contain "*/", starting'),e.indexOf("\n")<0)return e}else for(;r=d.exec(e);)n=r[1],(null===s||0<(o=n.length)&&o<s.length)&&(s=n);return s&&(e=e.replace(RegExp("\\n"+s,"g"),"\n")),i||(e=e.replace(/^\n/,"")),e},e.prototype.tagParameters=function(){var e,t,n,i;if(")"!==this.tag())return this;for(t=[],i=this.tokens,e=i.length,i[--e][0]="PARAM_END";n=i[--e];)switch(n[0]){case")":t.push(n);break;case"(":case"CALL_START":if(!t.length)return"("===n[0]?(n[0]="PARAM_START",this):this;t.pop()}return this},e.prototype.closeIndentation=function(){return this.outdentToken(this.indent)},e.prototype.balancedString=function(e,t){var n,i,s,r,o,a,c,h;for(n=0,a=[t],i=c=1,h=e.length;h>=1?h>c:c>h;i=h>=1?++c:--c)if(n)--n;else{switch(s=e.charAt(i)){case"\\":++n;continue;case t:if(a.pop(),!a.length)return e.slice(0,+i+1||9e9);t=a[a.length-1];continue}"}"!==t||'"'!==s&&"'"!==s?"}"===t&&"/"===s&&(r=f.exec(e.slice(i))||I.exec(e.slice(i)))?n+=r[0].length-1:"}"===t&&"{"===s?a.push(t="}"):'"'===t&&"#"===o&&"{"===s&&a.push(t="}"):a.push(t=s),o=s}return this.error("missing "+a.pop()+", starting")},e.prototype.interpolateString=function(t,n){var i,s,r,o,a,c,h,l,u,p,d,f,m,b,k,g,y,v,w,T,C,F,L,N,x,E,D,S;for(null==n&&(n={}),r=n.heredoc,y=n.regex,m=n.offsetInChunk,w=n.strOffset,u=n.lexedLength,m=m||0,w=w||0,u=u||t.length,r&&t.length>0&&"\n"===t[0]&&(t=t.slice(1),w++),F=[],b=0,o=-1;l=t.charAt(o+=1);)"\\"!==l?"#"===l&&"{"===t.charAt(o+1)&&(s=this.balancedString(t.slice(o+1),"}"))&&(o>b&&F.push(this.makeToken("NEOSTRING",t.slice(b,o),w+b)),a=s.slice(1,-1),a.length&&(E=this.getLineAndColumnFromChunk(w+o+1),p=E[0],i=E[1],f=(new e).tokenize(a,{line:p,column:i,rewrite:!1}),g=f.pop(),"TERMINATOR"===(null!=(D=f[0])?D[0]:void 0)&&(g=f.shift()),(h=f.length)&&(h>1&&(f.unshift(this.makeToken("(","(",w+o+1,0)),f.push(this.makeToken(")",")",w+o+1+a.length,0))),F.push(["TOKENS",f]))),o+=s.length,b=o+1):o+=1;if(o>b&&b<t.length&&F.push(this.makeToken("NEOSTRING",t.slice(b),w+b)),y)return F;if(!F.length)return this.token("STRING",'""',m,u);for("NEOSTRING"!==F[0][0]&&F.unshift(this.makeToken("NEOSTRING","",m)),(c=F.length>1)&&this.token("(","(",m,0),o=N=0,x=F.length;x>N;o=++N)C=F[o],T=C[0],L=C[1],o&&(o&&(k=this.token("+","+")),d="TOKENS"===T?L[0]:C,k[2]={first_line:d[2].first_line,first_column:d[2].first_column,last_line:d[2].first_line,last_column:d[2].first_column}),"TOKENS"===T?(S=this.tokens).push.apply(S,L):"NEOSTRING"===T?(C[0]="STRING",C[1]=this.makeString(L,'"',r),this.tokens.push(C)):this.error("Unexpected "+T);return c&&(v=this.makeToken(")",")",m+u,0),v.stringEnd=!0,this.tokens.push(v)),F},e.prototype.pair=function(e){var t,n;return e!==(n=X(this.ends))?("OUTDENT"!==n&&this.error("unmatched "+e),this.indent-=t=X(this.indents),this.outdentToken(t,!0),this.pair(e)):this.ends.pop()},e.prototype.getLineAndColumnFromChunk=function(e){var t,n,i,s;return 0===e?[this.chunkLine,this.chunkColumn]:(s=e>=this.chunk.length?this.chunk:this.chunk.slice(0,+(e-1)+1||9e9),n=H(s,"\n"),t=this.chunkColumn,n>0?(i=s.split("\n"),t=X(i).length):t+=s.length,[this.chunkLine+n,t])},e.prototype.makeToken=function(e,t,n,i){var s,r,o,a,c;return null==n&&(n=0),null==i&&(i=t.length),r={},a=this.getLineAndColumnFromChunk(n),r.first_line=a[0],r.first_column=a[1],s=Math.max(0,i-1),c=this.getLineAndColumnFromChunk(n+s),r.last_line=c[0],r.last_column=c[1],o=[e,t,r]},e.prototype.token=function(e,t,n,i){var s;return s=this.makeToken(e,t,n,i),this.tokens.push(s),s},e.prototype.tag=function(e,t){var n;return(n=X(this.tokens,e))&&(t?n[0]=t:n[0])},e.prototype.value=function(e,t){var n;return(n=X(this.tokens,e))&&(t?n[1]=t:n[1])},e.prototype.unfinished=function(){var e;return C.test(this.chunk)||"\\"===(e=this.tag())||"."===e||"?."===e||"?::"===e||"UNARY"===e||"MATH"===e||"+"===e||"-"===e||"SHIFT"===e||"RELATION"===e||"COMPARE"===e||"LOGIC"===e||"THROW"===e||"EXTENDS"===e},e.prototype.escapeLines=function(e,t){return e.replace(x,t?"\\n":"")},e.prototype.makeString=function(e,t,n){return e?(e=e.replace(/\\([\s\S])/g,function(e,n){return"\n"===n||n===t?n:e}),e=e.replace(RegExp(""+t,"g"),"\\$&"),t+this.escapeLines(e,n)+t):t+t},e.prototype.error=function(e){return J(e,{first_line:this.chunkLine,first_column:this.chunkColumn})},e}(),w=["true","false","null","this","new","delete","typeof","in","instanceof","return","throw","break","continue","debugger","if","else","switch","for","while","do","try","catch","finally","class","extends","super"],a=["undefined","then","unless","until","loop","of","by","when"],o={and:"&&",or:"||",is:"==",isnt:"!=",not:"!",yes:"true",no:"false",on:"true",off:"false"},r=function(){var e;e=[];for(W in o)e.push(W);return e}(),a=a.concat(r),$=["case","default","function","var","void","with","const","let","enum","export","import","native","__hasProp","__extends","__slice","__bind","__indexOf","implements","interface","package","private","protected","public","static","yield"],B=["arguments","eval"],v=w.concat($).concat(B),e.RESERVED=$.concat(w).concat(a).concat(B),e.STRICT_PROSCRIBED=B,t=65279,b=/^([$A-Za-z_\x7f-\uffff][$\w\x7f-\uffff]*)([^\n\S]*:(?!:))?/,R=/^0b[01]+|^0o[0-7]+|^0x[\da-f]+|^\d*\.?\d+(?:e[+-]?\d+)?/i,u=/^("""|''')([\s\S]*?)(?:\n[^\n\S]*)?\1/,A=/^(?:[-=]>|[-+*\/%<>&|^!?=]=|>>>=?|([-+:])\1|([&|<>])\2=?|\?(\.|::)|\.{2,3})/,U=/^[^\n\S]+/,c=/^###([^#][\s\S]*?)(?:###[^\n\S]*|(?:###)$)|^(?:\s*#(?!##[^#]).*)+/,s=/^[-=]>/,E=/^(?:\n[^\n\S]*)+/,M=/^'[^\\']*(?:\\.[^\\']*)*'/,y=/^`[^\\`]*(?:\\.[^\\`]*)*`/,I=/^(\/(?![\s=])[^[\/\n\\]*(?:(?:\\[\s\S]|\[[^\]\n\\]*(?:\\[\s\S][^\]\n\\]*)*])[^[\/\n\\]*)*\/)([imgy]{0,4})(?!\w)/,f=/^\/{3}([\s\S]+?)\/{3}([imgy]{0,4})(?!\w)/,m=/\s+(?:#.*)?/g,x=/\n/g,d=/\n+([^\n\S]*)/g,p=/\*\//,C=/^\s*(?:,|\??\.(?![.\d])|::)/,V=/\s+$/,l=["-=","+=","/=","*=","%=","||=","&&=","?=","<<=",">>=",">>>=","&=","^=","|="],P=["!","~","NEW","TYPEOF","DELETE","DO"],F=["&&","||","&","|","^"],j=["<<",">>",">>>"],h=["==","!=","<",">","<=",">="],N=["*","/","%"],_=["IN","OF","INSTANCEOF"],n=["TRUE","FALSE"],D=["NUMBER","REGEX","BOOL","NULL","UNDEFINED","++","--"],S=D.concat(")","}","THIS","IDENTIFIER","STRING","]"),i=["IDENTIFIER","STRING","REGEX",")","]","}","?","::","@","THIS","SUPER"],k=i.concat("NUMBER","BOOL","NULL","UNDEFINED"),T=["INDENT","OUTDENT","TERMINATOR"]}.call(this),t.exports}(),require["./parser"]=function(){var e={},t={exports:e},n=function(){function e(){this.yy={}}var t={trace:function(){},yy:{},symbols_:{error:2,Root:3,Body:4,Block:5,TERMINATOR:6,Line:7,Expression:8,Statement:9,Return:10,Comment:11,STATEMENT:12,Value:13,Invocation:14,Code:15,Operation:16,Assign:17,If:18,Try:19,While:20,For:21,Switch:22,Class:23,Throw:24,INDENT:25,OUTDENT:26,Identifier:27,IDENTIFIER:28,AlphaNumeric:29,NUMBER:30,STRING:31,Literal:32,JS:33,REGEX:34,DEBUGGER:35,UNDEFINED:36,NULL:37,BOOL:38,Assignable:39,"=":40,AssignObj:41,ObjAssignable:42,":":43,ThisProperty:44,RETURN:45,HERECOMMENT:46,PARAM_START:47,ParamList:48,PARAM_END:49,FuncGlyph:50,"->":51,"=>":52,OptComma:53,",":54,Param:55,ParamVar:56,"...":57,Array:58,Object:59,Splat:60,SimpleAssignable:61,Accessor:62,Parenthetical:63,Range:64,This:65,".":66,"?.":67,"::":68,"?::":69,Index:70,INDEX_START:71,IndexValue:72,INDEX_END:73,INDEX_SOAK:74,Slice:75,"{":76,AssignList:77,"}":78,CLASS:79,EXTENDS:80,OptFuncExist:81,Arguments:82,SUPER:83,FUNC_EXIST:84,CALL_START:85,CALL_END:86,ArgList:87,THIS:88,"@":89,"[":90,"]":91,RangeDots:92,"..":93,Arg:94,SimpleArgs:95,TRY:96,Catch:97,FINALLY:98,CATCH:99,THROW:100,"(":101,")":102,WhileSource:103,WHILE:104,WHEN:105,UNTIL:106,Loop:107,LOOP:108,ForBody:109,FOR:110,ForStart:111,ForSource:112,ForVariables:113,OWN:114,ForValue:115,FORIN:116,FOROF:117,BY:118,SWITCH:119,Whens:120,ELSE:121,When:122,LEADING_WHEN:123,IfBlock:124,IF:125,POST_IF:126,UNARY:127,"-":128,"+":129,"--":130,"++":131,"?":132,MATH:133,SHIFT:134,COMPARE:135,LOGIC:136,RELATION:137,COMPOUND_ASSIGN:138,$accept:0,$end:1},terminals_:{2:"error",6:"TERMINATOR",12:"STATEMENT",25:"INDENT",26:"OUTDENT",28:"IDENTIFIER",30:"NUMBER",31:"STRING",33:"JS",34:"REGEX",35:"DEBUGGER",36:"UNDEFINED",37:"NULL",38:"BOOL",40:"=",43:":",45:"RETURN",46:"HERECOMMENT",47:"PARAM_START",49:"PARAM_END",51:"->",52:"=>",54:",",57:"...",66:".",67:"?.",68:"::",69:"?::",71:"INDEX_START",73:"INDEX_END",74:"INDEX_SOAK",76:"{",78:"}",79:"CLASS",80:"EXTENDS",83:"SUPER",84:"FUNC_EXIST",85:"CALL_START",86:"CALL_END",88:"THIS",89:"@",90:"[",91:"]",93:"..",96:"TRY",98:"FINALLY",99:"CATCH",100:"THROW",101:"(",102:")",104:"WHILE",105:"WHEN",106:"UNTIL",108:"LOOP",110:"FOR",114:"OWN",116:"FORIN",117:"FOROF",118:"BY",119:"SWITCH",121:"ELSE",123:"LEADING_WHEN",125:"IF",126:"POST_IF",127:"UNARY",128:"-",129:"+",130:"--",131:"++",132:"?",133:"MATH",134:"SHIFT",135:"COMPARE",136:"LOGIC",137:"RELATION",138:"COMPOUND_ASSIGN"},productions_:[0,[3,0],[3,1],[3,2],[4,1],[4,3],[4,2],[7,1],[7,1],[9,1],[9,1],[9,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[5,2],[5,3],[27,1],[29,1],[29,1],[32,1],[32,1],[32,1],[32,1],[32,1],[32,1],[32,1],[17,3],[17,4],[17,5],[41,1],[41,3],[41,5],[41,1],[42,1],[42,1],[42,1],[10,2],[10,1],[11,1],[15,5],[15,2],[50,1],[50,1],[53,0],[53,1],[48,0],[48,1],[48,3],[48,4],[48,6],[55,1],[55,2],[55,3],[56,1],[56,1],[56,1],[56,1],[60,2],[61,1],[61,2],[61,2],[61,1],[39,1],[39,1],[39,1],[13,1],[13,1],[13,1],[13,1],[13,1],[62,2],[62,2],[62,2],[62,2],[62,1],[62,1],[70,3],[70,2],[72,1],[72,1],[59,4],[77,0],[77,1],[77,3],[77,4],[77,6],[23,1],[23,2],[23,3],[23,4],[23,2],[23,3],[23,4],[23,5],[14,3],[14,3],[14,1],[14,2],[81,0],[81,1],[82,2],[82,4],[65,1],[65,1],[44,2],[58,2],[58,4],[92,1],[92,1],[64,5],[75,3],[75,2],[75,2],[75,1],[87,1],[87,3],[87,4],[87,4],[87,6],[94,1],[94,1],[95,1],[95,3],[19,2],[19,3],[19,4],[19,5],[97,3],[97,3],[97,2],[24,2],[63,3],[63,5],[103,2],[103,4],[103,2],[103,4],[20,2],[20,2],[20,2],[20,1],[107,2],[107,2],[21,2],[21,2],[21,2],[109,2],[109,2],[111,2],[111,3],[115,1],[115,1],[115,1],[115,1],[113,1],[113,3],[112,2],[112,2],[112,4],[112,4],[112,4],[112,6],[112,6],[22,5],[22,7],[22,4],[22,6],[120,1],[120,2],[122,3],[122,4],[124,3],[124,5],[18,1],[18,3],[18,3],[18,3],[16,2],[16,2],[16,2],[16,2],[16,2],[16,2],[16,2],[16,2],[16,3],[16,3],[16,3],[16,3],[16,3],[16,3],[16,3],[16,3],[16,5],[16,4],[16,3]],performAction:function(e,t,n,i,s,r,o){var a=r.length-1;switch(s){case 1:return this.$=i.addLocationDataFn(o[a],o[a])(new i.Block);case 2:return this.$=r[a];case 3:return this.$=r[a-1];case 4:this.$=i.addLocationDataFn(o[a],o[a])(i.Block.wrap([r[a]]));break;case 5:this.$=i.addLocationDataFn(o[a-2],o[a])(r[a-2].push(r[a]));break;case 6:this.$=r[a-1];break;case 7:this.$=r[a];break;case 8:this.$=r[a];break;case 9:this.$=r[a];break;case 10:this.$=r[a];break;case 11:this.$=i.addLocationDataFn(o[a],o[a])(new i.Literal(r[a]));break;case 12:this.$=r[a];break;case 13:this.$=r[a];break;case 14:this.$=r[a];break;case 15:this.$=r[a];break;case 16:this.$=r[a];break;case 17:this.$=r[a];break;case 18:this.$=r[a];break;case 19:this.$=r[a];break;case 20:this.$=r[a];break;case 21:this.$=r[a];break;case 22:this.$=r[a];break;case 23:this.$=r[a];break;case 24:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.Block);break;case 25:this.$=i.addLocationDataFn(o[a-2],o[a])(r[a-1]);break;case 26:this.$=i.addLocationDataFn(o[a],o[a])(new i.Literal(r[a]));break;case 27:this.$=i.addLocationDataFn(o[a],o[a])(new i.Literal(r[a]));break;case 28:this.$=i.addLocationDataFn(o[a],o[a])(new i.Literal(r[a]));break;case 29:this.$=r[a];break;case 30:this.$=i.addLocationDataFn(o[a],o[a])(new i.Literal(r[a]));break;case 31:this.$=i.addLocationDataFn(o[a],o[a])(new i.Literal(r[a]));break;case 32:this.$=i.addLocationDataFn(o[a],o[a])(new i.Literal(r[a]));break;case 33:this.$=i.addLocationDataFn(o[a],o[a])(new i.Undefined);break;case 34:this.$=i.addLocationDataFn(o[a],o[a])(new i.Null);break;case 35:this.$=i.addLocationDataFn(o[a],o[a])(new i.Bool(r[a]));break;case 36:this.$=i.addLocationDataFn(o[a-2],o[a])(new i.Assign(r[a-2],r[a]));break;case 37:this.$=i.addLocationDataFn(o[a-3],o[a])(new i.Assign(r[a-3],r[a]));break;case 38:this.$=i.addLocationDataFn(o[a-4],o[a])(new i.Assign(r[a-4],r[a-1]));break;case 39:this.$=i.addLocationDataFn(o[a],o[a])(new i.Value(r[a]));break;case 40:this.$=i.addLocationDataFn(o[a-2],o[a])(new i.Assign(i.addLocationDataFn(o[a-2])(new i.Value(r[a-2])),r[a],"object"));break;case 41:this.$=i.addLocationDataFn(o[a-4],o[a])(new i.Assign(i.addLocationDataFn(o[a-4])(new i.Value(r[a-4])),r[a-1],"object"));break;case 42:this.$=r[a];break;case 43:this.$=r[a];break;case 44:this.$=r[a];break;case 45:this.$=r[a];break;case 46:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.Return(r[a]));break;case 47:this.$=i.addLocationDataFn(o[a],o[a])(new i.Return);break;case 48:this.$=i.addLocationDataFn(o[a],o[a])(new i.Comment(r[a]));break;case 49:this.$=i.addLocationDataFn(o[a-4],o[a])(new i.Code(r[a-3],r[a],r[a-1]));break;case 50:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.Code([],r[a],r[a-1]));
9
+ break;case 51:this.$=i.addLocationDataFn(o[a],o[a])("func");break;case 52:this.$=i.addLocationDataFn(o[a],o[a])("boundfunc");break;case 53:this.$=r[a];break;case 54:this.$=r[a];break;case 55:this.$=i.addLocationDataFn(o[a],o[a])([]);break;case 56:this.$=i.addLocationDataFn(o[a],o[a])([r[a]]);break;case 57:this.$=i.addLocationDataFn(o[a-2],o[a])(r[a-2].concat(r[a]));break;case 58:this.$=i.addLocationDataFn(o[a-3],o[a])(r[a-3].concat(r[a]));break;case 59:this.$=i.addLocationDataFn(o[a-5],o[a])(r[a-5].concat(r[a-2]));break;case 60:this.$=i.addLocationDataFn(o[a],o[a])(new i.Param(r[a]));break;case 61:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.Param(r[a-1],null,!0));break;case 62:this.$=i.addLocationDataFn(o[a-2],o[a])(new i.Param(r[a-2],r[a]));break;case 63:this.$=r[a];break;case 64:this.$=r[a];break;case 65:this.$=r[a];break;case 66:this.$=r[a];break;case 67:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.Splat(r[a-1]));break;case 68:this.$=i.addLocationDataFn(o[a],o[a])(new i.Value(r[a]));break;case 69:this.$=i.addLocationDataFn(o[a-1],o[a])(r[a-1].add(r[a]));break;case 70:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.Value(r[a-1],[].concat(r[a])));break;case 71:this.$=r[a];break;case 72:this.$=r[a];break;case 73:this.$=i.addLocationDataFn(o[a],o[a])(new i.Value(r[a]));break;case 74:this.$=i.addLocationDataFn(o[a],o[a])(new i.Value(r[a]));break;case 75:this.$=r[a];break;case 76:this.$=i.addLocationDataFn(o[a],o[a])(new i.Value(r[a]));break;case 77:this.$=i.addLocationDataFn(o[a],o[a])(new i.Value(r[a]));break;case 78:this.$=i.addLocationDataFn(o[a],o[a])(new i.Value(r[a]));break;case 79:this.$=r[a];break;case 80:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.Access(r[a]));break;case 81:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.Access(r[a],"soak"));break;case 82:this.$=i.addLocationDataFn(o[a-1],o[a])([i.addLocationDataFn(o[a-1])(new i.Access(new i.Literal("prototype"))),i.addLocationDataFn(o[a])(new i.Access(r[a]))]);break;case 83:this.$=i.addLocationDataFn(o[a-1],o[a])([i.addLocationDataFn(o[a-1])(new i.Access(new i.Literal("prototype"),"soak")),i.addLocationDataFn(o[a])(new i.Access(r[a]))]);break;case 84:this.$=i.addLocationDataFn(o[a],o[a])(new i.Access(new i.Literal("prototype")));break;case 85:this.$=r[a];break;case 86:this.$=i.addLocationDataFn(o[a-2],o[a])(r[a-1]);break;case 87:this.$=i.addLocationDataFn(o[a-1],o[a])(i.extend(r[a],{soak:!0}));break;case 88:this.$=i.addLocationDataFn(o[a],o[a])(new i.Index(r[a]));break;case 89:this.$=i.addLocationDataFn(o[a],o[a])(new i.Slice(r[a]));break;case 90:this.$=i.addLocationDataFn(o[a-3],o[a])(new i.Obj(r[a-2],r[a-3].generated));break;case 91:this.$=i.addLocationDataFn(o[a],o[a])([]);break;case 92:this.$=i.addLocationDataFn(o[a],o[a])([r[a]]);break;case 93:this.$=i.addLocationDataFn(o[a-2],o[a])(r[a-2].concat(r[a]));break;case 94:this.$=i.addLocationDataFn(o[a-3],o[a])(r[a-3].concat(r[a]));break;case 95:this.$=i.addLocationDataFn(o[a-5],o[a])(r[a-5].concat(r[a-2]));break;case 96:this.$=i.addLocationDataFn(o[a],o[a])(new i.Class);break;case 97:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.Class(null,null,r[a]));break;case 98:this.$=i.addLocationDataFn(o[a-2],o[a])(new i.Class(null,r[a]));break;case 99:this.$=i.addLocationDataFn(o[a-3],o[a])(new i.Class(null,r[a-1],r[a]));break;case 100:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.Class(r[a]));break;case 101:this.$=i.addLocationDataFn(o[a-2],o[a])(new i.Class(r[a-1],null,r[a]));break;case 102:this.$=i.addLocationDataFn(o[a-3],o[a])(new i.Class(r[a-2],r[a]));break;case 103:this.$=i.addLocationDataFn(o[a-4],o[a])(new i.Class(r[a-3],r[a-1],r[a]));break;case 104:this.$=i.addLocationDataFn(o[a-2],o[a])(new i.Call(r[a-2],r[a],r[a-1]));break;case 105:this.$=i.addLocationDataFn(o[a-2],o[a])(new i.Call(r[a-2],r[a],r[a-1]));break;case 106:this.$=i.addLocationDataFn(o[a],o[a])(new i.Call("super",[new i.Splat(new i.Literal("arguments"))]));break;case 107:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.Call("super",r[a]));break;case 108:this.$=i.addLocationDataFn(o[a],o[a])(!1);break;case 109:this.$=i.addLocationDataFn(o[a],o[a])(!0);break;case 110:this.$=i.addLocationDataFn(o[a-1],o[a])([]);break;case 111:this.$=i.addLocationDataFn(o[a-3],o[a])(r[a-2]);break;case 112:this.$=i.addLocationDataFn(o[a],o[a])(new i.Value(new i.Literal("this")));break;case 113:this.$=i.addLocationDataFn(o[a],o[a])(new i.Value(new i.Literal("this")));break;case 114:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.Value(i.addLocationDataFn(o[a-1])(new i.Literal("this")),[i.addLocationDataFn(o[a])(new i.Access(r[a]))],"this"));break;case 115:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.Arr([]));break;case 116:this.$=i.addLocationDataFn(o[a-3],o[a])(new i.Arr(r[a-2]));break;case 117:this.$=i.addLocationDataFn(o[a],o[a])("inclusive");break;case 118:this.$=i.addLocationDataFn(o[a],o[a])("exclusive");break;case 119:this.$=i.addLocationDataFn(o[a-4],o[a])(new i.Range(r[a-3],r[a-1],r[a-2]));break;case 120:this.$=i.addLocationDataFn(o[a-2],o[a])(new i.Range(r[a-2],r[a],r[a-1]));break;case 121:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.Range(r[a-1],null,r[a]));break;case 122:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.Range(null,r[a],r[a-1]));break;case 123:this.$=i.addLocationDataFn(o[a],o[a])(new i.Range(null,null,r[a]));break;case 124:this.$=i.addLocationDataFn(o[a],o[a])([r[a]]);break;case 125:this.$=i.addLocationDataFn(o[a-2],o[a])(r[a-2].concat(r[a]));break;case 126:this.$=i.addLocationDataFn(o[a-3],o[a])(r[a-3].concat(r[a]));break;case 127:this.$=i.addLocationDataFn(o[a-3],o[a])(r[a-2]);break;case 128:this.$=i.addLocationDataFn(o[a-5],o[a])(r[a-5].concat(r[a-2]));break;case 129:this.$=r[a];break;case 130:this.$=r[a];break;case 131:this.$=r[a];break;case 132:this.$=i.addLocationDataFn(o[a-2],o[a])([].concat(r[a-2],r[a]));break;case 133:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.Try(r[a]));break;case 134:this.$=i.addLocationDataFn(o[a-2],o[a])(new i.Try(r[a-1],r[a][0],r[a][1]));break;case 135:this.$=i.addLocationDataFn(o[a-3],o[a])(new i.Try(r[a-2],null,null,r[a]));break;case 136:this.$=i.addLocationDataFn(o[a-4],o[a])(new i.Try(r[a-3],r[a-2][0],r[a-2][1],r[a]));break;case 137:this.$=i.addLocationDataFn(o[a-2],o[a])([r[a-1],r[a]]);break;case 138:this.$=i.addLocationDataFn(o[a-2],o[a])([i.addLocationDataFn(o[a-1])(new i.Value(r[a-1])),r[a]]);break;case 139:this.$=i.addLocationDataFn(o[a-1],o[a])([null,r[a]]);break;case 140:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.Throw(r[a]));break;case 141:this.$=i.addLocationDataFn(o[a-2],o[a])(new i.Parens(r[a-1]));break;case 142:this.$=i.addLocationDataFn(o[a-4],o[a])(new i.Parens(r[a-2]));break;case 143:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.While(r[a]));break;case 144:this.$=i.addLocationDataFn(o[a-3],o[a])(new i.While(r[a-2],{guard:r[a]}));break;case 145:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.While(r[a],{invert:!0}));break;case 146:this.$=i.addLocationDataFn(o[a-3],o[a])(new i.While(r[a-2],{invert:!0,guard:r[a]}));break;case 147:this.$=i.addLocationDataFn(o[a-1],o[a])(r[a-1].addBody(r[a]));break;case 148:this.$=i.addLocationDataFn(o[a-1],o[a])(r[a].addBody(i.addLocationDataFn(o[a-1])(i.Block.wrap([r[a-1]]))));break;case 149:this.$=i.addLocationDataFn(o[a-1],o[a])(r[a].addBody(i.addLocationDataFn(o[a-1])(i.Block.wrap([r[a-1]]))));break;case 150:this.$=i.addLocationDataFn(o[a],o[a])(r[a]);break;case 151:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.While(i.addLocationDataFn(o[a-1])(new i.Literal("true"))).addBody(r[a]));break;case 152:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.While(i.addLocationDataFn(o[a-1])(new i.Literal("true"))).addBody(i.addLocationDataFn(o[a])(i.Block.wrap([r[a]]))));break;case 153:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.For(r[a-1],r[a]));break;case 154:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.For(r[a-1],r[a]));break;case 155:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.For(r[a],r[a-1]));break;case 156:this.$=i.addLocationDataFn(o[a-1],o[a])({source:i.addLocationDataFn(o[a])(new i.Value(r[a]))});break;case 157:this.$=i.addLocationDataFn(o[a-1],o[a])(function(){return r[a].own=r[a-1].own,r[a].name=r[a-1][0],r[a].index=r[a-1][1],r[a]}());break;case 158:this.$=i.addLocationDataFn(o[a-1],o[a])(r[a]);break;case 159:this.$=i.addLocationDataFn(o[a-2],o[a])(function(){return r[a].own=!0,r[a]}());break;case 160:this.$=r[a];break;case 161:this.$=r[a];break;case 162:this.$=i.addLocationDataFn(o[a],o[a])(new i.Value(r[a]));break;case 163:this.$=i.addLocationDataFn(o[a],o[a])(new i.Value(r[a]));break;case 164:this.$=i.addLocationDataFn(o[a],o[a])([r[a]]);break;case 165:this.$=i.addLocationDataFn(o[a-2],o[a])([r[a-2],r[a]]);break;case 166:this.$=i.addLocationDataFn(o[a-1],o[a])({source:r[a]});break;case 167:this.$=i.addLocationDataFn(o[a-1],o[a])({source:r[a],object:!0});break;case 168:this.$=i.addLocationDataFn(o[a-3],o[a])({source:r[a-2],guard:r[a]});break;case 169:this.$=i.addLocationDataFn(o[a-3],o[a])({source:r[a-2],guard:r[a],object:!0});break;case 170:this.$=i.addLocationDataFn(o[a-3],o[a])({source:r[a-2],step:r[a]});break;case 171:this.$=i.addLocationDataFn(o[a-5],o[a])({source:r[a-4],guard:r[a-2],step:r[a]});break;case 172:this.$=i.addLocationDataFn(o[a-5],o[a])({source:r[a-4],step:r[a-2],guard:r[a]});break;case 173:this.$=i.addLocationDataFn(o[a-4],o[a])(new i.Switch(r[a-3],r[a-1]));break;case 174:this.$=i.addLocationDataFn(o[a-6],o[a])(new i.Switch(r[a-5],r[a-3],r[a-1]));break;case 175:this.$=i.addLocationDataFn(o[a-3],o[a])(new i.Switch(null,r[a-1]));break;case 176:this.$=i.addLocationDataFn(o[a-5],o[a])(new i.Switch(null,r[a-3],r[a-1]));break;case 177:this.$=r[a];break;case 178:this.$=i.addLocationDataFn(o[a-1],o[a])(r[a-1].concat(r[a]));break;case 179:this.$=i.addLocationDataFn(o[a-2],o[a])([[r[a-1],r[a]]]);break;case 180:this.$=i.addLocationDataFn(o[a-3],o[a])([[r[a-2],r[a-1]]]);break;case 181:this.$=i.addLocationDataFn(o[a-2],o[a])(new i.If(r[a-1],r[a],{type:r[a-2]}));break;case 182:this.$=i.addLocationDataFn(o[a-4],o[a])(r[a-4].addElse(new i.If(r[a-1],r[a],{type:r[a-2]})));break;case 183:this.$=r[a];break;case 184:this.$=i.addLocationDataFn(o[a-2],o[a])(r[a-2].addElse(r[a]));break;case 185:this.$=i.addLocationDataFn(o[a-2],o[a])(new i.If(r[a],i.addLocationDataFn(o[a-2])(i.Block.wrap([r[a-2]])),{type:r[a-1],statement:!0}));break;case 186:this.$=i.addLocationDataFn(o[a-2],o[a])(new i.If(r[a],i.addLocationDataFn(o[a-2])(i.Block.wrap([r[a-2]])),{type:r[a-1],statement:!0}));break;case 187:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.Op(r[a-1],r[a]));break;case 188:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.Op("-",r[a]));break;case 189:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.Op("+",r[a]));break;case 190:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.Op("--",r[a]));break;case 191:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.Op("++",r[a]));break;case 192:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.Op("--",r[a-1],null,!0));break;case 193:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.Op("++",r[a-1],null,!0));break;case 194:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.Existence(r[a-1]));break;case 195:this.$=i.addLocationDataFn(o[a-2],o[a])(new i.Op("+",r[a-2],r[a]));break;case 196:this.$=i.addLocationDataFn(o[a-2],o[a])(new i.Op("-",r[a-2],r[a]));break;case 197:this.$=i.addLocationDataFn(o[a-2],o[a])(new i.Op(r[a-1],r[a-2],r[a]));break;case 198:this.$=i.addLocationDataFn(o[a-2],o[a])(new i.Op(r[a-1],r[a-2],r[a]));break;case 199:this.$=i.addLocationDataFn(o[a-2],o[a])(new i.Op(r[a-1],r[a-2],r[a]));break;case 200:this.$=i.addLocationDataFn(o[a-2],o[a])(new i.Op(r[a-1],r[a-2],r[a]));break;case 201:this.$=i.addLocationDataFn(o[a-2],o[a])(function(){return"!"===r[a-1].charAt(0)?new i.Op(r[a-1].slice(1),r[a-2],r[a]).invert():new i.Op(r[a-1],r[a-2],r[a])}());break;case 202:this.$=i.addLocationDataFn(o[a-2],o[a])(new i.Assign(r[a-2],r[a],r[a-1]));break;case 203:this.$=i.addLocationDataFn(o[a-4],o[a])(new i.Assign(r[a-4],r[a-1],r[a-3]));break;case 204:this.$=i.addLocationDataFn(o[a-3],o[a])(new i.Assign(r[a-3],r[a],r[a-2]));break;case 205:this.$=i.addLocationDataFn(o[a-2],o[a])(new i.Extends(r[a-2],r[a]))}},table:[{1:[2,1],3:1,4:2,5:3,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,5],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[3]},{1:[2,2],6:[1,74]},{6:[1,75]},{1:[2,4],6:[2,4],26:[2,4],102:[2,4]},{4:77,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,26:[1,76],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,7],6:[2,7],26:[2,7],102:[2,7],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,8],6:[2,8],26:[2,8],102:[2,8],103:90,104:[1,65],106:[1,66],109:91,110:[1,68],111:69,126:[1,89]},{1:[2,12],6:[2,12],25:[2,12],26:[2,12],49:[2,12],54:[2,12],57:[2,12],62:93,66:[1,95],67:[1,96],68:[1,97],69:[1,98],70:99,71:[1,100],73:[2,12],74:[1,101],78:[2,12],81:92,84:[1,94],85:[2,108],86:[2,12],91:[2,12],93:[2,12],102:[2,12],104:[2,12],105:[2,12],106:[2,12],110:[2,12],118:[2,12],126:[2,12],128:[2,12],129:[2,12],132:[2,12],133:[2,12],134:[2,12],135:[2,12],136:[2,12],137:[2,12]},{1:[2,13],6:[2,13],25:[2,13],26:[2,13],49:[2,13],54:[2,13],57:[2,13],62:103,66:[1,95],67:[1,96],68:[1,97],69:[1,98],70:99,71:[1,100],73:[2,13],74:[1,101],78:[2,13],81:102,84:[1,94],85:[2,108],86:[2,13],91:[2,13],93:[2,13],102:[2,13],104:[2,13],105:[2,13],106:[2,13],110:[2,13],118:[2,13],126:[2,13],128:[2,13],129:[2,13],132:[2,13],133:[2,13],134:[2,13],135:[2,13],136:[2,13],137:[2,13]},{1:[2,14],6:[2,14],25:[2,14],26:[2,14],49:[2,14],54:[2,14],57:[2,14],73:[2,14],78:[2,14],86:[2,14],91:[2,14],93:[2,14],102:[2,14],104:[2,14],105:[2,14],106:[2,14],110:[2,14],118:[2,14],126:[2,14],128:[2,14],129:[2,14],132:[2,14],133:[2,14],134:[2,14],135:[2,14],136:[2,14],137:[2,14]},{1:[2,15],6:[2,15],25:[2,15],26:[2,15],49:[2,15],54:[2,15],57:[2,15],73:[2,15],78:[2,15],86:[2,15],91:[2,15],93:[2,15],102:[2,15],104:[2,15],105:[2,15],106:[2,15],110:[2,15],118:[2,15],126:[2,15],128:[2,15],129:[2,15],132:[2,15],133:[2,15],134:[2,15],135:[2,15],136:[2,15],137:[2,15]},{1:[2,16],6:[2,16],25:[2,16],26:[2,16],49:[2,16],54:[2,16],57:[2,16],73:[2,16],78:[2,16],86:[2,16],91:[2,16],93:[2,16],102:[2,16],104:[2,16],105:[2,16],106:[2,16],110:[2,16],118:[2,16],126:[2,16],128:[2,16],129:[2,16],132:[2,16],133:[2,16],134:[2,16],135:[2,16],136:[2,16],137:[2,16]},{1:[2,17],6:[2,17],25:[2,17],26:[2,17],49:[2,17],54:[2,17],57:[2,17],73:[2,17],78:[2,17],86:[2,17],91:[2,17],93:[2,17],102:[2,17],104:[2,17],105:[2,17],106:[2,17],110:[2,17],118:[2,17],126:[2,17],128:[2,17],129:[2,17],132:[2,17],133:[2,17],134:[2,17],135:[2,17],136:[2,17],137:[2,17]},{1:[2,18],6:[2,18],25:[2,18],26:[2,18],49:[2,18],54:[2,18],57:[2,18],73:[2,18],78:[2,18],86:[2,18],91:[2,18],93:[2,18],102:[2,18],104:[2,18],105:[2,18],106:[2,18],110:[2,18],118:[2,18],126:[2,18],128:[2,18],129:[2,18],132:[2,18],133:[2,18],134:[2,18],135:[2,18],136:[2,18],137:[2,18]},{1:[2,19],6:[2,19],25:[2,19],26:[2,19],49:[2,19],54:[2,19],57:[2,19],73:[2,19],78:[2,19],86:[2,19],91:[2,19],93:[2,19],102:[2,19],104:[2,19],105:[2,19],106:[2,19],110:[2,19],118:[2,19],126:[2,19],128:[2,19],129:[2,19],132:[2,19],133:[2,19],134:[2,19],135:[2,19],136:[2,19],137:[2,19]},{1:[2,20],6:[2,20],25:[2,20],26:[2,20],49:[2,20],54:[2,20],57:[2,20],73:[2,20],78:[2,20],86:[2,20],91:[2,20],93:[2,20],102:[2,20],104:[2,20],105:[2,20],106:[2,20],110:[2,20],118:[2,20],126:[2,20],128:[2,20],129:[2,20],132:[2,20],133:[2,20],134:[2,20],135:[2,20],136:[2,20],137:[2,20]},{1:[2,21],6:[2,21],25:[2,21],26:[2,21],49:[2,21],54:[2,21],57:[2,21],73:[2,21],78:[2,21],86:[2,21],91:[2,21],93:[2,21],102:[2,21],104:[2,21],105:[2,21],106:[2,21],110:[2,21],118:[2,21],126:[2,21],128:[2,21],129:[2,21],132:[2,21],133:[2,21],134:[2,21],135:[2,21],136:[2,21],137:[2,21]},{1:[2,22],6:[2,22],25:[2,22],26:[2,22],49:[2,22],54:[2,22],57:[2,22],73:[2,22],78:[2,22],86:[2,22],91:[2,22],93:[2,22],102:[2,22],104:[2,22],105:[2,22],106:[2,22],110:[2,22],118:[2,22],126:[2,22],128:[2,22],129:[2,22],132:[2,22],133:[2,22],134:[2,22],135:[2,22],136:[2,22],137:[2,22]},{1:[2,23],6:[2,23],25:[2,23],26:[2,23],49:[2,23],54:[2,23],57:[2,23],73:[2,23],78:[2,23],86:[2,23],91:[2,23],93:[2,23],102:[2,23],104:[2,23],105:[2,23],106:[2,23],110:[2,23],118:[2,23],126:[2,23],128:[2,23],129:[2,23],132:[2,23],133:[2,23],134:[2,23],135:[2,23],136:[2,23],137:[2,23]},{1:[2,9],6:[2,9],26:[2,9],102:[2,9],104:[2,9],106:[2,9],110:[2,9],126:[2,9]},{1:[2,10],6:[2,10],26:[2,10],102:[2,10],104:[2,10],106:[2,10],110:[2,10],126:[2,10]},{1:[2,11],6:[2,11],26:[2,11],102:[2,11],104:[2,11],106:[2,11],110:[2,11],126:[2,11]},{1:[2,75],6:[2,75],25:[2,75],26:[2,75],40:[1,104],49:[2,75],54:[2,75],57:[2,75],66:[2,75],67:[2,75],68:[2,75],69:[2,75],71:[2,75],73:[2,75],74:[2,75],78:[2,75],84:[2,75],85:[2,75],86:[2,75],91:[2,75],93:[2,75],102:[2,75],104:[2,75],105:[2,75],106:[2,75],110:[2,75],118:[2,75],126:[2,75],128:[2,75],129:[2,75],132:[2,75],133:[2,75],134:[2,75],135:[2,75],136:[2,75],137:[2,75]},{1:[2,76],6:[2,76],25:[2,76],26:[2,76],49:[2,76],54:[2,76],57:[2,76],66:[2,76],67:[2,76],68:[2,76],69:[2,76],71:[2,76],73:[2,76],74:[2,76],78:[2,76],84:[2,76],85:[2,76],86:[2,76],91:[2,76],93:[2,76],102:[2,76],104:[2,76],105:[2,76],106:[2,76],110:[2,76],118:[2,76],126:[2,76],128:[2,76],129:[2,76],132:[2,76],133:[2,76],134:[2,76],135:[2,76],136:[2,76],137:[2,76]},{1:[2,77],6:[2,77],25:[2,77],26:[2,77],49:[2,77],54:[2,77],57:[2,77],66:[2,77],67:[2,77],68:[2,77],69:[2,77],71:[2,77],73:[2,77],74:[2,77],78:[2,77],84:[2,77],85:[2,77],86:[2,77],91:[2,77],93:[2,77],102:[2,77],104:[2,77],105:[2,77],106:[2,77],110:[2,77],118:[2,77],126:[2,77],128:[2,77],129:[2,77],132:[2,77],133:[2,77],134:[2,77],135:[2,77],136:[2,77],137:[2,77]},{1:[2,78],6:[2,78],25:[2,78],26:[2,78],49:[2,78],54:[2,78],57:[2,78],66:[2,78],67:[2,78],68:[2,78],69:[2,78],71:[2,78],73:[2,78],74:[2,78],78:[2,78],84:[2,78],85:[2,78],86:[2,78],91:[2,78],93:[2,78],102:[2,78],104:[2,78],105:[2,78],106:[2,78],110:[2,78],118:[2,78],126:[2,78],128:[2,78],129:[2,78],132:[2,78],133:[2,78],134:[2,78],135:[2,78],136:[2,78],137:[2,78]},{1:[2,79],6:[2,79],25:[2,79],26:[2,79],49:[2,79],54:[2,79],57:[2,79],66:[2,79],67:[2,79],68:[2,79],69:[2,79],71:[2,79],73:[2,79],74:[2,79],78:[2,79],84:[2,79],85:[2,79],86:[2,79],91:[2,79],93:[2,79],102:[2,79],104:[2,79],105:[2,79],106:[2,79],110:[2,79],118:[2,79],126:[2,79],128:[2,79],129:[2,79],132:[2,79],133:[2,79],134:[2,79],135:[2,79],136:[2,79],137:[2,79]},{1:[2,106],6:[2,106],25:[2,106],26:[2,106],49:[2,106],54:[2,106],57:[2,106],66:[2,106],67:[2,106],68:[2,106],69:[2,106],71:[2,106],73:[2,106],74:[2,106],78:[2,106],82:105,84:[2,106],85:[1,106],86:[2,106],91:[2,106],93:[2,106],102:[2,106],104:[2,106],105:[2,106],106:[2,106],110:[2,106],118:[2,106],126:[2,106],128:[2,106],129:[2,106],132:[2,106],133:[2,106],134:[2,106],135:[2,106],136:[2,106],137:[2,106]},{6:[2,55],25:[2,55],27:110,28:[1,73],44:111,48:107,49:[2,55],54:[2,55],55:108,56:109,58:112,59:113,76:[1,70],89:[1,114],90:[1,115]},{5:116,25:[1,5]},{8:117,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:119,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:120,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{13:122,14:123,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:124,44:63,58:47,59:48,61:121,63:25,64:26,65:27,76:[1,70],83:[1,28],88:[1,58],89:[1,59],90:[1,57],101:[1,56]},{13:122,14:123,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:124,44:63,58:47,59:48,61:125,63:25,64:26,65:27,76:[1,70],83:[1,28],88:[1,58],89:[1,59],90:[1,57],101:[1,56]},{1:[2,72],6:[2,72],25:[2,72],26:[2,72],40:[2,72],49:[2,72],54:[2,72],57:[2,72],66:[2,72],67:[2,72],68:[2,72],69:[2,72],71:[2,72],73:[2,72],74:[2,72],78:[2,72],80:[1,129],84:[2,72],85:[2,72],86:[2,72],91:[2,72],93:[2,72],102:[2,72],104:[2,72],105:[2,72],106:[2,72],110:[2,72],118:[2,72],126:[2,72],128:[2,72],129:[2,72],130:[1,126],131:[1,127],132:[2,72],133:[2,72],134:[2,72],135:[2,72],136:[2,72],137:[2,72],138:[1,128]},{1:[2,183],6:[2,183],25:[2,183],26:[2,183],49:[2,183],54:[2,183],57:[2,183],73:[2,183],78:[2,183],86:[2,183],91:[2,183],93:[2,183],102:[2,183],104:[2,183],105:[2,183],106:[2,183],110:[2,183],118:[2,183],121:[1,130],126:[2,183],128:[2,183],129:[2,183],132:[2,183],133:[2,183],134:[2,183],135:[2,183],136:[2,183],137:[2,183]},{5:131,25:[1,5]},{5:132,25:[1,5]},{1:[2,150],6:[2,150],25:[2,150],26:[2,150],49:[2,150],54:[2,150],57:[2,150],73:[2,150],78:[2,150],86:[2,150],91:[2,150],93:[2,150],102:[2,150],104:[2,150],105:[2,150],106:[2,150],110:[2,150],118:[2,150],126:[2,150],128:[2,150],129:[2,150],132:[2,150],133:[2,150],134:[2,150],135:[2,150],136:[2,150],137:[2,150]},{5:133,25:[1,5]},{8:134,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,135],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,96],5:136,6:[2,96],13:122,14:123,25:[1,5],26:[2,96],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:124,44:63,49:[2,96],54:[2,96],57:[2,96],58:47,59:48,61:138,63:25,64:26,65:27,73:[2,96],76:[1,70],78:[2,96],80:[1,137],83:[1,28],86:[2,96],88:[1,58],89:[1,59],90:[1,57],91:[2,96],93:[2,96],101:[1,56],102:[2,96],104:[2,96],105:[2,96],106:[2,96],110:[2,96],118:[2,96],126:[2,96],128:[2,96],129:[2,96],132:[2,96],133:[2,96],134:[2,96],135:[2,96],136:[2,96],137:[2,96]},{8:139,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,47],6:[2,47],8:140,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,26:[2,47],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],102:[2,47],103:39,104:[2,47],106:[2,47],107:40,108:[1,67],109:41,110:[2,47],111:69,119:[1,42],124:37,125:[1,64],126:[2,47],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,48],6:[2,48],25:[2,48],26:[2,48],54:[2,48],78:[2,48],102:[2,48],104:[2,48],106:[2,48],110:[2,48],126:[2,48]},{1:[2,73],6:[2,73],25:[2,73],26:[2,73],40:[2,73],49:[2,73],54:[2,73],57:[2,73],66:[2,73],67:[2,73],68:[2,73],69:[2,73],71:[2,73],73:[2,73],74:[2,73],78:[2,73],84:[2,73],85:[2,73],86:[2,73],91:[2,73],93:[2,73],102:[2,73],104:[2,73],105:[2,73],106:[2,73],110:[2,73],118:[2,73],126:[2,73],128:[2,73],129:[2,73],132:[2,73],133:[2,73],134:[2,73],135:[2,73],136:[2,73],137:[2,73]},{1:[2,74],6:[2,74],25:[2,74],26:[2,74],40:[2,74],49:[2,74],54:[2,74],57:[2,74],66:[2,74],67:[2,74],68:[2,74],69:[2,74],71:[2,74],73:[2,74],74:[2,74],78:[2,74],84:[2,74],85:[2,74],86:[2,74],91:[2,74],93:[2,74],102:[2,74],104:[2,74],105:[2,74],106:[2,74],110:[2,74],118:[2,74],126:[2,74],128:[2,74],129:[2,74],132:[2,74],133:[2,74],134:[2,74],135:[2,74],136:[2,74],137:[2,74]},{1:[2,29],6:[2,29],25:[2,29],26:[2,29],49:[2,29],54:[2,29],57:[2,29],66:[2,29],67:[2,29],68:[2,29],69:[2,29],71:[2,29],73:[2,29],74:[2,29],78:[2,29],84:[2,29],85:[2,29],86:[2,29],91:[2,29],93:[2,29],102:[2,29],104:[2,29],105:[2,29],106:[2,29],110:[2,29],118:[2,29],126:[2,29],128:[2,29],129:[2,29],132:[2,29],133:[2,29],134:[2,29],135:[2,29],136:[2,29],137:[2,29]},{1:[2,30],6:[2,30],25:[2,30],26:[2,30],49:[2,30],54:[2,30],57:[2,30],66:[2,30],67:[2,30],68:[2,30],69:[2,30],71:[2,30],73:[2,30],74:[2,30],78:[2,30],84:[2,30],85:[2,30],86:[2,30],91:[2,30],93:[2,30],102:[2,30],104:[2,30],105:[2,30],106:[2,30],110:[2,30],118:[2,30],126:[2,30],128:[2,30],129:[2,30],132:[2,30],133:[2,30],134:[2,30],135:[2,30],136:[2,30],137:[2,30]},{1:[2,31],6:[2,31],25:[2,31],26:[2,31],49:[2,31],54:[2,31],57:[2,31],66:[2,31],67:[2,31],68:[2,31],69:[2,31],71:[2,31],73:[2,31],74:[2,31],78:[2,31],84:[2,31],85:[2,31],86:[2,31],91:[2,31],93:[2,31],102:[2,31],104:[2,31],105:[2,31],106:[2,31],110:[2,31],118:[2,31],126:[2,31],128:[2,31],129:[2,31],132:[2,31],133:[2,31],134:[2,31],135:[2,31],136:[2,31],137:[2,31]},{1:[2,32],6:[2,32],25:[2,32],26:[2,32],49:[2,32],54:[2,32],57:[2,32],66:[2,32],67:[2,32],68:[2,32],69:[2,32],71:[2,32],73:[2,32],74:[2,32],78:[2,32],84:[2,32],85:[2,32],86:[2,32],91:[2,32],93:[2,32],102:[2,32],104:[2,32],105:[2,32],106:[2,32],110:[2,32],118:[2,32],126:[2,32],128:[2,32],129:[2,32],132:[2,32],133:[2,32],134:[2,32],135:[2,32],136:[2,32],137:[2,32]},{1:[2,33],6:[2,33],25:[2,33],26:[2,33],49:[2,33],54:[2,33],57:[2,33],66:[2,33],67:[2,33],68:[2,33],69:[2,33],71:[2,33],73:[2,33],74:[2,33],78:[2,33],84:[2,33],85:[2,33],86:[2,33],91:[2,33],93:[2,33],102:[2,33],104:[2,33],105:[2,33],106:[2,33],110:[2,33],118:[2,33],126:[2,33],128:[2,33],129:[2,33],132:[2,33],133:[2,33],134:[2,33],135:[2,33],136:[2,33],137:[2,33]},{1:[2,34],6:[2,34],25:[2,34],26:[2,34],49:[2,34],54:[2,34],57:[2,34],66:[2,34],67:[2,34],68:[2,34],69:[2,34],71:[2,34],73:[2,34],74:[2,34],78:[2,34],84:[2,34],85:[2,34],86:[2,34],91:[2,34],93:[2,34],102:[2,34],104:[2,34],105:[2,34],106:[2,34],110:[2,34],118:[2,34],126:[2,34],128:[2,34],129:[2,34],132:[2,34],133:[2,34],134:[2,34],135:[2,34],136:[2,34],137:[2,34]},{1:[2,35],6:[2,35],25:[2,35],26:[2,35],49:[2,35],54:[2,35],57:[2,35],66:[2,35],67:[2,35],68:[2,35],69:[2,35],71:[2,35],73:[2,35],74:[2,35],78:[2,35],84:[2,35],85:[2,35],86:[2,35],91:[2,35],93:[2,35],102:[2,35],104:[2,35],105:[2,35],106:[2,35],110:[2,35],118:[2,35],126:[2,35],128:[2,35],129:[2,35],132:[2,35],133:[2,35],134:[2,35],135:[2,35],136:[2,35],137:[2,35]},{4:141,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,142],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:143,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,147],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:148,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],87:145,88:[1,58],89:[1,59],90:[1,57],91:[1,144],94:146,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,112],6:[2,112],25:[2,112],26:[2,112],49:[2,112],54:[2,112],57:[2,112],66:[2,112],67:[2,112],68:[2,112],69:[2,112],71:[2,112],73:[2,112],74:[2,112],78:[2,112],84:[2,112],85:[2,112],86:[2,112],91:[2,112],93:[2,112],102:[2,112],104:[2,112],105:[2,112],106:[2,112],110:[2,112],118:[2,112],126:[2,112],128:[2,112],129:[2,112],132:[2,112],133:[2,112],134:[2,112],135:[2,112],136:[2,112],137:[2,112]},{1:[2,113],6:[2,113],25:[2,113],26:[2,113],27:149,28:[1,73],49:[2,113],54:[2,113],57:[2,113],66:[2,113],67:[2,113],68:[2,113],69:[2,113],71:[2,113],73:[2,113],74:[2,113],78:[2,113],84:[2,113],85:[2,113],86:[2,113],91:[2,113],93:[2,113],102:[2,113],104:[2,113],105:[2,113],106:[2,113],110:[2,113],118:[2,113],126:[2,113],128:[2,113],129:[2,113],132:[2,113],133:[2,113],134:[2,113],135:[2,113],136:[2,113],137:[2,113]},{25:[2,51]},{25:[2,52]},{1:[2,68],6:[2,68],25:[2,68],26:[2,68],40:[2,68],49:[2,68],54:[2,68],57:[2,68],66:[2,68],67:[2,68],68:[2,68],69:[2,68],71:[2,68],73:[2,68],74:[2,68],78:[2,68],80:[2,68],84:[2,68],85:[2,68],86:[2,68],91:[2,68],93:[2,68],102:[2,68],104:[2,68],105:[2,68],106:[2,68],110:[2,68],118:[2,68],126:[2,68],128:[2,68],129:[2,68],130:[2,68],131:[2,68],132:[2,68],133:[2,68],134:[2,68],135:[2,68],136:[2,68],137:[2,68],138:[2,68]},{1:[2,71],6:[2,71],25:[2,71],26:[2,71],40:[2,71],49:[2,71],54:[2,71],57:[2,71],66:[2,71],67:[2,71],68:[2,71],69:[2,71],71:[2,71],73:[2,71],74:[2,71],78:[2,71],80:[2,71],84:[2,71],85:[2,71],86:[2,71],91:[2,71],93:[2,71],102:[2,71],104:[2,71],105:[2,71],106:[2,71],110:[2,71],118:[2,71],126:[2,71],128:[2,71],129:[2,71],130:[2,71],131:[2,71],132:[2,71],133:[2,71],134:[2,71],135:[2,71],136:[2,71],137:[2,71],138:[2,71]},{8:150,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:151,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:152,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{5:153,8:154,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,5],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{27:159,28:[1,73],44:160,58:161,59:162,64:155,76:[1,70],89:[1,114],90:[1,57],113:156,114:[1,157],115:158},{112:163,116:[1,164],117:[1,165]},{6:[2,91],11:169,25:[2,91],27:170,28:[1,73],29:171,30:[1,71],31:[1,72],41:167,42:168,44:172,46:[1,46],54:[2,91],77:166,78:[2,91],89:[1,114]},{1:[2,27],6:[2,27],25:[2,27],26:[2,27],43:[2,27],49:[2,27],54:[2,27],57:[2,27],66:[2,27],67:[2,27],68:[2,27],69:[2,27],71:[2,27],73:[2,27],74:[2,27],78:[2,27],84:[2,27],85:[2,27],86:[2,27],91:[2,27],93:[2,27],102:[2,27],104:[2,27],105:[2,27],106:[2,27],110:[2,27],118:[2,27],126:[2,27],128:[2,27],129:[2,27],132:[2,27],133:[2,27],134:[2,27],135:[2,27],136:[2,27],137:[2,27]},{1:[2,28],6:[2,28],25:[2,28],26:[2,28],43:[2,28],49:[2,28],54:[2,28],57:[2,28],66:[2,28],67:[2,28],68:[2,28],69:[2,28],71:[2,28],73:[2,28],74:[2,28],78:[2,28],84:[2,28],85:[2,28],86:[2,28],91:[2,28],93:[2,28],102:[2,28],104:[2,28],105:[2,28],106:[2,28],110:[2,28],118:[2,28],126:[2,28],128:[2,28],129:[2,28],132:[2,28],133:[2,28],134:[2,28],135:[2,28],136:[2,28],137:[2,28]},{1:[2,26],6:[2,26],25:[2,26],26:[2,26],40:[2,26],43:[2,26],49:[2,26],54:[2,26],57:[2,26],66:[2,26],67:[2,26],68:[2,26],69:[2,26],71:[2,26],73:[2,26],74:[2,26],78:[2,26],80:[2,26],84:[2,26],85:[2,26],86:[2,26],91:[2,26],93:[2,26],102:[2,26],104:[2,26],105:[2,26],106:[2,26],110:[2,26],116:[2,26],117:[2,26],118:[2,26],126:[2,26],128:[2,26],129:[2,26],130:[2,26],131:[2,26],132:[2,26],133:[2,26],134:[2,26],135:[2,26],136:[2,26],137:[2,26],138:[2,26]},{1:[2,6],6:[2,6],7:173,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,26:[2,6],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],102:[2,6],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,3]},{1:[2,24],6:[2,24],25:[2,24],26:[2,24],49:[2,24],54:[2,24],57:[2,24],73:[2,24],78:[2,24],86:[2,24],91:[2,24],93:[2,24],98:[2,24],99:[2,24],102:[2,24],104:[2,24],105:[2,24],106:[2,24],110:[2,24],118:[2,24],121:[2,24],123:[2,24],126:[2,24],128:[2,24],129:[2,24],132:[2,24],133:[2,24],134:[2,24],135:[2,24],136:[2,24],137:[2,24]},{6:[1,74],26:[1,174]},{1:[2,194],6:[2,194],25:[2,194],26:[2,194],49:[2,194],54:[2,194],57:[2,194],73:[2,194],78:[2,194],86:[2,194],91:[2,194],93:[2,194],102:[2,194],104:[2,194],105:[2,194],106:[2,194],110:[2,194],118:[2,194],126:[2,194],128:[2,194],129:[2,194],132:[2,194],133:[2,194],134:[2,194],135:[2,194],136:[2,194],137:[2,194]},{8:175,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:176,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:177,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:178,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:179,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:180,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:181,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:182,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,149],6:[2,149],25:[2,149],26:[2,149],49:[2,149],54:[2,149],57:[2,149],73:[2,149],78:[2,149],86:[2,149],91:[2,149],93:[2,149],102:[2,149],104:[2,149],105:[2,149],106:[2,149],110:[2,149],118:[2,149],126:[2,149],128:[2,149],129:[2,149],132:[2,149],133:[2,149],134:[2,149],135:[2,149],136:[2,149],137:[2,149]},{1:[2,154],6:[2,154],25:[2,154],26:[2,154],49:[2,154],54:[2,154],57:[2,154],73:[2,154],78:[2,154],86:[2,154],91:[2,154],93:[2,154],102:[2,154],104:[2,154],105:[2,154],106:[2,154],110:[2,154],118:[2,154],126:[2,154],128:[2,154],129:[2,154],132:[2,154],133:[2,154],134:[2,154],135:[2,154],136:[2,154],137:[2,154]},{8:183,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,148],6:[2,148],25:[2,148],26:[2,148],49:[2,148],54:[2,148],57:[2,148],73:[2,148],78:[2,148],86:[2,148],91:[2,148],93:[2,148],102:[2,148],104:[2,148],105:[2,148],106:[2,148],110:[2,148],118:[2,148],126:[2,148],128:[2,148],129:[2,148],132:[2,148],133:[2,148],134:[2,148],135:[2,148],136:[2,148],137:[2,148]},{1:[2,153],6:[2,153],25:[2,153],26:[2,153],49:[2,153],54:[2,153],57:[2,153],73:[2,153],78:[2,153],86:[2,153],91:[2,153],93:[2,153],102:[2,153],104:[2,153],105:[2,153],106:[2,153],110:[2,153],118:[2,153],126:[2,153],128:[2,153],129:[2,153],132:[2,153],133:[2,153],134:[2,153],135:[2,153],136:[2,153],137:[2,153]},{82:184,85:[1,106]},{1:[2,69],6:[2,69],25:[2,69],26:[2,69],40:[2,69],49:[2,69],54:[2,69],57:[2,69],66:[2,69],67:[2,69],68:[2,69],69:[2,69],71:[2,69],73:[2,69],74:[2,69],78:[2,69],80:[2,69],84:[2,69],85:[2,69],86:[2,69],91:[2,69],93:[2,69],102:[2,69],104:[2,69],105:[2,69],106:[2,69],110:[2,69],118:[2,69],126:[2,69],128:[2,69],129:[2,69],130:[2,69],131:[2,69],132:[2,69],133:[2,69],134:[2,69],135:[2,69],136:[2,69],137:[2,69],138:[2,69]},{85:[2,109]},{27:185,28:[1,73]},{27:186,28:[1,73]},{1:[2,84],6:[2,84],25:[2,84],26:[2,84],27:187,28:[1,73],40:[2,84],49:[2,84],54:[2,84],57:[2,84],66:[2,84],67:[2,84],68:[2,84],69:[2,84],71:[2,84],73:[2,84],74:[2,84],78:[2,84],80:[2,84],84:[2,84],85:[2,84],86:[2,84],91:[2,84],93:[2,84],102:[2,84],104:[2,84],105:[2,84],106:[2,84],110:[2,84],118:[2,84],126:[2,84],128:[2,84],129:[2,84],130:[2,84],131:[2,84],132:[2,84],133:[2,84],134:[2,84],135:[2,84],136:[2,84],137:[2,84],138:[2,84]},{27:188,28:[1,73]},{1:[2,85],6:[2,85],25:[2,85],26:[2,85],40:[2,85],49:[2,85],54:[2,85],57:[2,85],66:[2,85],67:[2,85],68:[2,85],69:[2,85],71:[2,85],73:[2,85],74:[2,85],78:[2,85],80:[2,85],84:[2,85],85:[2,85],86:[2,85],91:[2,85],93:[2,85],102:[2,85],104:[2,85],105:[2,85],106:[2,85],110:[2,85],118:[2,85],126:[2,85],128:[2,85],129:[2,85],130:[2,85],131:[2,85],132:[2,85],133:[2,85],134:[2,85],135:[2,85],136:[2,85],137:[2,85],138:[2,85]},{8:190,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],57:[1,194],58:47,59:48,61:36,63:25,64:26,65:27,72:189,75:191,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],92:192,93:[1,193],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{70:195,71:[1,100],74:[1,101]},{82:196,85:[1,106]},{1:[2,70],6:[2,70],25:[2,70],26:[2,70],40:[2,70],49:[2,70],54:[2,70],57:[2,70],66:[2,70],67:[2,70],68:[2,70],69:[2,70],71:[2,70],73:[2,70],74:[2,70],78:[2,70],80:[2,70],84:[2,70],85:[2,70],86:[2,70],91:[2,70],93:[2,70],102:[2,70],104:[2,70],105:[2,70],106:[2,70],110:[2,70],118:[2,70],126:[2,70],128:[2,70],129:[2,70],130:[2,70],131:[2,70],132:[2,70],133:[2,70],134:[2,70],135:[2,70],136:[2,70],137:[2,70],138:[2,70]},{6:[1,198],8:197,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,199],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,107],6:[2,107],25:[2,107],26:[2,107],49:[2,107],54:[2,107],57:[2,107],66:[2,107],67:[2,107],68:[2,107],69:[2,107],71:[2,107],73:[2,107],74:[2,107],78:[2,107],84:[2,107],85:[2,107],86:[2,107],91:[2,107],93:[2,107],102:[2,107],104:[2,107],105:[2,107],106:[2,107],110:[2,107],118:[2,107],126:[2,107],128:[2,107],129:[2,107],132:[2,107],133:[2,107],134:[2,107],135:[2,107],136:[2,107],137:[2,107]},{8:202,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,147],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:148,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],86:[1,200],87:201,88:[1,58],89:[1,59],90:[1,57],94:146,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[2,53],25:[2,53],49:[1,203],53:205,54:[1,204]},{6:[2,56],25:[2,56],26:[2,56],49:[2,56],54:[2,56]},{6:[2,60],25:[2,60],26:[2,60],40:[1,207],49:[2,60],54:[2,60],57:[1,206]},{6:[2,63],25:[2,63],26:[2,63],40:[2,63],49:[2,63],54:[2,63],57:[2,63]},{6:[2,64],25:[2,64],26:[2,64],40:[2,64],49:[2,64],54:[2,64],57:[2,64]},{6:[2,65],25:[2,65],26:[2,65],40:[2,65],49:[2,65],54:[2,65],57:[2,65]},{6:[2,66],25:[2,66],26:[2,66],40:[2,66],49:[2,66],54:[2,66],57:[2,66]},{27:149,28:[1,73]},{8:202,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,147],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:148,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],87:145,88:[1,58],89:[1,59],90:[1,57],91:[1,144],94:146,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,50],6:[2,50],25:[2,50],26:[2,50],49:[2,50],54:[2,50],57:[2,50],73:[2,50],78:[2,50],86:[2,50],91:[2,50],93:[2,50],102:[2,50],104:[2,50],105:[2,50],106:[2,50],110:[2,50],118:[2,50],126:[2,50],128:[2,50],129:[2,50],132:[2,50],133:[2,50],134:[2,50],135:[2,50],136:[2,50],137:[2,50]},{1:[2,187],6:[2,187],25:[2,187],26:[2,187],49:[2,187],54:[2,187],57:[2,187],73:[2,187],78:[2,187],86:[2,187],91:[2,187],93:[2,187],102:[2,187],103:87,104:[2,187],105:[2,187],106:[2,187],109:88,110:[2,187],111:69,118:[2,187],126:[2,187],128:[2,187],129:[2,187],132:[1,78],133:[2,187],134:[2,187],135:[2,187],136:[2,187],137:[2,187]},{103:90,104:[1,65],106:[1,66],109:91,110:[1,68],111:69,126:[1,89]},{1:[2,188],6:[2,188],25:[2,188],26:[2,188],49:[2,188],54:[2,188],57:[2,188],73:[2,188],78:[2,188],86:[2,188],91:[2,188],93:[2,188],102:[2,188],103:87,104:[2,188],105:[2,188],106:[2,188],109:88,110:[2,188],111:69,118:[2,188],126:[2,188],128:[2,188],129:[2,188],132:[1,78],133:[2,188],134:[2,188],135:[2,188],136:[2,188],137:[2,188]},{1:[2,189],6:[2,189],25:[2,189],26:[2,189],49:[2,189],54:[2,189],57:[2,189],73:[2,189],78:[2,189],86:[2,189],91:[2,189],93:[2,189],102:[2,189],103:87,104:[2,189],105:[2,189],106:[2,189],109:88,110:[2,189],111:69,118:[2,189],126:[2,189],128:[2,189],129:[2,189],132:[1,78],133:[2,189],134:[2,189],135:[2,189],136:[2,189],137:[2,189]},{1:[2,190],6:[2,190],25:[2,190],26:[2,190],49:[2,190],54:[2,190],57:[2,190],66:[2,72],67:[2,72],68:[2,72],69:[2,72],71:[2,72],73:[2,190],74:[2,72],78:[2,190],84:[2,72],85:[2,72],86:[2,190],91:[2,190],93:[2,190],102:[2,190],104:[2,190],105:[2,190],106:[2,190],110:[2,190],118:[2,190],126:[2,190],128:[2,190],129:[2,190],132:[2,190],133:[2,190],134:[2,190],135:[2,190],136:[2,190],137:[2,190]},{62:93,66:[1,95],67:[1,96],68:[1,97],69:[1,98],70:99,71:[1,100],74:[1,101],81:92,84:[1,94],85:[2,108]},{62:103,66:[1,95],67:[1,96],68:[1,97],69:[1,98],70:99,71:[1,100],74:[1,101],81:102,84:[1,94],85:[2,108]},{66:[2,75],67:[2,75],68:[2,75],69:[2,75],71:[2,75],74:[2,75],84:[2,75],85:[2,75]},{1:[2,191],6:[2,191],25:[2,191],26:[2,191],49:[2,191],54:[2,191],57:[2,191],66:[2,72],67:[2,72],68:[2,72],69:[2,72],71:[2,72],73:[2,191],74:[2,72],78:[2,191],84:[2,72],85:[2,72],86:[2,191],91:[2,191],93:[2,191],102:[2,191],104:[2,191],105:[2,191],106:[2,191],110:[2,191],118:[2,191],126:[2,191],128:[2,191],129:[2,191],132:[2,191],133:[2,191],134:[2,191],135:[2,191],136:[2,191],137:[2,191]},{1:[2,192],6:[2,192],25:[2,192],26:[2,192],49:[2,192],54:[2,192],57:[2,192],73:[2,192],78:[2,192],86:[2,192],91:[2,192],93:[2,192],102:[2,192],104:[2,192],105:[2,192],106:[2,192],110:[2,192],118:[2,192],126:[2,192],128:[2,192],129:[2,192],132:[2,192],133:[2,192],134:[2,192],135:[2,192],136:[2,192],137:[2,192]},{1:[2,193],6:[2,193],25:[2,193],26:[2,193],49:[2,193],54:[2,193],57:[2,193],73:[2,193],78:[2,193],86:[2,193],91:[2,193],93:[2,193],102:[2,193],104:[2,193],105:[2,193],106:[2,193],110:[2,193],118:[2,193],126:[2,193],128:[2,193],129:[2,193],132:[2,193],133:[2,193],134:[2,193],135:[2,193],136:[2,193],137:[2,193]},{6:[1,210],8:208,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,209],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:211,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{5:212,25:[1,5],125:[1,213]},{1:[2,133],6:[2,133],25:[2,133],26:[2,133],49:[2,133],54:[2,133],57:[2,133],73:[2,133],78:[2,133],86:[2,133],91:[2,133],93:[2,133],97:214,98:[1,215],99:[1,216],102:[2,133],104:[2,133],105:[2,133],106:[2,133],110:[2,133],118:[2,133],126:[2,133],128:[2,133],129:[2,133],132:[2,133],133:[2,133],134:[2,133],135:[2,133],136:[2,133],137:[2,133]},{1:[2,147],6:[2,147],25:[2,147],26:[2,147],49:[2,147],54:[2,147],57:[2,147],73:[2,147],78:[2,147],86:[2,147],91:[2,147],93:[2,147],102:[2,147],104:[2,147],105:[2,147],106:[2,147],110:[2,147],118:[2,147],126:[2,147],128:[2,147],129:[2,147],132:[2,147],133:[2,147],134:[2,147],135:[2,147],136:[2,147],137:[2,147]},{1:[2,155],6:[2,155],25:[2,155],26:[2,155],49:[2,155],54:[2,155],57:[2,155],73:[2,155],78:[2,155],86:[2,155],91:[2,155],93:[2,155],102:[2,155],104:[2,155],105:[2,155],106:[2,155],110:[2,155],118:[2,155],126:[2,155],128:[2,155],129:[2,155],132:[2,155],133:[2,155],134:[2,155],135:[2,155],136:[2,155],137:[2,155]},{25:[1,217],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{120:218,122:219,123:[1,220]},{1:[2,97],6:[2,97],25:[2,97],26:[2,97],49:[2,97],54:[2,97],57:[2,97],73:[2,97],78:[2,97],86:[2,97],91:[2,97],93:[2,97],102:[2,97],104:[2,97],105:[2,97],106:[2,97],110:[2,97],118:[2,97],126:[2,97],128:[2,97],129:[2,97],132:[2,97],133:[2,97],134:[2,97],135:[2,97],136:[2,97],137:[2,97]},{8:221,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,100],5:222,6:[2,100],25:[1,5],26:[2,100],49:[2,100],54:[2,100],57:[2,100],66:[2,72],67:[2,72],68:[2,72],69:[2,72],71:[2,72],73:[2,100],74:[2,72],78:[2,100],80:[1,223],84:[2,72],85:[2,72],86:[2,100],91:[2,100],93:[2,100],102:[2,100],104:[2,100],105:[2,100],106:[2,100],110:[2,100],118:[2,100],126:[2,100],128:[2,100],129:[2,100],132:[2,100],133:[2,100],134:[2,100],135:[2,100],136:[2,100],137:[2,100]},{1:[2,140],6:[2,140],25:[2,140],26:[2,140],49:[2,140],54:[2,140],57:[2,140],73:[2,140],78:[2,140],86:[2,140],91:[2,140],93:[2,140],102:[2,140],103:87,104:[2,140],105:[2,140],106:[2,140],109:88,110:[2,140],111:69,118:[2,140],126:[2,140],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,46],6:[2,46],26:[2,46],102:[2,46],103:87,104:[2,46],106:[2,46],109:88,110:[2,46],111:69,126:[2,46],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{6:[1,74],102:[1,224]},{4:225,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[2,129],25:[2,129],54:[2,129],57:[1,227],91:[2,129],92:226,93:[1,193],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,115],6:[2,115],25:[2,115],26:[2,115],40:[2,115],49:[2,115],54:[2,115],57:[2,115],66:[2,115],67:[2,115],68:[2,115],69:[2,115],71:[2,115],73:[2,115],74:[2,115],78:[2,115],84:[2,115],85:[2,115],86:[2,115],91:[2,115],93:[2,115],102:[2,115],104:[2,115],105:[2,115],106:[2,115],110:[2,115],116:[2,115],117:[2,115],118:[2,115],126:[2,115],128:[2,115],129:[2,115],132:[2,115],133:[2,115],134:[2,115],135:[2,115],136:[2,115],137:[2,115]},{6:[2,53],25:[2,53],53:228,54:[1,229],91:[2,53]},{6:[2,124],25:[2,124],26:[2,124],54:[2,124],86:[2,124],91:[2,124]},{8:202,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,147],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:148,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],87:230,88:[1,58],89:[1,59],90:[1,57],94:146,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[2,130],25:[2,130],26:[2,130],54:[2,130],86:[2,130],91:[2,130]},{1:[2,114],6:[2,114],25:[2,114],26:[2,114],40:[2,114],43:[2,114],49:[2,114],54:[2,114],57:[2,114],66:[2,114],67:[2,114],68:[2,114],69:[2,114],71:[2,114],73:[2,114],74:[2,114],78:[2,114],80:[2,114],84:[2,114],85:[2,114],86:[2,114],91:[2,114],93:[2,114],102:[2,114],104:[2,114],105:[2,114],106:[2,114],110:[2,114],116:[2,114],117:[2,114],118:[2,114],126:[2,114],128:[2,114],129:[2,114],130:[2,114],131:[2,114],132:[2,114],133:[2,114],134:[2,114],135:[2,114],136:[2,114],137:[2,114],138:[2,114]},{5:231,25:[1,5],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,143],6:[2,143],25:[2,143],26:[2,143],49:[2,143],54:[2,143],57:[2,143],73:[2,143],78:[2,143],86:[2,143],91:[2,143],93:[2,143],102:[2,143],103:87,104:[1,65],105:[1,232],106:[1,66],109:88,110:[1,68],111:69,118:[2,143],126:[2,143],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,145],6:[2,145],25:[2,145],26:[2,145],49:[2,145],54:[2,145],57:[2,145],73:[2,145],78:[2,145],86:[2,145],91:[2,145],93:[2,145],102:[2,145],103:87,104:[1,65],105:[1,233],106:[1,66],109:88,110:[1,68],111:69,118:[2,145],126:[2,145],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,151],6:[2,151],25:[2,151],26:[2,151],49:[2,151],54:[2,151],57:[2,151],73:[2,151],78:[2,151],86:[2,151],91:[2,151],93:[2,151],102:[2,151],104:[2,151],105:[2,151],106:[2,151],110:[2,151],118:[2,151],126:[2,151],128:[2,151],129:[2,151],132:[2,151],133:[2,151],134:[2,151],135:[2,151],136:[2,151],137:[2,151]},{1:[2,152],6:[2,152],25:[2,152],26:[2,152],49:[2,152],54:[2,152],57:[2,152],73:[2,152],78:[2,152],86:[2,152],91:[2,152],93:[2,152],102:[2,152],103:87,104:[1,65],105:[2,152],106:[1,66],109:88,110:[1,68],111:69,118:[2,152],126:[2,152],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,156],6:[2,156],25:[2,156],26:[2,156],49:[2,156],54:[2,156],57:[2,156],73:[2,156],78:[2,156],86:[2,156],91:[2,156],93:[2,156],102:[2,156],104:[2,156],105:[2,156],106:[2,156],110:[2,156],118:[2,156],126:[2,156],128:[2,156],129:[2,156],132:[2,156],133:[2,156],134:[2,156],135:[2,156],136:[2,156],137:[2,156]},{116:[2,158],117:[2,158]},{27:159,28:[1,73],44:160,58:161,59:162,76:[1,70],89:[1,114],90:[1,115],113:234,115:158},{54:[1,235],116:[2,164],117:[2,164]},{54:[2,160],116:[2,160],117:[2,160]},{54:[2,161],116:[2,161],117:[2,161]},{54:[2,162],116:[2,162],117:[2,162]},{54:[2,163],116:[2,163],117:[2,163]},{1:[2,157],6:[2,157],25:[2,157],26:[2,157],49:[2,157],54:[2,157],57:[2,157],73:[2,157],78:[2,157],86:[2,157],91:[2,157],93:[2,157],102:[2,157],104:[2,157],105:[2,157],106:[2,157],110:[2,157],118:[2,157],126:[2,157],128:[2,157],129:[2,157],132:[2,157],133:[2,157],134:[2,157],135:[2,157],136:[2,157],137:[2,157]},{8:236,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:237,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[2,53],25:[2,53],53:238,54:[1,239],78:[2,53]},{6:[2,92],25:[2,92],26:[2,92],54:[2,92],78:[2,92]},{6:[2,39],25:[2,39],26:[2,39],43:[1,240],54:[2,39],78:[2,39]},{6:[2,42],25:[2,42],26:[2,42],54:[2,42],78:[2,42]},{6:[2,43],25:[2,43],26:[2,43],43:[2,43],54:[2,43],78:[2,43]},{6:[2,44],25:[2,44],26:[2,44],43:[2,44],54:[2,44],78:[2,44]},{6:[2,45],25:[2,45],26:[2,45],43:[2,45],54:[2,45],78:[2,45]},{1:[2,5],6:[2,5],26:[2,5],102:[2,5]},{1:[2,25],6:[2,25],25:[2,25],26:[2,25],49:[2,25],54:[2,25],57:[2,25],73:[2,25],78:[2,25],86:[2,25],91:[2,25],93:[2,25],98:[2,25],99:[2,25],102:[2,25],104:[2,25],105:[2,25],106:[2,25],110:[2,25],118:[2,25],121:[2,25],123:[2,25],126:[2,25],128:[2,25],129:[2,25],132:[2,25],133:[2,25],134:[2,25],135:[2,25],136:[2,25],137:[2,25]},{1:[2,195],6:[2,195],25:[2,195],26:[2,195],49:[2,195],54:[2,195],57:[2,195],73:[2,195],78:[2,195],86:[2,195],91:[2,195],93:[2,195],102:[2,195],103:87,104:[2,195],105:[2,195],106:[2,195],109:88,110:[2,195],111:69,118:[2,195],126:[2,195],128:[2,195],129:[2,195],132:[1,78],133:[1,81],134:[2,195],135:[2,195],136:[2,195],137:[2,195]},{1:[2,196],6:[2,196],25:[2,196],26:[2,196],49:[2,196],54:[2,196],57:[2,196],73:[2,196],78:[2,196],86:[2,196],91:[2,196],93:[2,196],102:[2,196],103:87,104:[2,196],105:[2,196],106:[2,196],109:88,110:[2,196],111:69,118:[2,196],126:[2,196],128:[2,196],129:[2,196],132:[1,78],133:[1,81],134:[2,196],135:[2,196],136:[2,196],137:[2,196]},{1:[2,197],6:[2,197],25:[2,197],26:[2,197],49:[2,197],54:[2,197],57:[2,197],73:[2,197],78:[2,197],86:[2,197],91:[2,197],93:[2,197],102:[2,197],103:87,104:[2,197],105:[2,197],106:[2,197],109:88,110:[2,197],111:69,118:[2,197],126:[2,197],128:[2,197],129:[2,197],132:[1,78],133:[2,197],134:[2,197],135:[2,197],136:[2,197],137:[2,197]},{1:[2,198],6:[2,198],25:[2,198],26:[2,198],49:[2,198],54:[2,198],57:[2,198],73:[2,198],78:[2,198],86:[2,198],91:[2,198],93:[2,198],102:[2,198],103:87,104:[2,198],105:[2,198],106:[2,198],109:88,110:[2,198],111:69,118:[2,198],126:[2,198],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[2,198],135:[2,198],136:[2,198],137:[2,198]},{1:[2,199],6:[2,199],25:[2,199],26:[2,199],49:[2,199],54:[2,199],57:[2,199],73:[2,199],78:[2,199],86:[2,199],91:[2,199],93:[2,199],102:[2,199],103:87,104:[2,199],105:[2,199],106:[2,199],109:88,110:[2,199],111:69,118:[2,199],126:[2,199],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[2,199],136:[2,199],137:[1,85]},{1:[2,200],6:[2,200],25:[2,200],26:[2,200],49:[2,200],54:[2,200],57:[2,200],73:[2,200],78:[2,200],86:[2,200],91:[2,200],93:[2,200],102:[2,200],103:87,104:[2,200],105:[2,200],106:[2,200],109:88,110:[2,200],111:69,118:[2,200],126:[2,200],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[2,200],137:[1,85]},{1:[2,201],6:[2,201],25:[2,201],26:[2,201],49:[2,201],54:[2,201],57:[2,201],73:[2,201],78:[2,201],86:[2,201],91:[2,201],93:[2,201],102:[2,201],103:87,104:[2,201],105:[2,201],106:[2,201],109:88,110:[2,201],111:69,118:[2,201],126:[2,201],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[2,201],136:[2,201],137:[2,201]},{1:[2,186],6:[2,186],25:[2,186],26:[2,186],49:[2,186],54:[2,186],57:[2,186],73:[2,186],78:[2,186],86:[2,186],91:[2,186],93:[2,186],102:[2,186],103:87,104:[1,65],105:[2,186],106:[1,66],109:88,110:[1,68],111:69,118:[2,186],126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,185],6:[2,185],25:[2,185],26:[2,185],49:[2,185],54:[2,185],57:[2,185],73:[2,185],78:[2,185],86:[2,185],91:[2,185],93:[2,185],102:[2,185],103:87,104:[1,65],105:[2,185],106:[1,66],109:88,110:[1,68],111:69,118:[2,185],126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,104],6:[2,104],25:[2,104],26:[2,104],49:[2,104],54:[2,104],57:[2,104],66:[2,104],67:[2,104],68:[2,104],69:[2,104],71:[2,104],73:[2,104],74:[2,104],78:[2,104],84:[2,104],85:[2,104],86:[2,104],91:[2,104],93:[2,104],102:[2,104],104:[2,104],105:[2,104],106:[2,104],110:[2,104],118:[2,104],126:[2,104],128:[2,104],129:[2,104],132:[2,104],133:[2,104],134:[2,104],135:[2,104],136:[2,104],137:[2,104]},{1:[2,80],6:[2,80],25:[2,80],26:[2,80],40:[2,80],49:[2,80],54:[2,80],57:[2,80],66:[2,80],67:[2,80],68:[2,80],69:[2,80],71:[2,80],73:[2,80],74:[2,80],78:[2,80],80:[2,80],84:[2,80],85:[2,80],86:[2,80],91:[2,80],93:[2,80],102:[2,80],104:[2,80],105:[2,80],106:[2,80],110:[2,80],118:[2,80],126:[2,80],128:[2,80],129:[2,80],130:[2,80],131:[2,80],132:[2,80],133:[2,80],134:[2,80],135:[2,80],136:[2,80],137:[2,80],138:[2,80]},{1:[2,81],6:[2,81],25:[2,81],26:[2,81],40:[2,81],49:[2,81],54:[2,81],57:[2,81],66:[2,81],67:[2,81],68:[2,81],69:[2,81],71:[2,81],73:[2,81],74:[2,81],78:[2,81],80:[2,81],84:[2,81],85:[2,81],86:[2,81],91:[2,81],93:[2,81],102:[2,81],104:[2,81],105:[2,81],106:[2,81],110:[2,81],118:[2,81],126:[2,81],128:[2,81],129:[2,81],130:[2,81],131:[2,81],132:[2,81],133:[2,81],134:[2,81],135:[2,81],136:[2,81],137:[2,81],138:[2,81]},{1:[2,82],6:[2,82],25:[2,82],26:[2,82],40:[2,82],49:[2,82],54:[2,82],57:[2,82],66:[2,82],67:[2,82],68:[2,82],69:[2,82],71:[2,82],73:[2,82],74:[2,82],78:[2,82],80:[2,82],84:[2,82],85:[2,82],86:[2,82],91:[2,82],93:[2,82],102:[2,82],104:[2,82],105:[2,82],106:[2,82],110:[2,82],118:[2,82],126:[2,82],128:[2,82],129:[2,82],130:[2,82],131:[2,82],132:[2,82],133:[2,82],134:[2,82],135:[2,82],136:[2,82],137:[2,82],138:[2,82]},{1:[2,83],6:[2,83],25:[2,83],26:[2,83],40:[2,83],49:[2,83],54:[2,83],57:[2,83],66:[2,83],67:[2,83],68:[2,83],69:[2,83],71:[2,83],73:[2,83],74:[2,83],78:[2,83],80:[2,83],84:[2,83],85:[2,83],86:[2,83],91:[2,83],93:[2,83],102:[2,83],104:[2,83],105:[2,83],106:[2,83],110:[2,83],118:[2,83],126:[2,83],128:[2,83],129:[2,83],130:[2,83],131:[2,83],132:[2,83],133:[2,83],134:[2,83],135:[2,83],136:[2,83],137:[2,83],138:[2,83]},{73:[1,241]},{57:[1,194],73:[2,88],92:242,93:[1,193],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{73:[2,89]},{8:243,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,73:[2,123],76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{12:[2,117],28:[2,117],30:[2,117],31:[2,117],33:[2,117],34:[2,117],35:[2,117],36:[2,117],37:[2,117],38:[2,117],45:[2,117],46:[2,117],47:[2,117],51:[2,117],52:[2,117],73:[2,117],76:[2,117],79:[2,117],83:[2,117],88:[2,117],89:[2,117],90:[2,117],96:[2,117],100:[2,117],101:[2,117],104:[2,117],106:[2,117],108:[2,117],110:[2,117],119:[2,117],125:[2,117],127:[2,117],128:[2,117],129:[2,117],130:[2,117],131:[2,117]},{12:[2,118],28:[2,118],30:[2,118],31:[2,118],33:[2,118],34:[2,118],35:[2,118],36:[2,118],37:[2,118],38:[2,118],45:[2,118],46:[2,118],47:[2,118],51:[2,118],52:[2,118],73:[2,118],76:[2,118],79:[2,118],83:[2,118],88:[2,118],89:[2,118],90:[2,118],96:[2,118],100:[2,118],101:[2,118],104:[2,118],106:[2,118],108:[2,118],110:[2,118],119:[2,118],125:[2,118],127:[2,118],128:[2,118],129:[2,118],130:[2,118],131:[2,118]},{1:[2,87],6:[2,87],25:[2,87],26:[2,87],40:[2,87],49:[2,87],54:[2,87],57:[2,87],66:[2,87],67:[2,87],68:[2,87],69:[2,87],71:[2,87],73:[2,87],74:[2,87],78:[2,87],80:[2,87],84:[2,87],85:[2,87],86:[2,87],91:[2,87],93:[2,87],102:[2,87],104:[2,87],105:[2,87],106:[2,87],110:[2,87],118:[2,87],126:[2,87],128:[2,87],129:[2,87],130:[2,87],131:[2,87],132:[2,87],133:[2,87],134:[2,87],135:[2,87],136:[2,87],137:[2,87],138:[2,87]},{1:[2,105],6:[2,105],25:[2,105],26:[2,105],49:[2,105],54:[2,105],57:[2,105],66:[2,105],67:[2,105],68:[2,105],69:[2,105],71:[2,105],73:[2,105],74:[2,105],78:[2,105],84:[2,105],85:[2,105],86:[2,105],91:[2,105],93:[2,105],102:[2,105],104:[2,105],105:[2,105],106:[2,105],110:[2,105],118:[2,105],126:[2,105],128:[2,105],129:[2,105],132:[2,105],133:[2,105],134:[2,105],135:[2,105],136:[2,105],137:[2,105]},{1:[2,36],6:[2,36],25:[2,36],26:[2,36],49:[2,36],54:[2,36],57:[2,36],73:[2,36],78:[2,36],86:[2,36],91:[2,36],93:[2,36],102:[2,36],103:87,104:[2,36],105:[2,36],106:[2,36],109:88,110:[2,36],111:69,118:[2,36],126:[2,36],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{8:244,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:245,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,110],6:[2,110],25:[2,110],26:[2,110],49:[2,110],54:[2,110],57:[2,110],66:[2,110],67:[2,110],68:[2,110],69:[2,110],71:[2,110],73:[2,110],74:[2,110],78:[2,110],84:[2,110],85:[2,110],86:[2,110],91:[2,110],93:[2,110],102:[2,110],104:[2,110],105:[2,110],106:[2,110],110:[2,110],118:[2,110],126:[2,110],128:[2,110],129:[2,110],132:[2,110],133:[2,110],134:[2,110],135:[2,110],136:[2,110],137:[2,110]},{6:[2,53],25:[2,53],53:246,54:[1,229],86:[2,53]},{6:[2,129],25:[2,129],26:[2,129],54:[2,129],57:[1,247],86:[2,129],91:[2,129],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{50:248,51:[1,60],52:[1,61]},{6:[2,54],25:[2,54],26:[2,54],27:110,28:[1,73],44:111,55:249,56:109,58:112,59:113,76:[1,70],89:[1,114],90:[1,115]},{6:[1,250],25:[1,251]},{6:[2,61],25:[2,61],26:[2,61],49:[2,61],54:[2,61]},{8:252,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,202],6:[2,202],25:[2,202],26:[2,202],49:[2,202],54:[2,202],57:[2,202],73:[2,202],78:[2,202],86:[2,202],91:[2,202],93:[2,202],102:[2,202],103:87,104:[2,202],105:[2,202],106:[2,202],109:88,110:[2,202],111:69,118:[2,202],126:[2,202],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{8:253,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:254,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,205],6:[2,205],25:[2,205],26:[2,205],49:[2,205],54:[2,205],57:[2,205],73:[2,205],78:[2,205],86:[2,205],91:[2,205],93:[2,205],102:[2,205],103:87,104:[2,205],105:[2,205],106:[2,205],109:88,110:[2,205],111:69,118:[2,205],126:[2,205],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,184],6:[2,184],25:[2,184],26:[2,184],49:[2,184],54:[2,184],57:[2,184],73:[2,184],78:[2,184],86:[2,184],91:[2,184],93:[2,184],102:[2,184],104:[2,184],105:[2,184],106:[2,184],110:[2,184],118:[2,184],126:[2,184],128:[2,184],129:[2,184],132:[2,184],133:[2,184],134:[2,184],135:[2,184],136:[2,184],137:[2,184]},{8:255,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,134],6:[2,134],25:[2,134],26:[2,134],49:[2,134],54:[2,134],57:[2,134],73:[2,134],78:[2,134],86:[2,134],91:[2,134],93:[2,134],98:[1,256],102:[2,134],104:[2,134],105:[2,134],106:[2,134],110:[2,134],118:[2,134],126:[2,134],128:[2,134],129:[2,134],132:[2,134],133:[2,134],134:[2,134],135:[2,134],136:[2,134],137:[2,134]},{5:257,25:[1,5]},{5:260,25:[1,5],27:258,28:[1,73],59:259,76:[1,70]},{120:261,122:219,123:[1,220]},{26:[1,262],121:[1,263],122:264,123:[1,220]},{26:[2,177],121:[2,177],123:[2,177]},{8:266,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],95:265,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,98],5:267,6:[2,98],25:[1,5],26:[2,98],49:[2,98],54:[2,98],57:[2,98],73:[2,98],78:[2,98],86:[2,98],91:[2,98],93:[2,98],102:[2,98],103:87,104:[1,65],105:[2,98],106:[1,66],109:88,110:[1,68],111:69,118:[2,98],126:[2,98],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,101],6:[2,101],25:[2,101],26:[2,101],49:[2,101],54:[2,101],57:[2,101],73:[2,101],78:[2,101],86:[2,101],91:[2,101],93:[2,101],102:[2,101],104:[2,101],105:[2,101],106:[2,101],110:[2,101],118:[2,101],126:[2,101],128:[2,101],129:[2,101],132:[2,101],133:[2,101],134:[2,101],135:[2,101],136:[2,101],137:[2,101]},{8:268,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,141],6:[2,141],25:[2,141],26:[2,141],49:[2,141],54:[2,141],57:[2,141],66:[2,141],67:[2,141],68:[2,141],69:[2,141],71:[2,141],73:[2,141],74:[2,141],78:[2,141],84:[2,141],85:[2,141],86:[2,141],91:[2,141],93:[2,141],102:[2,141],104:[2,141],105:[2,141],106:[2,141],110:[2,141],118:[2,141],126:[2,141],128:[2,141],129:[2,141],132:[2,141],133:[2,141],134:[2,141],135:[2,141],136:[2,141],137:[2,141]},{6:[1,74],26:[1,269]},{8:270,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[2,67],12:[2,118],25:[2,67],28:[2,118],30:[2,118],31:[2,118],33:[2,118],34:[2,118],35:[2,118],36:[2,118],37:[2,118],38:[2,118],45:[2,118],46:[2,118],47:[2,118],51:[2,118],52:[2,118],54:[2,67],76:[2,118],79:[2,118],83:[2,118],88:[2,118],89:[2,118],90:[2,118],91:[2,67],96:[2,118],100:[2,118],101:[2,118],104:[2,118],106:[2,118],108:[2,118],110:[2,118],119:[2,118],125:[2,118],127:[2,118],128:[2,118],129:[2,118],130:[2,118],131:[2,118]},{6:[1,272],25:[1,273],91:[1,271]},{6:[2,54],8:202,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[2,54],26:[2,54],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:148,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],86:[2,54],88:[1,58],89:[1,59],90:[1,57],91:[2,54],94:274,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[2,53],25:[2,53],26:[2,53],53:275,54:[1,229]},{1:[2,181],6:[2,181],25:[2,181],26:[2,181],49:[2,181],54:[2,181],57:[2,181],73:[2,181],78:[2,181],86:[2,181],91:[2,181],93:[2,181],102:[2,181],104:[2,181],105:[2,181],106:[2,181],110:[2,181],118:[2,181],121:[2,181],126:[2,181],128:[2,181],129:[2,181],132:[2,181],133:[2,181],134:[2,181],135:[2,181],136:[2,181],137:[2,181]},{8:276,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:277,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{116:[2,159],117:[2,159]},{27:159,28:[1,73],44:160,58:161,59:162,76:[1,70],89:[1,114],90:[1,115],115:278},{1:[2,166],6:[2,166],25:[2,166],26:[2,166],49:[2,166],54:[2,166],57:[2,166],73:[2,166],78:[2,166],86:[2,166],91:[2,166],93:[2,166],102:[2,166],103:87,104:[2,166],105:[1,279],106:[2,166],109:88,110:[2,166],111:69,118:[1,280],126:[2,166],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,167],6:[2,167],25:[2,167],26:[2,167],49:[2,167],54:[2,167],57:[2,167],73:[2,167],78:[2,167],86:[2,167],91:[2,167],93:[2,167],102:[2,167],103:87,104:[2,167],105:[1,281],106:[2,167],109:88,110:[2,167],111:69,118:[2,167],126:[2,167],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{6:[1,283],25:[1,284],78:[1,282]},{6:[2,54],11:169,25:[2,54],26:[2,54],27:170,28:[1,73],29:171,30:[1,71],31:[1,72],41:285,42:168,44:172,46:[1,46],78:[2,54],89:[1,114]},{8:286,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,287],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,86],6:[2,86],25:[2,86],26:[2,86],40:[2,86],49:[2,86],54:[2,86],57:[2,86],66:[2,86],67:[2,86],68:[2,86],69:[2,86],71:[2,86],73:[2,86],74:[2,86],78:[2,86],80:[2,86],84:[2,86],85:[2,86],86:[2,86],91:[2,86],93:[2,86],102:[2,86],104:[2,86],105:[2,86],106:[2,86],110:[2,86],118:[2,86],126:[2,86],128:[2,86],129:[2,86],130:[2,86],131:[2,86],132:[2,86],133:[2,86],134:[2,86],135:[2,86],136:[2,86],137:[2,86],138:[2,86]},{8:288,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,73:[2,121],76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{73:[2,122],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,37],6:[2,37],25:[2,37],26:[2,37],49:[2,37],54:[2,37],57:[2,37],73:[2,37],78:[2,37],86:[2,37],91:[2,37],93:[2,37],102:[2,37],103:87,104:[2,37],105:[2,37],106:[2,37],109:88,110:[2,37],111:69,118:[2,37],126:[2,37],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{26:[1,289],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{6:[1,272],25:[1,273],86:[1,290]},{6:[2,67],25:[2,67],26:[2,67],54:[2,67],86:[2,67],91:[2,67]},{5:291,25:[1,5]},{6:[2,57],25:[2,57],26:[2,57],49:[2,57],54:[2,57]},{27:110,28:[1,73],44:111,55:292,56:109,58:112,59:113,76:[1,70],89:[1,114],90:[1,115]},{6:[2,55],25:[2,55],26:[2,55],27:110,28:[1,73],44:111,48:293,54:[2,55],55:108,56:109,58:112,59:113,76:[1,70],89:[1,114],90:[1,115]},{6:[2,62],25:[2,62],26:[2,62],49:[2,62],54:[2,62],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{26:[1,294],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,204],6:[2,204],25:[2,204],26:[2,204],49:[2,204],54:[2,204],57:[2,204],73:[2,204],78:[2,204],86:[2,204],91:[2,204],93:[2,204],102:[2,204],103:87,104:[2,204],105:[2,204],106:[2,204],109:88,110:[2,204],111:69,118:[2,204],126:[2,204],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{5:295,25:[1,5],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{5:296,25:[1,5]},{1:[2,135],6:[2,135],25:[2,135],26:[2,135],49:[2,135],54:[2,135],57:[2,135],73:[2,135],78:[2,135],86:[2,135],91:[2,135],93:[2,135],102:[2,135],104:[2,135],105:[2,135],106:[2,135],110:[2,135],118:[2,135],126:[2,135],128:[2,135],129:[2,135],132:[2,135],133:[2,135],134:[2,135],135:[2,135],136:[2,135],137:[2,135]},{5:297,25:[1,5]},{5:298,25:[1,5]},{1:[2,139],6:[2,139],25:[2,139],26:[2,139],49:[2,139],54:[2,139],57:[2,139],73:[2,139],78:[2,139],86:[2,139],91:[2,139],93:[2,139],98:[2,139],102:[2,139],104:[2,139],105:[2,139],106:[2,139],110:[2,139],118:[2,139],126:[2,139],128:[2,139],129:[2,139],132:[2,139],133:[2,139],134:[2,139],135:[2,139],136:[2,139],137:[2,139]},{26:[1,299],121:[1,300],122:264,123:[1,220]},{1:[2,175],6:[2,175],25:[2,175],26:[2,175],49:[2,175],54:[2,175],57:[2,175],73:[2,175],78:[2,175],86:[2,175],91:[2,175],93:[2,175],102:[2,175],104:[2,175],105:[2,175],106:[2,175],110:[2,175],118:[2,175],126:[2,175],128:[2,175],129:[2,175],132:[2,175],133:[2,175],134:[2,175],135:[2,175],136:[2,175],137:[2,175]},{5:301,25:[1,5]},{26:[2,178],121:[2,178],123:[2,178]},{5:302,25:[1,5],54:[1,303]},{25:[2,131],54:[2,131],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,99],6:[2,99],25:[2,99],26:[2,99],49:[2,99],54:[2,99],57:[2,99],73:[2,99],78:[2,99],86:[2,99],91:[2,99],93:[2,99],102:[2,99],104:[2,99],105:[2,99],106:[2,99],110:[2,99],118:[2,99],126:[2,99],128:[2,99],129:[2,99],132:[2,99],133:[2,99],134:[2,99],135:[2,99],136:[2,99],137:[2,99]},{1:[2,102],5:304,6:[2,102],25:[1,5],26:[2,102],49:[2,102],54:[2,102],57:[2,102],73:[2,102],78:[2,102],86:[2,102],91:[2,102],93:[2,102],102:[2,102],103:87,104:[1,65],105:[2,102],106:[1,66],109:88,110:[1,68],111:69,118:[2,102],126:[2,102],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{102:[1,305]},{91:[1,306],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,116],6:[2,116],25:[2,116],26:[2,116],40:[2,116],49:[2,116],54:[2,116],57:[2,116],66:[2,116],67:[2,116],68:[2,116],69:[2,116],71:[2,116],73:[2,116],74:[2,116],78:[2,116],84:[2,116],85:[2,116],86:[2,116],91:[2,116],93:[2,116],102:[2,116],104:[2,116],105:[2,116],106:[2,116],110:[2,116],116:[2,116],117:[2,116],118:[2,116],126:[2,116],128:[2,116],129:[2,116],132:[2,116],133:[2,116],134:[2,116],135:[2,116],136:[2,116],137:[2,116]},{8:202,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:148,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],94:307,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:202,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,147],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:148,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],87:308,88:[1,58],89:[1,59],90:[1,57],94:146,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[2,125],25:[2,125],26:[2,125],54:[2,125],86:[2,125],91:[2,125]},{6:[1,272],25:[1,273],26:[1,309]},{1:[2,144],6:[2,144],25:[2,144],26:[2,144],49:[2,144],54:[2,144],57:[2,144],73:[2,144],78:[2,144],86:[2,144],91:[2,144],93:[2,144],102:[2,144],103:87,104:[1,65],105:[2,144],106:[1,66],109:88,110:[1,68],111:69,118:[2,144],126:[2,144],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,146],6:[2,146],25:[2,146],26:[2,146],49:[2,146],54:[2,146],57:[2,146],73:[2,146],78:[2,146],86:[2,146],91:[2,146],93:[2,146],102:[2,146],103:87,104:[1,65],105:[2,146],106:[1,66],109:88,110:[1,68],111:69,118:[2,146],126:[2,146],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{116:[2,165],117:[2,165]},{8:310,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:311,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:312,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,90],6:[2,90],25:[2,90],26:[2,90],40:[2,90],49:[2,90],54:[2,90],57:[2,90],66:[2,90],67:[2,90],68:[2,90],69:[2,90],71:[2,90],73:[2,90],74:[2,90],78:[2,90],84:[2,90],85:[2,90],86:[2,90],91:[2,90],93:[2,90],102:[2,90],104:[2,90],105:[2,90],106:[2,90],110:[2,90],116:[2,90],117:[2,90],118:[2,90],126:[2,90],128:[2,90],129:[2,90],132:[2,90],133:[2,90],134:[2,90],135:[2,90],136:[2,90],137:[2,90]},{11:169,27:170,28:[1,73],29:171,30:[1,71],31:[1,72],41:313,42:168,44:172,46:[1,46],89:[1,114]},{6:[2,91],11:169,25:[2,91],26:[2,91],27:170,28:[1,73],29:171,30:[1,71],31:[1,72],41:167,42:168,44:172,46:[1,46],54:[2,91],77:314,89:[1,114]},{6:[2,93],25:[2,93],26:[2,93],54:[2,93],78:[2,93]},{6:[2,40],25:[2,40],26:[2,40],54:[2,40],78:[2,40],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{8:315,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{73:[2,120],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,38],6:[2,38],25:[2,38],26:[2,38],49:[2,38],54:[2,38],57:[2,38],73:[2,38],78:[2,38],86:[2,38],91:[2,38],93:[2,38],102:[2,38],104:[2,38],105:[2,38],106:[2,38],110:[2,38],118:[2,38],126:[2,38],128:[2,38],129:[2,38],132:[2,38],133:[2,38],134:[2,38],135:[2,38],136:[2,38],137:[2,38]},{1:[2,111],6:[2,111],25:[2,111],26:[2,111],49:[2,111],54:[2,111],57:[2,111],66:[2,111],67:[2,111],68:[2,111],69:[2,111],71:[2,111],73:[2,111],74:[2,111],78:[2,111],84:[2,111],85:[2,111],86:[2,111],91:[2,111],93:[2,111],102:[2,111],104:[2,111],105:[2,111],106:[2,111],110:[2,111],118:[2,111],126:[2,111],128:[2,111],129:[2,111],132:[2,111],133:[2,111],134:[2,111],135:[2,111],136:[2,111],137:[2,111]},{1:[2,49],6:[2,49],25:[2,49],26:[2,49],49:[2,49],54:[2,49],57:[2,49],73:[2,49],78:[2,49],86:[2,49],91:[2,49],93:[2,49],102:[2,49],104:[2,49],105:[2,49],106:[2,49],110:[2,49],118:[2,49],126:[2,49],128:[2,49],129:[2,49],132:[2,49],133:[2,49],134:[2,49],135:[2,49],136:[2,49],137:[2,49]},{6:[2,58],25:[2,58],26:[2,58],49:[2,58],54:[2,58]},{6:[2,53],25:[2,53],26:[2,53],53:316,54:[1,204]},{1:[2,203],6:[2,203],25:[2,203],26:[2,203],49:[2,203],54:[2,203],57:[2,203],73:[2,203],78:[2,203],86:[2,203],91:[2,203],93:[2,203],102:[2,203],104:[2,203],105:[2,203],106:[2,203],110:[2,203],118:[2,203],126:[2,203],128:[2,203],129:[2,203],132:[2,203],133:[2,203],134:[2,203],135:[2,203],136:[2,203],137:[2,203]},{1:[2,182],6:[2,182],25:[2,182],26:[2,182],49:[2,182],54:[2,182],57:[2,182],73:[2,182],78:[2,182],86:[2,182],91:[2,182],93:[2,182],102:[2,182],104:[2,182],105:[2,182],106:[2,182],110:[2,182],118:[2,182],121:[2,182],126:[2,182],128:[2,182],129:[2,182],132:[2,182],133:[2,182],134:[2,182],135:[2,182],136:[2,182],137:[2,182]},{1:[2,136],6:[2,136],25:[2,136],26:[2,136],49:[2,136],54:[2,136],57:[2,136],73:[2,136],78:[2,136],86:[2,136],91:[2,136],93:[2,136],102:[2,136],104:[2,136],105:[2,136],106:[2,136],110:[2,136],118:[2,136],126:[2,136],128:[2,136],129:[2,136],132:[2,136],133:[2,136],134:[2,136],135:[2,136],136:[2,136],137:[2,136]},{1:[2,137],6:[2,137],25:[2,137],26:[2,137],49:[2,137],54:[2,137],57:[2,137],73:[2,137],78:[2,137],86:[2,137],91:[2,137],93:[2,137],98:[2,137],102:[2,137],104:[2,137],105:[2,137],106:[2,137],110:[2,137],118:[2,137],126:[2,137],128:[2,137],129:[2,137],132:[2,137],133:[2,137],134:[2,137],135:[2,137],136:[2,137],137:[2,137]},{1:[2,138],6:[2,138],25:[2,138],26:[2,138],49:[2,138],54:[2,138],57:[2,138],73:[2,138],78:[2,138],86:[2,138],91:[2,138],93:[2,138],98:[2,138],102:[2,138],104:[2,138],105:[2,138],106:[2,138],110:[2,138],118:[2,138],126:[2,138],128:[2,138],129:[2,138],132:[2,138],133:[2,138],134:[2,138],135:[2,138],136:[2,138],137:[2,138]},{1:[2,173],6:[2,173],25:[2,173],26:[2,173],49:[2,173],54:[2,173],57:[2,173],73:[2,173],78:[2,173],86:[2,173],91:[2,173],93:[2,173],102:[2,173],104:[2,173],105:[2,173],106:[2,173],110:[2,173],118:[2,173],126:[2,173],128:[2,173],129:[2,173],132:[2,173],133:[2,173],134:[2,173],135:[2,173],136:[2,173],137:[2,173]},{5:317,25:[1,5]},{26:[1,318]},{6:[1,319],26:[2,179],121:[2,179],123:[2,179]},{8:320,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,103],6:[2,103],25:[2,103],26:[2,103],49:[2,103],54:[2,103],57:[2,103],73:[2,103],78:[2,103],86:[2,103],91:[2,103],93:[2,103],102:[2,103],104:[2,103],105:[2,103],106:[2,103],110:[2,103],118:[2,103],126:[2,103],128:[2,103],129:[2,103],132:[2,103],133:[2,103],134:[2,103],135:[2,103],136:[2,103],137:[2,103]},{1:[2,142],6:[2,142],25:[2,142],26:[2,142],49:[2,142],54:[2,142],57:[2,142],66:[2,142],67:[2,142],68:[2,142],69:[2,142],71:[2,142],73:[2,142],74:[2,142],78:[2,142],84:[2,142],85:[2,142],86:[2,142],91:[2,142],93:[2,142],102:[2,142],104:[2,142],105:[2,142],106:[2,142],110:[2,142],118:[2,142],126:[2,142],128:[2,142],129:[2,142],132:[2,142],133:[2,142],134:[2,142],135:[2,142],136:[2,142],137:[2,142]},{1:[2,119],6:[2,119],25:[2,119],26:[2,119],49:[2,119],54:[2,119],57:[2,119],66:[2,119],67:[2,119],68:[2,119],69:[2,119],71:[2,119],73:[2,119],74:[2,119],78:[2,119],84:[2,119],85:[2,119],86:[2,119],91:[2,119],93:[2,119],102:[2,119],104:[2,119],105:[2,119],106:[2,119],110:[2,119],118:[2,119],126:[2,119],128:[2,119],129:[2,119],132:[2,119],133:[2,119],134:[2,119],135:[2,119],136:[2,119],137:[2,119]},{6:[2,126],25:[2,126],26:[2,126],54:[2,126],86:[2,126],91:[2,126]},{6:[2,53],25:[2,53],26:[2,53],53:321,54:[1,229]},{6:[2,127],25:[2,127],26:[2,127],54:[2,127],86:[2,127],91:[2,127]},{1:[2,168],6:[2,168],25:[2,168],26:[2,168],49:[2,168],54:[2,168],57:[2,168],73:[2,168],78:[2,168],86:[2,168],91:[2,168],93:[2,168],102:[2,168],103:87,104:[2,168],105:[2,168],106:[2,168],109:88,110:[2,168],111:69,118:[1,322],126:[2,168],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,170],6:[2,170],25:[2,170],26:[2,170],49:[2,170],54:[2,170],57:[2,170],73:[2,170],78:[2,170],86:[2,170],91:[2,170],93:[2,170],102:[2,170],103:87,104:[2,170],105:[1,323],106:[2,170],109:88,110:[2,170],111:69,118:[2,170],126:[2,170],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,169],6:[2,169],25:[2,169],26:[2,169],49:[2,169],54:[2,169],57:[2,169],73:[2,169],78:[2,169],86:[2,169],91:[2,169],93:[2,169],102:[2,169],103:87,104:[2,169],105:[2,169],106:[2,169],109:88,110:[2,169],111:69,118:[2,169],126:[2,169],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{6:[2,94],25:[2,94],26:[2,94],54:[2,94],78:[2,94]},{6:[2,53],25:[2,53],26:[2,53],53:324,54:[1,239]},{26:[1,325],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{6:[1,250],25:[1,251],26:[1,326]},{26:[1,327]},{1:[2,176],6:[2,176],25:[2,176],26:[2,176],49:[2,176],54:[2,176],57:[2,176],73:[2,176],78:[2,176],86:[2,176],91:[2,176],93:[2,176],102:[2,176],104:[2,176],105:[2,176],106:[2,176],110:[2,176],118:[2,176],126:[2,176],128:[2,176],129:[2,176],132:[2,176],133:[2,176],134:[2,176],135:[2,176],136:[2,176],137:[2,176]},{26:[2,180],121:[2,180],123:[2,180]},{25:[2,132],54:[2,132],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{6:[1,272],25:[1,273],26:[1,328]},{8:329,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:330,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[1,283],25:[1,284],26:[1,331]},{6:[2,41],25:[2,41],26:[2,41],54:[2,41],78:[2,41]},{6:[2,59],25:[2,59],26:[2,59],49:[2,59],54:[2,59]},{1:[2,174],6:[2,174],25:[2,174],26:[2,174],49:[2,174],54:[2,174],57:[2,174],73:[2,174],78:[2,174],86:[2,174],91:[2,174],93:[2,174],102:[2,174],104:[2,174],105:[2,174],106:[2,174],110:[2,174],118:[2,174],126:[2,174],128:[2,174],129:[2,174],132:[2,174],133:[2,174],134:[2,174],135:[2,174],136:[2,174],137:[2,174]},{6:[2,128],25:[2,128],26:[2,128],54:[2,128],86:[2,128],91:[2,128]},{1:[2,171],6:[2,171],25:[2,171],26:[2,171],49:[2,171],54:[2,171],57:[2,171],73:[2,171],78:[2,171],86:[2,171],91:[2,171],93:[2,171],102:[2,171],103:87,104:[2,171],105:[2,171],106:[2,171],109:88,110:[2,171],111:69,118:[2,171],126:[2,171],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,172],6:[2,172],25:[2,172],26:[2,172],49:[2,172],54:[2,172],57:[2,172],73:[2,172],78:[2,172],86:[2,172],91:[2,172],93:[2,172],102:[2,172],103:87,104:[2,172],105:[2,172],106:[2,172],109:88,110:[2,172],111:69,118:[2,172],126:[2,172],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{6:[2,95],25:[2,95],26:[2,95],54:[2,95],78:[2,95]}],defaultActions:{60:[2,51],61:[2,52],75:[2,3],94:[2,109],191:[2,89]},parseError:function(e){throw new Error(e)
10
+ },parse:function(e){function t(){var e;return e=n.lexer.lex()||1,"number"!=typeof e&&(e=n.symbols_[e]||e),e}var n=this,i=[0],s=[null],r=[],o=this.table,a="",c=0,h=0,l=0;this.lexer.setInput(e),this.lexer.yy=this.yy,this.yy.lexer=this.lexer,this.yy.parser=this,"undefined"==typeof this.lexer.yylloc&&(this.lexer.yylloc={});var u=this.lexer.yylloc;r.push(u);var p=this.lexer.options&&this.lexer.options.ranges;"function"==typeof this.yy.parseError&&(this.parseError=this.yy.parseError);for(var d,f,m,b,k,g,y,v,w,T={};;){if(m=i[i.length-1],this.defaultActions[m]?b=this.defaultActions[m]:((null===d||"undefined"==typeof d)&&(d=t()),b=o[m]&&o[m][d]),"undefined"==typeof b||!b.length||!b[0]){var C="";if(!l){w=[];for(g in o[m])this.terminals_[g]&&g>2&&w.push("'"+this.terminals_[g]+"'");C=this.lexer.showPosition?"Parse error on line "+(c+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+w.join(", ")+", got '"+(this.terminals_[d]||d)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==d?"end of input":"'"+(this.terminals_[d]||d)+"'"),this.parseError(C,{text:this.lexer.match,token:this.terminals_[d]||d,line:this.lexer.yylineno,loc:u,expected:w})}}if(b[0]instanceof Array&&b.length>1)throw new Error("Parse Error: multiple actions possible at state: "+m+", token: "+d);switch(b[0]){case 1:i.push(d),s.push(this.lexer.yytext),r.push(this.lexer.yylloc),i.push(b[1]),d=null,f?(d=f,f=null):(h=this.lexer.yyleng,a=this.lexer.yytext,c=this.lexer.yylineno,u=this.lexer.yylloc,l>0&&l--);break;case 2:if(y=this.productions_[b[1]][1],T.$=s[s.length-y],T._$={first_line:r[r.length-(y||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(y||1)].first_column,last_column:r[r.length-1].last_column},p&&(T._$.range=[r[r.length-(y||1)].range[0],r[r.length-1].range[1]]),k=this.performAction.call(T,a,h,c,this.yy,b[1],s,r),"undefined"!=typeof k)return k;y&&(i=i.slice(0,2*-1*y),s=s.slice(0,-1*y),r=r.slice(0,-1*y)),i.push(this.productions_[b[1]][0]),s.push(T.$),r.push(T._$),v=o[i[i.length-2]][i[i.length-1]],i.push(v);break;case 3:return!0}}return!0}};return e.prototype=t,t.Parser=e,new e}();return"undefined"!=typeof require&&"undefined"!=typeof e&&(e.parser=n,e.Parser=n.Parser,e.parse=function(){return n.parse.apply(n,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var n=require("fs").readFileSync(require("path").normalize(t[1]),"utf8");return e.parser.parse(n)},"undefined"!=typeof t&&require.main===t&&e.main(process.argv.slice(1))),t.exports}(),require["./scope"]=function(){var e={},t={exports:e};return function(){var t,n,i,s;s=require("./helpers"),n=s.extend,i=s.last,e.Scope=t=function(){function e(t,n,i){this.parent=t,this.expressions=n,this.method=i,this.variables=[{name:"arguments",type:"arguments"}],this.positions={},this.parent||(e.root=this)}return e.root=null,e.prototype.add=function(e,t,n){return this.shared&&!n?this.parent.add(e,t,n):Object.prototype.hasOwnProperty.call(this.positions,e)?this.variables[this.positions[e]].type=t:this.positions[e]=this.variables.push({name:e,type:t})-1},e.prototype.namedMethod=function(){var e;return(null!=(e=this.method)?e.name:void 0)||!this.parent?this.method:this.parent.namedMethod()},e.prototype.find=function(e){return this.check(e)?!0:(this.add(e,"var"),!1)},e.prototype.parameter=function(e){return this.shared&&this.parent.check(e,!0)?void 0:this.add(e,"param")},e.prototype.check=function(e){var t;return!!(this.type(e)||(null!=(t=this.parent)?t.check(e):void 0))},e.prototype.temporary=function(e,t){return e.length>1?"_"+e+(t>1?t-1:""):"_"+(t+parseInt(e,36)).toString(36).replace(/\d/g,"a")},e.prototype.type=function(e){var t,n,i,s;for(s=this.variables,n=0,i=s.length;i>n;n++)if(t=s[n],t.name===e)return t.type;return null},e.prototype.freeVariable=function(e,t){var n,i;for(null==t&&(t=!0),n=0;this.check(i=this.temporary(e,n));)n++;return t&&this.add(i,"var",!0),i},e.prototype.assign=function(e,t){return this.add(e,{value:t,assigned:!0},!0),this.hasAssignments=!0},e.prototype.hasDeclarations=function(){return!!this.declaredVariables().length},e.prototype.declaredVariables=function(){var e,t,n,i,s,r;for(e=[],t=[],r=this.variables,i=0,s=r.length;s>i;i++)n=r[i],"var"===n.type&&("_"===n.name.charAt(0)?t:e).push(n.name);return e.sort().concat(t.sort())},e.prototype.assignedVariables=function(){var e,t,n,i,s;for(i=this.variables,s=[],t=0,n=i.length;n>t;t++)e=i[t],e.type.assigned&&s.push(""+e.name+" = "+e.type.value);return s},e}()}.call(this),t.exports}(),require["./nodes"]=function(){var e={},t={exports:e};return function(){var t,n,i,s,r,o,a,c,h,l,u,p,d,f,m,b,k,g,y,v,w,T,C,F,L,N,x,E,D,S,R,A,I,_,$,O,j,M,B,V,P,U,q,H,G,W,X,Y,K,z,J,Z,Q,et,tt,nt,it,st,rt,ot,at,ct,ht,lt,ut,pt,dt,ft,mt,bt,kt,gt={}.hasOwnProperty,yt=function(e,t){function n(){this.constructor=e}for(var i in t)gt.call(t,i)&&(e[i]=t[i]);return n.prototype=t.prototype,e.prototype=new n,e.__super__=t.prototype,e},vt=[].indexOf||function(e){for(var t=0,n=this.length;n>t;t++)if(t in this&&this[t]===e)return t;return-1},wt=[].slice;Error.stackTraceLimit=1/0,V=require("./scope").Scope,ft=require("./lexer"),$=ft.RESERVED,B=ft.STRICT_PROSCRIBED,mt=require("./helpers"),Q=mt.compact,it=mt.flatten,nt=mt.extend,at=mt.merge,et=mt.del,lt=mt.starts,tt=mt.ends,rt=mt.last,ht=mt.some,Z=mt.addLocationDataFn,ot=mt.locationDataToString,ut=mt.throwSyntaxError,e.extend=nt,e.addLocationDataFn=Z,J=function(){return!0},S=function(){return!1},G=function(){return this},D=function(){return this.negated=!this.negated,this},e.CodeFragment=l=function(){function e(e,t){var n;this.code=""+t,this.locationData=null!=e?e.locationData:void 0,this.type=(null!=e?null!=(n=e.constructor)?n.name:void 0:void 0)||"unknown"}return e.prototype.toString=function(){return""+this.code+(this.locationData?": "+ot(this.locationData):"")},e}(),st=function(e){var t;return function(){var n,i,s;for(s=[],n=0,i=e.length;i>n;n++)t=e[n],s.push(t.code);return s}().join("")},e.Base=s=function(){function e(){}return e.prototype.compile=function(e,t){return st(this.compileToFragments(e,t))},e.prototype.compileToFragments=function(e,t){var n;return e=nt({},e),t&&(e.level=t),n=this.unfoldSoak(e)||this,n.tab=e.indent,e.level!==N&&n.isStatement(e)?n.compileClosure(e):n.compileNode(e)},e.prototype.compileClosure=function(e){var t;return(t=this.jumps())&&t.error("cannot use a pure statement in an expression"),e.sharedScope=!0,c.wrap(this).compileNode(e)},e.prototype.cache=function(e,t,n){var s,r;return this.isComplex()?(s=new x(n||e.scope.freeVariable("ref")),r=new i(s,this),t?[r.compileToFragments(e,t),[this.makeCode(s.value)]]:[r,s]):(s=t?this.compileToFragments(e,t):this,[s,s])},e.prototype.cacheToCodeFragments=function(e){return[st(e[0]),st(e[1])]},e.prototype.makeReturn=function(e){var t;return t=this.unwrapAll(),e?new o(new x(""+e+".push"),[t]):new j(t)},e.prototype.contains=function(e){var t;return t=void 0,this.traverseChildren(!1,function(n){return e(n)?(t=n,!1):void 0}),t},e.prototype.lastNonComment=function(e){var t;for(t=e.length;t--;)if(!(e[t]instanceof u))return e[t];return null},e.prototype.toString=function(e,t){var n;return null==e&&(e=""),null==t&&(t=this.constructor.name),n="\n"+e+t,this.soak&&(n+="?"),this.eachChild(function(t){return n+=t.toString(e+H)}),n},e.prototype.eachChild=function(e){var t,n,i,s,r,o,a,c;if(!this.children)return this;for(a=this.children,i=0,r=a.length;r>i;i++)if(t=a[i],this[t])for(c=it([this[t]]),s=0,o=c.length;o>s;s++)if(n=c[s],e(n)===!1)return this;return this},e.prototype.traverseChildren=function(e,t){return this.eachChild(function(n){var i;return i=t(n),i!==!1?n.traverseChildren(e,t):void 0})},e.prototype.invert=function(){return new A("!",this)},e.prototype.unwrapAll=function(){var e;for(e=this;e!==(e=e.unwrap()););return e},e.prototype.children=[],e.prototype.isStatement=S,e.prototype.jumps=S,e.prototype.isComplex=J,e.prototype.isChainable=S,e.prototype.isAssignable=S,e.prototype.unwrap=G,e.prototype.unfoldSoak=S,e.prototype.assigns=S,e.prototype.updateLocationDataIfMissing=function(e){return this.locationData||(this.locationData=e),this.eachChild(function(t){return t.updateLocationDataIfMissing(e)})},e.prototype.error=function(e){return ut(e,this.locationData)},e.prototype.makeCode=function(e){return new l(this,e)},e.prototype.wrapInBraces=function(e){return[].concat(this.makeCode("("),e,this.makeCode(")"))},e.prototype.joinFragmentArrays=function(e,t){var n,i,s,r,o;for(n=[],s=r=0,o=e.length;o>r;s=++r)i=e[s],s&&n.push(this.makeCode(t)),n=n.concat(i);return n},e}(),e.Block=r=function(e){function t(e){this.expressions=Q(it(e||[]))}return yt(t,e),t.prototype.children=["expressions"],t.prototype.push=function(e){return this.expressions.push(e),this},t.prototype.pop=function(){return this.expressions.pop()},t.prototype.unshift=function(e){return this.expressions.unshift(e),this},t.prototype.unwrap=function(){return 1===this.expressions.length?this.expressions[0]:this},t.prototype.isEmpty=function(){return!this.expressions.length},t.prototype.isStatement=function(e){var t,n,i,s;for(s=this.expressions,n=0,i=s.length;i>n;n++)if(t=s[n],t.isStatement(e))return!0;return!1},t.prototype.jumps=function(e){var t,n,i,s;for(s=this.expressions,n=0,i=s.length;i>n;n++)if(t=s[n],t.jumps(e))return t},t.prototype.makeReturn=function(e){var t,n;for(n=this.expressions.length;n--;)if(t=this.expressions[n],!(t instanceof u)){this.expressions[n]=t.makeReturn(e),t instanceof j&&!t.expression&&this.expressions.splice(n,1);break}return this},t.prototype.compileToFragments=function(e,n){return null==e&&(e={}),e.scope?t.__super__.compileToFragments.call(this,e,n):this.compileRoot(e)},t.prototype.compileNode=function(e){var n,i,s,r,o,a,c,h,l;for(this.tab=e.indent,a=e.level===N,i=[],l=this.expressions,r=c=0,h=l.length;h>c;r=++c)o=l[r],o=o.unwrapAll(),o=o.unfoldSoak(e)||o,o instanceof t?i.push(o.compileNode(e)):a?(o.front=!0,s=o.compileToFragments(e),o.isStatement(e)||(s.unshift(this.makeCode(""+this.tab)),s.push(this.makeCode(";"))),i.push(s)):i.push(o.compileToFragments(e,C));return a?this.spaced?[].concat(this.joinFragmentArrays(i,"\n\n"),this.makeCode("\n")):this.joinFragmentArrays(i,"\n"):(n=i.length?this.joinFragmentArrays(i,", "):[this.makeCode("void 0")],i.length>1&&e.level>=C?this.wrapInBraces(n):n)},t.prototype.compileRoot=function(e){var t,n,i,s,r,o,a,c,h,l;for(e.indent=e.bare?"":H,e.level=N,this.spaced=!0,e.scope=new V(null,this,null),l=e.locals||[],c=0,h=l.length;h>c;c++)s=l[c],e.scope.parameter(s);return r=[],e.bare||(o=function(){var e,n,s,r;for(s=this.expressions,r=[],i=e=0,n=s.length;n>e&&(t=s[i],t.unwrap()instanceof u);i=++e)r.push(t);return r}.call(this),a=this.expressions.slice(o.length),this.expressions=o,o.length&&(r=this.compileNode(at(e,{indent:""})),r.push(this.makeCode("\n"))),this.expressions=a),n=this.compileWithDeclarations(e),e.bare?n:[].concat(r,this.makeCode("(function() {\n"),n,this.makeCode("\n}).call(this);\n"))},t.prototype.compileWithDeclarations=function(e){var t,n,i,s,r,o,a,c,h,l,p,d,f,m;for(s=[],o=[],d=this.expressions,r=l=0,p=d.length;p>l&&(i=d[r],i=i.unwrap(),i instanceof u||i instanceof x);r=++l);return e=at(e,{level:N}),r&&(a=this.expressions.splice(r,9e9),f=[this.spaced,!1],h=f[0],this.spaced=f[1],m=[this.compileNode(e),h],s=m[0],this.spaced=m[1],this.expressions=a),o=this.compileNode(e),c=e.scope,c.expressions===this&&(n=e.scope.hasDeclarations(),t=c.hasAssignments,n||t?(r&&s.push(this.makeCode("\n")),s.push(this.makeCode(""+this.tab+"var ")),n&&s.push(this.makeCode(c.declaredVariables().join(", "))),t&&(n&&s.push(this.makeCode(",\n"+(this.tab+H))),s.push(this.makeCode(c.assignedVariables().join(",\n"+(this.tab+H))))),s.push(this.makeCode(";\n"+(this.spaced?"\n":"")))):s.length&&o.length&&s.push(this.makeCode("\n"))),s.concat(o)},t.wrap=function(e){return 1===e.length&&e[0]instanceof t?e[0]:new t(e)},t}(s),e.Literal=x=function(e){function t(e){this.value=e}return yt(t,e),t.prototype.makeReturn=function(){return this.isStatement()?this:t.__super__.makeReturn.apply(this,arguments)},t.prototype.isAssignable=function(){return m.test(this.value)},t.prototype.isStatement=function(){var e;return"break"===(e=this.value)||"continue"===e||"debugger"===e},t.prototype.isComplex=S,t.prototype.assigns=function(e){return e===this.value},t.prototype.jumps=function(e){return"break"!==this.value||(null!=e?e.loop:void 0)||(null!=e?e.block:void 0)?"continue"!==this.value||(null!=e?e.loop:void 0)?void 0:this:this},t.prototype.compileNode=function(e){var t,n,i;return n="this"===this.value?(null!=(i=e.scope.method)?i.bound:void 0)?e.scope.method.context:this.value:this.value.reserved?'"'+this.value+'"':this.value,t=this.isStatement()?""+this.tab+n+";":n,[this.makeCode(t)]},t.prototype.toString=function(){return' "'+this.value+'"'},t}(s),e.Undefined=function(e){function t(){return bt=t.__super__.constructor.apply(this,arguments)}return yt(t,e),t.prototype.isAssignable=S,t.prototype.isComplex=S,t.prototype.compileNode=function(e){return[this.makeCode(e.level>=w?"(void 0)":"void 0")]},t}(s),e.Null=function(e){function t(){return kt=t.__super__.constructor.apply(this,arguments)}return yt(t,e),t.prototype.isAssignable=S,t.prototype.isComplex=S,t.prototype.compileNode=function(){return[this.makeCode("null")]},t}(s),e.Bool=function(e){function t(e){this.val=e}return yt(t,e),t.prototype.isAssignable=S,t.prototype.isComplex=S,t.prototype.compileNode=function(){return[this.makeCode(this.val)]},t}(s),e.Return=j=function(e){function t(e){e&&!e.unwrap().isUndefined&&(this.expression=e)}return yt(t,e),t.prototype.children=["expression"],t.prototype.isStatement=J,t.prototype.makeReturn=G,t.prototype.jumps=G,t.prototype.compileToFragments=function(e,n){var i,s;return i=null!=(s=this.expression)?s.makeReturn():void 0,!i||i instanceof t?t.__super__.compileToFragments.call(this,e,n):i.compileToFragments(e,n)},t.prototype.compileNode=function(e){var t;return t=[],t.push(this.makeCode(this.tab+("return"+(this.expression?" ":"")))),this.expression&&(t=t.concat(this.expression.compileToFragments(e,L))),t.push(this.makeCode(";")),t},t}(s),e.Value=K=function(e){function t(e,n,i){return!n&&e instanceof t?e:(this.base=e,this.properties=n||[],i&&(this[i]=!0),this)}return yt(t,e),t.prototype.children=["base","properties"],t.prototype.add=function(e){return this.properties=this.properties.concat(e),this},t.prototype.hasProperties=function(){return!!this.properties.length},t.prototype.isArray=function(){return!this.properties.length&&this.base instanceof n},t.prototype.isComplex=function(){return this.hasProperties()||this.base.isComplex()},t.prototype.isAssignable=function(){return this.hasProperties()||this.base.isAssignable()},t.prototype.isSimpleNumber=function(){return this.base instanceof x&&M.test(this.base.value)},t.prototype.isString=function(){return this.base instanceof x&&k.test(this.base.value)},t.prototype.isAtomic=function(){var e,t,n,i;for(i=this.properties.concat(this.base),t=0,n=i.length;n>t;t++)if(e=i[t],e.soak||e instanceof o)return!1;return!0},t.prototype.isStatement=function(e){return!this.properties.length&&this.base.isStatement(e)},t.prototype.assigns=function(e){return!this.properties.length&&this.base.assigns(e)},t.prototype.jumps=function(e){return!this.properties.length&&this.base.jumps(e)},t.prototype.isObject=function(e){return this.properties.length?!1:this.base instanceof R&&(!e||this.base.generated)},t.prototype.isSplice=function(){return rt(this.properties)instanceof P},t.prototype.unwrap=function(){return this.properties.length?this:this.base},t.prototype.cacheReference=function(e){var n,s,r,o;return r=rt(this.properties),this.properties.length<2&&!this.base.isComplex()&&!(null!=r?r.isComplex():void 0)?[this,this]:(n=new t(this.base,this.properties.slice(0,-1)),n.isComplex()&&(s=new x(e.scope.freeVariable("base")),n=new t(new _(new i(s,n)))),r?(r.isComplex()&&(o=new x(e.scope.freeVariable("name")),r=new v(new i(o,r.index)),o=new v(o)),[n.add(r),new t(s||n.base,[o||r])]):[n,s])},t.prototype.compileNode=function(e){var t,n,i,s,r;for(this.base.front=this.front,i=this.properties,t=this.base.compileToFragments(e,i.length?w:null),(this.base instanceof _||i.length)&&M.test(st(t))&&t.push(this.makeCode(".")),s=0,r=i.length;r>s;s++)n=i[s],t.push.apply(t,n.compileToFragments(e));return t},t.prototype.unfoldSoak=function(e){var n=this;return null!=this.unfoldedSoak?this.unfoldedSoak:this.unfoldedSoak=function(){var s,r,o,a,c,h,l,u,d,f;if(o=n.base.unfoldSoak(e))return(d=o.body.properties).push.apply(d,n.properties),o;for(f=n.properties,r=l=0,u=f.length;u>l;r=++l)if(a=f[r],a.soak)return a.soak=!1,s=new t(n.base,n.properties.slice(0,r)),h=new t(n.base,n.properties.slice(r)),s.isComplex()&&(c=new x(e.scope.freeVariable("ref")),s=new _(new i(c,s)),h.base=c),new g(new p(s),h,{soak:!0});return!1}()},t}(s),e.Comment=u=function(e){function t(e){this.comment=e}return yt(t,e),t.prototype.isStatement=J,t.prototype.makeReturn=G,t.prototype.compileNode=function(e,t){var n;return n="/*"+ct(this.comment,this.tab)+(vt.call(this.comment,"\n")>=0?"\n"+this.tab:"")+"*/\n",(t||e.level)===N&&(n=e.indent+n),[this.makeCode(n)]},t}(s),e.Call=o=function(e){function n(e,t,n){this.args=null!=t?t:[],this.soak=n,this.isNew=!1,this.isSuper="super"===e,this.variable=this.isSuper?null:e}return yt(n,e),n.prototype.children=["variable","args"],n.prototype.newInstance=function(){var e,t;return e=(null!=(t=this.variable)?t.base:void 0)||this.variable,e instanceof n&&!e.isNew?e.newInstance():this.isNew=!0,this},n.prototype.superReference=function(e){var n,i;return i=e.scope.namedMethod(),(null!=i?i.klass:void 0)?(n=[new t(new x("__super__"))],i["static"]&&n.push(new t(new x("constructor"))),n.push(new t(new x(i.name))),new K(new x(i.klass),n).compile(e)):(null!=i?i.ctor:void 0)?""+i.name+".__super__.constructor":this.error("cannot call super outside of an instance method.")},n.prototype.superThis=function(e){var t;return t=e.scope.method,t&&!t.klass&&t.context||"this"},n.prototype.unfoldSoak=function(e){var t,i,s,r,o,a,c,h,l;if(this.soak){if(this.variable){if(i=pt(e,this,"variable"))return i;h=new K(this.variable).cacheReference(e),s=h[0],o=h[1]}else s=new x(this.superReference(e)),o=new K(s);return o=new n(o,this.args),o.isNew=this.isNew,s=new x("typeof "+s.compile(e)+' === "function"'),new g(s,new K(o),{soak:!0})}for(t=this,r=[];;)if(t.variable instanceof n)r.push(t),t=t.variable;else{if(!(t.variable instanceof K))break;if(r.push(t),!((t=t.variable.base)instanceof n))break}for(l=r.reverse(),a=0,c=l.length;c>a;a++)t=l[a],i&&(t.variable instanceof n?t.variable=i:t.variable.base=i),i=pt(e,t,"variable");return i},n.prototype.compileNode=function(e){var t,n,i,s,r,o,a,c,h,l;if(null!=(h=this.variable)&&(h.front=this.front),s=U.compileSplattedArray(e,this.args,!0),s.length)return this.compileSplat(e,s);for(i=[],l=this.args,n=a=0,c=l.length;c>a;n=++a)t=l[n],n&&i.push(this.makeCode(", ")),i.push.apply(i,t.compileToFragments(e,C));return r=[],this.isSuper?(o=this.superReference(e)+(".call("+this.superThis(e)),i.length&&(o+=", "),r.push(this.makeCode(o))):(this.isNew&&r.push(this.makeCode("new ")),r.push.apply(r,this.variable.compileToFragments(e,w)),r.push(this.makeCode("("))),r.push.apply(r,i),r.push(this.makeCode(")")),r},n.prototype.compileSplat=function(e,t){var n,i,s,r,o,a;return this.isSuper?[].concat(this.makeCode(""+this.superReference(e)+".apply("+this.superThis(e)+", "),t,this.makeCode(")")):this.isNew?(r=this.tab+H,[].concat(this.makeCode("(function(func, args, ctor) {\n"+r+"ctor.prototype = func.prototype;\n"+r+"var child = new ctor, result = func.apply(child, args);\n"+r+"return Object(result) === result ? result : child;\n"+this.tab+"})("),this.variable.compileToFragments(e,C),this.makeCode(", "),t,this.makeCode(", function(){})"))):(n=[],i=new K(this.variable),(o=i.properties.pop())&&i.isComplex()?(a=e.scope.freeVariable("ref"),n=n.concat(this.makeCode("("+a+" = "),i.compileToFragments(e,C),this.makeCode(")"),o.compileToFragments(e))):(s=i.compileToFragments(e,w),M.test(st(s))&&(s=this.wrapInBraces(s)),o?(a=st(s),s.push.apply(s,o.compileToFragments(e))):a="null",n=n.concat(s)),n=n.concat(this.makeCode(".apply("+a+", "),t,this.makeCode(")")))},n}(s),e.Extends=d=function(e){function t(e,t){this.child=e,this.parent=t}return yt(t,e),t.prototype.children=["child","parent"],t.prototype.compileToFragments=function(e){return new o(new K(new x(dt("extends"))),[this.child,this.parent]).compileToFragments(e)},t}(s),e.Access=t=function(e){function t(e,t){this.name=e,this.name.asKey=!0,this.soak="soak"===t}return yt(t,e),t.prototype.children=["name"],t.prototype.compileToFragments=function(e){var t;return t=this.name.compileToFragments(e),m.test(st(t))?t.unshift(this.makeCode(".")):(t.unshift(this.makeCode("[")),t.push(this.makeCode("]"))),t},t.prototype.isComplex=S,t}(s),e.Index=v=function(e){function t(e){this.index=e}return yt(t,e),t.prototype.children=["index"],t.prototype.compileToFragments=function(e){return[].concat(this.makeCode("["),this.index.compileToFragments(e,L),this.makeCode("]"))},t.prototype.isComplex=function(){return this.index.isComplex()},t}(s),e.Range=O=function(e){function t(e,t,n){this.from=e,this.to=t,this.exclusive="exclusive"===n,this.equals=this.exclusive?"":"="}return yt(t,e),t.prototype.children=["from","to"],t.prototype.compileVariables=function(e){var t,n,i,s,r;return e=at(e,{top:!0}),n=this.cacheToCodeFragments(this.from.cache(e,C)),this.fromC=n[0],this.fromVar=n[1],i=this.cacheToCodeFragments(this.to.cache(e,C)),this.toC=i[0],this.toVar=i[1],(t=et(e,"step"))&&(s=this.cacheToCodeFragments(t.cache(e,C)),this.step=s[0],this.stepVar=s[1]),r=[this.fromVar.match(M),this.toVar.match(M)],this.fromNum=r[0],this.toNum=r[1],this.stepVar?this.stepNum=this.stepVar.match(M):void 0},t.prototype.compileNode=function(e){var t,n,i,s,r,o,a,c,h,l,u,p,d,f;return this.fromVar||this.compileVariables(e),e.index?(a=this.fromNum&&this.toNum,r=et(e,"index"),o=et(e,"name"),h=o&&o!==r,p=""+r+" = "+this.fromC,this.toC!==this.toVar&&(p+=", "+this.toC),this.step!==this.stepVar&&(p+=", "+this.step),d=[""+r+" <"+this.equals,""+r+" >"+this.equals],c=d[0],s=d[1],n=this.stepNum?+this.stepNum>0?""+c+" "+this.toVar:""+s+" "+this.toVar:a?(f=[+this.fromNum,+this.toNum],i=f[0],u=f[1],f,u>=i?""+c+" "+u:""+s+" "+u):(t=this.stepVar?""+this.stepVar+" > 0":""+this.fromVar+" <= "+this.toVar,""+t+" ? "+c+" "+this.toVar+" : "+s+" "+this.toVar),l=this.stepVar?""+r+" += "+this.stepVar:a?h?u>=i?"++"+r:"--"+r:u>=i?""+r+"++":""+r+"--":h?""+t+" ? ++"+r+" : --"+r:""+t+" ? "+r+"++ : "+r+"--",h&&(p=""+o+" = "+p),h&&(l=""+o+" = "+l),[this.makeCode(""+p+"; "+n+"; "+l)]):this.compileArray(e)},t.prototype.compileArray=function(e){var t,n,i,s,r,o,a,c,h,l,u,p,d;return this.fromNum&&this.toNum&&Math.abs(this.fromNum-this.toNum)<=20?(h=function(){d=[];for(var e=p=+this.fromNum,t=+this.toNum;t>=p?t>=e:e>=t;t>=p?e++:e--)d.push(e);return d}.apply(this),this.exclusive&&h.pop(),[this.makeCode("["+h.join(", ")+"]")]):(o=this.tab+H,r=e.scope.freeVariable("i"),l=e.scope.freeVariable("results"),c="\n"+o+l+" = [];",this.fromNum&&this.toNum?(e.index=r,n=st(this.compileNode(e))):(u=""+r+" = "+this.fromC+(this.toC!==this.toVar?", "+this.toC:""),i=""+this.fromVar+" <= "+this.toVar,n="var "+u+"; "+i+" ? "+r+" <"+this.equals+" "+this.toVar+" : "+r+" >"+this.equals+" "+this.toVar+"; "+i+" ? "+r+"++ : "+r+"--"),a="{ "+l+".push("+r+"); }\n"+o+"return "+l+";\n"+e.indent,s=function(e){return null!=e?e.contains(function(e){return e instanceof x&&"arguments"===e.value&&!e.asKey}):void 0},(s(this.from)||s(this.to))&&(t=", arguments"),[this.makeCode("(function() {"+c+"\n"+o+"for ("+n+")"+a+"}).apply(this"+(null!=t?t:"")+")")])},t}(s),e.Slice=P=function(e){function t(e){this.range=e,t.__super__.constructor.call(this)}return yt(t,e),t.prototype.children=["range"],t.prototype.compileNode=function(e){var t,n,i,s,r,o,a;return a=this.range,r=a.to,i=a.from,s=i&&i.compileToFragments(e,L)||[this.makeCode("0")],r&&(t=r.compileToFragments(e,L),n=st(t),(this.range.exclusive||-1!==+n)&&(o=", "+(this.range.exclusive?n:M.test(n)?""+(+n+1):(t=r.compileToFragments(e,w),"+"+st(t)+" + 1 || 9e9")))),[this.makeCode(".slice("+st(s)+(o||"")+")")]},t}(s),e.Obj=R=function(e){function t(e,t){this.generated=null!=t?t:!1,this.objects=this.properties=e||[]}return yt(t,e),t.prototype.children=["properties"],t.prototype.compileNode=function(e){var t,n,s,r,o,a,c,h,l,p,d,f,m;if(l=this.properties,!l.length)return[this.makeCode(this.front?"({})":"{}")];if(this.generated)for(p=0,f=l.length;f>p;p++)c=l[p],c instanceof K&&c.error("cannot have an implicit value in an implicit object");for(s=e.indent+=H,a=this.lastNonComment(this.properties),t=[],n=d=0,m=l.length;m>d;n=++d)h=l[n],o=n===l.length-1?"":h===a||h instanceof u?"\n":",\n",r=h instanceof u?"":s,h instanceof i&&h.variable instanceof K&&h.variable.hasProperties()&&h.variable.error("Invalid object key"),h instanceof K&&h["this"]&&(h=new i(h.properties[0].name,h,"object")),h instanceof u||(h instanceof i||(h=new i(h,h,"object")),(h.variable.base||h.variable).asKey=!0),r&&t.push(this.makeCode(r)),t.push.apply(t,h.compileToFragments(e,N)),o&&t.push(this.makeCode(o));return t.unshift(this.makeCode("{"+(l.length&&"\n"))),t.push(this.makeCode(""+(l.length&&"\n"+this.tab)+"}")),this.front?this.wrapInBraces(t):t},t.prototype.assigns=function(e){var t,n,i,s;for(s=this.properties,n=0,i=s.length;i>n;n++)if(t=s[n],t.assigns(e))return!0;return!1},t}(s),e.Arr=n=function(e){function t(e){this.objects=e||[]}return yt(t,e),t.prototype.children=["objects"],t.prototype.compileNode=function(e){var t,n,i,s,r,o,a;if(!this.objects.length)return[this.makeCode("[]")];if(e.indent+=H,t=U.compileSplattedArray(e,this.objects),t.length)return t;for(t=[],n=function(){var t,n,i,s;for(i=this.objects,s=[],t=0,n=i.length;n>t;t++)r=i[t],s.push(r.compileToFragments(e,C));return s}.call(this),s=o=0,a=n.length;a>o;s=++o)i=n[s],s&&t.push(this.makeCode(", ")),t.push.apply(t,i);return st(t).indexOf("\n")>=0?(t.unshift(this.makeCode("[\n"+e.indent)),t.push(this.makeCode("\n"+this.tab+"]"))):(t.unshift(this.makeCode("[")),t.push(this.makeCode("]"))),t},t.prototype.assigns=function(e){var t,n,i,s;for(s=this.objects,n=0,i=s.length;i>n;n++)if(t=s[n],t.assigns(e))return!0;return!1},t}(s),e.Class=a=function(e){function n(e,t,n){this.variable=e,this.parent=t,this.body=null!=n?n:new r,this.boundFuncs=[],this.body.classBody=!0}return yt(n,e),n.prototype.children=["variable","parent","body"],n.prototype.determineName=function(){var e,n;return this.variable?(e=(n=rt(this.variable.properties))?n instanceof t&&n.name.value:this.variable.base.value,vt.call(B,e)>=0&&this.variable.error("class variable name may not be "+e),e&&(e=m.test(e)&&e)):null},n.prototype.setContext=function(e){return this.body.traverseChildren(!1,function(t){return t.classBody?!1:t instanceof x&&"this"===t.value?t.value=e:t instanceof h&&(t.klass=e,t.bound)?t.context=e:void 0})},n.prototype.addBoundFunctions=function(e){var n,i,s,r,o;for(o=this.boundFuncs,s=0,r=o.length;r>s;s++)n=o[s],i=new K(new x("this"),[new t(n)]).compile(e),this.ctor.body.unshift(new x(""+i+" = "+dt("bind")+"("+i+", this)"))},n.prototype.addProperties=function(e,n,s){var r,o,a,c,l;return l=e.base.properties.slice(0),a=function(){var e;for(e=[];r=l.shift();)r instanceof i&&(o=r.variable.base,delete r.context,c=r.value,"constructor"===o.value?(this.ctor&&r.error("cannot define more than one constructor in a class"),c.bound&&r.error("cannot define a constructor as a bound function"),c instanceof h?r=this.ctor=c:(this.externalCtor=s.scope.freeVariable("class"),r=new i(new x(this.externalCtor),c))):r.variable["this"]?(c["static"]=!0,c.bound&&(c.context=n)):(r.variable=new K(new x(n),[new t(new x("prototype")),new t(o)]),c instanceof h&&c.bound&&(this.boundFuncs.push(o),c.bound=!1))),e.push(r);return e}.call(this),Q(a)},n.prototype.walkBody=function(e,t){var i=this;return this.traverseChildren(!1,function(s){var o,a,c,h,l,u,p;if(o=!0,s instanceof n)return!1;if(s instanceof r){for(p=a=s.expressions,c=l=0,u=p.length;u>l;c=++l)h=p[c],h instanceof K&&h.isObject(!0)&&(o=!1,a[c]=i.addProperties(h,e,t));s.expressions=a=it(a)}return o&&!(s instanceof n)})},n.prototype.hoistDirectivePrologue=function(){var e,t,n;for(t=0,e=this.body.expressions;(n=e[t])&&n instanceof u||n instanceof K&&n.isString();)++t;return this.directives=e.splice(0,t)},n.prototype.ensureConstructor=function(e,t){var n,s,r;return n=!this.ctor,this.ctor||(this.ctor=new h),this.ctor.ctor=this.ctor.name=e,this.ctor.klass=null,this.ctor.noReturn=!0,n?(this.parent&&(r=new x(""+e+".__super__.constructor.apply(this, arguments)")),this.externalCtor&&(r=new x(""+this.externalCtor+".apply(this, arguments)")),r&&(s=new x(t.scope.freeVariable("ref")),this.ctor.body.unshift(new i(s,r))),this.addBoundFunctions(t),r&&(this.ctor.body.push(s),this.ctor.body.makeReturn()),this.body.expressions.unshift(this.ctor)):this.addBoundFunctions(t)},n.prototype.compileNode=function(e){var t,n,s,r,o,a,l;return n=this.determineName(),o=n||"_Class",o.reserved&&(o="_"+o),r=new x(o),this.hoistDirectivePrologue(),this.setContext(o),this.walkBody(o,e),this.ensureConstructor(o,e),this.body.spaced=!0,this.ctor instanceof h||this.body.expressions.unshift(this.ctor),this.body.expressions.push(r),(l=this.body.expressions).unshift.apply(l,this.directives),t=c.wrap(this.body),this.parent&&(this.superClass=new x(e.scope.freeVariable("super",!1)),this.body.expressions.unshift(new d(r,this.superClass)),t.args.push(this.parent),a=t.variable.params||t.variable.base.params,a.push(new I(this.superClass))),s=new _(t,!0),this.variable&&(s=new i(this.variable,s)),s.compileToFragments(e)},n}(s),e.Assign=i=function(e){function n(e,t,n,i){var s,r,o;this.variable=e,this.value=t,this.context=n,this.param=i&&i.param,this.subpattern=i&&i.subpattern,o=r=this.variable.unwrapAll().value,s=vt.call(B,o)>=0,s&&"object"!==this.context&&this.variable.error('variable name may not be "'+r+'"')}return yt(n,e),n.prototype.children=["variable","value"],n.prototype.isStatement=function(e){return(null!=e?e.level:void 0)===N&&null!=this.context&&vt.call(this.context,"?")>=0},n.prototype.assigns=function(e){return this["object"===this.context?"value":"variable"].assigns(e)},n.prototype.unfoldSoak=function(e){return pt(e,this,"variable")},n.prototype.compileNode=function(e){var t,n,i,s,r,o,a,c,l,u,p;if(i=this.variable instanceof K){if(this.variable.isArray()||this.variable.isObject())return this.compilePatternMatch(e);if(this.variable.isSplice())return this.compileSplice(e);if("||="===(c=this.context)||"&&="===c||"?="===c)return this.compileConditional(e)}return n=this.variable.compileToFragments(e,C),r=st(n),this.context||(a=this.variable.unwrapAll(),a.isAssignable()||this.variable.error('"'+this.variable.compile(e)+'" cannot be assigned'),("function"==typeof a.hasProperties?a.hasProperties():void 0)||(this.param?e.scope.add(r,"var"):e.scope.find(r))),this.value instanceof h&&(s=E.exec(r))&&(s[1]&&(this.value.klass=s[1]),this.value.name=null!=(l=null!=(u=null!=(p=s[2])?p:s[3])?u:s[4])?l:s[5]),o=this.value.compileToFragments(e,C),"object"===this.context?n.concat(this.makeCode(": "),o):(t=n.concat(this.makeCode(" "+(this.context||"=")+" "),o),e.level<=C?t:this.wrapInBraces(t))},n.prototype.compilePatternMatch=function(e){var i,s,r,o,a,c,h,l,u,p,d,f,b,k,g,y,w,T,L,E,D,S,R,A,I,O,j,M;if(y=e.level===N,T=this.value,d=this.variable.base.objects,!(f=d.length))return r=T.compileToFragments(e),e.level>=F?this.wrapInBraces(r):r;if(h=this.variable.isObject(),y&&1===f&&!((p=d[0])instanceof U))return p instanceof n?(R=p,A=R.variable,c=A.base,p=R.value):c=h?p["this"]?p.properties[0].name:p:new x(0),i=m.test(c.unwrap().value||0),T=new K(T),T.properties.push(new(i?t:v)(c)),I=p.unwrap().value,vt.call($,I)>=0&&p.error("assignment to a reserved word: "+p.compile(e)),new n(p,T,null,{param:this.param}).compileToFragments(e,N);for(L=T.compileToFragments(e,C),E=st(L),s=[],g=!1,(!m.test(E)||this.variable.assigns(E))&&(s.push([this.makeCode(""+(b=e.scope.freeVariable("ref"))+" = ")].concat(wt.call(L))),L=[this.makeCode(b)],E=b),a=D=0,S=d.length;S>D;a=++D)p=d[a],c=a,h&&(p instanceof n?(O=p,j=O.variable,c=j.base,p=O.value):p.base instanceof _?(M=new K(p.unwrapAll()).cacheReference(e),p=M[0],c=M[1]):c=p["this"]?p.properties[0].name:p),!g&&p instanceof U?(u=p.name.unwrap().value,p=p.unwrap(),w=""+f+" <= "+E+".length ? "+dt("slice")+".call("+E+", "+a,(k=f-a-1)?(l=e.scope.freeVariable("i"),w+=", "+l+" = "+E+".length - "+k+") : ("+l+" = "+a+", [])"):w+=") : []",w=new x(w),g=""+l+"++"):(u=p.unwrap().value,p instanceof U&&p.error("multiple splats are disallowed in an assignment"),"number"==typeof c?(c=new x(g||c),i=!1):i=h&&m.test(c.unwrap().value||0),w=new K(new x(E),[new(i?t:v)(c)])),null!=u&&vt.call($,u)>=0&&p.error("assignment to a reserved word: "+p.compile(e)),s.push(new n(p,w,null,{param:this.param,subpattern:!0}).compileToFragments(e,C));
11
+ return y||this.subpattern||s.push(L),o=this.joinFragmentArrays(s,", "),e.level<C?o:this.wrapInBraces(o)},n.prototype.compileConditional=function(e){var t,i,s;return s=this.variable.cacheReference(e),t=s[0],i=s[1],!t.properties.length&&t.bas