bitwrench 1.2.16 → 2.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. package/README.md +160 -158
  2. package/bin/bitwrench.js +3 -0
  3. package/dist/bitwrench-code-edit.cjs.js +639 -0
  4. package/dist/bitwrench-code-edit.es5.js +875 -0
  5. package/dist/bitwrench-code-edit.es5.min.js +15 -0
  6. package/dist/bitwrench-code-edit.esm.js +628 -0
  7. package/dist/bitwrench-code-edit.esm.min.js +15 -0
  8. package/dist/bitwrench-code-edit.umd.js +645 -0
  9. package/dist/bitwrench-code-edit.umd.min.js +15 -0
  10. package/dist/bitwrench.cjs.js +6983 -0
  11. package/dist/bitwrench.cjs.min.js +62 -0
  12. package/dist/bitwrench.css +5100 -0
  13. package/dist/bitwrench.es5.js +8446 -0
  14. package/dist/bitwrench.es5.min.js +31 -0
  15. package/dist/bitwrench.esm.js +6981 -0
  16. package/dist/bitwrench.esm.min.js +62 -0
  17. package/dist/bitwrench.umd.js +6989 -0
  18. package/dist/bitwrench.umd.min.js +62 -0
  19. package/dist/builds.json +127 -0
  20. package/dist/sri.json +18 -0
  21. package/package.json +86 -24
  22. package/readme.html +288 -0
  23. package/src/bitwrench-code-edit.js +627 -0
  24. package/src/bitwrench-color-utils.js +311 -0
  25. package/src/bitwrench-component-base.js +736 -0
  26. package/src/bitwrench-components-inline.js +374 -0
  27. package/src/bitwrench-components-v2.js +1879 -0
  28. package/src/bitwrench-components.js +610 -0
  29. package/src/bitwrench-styles.js +3240 -0
  30. package/src/bitwrench.js +3367 -0
  31. package/src/cli/convert.js +205 -0
  32. package/src/cli/index.js +122 -0
  33. package/src/cli/inject.js +55 -0
  34. package/src/cli/layout-default.js +142 -0
  35. package/src/generate-css.js +381 -0
  36. package/src/vendor/quikdown.js +654 -0
  37. package/src/version.js +16 -0
  38. package/.eslintrc.json +0 -27
  39. package/.github/workflows/codeql-analysis.yml +0 -72
  40. package/.travis.yml +0 -34
  41. package/bitwrench.css +0 -92
  42. package/bitwrench.js +0 -3348
  43. package/bitwrench.js_sri.txt +0 -1
  44. package/bitwrench.min.js +0 -1
  45. package/bitwrench.min.js_sri.txt +0 -1
  46. package/bitwrench_ESM.js +0 -3207
  47. package/bitwrench_ESM.js_sri.txt +0 -1
  48. package/bitwrench_ESM.min.js +0 -1
  49. package/bitwrench_ESM.min.js_sri.txt +0 -1
  50. package/dev/bitwrench-todo.md +0 -215
  51. package/dev/css-arrows.md +0 -23
  52. package/dev/docStringDev.js +0 -124
  53. package/dev/docStringParseDev.js +0 -171
  54. package/dev/example11-load-mjs-page.html +0 -17
  55. package/dev/figures.html +0 -37
  56. package/dev/html_gen.js +0 -349
  57. package/dev/htmld.md +0 -250
  58. package/dev/htmldev.html +0 -45
  59. package/dev/index-old.html +0 -87
  60. package/dev/misc-notes.md +0 -21
  61. package/dev/norm.css +0 -30
  62. package/dev/notes.md +0 -2
  63. package/dev/pageData.mjs +0 -69
  64. package/dev/sizes.html +0 -49
  65. package/dev/universal-js-module.js +0 -37
  66. package/examples/example1.html +0 -78
  67. package/examples/example10.html +0 -84
  68. package/examples/example11.html +0 -17
  69. package/examples/example12.html +0 -18
  70. package/examples/example2.html +0 -44
  71. package/examples/example3.html +0 -50
  72. package/examples/example4.html +0 -22
  73. package/examples/example5.html +0 -82
  74. package/examples/example6.html +0 -128
  75. package/examples/example7.html +0 -91
  76. package/examples/example8.html +0 -27
  77. package/examples/example9.html +0 -102
  78. package/examples/examplePageData12.mjs +0 -73
  79. package/examples/pageData.mjs +0 -69
  80. package/examples/pico.min.css +0 -5
  81. package/icon/bitwrench-dark-tall.png +0 -0
  82. package/icon/bitwrench-dark.png +0 -0
  83. package/icon/bitwrench-icon-lt-grey.png +0 -0
  84. package/icon/bitwrench-icon.vsd +0 -0
  85. package/icon/bitwrench-logo-dark.png +0 -0
  86. package/icon/bitwrench-logo-full.png +0 -0
  87. package/icon/bitwrench-logo-green.png +0 -0
  88. package/icon/bitwrench-logo-grey.png +0 -0
  89. package/icon/bitwrench-logo-white.png +0 -0
  90. package/icon/bitwrench-logos-colors.png +0 -0
  91. package/icon/bitwrench-thick-logo.png +0 -0
  92. package/icon/bitwrench-thick-teal/android-chrome-192x192.png +0 -0
  93. package/icon/bitwrench-thick-teal/android-chrome-512x512.png +0 -0
  94. package/icon/bitwrench-thick-teal/apple-touch-icon.png +0 -0
  95. package/icon/bitwrench-thick-teal/browserconfig.xml +0 -9
  96. package/icon/bitwrench-thick-teal/favicon-16x16.png +0 -0
  97. package/icon/bitwrench-thick-teal/favicon-32x32.png +0 -0
  98. package/icon/bitwrench-thick-teal/favicon.ico +0 -0
  99. package/icon/bitwrench-thick-teal/mstile-144x144.png +0 -0
  100. package/icon/bitwrench-thick-teal/mstile-150x150.png +0 -0
  101. package/icon/bitwrench-thick-teal/mstile-310x150.png +0 -0
  102. package/icon/bitwrench-thick-teal/mstile-310x310.png +0 -0
  103. package/icon/bitwrench-thick-teal/mstile-70x70.png +0 -0
  104. package/icon/bitwrench-thick-teal/site.webmanifest +0 -19
  105. package/icon/bitwrench-thick-teal.ico +0 -0
  106. package/icon/bitwrench-thick-teal.svg +0 -44
  107. package/icon/bitwrench-thick-teal.zip +0 -0
  108. package/icon/favicon-test.html +0 -20
  109. package/icon/logos-test.PNG +0 -0
  110. package/images/bitwrench-512x512.png +0 -0
  111. package/images/bitwrench-logo-med.png +0 -0
  112. package/images/bitwrench-thick-logo.png +0 -0
  113. package/images/bitwrench-thick-logo.svg +0 -64
  114. package/images/bitwrench-thick-teal.ico +0 -0
  115. package/images/favicon.ico +0 -0
  116. package/index.html +0 -282
  117. package/instr_tmp/bitwrench.js +0 -1350
  118. package/karma.conf.js +0 -140
  119. package/makefile +0 -21
  120. package/quick-docs.html +0 -206
  121. package/test/bitwrench_test.js +0 -1255
  122. package/test/karma-test.js +0 -1081
  123. package/tools/bw_deprecatedNames.js +0 -19
  124. package/tools/bwconsole.js +0 -20
  125. package/tools/createSimpleHTMLPage.js +0 -41
  126. package/tools/emitreadme.sh +0 -4
  127. package/tools/export-bw-default-css.js +0 -41
  128. package/tools/umd2ModuleHack.js +0 -32
  129. package/tools/update-bw-package.js +0 -36
  130. package/tools/updatereadme.js +0 -34
@@ -1,1350 +0,0 @@
1
- /*
2
- * bitwrench.js --- Misc Helper Functions ..
3
- *
4
- * bitwrench is just a named space set of javascript helper functions useful for common web tasks and
5
- * some server side js. No rhyme or reason I just needed these items over and overgain and didn't feel
6
- * like cobbling together different common libs
7
- *
8
- * M. A. Chatterjee 2013
9
- *
10
- * @copy Copyright (C) <2013> <M. A. Chatterjee>
11
- *
12
- * @author M A Chatterjee <deftio [at] deftio [dot] com>
13
- *
14
- * This software is provided 'as-is', without any express or implied
15
- * warranty. In no event will the authors be held liable for any damages
16
- * arising from the use of this software.
17
- *
18
- * Permission is granted to anyone to use this software for any purpose,
19
- * including commercial applications, and to alter it and redistribute it
20
- * freely, subject to the following restrictions:
21
- *
22
- * 1. The origin of this software must not be misrepresented; you must not
23
- * claim that you wrote the original software. If you use this software
24
- * in a product, an acknowledgment in the product documentation is required.
25
- *
26
- * 2. Altered source versions must be plainly marked as such, and must not be
27
- * misrepresented as being the original software.
28
- *
29
- * 3. This notice may not be removed or altered from any source
30
- * distribution.
31
- *
32
- */ //JS Hint linter directives
33
- /*jshint -W069 */ //suppresses warning about using x.var_name vs x["var_name"]
34
- //usage in browser
35
- //<script type="text/javascript" src="./bitwrench.js"></script>
36
- //usage in nodejs
37
- //var bw = require('./bitwrench.js'); //adds to current scope in nodejs
38
- // optional polyfill for IE8 and earlier
39
- "use strict";/* istanbul ignore next */function cov_1s53a2b0g7(){var path="/home/manu/deftio/deftio-projects/bitwrench/bitwrench.js";var hash="fe533d8b509d150c2f9268e76ca3be8fbfcf5b37";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/manu/deftio/deftio-projects/bitwrench/bitwrench.js",statementMap:{"0":{start:{line:110,column:0},end:{line:3283,column:4}},"1":{start:{line:111,column:4},end:{line:134,column:5}},"2":{start:{line:114,column:8},end:{line:114,column:28}},"3":{start:{line:115,column:11},end:{line:134,column:5}},"4":{start:{line:117,column:8},end:{line:123,column:32}},"5":{start:{line:123,column:22},end:{line:123,column:31}},"6":{start:{line:124,column:12},end:{line:124,column:53}},"7":{start:{line:125,column:12},end:{line:125,column:32}},"8":{start:{line:130,column:19},end:{line:130,column:28}},"9":{start:{line:131,column:8},end:{line:131,column:39}},"10":{start:{line:132,column:8},end:{line:132,column:40}},"11":{start:{line:142,column:13},end:{line:142,column:15}},"12":{start:{line:143,column:4},end:{line:143,column:25}},"13":{start:{line:144,column:4},end:{line:144,column:32}},"14":{start:{line:148,column:0},end:{line:163,column:2}},"15":{start:{line:161,column:12},end:{line:161,column:45}},"16":{start:{line:162,column:4},end:{line:162,column:43}},"17":{start:{line:167,column:0},end:{line:174,column:2}},"18":{start:{line:173,column:4},end:{line:173,column:41}},"19":{start:{line:178,column:0},end:{line:218,column:2}},"20":{start:{line:202,column:4},end:{line:203,column:22}},"21":{start:{line:203,column:8},end:{line:203,column:22}},"22":{start:{line:205,column:12},end:{line:205,column:133}},"23":{start:{line:207,column:4},end:{line:208,column:17}},"24":{start:{line:208,column:8},end:{line:208,column:17}},"25":{start:{line:209,column:4},end:{line:210,column:16}},"26":{start:{line:210,column:7},end:{line:210,column:16}},"27":{start:{line:212,column:12},end:{line:212,column:13}},"28":{start:{line:213,column:4},end:{line:216,column:25}},"29":{start:{line:214,column:8},end:{line:214,column:105}},"30":{start:{line:217,column:4},end:{line:217,column:13}},"31":{start:{line:220,column:10},end:{line:220,column:19}},"32":{start:{line:221,column:0},end:{line:221,column:14}},"33":{start:{line:224,column:0},end:{line:244,column:2}},"34":{start:{line:237,column:4},end:{line:238,column:36}},"35":{start:{line:238,column:8},end:{line:238,column:36}},"36":{start:{line:240,column:4},end:{line:241,column:34}},"37":{start:{line:241,column:8},end:{line:241,column:34}},"38":{start:{line:243,column:4},end:{line:243,column:70}},"39":{start:{line:246,column:11},end:{line:246,column:24}},"40":{start:{line:247,column:0},end:{line:247,column:25}},"41":{start:{line:253,column:0},end:{line:279,column:2}},"42":{start:{line:272,column:4},end:{line:273,column:36}},"43":{start:{line:273,column:8},end:{line:273,column:36}},"44":{start:{line:275,column:4},end:{line:276,column:34}},"45":{start:{line:276,column:8},end:{line:276,column:34}},"46":{start:{line:278,column:4},end:{line:278,column:169}},"47":{start:{line:281,column:0},end:{line:281,column:23}},"48":{start:{line:296,column:0},end:{line:304,column:2}},"49":{start:{line:301,column:4},end:{line:302,column:18}},"50":{start:{line:302,column:8},end:{line:302,column:18}},"51":{start:{line:303,column:4},end:{line:303,column:73}},"52":{start:{line:303,column:43},end:{line:303,column:70}},"53":{start:{line:306,column:0},end:{line:314,column:2}},"54":{start:{line:311,column:4},end:{line:312,column:18}},"55":{start:{line:312,column:8},end:{line:312,column:18}},"56":{start:{line:313,column:4},end:{line:313,column:78}},"57":{start:{line:313,column:47},end:{line:313,column:74}},"58":{start:{line:316,column:0},end:{line:324,column:2}},"59":{start:{line:321,column:4},end:{line:322,column:18}},"60":{start:{line:322,column:8},end:{line:322,column:18}},"61":{start:{line:323,column:4},end:{line:323,column:75}},"62":{start:{line:323,column:47},end:{line:323,column:71}},"63":{start:{line:349,column:12},end:{line:349,column:27}},"64":{start:{line:463,column:0},end:{line:463,column:27}},"65":{start:{line:477,column:0},end:{line:496,column:2}},"66":{start:{line:484,column:12},end:{line:484,column:55}},"67":{start:{line:485,column:4},end:{line:485,column:44}},"68":{start:{line:486,column:4},end:{line:487,column:20}},"69":{start:{line:487,column:8},end:{line:487,column:20}},"70":{start:{line:489,column:4},end:{line:489,column:53}},"71":{start:{line:489,column:26},end:{line:489,column:50}},"72":{start:{line:490,column:12},end:{line:490,column:79}},"73":{start:{line:491,column:12},end:{line:491,column:47}},"74":{start:{line:492,column:12},end:{line:492,column:15}},"75":{start:{line:493,column:13},end:{line:493,column:85}},"76":{start:{line:493,column:27},end:{line:493,column:84}},"77":{start:{line:494,column:4},end:{line:494,column:45}},"78":{start:{line:500,column:0},end:{line:564,column:2}},"79":{start:{line:525,column:4},end:{line:530,column:5}},"80":{start:{line:526,column:8},end:{line:526,column:15}},"81":{start:{line:527,column:8},end:{line:527,column:15}},"82":{start:{line:528,column:8},end:{line:528,column:15}},"83":{start:{line:529,column:8},end:{line:529,column:15}},"84":{start:{line:531,column:14},end:{line:531,column:103}},"85":{start:{line:531,column:41},end:{line:531,column:50}},"86":{start:{line:531,column:66},end:{line:531,column:102}},"87":{start:{line:534,column:4},end:{line:534,column:20}},"88":{start:{line:535,column:4},end:{line:535,column:12}},"89":{start:{line:536,column:4},end:{line:536,column:32}},"90":{start:{line:536,column:15},end:{line:536,column:32}},"91":{start:{line:537,column:4},end:{line:537,column:11}},"92":{start:{line:539,column:4},end:{line:539,column:42}},"93":{start:{line:540,column:4},end:{line:540,column:42}},"94":{start:{line:542,column:4},end:{line:542,column:40}},"95":{start:{line:543,column:4},end:{line:543,column:40}},"96":{start:{line:545,column:4},end:{line:557,column:5}},"97":{start:{line:546,column:8},end:{line:546,column:14}},"98":{start:{line:546,column:19},end:{line:546,column:25}},"99":{start:{line:546,column:30},end:{line:546,column:36}},"100":{start:{line:547,column:11},end:{line:557,column:5}},"101":{start:{line:548,column:8},end:{line:548,column:14}},"102":{start:{line:548,column:17},end:{line:548,column:23}},"103":{start:{line:548,column:25},end:{line:548,column:31}},"104":{start:{line:549,column:11},end:{line:557,column:5}},"105":{start:{line:550,column:8},end:{line:550,column:14}},"106":{start:{line:550,column:15},end:{line:550,column:21}},"107":{start:{line:550,column:25},end:{line:550,column:31}},"108":{start:{line:551,column:11},end:{line:557,column:5}},"109":{start:{line:552,column:8},end:{line:552,column:14}},"110":{start:{line:552,column:17},end:{line:552,column:23}},"111":{start:{line:552,column:25},end:{line:552,column:31}},"112":{start:{line:553,column:11},end:{line:557,column:5}},"113":{start:{line:554,column:8},end:{line:554,column:14}},"114":{start:{line:554,column:17},end:{line:554,column:23}},"115":{start:{line:554,column:25},end:{line:554,column:31}},"116":{start:{line:556,column:8},end:{line:556,column:14}},"117":{start:{line:556,column:17},end:{line:556,column:23}},"118":{start:{line:556,column:25},end:{line:556,column:31}},"119":{start:{line:559,column:4},end:{line:559,column:18}},"120":{start:{line:560,column:4},end:{line:560,column:22}},"121":{start:{line:561,column:4},end:{line:561,column:22}},"122":{start:{line:562,column:4},end:{line:562,column:22}},"123":{start:{line:563,column:4},end:{line:563,column:42}},"124":{start:{line:567,column:0},end:{line:609,column:2}},"125":{start:{line:584,column:4},end:{line:589,column:5}},"126":{start:{line:585,column:8},end:{line:585,column:15}},"127":{start:{line:586,column:8},end:{line:586,column:15}},"128":{start:{line:587,column:8},end:{line:587,column:15}},"129":{start:{line:588,column:8},end:{line:588,column:15}},"130":{start:{line:591,column:4},end:{line:591,column:33}},"131":{start:{line:592,column:14},end:{line:592,column:31}},"132":{start:{line:592,column:39},end:{line:592,column:56}},"133":{start:{line:593,column:18},end:{line:593,column:33}},"134":{start:{line:595,column:4},end:{line:606,column:5}},"135":{start:{line:596,column:8},end:{line:596,column:18}},"136":{start:{line:598,column:16},end:{line:598,column:25}},"137":{start:{line:599,column:8},end:{line:599,column:60}},"138":{start:{line:600,column:8},end:{line:604,column:9}},"139":{start:{line:601,column:20},end:{line:601,column:54}},"140":{start:{line:601,column:55},end:{line:601,column:61}},"141":{start:{line:602,column:20},end:{line:602,column:40}},"142":{start:{line:602,column:41},end:{line:602,column:47}},"143":{start:{line:603,column:20},end:{line:603,column:40}},"144":{start:{line:603,column:41},end:{line:603,column:47}},"145":{start:{line:605,column:8},end:{line:605,column:15}},"146":{start:{line:607,column:14},end:{line:607,column:89}},"147":{start:{line:607,column:42},end:{line:607,column:51}},"148":{start:{line:607,column:67},end:{line:607,column:88}},"149":{start:{line:608,column:4},end:{line:608,column:58}},"150":{start:{line:613,column:0},end:{line:670,column:2}},"151":{start:{line:620,column:4},end:{line:620,column:52}},"152":{start:{line:621,column:12},end:{line:621,column:34}},"153":{start:{line:622,column:4},end:{line:627,column:5}},"154":{start:{line:623,column:19},end:{line:623,column:36}},"155":{start:{line:624,column:8},end:{line:625,column:23}},"156":{start:{line:625,column:12},end:{line:625,column:23}},"157":{start:{line:626,column:8},end:{line:626,column:101}},"158":{start:{line:629,column:4},end:{line:629,column:36}},"159":{start:{line:630,column:14},end:{line:630,column:68}},"160":{start:{line:631,column:12},end:{line:631,column:13}},"161":{start:{line:631,column:18},end:{line:631,column:29}},"162":{start:{line:632,column:4},end:{line:668,column:5}},"163":{start:{line:633,column:8},end:{line:633,column:38}},"164":{start:{line:634,column:8},end:{line:667,column:9}},"165":{start:{line:635,column:12},end:{line:648,column:13}},"166":{start:{line:638,column:20},end:{line:639,column:60}},"167":{start:{line:639,column:24},end:{line:639,column:60}},"168":{start:{line:640,column:20},end:{line:640,column:26}},"169":{start:{line:643,column:20},end:{line:644,column:64}},"170":{start:{line:644,column:24},end:{line:644,column:64}},"171":{start:{line:645,column:20},end:{line:645,column:26}},"172":{start:{line:647,column:20},end:{line:647,column:59}},"173":{start:{line:651,column:12},end:{line:651,column:44}},"174":{start:{line:652,column:12},end:{line:666,column:13}},"175":{start:{line:653,column:24},end:{line:653,column:55}},"176":{start:{line:654,column:16},end:{line:654,column:33}},"177":{start:{line:655,column:16},end:{line:663,column:17}},"178":{start:{line:658,column:24},end:{line:659,column:48}},"179":{start:{line:659,column:28},end:{line:659,column:48}},"180":{start:{line:660,column:24},end:{line:660,column:30}},"181":{start:{line:662,column:24},end:{line:662,column:66}},"182":{start:{line:665,column:16},end:{line:665,column:58}},"183":{start:{line:669,column:4},end:{line:669,column:13}},"184":{start:{line:673,column:0},end:{line:695,column:2}},"185":{start:{line:679,column:12},end:{line:679,column:23}},"186":{start:{line:680,column:13},end:{line:680,column:106}},"187":{start:{line:680,column:31},end:{line:680,column:74}},"188":{start:{line:680,column:76},end:{line:680,column:105}},"189":{start:{line:681,column:4},end:{line:681,column:25}},"190":{start:{line:682,column:4},end:{line:693,column:5}},"191":{start:{line:684,column:12},end:{line:684,column:47}},"192":{start:{line:685,column:12},end:{line:686,column:30}},"193":{start:{line:686,column:16},end:{line:686,column:30}},"194":{start:{line:687,column:12},end:{line:687,column:18}},"195":{start:{line:689,column:12},end:{line:689,column:53}},"196":{start:{line:690,column:12},end:{line:690,column:18}},"197":{start:{line:692,column:12},end:{line:692,column:65}},"198":{start:{line:694,column:4},end:{line:694,column:13}},"199":{start:{line:697,column:0},end:{line:731,column:2}},"200":{start:{line:706,column:4},end:{line:706,column:25}},"201":{start:{line:707,column:4},end:{line:708,column:17}},"202":{start:{line:708,column:8},end:{line:708,column:17}},"203":{start:{line:710,column:4},end:{line:718,column:5}},"204":{start:{line:712,column:12},end:{line:712,column:18}},"205":{start:{line:714,column:12},end:{line:714,column:58}},"206":{start:{line:715,column:12},end:{line:715,column:18}},"207":{start:{line:717,column:12},end:{line:717,column:72}},"208":{start:{line:721,column:4},end:{line:729,column:5}},"209":{start:{line:723,column:12},end:{line:723,column:18}},"210":{start:{line:725,column:12},end:{line:725,column:58}},"211":{start:{line:726,column:12},end:{line:726,column:18}},"212":{start:{line:728,column:12},end:{line:728,column:72}},"213":{start:{line:730,column:4},end:{line:730,column:13}},"214":{start:{line:734,column:13},end:{line:734,column:15}},"215":{start:{line:736,column:0},end:{line:766,column:2}},"216":{start:{line:748,column:16},end:{line:751,column:5}},"217":{start:{line:753,column:4},end:{line:753,column:33}},"218":{start:{line:754,column:4},end:{line:757,column:5}},"219":{start:{line:755,column:8},end:{line:755,column:63}},"220":{start:{line:756,column:8},end:{line:756,column:87}},"221":{start:{line:759,column:4},end:{line:759,column:51}},"222":{start:{line:760,column:4},end:{line:760,column:75}},"223":{start:{line:762,column:4},end:{line:763,column:75}},"224":{start:{line:763,column:8},end:{line:763,column:75}},"225":{start:{line:765,column:4},end:{line:765,column:30}},"226":{start:{line:767,column:0},end:{line:767,column:35}},"227":{start:{line:770,column:0},end:{line:797,column:2}},"228":{start:{line:788,column:20},end:{line:788,column:81}},"229":{start:{line:790,column:4},end:{line:796,column:5}},"230":{start:{line:791,column:14},end:{line:791,column:15}},"231":{start:{line:792,column:17},end:{line:792,column:19}},"232":{start:{line:793,column:8},end:{line:794,column:34}},"233":{start:{line:794,column:12},end:{line:794,column:34}},"234":{start:{line:795,column:8},end:{line:795,column:51}},"235":{start:{line:799,column:0},end:{line:831,column:2}},"236":{start:{line:815,column:16},end:{line:817,column:5}},"237":{start:{line:818,column:4},end:{line:818,column:33}},"238":{start:{line:820,column:14},end:{line:820,column:22}},"239":{start:{line:822,column:4},end:{line:824,column:5}},"240":{start:{line:823,column:8},end:{line:823,column:56}},"241":{start:{line:826,column:4},end:{line:828,column:5}},"242":{start:{line:827,column:8},end:{line:827,column:132}},"243":{start:{line:827,column:35},end:{line:827,column:118}},"244":{start:{line:827,column:60},end:{line:827,column:104}},"245":{start:{line:830,column:4},end:{line:830,column:15}},"246":{start:{line:835,column:0},end:{line:846,column:2}},"247":{start:{line:842,column:12},end:{line:842,column:22}},"248":{start:{line:843,column:4},end:{line:843,column:52}},"249":{start:{line:844,column:18},end:{line:844,column:44}},"250":{start:{line:845,column:4},end:{line:845,column:60}},"251":{start:{line:849,column:0},end:{line:862,column:2}},"252":{start:{line:854,column:15},end:{line:854,column:26}},"253":{start:{line:855,column:13},end:{line:855,column:39}},"254":{start:{line:856,column:4},end:{line:860,column:5}},"255":{start:{line:856,column:14},end:{line:856,column:15}},"256":{start:{line:857,column:16},end:{line:857,column:21}},"257":{start:{line:858,column:8},end:{line:858,column:52}},"258":{start:{line:858,column:33},end:{line:858,column:52}},"259":{start:{line:859,column:8},end:{line:859,column:76}},"260":{start:{line:859,column:34},end:{line:859,column:76}},"261":{start:{line:861,column:4},end:{line:861,column:24}},"262":{start:{line:866,column:0},end:{line:889,column:2}},"263":{start:{line:877,column:4},end:{line:878,column:28}},"264":{start:{line:878,column:8},end:{line:878,column:28}},"265":{start:{line:879,column:4},end:{line:886,column:5}},"266":{start:{line:880,column:8},end:{line:882,column:9}},"267":{start:{line:881,column:12},end:{line:881,column:75}},"268":{start:{line:885,column:8},end:{line:885,column:18}},"269":{start:{line:887,column:4},end:{line:887,column:24}},"270":{start:{line:890,column:0},end:{line:899,column:2}},"271":{start:{line:894,column:4},end:{line:895,column:68}},"272":{start:{line:895,column:8},end:{line:895,column:68}},"273":{start:{line:897,column:12},end:{line:897,column:27}},"274":{start:{line:898,column:4},end:{line:898,column:56}},"275":{start:{line:901,column:0},end:{line:934,column:2}},"276":{start:{line:916,column:4},end:{line:933,column:5}},"277":{start:{line:917,column:15},end:{line:917,column:86}},"278":{start:{line:917,column:35},end:{line:917,column:52}},"279":{start:{line:917,column:54},end:{line:917,column:85}},"280":{start:{line:918,column:15},end:{line:918,column:70}},"281":{start:{line:918,column:29},end:{line:918,column:69}},"282":{start:{line:919,column:19},end:{line:919,column:21}},"283":{start:{line:919,column:31},end:{line:919,column:63}},"284":{start:{line:920,column:8},end:{line:925,column:9}},"285":{start:{line:920,column:21},end:{line:920,column:22}},"286":{start:{line:921,column:20},end:{line:921,column:39}},"287":{start:{line:922,column:12},end:{line:923,column:25}},"288":{start:{line:923,column:16},end:{line:923,column:25}},"289":{start:{line:924,column:12},end:{line:924,column:120}},"290":{start:{line:926,column:8},end:{line:927,column:26}},"291":{start:{line:927,column:12},end:{line:927,column:26}},"292":{start:{line:928,column:8},end:{line:928,column:67}},"293":{start:{line:931,column:8},end:{line:931,column:18}},"294":{start:{line:932,column:8},end:{line:932,column:24}},"295":{start:{line:936,column:0},end:{line:956,column:2}},"296":{start:{line:945,column:12},end:{line:945,column:14}},"297":{start:{line:946,column:4},end:{line:953,column:13}},"298":{start:{line:947,column:8},end:{line:949,column:9}},"299":{start:{line:948,column:12},end:{line:948,column:93}},"300":{start:{line:950,column:8},end:{line:950,column:24}},"301":{start:{line:953,column:8},end:{line:953,column:13}},"302":{start:{line:955,column:4},end:{line:955,column:41}},"303":{start:{line:961,column:0},end:{line:973,column:2}},"304":{start:{line:971,column:12},end:{line:971,column:145}},"305":{start:{line:972,column:4},end:{line:972,column:112}},"306":{start:{line:972,column:97},end:{line:972,column:109}},"307":{start:{line:978,column:0},end:{line:1010,column:2}},"308":{start:{line:987,column:8},end:{line:987,column:50}},"309":{start:{line:988,column:8},end:{line:988,column:82}},"310":{start:{line:988,column:39},end:{line:988,column:81}},"311":{start:{line:990,column:8},end:{line:990,column:87}},"312":{start:{line:992,column:8},end:{line:1007,column:11}},"313":{start:{line:993,column:22},end:{line:993,column:42}},"314":{start:{line:994,column:12},end:{line:1005,column:36}},"315":{start:{line:995,column:16},end:{line:999,column:17}},"316":{start:{line:996,column:20},end:{line:996,column:38}},"317":{start:{line:998,column:20},end:{line:998,column:41}},"318":{start:{line:1000,column:19},end:{line:1005,column:36}},"319":{start:{line:1001,column:16},end:{line:1001,column:35}},"320":{start:{line:1002,column:19},end:{line:1005,column:36}},"321":{start:{line:1003,column:16},end:{line:1003,column:36}},"322":{start:{line:1005,column:16},end:{line:1005,column:36}},"323":{start:{line:1006,column:12},end:{line:1006,column:70}},"324":{start:{line:1009,column:4},end:{line:1009,column:45}},"325":{start:{line:1013,column:0},end:{line:1116,column:2}},"326":{start:{line:1042,column:16},end:{line:1046,column:5}},"327":{start:{line:1047,column:4},end:{line:1047,column:36}},"328":{start:{line:1049,column:10},end:{line:1049,column:14}},"329":{start:{line:1050,column:13},end:{line:1050,column:121}},"330":{start:{line:1050,column:27},end:{line:1050,column:49}},"331":{start:{line:1050,column:50},end:{line:1050,column:75}},"332":{start:{line:1050,column:76},end:{line:1050,column:110}},"333":{start:{line:1050,column:111},end:{line:1050,column:120}},"334":{start:{line:1052,column:4},end:{line:1110,column:27}},"335":{start:{line:1053,column:8},end:{line:1108,column:9}},"336":{start:{line:1055,column:16},end:{line:1055,column:35}},"337":{start:{line:1056,column:16},end:{line:1056,column:22}},"338":{start:{line:1059,column:16},end:{line:1103,column:17}},"339":{start:{line:1060,column:28},end:{line:1060,column:38}},"340":{start:{line:1061,column:20},end:{line:1102,column:21}},"341":{start:{line:1063,column:28},end:{line:1063,column:39}},"342":{start:{line:1064,column:28},end:{line:1064,column:34}},"343":{start:{line:1067,column:28},end:{line:1070,column:29}},"344":{start:{line:1068,column:32},end:{line:1068,column:46}},"345":{start:{line:1069,column:32},end:{line:1069,column:38}},"346":{start:{line:1072,column:28},end:{line:1098,column:29}},"347":{start:{line:1073,column:44},end:{line:1073,column:48}},"348":{start:{line:1073,column:58},end:{line:1073,column:62}},"349":{start:{line:1073,column:76},end:{line:1073,column:78}},"350":{start:{line:1074,column:32},end:{line:1079,column:33}},"351":{start:{line:1075,column:36},end:{line:1075,column:57}},"352":{start:{line:1078,column:36},end:{line:1078,column:54}},"353":{start:{line:1081,column:32},end:{line:1095,column:33}},"354":{start:{line:1083,column:40},end:{line:1083,column:75}},"355":{start:{line:1084,column:40},end:{line:1084,column:46}},"356":{start:{line:1088,column:44},end:{line:1088,column:106}},"357":{start:{line:1088,column:63},end:{line:1088,column:105}},"358":{start:{line:1091,column:40},end:{line:1091,column:46}},"359":{start:{line:1094,column:40},end:{line:1094,column:58}},"360":{start:{line:1096,column:32},end:{line:1096,column:57}},"361":{start:{line:1100,column:28},end:{line:1100,column:34}},"362":{start:{line:1105,column:16},end:{line:1105,column:22}},"363":{start:{line:1107,column:16},end:{line:1107,column:21}},"364":{start:{line:1110,column:15},end:{line:1110,column:26}},"365":{start:{line:1111,column:4},end:{line:1113,column:5}},"366":{start:{line:1112,column:8},end:{line:1112,column:46}},"367":{start:{line:1114,column:4},end:{line:1114,column:46}},"368":{start:{line:1115,column:4},end:{line:1115,column:13}},"369":{start:{line:1119,column:0},end:{line:1156,column:2}},"370":{start:{line:1133,column:16},end:{line:1137,column:5}},"371":{start:{line:1138,column:4},end:{line:1138,column:36}},"372":{start:{line:1140,column:14},end:{line:1140,column:16}},"373":{start:{line:1140,column:19},end:{line:1140,column:21}},"374":{start:{line:1140,column:25},end:{line:1140,column:44}},"375":{start:{line:1140,column:49},end:{line:1140,column:69}},"376":{start:{line:1142,column:4},end:{line:1153,column:5}},"377":{start:{line:1143,column:8},end:{line:1150,column:9}},"378":{start:{line:1144,column:12},end:{line:1144,column:39}},"379":{start:{line:1145,column:12},end:{line:1145,column:65}},"380":{start:{line:1146,column:12},end:{line:1148,column:13}},"381":{start:{line:1147,column:16},end:{line:1147,column:65}},"382":{start:{line:1149,column:12},end:{line:1149,column:41}},"383":{start:{line:1152,column:8},end:{line:1152,column:19}},"384":{start:{line:1154,column:4},end:{line:1154,column:13}},"385":{start:{line:1159,column:0},end:{line:1189,column:2}},"386":{start:{line:1167,column:16},end:{line:1177,column:5}},"387":{start:{line:1178,column:4},end:{line:1178,column:36}},"388":{start:{line:1180,column:12},end:{line:1180,column:33}},"389":{start:{line:1181,column:4},end:{line:1187,column:12}},"390":{start:{line:1183,column:76},end:{line:1183,column:94}},"391":{start:{line:1188,column:4},end:{line:1188,column:13}},"392":{start:{line:1287,column:0},end:{line:1329,column:2}},"393":{start:{line:1288,column:14},end:{line:1288,column:46}},"394":{start:{line:1289,column:12},end:{line:1289,column:14}},"395":{start:{line:1290,column:4},end:{line:1327,column:5}},"396":{start:{line:1293,column:12},end:{line:1293,column:18}},"397":{start:{line:1294,column:12},end:{line:1294,column:18}},"398":{start:{line:1296,column:12},end:{line:1296,column:136}},"399":{start:{line:1296,column:94},end:{line:1296,column:133}},"400":{start:{line:1297,column:12},end:{line:1304,column:13}},"401":{start:{line:1298,column:16},end:{line:1298,column:46}},"402":{start:{line:1299,column:16},end:{line:1303,column:17}},"403":{start:{line:1300,column:20},end:{line:1300,column:29}},"404":{start:{line:1301,column:20},end:{line:1301,column:51}},"405":{start:{line:1302,column:20},end:{line:1302,column:26}},"406":{start:{line:1305,column:12},end:{line:1305,column:18}},"407":{start:{line:1307,column:22},end:{line:1307,column:98}},"408":{start:{line:1308,column:12},end:{line:1308,column:46}},"409":{start:{line:1309,column:12},end:{line:1312,column:13}},"410":{start:{line:1310,column:16},end:{line:1310,column:48}},"411":{start:{line:1311,column:16},end:{line:1311,column:36}},"412":{start:{line:1313,column:12},end:{line:1318,column:17}},"413":{start:{line:1314,column:16},end:{line:1318,column:17}},"414":{start:{line:1315,column:20},end:{line:1315,column:29}},"415":{start:{line:1316,column:20},end:{line:1316,column:50}},"416":{start:{line:1317,column:20},end:{line:1317,column:26}},"417":{start:{line:1320,column:12},end:{line:1320,column:18}},"418":{start:{line:1322,column:23},end:{line:1322,column:25}},"419":{start:{line:1323,column:12},end:{line:1323,column:38}},"420":{start:{line:1324,column:12},end:{line:1324,column:18}},"421":{start:{line:1326,column:12},end:{line:1326,column:30}},"422":{start:{line:1328,column:4},end:{line:1328,column:13}},"423":{start:{line:1331,column:0},end:{line:1378,column:2}},"424":{start:{line:1333,column:28},end:{line:1333,column:41}},"425":{start:{line:1333,column:42},end:{line:1333,column:52}},"426":{start:{line:1333,column:53},end:{line:1333,column:63}},"427":{start:{line:1333,column:64},end:{line:1333,column:74}},"428":{start:{line:1334,column:29},end:{line:1334,column:42}},"429":{start:{line:1334,column:43},end:{line:1334,column:92}},"430":{start:{line:1336,column:14},end:{line:1336,column:30}},"431":{start:{line:1337,column:12},end:{line:1337,column:14}},"432":{start:{line:1338,column:4},end:{line:1376,column:5}},"433":{start:{line:1341,column:12},end:{line:1341,column:59}},"434":{start:{line:1342,column:12},end:{line:1342,column:18}},"435":{start:{line:1344,column:12},end:{line:1344,column:136}},"436":{start:{line:1344,column:94},end:{line:1344,column:133}},"437":{start:{line:1345,column:12},end:{line:1352,column:13}},"438":{start:{line:1346,column:16},end:{line:1346,column:46}},"439":{start:{line:1347,column:16},end:{line:1351,column:17}},"440":{start:{line:1348,column:20},end:{line:1348,column:29}},"441":{start:{line:1349,column:20},end:{line:1349,column:51}},"442":{start:{line:1350,column:20},end:{line:1350,column:26}},"443":{start:{line:1353,column:12},end:{line:1353,column:18}},"444":{start:{line:1355,column:22},end:{line:1355,column:98}},"445":{start:{line:1356,column:12},end:{line:1356,column:46}},"446":{start:{line:1357,column:12},end:{line:1360,column:13}},"447":{start:{line:1359,column:16},end:{line:1359,column:36}},"448":{start:{line:1361,column:12},end:{line:1366,column:17}},"449":{start:{line:1362,column:16},end:{line:1366,column:17}},"450":{start:{line:1363,column:20},end:{line:1363,column:29}},"451":{start:{line:1364,column:20},end:{line:1364,column:50}},"452":{start:{line:1365,column:20},end:{line:1365,column:26}},"453":{start:{line:1368,column:12},end:{line:1368,column:18}},"454":{start:{line:1370,column:23},end:{line:1370,column:25}},"455":{start:{line:1371,column:12},end:{line:1371,column:38}},"456":{start:{line:1372,column:12},end:{line:1372,column:115}},"457":{start:{line:1373,column:12},end:{line:1373,column:18}},"458":{start:{line:1375,column:12},end:{line:1375,column:30}},"459":{start:{line:1377,column:4},end:{line:1377,column:13}},"460":{start:{line:1441,column:0},end:{line:1563,column:2}},"461":{start:{line:1467,column:16},end:{line:1471,column:5}},"462":{start:{line:1473,column:16},end:{line:1477,column:5}},"463":{start:{line:1474,column:18},end:{line:1474,column:63}},"464":{start:{line:1475,column:18},end:{line:1475,column:65}},"465":{start:{line:1476,column:8},end:{line:1476,column:56}},"466":{start:{line:1479,column:4},end:{line:1479,column:36}},"467":{start:{line:1481,column:4},end:{line:1481,column:22}},"468":{start:{line:1483,column:10},end:{line:1483,column:12}},"469":{start:{line:1483,column:16},end:{line:1483,column:18}},"470":{start:{line:1483,column:21},end:{line:1483,column:23}},"471":{start:{line:1483,column:26},end:{line:1483,column:28}},"472":{start:{line:1485,column:4},end:{line:1537,column:5}},"473":{start:{line:1488,column:12},end:{line:1488,column:24}},"474":{start:{line:1490,column:12},end:{line:1490,column:16}},"475":{start:{line:1491,column:12},end:{line:1491,column:34}},"476":{start:{line:1492,column:12},end:{line:1492,column:18}},"477":{start:{line:1494,column:12},end:{line:1494,column:49}},"478":{start:{line:1495,column:12},end:{line:1495,column:18}},"479":{start:{line:1498,column:12},end:{line:1499,column:26}},"480":{start:{line:1499,column:16},end:{line:1499,column:26}},"481":{start:{line:1500,column:12},end:{line:1500,column:51}},"482":{start:{line:1501,column:12},end:{line:1501,column:51}},"483":{start:{line:1502,column:12},end:{line:1502,column:51}},"484":{start:{line:1503,column:12},end:{line:1503,column:51}},"485":{start:{line:1504,column:12},end:{line:1504,column:51}},"486":{start:{line:1505,column:12},end:{line:1505,column:51}},"487":{start:{line:1506,column:12},end:{line:1506,column:51}},"488":{start:{line:1507,column:12},end:{line:1507,column:18}},"489":{start:{line:1509,column:12},end:{line:1509,column:71}},"490":{start:{line:1510,column:12},end:{line:1510,column:71}},"491":{start:{line:1511,column:12},end:{line:1511,column:71}},"492":{start:{line:1512,column:12},end:{line:1512,column:71}},"493":{start:{line:1514,column:12},end:{line:1514,column:71}},"494":{start:{line:1515,column:12},end:{line:1515,column:71}},"495":{start:{line:1516,column:12},end:{line:1516,column:71}},"496":{start:{line:1517,column:12},end:{line:1517,column:71}},"497":{start:{line:1518,column:12},end:{line:1525,column:13}},"498":{start:{line:1520,column:20},end:{line:1520,column:39}},"499":{start:{line:1520,column:40},end:{line:1520,column:46}},"500":{start:{line:1522,column:20},end:{line:1522,column:37}},"501":{start:{line:1522,column:38},end:{line:1522,column:44}},"502":{start:{line:1524,column:20},end:{line:1524,column:39}},"503":{start:{line:1526,column:12},end:{line:1533,column:13}},"504":{start:{line:1528,column:20},end:{line:1528,column:33}},"505":{start:{line:1528,column:34},end:{line:1528,column:40}},"506":{start:{line:1530,column:20},end:{line:1530,column:31}},"507":{start:{line:1530,column:32},end:{line:1530,column:38}},"508":{start:{line:1532,column:20},end:{line:1532,column:33}},"509":{start:{line:1534,column:12},end:{line:1534,column:18}},"510":{start:{line:1536,column:12},end:{line:1536,column:46}},"511":{start:{line:1539,column:4},end:{line:1539,column:17}},"512":{start:{line:1540,column:4},end:{line:1542,column:5}},"513":{start:{line:1541,column:8},end:{line:1541,column:53}},"514":{start:{line:1543,column:4},end:{line:1543,column:12}},"515":{start:{line:1545,column:4},end:{line:1559,column:5}},"516":{start:{line:1546,column:17},end:{line:1546,column:19}},"517":{start:{line:1548,column:8},end:{line:1557,column:9}},"518":{start:{line:1550,column:16},end:{line:1550,column:28}},"519":{start:{line:1553,column:12},end:{line:1553,column:37}},"520":{start:{line:1554,column:12},end:{line:1554,column:18}},"521":{start:{line:1556,column:12},end:{line:1556,column:31}},"522":{start:{line:1558,column:8},end:{line:1558,column:15}},"523":{start:{line:1560,column:4},end:{line:1560,column:23}},"524":{start:{line:1562,column:4},end:{line:1562,column:26}},"525":{start:{line:1567,column:0},end:{line:1578,column:2}},"526":{start:{line:1574,column:4},end:{line:1575,column:41}},"527":{start:{line:1575,column:8},end:{line:1575,column:41}},"528":{start:{line:1577,column:4},end:{line:1577,column:76}},"529":{start:{line:1577,column:38},end:{line:1577,column:64}},"530":{start:{line:1581,column:0},end:{line:1601,column:2}},"531":{start:{line:1589,column:4},end:{line:1590,column:18}},"532":{start:{line:1590,column:8},end:{line:1590,column:18}},"533":{start:{line:1592,column:4},end:{line:1593,column:18}},"534":{start:{line:1593,column:8},end:{line:1593,column:18}},"535":{start:{line:1595,column:4},end:{line:1595,column:37}},"536":{start:{line:1596,column:4},end:{line:1596,column:37}},"537":{start:{line:1598,column:13},end:{line:1598,column:70}},"538":{start:{line:1598,column:38},end:{line:1598,column:68}},"539":{start:{line:1599,column:4},end:{line:1599,column:68}},"540":{start:{line:1600,column:4},end:{line:1600,column:39}},"541":{start:{line:1605,column:0},end:{line:1630,column:2}},"542":{start:{line:1624,column:19},end:{line:1624,column:129}},"543":{start:{line:1624,column:31},end:{line:1624,column:60}},"544":{start:{line:1624,column:61},end:{line:1624,column:128}},"545":{start:{line:1625,column:13},end:{line:1625,column:29}},"546":{start:{line:1626,column:13},end:{line:1626,column:32}},"547":{start:{line:1627,column:13},end:{line:1627,column:32}},"548":{start:{line:1628,column:4},end:{line:1628,column:82}},"549":{start:{line:1632,column:0},end:{line:1644,column:2}},"550":{start:{line:1640,column:20},end:{line:1640,column:130}},"551":{start:{line:1640,column:32},end:{line:1640,column:61}},"552":{start:{line:1640,column:62},end:{line:1640,column:129}},"553":{start:{line:1641,column:14},end:{line:1641,column:31}},"554":{start:{line:1642,column:14},end:{line:1642,column:37}},"555":{start:{line:1643,column:4},end:{line:1643,column:79}},"556":{start:{line:1647,column:0},end:{line:1677,column:2}},"557":{start:{line:1652,column:4},end:{line:1653,column:18}},"558":{start:{line:1653,column:8},end:{line:1653,column:18}},"559":{start:{line:1654,column:4},end:{line:1655,column:18}},"560":{start:{line:1655,column:8},end:{line:1655,column:18}},"561":{start:{line:1657,column:16},end:{line:1663,column:5}},"562":{start:{line:1664,column:4},end:{line:1664,column:33}},"563":{start:{line:1666,column:13},end:{line:1666,column:121}},"564":{start:{line:1666,column:37},end:{line:1666,column:119}},"565":{start:{line:1667,column:13},end:{line:1667,column:86}},"566":{start:{line:1667,column:37},end:{line:1667,column:84}},"567":{start:{line:1669,column:4},end:{line:1669,column:78}},"568":{start:{line:1670,column:4},end:{line:1670,column:72}},"569":{start:{line:1672,column:4},end:{line:1672,column:99}},"570":{start:{line:1673,column:4},end:{line:1673,column:99}},"571":{start:{line:1674,column:4},end:{line:1674,column:102}},"572":{start:{line:1676,column:4},end:{line:1676,column:100}},"573":{start:{line:1682,column:0},end:{line:1761,column:2}},"574":{start:{line:1702,column:4},end:{line:1703,column:18}},"575":{start:{line:1703,column:8},end:{line:1703,column:18}},"576":{start:{line:1706,column:16},end:{line:1716,column:5}},"577":{start:{line:1718,column:10},end:{line:1718,column:11}},"578":{start:{line:1718,column:17},end:{line:1718,column:19}},"579":{start:{line:1718,column:25},end:{line:1718,column:27}},"580":{start:{line:1718,column:34},end:{line:1718,column:41}},"581":{start:{line:1719,column:4},end:{line:1719,column:33}},"582":{start:{line:1725,column:4},end:{line:1727,column:5}},"583":{start:{line:1726,column:8},end:{line:1726,column:56}},"584":{start:{line:1729,column:4},end:{line:1742,column:5}},"585":{start:{line:1730,column:8},end:{line:1730,column:63}},"586":{start:{line:1731,column:8},end:{line:1734,column:56}},"587":{start:{line:1732,column:12},end:{line:1732,column:134}},"588":{start:{line:1734,column:12},end:{line:1734,column:56}},"589":{start:{line:1737,column:8},end:{line:1741,column:9}},"590":{start:{line:1738,column:23},end:{line:1738,column:54}},"591":{start:{line:1739,column:12},end:{line:1739,column:73}},"592":{start:{line:1740,column:12},end:{line:1740,column:68}},"593":{start:{line:1744,column:4},end:{line:1750,column:12}},"594":{start:{line:1745,column:8},end:{line:1745,column:83}},"595":{start:{line:1745,column:37},end:{line:1745,column:71}},"596":{start:{line:1746,column:8},end:{line:1746,column:44}},"597":{start:{line:1747,column:8},end:{line:1747,column:12}},"598":{start:{line:1750,column:8},end:{line:1750,column:12}},"599":{start:{line:1751,column:4},end:{line:1751,column:51}},"600":{start:{line:1753,column:4},end:{line:1756,column:5}},"601":{start:{line:1754,column:8},end:{line:1754,column:82}},"602":{start:{line:1754,column:36},end:{line:1754,column:70}},"603":{start:{line:1755,column:8},end:{line:1755,column:42}},"604":{start:{line:1757,column:4},end:{line:1757,column:51}},"605":{start:{line:1759,column:4},end:{line:1759,column:82}},"606":{start:{line:1760,column:4},end:{line:1760,column:62}},"607":{start:{line:1764,column:0},end:{line:1788,column:2}},"608":{start:{line:1773,column:12},end:{line:1773,column:14}},"609":{start:{line:1774,column:4},end:{line:1775,column:17}},"610":{start:{line:1775,column:8},end:{line:1775,column:17}},"611":{start:{line:1777,column:16},end:{line:1781,column:5}},"612":{start:{line:1782,column:4},end:{line:1782,column:33}},"613":{start:{line:1783,column:4},end:{line:1783,column:79}},"614":{start:{line:1785,column:4},end:{line:1785,column:122}},"615":{start:{line:1785,column:29},end:{line:1785,column:110}},"616":{start:{line:1786,column:4},end:{line:1786,column:40}},"617":{start:{line:1787,column:4},end:{line:1787,column:13}},"618":{start:{line:1790,column:0},end:{line:1823,column:2}},"619":{start:{line:1796,column:15},end:{line:1798,column:5}},"620":{start:{line:1800,column:4},end:{line:1800,column:34}},"621":{start:{line:1802,column:4},end:{line:1804,column:5}},"622":{start:{line:1803,column:8},end:{line:1803,column:34}},"623":{start:{line:1806,column:14},end:{line:1806,column:76}},"624":{start:{line:1806,column:66},end:{line:1806,column:75}},"625":{start:{line:1809,column:4},end:{line:1821,column:5}},"626":{start:{line:1810,column:17},end:{line:1810,column:30}},"627":{start:{line:1811,column:8},end:{line:1811,column:105}},"628":{start:{line:1811,column:58},end:{line:1811,column:77}},"629":{start:{line:1811,column:67},end:{line:1811,column:77}},"630":{start:{line:1811,column:78},end:{line:1811,column:101}},"631":{start:{line:1815,column:16},end:{line:1815,column:36}},"632":{start:{line:1816,column:8},end:{line:1816,column:47}},"633":{start:{line:1817,column:8},end:{line:1817,column:35}},"634":{start:{line:1818,column:8},end:{line:1819,column:106}},"635":{start:{line:1819,column:25},end:{line:1819,column:104}},"636":{start:{line:1819,column:70},end:{line:1819,column:103}},"637":{start:{line:1820,column:8},end:{line:1820,column:21}},"638":{start:{line:1822,column:4},end:{line:1822,column:19}},"639":{start:{line:1825,column:0},end:{line:1825,column:105}},"640":{start:{line:1825,column:48},end:{line:1825,column:103}},"641":{start:{line:1827,column:0},end:{line:1868,column:2}},"642":{start:{line:1858,column:4},end:{line:1859,column:15}},"643":{start:{line:1859,column:8},end:{line:1859,column:15}},"644":{start:{line:1860,column:20},end:{line:1864,column:5}},"645":{start:{line:1861,column:8},end:{line:1861,column:51}},"646":{start:{line:1862,column:8},end:{line:1862,column:52}},"647":{start:{line:1863,column:8},end:{line:1863,column:27}},"648":{start:{line:1865,column:4},end:{line:1865,column:48}},"649":{start:{line:1866,column:4},end:{line:1866,column:33}},"650":{start:{line:1867,column:4},end:{line:1867,column:51}},"651":{start:{line:1871,column:0},end:{line:1904,column:2}},"652":{start:{line:1879,column:4},end:{line:1903,column:5}},"653":{start:{line:1880,column:17},end:{line:1880,column:30}},"654":{start:{line:1881,column:8},end:{line:1884,column:15}},"655":{start:{line:1882,column:16},end:{line:1882,column:44}},"656":{start:{line:1882,column:25},end:{line:1882,column:44}},"657":{start:{line:1883,column:16},end:{line:1883,column:51}},"658":{start:{line:1888,column:24},end:{line:1901,column:11}},"659":{start:{line:1889,column:20},end:{line:1889,column:47}},"660":{start:{line:1890,column:12},end:{line:1890,column:41}},"661":{start:{line:1891,column:12},end:{line:1891,column:38}},"662":{start:{line:1892,column:12},end:{line:1900,column:14}},"663":{start:{line:1893,column:27},end:{line:1893,column:47}},"664":{start:{line:1894,column:27},end:{line:1894,column:67}},"665":{start:{line:1895,column:26},end:{line:1895,column:58}},"666":{start:{line:1896,column:16},end:{line:1896,column:29}},"667":{start:{line:1897,column:16},end:{line:1897,column:35}},"668":{start:{line:1898,column:16},end:{line:1898,column:26}},"669":{start:{line:1899,column:16},end:{line:1899,column:48}},"670":{start:{line:1902,column:8},end:{line:1902,column:29}},"671":{start:{line:1911,column:14},end:{line:1911,column:36}},"672":{start:{line:1914,column:0},end:{line:1924,column:2}},"673":{start:{line:1920,column:4},end:{line:1920,column:37}},"674":{start:{line:1921,column:4},end:{line:1922,column:32}},"675":{start:{line:1922,column:7},end:{line:1922,column:32}},"676":{start:{line:1923,column:4},end:{line:1923,column:19}},"677":{start:{line:1927,column:0},end:{line:1936,column:2}},"678":{start:{line:1932,column:13},end:{line:1932,column:35}},"679":{start:{line:1933,column:4},end:{line:1934,column:32}},"680":{start:{line:1934,column:7},end:{line:1934,column:32}},"681":{start:{line:1935,column:4},end:{line:1935,column:22}},"682":{start:{line:1937,column:0},end:{line:1937,column:16}},"683":{start:{line:1940,column:0},end:{line:1957,column:2}},"684":{start:{line:1949,column:12},end:{line:1949,column:13}},"685":{start:{line:1950,column:21},end:{line:1956,column:13}},"686":{start:{line:1951,column:8},end:{line:1951,column:20}},"687":{start:{line:1953,column:8},end:{line:1955,column:9}},"688":{start:{line:1954,column:16},end:{line:1954,column:42}},"689":{start:{line:1960,column:0},end:{line:2013,column:2}},"690":{start:{line:1981,column:17},end:{line:1981,column:18}},"691":{start:{line:1982,column:4},end:{line:1983,column:19}},"692":{start:{line:1983,column:6},end:{line:1983,column:19}},"693":{start:{line:1984,column:4},end:{line:1985,column:18}},"694":{start:{line:1985,column:6},end:{line:1985,column:18}},"695":{start:{line:1986,column:4},end:{line:1987,column:18}},"696":{start:{line:1987,column:6},end:{line:1987,column:18}},"697":{start:{line:1989,column:18},end:{line:1989,column:24}},"698":{start:{line:1990,column:21},end:{line:1990,column:82}},"699":{start:{line:1991,column:18},end:{line:1991,column:73}},"700":{start:{line:1992,column:18},end:{line:1992,column:73}},"701":{start:{line:1994,column:13},end:{line:2011,column:5}},"702":{start:{line:1995,column:18},end:{line:1995,column:27}},"703":{start:{line:1996,column:8},end:{line:2010,column:9}},"704":{start:{line:1997,column:12},end:{line:1997,column:25}},"705":{start:{line:1998,column:12},end:{line:1998,column:34}},"706":{start:{line:2001,column:12},end:{line:2001,column:22}},"707":{start:{line:2003,column:12},end:{line:2009,column:13}},"708":{start:{line:2004,column:14},end:{line:2004,column:39}},"709":{start:{line:2007,column:16},end:{line:2007,column:25}},"710":{start:{line:2008,column:16},end:{line:2008,column:45}},"711":{start:{line:2012,column:4},end:{line:2012,column:9}},"712":{start:{line:2049,column:0},end:{line:2086,column:2}},"713":{start:{line:2064,column:25},end:{line:2064,column:26}},"714":{start:{line:2064,column:36},end:{line:2064,column:50}},"715":{start:{line:2064,column:57},end:{line:2064,column:61}},"716":{start:{line:2065,column:4},end:{line:2065,column:63}},"717":{start:{line:2065,column:37},end:{line:2065,column:63}},"718":{start:{line:2066,column:4},end:{line:2066,column:38}},"719":{start:{line:2067,column:4},end:{line:2067,column:38}},"720":{start:{line:2068,column:4},end:{line:2068,column:40}},"721":{start:{line:2068,column:15},end:{line:2068,column:40}},"722":{start:{line:2069,column:4},end:{line:2069,column:54}},"723":{start:{line:2069,column:36},end:{line:2069,column:54}},"724":{start:{line:2070,column:4},end:{line:2070,column:19}},"725":{start:{line:2071,column:4},end:{line:2071,column:19}},"726":{start:{line:2072,column:4},end:{line:2072,column:45}},"727":{start:{line:2073,column:4},end:{line:2084,column:5}},"728":{start:{line:2074,column:8},end:{line:2074,column:17}},"729":{start:{line:2075,column:8},end:{line:2075,column:19}},"730":{start:{line:2076,column:8},end:{line:2083,column:9}},"731":{start:{line:2077,column:12},end:{line:2082,column:37}},"732":{start:{line:2078,column:16},end:{line:2078,column:53}},"733":{start:{line:2078,column:40},end:{line:2078,column:53}},"734":{start:{line:2079,column:16},end:{line:2079,column:53}},"735":{start:{line:2079,column:40},end:{line:2079,column:53}},"736":{start:{line:2080,column:16},end:{line:2080,column:31}},"737":{start:{line:2082,column:17},end:{line:2082,column:37}},"738":{start:{line:2085,column:4},end:{line:2085,column:42}},"739":{start:{line:2089,column:0},end:{line:2137,column:2}},"740":{start:{line:2101,column:16},end:{line:2101,column:82}},"741":{start:{line:2103,column:4},end:{line:2103,column:29}},"742":{start:{line:2105,column:4},end:{line:2105,column:52}},"743":{start:{line:2107,column:4},end:{line:2107,column:21}},"744":{start:{line:2108,column:4},end:{line:2108,column:41}},"745":{start:{line:2111,column:4},end:{line:2136,column:5}},"746":{start:{line:2113,column:8},end:{line:2113,column:22}},"747":{start:{line:2114,column:8},end:{line:2114,column:48}},"748":{start:{line:2116,column:8},end:{line:2129,column:9}},"749":{start:{line:2118,column:12},end:{line:2118,column:29}},"750":{start:{line:2121,column:12},end:{line:2121,column:66}},"751":{start:{line:2122,column:12},end:{line:2122,column:70}},"752":{start:{line:2126,column:12},end:{line:2126,column:75}},"753":{start:{line:2127,column:12},end:{line:2128,column:22}},"754":{start:{line:2128,column:16},end:{line:2128,column:22}},"755":{start:{line:2131,column:8},end:{line:2135,column:9}},"756":{start:{line:2133,column:10},end:{line:2133,column:64}},"757":{start:{line:2134,column:10},end:{line:2134,column:27}},"758":{start:{line:2140,column:0},end:{line:2178,column:2}},"759":{start:{line:2147,column:4},end:{line:2147,column:27}},"760":{start:{line:2149,column:4},end:{line:2150,column:20}},"761":{start:{line:2150,column:7},end:{line:2150,column:20}},"762":{start:{line:2152,column:14},end:{line:2152,column:15}},"763":{start:{line:2153,column:15},end:{line:2153,column:60}},"764":{start:{line:2155,column:4},end:{line:2175,column:5}},"765":{start:{line:2156,column:8},end:{line:2173,column:9}},"766":{start:{line:2157,column:12},end:{line:2157,column:22}},"767":{start:{line:2158,column:12},end:{line:2158,column:60}},"768":{start:{line:2159,column:12},end:{line:2167,column:13}},"769":{start:{line:2160,column:16},end:{line:2160,column:79}},"770":{start:{line:2163,column:16},end:{line:2166,column:83}},"771":{start:{line:2164,column:20},end:{line:2164,column:83}},"772":{start:{line:2166,column:20},end:{line:2166,column:83}},"773":{start:{line:2170,column:12},end:{line:2170,column:56}},"774":{start:{line:2171,column:12},end:{line:2171,column:56}},"775":{start:{line:2172,column:12},end:{line:2172,column:73}},"776":{start:{line:2177,column:4},end:{line:2177,column:82}},"777":{start:{line:2185,column:18},end:{line:2185,column:20}},"778":{start:{line:2186,column:19},end:{line:2186,column:20}},"779":{start:{line:2189,column:0},end:{line:2212,column:2}},"780":{start:{line:2206,column:15},end:{line:2206,column:43}},"781":{start:{line:2207,column:4},end:{line:2207,column:19}},"782":{start:{line:2208,column:4},end:{line:2208,column:57}},"783":{start:{line:2209,column:4},end:{line:2209,column:16}},"784":{start:{line:2210,column:4},end:{line:2210,column:27}},"785":{start:{line:2211,column:4},end:{line:2211,column:16}},"786":{start:{line:2214,column:0},end:{line:2221,column:2}},"787":{start:{line:2219,column:4},end:{line:2220,column:33}},"788":{start:{line:2220,column:8},end:{line:2220,column:33}},"789":{start:{line:2223,column:0},end:{line:2241,column:2}},"790":{start:{line:2234,column:4},end:{line:2234,column:24}},"791":{start:{line:2235,column:4},end:{line:2240,column:5}},"792":{start:{line:2236,column:8},end:{line:2236,column:33}},"793":{start:{line:2238,column:18},end:{line:2238,column:22}},"794":{start:{line:2239,column:8},end:{line:2239,column:120}},"795":{start:{line:2239,column:63},end:{line:2239,column:117}},"796":{start:{line:2243,column:0},end:{line:2268,column:2}},"797":{start:{line:2252,column:4},end:{line:2265,column:5}},"798":{start:{line:2255,column:12},end:{line:2255,column:42}},"799":{start:{line:2256,column:12},end:{line:2256,column:18}},"800":{start:{line:2258,column:12},end:{line:2258,column:44}},"801":{start:{line:2259,column:12},end:{line:2259,column:18}},"802":{start:{line:2261,column:12},end:{line:2261,column:36}},"803":{start:{line:2262,column:12},end:{line:2262,column:18}},"804":{start:{line:2264,column:12},end:{line:2264,column:27}},"805":{start:{line:2267,column:4},end:{line:2267,column:55}},"806":{start:{line:2271,column:0},end:{line:2312,column:2}},"807":{start:{line:2286,column:4},end:{line:2286,column:72}},"808":{start:{line:2288,column:12},end:{line:2288,column:460}},"809":{start:{line:2289,column:4},end:{line:2289,column:37}},"810":{start:{line:2290,column:4},end:{line:2290,column:67}},"811":{start:{line:2292,column:4},end:{line:2293,column:28}},"812":{start:{line:2293,column:8},end:{line:2293,column:28}},"813":{start:{line:2295,column:10},end:{line:2295,column:18}},"814":{start:{line:2295,column:22},end:{line:2295,column:24}},"815":{start:{line:2298,column:4},end:{line:2301,column:5}},"816":{start:{line:2299,column:8},end:{line:2299,column:50}},"817":{start:{line:2300,column:8},end:{line:2300,column:21}},"818":{start:{line:2302,column:4},end:{line:2303,column:43}},"819":{start:{line:2303,column:8},end:{line:2303,column:43}},"820":{start:{line:2304,column:4},end:{line:2308,column:5}},"821":{start:{line:2305,column:16},end:{line:2305,column:34}},"822":{start:{line:2306,column:8},end:{line:2306,column:37}},"823":{start:{line:2307,column:8},end:{line:2307,column:38}},"824":{start:{line:2310,column:4},end:{line:2310,column:13}},"825":{start:{line:2314,column:0},end:{line:2359,column:2}},"826":{start:{line:2326,column:16},end:{line:2331,column:5}},"827":{start:{line:2332,column:4},end:{line:2332,column:36}},"828":{start:{line:2334,column:14},end:{line:2334,column:83}},"829":{start:{line:2334,column:30},end:{line:2334,column:82}},"830":{start:{line:2336,column:4},end:{line:2340,column:23}},"831":{start:{line:2342,column:12},end:{line:2342,column:59}},"832":{start:{line:2343,column:12},end:{line:2343,column:14}},"833":{start:{line:2345,column:4},end:{line:2349,column:36}},"834":{start:{line:2346,column:18},end:{line:2346,column:118}},"835":{start:{line:2347,column:8},end:{line:2347,column:24}},"836":{start:{line:2349,column:17},end:{line:2349,column:35}},"837":{start:{line:2351,column:4},end:{line:2356,column:13}},"838":{start:{line:2352,column:8},end:{line:2352,column:115}},"839":{start:{line:2352,column:30},end:{line:2352,column:112}},"840":{start:{line:2353,column:8},end:{line:2353,column:141}},"841":{start:{line:2353,column:60},end:{line:2353,column:134}},"842":{start:{line:2353,column:101},end:{line:2353,column:131}},"843":{start:{line:2356,column:8},end:{line:2356,column:13}},"844":{start:{line:2358,column:4},end:{line:2358,column:13}},"845":{start:{line:2361,column:0},end:{line:2418,column:2}},"846":{start:{line:2368,column:10},end:{line:2368,column:81}},"847":{start:{line:2369,column:12},end:{line:2369,column:56}},"848":{start:{line:2370,column:4},end:{line:2370,column:35}},"849":{start:{line:2371,column:4},end:{line:2416,column:5}},"850":{start:{line:2384,column:16},end:{line:2384,column:23}},"851":{start:{line:2385,column:8},end:{line:2385,column:37}},"852":{start:{line:2386,column:8},end:{line:2386,column:23}},"853":{start:{line:2387,column:8},end:{line:2387,column:61}},"854":{start:{line:2387,column:24},end:{line:2387,column:45}},"855":{start:{line:2387,column:52},end:{line:2387,column:61}},"856":{start:{line:2388,column:8},end:{line:2388,column:28}},"857":{start:{line:2390,column:8},end:{line:2390,column:61}},"858":{start:{line:2391,column:8},end:{line:2391,column:23}},"859":{start:{line:2392,column:8},end:{line:2392,column:45}},"860":{start:{line:2392,column:25},end:{line:2392,column:44}},"861":{start:{line:2393,column:8},end:{line:2393,column:28}},"862":{start:{line:2395,column:8},end:{line:2395,column:28}},"863":{start:{line:2396,column:8},end:{line:2396,column:23}},"864":{start:{line:2397,column:8},end:{line:2397,column:51}},"865":{start:{line:2397,column:25},end:{line:2397,column:50}},"866":{start:{line:2398,column:8},end:{line:2398,column:28}},"867":{start:{line:2400,column:8},end:{line:2400,column:27}},"868":{start:{line:2401,column:8},end:{line:2401,column:23}},"869":{start:{line:2402,column:8},end:{line:2402,column:44}},"870":{start:{line:2402,column:25},end:{line:2402,column:43}},"871":{start:{line:2403,column:8},end:{line:2403,column:28}},"872":{start:{line:2409,column:8},end:{line:2415,column:9}},"873":{start:{line:2410,column:12},end:{line:2410,column:41}},"874":{start:{line:2411,column:12},end:{line:2411,column:36}},"875":{start:{line:2413,column:12},end:{line:2413,column:71}},"876":{start:{line:2414,column:12},end:{line:2414,column:26}},"877":{start:{line:2417,column:4},end:{line:2417,column:13}},"878":{start:{line:2420,column:0},end:{line:2459,column:2}},"879":{start:{line:2445,column:4},end:{line:2445,column:25}},"880":{start:{line:2446,column:12},end:{line:2446,column:25}},"881":{start:{line:2448,column:12},end:{line:2448,column:41}},"882":{start:{line:2449,column:4},end:{line:2457,column:5}},"883":{start:{line:2450,column:16},end:{line:2450,column:43}},"884":{start:{line:2451,column:8},end:{line:2456,column:25}},"885":{start:{line:2452,column:12},end:{line:2455,column:56}},"886":{start:{line:2453,column:16},end:{line:2453,column:55}},"887":{start:{line:2455,column:12},end:{line:2455,column:56}},"888":{start:{line:2456,column:15},end:{line:2456,column:25}},"889":{start:{line:2458,column:4},end:{line:2458,column:13}},"890":{start:{line:2461,column:0},end:{line:2478,column:2}},"891":{start:{line:2472,column:4},end:{line:2476,column:5}},"892":{start:{line:2473,column:8},end:{line:2473,column:65}},"893":{start:{line:2474,column:23},end:{line:2474,column:66}},"894":{start:{line:2475,column:8},end:{line:2475,column:65}},"895":{start:{line:2477,column:4},end:{line:2477,column:17}},"896":{start:{line:2481,column:0},end:{line:2481,column:41}},"897":{start:{line:2483,column:0},end:{line:2490,column:2}},"898":{start:{line:2487,column:4},end:{line:2488,column:45}},"899":{start:{line:2488,column:8},end:{line:2488,column:45}},"900":{start:{line:2489,column:4},end:{line:2489,column:71}},"901":{start:{line:2494,column:0},end:{line:2515,column:2}},"902":{start:{line:2502,column:4},end:{line:2502,column:22}},"903":{start:{line:2504,column:4},end:{line:2505,column:19}},"904":{start:{line:2505,column:8},end:{line:2505,column:19}},"905":{start:{line:2507,column:4},end:{line:2507,column:50}},"906":{start:{line:2508,column:4},end:{line:2508,column:31}},"907":{start:{line:2511,column:4},end:{line:2511,column:55}},"908":{start:{line:2513,column:4},end:{line:2513,column:31}},"909":{start:{line:2514,column:4},end:{line:2514,column:15}},"910":{start:{line:2518,column:0},end:{line:2549,column:2}},"911":{start:{line:2537,column:12},end:{line:2537,column:77}},"912":{start:{line:2537,column:25},end:{line:2537,column:76}},"913":{start:{line:2538,column:4},end:{line:2538,column:49}},"914":{start:{line:2540,column:18},end:{line:2547,column:5}},"915":{start:{line:2541,column:8},end:{line:2546,column:9}},"916":{start:{line:2542,column:12},end:{line:2544,column:13}},"917":{start:{line:2542,column:22},end:{line:2542,column:23}},"918":{start:{line:2543,column:16},end:{line:2543,column:70}},"919":{start:{line:2545,column:12},end:{line:2545,column:21}},"920":{start:{line:2548,column:4},end:{line:2548,column:24}},"921":{start:{line:2552,column:0},end:{line:2569,column:2}},"922":{start:{line:2561,column:12},end:{line:2561,column:33}},"923":{start:{line:2562,column:12},end:{line:2562,column:33}},"924":{start:{line:2564,column:4},end:{line:2568,column:56}},"925":{start:{line:2565,column:8},end:{line:2565,column:79}},"926":{start:{line:2565,column:37},end:{line:2565,column:76}},"927":{start:{line:2568,column:8},end:{line:2568,column:56}},"928":{start:{line:2572,column:0},end:{line:2612,column:2}},"929":{start:{line:2584,column:16},end:{line:2587,column:5}},"930":{start:{line:2589,column:4},end:{line:2589,column:39}},"931":{start:{line:2591,column:4},end:{line:2592,column:17}},"932":{start:{line:2592,column:8},end:{line:2592,column:17}},"933":{start:{line:2593,column:4},end:{line:2593,column:41}},"934":{start:{line:2594,column:4},end:{line:2594,column:41}},"935":{start:{line:2596,column:12},end:{line:2607,column:5}},"936":{start:{line:2597,column:8},end:{line:2602,column:55}},"937":{start:{line:2598,column:20},end:{line:2598,column:78}},"938":{start:{line:2599,column:12},end:{line:2599,column:58}},"939":{start:{line:2602,column:12},end:{line:2602,column:55}},"940":{start:{line:2604,column:8},end:{line:2605,column:36}},"941":{start:{line:2605,column:12},end:{line:2605,column:36}},"942":{start:{line:2606,column:8},end:{line:2606,column:17}},"943":{start:{line:2609,column:4},end:{line:2610,column:21}},"944":{start:{line:2610,column:8},end:{line:2610,column:21}},"945":{start:{line:2611,column:4},end:{line:2611,column:21}},"946":{start:{line:2616,column:0},end:{line:2632,column:2}},"947":{start:{line:2626,column:16},end:{line:2628,column:5}},"948":{start:{line:2629,column:4},end:{line:2629,column:37}},"949":{start:{line:2630,column:4},end:{line:2630,column:18}},"950":{start:{line:2631,column:4},end:{line:2631,column:90}},"951":{start:{line:2634,column:0},end:{line:2650,column:2}},"952":{start:{line:2640,column:12},end:{line:2648,column:5}},"953":{start:{line:2649,column:4},end:{line:2649,column:58}},"954":{start:{line:2653,column:0},end:{line:2675,column:2}},"955":{start:{line:2657,column:16},end:{line:2660,column:5}},"956":{start:{line:2661,column:4},end:{line:2661,column:37}},"957":{start:{line:2663,column:4},end:{line:2663,column:18}},"958":{start:{line:2664,column:12},end:{line:2664,column:39}},"959":{start:{line:2665,column:12},end:{line:2665,column:58}},"960":{start:{line:2666,column:12},end:{line:2673,column:9}},"961":{start:{line:2674,column:4},end:{line:2674,column:90}},"962":{start:{line:2678,column:0},end:{line:2735,column:2}},"963":{start:{line:2708,column:4},end:{line:2708,column:63}},"964":{start:{line:2709,column:4},end:{line:2709,column:65}},"965":{start:{line:2711,column:16},end:{line:2714,column:5}},"966":{start:{line:2716,column:4},end:{line:2716,column:36}},"967":{start:{line:2718,column:15},end:{line:2729,column:5}},"968":{start:{line:2719,column:16},end:{line:2719,column:17}},"969":{start:{line:2721,column:8},end:{line:2721,column:105}},"970":{start:{line:2723,column:8},end:{line:2725,column:9}},"971":{start:{line:2724,column:12},end:{line:2724,column:35}},"972":{start:{line:2724,column:36},end:{line:2724,column:59}},"973":{start:{line:2724,column:60},end:{line:2724,column:83}},"974":{start:{line:2726,column:8},end:{line:2726,column:67}},"975":{start:{line:2728,column:8},end:{line:2728,column:60}},"976":{start:{line:2731,column:4},end:{line:2732,column:51}},"977":{start:{line:2732,column:8},end:{line:2732,column:51}},"978":{start:{line:2734,column:4},end:{line:2734,column:18}},"979":{start:{line:2738,column:0},end:{line:2771,column:2}},"980":{start:{line:2742,column:4},end:{line:2742,column:63}},"981":{start:{line:2743,column:4},end:{line:2743,column:65}},"982":{start:{line:2745,column:16},end:{line:2748,column:5}},"983":{start:{line:2750,column:4},end:{line:2750,column:36}},"984":{start:{line:2751,column:17},end:{line:2751,column:21}},"985":{start:{line:2752,column:15},end:{line:2764,column:5}},"986":{start:{line:2753,column:16},end:{line:2753,column:17}},"987":{start:{line:2755,column:8},end:{line:2755,column:105}},"988":{start:{line:2757,column:8},end:{line:2759,column:9}},"989":{start:{line:2758,column:12},end:{line:2758,column:35}},"990":{start:{line:2758,column:36},end:{line:2758,column:59}},"991":{start:{line:2758,column:60},end:{line:2758,column:83}},"992":{start:{line:2760,column:8},end:{line:2760,column:109}},"993":{start:{line:2762,column:8},end:{line:2762,column:62}},"994":{start:{line:2763,column:8},end:{line:2763,column:60}},"995":{start:{line:2766,column:4},end:{line:2767,column:51}},"996":{start:{line:2767,column:8},end:{line:2767,column:51}},"997":{start:{line:2769,column:4},end:{line:2769,column:18}},"998":{start:{line:2775,column:0},end:{line:2803,column:2}},"999":{start:{line:2792,column:15},end:{line:2792,column:63}},"1000":{start:{line:2794,column:4},end:{line:2797,column:5}},"1001":{start:{line:2795,column:8},end:{line:2795,column:34}},"1002":{start:{line:2796,column:8},end:{line:2796,column:85}},"1003":{start:{line:2798,column:4},end:{line:2801,column:5}},"1004":{start:{line:2800,column:8},end:{line:2800,column:66}},"1005":{start:{line:2802,column:4},end:{line:2802,column:22}},"1006":{start:{line:2806,column:0},end:{line:2823,column:2}},"1007":{start:{line:2814,column:13},end:{line:2814,column:52}},"1008":{start:{line:2816,column:12},end:{line:2816,column:23}},"1009":{start:{line:2817,column:14},end:{line:2817,column:95}},"1010":{start:{line:2817,column:82},end:{line:2817,column:93}},"1011":{start:{line:2818,column:13},end:{line:2818,column:26}},"1012":{start:{line:2819,column:4},end:{line:2819,column:117}},"1013":{start:{line:2819,column:32},end:{line:2819,column:113}},"1014":{start:{line:2821,column:4},end:{line:2821,column:15}},"1015":{start:{line:2825,column:0},end:{line:2959,column:2}},"1016":{start:{line:2846,column:11},end:{line:2846,column:15}},"1017":{start:{line:2848,column:13},end:{line:2848,column:22}},"1018":{start:{line:2849,column:13},end:{line:2849,column:27}},"1019":{start:{line:2850,column:16},end:{line:2861,column:5}},"1020":{start:{line:2863,column:4},end:{line:2863,column:36}},"1021":{start:{line:2865,column:15},end:{line:2869,column:5}},"1022":{start:{line:2871,column:4},end:{line:2874,column:5}},"1023":{start:{line:2872,column:8},end:{line:2872,column:46}},"1024":{start:{line:2873,column:8},end:{line:2873,column:38}},"1025":{start:{line:2876,column:4},end:{line:2876,column:49}},"1026":{start:{line:2877,column:4},end:{line:2877,column:49}},"1027":{start:{line:2878,column:4},end:{line:2878,column:53}},"1028":{start:{line:2880,column:4},end:{line:2880,column:126}},"1029":{start:{line:2880,column:39},end:{line:2880,column:106}},"1030":{start:{line:2883,column:4},end:{line:2885,column:5}},"1031":{start:{line:2884,column:8},end:{line:2884,column:66}},"1032":{start:{line:2887,column:4},end:{line:2887,column:33}},"1033":{start:{line:2888,column:4},end:{line:2891,column:5}},"1034":{start:{line:2889,column:8},end:{line:2889,column:36}},"1035":{start:{line:2895,column:12},end:{line:2930,column:5}},"1036":{start:{line:2934,column:4},end:{line:2935,column:59}},"1037":{start:{line:2934,column:15},end:{line:2934,column:16}},"1038":{start:{line:2935,column:8},end:{line:2935,column:59}},"1039":{start:{line:2938,column:4},end:{line:2938,column:80}},"1040":{start:{line:2938,column:26},end:{line:2938,column:61}},"1041":{start:{line:2941,column:4},end:{line:2941,column:92}},"1042":{start:{line:2942,column:4},end:{line:2942,column:92}},"1043":{start:{line:2943,column:4},end:{line:2943,column:92}},"1044":{start:{line:2944,column:4},end:{line:2944,column:92}},"1045":{start:{line:2947,column:4},end:{line:2955,column:5}},"1046":{start:{line:2948,column:17},end:{line:2948,column:34}},"1047":{start:{line:2949,column:17},end:{line:2949,column:48}},"1048":{start:{line:2950,column:8},end:{line:2950,column:28}},"1049":{start:{line:2951,column:8},end:{line:2951,column:27}},"1050":{start:{line:2953,column:8},end:{line:2954,column:30}},"1051":{start:{line:2954,column:12},end:{line:2954,column:30}},"1052":{start:{line:2956,column:4},end:{line:2957,column:133}},"1053":{start:{line:2957,column:8},end:{line:2957,column:133}},"1054":{start:{line:2958,column:4},end:{line:2958,column:13}},"1055":{start:{line:2962,column:0},end:{line:3046,column:2}},"1056":{start:{line:2970,column:11},end:{line:2970,column:13}},"1057":{start:{line:2970,column:17},end:{line:2970,column:19}},"1058":{start:{line:2992,column:15},end:{line:3020,column:5}},"1059":{start:{line:3021,column:4},end:{line:3025,column:22}},"1060":{start:{line:3027,column:4},end:{line:3027,column:80}},"1061":{start:{line:3027,column:26},end:{line:3027,column:66}},"1062":{start:{line:3028,column:4},end:{line:3043,column:5}},"1063":{start:{line:3030,column:17},end:{line:3030,column:49}},"1064":{start:{line:3031,column:8},end:{line:3041,column:9}},"1065":{start:{line:3033,column:20},end:{line:3033,column:37}},"1066":{start:{line:3034,column:21},end:{line:3034,column:52}},"1067":{start:{line:3035,column:12},end:{line:3035,column:45}},"1068":{start:{line:3036,column:12},end:{line:3036,column:31}},"1069":{start:{line:3037,column:12},end:{line:3037,column:30}},"1070":{start:{line:3040,column:12},end:{line:3040,column:31}},"1071":{start:{line:3045,column:4},end:{line:3045,column:13}},"1072":{start:{line:3049,column:0},end:{line:3106,column:2}},"1073":{start:{line:3074,column:4},end:{line:3074,column:27}},"1074":{start:{line:3076,column:4},end:{line:3077,column:20}},"1075":{start:{line:3077,column:7},end:{line:3077,column:20}},"1076":{start:{line:3079,column:14},end:{line:3079,column:15}},"1077":{start:{line:3080,column:15},end:{line:3080,column:60}},"1078":{start:{line:3082,column:4},end:{line:3090,column:5}},"1079":{start:{line:3083,column:8},end:{line:3089,column:9}},"1080":{start:{line:3084,column:12},end:{line:3084,column:22}},"1081":{start:{line:3085,column:12},end:{line:3085,column:68}},"1082":{start:{line:3088,column:12},end:{line:3088,column:55}},"1083":{start:{line:3092,column:16},end:{line:3092,column:132}},"1084":{start:{line:3093,column:4},end:{line:3094,column:21}},"1085":{start:{line:3094,column:8},end:{line:3094,column:21}},"1086":{start:{line:3096,column:4},end:{line:3096,column:66}},"1087":{start:{line:3097,column:4},end:{line:3097,column:85}},"1088":{start:{line:3099,column:4},end:{line:3104,column:5}},"1089":{start:{line:3100,column:8},end:{line:3103,column:50}},"1090":{start:{line:3101,column:12},end:{line:3101,column:57}},"1091":{start:{line:3103,column:12},end:{line:3103,column:50}},"1092":{start:{line:3105,column:4},end:{line:3105,column:16}},"1093":{start:{line:3110,column:0},end:{line:3157,column:2}},"1094":{start:{line:3123,column:12},end:{line:3123,column:17}},"1095":{start:{line:3126,column:4},end:{line:3126,column:23}},"1096":{start:{line:3127,column:4},end:{line:3128,column:17}},"1097":{start:{line:3128,column:8},end:{line:3128,column:17}},"1098":{start:{line:3130,column:4},end:{line:3155,column:5}},"1099":{start:{line:3131,column:8},end:{line:3131,column:21}},"1100":{start:{line:3132,column:8},end:{line:3154,column:30}},"1101":{start:{line:3133,column:20},end:{line:3133,column:45}},"1102":{start:{line:3134,column:20},end:{line:3134,column:34}},"1103":{start:{line:3136,column:12},end:{line:3137,column:25}},"1104":{start:{line:3137,column:16},end:{line:3137,column:25}},"1105":{start:{line:3140,column:12},end:{line:3152,column:13}},"1106":{start:{line:3141,column:16},end:{line:3148,column:17}},"1107":{start:{line:3142,column:20},end:{line:3142,column:36}},"1108":{start:{line:3144,column:20},end:{line:3147,column:37}},"1109":{start:{line:3145,column:23},end:{line:3145,column:36}},"1110":{start:{line:3147,column:23},end:{line:3147,column:37}},"1111":{start:{line:3149,column:16},end:{line:3149,column:50}},"1112":{start:{line:3150,column:16},end:{line:3150,column:25}},"1113":{start:{line:3154,column:19},end:{line:3154,column:29}},"1114":{start:{line:3156,column:4},end:{line:3156,column:13}},"1115":{start:{line:3160,column:0},end:{line:3185,column:2}},"1116":{start:{line:3172,column:20},end:{line:3172,column:30}},"1117":{start:{line:3172,column:34},end:{line:3172,column:39}},"1118":{start:{line:3173,column:4},end:{line:3183,column:5}},"1119":{start:{line:3174,column:8},end:{line:3174,column:19}},"1120":{start:{line:3175,column:8},end:{line:3182,column:36}},"1121":{start:{line:3176,column:12},end:{line:3176,column:41}},"1122":{start:{line:3177,column:12},end:{line:3180,column:51}},"1123":{start:{line:3178,column:16},end:{line:3178,column:44}},"1124":{start:{line:3180,column:16},end:{line:3180,column:51}},"1125":{start:{line:3182,column:21},end:{line:3182,column:31}},"1126":{start:{line:3184,column:4},end:{line:3184,column:14}},"1127":{start:{line:3187,column:0},end:{line:3200,column:2}},"1128":{start:{line:3192,column:12},end:{line:3198,column:5}},"1129":{start:{line:3199,column:4},end:{line:3199,column:13}},"1130":{start:{line:3212,column:0},end:{line:3212,column:39}},"1131":{start:{line:3214,column:16},end:{line:3225,column:1}},"1132":{start:{line:3215,column:15},end:{line:3215,column:17}},"1133":{start:{line:3216,column:4},end:{line:3223,column:5}},"1134":{start:{line:3217,column:8},end:{line:3217,column:23}},"1135":{start:{line:3219,column:8},end:{line:3222,column:9}},"1136":{start:{line:3220,column:20},end:{line:3220,column:35}},"1137":{start:{line:3221,column:12},end:{line:3221,column:28}},"1138":{start:{line:3224,column:4},end:{line:3224,column:16}},"1139":{start:{line:3227,column:15},end:{line:3264,column:1}},"1140":{start:{line:3228,column:4},end:{line:3263,column:5}},"1141":{start:{line:3230,column:18},end:{line:3230,column:34}},"1142":{start:{line:3232,column:8},end:{line:3253,column:9}},"1143":{start:{line:3233,column:12},end:{line:3252,column:13}},"1144":{start:{line:3235,column:25},end:{line:3235,column:31}},"1145":{start:{line:3236,column:16},end:{line:3237,column:26}},"1146":{start:{line:3237,column:20},end:{line:3237,column:26}},"1147":{start:{line:3239,column:24},end:{line:3239,column:54}},"1148":{start:{line:3240,column:24},end:{line:3240,column:38}},"1149":{start:{line:3242,column:16},end:{line:3248,column:17}},"1150":{start:{line:3243,column:20},end:{line:3243,column:78}},"1151":{start:{line:3244,column:20},end:{line:3244,column:80}},"1152":{start:{line:3245,column:20},end:{line:3245,column:37}},"1153":{start:{line:3246,column:20},end:{line:3247,column:42}},"1154":{start:{line:3247,column:24},end:{line:3247,column:42}},"1155":{start:{line:3256,column:8},end:{line:3262,column:9}},"1156":{start:{line:3259,column:12},end:{line:3259,column:55}},"1157":{start:{line:3260,column:12},end:{line:3261,column:34}},"1158":{start:{line:3261,column:16},end:{line:3261,column:34}},"1159":{start:{line:3273,column:0},end:{line:3273,column:10}},"1160":{start:{line:3276,column:23},end:{line:3276,column:59}},"1161":{start:{line:3277,column:23},end:{line:3277,column:121}},"1162":{start:{line:3278,column:0},end:{line:3278,column:58}},"1163":{start:{line:3280,column:0},end:{line:3280,column:33}},"1164":{start:{line:3282,column:4},end:{line:3282,column:14}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:110,column:1},end:{line:110,column:2}},loc:{start:{line:110,column:26},end:{line:135,column:1}},line:110},"1":{name:"(anonymous_1)",decl:{start:{line:135,column:45},end:{line:135,column:46}},loc:{start:{line:135,column:57},end:{line:3283,column:1}},line:135},"2":{name:"(anonymous_2)",decl:{start:{line:148,column:15},end:{line:148,column:16}},loc:{start:{line:148,column:40},end:{line:163,column:1}},line:148},"3":{name:"(anonymous_3)",decl:{start:{line:167,column:15},end:{line:167,column:16}},loc:{start:{line:167,column:34},end:{line:174,column:1}},line:167},"4":{name:"(anonymous_4)",decl:{start:{line:178,column:15},end:{line:178,column:16}},loc:{start:{line:178,column:48},end:{line:218,column:1}},line:178},"5":{name:"(anonymous_5)",decl:{start:{line:224,column:16},end:{line:224,column:17}},loc:{start:{line:224,column:64},end:{line:244,column:1}},line:224},"6":{name:"(anonymous_6)",decl:{start:{line:253,column:17},end:{line:253,column:18}},loc:{start:{line:253,column:65},end:{line:279,column:1}},line:253},"7":{name:"(anonymous_7)",decl:{start:{line:296,column:16},end:{line:296,column:17}},loc:{start:{line:296,column:28},end:{line:304,column:1}},line:296},"8":{name:"(anonymous_8)",decl:{start:{line:303,column:21},end:{line:303,column:22}},loc:{start:{line:303,column:42},end:{line:303,column:71}},line:303},"9":{name:"(anonymous_9)",decl:{start:{line:306,column:15},end:{line:306,column:16}},loc:{start:{line:306,column:30},end:{line:314,column:1}},line:306},"10":{name:"(anonymous_10)",decl:{start:{line:313,column:33},end:{line:313,column:34}},loc:{start:{line:313,column:45},end:{line:313,column:75}},line:313},"11":{name:"(anonymous_11)",decl:{start:{line:316,column:18},end:{line:316,column:19}},loc:{start:{line:316,column:33},end:{line:324,column:1}},line:316},"12":{name:"(anonymous_12)",decl:{start:{line:323,column:33},end:{line:323,column:34}},loc:{start:{line:323,column:45},end:{line:323,column:72}},line:323},"13":{name:"(anonymous_13)",decl:{start:{line:477,column:17},end:{line:477,column:18}},loc:{start:{line:477,column:56},end:{line:496,column:1}},line:477},"14":{name:"(anonymous_14)",decl:{start:{line:489,column:14},end:{line:489,column:15}},loc:{start:{line:489,column:25},end:{line:489,column:51}},line:489},"15":{name:"(anonymous_15)",decl:{start:{line:493,column:13},end:{line:493,column:14}},loc:{start:{line:493,column:26},end:{line:493,column:85}},line:493},"16":{name:"(anonymous_16)",decl:{start:{line:500,column:19},end:{line:500,column:20}},loc:{start:{line:500,column:45},end:{line:564,column:1}},line:500},"17":{name:"(anonymous_17)",decl:{start:{line:531,column:29},end:{line:531,column:30}},loc:{start:{line:531,column:40},end:{line:531,column:51}},line:531},"18":{name:"(anonymous_18)",decl:{start:{line:531,column:54},end:{line:531,column:55}},loc:{start:{line:531,column:65},end:{line:531,column:103}},line:531},"19":{name:"(anonymous_19)",decl:{start:{line:567,column:19},end:{line:567,column:20}},loc:{start:{line:567,column:46},end:{line:609,column:1}},line:567},"20":{name:"(anonymous_20)",decl:{start:{line:607,column:29},end:{line:607,column:30}},loc:{start:{line:607,column:41},end:{line:607,column:52}},line:607},"21":{name:"(anonymous_21)",decl:{start:{line:607,column:55},end:{line:607,column:56}},loc:{start:{line:607,column:66},end:{line:607,column:89}},line:607},"22":{name:"(anonymous_22)",decl:{start:{line:613,column:16},end:{line:613,column:17}},loc:{start:{line:613,column:37},end:{line:670,column:1}},line:613},"23":{name:"(anonymous_23)",decl:{start:{line:673,column:19},end:{line:673,column:20}},loc:{start:{line:673,column:39},end:{line:695,column:1}},line:673},"24":{name:"(anonymous_24)",decl:{start:{line:680,column:13},end:{line:680,column:14}},loc:{start:{line:680,column:24},end:{line:680,column:106}},line:680},"25":{name:"(anonymous_25)",decl:{start:{line:697,column:28},end:{line:697,column:29}},loc:{start:{line:697,column:52},end:{line:731,column:1}},line:697},"26":{name:"(anonymous_26)",decl:{start:{line:736,column:9},end:{line:736,column:10}},loc:{start:{line:736,column:35},end:{line:766,column:1}},line:736},"27":{name:"(anonymous_27)",decl:{start:{line:770,column:10},end:{line:770,column:11}},loc:{start:{line:770,column:21},end:{line:797,column:1}},line:770},"28":{name:"(anonymous_28)",decl:{start:{line:799,column:15},end:{line:799,column:16}},loc:{start:{line:799,column:30},end:{line:831,column:1}},line:799},"29":{name:"(anonymous_29)",decl:{start:{line:827,column:23},end:{line:827,column:24}},loc:{start:{line:827,column:34},end:{line:827,column:119}},line:827},"30":{name:"(anonymous_30)",decl:{start:{line:827,column:48},end:{line:827,column:49}},loc:{start:{line:827,column:59},end:{line:827,column:105}},line:827},"31":{name:"(anonymous_31)",decl:{start:{line:835,column:15},end:{line:835,column:16}},loc:{start:{line:835,column:48},end:{line:846,column:1}},line:835},"32":{name:"(anonymous_32)",decl:{start:{line:849,column:15},end:{line:849,column:16}},loc:{start:{line:849,column:46},end:{line:862,column:1}},line:849},"33":{name:"(anonymous_33)",decl:{start:{line:866,column:17},end:{line:866,column:18}},loc:{start:{line:866,column:46},end:{line:889,column:1}},line:866},"34":{name:"(anonymous_34)",decl:{start:{line:890,column:13},end:{line:890,column:14}},loc:{start:{line:890,column:37},end:{line:899,column:1}},line:890},"35":{name:"(anonymous_35)",decl:{start:{line:901,column:19},end:{line:901,column:20}},loc:{start:{line:901,column:57},end:{line:934,column:1}},line:901},"36":{name:"(anonymous_36)",decl:{start:{line:917,column:15},end:{line:917,column:16}},loc:{start:{line:917,column:26},end:{line:917,column:86}},line:917},"37":{name:"(anonymous_37)",decl:{start:{line:918,column:15},end:{line:918,column:16}},loc:{start:{line:918,column:28},end:{line:918,column:70}},line:918},"38":{name:"(anonymous_38)",decl:{start:{line:936,column:18},end:{line:936,column:19}},loc:{start:{line:936,column:53},end:{line:956,column:1}},line:936},"39":{name:"(anonymous_39)",decl:{start:{line:961,column:17},end:{line:961,column:18}},loc:{start:{line:961,column:32},end:{line:973,column:1}},line:961},"40":{name:"(anonymous_40)",decl:{start:{line:972,column:85},end:{line:972,column:86}},loc:{start:{line:972,column:96},end:{line:972,column:110}},line:972},"41":{name:"(anonymous_41)",decl:{start:{line:978,column:12},end:{line:978,column:13}},loc:{start:{line:978,column:28},end:{line:1010,column:1}},line:978},"42":{name:"f",decl:{start:{line:986,column:13},end:{line:986,column:14}},loc:{start:{line:986,column:21},end:{line:1008,column:5}},line:986},"43":{name:"(anonymous_43)",decl:{start:{line:992,column:133},end:{line:992,column:134}},loc:{start:{line:992,column:150},end:{line:1007,column:9}},line:992},"44":{name:"(anonymous_44)",decl:{start:{line:1013,column:13},end:{line:1013,column:14}},loc:{start:{line:1013,column:41},end:{line:1116,column:1}},line:1013},"45":{name:"(anonymous_45)",decl:{start:{line:1050,column:13},end:{line:1050,column:14}},loc:{start:{line:1050,column:26},end:{line:1050,column:121}},line:1050},"46":{name:"(anonymous_46)",decl:{start:{line:1119,column:17},end:{line:1119,column:18}},loc:{start:{line:1119,column:45},end:{line:1156,column:1}},line:1119},"47":{name:"(anonymous_47)",decl:{start:{line:1159,column:14},end:{line:1159,column:15}},loc:{start:{line:1159,column:45},end:{line:1189,column:1}},line:1159},"48":{name:"(anonymous_48)",decl:{start:{line:1183,column:64},end:{line:1183,column:65}},loc:{start:{line:1183,column:75},end:{line:1183,column:95}},line:1183},"49":{name:"(anonymous_49)",decl:{start:{line:1287,column:13},end:{line:1287,column:14}},loc:{start:{line:1287,column:25},end:{line:1329,column:1}},line:1287},"50":{name:"(anonymous_50)",decl:{start:{line:1296,column:81},end:{line:1296,column:82}},loc:{start:{line:1296,column:92},end:{line:1296,column:134}},line:1296},"51":{name:"(anonymous_51)",decl:{start:{line:1331,column:14},end:{line:1331,column:15}},loc:{start:{line:1331,column:26},end:{line:1378,column:1}},line:1331},"52":{name:"bwHTMLNode",decl:{start:{line:1333,column:13},end:{line:1333,column:23}},loc:{start:{line:1333,column:27},end:{line:1333,column:75}},line:1333},"53":{name:"bwError",decl:{start:{line:1334,column:13},end:{line:1334,column:20}},loc:{start:{line:1334,column:28},end:{line:1334,column:93}},line:1334},"54":{name:"(anonymous_54)",decl:{start:{line:1344,column:81},end:{line:1344,column:82}},loc:{start:{line:1344,column:92},end:{line:1344,column:134}},line:1344},"55":{name:"(anonymous_55)",decl:{start:{line:1441,column:10},end:{line:1441,column:11}},loc:{start:{line:1441,column:31},end:{line:1563,column:1}},line:1441},"56":{name:"(anonymous_56)",decl:{start:{line:1473,column:16},end:{line:1473,column:17}},loc:{start:{line:1473,column:33},end:{line:1477,column:5}},line:1473},"57":{name:"(anonymous_57)",decl:{start:{line:1567,column:11},end:{line:1567,column:12}},loc:{start:{line:1567,column:39},end:{line:1578,column:1}},line:1567},"58":{name:"(anonymous_58)",decl:{start:{line:1577,column:25},end:{line:1577,column:26}},loc:{start:{line:1577,column:37},end:{line:1577,column:65}},line:1577},"59":{name:"(anonymous_59)",decl:{start:{line:1581,column:14},end:{line:1581,column:15}},loc:{start:{line:1581,column:55},end:{line:1601,column:1}},line:1581},"60":{name:"(anonymous_60)",decl:{start:{line:1598,column:26},end:{line:1598,column:27}},loc:{start:{line:1598,column:37},end:{line:1598,column:69}},line:1598},"61":{name:"(anonymous_61)",decl:{start:{line:1605,column:20},end:{line:1605,column:21}},loc:{start:{line:1605,column:67},end:{line:1630,column:1}},line:1605},"62":{name:"(anonymous_62)",decl:{start:{line:1624,column:19},end:{line:1624,column:20}},loc:{start:{line:1624,column:30},end:{line:1624,column:129}},line:1624},"63":{name:"(anonymous_63)",decl:{start:{line:1632,column:20},end:{line:1632,column:21}},loc:{start:{line:1632,column:58},end:{line:1644,column:1}},line:1632},"64":{name:"(anonymous_64)",decl:{start:{line:1640,column:20},end:{line:1640,column:21}},loc:{start:{line:1640,column:31},end:{line:1640,column:130}},line:1640},"65":{name:"(anonymous_65)",decl:{start:{line:1647,column:14},end:{line:1647,column:15}},loc:{start:{line:1647,column:38},end:{line:1677,column:1}},line:1647},"66":{name:"(anonymous_66)",decl:{start:{line:1666,column:25},end:{line:1666,column:26}},loc:{start:{line:1666,column:36},end:{line:1666,column:120}},line:1666},"67":{name:"(anonymous_67)",decl:{start:{line:1667,column:25},end:{line:1667,column:26}},loc:{start:{line:1667,column:36},end:{line:1667,column:85}},line:1667},"68":{name:"(anonymous_68)",decl:{start:{line:1682,column:15},end:{line:1682,column:16}},loc:{start:{line:1682,column:35},end:{line:1761,column:1}},line:1682},"69":{name:"(anonymous_69)",decl:{start:{line:1745,column:25},end:{line:1745,column:26}},loc:{start:{line:1745,column:36},end:{line:1745,column:72}},line:1745},"70":{name:"(anonymous_70)",decl:{start:{line:1754,column:24},end:{line:1754,column:25}},loc:{start:{line:1754,column:35},end:{line:1754,column:71}},line:1754},"71":{name:"(anonymous_71)",decl:{start:{line:1764,column:21},end:{line:1764,column:22}},loc:{start:{line:1764,column:43},end:{line:1788,column:1}},line:1764},"72":{name:"(anonymous_72)",decl:{start:{line:1785,column:17},end:{line:1785,column:18}},loc:{start:{line:1785,column:28},end:{line:1785,column:111}},line:1785},"73":{name:"(anonymous_73)",decl:{start:{line:1790,column:14},end:{line:1790,column:15}},loc:{start:{line:1790,column:52},end:{line:1823,column:1}},line:1790},"74":{name:"(anonymous_74)",decl:{start:{line:1806,column:54},end:{line:1806,column:55}},loc:{start:{line:1806,column:65},end:{line:1806,column:76}},line:1806},"75":{name:"(anonymous_75)",decl:{start:{line:1811,column:35},end:{line:1811,column:36}},loc:{start:{line:1811,column:56},end:{line:1811,column:103}},line:1811},"76":{name:"(anonymous_76)",decl:{start:{line:1819,column:12},end:{line:1819,column:13}},loc:{start:{line:1819,column:24},end:{line:1819,column:105}},line:1819},"77":{name:"(anonymous_77)",decl:{start:{line:1825,column:17},end:{line:1825,column:18}},loc:{start:{line:1825,column:46},end:{line:1825,column:104}},line:1825},"78":{name:"(anonymous_78)",decl:{start:{line:1827,column:21},end:{line:1827,column:22}},loc:{start:{line:1827,column:36},end:{line:1868,column:1}},line:1827},"79":{name:"(anonymous_79)",decl:{start:{line:1860,column:20},end:{line:1860,column:21}},loc:{start:{line:1860,column:33},end:{line:1864,column:5}},line:1860},"80":{name:"(anonymous_80)",decl:{start:{line:1871,column:22},end:{line:1871,column:23}},loc:{start:{line:1871,column:43},end:{line:1904,column:1}},line:1871},"81":{name:"(anonymous_81)",decl:{start:{line:1881,column:34},end:{line:1881,column:35}},loc:{start:{line:1881,column:49},end:{line:1884,column:13}},line:1881},"82":{name:"(anonymous_82)",decl:{start:{line:1888,column:24},end:{line:1888,column:25}},loc:{start:{line:1888,column:36},end:{line:1901,column:9}},line:1888},"83":{name:"(anonymous_83)",decl:{start:{line:1892,column:19},end:{line:1892,column:20}},loc:{start:{line:1892,column:42},end:{line:1900,column:13}},line:1892},"84":{name:"(anonymous_84)",decl:{start:{line:1914,column:16},end:{line:1914,column:17}},loc:{start:{line:1914,column:35},end:{line:1924,column:1}},line:1914},"85":{name:"(anonymous_85)",decl:{start:{line:1927,column:15},end:{line:1927,column:16}},loc:{start:{line:1927,column:34},end:{line:1936,column:1}},line:1927},"86":{name:"(anonymous_86)",decl:{start:{line:1940,column:18},end:{line:1940,column:19}},loc:{start:{line:1940,column:68},end:{line:1957,column:1}},line:1940},"87":{name:"(anonymous_87)",decl:{start:{line:1950,column:33},end:{line:1950,column:34}},loc:{start:{line:1950,column:45},end:{line:1956,column:5}},line:1950},"88":{name:"(anonymous_88)",decl:{start:{line:1960,column:17},end:{line:1960,column:18}},loc:{start:{line:1960,column:78},end:{line:2013,column:1}},line:1960},"89":{name:"(anonymous_89)",decl:{start:{line:1990,column:68},end:{line:1990,column:69}},loc:{start:{line:1990,column:80},end:{line:1990,column:82}},line:1990},"90":{name:"(anonymous_90)",decl:{start:{line:1991,column:59},end:{line:1991,column:60}},loc:{start:{line:1991,column:71},end:{line:1991,column:73}},line:1991},"91":{name:"(anonymous_91)",decl:{start:{line:1992,column:59},end:{line:1992,column:60}},loc:{start:{line:1992,column:71},end:{line:1992,column:73}},line:1992},"92":{name:"(anonymous_92)",decl:{start:{line:1994,column:13},end:{line:1994,column:14}},loc:{start:{line:1994,column:25},end:{line:2011,column:5}},line:1994},"93":{name:"(anonymous_93)",decl:{start:{line:2049,column:20},end:{line:2049,column:21}},loc:{start:{line:2049,column:37},end:{line:2086,column:1}},line:2049},"94":{name:"(anonymous_94)",decl:{start:{line:2089,column:19},end:{line:2089,column:20}},loc:{start:{line:2089,column:60},end:{line:2137,column:1}},line:2089},"95":{name:"(anonymous_95)",decl:{start:{line:2140,column:23},end:{line:2140,column:24}},loc:{start:{line:2140,column:42},end:{line:2178,column:1}},line:2140},"96":{name:"(anonymous_96)",decl:{start:{line:2189,column:18},end:{line:2189,column:19}},loc:{start:{line:2189,column:43},end:{line:2212,column:1}},line:2189},"97":{name:"(anonymous_97)",decl:{start:{line:2214,column:20},end:{line:2214,column:21}},loc:{start:{line:2214,column:36},end:{line:2221,column:1}},line:2214},"98":{name:"(anonymous_98)",decl:{start:{line:2223,column:17},end:{line:2223,column:18}},loc:{start:{line:2223,column:38},end:{line:2241,column:1}},line:2223},"99":{name:"(anonymous_99)",decl:{start:{line:2239,column:52},end:{line:2239,column:53}},loc:{start:{line:2239,column:62},end:{line:2239,column:118}},line:2239},"100":{name:"(anonymous_100)",decl:{start:{line:2243,column:24},end:{line:2243,column:25}},loc:{start:{line:2243,column:51},end:{line:2268,column:1}},line:2243},"101":{name:"(anonymous_101)",decl:{start:{line:2271,column:16},end:{line:2271,column:17}},loc:{start:{line:2271,column:71},end:{line:2312,column:1}},line:2271},"102":{name:"(anonymous_102)",decl:{start:{line:2314,column:15},end:{line:2314,column:16}},loc:{start:{line:2314,column:37},end:{line:2359,column:1}},line:2314},"103":{name:"(anonymous_103)",decl:{start:{line:2334,column:14},end:{line:2334,column:15}},loc:{start:{line:2334,column:29},end:{line:2334,column:83}},line:2334},"104":{name:"(anonymous_104)",decl:{start:{line:2352,column:18},end:{line:2352,column:19}},loc:{start:{line:2352,column:29},end:{line:2352,column:113}},line:2352},"105":{name:"(anonymous_105)",decl:{start:{line:2353,column:48},end:{line:2353,column:49}},loc:{start:{line:2353,column:59},end:{line:2353,column:135}},line:2353},"106":{name:"(anonymous_106)",decl:{start:{line:2353,column:89},end:{line:2353,column:90}},loc:{start:{line:2353,column:100},end:{line:2353,column:132}},line:2353},"107":{name:"(anonymous_107)",decl:{start:{line:2361,column:24},end:{line:2361,column:25}},loc:{start:{line:2361,column:36},end:{line:2418,column:1}},line:2361},"108":{name:"(anonymous_108)",decl:{start:{line:2420,column:20},end:{line:2420,column:21}},loc:{start:{line:2420,column:32},end:{line:2459,column:1}},line:2420},"109":{name:"(anonymous_109)",decl:{start:{line:2461,column:14},end:{line:2461,column:15}},loc:{start:{line:2461,column:41},end:{line:2478,column:1}},line:2461},"110":{name:"(anonymous_110)",decl:{start:{line:2483,column:14},end:{line:2483,column:15}},loc:{start:{line:2483,column:26},end:{line:2490,column:1}},line:2483},"111":{name:"(anonymous_111)",decl:{start:{line:2494,column:12},end:{line:2494,column:13}},loc:{start:{line:2494,column:33},end:{line:2515,column:1}},line:2494},"112":{name:"(anonymous_112)",decl:{start:{line:2518,column:16},end:{line:2518,column:17}},loc:{start:{line:2518,column:39},end:{line:2549,column:1}},line:2518},"113":{name:"(anonymous_113)",decl:{start:{line:2537,column:12},end:{line:2537,column:13}},loc:{start:{line:2537,column:23},end:{line:2537,column:77}},line:2537},"114":{name:"(anonymous_114)",decl:{start:{line:2540,column:18},end:{line:2540,column:19}},loc:{start:{line:2540,column:36},end:{line:2547,column:5}},line:2540},"115":{name:"(anonymous_115)",decl:{start:{line:2552,column:10},end:{line:2552,column:11}},loc:{start:{line:2552,column:36},end:{line:2569,column:1}},line:2552},"116":{name:"(anonymous_116)",decl:{start:{line:2565,column:24},end:{line:2565,column:25}},loc:{start:{line:2565,column:35},end:{line:2565,column:77}},line:2565},"117":{name:"(anonymous_117)",decl:{start:{line:2572,column:14},end:{line:2572,column:15}},loc:{start:{line:2572,column:58},end:{line:2612,column:1}},line:2572},"118":{name:"(anonymous_118)",decl:{start:{line:2596,column:12},end:{line:2596,column:13}},loc:{start:{line:2596,column:25},end:{line:2607,column:5}},line:2596},"119":{name:"(anonymous_119)",decl:{start:{line:2616,column:12},end:{line:2616,column:13}},loc:{start:{line:2616,column:40},end:{line:2632,column:1}},line:2616},"120":{name:"(anonymous_120)",decl:{start:{line:2634,column:10},end:{line:2634,column:11}},loc:{start:{line:2634,column:28},end:{line:2650,column:1}},line:2634},"121":{name:"(anonymous_121)",decl:{start:{line:2653,column:15},end:{line:2653,column:16}},loc:{start:{line:2653,column:49},end:{line:2675,column:1}},line:2653},"122":{name:"(anonymous_122)",decl:{start:{line:2678,column:12},end:{line:2678,column:13}},loc:{start:{line:2678,column:52},end:{line:2735,column:1}},line:2678},"123":{name:"(anonymous_123)",decl:{start:{line:2718,column:15},end:{line:2718,column:16}},loc:{start:{line:2718,column:27},end:{line:2729,column:5}},line:2718},"124":{name:"(anonymous_124)",decl:{start:{line:2738,column:13},end:{line:2738,column:14}},loc:{start:{line:2738,column:58},end:{line:2771,column:1}},line:2738},"125":{name:"(anonymous_125)",decl:{start:{line:2752,column:15},end:{line:2752,column:16}},loc:{start:{line:2752,column:27},end:{line:2764,column:5}},line:2752},"126":{name:"(anonymous_126)",decl:{start:{line:2775,column:15},end:{line:2775,column:16}},loc:{start:{line:2775,column:50},end:{line:2803,column:1}},line:2775},"127":{name:"(anonymous_127)",decl:{start:{line:2806,column:20},end:{line:2806,column:21}},loc:{start:{line:2806,column:36},end:{line:2823,column:1}},line:2806},"128":{name:"(anonymous_128)",decl:{start:{line:2817,column:70},end:{line:2817,column:71}},loc:{start:{line:2817,column:81},end:{line:2817,column:94}},line:2817},"129":{name:"(anonymous_129)",decl:{start:{line:2819,column:18},end:{line:2819,column:19}},loc:{start:{line:2819,column:31},end:{line:2819,column:115}},line:2819},"130":{name:"(anonymous_130)",decl:{start:{line:2825,column:21},end:{line:2825,column:22}},loc:{start:{line:2825,column:53},end:{line:2959,column:1}},line:2825},"131":{name:"(anonymous_131)",decl:{start:{line:2880,column:27},end:{line:2880,column:28}},loc:{start:{line:2880,column:38},end:{line:2880,column:107}},line:2880},"132":{name:"(anonymous_132)",decl:{start:{line:2938,column:14},end:{line:2938,column:15}},loc:{start:{line:2938,column:25},end:{line:2938,column:62}},line:2938},"133":{name:"(anonymous_133)",decl:{start:{line:2962,column:21},end:{line:2962,column:22}},loc:{start:{line:2962,column:47},end:{line:3046,column:1}},line:2962},"134":{name:"(anonymous_134)",decl:{start:{line:3027,column:14},end:{line:3027,column:15}},loc:{start:{line:3027,column:25},end:{line:3027,column:67}},line:3027},"135":{name:"(anonymous_135)",decl:{start:{line:3049,column:22},end:{line:3049,column:23}},loc:{start:{line:3049,column:46},end:{line:3106,column:1}},line:3049},"136":{name:"(anonymous_136)",decl:{start:{line:3110,column:14},end:{line:3110,column:15}},loc:{start:{line:3110,column:41},end:{line:3157,column:1}},line:3110},"137":{name:"(anonymous_137)",decl:{start:{line:3160,column:21},end:{line:3160,column:22}},loc:{start:{line:3160,column:44},end:{line:3185,column:1}},line:3160},"138":{name:"(anonymous_138)",decl:{start:{line:3187,column:14},end:{line:3187,column:15}},loc:{start:{line:3187,column:25},end:{line:3200,column:1}},line:3187},"139":{name:"(anonymous_139)",decl:{start:{line:3214,column:16},end:{line:3214,column:17}},loc:{start:{line:3214,column:28},end:{line:3225,column:1}},line:3214},"140":{name:"(anonymous_140)",decl:{start:{line:3227,column:15},end:{line:3227,column:16}},loc:{start:{line:3227,column:27},end:{line:3264,column:1}},line:3227}},branchMap:{"0":{loc:{start:{line:111,column:4},end:{line:134,column:5}},type:"if",locations:[{start:{line:111,column:4},end:{line:134,column:5}},{start:{line:111,column:4},end:{line:134,column:5}}],line:111},"1":{loc:{start:{line:111,column:8},end:{line:111,column:50}},type:"binary-expr",locations:[{start:{line:111,column:8},end:{line:111,column:36}},{start:{line:111,column:40},end:{line:111,column:50}}],line:111},"2":{loc:{start:{line:115,column:11},end:{line:134,column:5}},type:"if",locations:[{start:{line:115,column:11},end:{line:134,column:5}},{start:{line:115,column:11},end:{line:134,column:5}}],line:115},"3":{loc:{start:{line:117,column:8},end:{line:123,column:32}},type:"if",locations:[{start:{line:117,column:8},end:{line:123,column:32}},{start:{line:117,column:8},end:{line:123,column:32}}],line:117},"4":{loc:{start:{line:117,column:12},end:{line:117,column:75}},type:"binary-expr",locations:[{start:{line:117,column:13},end:{line:117,column:39}},{start:{line:117,column:46},end:{line:117,column:74}}],line:117},"5":{loc:{start:{line:135,column:2},end:{line:135,column:43}},type:"cond-expr",locations:[{start:{line:135,column:32},end:{line:135,column:36}},{start:{line:135,column:39},end:{line:135,column:43}}],line:135},"6":{loc:{start:{line:161,column:12},end:{line:161,column:45}},type:"cond-expr",locations:[{start:{line:161,column:29},end:{line:161,column:39}},{start:{line:161,column:42},end:{line:161,column:45}}],line:161},"7":{loc:{start:{line:162,column:11},end:{line:162,column:42}},type:"cond-expr",locations:[{start:{line:162,column:34},end:{line:162,column:38}},{start:{line:162,column:41},end:{line:162,column:42}}],line:162},"8":{loc:{start:{line:202,column:4},end:{line:203,column:22}},type:"if",locations:[{start:{line:202,column:4},end:{line:203,column:22}},{start:{line:202,column:4},end:{line:203,column:22}}],line:202},"9":{loc:{start:{line:205,column:12},end:{line:205,column:133}},type:"cond-expr",locations:[{start:{line:205,column:40},end:{line:205,column:51}},{start:{line:205,column:55},end:{line:205,column:132}}],line:205},"10":{loc:{start:{line:207,column:4},end:{line:208,column:17}},type:"if",locations:[{start:{line:207,column:4},end:{line:208,column:17}},{start:{line:207,column:4},end:{line:208,column:17}}],line:207},"11":{loc:{start:{line:207,column:8},end:{line:207,column:44}},type:"binary-expr",locations:[{start:{line:207,column:9},end:{line:207,column:22}},{start:{line:207,column:28},end:{line:207,column:43}}],line:207},"12":{loc:{start:{line:209,column:4},end:{line:210,column:16}},type:"if",locations:[{start:{line:209,column:4},end:{line:210,column:16}},{start:{line:209,column:4},end:{line:210,column:16}}],line:209},"13":{loc:{start:{line:214,column:13},end:{line:214,column:104}},type:"cond-expr",locations:[{start:{line:214,column:82},end:{line:214,column:83}},{start:{line:214,column:86},end:{line:214,column:104}}],line:214},"14":{loc:{start:{line:237,column:4},end:{line:238,column:36}},type:"if",locations:[{start:{line:237,column:4},end:{line:238,column:36}},{start:{line:237,column:4},end:{line:238,column:36}}],line:237},"15":{loc:{start:{line:240,column:4},end:{line:241,column:34}},type:"if",locations:[{start:{line:240,column:4},end:{line:241,column:34}},{start:{line:240,column:4},end:{line:241,column:34}}],line:240},"16":{loc:{start:{line:243,column:11},end:{line:243,column:69}},type:"cond-expr",locations:[{start:{line:243,column:47},end:{line:243,column:56}},{start:{line:243,column:59},end:{line:243,column:69}}],line:243},"17":{loc:{start:{line:272,column:4},end:{line:273,column:36}},type:"if",locations:[{start:{line:272,column:4},end:{line:273,column:36}},{start:{line:272,column:4},end:{line:273,column:36}}],line:272},"18":{loc:{start:{line:275,column:4},end:{line:276,column:34}},type:"if",locations:[{start:{line:275,column:4},end:{line:276,column:34}},{start:{line:275,column:4},end:{line:276,column:34}}],line:275},"19":{loc:{start:{line:278,column:11},end:{line:278,column:168}},type:"cond-expr",locations:[{start:{line:278,column:47},end:{line:278,column:105}},{start:{line:278,column:108},end:{line:278,column:168}}],line:278},"20":{loc:{start:{line:278,column:47},end:{line:278,column:105}},type:"cond-expr",locations:[{start:{line:278,column:81},end:{line:278,column:93}},{start:{line:278,column:96},end:{line:278,column:105}}],line:278},"21":{loc:{start:{line:278,column:108},end:{line:278,column:168}},type:"cond-expr",locations:[{start:{line:278,column:143},end:{line:278,column:156}},{start:{line:278,column:158},end:{line:278,column:168}}],line:278},"22":{loc:{start:{line:301,column:4},end:{line:302,column:18}},type:"if",locations:[{start:{line:301,column:4},end:{line:302,column:18}},{start:{line:301,column:4},end:{line:302,column:18}}],line:301},"23":{loc:{start:{line:311,column:4},end:{line:312,column:18}},type:"if",locations:[{start:{line:311,column:4},end:{line:312,column:18}},{start:{line:311,column:4},end:{line:312,column:18}}],line:311},"24":{loc:{start:{line:311,column:8},end:{line:311,column:48}},type:"binary-expr",locations:[{start:{line:311,column:9},end:{line:311,column:24}},{start:{line:311,column:30},end:{line:311,column:47}}],line:311},"25":{loc:{start:{line:321,column:4},end:{line:322,column:18}},type:"if",locations:[{start:{line:321,column:4},end:{line:322,column:18}},{start:{line:321,column:4},end:{line:322,column:18}}],line:321},"26":{loc:{start:{line:321,column:8},end:{line:321,column:48}},type:"binary-expr",locations:[{start:{line:321,column:9},end:{line:321,column:24}},{start:{line:321,column:30},end:{line:321,column:47}}],line:321},"27":{loc:{start:{line:485,column:8},end:{line:485,column:43}},type:"cond-expr",locations:[{start:{line:485,column:24},end:{line:485,column:39}},{start:{line:485,column:42},end:{line:485,column:43}}],line:485},"28":{loc:{start:{line:486,column:4},end:{line:487,column:20}},type:"if",locations:[{start:{line:486,column:4},end:{line:487,column:20}},{start:{line:486,column:4},end:{line:487,column:20}}],line:486},"29":{loc:{start:{line:525,column:4},end:{line:530,column:5}},type:"if",locations:[{start:{line:525,column:4},end:{line:530,column:5}},{start:{line:525,column:4},end:{line:530,column:5}}],line:525},"30":{loc:{start:{line:531,column:14},end:{line:531,column:103}},type:"cond-expr",locations:[{start:{line:531,column:29},end:{line:531,column:51}},{start:{line:531,column:54},end:{line:531,column:103}}],line:531},"31":{loc:{start:{line:536,column:4},end:{line:536,column:32}},type:"if",locations:[{start:{line:536,column:4},end:{line:536,column:32}},{start:{line:536,column:4},end:{line:536,column:32}}],line:536},"32":{loc:{start:{line:545,column:4},end:{line:557,column:5}},type:"if",locations:[{start:{line:545,column:4},end:{line:557,column:5}},{start:{line:545,column:4},end:{line:557,column:5}}],line:545},"33":{loc:{start:{line:547,column:11},end:{line:557,column:5}},type:"if",locations:[{start:{line:547,column:11},end:{line:557,column:5}},{start:{line:547,column:11},end:{line:557,column:5}}],line:547},"34":{loc:{start:{line:549,column:11},end:{line:557,column:5}},type:"if",locations:[{start:{line:549,column:11},end:{line:557,column:5}},{start:{line:549,column:11},end:{line:557,column:5}}],line:549},"35":{loc:{start:{line:551,column:11},end:{line:557,column:5}},type:"if",locations:[{start:{line:551,column:11},end:{line:557,column:5}},{start:{line:551,column:11},end:{line:557,column:5}}],line:551},"36":{loc:{start:{line:553,column:11},end:{line:557,column:5}},type:"if",locations:[{start:{line:553,column:11},end:{line:557,column:5}},{start:{line:553,column:11},end:{line:557,column:5}}],line:553},"37":{loc:{start:{line:584,column:4},end:{line:589,column:5}},type:"if",locations:[{start:{line:584,column:4},end:{line:589,column:5}},{start:{line:584,column:4},end:{line:589,column:5}}],line:584},"38":{loc:{start:{line:595,column:4},end:{line:606,column:5}},type:"if",locations:[{start:{line:595,column:4},end:{line:606,column:5}},{start:{line:595,column:4},end:{line:606,column:5}}],line:595},"39":{loc:{start:{line:599,column:12},end:{line:599,column:59}},type:"cond-expr",locations:[{start:{line:599,column:22},end:{line:599,column:41}},{start:{line:599,column:44},end:{line:599,column:59}}],line:599},"40":{loc:{start:{line:600,column:8},end:{line:604,column:9}},type:"switch",locations:[{start:{line:601,column:12},end:{line:601,column:61}},{start:{line:602,column:12},end:{line:602,column:47}},{start:{line:603,column:12},end:{line:603,column:47}}],line:600},"41":{loc:{start:{line:601,column:39},end:{line:601,column:52}},type:"cond-expr",locations:[{start:{line:601,column:47},end:{line:601,column:48}},{start:{line:601,column:51},end:{line:601,column:52}}],line:601},"42":{loc:{start:{line:607,column:14},end:{line:607,column:89}},type:"cond-expr",locations:[{start:{line:607,column:29},end:{line:607,column:52}},{start:{line:607,column:55},end:{line:607,column:89}}],line:607},"43":{loc:{start:{line:622,column:4},end:{line:627,column:5}},type:"if",locations:[{start:{line:622,column:4},end:{line:627,column:5}},{start:{line:622,column:4},end:{line:627,column:5}}],line:622},"44":{loc:{start:{line:632,column:4},end:{line:668,column:5}},type:"if",locations:[{start:{line:632,column:4},end:{line:668,column:5}},{start:{line:632,column:4},end:{line:668,column:5}}],line:632},"45":{loc:{start:{line:632,column:8},end:{line:632,column:42}},type:"binary-expr",locations:[{start:{line:632,column:8},end:{line:632,column:23}},{start:{line:632,column:28},end:{line:632,column:41}}],line:632},"46":{loc:{start:{line:633,column:14},end:{line:633,column:37}},type:"cond-expr",locations:[{start:{line:633,column:28},end:{line:633,column:33}},{start:{line:633,column:36},end:{line:633,column:37}}],line:633},"47":{loc:{start:{line:634,column:8},end:{line:667,column:9}},type:"if",locations:[{start:{line:634,column:8},end:{line:667,column:9}},{start:{line:634,column:8},end:{line:667,column:9}}],line:634},"48":{loc:{start:{line:635,column:12},end:{line:648,column:13}},type:"switch",locations:[{start:{line:636,column:16},end:{line:636,column:23}},{start:{line:637,column:16},end:{line:640,column:26}},{start:{line:641,column:16},end:{line:641,column:23}},{start:{line:642,column:16},end:{line:645,column:26}},{start:{line:646,column:16},end:{line:647,column:59}}],line:635},"49":{loc:{start:{line:652,column:12},end:{line:666,column:13}},type:"if",locations:[{start:{line:652,column:12},end:{line:666,column:13}},{start:{line:652,column:12},end:{line:666,column:13}}],line:652},"50":{loc:{start:{line:652,column:16},end:{line:652,column:64}},type:"binary-expr",locations:[{start:{line:652,column:17},end:{line:652,column:31}},{start:{line:652,column:37},end:{line:652,column:63}}],line:652},"51":{loc:{start:{line:655,column:16},end:{line:663,column:17}},type:"switch",locations:[{start:{line:656,column:20},end:{line:656,column:27}},{start:{line:657,column:20},end:{line:660,column:30}},{start:{line:661,column:20},end:{line:662,column:66}}],line:655},"52":{loc:{start:{line:680,column:83},end:{line:680,column:104}},type:"cond-expr",locations:[{start:{line:680,column:97},end:{line:680,column:102}},{start:{line:680,column:103},end:{line:680,column:104}}],line:680},"53":{loc:{start:{line:682,column:4},end:{line:693,column:5}},type:"switch",locations:[{start:{line:683,column:8},end:{line:687,column:18}},{start:{line:688,column:8},end:{line:690,column:18}},{start:{line:691,column:8},end:{line:692,column:65}}],line:682},"54":{loc:{start:{line:685,column:12},end:{line:686,column:30}},type:"if",locations:[{start:{line:685,column:12},end:{line:686,column:30}},{start:{line:685,column:12},end:{line:686,column:30}}],line:685},"55":{loc:{start:{line:685,column:18},end:{line:685,column:51}},type:"binary-expr",locations:[{start:{line:685,column:19},end:{line:685,column:35}},{start:{line:685,column:41},end:{line:685,column:50}}],line:685},"56":{loc:{start:{line:707,column:4},end:{line:708,column:17}},type:"if",locations:[{start:{line:707,column:4},end:{line:708,column:17}},{start:{line:707,column:4},end:{line:708,column:17}}],line:707},"57":{loc:{start:{line:710,column:4},end:{line:718,column:5}},type:"switch",locations:[{start:{line:711,column:8},end:{line:712,column:18}},{start:{line:713,column:8},end:{line:715,column:18}},{start:{line:716,column:8},end:{line:717,column:72}}],line:710},"58":{loc:{start:{line:721,column:4},end:{line:729,column:5}},type:"switch",locations:[{start:{line:722,column:8},end:{line:723,column:18}},{start:{line:724,column:8},end:{line:726,column:18}},{start:{line:727,column:8},end:{line:728,column:72}}],line:721},"59":{loc:{start:{line:754,column:4},end:{line:757,column:5}},type:"if",locations:[{start:{line:754,column:4},end:{line:757,column:5}},{start:{line:754,column:4},end:{line:757,column:5}}],line:754},"60":{loc:{start:{line:754,column:8},end:{line:754,column:68}},type:"binary-expr",locations:[{start:{line:754,column:9},end:{line:754,column:31}},{start:{line:754,column:37},end:{line:754,column:67}}],line:754},"61":{loc:{start:{line:760,column:14},end:{line:760,column:74}},type:"cond-expr",locations:[{start:{line:760,column:45},end:{line:760,column:50}},{start:{line:760,column:53},end:{line:760,column:74}}],line:760},"62":{loc:{start:{line:762,column:4},end:{line:763,column:75}},type:"if",locations:[{start:{line:762,column:4},end:{line:763,column:75}},{start:{line:762,column:4},end:{line:763,column:75}}],line:762},"63":{loc:{start:{line:762,column:8},end:{line:762,column:71}},type:"binary-expr",locations:[{start:{line:762,column:9},end:{line:762,column:34}},{start:{line:762,column:40},end:{line:762,column:70}}],line:762},"64":{loc:{start:{line:788,column:20},end:{line:788,column:81}},type:"cond-expr",locations:[{start:{line:788,column:46},end:{line:788,column:76}},{start:{line:788,column:79},end:{line:788,column:81}}],line:788},"65":{loc:{start:{line:790,column:4},end:{line:796,column:5}},type:"if",locations:[{start:{line:790,column:4},end:{line:796,column:5}},{start:{line:790,column:4},end:{line:796,column:5}}],line:790},"66":{loc:{start:{line:822,column:4},end:{line:824,column:5}},type:"if",locations:[{start:{line:822,column:4},end:{line:824,column:5}},{start:{line:822,column:4},end:{line:824,column:5}}],line:822},"67":{loc:{start:{line:826,column:4},end:{line:828,column:5}},type:"if",locations:[{start:{line:826,column:4},end:{line:828,column:5}},{start:{line:826,column:4},end:{line:828,column:5}}],line:826},"68":{loc:{start:{line:859,column:8},end:{line:859,column:76}},type:"if",locations:[{start:{line:859,column:8},end:{line:859,column:76}},{start:{line:859,column:8},end:{line:859,column:76}}],line:859},"69":{loc:{start:{line:877,column:4},end:{line:878,column:28}},type:"if",locations:[{start:{line:877,column:4},end:{line:878,column:28}},{start:{line:877,column:4},end:{line:878,column:28}}],line:877},"70":{loc:{start:{line:877,column:8},end:{line:877,column:61}},type:"binary-expr",locations:[{start:{line:877,column:9},end:{line:877,column:29}},{start:{line:877,column:35},end:{line:877,column:60}}],line:877},"71":{loc:{start:{line:880,column:8},end:{line:882,column:9}},type:"if",locations:[{start:{line:880,column:8},end:{line:882,column:9}},{start:{line:880,column:8},end:{line:882,column:9}}],line:880},"72":{loc:{start:{line:894,column:4},end:{line:895,column:68}},type:"if",locations:[{start:{line:894,column:4},end:{line:895,column:68}},{start:{line:894,column:4},end:{line:895,column:68}}],line:894},"73":{loc:{start:{line:895,column:14},end:{line:895,column:67}},type:"cond-expr",locations:[{start:{line:895,column:42},end:{line:895,column:62}},{start:{line:895,column:65},end:{line:895,column:67}}],line:895},"74":{loc:{start:{line:898,column:11},end:{line:898,column:55}},type:"cond-expr",locations:[{start:{line:898,column:31},end:{line:898,column:44}},{start:{line:898,column:47},end:{line:898,column:55}}],line:898},"75":{loc:{start:{line:917,column:61},end:{line:917,column:84}},type:"cond-expr",locations:[{start:{line:917,column:75},end:{line:917,column:79}},{start:{line:917,column:82},end:{line:917,column:84}}],line:917},"76":{loc:{start:{line:918,column:36},end:{line:918,column:68}},type:"cond-expr",locations:[{start:{line:918,column:48},end:{line:918,column:49}},{start:{line:918,column:52},end:{line:918,column:68}}],line:918},"77":{loc:{start:{line:922,column:12},end:{line:923,column:25}},type:"if",locations:[{start:{line:922,column:12},end:{line:923,column:25}},{start:{line:922,column:12},end:{line:923,column:25}}],line:922},"78":{loc:{start:{line:924,column:47},end:{line:924,column:119}},type:"cond-expr",locations:[{start:{line:924,column:69},end:{line:924,column:112}},{start:{line:924,column:115},end:{line:924,column:119}}],line:924},"79":{loc:{start:{line:926,column:8},end:{line:927,column:26}},type:"if",locations:[{start:{line:926,column:8},end:{line:927,column:26}},{start:{line:926,column:8},end:{line:927,column:26}}],line:926},"80":{loc:{start:{line:928,column:15},end:{line:928,column:66}},type:"cond-expr",locations:[{start:{line:928,column:44},end:{line:928,column:55}},{start:{line:928,column:58},end:{line:928,column:66}}],line:928},"81":{loc:{start:{line:946,column:4},end:{line:953,column:13}},type:"if",locations:[{start:{line:946,column:4},end:{line:953,column:13}},{start:{line:946,column:4},end:{line:953,column:13}}],line:946},"82":{loc:{start:{line:955,column:12},end:{line:955,column:35}},type:"cond-expr",locations:[{start:{line:955,column:27},end:{line:955,column:30}},{start:{line:955,column:33},end:{line:955,column:35}}],line:955},"83":{loc:{start:{line:988,column:8},end:{line:988,column:82}},type:"if",locations:[{start:{line:988,column:8},end:{line:988,column:82}},{start:{line:988,column:8},end:{line:988,column:82}}],line:988},"84":{loc:{start:{line:994,column:12},end:{line:1005,column:36}},type:"if",locations:[{start:{line:994,column:12},end:{line:1005,column:36}},{start:{line:994,column:12},end:{line:1005,column:36}}],line:994},"85":{loc:{start:{line:995,column:16},end:{line:999,column:17}},type:"if",locations:[{start:{line:995,column:16},end:{line:999,column:17}},{start:{line:995,column:16},end:{line:999,column:17}}],line:995},"86":{loc:{start:{line:1000,column:19},end:{line:1005,column:36}},type:"if",locations:[{start:{line:1000,column:19},end:{line:1005,column:36}},{start:{line:1000,column:19},end:{line:1005,column:36}}],line:1000},"87":{loc:{start:{line:1002,column:19},end:{line:1005,column:36}},type:"if",locations:[{start:{line:1002,column:19},end:{line:1005,column:36}},{start:{line:1002,column:19},end:{line:1005,column:36}}],line:1002},"88":{loc:{start:{line:1050,column:53},end:{line:1050,column:71}},type:"cond-expr",locations:[{start:{line:1050,column:63},end:{line:1050,column:66}},{start:{line:1050,column:67},end:{line:1050,column:71}}],line:1050},"89":{loc:{start:{line:1050,column:80},end:{line:1050,column:103}},type:"cond-expr",locations:[{start:{line:1050,column:97},end:{line:1050,column:99}},{start:{line:1050,column:100},end:{line:1050,column:103}}],line:1050},"90":{loc:{start:{line:1053,column:8},end:{line:1108,column:9}},type:"switch",locations:[{start:{line:1054,column:12},end:{line:1056,column:22}},{start:{line:1057,column:12},end:{line:1105,column:22}},{start:{line:1106,column:12},end:{line:1107,column:21}}],line:1053},"91":{loc:{start:{line:1061,column:20},end:{line:1102,column:21}},type:"switch",locations:[{start:{line:1062,column:24},end:{line:1064,column:34}},{start:{line:1065,column:24},end:{line:1100,column:34}},{start:{line:1101,column:24},end:{line:1101,column:32}}],line:1061},"92":{loc:{start:{line:1067,column:28},end:{line:1070,column:29}},type:"if",locations:[{start:{line:1067,column:28},end:{line:1070,column:29}},{start:{line:1067,column:28},end:{line:1070,column:29}}],line:1067},"93":{loc:{start:{line:1067,column:32},end:{line:1067,column:72}},type:"binary-expr",locations:[{start:{line:1067,column:33},end:{line:1067,column:46}},{start:{line:1067,column:52},end:{line:1067,column:71}}],line:1067},"94":{loc:{start:{line:1072,column:28},end:{line:1098,column:29}},type:"if",locations:[{start:{line:1072,column:28},end:{line:1098,column:29}},{start:{line:1072,column:28},end:{line:1098,column:29}}],line:1072},"95":{loc:{start:{line:1074,column:32},end:{line:1079,column:33}},type:"if",locations:[{start:{line:1074,column:32},end:{line:1079,column:33}},{start:{line:1074,column:32},end:{line:1079,column:33}}],line:1074},"96":{loc:{start:{line:1081,column:32},end:{line:1095,column:33}},type:"switch",locations:[{start:{line:1082,column:36},end:{line:1084,column:46}},{start:{line:1085,column:36},end:{line:1091,column:46}},{start:{line:1092,column:36},end:{line:1092,column:50}},{start:{line:1093,column:36},end:{line:1094,column:58}}],line:1081},"97":{loc:{start:{line:1111,column:4},end:{line:1113,column:5}},type:"if",locations:[{start:{line:1111,column:4},end:{line:1113,column:5}},{start:{line:1111,column:4},end:{line:1113,column:5}}],line:1111},"98":{loc:{start:{line:1140,column:25},end:{line:1140,column:44}},type:"cond-expr",locations:[{start:{line:1140,column:38},end:{line:1140,column:41}},{start:{line:1140,column:42},end:{line:1140,column:44}}],line:1140},"99":{loc:{start:{line:1140,column:49},end:{line:1140,column:69}},type:"cond-expr",locations:[{start:{line:1140,column:62},end:{line:1140,column:66}},{start:{line:1140,column:67},end:{line:1140,column:69}}],line:1140},"100":{loc:{start:{line:1143,column:8},end:{line:1150,column:9}},type:"if",locations:[{start:{line:1143,column:8},end:{line:1150,column:9}},{start:{line:1143,column:8},end:{line:1150,column:9}}],line:1143},"101":{loc:{start:{line:1290,column:4},end:{line:1327,column:5}},type:"switch",locations:[{start:{line:1291,column:8},end:{line:1291,column:21}},{start:{line:1292,column:8},end:{line:1294,column:18}},{start:{line:1295,column:8},end:{line:1305,column:18}},{start:{line:1306,column:8},end:{line:1320,column:18}},{start:{line:1321,column:8},end:{line:1324,column:18}},{start:{line:1325,column:8},end:{line:1326,column:30}}],line:1290},"102":{loc:{start:{line:1296,column:103},end:{line:1296,column:132}},type:"cond-expr",locations:[{start:{line:1296,column:115},end:{line:1296,column:122}},{start:{line:1296,column:125},end:{line:1296,column:132}}],line:1296},"103":{loc:{start:{line:1298,column:23},end:{line:1298,column:45}},type:"cond-expr",locations:[{start:{line:1298,column:34},end:{line:1298,column:38}},{start:{line:1298,column:41},end:{line:1298,column:45}}],line:1298},"104":{loc:{start:{line:1299,column:16},end:{line:1303,column:17}},type:"if",locations:[{start:{line:1299,column:16},end:{line:1303,column:17}},{start:{line:1299,column:16},end:{line:1303,column:17}}],line:1299},"105":{loc:{start:{line:1308,column:16},end:{line:1308,column:45}},type:"cond-expr",locations:[{start:{line:1308,column:33},end:{line:1308,column:34}},{start:{line:1308,column:37},end:{line:1308,column:45}}],line:1308},"106":{loc:{start:{line:1314,column:16},end:{line:1318,column:17}},type:"if",locations:[{start:{line:1314,column:16},end:{line:1318,column:17}},{start:{line:1314,column:16},end:{line:1318,column:17}}],line:1314},"107":{loc:{start:{line:1334,column:54},end:{line:1334,column:91}},type:"cond-expr",locations:[{start:{line:1334,column:80},end:{line:1334,column:87}},{start:{line:1334,column:90},end:{line:1334,column:91}}],line:1334},"108":{loc:{start:{line:1338,column:4},end:{line:1376,column:5}},type:"switch",locations:[{start:{line:1339,column:8},end:{line:1339,column:21}},{start:{line:1340,column:8},end:{line:1342,column:18}},{start:{line:1343,column:8},end:{line:1353,column:18}},{start:{line:1354,column:8},end:{line:1368,column:18}},{start:{line:1369,column:8},end:{line:1373,column:18}},{start:{line:1374,column:8},end:{line:1375,column:30}}],line:1338},"109":{loc:{start:{line:1344,column:103},end:{line:1344,column:132}},type:"cond-expr",locations:[{start:{line:1344,column:115},end:{line:1344,column:122}},{start:{line:1344,column:125},end:{line:1344,column:132}}],line:1344},"110":{loc:{start:{line:1346,column:23},end:{line:1346,column:45}},type:"cond-expr",locations:[{start:{line:1346,column:34},end:{line:1346,column:38}},{start:{line:1346,column:41},end:{line:1346,column:45}}],line:1346},"111":{loc:{start:{line:1347,column:16},end:{line:1351,column:17}},type:"if",locations:[{start:{line:1347,column:16},end:{line:1351,column:17}},{start:{line:1347,column:16},end:{line:1351,column:17}}],line:1347},"112":{loc:{start:{line:1356,column:16},end:{line:1356,column:45}},type:"cond-expr",locations:[{start:{line:1356,column:33},end:{line:1356,column:34}},{start:{line:1356,column:37},end:{line:1356,column:45}}],line:1356},"113":{loc:{start:{line:1362,column:16},end:{line:1366,column:17}},type:"if",locations:[{start:{line:1362,column:16},end:{line:1366,column:17}},{start:{line:1362,column:16},end:{line:1366,column:17}}],line:1362},"114":{loc:{start:{line:1372,column:16},end:{line:1372,column:114}},type:"cond-expr",locations:[{start:{line:1372,column:37},end:{line:1372,column:110}},{start:{line:1372,column:113},end:{line:1372,column:114}}],line:1372},"115":{loc:{start:{line:1476,column:15},end:{line:1476,column:55}},type:"cond-expr",locations:[{start:{line:1476,column:32},end:{line:1476,column:52}},{start:{line:1476,column:54},end:{line:1476,column:55}}],line:1476},"116":{loc:{start:{line:1485,column:4},end:{line:1537,column:5}},type:"switch",locations:[{start:{line:1486,column:8},end:{line:1486,column:20}},{start:{line:1487,column:8},end:{line:1488,column:24}},{start:{line:1489,column:8},end:{line:1492,column:18}},{start:{line:1493,column:8},end:{line:1495,column:18}},{start:{line:1496,column:8},end:{line:1507,column:18}},{start:{line:1508,column:8},end:{line:1534,column:18}},{start:{line:1535,column:8},end:{line:1536,column:46}}],line:1485},"117":{loc:{start:{line:1498,column:12},end:{line:1499,column:26}},type:"if",locations:[{start:{line:1498,column:12},end:{line:1499,column:26}},{start:{line:1498,column:12},end:{line:1499,column:26}}],line:1498},"118":{loc:{start:{line:1498,column:16},end:{line:1498,column:59}},type:"binary-expr",locations:[{start:{line:1498,column:17},end:{line:1498,column:41}},{start:{line:1498,column:46},end:{line:1498,column:59}}],line:1498},"119":{loc:{start:{line:1500,column:16},end:{line:1500,column:50}},type:"cond-expr",locations:[{start:{line:1500,column:43},end:{line:1500,column:47}},{start:{line:1500,column:49},end:{line:1500,column:50}}],line:1500},"120":{loc:{start:{line:1501,column:16},end:{line:1501,column:50}},type:"cond-expr",locations:[{start:{line:1501,column:43},end:{line:1501,column:47}},{start:{line:1501,column:49},end:{line:1501,column:50}}],line:1501},"121":{loc:{start:{line:1502,column:16},end:{line:1502,column:50}},type:"cond-expr",locations:[{start:{line:1502,column:43},end:{line:1502,column:47}},{start:{line:1502,column:49},end:{line:1502,column:50}}],line:1502},"122":{loc:{start:{line:1503,column:16},end:{line:1503,column:50}},type:"cond-expr",locations:[{start:{line:1503,column:43},end:{line:1503,column:46}},{start:{line:1503,column:49},end:{line:1503,column:50}}],line:1503},"123":{loc:{start:{line:1504,column:16},end:{line:1504,column:50}},type:"cond-expr",locations:[{start:{line:1504,column:43},end:{line:1504,column:46}},{start:{line:1504,column:49},end:{line:1504,column:50}}],line:1504},"124":{loc:{start:{line:1505,column:16},end:{line:1505,column:50}},type:"cond-expr",locations:[{start:{line:1505,column:43},end:{line:1505,column:46}},{start:{line:1505,column:49},end:{line:1505,column:50}}],line:1505},"125":{loc:{start:{line:1506,column:16},end:{line:1506,column:50}},type:"cond-expr",locations:[{start:{line:1506,column:43},end:{line:1506,column:46}},{start:{line:1506,column:49},end:{line:1506,column:50}}],line:1506},"126":{loc:{start:{line:1509,column:16},end:{line:1509,column:70}},type:"cond-expr",locations:[{start:{line:1509,column:52},end:{line:1509,column:60}},{start:{line:1509,column:69},end:{line:1509,column:70}}],line:1509},"127":{loc:{start:{line:1510,column:16},end:{line:1510,column:70}},type:"cond-expr",locations:[{start:{line:1510,column:52},end:{line:1510,column:62}},{start:{line:1510,column:69},end:{line:1510,column:70}}],line:1510},"128":{loc:{start:{line:1511,column:16},end:{line:1511,column:70}},type:"cond-expr",locations:[{start:{line:1511,column:52},end:{line:1511,column:58}},{start:{line:1511,column:69},end:{line:1511,column:70}}],line:1511},"129":{loc:{start:{line:1512,column:16},end:{line:1512,column:70}},type:"cond-expr",locations:[{start:{line:1512,column:52},end:{line:1512,column:60}},{start:{line:1512,column:69},end:{line:1512,column:70}}],line:1512},"130":{loc:{start:{line:1514,column:16},end:{line:1514,column:70}},type:"cond-expr",locations:[{start:{line:1514,column:52},end:{line:1514,column:60}},{start:{line:1514,column:69},end:{line:1514,column:70}}],line:1514},"131":{loc:{start:{line:1515,column:16},end:{line:1515,column:70}},type:"cond-expr",locations:[{start:{line:1515,column:52},end:{line:1515,column:62}},{start:{line:1515,column:69},end:{line:1515,column:70}}],line:1515},"132":{loc:{start:{line:1516,column:16},end:{line:1516,column:70}},type:"cond-expr",locations:[{start:{line:1516,column:52},end:{line:1516,column:58}},{start:{line:1516,column:69},end:{line:1516,column:70}}],line:1516},"133":{loc:{start:{line:1517,column:16},end:{line:1517,column:70}},type:"cond-expr",locations:[{start:{line:1517,column:52},end:{line:1517,column:60}},{start:{line:1517,column:69},end:{line:1517,column:70}}],line:1517},"134":{loc:{start:{line:1518,column:12},end:{line:1525,column:13}},type:"switch",locations:[{start:{line:1519,column:16},end:{line:1520,column:46}},{start:{line:1521,column:16},end:{line:1522,column:44}},{start:{line:1523,column:16},end:{line:1524,column:39}}],line:1518},"135":{loc:{start:{line:1526,column:12},end:{line:1533,column:13}},type:"switch",locations:[{start:{line:1527,column:16},end:{line:1528,column:40}},{start:{line:1529,column:16},end:{line:1530,column:38}},{start:{line:1531,column:16},end:{line:1532,column:33}}],line:1526},"136":{loc:{start:{line:1548,column:8},end:{line:1557,column:9}},type:"switch",locations:[{start:{line:1549,column:12},end:{line:1550,column:28}},{start:{line:1551,column:12},end:{line:1551,column:26}},{start:{line:1552,column:12},end:{line:1554,column:18}},{start:{line:1555,column:12},end:{line:1556,column:31}}],line:1548},"137":{loc:{start:{line:1574,column:4},end:{line:1575,column:41}},type:"if",locations:[{start:{line:1574,column:4},end:{line:1575,column:41}},{start:{line:1574,column:4},end:{line:1575,column:41}}],line:1574},"138":{loc:{start:{line:1589,column:4},end:{line:1590,column:18}},type:"if",locations:[{start:{line:1589,column:4},end:{line:1590,column:18}},{start:{line:1589,column:4},end:{line:1590,column:18}}],line:1589},"139":{loc:{start:{line:1592,column:4},end:{line:1593,column:18}},type:"if",locations:[{start:{line:1592,column:4},end:{line:1593,column:18}},{start:{line:1592,column:4},end:{line:1593,column:18}}],line:1592},"140":{loc:{start:{line:1599,column:15},end:{line:1599,column:67}},type:"cond-expr",locations:[{start:{line:1599,column:52},end:{line:1599,column:56}},{start:{line:1599,column:59},end:{line:1599,column:67}}],line:1599},"141":{loc:{start:{line:1624,column:68},end:{line:1624,column:127}},type:"cond-expr",locations:[{start:{line:1624,column:89},end:{line:1624,column:90}},{start:{line:1624,column:93},end:{line:1624,column:127}}],line:1624},"142":{loc:{start:{line:1640,column:69},end:{line:1640,column:128}},type:"cond-expr",locations:[{start:{line:1640,column:90},end:{line:1640,column:91}},{start:{line:1640,column:94},end:{line:1640,column:128}}],line:1640},"143":{loc:{start:{line:1652,column:4},end:{line:1653,column:18}},type:"if",locations:[{start:{line:1652,column:4},end:{line:1653,column:18}},{start:{line:1652,column:4},end:{line:1653,column:18}}],line:1652},"144":{loc:{start:{line:1654,column:4},end:{line:1655,column:18}},type:"if",locations:[{start:{line:1654,column:4},end:{line:1655,column:18}},{start:{line:1654,column:4},end:{line:1655,column:18}}],line:1654},"145":{loc:{start:{line:1702,column:4},end:{line:1703,column:18}},type:"if",locations:[{start:{line:1702,column:4},end:{line:1703,column:18}},{start:{line:1702,column:4},end:{line:1703,column:18}}],line:1702},"146":{loc:{start:{line:1702,column:8},end:{line:1702,column:51}},type:"binary-expr",locations:[{start:{line:1702,column:9},end:{line:1702,column:29}},{start:{line:1702,column:35},end:{line:1702,column:50}}],line:1702},"147":{loc:{start:{line:1725,column:4},end:{line:1727,column:5}},type:"if",locations:[{start:{line:1725,column:4},end:{line:1727,column:5}},{start:{line:1725,column:4},end:{line:1727,column:5}}],line:1725},"148":{loc:{start:{line:1729,column:4},end:{line:1742,column:5}},type:"if",locations:[{start:{line:1729,column:4},end:{line:1742,column:5}},{start:{line:1729,column:4},end:{line:1742,column:5}}],line:1729},"149":{loc:{start:{line:1731,column:8},end:{line:1734,column:56}},type:"if",locations:[{start:{line:1731,column:8},end:{line:1734,column:56}},{start:{line:1731,column:8},end:{line:1734,column:56}}],line:1731},"150":{loc:{start:{line:1732,column:38},end:{line:1732,column:133}},type:"cond-expr",locations:[{start:{line:1732,column:108},end:{line:1732,column:128}},{start:{line:1732,column:131},end:{line:1732,column:133}}],line:1732},"151":{loc:{start:{line:1737,column:8},end:{line:1741,column:9}},type:"if",locations:[{start:{line:1737,column:8},end:{line:1741,column:9}},{start:{line:1737,column:8},end:{line:1741,column:9}}],line:1737},"152":{loc:{start:{line:1744,column:4},end:{line:1750,column:12}},type:"if",locations:[{start:{line:1744,column:4},end:{line:1750,column:12}},{start:{line:1744,column:4},end:{line:1750,column:12}}],line:1744},"153":{loc:{start:{line:1759,column:20},end:{line:1759,column:81}},type:"cond-expr",locations:[{start:{line:1759,column:42},end:{line:1759,column:44}},{start:{line:1759,column:48},end:{line:1759,column:81}}],line:1759},"154":{loc:{start:{line:1774,column:4},end:{line:1775,column:17}},type:"if",locations:[{start:{line:1774,column:4},end:{line:1775,column:17}},{start:{line:1774,column:4},end:{line:1775,column:17}}],line:1774},"155":{loc:{start:{line:1802,column:4},end:{line:1804,column:5}},type:"if",locations:[{start:{line:1802,column:4},end:{line:1804,column:5}},{start:{line:1802,column:4},end:{line:1804,column:5}}],line:1802},"156":{loc:{start:{line:1806,column:14},end:{line:1806,column:76}},type:"cond-expr",locations:[{start:{line:1806,column:41},end:{line:1806,column:51}},{start:{line:1806,column:54},end:{line:1806,column:76}}],line:1806},"157":{loc:{start:{line:1809,column:4},end:{line:1821,column:5}},type:"if",locations:[{start:{line:1809,column:4},end:{line:1821,column:5}},{start:{line:1809,column:4},end:{line:1821,column:5}}],line:1809},"158":{loc:{start:{line:1811,column:58},end:{line:1811,column:77}},type:"if",locations:[{start:{line:1811,column:58},end:{line:1811,column:77}},{start:{line:1811,column:58},end:{line:1811,column:77}}],line:1811},"159":{loc:{start:{line:1819,column:25},end:{line:1819,column:104}},type:"if",locations:[{start:{line:1819,column:25},end:{line:1819,column:104}},{start:{line:1819,column:25},end:{line:1819,column:104}}],line:1819},"160":{loc:{start:{line:1819,column:29},end:{line:1819,column:67}},type:"binary-expr",locations:[{start:{line:1819,column:29},end:{line:1819,column:46}},{start:{line:1819,column:50},end:{line:1819,column:67}}],line:1819},"161":{loc:{start:{line:1858,column:4},end:{line:1859,column:15}},type:"if",locations:[{start:{line:1858,column:4},end:{line:1859,column:15}},{start:{line:1858,column:4},end:{line:1859,column:15}}],line:1858},"162":{loc:{start:{line:1879,column:4},end:{line:1903,column:5}},type:"if",locations:[{start:{line:1879,column:4},end:{line:1903,column:5}},{start:{line:1879,column:4},end:{line:1903,column:5}}],line:1879},"163":{loc:{start:{line:1882,column:16},end:{line:1882,column:44}},type:"if",locations:[{start:{line:1882,column:16},end:{line:1882,column:44}},{start:{line:1882,column:16},end:{line:1882,column:44}}],line:1882},"164":{loc:{start:{line:1921,column:4},end:{line:1922,column:32}},type:"if",locations:[{start:{line:1921,column:4},end:{line:1922,column:32}},{start:{line:1921,column:4},end:{line:1922,column:32}}],line:1921},"165":{loc:{start:{line:1933,column:4},end:{line:1934,column:32}},type:"if",locations:[{start:{line:1933,column:4},end:{line:1934,column:32}},{start:{line:1933,column:4},end:{line:1934,column:32}}],line:1933},"166":{loc:{start:{line:1953,column:8},end:{line:1955,column:9}},type:"if",locations:[{start:{line:1953,column:8},end:{line:1955,column:9}},{start:{line:1953,column:8},end:{line:1955,column:9}}],line:1953},"167":{loc:{start:{line:1982,column:4},end:{line:1983,column:19}},type:"if",locations:[{start:{line:1982,column:4},end:{line:1983,column:19}},{start:{line:1982,column:4},end:{line:1983,column:19}}],line:1982},"168":{loc:{start:{line:1984,column:4},end:{line:1985,column:18}},type:"if",locations:[{start:{line:1984,column:4},end:{line:1985,column:18}},{start:{line:1984,column:4},end:{line:1985,column:18}}],line:1984},"169":{loc:{start:{line:1986,column:4},end:{line:1987,column:18}},type:"if",locations:[{start:{line:1986,column:4},end:{line:1987,column:18}},{start:{line:1986,column:4},end:{line:1987,column:18}}],line:1986},"170":{loc:{start:{line:1990,column:21},end:{line:1990,column:82}},type:"cond-expr",locations:[{start:{line:1990,column:56},end:{line:1990,column:65}},{start:{line:1990,column:68},end:{line:1990,column:82}}],line:1990},"171":{loc:{start:{line:1991,column:18},end:{line:1991,column:73}},type:"cond-expr",locations:[{start:{line:1991,column:50},end:{line:1991,column:56}},{start:{line:1991,column:59},end:{line:1991,column:73}}],line:1991},"172":{loc:{start:{line:1992,column:18},end:{line:1992,column:73}},type:"cond-expr",locations:[{start:{line:1992,column:50},end:{line:1992,column:56}},{start:{line:1992,column:59},end:{line:1992,column:73}}],line:1992},"173":{loc:{start:{line:1996,column:8},end:{line:2010,column:9}},type:"if",locations:[{start:{line:1996,column:8},end:{line:2010,column:9}},{start:{line:1996,column:8},end:{line:2010,column:9}}],line:1996},"174":{loc:{start:{line:2003,column:12},end:{line:2009,column:13}},type:"if",locations:[{start:{line:2003,column:12},end:{line:2009,column:13}},{start:{line:2003,column:12},end:{line:2009,column:13}}],line:2003},"175":{loc:{start:{line:2065,column:4},end:{line:2065,column:63}},type:"if",locations:[{start:{line:2065,column:4},end:{line:2065,column:63}},{start:{line:2065,column:4},end:{line:2065,column:63}}],line:2065},"176":{loc:{start:{line:2065,column:7},end:{line:2065,column:35}},type:"binary-expr",locations:[{start:{line:2065,column:7},end:{line:2065,column:19}},{start:{line:2065,column:23},end:{line:2065,column:35}}],line:2065},"177":{loc:{start:{line:2068,column:4},end:{line:2068,column:40}},type:"if",locations:[{start:{line:2068,column:4},end:{line:2068,column:40}},{start:{line:2068,column:4},end:{line:2068,column:40}}],line:2068},"178":{loc:{start:{line:2068,column:22},end:{line:2068,column:39}},type:"cond-expr",locations:[{start:{line:2068,column:34},end:{line:2068,column:35}},{start:{line:2068,column:38},end:{line:2068,column:39}}],line:2068},"179":{loc:{start:{line:2069,column:4},end:{line:2069,column:54}},type:"if",locations:[{start:{line:2069,column:4},end:{line:2069,column:54}},{start:{line:2069,column:4},end:{line:2069,column:54}}],line:2069},"180":{loc:{start:{line:2069,column:9},end:{line:2069,column:33}},type:"binary-expr",locations:[{start:{line:2069,column:9},end:{line:2069,column:19}},{start:{line:2069,column:23},end:{line:2069,column:33}}],line:2069},"181":{loc:{start:{line:2069,column:43},end:{line:2069,column:53}},type:"cond-expr",locations:[{start:{line:2069,column:49},end:{line:2069,column:50}},{start:{line:2069,column:51},end:{line:2069,column:53}}],line:2069},"182":{loc:{start:{line:2072,column:7},end:{line:2072,column:44}},type:"cond-expr",locations:[{start:{line:2072,column:27},end:{line:2072,column:35}},{start:{line:2072,column:36},end:{line:2072,column:44}}],line:2072},"183":{loc:{start:{line:2076,column:8},end:{line:2083,column:9}},type:"if",locations:[{start:{line:2076,column:8},end:{line:2083,column:9}},{start:{line:2076,column:8},end:{line:2083,column:9}}],line:2076},"184":{loc:{start:{line:2077,column:12},end:{line:2082,column:37}},type:"if",locations:[{start:{line:2077,column:12},end:{line:2082,column:37}},{start:{line:2077,column:12},end:{line:2082,column:37}}],line:2077},"185":{loc:{start:{line:2077,column:15},end:{line:2077,column:43}},type:"binary-expr",locations:[{start:{line:2077,column:15},end:{line:2077,column:27}},{start:{line:2077,column:31},end:{line:2077,column:43}}],line:2077},"186":{loc:{start:{line:2078,column:16},end:{line:2078,column:53}},type:"if",locations:[{start:{line:2078,column:16},end:{line:2078,column:53}},{start:{line:2078,column:16},end:{line:2078,column:53}}],line:2078},"187":{loc:{start:{line:2079,column:16},end:{line:2079,column:53}},type:"if",locations:[{start:{line:2079,column:16},end:{line:2079,column:53}},{start:{line:2079,column:16},end:{line:2079,column:53}}],line:2079},"188":{loc:{start:{line:2082,column:24},end:{line:2082,column:36}},type:"cond-expr",locations:[{start:{line:2082,column:32},end:{line:2082,column:33}},{start:{line:2082,column:34},end:{line:2082,column:36}}],line:2082},"189":{loc:{start:{line:2101,column:16},end:{line:2101,column:82}},type:"cond-expr",locations:[{start:{line:2101,column:50},end:{line:2101,column:62}},{start:{line:2101,column:65},end:{line:2101,column:82}}],line:2101},"190":{loc:{start:{line:2105,column:10},end:{line:2105,column:51}},type:"cond-expr",locations:[{start:{line:2105,column:39},end:{line:2105,column:43}},{start:{line:2105,column:46},end:{line:2105,column:51}}],line:2105},"191":{loc:{start:{line:2105,column:10},end:{line:2105,column:36}},type:"binary-expr",locations:[{start:{line:2105,column:11},end:{line:2105,column:20}},{start:{line:2105,column:26},end:{line:2105,column:35}}],line:2105},"192":{loc:{start:{line:2108,column:10},end:{line:2108,column:40}},type:"cond-expr",locations:[{start:{line:2108,column:33},end:{line:2108,column:36}},{start:{line:2108,column:39},end:{line:2108,column:40}}],line:2108},"193":{loc:{start:{line:2126,column:27},end:{line:2126,column:74}},type:"cond-expr",locations:[{start:{line:2126,column:35},end:{line:2126,column:53}},{start:{line:2126,column:56},end:{line:2126,column:74}}],line:2126},"194":{loc:{start:{line:2127,column:12},end:{line:2128,column:22}},type:"if",locations:[{start:{line:2127,column:12},end:{line:2128,column:22}},{start:{line:2127,column:12},end:{line:2128,column:22}}],line:2127},"195":{loc:{start:{line:2131,column:8},end:{line:2135,column:9}},type:"if",locations:[{start:{line:2131,column:8},end:{line:2135,column:9}},{start:{line:2131,column:8},end:{line:2135,column:9}}],line:2131},"196":{loc:{start:{line:2149,column:4},end:{line:2150,column:20}},type:"if",locations:[{start:{line:2149,column:4},end:{line:2150,column:20}},{start:{line:2149,column:4},end:{line:2150,column:20}}],line:2149},"197":{loc:{start:{line:2156,column:8},end:{line:2173,column:9}},type:"if",locations:[{start:{line:2156,column:8},end:{line:2173,column:9}},{start:{line:2156,column:8},end:{line:2173,column:9}}],line:2156},"198":{loc:{start:{line:2159,column:12},end:{line:2167,column:13}},type:"if",locations:[{start:{line:2159,column:12},end:{line:2167,column:13}},{start:{line:2159,column:12},end:{line:2167,column:13}}],line:2159},"199":{loc:{start:{line:2163,column:16},end:{line:2166,column:83}},type:"if",locations:[{start:{line:2163,column:16},end:{line:2166,column:83}},{start:{line:2163,column:16},end:{line:2166,column:83}}],line:2163},"200":{loc:{start:{line:2208,column:11},end:{line:2208,column:56}},type:"cond-expr",locations:[{start:{line:2208,column:40},end:{line:2208,column:49}},{start:{line:2208,column:52},end:{line:2208,column:56}}],line:2208},"201":{loc:{start:{line:2219,column:4},end:{line:2220,column:33}},type:"if",locations:[{start:{line:2219,column:4},end:{line:2220,column:33}},{start:{line:2219,column:4},end:{line:2220,column:33}}],line:2219},"202":{loc:{start:{line:2235,column:4},end:{line:2240,column:5}},type:"if",locations:[{start:{line:2235,column:4},end:{line:2240,column:5}},{start:{line:2235,column:4},end:{line:2240,column:5}}],line:2235},"203":{loc:{start:{line:2239,column:15},end:{line:2239,column:118}},type:"cond-expr",locations:[{start:{line:2239,column:44},end:{line:2239,column:49}},{start:{line:2239,column:52},end:{line:2239,column:118}}],line:2239},"204":{loc:{start:{line:2252,column:4},end:{line:2265,column:5}},type:"switch",locations:[{start:{line:2253,column:8},end:{line:2253,column:23}},{start:{line:2254,column:8},end:{line:2256,column:18}},{start:{line:2257,column:8},end:{line:2259,column:18}},{start:{line:2260,column:8},end:{line:2262,column:18}},{start:{line:2263,column:8},end:{line:2264,column:27}}],line:2252},"205":{loc:{start:{line:2286,column:17},end:{line:2286,column:71}},type:"cond-expr",locations:[{start:{line:2286,column:46},end:{line:2286,column:47}},{start:{line:2286,column:50},end:{line:2286,column:71}}],line:2286},"206":{loc:{start:{line:2292,column:4},end:{line:2293,column:28}},type:"if",locations:[{start:{line:2292,column:4},end:{line:2293,column:28}},{start:{line:2292,column:4},end:{line:2293,column:28}}],line:2292},"207":{loc:{start:{line:2299,column:12},end:{line:2299,column:49}},type:"cond-expr",locations:[{start:{line:2299,column:29},end:{line:2299,column:45}},{start:{line:2299,column:48},end:{line:2299,column:49}}],line:2299},"208":{loc:{start:{line:2302,column:4},end:{line:2303,column:43}},type:"if",locations:[{start:{line:2302,column:4},end:{line:2303,column:43}},{start:{line:2302,column:4},end:{line:2303,column:43}}],line:2302},"209":{loc:{start:{line:2304,column:4},end:{line:2308,column:5}},type:"if",locations:[{start:{line:2304,column:4},end:{line:2308,column:5}},{start:{line:2304,column:4},end:{line:2308,column:5}}],line:2304},"210":{loc:{start:{line:2306,column:12},end:{line:2306,column:36}},type:"cond-expr",locations:[{start:{line:2306,column:31},end:{line:2306,column:32}},{start:{line:2306,column:33},end:{line:2306,column:36}}],line:2306},"211":{loc:{start:{line:2342,column:12},end:{line:2342,column:59}},type:"cond-expr",locations:[{start:{line:2342,column:35},end:{line:2342,column:47}},{start:{line:2342,column:50},end:{line:2342,column:59}}],line:2342},"212":{loc:{start:{line:2351,column:4},end:{line:2356,column:13}},type:"if",locations:[{start:{line:2351,column:4},end:{line:2356,column:13}},{start:{line:2351,column:4},end:{line:2356,column:13}}],line:2351},"213":{loc:{start:{line:2353,column:12},end:{line:2353,column:140}},type:"cond-expr",locations:[{start:{line:2353,column:42},end:{line:2353,column:136}},{start:{line:2353,column:139},end:{line:2353,column:140}}],line:2353},"214":{loc:{start:{line:2371,column:4},end:{line:2416,column:5}},type:"if",locations:[{start:{line:2371,column:4},end:{line:2416,column:5}},{start:{line:2371,column:4},end:{line:2416,column:5}}],line:2371},"215":{loc:{start:{line:2387,column:8},end:{line:2387,column:61}},type:"if",locations:[{start:{line:2387,column:8},end:{line:2387,column:61}},{start:{line:2387,column:8},end:{line:2387,column:61}}],line:2387},"216":{loc:{start:{line:2392,column:8},end:{line:2392,column:45}},type:"if",locations:[{start:{line:2392,column:8},end:{line:2392,column:45}},{start:{line:2392,column:8},end:{line:2392,column:45}}],line:2392},"217":{loc:{start:{line:2397,column:8},end:{line:2397,column:51}},type:"if",locations:[{start:{line:2397,column:8},end:{line:2397,column:51}},{start:{line:2397,column:8},end:{line:2397,column:51}}],line:2397},"218":{loc:{start:{line:2402,column:8},end:{line:2402,column:44}},type:"if",locations:[{start:{line:2402,column:8},end:{line:2402,column:44}},{start:{line:2402,column:8},end:{line:2402,column:44}}],line:2402},"219":{loc:{start:{line:2409,column:8},end:{line:2415,column:9}},type:"if",locations:[{start:{line:2409,column:8},end:{line:2415,column:9}},{start:{line:2409,column:8},end:{line:2415,column:9}}],line:2409},"220":{loc:{start:{line:2451,column:8},end:{line:2456,column:25}},type:"if",locations:[{start:{line:2451,column:8},end:{line:2456,column:25}},{start:{line:2451,column:8},end:{line:2456,column:25}}],line:2451},"221":{loc:{start:{line:2452,column:12},end:{line:2455,column:56}},type:"if",locations:[{start:{line:2452,column:12},end:{line:2455,column:56}},{start:{line:2452,column:12},end:{line:2455,column:56}}],line:2452},"222":{loc:{start:{line:2472,column:4},end:{line:2476,column:5}},type:"if",locations:[{start:{line:2472,column:4},end:{line:2476,column:5}},{start:{line:2472,column:4},end:{line:2476,column:5}}],line:2472},"223":{loc:{start:{line:2475,column:15},end:{line:2475,column:64}},type:"cond-expr",locations:[{start:{line:2475,column:46},end:{line:2475,column:56}},{start:{line:2475,column:59},end:{line:2475,column:64}}],line:2475},"224":{loc:{start:{line:2487,column:4},end:{line:2488,column:45}},type:"if",locations:[{start:{line:2487,column:4},end:{line:2488,column:45}},{start:{line:2487,column:4},end:{line:2488,column:45}}],line:2487},"225":{loc:{start:{line:2489,column:12},end:{line:2489,column:59}},type:"binary-expr",locations:[{start:{line:2489,column:12},end:{line:2489,column:41}},{start:{line:2489,column:45},end:{line:2489,column:59}}],line:2489},"226":{loc:{start:{line:2504,column:4},end:{line:2505,column:19}},type:"if",locations:[{start:{line:2504,column:4},end:{line:2505,column:19}},{start:{line:2504,column:4},end:{line:2505,column:19}}],line:2504},"227":{loc:{start:{line:2507,column:13},end:{line:2507,column:49}},type:"cond-expr",locations:[{start:{line:2507,column:39},end:{line:2507,column:45}},{start:{line:2507,column:48},end:{line:2507,column:49}}],line:2507},"228":{loc:{start:{line:2511,column:10},end:{line:2511,column:54}},type:"cond-expr",locations:[{start:{line:2511,column:22},end:{line:2511,column:37}},{start:{line:2511,column:40},end:{line:2511,column:54}}],line:2511},"229":{loc:{start:{line:2537,column:32},end:{line:2537,column:75}},type:"cond-expr",locations:[{start:{line:2537,column:61},end:{line:2537,column:68}},{start:{line:2537,column:70},end:{line:2537,column:75}}],line:2537},"230":{loc:{start:{line:2538,column:11},end:{line:2538,column:48}},type:"cond-expr",locations:[{start:{line:2538,column:35},end:{line:2538,column:41}},{start:{line:2538,column:44},end:{line:2538,column:48}}],line:2538},"231":{loc:{start:{line:2541,column:8},end:{line:2546,column:9}},type:"if",locations:[{start:{line:2541,column:8},end:{line:2546,column:9}},{start:{line:2541,column:8},end:{line:2546,column:9}}],line:2541},"232":{loc:{start:{line:2543,column:22},end:{line:2543,column:69}},type:"cond-expr",locations:[{start:{line:2543,column:47},end:{line:2543,column:50}},{start:{line:2543,column:53},end:{line:2543,column:69}}],line:2543},"233":{loc:{start:{line:2561,column:12},end:{line:2561,column:33}},type:"cond-expr",locations:[{start:{line:2561,column:24},end:{line:2561,column:27}},{start:{line:2561,column:30},end:{line:2561,column:33}}],line:2561},"234":{loc:{start:{line:2562,column:12},end:{line:2562,column:33}},type:"cond-expr",locations:[{start:{line:2562,column:24},end:{line:2562,column:27}},{start:{line:2562,column:30},end:{line:2562,column:33}}],line:2562},"235":{loc:{start:{line:2564,column:4},end:{line:2568,column:56}},type:"if",locations:[{start:{line:2564,column:4},end:{line:2568,column:56}},{start:{line:2564,column:4},end:{line:2568,column:56}}],line:2564},"236":{loc:{start:{line:2565,column:44},end:{line:2565,column:75}},type:"cond-expr",locations:[{start:{line:2565,column:54},end:{line:2565,column:55}},{start:{line:2565,column:59},end:{line:2565,column:74}}],line:2565},"237":{loc:{start:{line:2565,column:59},end:{line:2565,column:74}},type:"cond-expr",locations:[{start:{line:2565,column:69},end:{line:2565,column:70}},{start:{line:2565,column:73},end:{line:2565,column:74}}],line:2565},"238":{loc:{start:{line:2568,column:15},end:{line:2568,column:55}},type:"cond-expr",locations:[{start:{line:2568,column:28},end:{line:2568,column:29}},{start:{line:2568,column:33},end:{line:2568,column:54}}],line:2568},"239":{loc:{start:{line:2568,column:33},end:{line:2568,column:54}},type:"cond-expr",locations:[{start:{line:2568,column:46},end:{line:2568,column:47}},{start:{line:2568,column:50},end:{line:2568,column:54}}],line:2568},"240":{loc:{start:{line:2591,column:4},end:{line:2592,column:17}},type:"if",locations:[{start:{line:2591,column:4},end:{line:2592,column:17}},{start:{line:2591,column:4},end:{line:2592,column:17}}],line:2591},"241":{loc:{start:{line:2597,column:8},end:{line:2602,column:55}},type:"if",locations:[{start:{line:2597,column:8},end:{line:2602,column:55}},{start:{line:2597,column:8},end:{line:2602,column:55}}],line:2597},"242":{loc:{start:{line:2604,column:8},end:{line:2605,column:36}},type:"if",locations:[{start:{line:2604,column:8},end:{line:2605,column:36}},{start:{line:2604,column:8},end:{line:2605,column:36}}],line:2604},"243":{loc:{start:{line:2609,column:4},end:{line:2610,column:21}},type:"if",locations:[{start:{line:2609,column:4},end:{line:2610,column:21}},{start:{line:2609,column:4},end:{line:2610,column:21}}],line:2609},"244":{loc:{start:{line:2631,column:11},end:{line:2631,column:89}},type:"cond-expr",locations:[{start:{line:2631,column:33},end:{line:2631,column:34}},{start:{line:2631,column:37},end:{line:2631,column:89}}],line:2631},"245":{loc:{start:{line:2665,column:12},end:{line:2665,column:58}},type:"cond-expr",locations:[{start:{line:2665,column:35},end:{line:2665,column:53}},{start:{line:2665,column:57},end:{line:2665,column:58}}],line:2665},"246":{loc:{start:{line:2708,column:17},end:{line:2708,column:62}},type:"cond-expr",locations:[{start:{line:2708,column:48},end:{line:2708,column:58}},{start:{line:2708,column:61},end:{line:2708,column:62}}],line:2708},"247":{loc:{start:{line:2709,column:17},end:{line:2709,column:64}},type:"cond-expr",locations:[{start:{line:2709,column:48},end:{line:2709,column:56}},{start:{line:2709,column:61},end:{line:2709,column:64}}],line:2709},"248":{loc:{start:{line:2721,column:27},end:{line:2721,column:104}},type:"cond-expr",locations:[{start:{line:2721,column:83},end:{line:2721,column:88}},{start:{line:2721,column:91},end:{line:2721,column:104}}],line:2721},"249":{loc:{start:{line:2723,column:8},end:{line:2725,column:9}},type:"if",locations:[{start:{line:2723,column:8},end:{line:2725,column:9}},{start:{line:2723,column:8},end:{line:2725,column:9}}],line:2723},"250":{loc:{start:{line:2728,column:15},end:{line:2728,column:59}},type:"cond-expr",locations:[{start:{line:2728,column:42},end:{line:2728,column:55}},{start:{line:2728,column:58},end:{line:2728,column:59}}],line:2728},"251":{loc:{start:{line:2731,column:4},end:{line:2732,column:51}},type:"if",locations:[{start:{line:2731,column:4},end:{line:2732,column:51}},{start:{line:2731,column:4},end:{line:2732,column:51}}],line:2731},"252":{loc:{start:{line:2731,column:8},end:{line:2731,column:74}},type:"binary-expr",locations:[{start:{line:2731,column:9},end:{line:2731,column:38}},{start:{line:2731,column:44},end:{line:2731,column:73}}],line:2731},"253":{loc:{start:{line:2742,column:17},end:{line:2742,column:62}},type:"cond-expr",locations:[{start:{line:2742,column:48},end:{line:2742,column:58}},{start:{line:2742,column:61},end:{line:2742,column:62}}],line:2742},"254":{loc:{start:{line:2743,column:17},end:{line:2743,column:64}},type:"cond-expr",locations:[{start:{line:2743,column:48},end:{line:2743,column:56}},{start:{line:2743,column:61},end:{line:2743,column:64}}],line:2743},"255":{loc:{start:{line:2755,column:27},end:{line:2755,column:104}},type:"cond-expr",locations:[{start:{line:2755,column:83},end:{line:2755,column:88}},{start:{line:2755,column:91},end:{line:2755,column:104}}],line:2755},"256":{loc:{start:{line:2757,column:8},end:{line:2759,column:9}},type:"if",locations:[{start:{line:2757,column:8},end:{line:2759,column:9}},{start:{line:2757,column:8},end:{line:2759,column:9}}],line:2757},"257":{loc:{start:{line:2762,column:17},end:{line:2762,column:61}},type:"cond-expr",locations:[{start:{line:2762,column:44},end:{line:2762,column:57}},{start:{line:2762,column:60},end:{line:2762,column:61}}],line:2762},"258":{loc:{start:{line:2763,column:15},end:{line:2763,column:59}},type:"cond-expr",locations:[{start:{line:2763,column:42},end:{line:2763,column:55}},{start:{line:2763,column:58},end:{line:2763,column:59}}],line:2763},"259":{loc:{start:{line:2766,column:4},end:{line:2767,column:51}},type:"if",locations:[{start:{line:2766,column:4},end:{line:2767,column:51}},{start:{line:2766,column:4},end:{line:2767,column:51}}],line:2766},"260":{loc:{start:{line:2766,column:8},end:{line:2766,column:74}},type:"binary-expr",locations:[{start:{line:2766,column:9},end:{line:2766,column:38}},{start:{line:2766,column:44},end:{line:2766,column:73}}],line:2766},"261":{loc:{start:{line:2792,column:15},end:{line:2792,column:63}},type:"cond-expr",locations:[{start:{line:2792,column:46},end:{line:2792,column:56}},{start:{line:2792,column:59},end:{line:2792,column:63}}],line:2792},"262":{loc:{start:{line:2798,column:4},end:{line:2801,column:5}},type:"if",locations:[{start:{line:2798,column:4},end:{line:2801,column:5}},{start:{line:2798,column:4},end:{line:2801,column:5}}],line:2798},"263":{loc:{start:{line:2819,column:54},end:{line:2819,column:75}},type:"cond-expr",locations:[{start:{line:2819,column:60},end:{line:2819,column:66}},{start:{line:2819,column:69},end:{line:2819,column:75}}],line:2819},"264":{loc:{start:{line:2871,column:4},end:{line:2874,column:5}},type:"if",locations:[{start:{line:2871,column:4},end:{line:2874,column:5}},{start:{line:2871,column:4},end:{line:2874,column:5}}],line:2871},"265":{loc:{start:{line:2947,column:4},end:{line:2955,column:5}},type:"if",locations:[{start:{line:2947,column:4},end:{line:2955,column:5}},{start:{line:2947,column:4},end:{line:2955,column:5}}],line:2947},"266":{loc:{start:{line:2953,column:8},end:{line:2954,column:30}},type:"if",locations:[{start:{line:2953,column:8},end:{line:2954,column:30}},{start:{line:2953,column:8},end:{line:2954,column:30}}],line:2953},"267":{loc:{start:{line:2953,column:12},end:{line:2953,column:74}},type:"binary-expr",locations:[{start:{line:2953,column:12},end:{line:2953,column:24}},{start:{line:2953,column:29},end:{line:2953,column:73}}],line:2953},"268":{loc:{start:{line:2956,column:4},end:{line:2957,column:133}},type:"if",locations:[{start:{line:2956,column:4},end:{line:2957,column:133}},{start:{line:2956,column:4},end:{line:2957,column:133}}],line:2956},"269":{loc:{start:{line:3024,column:23},end:{line:3024,column:71}},type:"cond-expr",locations:[{start:{line:3024,column:50},end:{line:3024,column:60}},{start:{line:3024,column:61},end:{line:3024,column:71}}],line:3024},"270":{loc:{start:{line:3024,column:24},end:{line:3024,column:48}},type:"binary-expr",locations:[{start:{line:3024,column:25},end:{line:3024,column:29}},{start:{line:3024,column:35},end:{line:3024,column:47}}],line:3024},"271":{loc:{start:{line:3028,column:4},end:{line:3043,column:5}},type:"if",locations:[{start:{line:3028,column:4},end:{line:3043,column:5}},{start:{line:3028,column:4},end:{line:3043,column:5}}],line:3028},"272":{loc:{start:{line:3031,column:8},end:{line:3041,column:9}},type:"if",locations:[{start:{line:3031,column:8},end:{line:3041,column:9}},{start:{line:3031,column:8},end:{line:3041,column:9}}],line:3031},"273":{loc:{start:{line:3076,column:4},end:{line:3077,column:20}},type:"if",locations:[{start:{line:3076,column:4},end:{line:3077,column:20}},{start:{line:3076,column:4},end:{line:3077,column:20}}],line:3076},"274":{loc:{start:{line:3083,column:8},end:{line:3089,column:9}},type:"if",locations:[{start:{line:3083,column:8},end:{line:3089,column:9}},{start:{line:3083,column:8},end:{line:3089,column:9}}],line:3083},"275":{loc:{start:{line:3093,column:4},end:{line:3094,column:21}},type:"if",locations:[{start:{line:3093,column:4},end:{line:3094,column:21}},{start:{line:3093,column:4},end:{line:3094,column:21}}],line:3093},"276":{loc:{start:{line:3096,column:13},end:{line:3096,column:65}},type:"cond-expr",locations:[{start:{line:3096,column:44},end:{line:3096,column:56}},{start:{line:3096,column:59},end:{line:3096,column:65}}],line:3096},"277":{loc:{start:{line:3097,column:13},end:{line:3097,column:84}},type:"cond-expr",locations:[{start:{line:3097,column:44},end:{line:3097,column:75}},{start:{line:3097,column:78},end:{line:3097,column:84}}],line:3097},"278":{loc:{start:{line:3100,column:8},end:{line:3103,column:50}},type:"if",locations:[{start:{line:3100,column:8},end:{line:3103,column:50}},{start:{line:3100,column:8},end:{line:3103,column:50}}],line:3100},"279":{loc:{start:{line:3127,column:4},end:{line:3128,column:17}},type:"if",locations:[{start:{line:3127,column:4},end:{line:3128,column:17}},{start:{line:3127,column:4},end:{line:3128,column:17}}],line:3127},"280":{loc:{start:{line:3136,column:12},end:{line:3137,column:25}},type:"if",locations:[{start:{line:3136,column:12},end:{line:3137,column:25}},{start:{line:3136,column:12},end:{line:3137,column:25}}],line:3136},"281":{loc:{start:{line:3140,column:12},end:{line:3152,column:13}},type:"if",locations:[{start:{line:3140,column:12},end:{line:3152,column:13}},{start:{line:3140,column:12},end:{line:3152,column:13}}],line:3140},"282":{loc:{start:{line:3140,column:16},end:{line:3140,column:71}},type:"binary-expr",locations:[{start:{line:3140,column:17},end:{line:3140,column:41}},{start:{line:3140,column:47},end:{line:3140,column:70}}],line:3140},"283":{loc:{start:{line:3141,column:16},end:{line:3148,column:17}},type:"if",locations:[{start:{line:3141,column:16},end:{line:3148,column:17}},{start:{line:3141,column:16},end:{line:3148,column:17}}],line:3141},"284":{loc:{start:{line:3144,column:20},end:{line:3147,column:37}},type:"if",locations:[{start:{line:3144,column:20},end:{line:3147,column:37}},{start:{line:3144,column:20},end:{line:3147,column:37}}],line:3144},"285":{loc:{start:{line:3177,column:12},end:{line:3180,column:51}},type:"if",locations:[{start:{line:3177,column:12},end:{line:3180,column:51}},{start:{line:3177,column:12},end:{line:3180,column:51}}],line:3177},"286":{loc:{start:{line:3216,column:4},end:{line:3223,column:5}},type:"if",locations:[{start:{line:3216,column:4},end:{line:3223,column:5}},{start:{line:3216,column:4},end:{line:3223,column:5}}],line:3216},"287":{loc:{start:{line:3216,column:8},end:{line:3216,column:42}},type:"binary-expr",locations:[{start:{line:3216,column:9},end:{line:3216,column:29}},{start:{line:3216,column:35},end:{line:3216,column:41}}],line:3216},"288":{loc:{start:{line:3228,column:4},end:{line:3263,column:5}},type:"if",locations:[{start:{line:3228,column:4},end:{line:3263,column:5}},{start:{line:3228,column:4},end:{line:3263,column:5}}],line:3228},"289":{loc:{start:{line:3236,column:16},end:{line:3237,column:26}},type:"if",locations:[{start:{line:3236,column:16},end:{line:3237,column:26}},{start:{line:3236,column:16},end:{line:3237,column:26}}],line:3236},"290":{loc:{start:{line:3242,column:16},end:{line:3248,column:17}},type:"if",locations:[{start:{line:3242,column:16},end:{line:3248,column:17}},{start:{line:3242,column:16},end:{line:3248,column:17}}],line:3242},"291":{loc:{start:{line:3243,column:24},end:{line:3243,column:77}},type:"cond-expr",locations:[{start:{line:3243,column:45},end:{line:3243,column:70}},{start:{line:3243,column:73},end:{line:3243,column:77}}],line:3243},"292":{loc:{start:{line:3244,column:24},end:{line:3244,column:79}},type:"cond-expr",locations:[{start:{line:3244,column:45},end:{line:3244,column:75}},{start:{line:3244,column:78},end:{line:3244,column:79}}],line:3244},"293":{loc:{start:{line:3256,column:8},end:{line:3262,column:9}},type:"if",locations:[{start:{line:3256,column:8},end:{line:3262,column:9}},{start:{line:3256,column:8},end:{line:3262,column:9}}],line:3256}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":0,"212":0,"213":0,"214":0,"215":0,"216":0,"217":0,"218":0,"219":0,"220":0,"221":0,"222":0,"223":0,"224":0,"225":0,"226":0,"227":0,"228":0,"229":0,"230":0,"231":0,"232":0,"233":0,"234":0,"235":0,"236":0,"237":0,"238":0,"239":0,"240":0,"241":0,"242":0,"243":0,"244":0,"245":0,"246":0,"247":0,"248":0,"249":0,"250":0,"251":0,"252":0,"253":0,"254":0,"255":0,"256":0,"257":0,"258":0,"259":0,"260":0,"261":0,"262":0,"263":0,"264":0,"265":0,"266":0,"267":0,"268":0,"269":0,"270":0,"271":0,"272":0,"273":0,"274":0,"275":0,"276":0,"277":0,"278":0,"279":0,"280":0,"281":0,"282":0,"283":0,"284":0,"285":0,"286":0,"287":0,"288":0,"289":0,"290":0,"291":0,"292":0,"293":0,"294":0,"295":0,"296":0,"297":0,"298":0,"299":0,"300":0,"301":0,"302":0,"303":0,"304":0,"305":0,"306":0,"307":0,"308":0,"309":0,"310":0,"311":0,"312":0,"313":0,"314":0,"315":0,"316":0,"317":0,"318":0,"319":0,"320":0,"321":0,"322":0,"323":0,"324":0,"325":0,"326":0,"327":0,"328":0,"329":0,"330":0,"331":0,"332":0,"333":0,"334":0,"335":0,"336":0,"337":0,"338":0,"339":0,"340":0,"341":0,"342":0,"343":0,"344":0,"345":0,"346":0,"347":0,"348":0,"349":0,"350":0,"351":0,"352":0,"353":0,"354":0,"355":0,"356":0,"357":0,"358":0,"359":0,"360":0,"361":0,"362":0,"363":0,"364":0,"365":0,"366":0,"367":0,"368":0,"369":0,"370":0,"371":0,"372":0,"373":0,"374":0,"375":0,"376":0,"377":0,"378":0,"379":0,"380":0,"381":0,"382":0,"383":0,"384":0,"385":0,"386":0,"387":0,"388":0,"389":0,"390":0,"391":0,"392":0,"393":0,"394":0,"395":0,"396":0,"397":0,"398":0,"399":0,"400":0,"401":0,"402":0,"403":0,"404":0,"405":0,"406":0,"407":0,"408":0,"409":0,"410":0,"411":0,"412":0,"413":0,"414":0,"415":0,"416":0,"417":0,"418":0,"419":0,"420":0,"421":0,"422":0,"423":0,"424":0,"425":0,"426":0,"427":0,"428":0,"429":0,"430":0,"431":0,"432":0,"433":0,"434":0,"435":0,"436":0,"437":0,"438":0,"439":0,"440":0,"441":0,"442":0,"443":0,"444":0,"445":0,"446":0,"447":0,"448":0,"449":0,"450":0,"451":0,"452":0,"453":0,"454":0,"455":0,"456":0,"457":0,"458":0,"459":0,"460":0,"461":0,"462":0,"463":0,"464":0,"465":0,"466":0,"467":0,"468":0,"469":0,"470":0,"471":0,"472":0,"473":0,"474":0,"475":0,"476":0,"477":0,"478":0,"479":0,"480":0,"481":0,"482":0,"483":0,"484":0,"485":0,"486":0,"487":0,"488":0,"489":0,"490":0,"491":0,"492":0,"493":0,"494":0,"495":0,"496":0,"497":0,"498":0,"499":0,"500":0,"501":0,"502":0,"503":0,"504":0,"505":0,"506":0,"507":0,"508":0,"509":0,"510":0,"511":0,"512":0,"513":0,"514":0,"515":0,"516":0,"517":0,"518":0,"519":0,"520":0,"521":0,"522":0,"523":0,"524":0,"525":0,"526":0,"527":0,"528":0,"529":0,"530":0,"531":0,"532":0,"533":0,"534":0,"535":0,"536":0,"537":0,"538":0,"539":0,"540":0,"541":0,"542":0,"543":0,"544":0,"545":0,"546":0,"547":0,"548":0,"549":0,"550":0,"551":0,"552":0,"553":0,"554":0,"555":0,"556":0,"557":0,"558":0,"559":0,"560":0,"561":0,"562":0,"563":0,"564":0,"565":0,"566":0,"567":0,"568":0,"569":0,"570":0,"571":0,"572":0,"573":0,"574":0,"575":0,"576":0,"577":0,"578":0,"579":0,"580":0,"581":0,"582":0,"583":0,"584":0,"585":0,"586":0,"587":0,"588":0,"589":0,"590":0,"591":0,"592":0,"593":0,"594":0,"595":0,"596":0,"597":0,"598":0,"599":0,"600":0,"601":0,"602":0,"603":0,"604":0,"605":0,"606":0,"607":0,"608":0,"609":0,"610":0,"611":0,"612":0,"613":0,"614":0,"615":0,"616":0,"617":0,"618":0,"619":0,"620":0,"621":0,"622":0,"623":0,"624":0,"625":0,"626":0,"627":0,"628":0,"629":0,"630":0,"631":0,"632":0,"633":0,"634":0,"635":0,"636":0,"637":0,"638":0,"639":0,"640":0,"641":0,"642":0,"643":0,"644":0,"645":0,"646":0,"647":0,"648":0,"649":0,"650":0,"651":0,"652":0,"653":0,"654":0,"655":0,"656":0,"657":0,"658":0,"659":0,"660":0,"661":0,"662":0,"663":0,"664":0,"665":0,"666":0,"667":0,"668":0,"669":0,"670":0,"671":0,"672":0,"673":0,"674":0,"675":0,"676":0,"677":0,"678":0,"679":0,"680":0,"681":0,"682":0,"683":0,"684":0,"685":0,"686":0,"687":0,"688":0,"689":0,"690":0,"691":0,"692":0,"693":0,"694":0,"695":0,"696":0,"697":0,"698":0,"699":0,"700":0,"701":0,"702":0,"703":0,"704":0,"705":0,"706":0,"707":0,"708":0,"709":0,"710":0,"711":0,"712":0,"713":0,"714":0,"715":0,"716":0,"717":0,"718":0,"719":0,"720":0,"721":0,"722":0,"723":0,"724":0,"725":0,"726":0,"727":0,"728":0,"729":0,"730":0,"731":0,"732":0,"733":0,"734":0,"735":0,"736":0,"737":0,"738":0,"739":0,"740":0,"741":0,"742":0,"743":0,"744":0,"745":0,"746":0,"747":0,"748":0,"749":0,"750":0,"751":0,"752":0,"753":0,"754":0,"755":0,"756":0,"757":0,"758":0,"759":0,"760":0,"761":0,"762":0,"763":0,"764":0,"765":0,"766":0,"767":0,"768":0,"769":0,"770":0,"771":0,"772":0,"773":0,"774":0,"775":0,"776":0,"777":0,"778":0,"779":0,"780":0,"781":0,"782":0,"783":0,"784":0,"785":0,"786":0,"787":0,"788":0,"789":0,"790":0,"791":0,"792":0,"793":0,"794":0,"795":0,"796":0,"797":0,"798":0,"799":0,"800":0,"801":0,"802":0,"803":0,"804":0,"805":0,"806":0,"807":0,"808":0,"809":0,"810":0,"811":0,"812":0,"813":0,"814":0,"815":0,"816":0,"817":0,"818":0,"819":0,"820":0,"821":0,"822":0,"823":0,"824":0,"825":0,"826":0,"827":0,"828":0,"829":0,"830":0,"831":0,"832":0,"833":0,"834":0,"835":0,"836":0,"837":0,"838":0,"839":0,"840":0,"841":0,"842":0,"843":0,"844":0,"845":0,"846":0,"847":0,"848":0,"849":0,"850":0,"851":0,"852":0,"853":0,"854":0,"855":0,"856":0,"857":0,"858":0,"859":0,"860":0,"861":0,"862":0,"863":0,"864":0,"865":0,"866":0,"867":0,"868":0,"869":0,"870":0,"871":0,"872":0,"873":0,"874":0,"875":0,"876":0,"877":0,"878":0,"879":0,"880":0,"881":0,"882":0,"883":0,"884":0,"885":0,"886":0,"887":0,"888":0,"889":0,"890":0,"891":0,"892":0,"893":0,"894":0,"895":0,"896":0,"897":0,"898":0,"899":0,"900":0,"901":0,"902":0,"903":0,"904":0,"905":0,"906":0,"907":0,"908":0,"909":0,"910":0,"911":0,"912":0,"913":0,"914":0,"915":0,"916":0,"917":0,"918":0,"919":0,"920":0,"921":0,"922":0,"923":0,"924":0,"925":0,"926":0,"927":0,"928":0,"929":0,"930":0,"931":0,"932":0,"933":0,"934":0,"935":0,"936":0,"937":0,"938":0,"939":0,"940":0,"941":0,"942":0,"943":0,"944":0,"945":0,"946":0,"947":0,"948":0,"949":0,"950":0,"951":0,"952":0,"953":0,"954":0,"955":0,"956":0,"957":0,"958":0,"959":0,"960":0,"961":0,"962":0,"963":0,"964":0,"965":0,"966":0,"967":0,"968":0,"969":0,"970":0,"971":0,"972":0,"973":0,"974":0,"975":0,"976":0,"977":0,"978":0,"979":0,"980":0,"981":0,"982":0,"983":0,"984":0,"985":0,"986":0,"987":0,"988":0,"989":0,"990":0,"991":0,"992":0,"993":0,"994":0,"995":0,"996":0,"997":0,"998":0,"999":0,"1000":0,"1001":0,"1002":0,"1003":0,"1004":0,"1005":0,"1006":0,"1007":0,"1008":0,"1009":0,"1010":0,"1011":0,"1012":0,"1013":0,"1014":0,"1015":0,"1016":0,"1017":0,"1018":0,"1019":0,"1020":0,"1021":0,"1022":0,"1023":0,"1024":0,"1025":0,"1026":0,"1027":0,"1028":0,"1029":0,"1030":0,"1031":0,"1032":0,"1033":0,"1034":0,"1035":0,"1036":0,"1037":0,"1038":0,"1039":0,"1040":0,"1041":0,"1042":0,"1043":0,"1044":0,"1045":0,"1046":0,"1047":0,"1048":0,"1049":0,"1050":0,"1051":0,"1052":0,"1053":0,"1054":0,"1055":0,"1056":0,"1057":0,"1058":0,"1059":0,"1060":0,"1061":0,"1062":0,"1063":0,"1064":0,"1065":0,"1066":0,"1067":0,"1068":0,"1069":0,"1070":0,"1071":0,"1072":0,"1073":0,"1074":0,"1075":0,"1076":0,"1077":0,"1078":0,"1079":0,"1080":0,"1081":0,"1082":0,"1083":0,"1084":0,"1085":0,"1086":0,"1087":0,"1088":0,"1089":0,"1090":0,"1091":0,"1092":0,"1093":0,"1094":0,"1095":0,"1096":0,"1097":0,"1098":0,"1099":0,"1100":0,"1101":0,"1102":0,"1103":0,"1104":0,"1105":0,"1106":0,"1107":0,"1108":0,"1109":0,"1110":0,"1111":0,"1112":0,"1113":0,"1114":0,"1115":0,"1116":0,"1117":0,"1118":0,"1119":0,"1120":0,"1121":0,"1122":0,"1123":0,"1124":0,"1125":0,"1126":0,"1127":0,"1128":0,"1129":0,"1130":0,"1131":0,"1132":0,"1133":0,"1134":0,"1135":0,"1136":0,"1137":0,"1138":0,"1139":0,"1140":0,"1141":0,"1142":0,"1143":0,"1144":0,"1145":0,"1146":0,"1147":0,"1148":0,"1149":0,"1150":0,"1151":0,"1152":0,"1153":0,"1154":0,"1155":0,"1156":0,"1157":0,"1158":0,"1159":0,"1160":0,"1161":0,"1162":0,"1163":0,"1164":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0},b:{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0],"29":[0,0],"30":[0,0],"31":[0,0],"32":[0,0],"33":[0,0],"34":[0,0],"35":[0,0],"36":[0,0],"37":[0,0],"38":[0,0],"39":[0,0],"40":[0,0,0],"41":[0,0],"42":[0,0],"43":[0,0],"44":[0,0],"45":[0,0],"46":[0,0],"47":[0,0],"48":[0,0,0,0,0],"49":[0,0],"50":[0,0],"51":[0,0,0],"52":[0,0],"53":[0,0,0],"54":[0,0],"55":[0,0],"56":[0,0],"57":[0,0,0],"58":[0,0,0],"59":[0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0],"64":[0,0],"65":[0,0],"66":[0,0],"67":[0,0],"68":[0,0],"69":[0,0],"70":[0,0],"71":[0,0],"72":[0,0],"73":[0,0],"74":[0,0],"75":[0,0],"76":[0,0],"77":[0,0],"78":[0,0],"79":[0,0],"80":[0,0],"81":[0,0],"82":[0,0],"83":[0,0],"84":[0,0],"85":[0,0],"86":[0,0],"87":[0,0],"88":[0,0],"89":[0,0],"90":[0,0,0],"91":[0,0,0],"92":[0,0],"93":[0,0],"94":[0,0],"95":[0,0],"96":[0,0,0,0],"97":[0,0],"98":[0,0],"99":[0,0],"100":[0,0],"101":[0,0,0,0,0,0],"102":[0,0],"103":[0,0],"104":[0,0],"105":[0,0],"106":[0,0],"107":[0,0],"108":[0,0,0,0,0,0],"109":[0,0],"110":[0,0],"111":[0,0],"112":[0,0],"113":[0,0],"114":[0,0],"115":[0,0],"116":[0,0,0,0,0,0,0],"117":[0,0],"118":[0,0],"119":[0,0],"120":[0,0],"121":[0,0],"122":[0,0],"123":[0,0],"124":[0,0],"125":[0,0],"126":[0,0],"127":[0,0],"128":[0,0],"129":[0,0],"130":[0,0],"131":[0,0],"132":[0,0],"133":[0,0],"134":[0,0,0],"135":[0,0,0],"136":[0,0,0,0],"137":[0,0],"138":[0,0],"139":[0,0],"140":[0,0],"141":[0,0],"142":[0,0],"143":[0,0],"144":[0,0],"145":[0,0],"146":[0,0],"147":[0,0],"148":[0,0],"149":[0,0],"150":[0,0],"151":[0,0],"152":[0,0],"153":[0,0],"154":[0,0],"155":[0,0],"156":[0,0],"157":[0,0],"158":[0,0],"159":[0,0],"160":[0,0],"161":[0,0],"162":[0,0],"163":[0,0],"164":[0,0],"165":[0,0],"166":[0,0],"167":[0,0],"168":[0,0],"169":[0,0],"170":[0,0],"171":[0,0],"172":[0,0],"173":[0,0],"174":[0,0],"175":[0,0],"176":[0,0],"177":[0,0],"178":[0,0],"179":[0,0],"180":[0,0],"181":[0,0],"182":[0,0],"183":[0,0],"184":[0,0],"185":[0,0],"186":[0,0],"187":[0,0],"188":[0,0],"189":[0,0],"190":[0,0],"191":[0,0],"192":[0,0],"193":[0,0],"194":[0,0],"195":[0,0],"196":[0,0],"197":[0,0],"198":[0,0],"199":[0,0],"200":[0,0],"201":[0,0],"202":[0,0],"203":[0,0],"204":[0,0,0,0,0],"205":[0,0],"206":[0,0],"207":[0,0],"208":[0,0],"209":[0,0],"210":[0,0],"211":[0,0],"212":[0,0],"213":[0,0],"214":[0,0],"215":[0,0],"216":[0,0],"217":[0,0],"218":[0,0],"219":[0,0],"220":[0,0],"221":[0,0],"222":[0,0],"223":[0,0],"224":[0,0],"225":[0,0],"226":[0,0],"227":[0,0],"228":[0,0],"229":[0,0],"230":[0,0],"231":[0,0],"232":[0,0],"233":[0,0],"234":[0,0],"235":[0,0],"236":[0,0],"237":[0,0],"238":[0,0],"239":[0,0],"240":[0,0],"241":[0,0],"242":[0,0],"243":[0,0],"244":[0,0],"245":[0,0],"246":[0,0],"247":[0,0],"248":[0,0],"249":[0,0],"250":[0,0],"251":[0,0],"252":[0,0],"253":[0,0],"254":[0,0],"255":[0,0],"256":[0,0],"257":[0,0],"258":[0,0],"259":[0,0],"260":[0,0],"261":[0,0],"262":[0,0],"263":[0,0],"264":[0,0],"265":[0,0],"266":[0,0],"267":[0,0],"268":[0,0],"269":[0,0],"270":[0,0],"271":[0,0],"272":[0,0],"273":[0,0],"274":[0,0],"275":[0,0],"276":[0,0],"277":[0,0],"278":[0,0],"279":[0,0],"280":[0,0],"281":[0,0],"282":[0,0],"283":[0,0],"284":[0,0],"285":[0,0],"286":[0,0],"287":[0,0],"288":[0,0],"289":[0,0],"290":[0,0],"291":[0,0],"292":[0,0],"293":[0,0]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"fe533d8b509d150c2f9268e76ca3be8fbfcf5b37"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];cov_1s53a2b0g7=function(){return actualCoverage;};return actualCoverage;}(function(fn){// this is a polyfill for IE7/IE8
40
- /*
41
- //node.textContent
42
- // Source: Eli Grey @ https://eligrey.com/blog/post/textcontent-in-ie8
43
- if (Object.defineProperty
44
- && Object.getOwnPropertyDescriptor
45
- && Object.getOwnPropertyDescriptor(Element.prototype, "textContent")
46
- && !Object.getOwnPropertyDescriptor(Element.prototype, "textContent").get) {
47
- (function() {
48
- var innerText = Object.getOwnPropertyDescriptor(Element.prototype, "innerText");
49
- Object.defineProperty(Element.prototype, "textContent",
50
- // Passing innerText or innerText.get directly does not work,
51
- // wrapper function is required.
52
- {
53
- get: function() {
54
- return innerText.get.call(this);
55
- },
56
- set: function(s) {
57
- return innerText.set.call(this, s);
58
- }
59
- }
60
- );
61
- })();
62
- }
63
- */ //Array stuff
64
- if(!Array.prototype.indexOf){Array.prototype.indexOf=function(searchElement){"use strict";if(this==null){throw new TypeError();}var t=Object(this);var len=t.length>>>0;if(len===0){return-1;}var n=0;if(arguments.length>0){n=Number(arguments[1]);if(n!=n){// shortcut for verifying if it's NaN
65
- n=0;}else if(n!=0&&n!=Infinity&&n!=-Infinity){n=(n>0||-1)*Math.floor(Math.abs(n));}}if(n>=len){return-1;}var k=n>=0?n:Math.max(len-Math.abs(n),0);for(;k<len;k++){if(k in t&&t[k]===searchElement){return k;}}return-1;};}if(!fn.map)fn.map=function(f){var r=[];for(var i=0;i<this.length;i++)r.push(f(this[i]));return r;};if(!fn.filter)fn.filter=function(f){var r=[];for(var i=0;i<this.length;i++)if(f(this[i]))r.push(this[i]);return r;};if(!String.prototype.trim){String.prototype.trim=function(){return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");};}})(Array.prototype);// end polyfills
66
- // * /
67
- cov_1s53a2b0g7().s[0]++;(function(root,factory){cov_1s53a2b0g7().f[0]++;cov_1s53a2b0g7().s[1]++;if((cov_1s53a2b0g7().b[1][0]++,typeof define==="function")&&(cov_1s53a2b0g7().b[1][1]++,define.amd)){cov_1s53a2b0g7().b[0][0]++;cov_1s53a2b0g7().s[2]++;// eslint-disable-line no-undef
68
- // AMD. Register as an anonymous module.
69
- //define(['myRequiredDependancyModule'], factory); // use this if other modules required
70
- define([],factory);// eslint-disable-line no-undef
71
- }else{cov_1s53a2b0g7().b[0][1]++;cov_1s53a2b0g7().s[3]++;if(typeof module==="object"){cov_1s53a2b0g7().b[2][0]++;cov_1s53a2b0g7().s[4]++;if((cov_1s53a2b0g7().b[4][0]++,typeof module!=="object")||(cov_1s53a2b0g7().b[4][1]++,typeof module!=="function")){cov_1s53a2b0g7().b[3][0]++;// this hack required for older versions of node
72
- // var m =require("module");
73
- // Node. Does not work with strict CommonJS, but
74
- // only CommonJS-like environments that support module.exports,
75
- // like Node.
76
- //console.log("node...");
77
- var libm=(cov_1s53a2b0g7().s[5]++,factory());}else{cov_1s53a2b0g7().b[3][1]++;}cov_1s53a2b0g7().s[6]++;libm.exportModuleType="module.exports";cov_1s53a2b0g7().s[7]++;module.exports=libm;}else{cov_1s53a2b0g7().b[2][1]++;//console.log("browser..",root, typeof root);
78
- // Browser globals (root is window)
79
- var libg=(cov_1s53a2b0g7().s[8]++,factory());cov_1s53a2b0g7().s[9]++;libg.exportModuleType="global";cov_1s53a2b0g7().s[10]++;root[libg["exportName"]]=libg;}}})(typeof self!=="undefined"?(cov_1s53a2b0g7().b[5][0]++,self):(cov_1s53a2b0g7().b[5][1]++,this),function(){// note if needing requirements use ... (typeof self !== "undefined" ? self : this, function (myRequiredDependancyModule)
80
- "use strict";// Use b in some fashion.
81
- // Just return a value to define the module export.
82
- // This example returns an object, but the module
83
- // can return a function as the exported value.
84
- cov_1s53a2b0g7().f[1]++;var bw=(cov_1s53a2b0g7().s[11]++,{});cov_1s53a2b0g7().s[12]++;bw.exportName="bw";//
85
- cov_1s53a2b0g7().s[13]++;bw.exportModuleType="AMD";//default export see UMD wrapper above for more info this. it allows the consumer to know how this was loaded.
86
- // ===================================================================================
87
- cov_1s53a2b0g7().s[14]++;bw.choice=function(x,choices,def){cov_1s53a2b0g7().f[2]++;/**
88
- bw.choice(x,choices-dictionary, default)
89
-
90
-
91
- Allows a dictionary to be used as a switch statement, including functions.
92
-
93
- example:
94
- colors = {"red": 1, "blue": 2, "aqua" : function(z){return z+"marine"}};
95
- bw.choice("red",colors,"0") ==> "1"
96
- bw.choice("shiny",colors,"0") ==> "0"
97
- bw.choice("aqua",colors) ==> "aquamarine"
98
- */var z=(cov_1s53a2b0g7().s[15]++,x in choices?(cov_1s53a2b0g7().b[6][0]++,choices[x]):(cov_1s53a2b0g7().b[6][1]++,def));cov_1s53a2b0g7().s[16]++;return _to(z)=="function"?(cov_1s53a2b0g7().b[7][0]++,z(x)):(cov_1s53a2b0g7().b[7][1]++,z);};// ===================================================================================
99
- cov_1s53a2b0g7().s[17]++;bw.jsonClone=function(x){cov_1s53a2b0g7().f[3]++;cov_1s53a2b0g7().s[18]++;/**
100
- bw.jsonClone(object)
101
-
102
- crude deep copy by value of an object as long as no js dates or functions
103
- */return JSON.parse(JSON.stringify(x));};// ===================================================================================
104
- cov_1s53a2b0g7().s[19]++;bw.typeOf=function(x,baseTypeOnly){cov_1s53a2b0g7().f[4]++;cov_1s53a2b0g7().s[20]++;/**
105
- _to(x, baseTypeOnly) returns a useful typeOf the object.
106
-
107
- _to(2) // "number"
108
- bw.typeof( function(){}) // "function"
109
-
110
- function Car(make, model, year) {
111
- this.make = make;
112
- this.model = model;
113
- this.year = year;
114
- }
115
-
116
- x = new Car("Ford", "Escape", 2009);
117
-
118
- _to(Car) // "function"
119
- _to(x) // "Car" ---> returns correct object type
120
- _to(x,true) // "object" ---> returns base object type
121
-
122
- */ //A useable typeof operator. See this fantastic reference for a starter
123
- //https://javascriptweblog.wordpress.com/2011/08/08/fixing-the-javascript-typeof-operator/
124
- if(x===null){cov_1s53a2b0g7().b[8][0]++;cov_1s53a2b0g7().s[21]++;return"null";}else{cov_1s53a2b0g7().b[8][1]++;}var y=(cov_1s53a2b0g7().s[22]++,typeof x=="undefined"?(cov_1s53a2b0g7().b[9][0]++,"undefined"):(cov_1s53a2b0g7().b[9][1]++,{/*empty*/}.toString.call(x).match(/\s([a-zA-Z]+)/)[1].toLocaleLowerCase()));cov_1s53a2b0g7().s[23]++;if((cov_1s53a2b0g7().b[11][0]++,y!="object")&&(cov_1s53a2b0g7().b[11][1]++,y!="function")){cov_1s53a2b0g7().b[10][0]++;cov_1s53a2b0g7().s[24]++;return y;}else{cov_1s53a2b0g7().b[10][1]++;}cov_1s53a2b0g7().s[25]++;if(baseTypeOnly==true){cov_1s53a2b0g7().b[12][0]++;cov_1s53a2b0g7().s[26]++;// so if undefind or anything but true
125
- return y;}else{cov_1s53a2b0g7().b[12][1]++;}var r=(cov_1s53a2b0g7().s[27]++,y);cov_1s53a2b0g7().s[28]++;try{cov_1s53a2b0g7().s[29]++;r=x.constructor.name.toLocaleLowerCase()==y.toLocaleLowerCase()?(cov_1s53a2b0g7().b[13][0]++,y):(cov_1s53a2b0g7().b[13][1]++,x.constructor.name);// return object's name e.g.
126
- }catch(e){/*empty*/}cov_1s53a2b0g7().s[30]++;return r;};var _to=(cov_1s53a2b0g7().s[31]++,bw.typeOf);cov_1s53a2b0g7().s[32]++;bw.to=_to;//===============================================
127
- // internally used type check and assign function
128
- cov_1s53a2b0g7().s[33]++;bw.typeAssign=function(a,typeString,trueValue,falseValue){cov_1s53a2b0g7().f[5]++;cov_1s53a2b0g7().s[34]++;/**
129
- bw.typeAssign(variable, typeString, trueValue, falseValue)
130
- typeAssign is used to see if the argument a is of type typeString as defined by _to().
131
- if it is then trueValue is returned else falseValue.
132
-
133
- bw.typeAssign("23","number","is a number!", "not a number!") ==> "is a number!"
134
- bw.typeAssign([23],"number","is a number!", "not a number!") ==> "not a number!" // is an array of length 1
135
-
136
- can also supply list of types
137
- bw.typeAssign(23,["string","number"], "string or num", "something else") ==> "string or num"
138
- bw.typeAssign(true,["string","number"], "string or num", "something else") ==> "something else"
139
- */if(["string","array"].indexOf(_to(typeString))==-1){cov_1s53a2b0g7().b[14][0]++;cov_1s53a2b0g7().s[35]++;// typeString must be a string or an arrag or strings
140
- typeString="notValidType";}else{cov_1s53a2b0g7().b[14][1]++;}cov_1s53a2b0g7().s[36]++;if(_to(typeString)=="string"){cov_1s53a2b0g7().b[15][0]++;cov_1s53a2b0g7().s[37]++;typeString=[typeString];}else{cov_1s53a2b0g7().b[15][1]++;}cov_1s53a2b0g7().s[38]++;return typeString.indexOf(_to(a))>=0?(cov_1s53a2b0g7().b[16][0]++,trueValue):(cov_1s53a2b0g7().b[16][1]++,falseValue);};var _toa=(cov_1s53a2b0g7().s[39]++,bw.typeAssign);cov_1s53a2b0g7().s[40]++;bw.toa=bw.typeAssign;// eslint-disable-line no-unused-vars
141
- //===============================================
142
- // internally used type check and assign function with functional support (trueValue or falseValue can be functions which are passed the param a)
143
- cov_1s53a2b0g7().s[41]++;bw.typeConvert=function(a,typeString,trueValue,falseValue){cov_1s53a2b0g7().f[6]++;cov_1s53a2b0g7().s[42]++;/**
144
- bw.typeConvert(variable, typeString, trueValue, falseValue)
145
- typeConvert is used to see if the argument a is of type typeString as defined by _to().
146
- if it is then trueValue is returned else falseValue.
147
-
148
- bw.typeConvert("23","number","is a number!", "not a number!") ==> "is a number!"
149
- bw.typeConvert([23],"number","is a number!", "not a number!") ==> "not a number!" // is an array of length 1
150
-
151
- can also supply list of types
152
- bw.typeConvert(23,["string","number"], "string or num", "something else") ==> "string or num"
153
- bw.typeConvert(true,["string","number"], "string or num", "something else") ==> "something else"
154
-
155
- bw.typeConvert(23,["string","number"],function(x){return x+1},function(){return function(x){return x+2}})}) ==> 24
156
-
157
- bw.typeConvert(23,["string"],function(x){return x+1},function(){return function(x){return x+2;}})}) ==> function(x){return x+2;}
158
-
159
- however typeConvert also allows functions (as apposed to typeAssign)
160
- */if(["string","array"].indexOf(_to(typeString))==-1){cov_1s53a2b0g7().b[17][0]++;cov_1s53a2b0g7().s[43]++;// typeString must be a string or an arrag or strings
161
- typeString="notValidType";}else{cov_1s53a2b0g7().b[17][1]++;}cov_1s53a2b0g7().s[44]++;if(_to(typeString)=="string"){cov_1s53a2b0g7().b[18][0]++;cov_1s53a2b0g7().s[45]++;typeString=[typeString];}else{cov_1s53a2b0g7().b[18][1]++;}cov_1s53a2b0g7().s[46]++;return typeString.indexOf(_to(a))>=0?(cov_1s53a2b0g7().b[19][0]++,_to(trueValue)=="function"?(cov_1s53a2b0g7().b[20][0]++,trueValue(a)):(cov_1s53a2b0g7().b[20][1]++,trueValue)):(cov_1s53a2b0g7().b[19][1]++,_to(falseValue)=="function"?(cov_1s53a2b0g7().b[21][0]++,falseValue(a)):(cov_1s53a2b0g7().b[21][1]++,falseValue));};//var _tc = bw.typeConvert;
162
- cov_1s53a2b0g7().s[47]++;bw.tc=bw.typeConvert;//===============================================
163
- // internally used function for options copy
164
- // keys in opts are copied to dopts (or overwrite options in dopts)
165
- /* istanbul ignore next */var optsCopy=function(dopts,opts){/* istanbul ignore next */if(_to(opts)=="object"&&_to(dopts)=="object"){var i;for(i in opts)dopts[i]=opts[i];}return dopts;};// ===================================================================================
166
- cov_1s53a2b0g7().s[48]++;bw.arrayUniq=function(x){cov_1s53a2b0g7().f[7]++;cov_1s53a2b0g7().s[49]++;/**
167
- arrayUniq(x)
168
- returns uniq elements of simple array x.
169
- */if(_to(x)!="array"){cov_1s53a2b0g7().b[22][0]++;cov_1s53a2b0g7().s[50]++;return[];}else{cov_1s53a2b0g7().b[22][1]++;}cov_1s53a2b0g7().s[51]++;return x.filter(function(v,i,arr){cov_1s53a2b0g7().f[8]++;cov_1s53a2b0g7().s[52]++;return arr.indexOf(v)==i;});};// ===================================================================================
170
- cov_1s53a2b0g7().s[53]++;bw.arrayBinA=function(a,b){cov_1s53a2b0g7().f[9]++;cov_1s53a2b0g7().s[54]++;/**
171
- arrayBinA(x)
172
- returns intersection elements of to simple arrays a and b
173
- */if((cov_1s53a2b0g7().b[24][0]++,_to(a)!="array")||(cov_1s53a2b0g7().b[24][1]++,_to(b)!=="array")){cov_1s53a2b0g7().b[23][0]++;cov_1s53a2b0g7().s[55]++;return[];}else{cov_1s53a2b0g7().b[23][1]++;}cov_1s53a2b0g7().s[56]++;return bw.arrayUniq(a.filter(function(n){cov_1s53a2b0g7().f[10]++;cov_1s53a2b0g7().s[57]++;return b.indexOf(n)!==-1;}));};cov_1s53a2b0g7().s[58]++;bw.arrayBNotInA=function(a,b){cov_1s53a2b0g7().f[11]++;cov_1s53a2b0g7().s[59]++;/**
174
- arrayBNotinA(x)
175
- returns elements of b not present in a
176
- */if((cov_1s53a2b0g7().b[26][0]++,_to(a)!="array")||(cov_1s53a2b0g7().b[26][1]++,_to(b)!=="array")){cov_1s53a2b0g7().b[25][0]++;cov_1s53a2b0g7().s[60]++;return[];}else{cov_1s53a2b0g7().b[25][1]++;}cov_1s53a2b0g7().s[61]++;return bw.arrayUniq(b.filter(function(n){cov_1s53a2b0g7().f[12]++;cov_1s53a2b0g7().s[62]++;return a.indexOf(n)<0;}));};//===============================================
177
- /* istanbul ignore next */bw.DOMIsElement=function(el){/**
178
- @method bw.DOMIsElement() - returns whether a supplied element is a HTML DOM element. only useful in browser,
179
- */var r=false;try{if(_to(el)=="undefined")return r;if(bw.isNodeJS()==false||typeof Element=="function")r=el instanceof Element;}catch(e){r=typeof HTMLElement==="object"?el instanceof HTMLElement://DOM2
180
- el&&typeof el==="object"&&el!==null&&el.nodeType===1&&typeof el.nodeName==="string";bw.logd(e.toString());}return r;};var _isEl=(cov_1s53a2b0g7().s[63]++,bw.DOMIsElement);//===============================================
181
- /* istanbul ignore next */bw.DOMGetElements=function(el,type){/**
182
- @method DOMGetElements(el, type) returns an array of DOM elements (if running in browser)
183
-
184
- @param {string | DOM_node} el - if string uses CSS selector other wise if already a DOM element returns itself
185
- @return an js array of zero or more matching DOM nodes
186
-
187
- DOMGetElements always looks in the root.
188
-
189
- */ /*
190
- TODO:
191
- var container = document.querySelector("#test");
192
- var matches = container.querySelectorAll("div.highlighted > p");
193
-
194
- */var r=[],a=[],i;if(bw.isNodeJS()==false){// we're running in a browser
195
- if(_isEl(el))return[el];if(_to(el)=="string"){// now its a string so we have choices..
196
- type=_toa(type,"string",type,"auto");// auto means detect whether has a # or . in front of it
197
- el.trim();if(type=="auto")type=bw.choice(el[0],{".":"className","#":"id"},"tagName");type=type.toLowerCase();switch(type){case"id"://get Element by ID
198
- el=el[0]=="#"?el.substring(1,el.length):el;a=document.getElementById(el);a=_toa(a,"null",[],[a]);break;case"classname":// get Elements by class name
199
- el=el[0]=="."?el.substring(1,el.length):el;a=document.getElementsByClassName(el);break;case"tagname":// get Elements by tag name
200
- a=document.getElementsByTagName(el);break;case"name":a=document.getElementsByName(el);break;case"css":a=document.querySelectorAll(el);break;default:a=document.querySelectorAll(el);}for(i in a)r.push(a[i]);}}return r.filter(function(x){return _isEl(x);});};//var _els = bw.DOMGetElements;
201
- // =============================================================================================
202
- /* istanbul ignore next */bw.DOMSetElements=function(domElement,param){/**
203
- @method DOMSetElements(domElement, param) sets DOM elements with the supplied (optional) params
204
-
205
- @param {string | array | dict |function} - params to set on DOMElements
206
- @return an js array of zero or more matching DOM nodes
207
- */var els=bw.DOMGetElements(domElement);if(els==[])bw.log("dom element not found");var i,l,e,ef=function(x,p){bw.log(x,p);};for(l=0;l<els.length;l++){e=els[l];switch(_to(param)){case"array":try{for(i=0;i<param.length;i++)e[param[i][0]]=param[i][1];}catch(d){ef(d,param);}break;case"object":try{for(i in param)e[i]=param[i];}catch(d){ef(d,param);}break;case"string":try{e.innerHTML=param;}catch(d){ef(d,param);}break;case"function":try{param(e);// apply a function to e
208
- }catch(d){ef(d,param);}break;default:break;}}return els;};cov_1s53a2b0g7().s[64]++;bw.DOM=bw.DOMSetElements;//short hand
209
- // =============================================================================================
210
- /**
211
- bitwrench: color functions (used for theming and interpolations)
212
-
213
- bitwrench color functons operate using this internal color representation model:
214
- [c0, c1, c2, alpha, model]
215
- where c0, c1, c2 are model dependant
216
- alpha represents the transperancy
217
- model is a color model string (lowercase) "rgb", or "hsl" (compatible with HTML/CSS colors)
218
-
219
- colorParse() ==> take an input color of anymodel and output a bw [c0,c1,c2,a,m] array
220
- */cov_1s53a2b0g7().s[65]++;bw.colorInterp=function(x,in0,in1,colors,stretch){cov_1s53a2b0g7().f[13]++;/**
221
- @method colorInterp (x, lo, hi, colors[], stretch) - interpolate between and array of colors.
222
- x is a number between the numbers in0 <= x <= in1
223
- colors is an array of colors supplied in rgb format e.g. ["#123", "#234"]
224
- colors can be anylength
225
- */var c=(cov_1s53a2b0g7().s[66]++,_toa(colors,"array",colors,["#000","#fff"]));// make sure we have an array of colors
226
- cov_1s53a2b0g7().s[67]++;c=c.length==0?(cov_1s53a2b0g7().b[27][0]++,["#000","#fff"]):(cov_1s53a2b0g7().b[27][1]++,c);// no colors provide .. interp grayscale is default
227
- cov_1s53a2b0g7().s[68]++;if(c.length==1){cov_1s53a2b0g7().b[28][0]++;cov_1s53a2b0g7().s[69]++;return c[0];}else{cov_1s53a2b0g7().b[28][1]++;}//ok now we we have an array of atleast length 2 which hopefully contains colors.
228
- cov_1s53a2b0g7().s[70]++;c=c.map(function(x){cov_1s53a2b0g7().f[14]++;cov_1s53a2b0g7().s[71]++;return bw.colorParse(x);});// all colors will now be converted to bw RGB format
229
- var a=(cov_1s53a2b0g7().s[72]++,bw.mapScale(x,in0,in1,0,c.length-1,{clip:true,expScale:stretch}));var i=(cov_1s53a2b0g7().s[73]++,bw.clip(Math.floor(a),0,c.length-2));var r=(cov_1s53a2b0g7().s[74]++,a-i);cov_1s53a2b0g7().s[75]++;var _f=function(x){cov_1s53a2b0g7().f[15]++;cov_1s53a2b0g7().s[76]++;return bw.mapScale(r,0,1,c[i][x],c[i+1][x],{clip:true});};cov_1s53a2b0g7().s[77]++;return[_f(0),_f(1),_f(2),_f(3),"rgb"];};// =============================================================================================
230
- cov_1s53a2b0g7().s[78]++;bw.colorHslToRgb=function(h,s,l,a,rnd){cov_1s53a2b0g7().f[16]++;cov_1s53a2b0g7().s[79]++;/**
231
- @method colorHslToRgb
232
- Converts an HSL color value to RGB. Conversion formula
233
-
234
- Assumes h is [0..360] , s, and l are contained in the set [0 .. 100].
235
- returns r, g, and b in the set [0, 255].
236
-
237
- @param {number} h The hue [0..360]
238
- @param {number} s The saturation [0..100]
239
- @param {number} l The lightness [0..100]
240
-
241
- OR...
242
-
243
- pass the colors as a bitwrench color array as a single parameter:
244
-
245
- colorHslToRgb([h,s,l,a,"hsl"])
246
-
247
- @return {Array} The RGB representation as [r, g, b, alpha, "rgb"]
248
-
249
- last parameter rnd rounds the results to 0..255. set to false to eliminate rounding. This can be useful for chained calcs
250
-
251
- see : adapted from http://hsl2rgb.nichabi.com/javascript-function.php
252
-
253
- */if(_to(h)=="array"){cov_1s53a2b0g7().b[29][0]++;cov_1s53a2b0g7().s[80]++;// handles colors of [h,s,l,a,"hsl"]
254
- s=h[1];cov_1s53a2b0g7().s[81]++;l=h[2];cov_1s53a2b0g7().s[82]++;a=h[3];cov_1s53a2b0g7().s[83]++;h=h[0];//do this last so it doesn't overwrite iself
255
- }else{cov_1s53a2b0g7().b[29][1]++;}var _fn=(cov_1s53a2b0g7().s[84]++,rnd==false?(cov_1s53a2b0g7().b[30][0]++,function(x){cov_1s53a2b0g7().f[17]++;cov_1s53a2b0g7().s[85]++;return x;}):(cov_1s53a2b0g7().b[30][1]++,function(x){cov_1s53a2b0g7().f[18]++;cov_1s53a2b0g7().s[86]++;return bw.clip(Math.round(x),0,255);}));var r,g,b,c,x,m;cov_1s53a2b0g7().s[87]++;h=(h+360)%360;cov_1s53a2b0g7().s[88]++;h/=60;cov_1s53a2b0g7().s[89]++;if(h<0){cov_1s53a2b0g7().b[31][0]++;cov_1s53a2b0g7().s[90]++;h=6- -h%6;}else{cov_1s53a2b0g7().b[31][1]++;}cov_1s53a2b0g7().s[91]++;h%=6;cov_1s53a2b0g7().s[92]++;s=Math.max(0,Math.min(1,s/100));cov_1s53a2b0g7().s[93]++;l=Math.max(0,Math.min(1,l/100));cov_1s53a2b0g7().s[94]++;c=(1-Math.abs(2*l-1))*s;cov_1s53a2b0g7().s[95]++;x=c*(1-Math.abs(h%2-1));cov_1s53a2b0g7().s[96]++;if(h<1){cov_1s53a2b0g7().b[32][0]++;cov_1s53a2b0g7().s[97]++;r=c;cov_1s53a2b0g7().s[98]++;g=x;cov_1s53a2b0g7().s[99]++;b=0;}else{cov_1s53a2b0g7().b[32][1]++;cov_1s53a2b0g7().s[100]++;if(h<2){cov_1s53a2b0g7().b[33][0]++;cov_1s53a2b0g7().s[101]++;r=x;cov_1s53a2b0g7().s[102]++;g=c;cov_1s53a2b0g7().s[103]++;b=0;}else{cov_1s53a2b0g7().b[33][1]++;cov_1s53a2b0g7().s[104]++;if(h<3){cov_1s53a2b0g7().b[34][0]++;cov_1s53a2b0g7().s[105]++;r=0;cov_1s53a2b0g7().s[106]++;g=c;cov_1s53a2b0g7().s[107]++;b=x;}else{cov_1s53a2b0g7().b[34][1]++;cov_1s53a2b0g7().s[108]++;if(h<4){cov_1s53a2b0g7().b[35][0]++;cov_1s53a2b0g7().s[109]++;r=0;cov_1s53a2b0g7().s[110]++;g=x;cov_1s53a2b0g7().s[111]++;b=c;}else{cov_1s53a2b0g7().b[35][1]++;cov_1s53a2b0g7().s[112]++;if(h<5){cov_1s53a2b0g7().b[36][0]++;cov_1s53a2b0g7().s[113]++;r=x;cov_1s53a2b0g7().s[114]++;g=0;cov_1s53a2b0g7().s[115]++;b=c;}else{cov_1s53a2b0g7().b[36][1]++;cov_1s53a2b0g7().s[116]++;r=c;cov_1s53a2b0g7().s[117]++;g=0;cov_1s53a2b0g7().s[118]++;b=x;}}}}}cov_1s53a2b0g7().s[119]++;m=l-c/2;cov_1s53a2b0g7().s[120]++;r=(r+m)*255;cov_1s53a2b0g7().s[121]++;g=(g+m)*255;cov_1s53a2b0g7().s[122]++;b=(b+m)*255;cov_1s53a2b0g7().s[123]++;return[_fn(r),_fn(g),_fn(b),a,"rgb"];};// =============================================================================================
256
- cov_1s53a2b0g7().s[124]++;bw.colorRgbToHsl=function(r,g,b,a,rnd){cov_1s53a2b0g7().f[19]++;cov_1s53a2b0g7().s[125]++;/**
257
- Converts an RGB color value to HSL. Conversion formula
258
- adapted from http://en.wikipedia.org/wiki/HSL_color_space.
259
- Assumes r, g, and b are contained in the set [0, 255] and
260
- returns h as [0..360] s, and l in the set [0 .. 100].
261
-
262
- @param {number} r The red color value
263
- @param {number} g The green color value
264
- @param {number} b The blue color value
265
-
266
- pass the colors as a bitwrench color array as a single parameter:
267
- colorRgbToHsl([h,s,l,a,"rgb"])
268
-
269
- last parameter rnd rounds the results to 0..255. set to false to eliminate rounding. This can be useful for chained calcs
270
- @return {Array} The HSL representation
271
- */if(_to(r)=="array"){cov_1s53a2b0g7().b[37][0]++;cov_1s53a2b0g7().s[126]++;// handles colors of [h,s,l,a,"hsl"]
272
- g=r[1];cov_1s53a2b0g7().s[127]++;b=r[2];cov_1s53a2b0g7().s[128]++;a=r[3];cov_1s53a2b0g7().s[129]++;r=r[0];//do this last so it doesn't overwrite iself
273
- }else{cov_1s53a2b0g7().b[37][1]++;}cov_1s53a2b0g7().s[130]++;r/=255,g/=255,b/=255;var max=(cov_1s53a2b0g7().s[131]++,Math.max(r,g,b)),min=(cov_1s53a2b0g7().s[132]++,Math.min(r,g,b));var h,s,l=(cov_1s53a2b0g7().s[133]++,(max+min)/2);cov_1s53a2b0g7().s[134]++;if(max==min){cov_1s53a2b0g7().b[38][0]++;cov_1s53a2b0g7().s[135]++;h=s=0;// achromatic
274
- }else{cov_1s53a2b0g7().b[38][1]++;var d=(cov_1s53a2b0g7().s[136]++,max-min);cov_1s53a2b0g7().s[137]++;s=l>0.5?(cov_1s53a2b0g7().b[39][0]++,d/(2-max-min)):(cov_1s53a2b0g7().b[39][1]++,d/(max+min));cov_1s53a2b0g7().s[138]++;switch(max){case r:cov_1s53a2b0g7().b[40][0]++;cov_1s53a2b0g7().s[139]++;h=(g-b)/d+(g<b?(cov_1s53a2b0g7().b[41][0]++,6):(cov_1s53a2b0g7().b[41][1]++,0));cov_1s53a2b0g7().s[140]++;break;case g:cov_1s53a2b0g7().b[40][1]++;cov_1s53a2b0g7().s[141]++;h=(b-r)/d+2;cov_1s53a2b0g7().s[142]++;break;case b:cov_1s53a2b0g7().b[40][2]++;cov_1s53a2b0g7().s[143]++;h=(r-g)/d+4;cov_1s53a2b0g7().s[144]++;break;}cov_1s53a2b0g7().s[145]++;h/=6;}var _fn=(cov_1s53a2b0g7().s[146]++,rnd==false?(cov_1s53a2b0g7().b[42][0]++,function(x){cov_1s53a2b0g7().f[20]++;cov_1s53a2b0g7().s[147]++;return x;}):(cov_1s53a2b0g7().b[42][1]++,function(x){cov_1s53a2b0g7().f[21]++;cov_1s53a2b0g7().s[148]++;return Math.round(x);}));cov_1s53a2b0g7().s[149]++;return[_fn(h*360),_fn(s*100),_fn(l*100),a,"hsl"];};// =============================================================================================
275
- cov_1s53a2b0g7().s[150]++;bw.colorParse=function(s,defAlpha){cov_1s53a2b0g7().f[22]++;cov_1s53a2b0g7().s[151]++;/**
276
- @method bw.colorParse(s)
277
-
278
- @description take a valid CSS style color string: #rgb | #rgba | #rrggbb | #rrggbbaa | rgb(r,g,b) | rgb(r,g,b,a) | hsl(h,s,l) | hsla(h,s,l,a )
279
- ... and return array [c0,c1,c2,a,model] where model is one of "rgb", "hsl"
280
- */defAlpha=_toa(defAlpha,"number",defAlpha,255);var r=(cov_1s53a2b0g7().s[152]++,[0,0,0,defAlpha,"rgb"]);// always return a valid type
281
- cov_1s53a2b0g7().s[153]++;if(_to(s)=="array"){cov_1s53a2b0g7().b[43][0]++;// it could be a bwcolor type [c0,c1,c2,a,model]
282
- var p,df=(cov_1s53a2b0g7().s[154]++,[0,0,0,255,"rgb"]);cov_1s53a2b0g7().s[155]++;for(p=0;p<s.length;p++){cov_1s53a2b0g7().s[156]++;df[p]=s[p];}cov_1s53a2b0g7().s[157]++;s=String(df[4])+"("+String(df[0])+","+String(df[1])+","+String(df[2])+","+String(df[3])+")";//could use slice..join(",")
283
- }else{cov_1s53a2b0g7().b[43][1]++;}cov_1s53a2b0g7().s[158]++;s=String(s).replace(/\s/g,"");var reT=(cov_1s53a2b0g7().s[159]++,/\s*(#|hsl|rgb|yuv|hsv){1}([a-f|A-F|0-9|,().\t ]*)/img);var i,j=(cov_1s53a2b0g7().s[160]++,0),x=(cov_1s53a2b0g7().s[161]++,reT.exec(s));cov_1s53a2b0g7().s[162]++;if((cov_1s53a2b0g7().b[45][0]++,_to(x)=="array")&&(cov_1s53a2b0g7().b[45][1]++,x.length>=3)){cov_1s53a2b0g7().b[44][0]++;cov_1s53a2b0g7().s[163]++;r[4]=x[1]=="#"?(cov_1s53a2b0g7().b[46][0]++,"rgb"):(cov_1s53a2b0g7().b[46][1]++,x);cov_1s53a2b0g7().s[164]++;if(x[1]=="#"){cov_1s53a2b0g7().b[47][0]++;cov_1s53a2b0g7().s[165]++;//parse one of these #rgb #rgba #rrggbb #rrggbbaa
284
- switch(x[2].length){case 3:cov_1s53a2b0g7().b[48][0]++;//#rgb
285
- case 4:cov_1s53a2b0g7().b[48][1]++;cov_1s53a2b0g7().s[166]++;//#rgba
286
- for(i=0;i<x[2].length;i++){cov_1s53a2b0g7().s[167]++;r[i]=parseInt(x[2][i]+x[2][i],16);}cov_1s53a2b0g7().s[168]++;break;case 6:cov_1s53a2b0g7().b[48][2]++;//#rrggbb
287
- case 8:cov_1s53a2b0g7().b[48][3]++;cov_1s53a2b0g7().s[169]++;//#rrggbbaa
288
- for(i=0;i<x[2].length;i+=2){cov_1s53a2b0g7().s[170]++;r[j++]=parseInt(x[2][i]+x[2][i+1],16);}cov_1s53a2b0g7().s[171]++;break;default:cov_1s53a2b0g7().b[48][4]++;cov_1s53a2b0g7().s[172]++;bw.logd("bw.parseColor bad input "+s);}}else{cov_1s53a2b0g7().b[47][1]++;cov_1s53a2b0g7().s[173]++;// its should be of form (c0,c1,c2) or (c0,c1,c2,alpha)
289
- r[4]=x[1].toLocaleLowerCase();cov_1s53a2b0g7().s[174]++;if((cov_1s53a2b0g7().b[50][0]++,x[2][0]=="(")&&(cov_1s53a2b0g7().b[50][1]++,x[2][x[2].length-1]==")")){cov_1s53a2b0g7().b[49][0]++;// parans are present
290
- var v=(cov_1s53a2b0g7().s[175]++,x[2].substring(1,x[2].length-1));cov_1s53a2b0g7().s[176]++;v=v.split(",");cov_1s53a2b0g7().s[177]++;switch(v.length){// valid entries are 3 or 4 components
291
- case 3:cov_1s53a2b0g7().b[51][0]++;case 4:cov_1s53a2b0g7().b[51][1]++;cov_1s53a2b0g7().s[178]++;for(i=0;i<v.length;i++){cov_1s53a2b0g7().s[179]++;r[i]=Number(v[i]);}cov_1s53a2b0g7().s[180]++;break;default:cov_1s53a2b0g7().b[51][2]++;cov_1s53a2b0g7().s[181]++;bw.logd("bw.parseColor bad input : "+s);}}else{cov_1s53a2b0g7().b[49][1]++;cov_1s53a2b0g7().s[182]++;bw.logd("bw.parseColor bad input : "+s);}}}else{cov_1s53a2b0g7().b[44][1]++;}cov_1s53a2b0g7().s[183]++;return r;};// =============================================================================================
292
- cov_1s53a2b0g7().s[184]++;bw.colorToRGBHex=function(c,format){cov_1s53a2b0g7().f[23]++;/**
293
- @method bw.colorToRGBHex(color)
294
- @description take a color of the form a string or [c0,c1,c2,alpha,model] ==> convert to #rrggbbaa format
295
- format (optional) can be set to auto in which case alpha is ommitted if set to 255
296
- */var r=(cov_1s53a2b0g7().s[185]++,"#00000000");cov_1s53a2b0g7().s[186]++;var ph=function(x){cov_1s53a2b0g7().f[24]++;var y=(cov_1s53a2b0g7().s[187]++,bw.clip(Math.round(x),0,255).toString(16));cov_1s53a2b0g7().s[188]++;return y.length==1?(cov_1s53a2b0g7().b[52][0]++,"0"+y):(cov_1s53a2b0g7().b[52][1]++,y);};// pad hex
297
- cov_1s53a2b0g7().s[189]++;c=bw.colorParse(c);// converts color to bw color vector format
298
- cov_1s53a2b0g7().s[190]++;switch(c[4]){case"rgb":cov_1s53a2b0g7().b[53][0]++;cov_1s53a2b0g7().s[191]++;r="#"+ph(c[0])+ph(c[1])+ph(c[2]);cov_1s53a2b0g7().s[192]++;if(!((cov_1s53a2b0g7().b[55][0]++,format=="auto")&&(cov_1s53a2b0g7().b[55][1]++,c[3]==255))){cov_1s53a2b0g7().b[54][0]++;cov_1s53a2b0g7().s[193]++;r+=ph(c[3]);}else{cov_1s53a2b0g7().b[54][1]++;}cov_1s53a2b0g7().s[194]++;break;case"hsl":cov_1s53a2b0g7().b[53][1]++;cov_1s53a2b0g7().s[195]++;r=bw.colorToRGBHex(bw.colorHslToRgb(c));cov_1s53a2b0g7().s[196]++;break;default:cov_1s53a2b0g7().b[53][2]++;cov_1s53a2b0g7().s[197]++;bw.logd("colorToRGBHex : unsupported format"+c[4]);}cov_1s53a2b0g7().s[198]++;return r;// default
299
- };// =============================================================================================
300
- cov_1s53a2b0g7().s[199]++;bw.colorConvertColorSpace=function(c,space,rnd){cov_1s53a2b0g7().f[25]++;cov_1s53a2b0g7().s[200]++;/**
301
- @method bw.colorConvertColorSpace(color, spaceToConvertTo)
302
- @description take a color and convert it to the destination color space ("rgb" | "hsl")
303
- color can be any valid color type ("#abc" | "hs(...)" or [r,g,b,a,"rgb"] etc)
304
-
305
- optional 3rd param rnd if set to false will suppress rounding in calcs to allow chained color conversion w/o loss of precision
306
-
307
- */c=bw.colorParse(c);cov_1s53a2b0g7().s[201]++;if(space==c[4]){cov_1s53a2b0g7().b[56][0]++;cov_1s53a2b0g7().s[202]++;return c;}else{cov_1s53a2b0g7().b[56][1]++;}cov_1s53a2b0g7().s[203]++;switch(c[4]){case"rgb":cov_1s53a2b0g7().b[57][0]++;cov_1s53a2b0g7().s[204]++;break;case"hsl":cov_1s53a2b0g7().b[57][1]++;cov_1s53a2b0g7().s[205]++;c=bw.colorHslToRgb(c[0],c[1],c[2],c[3],rnd);// turns off rounding
308
- cov_1s53a2b0g7().s[206]++;break;default:cov_1s53a2b0g7().b[57][2]++;cov_1s53a2b0g7().s[207]++;bw.logd("colorConvertColorSpace: unsupported color format");}//now c is in the rgb space
309
- cov_1s53a2b0g7().s[208]++;switch(space){case"rgb":cov_1s53a2b0g7().b[58][0]++;cov_1s53a2b0g7().s[209]++;break;case"hsl":cov_1s53a2b0g7().b[58][1]++;cov_1s53a2b0g7().s[210]++;c=bw.colorRgbToHsl(c[0],c[1],c[2],c[3],rnd);// turns off rounding
310
- cov_1s53a2b0g7().s[211]++;break;default:cov_1s53a2b0g7().b[58][2]++;cov_1s53a2b0g7().s[212]++;bw.logd("colorConvertColorSpace: unsupported color format");}cov_1s53a2b0g7().s[213]++;return c;};// =============================================================================================
311
- var _logdata=(cov_1s53a2b0g7().s[214]++,[]);cov_1s53a2b0g7().s[215]++;bw.log=function(value,msg,opts){cov_1s53a2b0g7().f[26]++;/**
312
- bw.log(value, message, options)
313
- write a value to the in-memory log
314
- options {
315
- clear: false | true | "clear-only"
316
- false : normal write
317
- true : clear log and add 1st entry
318
- clear-only - only clear don't write, value, msg
319
- saveMethod: "raw" | "JSON" // raw is default, save object as passed, JSON saves stringified version (useful for exporting or saving state)
320
- }
321
- */var dopts=(cov_1s53a2b0g7().s[216]++,{clear:false,// values fales, true, "clear-only"
322
- saveMethod:"raw"// else "JSON"
323
- });cov_1s53a2b0g7().s[217]++;dopts=optsCopy(dopts,opts);cov_1s53a2b0g7().s[218]++;if((cov_1s53a2b0g7().b[60][0]++,dopts["clear"]==true)||(cov_1s53a2b0g7().b[60][1]++,dopts["clear"]=="clear-only")){cov_1s53a2b0g7().b[59][0]++;cov_1s53a2b0g7().s[219]++;_logdata=[["Time-stamp (ms)"," Value "," Message "]];cov_1s53a2b0g7().s[220]++;_logdata.push([0,new Date().getTime()," log started (absolute timestamp)"]);}else{cov_1s53a2b0g7().b[59][1]++;}cov_1s53a2b0g7().s[221]++;msg=_toa(msg,"undefined","",String(msg));cov_1s53a2b0g7().s[222]++;value=dopts["saveMethod"]=="raw"?(cov_1s53a2b0g7().b[61][0]++,value):(cov_1s53a2b0g7().b[61][1]++,JSON.stringify(value));cov_1s53a2b0g7().s[223]++;if((cov_1s53a2b0g7().b[63][0]++,_to(value)!="undefined")&&(cov_1s53a2b0g7().b[63][1]++,dopts["clear"]!="clear-only")){cov_1s53a2b0g7().b[62][0]++;cov_1s53a2b0g7().s[224]++;_logdata.push([new Date().getTime()-_logdata[1][1],value,msg]);}else{cov_1s53a2b0g7().b[62][1]++;}cov_1s53a2b0g7().s[225]++;return _logdata.length-1;};cov_1s53a2b0g7().s[226]++;bw.log("","",{clear:"clear-only"});// initialize
324
- // =============================================================================================
325
- cov_1s53a2b0g7().s[227]++;bw.logd=function(){cov_1s53a2b0g7().f[27]++;/**
326
- @method bw.logd()
327
- @description: bw.logd is a log funciton which behaves similar to console.log() however instread of outputting to console,
328
- it writes to bw.log() function with the following differences:
329
-
330
-
331
- */ /*
332
- todo: comma seperated items; ? done
333
- console ==> also (attempt) to output to console.log ? would need to set a bw.state variable..
334
- bwdbg ==> log bw catches / errors (else silent)
335
- none ==> no output (of any kind)
336
- stringify ==> takes bw.logd args and strinigyfies before writing to bw.log
337
- example:
338
- logd=console,bwlogd
339
-
340
- */var logdargs=(cov_1s53a2b0g7().s[228]++,"bwlogd"in bw.bwargs?(cov_1s53a2b0g7().b[64][0]++,bw.bwargs["bwlogd"].split(",")):(cov_1s53a2b0g7().b[64][1]++,[]));cov_1s53a2b0g7().s[229]++;if(logdargs.indexOf("none")<0){cov_1s53a2b0g7().b[65][0]++;var i=(cov_1s53a2b0g7().s[230]++,0);var _a=(cov_1s53a2b0g7().s[231]++,[]);cov_1s53a2b0g7().s[232]++;for(i=0;i<arguments.length;i++){cov_1s53a2b0g7().s[233]++;_a.push(arguments[i]);}//arguments, a reserved javascript keyword, is not a true array
341
- cov_1s53a2b0g7().s[234]++;bw.log(_a,"bw.logd: "+bw.bwargs["bwlogd"]);// message
342
- }else{cov_1s53a2b0g7().b[65][1]++;}};// =============================================================================================
343
- cov_1s53a2b0g7().s[235]++;bw.logExport=function(opts){cov_1s53a2b0g7().f[28]++;/**
344
- bw.logExport(options)
345
- export the built in log.
346
- default is "raw" which is an array of values:
347
- [timestamp, <value logged>, <optional message from the event>]
348
- [ .. , .. , .. ]
349
-
350
- also can be exported as an HTML table.
351
- bw.logExport({"format":"HTML"})
352
-
353
- or as a simple text file:
354
- bw.logExport("format" : "text"})
355
-
356
- see bw.saveClientFile(fname) for saving the log as a file
357
- */var dopts=(cov_1s53a2b0g7().s[236]++,{"format":"raw"// can also be HTML table if set to "HTML"
358
- });cov_1s53a2b0g7().s[237]++;dopts=optsCopy(dopts,opts);var _ld=(cov_1s53a2b0g7().s[238]++,_logdata);cov_1s53a2b0g7().s[239]++;if(dopts["format"]=="HTML"){cov_1s53a2b0g7().b[66][0]++;cov_1s53a2b0g7().s[240]++;return bw.makeHTMLTableStr(_ld,{sortable:true});}else{cov_1s53a2b0g7().b[66][1]++;}cov_1s53a2b0g7().s[241]++;if(dopts["format"]=="text"){cov_1s53a2b0g7().b[67][0]++;cov_1s53a2b0g7().s[242]++;return _ld.map(function(x){cov_1s53a2b0g7().f[29]++;cov_1s53a2b0g7().s[243]++;return x.map(function(y){cov_1s53a2b0g7().f[30]++;cov_1s53a2b0g7().s[244]++;return bw.padString(y.toString(),16,"left");}).join("\t");}).join("\n");}else{cov_1s53a2b0g7().b[67][1]++;}cov_1s53a2b0g7().s[245]++;return _ld;};// ===================================================================================
359
- cov_1s53a2b0g7().s[246]++;bw.setCookie=function(cname,cvalue,exdays){cov_1s53a2b0g7().f[31]++;/**
360
- @method bw.setCookie(cookieName, value, expireDays) set a client side cookie. (browser only)
361
- @param cname : a string for the name of the cookie
362
- @param cvalue : a string for the value of the cookie
363
- @param expdays : cookie expiration date in days
364
- */var d=(cov_1s53a2b0g7().s[247]++,new Date());cov_1s53a2b0g7().s[248]++;d.setTime(d.getTime()+exdays*24*60*60*1000);var expires=(cov_1s53a2b0g7().s[249]++,"expires="+d.toUTCString());cov_1s53a2b0g7().s[250]++;document.cookie=cname+"="+cvalue+"; "+expires;};// ===================================================================================
365
- cov_1s53a2b0g7().s[251]++;bw.getCookie=function(cname,defaultValue){cov_1s53a2b0g7().f[32]++;/**
366
- @method bw.getCookie: bw.getCookie(cookieName, defaultValueIfNotFound) (browser only)
367
- get a client side cookie, if it is set. returns defaultValue if cookie could not be found
368
- */var name=(cov_1s53a2b0g7().s[252]++,cname+"=");var ca=(cov_1s53a2b0g7().s[253]++,document.cookie.split(";"));cov_1s53a2b0g7().s[254]++;for(var i=(cov_1s53a2b0g7().s[255]++,0);i<ca.length;i++){var c=(cov_1s53a2b0g7().s[256]++,ca[i]);cov_1s53a2b0g7().s[257]++;while(c.charAt(0)==" "){cov_1s53a2b0g7().s[258]++;c=c.substring(1);}cov_1s53a2b0g7().s[259]++;if(c.indexOf(name)==0){cov_1s53a2b0g7().b[68][0]++;cov_1s53a2b0g7().s[260]++;return c.substring(name.length,c.length);}else{cov_1s53a2b0g7().b[68][1]++;}}cov_1s53a2b0g7().s[261]++;return defaultValue;};// ===================================================================================
369
- cov_1s53a2b0g7().s[262]++;bw.getURLParam=function(key,defaultValue){cov_1s53a2b0g7().f[33]++;cov_1s53a2b0g7().s[263]++;/**
370
- @method bw.getURLParam(key,defaultValueIfNotFound)
371
- read the URL (e.g. http://example.com/my/page?this=that&foo=123&bub&x=123) and parse the URL paraemeters
372
-
373
- x = bw.getURLParam() ==> returns entire dict of url params ==? {this:"that",foo:"123",bub:true,x:"123"}
374
- x = bw.getURLParam("foo","whatever") ==> returns "123"
375
- x = bw.getURLParam("bar","whatever") ==> returns "whatever" since bar isn't set
376
- x = bw.getURLParam("bub","whatever") ==> returns true since bub doesn't have a value (note boolean true not "true")
377
-
378
- */if((cov_1s53a2b0g7().b[70][0]++,bw.isNodeJS()==true)||(cov_1s53a2b0g7().b[70][1]++,typeof window!="object")){cov_1s53a2b0g7().b[69][0]++;cov_1s53a2b0g7().s[264]++;return defaultValue;}else{cov_1s53a2b0g7().b[69][1]++;}cov_1s53a2b0g7().s[265]++;try{cov_1s53a2b0g7().s[266]++;if(window.location.href){cov_1s53a2b0g7().b[71][0]++;cov_1s53a2b0g7().s[267]++;return bw.URLParamParse(window.location.href,key,defaultValue);}else{cov_1s53a2b0g7().b[71][1]++;}}catch(e){cov_1s53a2b0g7().s[268]++;bw.log(e);}cov_1s53a2b0g7().s[269]++;return defaultValue;};cov_1s53a2b0g7().s[270]++;bw.URLHash=function(url,defValue){cov_1s53a2b0g7().f[34]++;cov_1s53a2b0g7().s[271]++;/**
379
- @method bw.URLHash(url,defValue) - returns the hash portion of a URL (if present) else return defValue
380
- */if(_to(url)=="undefined"){cov_1s53a2b0g7().b[72][0]++;cov_1s53a2b0g7().s[272]++;url=typeof window=="object"?(cov_1s53a2b0g7().b[73][0]++,window.location.href):(cov_1s53a2b0g7().b[73][1]++,"");}else{cov_1s53a2b0g7().b[72][1]++;}var r=(cov_1s53a2b0g7().s[273]++,url.split(/#+/));cov_1s53a2b0g7().s[274]++;return url.includes("#")?(cov_1s53a2b0g7().b[74][0]++,r[r.length-1]):(cov_1s53a2b0g7().b[74][1]++,defValue);};//=================================================
381
- cov_1s53a2b0g7().s[275]++;bw.URLParamParse=function(url,key,defValue,allowHash){cov_1s53a2b0g7().f[35]++;cov_1s53a2b0g7().s[276]++;/**
382
-
383
- @method bw.URLParamParse(urlString, key, defaultValue)
384
-
385
- decode a URL encoded string in to a javascript dictionary. Other params (http, port, path) are not handled
386
-
387
- if key is present than only that value is returned (as a string ) else defValue is returned.
388
-
389
- examples:
390
- x = URLParamParse("http://example.com?a=123&b=345") ==> {a:"123", b:"456"}
391
- x = URLParamParse("http://example.com?a=123&b=345","a") ==> "123"
392
- x = URLParamParse("http://example.com?a=123&b=345","c","otherValue") ==> {a:"123", b:"456"} ==> "otherValue"
393
- */try{cov_1s53a2b0g7().s[277]++;var hs=function(u){cov_1s53a2b0g7().f[36]++;var x=(cov_1s53a2b0g7().s[278]++,u.split(/^.*\?+/));cov_1s53a2b0g7().s[279]++;return x.length==2?(cov_1s53a2b0g7().b[75][0]++,x[1]):(cov_1s53a2b0g7().b[75][1]++,"");};cov_1s53a2b0g7().s[280]++;var sh=function(u,b){cov_1s53a2b0g7().f[37]++;cov_1s53a2b0g7().s[281]++;return b==true?(cov_1s53a2b0g7().b[76][0]++,u):(cov_1s53a2b0g7().b[76][1]++,u.split(/#+/)[0]);};var params=(cov_1s53a2b0g7().s[282]++,{}),parts=(cov_1s53a2b0g7().s[283]++,sh(hs(url),allowHash).split("&"));cov_1s53a2b0g7().s[284]++;for(var i=(cov_1s53a2b0g7().s[285]++,0);i<parts.length;i++){var e=(cov_1s53a2b0g7().s[286]++,parts[i].split("="));cov_1s53a2b0g7().s[287]++;if(!e[0]){cov_1s53a2b0g7().b[77][0]++;cov_1s53a2b0g7().s[288]++;continue;}else{cov_1s53a2b0g7().b[77][1]++;}cov_1s53a2b0g7().s[289]++;params[decodeURIComponent(e[0])]=_to(e[1])=="string"?(cov_1s53a2b0g7().b[78][0]++,decodeURIComponent(e[1].replace("#","%23"))):(cov_1s53a2b0g7().b[78][1]++,true);}cov_1s53a2b0g7().s[290]++;if(_to(key)=="undefined"){cov_1s53a2b0g7().b[79][0]++;cov_1s53a2b0g7().s[291]++;return params;}else{cov_1s53a2b0g7().b[79][1]++;}cov_1s53a2b0g7().s[292]++;return params.hasOwnProperty(key)?(cov_1s53a2b0g7().b[80][0]++,params[key]):(cov_1s53a2b0g7().b[80][1]++,defValue);}catch(e){cov_1s53a2b0g7().s[293]++;bw.log(e);cov_1s53a2b0g7().s[294]++;return defValue;}};//=================================================
394
- cov_1s53a2b0g7().s[295]++;bw.URLParamPack=function(simpleDict,inclQuestion){cov_1s53a2b0g7().f[38]++;/**
395
- @method bw.URLParamPack(simpleDict, inclQuestion) : packs a simple dict in to URL encoded format
396
- @param simpleDict(object) - dictionary of simple key value pairs (not nested) if "deep" JSON needs to be packed then stringify that first
397
- @param InclQuestion(boolean) - if true adds "?" to string otherwise ommitted.
398
-
399
- see also URLParamParse.
400
- note if using bw.URLParamParse besure to include "?"" ==> bw.URLParamParse(bw.URLParamPack({a:1,b;2},"true"))
401
- */var k,s=(cov_1s53a2b0g7().s[296]++,[]);cov_1s53a2b0g7().s[297]++;if(_to(simpleDict)=="object"){cov_1s53a2b0g7().b[81][0]++;cov_1s53a2b0g7().s[298]++;for(k in simpleDict){cov_1s53a2b0g7().s[299]++;s.push([encodeURIComponent(k)+"="+encodeURIComponent(simpleDict[k].toString())]);}cov_1s53a2b0g7().s[300]++;s=s.join("&");}else{cov_1s53a2b0g7().b[81][1]++;cov_1s53a2b0g7().s[301]++;s="";}cov_1s53a2b0g7().s[302]++;return(inclQuestion?(cov_1s53a2b0g7().b[82][0]++,"?"):(cov_1s53a2b0g7().b[82][1]++,""))+s;};// ===================================================================================
402
- cov_1s53a2b0g7().s[303]++;bw.htmlSafeStr=function(str){cov_1s53a2b0g7().f[39]++;/**
403
- bw.htmlSageString(str)
404
- Replace non valid HTML characters with HTML escaped equivalents.
405
- */ //generic way..
406
- //var x = function(x){return "&#"+x.toString().charCodeAt(0)+";";}
407
- //return (str.toString()).replace(/[<>&\\#]/gm,x).replace(/[\n]/gm,"<br>");
408
- //old way is "pretty", tabs are issued 4 spaces..
409
- var c=(cov_1s53a2b0g7().s[304]++,{"<":"&lt;",">":"&gt;","&":"&amp;","\"":"&quot;","'":"&#039;","#":"&#035;","\\\\":"","\n":"<br>","\t":"&nbsp;&nbsp;&nbsp;&nbsp;"});cov_1s53a2b0g7().s[305]++;return str.toString().replace(new RegExp("["+Object.keys(c).join("")+"]","gm"),function(s){cov_1s53a2b0g7().f[40]++;cov_1s53a2b0g7().s[306]++;return c[s];});};// ===================================================================================
410
- cov_1s53a2b0g7().s[307]++;bw.htmlJSON=function(json){cov_1s53a2b0g7().f[41]++;/**
411
- @method bw.htmlJSON(object, styles)
412
- pretty print any javascript object as displayable HTML.
413
- e.g.
414
- document.getElementById("myPlaceToDisplay").innerHTML = bw.prettyPrintJSON(...any object ....)
415
- */ //TODO make style dict as a param
416
- function f(json){cov_1s53a2b0g7().f[42]++;cov_1s53a2b0g7().s[308]++;json=JSON.stringify(json,undefined,2);cov_1s53a2b0g7().s[309]++;if(typeof json!="string"){cov_1s53a2b0g7().b[83][0]++;cov_1s53a2b0g7().s[310]++;json=JSON.stringify(json,undefined,2);}else{cov_1s53a2b0g7().b[83][1]++;}cov_1s53a2b0g7().s[311]++;json=json.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;");//html safe chars
417
- //json = bw.htmlSafeStr(json);
418
- cov_1s53a2b0g7().s[312]++;return json.replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+-]?\d+)?)/g,function(match){cov_1s53a2b0g7().f[43]++;var sty=(cov_1s53a2b0g7().s[313]++,"color: darkorange;");cov_1s53a2b0g7().s[314]++;if(/^"/.test(match)){cov_1s53a2b0g7().b[84][0]++;cov_1s53a2b0g7().s[315]++;if(/:$/.test(match)){cov_1s53a2b0g7().b[85][0]++;cov_1s53a2b0g7().s[316]++;sty="color:red";}else{cov_1s53a2b0g7().b[85][1]++;cov_1s53a2b0g7().s[317]++;sty="color:purple";}}else{cov_1s53a2b0g7().b[84][1]++;cov_1s53a2b0g7().s[318]++;if(/true|false/.test(match)){cov_1s53a2b0g7().b[86][0]++;cov_1s53a2b0g7().s[319]++;sty="color:grey";}else{cov_1s53a2b0g7().b[86][1]++;cov_1s53a2b0g7().s[320]++;if(/null/.test(match)){cov_1s53a2b0g7().b[87][0]++;cov_1s53a2b0g7().s[321]++;sty="color:black";}else{cov_1s53a2b0g7().b[87][1]++;cov_1s53a2b0g7().s[322]++;sty="color:green";}}}cov_1s53a2b0g7().s[323]++;return"<span style=\""+sty+"\">"+match+"</span>";});}cov_1s53a2b0g7().s[324]++;return"<pre style=''>"+f(json)+"</pre>";};// ===================================================================================
419
- cov_1s53a2b0g7().s[325]++;bw.makeCSS=function(cssData,options){cov_1s53a2b0g7().f[44]++;/**
420
- bw.makeCSS(cssData, options)
421
-
422
- cssData = "h2 {color:blue;}" // string as full rule (all correctness is on the caller)
423
- cssData = ["h2 {color:blue;}"] // array entry but single string
424
- cssData = ["h2 {color:blue}", "div {width:30px}"] // 2 entries, both strings
425
- cssData = [["h2","color:blue"]] // array of rules (here length 1 rule)
426
- cssData = [["h2","color:blue"], ["h3", "font-color:red"]] // array of rules
427
- cssData = [
428
- [["h2","h4"], "color:blue"], // array or selectors, string for rule
429
- ["h3", "color:red"] // string for selector, string for rule
430
- ]
431
- cssData = [
432
- [["h1","div p"],["color:blue","display:block"]], ==> h1, div p {color: blue; diplay:block;}
433
- "h3 {color:red;}", ==> h3 {color: red;}
434
- [["div",".myClass"],"color : red"], ==> div,.myClass {color: red;}
435
- ["p > .myclass", ["color:red","display:block"]] ==> p > .myClass {color: red; display:block;}
436
- ]
437
- cssData = [
438
- [str, {}]
439
- ]
440
- cssData = [
441
- [[selectors], { dict }]
442
- ]
443
-
444
- dicts not used at root because css can have multiple redundant selectors with different rules
445
-
446
- */var dopts=(cov_1s53a2b0g7().s[326]++,{emitStyleTag:false,atr:{},pretty:false});cov_1s53a2b0g7().s[327]++;dopts=optsCopy(dopts,options);var s=(cov_1s53a2b0g7().s[328]++,"\n");cov_1s53a2b0g7().s[329]++;var tb=function(a){cov_1s53a2b0g7().f[45]++;cov_1s53a2b0g7().s[330]++;a=String(a).trim();cov_1s53a2b0g7().s[331]++;a=(a[0]=="{"?(cov_1s53a2b0g7().b[88][0]++," "):(cov_1s53a2b0g7().b[88][1]++," {"))+a;cov_1s53a2b0g7().s[332]++;a+=(a[a.length]=="}"?(cov_1s53a2b0g7().b[89][0]++,""):(cov_1s53a2b0g7().b[89][1]++,"}"))+"\n";cov_1s53a2b0g7().s[333]++;return a;};//var rl = "";
447
- cov_1s53a2b0g7().s[334]++;try{cov_1s53a2b0g7().s[335]++;switch(_to(cssData)){case"string":cov_1s53a2b0g7().b[90][0]++;cov_1s53a2b0g7().s[336]++;s+=cssData+"\n";cov_1s53a2b0g7().s[337]++;break;case"array":cov_1s53a2b0g7().b[90][1]++;var i;cov_1s53a2b0g7().s[338]++;for(i=0;i<cssData.length;i++){var j=(cov_1s53a2b0g7().s[339]++,cssData[i]);cov_1s53a2b0g7().s[340]++;switch(_to(j)){case"string":cov_1s53a2b0g7().b[91][0]++;cov_1s53a2b0g7().s[341]++;// this means we assume correcly formatted style is being passed in and we're just letting it through e.g. ".myclass {color:red}"
448
- s+=j+"\n";cov_1s53a2b0g7().s[342]++;break;case"array":cov_1s53a2b0g7().b[91][1]++;cov_1s53a2b0g7().s[343]++;//expects length 2 array for each entry, though 2nd member can be dict or array
449
- // ==>[str, str], [[str,str,str],str] , [str, {}], [[str,str,str],{}]
450
- if((cov_1s53a2b0g7().b[93][0]++,j.length==1)&&(cov_1s53a2b0g7().b[93][1]++,_to(j[0])=="string")){cov_1s53a2b0g7().b[92][0]++;cov_1s53a2b0g7().s[344]++;s+=j[0]+"\n";cov_1s53a2b0g7().s[345]++;break;}else{cov_1s53a2b0g7().b[92][1]++;}cov_1s53a2b0g7().s[346]++;if(j.length==2){cov_1s53a2b0g7().b[94][0]++;var _name=(cov_1s53a2b0g7().s[347]++,j[0]),_rule=(cov_1s53a2b0g7().s[348]++,j[1]),_ruleOutput=(cov_1s53a2b0g7().s[349]++,"");cov_1s53a2b0g7().s[350]++;if(_to(_name)=="array"){cov_1s53a2b0g7().b[95][0]++;cov_1s53a2b0g7().s[351]++;s+=_name.join(", ");}else{cov_1s53a2b0g7().b[95][1]++;cov_1s53a2b0g7().s[352]++;s+=String(_name);}// now we have the names e.g. ("h2" or "h2,.myClass") done we need to emit the rules
451
- cov_1s53a2b0g7().s[353]++;switch(_to(_rule)){case"array":cov_1s53a2b0g7().b[96][0]++;cov_1s53a2b0g7().s[354]++;// ["h2", ["color: black","left:20%"]] or [["h2",".myClass"], ["color: black","left:20%"]]
452
- _ruleOutput=_rule.join("; ")+";";cov_1s53a2b0g7().s[355]++;break;case"object":cov_1s53a2b0g7().b[96][1]++;// ["h2", {color: "black", left:"20%"}] or [["h2",".myClass"], {color:black, left:"20%"}]
453
- {var x;cov_1s53a2b0g7().s[356]++;for(x in _rule){cov_1s53a2b0g7().s[357]++;_ruleOutput+=x+": "+_rule[x]+"; ";}//_ruleOutput = bw.makeCSSRule([_name,_rule],{pretty:opts.pretty});
454
- }cov_1s53a2b0g7().s[358]++;break;case"string":cov_1s53a2b0g7().b[96][2]++;// ["h2", "color: black"] or [["h2",".myClass"], "color:black"]
455
- default:cov_1s53a2b0g7().b[96][3]++;cov_1s53a2b0g7().s[359]++;_ruleOutput=_rule;}cov_1s53a2b0g7().s[360]++;s+=tb(_ruleOutput)+"\n";}else{cov_1s53a2b0g7().b[94][1]++;}cov_1s53a2b0g7().s[361]++;break;default:cov_1s53a2b0g7().b[91][2]++;}}cov_1s53a2b0g7().s[362]++;break;default:cov_1s53a2b0g7().b[90][2]++;cov_1s53a2b0g7().s[363]++;s="";}}catch(e){cov_1s53a2b0g7().s[364]++;bw.logd(e);}// eslint-disable-line no-empty
456
- cov_1s53a2b0g7().s[365]++;if(dopts["emitStyleTag"]){cov_1s53a2b0g7().b[97][0]++;cov_1s53a2b0g7().s[366]++;s=bw.html(["style",dopts["atr"],s]);}else{cov_1s53a2b0g7().b[97][1]++;}cov_1s53a2b0g7().s[367]++;s.replace(/\n+/g,"\n").replace(/s+/g," ");cov_1s53a2b0g7().s[368]++;return s;};// ===================================================================================
457
- cov_1s53a2b0g7().s[369]++;bw.makeCSSRule=function(cssData,options){cov_1s53a2b0g7().f[46]++;/**
458
- @method bw.makeCSSRule(cssData, options)
459
-
460
- expects this form:
461
- [str, {k,v}]
462
- or
463
- [[array of rules str], {k,v}]
464
-
465
- e,g, [".myClass", {"color": "red", "font-weight" : "700 !important!"}]
466
- or
467
- [[".myClass","div > p"], {"color": "red", "font-weight" : "700 !important!"}]
468
-
469
- */var dopts=(cov_1s53a2b0g7().s[370]++,{emitStyleTag:false,atr:{},pretty:true// make it pretty otherwise compact form generated
470
- });cov_1s53a2b0g7().s[371]++;dopts=optsCopy(dopts,options);var k,d,v=(cov_1s53a2b0g7().s[372]++,[]),s=(cov_1s53a2b0g7().s[373]++,""),sp=(cov_1s53a2b0g7().s[374]++,dopts.pretty?(cov_1s53a2b0g7().b[98][0]++," "):(cov_1s53a2b0g7().b[98][1]++,"")),cr=(cov_1s53a2b0g7().s[375]++,dopts.pretty?(cov_1s53a2b0g7().b[99][0]++,"\n"):(cov_1s53a2b0g7().b[99][1]++,""));cov_1s53a2b0g7().s[376]++;try{cov_1s53a2b0g7().s[377]++;if(_to(cssData)=="array"){cov_1s53a2b0g7().b[100][0]++;cov_1s53a2b0g7().s[378]++;k=cssData[0],d=cssData[1];cov_1s53a2b0g7().s[379]++;s+=_toa(k,"array",k,[k.toString()]).join(","+sp)+cr;cov_1s53a2b0g7().s[380]++;for(k in d){cov_1s53a2b0g7().s[381]++;v.push([sp+sp+k+":"+sp+cssData[1][k]+";"+sp+cr]);}cov_1s53a2b0g7().s[382]++;s+="{"+cr+v.join("")+"}"+cr;}else{cov_1s53a2b0g7().b[100][1]++;}}catch(e){cov_1s53a2b0g7().s[383]++;bw.logd(e);}cov_1s53a2b0g7().s[384]++;return s;};// ===================================================================================
471
- cov_1s53a2b0g7().s[385]++;bw.htmlPage=function(head,body,options){cov_1s53a2b0g7().f[47]++;/**
472
- TBD finish (include bw params, handling meta w/o close tags)
473
- bw.makeHTMLDoc(head,body,options)
474
- make a simple HTML document.
475
-
476
- inline-bw-css --> emit bw default styles as inline css (include globals option)
477
- */var dopts=(cov_1s53a2b0g7().s[386]++,{docType:"<!DOCTYPE html>",htmlParams:{lang:"en"},headDefaultContent:[["meta",{"http-equiv":"Content-Type","content":"text/html","charset":"utf-8"},""]//["title", {}, "bw doc"]
478
- ],headIncludeBitWrenchJS:false,// false : don't include, "embed" or "path-string"
479
- headIncludeBitWrenchCSS:false,// exports bitwrench css classes in <style> section in head
480
- headFavicon:""//<link rel="icon" type="image/x-icon" href="../images/favicon-32x32.png" />
481
- });cov_1s53a2b0g7().s[387]++;dopts=optsCopy(dopts,options);var s=(cov_1s53a2b0g7().s[388]++,dopts["docType"]+"\n");cov_1s53a2b0g7().s[389]++;s+=bw.html(["html",dopts["htmlParams"],["\n",["head",{},["\n",dopts["headDefaultContent"].map(function(x){cov_1s53a2b0g7().f[48]++;cov_1s53a2b0g7().s[390]++;return bw.html(x);}).join("\n"),head,"\n"]],"\n",["body",{},["\n",body,"\n"]],"\n"]]);cov_1s53a2b0g7().s[391]++;return s;};// ===================================================================================
482
- //==================================================
483
- /**
484
- html_fc (html form convert) converts acceptable html contructs into html json dict form:
485
- { t: <tag>, a: {attribs}, c: [content], o: {options}, s:{state}}
486
-
487
- does not operate on the t a c o s params --> just does the conversion
488
- */ /*
489
- html gen using {input}
490
- _typeOf(input)
491
-
492
- "object"
493
- accepted keys below, other keys ignored
494
- t: String | Number | Date() ==> tag function==> f().toString()
495
- a: {} ==> key : value ==> num | str | Date | [] ==> [].join(dopts.a_join)
496
- c: [] || String | Number | Date ==> each_item : str | {html_dict}
497
- o: {} ==> options (note inherit / copy) => if not supplied uses previous levels options
498
-
499
- s: {} ==> state info (used internally) e.g. indent level, stats
500
-
501
- also accepts: "tag", "attrib", "content", "options", "state" as keys instead of t,a,c,o,s
502
-
503
- if any of t,a,c,o are a function it will be invoked immediatly w no params ==> t:myFunc ===> t:myFunc() <==
504
-
505
- defaults:
506
- t ==> "div"
507
- a ==> {}
508
- c ==> []
509
- o ==> {}
510
-
511
- s ==> {level:0, nodes: 0}
512
-
513
- "string" | "number" | Date() ==> {}
514
- t ==> "div"
515
- a ==> {}
516
- c ==> .toString()
517
- o ==> {}
518
-
519
- s ==> {}
520
-
521
- "array"
522
- [ ] ==> {} // defaults to empty default object
523
- [c ] ==> {}
524
- [t,c ] ==> {}
525
- [t,a,c ] ==> {}
526
- [t,a,c,o ] ==> {}
527
- [t,a,c,o,s] ==> {}
528
- [ 6+ ] ==> {} // uses, first 5 others ignored
529
-
530
- // this dict repreesnts the mapping
531
- {
532
- 0 : { }
533
- 1 : {c : 0},
534
- 2 : {t : 0, c : 1},
535
- 3 : {t : 0, a : 1, c : 2}
536
- 4 : {t : 0, a : 1, c : 3, o : 4}
537
- 5 : {t : 0, a : 1, c : 3, o : 4, s : 5}
538
- }
539
-
540
- // this array contruct implements the above dict mapping more compactly
541
- var i,idx = [[],["c"], ["t","c"], ["t","a","c"],["t","a","c","o"],["t","a","c","o","s"]];
542
- for (i=0; i< x.length; i++)
543
- hd[idx[x.length]][i] = x[i];
544
-
545
- */ /*
546
- bw.html_fc = function(x) {
547
- var i,hd = { t: "div", a: {}, c: "", o: {t_close: true}, s: { level: 0, nodes: 0, html:""}}; // default html dict format
548
-
549
- switch (_to(x)) {
550
- case "null" :
551
- case "undefined" :
552
- break;
553
- case "object":
554
- [["tag","t"],["attrib","a"],["content","c"],["options","o"],["state","s"]].forEach(function(z){ hd[z[1]]= z[0] in x ? x[z[0]] : hd[z[1]];});
555
- for (i in hd) // we only copy those fields we care about..
556
- hd[i] = (i in x) ? x[i] : hd[i]; // need to handle fields differenty.. t : "", a : {}, c:"" | [],o :{} -- this is because we want to have proper defaults
557
- break;
558
- case "array":
559
- var idx = [[],["c"], ["t","c"], ["t","a","c"],["t","a","c","o"],["t","a","c","o","s"]];
560
- var m = (x.length > 5) ? 5 : x.length;
561
- for (i=0; i< m; i++) {
562
- console.log(idx[m][i] + ":" + x[i]);
563
- hd[idx[m][i]] = x[i];
564
- }
565
- break;
566
- case "function":
567
- hd = bw.html_fc(x(),opts); // evaluate and convert...
568
- break;
569
- default: // string, number, Date
570
- hd.c = x.toString();
571
- }
572
- return hd;
573
- }
574
- */cov_1s53a2b0g7().s[392]++;bw.html_fc=function(x){cov_1s53a2b0g7().f[49]++;var i,n=(cov_1s53a2b0g7().s[393]++,{t:"div",a:{},c:"",o:{}});// default html dict format
575
- var m=(cov_1s53a2b0g7().s[394]++,"");cov_1s53a2b0g7().s[395]++;switch(_to(x)){case"null":cov_1s53a2b0g7().b[101][0]++;case"undefined":cov_1s53a2b0g7().b[101][1]++;cov_1s53a2b0g7().s[396]++;n=x;cov_1s53a2b0g7().s[397]++;break;case"object":cov_1s53a2b0g7().b[101][2]++;cov_1s53a2b0g7().s[398]++;[["tag","t"],["attrib","a"],["content","c"],["options","o"]].forEach(function(z){cov_1s53a2b0g7().f[50]++;cov_1s53a2b0g7().s[399]++;n[z[1]]=z[0]in x?(cov_1s53a2b0g7().b[102][0]++,x[z[0]]):(cov_1s53a2b0g7().b[102][1]++,n[z[1]]);});cov_1s53a2b0g7().s[400]++;for(i in n){cov_1s53a2b0g7().s[401]++;// we only copy those fields we care about..
576
- n[i]=i in x?(cov_1s53a2b0g7().b[103][0]++,x[i]):(cov_1s53a2b0g7().b[103][1]++,n[i]);// need to handle complicated types: t:"", a:{}, c:"" | []
577
- cov_1s53a2b0g7().s[402]++;if(bw.isnu(n[i])){cov_1s53a2b0g7().b[104][0]++;cov_1s53a2b0g7().s[403]++;n=null;// force entire object to be null or undefined
578
- cov_1s53a2b0g7().s[404]++;m="HTML gen err: bad object";cov_1s53a2b0g7().s[405]++;break;}else{cov_1s53a2b0g7().b[104][1]++;}}cov_1s53a2b0g7().s[406]++;break;case"array":cov_1s53a2b0g7().b[101][3]++;var idx=(cov_1s53a2b0g7().s[407]++,[[],["c"],["t","c"],["t","a","c"],["t","a","c","o"],["t","a","c","o","s"]]);cov_1s53a2b0g7().s[408]++;m=x.length>5?(cov_1s53a2b0g7().b[105][0]++,5):(cov_1s53a2b0g7().b[105][1]++,x.length);cov_1s53a2b0g7().s[409]++;for(i=0;i<m;i++){cov_1s53a2b0g7().s[410]++;bw.logd(idx[m][i]+":"+x[i]);cov_1s53a2b0g7().s[411]++;n[idx[m][i]]=x[i];}cov_1s53a2b0g7().s[412]++;for(i in n){cov_1s53a2b0g7().s[413]++;if(bw.isnu(n[i])){cov_1s53a2b0g7().b[106][0]++;cov_1s53a2b0g7().s[414]++;n=null;cov_1s53a2b0g7().s[415]++;m="HTML gen err: bad array";cov_1s53a2b0g7().s[416]++;break;}else{cov_1s53a2b0g7().b[106][1]++;}}cov_1s53a2b0g7().s[417]++;break;case"function":cov_1s53a2b0g7().b[101][4]++;var opts=(cov_1s53a2b0g7().s[418]++,{});cov_1s53a2b0g7().s[419]++;n=bw.html_fc2(x(),opts);// evaluate and convert...
579
- cov_1s53a2b0g7().s[420]++;break;default:cov_1s53a2b0g7().b[101][5]++;cov_1s53a2b0g7().s[421]++;// string, number, Date, bool, Regex
580
- n.c=x.toString();}cov_1s53a2b0g7().s[422]++;return n;};cov_1s53a2b0g7().s[423]++;bw.HTMLNorm=function(x){cov_1s53a2b0g7().f[51]++;function bwHTMLNode(){cov_1s53a2b0g7().f[52]++;cov_1s53a2b0g7().s[424]++;this.t="div";cov_1s53a2b0g7().s[425]++;this.a={};cov_1s53a2b0g7().s[426]++;this.c="";cov_1s53a2b0g7().s[427]++;this.o={};}function bwError(v,x){cov_1s53a2b0g7().f[53]++;cov_1s53a2b0g7().s[428]++;this.value=v;cov_1s53a2b0g7().s[429]++;this.msg=typeof x=="undefined"?(cov_1s53a2b0g7().b[107][0]++,"error"):(cov_1s53a2b0g7().b[107][1]++,x);}var i,n=(cov_1s53a2b0g7().s[430]++,new bwHTMLNode());// default html dict format
581
- var m=(cov_1s53a2b0g7().s[431]++,"");cov_1s53a2b0g7().s[432]++;switch(_to(x)){case"null":cov_1s53a2b0g7().b[108][0]++;case"undefined":cov_1s53a2b0g7().b[108][1]++;cov_1s53a2b0g7().s[433]++;n=new bwError(x,"HTML Node error : "+_to(x));cov_1s53a2b0g7().s[434]++;break;case"object":cov_1s53a2b0g7().b[108][2]++;cov_1s53a2b0g7().s[435]++;[["tag","t"],["attrib","a"],["content","c"],["options","o"]].forEach(function(z){cov_1s53a2b0g7().f[54]++;cov_1s53a2b0g7().s[436]++;n[z[1]]=z[0]in x?(cov_1s53a2b0g7().b[109][0]++,x[z[0]]):(cov_1s53a2b0g7().b[109][1]++,n[z[1]]);});cov_1s53a2b0g7().s[437]++;for(i in n){cov_1s53a2b0g7().s[438]++;// we only copy those fields we care about..
582
- n[i]=i in x?(cov_1s53a2b0g7().b[110][0]++,x[i]):(cov_1s53a2b0g7().b[110][1]++,n[i]);// need to handle complicated types: t:"", a:{}, c:"" | []
583
- cov_1s53a2b0g7().s[439]++;if(bw.isnu(n[i])){cov_1s53a2b0g7().b[111][0]++;cov_1s53a2b0g7().s[440]++;n=null;// force entire object to be null or undefined
584
- cov_1s53a2b0g7().s[441]++;m="HTML gen err: bad object";cov_1s53a2b0g7().s[442]++;break;}else{cov_1s53a2b0g7().b[111][1]++;}}cov_1s53a2b0g7().s[443]++;break;case"array":cov_1s53a2b0g7().b[108][3]++;var idx=(cov_1s53a2b0g7().s[444]++,[[],["c"],["t","c"],["t","a","c"],["t","a","c","o"],["t","a","c","o","s"]]);cov_1s53a2b0g7().s[445]++;m=x.length>5?(cov_1s53a2b0g7().b[112][0]++,5):(cov_1s53a2b0g7().b[112][1]++,x.length);cov_1s53a2b0g7().s[446]++;for(i=0;i<m;i++){cov_1s53a2b0g7().s[447]++;//console.log(idx[m][i] + ":" + x[i]);
585
- n[idx[m][i]]=x[i];}cov_1s53a2b0g7().s[448]++;for(i in n){cov_1s53a2b0g7().s[449]++;if(bw.isnu(n[i])){cov_1s53a2b0g7().b[113][0]++;cov_1s53a2b0g7().s[450]++;n=null;cov_1s53a2b0g7().s[451]++;m="HTML gen err: bad array";cov_1s53a2b0g7().s[452]++;break;}else{cov_1s53a2b0g7().b[113][1]++;}}cov_1s53a2b0g7().s[453]++;break;case"function":cov_1s53a2b0g7().b[108][4]++;var opts=(cov_1s53a2b0g7().s[454]++,{});cov_1s53a2b0g7().s[455]++;n=bw.html_fc2(x(),opts);// evaluate and convert...
586
- cov_1s53a2b0g7().s[456]++;n=_to(n)=="function"?(cov_1s53a2b0g7().b[114][0]++,new bwError(n.toString(),"HTML Node error: function returned a function")):(cov_1s53a2b0g7().b[114][1]++,n);cov_1s53a2b0g7().s[457]++;break;default:cov_1s53a2b0g7().b[108][5]++;cov_1s53a2b0g7().s[458]++;// string, number, Date, bool, Regex ==> will be come just plain rendered content later
587
- n.c=x.toString();}cov_1s53a2b0g7().s[459]++;return n;};//==================================================
588
- /**
589
- htmld -- html generator
590
- convert _accteptable_types_ ==> htmLJSON_dict
591
-
592
-
593
- bw.htmld = function(htmlJSON, opts) {
594
- var dopts = { // def options note t_ a_ c_ o_ are options applied to the t, a, c, or o local keys directly
595
- t_close : "auto", // "auto" | "false" | "true" ==> "auto" doesn't close certain tag decl such as !DOCTYPE, <br>
596
- a_join : ";", // default join for attribute arrays
597
- o_pretty : false, // makes nice html
598
- o_indent : 4, // default indent when pretty printing
599
- o_verbose : false, // returns object instead of html string ==> {html: <htmloutput string>, stats: dict{}, status: "success" | "warnings"}
600
- c_htmlesc : true // true | false ==> escape html safe chars, replace "\n" with <br> etc
601
- };
602
-
603
-
604
- dopts = optsCopy(dopts,opts);
605
-
606
- var i, d, h="", ind_s, ind_e; // ind_s, ind_e control pretty printing
607
-
608
- h="";
609
- d = bw.html_fc(htmlJSON); // now in dict form with state vector
610
- for (i in d)
611
- if (_to(i) == "function")
612
- d[i] = d[i](d);
613
-
614
- d.s["level"]++;
615
-
616
- d.t = d.t.toString();
617
- d.a = (_to(d.a) == "object") ? d.a : {}; // must be dict.
618
- d.c = (_to(d.c) == "array" ) ? d.c : (_to(d.c)=="object") ? html_fc(d.c) : d.c.toString();
619
- d.o = optsCopy(dopts,d.o);
620
-
621
- //now gen html...
622
- ind_s = d.o.o_pretty ? Array(d.s.level * d.o.o_indent ).join(" ") : ""; // not &nbsp; ==> we're not trying to render this space just make it pretty for inspection
623
- ind_e = d.o.o_pretty ? "\n" : "";
624
-
625
- h += ind_s+ "<" + d.t;
626
- for (i in d.a)
627
- h+= " "+i+"=\""+d.a[i]+"\"";
628
- h += ">"+ ind_e;
629
-
630
- //content gen
631
- switch (_to(d.c)) {
632
- case "object":
633
- h += bw.htmld(d.c,dopts);
634
- break;
635
- case "array":
636
- h += d.c.map(function(x){ return bw.htmld(x,dopts);}).join("");
637
- break;
638
- default:
639
- h+= d.c;
640
- }
641
-
642
- //closing tag
643
- h += ind_s + "</" + d.t + ">" + ind_e;
644
- d.s.html = h;
645
- return d;
646
- }
647
- */ // ===================================================================================
648
- cov_1s53a2b0g7().s[460]++;bw.html=function(d,options){cov_1s53a2b0g7().f[55]++;/**
649
- bw.html(data)
650
-
651
- takes data of one of these exact forms:
652
-
653
- string
654
- array: ["div", content]
655
- array: ["div",{attribute dict},content]
656
- array: ["div",{attribute dict},content, options]
657
- dict: {tag:"div", atr: {attribute dict}, "content": content}
658
- content can be string or array
659
-
660
- and creates an HTML string wich can be used to generate DOM elements such as
661
- document.getELementById("theID").innerHTML = buildHTMLObjString(data).
662
-
663
- content can be nested
664
-
665
- d is string or an array ["tag".{attributs dict},content] or dict of this form
666
- tag, atr, content (also allow short hand t,a,c)
667
- tag or t = string --> "div"
668
- atr or a = dict --> {"style" : "width=40;height=50", "class" : "foo bar"}
669
- content or c = [] or string. if array each element must be either string or dict of this form.
670
- if any element is a function it will be evaluated in place with no params.
671
-
672
- */var dopts=(cov_1s53a2b0g7().s[461]++,{pretty:false,indent:0,indentStr:" "});cov_1s53a2b0g7().s[462]++;var outFn=function(s,opts){cov_1s53a2b0g7().f[56]++;var w=(cov_1s53a2b0g7().s[463]++,Array(opts["indent"]).join(opts["indentStr"]));var we=(cov_1s53a2b0g7().s[464]++,Array(opts["indent"]-1).join(opts["indentStr"]));cov_1s53a2b0g7().s[465]++;return opts["pretty"]?(cov_1s53a2b0g7().b[115][0]++,"\n"+w+s+"\n"+we):(cov_1s53a2b0g7().b[115][1]++,s);};cov_1s53a2b0g7().s[466]++;dopts=optsCopy(dopts,options);cov_1s53a2b0g7().s[467]++;dopts["indent"]++;var s=(cov_1s53a2b0g7().s[468]++,""),t=(cov_1s53a2b0g7().s[469]++,""),a=(cov_1s53a2b0g7().s[470]++,{}),c=(cov_1s53a2b0g7().s[471]++,[]),i;cov_1s53a2b0g7().s[472]++;switch(_to(d)){case"date":cov_1s53a2b0g7().b[116][0]++;case"number":cov_1s53a2b0g7().b[116][1]++;cov_1s53a2b0g7().s[473]++;s=String(d);// eslint-disable-line no-fallthrough
673
- case"string":cov_1s53a2b0g7().b[116][2]++;cov_1s53a2b0g7().s[474]++;s=d;cov_1s53a2b0g7().s[475]++;return outFn(s,dopts);// Note return statement here...
674
- cov_1s53a2b0g7().s[476]++;break;// eslint-disable-line no-unreachable
675
- case"function":cov_1s53a2b0g7().b[116][3]++;cov_1s53a2b0g7().s[477]++;s=bw.buildHTMLObjString(d(),dopts);cov_1s53a2b0g7().s[478]++;break;case"array":cov_1s53a2b0g7().b[116][4]++;cov_1s53a2b0g7().s[479]++;if((cov_1s53a2b0g7().b[118][0]++,_to(d[0])=="undefined")||(cov_1s53a2b0g7().b[118][1]++,d.length!=3)){cov_1s53a2b0g7().b[117][0]++;cov_1s53a2b0g7().s[480]++;return"";}else{cov_1s53a2b0g7().b[117][1]++;}cov_1s53a2b0g7().s[481]++;t=_to(d[0])!="undefined"?(cov_1s53a2b0g7().b[119][0]++,d[0]):(cov_1s53a2b0g7().b[119][1]++,t);cov_1s53a2b0g7().s[482]++;a=_to(d[1])!="undefined"?(cov_1s53a2b0g7().b[120][0]++,d[1]):(cov_1s53a2b0g7().b[120][1]++,a);cov_1s53a2b0g7().s[483]++;c=_to(d[2])!="undefined"?(cov_1s53a2b0g7().b[121][0]++,d[2]):(cov_1s53a2b0g7().b[121][1]++,c);cov_1s53a2b0g7().s[484]++;t=_to(t)=="function"?(cov_1s53a2b0g7().b[122][0]++,t()):(cov_1s53a2b0g7().b[122][1]++,t);cov_1s53a2b0g7().s[485]++;a=_to(a)=="function"?(cov_1s53a2b0g7().b[123][0]++,a()):(cov_1s53a2b0g7().b[123][1]++,a);cov_1s53a2b0g7().s[486]++;c=_to(c)=="function"?(cov_1s53a2b0g7().b[124][0]++,c()):(cov_1s53a2b0g7().b[124][1]++,c);cov_1s53a2b0g7().s[487]++;c=_to(c)!="array"?(cov_1s53a2b0g7().b[125][0]++,[c]):(cov_1s53a2b0g7().b[125][1]++,c);cov_1s53a2b0g7().s[488]++;break;case"object":cov_1s53a2b0g7().b[116][5]++;cov_1s53a2b0g7().s[489]++;t=_to(d["t"])=="function"?(cov_1s53a2b0g7().b[126][0]++,d["t"]()):(cov_1s53a2b0g7().b[126][1]++,t);cov_1s53a2b0g7().s[490]++;t=_to(d["tag"])=="function"?(cov_1s53a2b0g7().b[127][0]++,d["tag"]()):(cov_1s53a2b0g7().b[127][1]++,t);cov_1s53a2b0g7().s[491]++;t=_to(d["t"])=="string"?(cov_1s53a2b0g7().b[128][0]++,d["t"]):(cov_1s53a2b0g7().b[128][1]++,t);cov_1s53a2b0g7().s[492]++;t=_to(d["tag"])=="string"?(cov_1s53a2b0g7().b[129][0]++,d["tag"]):(cov_1s53a2b0g7().b[129][1]++,t);cov_1s53a2b0g7().s[493]++;a=_to(d["a"])=="function"?(cov_1s53a2b0g7().b[130][0]++,d["a"]()):(cov_1s53a2b0g7().b[130][1]++,a);cov_1s53a2b0g7().s[494]++;a=_to(d["atr"])=="function"?(cov_1s53a2b0g7().b[131][0]++,d["atr"]()):(cov_1s53a2b0g7().b[131][1]++,a);cov_1s53a2b0g7().s[495]++;a=_to(d["a"])=="object"?(cov_1s53a2b0g7().b[132][0]++,d["a"]):(cov_1s53a2b0g7().b[132][1]++,a);cov_1s53a2b0g7().s[496]++;a=_to(d["atr"])=="object"?(cov_1s53a2b0g7().b[133][0]++,d["atr"]):(cov_1s53a2b0g7().b[133][1]++,a);cov_1s53a2b0g7().s[497]++;switch(_to(d["c"])){case"function":cov_1s53a2b0g7().b[134][0]++;cov_1s53a2b0g7().s[498]++;c=d["content"]();cov_1s53a2b0g7().s[499]++;break;case"array":cov_1s53a2b0g7().b[134][1]++;cov_1s53a2b0g7().s[500]++;c=d["content"];cov_1s53a2b0g7().s[501]++;break;default:cov_1s53a2b0g7().b[134][2]++;cov_1s53a2b0g7().s[502]++;c=[d["content"]];}cov_1s53a2b0g7().s[503]++;switch(_to(d["c"])){case"function":cov_1s53a2b0g7().b[135][0]++;cov_1s53a2b0g7().s[504]++;c=d["c"]();cov_1s53a2b0g7().s[505]++;break;case"array":cov_1s53a2b0g7().b[135][1]++;cov_1s53a2b0g7().s[506]++;c=d["c"];cov_1s53a2b0g7().s[507]++;break;default:cov_1s53a2b0g7().b[135][2]++;cov_1s53a2b0g7().s[508]++;c=[d["c"]];}cov_1s53a2b0g7().s[509]++;break;default:cov_1s53a2b0g7().b[116][6]++;cov_1s53a2b0g7().s[510]++;bw.log("bw.html:: error in type");}cov_1s53a2b0g7().s[511]++;s+="<"+t;cov_1s53a2b0g7().s[512]++;for(i in a){cov_1s53a2b0g7().s[513]++;s+=" "+String(i)+"=\""+String(a[i])+"\"";}cov_1s53a2b0g7().s[514]++;s+=">";//console.log(t,a,c);
676
- cov_1s53a2b0g7().s[515]++;for(i=0;i<c.length;i++){var _c=(cov_1s53a2b0g7().s[516]++,"");cov_1s53a2b0g7().s[517]++;switch(_to(c[i])){case"function":cov_1s53a2b0g7().b[136][0]++;cov_1s53a2b0g7().s[518]++;_c=c[i]();// eslint-disable-line no-fallthrough
677
- case"object":cov_1s53a2b0g7().b[136][1]++;// eslint-disable-line no-fallthrough
678
- case"array":cov_1s53a2b0g7().b[136][2]++;cov_1s53a2b0g7().s[519]++;_c=bw.html(c[i],dopts);cov_1s53a2b0g7().s[520]++;break;default:cov_1s53a2b0g7().b[136][3]++;cov_1s53a2b0g7().s[521]++;_c=String(c[i]);}cov_1s53a2b0g7().s[522]++;s+=_c;}cov_1s53a2b0g7().s[523]++;s+="</"+t+">";cov_1s53a2b0g7().s[524]++;return outFn(s,dopts);};// ===================================================================================
679
- cov_1s53a2b0g7().s[525]++;bw.htmla=function(listData,options){cov_1s53a2b0g7().f[57]++;cov_1s53a2b0g7().s[526]++;/**
680
- bw.htmla(listData,options)
681
-
682
- listData is a single dim array of bw.html() compatible cnostructs
683
-
684
- */if(_to(listData)!="array"){cov_1s53a2b0g7().b[137][0]++;cov_1s53a2b0g7().s[527]++;return bw.html(listData,options);}else{cov_1s53a2b0g7().b[137][1]++;}cov_1s53a2b0g7().s[528]++;return listData.map(function(x){cov_1s53a2b0g7().f[58]++;cov_1s53a2b0g7().s[529]++;return bw.html(x,options);}).join("");};// ===================================================================================
685
- cov_1s53a2b0g7().s[530]++;bw.htmlList=function(listData,listType,atr,atri){cov_1s53a2b0g7().f[59]++;cov_1s53a2b0g7().s[531]++;/**
686
- bw.makeHTMLList (listData, listType, attribute{}, attribute_for_each_items {})
687
-
688
- listType = "ul" | "ol"
689
- listData = [ item1, item2, item3, .. ]
690
-
691
- */if(_to(listData)!="array"){cov_1s53a2b0g7().b[138][0]++;cov_1s53a2b0g7().s[532]++;return"";}else{cov_1s53a2b0g7().b[138][1]++;}cov_1s53a2b0g7().s[533]++;if(listData.length<1){cov_1s53a2b0g7().b[139][0]++;cov_1s53a2b0g7().s[534]++;return"";}else{cov_1s53a2b0g7().b[139][1]++;}cov_1s53a2b0g7().s[535]++;atr=_toa(atr,"object",atr,{});cov_1s53a2b0g7().s[536]++;atri=_toa(atr,"object",atr,{});var lc=(cov_1s53a2b0g7().s[537]++,listData.map(function(x){cov_1s53a2b0g7().f[60]++;cov_1s53a2b0g7().s[538]++;return bw.html(["li",atri,x]);}));cov_1s53a2b0g7().s[539]++;listType=["ul","ol"].indexOf(listType)==-1?(cov_1s53a2b0g7().b[140][0]++,"ol"):(cov_1s53a2b0g7().b[140][1]++,listType);cov_1s53a2b0g7().s[540]++;return bw.html([listType,atr,lc]);};// ===================================================================================
692
- cov_1s53a2b0g7().s[541]++;bw.classStrAddDel=function(classData,classesToAdd,classesToDel){cov_1s53a2b0g7().f[61]++;cov_1s53a2b0g7().s[542]++;/**
693
- classStrAddDel (classData, classesToAdd, classesToDel)
694
- for CSS classes
695
-
696
- takes a valid classData string e.g. "myclass1 myclass2" etc
697
-
698
- and adds/del classes from classesToAdd string if they are not already present in classData
699
-
700
- classStrAddDel("class1 class2", "class3") ==> "class1 class2 class3"
701
- classStrAddDel("class1 class2", "class3 class4") ==> "class1 class2 class3 class4"
702
- classStrAddDel("class1 class2", "class2 class3") ==> "class1 class2 class3" // doesn't add class2 again
703
-
704
- classStrAddDel("class1 class2", "class 2 class3",class1) ==> "class2 class3" // doesn't add class2 again. removes class1
705
- classStrAddDel("class1 class2", "",class1) ==> "class2" // removes class1
706
-
707
- classData, classesToAdd, classesToDel may be strings (space delimited) or arrays of strings (["c1", "c2"], ["c3", "c4"], ["c1"])
708
- */var tnorm=function(x){cov_1s53a2b0g7().f[62]++;cov_1s53a2b0g7().s[543]++;x=bw.toa(x,"undefined",[],x);cov_1s53a2b0g7().s[544]++;return bw.to(x)=="array"?(cov_1s53a2b0g7().b[141][0]++,x):(cov_1s53a2b0g7().b[141][1]++,x.toString().trim().split(/\s+/ig));};var c=(cov_1s53a2b0g7().s[545]++,tnorm(classData));var ca=(cov_1s53a2b0g7().s[546]++,tnorm(classesToAdd));var cd=(cov_1s53a2b0g7().s[547]++,tnorm(classesToDel));cov_1s53a2b0g7().s[548]++;return bw.arrayBNotInA(cd,c.concat(ca)).join(" ").trim().replace(/\s+/ig," ");};// ===================================================================================
709
- cov_1s53a2b0g7().s[549]++;bw.classStrToggle=function(classData,classesToToggle){cov_1s53a2b0g7().f[63]++;cov_1s53a2b0g7().s[550]++;/**
710
- classStrToggle (classData, classesToToggle)
711
-
712
- toggles classes listed in classesToToggle
713
-
714
- takes a valid classData string e.g. "myclass1 myclass2" etc
715
- */var tnorma=function(x){cov_1s53a2b0g7().f[64]++;cov_1s53a2b0g7().s[551]++;x=bw.toa(x,"undefined",[],x);cov_1s53a2b0g7().s[552]++;return bw.to(x)=="array"?(cov_1s53a2b0g7().b[142][0]++,x):(cov_1s53a2b0g7().b[142][1]++,x.toString().trim().split(/\s+/ig));};var c=(cov_1s53a2b0g7().s[553]++,tnorma(classData));var t=(cov_1s53a2b0g7().s[554]++,tnorma(classesToToggle));cov_1s53a2b0g7().s[555]++;return bw.classStrAddDel(classData,bw.arrayBNotInA(c,t),bw.arrayBinA(c,t));};// ===================================================================================
716
- cov_1s53a2b0g7().s[556]++;bw.htmlTabs=function(tabData,opts){cov_1s53a2b0g7().f[65]++;cov_1s53a2b0g7().s[557]++;/**
717
- bw.makeHTMLTabs(tabData, atr)
718
- tabData = [[tab1Title,tab1-content], [tab2Title,tab2-content], [tab3Title,tab3-content]]
719
- */if(_to(tabData)!="array"){cov_1s53a2b0g7().b[143][0]++;cov_1s53a2b0g7().s[558]++;return"";}else{cov_1s53a2b0g7().b[143][1]++;}cov_1s53a2b0g7().s[559]++;if(tabData.length<1){cov_1s53a2b0g7().b[144][0]++;cov_1s53a2b0g7().s[560]++;return"";}else{cov_1s53a2b0g7().b[144][1]++;}var dopts=(cov_1s53a2b0g7().s[561]++,{atr:{"class":""},//container {}
720
- tab_atr:{"class":""},//attributs for each tab container
721
- tabc_atr:{"class":""},//attributes for each tab-content area container
722
- indent:"",//indent string for pretty printing
723
- pretty:false});cov_1s53a2b0g7().s[562]++;dopts=optsCopy(dopts,opts);var ti=(cov_1s53a2b0g7().s[563]++,tabData.map(function(x){cov_1s53a2b0g7().f[66]++;cov_1s53a2b0g7().s[564]++;return["li",{"class":"bw-tab-item","onclick":"bw.selectTabContent(this)"},x[0]];}));var tc=(cov_1s53a2b0g7().s[565]++,tabData.map(function(x){cov_1s53a2b0g7().f[67]++;cov_1s53a2b0g7().s[566]++;return["div",{"class":"bw-tab-content"},x[1]];}));cov_1s53a2b0g7().s[567]++;ti[0][1]["class"]=bw.classStrAddDel(ti[0][1]["class"],"bw-tab-active");cov_1s53a2b0g7().s[568]++;tc[0][1]["class"]=bw.classStrAddDel(tc[0][1]["class"],"bw-show");cov_1s53a2b0g7().s[569]++;dopts["atr"]["class"]=bw.classStrAddDel(dopts["atr"]["class"],"bw-tab-container");cov_1s53a2b0g7().s[570]++;dopts["tab_atr"]["class"]=bw.classStrAddDel(dopts["tab_atr"]["class"],"bw-tab-item-list");cov_1s53a2b0g7().s[571]++;dopts["tabc_atr"]["class"]=bw.classStrAddDel(dopts["tabc_atr"]["class"],"bw-tab-content-list");cov_1s53a2b0g7().s[572]++;return bw.html(["div",dopts["atr"],[["ul",dopts["tab_atr"],ti],["div",dopts["tabc_atr"],tc]]]);};// ===================================================================================
724
- cov_1s53a2b0g7().s[573]++;bw.htmlTable=function(data,opts){cov_1s53a2b0g7().f[68]++;cov_1s53a2b0g7().s[574]++;/**
725
- bw.makeHTMLTableStr (data, options)
726
-
727
- Creates an HTML table element (as a string) from raw array data.
728
-
729
- var table1 =
730
- [["this", "that", "the", "other"],[,6,4,0,4],[3,5,1,4],[1,2,4,5],["2u30","23",function(){return 834},23]];
731
- document.getElementById("myTableDiv") = bw.makeHTMLTableStr(table1); // displays simple table.
732
-
733
- var options = {
734
- useFirstRowAsHeaders:false, // first row is data
735
- caption:"Important Table" // caption
736
- sortable: false | true | function // make table sortable (false is default, if true uses bw built-in sort, else supply function)
737
- }
738
- document.getElementById("myTableDiv") = bw.htmlTable(table1, options);
739
-
740
- Options:
741
- useFirstRowAsHeaders : true; //
742
- */if((cov_1s53a2b0g7().b[146][0]++,_to(data)!="array")||(cov_1s53a2b0g7().b[146][1]++,data.length<1)){cov_1s53a2b0g7().b[145][0]++;cov_1s53a2b0g7().s[575]++;return"";}else{cov_1s53a2b0g7().b[145][1]++;}//default options
743
- var dopts=(cov_1s53a2b0g7().s[576]++,{useFirstRowAsHeaders:true,atr:{},// attributes for table object can use function() for dynamic
744
- thead_atr:{},// attributes for table head section
745
- th_atr:{},// attributes for header cells,
746
- tbody_atr:{},// atttributs for table body section
747
- tr_atr:{},// attributes for rows
748
- td_atr:{},// attributes for cells
749
- caption:"",// optional table caption (can be HTML, or function, bw.buildHTMLObjString compatible data)
750
- sortable:false// make table sortable. if true, uses default sort, otherwise pass function to sort table. f(a,b,optionalColumnNumber)
751
- });var i=(cov_1s53a2b0g7().s[577]++,0),head=(cov_1s53a2b0g7().s[578]++,""),body=(cov_1s53a2b0g7().s[579]++,""),r,_hs=(cov_1s53a2b0g7().s[580]++,bw.html);cov_1s53a2b0g7().s[581]++;dopts=optsCopy(dopts,opts);/*
752
- for (i in opts)
753
- dopts[i] = opts[i]; // overide defaults
754
- */cov_1s53a2b0g7().s[582]++;if(_to(dopts.th_atr["onclick"])=="function"){cov_1s53a2b0g7().b[147][0]++;cov_1s53a2b0g7().s[583]++;bw.log("todo buildHTMLtable function dispatch");}else{cov_1s53a2b0g7().b[147][1]++;}cov_1s53a2b0g7().s[584]++;if(dopts.sortable==true){cov_1s53a2b0g7().b[148][0]++;cov_1s53a2b0g7().s[585]++;dopts.th_atr["onclick"]="bw.sortTableDispatch(this)";cov_1s53a2b0g7().s[586]++;if("class"in dopts.th_atr){cov_1s53a2b0g7().b[149][0]++;cov_1s53a2b0g7().s[587]++;dopts.th_atr["class"]+=dopts.th_atr["class"].split(/[ ]+/).indexOf("bw-table-sort-xxa")<0?(cov_1s53a2b0g7().b[150][0]++," bw-table-sort-xxa"):(cov_1s53a2b0g7().b[150][1]++,"");}else{cov_1s53a2b0g7().b[149][1]++;cov_1s53a2b0g7().s[588]++;dopts.th_atr["class"]="bw-table-sort-xxa";}}else{cov_1s53a2b0g7().b[148][1]++;cov_1s53a2b0g7().s[589]++;if(_to(dopts.sortable)=="function"){cov_1s53a2b0g7().b[151][0]++;var sfid=(cov_1s53a2b0g7().s[590]++,bw.funcRegister(dopts.sortable));cov_1s53a2b0g7().s[591]++;dopts.th_atr["onclick"]=bw.funcGetDispatchStr(sfid,"this");cov_1s53a2b0g7().s[592]++;bw.log("todo function makeHTML sort function dispatch");}else{cov_1s53a2b0g7().b[151][1]++;}}cov_1s53a2b0g7().s[593]++;if(dopts["useFirstRowAsHeaders"]){cov_1s53a2b0g7().b[152][0]++;cov_1s53a2b0g7().s[594]++;head=data[0].map(function(x){cov_1s53a2b0g7().f[69]++;cov_1s53a2b0g7().s[595]++;return _hs(["th",dopts.th_atr,x]);}).join("");cov_1s53a2b0g7().s[596]++;head=_hs(["tr",dopts.tr_atr,head]);cov_1s53a2b0g7().s[597]++;i=1;}else{cov_1s53a2b0g7().b[152][1]++;cov_1s53a2b0g7().s[598]++;i=0;}cov_1s53a2b0g7().s[599]++;head=bw.html(["thead",dopts.thead_atr,head]);cov_1s53a2b0g7().s[600]++;for(;i<data.length;i++){cov_1s53a2b0g7().s[601]++;r=data[i].map(function(x){cov_1s53a2b0g7().f[70]++;cov_1s53a2b0g7().s[602]++;return _hs(["td",dopts.td_atr,x]);}).join("");cov_1s53a2b0g7().s[603]++;body+=_hs(["tr",dopts.tr_atr,r]);}cov_1s53a2b0g7().s[604]++;body=bw.html(["tbody",dopts.tbody_atr,body]);//console.log(head,'\n',body);
755
- cov_1s53a2b0g7().s[605]++;dopts.caption=dopts.caption==""?(cov_1s53a2b0g7().b[153][0]++,""):(cov_1s53a2b0g7().b[153][1]++,_hs(["caption",{},dopts.caption]));cov_1s53a2b0g7().s[606]++;return _hs(["table",dopts.atr,[dopts.caption,head,body]]);};cov_1s53a2b0g7().s[607]++;bw.htmlAccordian=function(data,opts){cov_1s53a2b0g7().f[71]++;/**
756
- htmlAccordian
757
-
758
- [[data-title, data-to-show, {show: true|false, clickShow: true|fa;se}], // TODO: optional 3rd element
759
- [...]]
760
-
761
- data-title and data-to-show can be strings or any valid bw.html() constructs
762
- */var s=(cov_1s53a2b0g7().s[608]++,"");cov_1s53a2b0g7().s[609]++;if(_to(data)!=="array"){cov_1s53a2b0g7().b[154][0]++;cov_1s53a2b0g7().s[610]++;return s;}else{cov_1s53a2b0g7().b[154][1]++;}var dopts=(cov_1s53a2b0g7().s[611]++,{atr:{"class":"bw-accordian-container"},// div for overall accordian
763
- atr_h:{"onclick":"bw.DOMClassToggle(this.nextSibling,'bw-hide')"},// div wrapping each header
764
- atr_c:{/*"onclick":"bw.DOMClassToggle(this,'bw-hide')",*/"class":"bw-hide"}// div wrapping each content
765
- });cov_1s53a2b0g7().s[612]++;dopts=optsCopy(dopts,opts);cov_1s53a2b0g7().s[613]++;dopts["atr_h"]["onclick"]="bw.DOMClassToggle(this.nextSibling, 'bw-hide')";cov_1s53a2b0g7().s[614]++;s=data.map(function(x){cov_1s53a2b0g7().f[72]++;cov_1s53a2b0g7().s[615]++;return bw.html(["div",dopts["atr_h"],x[0]])+bw.html(["div",dopts["atr_c"],x[1]]);}).join("");cov_1s53a2b0g7().s[616]++;s=bw.html(["div",dopts["atr"],s]);cov_1s53a2b0g7().s[617]++;return s;};// ===================================================================================
766
- cov_1s53a2b0g7().s[618]++;bw.getFile=function(fname,callback_fn,options){cov_1s53a2b0g7().f[73]++;/**
767
- bw.getFile(filename,callback)
768
- Attempt to load a file.
769
- Works both client side and i nodejs.
770
- */var dops=(cov_1s53a2b0g7().s[619]++,{parser:"raw"// valid types are "raw", "JSON", future "CSV", "TSV" or parserFunction
771
- });cov_1s53a2b0g7().s[620]++;dops=optsCopy(dops,options);cov_1s53a2b0g7().s[621]++;if(_to(fname)!="string"){cov_1s53a2b0g7().b[155][0]++;cov_1s53a2b0g7().s[622]++;return"invalid filename";}else{cov_1s53a2b0g7().b[155][1]++;}var prs=(cov_1s53a2b0g7().s[623]++,dops["parser"]=="JSON"?(cov_1s53a2b0g7().b[156][0]++,JSON.parse):(cov_1s53a2b0g7().b[156][1]++,function(s){cov_1s53a2b0g7().f[74]++;cov_1s53a2b0g7().s[624]++;return s;}));cov_1s53a2b0g7().s[625]++;if(bw.isNodeJS()==true){cov_1s53a2b0g7().b[157][0]++;var fs=(cov_1s53a2b0g7().s[626]++,require("fs"));cov_1s53a2b0g7().s[627]++;fs.readFile(fname,"utf8",function(err,data){cov_1s53a2b0g7().f[75]++;cov_1s53a2b0g7().s[628]++;if(err){cov_1s53a2b0g7().b[158][0]++;cov_1s53a2b0g7().s[629]++;throw err;}else{cov_1s53a2b0g7().b[158][1]++;}cov_1s53a2b0g7().s[630]++;callback_fn(prs(data));});}else// running in a browser
772
- {cov_1s53a2b0g7().b[157][1]++;var x=(cov_1s53a2b0g7().s[631]++,new XMLHttpRequest());cov_1s53a2b0g7().s[632]++;x.overrideMimeType("application/json");cov_1s53a2b0g7().s[633]++;x.open("GET",fname,true);cov_1s53a2b0g7().s[634]++;x.onreadystatechange=function(){cov_1s53a2b0g7().f[76]++;cov_1s53a2b0g7().s[635]++;if((cov_1s53a2b0g7().b[160][0]++,x.readyState==4)&&(cov_1s53a2b0g7().b[160][1]++,x.status=="200")){cov_1s53a2b0g7().b[159][0]++;cov_1s53a2b0g7().s[636]++;callback_fn(prs(x.responseText));}else{cov_1s53a2b0g7().b[159][1]++;}};cov_1s53a2b0g7().s[637]++;x.send(null);}cov_1s53a2b0g7().s[638]++;return"BW_OK";};cov_1s53a2b0g7().s[639]++;bw.getJSONFile=function(fname,callback_fn){cov_1s53a2b0g7().f[77]++;cov_1s53a2b0g7().s[640]++;return bw.getFile(fname,callback_fn,{"parser":"JSON"});};cov_1s53a2b0g7().s[641]++;bw.copyToClipboard=function(data){cov_1s53a2b0g7().f[78]++;cov_1s53a2b0g7().s[642]++;/**
773
- bw.copyToClipboard
774
- simple copy content to clipboard. (browser only)
775
- */ /*
776
- var temp = document.createElement("input");
777
- var b = document.getElementsByTagName("body")[0];
778
- b.appendChild(temp);
779
-
780
- temp.innerText = data;
781
- temp.select();
782
- document.execCommand("copy");
783
- temp.remove();
784
-
785
-
786
-
787
- var temp = document.createElement("input");
788
- document.getElementsByTagName("body")[0].append(temp);
789
- temp.innerHTML = data;
790
- //temp.val(data).select();
791
-
792
- //var temp = document.createElement("input");
793
- //var b = document.getElementsByTagName("body")[0];
794
- //b.appendChild(temp);
795
- //temp.innerText = data;
796
- temp.select();
797
- document.execCommand("copy");
798
- temp.remove();
799
- */if(bw.isNodeJS()){cov_1s53a2b0g7().b[161][0]++;cov_1s53a2b0g7().s[643]++;return;}else{cov_1s53a2b0g7().b[161][1]++;}cov_1s53a2b0g7().s[644]++;var listener=function(e){cov_1s53a2b0g7().f[79]++;cov_1s53a2b0g7().s[645]++;e.clipboardData.setData("text/html",data);cov_1s53a2b0g7().s[646]++;e.clipboardData.setData("text/plain",data);cov_1s53a2b0g7().s[647]++;e.preventDefault();};cov_1s53a2b0g7().s[648]++;document.addEventListener("copy",listener);cov_1s53a2b0g7().s[649]++;document.execCommand("copy");cov_1s53a2b0g7().s[650]++;document.removeEventListener("copy",listener);};// ===================================================================================
800
- cov_1s53a2b0g7().s[651]++;bw.saveClientFile=function(fname,data){cov_1s53a2b0g7().f[80]++;cov_1s53a2b0g7().s[652]++;/**
801
- bw.saveClientFile(fname,data) saves data the program the client environtmnet
802
- fname is filename to save as
803
- data is data to save.
804
-
805
- works both in node and browser.
806
- */if(bw.isNodeJS()){cov_1s53a2b0g7().b[162][0]++;var fs=(cov_1s53a2b0g7().s[653]++,require("fs"));cov_1s53a2b0g7().s[654]++;fs.writeFile(fname,data,function(err){cov_1s53a2b0g7().f[81]++;cov_1s53a2b0g7().s[655]++;if(err){cov_1s53a2b0g7().b[163][0]++;cov_1s53a2b0g7().s[656]++;return bw.log(err);}else{cov_1s53a2b0g7().b[163][1]++;}cov_1s53a2b0g7().s[657]++;bw.log("error saving ",fname,data);});}else{cov_1s53a2b0g7().b[162][1]++;// we're in a browser
807
- var saveData=(cov_1s53a2b0g7().s[658]++,function(){cov_1s53a2b0g7().f[82]++;var a=(cov_1s53a2b0g7().s[659]++,document.createElement("a"));cov_1s53a2b0g7().s[660]++;document.body.appendChild(a);cov_1s53a2b0g7().s[661]++;a.style="display: none";cov_1s53a2b0g7().s[662]++;return function(data,fname){cov_1s53a2b0g7().f[83]++;var json=(cov_1s53a2b0g7().s[663]++,JSON.stringify(data)),blob=(cov_1s53a2b0g7().s[664]++,new Blob([json],{type:"octet/stream"})),url=(cov_1s53a2b0g7().s[665]++,window.URL.createObjectURL(blob));cov_1s53a2b0g7().s[666]++;a.href=url;cov_1s53a2b0g7().s[667]++;a.download=fname;cov_1s53a2b0g7().s[668]++;a.click();cov_1s53a2b0g7().s[669]++;window.URL.revokeObjectURL(url);};}());cov_1s53a2b0g7().s[670]++;saveData(data,fname);}};// ===================================================================================
808
- //Timers ... clear / read / fixed number of events
809
- // ===================================================================================
810
- // crude performance measurements
811
- var gBWTime=(cov_1s53a2b0g7().s[671]++,new Date().getTime());//global closure for time. 'cause we always want a gbw gbw time :)
812
- // ===================================================================================
813
- cov_1s53a2b0g7().s[672]++;bw.clearTimer=function(message){cov_1s53a2b0g7().f[84]++;cov_1s53a2b0g7().s[673]++;/**
814
- bw.clearTimer("message")
815
- When bitwrench loads its starts a timer which can be checked at any time as a ref running (see bw.readTimer()).
816
- bw.clearTimer() clears the timer with optional message.
817
- */gBWTime=new Date().getTime();cov_1s53a2b0g7().s[674]++;if(_to(message)!="undefined"){cov_1s53a2b0g7().b[164][0]++;cov_1s53a2b0g7().s[675]++;bw.logd(String(message));}else{cov_1s53a2b0g7().b[164][1]++;}cov_1s53a2b0g7().s[676]++;return gBWTime;};// ===================================================================================
818
- cov_1s53a2b0g7().s[677]++;bw.readTimer=function(message){cov_1s53a2b0g7().f[85]++;/**
819
- bw.readTimer("message")
820
- When bitwrench loads its starts a page timer which can be checked for how long the page as been running.
821
- */var ct=(cov_1s53a2b0g7().s[678]++,new Date().getTime());cov_1s53a2b0g7().s[679]++;if(_to(message)!="undefined"){cov_1s53a2b0g7().b[165][0]++;cov_1s53a2b0g7().s[680]++;bw.logd(String(message));}else{cov_1s53a2b0g7().b[165][1]++;}cov_1s53a2b0g7().s[681]++;return ct-gBWTime;};cov_1s53a2b0g7().s[682]++;bw.clearTimer();//when bw is loaded, we start the timer.
822
- // ===================================================================================
823
- cov_1s53a2b0g7().s[683]++;bw.setIntervalX=function(callback,delay,number_of_repetitions){cov_1s53a2b0g7().f[86]++;/**
824
- bw.setIntervalX(callbackFn, delayBtwCalls, repetitions)
825
- set a javascript timer to only run a max of N repetions.
826
-
827
- Example:
828
- bw.setIntervalX(function(x){console.log(x)},100,5)
829
- this will the function 5 times 100ms apart
830
- */var x=(cov_1s53a2b0g7().s[684]++,0);var intervalID=(cov_1s53a2b0g7().s[685]++,setInterval(function(){cov_1s53a2b0g7().f[87]++;cov_1s53a2b0g7().s[686]++;callback(x);cov_1s53a2b0g7().s[687]++;if(++x>=number_of_repetitions){cov_1s53a2b0g7().b[166][0]++;cov_1s53a2b0g7().s[688]++;clearInterval(intervalID);}else{cov_1s53a2b0g7().b[166][1]++;}},delay));};// ===================================================================================
831
- cov_1s53a2b0g7().s[689]++;bw.repeatUntil=function(testFn,successFn,failFn,delay,maxReps,lastFn){cov_1s53a2b0g7().f[88]++;/**
832
- bw.repeatUntil()
833
- repeatUntil runs the supplied testFn every delay milliseconds up until a maxReps number of times.
834
- if the test function returns true it runs the successFn and stops the iterations.
835
- then the lastFn is called with the params (true, number_of_attempts).
836
- lastFn is optional.
837
-
838
- for each time the testFn is called and fails, the failFn() is called.
839
-
840
- After the last rep has been completed the lastFn is called with (with the last testFn result and
841
- with the current iteration).
842
-
843
-
844
- lastFn is optional.
845
- failFn is optional
846
-
847
- Example:
848
- bw.repeatUntil( myLibsAndDataAreLoaded_fn, renderMyChart, null, 250, 10, null); // attempts to wait until mylib is loaded 10 times before giving up
849
-
850
- */var _count=(cov_1s53a2b0g7().s[690]++,0);cov_1s53a2b0g7().s[691]++;if(typeof testFn!="function"){cov_1s53a2b0g7().b[167][0]++;cov_1s53a2b0g7().s[692]++;return"err";}else{cov_1s53a2b0g7().b[167][1]++;}cov_1s53a2b0g7().s[693]++;if(typeof delay!="number"){cov_1s53a2b0g7().b[168][0]++;cov_1s53a2b0g7().s[694]++;delay=250;}else{cov_1s53a2b0g7().b[168][1]++;}// 250ms
851
- cov_1s53a2b0g7().s[695]++;if(typeof maxReps!="number"){cov_1s53a2b0g7().b[169][0]++;cov_1s53a2b0g7().s[696]++;maxReps=1;}else{cov_1s53a2b0g7().b[169][1]++;}// run 1 time.
852
- var _testFn=(cov_1s53a2b0g7().s[697]++,testFn);var _successFn=(cov_1s53a2b0g7().s[698]++,typeof successFn=="function"?(cov_1s53a2b0g7().b[170][0]++,successFn):(cov_1s53a2b0g7().b[170][1]++,function(){cov_1s53a2b0g7().f[89]++;}));var _failFn=(cov_1s53a2b0g7().s[699]++,typeof failFn=="function"?(cov_1s53a2b0g7().b[171][0]++,failFn):(cov_1s53a2b0g7().b[171][1]++,function(){cov_1s53a2b0g7().f[90]++;}));var _lastFn=(cov_1s53a2b0g7().s[700]++,typeof lastFn=="function"?(cov_1s53a2b0g7().b[172][0]++,lastFn):(cov_1s53a2b0g7().b[172][1]++,function(){cov_1s53a2b0g7().f[91]++;}));cov_1s53a2b0g7().s[701]++;var _f=function(){cov_1s53a2b0g7().f[92]++;var success=(cov_1s53a2b0g7().s[702]++,_testFn());cov_1s53a2b0g7().s[703]++;if(true==success){cov_1s53a2b0g7().b[173][0]++;cov_1s53a2b0g7().s[704]++;_successFn();cov_1s53a2b0g7().s[705]++;_lastFn(true,_count);}else{cov_1s53a2b0g7().b[173][1]++;cov_1s53a2b0g7().s[706]++;_failFn();cov_1s53a2b0g7().s[707]++;if(_count>=maxReps){cov_1s53a2b0g7().b[174][0]++;cov_1s53a2b0g7().s[708]++;_lastFn(success,_count);}else{cov_1s53a2b0g7().b[174][1]++;cov_1s53a2b0g7().s[709]++;_count++;cov_1s53a2b0g7().s[710]++;window.setTimeout(_f,delay);}}};cov_1s53a2b0g7().s[711]++;_f();};// =============================================================================================
853
- /*
854
- bw.htmlDataToImg = function(data, opts) {
855
- /**
856
- htmlDataToImg(data, opts) // takes a 2D array of numbers and render as an image
857
- each data point must evaluate to a Number or be a function which will be called with its positional arguments and must return a number.
858
-
859
- OR
860
-
861
- function can be a string as long as it returns a valud HTML color prefixed with "#"
862
-
863
- e.g.
864
- "#123"
865
- "#112233"
866
-
867
- e.g.:
868
- function (return 23)
869
- function(x,y) { return x+y;}
870
-
871
- * /
872
- var dopts = {
873
- outputType : "canvas" , // "table" | "divs" | "svg"
874
- colorMode : "auto", // use greyscale map
875
- colorStretch: 1.0
876
- }
877
-
878
- dopts = optsCopy(dopts,opts);
879
- // if (_to(dopts["colorMapFn"]) != "function")
880
- // dopts["colorMapFn"] = function(x){var c= mapScale(x,0,255,0,255,true).}
881
-
882
-
883
-
884
- }
885
- */ // =============================================================================================
886
- cov_1s53a2b0g7().s[712]++;bw.naturalCompare=function(as,bs){cov_1s53a2b0g7().f[93]++;/**
887
- bw.naturalCompare(a,b) {
888
- bw.naturalCompare() is a function which can be passed to an array sort to provide natural sorting of mixed array elements.
889
-
890
- [3,4,2,1,"10","111","foo","bar","01","this123","This123", "848"].sort()
891
- vs
892
- [3,4,2,1,"10","111","foo","bar","01","this123","This123", "848"].sort(bw.naturalCompare)
893
-
894
- it is the default sort for bw.sortHTMLTable()
895
-
896
- */ //https://www.webdeveloper.com/forum/d/254726-sorting-alphanumeric-array (taken from here) see also
897
- //using .localCompare() in newer versions of JS
898
- var a,b,a1,b1,i=(cov_1s53a2b0g7().s[713]++,0),L,rx=(cov_1s53a2b0g7().s[714]++,/(\d+)|(\D+)/g),rd=(cov_1s53a2b0g7().s[715]++,/\d/);cov_1s53a2b0g7().s[716]++;if((cov_1s53a2b0g7().b[176][0]++,isFinite(as))&&(cov_1s53a2b0g7().b[176][1]++,isFinite(bs))){cov_1s53a2b0g7().b[175][0]++;cov_1s53a2b0g7().s[717]++;return Math.sign(as-bs);}else{cov_1s53a2b0g7().b[175][1]++;}cov_1s53a2b0g7().s[718]++;a=String(as).toLocaleLowerCase();cov_1s53a2b0g7().s[719]++;b=String(bs).toLocaleLowerCase();cov_1s53a2b0g7().s[720]++;if(a===b){cov_1s53a2b0g7().b[177][0]++;cov_1s53a2b0g7().s[721]++;return as>bs?(cov_1s53a2b0g7().b[178][0]++,1):(cov_1s53a2b0g7().b[178][1]++,0);}else{cov_1s53a2b0g7().b[177][1]++;}cov_1s53a2b0g7().s[722]++;if(!((cov_1s53a2b0g7().b[180][0]++,rd.test(a))&&(cov_1s53a2b0g7().b[180][1]++,rd.test(b)))){cov_1s53a2b0g7().b[179][0]++;cov_1s53a2b0g7().s[723]++;return a>b?(cov_1s53a2b0g7().b[181][0]++,1):(cov_1s53a2b0g7().b[181][1]++,-1);}else{cov_1s53a2b0g7().b[179][1]++;}cov_1s53a2b0g7().s[724]++;a=a.match(rx);cov_1s53a2b0g7().s[725]++;b=b.match(rx);cov_1s53a2b0g7().s[726]++;L=a.length>b.length?(cov_1s53a2b0g7().b[182][0]++,b.length):(cov_1s53a2b0g7().b[182][1]++,a.length);cov_1s53a2b0g7().s[727]++;while(i<L){cov_1s53a2b0g7().s[728]++;a1=a[i];cov_1s53a2b0g7().s[729]++;b1=b[i++];cov_1s53a2b0g7().s[730]++;if(a1!==b1){cov_1s53a2b0g7().b[183][0]++;cov_1s53a2b0g7().s[731]++;if((cov_1s53a2b0g7().b[185][0]++,isFinite(a1))&&(cov_1s53a2b0g7().b[185][1]++,isFinite(b1))){cov_1s53a2b0g7().b[184][0]++;cov_1s53a2b0g7().s[732]++;if(a1.charAt(0)==="0"){cov_1s53a2b0g7().b[186][0]++;cov_1s53a2b0g7().s[733]++;a1="."+a1;}else{cov_1s53a2b0g7().b[186][1]++;}cov_1s53a2b0g7().s[734]++;if(b1.charAt(0)==="0"){cov_1s53a2b0g7().b[187][0]++;cov_1s53a2b0g7().s[735]++;b1="."+b1;}else{cov_1s53a2b0g7().b[187][1]++;}cov_1s53a2b0g7().s[736]++;return a1-b1;}else{cov_1s53a2b0g7().b[184][1]++;cov_1s53a2b0g7().s[737]++;return a1>b1?(cov_1s53a2b0g7().b[188][0]++,1):(cov_1s53a2b0g7().b[188][1]++,-1);}}else{cov_1s53a2b0g7().b[183][1]++;}}cov_1s53a2b0g7().s[738]++;return Math.sign(a.length-b.length);};// =============================================================================================
899
- cov_1s53a2b0g7().s[739]++;bw.sortHTMLTable=function(table,col,dir,sortFunction){cov_1s53a2b0g7().f[94]++;/**
900
- bw.sortHTMLTable(table, column, optionalSortFunction).
901
-
902
- sort any HTML table active in the DOM
903
- table must be a valid DOM table element or CSS selector (first element is used)
904
-
905
- default uses string compare. but can pass in a function
906
- sortFunc(a,b,col) // a and b are the cells to compare, col is optional info on what column this is
907
- */var rows,switching,i,x,y,shouldSwitch;var sortF=(cov_1s53a2b0g7().s[740]++,_to(sortFunction)=="function"?(cov_1s53a2b0g7().b[189][0]++,sortFunction):(cov_1s53a2b0g7().b[189][1]++,bw.naturalCompare));cov_1s53a2b0g7().s[741]++;table=bw.DOM(table)[0];cov_1s53a2b0g7().s[742]++;dir=(cov_1s53a2b0g7().b[191][0]++,dir==true)||(cov_1s53a2b0g7().b[191][1]++,dir=="up")?(cov_1s53a2b0g7().b[190][0]++,true):(cov_1s53a2b0g7().b[190][1]++,false);cov_1s53a2b0g7().s[743]++;switching=true;cov_1s53a2b0g7().s[744]++;col=_to(col)=="number"?(cov_1s53a2b0g7().b[192][0]++,col):(cov_1s53a2b0g7().b[192][1]++,0);//default sort on left most column
908
- //Make a loop that will continue until no switching has been done
909
- cov_1s53a2b0g7().s[745]++;while(switching){cov_1s53a2b0g7().s[746]++;//start by saying: no switching is done:
910
- switching=0;cov_1s53a2b0g7().s[747]++;rows=table.getElementsByTagName("TR");/*Loop through all table rows (except the first, which contains table headers):*/cov_1s53a2b0g7().s[748]++;for(i=1;i<rows.length-1;i++){cov_1s53a2b0g7().s[749]++;//start by saying there should be no switching:
911
- shouldSwitch=0;/*Get the two elements you want to compare,
912
- one from current row and one from the next:*/cov_1s53a2b0g7().s[750]++;x=rows[i].getElementsByTagName("TD")[col].innerHTML;cov_1s53a2b0g7().s[751]++;y=rows[i+1].getElementsByTagName("TD")[col].innerHTML;//check if the two rows should switch place:
913
- cov_1s53a2b0g7().s[752]++;shouldSwitch=dir?(cov_1s53a2b0g7().b[193][0]++,sortF(x,y,col)>0):(cov_1s53a2b0g7().b[193][1]++,sortF(x,y,col)<0);cov_1s53a2b0g7().s[753]++;if(shouldSwitch){cov_1s53a2b0g7().b[194][0]++;cov_1s53a2b0g7().s[754]++;break;}else{cov_1s53a2b0g7().b[194][1]++;}}cov_1s53a2b0g7().s[755]++;if(shouldSwitch){cov_1s53a2b0g7().b[195][0]++;cov_1s53a2b0g7().s[756]++;//If a switch has been marked, make the switch and mark that a switch has been done:
914
- rows[i].parentNode.insertBefore(rows[i+1],rows[i]);cov_1s53a2b0g7().s[757]++;switching=true;}else{cov_1s53a2b0g7().b[195][1]++;}}};// =============================================================================================
915
- cov_1s53a2b0g7().s[758]++;bw.sortTableDispatch=function(item,fn){cov_1s53a2b0g7().f[95]++;/**
916
- bw.sortTableDispatch(el) is used to bind sorting functions to tables generated by bw.htmlTable(....)
917
- item must be a valid DOM element or id.
918
- */var i;cov_1s53a2b0g7().s[759]++;item=bw.DOM(item)[0];cov_1s53a2b0g7().s[760]++;if(_to(item).substr(0,4)!="html"){cov_1s53a2b0g7().b[196][0]++;cov_1s53a2b0g7().s[761]++;return false;}else{cov_1s53a2b0g7().b[196][1]++;}//something not right about this table element
919
- var index=(cov_1s53a2b0g7().s[762]++,0),dir;var cols=(cov_1s53a2b0g7().s[763]++,item.parentElement.getElementsByTagName("th"));//update which tab selected
920
- cov_1s53a2b0g7().s[764]++;for(i=0;i<cols.length;i++){cov_1s53a2b0g7().s[765]++;if(cols[i]==item){cov_1s53a2b0g7().b[197][0]++;cov_1s53a2b0g7().s[766]++;// selected tab logic
921
- index=i;cov_1s53a2b0g7().s[767]++;dir=bw.DOMClass(cols[i],"bw-table-sort-upa");// ifthe current col is already up..
922
- cov_1s53a2b0g7().s[768]++;if(dir){cov_1s53a2b0g7().b[198][0]++;cov_1s53a2b0g7().s[769]++;bw.DOMClass(cols[i],"bw-table-sort-upa","bw-table-sort-dna");}else{cov_1s53a2b0g7().b[198][1]++;cov_1s53a2b0g7().s[770]++;//dna or xxa
923
- if(bw.DOMClass(cols[i],"bw-table-sort-dna")){cov_1s53a2b0g7().b[199][0]++;cov_1s53a2b0g7().s[771]++;bw.DOMClass(cols[i],"bw-table-sort-dna","bw-table-sort-upa");}else{cov_1s53a2b0g7().b[199][1]++;cov_1s53a2b0g7().s[772]++;bw.DOMClass(cols[i],"bw-table-sort-xxa","bw-table-sort-upa");}}}else{cov_1s53a2b0g7().b[197][1]++;cov_1s53a2b0g7().s[773]++;// its not the selected column so we clear the up / down arrow
924
- bw.DOMClass(cols[i],"bw-table-sort-upa","");cov_1s53a2b0g7().s[774]++;bw.DOMClass(cols[i],"bw-table-sort-dna","");cov_1s53a2b0g7().s[775]++;bw.DOMClass(cols[i],"bw-table-sort-xxa","bw-table-sort-xxa");}}//console.log(item.parentElement.parentElement.parentElement);
925
- cov_1s53a2b0g7().s[776]++;bw.sortHTMLTable(item.parentElement.parentElement.parentElement,index,dir,fn);};// ===================================================================================
926
- /**
927
- bw.function dispatch for DOM elements..
928
-
929
- the bw.fnRegistry{} is a dict of user supplied functions are assigned IDs by bitwrench. Using these IDs one can call the functions which is useful in DOM string contexts such as makeHTMLTable() or buildHTMLObjStr().
930
- */var _fnRegistry=(cov_1s53a2b0g7().s[777]++,{});var _fnIDCounter=(cov_1s53a2b0g7().s[778]++,0);cov_1s53a2b0g7().s[779]++;bw.funcRegister=function(fn,forceName){cov_1s53a2b0g7().f[96]++;/**
931
- bw.funcRegister()
932
- register a function to be called by iD.
933
- fn is any function or can be anonymous function.
934
- (optional) forceName forces the returned ID used to be forceName. forceName must be only alpha and numeric chars.
935
- forceName is useful when declaring static HTML content and one wants to use the bwFunctionDispatch but before bitwrench has been loaded or run.
936
-
937
- In this case in the static code call like this:
938
-
939
- <div class="..." onclick="bw.funcGetById('myFnName')(this)"> regular html content goes here </div>
940
- <script ..>
941
- function superDuperFunctionCode (a) { .... code for my function ... };
942
- bw.funcRegister(superDuperFunctionCode,"myFnName"); //now when the element is clicked on superDuperFunctionCode() will be called.
943
- </script>
944
-
945
- */var fnID=(cov_1s53a2b0g7().s[780]++,"class_bwfn_"+_fnIDCounter);cov_1s53a2b0g7().s[781]++;_fnIDCounter++;cov_1s53a2b0g7().s[782]++;fnID=_to(forceName)=="string"?(cov_1s53a2b0g7().b[200][0]++,forceName):(cov_1s53a2b0g7().b[200][1]++,fnID);cov_1s53a2b0g7().s[783]++;fnID.trim();cov_1s53a2b0g7().s[784]++;_fnRegistry[fnID]=fn;cov_1s53a2b0g7().s[785]++;return fnID;};cov_1s53a2b0g7().s[786]++;bw.funcUnregister=function(fnID){cov_1s53a2b0g7().f[97]++;cov_1s53a2b0g7().s[787]++;/**
946
- bw.funcUnregister(fnID)
947
- remove a function from the bitwrench dispatch registry
948
- */if(fnID in _fnRegistry){cov_1s53a2b0g7().b[201][0]++;cov_1s53a2b0g7().s[788]++;delete _fnRegistry[fnID];}else{cov_1s53a2b0g7().b[201][1]++;}};cov_1s53a2b0g7().s[789]++;bw.funcGetById=function(fnID,errFn){cov_1s53a2b0g7().f[98]++;cov_1s53a2b0g7().s[790]++;/**
949
- bw.funcGetById(fnId, errFn)
950
- allows a function to be exectued by its bw function ID.
951
- bw.funcGetById(myId)(... args ...)
952
-
953
- errFn is optional function to call if fnID is not found.
954
-
955
- example:
956
- var myFunc = bw.getFuncById("myFuncID"); // function must already be registered.
957
- */fnID=String(fnID);cov_1s53a2b0g7().s[791]++;if(fnID in _fnRegistry){cov_1s53a2b0g7().b[202][0]++;cov_1s53a2b0g7().s[792]++;return _fnRegistry[fnID];}else{cov_1s53a2b0g7().b[202][1]++;var _id=(cov_1s53a2b0g7().s[793]++,fnID);cov_1s53a2b0g7().s[794]++;return _to(errFn)=="function"?(cov_1s53a2b0g7().b[203][0]++,errFn):(cov_1s53a2b0g7().b[203][1]++,function(){cov_1s53a2b0g7().f[99]++;cov_1s53a2b0g7().s[795]++;bw.log(_id,"bw.funcGetById(): unregistered fn error");});}};cov_1s53a2b0g7().s[796]++;bw.funcGetDispatchStr=function(fnID,argstring){cov_1s53a2b0g7().f[100]++;cov_1s53a2b0g7().s[797]++;/**
958
- bw.funcGetDispatchStr(fnID, argString)
959
- create a string suitble for use in DOM element dispatch. note argstring is a literal so variables must be reduce to their values.
960
- see bw.funcRegister() for getting valid IDs for user supplied functions.
961
-
962
- example: bw.funcGetDispatchStr("myFuncID","param1,param2")
963
- */switch(_to(argstring)){case"string":cov_1s53a2b0g7().b[204][0]++;case"number":cov_1s53a2b0g7().b[204][1]++;cov_1s53a2b0g7().s[798]++;argstring=String(argstring);cov_1s53a2b0g7().s[799]++;break;case"array":cov_1s53a2b0g7().b[204][2]++;cov_1s53a2b0g7().s[800]++;argstring=argstring.join(",");cov_1s53a2b0g7().s[801]++;break;case"function":cov_1s53a2b0g7().b[204][3]++;cov_1s53a2b0g7().s[802]++;argstring=argstring();cov_1s53a2b0g7().s[803]++;break;default:cov_1s53a2b0g7().b[204][4]++;cov_1s53a2b0g7().s[804]++;argstring="";}cov_1s53a2b0g7().s[805]++;return"bw.funcGetById('"+fnID+"')("+argstring+")";};// =============================================================================================
964
- cov_1s53a2b0g7().s[806]++;bw.loremIpsum=function(numChars,startSpot,startWithCapitalLetter){cov_1s53a2b0g7().f[101]++;cov_1s53a2b0g7().s[807]++;/**
965
- bw.loremIpsum(numChars, startSpot)
966
-
967
- generate a simple string of Lorem Ipsum text (sample typographer's text) of numChars in length.
968
-
969
- if startSpot is supplied, it starts the string at the supplied index e.g. bw.loremIpsum(200, 50)
970
- will supply 200 chars of loremIpsum starting at index 50 of the Lorem Ipsum sample text.
971
-
972
- if startWithCapitalLetter == true then the function will capitlize the first character or inject a capital letter if ihe first character isn't a capital letter.
973
- default is true;
974
-
975
- Default is a paragraph of lorem ipsum (446 chars)
976
- */startSpot=_to(startSpot)!="number"?(cov_1s53a2b0g7().b[205][0]++,0):(cov_1s53a2b0g7().b[205][1]++,Math.round(startSpot));var l=(cov_1s53a2b0g7().s[808]++,"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. ");cov_1s53a2b0g7().s[809]++;startSpot=startSpot%l.length;cov_1s53a2b0g7().s[810]++;l=l.substring(startSpot,l.length)+l.substring(0,startSpot);cov_1s53a2b0g7().s[811]++;if(_to(numChars)!="number"){cov_1s53a2b0g7().b[206][0]++;cov_1s53a2b0g7().s[812]++;numChars=l.length;}else{cov_1s53a2b0g7().b[206][1]++;}var i=(cov_1s53a2b0g7().s[813]++,numChars),s=(cov_1s53a2b0g7().s[814]++,"");cov_1s53a2b0g7().s[815]++;while(i>0){cov_1s53a2b0g7().s[816]++;s+=i<l.length?(cov_1s53a2b0g7().b[207][0]++,l.substring(0,i)):(cov_1s53a2b0g7().b[207][1]++,l);cov_1s53a2b0g7().s[817]++;i-=l.length;}cov_1s53a2b0g7().s[818]++;if(s[s.length-1]==" "){cov_1s53a2b0g7().b[208][0]++;cov_1s53a2b0g7().s[819]++;s=s.substring(0,s.length-1)+".";}else{cov_1s53a2b0g7().b[208][1]++;}// always end on non-whitespace. "." was chosen arbitrarily.
977
- cov_1s53a2b0g7().s[820]++;if(startWithCapitalLetter!=false){cov_1s53a2b0g7().b[209][0]++;var c=(cov_1s53a2b0g7().s[821]++,s[0].toUpperCase());cov_1s53a2b0g7().s[822]++;c=c.match(/[A-Z]/)?(cov_1s53a2b0g7().b[210][0]++,c):(cov_1s53a2b0g7().b[210][1]++,"M");cov_1s53a2b0g7().s[823]++;s=c+s.substring(1,s.length);}else{cov_1s53a2b0g7().b[209][1]++;}cov_1s53a2b0g7().s[824]++;return s;};cov_1s53a2b0g7().s[825]++;bw.docString=function(s,options){cov_1s53a2b0g7().f[102]++;/**
978
- bw.docString(functionAsString, options)
979
- returns array of valid docStrings embedded in a string
980
-
981
- @param docType{string} : "jsdoc" | "python" | "custom" (python means triplequote (") 3 times), "custom" means supply delims
982
- @param options {delims:[string,string]} : start, stop delimiters (only used if docType set to "custom")
983
-
984
- @return array{strings} : array of captured params
985
-
986
- */var dopts=(cov_1s53a2b0g7().s[826]++,{docType:"jsdoc",// "js doc", "python", "other" (jsdoc is default)
987
- delims:["/**","*/"],parseJSDocParams:false,dropLeadin:false// removes lead-in whitespace or floating single * on each line e.g. " * @mycomment" ==> "@mycomment"
988
- });cov_1s53a2b0g7().s[827]++;dopts=optsCopy(dopts,options);cov_1s53a2b0g7().s[828]++;var _es=function(str){cov_1s53a2b0g7().f[103]++;cov_1s53a2b0g7().s[829]++;return str.replace(/(?=[\\^$*+?.()|{}[\]])/g,"\\");};// do escape of regex chars
989
- cov_1s53a2b0g7().s[830]++;dopts["delims"]=bw.choice(dopts["docType"],{"jsdoc":["/**","*/"],"python":["\"\"\"","\"\"\""],// old regex: /["]{3}([\s\S]*?)["]{3}/ig
990
- "jspy":["/**\"\"\"","\"\"\"*/"]// js && python
991
- },dopts["delims"]);var c=(cov_1s53a2b0g7().s[831]++,_to(s)=="function"?(cov_1s53a2b0g7().b[211][0]++,s.toString()):(cov_1s53a2b0g7().b[211][1]++,String(s)));var r=(cov_1s53a2b0g7().s[832]++,[]);cov_1s53a2b0g7().s[833]++;try{var re=(cov_1s53a2b0g7().s[834]++,new RegExp(_es(dopts["delims"][0])+"\\s*\\n*([^\\*]|(\\*(?!\\/)))*"+_es(dopts["delims"][1]),"ig"));// "([\\s\\S]*?)"
992
- cov_1s53a2b0g7().s[835]++;r=c.match(re);}catch(e){cov_1s53a2b0g7().s[836]++;bw.log(String(e));}cov_1s53a2b0g7().s[837]++;if(_to(r)=="array"){cov_1s53a2b0g7().b[212][0]++;cov_1s53a2b0g7().s[838]++;r=r.map(function(x){cov_1s53a2b0g7().f[104]++;cov_1s53a2b0g7().s[839]++;return x.substring(dopts["delims"][0].length,x.length-dopts["delims"][1].length);});// this is an array of the contents of docStrings which can still be multiline in thier own right
993
- cov_1s53a2b0g7().s[840]++;r=dopts["dropLeadin"]==true?(cov_1s53a2b0g7().b[213][0]++,r.map(function(x){cov_1s53a2b0g7().f[105]++;cov_1s53a2b0g7().s[841]++;return x.split(/[\n\r]/).map(function(y){cov_1s53a2b0g7().f[106]++;cov_1s53a2b0g7().s[842]++;return bw.trim(y,"left")+"\n";});})):(cov_1s53a2b0g7().b[213][1]++,r);// need to hanlde multiline stuff here
994
- }else{cov_1s53a2b0g7().b[212][1]++;cov_1s53a2b0g7().s[843]++;r=[];}cov_1s53a2b0g7().s[844]++;return r;};// =============================================================================================
995
- cov_1s53a2b0g7().s[845]++;bw.docStringParseLine=function(s){cov_1s53a2b0g7().f[107]++;/**
996
- Parse a single line of a jsdoc string.
997
- @param {string} s - line of docstring to parse
998
- @return - dict of line contents {source: s, field:string, name:string, description: string, types: type1,type2 }
999
- if not a valid doc string line then returns source string only
1000
- */var r=(cov_1s53a2b0g7().s[846]++,{"source":s,"field":"","types":"","name":"","description":""});var a=(cov_1s53a2b0g7().s[847]++,s.replace(/^\s*(\/\*\*?)?|(\*\/)?\s*$/ig,""));// remove the comment markers if still there "/** my comment */"" ==> "my comment"
1001
- cov_1s53a2b0g7().s[848]++;a=a.replace(/^\s*\**\s*/,"");// remove any cruft at beginning of line " * @myParam {}....." ==> "@myParam {}....."
1002
- cov_1s53a2b0g7().s[849]++;if(a.charAt(0)=="@"){cov_1s53a2b0g7().b[214][0]++;// if we have hit a @fieldname parameter we start parsing.
1003
- // ([str, regex, fieldStr, result{}]) ==> ([str, regex, fieldStr, result{}]) ::> ([str,result{},fieldStr,regex])
1004
- /*
1005
- var _tok = function(x){
1006
- var m = x[0].match(x[1]);
1007
- if (m != null) {x[4][3]=m[1];}
1008
- x[0] = x[0].replace(x[1],"");
1009
- return x;
1010
- }
1011
- */ //r = [[e,f],[e,f],[e,f],[e,f]].reduce(,_tok);
1012
- var e,x;var t=(cov_1s53a2b0g7().s[850]++,bw.trim);cov_1s53a2b0g7().s[851]++;e=/^@([A-Za-z0-9_<>[\]]*)/i;cov_1s53a2b0g7().s[852]++;x=a.match(e);cov_1s53a2b0g7().s[853]++;if(x!=null){cov_1s53a2b0g7().b[215][0]++;cov_1s53a2b0g7().s[854]++;r["field"]=t(x[1]);}else{cov_1s53a2b0g7().b[215][1]++;cov_1s53a2b0g7().s[855]++;return r;}// didn't match... opt out here
1013
- cov_1s53a2b0g7().s[856]++;a=a.replace(e,"");cov_1s53a2b0g7().s[857]++;e=/^\s*\{([A-Za-z0-9_|\s,.\-+!@#$%^&*()=[\]]*)\}/i;cov_1s53a2b0g7().s[858]++;x=a.match(e);cov_1s53a2b0g7().s[859]++;if(x!=null){cov_1s53a2b0g7().b[216][0]++;cov_1s53a2b0g7().s[860]++;r["types"]=t(x[1]);}else{cov_1s53a2b0g7().b[216][1]++;}// types is optional..
1014
- cov_1s53a2b0g7().s[861]++;a=a.replace(e,"");cov_1s53a2b0g7().s[862]++;e=/^\s*([\S]*)/i;cov_1s53a2b0g7().s[863]++;x=a.match(e);cov_1s53a2b0g7().s[864]++;if(x!=null){cov_1s53a2b0g7().b[217][0]++;cov_1s53a2b0g7().s[865]++;r["description"]=t(x[1]);}else{cov_1s53a2b0g7().b[217][1]++;}//
1015
- cov_1s53a2b0g7().s[866]++;a=a.replace(e,"");cov_1s53a2b0g7().s[867]++;e=/^\s*([\S]*)/i;cov_1s53a2b0g7().s[868]++;x=a.match(e);cov_1s53a2b0g7().s[869]++;if(x!=null){cov_1s53a2b0g7().b[218][0]++;cov_1s53a2b0g7().s[870]++;r["name"]=t(x[1]);}else{cov_1s53a2b0g7().b[218][1]++;}//
1016
- cov_1s53a2b0g7().s[871]++;a=a.replace(e,"");// descrpition ==> name: "" description : "description"
1017
- // description we we ==> name: "" description : "description we we "
1018
- // name - description we we ==> name: "name" descrpition : "description we we"
1019
- // - description we we ==> name: "" description : "description we we"
1020
- cov_1s53a2b0g7().s[872]++;if(r["name"].match(/^\s*-+\s*/)!=null){cov_1s53a2b0g7().b[219][0]++;cov_1s53a2b0g7().s[873]++;r["name"]=r["description"];cov_1s53a2b0g7().s[874]++;r["description"]=t(a);}else{cov_1s53a2b0g7().b[219][1]++;cov_1s53a2b0g7().s[875]++;r["description"]=r["description"]+" "+r["name"]+" "+t(a);cov_1s53a2b0g7().s[876]++;r["name"]="";}}else{cov_1s53a2b0g7().b[214][1]++;}cov_1s53a2b0g7().s[877]++;return r;};// =============================================================================================
1021
- cov_1s53a2b0g7().s[878]++;bw.docStringParse=function(s){cov_1s53a2b0g7().f[108]++;cov_1s53a2b0g7().s[879]++;/**
1022
- @method bw.parseJsDocString() parse and extract info from a jsdoc style comment. expects there to be only a single docString comment
1023
- @description docStringParse parses a jsdoc string
1024
- and returns the paramters as an array which can be formatted for display or interrogtion.
1025
- @param{string} - a valid js docstring
1026
-
1027
- @returns An array of triplets [@param, {types}, comment info]
1028
- */ /*
1029
- implementation notes:
1030
- the parser splits the candidate doc string in to lines.
1031
-
1032
- Examples:
1033
-
1034
- * Assign the project to an employee.
1035
- * @param {Object} - The employee who is responsible for the project. ==> ["@param","object","", "The employee who is resposnsible for the project"]
1036
- * @param {string} employee.name - The name of the employee.
1037
- * @param {string} employee.department - The employee's department.
1038
-
1039
-
1040
- */s=bw.docString(s)[0];var a=(cov_1s53a2b0g7().s[880]++,s.split("\n"));//console.log(a);
1041
- var i,r=(cov_1s53a2b0g7().s[881]++,[bw.docStringParseLine(a[0])]);cov_1s53a2b0g7().s[882]++;for(i=1;i<a.length;i++){var l=(cov_1s53a2b0g7().s[883]++,bw.docStringParseLine(a[i]));cov_1s53a2b0g7().s[884]++;if(l["field"]==""){cov_1s53a2b0g7().b[220][0]++;cov_1s53a2b0g7().s[885]++;// nothing parseable...
1042
- if(r[r.length-1]["field"]==""){cov_1s53a2b0g7().b[221][0]++;cov_1s53a2b0g7().s[886]++;r[r.length-1]["source"]+=l["source"];}else{cov_1s53a2b0g7().b[221][1]++;cov_1s53a2b0g7().s[887]++;r[r.length-1]["description"]+=l["source"];}}else{cov_1s53a2b0g7().b[220][1]++;cov_1s53a2b0g7().s[888]++;r.push(l);}}cov_1s53a2b0g7().s[889]++;return r;};// =============================================================================================
1043
- cov_1s53a2b0g7().s[890]++;bw.isHexStr=function(str,allowChars){cov_1s53a2b0g7().f[109]++;cov_1s53a2b0g7().s[891]++;/**
1044
- isHexStr() returns a number of hex digits found or false if non-hex string.
1045
- allow is an optional string of characters "-+."etc to permit in the string.
1046
- the allow characters are not counted in the result
1047
-
1048
- examples:
1049
- bw.isHEXStr("123a") ===> 4
1050
- bw.isHEXStr("12-3a") ===> false
1051
- bw.isHEXStr("12-3a","-") ===> 4
1052
- */if(_to(str)=="string"){cov_1s53a2b0g7().b[222][0]++;cov_1s53a2b0g7().s[892]++;str=str.replace(new RegExp("["+allowChars+"]","g"),"");var isHexReg=(cov_1s53a2b0g7().s[893]++,new RegExp("^[0-9A-Fa-f]{"+str.length+"}$"));cov_1s53a2b0g7().s[894]++;return isHexReg.test(str)==true?(cov_1s53a2b0g7().b[223][0]++,str.length):(cov_1s53a2b0g7().b[223][1]++,false);}else{cov_1s53a2b0g7().b[222][1]++;}cov_1s53a2b0g7().s[895]++;return false;};// =============================================================================================
1053
- cov_1s53a2b0g7().s[896]++;bw.__monkey_patch_is_nodejs__="ignore";//used in test suites
1054
- cov_1s53a2b0g7().s[897]++;bw.isNodeJS=function(){cov_1s53a2b0g7().f[110]++;cov_1s53a2b0g7().s[898]++;/**
1055
- bw.isNodeJS() ==> returns true if running in node environment (else browser)
1056
- */if(bw.__monkey_patch_is_nodejs__!="ignore"){cov_1s53a2b0g7().b[224][0]++;cov_1s53a2b0g7().s[899]++;return bw.__monkey_patch_is_nodejs__;}else{cov_1s53a2b0g7().b[224][1]++;}cov_1s53a2b0g7().s[900]++;return((cov_1s53a2b0g7().b[225][0]++,typeof module!=="undefined")&&(cov_1s53a2b0g7().b[225][1]++,module.exports))!==false;//a hack will fix later
1057
- };//console.log("=====",bw.isNodeJS())
1058
- // =============================================================================================
1059
- cov_1s53a2b0g7().s[901]++;bw.fixNum=function(num,digits){cov_1s53a2b0g7().f[111]++;cov_1s53a2b0g7().s[902]++;/**
1060
- bw.fixedNum(num,digits)
1061
-
1062
- Truncate a number at digits number of places.
1063
- bw.fixNum(1.2345,2) ===> 1.23
1064
- bw.fixNum(234.32,-2) ===> 200
1065
- */num=Number(num);cov_1s53a2b0g7().s[903]++;if(isNaN(num)){cov_1s53a2b0g7().b[226][0]++;cov_1s53a2b0g7().s[904]++;return NaN;}else{cov_1s53a2b0g7().b[226][1]++;}cov_1s53a2b0g7().s[905]++;digits=_to(digits)=="number"?(cov_1s53a2b0g7().b[227][0]++,digits):(cov_1s53a2b0g7().b[227][1]++,3);cov_1s53a2b0g7().s[906]++;num*=Math.pow(10,digits);//num = Math.trunc(num);
1066
- cov_1s53a2b0g7().s[907]++;num=num>0?(cov_1s53a2b0g7().b[228][0]++,Math.floor(num)):(cov_1s53a2b0g7().b[228][1]++,Math.ceil(num));// some browsers don't support Math.trunc()
1067
- cov_1s53a2b0g7().s[908]++;num/=Math.pow(10,digits);cov_1s53a2b0g7().s[909]++;return num;};// =============================================================================================
1068
- cov_1s53a2b0g7().s[910]++;bw.multiArray=function(value,dims){cov_1s53a2b0g7().f[112]++;cov_1s53a2b0g7().s[911]++;/**
1069
- bw.multiArray(value, dims)
1070
-
1071
- return a multidimensional array where all cells are initialized to value.
1072
-
1073
- bw.multiArray(0,[4,5]) // returns 4x5 array of 0s
1074
- bw.multiArray("test",[4,5]) // returns 4x5 array of "test"
1075
-
1076
- this shorthand is available for single dim arrays
1077
- bw.multiArray(0,5) ===> returns 5x1 array of 0s
1078
-
1079
- bw.multiArray also accepts functions
1080
-
1081
- bw.multiArray(bw.random, [3,4]) ===> creates 3x5 array of random #s btw 0..100
1082
-
1083
- bw.multiArray(function(){return (new Date()).getTime();},[4,6] ) ==> returns values based on the Javascript date
1084
- */var v=function(){cov_1s53a2b0g7().f[113]++;cov_1s53a2b0g7().s[912]++;return _to(value)=="function"?(cov_1s53a2b0g7().b[229][0]++,value()):(cov_1s53a2b0g7().b[229][1]++,value);};cov_1s53a2b0g7().s[913]++;dims=_to(dims)=="number"?(cov_1s53a2b0g7().b[230][0]++,[dims]):(cov_1s53a2b0g7().b[230][1]++,dims);cov_1s53a2b0g7().s[914]++;var _array=function(a,dim){cov_1s53a2b0g7().f[114]++;cov_1s53a2b0g7().s[915]++;if(dim<dims.length){cov_1s53a2b0g7().b[231][0]++;cov_1s53a2b0g7().s[916]++;for(var i=(cov_1s53a2b0g7().s[917]++,0);i<dims[dim];i++){cov_1s53a2b0g7().s[918]++;a[i]=dim==dims.length-1?(cov_1s53a2b0g7().b[232][0]++,v()):(cov_1s53a2b0g7().b[232][1]++,_array([],dim+1));}cov_1s53a2b0g7().s[919]++;return a;}else{cov_1s53a2b0g7().b[231][1]++;}};cov_1s53a2b0g7().s[920]++;return _array([],0);};// =============================================================================================
1085
- cov_1s53a2b0g7().s[921]++;bw.clip=function(data,min,max){cov_1s53a2b0g7().f[115]++;/**
1086
- @method: bw.clip(data, min, max) clips data in between min and max.
1087
-
1088
- Examples:
1089
- bw.clip(5,2,20) ==> 5 // already in range
1090
- bw.clip(1,2,20) ==> 2 // less than the min value so clips to min value
1091
- bw.clip([1,4,8,35], 2, 20) ==> [2,4,5,20]
1092
- */var l=(cov_1s53a2b0g7().s[922]++,min<max?(cov_1s53a2b0g7().b[233][0]++,min):(cov_1s53a2b0g7().b[233][1]++,max));var h=(cov_1s53a2b0g7().s[923]++,max>min?(cov_1s53a2b0g7().b[234][0]++,max):(cov_1s53a2b0g7().b[234][1]++,min));cov_1s53a2b0g7().s[924]++;if(_to(data)=="array"){cov_1s53a2b0g7().b[235][0]++;cov_1s53a2b0g7().s[925]++;return data.map(function(x){cov_1s53a2b0g7().f[116]++;cov_1s53a2b0g7().s[926]++;return x<l?(cov_1s53a2b0g7().b[236][0]++,l):(cov_1s53a2b0g7().b[236][1]++,x>h?(cov_1s53a2b0g7().b[237][0]++,h):(cov_1s53a2b0g7().b[237][1]++,x));});}else{cov_1s53a2b0g7().b[235][1]++;cov_1s53a2b0g7().s[927]++;return data<l?(cov_1s53a2b0g7().b[238][0]++,l):(cov_1s53a2b0g7().b[238][1]++,data>h?(cov_1s53a2b0g7().b[239][0]++,h):(cov_1s53a2b0g7().b[239][1]++,data));}};// =============================================================================================
1093
- cov_1s53a2b0g7().s[928]++;bw.mapScale=function(x,in0,in1,out0,out1,options){cov_1s53a2b0g7().f[117]++;/**
1094
- @method: bw.mapScale()
1095
-
1096
- Map an input value x in its natural range in0...in1 to the output space out0...out1 with optional clipping
1097
- expScale allows sigmoidal warping to stretch input values contrained to a small range. (floating point scale factor)
1098
- x can be either a number or array of numbers.
1099
-
1100
- if options["clip"] = false, then mapScale will extrapolate outside of out0,out1
1101
-
1102
- //this is the function that oficially started bitwrench..
1103
- */var dopts=(cov_1s53a2b0g7().s[929]++,{clip:true,expScale:false});cov_1s53a2b0g7().s[930]++;dopts=optsCopy(dopts,options);cov_1s53a2b0g7().s[931]++;if(in0==in1){cov_1s53a2b0g7().b[240][0]++;cov_1s53a2b0g7().s[932]++;return x;}else{cov_1s53a2b0g7().b[240][1]++;}cov_1s53a2b0g7().s[933]++;out0=_toa(out0,"number",out0,0);cov_1s53a2b0g7().s[934]++;out1=_toa(out1,"number",out1,1);cov_1s53a2b0g7().s[935]++;var ms=function(z){cov_1s53a2b0g7().f[118]++;cov_1s53a2b0g7().s[936]++;if(dopts["expScale"]){cov_1s53a2b0g7().b[241][0]++;var y=(cov_1s53a2b0g7().s[937]++,(z-(in1+in0)/2.0)/(in1-in0)*dopts["expScale"]);cov_1s53a2b0g7().s[938]++;z=(out1-out0)*(1/(1+Math.exp(-y)))+out0;}else{cov_1s53a2b0g7().b[241][1]++;cov_1s53a2b0g7().s[939]++;z=(z-in0)/(in1-in0)*(out1-out0)+out0;}cov_1s53a2b0g7().s[940]++;if(dopts["clip"]){cov_1s53a2b0g7().b[242][0]++;cov_1s53a2b0g7().s[941]++;z=bw.clip(z,out0,out1);}else{cov_1s53a2b0g7().b[242][1]++;}cov_1s53a2b0g7().s[942]++;return z;};cov_1s53a2b0g7().s[943]++;if(_to(x)=="number"){cov_1s53a2b0g7().b[243][0]++;cov_1s53a2b0g7().s[944]++;return ms(x);}else{cov_1s53a2b0g7().b[243][1]++;}cov_1s53a2b0g7().s[945]++;return x.map(ms);};// =============================================================================================
1104
- //https://stackoverflow.com/questions/10073699/pad-a-number-with-leading-zeros-in-javascript
1105
- cov_1s53a2b0g7().s[946]++;bw.padNum=function(x,width,options){cov_1s53a2b0g7().f[119]++;/**
1106
- @description bw.padnum() takes a number and pads left pads (default is '0'). padNum also accepts strings so
1107
-
1108
- bw.padNum(123,5) ==> " 123"
1109
- bw.padNum(1234,5) ==> " 1234"
1110
- bw.padNum("foo",5)==> " foo"
1111
- @param x {number}
1112
- @return {string} padded number
1113
- */var dopts=(cov_1s53a2b0g7().s[947]++,{pad:" "});cov_1s53a2b0g7().s[948]++;dopts=optsCopy(dopts,options);cov_1s53a2b0g7().s[949]++;x=String(x);cov_1s53a2b0g7().s[950]++;return x.length>=width?(cov_1s53a2b0g7().b[244][0]++,x):(cov_1s53a2b0g7().b[244][1]++,new Array(width-x.length+1).join(dopts["pad"])+x);};// =============================================================================================
1114
- cov_1s53a2b0g7().s[951]++;bw.trim=function(s,dir){cov_1s53a2b0g7().f[120]++;/**
1115
- @description bw.trim() trims whitespace from string on either left, right, or both. (cross browser works before IE8)
1116
- @param s {string} : a string to trim white space on
1117
- @param dir {"left" | "right" | "both" | "none"} : trim white space on left only, right only or both sides, or no trim (default is both)
1118
- */var t=(cov_1s53a2b0g7().s[952]++,bw.choice(dir,{"left":/^[\s\uFEFF\xA0\n]+/g,"right":/[\s\uFEFF\xA0\n]+$/g,"none":/(?!)/ // useful for programmatic scenarios (eg. [....].map ) where not all of the entries should be trimmed.
1119
- },/^[\s\uFEFF\xA0\n]+|[\s\uFEFF\xA0\n]+$/g));cov_1s53a2b0g7().s[953]++;return String(_toa(s,"undefined","",s)).replace(t,"");};// =============================================================================================
1120
- cov_1s53a2b0g7().s[954]++;bw.padString=function(s,width,dir,options){cov_1s53a2b0g7().f[121]++;/**
1121
- @description bw.padString() takes a string and pads it to the specified number of chars either left or right or centered.
1122
- */var dopts=(cov_1s53a2b0g7().s[955]++,{pad:" ",trimDir:"both"// pre-trim the input string: "left", "right", "both", "none"
1123
- });cov_1s53a2b0g7().s[956]++;dopts=optsCopy(dopts,options);cov_1s53a2b0g7().s[957]++;s=String(s);var x=(cov_1s53a2b0g7().s[958]++,bw.trim(s,dopts["trimDir"]));var p=(cov_1s53a2b0g7().s[959]++,width>x.length?(cov_1s53a2b0g7().b[245][0]++,width-x.length+1):(cov_1s53a2b0g7().b[245][1]++,0));// total padding
1124
- var q=(cov_1s53a2b0g7().s[960]++,bw.choice(dir,{"left":[p,0],"right":[0,p],"center":[Math.round(p/2),p-Math.round(p/2)+1]},[0,0]));cov_1s53a2b0g7().s[961]++;return new Array(q[0]).join(dopts["pad"])+x+new Array(q[1]).join(dopts["pad"]);};// =============================================================================================
1125
- cov_1s53a2b0g7().s[962]++;bw.random=function(rangeBegin,rangeEnd,options){cov_1s53a2b0g7().f[122]++;cov_1s53a2b0g7().s[963]++;/**
1126
- @method: random
1127
-
1128
- Return a random number between rangeBegin and RangeEnd (inclusive)
1129
- default is 0,100
1130
-
1131
- options
1132
- {
1133
- setType : "int"
1134
- dims : false | number | [ , , ] // selector for dimensions
1135
- }
1136
-
1137
- options
1138
- setType:
1139
- "int" ==> return an integer (default)
1140
- "float" or "number" ==> return floating point number
1141
-
1142
- dims
1143
- false or ommitted ==> return a single number
1144
- 5 ==> return a 5x1 array of random numbers
1145
- [3,5,2] ==> return a 3x5x2 array of random numbers
1146
-
1147
- example:
1148
- bw.random() ==> returns a number btw 0,100
1149
- bw.random(-4,4,{setType: "float", dims[4,5]}) ==> returns a 3x5 array of floating pt numbers btw -4,4
1150
-
1151
- see also prandom for psuedorandom numbers
1152
-
1153
- */rangeBegin=_to(rangeBegin)=="number"?(cov_1s53a2b0g7().b[246][0]++,rangeBegin):(cov_1s53a2b0g7().b[246][1]++,0);cov_1s53a2b0g7().s[964]++;rangeEnd=_to(rangeEnd)=="number"?(cov_1s53a2b0g7().b[247][0]++,rangeEnd):(cov_1s53a2b0g7().b[247][1]++,100);var dopts=(cov_1s53a2b0g7().s[965]++,{setType:"int",dims:false// if dims is array e.g. [3,4,5] returns random elements array
1154
- });cov_1s53a2b0g7().s[966]++;dopts=optsCopy(dopts,options);cov_1s53a2b0g7().s[967]++;var _rnd=function(){cov_1s53a2b0g7().f[123]++;var n=(cov_1s53a2b0g7().s[968]++,0);cov_1s53a2b0g7().s[969]++;dopts.setType=["int","float","number"].indexOf(dopts.setType)==-1?(cov_1s53a2b0g7().b[248][0]++,"int"):(cov_1s53a2b0g7().b[248][1]++,dopts.setType);cov_1s53a2b0g7().s[970]++;if(rangeEnd<rangeBegin){cov_1s53a2b0g7().b[249][0]++;cov_1s53a2b0g7().s[971]++;rangeBegin^=rangeEnd;cov_1s53a2b0g7().s[972]++;rangeEnd^=rangeBegin;cov_1s53a2b0g7().s[973]++;rangeBegin^=rangeEnd;}else{cov_1s53a2b0g7().b[249][1]++;}cov_1s53a2b0g7().s[974]++;n=Math.random()*(rangeEnd-rangeBegin)+rangeBegin;cov_1s53a2b0g7().s[975]++;return dopts.setType=="int"?(cov_1s53a2b0g7().b[250][0]++,Math.round(n)):(cov_1s53a2b0g7().b[250][1]++,n);};cov_1s53a2b0g7().s[976]++;if((cov_1s53a2b0g7().b[252][0]++,_to(dopts["dims"])=="array")||(cov_1s53a2b0g7().b[252][1]++,_to(dopts["dims"])=="number")){cov_1s53a2b0g7().b[251][0]++;cov_1s53a2b0g7().s[977]++;return bw.multiArray(_rnd,dopts["dims"]);}else{cov_1s53a2b0g7().b[251][1]++;}cov_1s53a2b0g7().s[978]++;return _rnd();};// =============================================================================================
1155
- cov_1s53a2b0g7().s[979]++;bw.prandom=function(rangeBegin,rangeEnd,seed,options){cov_1s53a2b0g7().f[124]++;cov_1s53a2b0g7().s[980]++;/**
1156
- prandom - generate a psuedo random number from internal hash function in a given range
1157
- */rangeBegin=_to(rangeBegin)=="number"?(cov_1s53a2b0g7().b[253][0]++,rangeBegin):(cov_1s53a2b0g7().b[253][1]++,0);cov_1s53a2b0g7().s[981]++;rangeEnd=_to(rangeEnd)=="number"?(cov_1s53a2b0g7().b[254][0]++,rangeEnd):(cov_1s53a2b0g7().b[254][1]++,100);var dopts=(cov_1s53a2b0g7().s[982]++,{setType:"int",dims:false// if dims is array e.g. [3,4,5] returns random elements array
1158
- });cov_1s53a2b0g7().s[983]++;dopts=optsCopy(dopts,options);var _cseed=(cov_1s53a2b0g7().s[984]++,seed);cov_1s53a2b0g7().s[985]++;var _rnd=function(){cov_1s53a2b0g7().f[125]++;var n=(cov_1s53a2b0g7().s[986]++,0);cov_1s53a2b0g7().s[987]++;dopts.setType=["int","float","number"].indexOf(dopts.setType)==-1?(cov_1s53a2b0g7().b[255][0]++,"int"):(cov_1s53a2b0g7().b[255][1]++,dopts.setType);cov_1s53a2b0g7().s[988]++;if(rangeEnd<rangeBegin){cov_1s53a2b0g7().b[256][0]++;cov_1s53a2b0g7().s[989]++;rangeBegin^=rangeEnd;cov_1s53a2b0g7().s[990]++;rangeEnd^=rangeBegin;cov_1s53a2b0g7().s[991]++;rangeBegin^=rangeEnd;}else{cov_1s53a2b0g7().b[256][1]++;}cov_1s53a2b0g7().s[992]++;n=(bw.hashFnv32a("start string",_cseed)&0xffff)/65536*(rangeEnd-rangeBegin)+rangeBegin;cov_1s53a2b0g7().s[993]++;_cseed=dopts.setType=="int"?(cov_1s53a2b0g7().b[257][0]++,Math.round(n)):(cov_1s53a2b0g7().b[257][1]++,n);cov_1s53a2b0g7().s[994]++;return dopts.setType=="int"?(cov_1s53a2b0g7().b[258][0]++,Math.round(n)):(cov_1s53a2b0g7().b[258][1]++,n);};cov_1s53a2b0g7().s[995]++;if((cov_1s53a2b0g7().b[260][0]++,_to(dopts["dims"])=="array")||(cov_1s53a2b0g7().b[260][1]++,_to(dopts["dims"])=="number")){cov_1s53a2b0g7().b[259][0]++;cov_1s53a2b0g7().s[996]++;return bw.multiArray(_rnd,dopts["dims"]);}else{cov_1s53a2b0g7().b[259][1]++;}cov_1s53a2b0g7().s[997]++;return _rnd();};// =============================================================================================
1159
- cov_1s53a2b0g7().s[998]++;bw.hashFnv32a=function(str,seed,returnHexStr){cov_1s53a2b0g7().f[126]++;/**
1160
- @method Calculate a 32 bit FNV-1a hash
1161
- Found here: https://gist.github.com/vaiorabbit/5657561
1162
- Ref.: http://isthe.com/chongo/tech/comp/fnv/
1163
-
1164
- @param {string} str the input value
1165
-
1166
- @param {integer} [seed] optionally pass the hash of the previous chunk
1167
-
1168
- @param {boolean} [asString=false] set to true to return the hash value as
1169
- 8-digit hex string instead of an integer
1170
-
1171
- @returns {integer | string}
1172
- */ /*jshint bitwise:false */var i,l,hval=(cov_1s53a2b0g7().s[999]++,typeof seed=="undefined"?(cov_1s53a2b0g7().b[261][0]++,0x811c9dc5):(cov_1s53a2b0g7().b[261][1]++,seed));cov_1s53a2b0g7().s[1000]++;for(i=0,l=str.length;i<l;i++){cov_1s53a2b0g7().s[1001]++;hval^=str.charCodeAt(i);cov_1s53a2b0g7().s[1002]++;hval+=(hval<<1)+(hval<<4)+(hval<<7)+(hval<<8)+(hval<<24);}cov_1s53a2b0g7().s[1003]++;if(returnHexStr){cov_1s53a2b0g7().b[262][0]++;cov_1s53a2b0g7().s[1004]++;// Convert to 8 digit hex string
1173
- return("0000000"+(hval>>>0).toString(16)).substr(-8);}else{cov_1s53a2b0g7().b[262][1]++;}cov_1s53a2b0g7().s[1005]++;return hval>>>0;};// =============================================================================================
1174
- cov_1s53a2b0g7().s[1006]++;bw.CSSMakeTheme=function(color){cov_1s53a2b0g7().f[127]++;/**
1175
- makeThemeCSS (color)
1176
-
1177
- makes a CSS theme color palettte based on the supplied color which is exported as a css style
1178
-
1179
- TODO
1180
- */var c=(cov_1s53a2b0g7().s[1007]++,bw.colorRgbToHsl(bw.colorParse(color)));var p=(cov_1s53a2b0g7().s[1008]++,"bw-theme-");var thm=(cov_1s53a2b0g7().s[1009]++,["l5","l4","l3","l2","l1","d1","d2","d3","d4","d5"].map(function(x){cov_1s53a2b0g7().f[128]++;cov_1s53a2b0g7().s[1010]++;return p+x;}));var im=(cov_1s53a2b0g7().s[1011]++," !important");cov_1s53a2b0g7().s[1012]++;thm=thm.map(function(x,i){cov_1s53a2b0g7().f[129]++;cov_1s53a2b0g7().s[1013]++;return[x,[["color",(i<5?(cov_1s53a2b0g7().b[263][0]++,"#000"):(cov_1s53a2b0g7().b[263][1]++,"#fff"))+im],["background-color",c+im]]];});cov_1s53a2b0g7().s[1014]++;return thm;};// =============================================================================================
1181
- cov_1s53a2b0g7().s[1015]++;bw.CSSSimpleStyles=function(appendToHead,options){cov_1s53a2b0g7().f[130]++;/*
1182
- bw.bwSimpleStyles(appendToHead,options)
1183
-
1184
- bitwrench simpleStyles is the function which writes loads
1185
- write a quick grid style sheet for quick n dirty layout. See docs for examples.
1186
-
1187
- <h1 class='bw-h1'>Title for my section</h1>
1188
- <p>This section contains some interesting data and topics</p>
1189
- <div class="bw-row"> <!-- defines a row using bw css classes -->
1190
- <div class="bw-col3">column 1 content</div><div class="bw-col3">column 2 content</div><div class="bw-col3">column 3 content</div><div class="bw-col3">column 4 content</div>
1191
- </div>
1192
- <div>
1193
-
1194
- appendToHead ==> if true, attempts to append to HTML <head> (only writes if not already present)
1195
- options: {
1196
- "basics" : "load" // if set to "load will load some global constants for html, body, font-family", set to false to leave these unchanged.
1197
- "exportCSS": false // if true will wrap the output css in "script" tags.
1198
- "id" : "bw-default-styles" // id assigned to the script tag, used for preventing multiple loading in a browser page
1199
-
1200
- */var s=(cov_1s53a2b0g7().s[1016]++,"\n"),i;//var i,j,k,l;
1201
- var _r=(cov_1s53a2b0g7().s[1017]++,bw.fixNum);var rl=(cov_1s53a2b0g7().s[1018]++,bw.makeCSSRule);var dopts=(cov_1s53a2b0g7().s[1019]++,{"globals":false,"id":"bw-default-styles","exportCSS":false,"colorset":{"color":"#000","background-color":"#ddd","active":"#222"},"pretty":false,//make easy to read
1202
- "themes":// built-in primitive themes
1203
- [// must be valid CSS keys / values
1204
- [".bw-thm-light",{"color":"#020202 !important;","background-color":"#e2e2e2 !important;"}],[".bw-thm-dark",{"color":"#e2e2e2 !important;","background-color":"#020202 !important;"}]]});cov_1s53a2b0g7().s[1020]++;dopts=optsCopy(dopts,options);var defs=(cov_1s53a2b0g7().s[1021]++,{// defaults
1205
- defContainer:"{height: 100%; width: 86%; margin: 0 auto; padding-left: 2%; padding-right:2%; left: 0; top: 1%;}\n",defFontSerif:"{font-family: Times New Roman, Times, serif;}\n",defFontSansSerif:"{font-family: Arial, Helvetica, sans-serif }\n"});cov_1s53a2b0g7().s[1022]++;if(dopts["globals"]=="load"){cov_1s53a2b0g7().b[264][0]++;cov_1s53a2b0g7().s[1023]++;s+="\nhtml,body "+defs.defContainer;cov_1s53a2b0g7().s[1024]++;s+="*"+defs.defFontSansSerif;}else{cov_1s53a2b0g7().b[264][1]++;}cov_1s53a2b0g7().s[1025]++;s+=".bw-def-page-setup"+defs.defContainer;cov_1s53a2b0g7().s[1026]++;s+=".bw-font-serif"+defs.defFontSerif;cov_1s53a2b0g7().s[1027]++;s+=".bw-font-sans-serif"+defs.defFontSansSerif;cov_1s53a2b0g7().s[1028]++;s+=[1,2,3,4,5,6].map(function(x){cov_1s53a2b0g7().f[131]++;cov_1s53a2b0g7().s[1029]++;return".bw-h"+x+"{ font-size: "+_r(3.2*Math.pow(.85,x+1))+"rem;}";}).join("\n")+"\n";//primtive in-built color themeing see opts to overide
1206
- cov_1s53a2b0g7().s[1030]++;for(i in dopts["colorset"]){cov_1s53a2b0g7().s[1031]++;s+=".bw-color-"+i+" {"+i+":"+dopts["colorset"][i]+"}\n";}cov_1s53a2b0g7().s[1032]++;bw.makeCSS(dopts["themes"]);cov_1s53a2b0g7().s[1033]++;for(i=0;i<dopts["themes"].length;i++){cov_1s53a2b0g7().s[1034]++;s+=rl(dopts["themes"][i]);//s+= bw.makeCSS( dopts["themes"][i])
1207
- }//text handling
1208
- var d=(cov_1s53a2b0g7().s[1035]++,[[".bw-left",{"text-align":"left"}],[".bw-right",{"text-align":"right"}],[".bw-center",{"text-align":"center","margin":"0 auto"}],[".bw-justify",{"text-align":"justify"}],[".bw-code",{"font-family":"monospace","white-space":"pre-wrap"}],[".bw-pad1",{"padding-left":"1%","padding-right":"1%"}],//tables
1209
- [".bw-table-stripe tr:nth-child(even)",{"background-color":"#f0f0f0"}],// striped rows
1210
- [".bw-table-col0-bold tr td:first-child",{"font-weight":"700"}],// make first col bold
1211
- [".bw-table-compact",{"border-collapse":"collapse","border-spacing":"0"}],[".bw-table-sort-upa::after",{"content":"\"\\2191\""}],// table sort arrow up (when visible arrows chosen)
1212
- [".bw-table-sort-dna::after",{"content":"\"\\2193\""}],// table sort arrow dn (when visible arrows chosen)
1213
- [".bw-table-sort-xxa::after",{"content":"\"\\00a0\""}],// table sort space (when visible arrows chosen)
1214
- //tabs
1215
- [".bw-tab-item-list",{"margin":0,"padding-inline-start":0}],[".bw-tab-item",{"display":"inline","padding-top":"5px","padding-left":"10px","padding-right":"10px","border-top-right-radius":"7px","border-top-left-radius":"7px"}],[".bw-tab-active",{/* padding-top:4px; padding-left:6px; padding-right:6px; padding-bottom:0; */"font-weight":"700"}],[".bw-tab:hover",{"cursor":"pointer","font-weight":700/* border: 1px solid #bbb; */}],[".bw-tab-content-list",{margin:0}],[".bw-tab-content",{display:"none","margin-top":"-1px","border-radius":0}],[".bw-tab-content, .bw-tab-active",{"background-color":"#ddd"}],//grid setup
1216
- [".bw-container",{margin:"0 auto"}],[".bw-row",{width:"100%",display:"block"}],[".bw-row [class^=\"bw-col\"]",{float:"left"}],[".bw-row::after",{content:"\"\"",display:"table",clear:"both"}],[".bw-box-1",{"padding-top":"10px","padding-bottom":"10px","border-radius":"8px"}],//misc element controls
1217
- [".bw-hide",{display:"none"}],[".bw-show",{display:"block"}]]);// grid system (generated)
1218
- cov_1s53a2b0g7().s[1036]++;for(var k=(cov_1s53a2b0g7().s[1037]++,1);k<=12;k++){cov_1s53a2b0g7().s[1038]++;d.push([".bw-col-"+k,{width:_r(k*100/12)+"%"}]);}// generate CSS from above rules
1219
- cov_1s53a2b0g7().s[1039]++;s+=d.map(function(x){cov_1s53a2b0g7().f[132]++;cov_1s53a2b0g7().s[1040]++;return rl(x,{pretty:dopts.pretty});}).join("\n")+"\n";//responsive screen
1220
- cov_1s53a2b0g7().s[1041]++;s+="@media only screen and (min-width: 540px) { .bw-container { width: 94%; }}\n";cov_1s53a2b0g7().s[1042]++;s+="@media only screen and (min-width: 720px) { .bw-container { width: 90%; }}\n";cov_1s53a2b0g7().s[1043]++;s+="@media only screen and (min-width: 960px) { .bw-container { width: 86%; }}\n";cov_1s53a2b0g7().s[1044]++;s+="@media only screen and (min-width: 1100px){ .bw-container { width: 78%; }}\n";cov_1s53a2b0g7().s[1045]++;if(bw.isNodeJS()==false){cov_1s53a2b0g7().b[265][0]++;var h=(cov_1s53a2b0g7().s[1046]++,bw.DOM("head")[0]);var el=(cov_1s53a2b0g7().s[1047]++,document.createElement("style"));cov_1s53a2b0g7().s[1048]++;el.id=dopts["id"];cov_1s53a2b0g7().s[1049]++;el.textContent=s;cov_1s53a2b0g7().s[1050]++;if((cov_1s53a2b0g7().b[267][0]++,appendToHead)&&(cov_1s53a2b0g7().b[267][1]++,document.getElementById(dopts["id"])==null)){cov_1s53a2b0g7().b[266][0]++;cov_1s53a2b0g7().s[1051]++;// only append once
1221
- h.appendChild(el);}else{cov_1s53a2b0g7().b[266][1]++;}}else{cov_1s53a2b0g7().b[265][1]++;}cov_1s53a2b0g7().s[1052]++;if(dopts["exportCSS"]){cov_1s53a2b0g7().b[268][0]++;cov_1s53a2b0g7().s[1053]++;s=bw.html(["style",{"id":dopts["id"]},"\n/**\n bitwrench basic css styles\n version: "+bw.version()["version"]+"\n */"+s]);}else{cov_1s53a2b0g7().b[268][1]++;}cov_1s53a2b0g7().s[1054]++;return s;};cov_1s53a2b0g7().s[1055]++;bw.CSSSimpleThemes=function(d,appendToHead){cov_1s53a2b0g7().f[133]++;/**
1222
- bw.bwSimpleThemes() selects simple (we do mean simple) HTML themes for some basic elements.
1223
- if d is an number it selects the built-in theme by index (see docs) else if d is a dictionary the elements
1224
- in d will be converted to a CSS style.
1225
-
1226
- output is a CSS style. if appendToHead is true or omitted then the theme is appended to the head element.
1227
- */var s=(cov_1s53a2b0g7().s[1056]++,""),xs=(cov_1s53a2b0g7().s[1057]++,{});/*
1228
- var thm = {
1229
- defBkgCol : "#333",
1230
- defCol : "#ddd",
1231
- col1 : "#555",
1232
- col2 : "#f0f0f0",
1233
- brd : "#ddd"
1234
- };
1235
-
1236
- var thmCSS =
1237
- [
1238
- ["*" , {"background-color": thm.defBkgCol, "color":thm.defCol, "font-family": "sans-serif", "box-sizing":"border-box"}],
1239
- ["body" , {"margin-top":"1%"}],
1240
- ["th" , {"background-color":thm.col1}],
1241
- ["tbody tr:nth-child(even)" , {"background-color": thm.col2}],
1242
- [["table", "td", "th"] , {"border-collapse":"collapse", "border":"1px solid "+thm.brd}],
1243
- [["td","th"] , {"padding":"4px"}],
1244
- [["div","body","button","table","input"] , {"border-radius": "2px"}]
1245
- // ["div", {"padding-left":"2%", "padding-right":"2%","padding-top":"1%","padding-bottom":"1%"}]
1246
- ];
1247
- */var def=(cov_1s53a2b0g7().s[1058]++,[// default styles
1248
- {css:[["*",{"background-color":"#333","color":"#ddd","font-family":"sans-serif","box-sizing":"border-box"}],["body",{"margin-top":"1%"}],["th",{"background-color":"#555"}],["tbody tr:nth-child(even)",{"background-color":"#f0f0f0"}],[["table","td","th"],{"border-collapse":"collapse","border":"1px solid #ddd"}],[["td","th"],{"padding":"4px"}],[["div","body","button","table","input"],{"border-radius":"2px"}]// ["div", {"padding-left":"2%", "padding-right":"2%","padding-top":"1%","padding-bottom":"1%"}]
1249
- ]},{css:[["*",{"background-color":"#f8f8f8","color":"#111","font-family":"sans-serif","box-sizing":"border-box"}],["body",{"margin-top":"1%"}],["th",{"background-color":"#ddd"}],["tbody tr:nth-child(even)",{"background-color":"#ddd"}],[["table","td","th"],{"border-collapse":"collapse","border":"1px solid #111"}],[["td","th"],{"padding":"4px"}],[["div","body","button","table","input"],{"border-radius":"2px"}]// ["div", {"padding-left":"2%", "padding-right":"2%","padding-top":"1%","padding-bottom":"1%"}]
1250
- ]}]);cov_1s53a2b0g7().s[1059]++;xs=bw.choice(_to(d),{"object":d,// "string" : function(){}
1251
- "number":(cov_1s53a2b0g7().b[270][0]++,d>=0)&&(cov_1s53a2b0g7().b[270][1]++,d<def.length)?(cov_1s53a2b0g7().b[269][0]++,def[d].css):(cov_1s53a2b0g7().b[269][1]++,def[0].css)},def[0].css);cov_1s53a2b0g7().s[1060]++;s=xs.map(function(y){cov_1s53a2b0g7().f[134]++;cov_1s53a2b0g7().s[1061]++;return bw.makeCSSRule(y,{pretty:false});}).join("\n");cov_1s53a2b0g7().s[1062]++;if(appendToHead!=false){cov_1s53a2b0g7().b[271][0]++;//var hs = document.getElementById("bw-simple-theme-styles");
1252
- var hs=(cov_1s53a2b0g7().s[1063]++,bw.DOM("bw-simple-theme-styles"));cov_1s53a2b0g7().s[1064]++;if(hs.length==0){cov_1s53a2b0g7().b[272][0]++;// first time
1253
- //var h = document.getElementsByTagName("head")[0];
1254
- var h=(cov_1s53a2b0g7().s[1065]++,bw.DOM("head")[0]);var el=(cov_1s53a2b0g7().s[1066]++,document.createElement("style"));cov_1s53a2b0g7().s[1067]++;el.id="bw-simple-theme-styles";cov_1s53a2b0g7().s[1068]++;el.textContent=s;//note IE8 requires .text=
1255
- cov_1s53a2b0g7().s[1069]++;h.appendChild(el);}else{cov_1s53a2b0g7().b[272][1]++;cov_1s53a2b0g7().s[1070]++;// replace it
1256
- hs.textContent=s;//note IE8 requires .text=
1257
- }}else{cov_1s53a2b0g7().b[271][1]++;}cov_1s53a2b0g7().s[1071]++;return s;};// =============================================================================================
1258
- cov_1s53a2b0g7().s[1072]++;bw.selectTabContent=function(item,target){cov_1s53a2b0g7().f[135]++;cov_1s53a2b0g7().s[1073]++;/**
1259
- This function is used inside a tab block to show the appropriate content. Note that this is
1260
- designed to work even if code is emitted as document.getElementById("myTabs").innerHTML = <<generated code..>>
1261
- or statically written by the programmer.
1262
-
1263
- note that DOM IDs are not required as selectTabContent() uses DOM path relative logic internally
1264
-
1265
- <div class="bw-tab-container"> <!-- bw-tab-container -- bw-tab-items (array of items), bw-tab-content (array of content to show) -->
1266
- <ul class="bw-tab-item-list"> <!-- container for the tabs -->
1267
- <li class="bw-tab userTab bw-tab-active" onclick="bw.selectTabContent(this)" >Tab 1</li>
1268
- <li class="bw-tab userTab " onclick="bw.selectTabContent(this)" >Tab 2</li>
1269
- <li class="bw-tab userTab " onclick="bw.selectTabContent(this)" >Tab 3</li>
1270
- <li class="bw-tab userTab " onclick="bw.selectTabContent(this)" >Tab 4</li>
1271
- </ul>
1272
- <div class="bw-tab-content-list"> <!-- container for the tab content -->
1273
- <div class="bw-tab-content bw-show" >coontent area 1 </div> <!-- bw-show picks which tab to make active at first -->
1274
- <div class="bw-tab-content" >content area 2</div>
1275
- <div class="bw-tab-content" >content 3</div>
1276
- <div class="bw-tab-content" >content 4</div>
1277
- </div> <!-- end of tab content sect -->
1278
- </div>
1279
- */ //if (_to(item)=="string")
1280
- // item = document.getElementById(item);
1281
- item=bw.DOM(item)[0];cov_1s53a2b0g7().s[1074]++;if(_to(item).substr(0,4)!="html"){cov_1s53a2b0g7().b[273][0]++;cov_1s53a2b0g7().s[1075]++;return false;}else{cov_1s53a2b0g7().b[273][1]++;}//unable to set tab content
1282
- var index=(cov_1s53a2b0g7().s[1076]++,0);var cols=(cov_1s53a2b0g7().s[1077]++,item.parentElement.getElementsByTagName("li"));//update which tab selected
1283
- cov_1s53a2b0g7().s[1078]++;for(i=0;i<cols.length;i++){cov_1s53a2b0g7().s[1079]++;if(cols[i]==item){cov_1s53a2b0g7().b[274][0]++;cov_1s53a2b0g7().s[1080]++;// selected tab logic
1284
- index=i;cov_1s53a2b0g7().s[1081]++;bw.markElement(cols[i],"bw-tab-active","bw-tab-active");}else{cov_1s53a2b0g7().b[274][1]++;cov_1s53a2b0g7().s[1082]++;// unselected tab logic
1285
- bw.markElement(cols[i],"bw-tab-active","");}}//console.log(item);
1286
- var tcols=(cov_1s53a2b0g7().s[1083]++,item.parentNode.parentNode.getElementsByClassName("bw-tab-content-list")[0].getElementsByClassName("bw-tab-content"));cov_1s53a2b0g7().s[1084]++;if(tcols.length<=0){cov_1s53a2b0g7().b[275][0]++;cov_1s53a2b0g7().s[1085]++;return false;}else{cov_1s53a2b0g7().b[275][1]++;}cov_1s53a2b0g7().s[1086]++;target=_to(target)=="undefined"?(cov_1s53a2b0g7().b[276][0]++,tcols[index]):(cov_1s53a2b0g7().b[276][1]++,target);//we will infer it by the tab index
1287
- cov_1s53a2b0g7().s[1087]++;target=_to(target)=="string"?(cov_1s53a2b0g7().b[277][0]++,document.getElementById(target)):(cov_1s53a2b0g7().b[277][1]++,target);// we hav an ID so we'll use that
1288
- var i;cov_1s53a2b0g7().s[1088]++;for(i=0;i<tcols.length;i++){cov_1s53a2b0g7().s[1089]++;if(tcols[i]==target){cov_1s53a2b0g7().b[278][0]++;cov_1s53a2b0g7().s[1090]++;bw.markElement(tcols[i],"bw-show","bw-show");}//tcols[i].style.display = "block";
1289
- else{cov_1s53a2b0g7().b[278][1]++;cov_1s53a2b0g7().s[1091]++;bw.markElement(tcols[i],"bw-show","");}//tcols[i].style.display = "none";
1290
- }cov_1s53a2b0g7().s[1092]++;return true;};// =============================================================================================
1291
- cov_1s53a2b0g7().s[1093]++;bw.DOMClass=function(el,key,replace){cov_1s53a2b0g7().f[136]++;/**
1292
- bw.DOMClass(el,value)
1293
-
1294
- returns whether a specific DOM element class name (key) is set on atleast one the supplied element(s).
1295
-
1296
- If replace is supplied then the class name (key) is replaced or added if it doesn't exist.
1297
- note that if key is not found but a replace is supplied the return-value is still false as the supplied key was not found
1298
-
1299
- el must be valid element or CSS selector
1300
-
1301
- markElement is used by bw UI toggles
1302
- */var r=(cov_1s53a2b0g7().s[1094]++,false),elems,x,j;//if (_to(el) == "string")
1303
- // el=document.getElementById(el);
1304
- cov_1s53a2b0g7().s[1095]++;elems=bw.DOM(el);cov_1s53a2b0g7().s[1096]++;if(elems.length<=0){cov_1s53a2b0g7().b[279][0]++;cov_1s53a2b0g7().s[1097]++;return r;}else{cov_1s53a2b0g7().b[279][1]++;}cov_1s53a2b0g7().s[1098]++;for(j=0;j<elems.length;j++){cov_1s53a2b0g7().s[1099]++;x=elems[j];cov_1s53a2b0g7().s[1100]++;try{var c=(cov_1s53a2b0g7().s[1101]++,x.className.split(/[ ]+/));var i=(cov_1s53a2b0g7().s[1102]++,c.indexOf(key));cov_1s53a2b0g7().s[1103]++;if(i>=0){cov_1s53a2b0g7().b[280][0]++;cov_1s53a2b0g7().s[1104]++;// found key
1305
- r=true;}else{cov_1s53a2b0g7().b[280][1]++;}cov_1s53a2b0g7().s[1105]++;if((cov_1s53a2b0g7().b[282][0]++,_to(replace)=="string")&&(cov_1s53a2b0g7().b[282][1]++,c.indexOf(replace)==-1)){cov_1s53a2b0g7().b[281][0]++;cov_1s53a2b0g7().s[1106]++;if(i==-1){cov_1s53a2b0g7().b[283][0]++;cov_1s53a2b0g7().s[1107]++;//key not found
1306
- c.push(replace);}else{cov_1s53a2b0g7().b[283][1]++;cov_1s53a2b0g7().s[1108]++;if(replace.length>0){cov_1s53a2b0g7().b[284][0]++;cov_1s53a2b0g7().s[1109]++;c[i]=replace;}else{cov_1s53a2b0g7().b[284][1]++;cov_1s53a2b0g7().s[1110]++;c.splice(i,1);}}cov_1s53a2b0g7().s[1111]++;x.className=c.join(" ").trim();cov_1s53a2b0g7().s[1112]++;r=true;// element.className = element.className.replace(/\bmystyle\b/g, "");
1307
- }else{cov_1s53a2b0g7().b[281][1]++;}}catch(e){cov_1s53a2b0g7().s[1113]++;bw.log(e);}}cov_1s53a2b0g7().s[1114]++;return r;};// =============================================================================================
1308
- cov_1s53a2b0g7().s[1115]++;bw.DOMClassToggle=function(el,className){cov_1s53a2b0g7().f[137]++;/**
1309
- bw.DOMClassToggle(el,classname)
1310
- for each element specified in el (eg "#id", ".myClass", "h2", <DOM OBJECT>) toggle className.
1311
-
1312
- If className is present on the object then it is removed. if it is not present it is added.
1313
-
1314
-
1315
- classNames with spaces or tabs are not valid and result in undefined behavior.
1316
-
1317
- returns last element current toggle state.
1318
- */var x,i,elems=(cov_1s53a2b0g7().s[1116]++,bw.DOM(el)),r=(cov_1s53a2b0g7().s[1117]++,false);cov_1s53a2b0g7().s[1118]++;for(i=0;i<elems.length;i++){cov_1s53a2b0g7().s[1119]++;x=elems[i];cov_1s53a2b0g7().s[1120]++;try{cov_1s53a2b0g7().s[1121]++;r=bw.DOMClass(x,className);cov_1s53a2b0g7().s[1122]++;if(r){cov_1s53a2b0g7().b[285][0]++;cov_1s53a2b0g7().s[1123]++;bw.DOMClass(x,className,"");}else{cov_1s53a2b0g7().b[285][1]++;cov_1s53a2b0g7().s[1124]++;bw.DOMClass(x,className,className);}}catch(e){cov_1s53a2b0g7().s[1125]++;bw.log(e);}}cov_1s53a2b0g7().s[1126]++;return!r;};// =============================================================================================
1319
- cov_1s53a2b0g7().s[1127]++;bw.version=function(){cov_1s53a2b0g7().f[138]++;/**
1320
- @method version() - bitwrench runtime version & license info.
1321
-
1322
- */var v=(cov_1s53a2b0g7().s[1128]++,{"version":"1.2.5","about":"bitwrench is a simple library of miscellaneous Javascript helper functions for common web design tasks.","copy":"(c) M A Chatterjee deftio (at) deftio (dot) com","url":"http://github.com/deftio/bitwrench","license":"BSD-2-Clause"});cov_1s53a2b0g7().s[1129]++;return v;};// ==============================================================================================
1323
- /**
1324
- command line handling
1325
-
1326
- this can be done via URL e.g. myPage.com?bw-load-styles=true
1327
-
1328
- or via script tag
1329
- <script type="text/javascript" src="./path/to/bitwrenchjs" bwargs="bw-load-styles=true"></script>
1330
-
1331
- */cov_1s53a2b0g7().s[1130]++;bw.bwargs={enableUJURLArgs:"true"};// the arguments are exported so one can see them as a simple dict
1332
- cov_1s53a2b0g7().s[1131]++;var parseArgs=function(s){cov_1s53a2b0g7().f[139]++;var args=(cov_1s53a2b0g7().s[1132]++,{});cov_1s53a2b0g7().s[1133]++;if((cov_1s53a2b0g7().b[287][0]++,typeof s=="string")&&(cov_1s53a2b0g7().b[287][1]++,s!="")){cov_1s53a2b0g7().b[286][0]++;cov_1s53a2b0g7().s[1134]++;s=s.split(";");var j;cov_1s53a2b0g7().s[1135]++;for(j in s){var k=(cov_1s53a2b0g7().s[1136]++,s[j].split(":"));cov_1s53a2b0g7().s[1137]++;args[k[0]]=k[1];}}else{cov_1s53a2b0g7().b[286][1]++;}cov_1s53a2b0g7().s[1138]++;return args;};cov_1s53a2b0g7().s[1139]++;var getArgs=function(){cov_1s53a2b0g7().f[140]++;cov_1s53a2b0g7().s[1140]++;if(bw.isNodeJS()==false){cov_1s53a2b0g7().b[288][0]++;// in browser
1333
- //var els = document.getElementsByTagName("script"); // array of script elements
1334
- var els=(cov_1s53a2b0g7().s[1141]++,bw.DOM("script"));var i,a,b;cov_1s53a2b0g7().s[1142]++;for(i in els){cov_1s53a2b0g7().s[1143]++;try{// bw.log(_args[i]);
1335
- var el=(cov_1s53a2b0g7().s[1144]++,els[i]);//
1336
- cov_1s53a2b0g7().s[1145]++;if(el.hasOwnProperty("src")!=false){cov_1s53a2b0g7().b[289][0]++;cov_1s53a2b0g7().s[1146]++;break;}else{cov_1s53a2b0g7().b[289][1]++;}var s=(cov_1s53a2b0g7().s[1147]++,String(el.getAttribute("src")));var f=(cov_1s53a2b0g7().s[1148]++,"bitwrench.js");cov_1s53a2b0g7().s[1149]++;if(s.toLocaleLowerCase().substring(s.length-f.length,s.length)==f.toLocaleLowerCase()){cov_1s53a2b0g7().b[290][0]++;cov_1s53a2b0g7().s[1150]++;s=_to(s)=="string"?(cov_1s53a2b0g7().b[291][0]++,el.getAttribute("bwargs")):(cov_1s53a2b0g7().b[291][1]++,[""]);cov_1s53a2b0g7().s[1151]++;s=_to(s)=="string"?(cov_1s53a2b0g7().b[292][0]++,el.getAttribute("data-bwargs")):(cov_1s53a2b0g7().b[292][1]++,s);//the html4/5 standard way
1337
- cov_1s53a2b0g7().s[1152]++;a=parseArgs(s);cov_1s53a2b0g7().s[1153]++;for(b in a){cov_1s53a2b0g7().s[1154]++;bw.bwargs[b]=a[b];}}else{cov_1s53a2b0g7().b[290][1]++;}}catch(e){//bw.log(String(["err 1418",i,e]));
1338
- }}//pick up from URL
1339
- cov_1s53a2b0g7().s[1155]++;if(bw.bwargs["enableUJURLArgs"]=="true"){cov_1s53a2b0g7().b[293][0]++;cov_1s53a2b0g7().s[1156]++;//note string literal "true"
1340
- //note in the script tag you can disable ?bwload=foo:bar; params with this
1341
- //<script type="text/javascript" src="./path/to/bitwrench.js" bwargs="enableURLConfig:false"></script>
1342
- a=parseArgs(bw.getURLParam("bwargs",""));cov_1s53a2b0g7().s[1157]++;for(b in a){cov_1s53a2b0g7().s[1158]++;bw.bwargs[b]=a[b];}}else{cov_1s53a2b0g7().b[293][1]++;}}else{cov_1s53a2b0g7().b[288][1]++;}};// ==============================================================================================
1343
- // ==============================================================================================
1344
- // ==============================================================================================
1345
- //internally used function declarations:
1346
- cov_1s53a2b0g7().s[1159]++;getArgs();// do command line stuff
1347
- var loadStyles=(cov_1s53a2b0g7().s[1160]++,bw.bwargs["bw-load-styles"]!="false");var loadStyleBasics=(cov_1s53a2b0g7().s[1161]++,bw.typeAssign(bw.bwargs["bw-load-style-basics"],"string",bw.bwargs["bw-load-style-basics"],"load"));cov_1s53a2b0g7().s[1162]++;bw.CSSSimpleStyles(loadStyles,{"basics":loadStyleBasics});// append to head the bitwrench css styles by default
1348
- cov_1s53a2b0g7().s[1163]++;bw.funcRegister(bw.log,"bw_log");// this is globally registered for debugging purposes, it will never get called though unless programmer does this explicitly.
1349
- cov_1s53a2b0g7().s[1164]++;return bw;});
1350
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJpdHdyZW5jaC5qcyJdLCJuYW1lcyI6WyJmbiIsIkFycmF5IiwicHJvdG90eXBlIiwiaW5kZXhPZiIsInNlYXJjaEVsZW1lbnQiLCJUeXBlRXJyb3IiLCJ0IiwiT2JqZWN0IiwibGVuIiwibGVuZ3RoIiwibiIsImFyZ3VtZW50cyIsIk51bWJlciIsIkluZmluaXR5IiwiTWF0aCIsImZsb29yIiwiYWJzIiwiayIsIm1heCIsIm1hcCIsImYiLCJyIiwiaSIsInB1c2giLCJmaWx0ZXIiLCJTdHJpbmciLCJ0cmltIiwicmVwbGFjZSIsInJvb3QiLCJmYWN0b3J5IiwiZGVmaW5lIiwiYW1kIiwibW9kdWxlIiwibGlibSIsImV4cG9ydE1vZHVsZVR5cGUiLCJleHBvcnRzIiwibGliZyIsInNlbGYiLCJidyIsImV4cG9ydE5hbWUiLCJjaG9pY2UiLCJ4IiwiY2hvaWNlcyIsImRlZiIsInoiLCJfdG8iLCJqc29uQ2xvbmUiLCJKU09OIiwicGFyc2UiLCJzdHJpbmdpZnkiLCJ0eXBlT2YiLCJiYXNlVHlwZU9ubHkiLCJ5IiwidG9TdHJpbmciLCJjYWxsIiwibWF0Y2giLCJ0b0xvY2FsZUxvd2VyQ2FzZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImUiLCJ0byIsInR5cGVBc3NpZ24iLCJhIiwidHlwZVN0cmluZyIsInRydWVWYWx1ZSIsImZhbHNlVmFsdWUiLCJfdG9hIiwidG9hIiwidHlwZUNvbnZlcnQiLCJ0YyIsIm9wdHNDb3B5IiwiZG9wdHMiLCJvcHRzIiwiYXJyYXlVbmlxIiwidiIsImFyciIsImFycmF5QmluQSIsImIiLCJhcnJheUJOb3RJbkEiLCJET01Jc0VsZW1lbnQiLCJlbCIsImlzTm9kZUpTIiwiRWxlbWVudCIsIkhUTUxFbGVtZW50Iiwibm9kZVR5cGUiLCJub2RlTmFtZSIsImxvZ2QiLCJfaXNFbCIsIkRPTUdldEVsZW1lbnRzIiwidHlwZSIsInRvTG93ZXJDYXNlIiwic3Vic3RyaW5nIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsImdldEVsZW1lbnRzQnlOYW1lIiwicXVlcnlTZWxlY3RvckFsbCIsIkRPTVNldEVsZW1lbnRzIiwiZG9tRWxlbWVudCIsInBhcmFtIiwiZWxzIiwibG9nIiwibCIsImVmIiwicCIsImQiLCJpbm5lckhUTUwiLCJET00iLCJjb2xvckludGVycCIsImluMCIsImluMSIsImNvbG9ycyIsInN0cmV0Y2giLCJjIiwiY29sb3JQYXJzZSIsIm1hcFNjYWxlIiwiY2xpcCIsImV4cFNjYWxlIiwiX2YiLCJjb2xvckhzbFRvUmdiIiwiaCIsInMiLCJybmQiLCJfZm4iLCJyb3VuZCIsImciLCJtIiwibWluIiwiY29sb3JSZ2JUb0hzbCIsImRlZkFscGhhIiwiZGYiLCJyZVQiLCJqIiwiZXhlYyIsInBhcnNlSW50Iiwic3BsaXQiLCJjb2xvclRvUkdCSGV4IiwiZm9ybWF0IiwicGgiLCJjb2xvckNvbnZlcnRDb2xvclNwYWNlIiwic3BhY2UiLCJfbG9nZGF0YSIsInZhbHVlIiwibXNnIiwiY2xlYXIiLCJzYXZlTWV0aG9kIiwiRGF0ZSIsImdldFRpbWUiLCJsb2dkYXJncyIsImJ3YXJncyIsIl9hIiwibG9nRXhwb3J0IiwiX2xkIiwibWFrZUhUTUxUYWJsZVN0ciIsInNvcnRhYmxlIiwicGFkU3RyaW5nIiwiam9pbiIsInNldENvb2tpZSIsImNuYW1lIiwiY3ZhbHVlIiwiZXhkYXlzIiwic2V0VGltZSIsImV4cGlyZXMiLCJ0b1VUQ1N0cmluZyIsImNvb2tpZSIsImdldENvb2tpZSIsImRlZmF1bHRWYWx1ZSIsImNhIiwiY2hhckF0IiwiZ2V0VVJMUGFyYW0iLCJrZXkiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImhyZWYiLCJVUkxQYXJhbVBhcnNlIiwiVVJMSGFzaCIsInVybCIsImRlZlZhbHVlIiwiaW5jbHVkZXMiLCJhbGxvd0hhc2giLCJocyIsInUiLCJzaCIsInBhcmFtcyIsInBhcnRzIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiaGFzT3duUHJvcGVydHkiLCJVUkxQYXJhbVBhY2siLCJzaW1wbGVEaWN0IiwiaW5jbFF1ZXN0aW9uIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiaHRtbFNhZmVTdHIiLCJzdHIiLCJSZWdFeHAiLCJrZXlzIiwiaHRtbEpTT04iLCJqc29uIiwidW5kZWZpbmVkIiwic3R5IiwidGVzdCIsIm1ha2VDU1MiLCJjc3NEYXRhIiwib3B0aW9ucyIsImVtaXRTdHlsZVRhZyIsImF0ciIsInByZXR0eSIsInRiIiwiX25hbWUiLCJfcnVsZSIsIl9ydWxlT3V0cHV0IiwiaHRtbCIsIm1ha2VDU1NSdWxlIiwic3AiLCJjciIsImh0bWxQYWdlIiwiaGVhZCIsImJvZHkiLCJkb2NUeXBlIiwiaHRtbFBhcmFtcyIsImxhbmciLCJoZWFkRGVmYXVsdENvbnRlbnQiLCJoZWFkSW5jbHVkZUJpdFdyZW5jaEpTIiwiaGVhZEluY2x1ZGVCaXRXcmVuY2hDU1MiLCJoZWFkRmF2aWNvbiIsImh0bWxfZmMiLCJvIiwiZm9yRWFjaCIsImlzbnUiLCJpZHgiLCJodG1sX2ZjMiIsIkhUTUxOb3JtIiwiYndIVE1MTm9kZSIsImJ3RXJyb3IiLCJpbmRlbnQiLCJpbmRlbnRTdHIiLCJvdXRGbiIsInciLCJ3ZSIsImJ1aWxkSFRNTE9ialN0cmluZyIsIl9jIiwiaHRtbGEiLCJsaXN0RGF0YSIsImh0bWxMaXN0IiwibGlzdFR5cGUiLCJhdHJpIiwibGMiLCJjbGFzc1N0ckFkZERlbCIsImNsYXNzRGF0YSIsImNsYXNzZXNUb0FkZCIsImNsYXNzZXNUb0RlbCIsInRub3JtIiwiY2QiLCJjb25jYXQiLCJjbGFzc1N0clRvZ2dsZSIsImNsYXNzZXNUb1RvZ2dsZSIsInRub3JtYSIsImh0bWxUYWJzIiwidGFiRGF0YSIsInRhYl9hdHIiLCJ0YWJjX2F0ciIsInRpIiwiaHRtbFRhYmxlIiwiZGF0YSIsInVzZUZpcnN0Um93QXNIZWFkZXJzIiwidGhlYWRfYXRyIiwidGhfYXRyIiwidGJvZHlfYXRyIiwidHJfYXRyIiwidGRfYXRyIiwiY2FwdGlvbiIsIl9ocyIsInNmaWQiLCJmdW5jUmVnaXN0ZXIiLCJmdW5jR2V0RGlzcGF0Y2hTdHIiLCJodG1sQWNjb3JkaWFuIiwiYXRyX2giLCJhdHJfYyIsImdldEZpbGUiLCJmbmFtZSIsImNhbGxiYWNrX2ZuIiwiZG9wcyIsInBhcnNlciIsInBycyIsImZzIiwicmVxdWlyZSIsInJlYWRGaWxlIiwiZXJyIiwiWE1MSHR0cFJlcXVlc3QiLCJvdmVycmlkZU1pbWVUeXBlIiwib3BlbiIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJzdGF0dXMiLCJyZXNwb25zZVRleHQiLCJzZW5kIiwiZ2V0SlNPTkZpbGUiLCJjb3B5VG9DbGlwYm9hcmQiLCJsaXN0ZW5lciIsImNsaXBib2FyZERhdGEiLCJzZXREYXRhIiwicHJldmVudERlZmF1bHQiLCJhZGRFdmVudExpc3RlbmVyIiwiZXhlY0NvbW1hbmQiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwic2F2ZUNsaWVudEZpbGUiLCJ3cml0ZUZpbGUiLCJzYXZlRGF0YSIsImNyZWF0ZUVsZW1lbnQiLCJhcHBlbmRDaGlsZCIsInN0eWxlIiwiYmxvYiIsIkJsb2IiLCJVUkwiLCJjcmVhdGVPYmplY3RVUkwiLCJkb3dubG9hZCIsImNsaWNrIiwicmV2b2tlT2JqZWN0VVJMIiwiZ0JXVGltZSIsImNsZWFyVGltZXIiLCJtZXNzYWdlIiwicmVhZFRpbWVyIiwiY3QiLCJzZXRJbnRlcnZhbFgiLCJjYWxsYmFjayIsImRlbGF5IiwibnVtYmVyX29mX3JlcGV0aXRpb25zIiwiaW50ZXJ2YWxJRCIsInNldEludGVydmFsIiwiY2xlYXJJbnRlcnZhbCIsInJlcGVhdFVudGlsIiwidGVzdEZuIiwic3VjY2Vzc0ZuIiwiZmFpbEZuIiwibWF4UmVwcyIsImxhc3RGbiIsIl9jb3VudCIsIl90ZXN0Rm4iLCJfc3VjY2Vzc0ZuIiwiX2ZhaWxGbiIsIl9sYXN0Rm4iLCJzdWNjZXNzIiwic2V0VGltZW91dCIsIm5hdHVyYWxDb21wYXJlIiwiYXMiLCJicyIsImExIiwiYjEiLCJMIiwicngiLCJyZCIsImlzRmluaXRlIiwic2lnbiIsInNvcnRIVE1MVGFibGUiLCJ0YWJsZSIsImNvbCIsImRpciIsInNvcnRGdW5jdGlvbiIsInJvd3MiLCJzd2l0Y2hpbmciLCJzaG91bGRTd2l0Y2giLCJzb3J0RiIsInBhcmVudE5vZGUiLCJpbnNlcnRCZWZvcmUiLCJzb3J0VGFibGVEaXNwYXRjaCIsIml0ZW0iLCJzdWJzdHIiLCJpbmRleCIsImNvbHMiLCJwYXJlbnRFbGVtZW50IiwiRE9NQ2xhc3MiLCJfZm5SZWdpc3RyeSIsIl9mbklEQ291bnRlciIsImZvcmNlTmFtZSIsImZuSUQiLCJmdW5jVW5yZWdpc3RlciIsImZ1bmNHZXRCeUlkIiwiZXJyRm4iLCJfaWQiLCJhcmdzdHJpbmciLCJsb3JlbUlwc3VtIiwibnVtQ2hhcnMiLCJzdGFydFNwb3QiLCJzdGFydFdpdGhDYXBpdGFsTGV0dGVyIiwidG9VcHBlckNhc2UiLCJkb2NTdHJpbmciLCJkZWxpbXMiLCJwYXJzZUpTRG9jUGFyYW1zIiwiZHJvcExlYWRpbiIsIl9lcyIsInJlIiwiZG9jU3RyaW5nUGFyc2VMaW5lIiwiZG9jU3RyaW5nUGFyc2UiLCJpc0hleFN0ciIsImFsbG93Q2hhcnMiLCJpc0hleFJlZyIsIl9fbW9ua2V5X3BhdGNoX2lzX25vZGVqc19fIiwiZml4TnVtIiwibnVtIiwiZGlnaXRzIiwiaXNOYU4iLCJOYU4iLCJwb3ciLCJjZWlsIiwibXVsdGlBcnJheSIsImRpbXMiLCJfYXJyYXkiLCJkaW0iLCJvdXQwIiwib3V0MSIsIm1zIiwiZXhwIiwicGFkTnVtIiwid2lkdGgiLCJwYWQiLCJ0cmltRGlyIiwicSIsInJhbmRvbSIsInJhbmdlQmVnaW4iLCJyYW5nZUVuZCIsInNldFR5cGUiLCJfcm5kIiwicHJhbmRvbSIsInNlZWQiLCJfY3NlZWQiLCJoYXNoRm52MzJhIiwicmV0dXJuSGV4U3RyIiwiaHZhbCIsImNoYXJDb2RlQXQiLCJDU1NNYWtlVGhlbWUiLCJjb2xvciIsInRobSIsImltIiwiQ1NTU2ltcGxlU3R5bGVzIiwiYXBwZW5kVG9IZWFkIiwiX3IiLCJybCIsImRlZnMiLCJkZWZDb250YWluZXIiLCJkZWZGb250U2VyaWYiLCJkZWZGb250U2Fuc1NlcmlmIiwibWFyZ2luIiwiZGlzcGxheSIsImZsb2F0IiwiY29udGVudCIsImlkIiwidGV4dENvbnRlbnQiLCJ2ZXJzaW9uIiwiQ1NTU2ltcGxlVGhlbWVzIiwieHMiLCJjc3MiLCJzZWxlY3RUYWJDb250ZW50IiwidGFyZ2V0IiwibWFya0VsZW1lbnQiLCJ0Y29scyIsImVsZW1zIiwiY2xhc3NOYW1lIiwic3BsaWNlIiwiRE9NQ2xhc3NUb2dnbGUiLCJlbmFibGVVSlVSTEFyZ3MiLCJwYXJzZUFyZ3MiLCJhcmdzIiwiZ2V0QXJncyIsImdldEF0dHJpYnV0ZSIsImxvYWRTdHlsZXMiLCJsb2FkU3R5bGVCYXNpY3MiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBZ0NBO0FBQ0EsaUIsQ0FBa0I7QUFFakI7QUFDRDtBQUVBO0FBQ0E7QUFFQztBQUNBLGFBQ0EsMEIsZ3d2S0FDRCxDQUFDLFNBQVNBLEVBQVQsQ0FBWSxDQUFFO0FBQ1g7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01BRFMsQ0F5QlQ7QUFDQSxHQUFJLENBQUNDLEtBQUssQ0FBQ0MsU0FBTixDQUFnQkMsT0FBckIsQ0FBOEIsQ0FDMUJGLEtBQUssQ0FBQ0MsU0FBTixDQUFnQkMsT0FBaEIsQ0FBMEIsU0FBVUMsYUFBVixDQUE4QixDQUNwRCxhQUNBLEdBQUksTUFBUSxJQUFaLENBQWtCLENBQ2QsS0FBTSxJQUFJQyxDQUFBQSxTQUFKLEVBQU4sQ0FDSCxDQUNELEdBQUlDLENBQUFBLENBQUMsQ0FBR0MsTUFBTSxDQUFDLElBQUQsQ0FBZCxDQUNBLEdBQUlDLENBQUFBLEdBQUcsQ0FBR0YsQ0FBQyxDQUFDRyxNQUFGLEdBQWEsQ0FBdkIsQ0FDQSxHQUFJRCxHQUFHLEdBQUssQ0FBWixDQUFlLENBQ1gsTUFBTyxDQUFDLENBQVIsQ0FDSCxDQUNELEdBQUlFLENBQUFBLENBQUMsQ0FBRyxD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QVUsaUJBQVYsR0FBZ0MsTUFBbkMsQ0FBMkMseURBQUU7QUFDN0M7QUFDQTtBQUNJeEYsQ0FBQyxDQUFHOFksU0FBUyxDQUFDdGEsRUFBRSxDQUFDb0ksV0FBSCxDQUFlLFFBQWYsQ0FBd0IsRUFBeEIsQ0FBRCxDQUFiLENBSHVDLDJCQUl2QyxJQUFLN0YsQ0FBTCxHQUFVZixDQUFBQSxDQUFWLENBQ0ksNEJBQUF4QixFQUFFLENBQUNnSCxNQUFILENBQVV6RSxDQUFWLEVBQWFmLENBQUMsQ0FBQ2UsQ0FBRCxDQUFkLENBQWtCLENBQ3pCLENBTkQsbUNBT0gsQ0FuQ0QsbUNBb0NILENBckNELENBd0NBO0FBQ0E7QUFDQTtBQUNBO0FBL2pHeUQsMkJBa2tHekRpWSxPQUFPLEdBRVA7QUFDQSxHQUFJRSxDQUFBQSxVQUFVLDZCQUFTMWEsRUFBRSxDQUFDZ0gsTUFBSCxDQUFVLGdCQUFWLEdBQTZCLE9BQXRDLENBQWQsQ0FDQSxHQUFJMlQsQ0FBQUEsZUFBZSw2QkFBSTNhLEVBQUUsQ0FBQ3VCLFVBQUgsQ0FBY3ZCLEVBQUUsQ0FBQ2dILE1BQUgsQ0FBVSxzQkFBVixDQUFkLENBQWdELFFBQWhELENBQXlEaEgsRUFBRSxDQUFDZ0gsTUFBSCxDQUFVLHNCQUFWLENBQXpELENBQTJGLE1BQTNGLENBQUosQ0FBbkIsQ0F0a0d5RCwyQkF1a0d6RGhILEVBQUUsQ0FBQzJZLGVBQUgsQ0FBbUIrQixVQUFuQixDQUE4QixDQUFDLFNBQVNDLGVBQVYsQ0FBOUIsRUFBMkQ7QUF2a0dGLDJCQXlrR3pEM2EsRUFBRSxDQUFDMk8sWUFBSCxDQUFnQjNPLEVBQUUsQ0FBQ2dFLEdBQW5CLENBQXVCLFFBQXZCLEVBQW1DO0FBemtHc0IsMkJBMmtHckQsTUFBT2hFLENBQUFBLEVBQVAsQ0FDSCxDQXJtR0EsQ0FBRCIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiAgYml0d3JlbmNoLmpzICAtLS0gTWlzYyBIZWxwZXIgRnVuY3Rpb25zIC4uIFxuICpcdFxuICogIGJpdHdyZW5jaCBpcyBqdXN0IGEgbmFtZWQgc3BhY2Ugc2V0IG9mIGphdmFzY3JpcHQgaGVscGVyIGZ1bmN0aW9ucyB1c2VmdWwgZm9yIGNvbW1vbiB3ZWIgdGFza3MgYW5kIFxuICogIHNvbWUgc2VydmVyIHNpZGUganMuICAgTm8gcmh5bWUgb3IgcmVhc29uIEkganVzdCBuZWVkZWQgdGhlc2UgaXRlbXMgb3ZlciBhbmQgb3ZlcmdhaW4gYW5kIGRpZG4ndCBmZWVsXG4gKiAgbGlrZSBjb2JibGluZyB0b2dldGhlciBkaWZmZXJlbnQgY29tbW9uIGxpYnNcbiAqXG4gKiAgTS4gQS4gQ2hhdHRlcmplZSAyMDEzXG4gKlxuICpcdEBjb3B5IENvcHlyaWdodCAoQykgPDIwMTM+ICA8TS4gQS4gQ2hhdHRlcmplZT5cbiAqICBcdFxuICogIEBhdXRob3IgTSBBIENoYXR0ZXJqZWUgPGRlZnRpbyBbYXRdIGRlZnRpbyBbZG90XSBjb20+XG4gKlxuICpcdFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkXG4gKlx0d2FycmFudHkuIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzXG4gKlx0YXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS5cbiAqXG4gKlx0UGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGFueW9uZSB0byB1c2UgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UsXG4gKlx0aW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdFxuICpcdGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczpcbiAqXG4gKlx0MS4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdCBub3RcbiAqXHRjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZVxuICpcdGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiBpcyByZXF1aXJlZC5cbiAqXG4gKlx0Mi4gQWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdCBub3QgYmVcbiAqXHRtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuXG4gKlxuICpcdDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZVxuICpcdGRpc3RyaWJ1dGlvbi5cbiAqXG4gKi9cdFxuLy9KUyBIaW50IGxpbnRlciBkaXJlY3RpdmVzXG4vKmpzaGludCAtVzA2OSAqLyAvL3N1cHByZXNzZXMgd2FybmluZyBhYm91dCB1c2luZyB4LnZhcl9uYW1lIHZzIHhbXCJ2YXJfbmFtZVwiXVxuXG4gLy91c2FnZSBpbiBicm93c2VyXG4vLzxzY3JpcHQgdHlwZT1cInRleHQvamF2YXNjcmlwdFwiIHNyYz1cIi4vYml0d3JlbmNoLmpzXCI+PC9zY3JpcHQ+XG5cbi8vdXNhZ2UgaW4gbm9kZWpzXG4vL3ZhciBidyA9IHJlcXVpcmUoJy4vYml0d3JlbmNoLmpzJyk7ICAvL2FkZHMgdG8gY3VycmVudCBzY29wZSBpbiBub2RlanNcblxuIC8vIG9wdGlvbmFsIHBvbHlmaWxsIGZvciBJRTggYW5kIGVhcmxpZXJcbiBcInVzZSBzdHJpY3RcIjtcbiAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyBcbihmdW5jdGlvbihmbil7IC8vIHRoaXMgaXMgYSBwb2x5ZmlsbCBmb3IgSUU3L0lFOFxuICAgIC8qXG4gICAgLy9ub2RlLnRleHRDb250ZW50XG4gICAgLy8gU291cmNlOiBFbGkgR3JleSBAIGh0dHBzOi8vZWxpZ3JleS5jb20vYmxvZy9wb3N0L3RleHRjb250ZW50LWluLWllOFxuICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkgXG4gICAgICAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIFxuICAgICAgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihFbGVtZW50LnByb3RvdHlwZSwgXCJ0ZXh0Q29udGVudFwiKSBcbiAgICAgICYmICFPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEVsZW1lbnQucHJvdG90eXBlLCBcInRleHRDb250ZW50XCIpLmdldCkge1xuICAgICAgKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgaW5uZXJUZXh0ID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihFbGVtZW50LnByb3RvdHlwZSwgXCJpbm5lclRleHRcIik7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFbGVtZW50LnByb3RvdHlwZSwgXCJ0ZXh0Q29udGVudFwiLFxuICAgICAgICAgLy8gUGFzc2luZyBpbm5lclRleHQgb3IgaW5uZXJUZXh0LmdldCBkaXJlY3RseSBkb2VzIG5vdCB3b3JrLFxuICAgICAgICAgLy8gd3JhcHBlciBmdW5jdGlvbiBpcyByZXF1aXJlZC5cbiAgICAgICAgIHtcbiAgICAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICByZXR1cm4gaW5uZXJUZXh0LmdldC5jYWxsKHRoaXMpO1xuICAgICAgICAgICB9LFxuICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKHMpIHtcbiAgICAgICAgICAgICByZXR1cm4gaW5uZXJUZXh0LnNldC5jYWxsKHRoaXMsIHMpO1xuICAgICAgICAgICB9XG4gICAgICAgICB9XG4gICAgICAgKTtcbiAgICAgIH0pKCk7XG4gICAgfVxuICAgICovXG4gICAgLy9BcnJheSBzdHVmZlxuICAgIGlmICghQXJyYXkucHJvdG90eXBlLmluZGV4T2YpIHtcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiAoc2VhcmNoRWxlbWVudCAgKSAgICB7XG4gICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcbiAgICAgICAgICAgIGlmICh0aGlzID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgdCA9IE9iamVjdCh0aGlzKTtcbiAgICAgICAgICAgIHZhciBsZW4gPSB0Lmxlbmd0aCA+Pj4gMDtcbiAgICAgICAgICAgIGlmIChsZW4gPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgbiA9IDA7XG4gICAgICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBuID0gTnVtYmVyKGFyZ3VtZW50c1sxXSk7XG4gICAgICAgICAgICAgICAgaWYgKG4gIT0gbikgeyAvLyBzaG9ydGN1dCBmb3IgdmVyaWZ5aW5nIGlmIGl0J3MgTmFOXG4gICAgICAgICAgICAgICAgICAgIG4gPSAwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobiAhPSAwICYmIG4gIT0gSW5maW5pdHkgJiYgbiAhPSAtSW5maW5pdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgbiA9IChuID4gMCB8fCAtMSkgKiBNYXRoLmZsb29yKE1hdGguYWJzKG4pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobiA+PSBsZW4pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgayA9IG4gPj0gMCA/IG4gOiBNYXRoLm1heChsZW4gLSBNYXRoLmFicyhuKSwgMCk7XG4gICAgICAgICAgICBmb3IgKDsgayA8IGxlbjsgaysrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGsgaW4gdCAmJiB0W2tdID09PSBzZWFyY2hFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKCFmbi5tYXApIGZuLm1hcD1mdW5jdGlvbihmKXt2YXIgcj1bXTtmb3IodmFyIGk9MDtpPHRoaXMubGVuZ3RoO2krKylyLnB1c2goZih0aGlzW2ldKSk7cmV0dXJuIHI7fTtcbiAgICBpZiAoIWZuLmZpbHRlcikgZm4uZmlsdGVyPWZ1bmN0aW9uKGYpe3ZhciByPVtdO2Zvcih2YXIgaT0wO2k8dGhpcy5sZW5ndGg7aSsrKWlmKGYodGhpc1tpXSkpci5wdXNoKHRoaXNbaV0pO3JldHVybiByO307XG4gICAgaWYgKCFTdHJpbmcucHJvdG90eXBlLnRyaW0pIHtTdHJpbmcucHJvdG90eXBlLnRyaW0gPSBmdW5jdGlvbiAoKSB7ICByZXR1cm4gdGhpcy5yZXBsYWNlKC9eW1xcc1xcdUZFRkZcXHhBMF0rfFtcXHNcXHVGRUZGXFx4QTBdKyQvZywgXCJcIik7IH07fVxuXG59KShBcnJheS5wcm90b3R5cGUpOyAvLyBlbmQgcG9seWZpbGxzXG4vLyAqIC9cblxuKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiAgICAgICAgLy8gQU1ELiBSZWdpc3RlciBhcyBhbiBhbm9ueW1vdXMgbW9kdWxlLlxuICAgICAgICAvL2RlZmluZShbJ215UmVxdWlyZWREZXBlbmRhbmN5TW9kdWxlJ10sIGZhY3RvcnkpOyAvLyB1c2UgdGhpcyBpZiBvdGhlciBtb2R1bGVzIHJlcXVpcmVkXG4gICAgICAgIGRlZmluZShbXSwgZmFjdG9yeSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgaWYgKCh0eXBlb2YgbW9kdWxlICE9PSBcIm9iamVjdFwiICkgfHwgKHR5cGVvZiBtb2R1bGUgIT09IFwiZnVuY3Rpb25cIikgKSAvLyB0aGlzIGhhY2sgcmVxdWlyZWQgZm9yIG9sZGVyIHZlcnNpb25zIG9mIG5vZGVcbiAgICAgICAgICAgIC8vIHZhciBtID1yZXF1aXJlKFwibW9kdWxlXCIpO1xuICAgICAgICAgICAgLy8gTm9kZS4gRG9lcyBub3Qgd29yayB3aXRoIHN0cmljdCBDb21tb25KUywgYnV0XG4gICAgICAgICAgICAvLyBvbmx5IENvbW1vbkpTLWxpa2UgZW52aXJvbm1lbnRzIHRoYXQgc3VwcG9ydCBtb2R1bGUuZXhwb3J0cyxcbiAgICAgICAgICAgIC8vIGxpa2UgTm9kZS5cbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJub2RlLi4uXCIpO1xuICAgICAgICAgICAgdmFyIGxpYm09IGZhY3RvcnkoKTtcbiAgICAgICAgICAgIGxpYm0uZXhwb3J0TW9kdWxlVHlwZSA9IFwibW9kdWxlLmV4cG9ydHNcIjtcbiAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzPWxpYm07XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICAvL2NvbnNvbGUubG9nKFwiYnJvd3Nlci4uXCIscm9vdCwgdHlwZW9mIHJvb3QpO1xuICAgICAgICAvLyBCcm93c2VyIGdsb2JhbHMgKHJvb3QgaXMgd2luZG93KVxuICAgICAgICB2YXIgbGliZyA9IGZhY3RvcnkoKTtcbiAgICAgICAgbGliZy5leHBvcnRNb2R1bGVUeXBlPVwiZ2xvYmFsXCI7IFxuICAgICAgICByb290W2xpYmdbXCJleHBvcnROYW1lXCJdXSA9IGxpYmc7XG5cbiAgICB9XG59KHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IHRoaXMsIGZ1bmN0aW9uICgpIHsgLy8gbm90ZSBpZiBuZWVkaW5nIHJlcXVpcmVtZW50cyB1c2UgLi4uICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiB0aGlzLCBmdW5jdGlvbiAobXlSZXF1aXJlZERlcGVuZGFuY3lNb2R1bGUpIFxuXCJ1c2Ugc3RyaWN0XCI7XG4gICAgLy8gVXNlIGIgaW4gc29tZSBmYXNoaW9uLlxuXG4gICAgLy8gSnVzdCByZXR1cm4gYSB2YWx1ZSB0byBkZWZpbmUgdGhlIG1vZHVsZSBleHBvcnQuXG4gICAgLy8gVGhpcyBleGFtcGxlIHJldHVybnMgYW4gb2JqZWN0LCBidXQgdGhlIG1vZHVsZVxuICAgIC8vIGNhbiByZXR1cm4gYSBmdW5jdGlvbiBhcyB0aGUgZXhwb3J0ZWQgdmFsdWUuXG4gICAgdmFyIGJ3ID0ge307XG4gICAgYncuZXhwb3J0TmFtZSA9IFwiYndcIjsgLy8gXG4gICAgYncuZXhwb3J0TW9kdWxlVHlwZSA9IFwiQU1EXCI7IC8vZGVmYXVsdCBleHBvcnQgc2VlIFVNRCB3cmFwcGVyIGFib3ZlIGZvciBtb3JlIGluZm8gdGhpcy4gIGl0IGFsbG93cyB0aGUgY29uc3VtZXIgdG8ga25vdyBob3cgdGhpcyB3YXMgbG9hZGVkLlxuXG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5idy5jaG9pY2UgICAgPSBmdW5jdGlvbiAoeCxjaG9pY2VzLGRlZikgeyBcbi8qKiBcbmJ3LmNob2ljZSh4LGNob2ljZXMtZGljdGlvbmFyeSwgZGVmYXVsdCkgXG5cblxuQWxsb3dzIGEgZGljdGlvbmFyeSB0byBiZSB1c2VkIGFzIGEgc3dpdGNoIHN0YXRlbWVudCwgaW5jbHVkaW5nIGZ1bmN0aW9ucy5cblxuZXhhbXBsZTpcbiAgICBjb2xvcnMgPSB7XCJyZWRcIjogMSwgXCJibHVlXCI6IDIsIFwiYXF1YVwiIDogZnVuY3Rpb24oeil7cmV0dXJuIHorXCJtYXJpbmVcIn19O1xuICAgIGJ3LmNob2ljZShcInJlZFwiLGNvbG9ycyxcIjBcIikgICA9PT4gXCIxXCJcbiAgICBidy5jaG9pY2UoXCJzaGlueVwiLGNvbG9ycyxcIjBcIikgPT0+IFwiMFwiXG4gICAgYncuY2hvaWNlKFwiYXF1YVwiLGNvbG9ycykgICAgICA9PT4gXCJhcXVhbWFyaW5lXCJcbiAqL1xuICAgIHZhciB6ID0gKHggaW4gY2hvaWNlcykgPyBjaG9pY2VzW3hdIDogZGVmO1xuICAgIHJldHVybiBfdG8oeikgPT0gXCJmdW5jdGlvblwiID8geih4KSA6IHo7ICBcbn07ICAgXG5cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbmJ3Lmpzb25DbG9uZSA9IGZ1bmN0aW9uICh4KSAgICAgICB7XG4vKiogXG5idy5qc29uQ2xvbmUob2JqZWN0KVxuXG5jcnVkZSBkZWVwIGNvcHkgYnkgdmFsdWUgb2YgYW4gb2JqZWN0IGFzIGxvbmcgYXMgbm8ganMgZGF0ZXMgb3IgZnVuY3Rpb25zXG4gKi9cbiAgICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh4KSk7XG59O1xuXG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5idy50eXBlT2YgICAgPSBmdW5jdGlvbiAoeCwgYmFzZVR5cGVPbmx5KSAgICAgICB7XG4vKiogXG5fdG8oeCwgYmFzZVR5cGVPbmx5KSByZXR1cm5zIGEgdXNlZnVsIHR5cGVPZiB0aGUgb2JqZWN0LlxuXG5fdG8oMikgLy8gXCJudW1iZXJcIlxuYncudHlwZW9mKCBmdW5jdGlvbigpe30pIC8vIFwiZnVuY3Rpb25cIlxuXG5mdW5jdGlvbiBDYXIobWFrZSwgbW9kZWwsIHllYXIpIHtcbiAgICB0aGlzLm1ha2UgPSBtYWtlO1xuICAgIHRoaXMubW9kZWwgPSBtb2RlbDtcbiAgICB0aGlzLnllYXIgPSB5ZWFyO1xufVxuXG54ID0gbmV3IENhcihcIkZvcmRcIiwgXCJFc2NhcGVcIiwgMjAwOSk7XG5cbl90byhDYXIpICAgICAgLy8gXCJmdW5jdGlvblwiXG5fdG8oeCkgICAgICAgIC8vIFwiQ2FyXCIgICAgICAgIC0tLT4gcmV0dXJucyBjb3JyZWN0IG9iamVjdCB0eXBlXG5fdG8oeCx0cnVlKSAgIC8vIFwib2JqZWN0XCIgICAgIC0tLT4gcmV0dXJucyBiYXNlIG9iamVjdCB0eXBlIFxuXG4gKi9cblxuLy9BIHVzZWFibGUgdHlwZW9mIG9wZXJhdG9yLiAgU2VlIHRoaXMgZmFudGFzdGljIHJlZmVyZW5jZSBmb3IgYSBzdGFydGVyIFxuLy9odHRwczovL2phdmFzY3JpcHR3ZWJsb2cud29yZHByZXNzLmNvbS8yMDExLzA4LzA4L2ZpeGluZy10aGUtamF2YXNjcmlwdC10eXBlb2Ytb3BlcmF0b3IvXG5cbiAgICBpZiAoeCA9PT0gbnVsbClcbiAgICAgICAgcmV0dXJuIFwibnVsbFwiO1xuXG4gICAgdmFyIHkgPSAodHlwZW9mIHggPT0gXCJ1bmRlZmluZWRcIikgPyBcInVuZGVmaW5lZFwiIDogKCh7IC8qZW1wdHkqL30pLnRvU3RyaW5nLmNhbGwoeCkubWF0Y2goL1xccyhbYS16QS1aXSspLylbMV0udG9Mb2NhbGVMb3dlckNhc2UoKSk7XG5cbiAgICBpZiAoKHkgIT0gXCJvYmplY3RcIikgJiYgKHkgIT0gXCJmdW5jdGlvblwiKSlcbiAgICAgICAgcmV0dXJuIHk7XG4gICAgaWYgKGJhc2VUeXBlT25seSA9PSB0cnVlKSAvLyBzbyBpZiB1bmRlZmluZCBvciBhbnl0aGluZyBidXQgdHJ1ZVxuICAgICAgIHJldHVybiB5OyBcblxuICAgIHZhciByID0geTtcbiAgICB0cnkge1xuICAgICAgICByID0gICh4LmNvbnN0cnVjdG9yLm5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKSA9PSB5LnRvTG9jYWxlTG93ZXJDYXNlKCkpID8gIHkgOiB4LmNvbnN0cnVjdG9yLm5hbWU7ICAvLyByZXR1cm4gb2JqZWN0J3MgbmFtZSBlLmcuXG4gICAgfVxuICAgIGNhdGNoIChlKSB7LyplbXB0eSovfVxuICAgIHJldHVybiByO1xufTtcblxudmFyIF90byA9IGJ3LnR5cGVPZjtcbmJ3LnRvICAgPSBfdG87XG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBpbnRlcm5hbGx5IHVzZWQgdHlwZSBjaGVjayBhbmQgYXNzaWduIGZ1bmN0aW9uXG5idy50eXBlQXNzaWduID0gZnVuY3Rpb24gKGEsIHR5cGVTdHJpbmcsIHRydWVWYWx1ZSwgZmFsc2VWYWx1ZSkge1xuLyoqIFxuYncudHlwZUFzc2lnbih2YXJpYWJsZSwgdHlwZVN0cmluZywgdHJ1ZVZhbHVlLCBmYWxzZVZhbHVlKSBcbnR5cGVBc3NpZ24gaXMgdXNlZCB0byBzZWUgaWYgdGhlIGFyZ3VtZW50IGEgaXMgb2YgdHlwZSB0eXBlU3RyaW5nIGFzIGRlZmluZWQgYnkgX3RvKCkuXG5pZiBpdCBpcyB0aGVuIHRydWVWYWx1ZSBpcyByZXR1cm5lZCBlbHNlIGZhbHNlVmFsdWUuXG5cbmJ3LnR5cGVBc3NpZ24oXCIyM1wiLFwibnVtYmVyXCIsXCJpcyBhIG51bWJlciFcIiwgXCJub3QgYSBudW1iZXIhXCIpID09PiBcImlzIGEgbnVtYmVyIVwiXG5idy50eXBlQXNzaWduKFsyM10sXCJudW1iZXJcIixcImlzIGEgbnVtYmVyIVwiLCBcIm5vdCBhIG51bWJlciFcIikgPT0+IFwibm90IGEgbnVtYmVyIVwiIC8vIGlzIGFuIGFycmF5IG9mIGxlbmd0aCAxXG5cbmNhbiBhbHNvIHN1cHBseSBsaXN0IG9mIHR5cGVzXG5idy50eXBlQXNzaWduKDIzLFtcInN0cmluZ1wiLFwibnVtYmVyXCJdLCBcInN0cmluZyBvciBudW1cIiwgXCJzb21ldGhpbmcgZWxzZVwiKSA9PT4gXCJzdHJpbmcgb3IgbnVtXCJcbmJ3LnR5cGVBc3NpZ24odHJ1ZSxbXCJzdHJpbmdcIixcIm51bWJlclwiXSwgXCJzdHJpbmcgb3IgbnVtXCIsIFwic29tZXRoaW5nIGVsc2VcIikgPT0+IFwic29tZXRoaW5nIGVsc2VcIlxuICovXG4gICAgaWYgKFtcInN0cmluZ1wiLFwiYXJyYXlcIl0uaW5kZXhPZihfdG8odHlwZVN0cmluZykpID09IC0xKSAvLyB0eXBlU3RyaW5nIG11c3QgYmUgYSBzdHJpbmcgb3IgYW4gYXJyYWcgb3Igc3RyaW5nc1xuICAgICAgICB0eXBlU3RyaW5nID0gXCJub3RWYWxpZFR5cGVcIjtcblxuICAgIGlmIChfdG8odHlwZVN0cmluZykgPT0gXCJzdHJpbmdcIilcbiAgICAgICAgdHlwZVN0cmluZyA9IFt0eXBlU3RyaW5nXTtcblxuICAgIHJldHVybiAodHlwZVN0cmluZy5pbmRleE9mKF90byhhKSkgPj0gMCkgPyB0cnVlVmFsdWUgOiBmYWxzZVZhbHVlO1xufTtcblxudmFyIF90b2EgPSBidy50eXBlQXNzaWduO1xuYncudG9hICAgPSBidy50eXBlQXNzaWduOyAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuXG5cbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIGludGVybmFsbHkgdXNlZCB0eXBlIGNoZWNrIGFuZCBhc3NpZ24gZnVuY3Rpb24gd2l0aCBmdW5jdGlvbmFsIHN1cHBvcnQgKHRydWVWYWx1ZSBvciBmYWxzZVZhbHVlIGNhbiBiZSBmdW5jdGlvbnMgd2hpY2ggYXJlIHBhc3NlZCB0aGUgcGFyYW0gYSlcblxuYncudHlwZUNvbnZlcnQgPSBmdW5jdGlvbiAoYSwgdHlwZVN0cmluZywgdHJ1ZVZhbHVlLCBmYWxzZVZhbHVlKSB7XG4vKipcbmJ3LnR5cGVDb252ZXJ0KHZhcmlhYmxlLCB0eXBlU3RyaW5nLCB0cnVlVmFsdWUsIGZhbHNlVmFsdWUpIFxudHlwZUNvbnZlcnQgaXMgdXNlZCB0byBzZWUgaWYgdGhlIGFyZ3VtZW50IGEgaXMgb2YgdHlwZSB0eXBlU3RyaW5nIGFzIGRlZmluZWQgYnkgX3RvKCkuXG5pZiBpdCBpcyB0aGVuIHRydWVWYWx1ZSBpcyByZXR1cm5lZCBlbHNlIGZhbHNlVmFsdWUuXG5cbmJ3LnR5cGVDb252ZXJ0KFwiMjNcIixcIm51bWJlclwiLFwiaXMgYSBudW1iZXIhXCIsIFwibm90IGEgbnVtYmVyIVwiKSA9PT4gXCJpcyBhIG51bWJlciFcIlxuYncudHlwZUNvbnZlcnQoWzIzXSxcIm51bWJlclwiLFwiaXMgYSBudW1iZXIhXCIsIFwibm90IGEgbnVtYmVyIVwiKSA9PT4gXCJub3QgYSBudW1iZXIhXCIgLy8gaXMgYW4gYXJyYXkgb2YgbGVuZ3RoIDFcblxuY2FuIGFsc28gc3VwcGx5IGxpc3Qgb2YgdHlwZXNcbmJ3LnR5cGVDb252ZXJ0KDIzLFtcInN0cmluZ1wiLFwibnVtYmVyXCJdLCBcInN0cmluZyBvciBudW1cIiwgXCJzb21ldGhpbmcgZWxzZVwiKSA9PT4gXCJzdHJpbmcgb3IgbnVtXCJcbmJ3LnR5cGVDb252ZXJ0KHRydWUsW1wic3RyaW5nXCIsXCJudW1iZXJcIl0sIFwic3RyaW5nIG9yIG51bVwiLCBcInNvbWV0aGluZyBlbHNlXCIpID09PiBcInNvbWV0aGluZyBlbHNlXCJcblxuYncudHlwZUNvbnZlcnQoMjMsW1wic3RyaW5nXCIsXCJudW1iZXJcIl0sZnVuY3Rpb24oeCl7cmV0dXJuIHgrMX0sZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oeCl7cmV0dXJuIHgrMn19KX0pID09PiAyNFxuXG5idy50eXBlQ29udmVydCgyMyxbXCJzdHJpbmdcIl0sZnVuY3Rpb24oeCl7cmV0dXJuIHgrMX0sZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oeCl7cmV0dXJuIHgrMjt9fSl9KSA9PT4gZnVuY3Rpb24oeCl7cmV0dXJuIHgrMjt9XG5cbmhvd2V2ZXIgdHlwZUNvbnZlcnQgYWxzbyBhbGxvd3MgZnVuY3Rpb25zIChhcyBhcHBvc2VkIHRvIHR5cGVBc3NpZ24pXG4qL1xuICAgIGlmIChbXCJzdHJpbmdcIixcImFycmF5XCJdLmluZGV4T2YoX3RvKHR5cGVTdHJpbmcpKSA9PSAtMSkgLy8gdHlwZVN0cmluZyBtdXN0IGJlIGEgc3RyaW5nIG9yIGFuIGFycmFnIG9yIHN0cmluZ3NcbiAgICAgICAgdHlwZVN0cmluZyA9IFwibm90VmFsaWRUeXBlXCI7XG5cbiAgICBpZiAoX3RvKHR5cGVTdHJpbmcpID09IFwic3RyaW5nXCIpXG4gICAgICAgIHR5cGVTdHJpbmcgPSBbdHlwZVN0cmluZ107XG4gICAgICBcbiAgICByZXR1cm4gKHR5cGVTdHJpbmcuaW5kZXhPZihfdG8oYSkpID49IDApID8gKF90byh0cnVlVmFsdWUpICA9PSBcImZ1bmN0aW9uXCIpID8gdHJ1ZVZhbHVlKGEpIDogdHJ1ZVZhbHVlIDogKCBfdG8oZmFsc2VWYWx1ZSkgPT0gXCJmdW5jdGlvblwiKSA/IGZhbHNlVmFsdWUoYSk6IGZhbHNlVmFsdWU7XG59O1xuLy92YXIgICBfdGMgPSBidy50eXBlQ29udmVydDtcbmJ3LnRjID0gYncudHlwZUNvbnZlcnQ7XG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBpbnRlcm5hbGx5IHVzZWQgZnVuY3Rpb24gZm9yIG9wdGlvbnMgY29weVxuLy8ga2V5cyBpbiBvcHRzIGFyZSBjb3BpZWQgdG8gZG9wdHMgKG9yIG92ZXJ3cml0ZSBvcHRpb25zIGluIGRvcHRzKVxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gXG52YXIgb3B0c0NvcHkgPSAgZnVuY3Rpb24oZG9wdHMsb3B0cykge1xuICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyBcbiAgICBpZiAoKF90byhvcHRzKSA9PSBcIm9iamVjdFwiKSAmJiAoX3RvKGRvcHRzKT09XCJvYmplY3RcIikpIHtcbiAgICAgICAgdmFyIGk7XG4gICAgICAgIGZvciAoaSBpbiBvcHRzKVxuICAgICAgICAgICAgZG9wdHNbaV0gPSBvcHRzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gZG9wdHM7XG59O1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbmJ3LmFycmF5VW5pcSA9ICBmdW5jdGlvbiAoeCl7XG4vKiogXG4gICAgYXJyYXlVbmlxKHgpXG4gICAgcmV0dXJucyB1bmlxIGVsZW1lbnRzIG9mIHNpbXBsZSBhcnJheSB4LlxuKi8gICAgXG4gICAgaWYgKF90byh4KSAhPSBcImFycmF5XCIpXG4gICAgICAgIHJldHVybiBbXTtcbiAgICByZXR1cm4geC5maWx0ZXIgKGZ1bmN0aW9uICh2LCBpLCBhcnIpIHtyZXR1cm4gKGFyci5pbmRleE9mKHYpPT1pKTt9KTtcbn07XG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuYncuYXJyYXlCaW5BID0gZnVuY3Rpb24gKGEsYikge1xuLyoqIFxuICAgIGFycmF5QmluQSh4KVxuICAgIHJldHVybnMgaW50ZXJzZWN0aW9uIGVsZW1lbnRzIG9mIHRvIHNpbXBsZSBhcnJheXMgYSBhbmQgYlxuKi8gICAgICBcbiAgICBpZiAoKF90byhhKSE9XCJhcnJheVwiKSB8fCAoX3RvKGIpIT09IFwiYXJyYXlcIikpXG4gICAgICAgIHJldHVybiBbXTtcbiAgICByZXR1cm4gYncuYXJyYXlVbmlxKGEuZmlsdGVyKGZ1bmN0aW9uKG4pIHsgcmV0dXJuIGIuaW5kZXhPZihuKSAhPT0gLTE7fSkpO1xufTtcblxuYncuYXJyYXlCTm90SW5BID0gZnVuY3Rpb24gKGEsYikge1xuLyoqIFxuICAgIGFycmF5Qk5vdGluQSh4KVxuICAgIHJldHVybnMgIGVsZW1lbnRzIG9mIGIgbm90IHByZXNlbnQgaW4gYVxuKi8gICAgICBcbiAgICBpZiAoKF90byhhKSE9XCJhcnJheVwiKSB8fCAoX3RvKGIpIT09IFwiYXJyYXlcIikpXG4gICAgICAgIHJldHVybiBbXTtcbiAgICByZXR1cm4gYncuYXJyYXlVbmlxKGIuZmlsdGVyKGZ1bmN0aW9uKG4pIHsgcmV0dXJuIGEuaW5kZXhPZihuKSA8IDA7fSkpO1xufTtcblxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIFxuYncuRE9NSXNFbGVtZW50ID0gZnVuY3Rpb24oZWwpIHtcbi8qKlxuQG1ldGhvZCBidy5ET01Jc0VsZW1lbnQoKSAtIHJldHVybnMgd2hldGhlciBhIHN1cHBsaWVkIGVsZW1lbnQgaXMgYSBIVE1MIERPTSBlbGVtZW50LiBvbmx5IHVzZWZ1bCBpbiBicm93c2VyLFxuICovICAgIFxuICAgIHZhciByID0gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYoX3RvKGVsKT09IFwidW5kZWZpbmVkXCIpXG4gICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgaWYgKChidy5pc05vZGVKUygpID09IGZhbHNlKSB8fCAodHlwZW9mIEVsZW1lbnQgPT0gXCJmdW5jdGlvblwiKSlcbiAgICAgICAgICAgIHIgPSBlbCBpbnN0YW5jZW9mIEVsZW1lbnQ7ICBcblxuICAgIH0gXG4gICAgY2F0Y2goZSkge1xuICAgICAgICByID0gKHR5cGVvZiBIVE1MRWxlbWVudCA9PT0gXCJvYmplY3RcIiA/IGVsIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgOiAvL0RPTTJcbiAgICAgICAgICAgIGVsICYmICh0eXBlb2YgZWwgPT09IFwib2JqZWN0XCIpICYmIChlbCAhPT0gbnVsbCkgJiYgKGVsLm5vZGVUeXBlID09PSAxKSAmJiAodHlwZW9mIGVsLm5vZGVOYW1lPT09XCJzdHJpbmdcIilcbiAgICAgICAgKTtcbiAgICAgICAgYncubG9nZChlLnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICByZXR1cm4gcjtcbn07XG5cbnZhciBfaXNFbCA9IGJ3LkRPTUlzRWxlbWVudDtcblxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIFxuYncuRE9NR2V0RWxlbWVudHMgPSBmdW5jdGlvbiAoZWwsIHR5cGUpIHtcbi8qKlxuQG1ldGhvZCBET01HZXRFbGVtZW50cyhlbCwgdHlwZSkgcmV0dXJucyBhbiBhcnJheSBvZiBET00gZWxlbWVudHMgKGlmIHJ1bm5pbmcgaW4gYnJvd3NlcikgICBcblxuQHBhcmFtIHtzdHJpbmcgfCBET01fbm9kZX0gZWwgLSBpZiBzdHJpbmcgdXNlcyBDU1Mgc2VsZWN0b3Igb3RoZXIgd2lzZSBpZiBhbHJlYWR5IGEgRE9NIGVsZW1lbnQgcmV0dXJucyBpdHNlbGZcbkByZXR1cm4gYW4ganMgYXJyYXkgb2YgemVybyBvciBtb3JlIG1hdGNoaW5nIERPTSBub2Rlc1xuXG5ET01HZXRFbGVtZW50cyBhbHdheXMgbG9va3MgaW4gdGhlIHJvb3QuXG5cbiovXG5cbi8qXG5UT0RPOiBcbiB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiN0ZXN0XCIpO1xuIHZhciBtYXRjaGVzID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXCJkaXYuaGlnaGxpZ2h0ZWQgPiBwXCIpO1xuXG4qL1xuICAgIHZhciByPVtdLGE9W10saTtcbiAgICBcbiAgICBpZiAoYncuaXNOb2RlSlMoKSA9PSBmYWxzZSkgXG4gICAgeyAgLy8gd2UncmUgcnVubmluZyBpbiBhIGJyb3dzZXJcbiAgICAgICAgaWYgKF9pc0VsKGVsKSlcbiAgICAgICAgICAgIHJldHVybiBbZWxdOyAgXG4gICAgICAgIGlmIChfdG8oZWwpID09IFwic3RyaW5nXCIpIHsgLy8gbm93IGl0cyBhIHN0cmluZyBzbyB3ZSBoYXZlIGNob2ljZXMuLiBcbiAgICAgICAgICAgIHR5cGUgPSBfdG9hKHR5cGUsXCJzdHJpbmdcIix0eXBlLFwiYXV0b1wiKTsgLy8gYXV0byBtZWFucyBkZXRlY3Qgd2hldGhlciBoYXMgYSAjIG9yIC4gaW4gZnJvbnQgb2YgaXRcbiAgICAgICAgICAgIGVsLnRyaW0oKTtcbiAgICAgICAgICAgIGlmICh0eXBlID09IFwiYXV0b1wiKVxuICAgICAgICAgICAgICAgIHR5cGUgPSBidy5jaG9pY2UoZWxbMF0se1wiLlwiOlwiY2xhc3NOYW1lXCIsIFwiI1wiOlwiaWRcIn0sXCJ0YWdOYW1lXCIpO1xuICAgICAgICAgICAgdHlwZT10eXBlLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJpZFwiIDogLy9nZXQgRWxlbWVudCBieSBJRFxuICAgICAgICAgICAgICAgICAgICBlbCA9IChlbFswXT09XCIjXCIpID8gZWwuc3Vic3RyaW5nKDEsZWwubGVuZ3RoKSA6IGVsO1xuICAgICAgICAgICAgICAgICAgICBhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWwpO1xuICAgICAgICAgICAgICAgICAgICBhID0gX3RvYShhLFwibnVsbFwiLFtdLFthXSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJjbGFzc25hbWVcIjogLy8gZ2V0IEVsZW1lbnRzIGJ5IGNsYXNzIG5hbWVcbiAgICAgICAgICAgICAgICAgICAgZWwgPSAoZWxbMF09PVwiLlwiKSA/IGVsLnN1YnN0cmluZygxLGVsLmxlbmd0aCkgOiBlbDtcbiAgICAgICAgICAgICAgICAgICAgYSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoZWwpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwidGFnbmFtZVwiIDogLy8gZ2V0IEVsZW1lbnRzIGJ5IHRhZyBuYW1lXG4gICAgICAgICAgICAgICAgICAgIGEgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShlbCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJuYW1lXCI6XG4gICAgICAgICAgICAgICAgICAgIGEgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShlbCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJjc3NcIiA6XG4gICAgICAgICAgICAgICAgICAgIGEgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGVsKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDogIFxuICAgICAgICAgICAgICAgICAgICBhID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChlbCk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoaSBpbiBhKVxuICAgICAgICAgICAgICAgIHIucHVzaChhW2ldKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByLmZpbHRlcihmdW5jdGlvbih4KXtyZXR1cm4gX2lzRWwoeCk7fSk7XG59O1xuLy92YXIgX2VscyA9IGJ3LkRPTUdldEVsZW1lbnRzO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyBcbmJ3LkRPTVNldEVsZW1lbnRzID0gZnVuY3Rpb24oZG9tRWxlbWVudCxwYXJhbSkge1xuLyoqXG5AbWV0aG9kIERPTVNldEVsZW1lbnRzKGRvbUVsZW1lbnQsIHBhcmFtKSBzZXRzIERPTSBlbGVtZW50cyB3aXRoIHRoZSBzdXBwbGllZCAob3B0aW9uYWwpIHBhcmFtcyBcblxuQHBhcmFtIHtzdHJpbmcgfCBhcnJheSB8IGRpY3QgfGZ1bmN0aW9ufSAtIHBhcmFtcyB0byBzZXQgb24gRE9NRWxlbWVudHNcbkByZXR1cm4gYW4ganMgYXJyYXkgb2YgemVybyBvciBtb3JlIG1hdGNoaW5nIERPTSBub2Rlc1xuKi9cblxuICAgIHZhciBlbHMgPSBidy5ET01HZXRFbGVtZW50cyhkb21FbGVtZW50KTtcbiAgICBpZiAoZWxzPT1bXSlcbiAgICAgICAgYncubG9nKFwiZG9tIGVsZW1lbnQgbm90IGZvdW5kXCIpO1xuXG4gICAgdmFyIGksbCxlLCBlZiA9IGZ1bmN0aW9uKHgscCl7YncubG9nKHgscCk7fTtcbiAgICBmb3IgKGw9MDsgbDxlbHMubGVuZ3RoOyBsKyspIHtcbiAgICAgICAgZSA9IGVsc1tsXTtcbiAgICAgICAgc3dpdGNoKF90byhwYXJhbSkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJhcnJheVwiOlxuICAgICAgICAgICAgICAgIHRyeXtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChpPTA7IGk8cGFyYW0ubGVuZ3RoOyBpKyspIGVbcGFyYW1baV1bMF1dID0gcGFyYW1baV1bMV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoKGQpIHtlZihkLHBhcmFtKTt9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChpIGluIHBhcmFtKSAgZVtpXSA9IHBhcmFtW2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaChkKSB7ZWYoZCxwYXJhbSk7fVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGUuaW5uZXJIVE1MID0gcGFyYW07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoKGQpIHtlZihkLHBhcmFtKTt9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBwYXJhbShlKTsgLy8gYXBwbHkgYSBmdW5jdGlvbiB0byBlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoKGQpIHtlZihkLHBhcmFtKTt9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OiBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBlbHM7XG59O1xuXG5idy5ET00gPSBidy5ET01TZXRFbGVtZW50czsgLy9zaG9ydCBoYW5kXG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLyoqIFxuYml0d3JlbmNoOiBjb2xvciBmdW5jdGlvbnMgKHVzZWQgZm9yIHRoZW1pbmcgYW5kIGludGVycG9sYXRpb25zKVxuXG5iaXR3cmVuY2ggY29sb3IgZnVuY3RvbnMgb3BlcmF0ZSB1c2luZyB0aGlzIGludGVybmFsIGNvbG9yIHJlcHJlc2VudGF0aW9uIG1vZGVsOlxuW2MwLCBjMSwgYzIsIGFscGhhLCBtb2RlbF0gIFxud2hlcmUgYzAsIGMxLCBjMiBhcmUgbW9kZWwgZGVwZW5kYW50XG5hbHBoYSByZXByZXNlbnRzIHRoZSB0cmFuc3BlcmFuY3lcbm1vZGVsIGlzIGEgY29sb3IgbW9kZWwgc3RyaW5nIChsb3dlcmNhc2UpIFwicmdiXCIsIG9yIFwiaHNsXCIgKGNvbXBhdGlibGUgd2l0aCBIVE1ML0NTUyBjb2xvcnMpXG5cbmNvbG9yUGFyc2UoKSA9PT4gdGFrZSBhbiBpbnB1dCBjb2xvciBvZiBhbnltb2RlbCBhbmQgb3V0cHV0IGEgYncgW2MwLGMxLGMyLGEsbV0gYXJyYXlcbiovXG5idy5jb2xvckludGVycCA9IGZ1bmN0aW9uKHgsIGluMCwgaW4xLCBjb2xvcnMsIHN0cmV0Y2gpIHtcbi8qKlxuQG1ldGhvZCBjb2xvckludGVycCAoeCwgbG8sIGhpLCBjb2xvcnNbXSwgc3RyZXRjaCkgLSBpbnRlcnBvbGF0ZSBiZXR3ZWVuIGFuZCBhcnJheSBvZiBjb2xvcnMuICBcbiAgICB4IGlzIGEgbnVtYmVyIGJldHdlZW4gdGhlIG51bWJlcnMgaW4wIDw9IHggPD0gIGluMVxuICAgIGNvbG9ycyBpcyBhbiBhcnJheSBvZiBjb2xvcnMgc3VwcGxpZWQgaW4gcmdiIGZvcm1hdCBlLmcuIFtcIiMxMjNcIiwgXCIjMjM0XCJdXG4gICAgY29sb3JzIGNhbiBiZSBhbnlsZW5ndGggXG4qL1xuICAgIHZhciBjID0gX3RvYShjb2xvcnMsXCJhcnJheVwiLGNvbG9ycyxbXCIjMDAwXCIsXCIjZmZmXCJdKTsgLy8gbWFrZSBzdXJlIHdlIGhhdmUgYW4gYXJyYXkgb2YgY29sb3JzXG4gICAgYyA9IGMubGVuZ3RoID09IDAgPyBbXCIjMDAwXCIsXCIjZmZmXCJdIDogYzsgLy8gbm8gY29sb3JzIHByb3ZpZGUgLi4gaW50ZXJwIGdyYXlzY2FsZSBpcyBkZWZhdWx0XG4gICAgaWYgKGMubGVuZ3RoID09IDEpXG4gICAgICAgIHJldHVybiBjWzBdO1xuICAgIC8vb2sgbm93IHdlIHdlIGhhdmUgYW4gYXJyYXkgb2YgYXRsZWFzdCBsZW5ndGggMiB3aGljaCBob3BlZnVsbHkgY29udGFpbnMgY29sb3JzLlxuICAgIGMgPSBjLm1hcChmdW5jdGlvbih4KXtyZXR1cm4gYncuY29sb3JQYXJzZSh4KTt9KTsgLy8gYWxsIGNvbG9ycyB3aWxsIG5vdyBiZSBjb252ZXJ0ZWQgdG8gYncgUkdCIGZvcm1hdFxuICAgIHZhciBhID0gYncubWFwU2NhbGUoeCxpbjAsaW4xLDAsYy5sZW5ndGgtMSx7Y2xpcDogdHJ1ZSwgZXhwU2NhbGU6IHN0cmV0Y2h9KTtcbiAgICB2YXIgaSA9IGJ3LmNsaXAoTWF0aC5mbG9vcihhKSwwLGMubGVuZ3RoLTIpO1xuICAgIHZhciByID0gYS1pO1xuICAgIHZhciBfZiA9IGZ1bmN0aW9uKHgpICB7cmV0dXJuIGJ3Lm1hcFNjYWxlKHIsMCwxLCBjW2ldW3hdLGNbaSsxXVt4XSx7Y2xpcDp0cnVlfSk7fTtcbiAgICByZXR1cm4gW19mKDApLCBfZigxKSwgX2YoMiksX2YoMyksXCJyZ2JcIl07XG5cbn07XG5cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5idy5jb2xvckhzbFRvUmdiID0gZnVuY3Rpb24gKGgsIHMsIGwsIGEsIHJuZCl7XG4vKipcbkBtZXRob2QgY29sb3JIc2xUb1JnYlxuQ29udmVydHMgYW4gSFNMIGNvbG9yIHZhbHVlIHRvIFJHQi4gQ29udmVyc2lvbiBmb3JtdWxhXG5cbkFzc3VtZXMgaCBpcyBbMC4uMzYwXSAsICBzLCBhbmQgbCBhcmUgY29udGFpbmVkIGluIHRoZSBzZXQgWzAgLi4gMTAwXS5cbnJldHVybnMgciwgZywgYW5kIGIgaW4gdGhlIHNldCBbMCwgMjU1XS5cblxuQHBhcmFtICAge251bWJlcn0gIGggICAgICAgVGhlIGh1ZSBbMC4uMzYwXVxuQHBhcmFtICAge251bWJlcn0gIHMgICAgICAgVGhlIHNhdHVyYXRpb24gWzAuLjEwMF1cbkBwYXJhbSAgIHtudW1iZXJ9ICBsICAgICAgIFRoZSBsaWdodG5lc3MgWzAuLjEwMF1cblxuT1IuLi5cblxucGFzcyB0aGUgY29sb3JzIGFzIGEgYml0d3JlbmNoIGNvbG9yIGFycmF5IGFzIGEgc2luZ2xlIHBhcmFtZXRlcjpcblxuY29sb3JIc2xUb1JnYihbaCxzLGwsYSxcImhzbFwiXSlcblxuQHJldHVybiAge0FycmF5fSAgICAgICAgICAgVGhlIFJHQiByZXByZXNlbnRhdGlvbiBhcyBbciwgZywgYiwgYWxwaGEsIFwicmdiXCJdXG5cbmxhc3QgcGFyYW1ldGVyIHJuZCByb3VuZHMgdGhlIHJlc3VsdHMgdG8gMC4uMjU1LiAgc2V0IHRvIGZhbHNlIHRvIGVsaW1pbmF0ZSByb3VuZGluZy4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgY2hhaW5lZCBjYWxjc1xuXG5zZWUgOiBhZGFwdGVkIGZyb20gIGh0dHA6Ly9oc2wycmdiLm5pY2hhYmkuY29tL2phdmFzY3JpcHQtZnVuY3Rpb24ucGhwIFxuXG4gKi8gICAgXG4gICAgaWYgKF90byhoKT09XCJhcnJheVwiKSB7IC8vIGhhbmRsZXMgY29sb3JzIG9mIFtoLHMsbCxhLFwiaHNsXCJdXG4gICAgICAgIHM9aFsxXTtcbiAgICAgICAgbD1oWzJdO1xuICAgICAgICBhPWhbM107XG4gICAgICAgIGg9aFswXTsgLy9kbyB0aGlzIGxhc3Qgc28gaXQgZG9lc24ndCBvdmVyd3JpdGUgaXNlbGZcbiAgICB9XG4gICAgdmFyIF9mbiA9IHJuZCA9PSBmYWxzZSA/IGZ1bmN0aW9uKHgpe3JldHVybiB4O30gOiBmdW5jdGlvbih4KXtyZXR1cm4gYncuY2xpcChNYXRoLnJvdW5kKHgpLDAsMjU1KTt9IDtcbiAgIFxuICAgIHZhciByLGcsYixjLHgsbTtcbiAgICBoID0gKGgrMzYwKSUzNjA7XG4gICAgaCAvPSA2MDtcbiAgICBpZiAoaCA8IDApIGggPSA2IC0gKC1oICUgNik7XG4gICAgaCAlPSA2O1xuXG4gICAgcyA9IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIHMgLyAxMDApKTtcbiAgICBsID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgbCAvIDEwMCkpO1xuXG4gICAgYyA9ICgxIC0gTWF0aC5hYnMoKDIgKiBsKSAtIDEpKSAqIHM7XG4gICAgeCA9IGMgKiAoMSAtIE1hdGguYWJzKChoICUgMikgLSAxKSk7XG5cbiAgICBpZiAoaCA8IDEpIHtcbiAgICAgICAgciA9IGM7ICAgICBnID0geDsgICAgIGIgPSAwO1xuICAgIH0gZWxzZSBpZiAoaCA8IDIpIHtcbiAgICAgICAgciA9IHg7ICAgZyA9IGM7ICBiID0gMDtcbiAgICB9IGVsc2UgaWYgKGggPCAzKSB7XG4gICAgICAgIHIgPSAwOyBnID0gYzsgICAgYiA9IHg7XG4gICAgfSBlbHNlIGlmIChoIDwgNCkge1xuICAgICAgICByID0gMDsgICBnID0geDsgIGIgPSBjO1xuICAgIH0gZWxzZSBpZiAoaCA8IDUpIHtcbiAgICAgICAgciA9IHg7ICAgZyA9IDA7ICBiID0gYztcbiAgICB9IGVsc2Uge1xuICAgICAgICByID0gYzsgICBnID0gMDsgIGIgPSB4O1xuICAgIH1cblxuICAgIG0gPSBsIC0gYyAvIDI7XG4gICAgciA9IChyICsgbSkgKiAyNTU7XG4gICAgZyA9IChnICsgbSkgKiAyNTU7XG4gICAgYiA9IChiICsgbSkgKiAyNTU7XG4gICAgcmV0dXJuIFtfZm4ociksX2ZuKGcpLF9mbihiKSxhLFwicmdiXCJdO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5idy5jb2xvclJnYlRvSHNsID0gZnVuY3Rpb24gKHIsIGcsIGIsIGEsIHJuZCkge1xuLyoqXG5Db252ZXJ0cyBhbiBSR0IgY29sb3IgdmFsdWUgdG8gSFNMLiBDb252ZXJzaW9uIGZvcm11bGFcbmFkYXB0ZWQgZnJvbSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0hTTF9jb2xvcl9zcGFjZS5cbkFzc3VtZXMgciwgZywgYW5kIGIgYXJlIGNvbnRhaW5lZCBpbiB0aGUgc2V0IFswLCAyNTVdIGFuZFxucmV0dXJucyBoIGFzIFswLi4zNjBdIHMsIGFuZCBsIGluIHRoZSBzZXQgWzAgLi4gMTAwXS5cblxuQHBhcmFtICAge251bWJlcn0gIHIgICAgICAgVGhlIHJlZCBjb2xvciB2YWx1ZVxuQHBhcmFtICAge251bWJlcn0gIGcgICAgICAgVGhlIGdyZWVuIGNvbG9yIHZhbHVlXG5AcGFyYW0gICB7bnVtYmVyfSAgYiAgICAgICBUaGUgYmx1ZSBjb2xvciB2YWx1ZVxuXG5wYXNzIHRoZSBjb2xvcnMgYXMgYSBiaXR3cmVuY2ggY29sb3IgYXJyYXkgYXMgYSBzaW5nbGUgcGFyYW1ldGVyOlxuY29sb3JSZ2JUb0hzbChbaCxzLGwsYSxcInJnYlwiXSlcblxubGFzdCBwYXJhbWV0ZXIgcm5kIHJvdW5kcyB0aGUgcmVzdWx0cyB0byAwLi4yNTUuICBzZXQgdG8gZmFsc2UgdG8gZWxpbWluYXRlIHJvdW5kaW5nLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBjaGFpbmVkIGNhbGNzXG5AcmV0dXJuICB7QXJyYXl9ICAgICAgICAgICBUaGUgSFNMIHJlcHJlc2VudGF0aW9uXG4qL1xuICAgIGlmIChfdG8ocik9PVwiYXJyYXlcIikgeyAvLyBoYW5kbGVzIGNvbG9ycyBvZiBbaCxzLGwsYSxcImhzbFwiXVxuICAgICAgICBnPXJbMV07XG4gICAgICAgIGI9clsyXTtcbiAgICAgICAgYT1yWzNdO1xuICAgICAgICByPXJbMF07IC8vZG8gdGhpcyBsYXN0IHNvIGl0IGRvZXNuJ3Qgb3ZlcndyaXRlIGlzZWxmXG4gICAgfVxuXG4gICAgciAvPSAyNTUsIGcgLz0gMjU1LCBiIC89IDI1NTtcbiAgICB2YXIgbWF4ID0gTWF0aC5tYXgociwgZywgYiksIG1pbiA9IE1hdGgubWluKHIsIGcsIGIpO1xuICAgIHZhciBoLCBzLCBsID0gKG1heCArIG1pbikgLyAyO1xuXG4gICAgaWYobWF4ID09IG1pbil7XG4gICAgICAgIGggPSBzID0gMDsgLy8gYWNocm9tYXRpY1xuICAgIH1lbHNle1xuICAgICAgICB2YXIgZCA9IG1heCAtIG1pbjtcbiAgICAgICAgcyA9IGwgPiAwLjUgPyBkIC8gKDIgLSBtYXggLSBtaW4pIDogZCAvIChtYXggKyBtaW4pO1xuICAgICAgICBzd2l0Y2gobWF4KXtcbiAgICAgICAgICAgIGNhc2UgcjogaCA9IChnIC0gYikgLyBkICsgKGcgPCBiID8gNiA6IDApOyBicmVhaztcbiAgICAgICAgICAgIGNhc2UgZzogaCA9IChiIC0gcikgLyBkICsgMjsgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIGI6IGggPSAociAtIGcpIC8gZCArIDQ7IGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGggLz0gNjtcbiAgICB9XG4gICAgdmFyIF9mbiA9IHJuZCA9PSBmYWxzZSA/IGZ1bmN0aW9uICh4KXtyZXR1cm4geDt9IDogZnVuY3Rpb24oeCl7cmV0dXJuIE1hdGgucm91bmQoeCk7fSA7XG4gICAgcmV0dXJuIFtfZm4oaCozNjApLCBfZm4ocyoxMDApLCBfZm4obCoxMDApLCBhLCBcImhzbFwiXTtcbn07ICAgIFxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuYncuY29sb3JQYXJzZSA9IGZ1bmN0aW9uKHMsZGVmQWxwaGEpIHtcbi8qKlxuQG1ldGhvZCBidy5jb2xvclBhcnNlKHMpXG5cbkBkZXNjcmlwdGlvbiB0YWtlIGEgdmFsaWQgQ1NTIHN0eWxlIGNvbG9yIHN0cmluZzogI3JnYiB8ICNyZ2JhIHwgI3JyZ2diYiB8ICNycmdnYmJhYSB8IHJnYihyLGcsYikgfCByZ2IocixnLGIsYSkgfCBoc2woaCxzLGwpIHwgaHNsYShoLHMsbCxhICkgIFxuLi4uIGFuZCByZXR1cm4gYXJyYXkgW2MwLGMxLGMyLGEsbW9kZWxdIHdoZXJlIG1vZGVsIGlzIG9uZSBvZiBcInJnYlwiLCBcImhzbFwiXG4qL1xuICAgIGRlZkFscGhhID0gX3RvYShkZWZBbHBoYSxcIm51bWJlclwiLGRlZkFscGhhLDI1NSk7XG4gICAgdmFyIHIgPSBbMCwwLDAsZGVmQWxwaGEsXCJyZ2JcIl07IC8vIGFsd2F5cyByZXR1cm4gYSB2YWxpZCB0eXBlIFxuICAgIGlmIChfdG8ocyk9PVwiYXJyYXlcIil7IC8vIGl0IGNvdWxkIGJlIGEgYndjb2xvciB0eXBlIFtjMCxjMSxjMixhLG1vZGVsXVxuICAgICAgICB2YXIgcCxkZiA9IFswLDAsMCwyNTUsXCJyZ2JcIl07XG4gICAgICAgIGZvciAocD0wOyBwPCBzLmxlbmd0aDsgcCsrKVxuICAgICAgICAgICAgZGZbcF09c1twXTtcbiAgICAgICAgcz0gU3RyaW5nKGRmWzRdKStcIihcIitTdHJpbmcoZGZbMF0pK1wiLFwiK1N0cmluZyhkZlsxXSkrXCIsXCIrU3RyaW5nKGRmWzJdKStcIixcIitTdHJpbmcoZGZbM10pK1wiKVwiOyAvL2NvdWxkIHVzZSBzbGljZS4uam9pbihcIixcIikgICBcbiAgICB9XG5cbiAgICBzID0gU3RyaW5nKHMpLnJlcGxhY2UoL1xccy9nLFwiXCIpO1xuICAgIHZhciByZVQgPSAvXFxzKigjfGhzbHxyZ2J8eXV2fGhzdil7MX0oW2EtZnxBLUZ8MC05fCwoKS5cXHQgXSopL2ltZztcbiAgICB2YXIgaSxqPTAseCA9IHJlVC5leGVjKHMpO1xuICAgIGlmIChfdG8oeCk9PVwiYXJyYXlcIiAmJiAoeC5sZW5ndGggPj0gMykpIHtcbiAgICAgICAgcls0XT0geFsxXSA9PSBcIiNcIiA/IFwicmdiXCIgOiB4O1xuICAgICAgICBpZiAoeFsxXSA9PSAgXCIjXCIpIHsgIC8vcGFyc2Ugb25lIG9mIHRoZXNlICNyZ2IgI3JnYmEgI3JyZ2diYiAjcnJnZ2JiYWFcbiAgICAgICAgICAgIHN3aXRjaCAoeFsyXS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDM6IC8vI3JnYlxuICAgICAgICAgICAgICAgIGNhc2UgNDogLy8jcmdiYVxuICAgICAgICAgICAgICAgICAgICBmb3IgKGk9MDsgaTwgeFsyXS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICAgICAgICAgIHJbaV0gPSBwYXJzZUludCh4WzJdW2ldK3hbMl1baV0sMTYpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDY6IC8vI3JyZ2diYlxuICAgICAgICAgICAgICAgIGNhc2UgODogLy8jcnJnZ2JiYWFcbiAgICAgICAgICAgICAgICAgICAgZm9yIChpPTA7IGk8IHhbMl0ubGVuZ3RoOyBpKz0yKVxuICAgICAgICAgICAgICAgICAgICAgICAgcltqKytdID0gcGFyc2VJbnQoeFsyXVtpXSt4WzJdW2krMV0sMTYpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBidy5sb2dkKFwiYncucGFyc2VDb2xvciBiYWQgaW5wdXQgXCIrIHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgeyAvLyBpdHMgc2hvdWxkIGJlIG9mIGZvcm0gKGMwLGMxLGMyKSBvciAoYzAsYzEsYzIsYWxwaGEpXG4gICAgICAgICAgICByWzRdID0geFsxXS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgaWYgKCh4WzJdWzBdID09IFwiKFwiKSAmJiAoeFsyXVt4WzJdLmxlbmd0aC0xXSA9PSBcIilcIikpIHsgLy8gcGFyYW5zIGFyZSBwcmVzZW50XG4gICAgICAgICAgICAgICAgdmFyIHYgPSB4WzJdLnN1YnN0cmluZygxLHhbMl0ubGVuZ3RoLTEpO1xuICAgICAgICAgICAgICAgIHYgPSB2LnNwbGl0KFwiLFwiKTtcbiAgICAgICAgICAgICAgICBzd2l0Y2godi5sZW5ndGgpeyAvLyB2YWxpZCBlbnRyaWVzIGFyZSAzIG9yIDQgY29tcG9uZW50c1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaT0wOyBpPCB2Lmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJbaV0gPSBOdW1iZXIodltpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ3LmxvZ2QoXCJidy5wYXJzZUNvbG9yIGJhZCBpbnB1dCA6IFwiICsgcyk7ICAgIFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYncubG9nZChcImJ3LnBhcnNlQ29sb3IgYmFkIGlucHV0IDogXCIgKyBzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcjtcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuYncuY29sb3JUb1JHQkhleCA9IGZ1bmN0aW9uKGMsIGZvcm1hdCkge1xuLyoqXG5AbWV0aG9kIGJ3LmNvbG9yVG9SR0JIZXgoY29sb3IpIFxuQGRlc2NyaXB0aW9uIHRha2UgYSBjb2xvciBvZiB0aGUgZm9ybSBhIHN0cmluZyBvciAgW2MwLGMxLGMyLGFscGhhLG1vZGVsXSA9PT4gY29udmVydCB0byAjcnJnZ2JiYWEgZm9ybWF0XG5mb3JtYXQgKG9wdGlvbmFsKSBjYW4gYmUgc2V0IHRvIGF1dG8gaW4gd2hpY2ggY2FzZSBhbHBoYSBpcyBvbW1pdHRlZCBpZiBzZXQgdG8gMjU1XG4gKi9cbiAgICB2YXIgciA9IFwiIzAwMDAwMDAwXCI7XG4gICAgdmFyIHBoID0gZnVuY3Rpb24oeCl7dmFyIHk9KGJ3LmNsaXAoTWF0aC5yb3VuZCh4KSwwLDI1NSkpLnRvU3RyaW5nKDE2KTsgcmV0dXJuICh5Lmxlbmd0aD09MSk/XCIwXCIreTp5O307IC8vIHBhZCBoZXhcbiAgICBjID0gYncuY29sb3JQYXJzZShjKTsgLy8gY29udmVydHMgY29sb3IgdG8gYncgY29sb3IgdmVjdG9yIGZvcm1hdFxuICAgIHN3aXRjaChjWzRdKSB7XG4gICAgICAgIGNhc2UgXCJyZ2JcIjpcbiAgICAgICAgICAgIHIgPSBcIiNcIitwaChjWzBdKStwaChjWzFdKStwaChjWzJdKTtcbiAgICAgICAgICAgIGlmICghKChmb3JtYXQgPT0gXCJhdXRvXCIpICYmIChjWzNdPT0yNTUpKSlcbiAgICAgICAgICAgICAgICByICs9IHBoKGNbM10pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJoc2xcIjpcbiAgICAgICAgICAgIHI9IGJ3LmNvbG9yVG9SR0JIZXgoYncuY29sb3JIc2xUb1JnYihjKSk7IFxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBidy5sb2dkKFwiY29sb3JUb1JHQkhleCA6IHVuc3VwcG9ydGVkIGZvcm1hdFwiICsgY1s0XSk7XG4gICAgfVxuICAgIHJldHVybiByOyAvLyBkZWZhdWx0XG59O1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5idy5jb2xvckNvbnZlcnRDb2xvclNwYWNlID0gZnVuY3Rpb24oYywgc3BhY2UsIHJuZCkge1xuLyoqXG5AbWV0aG9kIGJ3LmNvbG9yQ29udmVydENvbG9yU3BhY2UoY29sb3IsIHNwYWNlVG9Db252ZXJ0VG8pIFxuQGRlc2NyaXB0aW9uIHRha2UgYSBjb2xvciBhbmQgY29udmVydCBpdCB0byB0aGUgZGVzdGluYXRpb24gY29sb3Igc3BhY2UgKFwicmdiXCIgfCBcImhzbFwiKVxuY29sb3IgY2FuIGJlIGFueSB2YWxpZCBjb2xvciB0eXBlIChcIiNhYmNcIiB8IFwiaHMoLi4uKVwiIG9yIFtyLGcsYixhLFwicmdiXCJdIGV0Yylcblxub3B0aW9uYWwgM3JkIHBhcmFtIHJuZCBpZiBzZXQgdG8gZmFsc2Ugd2lsbCBzdXBwcmVzcyByb3VuZGluZyBpbiBjYWxjcyB0byBhbGxvdyBjaGFpbmVkIGNvbG9yIGNvbnZlcnNpb24gdy9vIGxvc3Mgb2YgcHJlY2lzaW9uXG5cbiovXG4gICAgYyA9IGJ3LmNvbG9yUGFyc2UoYyk7IFxuICAgIGlmIChzcGFjZSA9PSBjWzRdKVxuICAgICAgICByZXR1cm4gYztcblxuICAgIHN3aXRjaChjWzRdKSB7XG4gICAgICAgIGNhc2UgXCJyZ2JcIjpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiaHNsXCI6XG4gICAgICAgICAgICBjID0gYncuY29sb3JIc2xUb1JnYihjWzBdLGNbMV0sY1syXSxjWzNdLHJuZCk7IC8vIHR1cm5zIG9mZiByb3VuZGluZ1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBidy5sb2dkKFwiY29sb3JDb252ZXJ0Q29sb3JTcGFjZTogdW5zdXBwb3J0ZWQgY29sb3IgZm9ybWF0XCIpO1xuICAgIH1cbiAgICAvL25vdyBjIGlzIGluIHRoZSByZ2Igc3BhY2VcblxuICAgIHN3aXRjaChzcGFjZSkge1xuICAgICAgICBjYXNlIFwicmdiXCI6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImhzbFwiOlxuICAgICAgICAgICAgYyA9IGJ3LmNvbG9yUmdiVG9Ic2woY1swXSxjWzFdLGNbMl0sY1szXSxybmQpOyAvLyB0dXJucyBvZmYgcm91bmRpbmdcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgYncubG9nZChcImNvbG9yQ29udmVydENvbG9yU3BhY2U6IHVuc3VwcG9ydGVkIGNvbG9yIGZvcm1hdFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIGM7ICBcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxudmFyIF9sb2dkYXRhPVtdO1xuXG5idy5sb2cgPSBmdW5jdGlvbiAodmFsdWUsbXNnLG9wdHMpIHtcbi8qKiBcbmJ3LmxvZyh2YWx1ZSwgbWVzc2FnZSwgb3B0aW9ucylcbndyaXRlIGEgdmFsdWUgdG8gdGhlIGluLW1lbW9yeSBsb2dcbm9wdGlvbnMge1xuICAgIGNsZWFyOiAgZmFsc2UgfCB0cnVlIHwgXCJjbGVhci1vbmx5XCIgIFxuICAgICAgICBmYWxzZSA6IG5vcm1hbCB3cml0ZSBcbiAgICAgICAgdHJ1ZSA6IGNsZWFyIGxvZyBhbmQgYWRkIDFzdCBlbnRyeVxuICAgICAgICBjbGVhci1vbmx5IC0gb25seSBjbGVhciBkb24ndCB3cml0ZSwgdmFsdWUsIG1zZyBcbiAgICBzYXZlTWV0aG9kOiBcInJhd1wiIHwgXCJKU09OXCIgIC8vIHJhdyBpcyBkZWZhdWx0LCBzYXZlIG9iamVjdCBhcyBwYXNzZWQsIEpTT04gc2F2ZXMgc3RyaW5naWZpZWQgdmVyc2lvbiAodXNlZnVsIGZvciBleHBvcnRpbmcgb3Igc2F2aW5nIHN0YXRlKVxufVxuICovXG4gICAgdmFyIGRvcHRzID0ge1xuICAgICAgICBjbGVhciAgICAgOiBmYWxzZSwgIC8vIHZhbHVlcyBmYWxlcywgdHJ1ZSwgXCJjbGVhci1vbmx5XCJcbiAgICAgICAgc2F2ZU1ldGhvZDogXCJyYXdcIiAvLyBlbHNlIFwiSlNPTlwiIFxuICAgIH07XG4gICAgXG4gICAgZG9wdHMgPSBvcHRzQ29weShkb3B0cyxvcHRzKTtcbiAgICBpZiAoKGRvcHRzW1wiY2xlYXJcIl0gPT0gdHJ1ZSkgfHwgKGRvcHRzW1wiY2xlYXJcIl0gPT0gXCJjbGVhci1vbmx5XCIpKSB7XG4gICAgICAgIF9sb2dkYXRhID0gW1tcIlRpbWUtc3RhbXAgKG1zKVwiLFwiIFZhbHVlIFwiLFwiIE1lc3NhZ2UgXCJdXTtcbiAgICAgICAgX2xvZ2RhdGEucHVzaCAoWzAsKG5ldyBEYXRlKCkpLmdldFRpbWUoKSxcIiBsb2cgc3RhcnRlZCAoYWJzb2x1dGUgdGltZXN0YW1wKVwiXSk7XG4gICAgfVxuXG4gICAgbXNnICAgICA9IF90b2EobXNnLFwidW5kZWZpbmVkXCIsXCJcIixTdHJpbmcobXNnKSk7XG4gICAgdmFsdWUgICA9IChkb3B0c1tcInNhdmVNZXRob2RcIl09PVwicmF3XCIpID8gdmFsdWUgOiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG5cbiAgICBpZiAoKF90byh2YWx1ZSkgIT0gXCJ1bmRlZmluZWRcIikgJiYgKGRvcHRzW1wiY2xlYXJcIl0gIT0gXCJjbGVhci1vbmx5XCIpKVxuICAgICAgICBfbG9nZGF0YS5wdXNoKFsobmV3IERhdGUoKSkuZ2V0VGltZSgpLV9sb2dkYXRhWzFdWzFdLCB2YWx1ZSwgbXNnXSk7XG5cbiAgICByZXR1cm4gX2xvZ2RhdGEubGVuZ3RoIC0xO1xufTtcbmJ3LmxvZyhcIlwiLFwiXCIse2NsZWFyOlwiY2xlYXItb25seVwifSk7IC8vIGluaXRpYWxpemUgXG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuYncubG9nZCA9IGZ1bmN0aW9uKCkge1xuLyoqXG5AbWV0aG9kIGJ3LmxvZ2QoKSBcbkBkZXNjcmlwdGlvbjogYncubG9nZCBpcyBhIGxvZyBmdW5jaXRvbiB3aGljaCBiZWhhdmVzIHNpbWlsYXIgdG8gY29uc29sZS5sb2coKSBob3dldmVyIGluc3RyZWFkIG9mIG91dHB1dHRpbmcgdG8gY29uc29sZSwgXG5pdCB3cml0ZXMgdG8gYncubG9nKCkgZnVuY3Rpb24gd2l0aCB0aGUgZm9sbG93aW5nIGRpZmZlcmVuY2VzOiBcblxuXG4qL1xuLypcbnRvZG86IGNvbW1hIHNlcGVyYXRlZCBpdGVtczsgID8gZG9uZVxuY29uc29sZSAgICAgPT0+IGFsc28gKGF0dGVtcHQpIHRvIG91dHB1dCB0byBjb25zb2xlLmxvZyA/IHdvdWxkIG5lZWQgdG8gc2V0IGEgYncuc3RhdGUgdmFyaWFibGUuLlxuYndkYmcgICAgICAgPT0+IGxvZyBidyBjYXRjaGVzIC8gZXJyb3JzIChlbHNlIHNpbGVudCkgXG5ub25lICAgICAgICA9PT4gbm8gb3V0cHV0IChvZiBhbnkga2luZClcbnN0cmluZ2lmeSAgID09PiB0YWtlcyBidy5sb2dkIGFyZ3MgYW5kIHN0cmluaWd5ZmllcyBiZWZvcmUgd3JpdGluZyB0byBidy5sb2dcbmV4YW1wbGU6XG5sb2dkPWNvbnNvbGUsYndsb2dkXG5cbiovXG4gICAgdmFyIGxvZ2RhcmdzID0gIChcImJ3bG9nZFwiIGluIGJ3LmJ3YXJncykgPyBidy5id2FyZ3NbXCJid2xvZ2RcIl0uc3BsaXQoXCIsXCIpIDogW107XG5cbiAgICBpZiAobG9nZGFyZ3MuaW5kZXhPZihcIm5vbmVcIikgPCAwKSB7XG4gICAgICAgIHZhciBpPTA7XG4gICAgICAgIHZhciBfYSA9IFtdO1xuICAgICAgICBmb3IgKGk9MDsgaTwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgX2EucHVzaChhcmd1bWVudHNbaV0pOyAvL2FyZ3VtZW50cywgYSByZXNlcnZlZCBqYXZhc2NyaXB0IGtleXdvcmQsIGlzIG5vdCBhIHRydWUgYXJyYXlcbiAgICAgICAgYncubG9nKF9hLFwiYncubG9nZDogXCIrYncuYndhcmdzW1wiYndsb2dkXCJdKTsgLy8gbWVzc2FnZVxuICAgIH1cbn07XG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbmJ3LmxvZ0V4cG9ydCA9IGZ1bmN0aW9uKG9wdHMpIHtcbi8qKiBcbmJ3LmxvZ0V4cG9ydChvcHRpb25zKSBcbmV4cG9ydCB0aGUgYnVpbHQgaW4gbG9nLlxuZGVmYXVsdCBpcyBcInJhd1wiIHdoaWNoIGlzIGFuIGFycmF5IG9mIHZhbHVlczpcblt0aW1lc3RhbXAsIDx2YWx1ZSBsb2dnZWQ+LCA8b3B0aW9uYWwgbWVzc2FnZSBmcm9tIHRoZSBldmVudD5dXG5bIC4uICwgLi4gLCAuLiBdXG5cbmFsc28gY2FuIGJlIGV4cG9ydGVkIGFzIGFuIEhUTUwgdGFibGUuXG5idy5sb2dFeHBvcnQoe1wiZm9ybWF0XCI6XCJIVE1MXCJ9KVxuXG5vciBhcyBhIHNpbXBsZSB0ZXh0IGZpbGU6XG5idy5sb2dFeHBvcnQoXCJmb3JtYXRcIiA6IFwidGV4dFwifSlcblxuc2VlIGJ3LnNhdmVDbGllbnRGaWxlKGZuYW1lKSBmb3Igc2F2aW5nIHRoZSBsb2cgYXMgYSBmaWxlXG4gKi9cbiAgICB2YXIgZG9wdHMgPSB7XG4gICAgICAgIFwiZm9ybWF0XCIgOiBcInJhd1wiICAvLyBjYW4gYWxzbyBiZSBIVE1MIHRhYmxlIGlmIHNldCB0byBcIkhUTUxcIlxuICAgIH07XG4gICAgZG9wdHMgPSBvcHRzQ29weShkb3B0cyxvcHRzKTtcblxuICAgIHZhciBfbGQgPSBfbG9nZGF0YTsgIFxuXG4gICAgaWYgKGRvcHRzW1wiZm9ybWF0XCJdID09IFwiSFRNTFwiKSB7XG4gICAgICAgIHJldHVybiBidy5tYWtlSFRNTFRhYmxlU3RyKF9sZCx7c29ydGFibGU6dHJ1ZX0pO1xuICAgIH1cblxuICAgIGlmIChkb3B0c1tcImZvcm1hdFwiXSA9PSBcInRleHRcIikge1xuICAgICAgICByZXR1cm4gX2xkLm1hcChmdW5jdGlvbih4KXtyZXR1cm4geC5tYXAoZnVuY3Rpb24oeSl7cmV0dXJuIGJ3LnBhZFN0cmluZyh5LnRvU3RyaW5nKCksMTYsXCJsZWZ0XCIpO30pLmpvaW4oXCJcXHRcIik7fSkuam9pbihcIlxcblwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gX2xkO1xufTtcblxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuYncuc2V0Q29va2llID0gZnVuY3Rpb24gKGNuYW1lLCBjdmFsdWUsIGV4ZGF5cykge1xuLyoqIFxuQG1ldGhvZCBidy5zZXRDb29raWUoY29va2llTmFtZSwgdmFsdWUsIGV4cGlyZURheXMpICBzZXQgYSBjbGllbnQgc2lkZSBjb29raWUuICAoYnJvd3NlciBvbmx5KVxuQHBhcmFtIGNuYW1lICA6IGEgc3RyaW5nIGZvciB0aGUgbmFtZSBvZiB0aGUgY29va2llXG5AcGFyYW0gY3ZhbHVlIDogYSBzdHJpbmcgZm9yIHRoZSB2YWx1ZSBvZiB0aGUgY29va2llXG5AcGFyYW0gZXhwZGF5cyA6IGNvb2tpZSBleHBpcmF0aW9uIGRhdGUgaW4gZGF5c1xuICAqL1xuICAgIHZhciBkID0gbmV3IERhdGUoKTtcbiAgICBkLnNldFRpbWUoZC5nZXRUaW1lKCkgKyAoZXhkYXlzKjI0KjYwKjYwKjEwMDApKTtcbiAgICB2YXIgZXhwaXJlcyA9IFwiZXhwaXJlcz1cIitkLnRvVVRDU3RyaW5nKCk7XG4gICAgZG9jdW1lbnQuY29va2llID0gY25hbWUgKyBcIj1cIiArIGN2YWx1ZSArIFwiOyBcIiArIGV4cGlyZXM7XG59O1xuIFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbmJ3LmdldENvb2tpZSA9IGZ1bmN0aW9uIChjbmFtZSwgZGVmYXVsdFZhbHVlKSB7XG4vKiogXG5AbWV0aG9kIGJ3LmdldENvb2tpZTogYncuZ2V0Q29va2llKGNvb2tpZU5hbWUsIGRlZmF1bHRWYWx1ZUlmTm90Rm91bmQpIChicm93c2VyIG9ubHkpXG5nZXQgYSBjbGllbnQgc2lkZSBjb29raWUsIGlmIGl0IGlzIHNldC4gIHJldHVybnMgZGVmYXVsdFZhbHVlIGlmIGNvb2tpZSBjb3VsZCBub3QgYmUgZm91bmRcbiAqL1xuICAgIHZhciBuYW1lID0gY25hbWUgKyBcIj1cIjtcbiAgICB2YXIgY2EgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoXCI7XCIpO1xuICAgIGZvcih2YXIgaT0wOyBpPGNhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjID0gY2FbaV07XG4gICAgICAgIHdoaWxlIChjLmNoYXJBdCgwKT09XCIgXCIpIGMgPSBjLnN1YnN0cmluZygxKTtcbiAgICAgICAgaWYgKGMuaW5kZXhPZihuYW1lKSA9PSAwKSByZXR1cm4gYy5zdWJzdHJpbmcobmFtZS5sZW5ndGgsIGMubGVuZ3RoKTtcbiAgICB9XG4gICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbn07XG5cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbmJ3LmdldFVSTFBhcmFtID0gZnVuY3Rpb24gKGtleSwgZGVmYXVsdFZhbHVlKSB7XG4vKiogXG5AbWV0aG9kIGJ3LmdldFVSTFBhcmFtKGtleSxkZWZhdWx0VmFsdWVJZk5vdEZvdW5kKVxucmVhZCB0aGUgVVJMIChlLmcuIGh0dHA6Ly9leGFtcGxlLmNvbS9teS9wYWdlP3RoaXM9dGhhdCZmb289MTIzJmJ1YiZ4PTEyMykgYW5kIHBhcnNlIHRoZSBVUkwgcGFyYWVtZXRlcnNcblxueCA9IGJ3LmdldFVSTFBhcmFtKCkgPT0+IHJldHVybnMgZW50aXJlIGRpY3Qgb2YgdXJsIHBhcmFtcyA9PT8ge3RoaXM6XCJ0aGF0XCIsZm9vOlwiMTIzXCIsYnViOnRydWUseDpcIjEyM1wifVxueCA9IGJ3LmdldFVSTFBhcmFtKFwiZm9vXCIsXCJ3aGF0ZXZlclwiKSA9PT4gcmV0dXJucyBcIjEyM1wiXG54ID0gYncuZ2V0VVJMUGFyYW0oXCJiYXJcIixcIndoYXRldmVyXCIpID09PiByZXR1cm5zIFwid2hhdGV2ZXJcIiBzaW5jZSBiYXIgaXNuJ3Qgc2V0IFxueCA9IGJ3LmdldFVSTFBhcmFtKFwiYnViXCIsXCJ3aGF0ZXZlclwiKSA9PT4gcmV0dXJucyB0cnVlICBzaW5jZSBidWIgZG9lc24ndCBoYXZlIGEgdmFsdWUgKG5vdGUgYm9vbGVhbiB0cnVlIG5vdCBcInRydWVcIilcblxuKi9cbiAgICBpZiAoKGJ3LmlzTm9kZUpTKCk9PSB0cnVlKSB8fCAodHlwZW9mIHdpbmRvdyAhPSBcIm9iamVjdFwiKSlcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICB0cnkge1xuICAgICAgICBpZiAod2luZG93LmxvY2F0aW9uLmhyZWYpIHtcbiAgICAgICAgICAgIHJldHVybiBidy5VUkxQYXJhbVBhcnNlKHdpbmRvdy5sb2NhdGlvbi5ocmVmLGtleSxkZWZhdWx0VmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGJ3LmxvZyhlKTtcbiAgICB9XG4gICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICBcbn07XG5idy5VUkxIYXNoID0gZnVuY3Rpb24gKHVybCxkZWZWYWx1ZSkge1xuLyoqXG5AbWV0aG9kIGJ3LlVSTEhhc2godXJsLGRlZlZhbHVlKSAtIHJldHVybnMgdGhlIGhhc2ggcG9ydGlvbiBvZiBhIFVSTCAoaWYgcHJlc2VudCkgZWxzZSByZXR1cm4gZGVmVmFsdWVcbiovXG4gICAgaWYgKF90byh1cmwpPT1cInVuZGVmaW5lZFwiKVxuICAgICAgICB1cmwgPSB0eXBlb2Ygd2luZG93ID09IFwib2JqZWN0XCIgPyB3aW5kb3cubG9jYXRpb24uaHJlZiA6IFwiXCI7XG5cbiAgICB2YXIgciA9IHVybC5zcGxpdCgvIysvKTtcbiAgICByZXR1cm4gdXJsLmluY2x1ZGVzKFwiI1wiKSA/IHJbci5sZW5ndGgtMV0gOiBkZWZWYWx1ZTtcbn07XG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbmJ3LlVSTFBhcmFtUGFyc2UgPSBmdW5jdGlvbiAodXJsLGtleSxkZWZWYWx1ZSxhbGxvd0hhc2gpIHtcbi8qKlxuXG5AbWV0aG9kIGJ3LlVSTFBhcmFtUGFyc2UodXJsU3RyaW5nLCBrZXksIGRlZmF1bHRWYWx1ZSkgXG5cbmRlY29kZSBhIFVSTCBlbmNvZGVkIHN0cmluZyBpbiB0byBhIGphdmFzY3JpcHQgZGljdGlvbmFyeS4gIE90aGVyIHBhcmFtcyAoaHR0cCwgcG9ydCwgcGF0aCkgYXJlIG5vdCBoYW5kbGVkXG5cbmlmIGtleSBpcyBwcmVzZW50IHRoYW4gb25seSB0aGF0IHZhbHVlIGlzIHJldHVybmVkIChhcyBhIHN0cmluZyApIGVsc2UgZGVmVmFsdWUgaXMgcmV0dXJuZWQuXG5cbmV4YW1wbGVzOlxueCA9IFVSTFBhcmFtUGFyc2UoXCJodHRwOi8vZXhhbXBsZS5jb20/YT0xMjMmYj0zNDVcIikgPT0+IHthOlwiMTIzXCIsIGI6XCI0NTZcIn1cbnggPSBVUkxQYXJhbVBhcnNlKFwiaHR0cDovL2V4YW1wbGUuY29tP2E9MTIzJmI9MzQ1XCIsXCJhXCIpID09PiBcIjEyM1wiXG54ID0gVVJMUGFyYW1QYXJzZShcImh0dHA6Ly9leGFtcGxlLmNvbT9hPTEyMyZiPTM0NVwiLFwiY1wiLFwib3RoZXJWYWx1ZVwiKSA9PT4ge2E6XCIxMjNcIiwgYjpcIjQ1NlwifSA9PT4gXCJvdGhlclZhbHVlXCJcbiAqL1xuICAgIFxuICAgIHRyeSB7XG4gICAgICAgIHZhciBocz1mdW5jdGlvbih1KXt2YXIgeCA9IHUuc3BsaXQoL14uKlxcPysvKTsgcmV0dXJuIHgubGVuZ3RoPT0yID8geFsxXSA6IFwiXCI7fTtcbiAgICAgICAgdmFyIHNoPWZ1bmN0aW9uKHUsYil7cmV0dXJuIChiPT10cnVlKSA/IHUgOiB1LnNwbGl0KC8jKy8pWzBdO307XG4gICAgICAgIHZhciBwYXJhbXM9e30sIHBhcnRzID0gc2goaHModXJsKSxhbGxvd0hhc2gpLnNwbGl0KFwiJlwiKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGUgPSBwYXJ0c1tpXS5zcGxpdChcIj1cIik7XG4gICAgICAgICAgICBpZiAoIWVbMF0pIFxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgcGFyYW1zW2RlY29kZVVSSUNvbXBvbmVudChlWzBdKV0gPSBfdG8oZVsxXSk9PVwic3RyaW5nXCIgPyBkZWNvZGVVUklDb21wb25lbnQoZVsxXS5yZXBsYWNlKFwiI1wiLFwiJTIzXCIpKSA6IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKF90byhrZXkpPT1cInVuZGVmaW5lZFwiKVxuICAgICAgICAgICAgcmV0dXJuIHBhcmFtcztcbiAgICAgICAgcmV0dXJuIHBhcmFtcy5oYXNPd25Qcm9wZXJ0eShrZXkpID8gcGFyYW1zW2tleV0gOiBkZWZWYWx1ZTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgYncubG9nKGUpO1xuICAgICAgICByZXR1cm4gZGVmVmFsdWU7XG4gICAgfVxufTtcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuYncuVVJMUGFyYW1QYWNrID0gZnVuY3Rpb24gKHNpbXBsZURpY3QsaW5jbFF1ZXN0aW9uKSB7XG4vKipcbiAgICBAbWV0aG9kIGJ3LlVSTFBhcmFtUGFjayhzaW1wbGVEaWN0LCBpbmNsUXVlc3Rpb24pIDogcGFja3MgYSBzaW1wbGUgZGljdCBpbiB0byBVUkwgZW5jb2RlZCBmb3JtYXRcbiAgICBAcGFyYW0gc2ltcGxlRGljdChvYmplY3QpIC0gZGljdGlvbmFyeSBvZiBzaW1wbGUga2V5IHZhbHVlIHBhaXJzIChub3QgbmVzdGVkKSBpZiBcImRlZXBcIiBKU09OIG5lZWRzIHRvIGJlIHBhY2tlZCB0aGVuIHN0cmluZ2lmeSB0aGF0IGZpcnN0IFxuICAgIEBwYXJhbSBJbmNsUXVlc3Rpb24oYm9vbGVhbikgLSBpZiB0cnVlIGFkZHMgXCI/XCIgdG8gc3RyaW5nIG90aGVyd2lzZSBvbW1pdHRlZC5cblxuICAgIHNlZSBhbHNvIFVSTFBhcmFtUGFyc2UuICBcbiAgICBub3RlIGlmIHVzaW5nIGJ3LlVSTFBhcmFtUGFyc2UgYmVzdXJlIHRvIGluY2x1ZGUgXCI/XCJcIiA9PT4gYncuVVJMUGFyYW1QYXJzZShidy5VUkxQYXJhbVBhY2soe2E6MSxiOzJ9LFwidHJ1ZVwiKSlcbiovXG4gICAgdmFyIGsscz1bXTtcbiAgICBpZiAoX3RvKHNpbXBsZURpY3QpID09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgZm9yIChrIGluIHNpbXBsZURpY3QpIHtcbiAgICAgICAgICAgIHMucHVzaChbZW5jb2RlVVJJQ29tcG9uZW50KGspK1wiPVwiK2VuY29kZVVSSUNvbXBvbmVudChzaW1wbGVEaWN0W2tdLnRvU3RyaW5nKCkpXSk7XG4gICAgICAgIH1cbiAgICAgICAgcyA9IHMuam9pbihcIiZcIik7XG4gICAgfVxuICAgIGVsc2VcbiAgICAgICAgcz1cIlwiO1xuXG4gICAgcmV0dXJuIChpbmNsUXVlc3Rpb24gPyBcIj9cIiA6IFwiXCIpICsgcztcbn07XG5cblxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuYncuaHRtbFNhZmVTdHIgPSBmdW5jdGlvbiAoc3RyKSB7XG4vKiogXG5idy5odG1sU2FnZVN0cmluZyhzdHIpIFxuUmVwbGFjZSBub24gdmFsaWQgSFRNTCBjaGFyYWN0ZXJzIHdpdGggSFRNTCBlc2NhcGVkIGVxdWl2YWxlbnRzLiAgIFxuICovXG4gICAgLy9nZW5lcmljIHdheS4uXG4gICAgLy92YXIgeCA9IGZ1bmN0aW9uKHgpe3JldHVybiBcIiYjXCIreC50b1N0cmluZygpLmNoYXJDb2RlQXQoMCkrXCI7XCI7fVxuICAgIC8vcmV0dXJuIChzdHIudG9TdHJpbmcoKSkucmVwbGFjZSgvWzw+JlxcXFwjXS9nbSx4KS5yZXBsYWNlKC9bXFxuXS9nbSxcIjxicj5cIik7XG4gICAgXG4gICAgLy9vbGQgd2F5IGlzIFwicHJldHR5XCIsIHRhYnMgYXJlIGlzc3VlZCA0IHNwYWNlcy4uXG4gICAgdmFyIGMgPSB7XCI8XCI6XCImbHQ7XCIsIFwiPlwiOlwiJmd0O1wiLCBcIiZcIjpcIiZhbXA7XCIsIFwiXFxcIlwiOlwiJnF1b3Q7XCIsIFwiJ1wiOlwiJiMwMzk7XCIsXCIjXCI6XCImIzAzNTtcIixcIlxcXFxcXFxcXCI6XCJcIixcIlxcblwiOlwiPGJyPlwiLFwiXFx0XCI6XCImbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtcIn07XG4gICAgcmV0dXJuIChzdHIudG9TdHJpbmcoKSkucmVwbGFjZShuZXcgUmVnRXhwKFwiW1wiK09iamVjdC5rZXlzKGMpLmpvaW4oXCJcIikrXCJdXCIsXCJnbVwiKSxmdW5jdGlvbihzKXtyZXR1cm4gY1tzXTt9KTtcbn07XG5cblxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuYncuaHRtbEpTT049ZnVuY3Rpb24gKGpzb24pIHtcbi8qKiBcbkBtZXRob2QgYncuaHRtbEpTT04ob2JqZWN0LCBzdHlsZXMpIFxucHJldHR5IHByaW50IGFueSBqYXZhc2NyaXB0IG9iamVjdCBhcyBkaXNwbGF5YWJsZSBIVE1MLiBcbmUuZy5cbmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibXlQbGFjZVRvRGlzcGxheVwiKS5pbm5lckhUTUwgPSBidy5wcmV0dHlQcmludEpTT04oLi4uYW55IG9iamVjdCAuLi4uKVxuKi9cbi8vVE9ETyBtYWtlIHN0eWxlIGRpY3QgYXMgYSBwYXJhbVxuICAgIGZ1bmN0aW9uIGYoanNvbikgeyBcbiAgICAgICAganNvbiA9IEpTT04uc3RyaW5naWZ5KGpzb24sIHVuZGVmaW5lZCwgMik7XG4gICAgICAgIGlmICh0eXBlb2YganNvbiAhPSBcInN0cmluZ1wiKSB7IGpzb24gPSBKU09OLnN0cmluZ2lmeShqc29uLCB1bmRlZmluZWQsIDIpO31cbiAgICAgICAgXG4gICAgICAgIGpzb24gPSBqc29uLnJlcGxhY2UoLyYvZywgXCImYW1wO1wiKS5yZXBsYWNlKC88L2csIFwiJmx0O1wiKS5yZXBsYWNlKC8+L2csIFwiJmd0O1wiKTsgLy9odG1sIHNhZmUgY2hhcnNcbiAgICAgICAgLy9qc29uID0gYncuaHRtbFNhZmVTdHIoanNvbik7XG4gICAgICAgIHJldHVybiBqc29uLnJlcGxhY2UoLyhcIihcXFxcdVthLXpBLVowLTldezR9fFxcXFxbXnVdfFteXFxcXFwiXSkqXCIoXFxzKjopP3xcXGIodHJ1ZXxmYWxzZXxudWxsKVxcYnwtP1xcZCsoPzpcXC5cXGQqKT8oPzpbZUVdWystXT9cXGQrKT8pL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgdmFyIHN0eSA9IFwiY29sb3I6IGRhcmtvcmFuZ2U7XCI7XG4gICAgICAgICAgICBpZiAoL15cIi8udGVzdChtYXRjaCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoLzokLy50ZXN0KG1hdGNoKSkge1xuICAgICAgICAgICAgICAgICAgICBzdHkgPSBcImNvbG9yOnJlZFwiO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN0eSA9IFwiY29sb3I6cHVycGxlXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICgvdHJ1ZXxmYWxzZS8udGVzdChtYXRjaCkpIHtcbiAgICAgICAgICAgICAgICBzdHkgPSBcImNvbG9yOmdyZXlcIjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoL251bGwvLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgICAgICAgICAgc3R5ID0gXCJjb2xvcjpibGFja1wiO1xuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgc3R5ID0gXCJjb2xvcjpncmVlblwiO1xuICAgICAgICAgICAgcmV0dXJuIFwiPHNwYW4gc3R5bGU9XFxcIlwiICsgc3R5ICsgXCJcXFwiPlwiICsgbWF0Y2ggKyBcIjwvc3Bhbj5cIjtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBcIjxwcmUgc3R5bGU9Jyc+XCIrZihqc29uKStcIjwvcHJlPlwiO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbmJ3Lm1ha2VDU1MgPSBmdW5jdGlvbiAoY3NzRGF0YSwgb3B0aW9ucykge1xuLyoqIFxuYncubWFrZUNTUyhjc3NEYXRhLCBvcHRpb25zKVxuXG5jc3NEYXRhID0gXCJoMiB7Y29sb3I6Ymx1ZTt9XCIgICAgICAvLyBzdHJpbmcgYXMgZnVsbCBydWxlIChhbGwgY29ycmVjdG5lc3MgaXMgb24gdGhlIGNhbGxlcilcbmNzc0RhdGEgPSBbXCJoMiB7Y29sb3I6Ymx1ZTt9XCJdICAgIC8vIGFycmF5IGVudHJ5IGJ1dCBzaW5nbGUgc3RyaW5nXG5jc3NEYXRhID0gW1wiaDIge2NvbG9yOmJsdWV9XCIsIFwiZGl2IHt3aWR0aDozMHB4fVwiXSAvLyAyIGVudHJpZXMsIGJvdGggc3RyaW5nc1xuY3NzRGF0YSA9IFtbXCJoMlwiLFwiY29sb3I6Ymx1ZVwiXV0gLy8gYXJyYXkgb2YgcnVsZXMgKGhlcmUgbGVuZ3RoIDEgcnVsZSlcbmNzc0RhdGEgPSBbW1wiaDJcIixcImNvbG9yOmJsdWVcIl0sIFtcImgzXCIsIFwiZm9udC1jb2xvcjpyZWRcIl1dIC8vIGFycmF5IG9mIHJ1bGVzXG5jc3NEYXRhID0gW1xuICAgICAgICAgICAgW1tcImgyXCIsXCJoNFwiXSwgXCJjb2xvcjpibHVlXCJdLCAgLy8gYXJyYXkgb3Igc2VsZWN0b3JzLCBzdHJpbmcgZm9yIHJ1bGVcbiAgICAgICAgICAgICBbXCJoM1wiLCBcImNvbG9yOnJlZFwiXSAgICAgICAgICAvLyBzdHJpbmcgZm9yIHNlbGVjdG9yLCBzdHJpbmcgZm9yIHJ1bGVcbiAgICAgICAgICBdXG5jc3NEYXRhID0gWyBcbiAgICAgICAgICAgIFtbXCJoMVwiLFwiZGl2IHBcIl0sW1wiY29sb3I6Ymx1ZVwiLFwiZGlzcGxheTpibG9ja1wiXV0sID09PiBoMSwgZGl2IHAgICAgICB7Y29sb3I6IGJsdWU7IGRpcGxheTpibG9jazt9XG4gICAgICAgICAgICBcImgzIHtjb2xvcjpyZWQ7fVwiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PT4gaDMgICAgICAgICAgICAge2NvbG9yOiByZWQ7fVxuICAgICAgICAgICAgW1tcImRpdlwiLFwiLm15Q2xhc3NcIl0sXCJjb2xvciA6IHJlZFwiXSwgICAgICAgICAgICAgID09PiBkaXYsLm15Q2xhc3MgICB7Y29sb3I6IHJlZDt9XG4gICAgICAgICAgICBbXCJwID4gLm15Y2xhc3NcIiwgW1wiY29sb3I6cmVkXCIsXCJkaXNwbGF5OmJsb2NrXCJdXSAgPT0+IHAgPiAubXlDbGFzcyAgIHtjb2xvcjogcmVkOyAgZGlzcGxheTpibG9jazt9XG4gICAgICAgICAgXVxuY3NzRGF0YSA9IFtcbiAgICAgICAgICAgIFtzdHIsIHt9XVxuICAgICAgICAgIF1cbmNzc0RhdGEgPSBbXG4gICAgICAgICAgICBbW3NlbGVjdG9yc10sIHsgZGljdCB9XVxuICAgICAgICAgIF1cblxuZGljdHMgbm90IHVzZWQgYXQgcm9vdCBiZWNhdXNlIGNzcyBjYW4gaGF2ZSBtdWx0aXBsZSByZWR1bmRhbnQgc2VsZWN0b3JzIHdpdGggZGlmZmVyZW50IHJ1bGVzXG5cbiAqL1xuICAgIHZhciBkb3B0cyA9IHtcbiAgICAgICAgZW1pdFN0eWxlVGFnOiBmYWxzZSxcbiAgICAgICAgYXRyOiB7fSxcbiAgICAgICAgcHJldHR5IDogZmFsc2VcbiAgICB9O1xuICAgIGRvcHRzID0gb3B0c0NvcHkoZG9wdHMsb3B0aW9ucyk7XG5cbiAgICB2YXIgcz1cIlxcblwiO1xuICAgIHZhciB0YiA9IGZ1bmN0aW9uIChhKSB7YSA9KFN0cmluZyhhKSkudHJpbSgpOyBhPShhWzBdPT1cIntcIj9cIiBcIjpcIiB7XCIpK2E7IGErPShhW2EubGVuZ3RoXT09XCJ9XCI/XCJcIjpcIn1cIikrXCJcXG5cIjsgcmV0dXJuIGE7fTtcbiAgICAvL3ZhciBybCA9IFwiXCI7XG4gICAgdHJ5IHtcbiAgICAgICAgc3dpdGNoIChfdG8oY3NzRGF0YSkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgICAgICAgICBzICs9IGNzc0RhdGEgK1wiXFxuXCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiYXJyYXlcIjpcbiAgICAgICAgICAgICAgICB2YXIgaTsgXG4gICAgICAgICAgICAgICAgZm9yIChpPTA7IGk8Y3NzRGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgaiA9IGNzc0RhdGFbaV07XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX3RvKGopKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6ICAvLyB0aGlzIG1lYW5zIHdlIGFzc3VtZSBjb3JyZWNseSBmb3JtYXR0ZWQgc3R5bGUgaXMgYmVpbmcgcGFzc2VkIGluIGFuZCB3ZSdyZSBqdXN0IGxldHRpbmcgaXQgdGhyb3VnaCBlLmcuIFwiLm15Y2xhc3Mge2NvbG9yOnJlZH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMrPSBqK1wiXFxuXCI7IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImFycmF5XCIgOiAvL2V4cGVjdHMgbGVuZ3RoIDIgYXJyYXkgZm9yIGVhY2ggZW50cnksIHRob3VnaCAybmQgbWVtYmVyIGNhbiBiZSBkaWN0IG9yIGFycmF5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgPT0+W3N0ciwgc3RyXSwgW1tzdHIsc3RyLHN0cl0sc3RyXSAsIFtzdHIsIHt9XSwgW1tzdHIsc3RyLHN0cl0se31dXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChqLmxlbmd0aCA9PSAxKSAmJiAoX3RvKGpbMF0pPT1cInN0cmluZ1wiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzKz0galswXStcIlxcblwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGoubGVuZ3RoID09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9uYW1lID0galswXSwgX3J1bGUgPSBqWzFdLCBfcnVsZU91dHB1dD1cIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RvKF9uYW1lKT09XCJhcnJheVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzKz0gX25hbWUuam9pbihcIiwgXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcys9IFN0cmluZyhfbmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm93IHdlIGhhdmUgdGhlIG5hbWVzIGUuZy4gKFwiaDJcIiBvciBcImgyLC5teUNsYXNzXCIpIGRvbmUgd2UgbmVlZCB0byBlbWl0IHRoZSBydWxlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2goIF90byhfcnVsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJhcnJheVwiIDogIC8vIFtcImgyXCIsIFtcImNvbG9yOiBibGFja1wiLFwibGVmdDoyMCVcIl1dIG9yIFtbXCJoMlwiLFwiLm15Q2xhc3NcIl0sIFtcImNvbG9yOiBibGFja1wiLFwibGVmdDoyMCVcIl1dXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3J1bGVPdXRwdXQgPSBfcnVsZS5qb2luKFwiOyBcIikrXCI7XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwib2JqZWN0XCIgOiAvLyAgW1wiaDJcIiwge2NvbG9yOiBcImJsYWNrXCIsIGxlZnQ6XCIyMCVcIn1dIG9yIFtbXCJoMlwiLFwiLm15Q2xhc3NcIl0sIHtjb2xvcjpibGFjaywgbGVmdDpcIjIwJVwifV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHggaW4gX3J1bGUpIHsgX3J1bGVPdXRwdXQgKz0gKHggKyBcIjogXCIgKyBfcnVsZVt4XStcIjsgXCIpO31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9fcnVsZU91dHB1dCA9IGJ3Lm1ha2VDU1NSdWxlKFtfbmFtZSxfcnVsZV0se3ByZXR0eTpvcHRzLnByZXR0eX0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJzdHJpbmdcIjogLy8gW1wiaDJcIiwgXCJjb2xvcjogYmxhY2tcIl0gb3IgW1tcImgyXCIsXCIubXlDbGFzc1wiXSwgXCJjb2xvcjpibGFja1wiXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcnVsZU91dHB1dD1fcnVsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzKz0gdGIoX3J1bGVPdXRwdXQpK1wiXFxuXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBzPVwiXCI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtidy5sb2dkKGUpO30gIC8vICBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG4gICAgaWYgKGRvcHRzW1wiZW1pdFN0eWxlVGFnXCJdKSB7XG4gICAgICAgIHMgPSBidy5odG1sKFtcInN0eWxlXCIsZG9wdHNbXCJhdHJcIl0sc10pO1xuICAgIH1cbiAgICBzLnJlcGxhY2UoL1xcbisvZyxcIlxcblwiKS5yZXBsYWNlKC9zKy9nLFwiIFwiKTtcbiAgICByZXR1cm4gcztcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5idy5tYWtlQ1NTUnVsZSA9IGZ1bmN0aW9uIChjc3NEYXRhLCBvcHRpb25zKSB7XG4vKiogXG5AbWV0aG9kIGJ3Lm1ha2VDU1NSdWxlKGNzc0RhdGEsIG9wdGlvbnMpXG5cbmV4cGVjdHMgdGhpcyBmb3JtOlxuIFtzdHIsIHtrLHZ9XSBcbiBvclxuIFtbYXJyYXkgb2YgcnVsZXMgc3RyXSwge2ssdn1dXG5cbiBlLGcsIFtcIi5teUNsYXNzXCIsIHtcImNvbG9yXCI6IFwicmVkXCIsIFwiZm9udC13ZWlnaHRcIiA6IFwiNzAwICFpbXBvcnRhbnQhXCJ9XVxuIG9yXG4gW1tcIi5teUNsYXNzXCIsXCJkaXYgPiBwXCJdLCB7XCJjb2xvclwiOiBcInJlZFwiLCBcImZvbnQtd2VpZ2h0XCIgOiBcIjcwMCAhaW1wb3J0YW50IVwifV1cblxuICovXG4gICAgdmFyIGRvcHRzID0ge1xuICAgICAgICBlbWl0U3R5bGVUYWc6IGZhbHNlLFxuICAgICAgICBhdHI6IHt9LFxuICAgICAgICBwcmV0dHk6IHRydWUgLy8gbWFrZSBpdCBwcmV0dHkgb3RoZXJ3aXNlIGNvbXBhY3QgZm9ybSBnZW5lcmF0ZWRcbiAgICB9O1xuICAgIGRvcHRzID0gb3B0c0NvcHkoZG9wdHMsb3B0aW9ucyk7XG5cbiAgICB2YXIgayxkLHY9W10scz1cIlwiLHNwPWRvcHRzLnByZXR0eT9cIiBcIjpcIlwiLCBjcj1kb3B0cy5wcmV0dHk/XCJcXG5cIjpcIlwiO1xuICAgIFxuICAgIHRyeSB7XG4gICAgICAgIGlmIChfdG8oY3NzRGF0YSk9PSBcImFycmF5XCIpIHtcbiAgICAgICAgICAgIGs9Y3NzRGF0YVswXSwgZD1jc3NEYXRhWzFdO1xuICAgICAgICAgICAgcyArPV90b2EoayxcImFycmF5XCIsayxbay50b1N0cmluZygpXSkuam9pbihcIixcIitzcCkrY3I7XG4gICAgICAgICAgICBmb3IgKGsgaW4gZCkge1xuICAgICAgICAgICAgICAgIHYucHVzaChbc3Arc3AraytcIjpcIitzcCtjc3NEYXRhWzFdW2tdK1wiO1wiK3NwK2NyXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzKz0gXCJ7XCIrY3Irdi5qb2luKFwiXCIpK1wifVwiK2NyO1xuICAgICAgICB9XG4gICAgfSBjYXRjaChlKSB7XG4gICAgICAgIGJ3LmxvZ2QoZSk7XG4gICAgfVxuICAgIHJldHVybiBzO1xuXG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuYncuaHRtbFBhZ2UgPSBmdW5jdGlvbiAoaGVhZCwgYm9keSwgb3B0aW9ucykge1xuLyoqIFxuVEJEIGZpbmlzaCAoaW5jbHVkZSBidyBwYXJhbXMsIGhhbmRsaW5nIG1ldGEgdy9vIGNsb3NlIHRhZ3MpXG5idy5tYWtlSFRNTERvYyhoZWFkLGJvZHksb3B0aW9ucylcbm1ha2UgYSBzaW1wbGUgSFRNTCBkb2N1bWVudC4gIFxuXG5pbmxpbmUtYnctY3NzIC0tPiBlbWl0IGJ3IGRlZmF1bHQgc3R5bGVzIGFzIGlubGluZSBjc3MgKGluY2x1ZGUgZ2xvYmFscyBvcHRpb24pXG4gKi9cbiAgICB2YXIgZG9wdHMgPSB7XG4gICAgICAgIGRvY1R5cGUgOiBcIjwhRE9DVFlQRSBodG1sPlwiLFxuICAgICAgICBodG1sUGFyYW1zICA6IHtsYW5nOiBcImVuXCJ9LFxuICAgICAgICBoZWFkRGVmYXVsdENvbnRlbnQgOiBbXG4gICAgICAgICAgICAgICAgW1wibWV0YVwiLCB7XCJodHRwLWVxdWl2XCI6XCJDb250ZW50LVR5cGVcIiwgXCJjb250ZW50XCI6XCJ0ZXh0L2h0bWxcIiwgXCJjaGFyc2V0XCI6XCJ1dGYtOFwifSwgXCJcIl1cbiAgICAgICAgICAgICAgICAvL1tcInRpdGxlXCIsIHt9LCBcImJ3IGRvY1wiXVxuICAgICAgICAgICAgXSxcbiAgICAgICAgaGVhZEluY2x1ZGVCaXRXcmVuY2hKUyA6IGZhbHNlLCAvLyBmYWxzZSA6IGRvbid0IGluY2x1ZGUsIFwiZW1iZWRcIiBvciBcInBhdGgtc3RyaW5nXCJcbiAgICAgICAgaGVhZEluY2x1ZGVCaXRXcmVuY2hDU1MgOiBmYWxzZSwgLy8gZXhwb3J0cyBiaXR3cmVuY2ggY3NzIGNsYXNzZXMgaW4gPHN0eWxlPiBzZWN0aW9uIGluIGhlYWRcbiAgICAgICAgaGVhZEZhdmljb24gOiBcIlwiIC8vPGxpbmsgcmVsPVwiaWNvblwiIHR5cGU9XCJpbWFnZS94LWljb25cIiBocmVmPVwiLi4vaW1hZ2VzL2Zhdmljb24tMzJ4MzIucG5nXCIgLz5cbiAgICB9O1xuICAgIGRvcHRzID0gb3B0c0NvcHkoZG9wdHMsb3B0aW9ucyk7XG5cbiAgICB2YXIgcyA9IGRvcHRzW1wiZG9jVHlwZVwiXStcIlxcblwiO1xuICAgIHMgKz0gYncuaHRtbChbXCJodG1sXCIsZG9wdHNbXCJodG1sUGFyYW1zXCJdLFtcbiAgICAgICAgICAgIFwiXFxuXCIsXG4gICAgICAgICAgICBbXCJoZWFkXCIsIHt9LCBbIFwiXFxuXCIsZG9wdHNbXCJoZWFkRGVmYXVsdENvbnRlbnRcIl0ubWFwKGZ1bmN0aW9uKHgpe3JldHVybiBidy5odG1sKHgpO30pLmpvaW4oXCJcXG5cIiksaGVhZCxcIlxcblwiXV0sXG4gICAgICAgICAgICBcIlxcblwiLFxuICAgICAgICAgICAgW1wiYm9keVwiLCB7fSwgWyBcIlxcblwiLGJvZHksXCJcXG5cIl1dLFxuICAgICAgICAgICAgXCJcXG5cIlxuICAgICAgICBdXSk7XG4gICAgcmV0dXJuIHM7XG59O1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8qKlxuICAgIGh0bWxfZmMgKGh0bWwgZm9ybSBjb252ZXJ0KSBjb252ZXJ0cyBhY2NlcHRhYmxlIGh0bWwgY29udHJ1Y3RzIGludG8gaHRtbCBqc29uIGRpY3QgZm9ybTogXG4gICAgeyB0OiA8dGFnPiwgYToge2F0dHJpYnN9LCBjOiBbY29udGVudF0sIG86IHtvcHRpb25zfSwgczp7c3RhdGV9fVxuICAgIFxuICAgIGRvZXMgbm90IG9wZXJhdGUgb24gdGhlIHQgYSBjIG8gcyBwYXJhbXMgLS0+IGp1c3QgZG9lcyB0aGUgY29udmVyc2lvblxuICovXG4vKlxuaHRtbCBnZW4gdXNpbmcge2lucHV0fVxuX3R5cGVPZihpbnB1dClcblxuIFwib2JqZWN0XCIgXG4gICAgYWNjZXB0ZWQga2V5cyBiZWxvdywgb3RoZXIga2V5cyBpZ25vcmVkXG4gICAgdDogU3RyaW5nIHwgTnVtYmVyIHwgRGF0ZSgpID09PiB0YWcgIGZ1bmN0aW9uPT0+IGYoKS50b1N0cmluZygpXG4gICAgYToge30gID09PiAga2V5IDogdmFsdWUgPT0+ICBudW0gfCBzdHIgfCBEYXRlIHwgW10gPT0+IFtdLmpvaW4oZG9wdHMuYV9qb2luKSBcbiAgICBjOiBbXSB8fCBTdHJpbmcgfCBOdW1iZXIgfCBEYXRlICA9PT4gZWFjaF9pdGVtIDogc3RyIHwge2h0bWxfZGljdH0gXG4gICAgbzoge30gPT0+IG9wdGlvbnMgKG5vdGUgaW5oZXJpdCAvIGNvcHkpICA9PiBpZiBub3Qgc3VwcGxpZWQgdXNlcyBwcmV2aW91cyBsZXZlbHMgb3B0aW9uc1xuICAgIFxuICAgIHM6IHt9ID09PiBzdGF0ZSBpbmZvICh1c2VkIGludGVybmFsbHkpIGUuZy4gaW5kZW50IGxldmVsLCBzdGF0c1xuICAgIFxuICAgIGFsc28gYWNjZXB0czogXCJ0YWdcIiwgXCJhdHRyaWJcIiwgXCJjb250ZW50XCIsIFwib3B0aW9uc1wiLCBcInN0YXRlXCIgYXMga2V5cyBpbnN0ZWFkIG9mIHQsYSxjLG8sc1xuICAgIFxuICAgIGlmIGFueSBvZiB0LGEsYyxvIGFyZSBhIGZ1bmN0aW9uIGl0IHdpbGwgYmUgaW52b2tlZCBpbW1lZGlhdGx5IHcgbm8gcGFyYW1zID09PiB0Om15RnVuYyA9PT0+IHQ6bXlGdW5jKCkgPD09IFxuXG4gICAgZGVmYXVsdHM6XG4gICAgICAgIHQgPT0+IFwiZGl2XCJcbiAgICAgICAgYSA9PT4ge31cbiAgICAgICAgYyA9PT4gW11cbiAgICAgICAgbyA9PT4ge31cblxuICAgICAgICBzID09PiB7bGV2ZWw6MCwgbm9kZXM6IDB9XG5cblwic3RyaW5nXCIgfCBcIm51bWJlclwiIHwgRGF0ZSgpID09PiB7fVxuICAgICAgICB0ID09PiBcImRpdlwiXG4gICAgICAgIGEgPT0+IHt9XG4gICAgICAgIGMgPT0+IC50b1N0cmluZygpXG4gICAgICAgIG8gPT0+IHt9XG5cbiAgICAgICAgcyA9PT4ge31cblxuXCJhcnJheVwiIFxuICAgIFsgICAgICAgICBdICAgPT0+IHt9IC8vIGRlZmF1bHRzIHRvIGVtcHR5IGRlZmF1bHQgb2JqZWN0IFxuICAgIFtjICAgICAgICBdICAgPT0+IHt9XG4gICAgW3QsYyAgICAgIF0gICA9PT4ge31cbiAgICBbdCxhLGMgICAgXSAgID09PiB7fVxuICAgIFt0LGEsYyxvICBdICAgPT0+IHt9XG4gICAgW3QsYSxjLG8sc10gICA9PT4ge31cbiAgICBbIDYrICAgICAgXSAgID09PiB7fSAvLyB1c2VzLCBmaXJzdCA1IG90aGVycyBpZ25vcmVkXG4gICAgXG4gICAgLy8gdGhpcyBkaWN0IHJlcHJlZXNudHMgdGhlIG1hcHBpbmdcbiAgICB7XG4gICAgMCA6IHsgfVxuICAgIDEgOiB7YyA6IDB9LCAgXG4gICAgMiA6IHt0IDogMCwgYyA6IDF9LFxuICAgIDMgOiB7dCA6IDAsIGEgOiAxLCBjIDogMn1cbiAgICA0IDoge3QgOiAwLCBhIDogMSwgYyA6IDMsIG8gOiA0fVxuICAgIDUgOiB7dCA6IDAsIGEgOiAxLCBjIDogMywgbyA6IDQsIHMgOiA1fVxuICAgIH1cblxuICAgIC8vIHRoaXMgYXJyYXkgY29udHJ1Y3QgaW1wbGVtZW50cyB0aGUgYWJvdmUgZGljdCBtYXBwaW5nIG1vcmUgY29tcGFjdGx5XG4gICAgdmFyIGksaWR4ID0gW1tdLFtcImNcIl0sIFtcInRcIixcImNcIl0sIFtcInRcIixcImFcIixcImNcIl0sW1widFwiLFwiYVwiLFwiY1wiLFwib1wiXSxbXCJ0XCIsXCJhXCIsXCJjXCIsXCJvXCIsXCJzXCJdXTtcbiAgICBmb3IgKGk9MDsgaTwgeC5sZW5ndGg7IGkrKykgXG4gICAgICAgIGhkW2lkeFt4Lmxlbmd0aF1dW2ldID0geFtpXTtcbiAgICBcbiovXG4vKlxuYncuaHRtbF9mYyA9IGZ1bmN0aW9uKHgpIHtcbiAgICB2YXIgaSxoZCAgPSB7IHQ6IFwiZGl2XCIsIGE6IHt9LCBjOiBcIlwiLCBvOiB7dF9jbG9zZTogdHJ1ZX0sIHM6IHsgbGV2ZWw6IDAsIG5vZGVzOiAwLCBodG1sOlwiXCJ9fTsgLy8gZGVmYXVsdCBodG1sIGRpY3QgZm9ybWF0XG5cbiAgICBzd2l0Y2ggKF90byh4KSkge1xuICAgICAgICBjYXNlIFwibnVsbFwiIDpcbiAgICAgICAgY2FzZSBcInVuZGVmaW5lZFwiIDpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgICAgICBbW1widGFnXCIsXCJ0XCJdLFtcImF0dHJpYlwiLFwiYVwiXSxbXCJjb250ZW50XCIsXCJjXCJdLFtcIm9wdGlvbnNcIixcIm9cIl0sW1wic3RhdGVcIixcInNcIl1dLmZvckVhY2goZnVuY3Rpb24oeil7IGhkW3pbMV1dPSB6WzBdIGluIHggPyB4W3pbMF1dIDogaGRbelsxXV07fSk7XG4gICAgICAgICAgICBmb3IgKGkgaW4gaGQpICAvLyB3ZSBvbmx5IGNvcHkgdGhvc2UgZmllbGRzIHdlIGNhcmUgYWJvdXQuLlxuICAgICAgICAgICAgICAgIGhkW2ldID0gKGkgaW4geCkgPyB4W2ldIDogaGRbaV07ICAvLyBuZWVkIHRvIGhhbmRsZSBmaWVsZHMgZGlmZmVyZW50eS4uIHQgOiBcIlwiLCBhIDoge30sIGM6XCJcIiB8IFtdLG8gOnt9IC0tIHRoaXMgaXMgYmVjYXVzZSB3ZSB3YW50IHRvIGhhdmUgcHJvcGVyIGRlZmF1bHRzXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImFycmF5XCI6XG4gICAgICAgICAgICB2YXIgaWR4ID0gW1tdLFtcImNcIl0sIFtcInRcIixcImNcIl0sIFtcInRcIixcImFcIixcImNcIl0sW1widFwiLFwiYVwiLFwiY1wiLFwib1wiXSxbXCJ0XCIsXCJhXCIsXCJjXCIsXCJvXCIsXCJzXCJdXTtcbiAgICAgICAgICAgIHZhciBtID0gKHgubGVuZ3RoID4gNSkgPyA1IDogeC5sZW5ndGg7XG4gICAgICAgICAgICBmb3IgKGk9MDsgaTwgbTsgaSsrKSAgIHsgXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coaWR4W21dW2ldICsgXCI6XCIgKyB4W2ldKTtcbiAgICAgICAgICAgICAgICBoZFtpZHhbbV1baV1dID0geFtpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjogIFxuICAgICAgICAgICAgaGQgPSBidy5odG1sX2ZjKHgoKSxvcHRzKTsgLy8gZXZhbHVhdGUgYW5kIGNvbnZlcnQuLi5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OiAvLyBzdHJpbmcsIG51bWJlciwgRGF0ZSAgXG4gICAgICAgICAgICBoZC5jID0geC50b1N0cmluZygpO1xuICAgIH1cbiAgICByZXR1cm4gaGQ7XG59XG4qL1xuXG5idy5odG1sX2ZjID0gZnVuY3Rpb24oeCkge1xuICAgIHZhciBpLG4gPSB7IHQ6IFwiZGl2XCIsIGE6IHt9LCBjOiBcIlwiLCBvOiB7fX07IC8vIGRlZmF1bHQgaHRtbCBkaWN0IGZvcm1hdFxuICAgIHZhciBtID0gXCJcIjtcbiAgICBzd2l0Y2ggKF90byh4KSkge1xuICAgICAgICBjYXNlIFwibnVsbFwiIDpcbiAgICAgICAgY2FzZSBcInVuZGVmaW5lZFwiIDpcbiAgICAgICAgICAgIG4gPSB4O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgICAgICAgIFtbXCJ0YWdcIixcInRcIl0sW1wiYXR0cmliXCIsXCJhXCJdLFtcImNvbnRlbnRcIixcImNcIl0sW1wib3B0aW9uc1wiLFwib1wiXV0uZm9yRWFjaChmdW5jdGlvbih6KXsgblt6WzFdXT0gelswXSBpbiB4ID8geFt6WzBdXSA6IG5belsxXV07fSk7XG4gICAgICAgICAgICBmb3IgKGkgaW4gbikgeyAgLy8gd2Ugb25seSBjb3B5IHRob3NlIGZpZWxkcyB3ZSBjYXJlIGFib3V0Li5cbiAgICAgICAgICAgICAgICBuW2ldID0gKGkgaW4geCkgPyB4W2ldIDogbltpXTsgLy8gbmVlZCB0byBoYW5kbGUgY29tcGxpY2F0ZWQgdHlwZXM6IHQ6XCJcIiwgYTp7fSwgYzpcIlwiIHwgW11cbiAgICAgICAgICAgICAgICBpZiAoYncuaXNudShuW2ldKSkge1xuICAgICAgICAgICAgICAgICAgICBuID0gbnVsbDsgLy8gZm9yY2UgZW50aXJlIG9iamVjdCB0byBiZSBudWxsIG9yIHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICBtID0gXCJIVE1MIGdlbiBlcnI6IGJhZCBvYmplY3RcIjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJhcnJheVwiOlxuICAgICAgICAgICAgdmFyIGlkeCA9IFtbXSxbXCJjXCJdLCBbXCJ0XCIsXCJjXCJdLCBbXCJ0XCIsXCJhXCIsXCJjXCJdLFtcInRcIixcImFcIixcImNcIixcIm9cIl0sW1widFwiLFwiYVwiLFwiY1wiLFwib1wiLFwic1wiXV07XG4gICAgICAgICAgICBtID0gKHgubGVuZ3RoID4gNSkgPyA1IDogeC5sZW5ndGg7XG4gICAgICAgICAgICBmb3IgKGk9MDsgaTwgbTsgaSsrKSAgIHsgXG4gICAgICAgICAgICAgICAgYncubG9nZChpZHhbbV1baV0gKyBcIjpcIiArIHhbaV0pO1xuICAgICAgICAgICAgICAgIG5baWR4W21dW2ldXSA9IHhbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGkgaW4gbilcbiAgICAgICAgICAgICAgICBpZiAoYncuaXNudShuW2ldKSkge1xuICAgICAgICAgICAgICAgICAgICBuID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgbSA9IFwiSFRNTCBnZW4gZXJyOiBiYWQgYXJyYXlcIjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6ICBcbiAgICAgICAgICAgIHZhciBvcHRzID0ge307XG4gICAgICAgICAgICBuID0gYncuaHRtbF9mYzIoeCgpLG9wdHMpOyAvLyBldmFsdWF0ZSBhbmQgY29udmVydC4uLlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6IC8vIHN0cmluZywgbnVtYmVyLCBEYXRlLCBib29sLCBSZWdleCBcbiAgICAgICAgICAgIG4uYyA9eC50b1N0cmluZygpO1xuICAgIH1cbiAgICByZXR1cm4gbjsgXG59O1xuXG5idy5IVE1MTm9ybSA9IGZ1bmN0aW9uKHgpIHtcblxuICAgIGZ1bmN0aW9uIGJ3SFRNTE5vZGUgKCkge3RoaXMudD1cImRpdlwiOyB0aGlzLmE9e307IHRoaXMuYz1cIlwiOyB0aGlzLm89e307fVxuICAgIGZ1bmN0aW9uIGJ3RXJyb3IgICh2LHgpIHt0aGlzLnZhbHVlPXY7IHRoaXMubXNnID0gdHlwZW9mIHggPT0gXCJ1bmRlZmluZWRcIiA/IFwiZXJyb3JcIiA6IHg7fVxuICAgIFxuICAgIHZhciBpLG4gPSBuZXcgYndIVE1MTm9kZSgpOyAvLyBkZWZhdWx0IGh0bWwgZGljdCBmb3JtYXRcbiAgICB2YXIgbSA9IFwiXCI7XG4gICAgc3dpdGNoIChfdG8oeCkpIHtcbiAgICAgICAgY2FzZSBcIm51bGxcIiA6XG4gICAgICAgIGNhc2UgXCJ1bmRlZmluZWRcIiA6XG4gICAgICAgICAgICBuID0gbmV3IGJ3RXJyb3IoeCxcIkhUTUwgTm9kZSBlcnJvciA6IFwiK190byh4KSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICAgICAgW1tcInRhZ1wiLFwidFwiXSxbXCJhdHRyaWJcIixcImFcIl0sW1wiY29udGVudFwiLFwiY1wiXSxbXCJvcHRpb25zXCIsXCJvXCJdXS5mb3JFYWNoKGZ1bmN0aW9uKHopeyBuW3pbMV1dPSB6WzBdIGluIHggPyB4W3pbMF1dIDogblt6WzFdXTt9KTtcbiAgICAgICAgICAgIGZvciAoaSBpbiBuKSB7ICAvLyB3ZSBvbmx5IGNvcHkgdGhvc2UgZmllbGRzIHdlIGNhcmUgYWJvdXQuLlxuICAgICAgICAgICAgICAgIG5baV0gPSAoaSBpbiB4KSA/IHhbaV0gOiBuW2ldOyAvLyBuZWVkIHRvIGhhbmRsZSBjb21wbGljYXRlZCB0eXBlczogdDpcIlwiLCBhOnt9LCBjOlwiXCIgfCBbXVxuICAgICAgICAgICAgICAgIGlmIChidy5pc251KG5baV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIG4gPSBudWxsOyAvLyBmb3JjZSBlbnRpcmUgb2JqZWN0IHRvIGJlIG51bGwgb3IgdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgIG0gPSBcIkhUTUwgZ2VuIGVycjogYmFkIG9iamVjdFwiO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImFycmF5XCI6XG4gICAgICAgICAgICB2YXIgaWR4ID0gW1tdLFtcImNcIl0sIFtcInRcIixcImNcIl0sIFtcInRcIixcImFcIixcImNcIl0sW1widFwiLFwiYVwiLFwiY1wiLFwib1wiXSxbXCJ0XCIsXCJhXCIsXCJjXCIsXCJvXCIsXCJzXCJdXTtcbiAgICAgICAgICAgIG0gPSAoeC5sZW5ndGggPiA1KSA/IDUgOiB4Lmxlbmd0aDtcbiAgICAgICAgICAgIGZvciAoaT0wOyBpPCBtOyBpKyspICAgeyBcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKGlkeFttXVtpXSArIFwiOlwiICsgeFtpXSk7XG4gICAgICAgICAgICAgICAgbltpZHhbbV1baV1dID0geFtpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoaSBpbiBuKVxuICAgICAgICAgICAgICAgIGlmIChidy5pc251KG5baV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIG4gPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBtID0gXCJIVE1MIGdlbiBlcnI6IGJhZCBhcnJheVwiO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjogIFxuICAgICAgICAgICAgdmFyIG9wdHMgPSB7fTtcbiAgICAgICAgICAgIG4gPSBidy5odG1sX2ZjMih4KCksb3B0cyk7IC8vIGV2YWx1YXRlIGFuZCBjb252ZXJ0Li4uXG4gICAgICAgICAgICBuID0gX3RvKG4pPT1cImZ1bmN0aW9uXCIgPyBuZXcgYndFcnJvcihuLnRvU3RyaW5nKCksXCJIVE1MIE5vZGUgZXJyb3I6IGZ1bmN0aW9uIHJldHVybmVkIGEgZnVuY3Rpb25cIikgOiBuO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6IC8vIHN0cmluZywgbnVtYmVyLCBEYXRlLCBib29sLCBSZWdleCAgPT0+IHdpbGwgYmUgY29tZSBqdXN0IHBsYWluIHJlbmRlcmVkIGNvbnRlbnQgbGF0ZXJcbiAgICAgICAgICAgIG4uYyA9eC50b1N0cmluZygpO1xuICAgIH1cbiAgICByZXR1cm4gbjsgXG59O1xuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLyoqXG4gICAgaHRtbGQgLS0gaHRtbCBnZW5lcmF0b3JcbiAgICBjb252ZXJ0IF9hY2N0ZXB0YWJsZV90eXBlc18gID09PiBodG1MSlNPTl9kaWN0XG5cblxuYncuaHRtbGQgPSBmdW5jdGlvbihodG1sSlNPTiwgb3B0cykge1xuICAgIHZhciBkb3B0cyA9IHsgICAgICAgICAgICAgICAvLyBkZWYgb3B0aW9ucyBub3RlIHRfIGFfIGNfIG9fIGFyZSBvcHRpb25zIGFwcGxpZWQgdG8gdGhlIHQsIGEsIGMsIG9yIG8gbG9jYWwga2V5cyBkaXJlY3RseVxuICAgICAgICB0X2Nsb3NlICAgOiBcImF1dG9cIiwgICAgIC8vIFwiYXV0b1wiIHwgXCJmYWxzZVwiIHwgXCJ0cnVlXCIgID09PiBcImF1dG9cIiBkb2Vzbid0IGNsb3NlIGNlcnRhaW4gdGFnIGRlY2wgc3VjaCBhcyAhRE9DVFlQRSwgPGJyPlxuICAgICAgICBhX2pvaW4gICAgOiBcIjtcIiwgICAgICAgIC8vIGRlZmF1bHQgam9pbiBmb3IgYXR0cmlidXRlIGFycmF5cyBcbiAgICAgICAgb19wcmV0dHkgIDogZmFsc2UsICAgICAgLy8gbWFrZXMgbmljZSBodG1sIFxuICAgICAgICBvX2luZGVudCAgOiA0LCAgICAgICAgICAvLyBkZWZhdWx0IGluZGVudCB3aGVuIHByZXR0eSBwcmludGluZ1xuICAgICAgICBvX3ZlcmJvc2UgOiBmYWxzZSwgICAgICAvLyByZXR1cm5zIG9iamVjdCBpbnN0ZWFkIG9mIGh0bWwgc3RyaW5nID09PiB7aHRtbDogPGh0bWxvdXRwdXQgc3RyaW5nPiwgc3RhdHM6IGRpY3R7fSwgc3RhdHVzOiBcInN1Y2Nlc3NcIiB8IFwid2FybmluZ3NcIn1cbiAgICAgICAgY19odG1sZXNjIDogdHJ1ZSAgICAgICAgLy8gdHJ1ZSB8IGZhbHNlICA9PT4gZXNjYXBlIGh0bWwgc2FmZSBjaGFycywgcmVwbGFjZSBcIlxcblwiIHdpdGggPGJyPiBldGNcbiAgICB9O1xuICAgIFxuXG4gICAgZG9wdHMgPSBvcHRzQ29weShkb3B0cyxvcHRzKTtcblxuICAgIHZhciAgaSwgZCwgaD1cIlwiLCBpbmRfcywgaW5kX2U7IC8vIGluZF9zLCBpbmRfZSBjb250cm9sIHByZXR0eSBwcmludGluZ1xuXG4gICAgaD1cIlwiO1xuICAgIGQgPSBidy5odG1sX2ZjKGh0bWxKU09OKTsgLy8gbm93IGluIGRpY3QgZm9ybSB3aXRoIHN0YXRlIHZlY3RvclxuICAgIGZvciAoaSBpbiBkKVxuICAgICAgICBpZiAoX3RvKGkpID09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICAgIGRbaV0gPSBkW2ldKGQpOyBcblxuICAgIGQuc1tcImxldmVsXCJdKys7XG4gICAgXG4gICAgZC50ID0gZC50LnRvU3RyaW5nKCk7ICBcbiAgICBkLmEgPSAoX3RvKGQuYSkgPT0gXCJvYmplY3RcIikgPyBkLmEgOiB7fTsgLy8gbXVzdCBiZSBkaWN0LiAgXG4gICAgZC5jID0gKF90byhkLmMpID09IFwiYXJyYXlcIiApID8gZC5jIDogKF90byhkLmMpPT1cIm9iamVjdFwiKSA/IGh0bWxfZmMoZC5jKSA6IGQuYy50b1N0cmluZygpOyBcbiAgICBkLm8gPSBvcHRzQ29weShkb3B0cyxkLm8pO1xuXG4gICAgLy9ub3cgZ2VuIGh0bWwuLi5cbiAgICBpbmRfcyA9IGQuby5vX3ByZXR0eSA/IEFycmF5KGQucy5sZXZlbCAqIGQuby5vX2luZGVudCApLmpvaW4oXCIgXCIpIDogXCJcIjsgLy8gbm90ICZuYnNwOyA9PT4gd2UncmUgbm90IHRyeWluZyB0byByZW5kZXIgdGhpcyBzcGFjZSBqdXN0IG1ha2UgaXQgcHJldHR5IGZvciBpbnNwZWN0aW9uXG4gICAgaW5kX2UgPSBkLm8ub19wcmV0dHkgPyBcIlxcblwiIDogXCJcIjtcbiAgICBcbiAgICBoICs9IGluZF9zKyAgXCI8XCIgKyBkLnQ7XG4gICAgZm9yIChpIGluIGQuYSlcbiAgICAgICAgaCs9IFwiIFwiK2krXCI9XFxcIlwiK2QuYVtpXStcIlxcXCJcIjtcbiAgICBoICs9IFwiPlwiKyBpbmRfZTsgXG5cbiAgICAvL2NvbnRlbnQgZ2VuXG4gICAgc3dpdGNoIChfdG8oZC5jKSkge1xuICAgICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgICAgICBoICs9IGJ3Lmh0bWxkKGQuYyxkb3B0cyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImFycmF5XCI6XG4gICAgICAgICAgICBoICs9IGQuYy5tYXAoZnVuY3Rpb24oeCl7IHJldHVybiBidy5odG1sZCh4LGRvcHRzKTt9KS5qb2luKFwiXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBoKz0gZC5jOyBcbiAgICB9XG4gICAgXG4gICAgLy9jbG9zaW5nIHRhZ1xuICAgIGggKz0gaW5kX3MgKyBcIjwvXCIgKyBkLnQgKyBcIj5cIiArIGluZF9lO1xuICAgIGQucy5odG1sID0gaDtcbiAgICByZXR1cm4gZDtcbn1cbiovXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuYncuaHRtbCA9IGZ1bmN0aW9uIChkLG9wdGlvbnMpIHtcbi8qKiAgXG5idy5odG1sKGRhdGEpICBcblxudGFrZXMgZGF0YSBvZiBvbmUgb2YgdGhlc2UgZXhhY3QgZm9ybXM6XG5cbiAgIHN0cmluZ1xuICAgYXJyYXk6IFtcImRpdlwiLCBjb250ZW50XVxuICAgYXJyYXk6IFtcImRpdlwiLHthdHRyaWJ1dGUgZGljdH0sY29udGVudF1cbiAgIGFycmF5OiBbXCJkaXZcIix7YXR0cmlidXRlIGRpY3R9LGNvbnRlbnQsIG9wdGlvbnNdXG4gICBkaWN0OiAge3RhZzpcImRpdlwiLCBhdHI6IHthdHRyaWJ1dGUgZGljdH0sIFwiY29udGVudFwiOiBjb250ZW50fVxuICAgICAgICBjb250ZW50IGNhbiBiZSBzdHJpbmcgb3IgYXJyYXlcblxuYW5kIGNyZWF0ZXMgYW4gSFRNTCBzdHJpbmcgd2ljaCBjYW4gYmUgdXNlZCB0byBnZW5lcmF0ZSBET00gZWxlbWVudHMgc3VjaCBhc1xuZG9jdW1lbnQuZ2V0RUxlbWVudEJ5SWQoXCJ0aGVJRFwiKS5pbm5lckhUTUwgPSBidWlsZEhUTUxPYmpTdHJpbmcoZGF0YSkuXG5cbmNvbnRlbnQgY2FuIGJlIG5lc3RlZCBcblxuZCBpcyBzdHJpbmcgb3IgYW4gYXJyYXkgW1widGFnXCIue2F0dHJpYnV0cyBkaWN0fSxjb250ZW50XSBvciBkaWN0IG9mIHRoaXMgZm9ybVxuICAgdGFnLCBhdHIsIGNvbnRlbnQgIChhbHNvIGFsbG93IHNob3J0IGhhbmQgdCxhLGMpXG4gICB0YWcgb3IgdCA9IHN0cmluZyAtLT4gXCJkaXZcIlxuICAgYXRyIG9yIGEgPSBkaWN0ICAtLT4ge1wic3R5bGVcIiA6IFwid2lkdGg9NDA7aGVpZ2h0PTUwXCIsIFwiY2xhc3NcIiA6IFwiZm9vIGJhclwifVxuICAgIGNvbnRlbnQgb3IgYyA9IFtdIG9yIHN0cmluZy4gIGlmIGFycmF5IGVhY2ggZWxlbWVudCBtdXN0IGJlIGVpdGhlciBzdHJpbmcgb3IgZGljdCBvZiB0aGlzIGZvcm0uXG4gICAgaWYgYW55IGVsZW1lbnQgaXMgYSBmdW5jdGlvbiBpdCB3aWxsIGJlIGV2YWx1YXRlZCBpbiBwbGFjZSB3aXRoIG5vIHBhcmFtcy4gXG5cbiovXG4gICAgdmFyIGRvcHRzID0ge1xuICAgICAgICBwcmV0dHkgICAgIDogZmFsc2UsXG4gICAgICAgIGluZGVudCAgICAgOiAwLFxuICAgICAgICBpbmRlbnRTdHIgIDogXCIgIFwiXG4gICAgfTtcbiAgICBcbiAgICB2YXIgb3V0Rm4gPSBmdW5jdGlvbihzLG9wdHMpIHtcbiAgICAgICAgdmFyIHcgID0gIEFycmF5KG9wdHNbXCJpbmRlbnRcIl0pLmpvaW4ob3B0c1tcImluZGVudFN0clwiXSk7XG4gICAgICAgIHZhciB3ZSA9ICBBcnJheShvcHRzW1wiaW5kZW50XCJdLTEpLmpvaW4ob3B0c1tcImluZGVudFN0clwiXSk7XG4gICAgICAgIHJldHVybiBvcHRzW1wicHJldHR5XCJdID8gXCJcXG5cIit3KyBzICsgXCJcXG5cIiArd2U6IHM7XG4gICAgfTtcblxuICAgIGRvcHRzID0gb3B0c0NvcHkoZG9wdHMsb3B0aW9ucyk7XG5cbiAgICBkb3B0c1tcImluZGVudFwiXSsrO1xuXG4gICAgdmFyIHM9XCJcIiwgdD1cIlwiLGE9e30sYz1bXSxpO1xuXG4gICAgc3dpdGNoIChfdG8oZCkpIHtcbiAgICAgICAgY2FzZSBcImRhdGVcIjpcbiAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgICAgcz1TdHJpbmcoZCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZmFsbHRocm91Z2hcbiAgICAgICAgY2FzZSBcInN0cmluZ1wiOiAgICBcbiAgICAgICAgICAgIHM9ZDtcbiAgICAgICAgICAgIHJldHVybiBvdXRGbihzLGRvcHRzKTsgLy8gTm90ZSByZXR1cm4gc3RhdGVtZW50IGhlcmUuLi4gXG4gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5yZWFjaGFibGVcbiAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCIgOlxuICAgICAgICAgICAgcyA9IGJ3LmJ1aWxkSFRNTE9ialN0cmluZyhkKCksZG9wdHMpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJhcnJheVwiOlxuXG4gICAgICAgICAgICBpZiAoKF90byhkWzBdKSA9PSBcInVuZGVmaW5lZFwiKSB8fCBkLmxlbmd0aCAhPSAzKVxuICAgICAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICAgICAgdCA9IF90byhkWzBdKSAhPSBcInVuZGVmaW5lZFwiID8gZFswXSA6dDtcbiAgICAgICAgICAgIGEgPSBfdG8oZFsxXSkgIT0gXCJ1bmRlZmluZWRcIiA/IGRbMV0gOmE7XG4gICAgICAgICAgICBjID0gX3RvKGRbMl0pICE9IFwidW5kZWZpbmVkXCIgPyBkWzJdIDpjO1xuICAgICAgICAgICAgdCA9IF90byh0KSAgICA9PSBcImZ1bmN0aW9uXCIgID8gdCgpICA6dDtcbiAgICAgICAgICAgIGEgPSBfdG8oYSkgICAgPT0gXCJmdW5jdGlvblwiICA/IGEoKSAgOmE7XG4gICAgICAgICAgICBjID0gX3RvKGMpICAgID09IFwiZnVuY3Rpb25cIiAgPyBjKCkgIDpjO1xuICAgICAgICAgICAgYyA9IF90byhjKSAgICAhPSBcImFycmF5XCIgICAgID8gW2NdICA6YztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgICAgICB0ID0gX3RvKGRbXCJ0XCJdKSAgICAgICAgID09IFwiZnVuY3Rpb25cIiA/IGRbXCJ0XCJdKCkgICAgICAgOiB0O1xuICAgICAgICAgICAgdCA9IF90byhkW1widGFnXCJdKSAgICAgICA9PSBcImZ1bmN0aW9uXCIgPyBkW1widGFnXCJdKCkgICAgIDogdDtcbiAgICAgICAgICAgIHQgPSBfdG8oZFtcInRcIl0pICAgICAgICAgPT0gXCJzdHJpbmdcIiAgID8gZFtcInRcIl0gICAgICAgICA6IHQ7ICBcbiAgICAgICAgICAgIHQgPSBfdG8oZFtcInRhZ1wiXSkgICAgICAgPT0gXCJzdHJpbmdcIiAgID8gZFtcInRhZ1wiXSAgICAgICA6IHQ7ICBcblxuICAgICAgICAgICAgYSA9IF90byhkW1wiYVwiXSkgICAgICAgICA9PSBcImZ1bmN0aW9uXCIgPyBkW1wiYVwiXSgpICAgICAgIDogYTtcbiAgICAgICAgICAgIGEgPSBfdG8oZFtcImF0clwiXSkgICAgICAgPT0gXCJmdW5jdGlvblwiID8gZFtcImF0clwiXSgpICAgICA6IGE7XG4gICAgICAgICAgICBhID0gX3RvKGRbXCJhXCJdKSAgICAgICAgID09IFwib2JqZWN0XCIgICA/IGRbXCJhXCJdICAgICAgICAgOiBhO1xuICAgICAgICAgICAgYSA9IF90byhkW1wiYXRyXCJdKSAgICAgICA9PSBcIm9iamVjdFwiICAgPyBkW1wiYXRyXCJdICAgICAgIDogYTtcbiAgICAgICAgICAgIHN3aXRjaCAoX3RvKGRbXCJjXCJdKSkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiIDogXG4gICAgICAgICAgICAgICAgICAgIGMgPSBkW1wiY29udGVudFwiXSgpOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiYXJyYXlcIiA6IFxuICAgICAgICAgICAgICAgICAgICBjID0gZFtcImNvbnRlbnRcIl07IGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGMgPSBbZFtcImNvbnRlbnRcIl1dO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3dpdGNoIChfdG8oZFtcImNcIl0pKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCIgOiBcbiAgICAgICAgICAgICAgICAgICAgYyA9IGRbXCJjXCJdKCk7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJhcnJheVwiIDogXG4gICAgICAgICAgICAgICAgICAgIGMgPSBkW1wiY1wiXTsgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgYyA9IFtkW1wiY1wiXV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGJ3LmxvZyhcImJ3Lmh0bWw6OiBlcnJvciBpbiB0eXBlXCIpO1xuICAgIH1cbiAgICBcbiAgICBzKz0gXCI8XCIgKyB0IDtcbiAgICBmb3IgKGkgaW4gYSkgeyBcbiAgICAgICAgcys9XCIgXCIrIFN0cmluZyhpKStcIj1cXFwiXCIgKyBTdHJpbmcoYVtpXSkgK1wiXFxcIlwiO1xuICAgIH1cbiAgICBzKz0gXCI+XCI7XG4gICAgLy9jb25zb2xlLmxvZyh0LGEsYyk7XG4gICAgZm9yIChpPTA7IGk8Yy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgX2MgPSBcIlwiO1xuXG4gICAgICAgIHN3aXRjaChfdG8oY1tpXSkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgICAgICAgIF9jID0gY1tpXSgpOyAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1mYWxsdGhyb3VnaFxuICAgICAgICAgICAgY2FzZSBcIm9iamVjdFwiOiAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWZhbGx0aHJvdWdoXG4gICAgICAgICAgICBjYXNlIFwiYXJyYXlcIiA6XG4gICAgICAgICAgICBfYyA9IGJ3Lmh0bWwoY1tpXSxkb3B0cyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBfYyA9IFN0cmluZyAoY1tpXSk7XG4gICAgICAgIH1cbiAgICAgICAgcys9IF9jO1xuICAgIH1cbiAgICBzKz0gXCI8L1wiICsgdCArIFwiPlwiO1xuXG4gICAgcmV0dXJuIG91dEZuKHMsZG9wdHMpO1xufTtcblxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuYncuaHRtbGEgPSBmdW5jdGlvbiAobGlzdERhdGEsb3B0aW9ucykge1xuLyoqICBcbmJ3Lmh0bWxhKGxpc3REYXRhLG9wdGlvbnMpICBcblxubGlzdERhdGEgaXMgYSBzaW5nbGUgZGltIGFycmF5IG9mIGJ3Lmh0bWwoKSBjb21wYXRpYmxlIGNub3N0cnVjdHNcblxuKi9cbiAgICBpZiAoX3RvKGxpc3REYXRhKSAhPSBcImFycmF5XCIpXG4gICAgICAgIHJldHVybiBidy5odG1sKGxpc3REYXRhLG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIGxpc3REYXRhLm1hcCggZnVuY3Rpb24oeCkge3JldHVybiBidy5odG1sKHgsb3B0aW9ucyk7fSkuam9pbihcIlwiKTsgXG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuYncuaHRtbExpc3QgPSBmdW5jdGlvbiAobGlzdERhdGEsIGxpc3RUeXBlLCBhdHIsIGF0cmkpIHtcbi8qKlxuYncubWFrZUhUTUxMaXN0IChsaXN0RGF0YSwgbGlzdFR5cGUsIGF0dHJpYnV0ZXt9LCBhdHRyaWJ1dGVfZm9yX2VhY2hfaXRlbXMge30pXG5cbmxpc3RUeXBlID0gXCJ1bFwiIHwgXCJvbFwiXG5saXN0RGF0YSA9IFsgaXRlbTEsIGl0ZW0yLCBpdGVtMywgLi4gXVxuXG4gKi9cbiAgICBpZiAoX3RvKGxpc3REYXRhKSAhPSBcImFycmF5XCIpXG4gICAgICAgIHJldHVybiBcIlwiO1xuXG4gICAgaWYgKGxpc3REYXRhLmxlbmd0aCA8IDEpXG4gICAgICAgIHJldHVybiBcIlwiO1xuXG4gICAgYXRyICA9IF90b2EoYXRyLFwib2JqZWN0XCIsYXRyLHt9KTtcbiAgICBhdHJpID0gX3RvYShhdHIsXCJvYmplY3RcIixhdHIse30pO1xuXG4gICAgdmFyIGxjID0gbGlzdERhdGEubWFwKGZ1bmN0aW9uKHgpe3JldHVybiBidy5odG1sKFtcImxpXCIsYXRyaSx4XSk7fSk7XG4gICAgbGlzdFR5cGUgPSBbXCJ1bFwiLFwib2xcIl0uaW5kZXhPZihsaXN0VHlwZSk9PSAtMSA/IFwib2xcIiA6IGxpc3RUeXBlO1xuICAgIHJldHVybiBidy5odG1sIChbbGlzdFR5cGUsYXRyLGxjXSk7XG59O1xuXG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5idy5jbGFzc1N0ckFkZERlbCA9IGZ1bmN0aW9uIChjbGFzc0RhdGEsY2xhc3Nlc1RvQWRkLGNsYXNzZXNUb0RlbCkge1xuLyoqIFxuY2xhc3NTdHJBZGREZWwgKGNsYXNzRGF0YSwgY2xhc3Nlc1RvQWRkLCBjbGFzc2VzVG9EZWwpXG5mb3IgQ1NTIGNsYXNzZXNcblxudGFrZXMgYSB2YWxpZCBjbGFzc0RhdGEgc3RyaW5nIGUuZy4gXCJteWNsYXNzMSBteWNsYXNzMlwiIGV0Y1xuXG5hbmQgYWRkcy9kZWwgY2xhc3NlcyBmcm9tIGNsYXNzZXNUb0FkZCBzdHJpbmcgaWYgdGhleSBhcmUgbm90IGFscmVhZHkgcHJlc2VudCBpbiBjbGFzc0RhdGFcblxuY2xhc3NTdHJBZGREZWwoXCJjbGFzczEgY2xhc3MyXCIsIFwiY2xhc3MzXCIpID09PiBcImNsYXNzMSBjbGFzczIgY2xhc3MzXCJcbmNsYXNzU3RyQWRkRGVsKFwiY2xhc3MxIGNsYXNzMlwiLCBcImNsYXNzMyBjbGFzczRcIikgPT0+IFwiY2xhc3MxIGNsYXNzMiBjbGFzczMgY2xhc3M0XCJcbmNsYXNzU3RyQWRkRGVsKFwiY2xhc3MxIGNsYXNzMlwiLCBcImNsYXNzMiBjbGFzczNcIikgPT0+IFwiY2xhc3MxIGNsYXNzMiBjbGFzczNcIiAvLyBkb2Vzbid0IGFkZCBjbGFzczIgYWdhaW5cblxuY2xhc3NTdHJBZGREZWwoXCJjbGFzczEgY2xhc3MyXCIsIFwiY2xhc3MgMiBjbGFzczNcIixjbGFzczEpID09PiBcImNsYXNzMiBjbGFzczNcIiAvLyBkb2Vzbid0IGFkZCBjbGFzczIgYWdhaW4uIHJlbW92ZXMgY2xhc3MxXG5jbGFzc1N0ckFkZERlbChcImNsYXNzMSBjbGFzczJcIiwgXCJcIixjbGFzczEpID09PiBcImNsYXNzMlwiIC8vICByZW1vdmVzIGNsYXNzMVxuXG5jbGFzc0RhdGEsIGNsYXNzZXNUb0FkZCwgY2xhc3Nlc1RvRGVsIG1heSBiZSBzdHJpbmdzIChzcGFjZSBkZWxpbWl0ZWQpIG9yIGFycmF5cyBvZiBzdHJpbmdzIChbXCJjMVwiLCBcImMyXCJdLCBbXCJjM1wiLCBcImM0XCJdLCBbXCJjMVwiXSlcbiAqL1xuIFxuICAgIHZhciB0bm9ybSAgICA9IGZ1bmN0aW9uKHgpe3g9YncudG9hKHgsXCJ1bmRlZmluZWRcIixbXSx4KTsgcmV0dXJuIChidy50byh4KT09XCJhcnJheVwiKT8geCA6IHgudG9TdHJpbmcoKS50cmltKCkuc3BsaXQoL1xccysvaWcpO307XG4gICAgdmFyIGMgID0gdG5vcm0oY2xhc3NEYXRhKTtcbiAgICB2YXIgY2EgPSB0bm9ybShjbGFzc2VzVG9BZGQpO1xuICAgIHZhciBjZCA9IHRub3JtKGNsYXNzZXNUb0RlbCk7XG4gICAgcmV0dXJuIGJ3LmFycmF5Qk5vdEluQShjZCxjLmNvbmNhdChjYSkpLmpvaW4oXCIgXCIpLnRyaW0oKS5yZXBsYWNlKC9cXHMrL2lnLFwiIFwiKTtcblxufTtcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5idy5jbGFzc1N0clRvZ2dsZSA9IGZ1bmN0aW9uIChjbGFzc0RhdGEsIGNsYXNzZXNUb1RvZ2dsZSkge1xuLyoqIFxuICAgIGNsYXNzU3RyVG9nZ2xlIChjbGFzc0RhdGEsIGNsYXNzZXNUb1RvZ2dsZSlcblxuICAgIHRvZ2dsZXMgY2xhc3NlcyBsaXN0ZWQgaW4gY2xhc3Nlc1RvVG9nZ2xlXG5cbiAgICB0YWtlcyBhIHZhbGlkIGNsYXNzRGF0YSBzdHJpbmcgZS5nLiBcIm15Y2xhc3MxIG15Y2xhc3MyXCIgZXRjXG4qL1xuICAgIHZhciB0bm9ybWEgICAgPSBmdW5jdGlvbih4KXt4PWJ3LnRvYSh4LFwidW5kZWZpbmVkXCIsW10seCk7IHJldHVybiAoYncudG8oeCk9PVwiYXJyYXlcIik/IHggOiB4LnRvU3RyaW5nKCkudHJpbSgpLnNwbGl0KC9cXHMrL2lnKTt9O1xuICAgIHZhciBjICAgPSB0bm9ybWEoY2xhc3NEYXRhKTtcbiAgICB2YXIgdCAgID0gdG5vcm1hKGNsYXNzZXNUb1RvZ2dsZSk7XG4gICAgcmV0dXJuIGJ3LmNsYXNzU3RyQWRkRGVsKGNsYXNzRGF0YSxidy5hcnJheUJOb3RJbkEoYyx0KSxidy5hcnJheUJpbkEoYyx0KSk7XG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuYncuaHRtbFRhYnMgPSBmdW5jdGlvbih0YWJEYXRhLCBvcHRzKSB7XG4vKiogXG5idy5tYWtlSFRNTFRhYnModGFiRGF0YSwgYXRyKVxudGFiRGF0YSA9IFtbdGFiMVRpdGxlLHRhYjEtY29udGVudF0sIFt0YWIyVGl0bGUsdGFiMi1jb250ZW50XSwgW3RhYjNUaXRsZSx0YWIzLWNvbnRlbnRdXVxuICovXG4gICAgaWYgKF90byh0YWJEYXRhKSAhPSBcImFycmF5XCIpXG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIGlmICh0YWJEYXRhLmxlbmd0aCA8IDEpXG4gICAgICAgIHJldHVybiBcIlwiO1xuXG4gICAgdmFyIGRvcHRzID0ge1xuICAgICAgICBhdHIgICAgIDoge1wiY2xhc3NcIjpcIlwifSwgICAgLy9jb250YWluZXIge31cbiAgICAgICAgdGFiX2F0ciA6IHtcImNsYXNzXCI6XCJcIn0sICAgIC8vYXR0cmlidXRzIGZvciBlYWNoIHRhYiBjb250YWluZXJcbiAgICAgICAgdGFiY19hdHI6IHtcImNsYXNzXCI6XCJcIn0sICAgIC8vYXR0cmlidXRlcyBmb3IgZWFjaCB0YWItY29udGVudCBhcmVhIGNvbnRhaW5lclxuICAgICAgICBpbmRlbnQgIDogXCJcIiwgICAgICAgICAgICAvL2luZGVudCBzdHJpbmcgZm9yIHByZXR0eSBwcmludGluZ1xuICAgICAgICBwcmV0dHkgIDogZmFsc2VcbiAgICB9O1xuICAgIGRvcHRzID0gb3B0c0NvcHkoZG9wdHMsb3B0cyk7XG5cbiAgICB2YXIgdGkgPSB0YWJEYXRhLm1hcChmdW5jdGlvbih4KXtyZXR1cm4gW1wibGlcIix7XCJjbGFzc1wiOlwiYnctdGFiLWl0ZW1cIiwgXCJvbmNsaWNrXCI6XCJidy5zZWxlY3RUYWJDb250ZW50KHRoaXMpXCJ9LHhbMF1dO30pO1xuICAgIHZhciB0YyA9IHRhYkRhdGEubWFwKGZ1bmN0aW9uKHgpe3JldHVybiBbXCJkaXZcIix7XCJjbGFzc1wiOlwiYnctdGFiLWNvbnRlbnRcIn0seFsxXV07fSk7XG4gICAgXG4gICAgdGlbMF1bMV1bXCJjbGFzc1wiXSA9IGJ3LmNsYXNzU3RyQWRkRGVsKHRpWzBdWzFdW1wiY2xhc3NcIl0sIFwiYnctdGFiLWFjdGl2ZVwiKTtcbiAgICB0Y1swXVsxXVtcImNsYXNzXCJdID0gYncuY2xhc3NTdHJBZGREZWwodGNbMF1bMV1bXCJjbGFzc1wiXSwgXCJidy1zaG93XCIpO1xuXG4gICAgZG9wdHNbXCJhdHJcIiAgICAgXVtcImNsYXNzXCJdID0gYncuY2xhc3NTdHJBZGREZWwgKGRvcHRzW1wiYXRyXCIgICAgIF1bXCJjbGFzc1wiXSxcImJ3LXRhYi1jb250YWluZXJcIik7XG4gICAgZG9wdHNbXCJ0YWJfYXRyXCIgXVtcImNsYXNzXCJdID0gYncuY2xhc3NTdHJBZGREZWwgKGRvcHRzW1widGFiX2F0clwiIF1bXCJjbGFzc1wiXSxcImJ3LXRhYi1pdGVtLWxpc3RcIik7XG4gICAgZG9wdHNbXCJ0YWJjX2F0clwiXVtcImNsYXNzXCJdID0gYncuY2xhc3NTdHJBZGREZWwgKGRvcHRzW1widGFiY19hdHJcIl1bXCJjbGFzc1wiXSxcImJ3LXRhYi1jb250ZW50LWxpc3RcIik7XG5cbiAgICByZXR1cm4gYncuaHRtbChbXCJkaXZcIiwgZG9wdHNbXCJhdHJcIl0sW1tcInVsXCIsZG9wdHNbXCJ0YWJfYXRyXCJdLHRpXSxbXCJkaXZcIixkb3B0c1tcInRhYmNfYXRyXCJdLHRjXV1dKTtcbn07XG5cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuYncuaHRtbFRhYmxlID0gZnVuY3Rpb24oZGF0YSxvcHRzKSB7ICAgIFxuLyoqIFxuYncubWFrZUhUTUxUYWJsZVN0ciAoZGF0YSwgb3B0aW9ucylcblxuQ3JlYXRlcyBhbiBIVE1MIHRhYmxlIGVsZW1lbnQgKGFzIGEgc3RyaW5nKSBmcm9tIHJhdyBhcnJheSBkYXRhLlxuXG52YXIgdGFibGUxID0gXG4gICAgW1tcInRoaXNcIiwgXCJ0aGF0XCIsIFwidGhlXCIsIFwib3RoZXJcIl0sWyw2LDQsMCw0XSxbMyw1LDEsNF0sWzEsMiw0LDVdLFtcIjJ1MzBcIixcIjIzXCIsZnVuY3Rpb24oKXtyZXR1cm4gODM0fSwyM11dO1xuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJteVRhYmxlRGl2XCIpID0gYncubWFrZUhUTUxUYWJsZVN0cih0YWJsZTEpOyAgLy8gZGlzcGxheXMgc2ltcGxlIHRhYmxlLlxuXG52YXIgb3B0aW9ucyA9IHtcbiAgICB1c2VGaXJzdFJvd0FzSGVhZGVyczpmYWxzZSwgICAvLyBmaXJzdCByb3cgaXMgZGF0YVxuICAgIGNhcHRpb246XCJJbXBvcnRhbnQgVGFibGVcIiAgICAgLy8gY2FwdGlvblxuICAgIHNvcnRhYmxlOiBmYWxzZSB8IHRydWUgfCBmdW5jdGlvbiAgLy8gbWFrZSB0YWJsZSBzb3J0YWJsZSAoZmFsc2UgaXMgZGVmYXVsdCwgaWYgdHJ1ZSB1c2VzIGJ3IGJ1aWx0LWluIHNvcnQsIGVsc2Ugc3VwcGx5IGZ1bmN0aW9uKVxufVxuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJteVRhYmxlRGl2XCIpID0gYncuaHRtbFRhYmxlKHRhYmxlMSwgb3B0aW9ucyk7ICBcblxuT3B0aW9uczpcbiAgICAgICAgdXNlRmlyc3RSb3dBc0hlYWRlcnMgOiB0cnVlOyAgIC8vIFxuICovXG4gICAgaWYgKChfdG8oZGF0YSkgIT0gXCJhcnJheVwiKSB8fCAoZGF0YS5sZW5ndGggPCAxKSlcbiAgICAgICAgcmV0dXJuIFwiXCI7XG5cbiAgICAvL2RlZmF1bHQgb3B0aW9uc1xuICAgIHZhciBkb3B0cyA9IHtcbiAgICAgICAgdXNlRmlyc3RSb3dBc0hlYWRlcnMgOiB0cnVlLFxuICAgICAgICBhdHIgICAgICAgICA6IHt9LCAgLy8gYXR0cmlidXRlcyBmb3IgdGFibGUgb2JqZWN0IGNhbiB1c2UgZnVuY3Rpb24oKSBmb3IgZHluYW1pY1xuICAgICAgICB0aGVhZF9hdHIgICA6IHt9LCAgLy8gYXR0cmlidXRlcyBmb3IgdGFibGUgaGVhZCBzZWN0aW9uXG4gICAgICAgIHRoX2F0ciAgICAgIDoge30sICAvLyBhdHRyaWJ1dGVzIGZvciBoZWFkZXIgY2VsbHMsIFxuICAgICAgICB0Ym9keV9hdHIgICA6IHt9LCAgLy8gYXR0dHJpYnV0cyBmb3IgdGFibGUgYm9keSBzZWN0aW9uXG4gICAgICAgIHRyX2F0ciAgICAgIDoge30sICAvLyBhdHRyaWJ1dGVzIGZvciByb3dzXG4gICAgICAgIHRkX2F0ciAgICAgIDoge30sICAvLyBhdHRyaWJ1dGVzIGZvciBjZWxsc1xuICAgICAgICBjYXB0aW9uICAgICA6IFwiXCIsICAvLyBvcHRpb25hbCB0YWJsZSBjYXB0aW9uIChjYW4gYmUgSFRNTCwgb3IgZnVuY3Rpb24sIGJ3LmJ1aWxkSFRNTE9ialN0cmluZyBjb21wYXRpYmxlIGRhdGEpXG4gICAgICAgIHNvcnRhYmxlICAgIDogZmFsc2UvLyBtYWtlIHRhYmxlIHNvcnRhYmxlLiAgaWYgdHJ1ZSwgdXNlcyBkZWZhdWx0IHNvcnQsIG90aGVyd2lzZSBwYXNzIGZ1bmN0aW9uIHRvIHNvcnQgdGFibGUuIGYoYSxiLG9wdGlvbmFsQ29sdW1uTnVtYmVyKVxuICAgIH07XG5cbiAgICB2YXIgaT0wLGhlYWQ9XCJcIixib2R5PVwiXCIscixfaHM9YncuaHRtbDtcbiAgICBkb3B0cyA9IG9wdHNDb3B5KGRvcHRzLG9wdHMpO1xuICAgIC8qXG4gICAgZm9yIChpIGluIG9wdHMpXG4gICAgICAgIGRvcHRzW2ldID0gb3B0c1tpXTsgIC8vIG92ZXJpZGUgZGVmYXVsdHNcbiAgICAqL1xuXG4gICAgaWYgKF90byhkb3B0cy50aF9hdHJbXCJvbmNsaWNrXCJdKSA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgYncubG9nKFwidG9kbyBidWlsZEhUTUx0YWJsZSBmdW5jdGlvbiBkaXNwYXRjaFwiKTsgICAgICBcbiAgICB9XG4gICAgXG4gICAgaWYgKGRvcHRzLnNvcnRhYmxlID09IHRydWUpIHtcbiAgICAgICAgZG9wdHMudGhfYXRyW1wib25jbGlja1wiXSA9IFwiYncuc29ydFRhYmxlRGlzcGF0Y2godGhpcylcIjtcbiAgICAgICAgaWYgKFwiY2xhc3NcIiBpbiBkb3B0cy50aF9hdHIpXG4gICAgICAgICAgICBkb3B0cy50aF9hdHJbXCJjbGFzc1wiXSArPSAgZG9wdHMudGhfYXRyW1wiY2xhc3NcIl0uc3BsaXQoL1sgXSsvKS5pbmRleE9mKFwiYnctdGFibGUtc29ydC14eGFcIikgPDAgPyBcIiBidy10YWJsZS1zb3J0LXh4YVwiIDogXCJcIjtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgZG9wdHMudGhfYXRyW1wiY2xhc3NcIl0gPSBcImJ3LXRhYmxlLXNvcnQteHhhXCI7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAoX3RvKGRvcHRzLnNvcnRhYmxlKSA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHZhciBzZmlkID0gYncuZnVuY1JlZ2lzdGVyKGRvcHRzLnNvcnRhYmxlKTtcbiAgICAgICAgICAgIGRvcHRzLnRoX2F0cltcIm9uY2xpY2tcIl0gPSBidy5mdW5jR2V0RGlzcGF0Y2hTdHIoc2ZpZCxcInRoaXNcIik7ICAgICAgIFxuICAgICAgICAgICAgYncubG9nKFwidG9kbyBmdW5jdGlvbiBtYWtlSFRNTCBzb3J0IGZ1bmN0aW9uIGRpc3BhdGNoXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRvcHRzW1widXNlRmlyc3RSb3dBc0hlYWRlcnNcIl0pIHtcbiAgICAgICAgaGVhZD1kYXRhWzBdLm1hcChmdW5jdGlvbih4KXtyZXR1cm4gX2hzKFtcInRoXCIsZG9wdHMudGhfYXRyLHhdKTt9KS5qb2luKFwiXCIpO1xuICAgICAgICBoZWFkPSBfaHMoW1widHJcIixkb3B0cy50cl9hdHIsaGVhZF0pO1xuICAgICAgICBpPTE7XG4gICAgfVxuICAgIGVsc2VcbiAgICAgICAgaT0wO1xuICAgIGhlYWQgPSBidy5odG1sKFtcInRoZWFkXCIsZG9wdHMudGhlYWRfYXRyLGhlYWRdKTtcblxuICAgIGZvciAoOyBpPGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgciA9IGRhdGFbaV0ubWFwKGZ1bmN0aW9uKHgpe3JldHVybiBfaHMoW1widGRcIixkb3B0cy50ZF9hdHIseF0pO30pLmpvaW4oXCJcIik7IFxuICAgICAgICBib2R5Kz0gX2hzKFtcInRyXCIsZG9wdHMudHJfYXRyLHJdKTtcbiAgICB9XG4gICAgYm9keSA9IGJ3Lmh0bWwoW1widGJvZHlcIixkb3B0cy50Ym9keV9hdHIsYm9keV0pO1xuICAgIC8vY29uc29sZS5sb2coaGVhZCwnXFxuJyxib2R5KTtcbiAgICBkb3B0cy5jYXB0aW9uID0gZG9wdHMuY2FwdGlvbiA9PSBcIlwiID8gXCJcIiA6ICBfaHMoW1wiY2FwdGlvblwiLHt9LGRvcHRzLmNhcHRpb25dKTtcbiAgICByZXR1cm4gX2hzKFtcInRhYmxlXCIsZG9wdHMuYXRyLFtkb3B0cy5jYXB0aW9uLGhlYWQsYm9keV1dKTtcbn07XG5cblxuYncuaHRtbEFjY29yZGlhbiAgID0gZnVuY3Rpb24gKGRhdGEsIG9wdHMpIHtcbi8qKiBcbiAgICBodG1sQWNjb3JkaWFuIFxuICAgIFxuICAgIFtbZGF0YS10aXRsZSwgZGF0YS10by1zaG93LCB7c2hvdzogdHJ1ZXxmYWxzZSwgY2xpY2tTaG93OiB0cnVlfGZhO3NlfV0sIC8vIFRPRE86IG9wdGlvbmFsIDNyZCBlbGVtZW50XG4gICAgIFsuLi5dXVxuXG4gICAgZGF0YS10aXRsZSBhbmQgZGF0YS10by1zaG93IGNhbiBiZSBzdHJpbmdzIG9yIGFueSB2YWxpZCBidy5odG1sKCkgY29uc3RydWN0c1xuICovXG4gICAgdmFyIHMgPSBcIlwiO1xuICAgIGlmIChfdG8oZGF0YSkgIT09IFwiYXJyYXlcIilcbiAgICAgICAgcmV0dXJuIHM7XG5cbiAgICB2YXIgZG9wdHMgPSB7XG4gICAgICAgIGF0ciAgIDogeyBcImNsYXNzXCI6XCJidy1hY2NvcmRpYW4tY29udGFpbmVyXCJ9LCAvLyBkaXYgZm9yIG92ZXJhbGwgYWNjb3JkaWFuXG4gICAgICAgIGF0cl9oIDogeyBcIm9uY2xpY2tcIjpcImJ3LkRPTUNsYXNzVG9nZ2xlKHRoaXMubmV4dFNpYmxpbmcsJ2J3LWhpZGUnKVwifSwgLy8gZGl2IHdyYXBwaW5nIGVhY2ggaGVhZGVyXG4gICAgICAgIGF0cl9jIDogey8qXCJvbmNsaWNrXCI6XCJidy5ET01DbGFzc1RvZ2dsZSh0aGlzLCdidy1oaWRlJylcIiwqLyBcImNsYXNzXCI6XCJidy1oaWRlXCJ9IC8vIGRpdiB3cmFwcGluZyBlYWNoIGNvbnRlbnRcbiAgICB9O1xuICAgIGRvcHRzID0gb3B0c0NvcHkoZG9wdHMsb3B0cyk7XG4gICAgZG9wdHNbXCJhdHJfaFwiXVtcIm9uY2xpY2tcIl09XCJidy5ET01DbGFzc1RvZ2dsZSh0aGlzLm5leHRTaWJsaW5nLCAnYnctaGlkZScpXCI7XG5cbiAgICBzID0gZGF0YS5tYXAoZnVuY3Rpb24oeCl7cmV0dXJuIGJ3Lmh0bWwoW1wiZGl2XCIsZG9wdHNbXCJhdHJfaFwiXSx4WzBdXSkrYncuaHRtbChbXCJkaXZcIixkb3B0c1tcImF0cl9jXCJdLHhbMV1dKTt9KS5qb2luKFwiXCIpO1xuICAgIHMgPSBidy5odG1sKFtcImRpdlwiLGRvcHRzW1wiYXRyXCJdLHNdKTtcbiAgICByZXR1cm4gcztcbn07XG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuYncuZ2V0RmlsZSAgPSBmdW5jdGlvbiAoZm5hbWUsY2FsbGJhY2tfZm4sIG9wdGlvbnMpIHtcbi8qKiBcbmJ3LmdldEZpbGUoZmlsZW5hbWUsY2FsbGJhY2spIFxuQXR0ZW1wdCB0byBsb2FkIGEgZmlsZS5cbldvcmtzIGJvdGggY2xpZW50IHNpZGUgYW5kIGkgbm9kZWpzLlxuICovXG4gICAgdmFyIGRvcHMgPSB7XG4gICAgICAgIHBhcnNlciA6IFwicmF3XCIgIC8vIHZhbGlkIHR5cGVzIGFyZSBcInJhd1wiLCBcIkpTT05cIiwgZnV0dXJlIFwiQ1NWXCIsIFwiVFNWXCIgb3IgcGFyc2VyRnVuY3Rpb25cbiAgICB9O1xuXG4gICAgZG9wcyA9IG9wdHNDb3B5KGRvcHMsb3B0aW9ucyk7XG5cbiAgICBpZiAoX3RvKGZuYW1lKSAhPSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiBcImludmFsaWQgZmlsZW5hbWVcIjtcbiAgICB9XG5cbiAgICB2YXIgcHJzID0gKGRvcHNbXCJwYXJzZXJcIl09PVwiSlNPTlwiKSA/IEpTT04ucGFyc2UgOiBmdW5jdGlvbihzKXtyZXR1cm4gczt9O1xuXG5cbiAgICBpZiAoYncuaXNOb2RlSlMoKSA9PXRydWUpIHtcbiAgICAgICAgdmFyIGZzID0gcmVxdWlyZShcImZzXCIpO1xuICAgICAgICBmcy5yZWFkRmlsZShmbmFtZSwgXCJ1dGY4XCIsIGZ1bmN0aW9uIChlcnIsIGRhdGEpIHsgaWYgKGVycikgdGhyb3cgZXJyOyBjYWxsYmFja19mbihwcnMoZGF0YSkpOyB9KTtcbiAgICB9XG4gICAgZWxzZSAvLyBydW5uaW5nIGluIGEgYnJvd3NlciBcbiAgICB7ICAgICAgICAgXG4gICAgICAgIHZhciB4ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgIHgub3ZlcnJpZGVNaW1lVHlwZShcImFwcGxpY2F0aW9uL2pzb25cIik7XG4gICAgICAgIHgub3BlbihcIkdFVFwiLCBmbmFtZSwgdHJ1ZSk7IFxuICAgICAgICB4Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IFxuICAgICAgICAgICAgZnVuY3Rpb24gKCkge2lmICh4LnJlYWR5U3RhdGUgPT0gNCAmJiB4LnN0YXR1cyA9PSBcIjIwMFwiKSB7Y2FsbGJhY2tfZm4ocHJzKHgucmVzcG9uc2VUZXh0KSk7fX07XG4gICAgICAgIHguc2VuZChudWxsKTtcbiAgICB9XG4gICAgcmV0dXJuIFwiQldfT0tcIjtcbn07XG5cbmJ3LmdldEpTT05GaWxlID0gZnVuY3Rpb24gKGZuYW1lLGNhbGxiYWNrX2ZuKSB7IHJldHVybiBidy5nZXRGaWxlKGZuYW1lLGNhbGxiYWNrX2ZuLHtcInBhcnNlclwiOlwiSlNPTlwifSk7fTtcblxuYncuY29weVRvQ2xpcGJvYXJkID0gZnVuY3Rpb24oZGF0YSkge1xuLyoqIFxuYncuY29weVRvQ2xpcGJvYXJkXG5zaW1wbGUgY29weSBjb250ZW50IHRvIGNsaXBib2FyZC4gIChicm93c2VyIG9ubHkpXG4qL1xuXG4vKlxudmFyIHRlbXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG52YXIgYiA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiYm9keVwiKVswXTtcbmIuYXBwZW5kQ2hpbGQodGVtcCk7XG5cbnRlbXAuaW5uZXJUZXh0ID0gZGF0YTtcbnRlbXAuc2VsZWN0KCk7XG5kb2N1bWVudC5leGVjQ29tbWFuZChcImNvcHlcIik7XG50ZW1wLnJlbW92ZSgpO1xuXG5cbiAgICBcbiAgICB2YXIgdGVtcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImJvZHlcIilbMF0uYXBwZW5kKHRlbXApO1xuICAgIHRlbXAuaW5uZXJIVE1MID0gZGF0YTtcbiAgICAvL3RlbXAudmFsKGRhdGEpLnNlbGVjdCgpO1xuICAgIFxuICAgIC8vdmFyIHRlbXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgLy92YXIgYiA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiYm9keVwiKVswXTtcbiAgICAvL2IuYXBwZW5kQ2hpbGQodGVtcCk7XG4gICAgLy90ZW1wLmlubmVyVGV4dCA9IGRhdGE7XG4gICAgdGVtcC5zZWxlY3QoKTtcbiAgICBkb2N1bWVudC5leGVjQ29tbWFuZChcImNvcHlcIik7XG4gICAgdGVtcC5yZW1vdmUoKTtcbiovXG4gICAgaWYgKGJ3LmlzTm9kZUpTKCkpXG4gICAgICAgIHJldHVybjtcbiAgICB2YXIgIGxpc3RlbmVyID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgZS5jbGlwYm9hcmREYXRhLnNldERhdGEoXCJ0ZXh0L2h0bWxcIiwgZGF0YSk7XG4gICAgICAgIGUuY2xpcGJvYXJkRGF0YS5zZXREYXRhKFwidGV4dC9wbGFpblwiLCBkYXRhKTtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH07XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNvcHlcIiwgbGlzdGVuZXIpO1xuICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKFwiY29weVwiKTtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY29weVwiLCBsaXN0ZW5lcik7XG59O1xuICAgIFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbmJ3LnNhdmVDbGllbnRGaWxlICAgPSBmdW5jdGlvbihmbmFtZSxkYXRhKSB7XG4vKiogXG5idy5zYXZlQ2xpZW50RmlsZShmbmFtZSxkYXRhKSBzYXZlcyBkYXRhIHRoZSBwcm9ncmFtIHRoZSBjbGllbnQgZW52aXJvbnRtbmV0XG4gICAgZm5hbWUgaXMgZmlsZW5hbWUgdG8gc2F2ZSBhc1xuICAgIGRhdGEgaXMgZGF0YSB0byBzYXZlLlxuXG4gICAgd29ya3MgYm90aCBpbiBub2RlIGFuZCBicm93c2VyLiAgICBcbiovXG4gICAgaWYgKGJ3LmlzTm9kZUpTKCkpIHtcbiAgICAgICAgdmFyIGZzID0gcmVxdWlyZShcImZzXCIpO1xuICAgICAgICBmcy53cml0ZUZpbGUoZm5hbWUsIGRhdGEsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gYncubG9nKGVycik7XG4gICAgICAgICAgICAgICAgYncubG9nKFwiZXJyb3Igc2F2aW5nIFwiLGZuYW1lLGRhdGEpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2UgeyAvLyB3ZSdyZSBpbiBhIGJyb3dzZXJcbiAgICAgICAgICAgIFxuICAgICAgICB2YXIgc2F2ZURhdGEgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSk7XG4gICAgICAgICAgICBhLnN0eWxlID0gXCJkaXNwbGF5OiBub25lXCI7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGRhdGEsIGZuYW1lKSB7XG4gICAgICAgICAgICAgICAgdmFyIGpzb24gPSBKU09OLnN0cmluZ2lmeShkYXRhKSxcbiAgICAgICAgICAgICAgICAgICAgYmxvYiA9IG5ldyBCbG9iKFtqc29uXSwge3R5cGU6IFwib2N0ZXQvc3RyZWFtXCJ9KSxcbiAgICAgICAgICAgICAgICAgICAgdXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgICAgICAgICAgICAgYS5ocmVmID0gdXJsO1xuICAgICAgICAgICAgICAgIGEuZG93bmxvYWQgPSBmbmFtZTtcbiAgICAgICAgICAgICAgICBhLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0oKSk7XG4gICAgICAgIHNhdmVEYXRhKGRhdGEsZm5hbWUpO1xuICAgIH1cbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vL1RpbWVycyAuLi4gY2xlYXIgLyByZWFkIC8gZml4ZWQgbnVtYmVyIG9mIGV2ZW50c1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gY3J1ZGUgcGVyZm9ybWFuY2UgbWVhc3VyZW1lbnRzXG52YXIgZ0JXVGltZSA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7IC8vZ2xvYmFsIGNsb3N1cmUgZm9yIHRpbWUuICAnY2F1c2Ugd2UgYWx3YXlzIHdhbnQgYSBnYncgZ2J3IHRpbWUgOilcbiBcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5idy5jbGVhclRpbWVyID0gZnVuY3Rpb24gKG1lc3NhZ2UpIHtcbi8qKiBcbmJ3LmNsZWFyVGltZXIoXCJtZXNzYWdlXCIpXG5XaGVuIGJpdHdyZW5jaCBsb2FkcyBpdHMgc3RhcnRzIGEgIHRpbWVyIHdoaWNoIGNhbiBiZSBjaGVja2VkIGF0IGFueSB0aW1lIGFzIGEgcmVmIHJ1bm5pbmcgKHNlZSBidy5yZWFkVGltZXIoKSkuICBcbmJ3LmNsZWFyVGltZXIoKSBjbGVhcnMgdGhlIHRpbWVyIHdpdGggb3B0aW9uYWwgbWVzc2FnZS5cbiAqL1xuICAgIGdCV1RpbWUgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpO1xuICAgIGlmIChfdG8obWVzc2FnZSkgIT0gXCJ1bmRlZmluZWRcIilcbiAgICAgICBidy5sb2dkKFN0cmluZyhtZXNzYWdlKSk7XG4gICAgcmV0dXJuIGdCV1RpbWU7XG59O1xuIFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbmJ3LnJlYWRUaW1lciA9IGZ1bmN0aW9uIChtZXNzYWdlKSB7XG4vKiogXG5idy5yZWFkVGltZXIoXCJtZXNzYWdlXCIpXG5XaGVuIGJpdHdyZW5jaCBsb2FkcyBpdHMgc3RhcnRzIGEgcGFnZSB0aW1lciB3aGljaCBjYW4gYmUgY2hlY2tlZCBmb3IgaG93IGxvbmcgdGhlIHBhZ2UgYXMgYmVlbiBydW5uaW5nLlxuICovXG4gICAgdmFyIGN0ID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKTtcbiAgICBpZiAoX3RvKG1lc3NhZ2UpICE9IFwidW5kZWZpbmVkXCIpXG4gICAgICAgYncubG9nZChTdHJpbmcobWVzc2FnZSkpO1xuICAgIHJldHVybiBjdC1nQldUaW1lOyBcbn07XG5idy5jbGVhclRpbWVyKCk7IC8vd2hlbiBidyBpcyBsb2FkZWQsIHdlIHN0YXJ0IHRoZSB0aW1lci5cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbmJ3LnNldEludGVydmFsWCA9IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVsYXksIG51bWJlcl9vZl9yZXBldGl0aW9ucykge1xuLyoqIFxuYncuc2V0SW50ZXJ2YWxYKGNhbGxiYWNrRm4sIGRlbGF5QnR3Q2FsbHMsIHJlcGV0aXRpb25zKVxuc2V0IGEgamF2YXNjcmlwdCB0aW1lciB0byBvbmx5IHJ1biBhIG1heCBvZiBOIHJlcGV0aW9ucy5cblxuRXhhbXBsZTpcbiAgICBidy5zZXRJbnRlcnZhbFgoZnVuY3Rpb24oeCl7Y29uc29sZS5sb2coeCl9LDEwMCw1KSBcbiAgICB0aGlzIHdpbGwgdGhlIGZ1bmN0aW9uIDUgdGltZXMgMTAwbXMgYXBhcnRcbiAqL1xuICAgIHZhciB4ID0gMDtcbiAgICB2YXIgaW50ZXJ2YWxJRCA9IHNldEludGVydmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY2FsbGJhY2soeCk7XG5cbiAgICAgICAgaWYgKCsreCA+PSBudW1iZXJfb2ZfcmVwZXRpdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsSUQpO1xuICAgICAgICB9XG4gICAgfSwgZGVsYXkpO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbmJ3LnJlcGVhdFVudGlsID0gZnVuY3Rpb24gKHRlc3RGbiwgc3VjY2Vzc0ZuLCBmYWlsRm4sIGRlbGF5LCBtYXhSZXBzLCBsYXN0Rm4pIHtcbi8qKiAgXG5idy5yZXBlYXRVbnRpbCgpXG5yZXBlYXRVbnRpbCBydW5zIHRoZSBzdXBwbGllZCB0ZXN0Rm4gZXZlcnkgZGVsYXkgbWlsbGlzZWNvbmRzIHVwIHVudGlsIGEgbWF4UmVwcyBudW1iZXIgb2YgdGltZXMuXG5pZiB0aGUgdGVzdCBmdW5jdGlvbiByZXR1cm5zIHRydWUgaXQgcnVucyB0aGUgc3VjY2Vzc0ZuIGFuZCBzdG9wcyB0aGUgaXRlcmF0aW9ucy5cbiAgICB0aGVuIHRoZSBsYXN0Rm4gaXMgY2FsbGVkIHdpdGggdGhlIHBhcmFtcyAodHJ1ZSwgbnVtYmVyX29mX2F0dGVtcHRzKS5cbiAgICBsYXN0Rm4gaXMgb3B0aW9uYWwuXG5cbmZvciBlYWNoIHRpbWUgdGhlIHRlc3RGbiBpcyBjYWxsZWQgYW5kIGZhaWxzLCB0aGUgZmFpbEZuKCkgaXMgY2FsbGVkLlxuXG5BZnRlciB0aGUgbGFzdCByZXAgaGFzIGJlZW4gY29tcGxldGVkIHRoZSBsYXN0Rm4gaXMgY2FsbGVkIHdpdGggKHdpdGggdGhlIGxhc3QgdGVzdEZuIHJlc3VsdCBhbmRcbndpdGggdGhlIGN1cnJlbnQgaXRlcmF0aW9uKS4gIFxuXG5cbmxhc3RGbiBpcyBvcHRpb25hbC4gIFxuZmFpbEZuIGlzIG9wdGlvbmFsXG5cbkV4YW1wbGU6XG5idy5yZXBlYXRVbnRpbCggbXlMaWJzQW5kRGF0YUFyZUxvYWRlZF9mbiwgcmVuZGVyTXlDaGFydCwgbnVsbCwgMjUwLCAxMCwgbnVsbCk7IC8vIGF0dGVtcHRzIHRvIHdhaXQgdW50aWwgbXlsaWIgaXMgbG9hZGVkIDEwIHRpbWVzIGJlZm9yZSBnaXZpbmcgdXBcblxuKi8gICBcbiAgICB2YXIgX2NvdW50ID0gMDtcbiAgICBpZiAodHlwZW9mIHRlc3RGbiAhPSBcImZ1bmN0aW9uXCIpXG4gICAgICByZXR1cm4gXCJlcnJcIjtcbiAgICBpZiAodHlwZW9mIGRlbGF5ICE9IFwibnVtYmVyXCIpXG4gICAgICBkZWxheSA9IDI1MDsgIC8vIDI1MG1zXG4gICAgaWYgKHR5cGVvZiBtYXhSZXBzICE9IFwibnVtYmVyXCIpXG4gICAgICBtYXhSZXBzID0gMTsgLy8gcnVuIDEgdGltZS5cblxuICAgIHZhciBfdGVzdEZuID0gdGVzdEZuO1xuICAgIHZhciBfc3VjY2Vzc0ZuID0gKHR5cGVvZiBzdWNjZXNzRm4gPT0gXCJmdW5jdGlvblwiKSA/IHN1Y2Nlc3NGbiA6IGZ1bmN0aW9uICgpIHt9O1xuICAgIHZhciBfZmFpbEZuID0gKHR5cGVvZiBmYWlsRm4gPT0gXCJmdW5jdGlvblwiKSA/IGZhaWxGbiA6IGZ1bmN0aW9uICgpIHt9O1xuICAgIHZhciBfbGFzdEZuID0gKHR5cGVvZiBsYXN0Rm4gPT0gXCJmdW5jdGlvblwiKSA/IGxhc3RGbiA6IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgdmFyIF9mID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzdWNjZXNzID0gX3Rlc3RGbigpO1xuICAgICAgICBpZiAodHJ1ZSA9PSBzdWNjZXNzKSB7XG4gICAgICAgICAgICBfc3VjY2Vzc0ZuKCk7XG4gICAgICAgICAgICBfbGFzdEZuKHRydWUsIF9jb3VudCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBfZmFpbEZuKCk7XG4gICAgICAgIFxuICAgICAgICAgICAgaWYgKF9jb3VudCA+PSBtYXhSZXBzKSB7XG4gICAgICAgICAgICAgIF9sYXN0Rm4oc3VjY2VzcywgX2NvdW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIF9jb3VudCsrO1xuICAgICAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KF9mLCBkZWxheSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIF9mKCk7XG59O1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vKlxuYncuaHRtbERhdGFUb0ltZyA9IGZ1bmN0aW9uKGRhdGEsIG9wdHMpIHtcbi8qKlxuICAgIGh0bWxEYXRhVG9JbWcoZGF0YSwgb3B0cykgLy8gdGFrZXMgYSAyRCBhcnJheSBvZiBudW1iZXJzIGFuZCByZW5kZXIgYXMgYW4gaW1hZ2VcbiAgICBlYWNoIGRhdGEgcG9pbnQgbXVzdCBldmFsdWF0ZSB0byBhIE51bWJlciBvciBiZSBhIGZ1bmN0aW9uIHdoaWNoIHdpbGwgYmUgY2FsbGVkIHdpdGggaXRzIHBvc2l0aW9uYWwgYXJndW1lbnRzIGFuZCBtdXN0IHJldHVybiBhIG51bWJlci5cblxuICAgIE9SXG5cbiAgICBmdW5jdGlvbiBjYW4gYmUgYSBzdHJpbmcgYXMgbG9uZyBhcyBpdCByZXR1cm5zIGEgdmFsdWQgSFRNTCBjb2xvciBwcmVmaXhlZCB3aXRoIFwiI1wiXG5cbiAgICBlLmcuIFxuICAgIFwiIzEyM1wiXG4gICAgXCIjMTEyMjMzXCJcblxuICAgIGUuZy46XG4gICAgICAgIGZ1bmN0aW9uIChyZXR1cm4gMjMpXG4gICAgICAgIGZ1bmN0aW9uKHgseSkgeyByZXR1cm4geCt5O31cblxuICogL1xuICAgIHZhciBkb3B0cyA9IHtcbiAgICAgICAgb3V0cHV0VHlwZSAgOiBcImNhbnZhc1wiICwgIC8vIFwidGFibGVcIiB8IFwiZGl2c1wiIHwgXCJzdmdcIlxuICAgICAgICBjb2xvck1vZGUgICA6IFwiYXV0b1wiLCAgICAgLy8gdXNlIGdyZXlzY2FsZSBtYXBcbiAgICAgICAgY29sb3JTdHJldGNoOiAxLjBcbiAgICB9XG5cbiAgICBkb3B0cyA9IG9wdHNDb3B5KGRvcHRzLG9wdHMpO1xuLy8gICAgaWYgKF90byhkb3B0c1tcImNvbG9yTWFwRm5cIl0pICE9IFwiZnVuY3Rpb25cIilcbi8vICAgICAgICBkb3B0c1tcImNvbG9yTWFwRm5cIl0gPSBmdW5jdGlvbih4KXt2YXIgYz0gbWFwU2NhbGUoeCwwLDI1NSwwLDI1NSx0cnVlKS59XG5cblxuXG59XG4qL1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5idy5uYXR1cmFsQ29tcGFyZSA9IGZ1bmN0aW9uIChhcywgYnMpe1xuLyoqIFxuYncubmF0dXJhbENvbXBhcmUoYSxiKSB7XG5idy5uYXR1cmFsQ29tcGFyZSgpIGlzIGEgZnVuY3Rpb24gd2hpY2ggY2FuIGJlIHBhc3NlZCB0byBhbiBhcnJheSBzb3J0IHRvIHByb3ZpZGUgbmF0dXJhbCBzb3J0aW5nIG9mIG1peGVkIGFycmF5IGVsZW1lbnRzLlxuXG5bMyw0LDIsMSxcIjEwXCIsXCIxMTFcIixcImZvb1wiLFwiYmFyXCIsXCIwMVwiLFwidGhpczEyM1wiLFwiVGhpczEyM1wiLCBcIjg0OFwiXS5zb3J0KClcbnZzXG5bMyw0LDIsMSxcIjEwXCIsXCIxMTFcIixcImZvb1wiLFwiYmFyXCIsXCIwMVwiLFwidGhpczEyM1wiLFwiVGhpczEyM1wiLCBcIjg0OFwiXS5zb3J0KGJ3Lm5hdHVyYWxDb21wYXJlKVxuXG5pdCBpcyB0aGUgZGVmYXVsdCBzb3J0IGZvciBidy5zb3J0SFRNTFRhYmxlKClcblxuICovXG4vL2h0dHBzOi8vd3d3LndlYmRldmVsb3Blci5jb20vZm9ydW0vZC8yNTQ3MjYtc29ydGluZy1hbHBoYW51bWVyaWMtYXJyYXkgKHRha2VuIGZyb20gaGVyZSkgc2VlIGFsc29cbi8vdXNpbmcgLmxvY2FsQ29tcGFyZSgpIGluIG5ld2VyIHZlcnNpb25zIG9mIEpTXG5cbiAgICB2YXIgYSwgYiwgYTEsIGIxLCBpPSAwLCBMLCByeD0gIC8oXFxkKyl8KFxcRCspL2csIHJkPSAgL1xcZC87XG4gICAgaWYoaXNGaW5pdGUoYXMpICYmIGlzRmluaXRlKGJzKSkgcmV0dXJuIE1hdGguc2lnbihhcyAtIGJzKTtcbiAgICBhPSBTdHJpbmcoYXMpLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgYj0gU3RyaW5nKGJzKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgIGlmKGE9PT0gYikgcmV0dXJuIChhcyA+IGJzKSA/IDEgOiAwO1xuICAgIGlmKCEocmQudGVzdChhKSAmJiByZC50ZXN0KGIpKSkgcmV0dXJuIGE+IGI/IDE6LTE7XG4gICAgYT0gYS5tYXRjaChyeCk7XG4gICAgYj0gYi5tYXRjaChyeCk7XG4gICAgTD0gYS5sZW5ndGg+IGIubGVuZ3RoPyBiLmxlbmd0aDphLmxlbmd0aDtcbiAgICB3aGlsZShpPEwpe1xuICAgICAgICBhMT0gYVtpXTtcbiAgICAgICAgYjE9IGJbaSsrXTtcbiAgICAgICAgaWYoYTEhPT0gYjEpe1xuICAgICAgICAgICAgaWYoaXNGaW5pdGUoYTEpICYmIGlzRmluaXRlKGIxKSl7XG4gICAgICAgICAgICAgICAgaWYoYTEuY2hhckF0KDApPT09IFwiMFwiKSBhMT0gXCIuXCIgKyBhMTtcbiAgICAgICAgICAgICAgICBpZihiMS5jaGFyQXQoMCk9PT0gXCIwXCIpIGIxPSBcIi5cIiArIGIxO1xuICAgICAgICAgICAgICAgIHJldHVybiBhMSAtIGIxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSByZXR1cm4gYTE+IGIxPyAxOi0xO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBNYXRoLnNpZ24oYS5sZW5ndGggLSBiLmxlbmd0aCk7XG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbmJ3LnNvcnRIVE1MVGFibGUgPSBmdW5jdGlvbiAodGFibGUsIGNvbCwgZGlyLCBzb3J0RnVuY3Rpb24pIHtcbi8qKiBcbmJ3LnNvcnRIVE1MVGFibGUodGFibGUsIGNvbHVtbiwgb3B0aW9uYWxTb3J0RnVuY3Rpb24pLlxuXG5zb3J0IGFueSBIVE1MIHRhYmxlIGFjdGl2ZSBpbiB0aGUgRE9NXG50YWJsZSBtdXN0IGJlIGEgdmFsaWQgRE9NIHRhYmxlIGVsZW1lbnQgb3IgQ1NTIHNlbGVjdG9yIChmaXJzdCBlbGVtZW50IGlzIHVzZWQpXG5cbmRlZmF1bHQgdXNlcyBzdHJpbmcgY29tcGFyZS4gYnV0IGNhbiBwYXNzIGluIGEgZnVuY3Rpb25cbnNvcnRGdW5jKGEsYixjb2wpIC8vIGEgYW5kIGIgYXJlIHRoZSBjZWxscyB0byBjb21wYXJlLCBjb2wgaXMgb3B0aW9uYWwgaW5mbyBvbiB3aGF0IGNvbHVtbiB0aGlzIGlzICAgXG4qL1xuICAgIFxuICAgIHZhciAgcm93cywgc3dpdGNoaW5nLCBpLCB4LCB5LCBzaG91bGRTd2l0Y2g7XG4gICAgdmFyIHNvcnRGID0gX3RvKHNvcnRGdW5jdGlvbikgPT0gXCJmdW5jdGlvblwiID8gc29ydEZ1bmN0aW9uIDogYncubmF0dXJhbENvbXBhcmU7XG4gICAgXG4gICAgdGFibGUgPSBidy5ET00odGFibGUpWzBdO1xuICAgIFxuICAgIGRpciA9IChkaXI9PXRydWUpIHx8IChkaXI9PVwidXBcIikgPyB0cnVlIDogZmFsc2U7XG5cbiAgICBzd2l0Y2hpbmcgPSB0cnVlO1xuICAgIGNvbCA9IF90byhjb2wpID09IFwibnVtYmVyXCIgPyBjb2wgOiAwOyAgLy9kZWZhdWx0IHNvcnQgb24gbGVmdCBtb3N0IGNvbHVtblxuXG4gICAgLy9NYWtlIGEgbG9vcCB0aGF0IHdpbGwgY29udGludWUgdW50aWwgIG5vIHN3aXRjaGluZyBoYXMgYmVlbiBkb25lXG4gICAgd2hpbGUgKHN3aXRjaGluZykge1xuICAgICAgICAvL3N0YXJ0IGJ5IHNheWluZzogbm8gc3dpdGNoaW5nIGlzIGRvbmU6XG4gICAgICAgIHN3aXRjaGluZyA9IDA7XG4gICAgICAgIHJvd3MgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZShcIlRSXCIpO1xuICAgICAgICAvKkxvb3AgdGhyb3VnaCBhbGwgdGFibGUgcm93cyAoZXhjZXB0IHRoZSBmaXJzdCwgd2hpY2ggY29udGFpbnMgdGFibGUgaGVhZGVycyk6Ki9cbiAgICAgICAgZm9yIChpID0gMTsgaSA8IChyb3dzLmxlbmd0aCAtIDEpOyBpKyspIHtcbiAgICAgICAgICAgIC8vc3RhcnQgYnkgc2F5aW5nIHRoZXJlIHNob3VsZCBiZSBubyBzd2l0Y2hpbmc6XG4gICAgICAgICAgICBzaG91bGRTd2l0Y2ggPSAwO1xuICAgICAgICAgICAgLypHZXQgdGhlIHR3byBlbGVtZW50cyB5b3Ugd2FudCB0byBjb21wYXJlLFxuICAgICAgICAgICAgb25lIGZyb20gY3VycmVudCByb3cgYW5kIG9uZSBmcm9tIHRoZSBuZXh0OiovXG4gICAgICAgICAgICB4ID0gcm93c1tpXS5nZXRFbGVtZW50c0J5VGFnTmFtZShcIlREXCIpW2NvbF0uaW5uZXJIVE1MO1xuICAgICAgICAgICAgeSA9IHJvd3NbaSArIDFdLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiVERcIilbY29sXS5pbm5lckhUTUw7XG5cbiAgICAgICAgICAgIC8vY2hlY2sgaWYgdGhlIHR3byByb3dzIHNob3VsZCBzd2l0Y2ggcGxhY2U6XG5cbiAgICAgICAgICAgIHNob3VsZFN3aXRjaCA9IChkaXIpID8gc29ydEYoeCx5LGNvbCkgPiAwIDogc29ydEYoeCx5LGNvbCkgPCAwOyAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKHNob3VsZFN3aXRjaClcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzaG91bGRTd2l0Y2gpIHtcbiAgICAgICAgICAvL0lmIGEgc3dpdGNoIGhhcyBiZWVuIG1hcmtlZCwgbWFrZSB0aGUgc3dpdGNoIGFuZCBtYXJrIHRoYXQgYSBzd2l0Y2ggaGFzIGJlZW4gZG9uZTpcbiAgICAgICAgICByb3dzW2ldLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHJvd3NbaSArIDFdLCByb3dzW2ldKTtcbiAgICAgICAgICBzd2l0Y2hpbmcgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5idy5zb3J0VGFibGVEaXNwYXRjaCA9IGZ1bmN0aW9uIChpdGVtLGZuKSB7XG4vKiogXG5idy5zb3J0VGFibGVEaXNwYXRjaChlbCkgaXMgdXNlZCB0byBiaW5kIHNvcnRpbmcgZnVuY3Rpb25zIHRvIHRhYmxlcyBnZW5lcmF0ZWQgYnkgIGJ3Lmh0bWxUYWJsZSguLi4uKVxuaXRlbSBtdXN0IGJlIGEgdmFsaWQgRE9NIGVsZW1lbnQgb3IgaWQuXG4gKi9cbiAgICB2YXIgaTtcbiAgICBcbiAgICBpdGVtID0gYncuRE9NKGl0ZW0pWzBdO1xuXG4gICAgaWYgKF90byhpdGVtKS5zdWJzdHIoMCw0KSAhPSBcImh0bWxcIilcbiAgICAgICByZXR1cm4gZmFsc2U7ICAvL3NvbWV0aGluZyBub3QgcmlnaHQgYWJvdXQgdGhpcyB0YWJsZSBlbGVtZW50XG5cbiAgICB2YXIgaW5kZXg9MCxkaXI7XG4gICAgdmFyIGNvbHMgPSBpdGVtLnBhcmVudEVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJ0aFwiKTtcbiAgICAvL3VwZGF0ZSB3aGljaCB0YWIgc2VsZWN0ZWRcbiAgICBmb3IgKGk9MDsgaTwgY29scy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoY29sc1tpXSA9PSBpdGVtKSB7IC8vIHNlbGVjdGVkIHRhYiBsb2dpY1xuICAgICAgICAgICAgaW5kZXggPSBpO1xuICAgICAgICAgICAgZGlyID0gYncuRE9NQ2xhc3MoY29sc1tpXSxcImJ3LXRhYmxlLXNvcnQtdXBhXCIpIDsgLy8gaWZ0aGUgY3VycmVudCBjb2wgaXMgYWxyZWFkeSB1cC4uXG4gICAgICAgICAgICBpZiAoZGlyKSB7IFxuICAgICAgICAgICAgICAgIGJ3LkRPTUNsYXNzKGNvbHNbaV0sXCJidy10YWJsZS1zb3J0LXVwYVwiLCBcImJ3LXRhYmxlLXNvcnQtZG5hXCIgKTsgXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHsgLy9kbmEgb3IgeHhhXG4gICAgICAgICAgICAgICAgaWYgKGJ3LkRPTUNsYXNzKGNvbHNbaV0sXCJidy10YWJsZS1zb3J0LWRuYVwiKSkge1xuICAgICAgICAgICAgICAgICAgICBidy5ET01DbGFzcyhjb2xzW2ldLFwiYnctdGFibGUtc29ydC1kbmFcIiwgXCJidy10YWJsZS1zb3J0LXVwYVwiICk7IFxuICAgICAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgICAgICBidy5ET01DbGFzcyhjb2xzW2ldLFwiYnctdGFibGUtc29ydC14eGFcIiwgXCJidy10YWJsZS1zb3J0LXVwYVwiICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZXsgLy8gaXRzIG5vdCB0aGUgc2VsZWN0ZWQgY29sdW1uIHNvIHdlIGNsZWFyIHRoZSB1cCAvIGRvd24gYXJyb3dcbiAgICAgICAgICAgIGJ3LkRPTUNsYXNzKGNvbHNbaV0sXCJidy10YWJsZS1zb3J0LXVwYVwiLFwiXCIpOyBcbiAgICAgICAgICAgIGJ3LkRPTUNsYXNzKGNvbHNbaV0sXCJidy10YWJsZS1zb3J0LWRuYVwiLFwiXCIpO1xuICAgICAgICAgICAgYncuRE9NQ2xhc3MoY29sc1tpXSxcImJ3LXRhYmxlLXNvcnQteHhhXCIsXCJidy10YWJsZS1zb3J0LXh4YVwiKTtcbiAgICAgICAgfVxuXG4gICAgfVxuICAgIC8vY29uc29sZS5sb2coaXRlbS5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudCk7XG4gICAgYncuc29ydEhUTUxUYWJsZShpdGVtLnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LGluZGV4LGRpcixmbik7XG59O1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8qKiBcbmJ3LmZ1bmN0aW9uIGRpc3BhdGNoIGZvciBET00gZWxlbWVudHMuLlxuXG50aGUgYncuZm5SZWdpc3RyeXt9IGlzIGEgZGljdCBvZiB1c2VyIHN1cHBsaWVkIGZ1bmN0aW9ucyBhcmUgYXNzaWduZWQgSURzIGJ5IGJpdHdyZW5jaC4gIFVzaW5nIHRoZXNlIElEcyBvbmUgY2FuIGNhbGwgdGhlIGZ1bmN0aW9ucyB3aGljaCBpcyB1c2VmdWwgaW4gRE9NIHN0cmluZyBjb250ZXh0cyBzdWNoIGFzIG1ha2VIVE1MVGFibGUoKSBvciBidWlsZEhUTUxPYmpTdHIoKS5cbiAqL1xudmFyIF9mblJlZ2lzdHJ5ID0ge307XG52YXIgX2ZuSURDb3VudGVyID0gMDtcblxuXG5idy5mdW5jUmVnaXN0ZXIgPSBmdW5jdGlvbiAoZm4sIGZvcmNlTmFtZSkge1xuLyoqIFxuYncuZnVuY1JlZ2lzdGVyKClcbnJlZ2lzdGVyIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGJ5IGlELlxuZm4gaXMgYW55IGZ1bmN0aW9uIG9yIGNhbiBiZSBhbm9ueW1vdXMgZnVuY3Rpb24uICBcbihvcHRpb25hbCkgZm9yY2VOYW1lIGZvcmNlcyB0aGUgcmV0dXJuZWQgSUQgdXNlZCB0byBiZSBmb3JjZU5hbWUuICBmb3JjZU5hbWUgbXVzdCBiZSBvbmx5IGFscGhhIGFuZCBudW1lcmljIGNoYXJzLlxuZm9yY2VOYW1lIGlzIHVzZWZ1bCB3aGVuIGRlY2xhcmluZyBzdGF0aWMgSFRNTCBjb250ZW50IGFuZCBvbmUgd2FudHMgdG8gdXNlIHRoZSBid0Z1bmN0aW9uRGlzcGF0Y2ggYnV0IGJlZm9yZSBiaXR3cmVuY2ggaGFzIGJlZW4gbG9hZGVkIG9yIHJ1bi5cblxuSW4gdGhpcyBjYXNlIGluIHRoZSBzdGF0aWMgY29kZSBjYWxsIGxpa2UgdGhpczpcblxuPGRpdiBjbGFzcz1cIi4uLlwiIG9uY2xpY2s9XCJidy5mdW5jR2V0QnlJZCgnbXlGbk5hbWUnKSh0aGlzKVwiPiByZWd1bGFyIGh0bWwgY29udGVudCBnb2VzIGhlcmUgIDwvZGl2PlxuPHNjcmlwdCAuLj5cbmZ1bmN0aW9uIHN1cGVyRHVwZXJGdW5jdGlvbkNvZGUgKGEpIHsgLi4uLiBjb2RlIGZvciBteSBmdW5jdGlvbiAuLi4gfTtcbmJ3LmZ1bmNSZWdpc3RlcihzdXBlckR1cGVyRnVuY3Rpb25Db2RlLFwibXlGbk5hbWVcIik7ICAvL25vdyB3aGVuIHRoZSBlbGVtZW50IGlzIGNsaWNrZWQgb24gc3VwZXJEdXBlckZ1bmN0aW9uQ29kZSgpIHdpbGwgYmUgY2FsbGVkLlxuPC9zY3JpcHQ+XG5cbiAqL1xuICAgIHZhciBmbklEID0gXCJjbGFzc19id2ZuX1wiICsgX2ZuSURDb3VudGVyOyBcbiAgICBfZm5JRENvdW50ZXIrKztcbiAgICBmbklEID0gX3RvKGZvcmNlTmFtZSkgPT0gXCJzdHJpbmdcIiA/IGZvcmNlTmFtZSA6IGZuSUQ7XG4gICAgZm5JRC50cmltKCk7XG4gICAgX2ZuUmVnaXN0cnlbZm5JRF0gPSBmbjtcbiAgICByZXR1cm4gZm5JRDtcbn07XG5cbmJ3LmZ1bmNVbnJlZ2lzdGVyID0gZnVuY3Rpb24gKGZuSUQpIHtcbi8qKiBcbmJ3LmZ1bmNVbnJlZ2lzdGVyKGZuSUQpXG5yZW1vdmUgYSBmdW5jdGlvbiBmcm9tIHRoZSBiaXR3cmVuY2ggZGlzcGF0Y2ggcmVnaXN0cnlcbiAqL1xuICAgIGlmIChmbklEIGluIF9mblJlZ2lzdHJ5KVxuICAgICAgICBkZWxldGUgX2ZuUmVnaXN0cnlbZm5JRF07XG59O1xuXG5idy5mdW5jR2V0QnlJZCA9IGZ1bmN0aW9uKGZuSUQsZXJyRm4pIHtcbi8qKiBcbmJ3LmZ1bmNHZXRCeUlkKGZuSWQsIGVyckZuKVxuYWxsb3dzIGEgZnVuY3Rpb24gdG8gYmUgZXhlY3R1ZWQgYnkgaXRzIGJ3IGZ1bmN0aW9uIElELlxuYncuZnVuY0dldEJ5SWQobXlJZCkoLi4uIGFyZ3MgLi4uKVxuXG5lcnJGbiBpcyBvcHRpb25hbCBmdW5jdGlvbiB0byBjYWxsIGlmIGZuSUQgaXMgbm90IGZvdW5kLlxuXG5leGFtcGxlOlxuICAgIHZhciBteUZ1bmMgPSBidy5nZXRGdW5jQnlJZChcIm15RnVuY0lEXCIpOyAgLy8gZnVuY3Rpb24gbXVzdCBhbHJlYWR5IGJlIHJlZ2lzdGVyZWQuXG4gKi9cbiAgICBmbklEID0gU3RyaW5nKGZuSUQpO1xuICAgIGlmIChmbklEIGluIF9mblJlZ2lzdHJ5KVxuICAgICAgICByZXR1cm4gX2ZuUmVnaXN0cnlbZm5JRF07XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBfaWQgPSBmbklEO1xuICAgICAgICByZXR1cm4gKF90byhlcnJGbikgPT0gXCJmdW5jdGlvblwiKSA/IGVyckZuIDogZnVuY3Rpb24oKXtidy5sb2coX2lkLFwiYncuZnVuY0dldEJ5SWQoKTogdW5yZWdpc3RlcmVkIGZuIGVycm9yXCIpO30gO1xuICAgIH1cbn07XG5cbmJ3LmZ1bmNHZXREaXNwYXRjaFN0ciA9IGZ1bmN0aW9uIChmbklELCBhcmdzdHJpbmcpIHtcbi8qKiBcbmJ3LmZ1bmNHZXREaXNwYXRjaFN0cihmbklELCBhcmdTdHJpbmcpIFxuY3JlYXRlIGEgc3RyaW5nIHN1aXRibGUgZm9yIHVzZSBpbiBET00gZWxlbWVudCBkaXNwYXRjaC4gIG5vdGUgYXJnc3RyaW5nIGlzIGEgbGl0ZXJhbCBzbyB2YXJpYWJsZXMgbXVzdCBiZSByZWR1Y2UgdG8gdGhlaXIgdmFsdWVzLlxuc2VlIGJ3LmZ1bmNSZWdpc3RlcigpIGZvciBnZXR0aW5nIHZhbGlkIElEcyBmb3IgdXNlciBzdXBwbGllZCBmdW5jdGlvbnMuXG5cbmV4YW1wbGU6IGJ3LmZ1bmNHZXREaXNwYXRjaFN0cihcIm15RnVuY0lEXCIsXCJwYXJhbTEscGFyYW0yXCIpXG4gKi9cbiAgICBcbiAgICBzd2l0Y2ggKF90byhhcmdzdHJpbmcpKSB7XG4gICAgICAgIGNhc2UgXCJzdHJpbmdcIiA6IFxuICAgICAgICBjYXNlIFwibnVtYmVyXCIgOiBcbiAgICAgICAgICAgIGFyZ3N0cmluZyA9IFN0cmluZyhhcmdzdHJpbmcpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJhcnJheVwiICA6IFxuICAgICAgICAgICAgYXJnc3RyaW5nID0gYXJnc3RyaW5nLmpvaW4oXCIsXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOiBcbiAgICAgICAgICAgIGFyZ3N0cmluZyA9IGFyZ3N0cmluZygpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBhcmdzdHJpbmcgPSBcIlwiO1xuICAgIH1cblxuICAgIHJldHVybiBcImJ3LmZ1bmNHZXRCeUlkKCdcIitmbklEK1wiJykoXCIrYXJnc3RyaW5nK1wiKVwiO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5idy5sb3JlbUlwc3VtID0gZnVuY3Rpb24gKG51bUNoYXJzLCBzdGFydFNwb3QsIHN0YXJ0V2l0aENhcGl0YWxMZXR0ZXIpIHtcbi8qKiBcbmJ3LmxvcmVtSXBzdW0obnVtQ2hhcnMsIHN0YXJ0U3BvdClcblxuZ2VuZXJhdGUgYSBzaW1wbGUgc3RyaW5nIG9mIExvcmVtIElwc3VtIHRleHQgKHNhbXBsZSB0eXBvZ3JhcGhlcidzIHRleHQpIG9mIG51bUNoYXJzIGluIGxlbmd0aC4gIFxuXG5pZiBzdGFydFNwb3QgaXMgc3VwcGxpZWQsIGl0IHN0YXJ0cyB0aGUgc3RyaW5nIGF0IHRoZSBzdXBwbGllZCBpbmRleCBlLmcuIGJ3LmxvcmVtSXBzdW0oMjAwLCA1MCkgXG53aWxsIHN1cHBseSAyMDAgY2hhcnMgb2YgbG9yZW1JcHN1bSBzdGFydGluZyBhdCBpbmRleCA1MCBvZiB0aGUgTG9yZW0gSXBzdW0gc2FtcGxlIHRleHQuXG5cbmlmIHN0YXJ0V2l0aENhcGl0YWxMZXR0ZXIgPT0gdHJ1ZSB0aGVuIHRoZSBmdW5jdGlvbiB3aWxsIGNhcGl0bGl6ZSB0aGUgZmlyc3QgY2hhcmFjdGVyIG9yIGluamVjdCBhIGNhcGl0YWwgbGV0dGVyIGlmIGloZSBmaXJzdCBjaGFyYWN0ZXIgaXNuJ3QgYSBjYXBpdGFsIGxldHRlci5cbiAgICBkZWZhdWx0IGlzIHRydWU7XG5cbkRlZmF1bHQgaXMgYSBwYXJhZ3JhcGggb2YgbG9yZW0gaXBzdW0gKDQ0NiBjaGFycylcbiAqL1xuXG4gICAgc3RhcnRTcG90ICA9IF90byhzdGFydFNwb3QpICE9IFwibnVtYmVyXCIgPyAwIDogTWF0aC5yb3VuZChzdGFydFNwb3QpO1xuXG4gICAgdmFyIGwgPSBcIkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNjaW5nIGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXVhLiBVdCBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaXRhdGlvbiB1bGxhbWNvIGxhYm9yaXMgbmlzaSB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0LiBEdWlzIGF1dGUgaXJ1cmUgZG9sb3IgaW4gcmVwcmVoZW5kZXJpdCBpbiB2b2x1cHRhdGUgdmVsaXQgZXNzZSBjaWxsdW0gZG9sb3JlIGV1IGZ1Z2lhdCBudWxsYSBwYXJpYXR1ci4gRXhjZXB0ZXVyIHNpbnQgb2NjYWVjYXQgY3VwaWRhdGF0IG5vbiBwcm9pZGVudCwgc3VudCBpbiBjdWxwYSBxdWkgb2ZmaWNpYSBkZXNlcnVudCBtb2xsaXQgYW5pbSBpZCBlc3QgbGFib3J1bS4gXCI7XG4gICAgc3RhcnRTcG90ID0gc3RhcnRTcG90ICUgbC5sZW5ndGg7XG4gICAgbD0gbC5zdWJzdHJpbmcoc3RhcnRTcG90LCBsLmxlbmd0aCkgKyBsLnN1YnN0cmluZygwLHN0YXJ0U3BvdCk7XG5cbiAgICBpZiAoX3RvKG51bUNoYXJzKSAhPSBcIm51bWJlclwiKVxuICAgICAgICBudW1DaGFycyA9IGwubGVuZ3RoO1xuXG4gICAgdmFyIGk9bnVtQ2hhcnMsIHM9XCJcIjtcblxuICAgIFxuICAgIHdoaWxlIChpPjApIHtcbiAgICAgICAgcys9IChpIDwgbC5sZW5ndGgpID8gbC5zdWJzdHJpbmcoMCxpKSA6IGw7XG4gICAgICAgIGktPSBsLmxlbmd0aDtcbiAgICB9XG4gICAgaWYgKHNbcy5sZW5ndGgtMV0gPT0gXCIgXCIpXG4gICAgICAgIHM9IHMuc3Vic3RyaW5nKDAscy5sZW5ndGgtMSkgKyBcIi5cIjsgLy8gYWx3YXlzIGVuZCBvbiBub24td2hpdGVzcGFjZS4gIFwiLlwiIHdhcyBjaG9zZW4gYXJiaXRyYXJpbHkuXG4gICAgaWYgKHN0YXJ0V2l0aENhcGl0YWxMZXR0ZXIgIT0gZmFsc2UpICB7XG4gICAgICAgIHZhciBjID0gc1swXS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICBjID0gYy5tYXRjaCgvW0EtWl0vKSA/IGM6XCJNXCI7XG4gICAgICAgIHMgPSBjK3Muc3Vic3RyaW5nKDEscy5sZW5ndGgpO1xuICAgIH1cblxuICAgIHJldHVybiBzO1xuXG59O1xuXG5idy5kb2NTdHJpbmcgPSBmdW5jdGlvbiAocywgb3B0aW9ucykge1xuLyoqIFxuYncuZG9jU3RyaW5nKGZ1bmN0aW9uQXNTdHJpbmcsIG9wdGlvbnMpXG5yZXR1cm5zIGFycmF5IG9mIHZhbGlkIGRvY1N0cmluZ3MgZW1iZWRkZWQgaW4gYSBzdHJpbmcgXG5cbkBwYXJhbSBkb2NUeXBle3N0cmluZ30gOiBcImpzZG9jXCIgfCBcInB5dGhvblwiIHwgXCJjdXN0b21cIiAgKHB5dGhvbiBtZWFucyB0cmlwbGVxdW90ZSAoXCIpIDMgdGltZXMpLCBcImN1c3RvbVwiIG1lYW5zIHN1cHBseSBkZWxpbXNcbkBwYXJhbSBvcHRpb25zIHtkZWxpbXM6W3N0cmluZyxzdHJpbmddfSA6IHN0YXJ0LCBzdG9wIGRlbGltaXRlcnMgKG9ubHkgdXNlZCBpZiBkb2NUeXBlIHNldCB0byBcImN1c3RvbVwiKVxuXG5AcmV0dXJuIGFycmF5e3N0cmluZ3N9IDogYXJyYXkgb2YgY2FwdHVyZWQgcGFyYW1zXG4gICAgXG4gKi9cbiAgICBcbiAgICB2YXIgZG9wdHMgPSB7XG4gICAgICAgIGRvY1R5cGUgOiBcImpzZG9jXCIsICAvLyBcImpzIGRvY1wiLCBcInB5dGhvblwiLCBcIm90aGVyXCIgKGpzZG9jIGlzIGRlZmF1bHQpXG4gICAgICAgIGRlbGltcyAgOiBbXCIvKipcIixcIiovXCJdLFxuICAgICAgICBwYXJzZUpTRG9jUGFyYW1zIDogZmFsc2UsXG4gICAgICAgIGRyb3BMZWFkaW4gOiBmYWxzZSAvLyByZW1vdmVzIGxlYWQtaW4gd2hpdGVzcGFjZSBvciBmbG9hdGluZyBzaW5nbGUgKiBvbiBlYWNoIGxpbmUgZS5nLiAgXCIgKiBAbXljb21tZW50XCIgPT0+IFwiQG15Y29tbWVudFwiXG4gICAgfTtcbiAgICBkb3B0cyA9IG9wdHNDb3B5KGRvcHRzLG9wdGlvbnMpO1xuXG4gICAgdmFyIF9lcyA9IGZ1bmN0aW9uIChzdHIpIHtyZXR1cm4gc3RyLnJlcGxhY2UoLyg/PVtcXFxcXiQqKz8uKCl8e31bXFxdXSkvZywgXCJcXFxcXCIpO307IC8vIGRvIGVzY2FwZSBvZiByZWdleCBjaGFyc1xuXG4gICAgZG9wdHNbXCJkZWxpbXNcIl0gPSBidy5jaG9pY2UoZG9wdHNbXCJkb2NUeXBlXCJdLHtcbiAgICAgICAgXCJqc2RvY1wiIDogW1wiLyoqXCIsXCIqL1wiXSwgXG4gICAgICAgIFwicHl0aG9uXCI6IFtcIlxcXCJcXFwiXFxcIlwiLFwiXFxcIlxcXCJcXFwiXCJdLCAgICAgICAvLyBvbGQgcmVnZXg6IC9bXCJdezN9KFtcXHNcXFNdKj8pW1wiXXszfS9pZyBcbiAgICAgICAgXCJqc3B5XCIgIDogW1wiLyoqXFxcIlxcXCJcXFwiXCIsXCJcXFwiXFxcIlxcXCIqL1wiXSAgIC8vIGpzICYmIHB5dGhvblxuICAgIH0sZG9wdHNbXCJkZWxpbXNcIl0pO1xuXG4gICAgdmFyIGMgPSAoX3RvKHMpPT1cImZ1bmN0aW9uXCIpID8gcy50b1N0cmluZygpIDogU3RyaW5nKHMpO1xuICAgIHZhciByID0gW107XG4gICAgXG4gICAgdHJ5ICB7XG4gICAgICAgIHZhciByZSA9IChuZXcgUmVnRXhwKCBfZXMoZG9wdHNbXCJkZWxpbXNcIl1bMF0pKyBcIlxcXFxzKlxcXFxuKihbXlxcXFwqXXwoXFxcXCooPyFcXFxcLykpKSpcIiArX2VzKGRvcHRzW1wiZGVsaW1zXCJdWzFdKSxcImlnXCIpKTsgIC8vIFwiKFtcXFxcc1xcXFxTXSo/KVwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICByID0gYy5tYXRjaChyZSk7XG4gICAgfVxuICAgIGNhdGNoIChlKSAgIHtidy5sb2coU3RyaW5nKGUpKTt9XG5cbiAgICBpZiAoX3RvKHIpPT1cImFycmF5XCIpIHtcbiAgICAgICAgciA9IHIubWFwKGZ1bmN0aW9uKHgpe3JldHVybiB4LnN1YnN0cmluZyhkb3B0c1tcImRlbGltc1wiXVswXS5sZW5ndGgsIHgubGVuZ3RoLWRvcHRzW1wiZGVsaW1zXCJdWzFdLmxlbmd0aCk7fSk7IC8vIHRoaXMgaXMgYW4gYXJyYXkgb2YgdGhlIGNvbnRlbnRzIG9mIGRvY1N0cmluZ3Mgd2hpY2ggY2FuIHN0aWxsIGJlIG11bHRpbGluZSBpbiB0aGllciBvd24gcmlnaHRcbiAgICAgICAgciA9IChkb3B0c1tcImRyb3BMZWFkaW5cIl09PXRydWUpID8gci5tYXAoZnVuY3Rpb24oeCl7cmV0dXJuIHguc3BsaXQoL1tcXG5cXHJdLykubWFwKGZ1bmN0aW9uKHkpe3JldHVybiBidy50cmltKHksXCJsZWZ0XCIpK1wiXFxuXCI7fSk7fSkgOiByOyAvLyBuZWVkIHRvIGhhbmxkZSBtdWx0aWxpbmUgc3R1ZmYgaGVyZVxuICAgIH1cbiAgICBlbHNlXG4gICAgICAgIHI9W107XG4gICAgXG4gICAgcmV0dXJuIHI7XG59O1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5idy5kb2NTdHJpbmdQYXJzZUxpbmUgPSBmdW5jdGlvbihzKSB7XG4vKiogXG5QYXJzZSBhIHNpbmdsZSBsaW5lIG9mIGEganNkb2Mgc3RyaW5nLlxuICAgIEBwYXJhbSB7c3RyaW5nfSBzIC0gbGluZSBvZiBkb2NzdHJpbmcgdG8gcGFyc2VcbiAgICBAcmV0dXJuIC0gZGljdCBvZiBsaW5lIGNvbnRlbnRzIHtzb3VyY2U6IHMsIGZpZWxkOnN0cmluZywgbmFtZTpzdHJpbmcsIGRlc2NyaXB0aW9uOiBzdHJpbmcsIHR5cGVzOiB0eXBlMSx0eXBlMiB9IFxuICAgIGlmIG5vdCBhIHZhbGlkIGRvYyBzdHJpbmcgbGluZSB0aGVuIHJldHVybnMgc291cmNlIHN0cmluZyBvbmx5XG4qL1xuICAgIHZhciByPXtcInNvdXJjZVwiOnMsICBcImZpZWxkXCIgOiBcIlwiLCBcInR5cGVzXCI6XCJcIiwgXCJuYW1lXCIgOlwiXCIsIFwiZGVzY3JpcHRpb25cIiA6IFwiXCJ9OyAgXG4gICAgdmFyIGEgPSBzLnJlcGxhY2UoL15cXHMqKFxcL1xcKlxcKj8pP3woXFwqXFwvKT9cXHMqJC9pZyxcIlwiKTsgLy8gcmVtb3ZlIHRoZSBjb21tZW50IG1hcmtlcnMgaWYgc3RpbGwgdGhlcmUgXCIvKiogbXkgY29tbWVudCAqL1wiXCIgPT0+IFwibXkgY29tbWVudFwiXG4gICAgYSA9IGEucmVwbGFjZSgvXlxccypcXCoqXFxzKi8sXCJcIik7ICAgICAgICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBhbnkgY3J1ZnQgYXQgYmVnaW5uaW5nIG9mIGxpbmUgXCIgKiBAbXlQYXJhbSB7fS4uLi4uXCIgPT0+IFwiQG15UGFyYW0ge30uLi4uLlwiXG4gICAgaWYgKGEuY2hhckF0KDApID09IFwiQFwiKSB7IC8vIGlmIHdlIGhhdmUgaGl0IGEgQGZpZWxkbmFtZSBwYXJhbWV0ZXIgd2Ugc3RhcnQgcGFyc2luZy5cbiAgICAgICAgLy8gIChbc3RyLCByZWdleCwgZmllbGRTdHIsIHJlc3VsdHt9XSkgPT0+IChbc3RyLCByZWdleCwgZmllbGRTdHIsIHJlc3VsdHt9XSkgIDo6PiAoW3N0cixyZXN1bHR7fSxmaWVsZFN0cixyZWdleF0pXG4gICAgICAgIC8qXG4gICAgICAgIHZhciBfdG9rID0gZnVuY3Rpb24oeCl7XG4gICAgICAgICAgICB2YXIgbSA9IHhbMF0ubWF0Y2goeFsxXSk7XG4gICAgICAgICAgICBpZiAobSAhPSBudWxsKSB7eFs0XVszXT1tWzFdO31cbiAgICAgICAgICAgIHhbMF0gPSB4WzBdLnJlcGxhY2UoeFsxXSxcIlwiKTtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9XG4gICAgICAgICovXG4gICAgICAgIC8vciA9IFtbZSxmXSxbZSxmXSxbZSxmXSxbZSxmXV0ucmVkdWNlKCxfdG9rKTtcblxuICAgICAgICB2YXIgZSx4O1xuICAgICAgICB2YXIgdCA9IGJ3LnRyaW07XG4gICAgICAgIGUgPS9eQChbQS1aYS16MC05Xzw+W1xcXV0qKS9pO1xuICAgICAgICB4ID0gYS5tYXRjaChlKTtcbiAgICAgICAgaWYgKHggIT0gbnVsbCkge3JbXCJmaWVsZFwiXSA9IHQoeFsxXSk7fSBlbHNlIHJldHVybiByOyAvLyBkaWRuJ3QgbWF0Y2guLi4gb3B0IG91dCBoZXJlXG4gICAgICAgIGEgPSBhLnJlcGxhY2UoZSxcIlwiKTtcbiAgICAgICAgXG4gICAgICAgIGUgPSAvXlxccypcXHsoW0EtWmEtejAtOV98XFxzLC5cXC0rIUAjJCVeJiooKT1bXFxdXSopXFx9L2k7XG4gICAgICAgIHggPSBhLm1hdGNoKGUpO1xuICAgICAgICBpZiAoeCAhPSBudWxsKSAge3JbXCJ0eXBlc1wiXT10KHhbMV0pO30gLy8gdHlwZXMgaXMgb3B0aW9uYWwuLlxuICAgICAgICBhID0gYS5yZXBsYWNlKGUsXCJcIik7IFxuXG4gICAgICAgIGUgID0gL15cXHMqKFtcXFNdKikvaTtcbiAgICAgICAgeCA9IGEubWF0Y2goZSk7XG4gICAgICAgIGlmICh4ICE9IG51bGwpICB7cltcImRlc2NyaXB0aW9uXCJdPXQoeFsxXSk7fSAvL1xuICAgICAgICBhID0gYS5yZXBsYWNlKGUsXCJcIik7IFxuXG4gICAgICAgIGUgPSAvXlxccyooW1xcU10qKS9pO1xuICAgICAgICB4ID0gYS5tYXRjaChlKTtcbiAgICAgICAgaWYgKHggIT0gbnVsbCkgIHtyW1wibmFtZVwiXT10KHhbMV0pO30gLy9cbiAgICAgICAgYSA9IGEucmVwbGFjZShlLFwiXCIpOyBcbiAgICAgICAgXG4gICAgICAgIC8vIGRlc2NycGl0aW9uICAgICAgICAgICAgICAgICAgPT0+IG5hbWU6IFwiXCIgICAgICAgIGRlc2NyaXB0aW9uIDogXCJkZXNjcmlwdGlvblwiXG4gICAgICAgIC8vIGRlc2NyaXB0aW9uICB3ZSAgd2UgICAgICAgICAgPT0+IG5hbWU6IFwiXCIgICAgICAgIGRlc2NyaXB0aW9uIDogXCJkZXNjcmlwdGlvbiB3ZSB3ZSBcIlxuICAgICAgICAvLyBuYW1lIC0gZGVzY3JpcHRpb24gIHdlIHdlICAgID09PiBuYW1lOiBcIm5hbWVcIiAgICBkZXNjcnBpdGlvbiA6IFwiZGVzY3JpcHRpb24gd2Ugd2VcIlxuICAgICAgICAvLyAtIGRlc2NyaXB0aW9uIHdlIHdlICAgICAgICAgID09PiBuYW1lOiBcIlwiICAgICAgICBkZXNjcmlwdGlvbiA6IFwiZGVzY3JpcHRpb24gd2Ugd2VcIlxuICAgICAgICBpZiAocltcIm5hbWVcIl0ubWF0Y2goL15cXHMqLStcXHMqLykgIT0gbnVsbCkge1xuICAgICAgICAgICAgcltcIm5hbWVcIl0gPSByW1wiZGVzY3JpcHRpb25cIl07XG4gICAgICAgICAgICByW1wiZGVzY3JpcHRpb25cIl0gPSB0KGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcltcImRlc2NyaXB0aW9uXCJdID0gcltcImRlc2NyaXB0aW9uXCJdK1wiIFwiK3JbXCJuYW1lXCJdK1wiIFwiK3QoYSk7XG4gICAgICAgICAgICByW1wibmFtZVwiXSA9XCJcIjtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcjtcbn07XG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbmJ3LmRvY1N0cmluZ1BhcnNlID0gZnVuY3Rpb24ocykge1xuLyoqIFxuICAgIEBtZXRob2QgIGJ3LnBhcnNlSnNEb2NTdHJpbmcoKSAgcGFyc2UgYW5kIGV4dHJhY3QgaW5mbyBmcm9tIGEganNkb2Mgc3R5bGUgY29tbWVudC4gIGV4cGVjdHMgdGhlcmUgdG8gYmUgb25seSBhIHNpbmdsZSBkb2NTdHJpbmcgY29tbWVudFxuICAgIEBkZXNjcmlwdGlvbiAgZG9jU3RyaW5nUGFyc2UgcGFyc2VzIGEganNkb2Mgc3RyaW5nIFxuICAgIGFuZCByZXR1cm5zIHRoZSBwYXJhbXRlcnMgYXMgYW4gYXJyYXkgd2hpY2ggY2FuIGJlIGZvcm1hdHRlZCBmb3IgZGlzcGxheSBvciBpbnRlcnJvZ3Rpb24uXG4gICAgQHBhcmFte3N0cmluZ30gLSBhIHZhbGlkIGpzIGRvY3N0cmluZ1xuXG4gICAgQHJldHVybnMgQW4gYXJyYXkgb2YgdHJpcGxldHMgW0BwYXJhbSwge3R5cGVzfSwgY29tbWVudCBpbmZvXVxuICovXG5cbiAvKlxuICAgIGltcGxlbWVudGF0aW9uIG5vdGVzOlxuICAgIHRoZSBwYXJzZXIgc3BsaXRzIHRoZSBjYW5kaWRhdGUgZG9jIHN0cmluZyBpbiB0byBsaW5lcy5cblxuRXhhbXBsZXM6XG5cbiAqIEFzc2lnbiB0aGUgcHJvamVjdCB0byBhbiBlbXBsb3llZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSAtIFRoZSBlbXBsb3llZSB3aG8gaXMgcmVzcG9uc2libGUgZm9yIHRoZSBwcm9qZWN0LiA9PT4gW1wiQHBhcmFtXCIsXCJvYmplY3RcIixcIlwiLCBcIlRoZSBlbXBsb3llZSB3aG8gaXMgcmVzcG9zbnNpYmxlIGZvciB0aGUgcHJvamVjdFwiXVxuICogQHBhcmFtIHtzdHJpbmd9IGVtcGxveWVlLm5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZW1wbG95ZWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZW1wbG95ZWUuZGVwYXJ0bWVudCAtIFRoZSBlbXBsb3llZSdzIGRlcGFydG1lbnQuXG5cblxuICovXG4gICAgXG4gICAgXG4gICAgcz1idy5kb2NTdHJpbmcocylbMF07XG4gICAgdmFyIGEgPSBzLnNwbGl0KFwiXFxuXCIpO1xuICAgIC8vY29uc29sZS5sb2coYSk7XG4gICAgdmFyIGkscj1bYncuZG9jU3RyaW5nUGFyc2VMaW5lKGFbMF0pXTtcbiAgICBmb3IgKGk9MTtpPGEubGVuZ3RoO2krKykge1xuICAgICAgICB2YXIgbCA9IGJ3LmRvY1N0cmluZ1BhcnNlTGluZShhW2ldKTtcbiAgICAgICAgaWYgKGxbXCJmaWVsZFwiXT09XCJcIikgeyAvLyBub3RoaW5nIHBhcnNlYWJsZS4uLlxuICAgICAgICAgICAgaWYgKHJbci5sZW5ndGgtMV1bXCJmaWVsZFwiXT09XCJcIikge1xuICAgICAgICAgICAgICAgIHJbci5sZW5ndGgtMV1bXCJzb3VyY2VcIl0gKz0gbFtcInNvdXJjZVwiXTtcbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgcltyLmxlbmd0aC0xXVtcImRlc2NyaXB0aW9uXCJdICs9IGxbXCJzb3VyY2VcIl07XG4gICAgICAgIH0gZWxzZSByLnB1c2gobCk7XG4gICAgfVxuICAgIHJldHVybiByO1xufTtcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuYncuaXNIZXhTdHIgPSBmdW5jdGlvbiAoc3RyLCBhbGxvd0NoYXJzKSB7XG4vKiogXG5pc0hleFN0cigpIHJldHVybnMgYSBudW1iZXIgb2YgaGV4IGRpZ2l0cyBmb3VuZCBvciBmYWxzZSBpZiBub24taGV4IHN0cmluZy5cbmFsbG93IGlzIGFuIG9wdGlvbmFsIHN0cmluZyBvZiBjaGFyYWN0ZXJzIFwiLSsuXCJldGMgdG8gcGVybWl0IGluIHRoZSBzdHJpbmcuXG50aGUgYWxsb3cgY2hhcmFjdGVycyBhcmUgbm90IGNvdW50ZWQgaW4gdGhlIHJlc3VsdFxuXG5leGFtcGxlczpcbiAgICBidy5pc0hFWFN0cihcIjEyM2FcIikgICAgICA9PT0+IDRcbiAgICBidy5pc0hFWFN0cihcIjEyLTNhXCIpICAgICA9PT0+IGZhbHNlXG4gICAgYncuaXNIRVhTdHIoXCIxMi0zYVwiLFwiLVwiKSA9PT0+IDRcbiAqL1xuICAgIGlmICggX3RvKHN0cikgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICBzdHIgPSBzdHIucmVwbGFjZShuZXcgUmVnRXhwKFwiW1wiK2FsbG93Q2hhcnMrXCJdXCIsXCJnXCIpLFwiXCIpOyAgICAgIFxuICAgICAgICB2YXIgaXNIZXhSZWcgPSBuZXcgUmVnRXhwKFwiXlswLTlBLUZhLWZde1wiK3N0ci5sZW5ndGgrXCJ9JFwiKTtcbiAgICAgICAgcmV0dXJuIChpc0hleFJlZy50ZXN0KHN0cikgPT0gdHJ1ZSkgPyBzdHIubGVuZ3RoIDogZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuYncuX19tb25rZXlfcGF0Y2hfaXNfbm9kZWpzX18gPSBcImlnbm9yZVwiOyAgLy91c2VkIGluIHRlc3Qgc3VpdGVzXG5cbmJ3LmlzTm9kZUpTID0gZnVuY3Rpb24gKCkge1xuLyoqIFxuYncuaXNOb2RlSlMoKSA9PT4gcmV0dXJucyB0cnVlIGlmIHJ1bm5pbmcgaW4gbm9kZSBlbnZpcm9ubWVudCAoZWxzZSBicm93c2VyKVxuICovXG4gICAgaWYgKGJ3Ll9fbW9ua2V5X3BhdGNoX2lzX25vZGVqc19fICE9IFwiaWdub3JlXCIpIFxuICAgICAgICByZXR1cm4gYncuX19tb25rZXlfcGF0Y2hfaXNfbm9kZWpzX187XG4gICAgcmV0dXJuICh0eXBlb2YgbW9kdWxlICE9PSBcInVuZGVmaW5lZFwiICYmIG1vZHVsZS5leHBvcnRzKSAhPT0gZmFsc2U7ICAvL2EgaGFjayB3aWxsIGZpeCBsYXRlclxufTtcbi8vY29uc29sZS5sb2coXCI9PT09PVwiLGJ3LmlzTm9kZUpTKCkpXG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuYncuZml4TnVtID0gZnVuY3Rpb24obnVtLGRpZ2l0cykge1xuLyoqIFxuYncuZml4ZWROdW0obnVtLGRpZ2l0cylcblxuVHJ1bmNhdGUgYSBudW1iZXIgYXQgZGlnaXRzIG51bWJlciBvZiBwbGFjZXMuICBcbiAgICBidy5maXhOdW0oMS4yMzQ1LDIpICA9PT0+IDEuMjNcbiAgICBidy5maXhOdW0oMjM0LjMyLC0yKSA9PT0+IDIwMFxuICovXG4gICAgbnVtID0gTnVtYmVyKG51bSk7IFxuXG4gICAgaWYgKGlzTmFOKG51bSkpXG4gICAgICAgIHJldHVybiBOYU47XG5cbiAgICBkaWdpdHMgPSBfdG8oZGlnaXRzKSA9PSBcIm51bWJlclwiID8gZGlnaXRzIDogMztcbiAgICBudW0gKj0gTWF0aC5wb3coMTAsZGlnaXRzKTtcbiAgICBcbiAgICAvL251bSA9ICBNYXRoLnRydW5jKG51bSk7XG4gICAgbnVtID0gKG51bSA+IDApID8gTWF0aC5mbG9vcihudW0pIDogTWF0aC5jZWlsKG51bSk7IC8vIHNvbWUgYnJvd3NlcnMgZG9uJ3Qgc3VwcG9ydCBNYXRoLnRydW5jKClcblxuICAgIG51bSAvPSBNYXRoLnBvdygxMCxkaWdpdHMpO1xuICAgIHJldHVybiBudW07XG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbmJ3Lm11bHRpQXJyYXkgPSBmdW5jdGlvbiAodmFsdWUsIGRpbXMpIHtcbi8qKiBcbmJ3Lm11bHRpQXJyYXkodmFsdWUsICBkaW1zKSBcblxucmV0dXJuIGEgbXVsdGlkaW1lbnNpb25hbCBhcnJheSB3aGVyZSBhbGwgY2VsbHMgYXJlIGluaXRpYWxpemVkIHRvIHZhbHVlLlxuXG5idy5tdWx0aUFycmF5KDAsWzQsNV0pIC8vIHJldHVybnMgNHg1IGFycmF5IG9mIDBzIFxuYncubXVsdGlBcnJheShcInRlc3RcIixbNCw1XSkgLy8gcmV0dXJucyA0eDUgYXJyYXkgb2YgXCJ0ZXN0XCIgXG5cbnRoaXMgc2hvcnRoYW5kIGlzIGF2YWlsYWJsZSBmb3Igc2luZ2xlIGRpbSBhcnJheXNcbmJ3Lm11bHRpQXJyYXkoMCw1KSA9PT0+IHJldHVybnMgNXgxIGFycmF5IG9mIDBzIFxuXG5idy5tdWx0aUFycmF5IGFsc28gYWNjZXB0cyBmdW5jdGlvbnMgXG5cbmJ3Lm11bHRpQXJyYXkoYncucmFuZG9tLCBbMyw0XSkgPT09PiBjcmVhdGVzIDN4NSBhcnJheSBvZiByYW5kb20gI3MgYnR3IDAuLjEwMFxuXG5idy5tdWx0aUFycmF5KGZ1bmN0aW9uKCl7cmV0dXJuIChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7fSxbNCw2XSApID09PiByZXR1cm5zIHZhbHVlcyBiYXNlZCBvbiB0aGUgSmF2YXNjcmlwdCBkYXRlXG4gKi9cblxuICAgIHZhciB2ID0gZnVuY3Rpb24oKSB7IHJldHVybiAoX3RvKHZhbHVlKSA9PSBcImZ1bmN0aW9uXCIpID8gdmFsdWUoKTogdmFsdWU7fTtcbiAgICBkaW1zID0gX3RvKGRpbXMpID09IFwibnVtYmVyXCIgPyBbZGltc10gOiBkaW1zO1xuXG4gICAgdmFyICBfYXJyYXkgPSBmdW5jdGlvbihhLGRpbSkgICB7XG4gICAgICAgIGlmKGRpbSA8IGRpbXMubGVuZ3RoKSAge1xuICAgICAgICAgICAgZm9yKHZhciBpPTA7IGk8ZGltc1tkaW1dOyBpKyspICAge1xuICAgICAgICAgICAgICAgIGFbaV09IChkaW09PSBkaW1zLmxlbmd0aCAtMSkgPyB2KCkgOiBfYXJyYXkoW10sZGltKzEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBfYXJyYXkoW10sMCk7XG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbmJ3LmNsaXAgPSBmdW5jdGlvbiAoZGF0YSwgbWluLCBtYXgpIHtcbi8qKiBcbkBtZXRob2Q6IGJ3LmNsaXAoZGF0YSwgbWluLCBtYXgpICBjbGlwcyBkYXRhIGluIGJldHdlZW4gbWluIGFuZCBtYXguIFxuXG5FeGFtcGxlczpcbiAgICBidy5jbGlwKDUsMiwyMCkgICAgICAgICAgICA9PT4gIDUgICAvLyBhbHJlYWR5IGluIHJhbmdlXG4gICAgYncuY2xpcCgxLDIsMjApICAgICAgICAgICAgPT0+ICAyICAgLy8gbGVzcyB0aGFuIHRoZSBtaW4gdmFsdWUgc28gY2xpcHMgdG8gbWluIHZhbHVlXG4gICAgYncuY2xpcChbMSw0LDgsMzVdLCAyLCAyMCkgPT0+ICBbMiw0LDUsMjBdXG4gKi9cbiAgICB2YXIgbCA9IG1pbiA8IG1heCA/IG1pbiA6IG1heDtcbiAgICB2YXIgaCA9IG1heCA+IG1pbiA/IG1heCA6IG1pbjtcblxuICAgIGlmIChfdG8oZGF0YSkgPT0gXCJhcnJheVwiKSB7XG4gICAgICAgIHJldHVybiBkYXRhLm1hcChmdW5jdGlvbih4KXsgcmV0dXJuICh4IDwgbCkgPyBsIDogKCh4ID4gaCkgPyBoIDogeCk7fSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIChkYXRhIDwgbCkgPyBsIDogKChkYXRhID4gaCkgPyBoIDogZGF0YSk7XG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbmJ3Lm1hcFNjYWxlID0gZnVuY3Rpb24gKHgsIGluMCwgaW4xLCBvdXQwLCBvdXQxLCBvcHRpb25zKSB7XG4vKiogXG5AbWV0aG9kOiBidy5tYXBTY2FsZSgpXG5cbk1hcCBhbiBpbnB1dCB2YWx1ZSB4IGluIGl0cyBuYXR1cmFsIHJhbmdlIGluMC4uLmluMSB0byB0aGUgb3V0cHV0IHNwYWNlIG91dDAuLi5vdXQxIHdpdGggb3B0aW9uYWwgY2xpcHBpbmdcbmV4cFNjYWxlIGFsbG93cyBzaWdtb2lkYWwgd2FycGluZyB0byBzdHJldGNoIGlucHV0IHZhbHVlcyBjb250cmFpbmVkIHRvIGEgc21hbGwgcmFuZ2UuIChmbG9hdGluZyBwb2ludCBzY2FsZSBmYWN0b3IpXG54IGNhbiBiZSBlaXRoZXIgYSBudW1iZXIgb3IgYXJyYXkgb2YgbnVtYmVycy5cblxuaWYgb3B0aW9uc1tcImNsaXBcIl0gPSBmYWxzZSwgdGhlbiBtYXBTY2FsZSB3aWxsIGV4dHJhcG9sYXRlIG91dHNpZGUgb2Ygb3V0MCxvdXQxXG5cbi8vdGhpcyBpcyB0aGUgZnVuY3Rpb24gdGhhdCBvZmljaWFsbHkgc3RhcnRlZCBiaXR3cmVuY2guLlxuICovXG4gICAgdmFyIGRvcHRzID0ge1xuICAgICAgICBjbGlwIDogdHJ1ZSxcbiAgICAgICAgZXhwU2NhbGUgIDogZmFsc2VcbiAgICB9O1xuXG4gICAgZG9wdHMgPSBvcHRzQ29weSAoIGRvcHRzLCBvcHRpb25zKTtcblxuICAgIGlmIChpbjA9PWluMSkgXG4gICAgICAgIHJldHVybiB4O1xuICAgIG91dDAgPSBfdG9hKG91dDAsIFwibnVtYmVyXCIsIG91dDAsIDApO1xuICAgIG91dDEgPSBfdG9hKG91dDEsIFwibnVtYmVyXCIsIG91dDEsIDEpO1xuICAgIFxuICAgIHZhciBtcz0gZnVuY3Rpb24gKHopIHtcbiAgICAgICAgaWYgKGRvcHRzW1wiZXhwU2NhbGVcIl0pIHtcbiAgICAgICAgICAgIHZhciB5ID0gKCh6LSgoaW4xK2luMCkgLyAyLjApKSAvIChpbjEgLSBpbjApICkgKiBkb3B0c1tcImV4cFNjYWxlXCJdO1xuICAgICAgICAgICAgeiA9ICgob3V0MS1vdXQwKSooMS8oMStNYXRoLmV4cCgteSkpKSkgKyBvdXQwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHogPSAoKCh6LWluMCkvKGluMS1pbjApKSoob3V0MS1vdXQwKSkrb3V0MDtcblxuICAgICAgICBpZiAoZG9wdHNbXCJjbGlwXCJdKSBcbiAgICAgICAgICAgIHo9IGJ3LmNsaXAoeixvdXQwLG91dDEpO1xuICAgICAgICByZXR1cm4gejtcbiAgICB9O1xuXG4gICAgaWYgKF90byh4KSA9PSBcIm51bWJlclwiKVxuICAgICAgICByZXR1cm4gbXMoeCk7XG4gICAgcmV0dXJuIHgubWFwKG1zKTtcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy9odHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xMDA3MzY5OS9wYWQtYS1udW1iZXItd2l0aC1sZWFkaW5nLXplcm9zLWluLWphdmFzY3JpcHRcbmJ3LnBhZE51bSA9IGZ1bmN0aW9uKHgsIHdpZHRoLCBvcHRpb25zKSB7XG4vKipcbkBkZXNjcmlwdGlvbiBidy5wYWRudW0oKSB0YWtlcyBhIG51bWJlciBhbmQgcGFkcyBsZWZ0IHBhZHMgKGRlZmF1bHQgaXMgJzAnKS4gIHBhZE51bSBhbHNvIGFjY2VwdHMgc3RyaW5ncyBzb1xuXG5idy5wYWROdW0oMTIzLDUpICA9PT4gXCIgIDEyM1wiXG5idy5wYWROdW0oMTIzNCw1KSA9PT4gXCIgMTIzNFwiXG5idy5wYWROdW0oXCJmb29cIiw1KT09PiBcIiAgZm9vXCJcbkBwYXJhbSB4IHtudW1iZXJ9IFxuQHJldHVybiB7c3RyaW5nfSBwYWRkZWQgbnVtYmVyXG4qL1xuICAgIHZhciBkb3B0cyA9IHtcbiAgICAgICAgcGFkIDogXCIgXCJcbiAgICB9O1xuICAgIGRvcHRzID0gb3B0c0NvcHkoZG9wdHMsIG9wdGlvbnMpO1xuICAgIHggPSBTdHJpbmcoeCk7XG4gICAgcmV0dXJuICh4Lmxlbmd0aCA+PSB3aWR0aCkgPyB4IDogbmV3IEFycmF5KHdpZHRoIC0geC5sZW5ndGgrMSkuam9pbihkb3B0c1tcInBhZFwiXSkgKyB4O1xufTtcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuYncudHJpbSA9IGZ1bmN0aW9uIChzLCBkaXIpIHtcbi8qKlxuQGRlc2NyaXB0aW9uIGJ3LnRyaW0oKSB0cmltcyB3aGl0ZXNwYWNlIGZyb20gIHN0cmluZyBvbiBlaXRoZXIgbGVmdCwgcmlnaHQsIG9yIGJvdGguICAoY3Jvc3MgYnJvd3NlciB3b3JrcyBiZWZvcmUgSUU4KVxuQHBhcmFtIHMge3N0cmluZ30gOiBhIHN0cmluZyB0byB0cmltIHdoaXRlIHNwYWNlIG9uXG5AcGFyYW0gZGlyIHtcImxlZnRcIiB8IFwicmlnaHRcIiB8IFwiYm90aFwiIHwgXCJub25lXCJ9IDogdHJpbSB3aGl0ZSBzcGFjZSBvbiBsZWZ0IG9ubHksIHJpZ2h0IG9ubHkgb3IgYm90aCBzaWRlcywgb3Igbm8gdHJpbSAoZGVmYXVsdCBpcyBib3RoKVxuKi9cbiAgICB2YXIgdCA9IGJ3LmNob2ljZShcbiAgICAgICAgZGlyLCBcbiAgICAgICAge1xuICAgICAgICAgICAgXCJsZWZ0XCIgIDogL15bXFxzXFx1RkVGRlxceEEwXFxuXSsvZyxcbiAgICAgICAgICAgIFwicmlnaHRcIiA6IC9bXFxzXFx1RkVGRlxceEEwXFxuXSskL2csXG4gICAgICAgICAgICBcIm5vbmVcIiAgOiAvKD8hKS8gLy8gdXNlZnVsIGZvciBwcm9ncmFtbWF0aWMgc2NlbmFyaW9zIChlZy4gWy4uLi5dLm1hcCApIHdoZXJlIG5vdCBhbGwgb2YgdGhlIGVudHJpZXMgc2hvdWxkIGJlIHRyaW1tZWQuXG4gICAgICAgIH0sXG4gICAgICAgIC9eW1xcc1xcdUZFRkZcXHhBMFxcbl0rfFtcXHNcXHVGRUZGXFx4QTBcXG5dKyQvZ1xuICAgICk7XG4gICAgcmV0dXJuIFN0cmluZyhfdG9hKHMsXCJ1bmRlZmluZWRcIixcIlwiLHMpKS5yZXBsYWNlKHQsXCJcIik7XG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbmJ3LnBhZFN0cmluZyA9IGZ1bmN0aW9uIChzLCB3aWR0aCwgZGlyLCBvcHRpb25zKSB7XG4vKipcbkBkZXNjcmlwdGlvbiBidy5wYWRTdHJpbmcoKSB0YWtlcyBhIHN0cmluZyBhbmQgcGFkcyBpdCB0byB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBjaGFycyBlaXRoZXIgbGVmdCBvciByaWdodCBvciBjZW50ZXJlZC5cbiovXG4gICAgdmFyIGRvcHRzID0ge1xuICAgICAgICBwYWQgICAgICAgIDogXCIgXCIsXG4gICAgICAgIHRyaW1EaXIgICAgOiBcImJvdGhcIiAgIC8vIHByZS10cmltIHRoZSBpbnB1dCBzdHJpbmc6ICBcImxlZnRcIiwgXCJyaWdodFwiLCBcImJvdGhcIiwgXCJub25lXCJcbiAgICB9O1xuICAgIGRvcHRzID0gb3B0c0NvcHkoZG9wdHMsIG9wdGlvbnMpO1xuXG4gICAgcyA9IFN0cmluZyhzKTtcbiAgICB2YXIgeCA9IGJ3LnRyaW0ocyxkb3B0c1tcInRyaW1EaXJcIl0pOyBcbiAgICB2YXIgcCA9ICh3aWR0aCA+IHgubGVuZ3RoICkgPyAod2lkdGggLSB4Lmxlbmd0aCsxKSA6IDAgOyAvLyB0b3RhbCBwYWRkaW5nXG4gICAgdmFyIHEgPSBidy5jaG9pY2UoZGlyLFxuICAgICAgICB7XG4gICAgICAgICAgICBcImxlZnRcIiAgICAgIDogW3AsMF0sXG4gICAgICAgICAgICBcInJpZ2h0XCIgICAgIDogWzAscF0sXG4gICAgICAgICAgICBcImNlbnRlclwiICAgIDogW01hdGgucm91bmQocC8yKSwgKHAtTWF0aC5yb3VuZChwLzIpKzEpXVxuICAgICAgICB9LFxuICAgICAgICAgICAgWzAsMF1cbiAgICAgICAgKTtcbiAgICByZXR1cm4gICgobmV3IEFycmF5KHFbMF0pKS5qb2luKGRvcHRzW1wicGFkXCJdKSkreCsobmV3IEFycmF5KHFbMV0pKS5qb2luKGRvcHRzW1wicGFkXCJdKTtcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuYncucmFuZG9tID0gZnVuY3Rpb24ocmFuZ2VCZWdpbiwgcmFuZ2VFbmQsIG9wdGlvbnMpIHtcbi8qKiBcbkBtZXRob2Q6IHJhbmRvbVxuXG5SZXR1cm4gYSByYW5kb20gbnVtYmVyIGJldHdlZW4gcmFuZ2VCZWdpbiBhbmQgUmFuZ2VFbmQgKGluY2x1c2l2ZSlcbiAgICBkZWZhdWx0IGlzIDAsMTAwXG5cbm9wdGlvbnMgXG4gICAge1xuICAgICAgICBzZXRUeXBlIDogXCJpbnRcIlxuICAgICAgICBkaW1zICAgIDogZmFsc2UgfCBudW1iZXIgfCBbICwgLCBdICAvLyBzZWxlY3RvciBmb3IgZGltZW5zaW9uc1xuICAgIH1cblxub3B0aW9uc1xuICAgIHNldFR5cGU6IFxuICAgIFwiaW50XCIgICAgICAgICAgICAgICA9PT4gcmV0dXJuIGFuIGludGVnZXIgKGRlZmF1bHQpXG4gICAgXCJmbG9hdFwiIG9yIFwibnVtYmVyXCIgPT0+IHJldHVybiBmbG9hdGluZyBwb2ludCBudW1iZXJcblxuICAgIGRpbXNcbiAgICAgICAgZmFsc2Ugb3Igb21taXR0ZWQgPT0+IHJldHVybiBhIHNpbmdsZSBudW1iZXJcbiAgICAgICAgNSAgICAgICAgICAgICAgICAgPT0+IHJldHVybiBhIDV4MSBhcnJheSBvZiByYW5kb20gbnVtYmVyc1xuICAgICAgICBbMyw1LDJdICAgICAgICAgICA9PT4gcmV0dXJuIGEgM3g1eDIgYXJyYXkgb2YgcmFuZG9tIG51bWJlcnNcblxuZXhhbXBsZTpcbmJ3LnJhbmRvbSgpID09PiByZXR1cm5zIGEgbnVtYmVyIGJ0dyAwLDEwMFxuYncucmFuZG9tKC00LDQse3NldFR5cGU6IFwiZmxvYXRcIiwgZGltc1s0LDVdfSkgPT0+IHJldHVybnMgYSAzeDUgYXJyYXkgb2YgZmxvYXRpbmcgcHQgbnVtYmVycyBidHcgLTQsNFxuXG5zZWUgYWxzbyBwcmFuZG9tIGZvciBwc3VlZG9yYW5kb20gbnVtYmVyc1xuXG4gKi9cbiAgICByYW5nZUJlZ2luID0gX3RvKHJhbmdlQmVnaW4pICA9PSBcIm51bWJlclwiID8gcmFuZ2VCZWdpbiA6IDA7XG4gICAgcmFuZ2VFbmQgICA9IF90byhyYW5nZUVuZCkgICAgPT0gXCJudW1iZXJcIiA/IHJhbmdlRW5kICAgOiAxMDA7XG5cbiAgICB2YXIgZG9wdHMgPSB7XG4gICAgICAgIHNldFR5cGUgOiBcImludFwiLFxuICAgICAgICBkaW1zICAgIDogZmFsc2UgLy8gaWYgZGltcyBpcyBhcnJheSBlLmcuIFszLDQsNV0gcmV0dXJucyByYW5kb20gZWxlbWVudHMgYXJyYXlcbiAgICB9O1xuICAgIFxuICAgIGRvcHRzID0gb3B0c0NvcHkoZG9wdHMsb3B0aW9ucyk7XG4gICAgXG4gICAgdmFyIF9ybmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBuID0gMDtcbiAgICBcbiAgICAgICAgZG9wdHMuc2V0VHlwZSAgICA9IFtcImludFwiLFwiZmxvYXRcIixcIm51bWJlclwiXS5pbmRleE9mKGRvcHRzLnNldFR5cGUpID09IC0xID8gXCJpbnRcIiA6IGRvcHRzLnNldFR5cGU7ICAgXG5cbiAgICAgICAgaWYgKHJhbmdlRW5kIDwgcmFuZ2VCZWdpbiApIHtcbiAgICAgICAgICAgIHJhbmdlQmVnaW4gXj0gcmFuZ2VFbmQ7IHJhbmdlRW5kIF49IHJhbmdlQmVnaW47IHJhbmdlQmVnaW4gXj0gcmFuZ2VFbmQ7XG4gICAgICAgIH1cbiAgICAgICAgbiA9ICgoTWF0aC5yYW5kb20oKSAqIChyYW5nZUVuZC1yYW5nZUJlZ2luKSkgKyByYW5nZUJlZ2luKTtcbiAgICBcbiAgICAgICAgcmV0dXJuIChkb3B0cy5zZXRUeXBlID09IFwiaW50XCIpID8gTWF0aC5yb3VuZChuKSA6IG47XG4gICAgfTtcblxuICAgIGlmICgoX3RvKGRvcHRzW1wiZGltc1wiXSkgPT0gXCJhcnJheVwiKSB8fCAoX3RvKGRvcHRzW1wiZGltc1wiXSk9PSBcIm51bWJlclwiKSlcbiAgICAgICAgcmV0dXJuIGJ3Lm11bHRpQXJyYXkoIF9ybmQsIGRvcHRzW1wiZGltc1wiXSk7XG5cbiAgICByZXR1cm4gX3JuZCgpO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5idy5wcmFuZG9tID0gZnVuY3Rpb24gKHJhbmdlQmVnaW4scmFuZ2VFbmQsc2VlZCwgb3B0aW9ucykge1xuLyoqXG5wcmFuZG9tIC0gZ2VuZXJhdGUgYSBwc3VlZG8gcmFuZG9tIG51bWJlciBmcm9tIGludGVybmFsIGhhc2ggZnVuY3Rpb24gaW4gYSBnaXZlbiByYW5nZVxuKi9cbiAgICByYW5nZUJlZ2luID0gX3RvKHJhbmdlQmVnaW4pICA9PSBcIm51bWJlclwiID8gcmFuZ2VCZWdpbiA6IDA7XG4gICAgcmFuZ2VFbmQgICA9IF90byhyYW5nZUVuZCkgICAgPT0gXCJudW1iZXJcIiA/IHJhbmdlRW5kICAgOiAxMDA7XG5cbiAgICB2YXIgZG9wdHMgPSB7XG4gICAgICAgIHNldFR5cGUgOiBcImludFwiLFxuICAgICAgICBkaW1zICAgIDogZmFsc2UgLy8gaWYgZGltcyBpcyBhcnJheSBlLmcuIFszLDQsNV0gcmV0dXJucyByYW5kb20gZWxlbWVudHMgYXJyYXlcbiAgICB9O1xuICAgIFxuICAgIGRvcHRzID0gb3B0c0NvcHkoZG9wdHMsb3B0aW9ucyk7XG4gICAgdmFyIF9jc2VlZCA9IHNlZWQ7XG4gICAgdmFyIF9ybmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBuID0gMDtcbiAgICBcbiAgICAgICAgZG9wdHMuc2V0VHlwZSAgICA9IFtcImludFwiLFwiZmxvYXRcIixcIm51bWJlclwiXS5pbmRleE9mKGRvcHRzLnNldFR5cGUpID09IC0xID8gXCJpbnRcIiA6IGRvcHRzLnNldFR5cGU7ICAgXG5cbiAgICAgICAgaWYgKHJhbmdlRW5kIDwgcmFuZ2VCZWdpbiApIHtcbiAgICAgICAgICAgIHJhbmdlQmVnaW4gXj0gcmFuZ2VFbmQ7IHJhbmdlRW5kIF49IHJhbmdlQmVnaW47IHJhbmdlQmVnaW4gXj0gcmFuZ2VFbmQ7XG4gICAgICAgIH1cbiAgICAgICAgbiA9ICgoKGJ3Lmhhc2hGbnYzMmEoXCJzdGFydCBzdHJpbmdcIixfY3NlZWQpICYgMHhmZmZmKS8oNjU1MzYpKSAqIChyYW5nZUVuZC1yYW5nZUJlZ2luKSkgKyByYW5nZUJlZ2luO1xuXG4gICAgICAgIF9jc2VlZCA9IChkb3B0cy5zZXRUeXBlID09IFwiaW50XCIpID8gTWF0aC5yb3VuZChuKSA6IG47XG4gICAgICAgIHJldHVybiAoZG9wdHMuc2V0VHlwZSA9PSBcImludFwiKSA/IE1hdGgucm91bmQobikgOiBuO1xuICAgIH07XG5cbiAgICBpZiAoKF90byhkb3B0c1tcImRpbXNcIl0pID09IFwiYXJyYXlcIikgfHwgKF90byhkb3B0c1tcImRpbXNcIl0pPT0gXCJudW1iZXJcIikpXG4gICAgICAgIHJldHVybiBidy5tdWx0aUFycmF5KCBfcm5kLCBkb3B0c1tcImRpbXNcIl0pO1xuXG4gICAgcmV0dXJuIF9ybmQoKTtcblxufTtcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5cbmJ3Lmhhc2hGbnYzMmE9IGZ1bmN0aW9uIChzdHIsIHNlZWQsIHJldHVybkhleFN0cikge1xuLyoqXG5AbWV0aG9kIENhbGN1bGF0ZSBhIDMyIGJpdCBGTlYtMWEgaGFzaFxuRm91bmQgaGVyZTogaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vdmFpb3JhYmJpdC81NjU3NTYxXG5SZWYuOiBodHRwOi8vaXN0aGUuY29tL2Nob25nby90ZWNoL2NvbXAvZm52L1xuXG5AcGFyYW0ge3N0cmluZ30gc3RyIHRoZSBpbnB1dCB2YWx1ZVxuXG5AcGFyYW0ge2ludGVnZXJ9IFtzZWVkXSBvcHRpb25hbGx5IHBhc3MgdGhlIGhhc2ggb2YgdGhlIHByZXZpb3VzIGNodW5rXG5cbkBwYXJhbSB7Ym9vbGVhbn0gW2FzU3RyaW5nPWZhbHNlXSBzZXQgdG8gdHJ1ZSB0byByZXR1cm4gdGhlIGhhc2ggdmFsdWUgYXMgXG4gIDgtZGlnaXQgaGV4IHN0cmluZyBpbnN0ZWFkIG9mIGFuIGludGVnZXJcblxuQHJldHVybnMge2ludGVnZXIgfCBzdHJpbmd9XG4qL1xuICAgIC8qanNoaW50IGJpdHdpc2U6ZmFsc2UgKi9cbiAgICB2YXIgaSwgbCxcbiAgICAgICAgaHZhbCA9ICh0eXBlb2Ygc2VlZCA9PSBcInVuZGVmaW5lZFwiKSA/IDB4ODExYzlkYzUgOiBzZWVkO1xuXG4gICAgZm9yIChpID0gMCwgbCA9IHN0ci5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgaHZhbCBePSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICAgICAgaHZhbCArPSAoaHZhbCA8PCAxKSArIChodmFsIDw8IDQpICsgKGh2YWwgPDwgNykgKyAoaHZhbCA8PCA4KSArIChodmFsIDw8IDI0KTtcbiAgICB9XG4gICAgaWYoIHJldHVybkhleFN0ciApe1xuICAgICAgICAvLyBDb252ZXJ0IHRvIDggZGlnaXQgaGV4IHN0cmluZ1xuICAgICAgICByZXR1cm4gKFwiMDAwMDAwMFwiICsgKGh2YWwgPj4+IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC04KTtcbiAgICB9XG4gICAgcmV0dXJuIGh2YWwgPj4+IDA7XG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbmJ3LkNTU01ha2VUaGVtZSAgID0gZnVuY3Rpb24oY29sb3IpIHtcbi8qKlxubWFrZVRoZW1lQ1NTIChjb2xvcikgXG5cbm1ha2VzIGEgQ1NTIHRoZW1lIGNvbG9yIHBhbGV0dHRlIGJhc2VkIG9uIHRoZSBzdXBwbGllZCBjb2xvciB3aGljaCBpcyBleHBvcnRlZCBhcyBhIGNzcyBzdHlsZVxuXG5UT0RPXG4gKi9cbiAgICB2YXIgYyA9ICBidy5jb2xvclJnYlRvSHNsKCBidy5jb2xvclBhcnNlKGNvbG9yKSk7XG5cbiAgICB2YXIgcCA9IFwiYnctdGhlbWUtXCI7XG4gICAgdmFyIHRobSA9IFtcImw1XCIsXCJsNFwiLFwibDNcIixcImwyXCIsXCJsMVwiLFwiZDFcIixcImQyXCIsXCJkM1wiLFwiZDRcIixcImQ1XCJdLm1hcChmdW5jdGlvbih4KXtyZXR1cm4gcCt4O30pO1xuICAgIHZhciBpbSA9IFwiICFpbXBvcnRhbnRcIjtcbiAgICB0aG0gPSB0aG0ubWFwKGZ1bmN0aW9uKHgsaSl7cmV0dXJuIFt4LFtbXCJjb2xvclwiLCAoKGk8NSk/XCIjMDAwXCIgOiBcIiNmZmZcIikraW0gXSxbXCJiYWNrZ3JvdW5kLWNvbG9yXCIsYyArIGltXSBdXTsgfSk7XG5cbiAgICByZXR1cm4gdGhtO1xuXG59O1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5idy5DU1NTaW1wbGVTdHlsZXMgPSBmdW5jdGlvbihhcHBlbmRUb0hlYWQsIG9wdGlvbnMpIHtcbi8qIFxuYncuYndTaW1wbGVTdHlsZXMoYXBwZW5kVG9IZWFkLG9wdGlvbnMpXG5cbmJpdHdyZW5jaCBzaW1wbGVTdHlsZXMgaXMgdGhlIGZ1bmN0aW9uIHdoaWNoIHdyaXRlcyBsb2FkcyBcbndyaXRlIGEgcXVpY2sgZ3JpZCBzdHlsZSBzaGVldCBmb3IgcXVpY2sgbiBkaXJ0eSBsYXlvdXQuICBTZWUgZG9jcyBmb3IgZXhhbXBsZXMuXG5cbjxoMSBjbGFzcz0nYnctaDEnPlRpdGxlIGZvciBteSBzZWN0aW9uPC9oMT5cbjxwPlRoaXMgc2VjdGlvbiBjb250YWlucyBzb21lIGludGVyZXN0aW5nIGRhdGEgYW5kIHRvcGljczwvcD5cbjxkaXYgY2xhc3M9XCJidy1yb3dcIj4gIDwhLS0gZGVmaW5lcyBhIHJvdyB1c2luZyBidyBjc3MgY2xhc3NlcyAtLT5cbjxkaXYgY2xhc3M9XCJidy1jb2wzXCI+Y29sdW1uIDEgY29udGVudDwvZGl2PjxkaXYgY2xhc3M9XCJidy1jb2wzXCI+Y29sdW1uIDIgY29udGVudDwvZGl2PjxkaXYgY2xhc3M9XCJidy1jb2wzXCI+Y29sdW1uIDMgY29udGVudDwvZGl2PjxkaXYgY2xhc3M9XCJidy1jb2wzXCI+Y29sdW1uIDQgY29udGVudDwvZGl2PlxuPC9kaXY+XG48ZGl2PlxuXG4gICAgYXBwZW5kVG9IZWFkICA9PT4gaWYgdHJ1ZSwgYXR0ZW1wdHMgdG8gYXBwZW5kIHRvIEhUTUwgPGhlYWQ+IChvbmx5IHdyaXRlcyBpZiBub3QgYWxyZWFkeSBwcmVzZW50KVxuICAgIG9wdGlvbnM6IHtcbiAgICAgICAgXCJiYXNpY3NcIiA6IFwibG9hZFwiICAvLyBpZiBzZXQgdG8gXCJsb2FkIHdpbGwgbG9hZCBzb21lIGdsb2JhbCBjb25zdGFudHMgZm9yIGh0bWwsIGJvZHksIGZvbnQtZmFtaWx5XCIsIHNldCB0byBmYWxzZSB0byBsZWF2ZSB0aGVzZSB1bmNoYW5nZWQuXG4gICAgICAgIFwiZXhwb3J0Q1NTXCI6IGZhbHNlIC8vIGlmIHRydWUgd2lsbCB3cmFwIHRoZSBvdXRwdXQgY3NzIGluIFwic2NyaXB0XCIgdGFncy4gIFxuICAgICAgICBcImlkXCIgOiBcImJ3LWRlZmF1bHQtc3R5bGVzXCIgLy8gaWQgYXNzaWduZWQgdG8gdGhlIHNjcmlwdCB0YWcsIHVzZWQgZm9yIHByZXZlbnRpbmcgbXVsdGlwbGUgbG9hZGluZyBpbiBhIGJyb3dzZXIgcGFnZVxuXG4gKi9cbiAgICB2YXIgcyA9XCJcXG5cIiwgaTtcbiAgICAvL3ZhciBpLGosayxsO1xuICAgIHZhciBfciA9IGJ3LmZpeE51bTtcbiAgICB2YXIgcmwgPSBidy5tYWtlQ1NTUnVsZTtcbiAgICB2YXIgZG9wdHMgPSB7XG4gICAgICAgIFwiZ2xvYmFsc1wiICAgICAgIDogZmFsc2UsXG4gICAgICAgIFwiaWRcIiAgICAgICAgICAgOiBcImJ3LWRlZmF1bHQtc3R5bGVzXCIsXG4gICAgICAgIFwiZXhwb3J0Q1NTXCIgICAgOiBmYWxzZSxcbiAgICAgICAgXCJjb2xvcnNldFwiICAgICA6IHtcImNvbG9yXCIgOiBcIiMwMDBcIiwgXCJiYWNrZ3JvdW5kLWNvbG9yXCIgOlwiI2RkZFwiLCBcImFjdGl2ZVwiIDogXCIjMjIyXCJ9LCBcbiAgICAgICAgXCJwcmV0dHlcIiAgICAgICA6IGZhbHNlLCAvL21ha2UgZWFzeSB0byByZWFkXG4gICAgICAgIFwidGhlbWVzXCIgICAgICAgOiAgLy8gYnVpbHQtaW4gcHJpbWl0aXZlIHRoZW1lc1xuICAgICAgICAgICAgWyAvLyBtdXN0IGJlIHZhbGlkIENTUyBrZXlzIC8gdmFsdWVzXG4gICAgICAgICAgICAgICAgW1wiLmJ3LXRobS1saWdodFwiICAsIHtcImNvbG9yXCI6IFwiIzAyMDIwMiAhaW1wb3J0YW50O1wiLCBcImJhY2tncm91bmQtY29sb3JcIjogXCIjZTJlMmUyICFpbXBvcnRhbnQ7XCJ9XSxcbiAgICAgICAgICAgICAgICBbXCIuYnctdGhtLWRhcmtcIiAgICwge1wiY29sb3JcIjogXCIjZTJlMmUyICFpbXBvcnRhbnQ7XCIsIFwiYmFja2dyb3VuZC1jb2xvclwiOiBcIiMwMjAyMDIgIWltcG9ydGFudDtcIn1dLFxuICAgICAgICAgICAgXVxuICAgIH07XG5cbiAgICBkb3B0cyA9IG9wdHNDb3B5KGRvcHRzLG9wdGlvbnMpO1xuXG4gICAgdmFyIGRlZnMgPSB7IC8vIGRlZmF1bHRzXG4gICAgICAgIGRlZkNvbnRhaW5lcjogICAgICAgXCJ7aGVpZ2h0OiAxMDAlOyAgd2lkdGg6IDg2JTsgIG1hcmdpbjogMCBhdXRvOyAgcGFkZGluZy1sZWZ0OiAyJTsgcGFkZGluZy1yaWdodDoyJTsgbGVmdDogMDsgIHRvcDogMSU7fVxcblwiLFxuICAgICAgICBkZWZGb250U2VyaWY6ICAgICAgIFwie2ZvbnQtZmFtaWx5OiBUaW1lcyBOZXcgUm9tYW4sIFRpbWVzLCBzZXJpZjt9XFxuXCIsXG4gICAgICAgIGRlZkZvbnRTYW5zU2VyaWY6ICAgXCJ7Zm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWYgfVxcblwiLFxuICAgIH07XG5cbiAgICBpZiAoZG9wdHNbXCJnbG9iYWxzXCJdID09IFwibG9hZFwiKSB7XG4gICAgICAgIHMrPSBcIlxcbmh0bWwsYm9keSBcIisgZGVmcy5kZWZDb250YWluZXI7XG4gICAgICAgIHMrPSBcIipcIitkZWZzLmRlZkZvbnRTYW5zU2VyaWY7XG4gICAgfVxuXG4gICAgcys9IFwiLmJ3LWRlZi1wYWdlLXNldHVwXCIgKyBkZWZzLmRlZkNvbnRhaW5lcjtcbiAgICBzKz0gXCIuYnctZm9udC1zZXJpZlwiICAgICArIGRlZnMuZGVmRm9udFNlcmlmO1xuICAgIHMrPSBcIi5idy1mb250LXNhbnMtc2VyaWZcIisgZGVmcy5kZWZGb250U2Fuc1NlcmlmO1xuXG4gICAgcys9IChbMSwyLDMsNCw1LDZdLm1hcChmdW5jdGlvbih4KXtyZXR1cm4gXCIuYnctaFwiK3grXCJ7IGZvbnQtc2l6ZTogXCIrX3IoMy4yKk1hdGgucG93KC44NSx4KzEpKStcInJlbTt9XCI7fSkuam9pbihcIlxcblwiKSkrXCJcXG5cIjtcblxuICAgIC8vcHJpbXRpdmUgaW4tYnVpbHQgY29sb3IgdGhlbWVpbmcgIHNlZSBvcHRzIHRvIG92ZXJpZGVcbiAgICBmb3IgKGkgaW4gZG9wdHNbXCJjb2xvcnNldFwiXSl7XG4gICAgICAgIHMrPSBcIi5idy1jb2xvci1cIitpK1wiIHtcIitpK1wiOlwiICtkb3B0c1tcImNvbG9yc2V0XCJdW2ldK1wifVxcblwiO1xuICAgIH1cblxuICAgIGJ3Lm1ha2VDU1MoIGRvcHRzW1widGhlbWVzXCJdKTtcbiAgICBmb3IgKGk9MDsgaTwgZG9wdHNbXCJ0aGVtZXNcIl0ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcys9IHJsKCBkb3B0c1tcInRoZW1lc1wiXVtpXSk7XG4gICAgICAgIC8vcys9IGJ3Lm1ha2VDU1MoIGRvcHRzW1widGhlbWVzXCJdW2ldKVxuICAgIH1cbiAgICAgICAgXG4gICAgLy90ZXh0IGhhbmRsaW5nXG4gICAgXG4gICAgdmFyIGQgPSBbIFxuICAgICAgICBbXCIuYnctbGVmdFwiLCAgICB7XCJ0ZXh0LWFsaWduXCI6IFwibGVmdFwifV0sXG4gICAgICAgIFtcIi5idy1yaWdodFwiLCAgIHtcInRleHQtYWxpZ25cIjogXCJyaWdodFwifV0sXG4gICAgICAgIFtcIi5idy1jZW50ZXJcIiwgIHtcInRleHQtYWxpZ25cIjogXCJjZW50ZXJcIiwgXCJtYXJnaW5cIjogXCIwIGF1dG9cIn1dLFxuICAgICAgICBbXCIuYnctanVzdGlmeVwiLCB7XCJ0ZXh0LWFsaWduXCI6IFwianVzdGlmeVwifV0sXG4gICAgICAgIFtcIi5idy1jb2RlXCIsICAgIHtcImZvbnQtZmFtaWx5XCI6XCJtb25vc3BhY2VcIiwgXCJ3aGl0ZS1zcGFjZVwiOlwicHJlLXdyYXBcIn1dLFxuICAgICAgICBbXCIuYnctcGFkMVwiLCAgICB7XCJwYWRkaW5nLWxlZnRcIjogXCIxJVwiLCBcInBhZGRpbmctcmlnaHRcIjpcIjElXCJ9XSxcbiAgICBcbiAgICAgICAgLy90YWJsZXNcbiAgICAgICAgW1wiLmJ3LXRhYmxlLXN0cmlwZSB0cjpudGgtY2hpbGQoZXZlbilcIiAsIHtcImJhY2tncm91bmQtY29sb3JcIjpcIiNmMGYwZjBcIn1dLCAgLy8gc3RyaXBlZCByb3dzXG4gICAgICAgIFtcIi5idy10YWJsZS1jb2wwLWJvbGQgdHIgdGQ6Zmlyc3QtY2hpbGRcIiwge1wiZm9udC13ZWlnaHRcIjogXCI3MDBcIn1dLCAgICAgICAgIC8vIG1ha2UgZmlyc3QgY29sIGJvbGRcbiAgICAgICAgW1wiLmJ3LXRhYmxlLWNvbXBhY3RcIiwgIHtcImJvcmRlci1jb2xsYXBzZVwiOlwiY29sbGFwc2VcIiwgXCJib3JkZXItc3BhY2luZ1wiOiBcIjBcIn1dLFxuICAgICAgICBbXCIuYnctdGFibGUtc29ydC11cGE6OmFmdGVyXCIsIHtcImNvbnRlbnRcIjogXCJcXFwiXFxcXDIxOTFcXFwiXCJ9XSwgIC8vIHRhYmxlIHNvcnQgYXJyb3cgdXAgKHdoZW4gdmlzaWJsZSBhcnJvd3MgY2hvc2VuKVxuICAgICAgICBbXCIuYnctdGFibGUtc29ydC1kbmE6OmFmdGVyXCIsIHtcImNvbnRlbnRcIjogXCJcXFwiXFxcXDIxOTNcXFwiXCJ9XSwgIC8vIHRhYmxlIHNvcnQgYXJyb3cgZG4gKHdoZW4gdmlzaWJsZSBhcnJvd3MgY2hvc2VuKVxuICAgICAgICBbXCIuYnctdGFibGUtc29ydC14eGE6OmFmdGVyXCIsIHtcImNvbnRlbnRcIjogXCJcXFwiXFxcXDAwYTBcXFwiXCJ9XSwgIC8vIHRhYmxlIHNvcnQgc3BhY2UgICh3aGVuIHZpc2libGUgYXJyb3dzIGNob3NlbilcblxuICAgICAgICAvL3RhYnNcbiAgICAgICAgW1wiLmJ3LXRhYi1pdGVtLWxpc3RcIiwgIHsgXCJtYXJnaW5cIjogMCwgXCJwYWRkaW5nLWlubGluZS1zdGFydFwiOjB9XSxcbiAgICAgICAgW1wiLmJ3LXRhYi1pdGVtXCIse1wiZGlzcGxheVwiOlwiaW5saW5lXCIsIFwicGFkZGluZy10b3BcIjpcIjVweFwiLCBcInBhZGRpbmctbGVmdFwiOlwiMTBweFwiLCBcInBhZGRpbmctcmlnaHRcIjpcIjEwcHhcIiwgXCJib3JkZXItdG9wLXJpZ2h0LXJhZGl1c1wiOlwiN3B4XCIsIFwiYm9yZGVyLXRvcC1sZWZ0LXJhZGl1c1wiOiBcIjdweFwifV0sXG4gICAgICAgIFtcIi5idy10YWItYWN0aXZlXCIsIHsvKiBwYWRkaW5nLXRvcDo0cHg7IHBhZGRpbmctbGVmdDo2cHg7IHBhZGRpbmctcmlnaHQ6NnB4OyBwYWRkaW5nLWJvdHRvbTowOyAgKi8gXCJmb250LXdlaWdodFwiOlwiNzAwXCJ9XSxcbiAgICAgICAgW1wiLmJ3LXRhYjpob3ZlclwiLHtcImN1cnNvclwiOiBcInBvaW50ZXJcIiwgXCJmb250LXdlaWdodFwiOiA3MDAvKiBib3JkZXI6IDFweCAgc29saWQgI2JiYjsgKi99XSxcbiAgICAgICAgW1wiLmJ3LXRhYi1jb250ZW50LWxpc3RcIiwgeyBtYXJnaW46IDAgfV0sXG4gICAgICAgIFtcIi5idy10YWItY29udGVudFwiLHsgZGlzcGxheTpcIm5vbmVcIixcIm1hcmdpbi10b3BcIjpcIi0xcHhcIiwgXCJib3JkZXItcmFkaXVzXCI6MH1dLFxuICAgICAgICBbXCIuYnctdGFiLWNvbnRlbnQsIC5idy10YWItYWN0aXZlXCIsIHtcImJhY2tncm91bmQtY29sb3JcIjogXCIjZGRkXCJ9XSxcblxuICAgICAgICAvL2dyaWQgc2V0dXBcbiAgICAgICAgW1wiLmJ3LWNvbnRhaW5lclwiLHsgbWFyZ2luOiBcIjAgYXV0b1wifV0sXG4gICAgICAgIFtcIi5idy1yb3dcIiwgICAgICB7IHdpZHRoOiBcIjEwMCVcIiwgZGlzcGxheTogXCJibG9ja1wifV0sXG4gICAgICAgIFtcIi5idy1yb3cgW2NsYXNzXj1cXFwiYnctY29sXFxcIl1cIiwgeyBmbG9hdDogXCJsZWZ0XCJ9XSxcbiAgICAgICAgW1wiLmJ3LXJvdzo6YWZ0ZXJcIiwgeyBjb250ZW50OiBcIlxcXCJcXFwiXCIsICAgZGlzcGxheTogXCJ0YWJsZVwiLCBjbGVhcjpcImJvdGhcIn1dLFxuICAgICAgICBbXCIuYnctYm94LTFcIiwge1wicGFkZGluZy10b3BcIjpcIjEwcHhcIixcInBhZGRpbmctYm90dG9tXCI6IFwiMTBweFwiLCBcImJvcmRlci1yYWRpdXNcIjogXCI4cHhcIn1dLFxuICAgIFxuICAgICAgICAvL21pc2MgZWxlbWVudCBjb250cm9sc1xuICAgICAgICBbXCIuYnctaGlkZVwiLCAgIHsgZGlzcGxheTogXCJub25lXCJ9XSxcbiAgICAgICAgW1wiLmJ3LXNob3dcIiwgICB7IGRpc3BsYXk6IFwiYmxvY2tcIn1dXG4gICAgXTtcblxuXG4gICAgLy8gZ3JpZCBzeXN0ZW0gKGdlbmVyYXRlZClcbiAgICBmb3IgKHZhciBrPTE7IGs8PTEyOyBrKyspXG4gICAgICAgIGQucHVzaChbXCIuYnctY29sLVwiK2ssIHt3aWR0aDooX3IoayoxMDAvMTIpK1wiJVwiKX1dKTtcblxuICAgIC8vIGdlbmVyYXRlIENTUyBmcm9tIGFib3ZlIHJ1bGVzICAgIFxuICAgIHMrPSBkLm1hcChmdW5jdGlvbih4KXtyZXR1cm4gcmwoeCx7cHJldHR5OmRvcHRzLnByZXR0eX0pO30pLmpvaW4oXCJcXG5cIikrXCJcXG5cIjtcblxuICAgIC8vcmVzcG9uc2l2ZSBzY3JlZW5cbiAgICBzKz0gXCJAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU0MHB4KSB7ICAuYnctY29udGFpbmVyIHsgICAgd2lkdGg6IDk0JTsgIH19XFxuXCI7XG4gICAgcys9IFwiQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3MjBweCkgeyAgLmJ3LWNvbnRhaW5lciB7ICAgIHdpZHRoOiA5MCU7ICB9fVxcblwiO1xuICAgIHMrPSBcIkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogOTYwcHgpIHsgIC5idy1jb250YWluZXIgeyAgICB3aWR0aDogODYlOyAgfX1cXG5cIjtcbiAgICBzKz0gXCJAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDExMDBweCl7ICAuYnctY29udGFpbmVyIHsgICAgd2lkdGg6IDc4JTsgIH19XFxuXCI7XG4gICAgXG4gICAgXG4gICAgaWYgKGJ3LmlzTm9kZUpTKCkgPT0gZmFsc2UpIHtcbiAgICAgICAgdmFyIGggID0gYncuRE9NKFwiaGVhZFwiKVswXTtcbiAgICAgICAgdmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xuICAgICAgICBlbC5pZCA9IGRvcHRzW1wiaWRcIl07XG4gICAgICAgIGVsLnRleHRDb250ZW50ID0gcztcblxuICAgICAgICBpZiAoYXBwZW5kVG9IZWFkICYmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChkb3B0c1tcImlkXCJdKSA9PSBudWxsKSkgIC8vIG9ubHkgYXBwZW5kIG9uY2VcbiAgICAgICAgICAgIGguYXBwZW5kQ2hpbGQoZWwpO1xuICAgIH1cbiAgICBpZiAoZG9wdHNbXCJleHBvcnRDU1NcIl0pXG4gICAgICAgIHMgPSBidy5odG1sKFtcInN0eWxlXCIse1wiaWRcIjpkb3B0c1tcImlkXCJdfSxcIlxcbi8qKlxcbiBiaXR3cmVuY2ggYmFzaWMgY3NzIHN0eWxlc1xcbiB2ZXJzaW9uOiBcIitidy52ZXJzaW9uKClbXCJ2ZXJzaW9uXCJdK1wiXFxuICovXCIrc10pO1xuICAgIHJldHVybiBzO1xufTtcblxuXG5idy5DU1NTaW1wbGVUaGVtZXMgPSBmdW5jdGlvbiAoZCxhcHBlbmRUb0hlYWQpIHtcbi8qKiBcbmJ3LmJ3U2ltcGxlVGhlbWVzKCkgc2VsZWN0cyBzaW1wbGUgKHdlIGRvIG1lYW4gc2ltcGxlKSBIVE1MIHRoZW1lcyBmb3Igc29tZSBiYXNpYyBlbGVtZW50cy5cbmlmIGQgaXMgYW4gbnVtYmVyIGl0IHNlbGVjdHMgdGhlIGJ1aWx0LWluIHRoZW1lIGJ5IGluZGV4IChzZWUgZG9jcykgZWxzZSBpZiBkIGlzIGEgZGljdGlvbmFyeSB0aGUgZWxlbWVudHNcbmluIGQgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBDU1Mgc3R5bGUuXG5cbm91dHB1dCBpcyBhIENTUyBzdHlsZS4gIGlmIGFwcGVuZFRvSGVhZCBpcyB0cnVlIG9yIG9taXR0ZWQgdGhlbiB0aGUgdGhlbWUgaXMgYXBwZW5kZWQgdG8gdGhlIGhlYWQgZWxlbWVudC5cbiAqL1xuICAgIHZhciBzID1cIlwiLHhzPXt9O1xuICAgIC8qXG4gICAgdmFyIHRobSA9IHtcbiAgICAgICAgZGVmQmtnQ29sIDogXCIjMzMzXCIsXG4gICAgICAgIGRlZkNvbCAgICA6IFwiI2RkZFwiLFxuICAgICAgICBjb2wxICAgICAgOiBcIiM1NTVcIixcbiAgICAgICAgY29sMiAgICAgIDogXCIjZjBmMGYwXCIsXG4gICAgICAgIGJyZCAgICAgICA6IFwiI2RkZFwiXG4gICAgfTtcblxuICAgIHZhciB0aG1DU1MgPSAgXG4gICAgICAgICAgICBbIFxuICAgICAgICAgICAgICAgIFtcIipcIiAgICAgICAgICAgICAgICAgICAgICAgICwge1wiYmFja2dyb3VuZC1jb2xvclwiOiB0aG0uZGVmQmtnQ29sLCBcImNvbG9yXCI6dGhtLmRlZkNvbCwgXCJmb250LWZhbWlseVwiOiBcInNhbnMtc2VyaWZcIiwgXCJib3gtc2l6aW5nXCI6XCJib3JkZXItYm94XCJ9XSxcbiAgICAgICAgICAgICAgICBbXCJib2R5XCIgICAgICAgICAgICAgICAgICAgICAsIHtcIm1hcmdpbi10b3BcIjpcIjElXCJ9XSxcbiAgICAgICAgICAgICAgICBbXCJ0aFwiICAgICAgICAgICAgICAgICAgICAgICAsIHtcImJhY2tncm91bmQtY29sb3JcIjp0aG0uY29sMX1dLFxuICAgICAgICAgICAgICAgIFtcInRib2R5IHRyOm50aC1jaGlsZChldmVuKVwiICwge1wiYmFja2dyb3VuZC1jb2xvclwiOiB0aG0uY29sMn1dLFxuICAgICAgICAgICAgICAgIFtbXCJ0YWJsZVwiLCBcInRkXCIsIFwidGhcIl0gICAgICAsIHtcImJvcmRlci1jb2xsYXBzZVwiOlwiY29sbGFwc2VcIiwgXCJib3JkZXJcIjpcIjFweCBzb2xpZCBcIit0aG0uYnJkfV0sXG4gICAgICAgICAgICAgICAgW1tcInRkXCIsXCJ0aFwiXSAgICAgICAgICAgICAgICAsIHtcInBhZGRpbmdcIjpcIjRweFwifV0sXG4gICAgICAgICAgICAgICAgW1tcImRpdlwiLFwiYm9keVwiLFwiYnV0dG9uXCIsXCJ0YWJsZVwiLFwiaW5wdXRcIl0gLCB7XCJib3JkZXItcmFkaXVzXCI6IFwiMnB4XCJ9XVxuICAgICAgICAgICAgICAgIC8vIFtcImRpdlwiLCB7XCJwYWRkaW5nLWxlZnRcIjpcIjIlXCIsIFwicGFkZGluZy1yaWdodFwiOlwiMiVcIixcInBhZGRpbmctdG9wXCI6XCIxJVwiLFwicGFkZGluZy1ib3R0b21cIjpcIjElXCJ9XSAgIFxuICAgICAgICAgICAgXTtcbiAgICAgICAgKi9cbiAgICB2YXIgZGVmID0gIFsgLy8gZGVmYXVsdCBzdHlsZXNcbiAgICB7XG4gICAgICAgIFxuICAgICAgICBjc3M6IFxuICAgICAgICAgICAgWyBcbiAgICAgICAgICAgICAgICBbXCIqXCIgICAgICAgICAgICAgICAgICAgICAgICAsIHtcImJhY2tncm91bmQtY29sb3JcIjogXCIjMzMzXCIsIFwiY29sb3JcIjpcIiNkZGRcIiwgXCJmb250LWZhbWlseVwiOiBcInNhbnMtc2VyaWZcIiwgXCJib3gtc2l6aW5nXCI6XCJib3JkZXItYm94XCJ9XSxcbiAgICAgICAgICAgICAgICBbXCJib2R5XCIgICAgICAgICAgICAgICAgICAgICAsIHtcIm1hcmdpbi10b3BcIjpcIjElXCJ9XSxcbiAgICAgICAgICAgICAgICBbXCJ0aFwiICAgICAgICAgICAgICAgICAgICAgICAsIHtcImJhY2tncm91bmQtY29sb3JcIjpcIiM1NTVcIn1dLFxuICAgICAgICAgICAgICAgIFtcInRib2R5IHRyOm50aC1jaGlsZChldmVuKVwiICwge1wiYmFja2dyb3VuZC1jb2xvclwiOiBcIiNmMGYwZjBcIn1dLFxuICAgICAgICAgICAgICAgIFtbXCJ0YWJsZVwiLCBcInRkXCIsIFwidGhcIl0gICAgICAsIHtcImJvcmRlci1jb2xsYXBzZVwiOlwiY29sbGFwc2VcIiwgXCJib3JkZXJcIjpcIjFweCBzb2xpZCAjZGRkXCJ9XSxcbiAgICAgICAgICAgICAgICBbW1widGRcIixcInRoXCJdICAgICAgICAgICAgICAgICwge1wicGFkZGluZ1wiOlwiNHB4XCJ9XSxcbiAgICAgICAgICAgICAgICBbW1wiZGl2XCIsXCJib2R5XCIsXCJidXR0b25cIixcInRhYmxlXCIsXCJpbnB1dFwiXSAsIHtcImJvcmRlci1yYWRpdXNcIjogXCIycHhcIn1dXG4gICAgICAgICAgICAgICAgLy8gW1wiZGl2XCIsIHtcInBhZGRpbmctbGVmdFwiOlwiMiVcIiwgXCJwYWRkaW5nLXJpZ2h0XCI6XCIyJVwiLFwicGFkZGluZy10b3BcIjpcIjElXCIsXCJwYWRkaW5nLWJvdHRvbVwiOlwiMSVcIn1dICAgXG4gICAgICAgICAgICBdLFxuICAgIH0sXG4gICAge1xuICAgICAgICBjc3M6IFxuICAgICAgICAgICAgWyBcbiAgICAgICAgICAgICAgICBbXCIqXCIgICAgICAgICAgICAgICAgICAgICAgICAsIHtcImJhY2tncm91bmQtY29sb3JcIjogXCIjZjhmOGY4XCIsIFwiY29sb3JcIjpcIiMxMTFcIiwgXCJmb250LWZhbWlseVwiOiBcInNhbnMtc2VyaWZcIiwgXCJib3gtc2l6aW5nXCI6XCJib3JkZXItYm94XCJ9XSxcbiAgICAgICAgICAgICAgICBbXCJib2R5XCIgICAgICAgICAgICAgICAgICAgICAsIHtcIm1hcmdpbi10b3BcIjpcIjElXCJ9XSxcbiAgICAgICAgICAgICAgICBbXCJ0aFwiICAgICAgICAgICAgICAgICAgICAgICAsIHtcImJhY2tncm91bmQtY29sb3JcIjpcIiNkZGRcIn1dLFxuICAgICAgICAgICAgICAgIFtcInRib2R5IHRyOm50aC1jaGlsZChldmVuKVwiICwge1wiYmFja2dyb3VuZC1jb2xvclwiOlwiI2RkZFwifV0sXG4gICAgICAgICAgICAgICAgW1tcInRhYmxlXCIsIFwidGRcIiwgXCJ0aFwiXSAgICAgICwge1wiYm9yZGVyLWNvbGxhcHNlXCI6XCJjb2xsYXBzZVwiLCBcImJvcmRlclwiOlwiMXB4IHNvbGlkICMxMTFcIn1dLFxuICAgICAgICAgICAgICAgIFtbXCJ0ZFwiLFwidGhcIl0gICAgICAgICAgICAgICAgLCB7XCJwYWRkaW5nXCI6XCI0cHhcIn1dLFxuICAgICAgICAgICAgICAgIFtbXCJkaXZcIixcImJvZHlcIixcImJ1dHRvblwiLFwidGFibGVcIixcImlucHV0XCJdICwge1wiYm9yZGVyLXJhZGl1c1wiOiBcIjJweFwifV1cbiAgICAgICAgICAgICAgICAvLyBbXCJkaXZcIiwge1wicGFkZGluZy1sZWZ0XCI6XCIyJVwiLCBcInBhZGRpbmctcmlnaHRcIjpcIjIlXCIsXCJwYWRkaW5nLXRvcFwiOlwiMSVcIixcInBhZGRpbmctYm90dG9tXCI6XCIxJVwifV0gICBcbiAgICAgICAgICAgIF0sXG4gICAgfVxuICAgIF07XG4gICAgeHMgPSBidy5jaG9pY2UoX3RvKGQpLHtcbiAgICAgICAgICAgIFwib2JqZWN0XCIgOiBkLFxuLy8gICAgICAgICAgICBcInN0cmluZ1wiIDogZnVuY3Rpb24oKXt9XG4gICAgICAgICAgICBcIm51bWJlclwiIDogKChkPj0wKSAmJiAoZDxkZWYubGVuZ3RoKSk/ZGVmW2RdLmNzczpkZWZbMF0uY3NzIFxuICAgICAgICB9LGRlZlswXS5jc3MpO1xuXG4gICAgcz0geHMubWFwKGZ1bmN0aW9uKHkpe3JldHVybiBidy5tYWtlQ1NTUnVsZSh5LHtwcmV0dHk6ZmFsc2V9KTt9KS5qb2luKFwiXFxuXCIpO1xuICAgIGlmIChhcHBlbmRUb0hlYWQgIT0gZmFsc2UpIHtcbiAgICAgICAgLy92YXIgaHMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImJ3LXNpbXBsZS10aGVtZS1zdHlsZXNcIik7XG4gICAgICAgIHZhciBocyA9IGJ3LkRPTShcImJ3LXNpbXBsZS10aGVtZS1zdHlsZXNcIik7XG4gICAgICAgIGlmIChocy5sZW5ndGggPT0gMCkgey8vIGZpcnN0IHRpbWVcbiAgICAgICAgICAgIC8vdmFyIGggID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdO1xuICAgICAgICAgICAgdmFyIGggPSBidy5ET00oXCJoZWFkXCIpWzBdO1xuICAgICAgICAgICAgdmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xuICAgICAgICAgICAgZWwuaWQgPSBcImJ3LXNpbXBsZS10aGVtZS1zdHlsZXNcIjtcbiAgICAgICAgICAgIGVsLnRleHRDb250ZW50ID0gczsgIC8vbm90ZSBJRTggcmVxdWlyZXMgLnRleHQ9XG4gICAgICAgICAgICBoLmFwcGVuZENoaWxkKGVsKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHsgLy8gcmVwbGFjZSBpdFxuICAgICAgICAgICAgaHMudGV4dENvbnRlbnQgPSBzOyAvL25vdGUgSUU4IHJlcXVpcmVzIC50ZXh0PVxuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICByZXR1cm4gcztcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuYncuc2VsZWN0VGFiQ29udGVudCA9IGZ1bmN0aW9uIChpdGVtLCB0YXJnZXQpIHsgXG4vKiogXG5UaGlzIGZ1bmN0aW9uIGlzIHVzZWQgaW5zaWRlIGEgdGFiIGJsb2NrIHRvIHNob3cgdGhlIGFwcHJvcHJpYXRlIGNvbnRlbnQuICBOb3RlIHRoYXQgdGhpcyBpc1xuZGVzaWduZWQgdG8gd29yayBldmVuIGlmIGNvZGUgaXMgZW1pdHRlZCBhcyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm15VGFic1wiKS5pbm5lckhUTUwgPSA8PGdlbmVyYXRlZCBjb2RlLi4+Plxub3Igc3RhdGljYWxseSB3cml0dGVuIGJ5IHRoZSBwcm9ncmFtbWVyLlxuXG5ub3RlIHRoYXQgRE9NIElEcyBhcmUgbm90IHJlcXVpcmVkIGFzIHNlbGVjdFRhYkNvbnRlbnQoKSB1c2VzIERPTSBwYXRoIHJlbGF0aXZlIGxvZ2ljIGludGVybmFsbHlcblxuPGRpdiBjbGFzcz1cImJ3LXRhYi1jb250YWluZXJcIj4gIDwhLS0gYnctdGFiLWNvbnRhaW5lciAtLSBidy10YWItaXRlbXMgKGFycmF5IG9mIGl0ZW1zKSwgYnctdGFiLWNvbnRlbnQgKGFycmF5IG9mIGNvbnRlbnQgdG8gc2hvdykgLS0+XG4gICAgPHVsIGNsYXNzPVwiYnctdGFiLWl0ZW0tbGlzdFwiPiA8IS0tIGNvbnRhaW5lciBmb3IgdGhlIHRhYnMgLS0+XG4gICAgICAgIDxsaSBjbGFzcz1cImJ3LXRhYiB1c2VyVGFiICBidy10YWItYWN0aXZlXCIgb25jbGljaz1cImJ3LnNlbGVjdFRhYkNvbnRlbnQodGhpcylcIiA+VGFiIDE8L2xpPlxuICAgICAgICA8bGkgY2xhc3M9XCJidy10YWIgdXNlclRhYiAgXCIgb25jbGljaz1cImJ3LnNlbGVjdFRhYkNvbnRlbnQodGhpcylcIiA+VGFiIDI8L2xpPlxuICAgICAgICA8bGkgY2xhc3M9XCJidy10YWIgdXNlclRhYiAgXCIgb25jbGljaz1cImJ3LnNlbGVjdFRhYkNvbnRlbnQodGhpcylcIiA+VGFiIDM8L2xpPlxuICAgICAgICA8bGkgY2xhc3M9XCJidy10YWIgdXNlclRhYiAgXCIgb25jbGljaz1cImJ3LnNlbGVjdFRhYkNvbnRlbnQodGhpcylcIiA+VGFiIDQ8L2xpPlxuICAgIDwvdWw+XG4gICAgPGRpdiBjbGFzcz1cImJ3LXRhYi1jb250ZW50LWxpc3RcIj4gPCEtLSBjb250YWluZXIgZm9yIHRoZSB0YWIgY29udGVudCAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImJ3LXRhYi1jb250ZW50IGJ3LXNob3dcIiA+Y29vbnRlbnQgYXJlYSAxIDwvZGl2PiAgPCEtLSBidy1zaG93IHBpY2tzIHdoaWNoIHRhYiB0byBtYWtlIGFjdGl2ZSBhdCBmaXJzdCAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImJ3LXRhYi1jb250ZW50XCIgPmNvbnRlbnQgYXJlYSAyPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJidy10YWItY29udGVudFwiID5jb250ZW50IDM8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImJ3LXRhYi1jb250ZW50XCIgPmNvbnRlbnQgNDwvZGl2PlxuICAgIDwvZGl2PiA8IS0tIGVuZCBvZiB0YWIgY29udGVudCBzZWN0IC0tPlxuPC9kaXY+XG4gKi9cbiAgICAvL2lmIChfdG8oaXRlbSk9PVwic3RyaW5nXCIpXG4gICAgLy8gICAgaXRlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGl0ZW0pO1xuICAgIGl0ZW0gPSBidy5ET00oaXRlbSlbMF07XG5cbiAgICBpZiAoX3RvKGl0ZW0pLnN1YnN0cigwLDQpICE9IFwiaHRtbFwiKVxuICAgICAgIHJldHVybiBmYWxzZTsgIC8vdW5hYmxlIHRvIHNldCB0YWIgY29udGVudFxuXG4gICAgdmFyIGluZGV4PTA7XG4gICAgdmFyIGNvbHMgPSBpdGVtLnBhcmVudEVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJsaVwiKTtcbiAgICAvL3VwZGF0ZSB3aGljaCB0YWIgc2VsZWN0ZWRcbiAgICBmb3IgKGk9MDsgaTwgY29scy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoY29sc1tpXSA9PSBpdGVtKSB7IC8vIHNlbGVjdGVkIHRhYiBsb2dpY1xuICAgICAgICAgICAgaW5kZXggPSBpO1xuICAgICAgICAgICAgYncubWFya0VsZW1lbnQoY29sc1tpXSxcImJ3LXRhYi1hY3RpdmVcIixcImJ3LXRhYi1hY3RpdmVcIik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7IC8vIHVuc2VsZWN0ZWQgdGFiIGxvZ2ljXG4gICAgICAgICAgICBidy5tYXJrRWxlbWVudChjb2xzW2ldLFwiYnctdGFiLWFjdGl2ZVwiLFwiXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vY29uc29sZS5sb2coaXRlbSk7XG4gICAgdmFyIHRjb2xzID0gaXRlbS5wYXJlbnROb2RlLnBhcmVudE5vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImJ3LXRhYi1jb250ZW50LWxpc3RcIilbMF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImJ3LXRhYi1jb250ZW50XCIpO1xuICAgIGlmICh0Y29scy5sZW5ndGggPD0gMClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgdGFyZ2V0ID0gKF90byh0YXJnZXQpID09IFwidW5kZWZpbmVkXCIpID8gdGNvbHNbaW5kZXhdIDogdGFyZ2V0OyAgLy93ZSB3aWxsIGluZmVyIGl0IGJ5IHRoZSB0YWIgaW5kZXhcbiAgICB0YXJnZXQgPSAoX3RvKHRhcmdldCkgPT0gXCJzdHJpbmdcIiAgICkgPyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0YXJnZXQpIDogdGFyZ2V0OyAgLy8gd2UgaGF2IGFuIElEIHNvIHdlJ2xsIHVzZSB0aGF0XG4gICAgdmFyIGk7XG4gICAgZm9yIChpPTA7IGkgPCB0Y29scy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAodGNvbHNbaV0gPT0gdGFyZ2V0KSBcbiAgICAgICAgICAgIGJ3Lm1hcmtFbGVtZW50KHRjb2xzW2ldLFwiYnctc2hvd1wiLFwiYnctc2hvd1wiKTsgLy90Y29sc1tpXS5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBidy5tYXJrRWxlbWVudCh0Y29sc1tpXSxcImJ3LXNob3dcIixcIlwiKTsvL3Rjb2xzW2ldLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjsgIFxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTsgIFxufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmJ3LkRPTUNsYXNzID0gZnVuY3Rpb24oZWwsIGtleSwgcmVwbGFjZSkge1xuLyoqIFxuYncuRE9NQ2xhc3MoZWwsdmFsdWUpIFxuXG5yZXR1cm5zIHdoZXRoZXIgYSBzcGVjaWZpYyBET00gZWxlbWVudCBjbGFzcyBuYW1lIChrZXkpIGlzIHNldCBvbiBhdGxlYXN0IG9uZSB0aGUgc3VwcGxpZWQgZWxlbWVudChzKS4gIFxuXG5JZiByZXBsYWNlIGlzIHN1cHBsaWVkIHRoZW4gdGhlIGNsYXNzIG5hbWUgKGtleSkgaXMgcmVwbGFjZWQgb3IgYWRkZWQgaWYgaXQgZG9lc24ndCBleGlzdC5cbiAgICBub3RlIHRoYXQgaWYga2V5IGlzIG5vdCBmb3VuZCBidXQgYSByZXBsYWNlIGlzIHN1cHBsaWVkIHRoZSByZXR1cm4tdmFsdWUgaXMgc3RpbGwgZmFsc2UgYXMgdGhlIHN1cHBsaWVkIGtleSB3YXMgbm90IGZvdW5kIFxuXG5lbCBtdXN0IGJlIHZhbGlkIGVsZW1lbnQgb3IgQ1NTIHNlbGVjdG9yXG5cbm1hcmtFbGVtZW50IGlzIHVzZWQgYnkgYncgVUkgdG9nZ2xlc1xuICovXG4gICAgdmFyIHIgPSBmYWxzZSwgZWxlbXMsIHgsajtcbiAgICAvL2lmIChfdG8oZWwpID09IFwic3RyaW5nXCIpXG4gICAgLy8gICAgZWw9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWwpO1xuICAgIGVsZW1zID0gYncuRE9NKGVsKTtcbiAgICBpZiAoZWxlbXMubGVuZ3RoIDw9MCApXG4gICAgICAgIHJldHVybiByO1xuXG4gICAgZm9yIChqPTA7IGo8IGVsZW1zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHggPSBlbGVtc1tqXTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhciBjID0geC5jbGFzc05hbWUuc3BsaXQoL1sgXSsvKTtcbiAgICAgICAgICAgIHZhciBpID0gYy5pbmRleE9mKGtleSk7XG5cbiAgICAgICAgICAgIGlmIChpID49IDApIC8vIGZvdW5kIGtleVxuICAgICAgICAgICAgICAgIHIgPSB0cnVlO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmICgoX3RvKHJlcGxhY2UpID09IFwic3RyaW5nXCIpICYmIChjLmluZGV4T2YocmVwbGFjZSk9PSAtMSkpe1xuICAgICAgICAgICAgICAgIGlmIChpID09IC0xKSAvL2tleSBub3QgZm91bmRcbiAgICAgICAgICAgICAgICAgICAgYy5wdXNoKHJlcGxhY2UpO1xuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVwbGFjZS5sZW5ndGggPiAwKVxuICAgICAgICAgICAgICAgICAgICAgICBjW2ldPXJlcGxhY2U7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgYy5zcGxpY2UoaSwxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeC5jbGFzc05hbWUgID0gYy5qb2luKFwiIFwiKS50cmltKCk7XG4gICAgICAgICAgICAgICAgciA9IHRydWU7XG4gICAgICAgICAgICAgICAgLy8gZWxlbWVudC5jbGFzc05hbWUgPSBlbGVtZW50LmNsYXNzTmFtZS5yZXBsYWNlKC9cXGJteXN0eWxlXFxiL2csIFwiXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoKGUpIHsgYncubG9nKGUpO31cbiAgICB9XG4gICAgcmV0dXJuIHI7XG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbmJ3LkRPTUNsYXNzVG9nZ2xlICA9IGZ1bmN0aW9uKGVsLGNsYXNzTmFtZSkge1xuLyoqXG5idy5ET01DbGFzc1RvZ2dsZShlbCxjbGFzc25hbWUpIFxuZm9yIGVhY2ggZWxlbWVudCBzcGVjaWZpZWQgaW4gZWwgKGVnIFwiI2lkXCIsIFwiLm15Q2xhc3NcIiwgXCJoMlwiLCA8RE9NIE9CSkVDVD4pIHRvZ2dsZSBjbGFzc05hbWUuXG5cbklmIGNsYXNzTmFtZSBpcyBwcmVzZW50IG9uIHRoZSBvYmplY3QgdGhlbiBpdCBpcyByZW1vdmVkLiBpZiBpdCBpcyBub3QgcHJlc2VudCBpdCBpcyBhZGRlZC5cblxuXG5jbGFzc05hbWVzIHdpdGggc3BhY2VzIG9yIHRhYnMgYXJlIG5vdCB2YWxpZCBhbmQgcmVzdWx0IGluIHVuZGVmaW5lZCBiZWhhdmlvci5cblxucmV0dXJucyBsYXN0IGVsZW1lbnQgY3VycmVudCB0b2dnbGUgc3RhdGUuXG4qLyAgICBcbiAgICB2YXIgeCxpLGVsZW1zID0gYncuRE9NKGVsKSwgcj1mYWxzZTtcbiAgICBmb3IgKGk9MDsgaTwgZWxlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgeD1lbGVtc1tpXTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHIgPSBidy5ET01DbGFzcyh4LGNsYXNzTmFtZSk7XG4gICAgICAgICAgICBpZiAocilcbiAgICAgICAgICAgICAgICBidy5ET01DbGFzcyh4LGNsYXNzTmFtZSxcIlwiKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBidy5ET01DbGFzcyh4LGNsYXNzTmFtZSxjbGFzc05hbWUpO1xuXG4gICAgICAgIH0gY2F0Y2goZSkgeyBidy5sb2coZSk7ICAgIH1cbiAgICB9XG4gICAgcmV0dXJuICFyO1xufTtcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuYncudmVyc2lvbiAgPSBmdW5jdGlvbigpIHtcbi8qKiBcbkBtZXRob2QgdmVyc2lvbigpIC0gYml0d3JlbmNoIHJ1bnRpbWUgdmVyc2lvbiAmIGxpY2Vuc2UgaW5mby5cblxuICovXG4gICAgdmFyIHYgPSB7XG4gICAgICAgIFwidmVyc2lvblwiICAgOiBcIjEuMi41XCIsIFxuICAgICAgICBcImFib3V0XCIgICAgIDogXCJiaXR3cmVuY2ggaXMgYSBzaW1wbGUgbGlicmFyeSBvZiBtaXNjZWxsYW5lb3VzIEphdmFzY3JpcHQgaGVscGVyIGZ1bmN0aW9ucyBmb3IgY29tbW9uIHdlYiBkZXNpZ24gdGFza3MuXCIsIFxuICAgICAgICBcImNvcHlcIiAgICAgIDogXCIoYykgTSBBIENoYXR0ZXJqZWUgZGVmdGlvIChhdCkgZGVmdGlvIChkb3QpIGNvbVwiLCAgICBcbiAgICAgICAgXCJ1cmxcIiAgICAgICA6IFwiaHR0cDovL2dpdGh1Yi5jb20vZGVmdGlvL2JpdHdyZW5jaFwiLFxuICAgICAgICBcImxpY2Vuc2VcIiAgIDogXCJCU0QtMi1DbGF1c2VcIlxuICAgIH07XG4gICAgcmV0dXJuIHY7XG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vKiogXG5jb21tYW5kIGxpbmUgaGFuZGxpbmdcblxudGhpcyBjYW4gYmUgZG9uZSB2aWEgVVJMIGUuZy4gbXlQYWdlLmNvbT9idy1sb2FkLXN0eWxlcz10cnVlXG5cbm9yIHZpYSBzY3JpcHQgdGFnXG48c2NyaXB0IHR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIiBzcmM9XCIuL3BhdGgvdG8vYml0d3JlbmNoanNcIiBid2FyZ3M9XCJidy1sb2FkLXN0eWxlcz10cnVlXCI+PC9zY3JpcHQ+XG5cbiAqL1xuYncuYndhcmdzID0ge2VuYWJsZVVKVVJMQXJncyA6IFwidHJ1ZVwifTsgLy8gdGhlIGFyZ3VtZW50cyBhcmUgZXhwb3J0ZWQgc28gb25lIGNhbiBzZWUgdGhlbSBhcyBhIHNpbXBsZSBkaWN0XG5cbnZhciBwYXJzZUFyZ3MgPSBmdW5jdGlvbihzKSB7XG4gICAgdmFyIGFyZ3MgPSB7fTtcbiAgICBpZiAoKHR5cGVvZiBzID09IFwic3RyaW5nXCIpICYmIChzIT0gXCJcIikpIHtcbiAgICAgICAgcz1zLnNwbGl0KFwiO1wiKTtcbiAgICAgICAgdmFyIGo7XG4gICAgICAgIGZvciAoaiBpbiBzKSB7XG4gICAgICAgICAgICB2YXIgayA9IHNbal0uc3BsaXQoXCI6XCIpO1xuICAgICAgICAgICAgYXJnc1trWzBdXT1rWzFdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhcmdzO1xufTtcblxudmFyIGdldEFyZ3MgPSAgZnVuY3Rpb24gKCkge1xuICAgIGlmKGJ3LmlzTm9kZUpTKCk9PWZhbHNlKSB7IC8vIGluIGJyb3dzZXJcbiAgICAgICAgLy92YXIgZWxzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJzY3JpcHRcIik7IC8vIGFycmF5IG9mIHNjcmlwdCBlbGVtZW50c1xuICAgICAgICB2YXIgZWxzID0gYncuRE9NKFwic2NyaXB0XCIpO1xuICAgICAgICB2YXIgaSxhLGI7XG4gICAgICAgIGZvciAoaSBpbiBlbHMpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAvLyBidy5sb2coX2FyZ3NbaV0pO1xuICAgICAgICAgICAgICAgIHZhciBlbCA9IGVsc1tpXTsgLy9cbiAgICAgICAgICAgICAgICBpZiAoZWwuaGFzT3duUHJvcGVydHkoXCJzcmNcIikgIT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrOyBcblxuICAgICAgICAgICAgICAgIHZhciBzID0gU3RyaW5nKGVsLmdldEF0dHJpYnV0ZShcInNyY1wiKSk7XG4gICAgICAgICAgICAgICAgdmFyIGYgPSBcImJpdHdyZW5jaC5qc1wiO1xuXG4gICAgICAgICAgICAgICAgaWYgKHMudG9Mb2NhbGVMb3dlckNhc2UoKS5zdWJzdHJpbmcocy5sZW5ndGgtZi5sZW5ndGgscy5sZW5ndGgpID09IGYudG9Mb2NhbGVMb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgICAgICAgICBzID0gX3RvKHMpID09IFwic3RyaW5nXCIgPyBlbC5nZXRBdHRyaWJ1dGUoXCJid2FyZ3NcIikgOiBbXCJcIl07XG4gICAgICAgICAgICAgICAgICAgIHMgPSBfdG8ocykgPT0gXCJzdHJpbmdcIiA/IGVsLmdldEF0dHJpYnV0ZShcImRhdGEtYndhcmdzXCIpIDogczsgLy90aGUgaHRtbDQvNSBzdGFuZGFyZCB3YXlcbiAgICAgICAgICAgICAgICAgICAgYSA9IHBhcnNlQXJncyhzKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChiIGluIGEpXG4gICAgICAgICAgICAgICAgICAgICAgICBidy5id2FyZ3NbYl09YVtiXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7IFxuICAgICAgICAgICAgICAgIC8vYncubG9nKFN0cmluZyhbXCJlcnIgMTQxOFwiLGksZV0pKTtcbiAgICAgICAgICAgIH0gIFxuICAgICAgICB9XG5cbiAgICAgICAgLy9waWNrIHVwIGZyb20gVVJMXG4gICAgICAgIGlmKGJ3LmJ3YXJnc1tcImVuYWJsZVVKVVJMQXJnc1wiXSA9PSBcInRydWVcIikgeyAvL25vdGUgc3RyaW5nIGxpdGVyYWwgXCJ0cnVlXCIgXG4gICAgICAgIC8vbm90ZSBpbiB0aGUgc2NyaXB0IHRhZyB5b3UgY2FuIGRpc2FibGUgP2J3bG9hZD1mb286YmFyOyBwYXJhbXMgd2l0aCB0aGlzXG4gICAgICAgIC8vPHNjcmlwdCB0eXBlPVwidGV4dC9qYXZhc2NyaXB0XCIgc3JjPVwiLi9wYXRoL3RvL2JpdHdyZW5jaC5qc1wiIGJ3YXJncz1cImVuYWJsZVVSTENvbmZpZzpmYWxzZVwiPjwvc2NyaXB0PlxuICAgICAgICAgICAgYSA9IHBhcnNlQXJncyhidy5nZXRVUkxQYXJhbShcImJ3YXJnc1wiLFwiXCIpKTsgICAgICAgIFxuICAgICAgICAgICAgZm9yIChiIGluIGEpXG4gICAgICAgICAgICAgICAgYncuYndhcmdzW2JdPWFbYl07XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vaW50ZXJuYWxseSB1c2VkIGZ1bmN0aW9uIGRlY2xhcmF0aW9uczpcblxuXG5nZXRBcmdzKCk7ICBcblxuLy8gZG8gY29tbWFuZCBsaW5lIHN0dWZmXG52YXIgbG9hZFN0eWxlcyAgICAgID0gIGJ3LmJ3YXJnc1tcImJ3LWxvYWQtc3R5bGVzXCJdIT1cImZhbHNlXCI7XG52YXIgbG9hZFN0eWxlQmFzaWNzID0gIGJ3LnR5cGVBc3NpZ24oYncuYndhcmdzW1wiYnctbG9hZC1zdHlsZS1iYXNpY3NcIl0sXCJzdHJpbmdcIixidy5id2FyZ3NbXCJidy1sb2FkLXN0eWxlLWJhc2ljc1wiXSxcImxvYWRcIik7XG5idy5DU1NTaW1wbGVTdHlsZXMobG9hZFN0eWxlcyx7XCJiYXNpY3NcIjpsb2FkU3R5bGVCYXNpY3N9KTsgLy8gYXBwZW5kIHRvIGhlYWQgdGhlIGJpdHdyZW5jaCBjc3Mgc3R5bGVzIGJ5IGRlZmF1bHRcblxuYncuZnVuY1JlZ2lzdGVyKGJ3LmxvZyxcImJ3X2xvZ1wiKTsgIC8vIHRoaXMgaXMgZ2xvYmFsbHkgcmVnaXN0ZXJlZCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLCBpdCB3aWxsIG5ldmVyIGdldCBjYWxsZWQgdGhvdWdoIHVubGVzcyBwcm9ncmFtbWVyIGRvZXMgdGhpcyBleHBsaWNpdGx5LlxuXG4gICAgcmV0dXJuIGJ3O1xufSkpO1xuXG4iXX0=