From dfc192e5a02c1d44ffa225d6bfc221be1fb3d62c Mon Sep 17 00:00:00 2001 From: Borys_Levytskyi Date: Fri, 15 Jan 2021 13:50:06 +0200 Subject: [PATCH] Release with better looking input box --- asset-manifest.json | 10 +++++----- index.html | 2 +- ...ecache-manifest.e84e7141718171d2d97baafd83903e7a.js | 10 +++++----- service-worker.js | 2 +- static/css/main.263615b1.chunk.css | 2 -- static/css/main.263615b1.chunk.css.map | 1 - static/css/main.b0643524.chunk.css | 2 ++ static/css/main.b0643524.chunk.css.map | 1 + .../{main.622412c9.chunk.js => main.b8debf08.chunk.js} | 4 ++-- ...22412c9.chunk.js.map => main.b8debf08.chunk.js.map} | 2 +- 10 files changed, 18 insertions(+), 18 deletions(-) rename precache-manifest.536ea4bb80492c8f88e3cba180019292.js => precache-manifest.e84e7141718171d2d97baafd83903e7a.js (57%) delete mode 100644 static/css/main.263615b1.chunk.css delete mode 100644 static/css/main.263615b1.chunk.css.map create mode 100644 static/css/main.b0643524.chunk.css create mode 100644 static/css/main.b0643524.chunk.css.map rename static/js/{main.622412c9.chunk.js => main.b8debf08.chunk.js} (63%) rename static/js/{main.622412c9.chunk.js.map => main.b8debf08.chunk.js.map} (78%) diff --git a/asset-manifest.json b/asset-manifest.json index 88bfe2c..a250c99 100644 --- a/asset-manifest.json +++ b/asset-manifest.json @@ -1,15 +1,15 @@ { "files": { - "main.css": "/static/css/main.263615b1.chunk.css", - "main.js": "/static/js/main.622412c9.chunk.js", - "main.js.map": "/static/js/main.622412c9.chunk.js.map", + "main.css": "/static/css/main.b0643524.chunk.css", + "main.js": "/static/js/main.b8debf08.chunk.js", + "main.js.map": "/static/js/main.b8debf08.chunk.js.map", "runtime~main.js": "/static/js/runtime~main.a8a9905a.js", "runtime~main.js.map": "/static/js/runtime~main.a8a9905a.js.map", "static/js/2.59417331.chunk.js": "/static/js/2.59417331.chunk.js", "static/js/2.59417331.chunk.js.map": "/static/js/2.59417331.chunk.js.map", "index.html": "/index.html", - "precache-manifest.536ea4bb80492c8f88e3cba180019292.js": "/precache-manifest.536ea4bb80492c8f88e3cba180019292.js", + "precache-manifest.e84e7141718171d2d97baafd83903e7a.js": "/precache-manifest.e84e7141718171d2d97baafd83903e7a.js", "service-worker.js": "/service-worker.js", - "static/css/main.263615b1.chunk.css.map": "/static/css/main.263615b1.chunk.css.map" + "static/css/main.b0643524.chunk.css.map": "/static/css/main.b0643524.chunk.css.map" } } \ No newline at end of file diff --git a/index.html b/index.html index 73fe2db..fb4e4c6 100644 --- a/index.html +++ b/index.html @@ -1 +1 @@ -BitwiseCmd
\ No newline at end of file +BitwiseCmd
\ No newline at end of file diff --git a/precache-manifest.536ea4bb80492c8f88e3cba180019292.js b/precache-manifest.e84e7141718171d2d97baafd83903e7a.js similarity index 57% rename from precache-manifest.536ea4bb80492c8f88e3cba180019292.js rename to precache-manifest.e84e7141718171d2d97baafd83903e7a.js index a8f1f86..dfcd48a 100644 --- a/precache-manifest.536ea4bb80492c8f88e3cba180019292.js +++ b/precache-manifest.e84e7141718171d2d97baafd83903e7a.js @@ -1,19 +1,19 @@ self.__precacheManifest = (self.__precacheManifest || []).concat([ { - "revision": "dbd9546b5261ce59784a41b9ad0c090d", + "revision": "4c5e96edbd0ace5164c5001a4d4c1c05", "url": "/index.html" }, { - "revision": "fea57061d29572ac79ed", - "url": "/static/css/main.263615b1.chunk.css" + "revision": "acd28459ba8abd8b80f1", + "url": "/static/css/main.b0643524.chunk.css" }, { "revision": "f102156b722bb7c1916b", "url": "/static/js/2.59417331.chunk.js" }, { - "revision": "fea57061d29572ac79ed", - "url": "/static/js/main.622412c9.chunk.js" + "revision": "acd28459ba8abd8b80f1", + "url": "/static/js/main.b8debf08.chunk.js" }, { "revision": "42ac5946195a7306e2a5", diff --git a/service-worker.js b/service-worker.js index 60a6da7..9b8cdb6 100644 --- a/service-worker.js +++ b/service-worker.js @@ -14,7 +14,7 @@ importScripts("https://storage.googleapis.com/workbox-cdn/releases/4.3.1/workbox-sw.js"); importScripts( - "/precache-manifest.536ea4bb80492c8f88e3cba180019292.js" + "/precache-manifest.e84e7141718171d2d97baafd83903e7a.js" ); self.addEventListener('message', (event) => { diff --git a/static/css/main.263615b1.chunk.css b/static/css/main.263615b1.chunk.css deleted file mode 100644 index 7e2b0ac..0000000 --- a/static/css/main.263615b1.chunk.css +++ /dev/null @@ -1,2 +0,0 @@ -.top-links{position:absolute;right:10px;top:10px;list-style-type:none;margin:0}.top-links li{float:left}.top-links a{display:inline-block;padding:10px 15px}.top-links .icon{margin-right:5px;vertical-align:middle}body{padding:0;margin:0;overflow:hidden}.app-root,body,html{height:100%}.app-root{font-family:Verdana;font-size:.8em;margin:0;padding:20px 100px 0;overflow:auto}code{font-size:1.2em;font-weight:700}.header-cmd{color:#c5c5c5}.mono{font-family:monospace;font-size:1.3em}.expressionInput{width:500px;padding:3px;border:1px solid #d3d3d3}.result{margin:10px 10px 30px}.result .input{margin-bottom:10px}.result .content{padding-left:10px}.result .cur{margin-right:5px}.hashLink{text-decoration:none;margin-left:5px;visibility:hidden}.hashLink:hover{text-decoration:underline;margin-left:5px}.result:hover .hashLink{visibility:visible}.expression .label{font-weight:700;padding-right:5px;text-align:right}.expression .bin{letter-spacing:3px}.expression .byte{margin:0 3px}.expression-result td{border-top:1px dotted grey}.expression{font-size:1.5em;font-family:monospace}.expression .prefix{font-weight:400;display:none;font-size:.9em}.expression .other{font-size:.9em}.expression .sign{text-align:right}.flipable{cursor:pointer;opacity:1}.flipable:hover{opacity:.8}.hex .prefix{display:inline}.help{padding:10px}.help ul{list-style-type:none;margin:0;padding:0}.help p{margin-top:0}.indicator{padding:2px 5px;font-family:monospace;font-size:1.3em;background:transparent;border:none;cursor:pointer}.error{color:maroon}.soft{opacity:.7}#view{padding:10px}.cur{color:#d3d3d3}.light{background:#fafafa}.light a,.light a:visited{color:#222}.light .one{color:#000}.light .zero{color:#888}.light .indicator{color:#ddd}.light .on{color:#121212}.light .prefix{color:#888}.light .other{color:#bbb}.light .hashLink,.light .hashLink:visited{color:#ddd}.light .hashLink:hover{color:#888}.light ul.top-links li:hover{background:#ddd}.light .error{color:#da586d}.dark{background:#121212}.dark,.dark .expression{color:#fff}.dark .expressionInput{background:#121212;color:#fff}.dark a,.dark a:visited{color:#fff}.dark .indicator{color:#555}.dark .on{color:#fff}.dark .prefix,.dark .zero{color:#999}.dark .other{color:#444}.dark .hashLink,.dark .hashLink:visited{color:#333}.dark .hashLink:hover{color:#999}.dark ul.top-links li:hover{background:#333}.dark .error{color:#da586d}.midnight .header-cmd{color:#85a0ad}.midnight{background:#2c3e50}.midnight,.midnight .expression{color:#fff}.midnight .expressionInput{background:#2c3e50;color:#fff;border-color:#85a0ad}.dark a:visited,.midnight a{color:#fff}.midnight .indicator{color:#85a0ad}.midnight .on{color:#fff}.midnight .prefix,.midnight .zero{color:#85a0ad}.midnight .other{color:#9fbac7}.dark .hashLink:visited,.midnight .hashLink{color:#85a0ad}.midnight .hashLink:hover{color:#9fbac7}.midnight ul.top-links li:hover{background:#132537}.midnight .error{color:#da586d}.midnight .changelog .item-new .date{font-weight:700}@media (max-width:800px){.top-links .link-text{display:none}}.social-container{position:fixed;bottom:20px;right:20px}@media (max-width:700px){body{padding:10px}.expressionInput{width:500px}}@media (max-width:500px){.expressionInput{width:350px}.top-links a{display:inline-block;padding:5px 10px}}@media (max-width:350px){.expressionInput{width:200px}}.ip-address-info{padding-top:1em;font-size:.85em;vertical-align:middle;display:none}.help .section{margin-bottom:10px}.help .panel-container{overflow:hidden}.help .left-panel{float:left;margin-right:20px}.help .right-panel{float:left}.changelog .item{margin-top:2em}.changelog .item-new .date{font-weight:700;text-decoration:underline} -/*# sourceMappingURL=main.263615b1.chunk.css.map */ \ No newline at end of file diff --git a/static/css/main.263615b1.chunk.css.map b/static/css/main.263615b1.chunk.css.map deleted file mode 100644 index 13d2294..0000000 --- a/static/css/main.263615b1.chunk.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["TopLinks.css","index.css","IpAddressView.css","HelpResultView.css","WhatsNewResultView.css"],"names":[],"mappings":"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","file":"main.263615b1.chunk.css","sourcesContent":["\r\n.top-links { position: absolute; right: 10px; top: 10px; list-style-type: none; margin: 0 }\r\n.top-links li { float: left; }\r\n.top-links a { display: inline-block; padding: 10px 15px}\r\n.top-links .icon { margin-right: 5px; vertical-align: middle; }","body { padding:0; margin:0; height: 100%; overflow: hidden; }\r\nhtml { height: 100% }\r\n\r\n.app-root { font-family: Verdana; font-size: 0.8em; margin: 0; padding: 20px 100px 0 100px; height: 100%; overflow: auto; }\r\ncode { font-size: 1.2em; font-weight: bold; }\r\n\r\n.header-cmd { color: #c5c5c5 }\r\n\r\n.mono { font-family: monospace; font-size: 1.3em }\r\n.expressionInput { width: 500px; padding: 3px; border: solid 1px lightgray; }\r\n\r\n.result { margin: 10px 10px 30px; }\r\n.result .input { margin-bottom: 10px; }\r\n.result .content { padding-left: 10px}\r\n.result .cur { margin-right: 5px; }\r\n\r\n.hashLink { text-decoration: none; margin-left: 5px; visibility: hidden }\r\n.hashLink:hover { text-decoration: underline; margin-left: 5px; }\r\n.result:hover .hashLink { visibility: visible }\r\n\r\n.expression .label { font-weight: bold; padding-right: 5px; text-align: right; }\r\n.expression .bin { letter-spacing: 3px; }\r\n.expression .byte { margin: 0 3px; }\r\n.expression-result td { border-top: dotted 1px gray; }\r\n.expression { font-size: 1.5em; font-family: monospace }\r\n.expression .prefix { font-weight: normal; display: none; font-size: 0.9em }\r\n.expression .other { font-size: 0.9em}\r\n.expression .sign { text-align: right}\r\n\r\n.flipable { cursor: pointer; opacity: 1 }\r\n.flipable { cursor: pointer; opacity: 1 }\r\n.flipable:hover { opacity: 0.8 }\r\n\r\n.hex .prefix { display: inline; }\r\n\r\n.help { padding: 10px; }\r\n.help ul { list-style-type: none; margin: 0; padding: 0; }\r\n.help p { margin-top: 0 }\r\n\r\n.indicator { padding: 2px 5px; font-family: monospace; font-size: 1.3em; background: transparent; border: none; cursor: pointer }\r\n.error { color: maroon; }\r\n\r\n.soft { opacity: 0.7 }\r\n\r\n#view { padding: 10px}\r\n\r\n.cur { color: lightgray; }\r\n\r\n/* Light */\r\n.light { background: #fafafa; }\r\n.light a, .light a:visited { color: #222; }\r\n.light .one { color: black; }\r\n.light .zero { color: #888; }\r\n.light .indicator { color: #ddd; }\r\n.light .on { color: #121212; }\r\n.light .prefix { color: #888}\r\n.light .other { color: #bbb }\r\n.light .hashLink, .light .hashLink:visited { color: #ddd }\r\n.light .hashLink:hover { color: #888 }\r\n.light ul.top-links li:hover { background: #ddd }\r\n.light .error { color: #da586d }\r\n\r\n/* Dark */\r\n.dark { background: #121212; color: white;}\r\n.dark .expression { color: white;}\r\n.dark .expressionInput { background: #121212; color: white; }\r\n.dark a, .dark a:visited { color: white; }\r\n.dark .indicator { color: #555; }\r\n.dark .on { color: white; }\r\n.dark .zero { color: #999;}\r\n.dark .prefix { color: #999}\r\n.dark .other { color: #444;}\r\n.dark .hashLink, .dark .hashLink:visited { color: #333 }\r\n.dark .hashLink:hover { color: #999 }\r\n.dark ul.top-links li:hover { background: #333 }\r\n.dark .error { color: #da586d}\r\n\r\n/*\r\n Midnight Theme\r\n*/\r\n.midnight .header-cmd { color: #85a0ad }\r\n.midnight { background: #2c3e50; color: white }\r\n.midnight .expression { color: white;}\r\n.midnight .expressionInput { background: #2c3e50; color: white; border-color: #85a0ad }\r\n.midnight a, .dark a:visited { color: white; }\r\n.midnight .indicator { color: #85a0ad; }\r\n.midnight .on { color: white; }\r\n.midnight .zero { color: #85a0ad;}\r\n.midnight .prefix { color: #85a0ad}\r\n.midnight .other { color: #9FBAC7;}\r\n.midnight .hashLink, .dark .hashLink:visited { color: #85a0ad }\r\n.midnight .hashLink:hover { color: #9FBAC7 }\r\n.midnight ul.top-links li:hover { background: #132537 }\r\n.midnight .error { color:#da586d}\r\n.midnight .changelog .item-new .date { font-weight: bold }\r\n\r\n/* Top Links Shrink */\r\n@media (max-width: 800px) {\r\n\r\n .top-links .link-text { display: none }\r\n}\r\n\r\n.social-container{ position:fixed; bottom:20px; right:20px }\r\n\r\n/* Remove margin space on body. Inline top links with header */\r\n@media (max-width: 700px) {\r\n body { padding: 10px; }\r\n .expressionInput { width: 500px; }\r\n}\r\n\r\n/* Further shrink */\r\n@media (max-width: 500px) {\r\n .expressionInput { width: 350px; }\r\n .top-links a { display: inline-block; padding: 5px 10px}\r\n}\r\n\r\n@media (max-width: 350px) {\r\n .expressionInput { width: 200px; }\r\n}",".ip-address-info { padding-top: 1em; font-size: 0.85em; vertical-align: middle; display: none;}",".help .section {margin-bottom:10px;}\r\n.help .panel-container {overflow: hidden;}\r\n.help .left-panel {float:left; margin-right: 20px;}\r\n.help .right-panel {float:left;}",".changelog .item { margin-top: 2em; }\r\n.changelog .item-new .date { font-weight: bold; text-decoration: underline;}"]} \ No newline at end of file diff --git a/static/css/main.b0643524.chunk.css b/static/css/main.b0643524.chunk.css new file mode 100644 index 0000000..a2de008 --- /dev/null +++ b/static/css/main.b0643524.chunk.css @@ -0,0 +1,2 @@ +.top-links{position:absolute;right:10px;top:10px;list-style-type:none;margin:0}.top-links li{float:left}.top-links a{display:inline-block;padding:10px 15px}.top-links .icon{margin-right:5px;vertical-align:middle}body{padding:0;margin:0;overflow:hidden}.app-root,body,html{height:100%}.app-root{font-family:Verdana;font-size:.8em;margin:0;padding:20px 100px 0;overflow:auto}code{font-size:1.2em;font-weight:700}.header-cmd{color:#c5c5c5}.mono{font-family:monospace;font-size:1.3em}.expressionInput{width:500px;padding:3px;border:none;outline:none}.result{margin:10px 10px 30px}.result .input{margin-bottom:10px}.result .content{padding-left:10px}.result .cur{margin-right:5px}.hashLink{text-decoration:none;margin-left:5px;visibility:hidden}.hashLink:hover{text-decoration:underline;margin-left:5px}.result:hover .hashLink{visibility:visible}.expression .label{font-weight:700;padding-right:5px;text-align:right}.expression .bin{letter-spacing:3px}.expression .byte{margin:0 3px}.expression-result td{border-top:1px dotted grey}.expression{font-size:1.5em;font-family:monospace}.expression .prefix{font-weight:400;display:none;font-size:.9em}.expression .other{font-size:.9em}.expression .sign{text-align:right}.flipable{cursor:pointer;opacity:1}.flipable:hover{opacity:.8}.hex .prefix{display:inline}.help{padding:10px}.help ul{list-style-type:none;margin:0;padding:0}.help p{margin-top:0}.indicator{padding:2px 5px;font-family:monospace;font-size:1.3em;background:transparent;border:none;cursor:pointer}.error{color:maroon}.soft{opacity:.7}#view{padding:10px}.cur{color:#d3d3d3}.light{background:#fafafa}.light a,.light a:visited{color:#222}.light .one{color:#000}.light .zero{color:#888}.light .indicator{color:#ddd}.light .expressionInput{background:#ddd}.light .on{color:#121212}.light .prefix{color:#888}.light .other{color:#bbb}.light .hashLink,.light .hashLink:visited{color:#ddd}.light .hashLink:hover{color:#888}.light ul.top-links li:hover{background:#ddd}.light .error{color:#da586d}.dark{background:#121212}.dark,.dark .expression{color:#fff}.dark .expressionInput{color:#fff;background:#555}.dark a,.dark a:visited{color:#fff}.dark .indicator{color:#555}.dark .on{color:#fff}.dark .prefix,.dark .zero{color:#999}.dark .other{color:#444}.dark .hashLink,.dark .hashLink:visited{color:#333}.dark .hashLink:hover{color:#999}.dark ul.top-links li:hover{background:#333}.dark .error{color:#da586d}.midnight .header-cmd{color:#85a0ad}.midnight{background:#2c3e50}.midnight,.midnight .expression{color:#fff}.midnight .expressionInput{background:#85a0ad;color:#fff}.dark a:visited,.midnight a{color:#fff}.midnight .indicator{color:#85a0ad}.midnight .on{color:#fff}.midnight .prefix,.midnight .zero{color:#85a0ad}.midnight .other{color:#9fbac7}.dark .hashLink:visited,.midnight .hashLink{color:#85a0ad}.midnight .hashLink:hover{color:#9fbac7}.midnight ul.top-links li:hover{background:#132537}.midnight .error{color:#da586d}.midnight .changelog .item-new .date{font-weight:700}@media (max-width:800px){.top-links .link-text{display:none}}.social-container{position:fixed;bottom:20px;right:20px}@media (max-width:700px){body{padding:10px}.expressionInput{width:500px}}@media (max-width:500px){.expressionInput{width:350px}.top-links a{display:inline-block;padding:5px 10px}}@media (max-width:350px){.expressionInput{width:200px}}.ip-address-info{padding-top:1em;font-size:.85em;vertical-align:middle;display:none}.help .section{margin-bottom:10px}.help .panel-container{overflow:hidden}.help .left-panel{float:left;margin-right:20px}.help .right-panel{float:left}.changelog .item{margin-top:2em}.changelog .item-new .date{font-weight:700;text-decoration:underline} +/*# sourceMappingURL=main.b0643524.chunk.css.map */ \ No newline at end of file diff --git a/static/css/main.b0643524.chunk.css.map b/static/css/main.b0643524.chunk.css.map new file mode 100644 index 0000000..2602721 --- /dev/null +++ b/static/css/main.b0643524.chunk.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["TopLinks.css","index.css","IpAddressView.css","HelpResultView.css","WhatsNewResultView.css"],"names":[],"mappings":"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","file":"main.b0643524.chunk.css","sourcesContent":["\r\n.top-links { position: absolute; right: 10px; top: 10px; list-style-type: none; margin: 0 }\r\n.top-links li { float: left; }\r\n.top-links a { display: inline-block; padding: 10px 15px}\r\n.top-links .icon { margin-right: 5px; vertical-align: middle; }","body { padding:0; margin:0; height: 100%; overflow: hidden; }\r\nhtml { height: 100% }\r\n\r\n.app-root { font-family: Verdana; font-size: 0.8em; margin: 0; padding: 20px 100px 0 100px; height: 100%; overflow: auto; }\r\ncode { font-size: 1.2em; font-weight: bold; }\r\n\r\n.header-cmd { color: #c5c5c5 }\r\n\r\n.mono { font-family: monospace; font-size: 1.3em }\r\n.expressionInput { width: 500px; padding: 3px; border: none; outline: none; }\r\n\r\n.result { margin: 10px 10px 30px; }\r\n.result .input { margin-bottom: 10px; }\r\n.result .content { padding-left: 10px}\r\n.result .cur { margin-right: 5px; }\r\n\r\n.hashLink { text-decoration: none; margin-left: 5px; visibility: hidden }\r\n.hashLink:hover { text-decoration: underline; margin-left: 5px; }\r\n.result:hover .hashLink { visibility: visible }\r\n\r\n.expression .label { font-weight: bold; padding-right: 5px; text-align: right; }\r\n.expression .bin { letter-spacing: 3px; }\r\n.expression .byte { margin: 0 3px; }\r\n.expression-result td { border-top: dotted 1px gray; }\r\n.expression { font-size: 1.5em; font-family: monospace }\r\n.expression .prefix { font-weight: normal; display: none; font-size: 0.9em }\r\n.expression .other { font-size: 0.9em}\r\n.expression .sign { text-align: right}\r\n\r\n.flipable { cursor: pointer; opacity: 1 }\r\n.flipable { cursor: pointer; opacity: 1 }\r\n.flipable:hover { opacity: 0.8 }\r\n\r\n.hex .prefix { display: inline; }\r\n\r\n.help { padding: 10px; }\r\n.help ul { list-style-type: none; margin: 0; padding: 0; }\r\n.help p { margin-top: 0 }\r\n\r\n.indicator { padding: 2px 5px; font-family: monospace; font-size: 1.3em; background: transparent; border: none; cursor: pointer }\r\n.error { color: maroon; }\r\n\r\n.soft { opacity: 0.7 }\r\n\r\n#view { padding: 10px}\r\n\r\n.cur { color: lightgray; }\r\n\r\n/* Light */\r\n.light { background: #fafafa; }\r\n.light a, .light a:visited { color: #222; }\r\n.light .one { color: black; }\r\n.light .zero { color: #888; }\r\n.light .indicator { color: #ddd; }\r\n.light .expressionInput { background: #ddd;}\r\n.light .on { color: #121212; }\r\n.light .prefix { color: #888}\r\n.light .other { color: #bbb }\r\n.light .hashLink, .light .hashLink:visited { color: #ddd }\r\n.light .hashLink:hover { color: #888 }\r\n.light ul.top-links li:hover { background: #ddd }\r\n.light .error { color: #da586d }\r\n\r\n/* Dark */\r\n.dark { background: #121212; color: white;}\r\n.dark .expression { color: white;}\r\n.dark .expressionInput { color: white; background: #555; }\r\n.dark a, .dark a:visited { color: white; }\r\n.dark .indicator { color: #555; }\r\n.dark .on { color: white; }\r\n.dark .zero { color: #999;}\r\n.dark .prefix { color: #999}\r\n.dark .other { color: #444;}\r\n.dark .hashLink, .dark .hashLink:visited { color: #333 }\r\n.dark .hashLink:hover { color: #999 }\r\n.dark ul.top-links li:hover { background: #333 }\r\n.dark .error { color: #da586d}\r\n\r\n/*\r\n Midnight Theme\r\n*/\r\n.midnight .header-cmd { color: #85a0ad }\r\n.midnight { background: #2c3e50; color: white }\r\n.midnight .expression { color: white;}\r\n.midnight .expressionInput { background: #85a0ad; color: white;}\r\n.midnight a, .dark a:visited { color: white; }\r\n.midnight .indicator { color: #85a0ad; }\r\n.midnight .on { color: white; }\r\n.midnight .zero { color: #85a0ad;}\r\n.midnight .prefix { color: #85a0ad}\r\n.midnight .other { color: #9FBAC7;}\r\n.midnight .hashLink, .dark .hashLink:visited { color: #85a0ad }\r\n.midnight .hashLink:hover { color: #9FBAC7 }\r\n.midnight ul.top-links li:hover { background: #132537 }\r\n.midnight .error { color:#da586d}\r\n.midnight .changelog .item-new .date { font-weight: bold }\r\n\r\n/* Top Links Shrink */\r\n@media (max-width: 800px) {\r\n\r\n .top-links .link-text { display: none }\r\n}\r\n\r\n.social-container{ position:fixed; bottom:20px; right:20px }\r\n\r\n/* Remove margin space on body. Inline top links with header */\r\n@media (max-width: 700px) {\r\n body { padding: 10px; }\r\n .expressionInput { width: 500px; }\r\n}\r\n\r\n/* Further shrink */\r\n@media (max-width: 500px) {\r\n .expressionInput { width: 350px; }\r\n .top-links a { display: inline-block; padding: 5px 10px}\r\n}\r\n\r\n@media (max-width: 350px) {\r\n .expressionInput { width: 200px; }\r\n}",".ip-address-info { padding-top: 1em; font-size: 0.85em; vertical-align: middle; display: none;}",".help .section {margin-bottom:10px;}\r\n.help .panel-container {overflow: hidden;}\r\n.help .left-panel {float:left; margin-right: 20px;}\r\n.help .right-panel {float:left;}",".changelog .item { margin-top: 2em; }\r\n.changelog .item-new .date { font-weight: bold; text-decoration: underline;}"]} \ No newline at end of file diff --git a/static/js/main.622412c9.chunk.js b/static/js/main.b8debf08.chunk.js similarity index 63% rename from static/js/main.622412c9.chunk.js rename to static/js/main.b8debf08.chunk.js index c8054d6..a20d61b 100644 --- a/static/js/main.622412c9.chunk.js +++ b/static/js/main.b8debf08.chunk.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[0],{20:function(e,t,n){e.exports=n(37)},27:function(e,t,n){},31:function(e,t,n){},32:function(e,t,n){},35:function(e,t,n){},36:function(e,t,n){},37:function(e,t,n){"use strict";n.r(t);var a=n(1),i=n(2),r=function(e){return"object"==typeof e&&!(e instanceof Array)&&e instanceof Object},s=function(e){return"function"==typeof e},l=function(e){return"string"==typeof e},o=n(4),u=n.n(o),c=new(function(){function e(){Object(a.a)(this,e),this.debugMode=void 0,this.handlers=void 0,this.errorHandler=void 0,this.handlers=[],this.debugMode=!1,this.errorHandler=null}return Object(i.a)(e,[{key:"execute",value:function(e){u.a.debug("Executing command: ".concat(e));var t=e.trim().toLowerCase(),n=this.findHandler(t);if(null!=n)if(this.debugMode)this.invokeHandler(t,n);else try{this.invokeHandler(t,n)}catch(a){this.handleError(t,a)}else u.a.debug("Handled is not found for command: ".concat(e)),this.handleError(t,new Error("Unsupported expression: "+t.trim()))}},{key:"onError",value:function(e){this.errorHandler=e}},{key:"command",value:function(e,t){var n=this.createHandler(e,t);null!=n?s(n.canHandle)?s(n.handle)?this.handlers.push(n):console.warn('handler is missing "handle" function. registration denied.'):console.warn('handler is missing "canHandle" function. registration denied.'):console.warn("unexpected set of arguments: ",JSON.stringify(arguments))}},{key:"createHandler",value:function(e,t){return r(e)?e:l(e)?{canHandle:function(t){return t===e},handle:t}:null}},{key:"findHandler",value:function(e){return this.handlers.filter(function(t){return t.canHandle(e)})[0]}},{key:"invokeHandler",value:function(e,t){var n=t.handle({input:e});null!=n&&u.a.debug(n)}},{key:"handleError",value:function(e,t){this.debugMode&&console.error(e,t),null!=this.errorHandler&&this.errorHandler(e,t)}}]),e}()),m=n(6),d=n(5),h=n(7),p=n(0),f=n.n(p),g=function(e){function t(e){var n;return Object(a.a)(this,t),(n=Object(m.a)(this,Object(d.a)(t).call(this,e))).history=void 0,n.historyIndex=void 0,n.nameInput=void 0,n.nameInput=null,n.history=[],n.historyIndex=-1,n}return Object(h.a)(t,e),Object(i.a)(t,[{key:"componentDidMount",value:function(){null!=this.nameInput&&this.nameInput.focus()}},{key:"render",value:function(){var e=this;return f.a.createElement("input",{id:"in",type:"text",ref:function(t){e.nameInput=t},onKeyUp:function(t){return e.onKeyUp(t)},onKeyDown:function(t){return e.onKeyDown(t)},className:"expressionInput mono",placeholder:"type expression like '1>>2' or 'help' "})}},{key:"onKeyUp",value:function(e){var t=e.target;if(13==e.keyCode&&0!=t.value.trim().length){var n=t.value;this.history.unshift(n),this.historyIndex=-1,t.value="",this.props.onCommandEntered(n)}}},{key:"onKeyDown",value:function(e){if(38==e.keyCode){var t=this.historyIndex+1;return this.history.length>t&&(e.target.value=this.history[t],this.historyIndex=t),void e.preventDefault()}40==e.keyCode&&(this.historyIndex>0&&(e.target.value=this.history[--this.historyIndex]),e.preventDefault())}}]),t}(f.a.Component),v=function(e){function t(){return Object(a.a)(this,t),Object(m.a)(this,Object(d.a)(t).apply(this,arguments))}return Object(h.a)(t,e),Object(i.a)(t,[{key:"render",value:function(){return f.a.createElement("div",{className:"result"},f.a.createElement("div",{className:"input mono"},f.a.createElement("span",{className:"cur"},">"),this.props.input,f.a.createElement("a",{className:"hashLink",title:"Link for this expression",href:window.location.pathname+"#"+this.props.inputHash},"#")),f.a.createElement("div",{className:"content"},this.props.children))}}]),t}(f.a.Component);var b=function(e){var t=[],n=e.appState;return"prod"!=e.appState.env&&t.push(n.env),e.appState.debugMode&&t.push("debug"),"false"===localStorage.getItem("TrackAnalytics")&&t.push("notrack"),0==t.length?null:f.a.createElement("div",null,t.map(function(e){return f.a.createElement("span",null,e,"\xa0")}))},E={encodeHash:function(e){return encodeURIComponent(e.trim().replace(/\s/g,","))},decodeHash:function(e){return decodeURIComponent(e.replace(/^\#/,"")).replace(/,/g," ")},getArgs:function(e){var t,n=this.decodeHash(e),a=[];return(t=n,t.split("||").filter(function(e){return e.length>0})).forEach(function(e){a.push(e)}),a}};var y=n(12),x=n(17),B=n(13);n(27);var k=function(){return f.a.createElement("ul",{className:"top-links"},f.a.createElement("li",null,f.a.createElement("a",{href:"https://github.com/BorisLevitskiy/BitwiseCmd"},f.a.createElement(y.a,{className:"icon",icon:B.a,size:"lg"}),"Project on GitHub")),f.a.createElement("li",null,f.a.createElement("a",{href:"https://twitter.com/BitwiseCmd"},f.a.createElement(y.a,{className:"icon",icon:B.b,size:"lg"}),f.a.createElement("span",{className:"link-text"},"Twitter"))),f.a.createElement("li",null,f.a.createElement("a",{href:"mailto:bitwisecmd@gmail.com?subject=Feedback"},f.a.createElement(y.a,{className:"icon",icon:x.a,size:"lg"}),f.a.createElement("span",{className:"link-text"},"Send Feedback"))))},w=function(e){function t(){return Object(a.a)(this,t),Object(m.a)(this,Object(d.a)(t).apply(this,arguments))}return Object(h.a)(t,e),Object(i.a)(t,[{key:"componentWillMount",value:function(){var e=this;this.refresh(),this.props.appState.onChange(function(){return e.refresh()})}},{key:"refresh",value:function(){this.setState(this.props.appState)}},{key:"getIndicator",value:function(e){return e?"on":"off"}},{key:"getResultViews",value:function(){var e=this;return this.state.commandResults.map(function(t,n){return f.a.createElement(v,{key:t.key,input:t.input,inputHash:E.encodeHash(t.input),appState:e.props.appState},t.view)})}},{key:"toggleEmphasizeBytes",value:function(){this.props.appState.toggleEmphasizeBytes()}},{key:"render",value:function(){var e=this;return f.a.createElement("div",{className:"app-root ".concat(this.state.uiTheme)},f.a.createElement(b,{appState:this.props.appState}),f.a.createElement("div",{className:"header"},f.a.createElement("h1",null,"Bitwise",f.a.createElement("span",{className:"header-cmd"},"Cmd")),f.a.createElement(k,null)),f.a.createElement("div",{className:"expressionInput-container"},f.a.createElement(g,{onCommandEntered:function(e){return c.execute(e)}}),f.a.createElement("span",{className:"configPnl"},f.a.createElement("span",{id:"emphasizeBytes","data-cmd":"em",className:"indicator "+this.getIndicator(this.state.emphasizeBytes),title:"Toggle Emphasize Bytes",onClick:function(){return e.toggleEmphasizeBytes()}},"[em]"))),f.a.createElement("div",{id:"output"},this.getResultViews()))}}]),t}(f.a.Component),O=n(18),_=n.n(O);n(31);var N=function(e){return f.a.createElement("div",{className:"result"},f.a.createElement("div",{className:"error"},e.errorMessage))},S={formatString:function(e,t){return e.toString(function(e){switch(e){case"bin":return 2;case"hex":return 16;case"dec":return 10}throw new Error("Unsupported kind: "+e)}(t||"bin"))},padLeft:function(e,t,n){var a=Array.prototype.slice.call(e);n=n||"0";if(null==t)return e;for(;t>a.length;)a.unshift(n);return a.join("")}};var C=function(e){function t(){return Object(a.a)(this,t),Object(m.a)(this,Object(d.a)(t).apply(this,arguments))}return Object(h.a)(t,e),Object(i.a)(t,[{key:"render",value:function(){return f.a.createElement("span",{className:this.props.className},this.getChildren())}},{key:"onBitClick",value:function(e,t){if(this.props.allowFlipBits&&this.props.onFlipBit){this.props.onFlipBit;var n=this.props.binaryString.split("");n[e]="0"==n[e]?"1":"0";var a=n.join("");this.props.onFlipBit({index:e,binaryString:this.props.binaryString,$event:t,newBinaryString:a})}}},{key:"getChildren",value:function(){var e=this.createBits(this.props.binaryString.split(""));return this.props.emphasizeBytes?this.splitIntoBytes(e):e}},{key:"createBits",value:function(e){var t=this,n=this.props.allowFlipBits||!1?" flipable":"";return e.map(function(e,a){var i="0"==e?"zero".concat(n):"one".concat(n);return f.a.createElement("span",{className:i,key:a,onClick:function(e){return t.onBitClick(a,e)}},e)})}},{key:"splitIntoBytes",value:function(e){for(var t=[],n=0;e.length>0;)t.push(f.a.createElement("span",{key:n++,className:"byte"},e.splice(0,8)));return t}}]),t}(f.a.Component);n(32);var I=function(e){function t(){return Object(a.a)(this,t),Object(m.a)(this,Object(d.a)(t).apply(this,arguments))}return Object(h.a)(t,e),Object(i.a)(t,[{key:"render",value:function(){return 1===this.props.ipAddresses.length?this.renderSingleIp(this.props.ipAddresses[0]):this.renderMultipleIps()}},{key:"renderMultipleIps",value:function(){var e=this;return f.a.createElement("table",{className:"expression"},f.a.createElement("tbody",null,this.props.ipAddresses.map(function(t,n){return f.a.createElement("tr",{key:n},f.a.createElement("td",{className:"label"},f.a.createElement("strong",null,t.toString())),f.a.createElement("td",{className:"bin"},e.bin(t.firstByte,1,t),f.a.createElement("span",{className:"soft"},"."),e.bin(t.secondByte,2,t),f.a.createElement("span",{className:"soft"},"."),e.bin(t.thirdByte,3,t),f.a.createElement("span",{className:"soft"},"."),e.bin(t.fourthByte,4,t)))})))}},{key:"renderSingleIp",value:function(e){return f.a.createElement("table",{className:"expression"},f.a.createElement("thead",null,f.a.createElement("tr",null,f.a.createElement("th",{className:"first-decimal"},e.firstByte),f.a.createElement("th",{className:"second-decimal"},e.secondByte),f.a.createElement("th",{className:"third-decimal"},e.thirdByte),f.a.createElement("th",{className:"fourth-decimal"},e.fourthByte))),f.a.createElement("tbody",null,f.a.createElement("tr",null,f.a.createElement("td",{className:"first-bin"},this.bin(e.firstByte,1,e)),f.a.createElement("td",{className:"second-bin"},this.bin(e.secondByte,2,e)),f.a.createElement("td",{className:"third-bin"},this.bin(e.thirdByte,3,e)),f.a.createElement("td",{className:"fourth-bin"},this.bin(e.fourthByte,4,e)))))}},{key:"bin",value:function(e,t,n){var a,i=this;return f.a.createElement(C,{binaryString:(a=e,S.padLeft(S.formatString(a,"bin"),8,"0")),key:t,emphasizeBytes:!1,allowFlipBits:!0,className:"octet-".concat(t),onFlipBit:function(e){return i.onFlippedBit(e.newBinaryString,t,n)}})}},{key:"onFlippedBit",value:function(e,t,n){n.setOctet(t,parseInt(e,2)),this.forceUpdate()}}]),t}(f.a.Component),M={parse:function(e){var t=this,n=this.getMaches(e),a=n.filter(function(e){return null!=e.matches}),i=n.filter(function(e){return null==e.matches});if(0==a.length)return null;if(i.length>0)return new j("Value(s) ".concat(i.map(function(e){return e.input}).join(",")," was not recognized as valid ip address or ip address with a subnet mask"));var r=n.map(function(e){return t.parseSingle(e.matches,e.input)}),s=r.filter(function(e){return e instanceof j});return s.length>0?s[0]:r},getMaches:function(e){return e.replace(/[\t\s]+/g," ").split(" ").filter(function(e){return e.length>0}).map(function(e){var t=/^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})(\/\d+)?$/.exec(e);return null==t||0===t.length?{matches:null,input:e}:{matches:t,input:e}})},parseSingle:function(e,t){var n=function(e){return e<0||e>255},a=parseInt(e[1]),i=parseInt(e[2]),r=parseInt(e[3]),s=parseInt(e[4]);if(n(a)||n(i)||n(r)||n(s))return new j("".concat(t," value doesn't fall within the valid range of the IP address space"));var l=new z(a,i,r,s);if(e[5]){var o=e[5].substr(1),u=parseInt(o);return u>32?new j("Subnet mask value in ".concat(t," is out of range")):new R(l,u)}return l}},j=function e(t){Object(a.a)(this,e),this.errorMessage=void 0,this.errorMessage=t},R=function(){function e(t,n){Object(a.a)(this,e),this.maskBits=void 0,this.ipAddress=void 0,this.ipAddress=t,this.maskBits=n}return Object(i.a)(e,[{key:"toString",value:function(){return"".concat(this.ipAddress.toString(),"/").concat(this.maskBits)}},{key:"createSubnetMaskIp",value:function(){var e=function(e){return 255<<8-e&255};return this.maskBits<=8?new z(e(this.maskBits),0,0,0):this.maskBits<=16?new z(255,e(this.maskBits-8),0,0):this.maskBits<=24?new z(255,255,e(this.maskBits-16),0):new z(255,255,255,e(this.maskBits-24))}}]),e}(),z=function(){function e(t,n,i,r){Object(a.a)(this,e),this.firstByte=void 0,this.secondByte=void 0,this.thirdByte=void 0,this.fourthByte=void 0,this.firstByte=t,this.secondByte=n,this.thirdByte=i,this.fourthByte=r}return Object(i.a)(e,[{key:"toString",value:function(){return"".concat(this.firstByte,".").concat(this.secondByte,".").concat(this.thirdByte,".").concat(this.fourthByte)}},{key:"setOctet",value:function(e,t){switch(e){case 1:this.firstByte=t;break;case 2:this.secondByte=t;break;case 3:this.thirdByte=t;break;case 4:this.fourthByte=t}}}]),e}(),L={setup:function(e,t){t.command({canHandle:function(e){return null!=M.parse(e)},handle:function(t){var n=M.parse(t.input);if(null!=n)if(n instanceof j)e.addCommandResult(t.input,f.a.createElement(N,{errorMessage:n.errorMessage}));else{var a=[];n.forEach(function(e){e instanceof R?(a.push(e.ipAddress),a.push(e.createSubnetMaskIp())):e instanceof z&&a.push(e)}),e.addCommandResult(t.input,f.a.createElement(I,{ipAddresses:a}))}}}),u.a.debug()}},D=n(8),F=n(9),H=function(){function e(t,n){Object(a.a)(this,e),this.numbers=void 0,this.expressionString=void 0,this.maxBitsLength=void 0,this.expressionString=t,this.numbers=n,this.maxBitsLength=n.map(function(e){return e.lengthInBits}).reduce(function(e,t){return e>=t?e:t},0)}return Object(i.a)(e,[{key:"toString",value:function(){return this.numbers.map(function(e){return e.value.toString()}).join(" ")}}]),e}(),P=function e(t,n){Object(a.a)(this,e),this.expressionString=void 0,this.expressionItems=void 0,this.expressionString=t,this.expressionItems=n},U=function(){function e(){Object(a.a)(this,e),this.factories=void 0,this.factories=[]}return Object(i.a)(e,[{key:"canParse",value:function(e){for(var t=e.replace(/^\s+|\s+$/,""),n=this.factories.length-1;n>=0;n--)if(!0===this.factories[n].canCreate(t))return!0;return!1}},{key:"parse",value:function(e){for(var t,n=e.replace(/^\s+|\s+$/,""),a=0,i=this.factories.length;a0&&n.push(D.a.parse(e.trim()))}),new H(e,n)}}]),e}(),T=function(){function e(){Object(a.a)(this,e),this.fullRegex=void 0,this.regex=void 0,this.fullRegex=/^((<<|>>|>>>|\||\&|\^)?(~?-?([b,x,a-f,0-9]+)))+$/,this.regex=/(<<|>>|>>>|\||\&|\^)?(~?-?(?:[b,x,a-f,0-9]+))/g}return Object(i.a)(e,[{key:"canCreate",value:function(e){return this.fullRegex.lastIndex=0,this.fullRegex.test(this.normalizeString(e))}},{key:"create",value:function(e){for(var t,n=[],a=this.normalizeString(e);null!=(t=this.regex.exec(a));)n.push(this.parseMatch(t));return new P(a,n)}},{key:"parseMatch",value:function(e){var t=e[0],n=e[1],a=e[2],i=null;return i=0==a.indexOf("~")?new F.a(a,D.a.parse(a.substring(1)),"~"):D.a.parse(a),null==n?i:new F.a(t,i,n)}},{key:"normalizeString",value:function(e){return e.replace(/\s+/g,"")}}]),e}(),K=new U;K.addFactory(new A),K.addFactory(new T);var V=function(){function e(t){var n=t.emphasizeBytes,i=void 0!==n&&n,r=t.allowFlipBits,s=void 0!==r&&r;Object(a.a)(this,e),this.emphasizeBytes=void 0,this.items=void 0,this.maxNumberOfBits=void 0,this.allowFlipBits=void 0,this.emphasizeBytes=i,this.items=[],this.maxNumberOfBits=0,this.allowFlipBits=!0===s}return Object(i.a)(e,[{key:"addOperandRow",value:function(e){this.maxNumberOfBits=Math.max(e.getLengthInBits(),this.maxNumberOfBits),this.items.push({sign:"",css:"",expressionItem:e,allowFlipBits:this.allowFlipBits,label:""})}},{key:"addExpressionOperandRow",value:function(e){var t=e.isNotExpression?e.evaluate():e.getUnderlyingOperand();this.maxNumberOfBits=Math.max(t.getLengthInBits(),this.maxNumberOfBits),this.items.push({sign:e.sign,css:"",label:this.getLabel(t),expressionItem:e.operand,allowFlipBits:this.allowFlipBits})}},{key:"addShiftExpressionResultRow",value:function(e,t){this.maxNumberOfBits=Math.max(t.getLengthInBits(),this.maxNumberOfBits),this.items.push({sign:e.sign+e.operand.toString(),css:"expression-result",expressionItem:t,allowFlipBits:!1,label:""})}},{key:"addExpressionResultRow",value:function(e){this.maxNumberOfBits=Math.max(e.getLengthInBits(),this.maxNumberOfBits),this.items.push({sign:"=",css:"expression-result",expressionItem:e,allowFlipBits:!1,label:""})}},{key:"getLabel",value:function(e){return"bin"==e.base?e.toString("dec"):e.toString()}}],[{key:"buildListOfNumbers",value:function(t,n){var a=new e(n);return t.numbers.forEach(function(e){return a.addOperandRow(e)}),a.maxNumberOfBits=e.getNumberOfBits(a.maxNumberOfBits,a.emphasizeBytes),a}},{key:"buildMultiple",value:function(t,n){t.expressionItems[0];for(var a,i=0,r=t.expressionItems.length,s=new e(n),l=null;i>")," \u2014 sign propagating right shift"),f.a.createElement("li",null,f.a.createElement("code",null,">>>")," \u2014 zero-fill right shift"))),f.a.createElement("div",{className:"section"},f.a.createElement("strong",{className:"section-title soft"},"Tip"),f.a.createElement("p",null,"You can click on bits to flip them in number inputs (e.g. ",f.a.createElement(X,{text:"2 4"}),") or IP addresses (e.g. ",f.a.createElement(X,{text:"192.168.0.0/8"}),")")))))};var Z=function(e){return f.a.createElement("p",null,e.text)};n(36);var ee=function(){return f.a.createElement("div",{className:"changelog"},f.a.createElement("h3",null,"Changelog"),f.a.createElement("div",{className:"item item-new"},f.a.createElement("p",null,f.a.createElement("span",{className:"soft date"},"Jun 14th, 2021")," ",f.a.createElement("br",null),"Added support of ip addresses and subnet masks notatioans. Try them out:"),f.a.createElement("ul",null,f.a.createElement("li",null,"Single IP address ",f.a.createElement(X,{text:"127.0.0.1"})),f.a.createElement("li",null,"Multiple IP addresses and subnet mask notations ",f.a.createElement(X,{text:"127.0.0.1 192.168.0.0/24"})))),f.a.createElement("div",{className:"item"},f.a.createElement("p",null,f.a.createElement("span",{className:"soft date"},"Jun 6th, 2017")," ",f.a.createElement("br",null),"Added ",f.a.createElement("code",null,f.a.createElement(X,{text:"guid"}))," command. Use it for generating v4 GUIDs ")),f.a.createElement("div",{className:"item"},f.a.createElement("p",null,f.a.createElement("span",{className:"soft date"},"May 27th, 2017")," ",f.a.createElement("br",null),"Added support of binary number notation (e.g. ",f.a.createElement("code",null,f.a.createElement(X,{text:"0b10101"})),"). ")),f.a.createElement("div",{className:"item"},f.a.createElement("p",null,f.a.createElement("span",{className:"soft"},"May 20th, 2017")," ",f.a.createElement("br",null),"New ",f.a.createElement(X,{text:"Midnight"})," theme added. ")),f.a.createElement("div",{className:"item"},f.a.createElement("p",null,f.a.createElement("span",{className:"soft"},"May 16th, 2017")," ",f.a.createElement("br",null),"Complete rewrite using React. Old implementation is available at ",f.a.createElement("a",{href:"http://bitwisecmd.com/old"},"http://bitwisecmd.com/old"),". Please let me know if you have problems with this release by ",f.a.createElement("a",{href:"https://github.com/BorysLevytskyi/BitwiseCmd/issues"},"creating issue")," in Github Repo.")))},te={setup:function(e,t){t.debugMode=e.debugMode,e.onChange(function(){return t.debugMode=e.debugMode}),t.command("help",function(t){return e.addCommandResult(t.input,f.a.createElement(Q,null))}),t.command("clear",function(){return e.clearCommandResults()}),t.command("em",function(){return e.toggleEmphasizeBytes()}),t.command("dark",function(){return e.setUiTheme("dark")}),t.command("light",function(){return e.setUiTheme("light")}),t.command("midnight",function(){return e.setUiTheme("midnight")}),t.command("about",function(t){return e.addCommandResult(t.input,f.a.createElement(Y,null))}),t.command("whatsnew",function(t){return e.addCommandResult(t.input,f.a.createElement(ee,null))}),t.command("guid",function(t){return e.addCommandResult(t.input,f.a.createElement(Z,{text:G()()}))}),t.command("-notrack",function(){}),t.command("-debug",function(t){e.toggleDebugMode(),e.addCommandResult(t.input,f.a.createElement(Z,{text:"Debug Mode: ".concat(e.debugMode)}))}),t.onError(function(t,n){return e.addCommandResult(t,f.a.createElement(N,{errorMessage:n.toString()}))})}},ne=5,ae=function(){function e(t,n){Object(a.a)(this,e),this.version=ne,this.emphasizeBytes=void 0,this.debugMode=!1,this.uiTheme=void 0,this.changeHandlers=void 0,this.commandResults=void 0,this.persistedVersion=void 0,this.wasOldVersion=void 0,this.env=void 0,this.commandResults=[],this.changeHandlers=[],this.uiTheme=t.uiTheme||"midnight",this.env=n,this.emphasizeBytes=t.emphasizeBytes||!0,this.persistedVersion=t.version||.1,this.wasOldVersion=null!=t.version&&this.version>this.persistedVersion,this.debugMode="prod"!==n||!0===t.debugMode}return Object(i.a)(e,[{key:"addCommandResult",value:function(e,t){var n=Math.ceil(1e7*Math.random())^Date.now();this.commandResults.unshift({key:n,input:e,view:t}),u.a.debug("command result added: ".concat(e)),this.triggerChanged()}},{key:"clearCommandResults",value:function(){this.commandResults=[],this.triggerChanged()}},{key:"toggleEmphasizeBytes",value:function(){this.emphasizeBytes=!this.emphasizeBytes,this.triggerChanged()}},{key:"onChange",value:function(e){this.changeHandlers.push(e)}},{key:"triggerChanged",value:function(){var e=this;this.changeHandlers.forEach(function(t){return t(e)})}},{key:"setUiTheme",value:function(e){this.uiTheme=e,this.triggerChanged()}},{key:"toggleDebugMode",value:function(){this.debugMode=!this.debugMode,this.triggerChanged()}},{key:"getPersistData",value:function(){return{emphasizeBytes:this.emphasizeBytes,uiTheme:this.uiTheme,version:this.version,debugMode:this.debugMode}}}]),e}();var ie={getPersistedData:function(){var e=window.localStorage.getItem("AppState");if(!e)return{};try{return JSON.parse(e)}catch(t){return console.error("Failed to parse AppState json. Json Value: \n"+e,t),{}}},watch:function(e){var t=this;e.onChange(function(){return t.persistData(e)})},persistData:function(e){localStorage.setItem("AppState",JSON.stringify(e.getPersistData()))}};var re=function(e){return f.a.createElement("div",{className:"result"},f.a.createElement("div",{className:"error"},"\xaf\\_(\u30c4)_/\xaf Sorry, i don\u2032t know what ",f.a.createElement("strong",null,e.input)," is"))},se=function(){var e="bitwisecmd.com"===window.location.host?"prod":"stage";!function(e){"prod"!=e?(u.a.setLevel("debug"),u.a.debug("Log level is set to debug. Env: ".concat(e))):u.a.setLevel("warn")}(e);var t=function(e){var t=ie.getPersistedData(),n=new ae(t,e);return ie.watch(n),u.a.debug("appState initialized",n),n}(e);return{appState:t,startupCommands:function(e){var t=E.getArgs(window.location.hash),n=["help","127.0.0.1 192.168.0.0/8","1|2&6","4 0b1000000 0x80"];return e.wasOldVersion&&(n=["whatsnew"]),t.length>0&&(n=t),u.a.debug("Executing startup commands",n),n}(t)}}();te.setup(se.appState,c),L.setup(se.appState,c),W.setup(se.appState,c),c.command({canHandle:function(){return!0},handle:function(e){return se.appState.addCommandResult(e.input,f.a.createElement(re,{input:e.input}))}});var le=f.a.createElement(w,{appState:se.appState});_.a.render(le,document.getElementById("root")),u.a.debug("Executing startup commands",se.startupCommands),se.startupCommands.forEach(c.execute.bind(c)),u.a.debug("started")},8:function(e,t,n){"use strict";var a=n(1),i=n(2),r=[{regex:/^-?\d+$/,radix:10,base:"dec",prefix:"^$"},{regex:/^-?0x[0-9,a-f]+$/i,radix:16,base:"hex",prefix:/0x/i},{regex:/^-?0b[0-1]+$/i,radix:2,base:"bin",prefix:/0b/i}],s=new(function(){function e(t){Object(a.a)(this,e),this.parsers=void 0,this.parsers=t}return Object(i.a)(e,[{key:"parse",value:function(e){var t=this;return this.parsers.map(function(n){return t.applyParser(n,e)}).reduce(function(e,t){return e||t})}},{key:"parseOperator",value:function(e){var t=e.match(e);return null==t||0==t.length?null:t[0]}},{key:"applyParser",value:function(e,t){return e.regex.test(t)?{value:parseInt(t.replace(e.prefix,""),e.radix),base:e.base,input:t}:null}}]),e}())(r);n.d(t,"a",function(){return o});var l=1,o=function(){function e(t,n){Object(a.a)(this,e),this.id=void 0,this.value=void 0,this.base=void 0,this.lengthInBits=void 0,this.isExpression=void 0,this.id=l++,this.value=t,this.base=n||"dec",this.lengthInBits=e.getBitLength(this.value),this.isExpression=!1}return Object(i.a)(e,[{key:"getLengthInBits",value:function(){return this.value<0?32:Math.floor(Math.log(this.value)/Math.log(2))+1}},{key:"getOtherBase",value:function(e){switch(e||this.base){case"dec":case"bin":return"hex";case"hex":return"dec";default:throw new Error(e+" kind doesn't have opposite kind")}}},{key:"toString",value:function(t){return e.toBaseString(this.value,t||this.base)}},{key:"toOtherKindString",value:function(){return this.toString(this.getOtherBase())}},{key:"toDecimalString",value:function(){return this.toString("dec")}},{key:"toHexString",value:function(){return this.toString("hex")}},{key:"toBinaryString",value:function(){return this.toString("bin")}},{key:"setValue",value:function(t){this.value=t,this.lengthInBits=e.getBitLength(t)}},{key:"evaluate",value:function(){return this}},{key:"getUnderlyingOperand",value:function(){return this}}],[{key:"getBitLength",value:function(e){return Math.floor(Math.log(e)/Math.log(2))+1}},{key:"getBase",value:function(e){switch(e){case"bin":return 2;case"hex":return 16;case"dec":return 10}}},{key:"create",value:function(t,n){return new e(t,n||"dec")}},{key:"parse",value:function(t){var n=s.parse(t);if(!n)throw new Error(t+" is not a valid number");return new e(n.value,n.base)}},{key:"toBaseString",value:function(e,t){switch(t){case"hex":var n=Math.abs(e).toString(16);return e>=0?"0x"+n:"-0x"+n;case"bin":return(e>>>0).toString(2);case"dec":return e.toString(10);default:throw new Error("Unexpected kind: "+t)}}},{key:"toHexString",value:function(e){return 0===e.indexOf("-")?"-0x"+e.substr(1):"0x"+e}}]),e}()},9:function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",function(){return ExpressionOperand});var D_MyStuff_Pet_BitwiseCmd_node_modules_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1),D_MyStuff_Pet_BitwiseCmd_node_modules_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(2),_NumericOperand__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(8),ExpressionOperand=function(){function ExpressionOperand(e,t,n){Object(D_MyStuff_Pet_BitwiseCmd_node_modules_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_0__.a)(this,ExpressionOperand),this.expressionString=void 0,this.operand=void 0,this.sign=void 0,this.isExpression=void 0,this.isShiftExpression=void 0,this.isNotExpression=void 0,this.expressionString=e,this.operand=t,this.sign=n,this.isExpression=!0,this.isShiftExpression=this.sign.indexOf("<")>=0||this.sign.indexOf(">")>=0,this.isNotExpression="~"===this.sign}return Object(D_MyStuff_Pet_BitwiseCmd_node_modules_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_1__.a)(ExpressionOperand,[{key:"evaluate",value:function evaluate(operand){if(operand instanceof ExpressionOperand)throw new Error("value shouldnt be expression");var evaluatedOperand=this.operand.evaluate(),str="";if("~"==this.sign)str="~"+evaluatedOperand.value;else{if(null==operand)throw new Error("Other is required for expression: "+this.expressionString);str=operand.value+this.sign+evaluatedOperand.value}return _NumericOperand__WEBPACK_IMPORTED_MODULE_2__.a.create(eval(str),evaluatedOperand.base)}},{key:"getUnderlyingOperand",value:function(){return this.operand.getUnderlyingOperand()}},{key:"toString",value:function(){return this.sign+this.operand.toString()}}]),ExpressionOperand}()}},[[20,1,2]]]); -//# sourceMappingURL=main.622412c9.chunk.js.map \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[0],{20:function(e,t,n){e.exports=n(37)},27:function(e,t,n){},31:function(e,t,n){},32:function(e,t,n){},35:function(e,t,n){},36:function(e,t,n){},37:function(e,t,n){"use strict";n.r(t);var a=n(1),i=n(2),r=function(e){return"object"==typeof e&&!(e instanceof Array)&&e instanceof Object},s=function(e){return"function"==typeof e},l=function(e){return"string"==typeof e},o=n(4),u=n.n(o),c=new(function(){function e(){Object(a.a)(this,e),this.debugMode=void 0,this.handlers=void 0,this.errorHandler=void 0,this.handlers=[],this.debugMode=!1,this.errorHandler=null}return Object(i.a)(e,[{key:"execute",value:function(e){u.a.debug("Executing command: ".concat(e));var t=e.trim().toLowerCase(),n=this.findHandler(t);if(null!=n)if(this.debugMode)this.invokeHandler(t,n);else try{this.invokeHandler(t,n)}catch(a){this.handleError(t,a)}else u.a.debug("Handled is not found for command: ".concat(e)),this.handleError(t,new Error("Unsupported expression: "+t.trim()))}},{key:"onError",value:function(e){this.errorHandler=e}},{key:"command",value:function(e,t){var n=this.createHandler(e,t);null!=n?s(n.canHandle)?s(n.handle)?this.handlers.push(n):console.warn('handler is missing "handle" function. registration denied.'):console.warn('handler is missing "canHandle" function. registration denied.'):console.warn("unexpected set of arguments: ",JSON.stringify(arguments))}},{key:"createHandler",value:function(e,t){return r(e)?e:l(e)?{canHandle:function(t){return t===e},handle:t}:null}},{key:"findHandler",value:function(e){return this.handlers.filter(function(t){return t.canHandle(e)})[0]}},{key:"invokeHandler",value:function(e,t){var n=t.handle({input:e});null!=n&&u.a.debug(n)}},{key:"handleError",value:function(e,t){this.debugMode&&console.error(e,t),null!=this.errorHandler&&this.errorHandler(e,t)}}]),e}()),m=n(6),d=n(5),h=n(7),p=n(0),f=n.n(p),g=function(e){function t(e){var n;return Object(a.a)(this,t),(n=Object(m.a)(this,Object(d.a)(t).call(this,e))).history=void 0,n.historyIndex=void 0,n.nameInput=void 0,n.nameInput=null,n.history=[],n.historyIndex=-1,n}return Object(h.a)(t,e),Object(i.a)(t,[{key:"componentDidMount",value:function(){null!=this.nameInput&&this.nameInput.focus()}},{key:"render",value:function(){var e=this;return f.a.createElement("input",{id:"in",type:"text",ref:function(t){e.nameInput=t},onKeyUp:function(t){return e.onKeyUp(t)},onKeyDown:function(t){return e.onKeyDown(t)},className:"expressionInput mono",placeholder:"type expression like '1>>2' or 'help' "})}},{key:"onKeyUp",value:function(e){var t=e.target;if(13==e.keyCode&&0!=t.value.trim().length){var n=t.value;this.history.unshift(n),this.historyIndex=-1,t.value="",this.props.onCommandEntered(n)}}},{key:"onKeyDown",value:function(e){if(38==e.keyCode){var t=this.historyIndex+1;return this.history.length>t&&(e.target.value=this.history[t],this.historyIndex=t),void e.preventDefault()}40==e.keyCode&&(this.historyIndex>0&&(e.target.value=this.history[--this.historyIndex]),e.preventDefault())}}]),t}(f.a.Component),v=function(e){function t(){return Object(a.a)(this,t),Object(m.a)(this,Object(d.a)(t).apply(this,arguments))}return Object(h.a)(t,e),Object(i.a)(t,[{key:"render",value:function(){return f.a.createElement("div",{className:"result"},f.a.createElement("div",{className:"input mono"},f.a.createElement("span",{className:"cur"},">"),this.props.input,f.a.createElement("a",{className:"hashLink",title:"Link for this expression",href:window.location.pathname+"#"+this.props.inputHash},"#")),f.a.createElement("div",{className:"content"},this.props.children))}}]),t}(f.a.Component);var b=function(e){var t=[],n=e.appState;return"prod"!=e.appState.env&&t.push(n.env),e.appState.debugMode&&t.push("debug"),"false"===localStorage.getItem("TrackAnalytics")&&t.push("notrack"),0==t.length?null:f.a.createElement("div",null,t.map(function(e){return f.a.createElement("span",null,e,"\xa0")}))},E={encodeHash:function(e){return encodeURIComponent(e.trim().replace(/\s/g,","))},decodeHash:function(e){return decodeURIComponent(e.replace(/^\#/,"")).replace(/,/g," ")},getArgs:function(e){var t,n=this.decodeHash(e),a=[];return(t=n,t.split("||").filter(function(e){return e.length>0})).forEach(function(e){a.push(e)}),a}};var y=n(12),x=n(17),B=n(13);n(27);var k=function(){return f.a.createElement("ul",{className:"top-links"},f.a.createElement("li",null,f.a.createElement("a",{href:"https://github.com/BorisLevitskiy/BitwiseCmd"},f.a.createElement(y.a,{className:"icon",icon:B.a,size:"lg"}),"Project on GitHub")),f.a.createElement("li",null,f.a.createElement("a",{href:"https://twitter.com/BitwiseCmd"},f.a.createElement(y.a,{className:"icon",icon:B.b,size:"lg"}),f.a.createElement("span",{className:"link-text"},"Twitter"))),f.a.createElement("li",null,f.a.createElement("a",{href:"mailto:bitwisecmd@gmail.com?subject=Feedback"},f.a.createElement(y.a,{className:"icon",icon:x.a,size:"lg"}),f.a.createElement("span",{className:"link-text"},"Send Feedback"))))},w=function(e){function t(){return Object(a.a)(this,t),Object(m.a)(this,Object(d.a)(t).apply(this,arguments))}return Object(h.a)(t,e),Object(i.a)(t,[{key:"componentWillMount",value:function(){var e=this;this.refresh(),this.props.appState.onChange(function(){return e.refresh()})}},{key:"refresh",value:function(){this.setState(this.props.appState)}},{key:"getIndicator",value:function(e){return e?"on":"off"}},{key:"getResultViews",value:function(){var e=this;return this.state.commandResults.map(function(t,n){return f.a.createElement(v,{key:t.key,input:t.input,inputHash:E.encodeHash(t.input),appState:e.props.appState},t.view)})}},{key:"toggleEmphasizeBytes",value:function(){this.props.appState.toggleEmphasizeBytes()}},{key:"render",value:function(){var e=this;return f.a.createElement("div",{className:"app-root ".concat(this.state.uiTheme)},f.a.createElement(b,{appState:this.props.appState}),f.a.createElement("div",{className:"header"},f.a.createElement("h1",null,"Bitwise",f.a.createElement("span",{className:"header-cmd"},"Cmd")),f.a.createElement(k,null)),f.a.createElement("div",{className:"expressionInput-container"},f.a.createElement(g,{onCommandEntered:function(e){return c.execute(e)}}),f.a.createElement("span",{className:"configPnl"},f.a.createElement("span",{id:"emphasizeBytes","data-cmd":"em",className:"indicator "+this.getIndicator(this.state.emphasizeBytes),title:"Toggle Emphasize Bytes",onClick:function(){return e.toggleEmphasizeBytes()}},"[em]"))),f.a.createElement("div",{id:"output"},this.getResultViews()))}}]),t}(f.a.Component),O=n(18),_=n.n(O);n(31);var N=function(e){return f.a.createElement("div",{className:"result"},f.a.createElement("div",{className:"error"},e.errorMessage))},S={formatString:function(e,t){return e.toString(function(e){switch(e){case"bin":return 2;case"hex":return 16;case"dec":return 10}throw new Error("Unsupported kind: "+e)}(t||"bin"))},padLeft:function(e,t,n){var a=Array.prototype.slice.call(e);n=n||"0";if(null==t)return e;for(;t>a.length;)a.unshift(n);return a.join("")}};var C=function(e){function t(){return Object(a.a)(this,t),Object(m.a)(this,Object(d.a)(t).apply(this,arguments))}return Object(h.a)(t,e),Object(i.a)(t,[{key:"render",value:function(){return f.a.createElement("span",{className:this.props.className},this.getChildren())}},{key:"onBitClick",value:function(e,t){if(this.props.allowFlipBits&&this.props.onFlipBit){this.props.onFlipBit;var n=this.props.binaryString.split("");n[e]="0"==n[e]?"1":"0";var a=n.join("");this.props.onFlipBit({index:e,binaryString:this.props.binaryString,$event:t,newBinaryString:a})}}},{key:"getChildren",value:function(){var e=this.createBits(this.props.binaryString.split(""));return this.props.emphasizeBytes?this.splitIntoBytes(e):e}},{key:"createBits",value:function(e){var t=this,n=this.props.allowFlipBits||!1?" flipable":"";return e.map(function(e,a){var i="0"==e?"zero".concat(n):"one".concat(n);return f.a.createElement("span",{className:i,key:a,onClick:function(e){return t.onBitClick(a,e)}},e)})}},{key:"splitIntoBytes",value:function(e){for(var t=[],n=0;e.length>0;)t.push(f.a.createElement("span",{key:n++,className:"byte"},e.splice(0,8)));return t}}]),t}(f.a.Component);n(32);var I=function(e){function t(){return Object(a.a)(this,t),Object(m.a)(this,Object(d.a)(t).apply(this,arguments))}return Object(h.a)(t,e),Object(i.a)(t,[{key:"render",value:function(){return 1===this.props.ipAddresses.length?this.renderSingleIp(this.props.ipAddresses[0]):this.renderMultipleIps()}},{key:"renderMultipleIps",value:function(){var e=this;return f.a.createElement("table",{className:"expression"},f.a.createElement("tbody",null,this.props.ipAddresses.map(function(t,n){return f.a.createElement("tr",{key:n},f.a.createElement("td",{className:"label"},f.a.createElement("strong",null,t.toString())),f.a.createElement("td",{className:"bin"},e.bin(t.firstByte,1,t),f.a.createElement("span",{className:"soft"},"."),e.bin(t.secondByte,2,t),f.a.createElement("span",{className:"soft"},"."),e.bin(t.thirdByte,3,t),f.a.createElement("span",{className:"soft"},"."),e.bin(t.fourthByte,4,t)))})))}},{key:"renderSingleIp",value:function(e){return f.a.createElement("table",{className:"expression"},f.a.createElement("thead",null,f.a.createElement("tr",null,f.a.createElement("th",{className:"first-decimal"},e.firstByte),f.a.createElement("th",{className:"second-decimal"},e.secondByte),f.a.createElement("th",{className:"third-decimal"},e.thirdByte),f.a.createElement("th",{className:"fourth-decimal"},e.fourthByte))),f.a.createElement("tbody",null,f.a.createElement("tr",null,f.a.createElement("td",{className:"first-bin"},this.bin(e.firstByte,1,e)),f.a.createElement("td",{className:"second-bin"},this.bin(e.secondByte,2,e)),f.a.createElement("td",{className:"third-bin"},this.bin(e.thirdByte,3,e)),f.a.createElement("td",{className:"fourth-bin"},this.bin(e.fourthByte,4,e)))))}},{key:"bin",value:function(e,t,n){var a,i=this;return f.a.createElement(C,{binaryString:(a=e,S.padLeft(S.formatString(a,"bin"),8,"0")),key:t,emphasizeBytes:!1,allowFlipBits:!0,className:"octet-".concat(t),onFlipBit:function(e){return i.onFlippedBit(e.newBinaryString,t,n)}})}},{key:"onFlippedBit",value:function(e,t,n){n.setOctet(t,parseInt(e,2)),this.forceUpdate()}}]),t}(f.a.Component),M={parse:function(e){var t=this,n=this.getMaches(e),a=n.filter(function(e){return null!=e.matches}),i=n.filter(function(e){return null==e.matches});if(0==a.length)return null;if(i.length>0)return new j("Value(s) ".concat(i.map(function(e){return e.input}).join(",")," was not recognized as valid ip address or ip address with a subnet mask"));var r=n.map(function(e){return t.parseSingle(e.matches,e.input)}),s=r.filter(function(e){return e instanceof j});return s.length>0?s[0]:r},getMaches:function(e){return e.replace(/[\t\s]+/g," ").split(" ").filter(function(e){return e.length>0}).map(function(e){var t=/^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})(\/\d+)?$/.exec(e);return null==t||0===t.length?{matches:null,input:e}:{matches:t,input:e}})},parseSingle:function(e,t){var n=function(e){return e<0||e>255},a=parseInt(e[1]),i=parseInt(e[2]),r=parseInt(e[3]),s=parseInt(e[4]);if(n(a)||n(i)||n(r)||n(s))return new j("".concat(t," value doesn't fall within the valid range of the IP address space"));var l=new z(a,i,r,s);if(e[5]){var o=e[5].substr(1),u=parseInt(o);return u>32?new j("Subnet mask value in ".concat(t," is out of range")):new R(l,u)}return l}},j=function e(t){Object(a.a)(this,e),this.errorMessage=void 0,this.errorMessage=t},R=function(){function e(t,n){Object(a.a)(this,e),this.maskBits=void 0,this.ipAddress=void 0,this.ipAddress=t,this.maskBits=n}return Object(i.a)(e,[{key:"toString",value:function(){return"".concat(this.ipAddress.toString(),"/").concat(this.maskBits)}},{key:"createSubnetMaskIp",value:function(){var e=function(e){return 255<<8-e&255};return this.maskBits<=8?new z(e(this.maskBits),0,0,0):this.maskBits<=16?new z(255,e(this.maskBits-8),0,0):this.maskBits<=24?new z(255,255,e(this.maskBits-16),0):new z(255,255,255,e(this.maskBits-24))}}]),e}(),z=function(){function e(t,n,i,r){Object(a.a)(this,e),this.firstByte=void 0,this.secondByte=void 0,this.thirdByte=void 0,this.fourthByte=void 0,this.firstByte=t,this.secondByte=n,this.thirdByte=i,this.fourthByte=r}return Object(i.a)(e,[{key:"toString",value:function(){return"".concat(this.firstByte,".").concat(this.secondByte,".").concat(this.thirdByte,".").concat(this.fourthByte)}},{key:"setOctet",value:function(e,t){switch(e){case 1:this.firstByte=t;break;case 2:this.secondByte=t;break;case 3:this.thirdByte=t;break;case 4:this.fourthByte=t}}}]),e}(),L={setup:function(e,t){t.command({canHandle:function(e){return null!=M.parse(e)},handle:function(t){var n=M.parse(t.input);if(null!=n)if(n instanceof j)e.addCommandResult(t.input,f.a.createElement(N,{errorMessage:n.errorMessage}));else{var a=[];n.forEach(function(e){e instanceof R?(a.push(e.ipAddress),a.push(e.createSubnetMaskIp())):e instanceof z&&a.push(e)}),e.addCommandResult(t.input,f.a.createElement(I,{ipAddresses:a}))}}}),u.a.debug()}},D=n(8),F=n(9),H=function(){function e(t,n){Object(a.a)(this,e),this.numbers=void 0,this.expressionString=void 0,this.maxBitsLength=void 0,this.expressionString=t,this.numbers=n,this.maxBitsLength=n.map(function(e){return e.lengthInBits}).reduce(function(e,t){return e>=t?e:t},0)}return Object(i.a)(e,[{key:"toString",value:function(){return this.numbers.map(function(e){return e.value.toString()}).join(" ")}}]),e}(),P=function e(t,n){Object(a.a)(this,e),this.expressionString=void 0,this.expressionItems=void 0,this.expressionString=t,this.expressionItems=n},U=function(){function e(){Object(a.a)(this,e),this.factories=void 0,this.factories=[]}return Object(i.a)(e,[{key:"canParse",value:function(e){for(var t=e.replace(/^\s+|\s+$/,""),n=this.factories.length-1;n>=0;n--)if(!0===this.factories[n].canCreate(t))return!0;return!1}},{key:"parse",value:function(e){for(var t,n=e.replace(/^\s+|\s+$/,""),a=0,i=this.factories.length;a0&&n.push(D.a.parse(e.trim()))}),new H(e,n)}}]),e}(),T=function(){function e(){Object(a.a)(this,e),this.fullRegex=void 0,this.regex=void 0,this.fullRegex=/^((<<|>>|>>>|\||\&|\^)?(~?-?([b,x,a-f,0-9]+)))+$/,this.regex=/(<<|>>|>>>|\||\&|\^)?(~?-?(?:[b,x,a-f,0-9]+))/g}return Object(i.a)(e,[{key:"canCreate",value:function(e){return this.fullRegex.lastIndex=0,this.fullRegex.test(this.normalizeString(e))}},{key:"create",value:function(e){for(var t,n=[],a=this.normalizeString(e);null!=(t=this.regex.exec(a));)n.push(this.parseMatch(t));return new P(a,n)}},{key:"parseMatch",value:function(e){var t=e[0],n=e[1],a=e[2],i=null;return i=0==a.indexOf("~")?new F.a(a,D.a.parse(a.substring(1)),"~"):D.a.parse(a),null==n?i:new F.a(t,i,n)}},{key:"normalizeString",value:function(e){return e.replace(/\s+/g,"")}}]),e}(),K=new U;K.addFactory(new A),K.addFactory(new T);var V=function(){function e(t){var n=t.emphasizeBytes,i=void 0!==n&&n,r=t.allowFlipBits,s=void 0!==r&&r;Object(a.a)(this,e),this.emphasizeBytes=void 0,this.items=void 0,this.maxNumberOfBits=void 0,this.allowFlipBits=void 0,this.emphasizeBytes=i,this.items=[],this.maxNumberOfBits=0,this.allowFlipBits=!0===s}return Object(i.a)(e,[{key:"addOperandRow",value:function(e){this.maxNumberOfBits=Math.max(e.getLengthInBits(),this.maxNumberOfBits),this.items.push({sign:"",css:"",expressionItem:e,allowFlipBits:this.allowFlipBits,label:""})}},{key:"addExpressionOperandRow",value:function(e){var t=e.isNotExpression?e.evaluate():e.getUnderlyingOperand();this.maxNumberOfBits=Math.max(t.getLengthInBits(),this.maxNumberOfBits),this.items.push({sign:e.sign,css:"",label:this.getLabel(t),expressionItem:e.operand,allowFlipBits:this.allowFlipBits})}},{key:"addShiftExpressionResultRow",value:function(e,t){this.maxNumberOfBits=Math.max(t.getLengthInBits(),this.maxNumberOfBits),this.items.push({sign:e.sign+e.operand.toString(),css:"expression-result",expressionItem:t,allowFlipBits:!1,label:""})}},{key:"addExpressionResultRow",value:function(e){this.maxNumberOfBits=Math.max(e.getLengthInBits(),this.maxNumberOfBits),this.items.push({sign:"=",css:"expression-result",expressionItem:e,allowFlipBits:!1,label:""})}},{key:"getLabel",value:function(e){return"bin"==e.base?e.toString("dec"):e.toString()}}],[{key:"buildListOfNumbers",value:function(t,n){var a=new e(n);return t.numbers.forEach(function(e){return a.addOperandRow(e)}),a.maxNumberOfBits=e.getNumberOfBits(a.maxNumberOfBits,a.emphasizeBytes),a}},{key:"buildMultiple",value:function(t,n){t.expressionItems[0];for(var a,i=0,r=t.expressionItems.length,s=new e(n),l=null;i>")," \u2014 sign propagating right shift"),f.a.createElement("li",null,f.a.createElement("code",null,">>>")," \u2014 zero-fill right shift"))),f.a.createElement("div",{className:"section"},f.a.createElement("strong",{className:"section-title soft"},"Tip"),f.a.createElement("p",null,"You can click on bits to flip them in number inputs (e.g. ",f.a.createElement(X,{text:"2 4"}),") or IP addresses (e.g. ",f.a.createElement(X,{text:"192.168.0.0/8"}),")")))))};var Z=function(e){return f.a.createElement("p",null,e.text)};n(36);var ee=function(){return f.a.createElement("div",{className:"changelog"},f.a.createElement("h3",null,"Changelog"),f.a.createElement("div",{className:"item item-new"},f.a.createElement("p",null,f.a.createElement("span",{className:"soft date"},"Jun 14th, 2021")," ",f.a.createElement("br",null),"Added support of ip addresses and subnet masks notatioans. Try them out:"),f.a.createElement("ul",null,f.a.createElement("li",null,"Single IP address ",f.a.createElement(X,{text:"127.0.0.1"})),f.a.createElement("li",null,"Multiple IP addresses and subnet mask notations ",f.a.createElement(X,{text:"127.0.0.1 192.168.0.0/24"})))),f.a.createElement("div",{className:"item"},f.a.createElement("p",null,f.a.createElement("span",{className:"soft date"},"Jun 6th, 2017")," ",f.a.createElement("br",null),"Added ",f.a.createElement("code",null,f.a.createElement(X,{text:"guid"}))," command. Use it for generating v4 GUIDs ")),f.a.createElement("div",{className:"item"},f.a.createElement("p",null,f.a.createElement("span",{className:"soft date"},"May 27th, 2017")," ",f.a.createElement("br",null),"Added support of binary number notation (e.g. ",f.a.createElement("code",null,f.a.createElement(X,{text:"0b10101"})),"). ")),f.a.createElement("div",{className:"item"},f.a.createElement("p",null,f.a.createElement("span",{className:"soft"},"May 20th, 2017")," ",f.a.createElement("br",null),"New ",f.a.createElement(X,{text:"Midnight"})," theme added. ")),f.a.createElement("div",{className:"item"},f.a.createElement("p",null,f.a.createElement("span",{className:"soft"},"May 16th, 2017")," ",f.a.createElement("br",null),"Complete rewrite using React. Old implementation is available at ",f.a.createElement("a",{href:"http://bitwisecmd.com/old"},"http://bitwisecmd.com/old"),". Please let me know if you have problems with this release by ",f.a.createElement("a",{href:"https://github.com/BorysLevytskyi/BitwiseCmd/issues"},"creating issue")," in Github Repo.")))},te={setup:function(e,t){t.debugMode=e.debugMode,e.onChange(function(){return t.debugMode=e.debugMode}),t.command("help",function(t){return e.addCommandResult(t.input,f.a.createElement(Q,null))}),t.command("clear",function(){return e.clearCommandResults()}),t.command("em",function(){return e.toggleEmphasizeBytes()}),t.command("dark",function(){return e.setUiTheme("dark")}),t.command("light",function(){return e.setUiTheme("light")}),t.command("midnight",function(){return e.setUiTheme("midnight")}),t.command("about",function(t){return e.addCommandResult(t.input,f.a.createElement(Y,null))}),t.command("whatsnew",function(t){return e.addCommandResult(t.input,f.a.createElement(ee,null))}),t.command("guid",function(t){return e.addCommandResult(t.input,f.a.createElement(Z,{text:G()()}))}),t.command("-notrack",function(){}),t.command("-debug",function(t){e.toggleDebugMode(),e.addCommandResult(t.input,f.a.createElement(Z,{text:"Debug Mode: ".concat(e.debugMode)}))}),t.onError(function(t,n){return e.addCommandResult(t,f.a.createElement(N,{errorMessage:n.toString()}))})}},ne=5,ae=function(){function e(t,n){Object(a.a)(this,e),this.version=ne,this.emphasizeBytes=void 0,this.debugMode=!1,this.uiTheme=void 0,this.changeHandlers=void 0,this.commandResults=void 0,this.persistedVersion=void 0,this.wasOldVersion=void 0,this.env=void 0,this.commandResults=[],this.changeHandlers=[],this.uiTheme=t.uiTheme||"midnight",this.env=n,this.emphasizeBytes=t.emphasizeBytes||!0,this.persistedVersion=t.version||.1,this.wasOldVersion=null!=t.version&&this.version>this.persistedVersion,this.debugMode="prod"!==n||!0===t.debugMode}return Object(i.a)(e,[{key:"addCommandResult",value:function(e,t){var n=Math.ceil(1e7*Math.random())^Date.now();this.commandResults.unshift({key:n,input:e,view:t}),u.a.debug("command result added: ".concat(e)),this.triggerChanged()}},{key:"clearCommandResults",value:function(){this.commandResults=[],this.triggerChanged()}},{key:"toggleEmphasizeBytes",value:function(){this.emphasizeBytes=!this.emphasizeBytes,this.triggerChanged()}},{key:"onChange",value:function(e){this.changeHandlers.push(e)}},{key:"triggerChanged",value:function(){var e=this;this.changeHandlers.forEach(function(t){return t(e)})}},{key:"setUiTheme",value:function(e){this.uiTheme=e,this.triggerChanged()}},{key:"toggleDebugMode",value:function(){this.debugMode=!this.debugMode,this.triggerChanged()}},{key:"getPersistData",value:function(){return{emphasizeBytes:this.emphasizeBytes,uiTheme:this.uiTheme,version:this.version,debugMode:this.debugMode}}}]),e}();var ie={getPersistedData:function(){var e=window.localStorage.getItem("AppState");if(!e)return{};try{return JSON.parse(e)}catch(t){return console.error("Failed to parse AppState json. Json Value: \n"+e,t),{}}},watch:function(e){var t=this;e.onChange(function(){return t.persistData(e)})},persistData:function(e){localStorage.setItem("AppState",JSON.stringify(e.getPersistData()))}};var re=function(e){return f.a.createElement("div",{className:"result"},f.a.createElement("div",{className:"error"},"\xaf\\_(\u30c4)_/\xaf Sorry, i don\u2032t know what ",f.a.createElement("strong",null,e.input)," is"))},se=function(){var e="bitwisecmd.com"===window.location.host?"prod":"stage";!function(e){"prod"!=e?(u.a.setLevel("debug"),u.a.debug("Log level is set to debug. Env: ".concat(e))):u.a.setLevel("warn")}(e);var t=function(e){var t=ie.getPersistedData(),n=new ae(t,e);return ie.watch(n),u.a.debug("appState initialized",n),n}(e);return{appState:t,startupCommands:function(e){var t=E.getArgs(window.location.hash),n=["help","127.0.0.1 192.168.0.0/8","1|2&6","4 0b1000000 0x80"];return e.wasOldVersion&&(n=["whatsnew"]),t.length>0&&(n=t),u.a.debug("Executing startup commands",n),n}(t)}}();te.setup(se.appState,c),L.setup(se.appState,c),W.setup(se.appState,c),c.command({canHandle:function(){return!0},handle:function(e){return se.appState.addCommandResult(e.input,f.a.createElement(re,{input:e.input}))}});var le=f.a.createElement(w,{appState:se.appState});_.a.render(le,document.getElementById("root")),u.a.debug("Executing startup commands",se.startupCommands),se.startupCommands.forEach(c.execute.bind(c)),u.a.debug("started")},8:function(e,t,n){"use strict";var a=n(1),i=n(2),r=[{regex:/^-?\d+$/,radix:10,base:"dec",prefix:"^$"},{regex:/^-?0x[0-9,a-f]+$/i,radix:16,base:"hex",prefix:/0x/i},{regex:/^-?0b[0-1]+$/i,radix:2,base:"bin",prefix:/0b/i}],s=new(function(){function e(t){Object(a.a)(this,e),this.parsers=void 0,this.parsers=t}return Object(i.a)(e,[{key:"parse",value:function(e){var t=this;return this.parsers.map(function(n){return t.applyParser(n,e)}).reduce(function(e,t){return e||t})}},{key:"parseOperator",value:function(e){var t=e.match(e);return null==t||0==t.length?null:t[0]}},{key:"applyParser",value:function(e,t){return e.regex.test(t)?{value:parseInt(t.replace(e.prefix,""),e.radix),base:e.base,input:t}:null}}]),e}())(r);n.d(t,"a",function(){return o});var l=1,o=function(){function e(t,n){Object(a.a)(this,e),this.id=void 0,this.value=void 0,this.base=void 0,this.lengthInBits=void 0,this.isExpression=void 0,this.id=l++,this.value=t,this.base=n||"dec",this.lengthInBits=e.getBitLength(this.value),this.isExpression=!1}return Object(i.a)(e,[{key:"getLengthInBits",value:function(){return this.value<0?32:Math.floor(Math.log(this.value)/Math.log(2))+1}},{key:"getOtherBase",value:function(e){switch(e||this.base){case"dec":case"bin":return"hex";case"hex":return"dec";default:throw new Error(e+" kind doesn't have opposite kind")}}},{key:"toString",value:function(t){return e.toBaseString(this.value,t||this.base)}},{key:"toOtherKindString",value:function(){return this.toString(this.getOtherBase())}},{key:"toDecimalString",value:function(){return this.toString("dec")}},{key:"toHexString",value:function(){return this.toString("hex")}},{key:"toBinaryString",value:function(){return this.toString("bin")}},{key:"setValue",value:function(t){this.value=t,this.lengthInBits=e.getBitLength(t)}},{key:"evaluate",value:function(){return this}},{key:"getUnderlyingOperand",value:function(){return this}}],[{key:"getBitLength",value:function(e){return Math.floor(Math.log(e)/Math.log(2))+1}},{key:"getBase",value:function(e){switch(e){case"bin":return 2;case"hex":return 16;case"dec":return 10}}},{key:"create",value:function(t,n){return new e(t,n||"dec")}},{key:"parse",value:function(t){var n=s.parse(t);if(!n)throw new Error(t+" is not a valid number");return new e(n.value,n.base)}},{key:"toBaseString",value:function(e,t){switch(t){case"hex":var n=Math.abs(e).toString(16);return e>=0?"0x"+n:"-0x"+n;case"bin":return(e>>>0).toString(2);case"dec":return e.toString(10);default:throw new Error("Unexpected kind: "+t)}}},{key:"toHexString",value:function(e){return 0===e.indexOf("-")?"-0x"+e.substr(1):"0x"+e}}]),e}()},9:function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",function(){return ExpressionOperand});var D_MyStuff_Pet_BitwiseCmd_node_modules_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1),D_MyStuff_Pet_BitwiseCmd_node_modules_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(2),_NumericOperand__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(8),ExpressionOperand=function(){function ExpressionOperand(e,t,n){Object(D_MyStuff_Pet_BitwiseCmd_node_modules_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_0__.a)(this,ExpressionOperand),this.expressionString=void 0,this.operand=void 0,this.sign=void 0,this.isExpression=void 0,this.isShiftExpression=void 0,this.isNotExpression=void 0,this.expressionString=e,this.operand=t,this.sign=n,this.isExpression=!0,this.isShiftExpression=this.sign.indexOf("<")>=0||this.sign.indexOf(">")>=0,this.isNotExpression="~"===this.sign}return Object(D_MyStuff_Pet_BitwiseCmd_node_modules_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_1__.a)(ExpressionOperand,[{key:"evaluate",value:function evaluate(operand){if(operand instanceof ExpressionOperand)throw new Error("value shouldnt be expression");var evaluatedOperand=this.operand.evaluate(),str="";if("~"==this.sign)str="~"+evaluatedOperand.value;else{if(null==operand)throw new Error("Other is required for expression: "+this.expressionString);str=operand.value+this.sign+evaluatedOperand.value}return _NumericOperand__WEBPACK_IMPORTED_MODULE_2__.a.create(eval(str),evaluatedOperand.base)}},{key:"getUnderlyingOperand",value:function(){return this.operand.getUnderlyingOperand()}},{key:"toString",value:function(){return this.sign+this.operand.toString()}}]),ExpressionOperand}()}},[[20,1,2]]]); +//# sourceMappingURL=main.b8debf08.chunk.js.map \ No newline at end of file diff --git a/static/js/main.622412c9.chunk.js.map b/static/js/main.b8debf08.chunk.js.map similarity index 78% rename from static/js/main.622412c9.chunk.js.map rename to static/js/main.b8debf08.chunk.js.map index 20ceb63..1c877bb 100644 --- a/static/js/main.622412c9.chunk.js.map +++ b/static/js/main.b8debf08.chunk.js.map @@ -1 +1 @@ -{"version":3,"sources":["core/is.ts","shell/cmd.ts","shell/components/InputBox.tsx","shell/components/DisplayResultView.tsx","shell/components/Indicators.tsx","core/hash.ts","shell/components/TopLinks.tsx","shell/components/AppRoot.tsx","shell/components/ErrorResultView.tsx","core/formatter.ts","core/components/BinaryString.tsx","networking/components/IpAddressView.tsx","networking/ip.ts","networking/module.tsx","expression/ListOfNumbersExpression.ts","expression/BitwiseOperationExpression.ts","expression/expression.ts","expression/components/BitwiseExpressionModel.ts","expression/components/BitwiseOperationExpressionView.tsx","expression/module.tsx","shell/components/AboutResultView.tsx","core/components/CommandLink.tsx","shell/components/HelpResultView.tsx","shell/components/TextResultView.tsx","shell/components/WhatsNewResultView.tsx","shell/module.tsx","shell/AppState.ts","shell/appStateStore.ts","shell/components/UnknownInputResultView.tsx","index.tsx","shell/startup.ts","expression/numberParser.ts","expression/NumericOperand.ts","expression/ExpressionOperand.ts"],"names":["is","obj","Array","Object","shell_cmd","CmdShell","classCallCheck","this","debugMode","handlers","errorHandler","createClass","key","value","rawInput","log","debug","concat","input","trim","toLowerCase","handler","findHandler","invokeHandler","e","handleError","Error","h","cmd","createHandler","canHandle","handle","push","console","warn","JSON","stringify","arguments","filter","cmdResult","err","error","InputBox","props","_this","possibleConstructorReturn","getPrototypeOf","call","history","historyIndex","nameInput","focus","_this2","react_default","a","createElement","id","type","ref","onKeyUp","onKeyDown","className","placeholder","target","keyCode","length","commandInput","unshift","onCommandEntered","args","newIndex","preventDefault","React","Component","DisplayResultView","title","href","window","location","pathname","inputHash","children","Indicators","list","state","appState","env","localStorage","getItem","map","i","hash","encodeHash","encodeURIComponent","replace","decodeHash","hashValue","decodeURIComponent","getArgs","str","decodedHash","split","s","forEach","TopLinks","index_es","icon","faGithub","size","faTwitter","faEnvelope","AppRoot","refresh","onChange","setState","commandResults","r","DisplayResultView_DisplayResultView","view","toggleEmphasizeBytes","_this3","uiTheme","components_Indicators","components_TopLinks","InputBox_InputBox","execute","data-cmd","getIndicator","emphasizeBytes","onClick","getResultViews","ErrorResultView","errorMessage","formatter","formatString","num","kind","toString","getBase","padLeft","symbol","sb","prototype","slice","join","BinaryStringView","getChildren","index","allowFlipBits","onFlipBit","arr","binaryString","newBinaryString","$event","bits","createBits","splitIntoBytes","bitChars","css","c","onBitClick","bytes","splice","IpAddressView","_React$Component","apply","inherits","ipAddresses","renderSingleIp","renderMultipleIps","ip","bin","firstByte","secondByte","thirdByte","fourthByte","octetNumber","BinaryString_BinaryStringView","onFlippedBit","number","setOctet","parseInt","forceUpdate","ipAddressParser","parse","matches","getMaches","correctInputs","m","incorrectInputs","ParsingError","v","parsedObjects","parseSingle","parsingErrors","p","exec","invalid","n","first","second","third","fourth","ipAddress","IpAddress","maskPart","substr","maskBits","IpAddressWithSubnetMask","message","mask","octet","networkingAppModule","setup","command","result","addCommandResult","components_ErrorResultView","createSubnetMaskIp","networking_components_IpAddressView","ListOfNumbersExpression","expressionString","numbers","maxBitsLength","lengthInBits","reduce","BitwiseOperationExpression","expressions","expressionItems","ExpressionParser","factories","trimmed","canCreate","factory","l","create","NumericOperand","base","ListOfNumbersExpressionFactory","regex","test","BitwiseOperationExpressionFactory","fullRegex","lastIndex","normalizeString","operands","normalizedString","parseMatch","sign","parsed","indexOf","ExpressionOperand","substring","parser","addFactory","BitwiseExpressionViewModel","_ref","_ref$emphasizeBytes","_ref$allowFlipBits","items","maxNumberOfBits","operand","Math","max","getLengthInBits","expressionItem","label","expression","resultNumber","isNotExpression","evaluate","getUnderlyingOperand","getLabel","resultOperand","op","expr","config","model","addOperandRow","getNumberOfBits","ex","len","prev","eo","addExpressionOperandRow","notResult","addExpressionResultRow","isShiftExpression","addShiftExpressionResultRow","buildListOfNumbers","buildMultiple","BitwiseOperationExpressionView","rows","getRows","createModel","itm","BitwiseOperationExpressionView_ExpressionRow","onBitFlipped","ExpressionRow","_this4","_this$props","getBinaryString","flipBit","getOther","toBinaryString","isExpression","getLabelString","toOtherKindString","newValue","setValue","expressionAppModule","canParse","BitwiseOperationExpressionView_BitwiseOperationExpressionView","AboutResultView","data-result-type","CommandLink","text","HelpResultView","components_CommandLink","TextResultView","WhatsnewResultView","shellModule","components_HelpResultView","clearCommandResults","setUiTheme","components_AboutResultView","components_WhatsNewResultView","components_TextResultView","uuid","toggleDebugMode","onError","APP_VERSION","AppState","persistData","version","changeHandlers","persistedVersion","wasOldVersion","ceil","random","Date","now","triggerChanged","theme","appStateStore","getPersistedData","json","watch","setItem","getPersistData","UnknownInputResultView","appData","host","setLevel","setupLogger","stateData","createAppState","startupCommands","hashArgs","getStartupCommands","bootstrapAppData","components_UnknownInputResultView","root","AppRoot_AppRoot","ReactDOM","render","document","getElementById","bind","knownParsers","radix","prefix","numberParser","NumberParser","parsers","applyParser","match","globalId","getBitLength","floor","toBaseString","getOtherBase","hexVal","abs","hex","D_MyStuff_Pet_BitwiseCmd_node_modules_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_0__","evaluatedOperand","eval"],"mappings":"+PAAeA,EACE,SAASC,GAClB,MAAqB,iBAAPA,KAAqBA,aAAeC,QAAUD,aAAeE,QAFpEH,EAKA,SAASC,GAChB,MAAqB,mBAAPA,GANPD,EASH,SAASC,GACb,MAAqB,iBAAPA,mBCgGPG,EAAA,IA3Ff,WAII,SAAAC,IAAeF,OAAAG,EAAA,EAAAH,CAAAI,KAAAF,GAAAE,KAHfC,eAGc,EAAAD,KAFdE,cAEc,EAAAF,KADdG,kBACc,EACVH,KAAKE,SAAW,GAChBF,KAAKC,WAAY,EACjBD,KAAKG,aAAe,KAP5B,OAAAP,OAAAQ,EAAA,EAAAR,CAAAE,EAAA,EAAAO,IAAA,UAAAC,MAAA,SAUaC,GAELC,IAAIC,MAAJ,sBAAAC,OAAgCH,IAEhC,IAAII,EAAQJ,EAASK,OAAOC,cACxBC,EAAUd,KAAKe,YAAYJ,GAE/B,GAAc,MAAXG,EACC,GAAGd,KAAKC,UACJD,KAAKgB,cAAcL,EAAOG,QAE1B,IACId,KAAKgB,cAAcL,EAAOG,GAC5B,MAAOG,GACJjB,KAAKkB,YAAYP,EAAOM,QAKjCT,IAAIC,MAAJ,qCAAAC,OAA+CH,IAC/CP,KAAKkB,YAAYP,EAAO,IAAIQ,MAAM,2BAA6BR,EAAMC,WA9BjF,CAAAP,IAAA,UAAAC,MAAA,SAkCYc,GACJpB,KAAKG,aAAeiB,IAnC5B,CAAAf,IAAA,UAAAC,MAAA,SAsCae,EAAuBP,GAC5B,IAAIM,EAAIpB,KAAKsB,cAAcD,EAAKP,GACxB,MAALM,EAKC3B,EAAa2B,EAAEG,WAKf9B,EAAa2B,EAAEI,QAKnBxB,KAAKE,SAASuB,KAAKL,GAJfM,QAAQC,KAAK,8DALbD,QAAQC,KAAK,iEALbD,QAAQC,KAAK,gCAAiCC,KAAKC,UAAUC,cAzCzE,CAAAzB,IAAA,gBAAAC,MAAA,SA0DmBe,EAAuBP,GAClC,OAAGrB,EAAe4B,GACPA,EAGR5B,EAAU4B,GACF,CAAEE,UAAW,SAAUZ,GAAS,OAAOA,IAAUU,GAAQG,OAAQV,GAGrE,OAnEf,CAAAT,IAAA,cAAAC,MAAA,SAsEiBK,GACT,OAAOX,KAAKE,SAAS6B,OAAO,SAAAX,GAAC,OAAIA,EAAEG,UAAUZ,KAAQ,KAvE7D,CAAAN,IAAA,gBAAAC,MAAA,SA0EmBK,EAAgBG,GAE3B,IAAIkB,EAAYlB,EAAQU,OAAO,CAAEb,MAAOA,IACxB,MAAbqB,GACCxB,IAAIC,MAAMuB,KA9EtB,CAAA3B,IAAA,cAAAC,MAAA,SAkFiBK,EAAesB,GACrBjC,KAAKC,WACJyB,QAAQQ,MAAMvB,EAAOsB,GAED,MAArBjC,KAAKG,cACJH,KAAKG,aAAaQ,EAAOsB,OAvFrCnC,EAAA,yCCPqBqC,cAKjB,SAAAA,EAAYC,GAAuB,IAAAC,EAAA,OAAAzC,OAAAG,EAAA,EAAAH,CAAAI,KAAAmC,IAC/BE,EAAAzC,OAAA0C,EAAA,EAAA1C,CAAAI,KAAAJ,OAAA2C,EAAA,EAAA3C,CAAAuC,GAAAK,KAAAxC,KAAMoC,KALVK,aAImC,EAAAJ,EAHnCK,kBAGmC,EAAAL,EAFnCM,eAEmC,EAE/BN,EAAKM,UAAY,KACjBN,EAAKI,QAAU,GACfJ,EAAKK,cAAgB,EAJUL,mFAQV,MAAlBrC,KAAK2C,WACJ3C,KAAK2C,UAAUC,yCAGd,IAAAC,EAAA7C,KACL,OAAO8C,EAAAC,EAAAC,cAAA,SAAOC,GAAG,KAAKC,KAAK,OACbC,IAAK,SAACxC,GAAYkC,EAAKF,UAAYhC,GACnCyC,QAAS,SAAAnC,GAAC,OAAI4B,EAAKO,QAAQnC,IAC3BoC,UAAW,SAAApC,GAAC,OAAI4B,EAAKQ,UAAUpC,IAC/BqC,UAAU,uBACVC,YAAY,2EAGtBtC,GACJ,IAAIN,EAAQM,EAAEuC,OACd,GAAiB,IAAbvC,EAAEwC,SAA8C,GAA7B9C,EAAML,MAAMM,OAAO8C,OAA1C,CAIA,IAAIC,EAAehD,EAAML,MACzBN,KAAKyC,QAAQmB,QAAQD,GACrB3D,KAAK0C,cAAgB,EAErB/B,EAAML,MAAQ,GACdN,KAAKoC,MAAMyB,iBAAiBF,sCAGtBG,GAEN,GAAmB,IAAhBA,EAAKL,QAAe,CACnB,IAAIM,EAAW/D,KAAK0C,aAAa,EAQjC,OANI1C,KAAKyC,QAAQiB,OAASK,IACtBD,EAAKN,OAAOlD,MAAQN,KAAKyC,QAAQsB,GACjC/D,KAAK0C,aAAeqB,QAGxBD,EAAKE,iBAIU,IAAhBF,EAAKL,UACDzD,KAAK0C,aAAe,IACnBoB,EAAKN,OAAOlD,MAAQN,KAAKyC,UAAUzC,KAAK0C,eAG5CoB,EAAKE,yBA3DqBC,IAAMC,WCGvBC,mLAGb,OAAOrB,EAAAC,EAAAC,cAAA,OAAKM,UAAU,UACNR,EAAAC,EAAAC,cAAA,OAAKM,UAAU,cAAaR,EAAAC,EAAAC,cAAA,QAAMM,UAAU,OAAhB,KAAkCtD,KAAKoC,MAAMzB,MAAMmC,EAAAC,EAAAC,cAAA,KAAGM,UAAU,WAAWc,MAAM,2BAA2BC,KAAMC,OAAOC,SAASC,SAAW,IAAMxE,KAAKoC,MAAMqC,WAA3G,MAC/E3B,EAAAC,EAAAC,cAAA,OAAKM,UAAU,WACVtD,KAAKoC,MAAMsC,kBANOT,IAAMC,WCqBtCS,MAzBf,SAAoBvC,GAEhB,IAAMwC,EAAO,GACPC,EAAQzC,EAAM0C,SAcpB,MAZyB,QAAtB1C,EAAM0C,SAASC,KACdH,EAAKnD,KAAKoD,EAAME,KAGjB3C,EAAM0C,SAAS7E,WACd2E,EAAKnD,KAAK,SAGgC,UAA3CuD,aAAaC,QAAQ,mBACpBL,EAAKnD,KAAK,WAGI,GAAfmD,EAAKlB,OACG,KAEJZ,EAAAC,EAAAC,cAAA,WACE4B,EAAKM,IAAI,SAAAC,GAAC,OAAIrC,EAAAC,EAAAC,cAAA,YAAOmC,EAAP,YC5BZC,EAAA,CACXC,WAAY,SAAS1E,GACjB,OAAO2E,mBAAmB3E,EAAMC,OAAO2E,QAAQ,MAAM,OAEzDC,WAAY,SAASC,GACjB,OAAOC,mBAAmBD,EAAUF,QAAQ,MAAO,KAAKA,QAAQ,KAAK,MAEzEI,QAAS,SAAUF,GAEf,IAWeG,EAXXC,EAAc7F,KAAKwF,WAAWC,GAC9B3B,EAAkB,GAMtB,OAIe8B,EARDC,EAUXD,EAAIE,MAAM,MAAM/D,OAAO,SAAAgE,GAAC,OAAIA,EAAErC,OAAS,KAVfsC,QAAQ,SAAS1F,GACxCwD,EAAKrC,KAAKnB,KAGPwD,sCCIAmC,MAdf,WACI,OAAOnD,EAAAC,EAAAC,cAAA,MAAIM,UAAU,aACTR,EAAAC,EAAAC,cAAA,UACIF,EAAAC,EAAAC,cAAA,KAAGqB,KAAK,gDAA+CvB,EAAAC,EAAAC,cAACkD,EAAA,EAAD,CAAiB5C,UAAU,OAAO6C,KAAMC,IAAUC,KAAK,OAA9G,sBAEJvD,EAAAC,EAAAC,cAAA,UACIF,EAAAC,EAAAC,cAAA,KAAGqB,KAAK,kCAAiCvB,EAAAC,EAAAC,cAACkD,EAAA,EAAD,CAAiB5C,UAAU,OAAO6C,KAAMG,IAAWD,KAAK,OAAOvD,EAAAC,EAAAC,cAAA,QAAMM,UAAU,aAAhB,aAE5GR,EAAAC,EAAAC,cAAA,UACIF,EAAAC,EAAAC,cAAA,KAAGqB,KAAK,gDAAmJvB,EAAAC,EAAAC,cAACkD,EAAA,EAAD,CAAiB5C,UAAU,OAAO6C,KAAMI,IAAYF,KAAK,OAAOvD,EAAAC,EAAAC,cAAA,QAAMM,UAAU,aAAhB,qBCM1NkD,+LAEI,IAAAnE,EAAArC,KACjBA,KAAKyG,UACLzG,KAAKoC,MAAM0C,SAAS4B,SAAS,kBAAMrE,EAAKoE,8CAIxCzG,KAAK2G,SAAS3G,KAAKoC,MAAM0C,+CAGhBxE,GACT,OAAOA,EAAQ,KAAO,+CAGO,IAAAuC,EAAA7C,KAM7B,OAJcA,KAAK6E,MAAM+B,eAAe1B,IAAI,SAAC2B,EAAG1B,GAAJ,OACxCrC,EAAAC,EAAAC,cAAC8D,EAAD,CAAmBzG,IAAKwG,EAAExG,IAAMM,MAAOkG,EAAElG,MAAO8D,UAAWW,EAAKC,WAAWwB,EAAElG,OAAQmE,SAAUjC,EAAKT,MAAM0C,UACrG+B,EAAEE,uDAMX/G,KAAKoC,MAAM0C,SAASkC,wDAGf,IAAAC,EAAAjH,KACL,OAAO8C,EAAAC,EAAAC,cAAA,OAAKM,UAAS,YAAA5C,OAAcV,KAAK6E,MAAMqC,UAClCpE,EAAAC,EAAAC,cAACmE,EAAD,CAAYrC,SAAU9E,KAAKoC,MAAM0C,WACjChC,EAAAC,EAAAC,cAAA,OAAKM,UAAU,UACXR,EAAAC,EAAAC,cAAA,oBAAWF,EAAAC,EAAAC,cAAA,QAAMM,UAAU,cAAhB,QAEZR,EAAAC,EAAAC,cAACoE,EAAD,OAGHtE,EAAAC,EAAAC,cAAA,OAAKM,UAAU,6BACXR,EAAAC,EAAAC,cAACqE,EAAD,CAAUxD,iBAAkB,SAAClD,GAAD,OAAWU,EAAIiG,QAAQ3G,MAEnDmC,EAAAC,EAAAC,cAAA,QAAMM,UAAU,aACZR,EAAAC,EAAAC,cAAA,QAAMC,GAAG,iBAAiBsE,WAAS,KAAKjE,UAAW,aAAetD,KAAKwH,aAAaxH,KAAK6E,MAAM4C,gBAAiBrD,MAAM,yBAAyBsD,QAAS,kBAAMT,EAAKD,yBAAnK,UAIRlE,EAAAC,EAAAC,cAAA,OAAKC,GAAG,UACPjD,KAAK2H,0BA9CW1D,IAAMC,kCCZ5B0D,MAPf,SAAyBxF,GAErB,OAAOU,EAAAC,EAAAC,cAAA,OAAKM,UAAU,UACVR,EAAAC,EAAAC,cAAA,OAAKM,UAAU,SAASlB,EAAMyF,gBCL/BC,EAAA,CACXC,aAAc,SAASC,EAAaC,GAChC,OAAOD,EAAIE,SAiBnB,SAAiBD,GACb,OAAQA,GACJ,IAAK,MAAO,OAAO,EACnB,IAAK,MAAO,OAAO,GACnB,IAAK,MAAO,OAAO,GAGvB,MAAM,IAAI9G,MAAM,qBAAuB8G,GAxBfE,CAAQF,GAAQ,SAExCG,QAAS,SAAUxC,EAAalC,EAAgB2E,GAC5C,IAAIC,EAAK3I,MAAM4I,UAAUC,MAAMhG,KAAKoD,GAAMyC,EAASA,GAAU,IAE7D,GAAa,MAAV3E,EACC,OAAOkC,EAGX,KAAMlC,EAAS4E,EAAG5E,QACd4E,EAAG1E,QAAQyE,GAGf,OAAOC,EAAGG,KAAK,UCEFC,mLAEb,OAAO5F,EAAAC,EAAAC,cAAA,QAAMM,UAAWtD,KAAKoC,MAAMkB,WAAYtD,KAAK2I,kDAG7CC,EAAe3H,GACtB,GAAIjB,KAAKoC,MAAMyG,eAAkB7I,KAAKoC,MAAM0G,UAA5C,CAII9I,KAAKoC,MAAM0G,UAIf,IAAMC,EAAM/I,KAAKoC,MAAM4G,aAAalD,MAAM,IAC1CiD,EAAIH,GAAuB,KAAdG,EAAIH,GAAgB,IAAM,IACvC,IAAMK,EAAkBF,EAAIN,KAAK,IAEjCzI,KAAKoC,MAAM0G,UAAU,CAAEF,MAAOA,EAAOI,aAAchJ,KAAKoC,MAAM4G,aAAcE,OAAQjI,EAAGgI,2DAIvF,IAAIE,EAAOnJ,KAAKoJ,WAAWpJ,KAAKoC,MAAM4G,aAAalD,MAAM,KAEzD,OAAG9F,KAAKoC,MAAMqF,eACHzH,KAAKqJ,eAAeF,GAGxBA,qCAGAG,GAAmC,IAAAjH,EAAArC,KAEpCuJ,EADgBvJ,KAAKoC,MAAMyG,gBAAiB,EACtB,YAAc,GAE1C,OAAOS,EAASpE,IAAI,SAACsE,EAAGrE,GACpB,IAAI7B,EAAiB,KAALkG,EAAA,OAAA9I,OAAkB6I,GAAlB,MAAA7I,OAAgC6I,GAChD,OAAOzG,EAAAC,EAAAC,cAAA,QAAMM,UAAWA,EAAWjD,IAAK8E,EAAGuC,QAAS,SAAAzG,GAAC,OAAIoB,EAAKoH,WAAWtE,EAAGlE,KAAKuI,4CAI1EL,GAIX,IAHA,IAAMO,EAAQ,GAEVrJ,EAAM,EACJ8I,EAAKzF,OAAS,GAChBgG,EAAMjI,KAAKqB,EAAAC,EAAAC,cAAA,QAAM3C,IAAKA,IAAOiD,UAAU,QAAQ6F,EAAKQ,OAAO,EAAG,KAGlE,OAAOD,SAjD+BzF,IAAMC,iBCgErC0F,MAxEf,SAAAC,GAAA,SAAAD,IAAA,OAAAhK,OAAAG,EAAA,EAAAH,CAAAI,KAAA4J,GAAAhK,OAAA0C,EAAA,EAAA1C,CAAAI,KAAAJ,OAAA2C,EAAA,EAAA3C,CAAAgK,GAAAE,MAAA9J,KAAA8B,YAAA,OAAAlC,OAAAmK,EAAA,EAAAnK,CAAAgK,EAAAC,GAAAjK,OAAAQ,EAAA,EAAAR,CAAAgK,EAAA,EAAAvJ,IAAA,SAAAC,MAAA,WAIQ,OAAqC,IAAlCN,KAAKoC,MAAM4H,YAAYtG,OACf1D,KAAKiK,eAAejK,KAAKoC,MAAM4H,YAAY,IAE/ChK,KAAKkK,sBAPpB,CAAA7J,IAAA,oBAAAC,MAAA,WAUwB,IAAA+B,EAAArC,KAChB,OAAO8C,EAAAC,EAAAC,cAAA,SAAOM,UAAU,cACpBR,EAAAC,EAAAC,cAAA,aACKhD,KAAKoC,MAAM4H,YAAY9E,IAAI,SAACiF,EAAIhF,GAAL,OAAWrC,EAAAC,EAAAC,cAAA,MAAI3C,IAAK8E,GACxCrC,EAAAC,EAAAC,cAAA,MAAIM,UAAU,SAAQR,EAAAC,EAAAC,cAAA,cAASmH,EAAGjC,aAClCpF,EAAAC,EAAAC,cAAA,MAAIM,UAAU,OACTjB,EAAK+H,IAAID,EAAGE,UAAW,EAAGF,GAAIrH,EAAAC,EAAAC,cAAA,QAAMM,UAAU,QAAhB,KAC9BjB,EAAK+H,IAAID,EAAGG,WAAY,EAAGH,GAAIrH,EAAAC,EAAAC,cAAA,QAAMM,UAAU,QAAhB,KAC/BjB,EAAK+H,IAAID,EAAGI,UAAW,EAAGJ,GAAIrH,EAAAC,EAAAC,cAAA,QAAMM,UAAU,QAAhB,KAC9BjB,EAAK+H,IAAID,EAAGK,WAAY,EAAGL,WAnBxD,CAAA9J,IAAA,iBAAAC,MAAA,SA0BmB6J,GACX,OAAOrH,EAAAC,EAAAC,cAAA,SAAOM,UAAU,cAChBR,EAAAC,EAAAC,cAAA,aACIF,EAAAC,EAAAC,cAAA,UACIF,EAAAC,EAAAC,cAAA,MAAIM,UAAU,iBAAiB6G,EAAGE,WAClCvH,EAAAC,EAAAC,cAAA,MAAIM,UAAU,kBAAkB6G,EAAGG,YACnCxH,EAAAC,EAAAC,cAAA,MAAIM,UAAU,iBAAiB6G,EAAGI,WAClCzH,EAAAC,EAAAC,cAAA,MAAIM,UAAU,kBAAkB6G,EAAGK,cAG3C1H,EAAAC,EAAAC,cAAA,aACIF,EAAAC,EAAAC,cAAA,UACIF,EAAAC,EAAAC,cAAA,MAAIM,UAAU,aAAatD,KAAKoK,IAAID,EAAGE,UAAW,EAAGF,IACrDrH,EAAAC,EAAAC,cAAA,MAAIM,UAAU,cAActD,KAAKoK,IAAID,EAAGG,WAAY,EAAGH,IACvDrH,EAAAC,EAAAC,cAAA,MAAIM,UAAU,aAAatD,KAAKoK,IAAID,EAAGI,UAAW,EAAGJ,IACrDrH,EAAAC,EAAAC,cAAA,MAAIM,UAAU,cAActD,KAAKoK,IAAID,EAAGK,WAAY,EAAGL,SAzC/E,CAAA9J,IAAA,MAAAC,MAAA,SAoDQA,EAAemK,EAA0BN,GAAe,IAgBnDnC,EAhBmDnF,EAAA7C,KACxD,OAAO8C,EAAAC,EAAAC,cAAC0H,EAAD,CACH1B,cAcChB,EAdiB1H,EAenBwH,EAAUM,QAAQN,EAAUC,aAAaC,EAAK,OAAQ,EAAG,MAdxD3H,IAAKoK,EACLhD,gBAAgB,EAChBoB,eAAe,EACfvF,UAAS,SAAA5C,OAAW+J,GACpB3B,UAAW,SAAA7H,GAAC,OAAI4B,EAAK8H,aAAa1J,EAAEgI,gBAAiBwB,EAAaN,QA3D9E,CAAA9J,IAAA,eAAAC,MAAA,SA8DiB0I,EAAsB4B,EAAqBT,GACpDA,EAAGU,SAASD,EAAQE,SAAS9B,EAAc,IAC3ChJ,KAAK+K,kBAhEbnB,EAAA,CAAmC3F,IAAMC,WCFnC8G,EAAkB,CACpBC,MAAO,SAAStK,GAAwD,IAAA0B,EAAArC,KAE9DkL,EAAUlL,KAAKmL,UAAUxK,GACzByK,EAAgBF,EAAQnJ,OAAO,SAAAsJ,GAAC,OAAiB,MAAbA,EAAEH,UACtCI,EAAkBJ,EAAQnJ,OAAO,SAAAsJ,GAAC,OAAiB,MAAbA,EAAEH,UAE9C,GAA2B,GAAxBE,EAAc1H,OACb,OAAO,KAEX,GAAG4H,EAAgB5H,OAAS,EACpB,OAAO,IAAI6H,EAAJ,YAAA7K,OAA6B4K,EAAgBpG,IAAI,SAAAsG,GAAC,OAAIA,EAAE7K,QAAO8H,KAAK,KAApE,6EAGf,IAAMgD,EAAgBP,EAAQhG,IAAI,SAAAmG,GAAC,OAAIhJ,EAAKqJ,YAAYL,EAAEH,QAAUG,EAAE1K,SAChEgL,EAAgBF,EAAc1J,OAAO,SAAA6J,GAAC,OAAIA,aAAaL,IAE7D,OAAGI,EAAcjI,OAAS,EACfiI,EAAc,GAGlBF,GAIXN,UAzBoB,SAyBVxK,GAEN,OAAOA,EACH4E,QAAQ,WAAY,KACfO,MAAM,KACN/D,OAAO,SAAAgE,GAAC,OAAIA,EAAErC,OAAO,IACrBwB,IAAI,SAAAa,GACD,IACMmF,EADY,mEACQW,KAAK9F,GAE/B,OAAc,MAAXmF,GAAsC,IAAnBA,EAAQxH,OACnB,CAACwH,QAAS,KAAMvK,MAAOoF,GAE3B,CAACmF,UAASvK,MAAOoF,MAIxC2F,YA1CoB,SA0CRR,EAA2BvK,GACnC,IAAMmL,EAAU,SAACC,GAAD,OAAeA,EAAI,GAAKA,EAAI,KAEtCC,EAAQlB,SAASI,EAAQ,IACzBe,EAASnB,SAASI,EAAQ,IAC1BgB,EAAQpB,SAASI,EAAQ,IACzBiB,EAASrB,SAASI,EAAQ,IAEhC,GAAGY,EAAQE,IAAUF,EAAQG,IAAWH,EAAQI,IAAUJ,EAAQK,GAC9D,OAAO,IAAIZ,EAAJ,GAAA7K,OAAoBC,EAApB,uEAEX,IAAMyL,EAAY,IAAIC,EAAUL,EAAOC,EAAQC,EAAOC,GAEtD,GAAGjB,EAAQ,GAAI,CACX,IAAMoB,EAAWpB,EAAQ,GAAGqB,OAAO,GAC7BC,EAAW1B,SAASwB,GAE1B,OAAGE,EAAW,GACH,IAAIjB,EAAJ,wBAAA7K,OAAyCC,EAAzC,qBAGJ,IAAI8L,EAAwBL,EAAWI,GAGlD,OAAOJ,IAIFb,EAET,SAAAA,EAAYmB,GAAkB9M,OAAAG,EAAA,EAAAH,CAAAI,KAAAuL,GAAAvL,KAD9B6H,kBAC6B,EACzB7H,KAAK6H,aAAe6E,GAIfD,EAAb,WAII,SAAAA,EAAYL,EAAuBI,GAAoB5M,OAAAG,EAAA,EAAAH,CAAAI,KAAAyM,GAAAzM,KAHvDwM,cAGsD,EAAAxM,KAFtDoM,eAEsD,EAClDpM,KAAKoM,UAAYA,EACjBpM,KAAKwM,SAAWA,EANxB,OAAA5M,OAAAQ,EAAA,EAAAR,CAAA6M,EAAA,EAAApM,IAAA,WAAAC,MAAA,WAUQ,SAAAI,OAAUV,KAAKoM,UAAUlE,WAAzB,KAAAxH,OAAuCV,KAAKwM,YAVpD,CAAAnM,IAAA,qBAAAC,MAAA,WAeQ,IAAMqM,EAAO,SAACxD,GAAD,OAAkB,KAAM,EAAEA,EAAM,KAE7C,OAAGnJ,KAAKwM,UAAY,EACT,IAAIH,EAAUM,EAAK3M,KAAKwM,UAAW,EAAG,EAAG,GAE5CxM,KAAKwM,UAAY,GACd,IAAIH,EAAU,IAAKM,EAAK3M,KAAKwM,SAAS,GAAI,EAAG,GAEhDxM,KAAKwM,UAAY,GACd,IAAIH,EAAU,IAAK,IAAKM,EAAK3M,KAAKwM,SAAS,IAAK,GAGhD,IAAIH,EAAU,IAAK,IAAK,IAAKM,EAAK3M,KAAKwM,SAAS,SA3BnEC,EAAA,GAgCaJ,EAAb,WAOI,SAAAA,EAAYhC,EAAoBC,EAAoBC,EAAoBC,GAAqB5K,OAAAG,EAAA,EAAAH,CAAAI,KAAAqM,GAAArM,KAL7FqK,eAK4F,EAAArK,KAJ5FsK,gBAI4F,EAAAtK,KAH5FuK,eAG4F,EAAAvK,KAF5FwK,gBAE4F,EACxFxK,KAAKqK,UAAYA,EACjBrK,KAAKsK,WAAaA,EAClBtK,KAAKuK,UAAYA,EACjBvK,KAAKwK,WAAaA,EAX1B,OAAA5K,OAAAQ,EAAA,EAAAR,CAAAyM,EAAA,EAAAhM,IAAA,WAAAC,MAAA,WAeQ,SAAAI,OAAUV,KAAKqK,UAAf,KAAA3J,OAA4BV,KAAKsK,WAAjC,KAAA5J,OAA+CV,KAAKuK,UAApD,KAAA7J,OAAiEV,KAAKwK,cAf9E,CAAAnK,IAAA,WAAAC,MAAA,SAkBasM,EAAoBtM,GACzB,OAAOsM,GACH,KAAK,EACD5M,KAAKqK,UAAY/J,EACjB,MACJ,KAAK,EACDN,KAAKsK,WAAahK,EAClB,MACJ,KAAK,EACDN,KAAKuK,UAAYjK,EACjB,MACJ,KAAK,EACDN,KAAKwK,WAAalK,OA9BlC+L,EAAA,GCtEeQ,EAtCa,CACxBC,MAAO,SAAShI,EAAoBzD,GAGhCA,EAAI0L,QAAQ,CACRxL,UAAW,SAACZ,GAAD,OAAkD,MAAhCqK,EAAgBC,MAAMtK,IACnDa,OAAQ,SAASgI,GACb,IAAIwD,EAAShC,EAAgBC,MAAMzB,EAAE7I,OAErC,GAAa,MAAVqM,EAGH,GAAGA,aAAkBzB,EACjBzG,EAASmI,iBAAiBzD,EAAE7I,MAAOmC,EAAAC,EAAAC,cAACkK,EAAD,CAAiBrF,aAAcmF,EAAOnF,oBAD7E,CAKA,IAAMmC,EAA4B,GAEjCgD,EAA4BhH,QAAQ,SAAAa,GAC9BA,aAAa4F,GAEZzC,EAAYvI,KAAKoF,EAAEuF,WACnBpC,EAAYvI,KAAKoF,EAAEsG,uBAEftG,aAAawF,GACjBrC,EAAYvI,KAAKoF,KAIzB/B,EAASmI,iBAAiBzD,EAAE7I,MAAOmC,EAAAC,EAAAC,cAACoK,EAAD,CAAepD,YAAaA,SAIvExJ,IAAIC,wBCvCS4M,aAKjB,SAAAA,EAAYC,EAA0BC,GAA4B3N,OAAAG,EAAA,EAAAH,CAAAI,KAAAqN,GAAArN,KAJlEuN,aAIiE,EAAAvN,KAHjEsN,sBAGiE,EAAAtN,KAFjEwN,mBAEiE,EAC7DxN,KAAKsN,iBAAmBA,EACxBtN,KAAKuN,QAAUA,EACfvN,KAAKwN,cAAgBD,EAAQrI,IAAI,SAAA6G,GAAC,OAAIA,EAAE0B,eAAcC,OAAO,SAAC3B,EAAIvC,GAAL,OAAWuC,GAAKvC,EAAIuC,EAAIvC,GAAG,0DAIxF,OAAOxJ,KAAKuN,QAAQrI,IAAI,SAAA6G,GAAC,OAAIA,EAAEzL,MAAM4H,aAAYO,KAAK,cCbzCkF,EAKjB,SAAAA,EAAYL,EAA0BM,GAAqChO,OAAAG,EAAA,EAAAH,CAAAI,KAAA2N,GAAA3N,KAH3EsN,sBAG0E,EAAAtN,KAF1E6N,qBAE0E,EACtE7N,KAAKsN,iBAAmBA,EACxBtN,KAAK6N,gBAAkBD,GCOzBE,aAEF,SAAAA,IAAelO,OAAAG,EAAA,EAAAH,CAAAI,KAAA8N,GAAA9N,KADf+N,eACc,EACV/N,KAAK+N,UAAY,wDAGXpN,GAGN,IAFA,IAAIqN,EAAUrN,EAAM4E,QAAQ,YAAa,IACrCJ,EAAInF,KAAK+N,UAAUrK,OAAO,EACzByB,GAAG,EAAEA,IACN,IAA4C,IAAzCnF,KAAK+N,UAAU5I,GAAG8I,UAAUD,GAC3B,OAAO,EAGf,OAAO,gCAGJrN,GAIH,IAHA,IACsCuN,EADlCF,EAAUrN,EAAM4E,QAAQ,YAAa,IACrCJ,EAAI,EAAGgJ,EAAInO,KAAK+N,UAAUrK,OAEzByB,EAAEgJ,EAAEhJ,IAGL,GAAiC,IAFjC+I,EAAUlO,KAAK+N,UAAU5I,IAEd8I,UAAUD,GACjB,OAAOE,EAAQE,OAAOJ,GAI9B,OAAO,0CAGGrN,GACV,OAAO0N,IAAepD,MAAMtK,yCAGjBiK,EAAiB0D,GAC5B,OAAOD,IAAeD,OAAOxD,EAAQ0D,sCAG7BJ,GACVlO,KAAK+N,UAAUtM,KAAKyM,YAIpBK,aAIF,SAAAA,IAAe3O,OAAAG,EAAA,EAAAH,CAAAI,KAAAuO,GAAAvO,KAFfwO,WAEc,EACVxO,KAAKwO,MAAQ,8FAGN7N,GACP,OAAOX,KAAKwO,MAAMC,KAAK9N,kCAGnBA,GACJ,IAAIuK,EAAUlL,KAAKwO,MAAM3C,KAAKlL,GAC1B4M,EAAU,GASd,OARI5M,EAAQuK,EAAQvK,OAEdmF,MAAM,KAAKE,QAAQ,SAAC+F,GACnBA,EAAEnL,OAAO8C,OAAS,GACjB6J,EAAQ9L,KAAK4M,IAAepD,MAAMc,EAAEnL,WAIrC,IAAIyM,EAAwB1M,EAAO4M,YAI5CmB,aAIF,SAAAA,IAAe9O,OAAAG,EAAA,EAAAH,CAAAI,KAAA0O,GAAA1O,KAHf2O,eAGc,EAAA3O,KAFdwO,WAEc,EACVxO,KAAK2O,UAAY,mDACjB3O,KAAKwO,MAAQ,uGAGN7N,GAEP,OADAX,KAAK2O,UAAUC,UAAY,EACpB5O,KAAK2O,UAAUF,KAAKzO,KAAK6O,gBAAgBlO,mCAG5CA,GAIJ,IAHA,IAAI0K,EAAGyD,EAAmC,GACtCC,EAAmB/O,KAAK6O,gBAAgBlO,GAEM,OAA1C0K,EAAIrL,KAAKwO,MAAM3C,KAAKkD,KACxBD,EAASrN,KAAKzB,KAAKgP,WAAW3D,IAGlC,OAAO,IAAIsC,EAA2BoB,EAAkBD,sCAGhDzD,GACR,IAAI1K,EAAQ0K,EAAE,GACV4D,EAAO5D,EAAE,GACTrD,EAAMqD,EAAE,GAER6D,EAAS,KAQb,OANIA,EADmB,GAApBlH,EAAImH,QAAQ,KACF,IAAIC,IAAkBpH,EAAKqG,IAAepD,MAAMjD,EAAIqH,UAAU,IAAK,KAGnEhB,IAAepD,MAAMjD,GAGvB,MAARiH,EACQC,EAEA,IAAIE,IAAkBzO,EAAOuO,EAA0BD,2CAIrDtO,GACb,OAAOA,EAAM4E,QAAQ,OAAO,aAIhC+J,EAAS,IAAIxB,EACjBwB,EAAOC,WAAW,IAAIhB,GACtBe,EAAOC,WAAW,IAAIb,OC5HDc,aAOjB,SAAAA,EAAAC,GAAuE,IAAAC,EAAAD,EAAzDhI,sBAAyD,IAAAiI,KAAAC,EAAAF,EAAjC5G,qBAAiC,IAAA8G,KAAA/P,OAAAG,EAAA,EAAAH,CAAAI,KAAAwP,GAAAxP,KALvEyH,oBAKuE,EAAAzH,KAJvE4P,WAIuE,EAAA5P,KAHvE6P,qBAGuE,EAAA7P,KAFvE6I,mBAEuE,EACnE7I,KAAKyH,eAAiBA,EACtBzH,KAAK4P,MAAQ,GACb5P,KAAK6P,gBAAkB,EACvB7P,KAAK6I,eAAkC,IAAlBA,4DA2DXiH,GACV9P,KAAK6P,gBAAkBE,KAAKC,IAAIF,EAAQG,kBAAmBjQ,KAAK6P,iBAChE7P,KAAK4P,MAAMnO,KAAK,CACZwN,KAAK,GACL1F,IAAK,GACL2G,eAAgBJ,EAChBjH,cAAe7I,KAAK6I,cACpBsH,MAAO,qDAISC,GACpB,IAAMC,EAAeD,EAAWE,gBAAkBF,EAAWG,WAAaH,EAAWI,uBACrFxQ,KAAK6P,gBAAkBE,KAAKC,IAAIK,EAAaJ,kBAAmBjQ,KAAK6P,iBAErE7P,KAAK4P,MAAMnO,KAAK,CACZwN,KAAMmB,EAAWnB,KACjB1F,IAAK,GACL4G,MAAOnQ,KAAKyQ,SAASJ,GACrBH,eAAgBE,EAAWN,QAC3BjH,cAAe7I,KAAK6I,oEAIAuH,EAAgCM,GACxD1Q,KAAK6P,gBAAkBE,KAAKC,IAAIU,EAAcT,kBAAmBjQ,KAAK6P,iBACtE7P,KAAK4P,MAAMnO,KAAK,CACZwN,KAAMmB,EAAWnB,KAAOmB,EAAWN,QAAQ5H,WAC3CqB,IAAK,oBACL2G,eAAgBQ,EAChB7H,eAAe,EACfsH,MAAO,oDAIQL,GACnB9P,KAAK6P,gBAAkBE,KAAKC,IAAIF,EAAQG,kBAAmBjQ,KAAK6P,iBAChE7P,KAAK4P,MAAMnO,KAAK,CACZwN,KAAK,IACL1F,IAAK,oBACL2G,eAAgBJ,EAChBjH,eAAe,EACfsH,MAAO,sCAILQ,GAEN,MAAc,OAAXA,EAAGrC,KACKqC,EAAGzI,SAAS,OAGhByI,EAAGzI,wDA5GY0I,EAAgCC,GACtD,IAAIC,EAAQ,IAAItB,EAA2BqB,GAG3C,OAFAD,EAAKrD,QAAQvH,QAAQ,SAAA2K,GAAE,OAAIG,EAAMC,cAAcJ,KAC/CG,EAAMjB,gBAAkBL,EAA2BwB,gBAAgBF,EAAMjB,gBAAiBiB,EAAMrJ,gBACzFqJ,wCAGWF,EAAmCC,GAE5CD,EAAK/C,gBAAgB,GAM9B,IANA,IAEIoD,EADA9L,EAAI,EAAG+L,EAAMN,EAAK/C,gBAAgBnK,OAC9B2H,EAAI,IAAImE,EAA2BqB,GAEvCM,EAA+B,KAE7BhM,EAAE+L,EAAI/L,IAER,IADA8L,EAAKL,EAAK/C,gBAAgB1I,cACTkJ,IACbhD,EAAE0F,cAAcE,GAChBE,EAAOF,MAFX,CAMA,IAAIG,EAAKH,EAGT,GAAGG,EAAGd,gBAAiB,CACnBjF,EAAEgG,wBAAwBD,GAC1B,IAAIE,EAAYF,EAAGb,WACnBlF,EAAEkG,uBAAuBD,GACzBH,EAAOG,OAEHF,EAAGI,mBACPL,EAAOC,EAAGb,SAASY,GACnB9F,EAAEoG,4BAA4BL,EAAID,KAGlCA,EAAOC,EAAGb,SAASY,GACnB9F,EAAEgG,wBAAwBD,GAC1B/F,EAAEkG,uBAAuBJ,IAKjC,OADA9F,EAAEwE,gBAAkBL,EAA2BwB,gBAAgB3F,EAAEwE,gBAAiBxE,EAAE5D,gBAC7E4D,mCAGM+E,EAA+BS,GAE5C,IAAIxF,EAAI,IAAImE,EAA2BqB,GAIvC,OAHAxF,EAAEgG,wBAAwBjB,GAC1B/E,EAAEkG,uBAAuBnB,EAAWG,YACpClF,EAAEwE,gBAAkBL,EAA2BwB,gBAAgB3F,EAAEwE,gBAAiBxE,EAAE5D,gBAC7E4D,sCAwEQuF,EAAwBnJ,GACvC,GAAGmJ,aAAgBvD,EACf,OAAOmC,EAA2BkC,mBAAmBd,EAAM,CACvDnJ,eAAgBA,EAChBoB,eAAe,IAIvB,GAAG+H,aAAgBjD,EACf,OAAO6B,EAA2BmC,cAAcf,EAAM,CAClDnJ,eAAgBA,EAChBoB,eAAe,IAIvB,MAAM,IAAI1H,MAAM,6DAA+DyP,YA1JlEpB,EA8HVwB,gBAAkB,SAAU7H,EAAe1B,GAC9C,OAAGA,GAAkB0B,EAAO,GAAK,EACzBA,EAAO,EACC,EAGHA,EAAQA,EAAO,EACZ,EAGTA,OCxIMyI,cACjB,SAAAA,EAAYxP,GAA4C,IAAAC,EAAA,OAAAzC,OAAAG,EAAA,EAAAH,CAAAI,KAAA4R,IACpDvP,EAAAzC,OAAA0C,EAAA,EAAA1C,CAAAI,KAAAJ,OAAA2C,EAAA,EAAA3C,CAAAgS,GAAApP,KAAAxC,KAAMoC,KACDyC,MAAQ,GAFuCxC,wEAKpD,IAAIwP,EAAO7R,KAAK8R,UAChB,OAAID,EAIG/O,EAAAC,EAAAC,cAAA,SAAOM,UAAU,cACZR,EAAAC,EAAAC,cAAA,aACS6O,IALV,uCAUkB,IAAAhP,EAAA7C,KACzB8Q,EAAQtB,EAA2BuC,YAAY/R,KAAKoC,MAAMgO,WAAYpQ,KAAKoC,MAAMqF,gBAErF,OAAOqJ,EAAMlB,MAAM1K,IAAI,SAAC8M,EAAK7M,GAAN,OACnBrC,EAAAC,EAAAC,cAACiP,EAAD,CACI5R,IAAK8E,EACL8J,KAAM+C,EAAI/C,KACV1F,IAAKyI,EAAIzI,IACTV,cAAemJ,EAAInJ,cACnBqH,eAAgB8B,EAAI9B,eACpBzI,eAAgB5E,EAAKT,MAAMqF,eAC3BoI,gBAAiBiB,EAAMjB,gBACvBqC,aAAc,kBAAMrP,EAAKqP,2DAIjClS,KAAK+K,qBAlC+C9G,IAAMC,WAiD5DiO,cACF,SAAAA,EAAY/P,GAA2B,IAAA6E,EAAA,OAAArH,OAAAG,EAAA,EAAAH,CAAAI,KAAAmS,IACpClL,EAAArH,OAAA0C,EAAA,EAAA1C,CAAAI,KAAAJ,OAAA2C,EAAA,EAAA3C,CAAAuS,GAAA3P,KAAAxC,KAAMoC,KACDyC,MAAQ,CAAEiL,QAAS,MAFY7I,wEAI9B,IAAAmL,EAAApS,KAAAqS,EACiErS,KAAKoC,MAAnE6M,EADHoD,EACGpD,KAAM1F,EADT8I,EACS9I,IAAKsG,EADdwC,EACcxC,gBAAiBpI,EAD/B4K,EAC+B5K,eAAgBoB,EAD/CwJ,EAC+CxJ,cAEpD,OAAO/F,EAAAC,EAAAC,cAAA,MAAIM,UAAWiG,GACVzG,EAAAC,EAAAC,cAAA,MAAIM,UAAU,QAAQ2L,GACtBnM,EAAAC,EAAAC,cAAA,MAAIM,UAAU,SAAStD,KAAKyQ,YAC5B3N,EAAAC,EAAAC,cAAA,MAAIM,UAAU,OACVR,EAAAC,EAAAC,cAAC0H,EAAD,CACIjD,eAAgBA,EAChBuB,aAAclB,EAAUM,QAAQpI,KAAKsS,kBAAmBzC,EAAiB,KACzEhH,cAAeA,EACfC,UAAW,SAAAhF,GAAI,OAAIsO,EAAKG,QAAQzO,OAExChB,EAAAC,EAAAC,cAAA,MAAIM,UAAU,SAAStD,KAAKwS,uDAKxC,OAAOxS,KAAKoC,MAAM8N,eAAeK,WAAWkC,oDAO5C,GAAGzS,KAAKoC,MAAM8N,eAAewC,aAAc,CACvC,IAAMzB,EAAKjR,KAAKoC,MAAM8N,eACtB,OAAOe,EAAGhC,KAAOjP,KAAK2S,eAAe1B,EAAGT,wBAG5C,OAAOxQ,KAAK2S,eAAe3S,KAAKoC,MAAM8N,eAAeM,2DAKrD,OAAGxQ,KAAKoC,MAAM8N,eAAewC,aACd1S,KAAKoC,MAAM8N,eACRK,WAEJrI,WAGPlI,KAAKoC,MAAM8N,eAAeK,WAAWqC,2DAGhCjC,GACZ,OAAOA,EAAGzI,SAAoB,OAAXyI,EAAGrC,KAAgB,MAAQqC,EAAGrC,sCAG5CxK,GAEL,IAAM6M,EAAM3Q,KAAKoC,MAAM8N,eAAeM,uBAC9B5H,EAAwB9E,EAAxB8E,MAEJG,EAF4BjF,EAAjBkF,aAEQlD,MAAM,IAC7BiD,EAAIH,GAAuB,KAAdG,EAAIH,GAAgB,IAAM,IACvC,IAAIwB,EAAMrB,EAAIN,KAAK,IAEfoK,EAAW/H,SAASV,EAAK,GAC7BuG,EAAGmC,SAASD,GAEZ7S,KAAKoC,MAAM8P,sBAlESjO,IAAMC,WC7CnB6O,EAda,CACxBjG,MAAO,SAAShI,EAAoBzD,GAG9BA,EAAI0L,QAAQ,CACVxL,UAAW,SAACZ,GAAD,OAAkB2O,EAAO0D,SAASrS,IAC7Ca,OAAQ,SAASgI,GACb,IAAIoH,EAAOtB,EAAOrE,MAAMzB,EAAE7I,OAC1BmE,EAASmI,iBAAiBzD,EAAE7I,MAAOmC,EAAAC,EAAAC,cAACiQ,EAAD,CAAgC7C,WAAYQ,EAAOnJ,eAAgB3C,EAAS2C,wCCHhHyL,MATf,WAEQ,OAASpQ,EAAAC,EAAAC,cAAA,OAAKM,UAAU,WAAW6P,mBAAiB,QACpCrQ,EAAAC,EAAAC,cAAA,wBAAeF,EAAAC,EAAAC,cAAA,KAAGqB,KAAK,oCAAR,mBAAf,sEACAvB,EAAAC,EAAAC,cAAA,4FAAmFF,EAAAC,EAAAC,cAAA,KAAGqB,KAAK,gDAAR,wBAAnF,gBAAuXvB,EAAAC,EAAAC,cAAA,KAAGqB,KAAK,iCAAR,eAAvX,2CACAvB,EAAAC,EAAAC,cAAA,SAAGF,EAAAC,EAAAC,cAAA,KAAGqB,KAAK,gDAAR,cAAkEvB,EAAAC,EAAAC,cAAA,4BCK9EoQ,MAJf,SAAqBhR,GACjB,OAAOU,EAAAC,EAAAC,cAAA,KAAGqB,KAAK,qBAAqBqD,QAAS,SAAAzG,GAAC,OAAII,EAAIiG,QAAQlF,EAAM2K,SAAW3K,EAAMiR,QAAQjR,EAAMiR,aC+DxFC,MApEf,WAEQ,OAAOxQ,EAAAC,EAAAC,cAAA,OAAKM,UAAU,sBACNR,EAAAC,EAAAC,cAAA,OAAKM,UAAU,mBACXR,EAAAC,EAAAC,cAAA,OAAKM,UAAU,cACXR,EAAAC,EAAAC,cAAA,OAAKM,UAAU,WACXR,EAAAC,EAAAC,cAAA,UAAQM,UAAU,sBAAlB,gCACJR,EAAAC,EAAAC,cAAA,UACIF,EAAAC,EAAAC,cAAA,UAAIF,EAAAC,EAAAC,cAAA,YAAMF,EAAAC,EAAAC,cAACuQ,EAAD,CAAaF,KAAK,aAA5B,sGACAvQ,EAAAC,EAAAC,cAAA,UAAIF,EAAAC,EAAAC,cAAA,YAAMF,EAAAC,EAAAC,cAACuQ,EAAD,CAAaF,KAAK,WAA5B,0EAGJvQ,EAAAC,EAAAC,cAAA,OAAKM,UAAU,WACXR,EAAAC,EAAAC,cAAA,UAAQM,UAAU,uBAAlB,uBACJR,EAAAC,EAAAC,cAAA,UACIF,EAAAC,EAAAC,cAAA,UAAIF,EAAAC,EAAAC,cAAA,YAAMF,EAAAC,EAAAC,cAACuQ,EAAD,CAAaF,KAAK,eAA5B,wGACAvQ,EAAAC,EAAAC,cAAA,UAAIF,EAAAC,EAAAC,cAAA,YAAMF,EAAAC,EAAAC,cAACuQ,EAAD,CAAaF,KAAK,mBAA5B,wDAGJvQ,EAAAC,EAAAC,cAAA,OAAKM,UAAU,WACXR,EAAAC,EAAAC,cAAA,UAAQM,UAAU,uBAAlB,wBACJR,EAAAC,EAAAC,cAAA,UACIF,EAAAC,EAAAC,cAAA,UAAIF,EAAAC,EAAAC,cAAA,YAAMF,EAAAC,EAAAC,cAACuQ,EAAD,CAAaF,KAAK,WAA5B,2BACAvQ,EAAAC,EAAAC,cAAA,UAAIF,EAAAC,EAAAC,cAAA,YAAMF,EAAAC,EAAAC,cAACuQ,EAAD,CAAaF,KAAK,UAA5B,0BACAvQ,EAAAC,EAAAC,cAAA,UAAIF,EAAAC,EAAAC,cAAA,YAAMF,EAAAC,EAAAC,cAACuQ,EAAD,CAAaF,KAAK,cAA5B,gCAGJvQ,EAAAC,EAAAC,cAAA,OAAKM,UAAU,WACXR,EAAAC,EAAAC,cAAA,UAAQM,UAAU,uBAAlB,kBACJR,EAAAC,EAAAC,cAAA,UACIF,EAAAC,EAAAC,cAAA,UAAIF,EAAAC,EAAAC,cAAA,YAAMF,EAAAC,EAAAC,cAACuQ,EAAD,CAAaF,KAAK,WAA5B,6BACAvQ,EAAAC,EAAAC,cAAA,UAAIF,EAAAC,EAAAC,cAAA,YAAMF,EAAAC,EAAAC,cAACuQ,EAAD,CAAaF,KAAK,UAA5B,6BACAvQ,EAAAC,EAAAC,cAAA,UAAIF,EAAAC,EAAAC,cAAA,YAAMF,EAAAC,EAAAC,cAACuQ,EAAD,CAAaF,KAAK,cAA5B,6BACAvQ,EAAAC,EAAAC,cAAA,UAAIF,EAAAC,EAAAC,cAAA,YAAMF,EAAAC,EAAAC,cAACuQ,EAAD,CAAaF,KAAK,QAA5B,uCACAvQ,EAAAC,EAAAC,cAAA,UAAIF,EAAAC,EAAAC,cAAA,YAAMF,EAAAC,EAAAC,cAACuQ,EAAD,CAAaF,KAAK,WAA5B,yBACAvQ,EAAAC,EAAAC,cAAA,UAAIF,EAAAC,EAAAC,cAAA,YAAMF,EAAAC,EAAAC,cAACuQ,EAAD,CAAaF,KAAK,UAA5B,oBAAwDvQ,EAAAC,EAAAC,cAAA,KAAGqB,KAAK,sFAAR,MAAxD,YAIRvB,EAAAC,EAAAC,cAAA,OAAKM,UAAU,eACXR,EAAAC,EAAAC,cAAA,OAAKM,UAAU,WACXR,EAAAC,EAAAC,cAAA,UAAQM,UAAU,sBAAlB,gCAA4ER,EAAAC,EAAAC,cAAA,WAC5EF,EAAAC,EAAAC,cAAA,aACIF,EAAAC,EAAAC,cAAA,KAAGqB,KAAK,8FAAR,wDAIJvB,EAAAC,EAAAC,cAAA,UACIF,EAAAC,EAAAC,cAAA,UAAIF,EAAAC,EAAAC,cAAA,iBAAJ,uBACAF,EAAAC,EAAAC,cAAA,UAAIF,EAAAC,EAAAC,cAAA,iBAAJ,gCACAF,EAAAC,EAAAC,cAAA,UAAIF,EAAAC,EAAAC,cAAA,iBAAJ,iCACAF,EAAAC,EAAAC,cAAA,UAAIF,EAAAC,EAAAC,cAAA,iBAAJ,uBACAF,EAAAC,EAAAC,cAAA,UAAIF,EAAAC,EAAAC,cAAA,kBAAJ,sBACAF,EAAAC,EAAAC,cAAA,UAAIF,EAAAC,EAAAC,cAAA,kBAAJ,wCACAF,EAAAC,EAAAC,cAAA,UAAIF,EAAAC,EAAAC,cAAA,mBAAJ,mCAGRF,EAAAC,EAAAC,cAAA,OAAKM,UAAU,WACXR,EAAAC,EAAAC,cAAA,UAAQM,UAAU,uBAAlB,OACAR,EAAAC,EAAAC,cAAA,sEAC8DF,EAAAC,EAAAC,cAACuQ,EAAD,CAAaF,KAAK,QADhF,2BACgHvQ,EAAAC,EAAAC,cAACuQ,EAAD,CAAaF,KAAK,kBADlI,UCzDrBG,MAJf,SAAwBpR,GACpB,OAAOU,EAAAC,EAAAC,cAAA,SAAIZ,EAAMiR,aCkCNI,OAjCf,WAEQ,OAAO3Q,EAAAC,EAAAC,cAAA,OAAKM,UAAU,aACVR,EAAAC,EAAAC,cAAA,uBACAF,EAAAC,EAAAC,cAAA,OAAKM,UAAU,iBACXR,EAAAC,EAAAC,cAAA,SAAGF,EAAAC,EAAAC,cAAA,QAAMM,UAAU,aAAhB,kBAAH,IAAqDR,EAAAC,EAAAC,cAAA,WAArD,4EAGAF,EAAAC,EAAAC,cAAA,UACIF,EAAAC,EAAAC,cAAA,+BAAsBF,EAAAC,EAAAC,cAACuQ,EAAD,CAAaF,KAAK,eACxCvQ,EAAAC,EAAAC,cAAA,6DAAoDF,EAAAC,EAAAC,cAACuQ,EAAD,CAAaF,KAAK,gCAI9EvQ,EAAAC,EAAAC,cAAA,OAAKM,UAAU,QACXR,EAAAC,EAAAC,cAAA,SAAGF,EAAAC,EAAAC,cAAA,QAAMM,UAAU,aAAhB,iBAAH,IAAoDR,EAAAC,EAAAC,cAAA,WAApD,SACMF,EAAAC,EAAAC,cAAA,YAAMF,EAAAC,EAAAC,cAACuQ,EAAD,CAAaF,KAAK,UAD9B,8CAGJvQ,EAAAC,EAAAC,cAAA,OAAKM,UAAU,QACXR,EAAAC,EAAAC,cAAA,SAAGF,EAAAC,EAAAC,cAAA,QAAMM,UAAU,aAAhB,kBAAH,IAAqDR,EAAAC,EAAAC,cAAA,WAArD,iDAC8CF,EAAAC,EAAAC,cAAA,YAAMF,EAAAC,EAAAC,cAACuQ,EAAD,CAAaF,KAAK,aADtE,QAGJvQ,EAAAC,EAAAC,cAAA,OAAKM,UAAU,QACXR,EAAAC,EAAAC,cAAA,SAAGF,EAAAC,EAAAC,cAAA,QAAMM,UAAU,QAAhB,kBAAH,IAAgDR,EAAAC,EAAAC,cAAA,WAAhD,OACIF,EAAAC,EAAAC,cAACuQ,EAAD,CAAaF,KAAK,aADtB,mBAGJvQ,EAAAC,EAAAC,cAAA,OAAKM,UAAU,QACXR,EAAAC,EAAAC,cAAA,SAAGF,EAAAC,EAAAC,cAAA,QAAMM,UAAU,QAAhB,kBAAH,IAAgDR,EAAAC,EAAAC,cAAA,WAAhD,oEACiEF,EAAAC,EAAAC,cAAA,KAAGqB,KAAK,6BAAR,6BADjE,kEACiMvB,EAAAC,EAAAC,cAAA,KAAGqB,KAAK,uDAAR,kBADjM,uBCITqP,GAzBK,CAChB5G,MAAO,SAAShI,EAAoBzD,GAEhCA,EAAIpB,UAAY6E,EAAS7E,UACzB6E,EAAS4B,SAAS,kBAAMrF,EAAIpB,UAAY6E,EAAS7E,YAEjDoB,EAAI0L,QAAQ,OAAQ,SAACvD,GAAD,OAAqB1E,EAASmI,iBAAiBzD,EAAE7I,MAAOmC,EAAAC,EAAAC,cAAC2Q,EAAD,SAC5EtS,EAAI0L,QAAQ,QAAS,kBAAMjI,EAAS8O,wBACpCvS,EAAI0L,QAAQ,KAAM,kBAAMjI,EAASkC,yBACjC3F,EAAI0L,QAAQ,OAAQ,kBAAMjI,EAAS+O,WAAW,UAC9CxS,EAAI0L,QAAQ,QAAS,kBAAMjI,EAAS+O,WAAW,WAC/CxS,EAAI0L,QAAQ,WAAY,kBAAMjI,EAAS+O,WAAW,cAClDxS,EAAI0L,QAAQ,QAAS,SAACvD,GAAD,OAAqB1E,EAASmI,iBAAiBzD,EAAE7I,MAAOmC,EAAAC,EAAAC,cAAC8Q,EAAD,SAC7EzS,EAAI0L,QAAQ,WAAY,SAACvD,GAAD,OAAqB1E,EAASmI,iBAAiBzD,EAAE7I,MAAOmC,EAAAC,EAAAC,cAAC+Q,GAAD,SAChF1S,EAAI0L,QAAQ,OAAQ,SAACvD,GAAD,OAAqB1E,EAASmI,iBAAiBzD,EAAE7I,MAAOmC,EAAAC,EAAAC,cAACgR,EAAD,CAAgBX,KAAMY,WAClG5S,EAAI0L,QAAQ,WAAY,cACxB1L,EAAI0L,QAAQ,SAAU,SAACvD,GACnB1E,EAASoP,kBACTpP,EAASmI,iBAAiBzD,EAAE7I,MAAOmC,EAAAC,EAAAC,cAACgR,EAAD,CAAgBX,KAAI,eAAA3S,OAAiBoE,EAAS7E,gBAGrFoB,EAAI8S,QAAQ,SAACxT,EAAesB,GAAhB,OAA+B6C,EAASmI,iBAAiBtM,EAAOmC,EAAAC,EAAAC,cAACkK,EAAD,CAAiBrF,aAAc5F,EAAIiG,kBC7BjHkM,GAAc,EAiBCC,cAYjB,SAAAA,EAAYC,EAAgCvP,GAAcnF,OAAAG,EAAA,EAAAH,CAAAI,KAAAqU,GAAArU,KAV1DuU,QAAkBH,GAUuCpU,KATzDyH,oBASyD,EAAAzH,KARzDC,WAAqB,EAQoCD,KAPzDkH,aAOyD,EAAAlH,KANzDwU,oBAMyD,EAAAxU,KALzD4G,oBAKyD,EAAA5G,KAJzDyU,sBAIyD,EAAAzU,KAHzD0U,mBAGyD,EAAA1U,KAFzD+E,SAEyD,EACrD/E,KAAK4G,eAAiB,GACtB5G,KAAKwU,eAAiB,GACtBxU,KAAKkH,QAAUoN,EAAYpN,SAAW,WACtClH,KAAK+E,IAAMA,EAEX/E,KAAKyH,eAAiB6M,EAAY7M,iBAAkB,EACpDzH,KAAKyU,iBAAmBH,EAAYC,SAAW,GAC/CvU,KAAK0U,cAAuC,MAAvBJ,EAAYC,SAAmBvU,KAAKuU,QAAUvU,KAAKyU,iBACxEzU,KAAKC,UAAoB,SAAR8E,IAA4C,IAA1BuP,EAAYrU,uEAGlCU,EAAgBoG,GAC7B,IAAM1G,EA6CH0P,KAAK4E,KAAmB,IAAd5E,KAAK6E,UAAqBC,KAAKC,MA5C5C9U,KAAK4G,eAAehD,QAAQ,CAACvD,MAAKM,QAAOoG,SACzCvG,IAAIC,MAAJ,yBAAAC,OAAmCC,IACnCX,KAAK+U,+DAIL/U,KAAK4G,eAAiB,GACtB5G,KAAK+U,gEAIL/U,KAAKyH,gBAAkBzH,KAAKyH,eAC5BzH,KAAK+U,kDAGAjU,GACLd,KAAKwU,eAAe/S,KAAKX,4CAGZ,IAAAuB,EAAArC,KACbA,KAAKwU,eAAexO,QAAQ,SAAA5E,GAAC,OAAIA,EAAEiB,wCAG5B2S,GACNhV,KAAKkH,QAAU8N,EACfhV,KAAK+U,2DAIN/U,KAAKC,WAAaD,KAAKC,UACvBD,KAAK+U,0DAIL,MAAO,CACHtN,eAAgBzH,KAAKyH,eACrBP,QAASlH,KAAKkH,QACdqN,QAASvU,KAAKuU,QACdtU,UAAWD,KAAKC,oBCjF5B,IAEegV,GAAA,CACXC,iBADW,WAEP,IAAIC,EAAO7Q,OAAOU,aAAaC,QAJtB,YAKT,IAAIkQ,EACA,MAAO,GAGX,IACI,OAAOvT,KAAKqJ,MAAMkK,GAEtB,MAAMlE,GAEF,OADAvP,QAAQQ,MAAM,gDAAkDiT,EAAMlE,GAC/D,KAIfmE,MAhBW,SAgBJtQ,GAAoB,IAAAzC,EAAArC,KACvB8E,EAAS4B,SAAS,kBAAMrE,EAAKiS,YAAYxP,MAG7CwP,YApBW,SAoBCxP,GACRE,aAAaqQ,QAvBJ,WAuBsBzT,KAAKC,UAAUiD,EAASwQ,qBChBhDC,OAPf,SAAgCnT,GAE5B,OAAOU,EAAAC,EAAAC,cAAA,OAAKM,UAAU,UACFR,EAAAC,EAAAC,cAAA,OAAKM,UAAU,SAAf,uDAAgER,EAAAC,EAAAC,cAAA,cAASZ,EAAMzB,OAA/E,SCOlB6U,GCDN,WACI,IAAMzQ,EAA+B,mBAAzBT,OAAOC,SAASkR,KAA4B,OAAS,SAwCrE,SAAqB1Q,GACP,QAAPA,GACCvE,IAAIkV,SAAS,SACblV,IAAIC,MAAJ,mCAAAC,OAA6CqE,KAE7CvE,IAAIkV,SAAS,QA3CjBC,CAAY5Q,GAEZ,IAAMD,EAUV,SAAwBC,GACpB,IAAI6Q,EAAYX,GAAcC,mBACxBpQ,EAAW,IAAIuP,GAASuB,EAAW7Q,GAGzC,OAFAkQ,GAAcG,MAAMtQ,GACpBtE,IAAIC,MAAM,uBAAwBqE,GAC3BA,EAfU+Q,CAAe9Q,GAGhC,MAAO,CACHD,WACAgR,gBAaR,SAA4BhR,GACxB,IAAIiR,EAAW3Q,EAAKO,QAAQrB,OAAOC,SAASa,MAExC0Q,EAAkB,CAAC,OAAQ,0BAA2B,QAAQ,oBAYlE,OAVGhR,EAAS4P,gBACRoB,EAAkB,CAAC,aAGpBC,EAASrS,OAAS,IACjBoS,EAAkBC,GAGtBvV,IAAIC,MAAM,6BAA8BqV,GAEjCA,EAhCiBE,CAAmBlR,IDL/BmR,GAiBZvC,GAAY5G,MAAM0I,GAAQ1Q,SAAUzD,GACpCwL,EAAoBC,MAAM0I,GAAQ1Q,SAAUzD,GAC5C0R,EAAoBjG,MAAM0I,GAAQ1Q,SAAUzD,GAG5CA,EAAI0L,QAAQ,CACRxL,UAAW,kBAAM,GACjBC,OAAQ,SAACgI,GAAD,OAAqBgM,GAAQ1Q,SAASmI,iBAAiBzD,EAAE7I,MAAOmC,EAAAC,EAAAC,cAACkT,GAAD,CAAwBvV,MAAO6I,EAAE7I,YApBjH,IAAIwV,GAAOrT,EAAAC,EAAAC,cAACoT,EAAD,CAAStR,SAAU0Q,GAAQ1Q,WACtCuR,IAASC,OAAOH,GAAMI,SAASC,eAAe,SAO1ChW,IAAIC,MAAM,6BAA8B+U,GAAQM,iBAChDN,GAAQM,gBAAgB9P,QAAQ3E,EAAIiG,QAAQmP,KAAKpV,IAJrDb,IAAIC,MAAM,6DEDNiW,EAAgC,CAChC,CAAElI,MAnBe,UAmBMmI,MAAO,GAAIrI,KAAM,MAAOsI,OAAQ,MACvD,CAAEpI,MAnBW,oBAmBMmI,MAAO,GAAIrI,KAAM,MAAOsI,OAAO,OAClD,CAAEpI,MAnBW,gBAmBMmI,MAAO,EAAGrI,KAAM,MAAOsI,OAAO,QA0C/CC,EAAe,eAnCjB,SAAAC,EAAYC,GACXnX,OAAAG,EAAA,EAAAH,CAAAI,KAAA8W,GAAA9W,KAHD+W,aAGA,EACI/W,KAAK+W,QAAUA,oDAGZpW,GAAsC,IAAA0B,EAAArC,KACzC,OAAOA,KAAK+W,QAAQ7R,IAAI,SAAA0G,GAAC,OAAIvJ,EAAK2U,YAAYpL,EAAGjL,KAAQ+M,OAAO,SAAClE,EAAGuC,GAAJ,OAAUvC,GAAKuC,0CAGpEpL,GACX,IAAI0K,EAAI1K,EAAMsW,MAAMtW,GAEpB,OAAQ,MAAL0K,GAAyB,GAAZA,EAAE3H,OACP,KAGJ2H,EAAE,uCAGDiE,EAAuB/O,GAE/B,OAAI+O,EAAOd,MAAMC,KAAKlO,GAMd,CACJD,MAHQwK,SAASvK,EAASgF,QAAQ+J,EAAOsH,OAAQ,IAAKtH,EAAOqH,OAI7DrI,KAAMgB,EAAOhB,KACb3N,MAAOJ,GARA,cAaE,CAAiBmW,mCC9DtC,IAAIQ,EAAoB,EAGH7I,aAOjB,SAAAA,EAAY/N,EAAgBgO,GAAoB1O,OAAAG,EAAA,EAAAH,CAAAI,KAAAqO,GAAArO,KANhDiD,QAM+C,EAAAjD,KAL/CM,WAK+C,EAAAN,KAJ/CsO,UAI+C,EAAAtO,KAH/CyN,kBAG+C,EAAAzN,KAF/C0S,kBAE+C,EAC3C1S,KAAKiD,GAAKiU,IACVlX,KAAKM,MAAQA,EACbN,KAAKsO,KAAOA,GAAQ,MACpBtO,KAAKyN,aAAeY,EAAe8I,aAAanX,KAAKM,OACrDN,KAAK0S,cAAe,gEAIpB,OAAG1S,KAAKM,MAAQ,EACL,GAEJyP,KAAKqH,MAAMrH,KAAKvP,IAAIR,KAAKM,OAASyP,KAAKvP,IAAI,IAAM,uCAG/CyH,GACT,OAAOA,GAAQjI,KAAKsO,MAChB,IAAK,MACL,IAAK,MACD,MAAO,MACX,IAAK,MAAO,MAAO,MACnB,QAAU,MAAM,IAAInN,MAAM8G,EAAO,sEAIhCqG,GACL,OAAOD,EAAegJ,aAAarX,KAAKM,MAAOgO,GAAQtO,KAAKsO,kDAI5D,OAAOtO,KAAKkI,SAASlI,KAAKsX,0DAI1B,OAAOtX,KAAKkI,SAAS,6CAIrB,OAAOlI,KAAKkI,SAAS,gDAIrB,OAAOlI,KAAKkI,SAAS,wCAGhB5H,GACLN,KAAKM,MAAQA,EACbN,KAAKyN,aAAeY,EAAe8I,aAAa7W,sCAIhD,OAAON,oDAIP,OAAOA,4CAGSgI,GAChB,OAAO+H,KAAKqH,MAAMrH,KAAKvP,IAAIwH,GAAO+H,KAAKvP,IAAI,IAAM,kCAGtCyH,GACX,OAAQA,GACJ,IAAK,MAAO,OAAO,EACnB,IAAK,MAAO,OAAO,GACnB,IAAK,MAAO,OAAO,mCAIb3H,EAAgBgO,GAC1B,OAAO,IAAID,EAAe/N,EAAOgO,GAAQ,qCAGhC3N,GAET,IAAIuO,EAAS2H,EAAa5L,MAAMtK,GAEhC,IAAIuO,EACA,MAAM,IAAI/N,MAAMR,EAAQ,0BAG5B,OAAO,IAAI0N,EAAea,EAAO5O,MAAO4O,EAAOZ,2CAG/BhO,EAAgBgO,GAChC,OAAOA,GACH,IAAK,MACD,IAAIiJ,EAASxH,KAAKyH,IAAIlX,GAAO4H,SAAS,IACtC,OAAO5H,GAAS,EAAI,KAAOiX,EAAS,MAAQA,EAChD,IAAK,MACD,OAAQjX,IAAQ,GAAG4H,SAAS,GAChC,IAAK,MACD,OAAO5H,EAAM4H,SAAS,IAC1B,QACI,MAAM,IAAI/G,MAAM,oBAAsBmN,wCAI7BmJ,GACb,OAA4B,IAArBA,EAAItI,QAAQ,KAAa,MAAQsI,EAAIlL,OAAO,GAAK,KAAOkL,mfC9GtDrI,6BAQjB,SAAAA,kBAAY9B,EAA2BwC,EAA+Bb,GAAgBrP,OAAA8X,4GAAA,EAAA9X,CAAAI,KAAAoP,mBAAApP,KAPtFsN,sBAOqF,EAAAtN,KANrF8P,aAMqF,EAAA9P,KALrFiP,UAKqF,EAAAjP,KAJrF0S,kBAIqF,EAAA1S,KAHrFwR,uBAGqF,EAAAxR,KAFrFsQ,qBAEqF,EACjFtQ,KAAKsN,iBAAmBA,EACxBtN,KAAK8P,QAAUA,EACf9P,KAAKiP,KAAOA,EACZjP,KAAK0S,cAAe,EACpB1S,KAAKwR,kBAAoBxR,KAAKiP,KAAKE,QAAQ,MAAQ,GAAKnP,KAAKiP,KAAKE,QAAQ,MAAO,EACjFnP,KAAKsQ,gBAAgC,MAAdtQ,KAAKiP,0LAGvBa,SACL,GAAIA,mBAAmBV,kBACnB,MAAM,IAAIjO,MAAM,gCAGpB,IAAIwW,iBAAmB3X,KAAK8P,QAAQS,WAEhC3K,IAAM,GACV,GAAgB,KAAb5F,KAAKiP,KACJrJ,IAAM,IAAM+R,iBAAiBrX,UAC1B,CACH,GAAc,MAAXwP,QACH,MAAM,IAAI3O,MAAM,qCAAuCnB,KAAKsN,kBAE5D1H,IAAMkK,QAAQxP,MAAQN,KAAKiP,KAAO0I,iBAAiBrX,MAGvD,OAAO+N,+CAAeD,OAAOwJ,KAAKhS,KAAM+R,iBAAiBrJ,qDAIzD,OAAOtO,KAAK8P,QAAQU,0DAIpB,OAAOxQ,KAAKiP,KAAOjP,KAAK8P,QAAQ5H","file":"static/js/main.622412c9.chunk.js","sourcesContent":["export default {\r\n plainObject: function(obj : any) : boolean {\r\n return typeof obj == \"object\" && !(obj instanceof Array) && obj instanceof Object;\r\n },\r\n\r\n aFunction: function(obj : any) : boolean {\r\n return typeof obj == \"function\";\r\n },\r\n\r\n string: function(obj : any) : boolean {\r\n return typeof obj == \"string\";\r\n },\r\n\r\n array: function(obj : any) : boolean {\r\n return obj instanceof Array;\r\n },\r\n\r\n number: function(obj : any) : boolean {\r\n return typeof obj == \"number\" && !isNaN(obj)\r\n }\r\n}","import is from '../core/is';\r\nimport log from 'loglevel';\r\n\r\nexport type CommandInput = {\r\n input: string;\r\n}\r\n\r\ntype HandleFunction = (input: CommandInput) => void;\r\ntype InputErrorHandler = (input:string, error: Error) => void;\r\n\r\nexport interface ICommandHandler {\r\n canHandle (input:string) : boolean;\r\n handle: HandleFunction;\r\n}\r\n\r\nexport class CmdShell {\r\n debugMode: boolean;\r\n handlers: ICommandHandler[];\r\n errorHandler: InputErrorHandler | null; \r\n constructor() {\r\n this.handlers = [];\r\n this.debugMode = false;\r\n this.errorHandler = null;\r\n };\r\n\r\n execute (rawInput: string) {\r\n\r\n log.debug(`Executing command: ${rawInput}`)\r\n\r\n var input = rawInput.trim().toLowerCase();\r\n var handler = this.findHandler(input);\r\n\r\n if(handler != null) {\r\n if(this.debugMode) {\r\n this.invokeHandler(input, handler);\r\n } else {\r\n try {\r\n this.invokeHandler(input, handler);\r\n } catch (e) {\r\n this.handleError(input, e);\r\n }\r\n }\r\n }\r\n else {\r\n log.debug(`Handled is not found for command: ${rawInput}`)\r\n this.handleError(input, new Error(\"Unsupported expression: \" + input.trim()));\r\n }\r\n };\r\n\r\n onError(h: InputErrorHandler) {\r\n this.errorHandler = h;\r\n }\r\n \r\n command (cmd : string | object, handler? : any) {\r\n var h = this.createHandler(cmd, handler);\r\n if(h == null){\r\n console.warn('unexpected set of arguments: ', JSON.stringify(arguments));\r\n return;\r\n }\r\n\r\n if(!is.aFunction(h.canHandle)) {\r\n console.warn('handler is missing \"canHandle\" function. registration denied.');\r\n return;\r\n }\r\n\r\n if(!is.aFunction(h.handle)) {\r\n console.warn('handler is missing \"handle\" function. registration denied.');\r\n return;\r\n }\r\n\r\n this.handlers.push(h);\r\n };\r\n\r\n createHandler (cmd : string | object, handler : HandleFunction) : ICommandHandler | null {\r\n if(is.plainObject(cmd)) {\r\n return cmd as ICommandHandler;\r\n }\r\n\r\n if(is.string(cmd)) {\r\n return { canHandle: function (input) { return input === cmd; }, handle: handler };\r\n }\r\n\r\n return null;\r\n }\r\n\r\n findHandler (input: string) : ICommandHandler | null {\r\n return this.handlers.filter(h => h.canHandle(input))[0];\r\n };\r\n\r\n invokeHandler (input : string, handler : ICommandHandler) {\r\n\r\n var cmdResult = handler.handle({ input: input});\r\n if(cmdResult != null) {\r\n log.debug(cmdResult);\r\n }\r\n };\r\n\r\n handleError (input: string, err: Error) {\r\n if(this.debugMode)\r\n console.error(input, err);\r\n\r\n if(this.errorHandler != null)\r\n this.errorHandler(input, err);\r\n }\r\n}\r\n\r\nexport default new CmdShell();","import React from 'react';\r\nimport log from 'loglevel';\r\n\r\nexport interface IInputBoxProps\r\n{\r\n onCommandEntered: (input :string) => void;\r\n}\r\n\r\nexport default class InputBox extends React.Component {\r\n history: string[];\r\n historyIndex: number;\r\n nameInput: HTMLInputElement | null;\r\n\r\n constructor(props: IInputBoxProps) {\r\n super(props);\r\n this.nameInput = null;\r\n this.history = [];\r\n this.historyIndex = -1;\r\n }\r\n\r\n componentDidMount(){\r\n if(this.nameInput != null)\r\n this.nameInput.focus();\r\n }\r\n\r\n render() {\r\n return { this.nameInput = input; }} \r\n onKeyUp={e => this.onKeyUp(e)}\r\n onKeyDown={e => this.onKeyDown(e)}\r\n className=\"expressionInput mono\"\r\n placeholder=\"type expression like '1>>2' or 'help' \"/>;\r\n }\r\n\r\n onKeyUp(e: any) {\r\n var input = e.target;\r\n if (e.keyCode != 13 || input.value.trim().length == 0) {\r\n return;\r\n }\r\n \r\n var commandInput = input.value;\r\n this.history.unshift(commandInput);\r\n this.historyIndex = -1;\r\n\r\n input.value = ''; \r\n this.props.onCommandEntered(commandInput);\r\n }\r\n\r\n onKeyDown(args: any) {\r\n\r\n if(args.keyCode == 38) {\r\n var newIndex = this.historyIndex+1;\r\n\r\n if (this.history.length > newIndex) { // up\r\n args.target.value = this.history[newIndex];\r\n this.historyIndex = newIndex;\r\n }\r\n\r\n args.preventDefault();\r\n return;\r\n }\r\n\r\n if(args.keyCode == 40) {\r\n if(this.historyIndex > 0) { // down\r\n args.target.value = this.history[--this.historyIndex];\r\n }\r\n\r\n args.preventDefault();\r\n }\r\n }\r\n}","import React from 'react';\r\nimport AppState from '../AppState';\r\n\r\n\r\ntype DisplayResultProps = {\r\n appState: AppState,\r\n inputHash: string,\r\n input: string,\r\n key: number\r\n}\r\n\r\nexport default class DisplayResultView extends React.Component {\r\n render() {\r\n\r\n return
\r\n
>{this.props.input}#
\r\n
\r\n {this.props.children}\r\n
\r\n
;\r\n }\r\n}\r\n\r\n","import AppState from \"../AppState\";\r\nimport React from \"react\";\r\n\r\ntype IndicatorsProps = {\r\n appState: AppState\r\n};\r\n\r\nfunction Indicators(props: IndicatorsProps) {\r\n\r\n const list = [];\r\n const state = props.appState;\r\n\r\n if(props.appState.env != 'prod') {\r\n list.push(state.env);\r\n }\r\n\r\n if(props.appState.debugMode) {\r\n list.push(\"debug\");\r\n }\r\n\r\n if(localStorage.getItem('TrackAnalytics') === 'false') {\r\n list.push(\"notrack\");\r\n }\r\n\r\n if(list.length == 0)\r\n return null;\r\n\r\n return
\r\n {list.map(i => {i} )}\r\n
\r\n}\r\n\r\nexport default Indicators;","export default {\r\n encodeHash: function(input:string):string {\r\n return encodeURIComponent(input.trim().replace(/\\s/g,','));\r\n },\r\n decodeHash: function(hashValue:string):string {\r\n return decodeURIComponent(hashValue.replace(/^\\#/, '')).replace(/,/g,' ');\r\n },\r\n getArgs: function (hashValue:string) : string[] {\r\n\r\n var decodedHash = this.decodeHash(hashValue);\r\n var args : string[] = [];\r\n\r\n splitHashList(decodedHash).forEach(function(value) {\r\n args.push(value);\r\n });\r\n\r\n return args;\r\n }\r\n};\r\n\r\nfunction splitHashList(str: string) : string[] {\r\n\r\n return str.split('||').filter(s => s.length > 0);\r\n}","import React from 'react';\r\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome';\r\nimport { faEnvelope } from \"@fortawesome/free-solid-svg-icons\";\r\nimport { faTwitter, faGithub} from \"@fortawesome/free-brands-svg-icons\";\r\nimport './TopLinks.css';\r\n\r\nfunction TopLinks() {\r\n return ;\r\n}\r\n\r\nexport default TopLinks;","import React from 'react';\r\nimport InputBox from './InputBox';\r\nimport DisplayResultView from './DisplayResultView';\r\nimport AppState, { CommandResultView } from '../AppState';\r\nimport cmd from '../cmd';\r\nimport log from 'loglevel';\r\nimport Indicators from './Indicators';\r\nimport hash from '../../core/hash';\r\nimport TopLinks from './TopLinks';\r\n\r\n\r\ntype AppRootProps = {\r\n appState: AppState, \r\n};\r\n\r\ntype AppRootState = {\r\n uiTheme: string,\r\n emphasizeBytes: boolean,\r\n commandResults: CommandResultView[]\r\n}\r\n\r\nexport default class AppRoot extends React.Component {\r\n \r\n componentWillMount() {\r\n this.refresh();\r\n this.props.appState.onChange(() => this.refresh());\r\n }\r\n\r\n refresh() {\r\n this.setState(this.props.appState);\r\n }\r\n \r\n getIndicator(value : boolean) {\r\n return value ? 'on' : 'off';\r\n }\r\n\r\n getResultViews() : JSX.Element[] {\r\n\r\n var results = this.state.commandResults.map((r, i) => \r\n \r\n {r.view}\r\n );\r\n return results;\r\n }\r\n\r\n toggleEmphasizeBytes() {\r\n this.props.appState.toggleEmphasizeBytes();\r\n }\r\n\r\n render() {\r\n return
\r\n \r\n
\r\n

BitwiseCmd\r\n

\r\n \r\n
\r\n\r\n
\r\n cmd.execute(input)} />\r\n\r\n \r\n this.toggleEmphasizeBytes()}>[em]\r\n \r\n
\r\n\r\n
\r\n {this.getResultViews()}\r\n
\r\n
;\r\n }\r\n}","import React from 'react';\r\n\r\nfunction ErrorResultView(props : {errorMessage:string}) {\r\n \r\n return
\r\n
{props.errorMessage}
\r\n
;\r\n}\r\n\r\nexport default ErrorResultView;\r\n","export default {\r\n formatString: function(num: number, kind: string) : string {\r\n return num.toString(getBase(kind || \"bin\"));\r\n },\r\n padLeft: function (str: string, length: number, symbol: string) : string {\r\n var sb = Array.prototype.slice.call(str), symbol = symbol || \"0\";\r\n\r\n if(length == null) {\r\n return str;\r\n }\r\n\r\n while(length > sb.length) {\r\n sb.unshift(symbol);\r\n }\r\n\r\n return sb.join('');\r\n }\r\n};\r\n\r\nfunction getBase(kind:string) : number {\r\n switch (kind){\r\n case 'bin': return 2;\r\n case 'hex': return 16;\r\n case 'dec': return 10;\r\n }\r\n\r\n throw new Error(\"Unsupported kind: \" + kind);\r\n}","import React from 'react';\r\n\r\nexport type BinaryStringViewProps = {\r\n allowFlipBits: boolean;\r\n binaryString: string;\r\n onFlipBit?: (input: FlipBitEventArg) => void;\r\n emphasizeBytes: boolean;\r\n className?:string\r\n};\r\n\r\nexport type FlipBitEventArg = {\r\n index: number;\r\n binaryString: string;\r\n $event: any;\r\n newBinaryString: string, \r\n};\r\n\r\nexport default class BinaryStringView extends React.Component {\r\n render() {\r\n return {this.getChildren()}\r\n }\r\n\r\n onBitClick(index: number, e : any) {\r\n if(!this.props.allowFlipBits || !this.props.onFlipBit) {\r\n return;\r\n }\r\n\r\n if(!this.props.onFlipBit) {\r\n \r\n }\r\n\r\n const arr = this.props.binaryString.split('');\r\n arr[index] = arr[index] == '0' ? '1' : '0';\r\n const newBinaryString = arr.join('');\r\n\r\n this.props.onFlipBit({ index: index, binaryString: this.props.binaryString, $event: e, newBinaryString }); \r\n }\r\n\r\n getChildren() {\r\n var bits = this.createBits(this.props.binaryString.split(''));\r\n \r\n if(this.props.emphasizeBytes) {\r\n return this.splitIntoBytes(bits);\r\n }\r\n\r\n return bits;\r\n }\r\n\r\n createBits(bitChars:string[]) : JSX.Element[] {\r\n const allowFlipBits = this.props.allowFlipBits || false;\r\n const css = allowFlipBits ? ' flipable' : ''\r\n\r\n return bitChars.map((c, i) => {\r\n var className = c == '0' ? `zero${css}` : `one${css}`;\r\n return this.onBitClick(i, e)}>{c}\r\n });\r\n }\r\n\r\n splitIntoBytes(bits: JSX.Element[]) {\r\n const bytes = [];\r\n\r\n var key = 0;\r\n while(bits.length > 0) {\r\n bytes.push({bits.splice(0, 8)});\r\n }\r\n \r\n return bytes;\r\n }\r\n}","import React from 'react';\r\nimport { IpAddress, OctetNumber, getNetworkClass } from '../ip';\r\nimport formatter from '../../core/formatter'\r\nimport BinaryStringView from '../../core/components/BinaryString';\r\nimport './IpAddressView.css';\r\ntype IpAddressViewProps = {\r\n ipAddresses: IpAddress[]\r\n};\r\n\r\nexport class IpAddressView extends React.Component \r\n{\r\n \r\n render() {\r\n if(this.props.ipAddresses.length === 1)\r\n return this.renderSingleIp(this.props.ipAddresses[0]);\r\n \r\n return this.renderMultipleIps();\r\n }\r\n\r\n renderMultipleIps() {\r\n return \r\n \r\n {this.props.ipAddresses.map((ip, i) => \r\n \r\n \r\n )}\r\n \r\n
{ip.toString()}\r\n {this.bin(ip.firstByte, 1, ip)}.\r\n {this.bin(ip.secondByte, 2, ip)}.\r\n {this.bin(ip.thirdByte, 3, ip)}.\r\n {this.bin(ip.fourthByte, 4, ip)}\r\n
\r\n }\r\n\r\n renderSingleIp(ip: IpAddress) {\r\n return \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {/* \r\n \r\n */}\r\n \r\n
{ip.firstByte}{ip.secondByte}{ip.thirdByte}{ip.fourthByte}
{this.bin(ip.firstByte, 1, ip)}{this.bin(ip.secondByte, 2, ip)}{this.bin(ip.thirdByte, 3, ip)}{this.bin(ip.fourthByte, 4, ip)}
\r\n Network Class: {getNetworkClass(ip).toUpperCase()}\r\n
;\r\n }\r\n\r\n bin(value: number, octetNumber: OctetNumber, ip: IpAddress) {\r\n return this.onFlippedBit(e.newBinaryString, octetNumber, ip)} />;\r\n }\r\n \r\n onFlippedBit(binaryString: string, number: OctetNumber, ip : IpAddress) {\r\n ip.setOctet(number, parseInt(binaryString, 2));\r\n this.forceUpdate();\r\n }\r\n};\r\n\r\nfunction fmt(num: number) : string {\r\n return formatter.padLeft(formatter.formatString(num, 'bin'), 8, '0');\r\n}\r\n\r\nexport default IpAddressView;","import formatter from '../core/formatter';\r\n\r\n\r\nexport type OctetNumber = 1 | 2 | 3 | 4;\r\nexport type NetworkClass = 'a' | 'b' | 'c' | 'd' | 'e';\r\nexport type ParsedIpObject = IpAddress | IpAddressWithSubnetMask;\r\n\r\nconst ipAddressParser = {\r\n parse: function(input: string) : ParsedIpObject[] | ParsingError | null {\r\n\r\n const matches = this.getMaches(input);\r\n const correctInputs = matches.filter(m => m.matches != null);\r\n const incorrectInputs = matches.filter(m => m.matches == null);\r\n \r\n if(correctInputs.length == 0)\r\n return null;\r\n\r\n if(incorrectInputs.length > 0) {\r\n return new ParsingError(`Value(s) ${incorrectInputs.map(v => v.input).join(',')} was not recognized as valid ip address or ip address with a subnet mask`);\r\n }\r\n\r\n const parsedObjects = matches.map(m => this.parseSingle(m.matches!, m.input));\r\n const parsingErrors = parsedObjects.filter(p => p instanceof ParsingError);\r\n\r\n if(parsingErrors.length > 0) {\r\n return parsingErrors[0] as ParsingError;\r\n }\r\n\r\n return parsedObjects as ParsedIpObject[];\r\n \r\n },\r\n\r\n getMaches(input : string) : { matches: RegExpExecArray | null, input: string }[] {\r\n\r\n return input.\r\n replace(/[\\t\\s]+/g, ' ')\r\n .split(' ')\r\n .filter(s => s.length>0)\r\n .map(s => {\r\n const ipV4Regex = /^([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})(\\/\\d+)?$/;\r\n const matches = ipV4Regex.exec(s);\r\n \r\n if(matches == null || matches.length === 0)\r\n return {matches: null, input: s};\r\n \r\n return {matches, input: s};\r\n });\r\n },\r\n\r\n parseSingle(matches : RegExpExecArray, input: string) : ParsedIpObject | ParsingError {\r\n const invalid = (n: number) => n < 0 || n > 255;\r\n \r\n const first = parseInt(matches[1]);\r\n const second = parseInt(matches[2]);\r\n const third = parseInt(matches[3]);\r\n const fourth = parseInt(matches[4]);\r\n\r\n if(invalid(first) || invalid(second) || invalid(third) || invalid(fourth))\r\n return new ParsingError(`${input} value doesn't fall within the valid range of the IP address space`);\r\n\r\n const ipAddress = new IpAddress(first, second, third, fourth);\r\n\r\n if(matches[5]) {\r\n const maskPart = matches[5].substr(1);\r\n const maskBits = parseInt(maskPart);\r\n\r\n if(maskBits > 32) {\r\n return new ParsingError(`Subnet mask value in ${input} is out of range`);\r\n }\r\n\r\n return new IpAddressWithSubnetMask(ipAddress, maskBits);\r\n }\r\n\r\n return ipAddress;\r\n }\r\n}\r\n\r\nexport class ParsingError {\r\n errorMessage: string;\r\n constructor(message: string) {\r\n this.errorMessage = message;\r\n }\r\n}\r\n\r\nexport class IpAddressWithSubnetMask {\r\n maskBits: number;\r\n ipAddress: IpAddress;\r\n \r\n constructor(ipAddress : IpAddress, maskBits : number) {\r\n this.ipAddress = ipAddress;\r\n this.maskBits = maskBits;\r\n }\r\n\r\n toString() {\r\n return `${this.ipAddress.toString()}/${this.maskBits}`;\r\n }\r\n\r\n createSubnetMaskIp() : IpAddress {\r\n\r\n const mask = (bits: number) => 255<<(8-bits)&255;\r\n\r\n if(this.maskBits <= 8) {\r\n return new IpAddress(mask(this.maskBits), 0, 0, 0);\r\n }\r\n else if(this.maskBits <= 16) {\r\n return new IpAddress(255, mask(this.maskBits-8), 0, 0);\r\n }\r\n else if(this.maskBits <= 24) {\r\n return new IpAddress(255, 255, mask(this.maskBits-16), 0);\r\n }\r\n else {\r\n return new IpAddress(255, 255, 255, mask(this.maskBits-24));\r\n }\r\n }\r\n}\r\n\r\nexport class IpAddress {\r\n\r\n firstByte : number;\r\n secondByte: number;\r\n thirdByte : number;\r\n fourthByte: number\r\n\r\n constructor(firstByte : number, secondByte: number, thirdByte : number, fourthByte: number) {\r\n this.firstByte = firstByte;\r\n this.secondByte = secondByte;\r\n this.thirdByte = thirdByte;\r\n this.fourthByte = fourthByte;\r\n }\r\n\r\n toString() : string {\r\n return `${this.firstByte}.${this.secondByte}.${this.thirdByte}.${this.fourthByte}`;\r\n }\r\n\r\n setOctet(octet: OctetNumber, value : number) {\r\n switch(octet) {\r\n case 1:\r\n this.firstByte = value;\r\n break;\r\n case 2:\r\n this.secondByte = value;\r\n break;\r\n case 3:\r\n this.thirdByte = value;\r\n break;\r\n case 4:\r\n this.fourthByte = value;\r\n break;\r\n }\r\n }\r\n}\r\n\r\n\r\n\r\nconst getNetworkClass = function (ipAddress: IpAddress) : NetworkClass {\r\n const byte = ipAddress.firstByte;\r\n const bineryRep = formatter.formatString(ipAddress.firstByte, 'bin');\r\n\r\n const firstBitOne = (byte & 128) === 128;\r\n const firstBitZero = (byte & 128) === 0;\r\n const secondBitOne = (byte & 64) === 64;\r\n\r\n const thirdBitOne = (byte & 32) === 32;\r\n const thirdBitZero = (byte & 32) === 0;\r\n\r\n const forthBitZero = (byte & 16) === 0;\r\n const forthBitOne = (byte & 16) === 16;\r\n\r\n // e: 1111\r\n\r\n if(firstBitOne && secondBitOne && thirdBitOne && forthBitOne)\r\n return 'e';\r\n\r\n if(firstBitOne && secondBitOne && thirdBitOne && forthBitZero) // Start bits: 1110;\r\n return 'd';\r\n\r\n if(firstBitOne && secondBitOne && thirdBitZero) // Start bits: 110;\r\n return 'c';\r\n \r\n return firstBitOne ? 'b' : 'a';\r\n};\r\n\r\nexport {ipAddressParser, getNetworkClass};","import React from 'react';\r\nimport AppState from '../shell/AppState';\r\nimport { CmdShell, CommandInput } from '../shell/cmd';\r\nimport ErrorResultView from '../shell/components/ErrorResultView';\r\nimport IpAddressView from './components/IpAddressView';\r\nimport { ipAddressParser, ParsingError, IpAddress, ParsedIpObject, IpAddressWithSubnetMask } from './ip';\r\nimport log from 'loglevel';\r\n\r\nconst networkingAppModule = {\r\n setup: function(appState: AppState, cmd: CmdShell) {\r\n \r\n // Add Ip Address commands\r\n cmd.command({\r\n canHandle: (input:string) => ipAddressParser.parse(input) != null,\r\n handle: function(c: CommandInput) {\r\n var result = ipAddressParser.parse(c.input);\r\n\r\n if(result == null)\r\n return;\r\n\r\n if(result instanceof ParsingError) {\r\n appState.addCommandResult(c.input, );\r\n return;\r\n }\r\n\r\n const ipAddresses : IpAddress[] = [];\r\n \r\n (result as ParsedIpObject[]).forEach(r => {\r\n if(r instanceof IpAddressWithSubnetMask)\r\n {\r\n ipAddresses.push(r.ipAddress);\r\n ipAddresses.push(r.createSubnetMaskIp());\r\n }\r\n else if(r instanceof IpAddress) {\r\n ipAddresses.push(r);\r\n }\r\n });\r\n \r\n appState.addCommandResult(c.input, );\r\n }\r\n });\r\n\r\n log.debug();\r\n }\r\n}\r\n\r\nexport default networkingAppModule;","import NumericOperand from \"./NumericOperand\";\r\nimport { ExpressionInput, ExpressionInputItem } from \"./expression-interfaces\";\r\n\r\nexport default class ListOfNumbersExpression implements ExpressionInput {\r\n numbers: NumericOperand[];\r\n expressionString: string;\r\n maxBitsLength: number;\r\n\r\n constructor(expressionString: string, numbers: NumericOperand[]) {\r\n this.expressionString = expressionString;\r\n this.numbers = numbers;\r\n this.maxBitsLength = numbers.map(n => n.lengthInBits).reduce((n , c) => n >= c ? n : c, 0);\r\n }\r\n\r\n toString() {\r\n return this.numbers.map(n => n.value.toString()).join(' ');\r\n }\r\n}","import { ExpressionInput, ExpressionInputItem } from \"./expression-interfaces\";\r\n\r\nexport default class BitwiseOperationExpression implements ExpressionInput {\r\n \r\n expressionString: string;\r\n expressionItems: ExpressionInputItem[];\r\n\r\n constructor(expressionString: string, expressions: ExpressionInputItem[]) {\r\n this.expressionString = expressionString;\r\n this.expressionItems = expressions;\r\n }\r\n}","import NumericOperand from './NumericOperand';\r\nimport ExpressionOperand from './ExpressionOperand'\r\nimport ListOfNumbersExpression from './ListOfNumbersExpression';\r\nimport BitwiseOperationExpression from './BitwiseOperationExpression';\r\nimport { ExpressionInput, ExpressionInputItem, NumberBase } from './expression-interfaces';\r\n\r\nexport { default as NumericOperand } from './NumericOperand';\r\nexport { default as ExpressionOperand } from './ExpressionOperand';\r\nexport { default as ListOfNumbersExpression } from './ListOfNumbersExpression';\r\nexport { default as BitwiseOperationExpression } from './BitwiseOperationExpression';\r\n\r\ninterface IExpressionParserFactory {\r\n canCreate: (input: string) => boolean;\r\n create: (input: string) => ExpressionInput;\r\n};\r\n\r\nclass ExpressionParser {\r\n factories: IExpressionParserFactory[];\r\n constructor() {\r\n this.factories = [];\r\n };\r\n\r\n canParse (input: string) : boolean {\r\n var trimmed = input.replace(/^\\s+|\\s+$/, '');\r\n var i = this.factories.length-1;\r\n for(;i>=0;i--) {\r\n if(this.factories[i].canCreate(trimmed) === true){\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n\r\n parse (input: string) : ExpressionInput | null {\r\n var trimmed = input.replace(/^\\s+|\\s+$/, '');\r\n var i = 0, l = this.factories.length, factory;\r\n\r\n for(;i {\r\n if(n.trim().length > 0) {\r\n numbers.push(NumericOperand.parse(n.trim()));\r\n }\r\n });\r\n\r\n return new ListOfNumbersExpression(input, numbers);\r\n }\r\n}\r\n\r\nclass BitwiseOperationExpressionFactory implements IExpressionParserFactory {\r\n fullRegex: RegExp;\r\n regex: RegExp;\r\n\r\n constructor() {\r\n this.fullRegex = /^((<<|>>|>>>|\\||\\&|\\^)?(~?-?([b,x,a-f,0-9]+)))+$/;\r\n this.regex = /(<<|>>|>>>|\\||\\&|\\^)?(~?-?(?:[b,x,a-f,0-9]+))/g;\r\n }\r\n\r\n canCreate (input: string) : boolean {\r\n this.fullRegex.lastIndex = 0;\r\n return this.fullRegex.test(this.normalizeString(input));\r\n };\r\n\r\n create (input: string) : ExpressionInput {\r\n var m, operands : ExpressionInputItem[] = [],\r\n normalizedString = this.normalizeString(input);\r\n\r\n while ((m = this.regex.exec(normalizedString)) != null) {\r\n operands.push(this.parseMatch(m));\r\n }\r\n\r\n return new BitwiseOperationExpression(normalizedString, operands)\r\n };\r\n\r\n parseMatch (m:any): ExpressionInputItem {\r\n var input = m[0],\r\n sign = m[1],\r\n num = m[2];\r\n\r\n var parsed = null;\r\n if(num.indexOf('~') == 0) {\r\n parsed = new ExpressionOperand(num, NumericOperand.parse(num.substring(1)), '~');\r\n }\r\n else {\r\n parsed = NumericOperand.parse(num);\r\n }\r\n\r\n if(sign == null) {\r\n return parsed as ExpressionOperand;\r\n } else {\r\n return new ExpressionOperand(input, parsed as NumericOperand, sign);\r\n }\r\n };\r\n\r\n normalizeString (input : string): string {\r\n return input.replace(/\\s+/g,'');\r\n };\r\n}\r\n\r\nvar parser = new ExpressionParser();\r\nparser.addFactory(new ListOfNumbersExpressionFactory());\r\nparser.addFactory(new BitwiseOperationExpressionFactory());\r\n\r\nexport {parser};\r\n","import { NumericOperand, ListOfNumbersExpression, BitwiseOperationExpression, ExpressionOperand } from '../expression';\r\nimport { ExpressionInputItem, ExpressionInput } from '../expression-interfaces';\r\n\r\ntype Config = {\r\n emphasizeBytes: boolean;\r\n allowFlipBits: boolean;\r\n}\r\n\r\ntype ExpressionItemModel = {\r\n sign: string;\r\n css: string;\r\n expressionItem: ExpressionInputItem;\r\n allowFlipBits: boolean;\r\n label: string;\r\n}\r\n\r\nexport default class BitwiseExpressionViewModel {\r\n\r\n emphasizeBytes: boolean;\r\n items: ExpressionItemModel[];\r\n maxNumberOfBits: number;\r\n allowFlipBits: boolean;\r\n\r\n constructor({ emphasizeBytes = false, allowFlipBits = false} : Config) {\r\n this.emphasizeBytes = emphasizeBytes;\r\n this.items = [];\r\n this.maxNumberOfBits = 0;\r\n this.allowFlipBits = allowFlipBits === true;\r\n }\r\n\r\n static buildListOfNumbers(expr : ListOfNumbersExpression, config : Config) {\r\n var model = new BitwiseExpressionViewModel(config);\r\n expr.numbers.forEach(op => model.addOperandRow(op));\r\n model.maxNumberOfBits = BitwiseExpressionViewModel.getNumberOfBits(model.maxNumberOfBits, model.emphasizeBytes);\r\n return model;\r\n }\r\n\r\n static buildMultiple (expr : BitwiseOperationExpression, config : Config) {\r\n\r\n var op = expr.expressionItems[0],\r\n i = 0, len = expr.expressionItems.length,\r\n ex, m = new BitwiseExpressionViewModel(config);\r\n\r\n var prev : NumericOperand | null = null;\r\n\r\n for (;i {\r\n constructor(props: BitwiseOperationExpressionViewProps) {\r\n super(props);\r\n this.state = {};\r\n }\r\n render() {\r\n var rows = this.getRows();\r\n if(!rows) {\r\n return null;\r\n }\r\n\r\n return \r\n \r\n {rows}\r\n \r\n
\r\n }\r\n\r\n getRows() : JSX.Element[] | null {\r\n var model = BitwiseExpressionViewModel.createModel(this.props.expression, this.props.emphasizeBytes);\r\n\r\n return model.items.map((itm, i) => \r\n this.onBitFlipped()} />);\r\n }\r\n\r\n onBitFlipped() {\r\n this.forceUpdate();\r\n //this.setState({d:new Date()});\r\n }\r\n}\r\n\r\ntype ExpressionRowProps = {\r\n sign: string, \r\n css: string, \r\n maxNumberOfBits: number, \r\n emphasizeBytes: boolean, \r\n allowFlipBits: boolean, \r\n expressionItem: ExpressionInputItem,\r\n onBitFlipped: any\r\n}\r\n\r\nclass ExpressionRow extends React.Component {\r\n constructor(props: ExpressionRowProps) {\r\n super(props);\r\n this.state = { operand: null };\r\n }\r\n render() {\r\n const { sign, css, maxNumberOfBits, emphasizeBytes, allowFlipBits } = this.props;\r\n \r\n return \r\n {sign}\r\n {this.getLabel()}\r\n \r\n this.flipBit(args)}/>\r\n \r\n {this.getOther()}\r\n ;;\r\n }\r\n\r\n getBinaryString() : string { \r\n return this.props.expressionItem.evaluate().toBinaryString();\r\n }\r\n\r\n getLabel(): string {\r\n\r\n // For expressions like |~2 \r\n // TODO: find a better way...\r\n if(this.props.expressionItem.isExpression) {\r\n const ex = this.props.expressionItem as ExpressionOperand;\r\n return ex.sign + this.getLabelString(ex.getUnderlyingOperand());\r\n }\r\n\r\n return this.getLabelString(this.props.expressionItem.getUnderlyingOperand()); \r\n }\r\n\r\n getOther() {\r\n\r\n if(this.props.expressionItem.isExpression) {\r\n const ex = this.props.expressionItem as ExpressionOperand;\r\n const op = ex.evaluate();\r\n\r\n return op.toString();\r\n }\r\n\r\n return this.props.expressionItem.evaluate().toOtherKindString();\r\n }\r\n\r\n getLabelString (op: NumericOperand) : string {\r\n return op.toString(op.base == 'bin' ? 'dec' : op.base);\r\n }\r\n\r\n flipBit(args: FlipBitEventArg) { \r\n\r\n const op = this.props.expressionItem.getUnderlyingOperand();\r\n const { index, binaryString } = args;\r\n\r\n var arr = binaryString.split('');\r\n arr[index] = arr[index] == '0' ? '1' : '0';\r\n var bin = arr.join('');\r\n\r\n var newValue = parseInt(bin, 2);\r\n op.setValue(newValue);\r\n\r\n this.props.onBitFlipped();\r\n }\r\n}","import React from 'react';\r\nimport AppState from '../shell/AppState';\r\nimport { CmdShell, CommandInput } from '../shell/cmd';\r\nimport BitwiseOperationExpressionView from './components/BitwiseOperationExpressionView';\r\nimport {parser} from './expression';\r\n\r\nconst expressionAppModule = {\r\n setup: function(appState: AppState, cmd: CmdShell) {\r\n \r\n // Bitwise Expressions\r\n cmd.command({\r\n canHandle: (input:string) => parser.canParse(input),\r\n handle: function(c: CommandInput) {\r\n var expr = parser.parse(c.input);\r\n appState.addCommandResult(c.input, );\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport default expressionAppModule;","import React from 'react'\r\n\r\nfunction AboutResultView() {\r\n\r\n return
\r\n

Created by Borys Levytskyi. Please give it a like if BitwiseCmd has helped you in your work.

\r\n

If you have an idea, suggestion or you've spotted a bug here, please send it to bitwisecmd@gmail.com or tweet on @BitwiseCmd. Your feedback is greatly appreciated.

\r\n

Project on GitHub

\r\n
;\r\n};\r\n\r\nexport default AboutResultView;","import React from 'react';\r\nimport cmd from '../../shell/cmd';\r\n\r\ntype CommandLinkProps = {\r\n command?:string;\r\n text:string;\r\n}\r\n\r\nfunction CommandLink(props: CommandLinkProps) {\r\n return cmd.execute(props.command || props.text)}>{props.text}\r\n}\r\n\r\nexport default CommandLink;","import React from 'react';\r\nimport CommandLink from '../../core/components/CommandLink';\r\nimport './HelpResultView.css';\r\n\r\nfunction HelpResultView() {\r\n \r\n return
\r\n
\r\n
\r\n
\r\n Bitiwse Calculation Commands\r\n
    \r\n
  • — type bitwise expression to see result in binary (only positive integers are supported now)
  • \r\n
  • — type one or more numbers to see their binary representations
  • \r\n
\r\n
\r\n
\r\n IP Address Commands\r\n
    \r\n
  • — enter single or multiple ip addresses (separated by space) to see their binary represenation
  • \r\n
  • — subnet mask notiations are support as well
  • \r\n
\r\n
\r\n
\r\n Color Theme Commands\r\n
    \r\n
  • — set Light theme
  • \r\n
  • — set Dark theme
  • \r\n
  • — set Midnight theme
  • \r\n
\r\n
\r\n
\r\n Other Commands\r\n
    \r\n
  • — clear output pane
  • \r\n
  • — display this help
  • \r\n
  • — display changelog
  • \r\n
  • — turn On/Off Emphasize Bytes
  • \r\n
  • — about the app
  • \r\n
  • — generate v4 GUID
  • \r\n
\r\n
\r\n
\r\n
\r\n
\r\n Supported Bitwise Operations
\r\n \r\n \r\n as implemented in JavaScript engine of your browser\r\n \r\n \r\n
    \r\n
  • & — bitwise AND
  • \r\n
  • | — bitwise inclusive OR
  • \r\n
  • ^ — bitwise exclusive XOR
  • \r\n
  • ~ — bitwise NOT
  • \r\n
  • << — left shift
  • \r\n
  • >> — sign propagating right shift
  • \r\n
  • >>> — zero-fill right shift
  • \r\n
\r\n
\r\n
\r\n Tip\r\n

\r\n You can click on bits to flip them in number inputs (e.g. ) or IP addresses (e.g. )\r\n

\r\n
\r\n
\r\n
\r\n
;\r\n}\r\n\r\nexport default HelpResultView;\r\n","import React from 'react';\r\n\r\nfunction TextResultView(props : { text: string }) {\r\n return

{props.text}

;\r\n}\r\n\r\nexport default TextResultView;","import React from 'react';\r\nimport CommandLink from '../../core/components/CommandLink';\r\nimport './WhatsNewResultView.css';\r\n\r\nfunction WhatsnewResultView() {\r\n \r\n return
\r\n

Changelog

\r\n
\r\n

Jun 14th, 2021
\r\n Added support of ip addresses and subnet masks notatioans. Try them out: \r\n

\r\n
    \r\n
  • Single IP address
  • \r\n
  • Multiple IP addresses and subnet mask notations
  • \r\n
\r\n \r\n
\r\n
\r\n

Jun 6th, 2017
\r\n Added command. Use it for generating v4 GUIDs

\r\n
\r\n
\r\n

May 27th, 2017
\r\n Added support of binary number notation (e.g. ).

\r\n
\r\n
\r\n

May 20th, 2017
\r\n New theme added.

\r\n
\r\n
\r\n

May 16th, 2017
\r\n Complete rewrite using React. Old implementation is available at http://bitwisecmd.com/old. Please let me know if you have problems with this release by creating issue in Github Repo.

\r\n
\r\n
;\r\n}\r\n\r\nexport default WhatsnewResultView;","import React from 'react';\r\nimport uuid from 'uuid';\r\nimport AppState from './AppState';\r\nimport { CmdShell, CommandInput } from './cmd';\r\nimport AboutResultView from './components/AboutResultView';\r\nimport ErrorResultView from './components/ErrorResultView';\r\nimport HelpResultView from './components/HelpResultView';\r\nimport TextResultView from './components/TextResultView';\r\nimport WhatsnewResultView from './components/WhatsNewResultView';\r\n\r\nconst shellModule = {\r\n setup: function(appState: AppState, cmd: CmdShell) {\r\n \r\n cmd.debugMode = appState.debugMode;\r\n appState.onChange(() => cmd.debugMode = appState.debugMode);\r\n \r\n cmd.command(\"help\", (c: CommandInput) => appState.addCommandResult(c.input, ));\r\n cmd.command(\"clear\", () => appState.clearCommandResults());\r\n cmd.command(\"em\", () => appState.toggleEmphasizeBytes());\r\n cmd.command(\"dark\", () => appState.setUiTheme('dark'));\r\n cmd.command(\"light\", () => appState.setUiTheme('light'));\r\n cmd.command(\"midnight\", () => appState.setUiTheme('midnight'));\r\n cmd.command(\"about\", (c: CommandInput) => appState.addCommandResult(c.input, ));\r\n cmd.command(\"whatsnew\", (c: CommandInput) => appState.addCommandResult(c.input, ));\r\n cmd.command(\"guid\", (c: CommandInput) => appState.addCommandResult(c.input, ));\r\n cmd.command(\"-notrack\", () => {});\r\n cmd.command(\"-debug\", (c: CommandInput) => {\r\n appState.toggleDebugMode();\r\n appState.addCommandResult(c.input, );\r\n }); \r\n\r\n cmd.onError((input: string, err: Error) => appState.addCommandResult(input, ));\r\n }\r\n}\r\n\r\nexport default shellModule;","import log from 'loglevel';\r\n\r\nconst APP_VERSION = 5;\r\n\r\nexport type PersistedAppData = {\r\n emphasizeBytes: boolean;\r\n uiTheme: string;\r\n version: number;\r\n debugMode: boolean | null;\r\n}\r\n\r\nexport type CommandResultView = {\r\n key: number,\r\n input: string,\r\n view: JSX.Element\r\n};\r\n\r\nexport type AppStateChangeHandler = (state: AppState) => void;\r\n\r\nexport default class AppState {\r\n\r\n version: number = APP_VERSION;\r\n emphasizeBytes: boolean;\r\n debugMode: boolean = false;\r\n uiTheme: string;\r\n changeHandlers: AppStateChangeHandler[];\r\n commandResults: CommandResultView[];\r\n persistedVersion: number;\r\n wasOldVersion: boolean;\r\n env: string; \r\n\r\n constructor(persistData : PersistedAppData, env: string) {\r\n this.commandResults = [];\r\n this.changeHandlers = [];\r\n this.uiTheme = persistData.uiTheme || 'midnight';\r\n this.env = env;\r\n\r\n this.emphasizeBytes = persistData.emphasizeBytes || true;\r\n this.persistedVersion = persistData.version || 0.1;\r\n this.wasOldVersion = persistData.version != null && this.version > this.persistedVersion;\r\n this.debugMode = env !== 'prod' || persistData.debugMode === true;\r\n }\r\n\r\n addCommandResult(input : string, view : JSX.Element) {\r\n const key = generateKey();\r\n this.commandResults.unshift({key, input, view});\r\n log.debug(`command result added: ${input}`);\r\n this.triggerChanged();\r\n }\r\n\r\n clearCommandResults() {\r\n this.commandResults = [];\r\n this.triggerChanged();\r\n }\r\n\r\n toggleEmphasizeBytes() {\r\n this.emphasizeBytes = !this.emphasizeBytes;\r\n this.triggerChanged();\r\n }\r\n\r\n onChange(handler : AppStateChangeHandler) {\r\n this.changeHandlers.push(handler);\r\n }\r\n\r\n triggerChanged() {\r\n this.changeHandlers.forEach(h => h(this));\r\n }\r\n\r\n setUiTheme(theme: string) {\r\n this.uiTheme = theme;\r\n this.triggerChanged(); \r\n }\r\n\r\n toggleDebugMode() {\r\n this.debugMode = !this.debugMode;\r\n this.triggerChanged();\r\n }\r\n\r\n getPersistData() : PersistedAppData {\r\n return {\r\n emphasizeBytes: this.emphasizeBytes,\r\n uiTheme: this.uiTheme,\r\n version: this.version,\r\n debugMode: this.debugMode\r\n }\r\n }\r\n};\r\n\r\nfunction generateKey() : number {\r\n return Math.ceil(Math.random()*10000000) ^ Date.now(); // Because why the hell not...\r\n}","import AppState, { PersistedAppData } from \"./AppState\";\r\n\r\nconst storeKey = 'AppState';\r\n\r\nexport default {\r\n getPersistedData() : PersistedAppData {\r\n var json = window.localStorage.getItem(storeKey);\r\n if(!json) {\r\n return {} as PersistedAppData;\r\n }\r\n\r\n try {\r\n return JSON.parse(json) as PersistedAppData;\r\n }\r\n catch(ex) {\r\n console.error('Failed to parse AppState json. Json Value: \\n' + json, ex);\r\n return {} as PersistedAppData;;\r\n }\r\n },\r\n\r\n watch (appState: AppState) {\r\n appState.onChange(() => this.persistData(appState));\r\n },\r\n\r\n persistData(appState: AppState) {\r\n localStorage.setItem(storeKey, JSON.stringify(appState.getPersistData()));\r\n }\r\n}","import React from 'react';\r\n\r\nfunction UnknownInputResultView(props : {input:string}) {\r\n \r\n return
\r\n
¯\\_(ツ)_/¯ Sorry, i don′t know what {props.input} is
\r\n
;\r\n}\r\n\r\nexport default UnknownInputResultView;\r\n","import cmd, { CommandInput } from './shell/cmd';\r\nimport AppRoot from './shell/components/AppRoot';\r\nimport log from 'loglevel';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport './index.css';\r\nimport networkingAppModule from './networking/module';\r\nimport expressionAppModule from './expression/module';\r\nimport shellModule from './shell/module';\r\nimport bootstrapAppData from './shell/startup';\r\nimport UnknownInputResultView from './shell/components/UnknownInputResultView';\r\n\r\nconst appData = bootstrapAppData();\r\n\r\ninitializeModules();\r\n\r\nvar root = ;\r\nReactDOM.render(root, document.getElementById('root'));\r\n\r\nexecuteStartupCommands();\r\n\r\nlog.debug(\"started\");\r\n\r\nfunction executeStartupCommands() {\r\n log.debug(\"Executing startup commands\", appData.startupCommands);\r\n appData.startupCommands.forEach(cmd.execute.bind(cmd));\r\n}\r\n\r\nfunction initializeModules() {\r\n shellModule.setup(appData.appState, cmd);\r\n networkingAppModule.setup(appData.appState, cmd);\r\n expressionAppModule.setup(appData.appState, cmd);\r\n\r\n // Last command handler reports that input is unknown\r\n cmd.command({\r\n canHandle: () => true,\r\n handle: (c: CommandInput) => appData.appState.addCommandResult(c.input, )\r\n });\r\n}\r\n\r\n\r\n\r\n","import log from 'loglevel';\r\nimport hash from '../core/hash';\r\nimport AppState from './AppState';\r\nimport { Env } from './interfaces';\r\nimport appStateStore from './appStateStore';\r\n\r\nexport type StartupAppData = {\r\n appState: AppState,\r\n startupCommands: string[]\r\n}\r\n\r\nfunction bootstrapAppData() : StartupAppData {\r\n const env = window.location.host === \"bitwisecmd.com\" ? 'prod' : 'stage';\r\n\r\n setupLogger(env);\r\n\r\n const appState = createAppState(env);\r\n const startupCommands = getStartupCommands(appState);\r\n\r\n return {\r\n appState,\r\n startupCommands\r\n }\r\n}\r\n\r\n\r\nfunction createAppState(env:string) {\r\n var stateData = appStateStore.getPersistedData();\r\n const appState = new AppState(stateData, env);\r\n appStateStore.watch(appState);\r\n log.debug(\"appState initialized\", appState);\r\n return appState;\r\n}\r\n\r\nfunction getStartupCommands(appState : AppState) : string[] {\r\n var hashArgs = hash.getArgs(window.location.hash);\r\n\r\n var startupCommands = ['help', '127.0.0.1 192.168.0.0/8', '1|2&6','4 0b1000000 0x80'];\r\n\r\n if(appState.wasOldVersion) {\r\n startupCommands = [\"whatsnew\"];\r\n }\r\n\r\n if(hashArgs.length > 0) {\r\n startupCommands = hashArgs;\r\n }\r\n\r\n log.debug('Executing startup commands', startupCommands);\r\n\r\n return startupCommands;\r\n}\r\n\r\nfunction setupLogger(env: Env) {\r\n if(env != 'prod'){\r\n log.setLevel(\"debug\");\r\n log.debug(`Log level is set to debug. Env: ${env}`)\r\n } else {\r\n log.setLevel(\"warn\");\r\n }\r\n}\r\n\r\nexport default bootstrapAppData;","import { NumberBase } from \"./expression-interfaces\";\r\n\r\nconst decimalRegex = /^-?\\d+$/;\r\nconst hexRegex = /^-?0x[0-9,a-f]+$/i;\r\nconst binRegex = /^-?0b[0-1]+$/i;\r\nconst operatorRegex = /^<<|>>|<<<|\\&|\\|\\^|~$/;\r\n\r\ninterface ParserConfig {\r\n regex: RegExp,\r\n radix: number,\r\n base: NumberBase,\r\n prefix: string|RegExp\r\n}\r\n\r\nexport interface ParsedNumber {\r\n value: number;\r\n base: NumberBase;\r\n input: string;\r\n}\r\n\r\nvar knownParsers : ParserConfig[] = [\r\n { regex: decimalRegex, radix: 10, base: 'dec', prefix: '^$' },\r\n { regex: hexRegex, radix: 16, base: 'hex', prefix:/0x/i },\r\n { regex: binRegex, radix: 2, base: 'bin', prefix:/0b/i }];\r\n\r\n\r\nclass NumberParser {\r\n\r\n parsers: ParserConfig[];\r\n\r\n constructor(parsers: ParserConfig[])\r\n {\r\n this.parsers = parsers;\r\n }\r\n\r\n parse (input : string) : ParsedNumber | null {\r\n return this.parsers.map(p => this.applyParser(p, input)).reduce((c, n) => c || n);\r\n };\r\n\r\n parseOperator (input: string) : string | null {\r\n var m = input.match(input);\r\n \r\n if(m == null || m.length == 0) {\r\n return null;\r\n }\r\n\r\n return m[0];\r\n };\r\n\r\n applyParser(parser : ParserConfig, rawInput: string) : ParsedNumber | null {\r\n \r\n if(!parser.regex.test(rawInput)) {\r\n return null;\r\n }\r\n \r\n var value = parseInt(rawInput.replace(parser.prefix, ''), parser.radix);\r\n \r\n return {\r\n value: value,\r\n base: parser.base,\r\n input: rawInput\r\n } \r\n }\r\n}\r\n\r\nconst numberParser = new NumberParser(knownParsers);\r\n\r\nexport {numberParser};","import {numberParser} from './numberParser';\r\nimport { ExpressionInputItem, NumberBase } from './expression-interfaces';\r\n\r\nvar globalId : number = 1;\r\n\r\n// Represents numeric value\r\nexport default class NumericOperand implements ExpressionInputItem {\r\n id: number;\r\n value: number;\r\n base: NumberBase;\r\n lengthInBits: number;\r\n isExpression: boolean;\r\n\r\n constructor(value : number, base?: NumberBase) {\r\n this.id = globalId++;\r\n this.value = value;\r\n this.base = base || \"dec\";\r\n this.lengthInBits = NumericOperand.getBitLength(this.value);\r\n this.isExpression = false;\r\n }\r\n \r\n getLengthInBits() {\r\n if(this.value < 0) {\r\n return 32;\r\n }\r\n return Math.floor(Math.log(this.value) / Math.log(2)) + 1;\r\n };\r\n\r\n getOtherBase(kind?: NumberBase) : NumberBase {\r\n switch(kind || this.base) {\r\n case 'dec': \r\n case 'bin':\r\n return 'hex';\r\n case 'hex': return 'dec';\r\n default : throw new Error(kind + \" kind doesn't have opposite kind\")\r\n }\r\n };\r\n\r\n toString(base?: NumberBase) : string {\r\n return NumericOperand.toBaseString(this.value, base || this.base);\r\n }\r\n\r\n toOtherKindString() : string {\r\n return this.toString(this.getOtherBase());\r\n }\r\n\r\n toDecimalString() {\r\n return this.toString('dec');\r\n }\r\n\r\n toHexString() {\r\n return this.toString('hex');\r\n }\r\n\r\n toBinaryString() : string {\r\n return this.toString('bin');\r\n }\r\n\r\n setValue(value : number) {\r\n this.value = value;\r\n this.lengthInBits = NumericOperand.getBitLength(value);\r\n }\r\n\r\n evaluate() : NumericOperand {\r\n return this;\r\n }\r\n\r\n getUnderlyingOperand() : NumericOperand {\r\n return this\r\n }\r\n \r\n static getBitLength(num : number) {\r\n return Math.floor(Math.log(num) / Math.log(2)) + 1;\r\n } \r\n \r\n static getBase(kind : string){\r\n switch (kind){\r\n case 'bin': return 2;\r\n case 'hex': return 16;\r\n case 'dec': return 10;\r\n }\r\n };\r\n\r\n static create(value : number, base? : NumberBase) {\r\n return new NumericOperand(value, base || \"dec\");\r\n };\r\n\r\n static parse(input: string) : NumericOperand {\r\n \r\n var parsed = numberParser.parse(input);\r\n\r\n if(!parsed) {\r\n throw new Error(input + \" is not a valid number\");\r\n }\r\n\r\n return new NumericOperand(parsed.value, parsed.base);\r\n }\r\n\r\n static toBaseString(value : number, base : NumberBase) : string {\r\n switch(base) {\r\n case 'hex':\r\n var hexVal = Math.abs(value).toString(16);\r\n return value >= 0 ? '0x' + hexVal : '-0x' + hexVal;\r\n case 'bin':\r\n return (value>>>0).toString(2);\r\n case 'dec':\r\n return value.toString(10);\r\n default:\r\n throw new Error(\"Unexpected kind: \" + base)\r\n }\r\n };\r\n\r\n static toHexString (hex : string) {\r\n return hex.indexOf('-') === 0 ? '-0x' + hex.substr(1) : '0x' + hex;\r\n };\r\n}","import NumericOperand from './NumericOperand';\r\nimport { ExpressionInputItem } from './expression-interfaces';\r\n\r\nexport default class ExpressionOperand implements ExpressionInputItem {\r\n expressionString: string;\r\n operand: ExpressionInputItem;\r\n sign: string;\r\n isExpression: boolean;\r\n isShiftExpression: boolean;\r\n isNotExpression: boolean;\r\n\r\n constructor(expressionString : string, operand : ExpressionInputItem, sign : string) {\r\n this.expressionString = expressionString;\r\n this.operand = operand;\r\n this.sign = sign;\r\n this.isExpression = true;\r\n this.isShiftExpression = this.sign.indexOf('<') >= 0 || this.sign.indexOf('>')>= 0;\r\n this.isNotExpression = this.sign === '~';\r\n }\r\n \r\n evaluate(operand?: NumericOperand) : NumericOperand {\r\n if (operand instanceof ExpressionOperand) {\r\n throw new Error('value shouldnt be expression'); \r\n }\r\n\r\n var evaluatedOperand = this.operand.evaluate();\r\n\r\n var str = '';\r\n if(this.sign == '~'){\r\n str = '~' + evaluatedOperand.value;\r\n } else {\r\n if(operand == null)\r\n throw new Error(\"Other is required for expression: \" + this.expressionString)\r\n\r\n str = operand.value + this.sign + evaluatedOperand.value;\r\n }\r\n\r\n return NumericOperand.create(eval(str), evaluatedOperand.base);\r\n }\r\n\r\n getUnderlyingOperand() : NumericOperand {\r\n return this.operand.getUnderlyingOperand();\r\n }\r\n\r\n toString(): string {\r\n return this.sign + this.operand.toString();\r\n }\r\n}"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["core/is.ts","shell/cmd.ts","shell/components/InputBox.tsx","shell/components/DisplayResultView.tsx","shell/components/Indicators.tsx","core/hash.ts","shell/components/TopLinks.tsx","shell/components/AppRoot.tsx","shell/components/ErrorResultView.tsx","core/formatter.ts","core/components/BinaryString.tsx","networking/components/IpAddressView.tsx","networking/ip.ts","networking/module.tsx","expression/ListOfNumbersExpression.ts","expression/BitwiseOperationExpression.ts","expression/expression.ts","expression/components/BitwiseExpressionModel.ts","expression/components/BitwiseOperationExpressionView.tsx","expression/module.tsx","shell/components/AboutResultView.tsx","core/components/CommandLink.tsx","shell/components/HelpResultView.tsx","shell/components/TextResultView.tsx","shell/components/WhatsNewResultView.tsx","shell/module.tsx","shell/AppState.ts","shell/appStateStore.ts","shell/components/UnknownInputResultView.tsx","index.tsx","shell/startup.ts","expression/numberParser.ts","expression/NumericOperand.ts","expression/ExpressionOperand.ts"],"names":["is","obj","Array","Object","shell_cmd","CmdShell","classCallCheck","this","debugMode","handlers","errorHandler","createClass","key","value","rawInput","log","debug","concat","input","trim","toLowerCase","handler","findHandler","invokeHandler","e","handleError","Error","h","cmd","createHandler","canHandle","handle","push","console","warn","JSON","stringify","arguments","filter","cmdResult","err","error","InputBox","props","_this","possibleConstructorReturn","getPrototypeOf","call","history","historyIndex","nameInput","focus","_this2","react_default","a","createElement","id","type","ref","onKeyUp","onKeyDown","className","placeholder","target","keyCode","length","commandInput","unshift","onCommandEntered","args","newIndex","preventDefault","React","Component","DisplayResultView","title","href","window","location","pathname","inputHash","children","Indicators","list","state","appState","env","localStorage","getItem","map","i","hash","encodeHash","encodeURIComponent","replace","decodeHash","hashValue","decodeURIComponent","getArgs","str","decodedHash","split","s","forEach","TopLinks","index_es","icon","faGithub","size","faTwitter","faEnvelope","AppRoot","refresh","onChange","setState","commandResults","r","DisplayResultView_DisplayResultView","view","toggleEmphasizeBytes","_this3","uiTheme","components_Indicators","components_TopLinks","InputBox_InputBox","execute","data-cmd","getIndicator","emphasizeBytes","onClick","getResultViews","ErrorResultView","errorMessage","formatter","formatString","num","kind","toString","getBase","padLeft","symbol","sb","prototype","slice","join","BinaryStringView","getChildren","index","allowFlipBits","onFlipBit","arr","binaryString","newBinaryString","$event","bits","createBits","splitIntoBytes","bitChars","css","c","onBitClick","bytes","splice","IpAddressView","_React$Component","apply","inherits","ipAddresses","renderSingleIp","renderMultipleIps","ip","bin","firstByte","secondByte","thirdByte","fourthByte","octetNumber","BinaryString_BinaryStringView","onFlippedBit","number","setOctet","parseInt","forceUpdate","ipAddressParser","parse","matches","getMaches","correctInputs","m","incorrectInputs","ParsingError","v","parsedObjects","parseSingle","parsingErrors","p","exec","invalid","n","first","second","third","fourth","ipAddress","IpAddress","maskPart","substr","maskBits","IpAddressWithSubnetMask","message","mask","octet","networkingAppModule","setup","command","result","addCommandResult","components_ErrorResultView","createSubnetMaskIp","networking_components_IpAddressView","ListOfNumbersExpression","expressionString","numbers","maxBitsLength","lengthInBits","reduce","BitwiseOperationExpression","expressions","expressionItems","ExpressionParser","factories","trimmed","canCreate","factory","l","create","NumericOperand","base","ListOfNumbersExpressionFactory","regex","test","BitwiseOperationExpressionFactory","fullRegex","lastIndex","normalizeString","operands","normalizedString","parseMatch","sign","parsed","indexOf","ExpressionOperand","substring","parser","addFactory","BitwiseExpressionViewModel","_ref","_ref$emphasizeBytes","_ref$allowFlipBits","items","maxNumberOfBits","operand","Math","max","getLengthInBits","expressionItem","label","expression","resultNumber","isNotExpression","evaluate","getUnderlyingOperand","getLabel","resultOperand","op","expr","config","model","addOperandRow","getNumberOfBits","ex","len","prev","eo","addExpressionOperandRow","notResult","addExpressionResultRow","isShiftExpression","addShiftExpressionResultRow","buildListOfNumbers","buildMultiple","BitwiseOperationExpressionView","rows","getRows","createModel","itm","BitwiseOperationExpressionView_ExpressionRow","onBitFlipped","ExpressionRow","_this4","_this$props","getBinaryString","flipBit","getOther","toBinaryString","isExpression","getLabelString","toOtherKindString","newValue","setValue","expressionAppModule","canParse","BitwiseOperationExpressionView_BitwiseOperationExpressionView","AboutResultView","data-result-type","CommandLink","text","HelpResultView","components_CommandLink","TextResultView","WhatsnewResultView","shellModule","components_HelpResultView","clearCommandResults","setUiTheme","components_AboutResultView","components_WhatsNewResultView","components_TextResultView","uuid","toggleDebugMode","onError","APP_VERSION","AppState","persistData","version","changeHandlers","persistedVersion","wasOldVersion","ceil","random","Date","now","triggerChanged","theme","appStateStore","getPersistedData","json","watch","setItem","getPersistData","UnknownInputResultView","appData","host","setLevel","setupLogger","stateData","createAppState","startupCommands","hashArgs","getStartupCommands","bootstrapAppData","components_UnknownInputResultView","root","AppRoot_AppRoot","ReactDOM","render","document","getElementById","bind","knownParsers","radix","prefix","numberParser","NumberParser","parsers","applyParser","match","globalId","getBitLength","floor","toBaseString","getOtherBase","hexVal","abs","hex","D_MyStuff_Pet_BitwiseCmd_node_modules_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_0__","evaluatedOperand","eval"],"mappings":"+PAAeA,EACE,SAASC,GAClB,MAAqB,iBAAPA,KAAqBA,aAAeC,QAAUD,aAAeE,QAFpEH,EAKA,SAASC,GAChB,MAAqB,mBAAPA,GANPD,EASH,SAASC,GACb,MAAqB,iBAAPA,mBCgGPG,EAAA,IA3Ff,WAII,SAAAC,IAAeF,OAAAG,EAAA,EAAAH,CAAAI,KAAAF,GAAAE,KAHfC,eAGc,EAAAD,KAFdE,cAEc,EAAAF,KADdG,kBACc,EACVH,KAAKE,SAAW,GAChBF,KAAKC,WAAY,EACjBD,KAAKG,aAAe,KAP5B,OAAAP,OAAAQ,EAAA,EAAAR,CAAAE,EAAA,EAAAO,IAAA,UAAAC,MAAA,SAUaC,GAELC,IAAIC,MAAJ,sBAAAC,OAAgCH,IAEhC,IAAII,EAAQJ,EAASK,OAAOC,cACxBC,EAAUd,KAAKe,YAAYJ,GAE/B,GAAc,MAAXG,EACC,GAAGd,KAAKC,UACJD,KAAKgB,cAAcL,EAAOG,QAE1B,IACId,KAAKgB,cAAcL,EAAOG,GAC5B,MAAOG,GACJjB,KAAKkB,YAAYP,EAAOM,QAKjCT,IAAIC,MAAJ,qCAAAC,OAA+CH,IAC/CP,KAAKkB,YAAYP,EAAO,IAAIQ,MAAM,2BAA6BR,EAAMC,WA9BjF,CAAAP,IAAA,UAAAC,MAAA,SAkCYc,GACJpB,KAAKG,aAAeiB,IAnC5B,CAAAf,IAAA,UAAAC,MAAA,SAsCae,EAAuBP,GAC5B,IAAIM,EAAIpB,KAAKsB,cAAcD,EAAKP,GACxB,MAALM,EAKC3B,EAAa2B,EAAEG,WAKf9B,EAAa2B,EAAEI,QAKnBxB,KAAKE,SAASuB,KAAKL,GAJfM,QAAQC,KAAK,8DALbD,QAAQC,KAAK,iEALbD,QAAQC,KAAK,gCAAiCC,KAAKC,UAAUC,cAzCzE,CAAAzB,IAAA,gBAAAC,MAAA,SA0DmBe,EAAuBP,GAClC,OAAGrB,EAAe4B,GACPA,EAGR5B,EAAU4B,GACF,CAAEE,UAAW,SAAUZ,GAAS,OAAOA,IAAUU,GAAQG,OAAQV,GAGrE,OAnEf,CAAAT,IAAA,cAAAC,MAAA,SAsEiBK,GACT,OAAOX,KAAKE,SAAS6B,OAAO,SAAAX,GAAC,OAAIA,EAAEG,UAAUZ,KAAQ,KAvE7D,CAAAN,IAAA,gBAAAC,MAAA,SA0EmBK,EAAgBG,GAE3B,IAAIkB,EAAYlB,EAAQU,OAAO,CAAEb,MAAOA,IACxB,MAAbqB,GACCxB,IAAIC,MAAMuB,KA9EtB,CAAA3B,IAAA,cAAAC,MAAA,SAkFiBK,EAAesB,GACrBjC,KAAKC,WACJyB,QAAQQ,MAAMvB,EAAOsB,GAED,MAArBjC,KAAKG,cACJH,KAAKG,aAAaQ,EAAOsB,OAvFrCnC,EAAA,yCCPqBqC,cAKjB,SAAAA,EAAYC,GAAuB,IAAAC,EAAA,OAAAzC,OAAAG,EAAA,EAAAH,CAAAI,KAAAmC,IAC/BE,EAAAzC,OAAA0C,EAAA,EAAA1C,CAAAI,KAAAJ,OAAA2C,EAAA,EAAA3C,CAAAuC,GAAAK,KAAAxC,KAAMoC,KALVK,aAImC,EAAAJ,EAHnCK,kBAGmC,EAAAL,EAFnCM,eAEmC,EAE/BN,EAAKM,UAAY,KACjBN,EAAKI,QAAU,GACfJ,EAAKK,cAAgB,EAJUL,mFAQV,MAAlBrC,KAAK2C,WACJ3C,KAAK2C,UAAUC,yCAGd,IAAAC,EAAA7C,KACL,OAAO8C,EAAAC,EAAAC,cAAA,SAAOC,GAAG,KAAKC,KAAK,OACbC,IAAK,SAACxC,GAAYkC,EAAKF,UAAYhC,GACnCyC,QAAS,SAAAnC,GAAC,OAAI4B,EAAKO,QAAQnC,IAC3BoC,UAAW,SAAApC,GAAC,OAAI4B,EAAKQ,UAAUpC,IAC/BqC,UAAU,uBACVC,YAAY,2EAGtBtC,GACJ,IAAIN,EAAQM,EAAEuC,OACd,GAAiB,IAAbvC,EAAEwC,SAA8C,GAA7B9C,EAAML,MAAMM,OAAO8C,OAA1C,CAIA,IAAIC,EAAehD,EAAML,MACzBN,KAAKyC,QAAQmB,QAAQD,GACrB3D,KAAK0C,cAAgB,EAErB/B,EAAML,MAAQ,GACdN,KAAKoC,MAAMyB,iBAAiBF,sCAGtBG,GAEN,GAAmB,IAAhBA,EAAKL,QAAe,CACnB,IAAIM,EAAW/D,KAAK0C,aAAa,EAQjC,OANI1C,KAAKyC,QAAQiB,OAASK,IACtBD,EAAKN,OAAOlD,MAAQN,KAAKyC,QAAQsB,GACjC/D,KAAK0C,aAAeqB,QAGxBD,EAAKE,iBAIU,IAAhBF,EAAKL,UACDzD,KAAK0C,aAAe,IACnBoB,EAAKN,OAAOlD,MAAQN,KAAKyC,UAAUzC,KAAK0C,eAG5CoB,EAAKE,yBA3DqBC,IAAMC,WCGvBC,mLAGb,OAAOrB,EAAAC,EAAAC,cAAA,OAAKM,UAAU,UACNR,EAAAC,EAAAC,cAAA,OAAKM,UAAU,cAAaR,EAAAC,EAAAC,cAAA,QAAMM,UAAU,OAAhB,KAAkCtD,KAAKoC,MAAMzB,MAAMmC,EAAAC,EAAAC,cAAA,KAAGM,UAAU,WAAWc,MAAM,2BAA2BC,KAAMC,OAAOC,SAASC,SAAW,IAAMxE,KAAKoC,MAAMqC,WAA3G,MAC/E3B,EAAAC,EAAAC,cAAA,OAAKM,UAAU,WACVtD,KAAKoC,MAAMsC,kBANOT,IAAMC,WCqBtCS,MAzBf,SAAoBvC,GAEhB,IAAMwC,EAAO,GACPC,EAAQzC,EAAM0C,SAcpB,MAZyB,QAAtB1C,EAAM0C,SAASC,KACdH,EAAKnD,KAAKoD,EAAME,KAGjB3C,EAAM0C,SAAS7E,WACd2E,EAAKnD,KAAK,SAGgC,UAA3CuD,aAAaC,QAAQ,mBACpBL,EAAKnD,KAAK,WAGI,GAAfmD,EAAKlB,OACG,KAEJZ,EAAAC,EAAAC,cAAA,WACE4B,EAAKM,IAAI,SAAAC,GAAC,OAAIrC,EAAAC,EAAAC,cAAA,YAAOmC,EAAP,YC5BZC,EAAA,CACXC,WAAY,SAAS1E,GACjB,OAAO2E,mBAAmB3E,EAAMC,OAAO2E,QAAQ,MAAM,OAEzDC,WAAY,SAASC,GACjB,OAAOC,mBAAmBD,EAAUF,QAAQ,MAAO,KAAKA,QAAQ,KAAK,MAEzEI,QAAS,SAAUF,GAEf,IAWeG,EAXXC,EAAc7F,KAAKwF,WAAWC,GAC9B3B,EAAkB,GAMtB,OAIe8B,EARDC,EAUXD,EAAIE,MAAM,MAAM/D,OAAO,SAAAgE,GAAC,OAAIA,EAAErC,OAAS,KAVfsC,QAAQ,SAAS1F,GACxCwD,EAAKrC,KAAKnB,KAGPwD,sCCIAmC,MAdf,WACI,OAAOnD,EAAAC,EAAAC,cAAA,MAAIM,UAAU,aACTR,EAAAC,EAAAC,cAAA,UACIF,EAAAC,EAAAC,cAAA,KAAGqB,KAAK,gDAA+CvB,EAAAC,EAAAC,cAACkD,EAAA,EAAD,CAAiB5C,UAAU,OAAO6C,KAAMC,IAAUC,KAAK,OAA9G,sBAEJvD,EAAAC,EAAAC,cAAA,UACIF,EAAAC,EAAAC,cAAA,KAAGqB,KAAK,kCAAiCvB,EAAAC,EAAAC,cAACkD,EAAA,EAAD,CAAiB5C,UAAU,OAAO6C,KAAMG,IAAWD,KAAK,OAAOvD,EAAAC,EAAAC,cAAA,QAAMM,UAAU,aAAhB,aAE5GR,EAAAC,EAAAC,cAAA,UACIF,EAAAC,EAAAC,cAAA,KAAGqB,KAAK,gDAAmJvB,EAAAC,EAAAC,cAACkD,EAAA,EAAD,CAAiB5C,UAAU,OAAO6C,KAAMI,IAAYF,KAAK,OAAOvD,EAAAC,EAAAC,cAAA,QAAMM,UAAU,aAAhB,qBCM1NkD,+LAEI,IAAAnE,EAAArC,KACjBA,KAAKyG,UACLzG,KAAKoC,MAAM0C,SAAS4B,SAAS,kBAAMrE,EAAKoE,8CAIxCzG,KAAK2G,SAAS3G,KAAKoC,MAAM0C,+CAGhBxE,GACT,OAAOA,EAAQ,KAAO,+CAGO,IAAAuC,EAAA7C,KAM7B,OAJcA,KAAK6E,MAAM+B,eAAe1B,IAAI,SAAC2B,EAAG1B,GAAJ,OACxCrC,EAAAC,EAAAC,cAAC8D,EAAD,CAAmBzG,IAAKwG,EAAExG,IAAMM,MAAOkG,EAAElG,MAAO8D,UAAWW,EAAKC,WAAWwB,EAAElG,OAAQmE,SAAUjC,EAAKT,MAAM0C,UACrG+B,EAAEE,uDAMX/G,KAAKoC,MAAM0C,SAASkC,wDAGf,IAAAC,EAAAjH,KACL,OAAO8C,EAAAC,EAAAC,cAAA,OAAKM,UAAS,YAAA5C,OAAcV,KAAK6E,MAAMqC,UAClCpE,EAAAC,EAAAC,cAACmE,EAAD,CAAYrC,SAAU9E,KAAKoC,MAAM0C,WACjChC,EAAAC,EAAAC,cAAA,OAAKM,UAAU,UACXR,EAAAC,EAAAC,cAAA,oBAAWF,EAAAC,EAAAC,cAAA,QAAMM,UAAU,cAAhB,QAEZR,EAAAC,EAAAC,cAACoE,EAAD,OAGHtE,EAAAC,EAAAC,cAAA,OAAKM,UAAU,6BACXR,EAAAC,EAAAC,cAACqE,EAAD,CAAUxD,iBAAkB,SAAClD,GAAD,OAAWU,EAAIiG,QAAQ3G,MAEnDmC,EAAAC,EAAAC,cAAA,QAAMM,UAAU,aACZR,EAAAC,EAAAC,cAAA,QAAMC,GAAG,iBAAiBsE,WAAS,KAAKjE,UAAW,aAAetD,KAAKwH,aAAaxH,KAAK6E,MAAM4C,gBAAiBrD,MAAM,yBAAyBsD,QAAS,kBAAMT,EAAKD,yBAAnK,UAIRlE,EAAAC,EAAAC,cAAA,OAAKC,GAAG,UACPjD,KAAK2H,0BA9CW1D,IAAMC,kCCZ5B0D,MAPf,SAAyBxF,GAErB,OAAOU,EAAAC,EAAAC,cAAA,OAAKM,UAAU,UACVR,EAAAC,EAAAC,cAAA,OAAKM,UAAU,SAASlB,EAAMyF,gBCL/BC,EAAA,CACXC,aAAc,SAASC,EAAaC,GAChC,OAAOD,EAAIE,SAiBnB,SAAiBD,GACb,OAAQA,GACJ,IAAK,MAAO,OAAO,EACnB,IAAK,MAAO,OAAO,GACnB,IAAK,MAAO,OAAO,GAGvB,MAAM,IAAI9G,MAAM,qBAAuB8G,GAxBfE,CAAQF,GAAQ,SAExCG,QAAS,SAAUxC,EAAalC,EAAgB2E,GAC5C,IAAIC,EAAK3I,MAAM4I,UAAUC,MAAMhG,KAAKoD,GAAMyC,EAASA,GAAU,IAE7D,GAAa,MAAV3E,EACC,OAAOkC,EAGX,KAAMlC,EAAS4E,EAAG5E,QACd4E,EAAG1E,QAAQyE,GAGf,OAAOC,EAAGG,KAAK,UCEFC,mLAEb,OAAO5F,EAAAC,EAAAC,cAAA,QAAMM,UAAWtD,KAAKoC,MAAMkB,WAAYtD,KAAK2I,kDAG7CC,EAAe3H,GACtB,GAAIjB,KAAKoC,MAAMyG,eAAkB7I,KAAKoC,MAAM0G,UAA5C,CAII9I,KAAKoC,MAAM0G,UAIf,IAAMC,EAAM/I,KAAKoC,MAAM4G,aAAalD,MAAM,IAC1CiD,EAAIH,GAAuB,KAAdG,EAAIH,GAAgB,IAAM,IACvC,IAAMK,EAAkBF,EAAIN,KAAK,IAEjCzI,KAAKoC,MAAM0G,UAAU,CAAEF,MAAOA,EAAOI,aAAchJ,KAAKoC,MAAM4G,aAAcE,OAAQjI,EAAGgI,2DAIvF,IAAIE,EAAOnJ,KAAKoJ,WAAWpJ,KAAKoC,MAAM4G,aAAalD,MAAM,KAEzD,OAAG9F,KAAKoC,MAAMqF,eACHzH,KAAKqJ,eAAeF,GAGxBA,qCAGAG,GAAmC,IAAAjH,EAAArC,KAEpCuJ,EADgBvJ,KAAKoC,MAAMyG,gBAAiB,EACtB,YAAc,GAE1C,OAAOS,EAASpE,IAAI,SAACsE,EAAGrE,GACpB,IAAI7B,EAAiB,KAALkG,EAAA,OAAA9I,OAAkB6I,GAAlB,MAAA7I,OAAgC6I,GAChD,OAAOzG,EAAAC,EAAAC,cAAA,QAAMM,UAAWA,EAAWjD,IAAK8E,EAAGuC,QAAS,SAAAzG,GAAC,OAAIoB,EAAKoH,WAAWtE,EAAGlE,KAAKuI,4CAI1EL,GAIX,IAHA,IAAMO,EAAQ,GAEVrJ,EAAM,EACJ8I,EAAKzF,OAAS,GAChBgG,EAAMjI,KAAKqB,EAAAC,EAAAC,cAAA,QAAM3C,IAAKA,IAAOiD,UAAU,QAAQ6F,EAAKQ,OAAO,EAAG,KAGlE,OAAOD,SAjD+BzF,IAAMC,iBCgErC0F,MAxEf,SAAAC,GAAA,SAAAD,IAAA,OAAAhK,OAAAG,EAAA,EAAAH,CAAAI,KAAA4J,GAAAhK,OAAA0C,EAAA,EAAA1C,CAAAI,KAAAJ,OAAA2C,EAAA,EAAA3C,CAAAgK,GAAAE,MAAA9J,KAAA8B,YAAA,OAAAlC,OAAAmK,EAAA,EAAAnK,CAAAgK,EAAAC,GAAAjK,OAAAQ,EAAA,EAAAR,CAAAgK,EAAA,EAAAvJ,IAAA,SAAAC,MAAA,WAIQ,OAAqC,IAAlCN,KAAKoC,MAAM4H,YAAYtG,OACf1D,KAAKiK,eAAejK,KAAKoC,MAAM4H,YAAY,IAE/ChK,KAAKkK,sBAPpB,CAAA7J,IAAA,oBAAAC,MAAA,WAUwB,IAAA+B,EAAArC,KAChB,OAAO8C,EAAAC,EAAAC,cAAA,SAAOM,UAAU,cACpBR,EAAAC,EAAAC,cAAA,aACKhD,KAAKoC,MAAM4H,YAAY9E,IAAI,SAACiF,EAAIhF,GAAL,OAAWrC,EAAAC,EAAAC,cAAA,MAAI3C,IAAK8E,GACxCrC,EAAAC,EAAAC,cAAA,MAAIM,UAAU,SAAQR,EAAAC,EAAAC,cAAA,cAASmH,EAAGjC,aAClCpF,EAAAC,EAAAC,cAAA,MAAIM,UAAU,OACTjB,EAAK+H,IAAID,EAAGE,UAAW,EAAGF,GAAIrH,EAAAC,EAAAC,cAAA,QAAMM,UAAU,QAAhB,KAC9BjB,EAAK+H,IAAID,EAAGG,WAAY,EAAGH,GAAIrH,EAAAC,EAAAC,cAAA,QAAMM,UAAU,QAAhB,KAC/BjB,EAAK+H,IAAID,EAAGI,UAAW,EAAGJ,GAAIrH,EAAAC,EAAAC,cAAA,QAAMM,UAAU,QAAhB,KAC9BjB,EAAK+H,IAAID,EAAGK,WAAY,EAAGL,WAnBxD,CAAA9J,IAAA,iBAAAC,MAAA,SA0BmB6J,GACX,OAAOrH,EAAAC,EAAAC,cAAA,SAAOM,UAAU,cAChBR,EAAAC,EAAAC,cAAA,aACIF,EAAAC,EAAAC,cAAA,UACIF,EAAAC,EAAAC,cAAA,MAAIM,UAAU,iBAAiB6G,EAAGE,WAClCvH,EAAAC,EAAAC,cAAA,MAAIM,UAAU,kBAAkB6G,EAAGG,YACnCxH,EAAAC,EAAAC,cAAA,MAAIM,UAAU,iBAAiB6G,EAAGI,WAClCzH,EAAAC,EAAAC,cAAA,MAAIM,UAAU,kBAAkB6G,EAAGK,cAG3C1H,EAAAC,EAAAC,cAAA,aACIF,EAAAC,EAAAC,cAAA,UACIF,EAAAC,EAAAC,cAAA,MAAIM,UAAU,aAAatD,KAAKoK,IAAID,EAAGE,UAAW,EAAGF,IACrDrH,EAAAC,EAAAC,cAAA,MAAIM,UAAU,cAActD,KAAKoK,IAAID,EAAGG,WAAY,EAAGH,IACvDrH,EAAAC,EAAAC,cAAA,MAAIM,UAAU,aAAatD,KAAKoK,IAAID,EAAGI,UAAW,EAAGJ,IACrDrH,EAAAC,EAAAC,cAAA,MAAIM,UAAU,cAActD,KAAKoK,IAAID,EAAGK,WAAY,EAAGL,SAzC/E,CAAA9J,IAAA,MAAAC,MAAA,SAoDQA,EAAemK,EAA0BN,GAAe,IAgBnDnC,EAhBmDnF,EAAA7C,KACxD,OAAO8C,EAAAC,EAAAC,cAAC0H,EAAD,CACH1B,cAcChB,EAdiB1H,EAenBwH,EAAUM,QAAQN,EAAUC,aAAaC,EAAK,OAAQ,EAAG,MAdxD3H,IAAKoK,EACLhD,gBAAgB,EAChBoB,eAAe,EACfvF,UAAS,SAAA5C,OAAW+J,GACpB3B,UAAW,SAAA7H,GAAC,OAAI4B,EAAK8H,aAAa1J,EAAEgI,gBAAiBwB,EAAaN,QA3D9E,CAAA9J,IAAA,eAAAC,MAAA,SA8DiB0I,EAAsB4B,EAAqBT,GACpDA,EAAGU,SAASD,EAAQE,SAAS9B,EAAc,IAC3ChJ,KAAK+K,kBAhEbnB,EAAA,CAAmC3F,IAAMC,WCFnC8G,EAAkB,CACpBC,MAAO,SAAStK,GAAwD,IAAA0B,EAAArC,KAE9DkL,EAAUlL,KAAKmL,UAAUxK,GACzByK,EAAgBF,EAAQnJ,OAAO,SAAAsJ,GAAC,OAAiB,MAAbA,EAAEH,UACtCI,EAAkBJ,EAAQnJ,OAAO,SAAAsJ,GAAC,OAAiB,MAAbA,EAAEH,UAE9C,GAA2B,GAAxBE,EAAc1H,OACb,OAAO,KAEX,GAAG4H,EAAgB5H,OAAS,EACpB,OAAO,IAAI6H,EAAJ,YAAA7K,OAA6B4K,EAAgBpG,IAAI,SAAAsG,GAAC,OAAIA,EAAE7K,QAAO8H,KAAK,KAApE,6EAGf,IAAMgD,EAAgBP,EAAQhG,IAAI,SAAAmG,GAAC,OAAIhJ,EAAKqJ,YAAYL,EAAEH,QAAUG,EAAE1K,SAChEgL,EAAgBF,EAAc1J,OAAO,SAAA6J,GAAC,OAAIA,aAAaL,IAE7D,OAAGI,EAAcjI,OAAS,EACfiI,EAAc,GAGlBF,GAIXN,UAzBoB,SAyBVxK,GAEN,OAAOA,EACH4E,QAAQ,WAAY,KACfO,MAAM,KACN/D,OAAO,SAAAgE,GAAC,OAAIA,EAAErC,OAAO,IACrBwB,IAAI,SAAAa,GACD,IACMmF,EADY,mEACQW,KAAK9F,GAE/B,OAAc,MAAXmF,GAAsC,IAAnBA,EAAQxH,OACnB,CAACwH,QAAS,KAAMvK,MAAOoF,GAE3B,CAACmF,UAASvK,MAAOoF,MAIxC2F,YA1CoB,SA0CRR,EAA2BvK,GACnC,IAAMmL,EAAU,SAACC,GAAD,OAAeA,EAAI,GAAKA,EAAI,KAEtCC,EAAQlB,SAASI,EAAQ,IACzBe,EAASnB,SAASI,EAAQ,IAC1BgB,EAAQpB,SAASI,EAAQ,IACzBiB,EAASrB,SAASI,EAAQ,IAEhC,GAAGY,EAAQE,IAAUF,EAAQG,IAAWH,EAAQI,IAAUJ,EAAQK,GAC9D,OAAO,IAAIZ,EAAJ,GAAA7K,OAAoBC,EAApB,uEAEX,IAAMyL,EAAY,IAAIC,EAAUL,EAAOC,EAAQC,EAAOC,GAEtD,GAAGjB,EAAQ,GAAI,CACX,IAAMoB,EAAWpB,EAAQ,GAAGqB,OAAO,GAC7BC,EAAW1B,SAASwB,GAE1B,OAAGE,EAAW,GACH,IAAIjB,EAAJ,wBAAA7K,OAAyCC,EAAzC,qBAGJ,IAAI8L,EAAwBL,EAAWI,GAGlD,OAAOJ,IAIFb,EAET,SAAAA,EAAYmB,GAAkB9M,OAAAG,EAAA,EAAAH,CAAAI,KAAAuL,GAAAvL,KAD9B6H,kBAC6B,EACzB7H,KAAK6H,aAAe6E,GAIfD,EAAb,WAII,SAAAA,EAAYL,EAAuBI,GAAoB5M,OAAAG,EAAA,EAAAH,CAAAI,KAAAyM,GAAAzM,KAHvDwM,cAGsD,EAAAxM,KAFtDoM,eAEsD,EAClDpM,KAAKoM,UAAYA,EACjBpM,KAAKwM,SAAWA,EANxB,OAAA5M,OAAAQ,EAAA,EAAAR,CAAA6M,EAAA,EAAApM,IAAA,WAAAC,MAAA,WAUQ,SAAAI,OAAUV,KAAKoM,UAAUlE,WAAzB,KAAAxH,OAAuCV,KAAKwM,YAVpD,CAAAnM,IAAA,qBAAAC,MAAA,WAeQ,IAAMqM,EAAO,SAACxD,GAAD,OAAkB,KAAM,EAAEA,EAAM,KAE7C,OAAGnJ,KAAKwM,UAAY,EACT,IAAIH,EAAUM,EAAK3M,KAAKwM,UAAW,EAAG,EAAG,GAE5CxM,KAAKwM,UAAY,GACd,IAAIH,EAAU,IAAKM,EAAK3M,KAAKwM,SAAS,GAAI,EAAG,GAEhDxM,KAAKwM,UAAY,GACd,IAAIH,EAAU,IAAK,IAAKM,EAAK3M,KAAKwM,SAAS,IAAK,GAGhD,IAAIH,EAAU,IAAK,IAAK,IAAKM,EAAK3M,KAAKwM,SAAS,SA3BnEC,EAAA,GAgCaJ,EAAb,WAOI,SAAAA,EAAYhC,EAAoBC,EAAoBC,EAAoBC,GAAqB5K,OAAAG,EAAA,EAAAH,CAAAI,KAAAqM,GAAArM,KAL7FqK,eAK4F,EAAArK,KAJ5FsK,gBAI4F,EAAAtK,KAH5FuK,eAG4F,EAAAvK,KAF5FwK,gBAE4F,EACxFxK,KAAKqK,UAAYA,EACjBrK,KAAKsK,WAAaA,EAClBtK,KAAKuK,UAAYA,EACjBvK,KAAKwK,WAAaA,EAX1B,OAAA5K,OAAAQ,EAAA,EAAAR,CAAAyM,EAAA,EAAAhM,IAAA,WAAAC,MAAA,WAeQ,SAAAI,OAAUV,KAAKqK,UAAf,KAAA3J,OAA4BV,KAAKsK,WAAjC,KAAA5J,OAA+CV,KAAKuK,UAApD,KAAA7J,OAAiEV,KAAKwK,cAf9E,CAAAnK,IAAA,WAAAC,MAAA,SAkBasM,EAAoBtM,GACzB,OAAOsM,GACH,KAAK,EACD5M,KAAKqK,UAAY/J,EACjB,MACJ,KAAK,EACDN,KAAKsK,WAAahK,EAClB,MACJ,KAAK,EACDN,KAAKuK,UAAYjK,EACjB,MACJ,KAAK,EACDN,KAAKwK,WAAalK,OA9BlC+L,EAAA,GCtEeQ,EAtCa,CACxBC,MAAO,SAAShI,EAAoBzD,GAGhCA,EAAI0L,QAAQ,CACRxL,UAAW,SAACZ,GAAD,OAAkD,MAAhCqK,EAAgBC,MAAMtK,IACnDa,OAAQ,SAASgI,GACb,IAAIwD,EAAShC,EAAgBC,MAAMzB,EAAE7I,OAErC,GAAa,MAAVqM,EAGH,GAAGA,aAAkBzB,EACjBzG,EAASmI,iBAAiBzD,EAAE7I,MAAOmC,EAAAC,EAAAC,cAACkK,EAAD,CAAiBrF,aAAcmF,EAAOnF,oBAD7E,CAKA,IAAMmC,EAA4B,GAEjCgD,EAA4BhH,QAAQ,SAAAa,GAC9BA,aAAa4F,GAEZzC,EAAYvI,KAAKoF,EAAEuF,WACnBpC,EAAYvI,KAAKoF,EAAEsG,uBAEftG,aAAawF,GACjBrC,EAAYvI,KAAKoF,KAIzB/B,EAASmI,iBAAiBzD,EAAE7I,MAAOmC,EAAAC,EAAAC,cAACoK,EAAD,CAAepD,YAAaA,SAIvExJ,IAAIC,wBCvCS4M,aAKjB,SAAAA,EAAYC,EAA0BC,GAA4B3N,OAAAG,EAAA,EAAAH,CAAAI,KAAAqN,GAAArN,KAJlEuN,aAIiE,EAAAvN,KAHjEsN,sBAGiE,EAAAtN,KAFjEwN,mBAEiE,EAC7DxN,KAAKsN,iBAAmBA,EACxBtN,KAAKuN,QAAUA,EACfvN,KAAKwN,cAAgBD,EAAQrI,IAAI,SAAA6G,GAAC,OAAIA,EAAE0B,eAAcC,OAAO,SAAC3B,EAAIvC,GAAL,OAAWuC,GAAKvC,EAAIuC,EAAIvC,GAAG,0DAIxF,OAAOxJ,KAAKuN,QAAQrI,IAAI,SAAA6G,GAAC,OAAIA,EAAEzL,MAAM4H,aAAYO,KAAK,cCbzCkF,EAKjB,SAAAA,EAAYL,EAA0BM,GAAqChO,OAAAG,EAAA,EAAAH,CAAAI,KAAA2N,GAAA3N,KAH3EsN,sBAG0E,EAAAtN,KAF1E6N,qBAE0E,EACtE7N,KAAKsN,iBAAmBA,EACxBtN,KAAK6N,gBAAkBD,GCOzBE,aAEF,SAAAA,IAAelO,OAAAG,EAAA,EAAAH,CAAAI,KAAA8N,GAAA9N,KADf+N,eACc,EACV/N,KAAK+N,UAAY,wDAGXpN,GAGN,IAFA,IAAIqN,EAAUrN,EAAM4E,QAAQ,YAAa,IACrCJ,EAAInF,KAAK+N,UAAUrK,OAAO,EACzByB,GAAG,EAAEA,IACN,IAA4C,IAAzCnF,KAAK+N,UAAU5I,GAAG8I,UAAUD,GAC3B,OAAO,EAGf,OAAO,gCAGJrN,GAIH,IAHA,IACsCuN,EADlCF,EAAUrN,EAAM4E,QAAQ,YAAa,IACrCJ,EAAI,EAAGgJ,EAAInO,KAAK+N,UAAUrK,OAEzByB,EAAEgJ,EAAEhJ,IAGL,GAAiC,IAFjC+I,EAAUlO,KAAK+N,UAAU5I,IAEd8I,UAAUD,GACjB,OAAOE,EAAQE,OAAOJ,GAI9B,OAAO,0CAGGrN,GACV,OAAO0N,IAAepD,MAAMtK,yCAGjBiK,EAAiB0D,GAC5B,OAAOD,IAAeD,OAAOxD,EAAQ0D,sCAG7BJ,GACVlO,KAAK+N,UAAUtM,KAAKyM,YAIpBK,aAIF,SAAAA,IAAe3O,OAAAG,EAAA,EAAAH,CAAAI,KAAAuO,GAAAvO,KAFfwO,WAEc,EACVxO,KAAKwO,MAAQ,8FAGN7N,GACP,OAAOX,KAAKwO,MAAMC,KAAK9N,kCAGnBA,GACJ,IAAIuK,EAAUlL,KAAKwO,MAAM3C,KAAKlL,GAC1B4M,EAAU,GASd,OARI5M,EAAQuK,EAAQvK,OAEdmF,MAAM,KAAKE,QAAQ,SAAC+F,GACnBA,EAAEnL,OAAO8C,OAAS,GACjB6J,EAAQ9L,KAAK4M,IAAepD,MAAMc,EAAEnL,WAIrC,IAAIyM,EAAwB1M,EAAO4M,YAI5CmB,aAIF,SAAAA,IAAe9O,OAAAG,EAAA,EAAAH,CAAAI,KAAA0O,GAAA1O,KAHf2O,eAGc,EAAA3O,KAFdwO,WAEc,EACVxO,KAAK2O,UAAY,mDACjB3O,KAAKwO,MAAQ,uGAGN7N,GAEP,OADAX,KAAK2O,UAAUC,UAAY,EACpB5O,KAAK2O,UAAUF,KAAKzO,KAAK6O,gBAAgBlO,mCAG5CA,GAIJ,IAHA,IAAI0K,EAAGyD,EAAmC,GACtCC,EAAmB/O,KAAK6O,gBAAgBlO,GAEM,OAA1C0K,EAAIrL,KAAKwO,MAAM3C,KAAKkD,KACxBD,EAASrN,KAAKzB,KAAKgP,WAAW3D,IAGlC,OAAO,IAAIsC,EAA2BoB,EAAkBD,sCAGhDzD,GACR,IAAI1K,EAAQ0K,EAAE,GACV4D,EAAO5D,EAAE,GACTrD,EAAMqD,EAAE,GAER6D,EAAS,KAQb,OANIA,EADmB,GAApBlH,EAAImH,QAAQ,KACF,IAAIC,IAAkBpH,EAAKqG,IAAepD,MAAMjD,EAAIqH,UAAU,IAAK,KAGnEhB,IAAepD,MAAMjD,GAGvB,MAARiH,EACQC,EAEA,IAAIE,IAAkBzO,EAAOuO,EAA0BD,2CAIrDtO,GACb,OAAOA,EAAM4E,QAAQ,OAAO,aAIhC+J,EAAS,IAAIxB,EACjBwB,EAAOC,WAAW,IAAIhB,GACtBe,EAAOC,WAAW,IAAIb,OC5HDc,aAOjB,SAAAA,EAAAC,GAAuE,IAAAC,EAAAD,EAAzDhI,sBAAyD,IAAAiI,KAAAC,EAAAF,EAAjC5G,qBAAiC,IAAA8G,KAAA/P,OAAAG,EAAA,EAAAH,CAAAI,KAAAwP,GAAAxP,KALvEyH,oBAKuE,EAAAzH,KAJvE4P,WAIuE,EAAA5P,KAHvE6P,qBAGuE,EAAA7P,KAFvE6I,mBAEuE,EACnE7I,KAAKyH,eAAiBA,EACtBzH,KAAK4P,MAAQ,GACb5P,KAAK6P,gBAAkB,EACvB7P,KAAK6I,eAAkC,IAAlBA,4DA2DXiH,GACV9P,KAAK6P,gBAAkBE,KAAKC,IAAIF,EAAQG,kBAAmBjQ,KAAK6P,iBAChE7P,KAAK4P,MAAMnO,KAAK,CACZwN,KAAK,GACL1F,IAAK,GACL2G,eAAgBJ,EAChBjH,cAAe7I,KAAK6I,cACpBsH,MAAO,qDAISC,GACpB,IAAMC,EAAeD,EAAWE,gBAAkBF,EAAWG,WAAaH,EAAWI,uBACrFxQ,KAAK6P,gBAAkBE,KAAKC,IAAIK,EAAaJ,kBAAmBjQ,KAAK6P,iBAErE7P,KAAK4P,MAAMnO,KAAK,CACZwN,KAAMmB,EAAWnB,KACjB1F,IAAK,GACL4G,MAAOnQ,KAAKyQ,SAASJ,GACrBH,eAAgBE,EAAWN,QAC3BjH,cAAe7I,KAAK6I,oEAIAuH,EAAgCM,GACxD1Q,KAAK6P,gBAAkBE,KAAKC,IAAIU,EAAcT,kBAAmBjQ,KAAK6P,iBACtE7P,KAAK4P,MAAMnO,KAAK,CACZwN,KAAMmB,EAAWnB,KAAOmB,EAAWN,QAAQ5H,WAC3CqB,IAAK,oBACL2G,eAAgBQ,EAChB7H,eAAe,EACfsH,MAAO,oDAIQL,GACnB9P,KAAK6P,gBAAkBE,KAAKC,IAAIF,EAAQG,kBAAmBjQ,KAAK6P,iBAChE7P,KAAK4P,MAAMnO,KAAK,CACZwN,KAAK,IACL1F,IAAK,oBACL2G,eAAgBJ,EAChBjH,eAAe,EACfsH,MAAO,sCAILQ,GAEN,MAAc,OAAXA,EAAGrC,KACKqC,EAAGzI,SAAS,OAGhByI,EAAGzI,wDA5GY0I,EAAgCC,GACtD,IAAIC,EAAQ,IAAItB,EAA2BqB,GAG3C,OAFAD,EAAKrD,QAAQvH,QAAQ,SAAA2K,GAAE,OAAIG,EAAMC,cAAcJ,KAC/CG,EAAMjB,gBAAkBL,EAA2BwB,gBAAgBF,EAAMjB,gBAAiBiB,EAAMrJ,gBACzFqJ,wCAGWF,EAAmCC,GAE5CD,EAAK/C,gBAAgB,GAM9B,IANA,IAEIoD,EADA9L,EAAI,EAAG+L,EAAMN,EAAK/C,gBAAgBnK,OAC9B2H,EAAI,IAAImE,EAA2BqB,GAEvCM,EAA+B,KAE7BhM,EAAE+L,EAAI/L,IAER,IADA8L,EAAKL,EAAK/C,gBAAgB1I,cACTkJ,IACbhD,EAAE0F,cAAcE,GAChBE,EAAOF,MAFX,CAMA,IAAIG,EAAKH,EAGT,GAAGG,EAAGd,gBAAiB,CACnBjF,EAAEgG,wBAAwBD,GAC1B,IAAIE,EAAYF,EAAGb,WACnBlF,EAAEkG,uBAAuBD,GACzBH,EAAOG,OAEHF,EAAGI,mBACPL,EAAOC,EAAGb,SAASY,GACnB9F,EAAEoG,4BAA4BL,EAAID,KAGlCA,EAAOC,EAAGb,SAASY,GACnB9F,EAAEgG,wBAAwBD,GAC1B/F,EAAEkG,uBAAuBJ,IAKjC,OADA9F,EAAEwE,gBAAkBL,EAA2BwB,gBAAgB3F,EAAEwE,gBAAiBxE,EAAE5D,gBAC7E4D,mCAGM+E,EAA+BS,GAE5C,IAAIxF,EAAI,IAAImE,EAA2BqB,GAIvC,OAHAxF,EAAEgG,wBAAwBjB,GAC1B/E,EAAEkG,uBAAuBnB,EAAWG,YACpClF,EAAEwE,gBAAkBL,EAA2BwB,gBAAgB3F,EAAEwE,gBAAiBxE,EAAE5D,gBAC7E4D,sCAwEQuF,EAAwBnJ,GACvC,GAAGmJ,aAAgBvD,EACf,OAAOmC,EAA2BkC,mBAAmBd,EAAM,CACvDnJ,eAAgBA,EAChBoB,eAAe,IAIvB,GAAG+H,aAAgBjD,EACf,OAAO6B,EAA2BmC,cAAcf,EAAM,CAClDnJ,eAAgBA,EAChBoB,eAAe,IAIvB,MAAM,IAAI1H,MAAM,6DAA+DyP,YA1JlEpB,EA8HVwB,gBAAkB,SAAU7H,EAAe1B,GAC9C,OAAGA,GAAkB0B,EAAO,GAAK,EACzBA,EAAO,EACC,EAGHA,EAAQA,EAAO,EACZ,EAGTA,OCxIMyI,cACjB,SAAAA,EAAYxP,GAA4C,IAAAC,EAAA,OAAAzC,OAAAG,EAAA,EAAAH,CAAAI,KAAA4R,IACpDvP,EAAAzC,OAAA0C,EAAA,EAAA1C,CAAAI,KAAAJ,OAAA2C,EAAA,EAAA3C,CAAAgS,GAAApP,KAAAxC,KAAMoC,KACDyC,MAAQ,GAFuCxC,wEAKpD,IAAIwP,EAAO7R,KAAK8R,UAChB,OAAID,EAIG/O,EAAAC,EAAAC,cAAA,SAAOM,UAAU,cACZR,EAAAC,EAAAC,cAAA,aACS6O,IALV,uCAUkB,IAAAhP,EAAA7C,KACzB8Q,EAAQtB,EAA2BuC,YAAY/R,KAAKoC,MAAMgO,WAAYpQ,KAAKoC,MAAMqF,gBAErF,OAAOqJ,EAAMlB,MAAM1K,IAAI,SAAC8M,EAAK7M,GAAN,OACnBrC,EAAAC,EAAAC,cAACiP,EAAD,CACI5R,IAAK8E,EACL8J,KAAM+C,EAAI/C,KACV1F,IAAKyI,EAAIzI,IACTV,cAAemJ,EAAInJ,cACnBqH,eAAgB8B,EAAI9B,eACpBzI,eAAgB5E,EAAKT,MAAMqF,eAC3BoI,gBAAiBiB,EAAMjB,gBACvBqC,aAAc,kBAAMrP,EAAKqP,2DAIjClS,KAAK+K,qBAlC+C9G,IAAMC,WAiD5DiO,cACF,SAAAA,EAAY/P,GAA2B,IAAA6E,EAAA,OAAArH,OAAAG,EAAA,EAAAH,CAAAI,KAAAmS,IACpClL,EAAArH,OAAA0C,EAAA,EAAA1C,CAAAI,KAAAJ,OAAA2C,EAAA,EAAA3C,CAAAuS,GAAA3P,KAAAxC,KAAMoC,KACDyC,MAAQ,CAAEiL,QAAS,MAFY7I,wEAI9B,IAAAmL,EAAApS,KAAAqS,EACiErS,KAAKoC,MAAnE6M,EADHoD,EACGpD,KAAM1F,EADT8I,EACS9I,IAAKsG,EADdwC,EACcxC,gBAAiBpI,EAD/B4K,EAC+B5K,eAAgBoB,EAD/CwJ,EAC+CxJ,cAEpD,OAAO/F,EAAAC,EAAAC,cAAA,MAAIM,UAAWiG,GACVzG,EAAAC,EAAAC,cAAA,MAAIM,UAAU,QAAQ2L,GACtBnM,EAAAC,EAAAC,cAAA,MAAIM,UAAU,SAAStD,KAAKyQ,YAC5B3N,EAAAC,EAAAC,cAAA,MAAIM,UAAU,OACVR,EAAAC,EAAAC,cAAC0H,EAAD,CACIjD,eAAgBA,EAChBuB,aAAclB,EAAUM,QAAQpI,KAAKsS,kBAAmBzC,EAAiB,KACzEhH,cAAeA,EACfC,UAAW,SAAAhF,GAAI,OAAIsO,EAAKG,QAAQzO,OAExChB,EAAAC,EAAAC,cAAA,MAAIM,UAAU,SAAStD,KAAKwS,uDAKxC,OAAOxS,KAAKoC,MAAM8N,eAAeK,WAAWkC,oDAO5C,GAAGzS,KAAKoC,MAAM8N,eAAewC,aAAc,CACvC,IAAMzB,EAAKjR,KAAKoC,MAAM8N,eACtB,OAAOe,EAAGhC,KAAOjP,KAAK2S,eAAe1B,EAAGT,wBAG5C,OAAOxQ,KAAK2S,eAAe3S,KAAKoC,MAAM8N,eAAeM,2DAKrD,OAAGxQ,KAAKoC,MAAM8N,eAAewC,aACd1S,KAAKoC,MAAM8N,eACRK,WAEJrI,WAGPlI,KAAKoC,MAAM8N,eAAeK,WAAWqC,2DAGhCjC,GACZ,OAAOA,EAAGzI,SAAoB,OAAXyI,EAAGrC,KAAgB,MAAQqC,EAAGrC,sCAG5CxK,GAEL,IAAM6M,EAAM3Q,KAAKoC,MAAM8N,eAAeM,uBAC9B5H,EAAwB9E,EAAxB8E,MAEJG,EAF4BjF,EAAjBkF,aAEQlD,MAAM,IAC7BiD,EAAIH,GAAuB,KAAdG,EAAIH,GAAgB,IAAM,IACvC,IAAIwB,EAAMrB,EAAIN,KAAK,IAEfoK,EAAW/H,SAASV,EAAK,GAC7BuG,EAAGmC,SAASD,GAEZ7S,KAAKoC,MAAM8P,sBAlESjO,IAAMC,WC7CnB6O,EAda,CACxBjG,MAAO,SAAShI,EAAoBzD,GAG9BA,EAAI0L,QAAQ,CACVxL,UAAW,SAACZ,GAAD,OAAkB2O,EAAO0D,SAASrS,IAC7Ca,OAAQ,SAASgI,GACb,IAAIoH,EAAOtB,EAAOrE,MAAMzB,EAAE7I,OAC1BmE,EAASmI,iBAAiBzD,EAAE7I,MAAOmC,EAAAC,EAAAC,cAACiQ,EAAD,CAAgC7C,WAAYQ,EAAOnJ,eAAgB3C,EAAS2C,wCCHhHyL,MATf,WAEQ,OAASpQ,EAAAC,EAAAC,cAAA,OAAKM,UAAU,WAAW6P,mBAAiB,QACpCrQ,EAAAC,EAAAC,cAAA,wBAAeF,EAAAC,EAAAC,cAAA,KAAGqB,KAAK,oCAAR,mBAAf,sEACAvB,EAAAC,EAAAC,cAAA,4FAAmFF,EAAAC,EAAAC,cAAA,KAAGqB,KAAK,gDAAR,wBAAnF,gBAAuXvB,EAAAC,EAAAC,cAAA,KAAGqB,KAAK,iCAAR,eAAvX,2CACAvB,EAAAC,EAAAC,cAAA,SAAGF,EAAAC,EAAAC,cAAA,KAAGqB,KAAK,gDAAR,cAAkEvB,EAAAC,EAAAC,cAAA,4BCK9EoQ,MAJf,SAAqBhR,GACjB,OAAOU,EAAAC,EAAAC,cAAA,KAAGqB,KAAK,qBAAqBqD,QAAS,SAAAzG,GAAC,OAAII,EAAIiG,QAAQlF,EAAM2K,SAAW3K,EAAMiR,QAAQjR,EAAMiR,aC+DxFC,MApEf,WAEQ,OAAOxQ,EAAAC,EAAAC,cAAA,OAAKM,UAAU,sBACNR,EAAAC,EAAAC,cAAA,OAAKM,UAAU,mBACXR,EAAAC,EAAAC,cAAA,OAAKM,UAAU,cACXR,EAAAC,EAAAC,cAAA,OAAKM,UAAU,WACXR,EAAAC,EAAAC,cAAA,UAAQM,UAAU,sBAAlB,gCACJR,EAAAC,EAAAC,cAAA,UACIF,EAAAC,EAAAC,cAAA,UAAIF,EAAAC,EAAAC,cAAA,YAAMF,EAAAC,EAAAC,cAACuQ,EAAD,CAAaF,KAAK,aAA5B,sGACAvQ,EAAAC,EAAAC,cAAA,UAAIF,EAAAC,EAAAC,cAAA,YAAMF,EAAAC,EAAAC,cAACuQ,EAAD,CAAaF,KAAK,WAA5B,0EAGJvQ,EAAAC,EAAAC,cAAA,OAAKM,UAAU,WACXR,EAAAC,EAAAC,cAAA,UAAQM,UAAU,uBAAlB,uBACJR,EAAAC,EAAAC,cAAA,UACIF,EAAAC,EAAAC,cAAA,UAAIF,EAAAC,EAAAC,cAAA,YAAMF,EAAAC,EAAAC,cAACuQ,EAAD,CAAaF,KAAK,eAA5B,wGACAvQ,EAAAC,EAAAC,cAAA,UAAIF,EAAAC,EAAAC,cAAA,YAAMF,EAAAC,EAAAC,cAACuQ,EAAD,CAAaF,KAAK,mBAA5B,wDAGJvQ,EAAAC,EAAAC,cAAA,OAAKM,UAAU,WACXR,EAAAC,EAAAC,cAAA,UAAQM,UAAU,uBAAlB,wBACJR,EAAAC,EAAAC,cAAA,UACIF,EAAAC,EAAAC,cAAA,UAAIF,EAAAC,EAAAC,cAAA,YAAMF,EAAAC,EAAAC,cAACuQ,EAAD,CAAaF,KAAK,WAA5B,iCACAvQ,EAAAC,EAAAC,cAAA,UAAIF,EAAAC,EAAAC,cAAA,YAAMF,EAAAC,EAAAC,cAACuQ,EAAD,CAAaF,KAAK,UAA5B,gCACAvQ,EAAAC,EAAAC,cAAA,UAAIF,EAAAC,EAAAC,cAAA,YAAMF,EAAAC,EAAAC,cAACuQ,EAAD,CAAaF,KAAK,cAA5B,sCAGJvQ,EAAAC,EAAAC,cAAA,OAAKM,UAAU,WACXR,EAAAC,EAAAC,cAAA,UAAQM,UAAU,uBAAlB,kBACJR,EAAAC,EAAAC,cAAA,UACIF,EAAAC,EAAAC,cAAA,UAAIF,EAAAC,EAAAC,cAAA,YAAMF,EAAAC,EAAAC,cAACuQ,EAAD,CAAaF,KAAK,WAA5B,6BACAvQ,EAAAC,EAAAC,cAAA,UAAIF,EAAAC,EAAAC,cAAA,YAAMF,EAAAC,EAAAC,cAACuQ,EAAD,CAAaF,KAAK,UAA5B,6BACAvQ,EAAAC,EAAAC,cAAA,UAAIF,EAAAC,EAAAC,cAAA,YAAMF,EAAAC,EAAAC,cAACuQ,EAAD,CAAaF,KAAK,cAA5B,6BACAvQ,EAAAC,EAAAC,cAAA,UAAIF,EAAAC,EAAAC,cAAA,YAAMF,EAAAC,EAAAC,cAACuQ,EAAD,CAAaF,KAAK,QAA5B,uCACAvQ,EAAAC,EAAAC,cAAA,UAAIF,EAAAC,EAAAC,cAAA,YAAMF,EAAAC,EAAAC,cAACuQ,EAAD,CAAaF,KAAK,WAA5B,yBACAvQ,EAAAC,EAAAC,cAAA,UAAIF,EAAAC,EAAAC,cAAA,YAAMF,EAAAC,EAAAC,cAACuQ,EAAD,CAAaF,KAAK,UAA5B,oBAAwDvQ,EAAAC,EAAAC,cAAA,KAAGqB,KAAK,sFAAR,MAAxD,YAIRvB,EAAAC,EAAAC,cAAA,OAAKM,UAAU,eACXR,EAAAC,EAAAC,cAAA,OAAKM,UAAU,WACXR,EAAAC,EAAAC,cAAA,UAAQM,UAAU,sBAAlB,gCAA4ER,EAAAC,EAAAC,cAAA,WAC5EF,EAAAC,EAAAC,cAAA,aACIF,EAAAC,EAAAC,cAAA,KAAGqB,KAAK,8FAAR,wDAIJvB,EAAAC,EAAAC,cAAA,UACIF,EAAAC,EAAAC,cAAA,UAAIF,EAAAC,EAAAC,cAAA,iBAAJ,uBACAF,EAAAC,EAAAC,cAAA,UAAIF,EAAAC,EAAAC,cAAA,iBAAJ,gCACAF,EAAAC,EAAAC,cAAA,UAAIF,EAAAC,EAAAC,cAAA,iBAAJ,iCACAF,EAAAC,EAAAC,cAAA,UAAIF,EAAAC,EAAAC,cAAA,iBAAJ,uBACAF,EAAAC,EAAAC,cAAA,UAAIF,EAAAC,EAAAC,cAAA,kBAAJ,sBACAF,EAAAC,EAAAC,cAAA,UAAIF,EAAAC,EAAAC,cAAA,kBAAJ,wCACAF,EAAAC,EAAAC,cAAA,UAAIF,EAAAC,EAAAC,cAAA,mBAAJ,mCAGRF,EAAAC,EAAAC,cAAA,OAAKM,UAAU,WACXR,EAAAC,EAAAC,cAAA,UAAQM,UAAU,uBAAlB,OACAR,EAAAC,EAAAC,cAAA,sEAC8DF,EAAAC,EAAAC,cAACuQ,EAAD,CAAaF,KAAK,QADhF,2BACgHvQ,EAAAC,EAAAC,cAACuQ,EAAD,CAAaF,KAAK,kBADlI,UCzDrBG,MAJf,SAAwBpR,GACpB,OAAOU,EAAAC,EAAAC,cAAA,SAAIZ,EAAMiR,aCkCNI,OAjCf,WAEQ,OAAO3Q,EAAAC,EAAAC,cAAA,OAAKM,UAAU,aACVR,EAAAC,EAAAC,cAAA,uBACAF,EAAAC,EAAAC,cAAA,OAAKM,UAAU,iBACXR,EAAAC,EAAAC,cAAA,SAAGF,EAAAC,EAAAC,cAAA,QAAMM,UAAU,aAAhB,kBAAH,IAAqDR,EAAAC,EAAAC,cAAA,WAArD,4EAGAF,EAAAC,EAAAC,cAAA,UACIF,EAAAC,EAAAC,cAAA,+BAAsBF,EAAAC,EAAAC,cAACuQ,EAAD,CAAaF,KAAK,eACxCvQ,EAAAC,EAAAC,cAAA,6DAAoDF,EAAAC,EAAAC,cAACuQ,EAAD,CAAaF,KAAK,gCAI9EvQ,EAAAC,EAAAC,cAAA,OAAKM,UAAU,QACXR,EAAAC,EAAAC,cAAA,SAAGF,EAAAC,EAAAC,cAAA,QAAMM,UAAU,aAAhB,iBAAH,IAAoDR,EAAAC,EAAAC,cAAA,WAApD,SACMF,EAAAC,EAAAC,cAAA,YAAMF,EAAAC,EAAAC,cAACuQ,EAAD,CAAaF,KAAK,UAD9B,8CAGJvQ,EAAAC,EAAAC,cAAA,OAAKM,UAAU,QACXR,EAAAC,EAAAC,cAAA,SAAGF,EAAAC,EAAAC,cAAA,QAAMM,UAAU,aAAhB,kBAAH,IAAqDR,EAAAC,EAAAC,cAAA,WAArD,iDAC8CF,EAAAC,EAAAC,cAAA,YAAMF,EAAAC,EAAAC,cAACuQ,EAAD,CAAaF,KAAK,aADtE,QAGJvQ,EAAAC,EAAAC,cAAA,OAAKM,UAAU,QACXR,EAAAC,EAAAC,cAAA,SAAGF,EAAAC,EAAAC,cAAA,QAAMM,UAAU,QAAhB,kBAAH,IAAgDR,EAAAC,EAAAC,cAAA,WAAhD,OACIF,EAAAC,EAAAC,cAACuQ,EAAD,CAAaF,KAAK,aADtB,mBAGJvQ,EAAAC,EAAAC,cAAA,OAAKM,UAAU,QACXR,EAAAC,EAAAC,cAAA,SAAGF,EAAAC,EAAAC,cAAA,QAAMM,UAAU,QAAhB,kBAAH,IAAgDR,EAAAC,EAAAC,cAAA,WAAhD,oEACiEF,EAAAC,EAAAC,cAAA,KAAGqB,KAAK,6BAAR,6BADjE,kEACiMvB,EAAAC,EAAAC,cAAA,KAAGqB,KAAK,uDAAR,kBADjM,uBCITqP,GAzBK,CAChB5G,MAAO,SAAShI,EAAoBzD,GAEhCA,EAAIpB,UAAY6E,EAAS7E,UACzB6E,EAAS4B,SAAS,kBAAMrF,EAAIpB,UAAY6E,EAAS7E,YAEjDoB,EAAI0L,QAAQ,OAAQ,SAACvD,GAAD,OAAqB1E,EAASmI,iBAAiBzD,EAAE7I,MAAOmC,EAAAC,EAAAC,cAAC2Q,EAAD,SAC5EtS,EAAI0L,QAAQ,QAAS,kBAAMjI,EAAS8O,wBACpCvS,EAAI0L,QAAQ,KAAM,kBAAMjI,EAASkC,yBACjC3F,EAAI0L,QAAQ,OAAQ,kBAAMjI,EAAS+O,WAAW,UAC9CxS,EAAI0L,QAAQ,QAAS,kBAAMjI,EAAS+O,WAAW,WAC/CxS,EAAI0L,QAAQ,WAAY,kBAAMjI,EAAS+O,WAAW,cAClDxS,EAAI0L,QAAQ,QAAS,SAACvD,GAAD,OAAqB1E,EAASmI,iBAAiBzD,EAAE7I,MAAOmC,EAAAC,EAAAC,cAAC8Q,EAAD,SAC7EzS,EAAI0L,QAAQ,WAAY,SAACvD,GAAD,OAAqB1E,EAASmI,iBAAiBzD,EAAE7I,MAAOmC,EAAAC,EAAAC,cAAC+Q,GAAD,SAChF1S,EAAI0L,QAAQ,OAAQ,SAACvD,GAAD,OAAqB1E,EAASmI,iBAAiBzD,EAAE7I,MAAOmC,EAAAC,EAAAC,cAACgR,EAAD,CAAgBX,KAAMY,WAClG5S,EAAI0L,QAAQ,WAAY,cACxB1L,EAAI0L,QAAQ,SAAU,SAACvD,GACnB1E,EAASoP,kBACTpP,EAASmI,iBAAiBzD,EAAE7I,MAAOmC,EAAAC,EAAAC,cAACgR,EAAD,CAAgBX,KAAI,eAAA3S,OAAiBoE,EAAS7E,gBAGrFoB,EAAI8S,QAAQ,SAACxT,EAAesB,GAAhB,OAA+B6C,EAASmI,iBAAiBtM,EAAOmC,EAAAC,EAAAC,cAACkK,EAAD,CAAiBrF,aAAc5F,EAAIiG,kBC7BjHkM,GAAc,EAiBCC,cAYjB,SAAAA,EAAYC,EAAgCvP,GAAcnF,OAAAG,EAAA,EAAAH,CAAAI,KAAAqU,GAAArU,KAV1DuU,QAAkBH,GAUuCpU,KATzDyH,oBASyD,EAAAzH,KARzDC,WAAqB,EAQoCD,KAPzDkH,aAOyD,EAAAlH,KANzDwU,oBAMyD,EAAAxU,KALzD4G,oBAKyD,EAAA5G,KAJzDyU,sBAIyD,EAAAzU,KAHzD0U,mBAGyD,EAAA1U,KAFzD+E,SAEyD,EACrD/E,KAAK4G,eAAiB,GACtB5G,KAAKwU,eAAiB,GACtBxU,KAAKkH,QAAUoN,EAAYpN,SAAW,WACtClH,KAAK+E,IAAMA,EAEX/E,KAAKyH,eAAiB6M,EAAY7M,iBAAkB,EACpDzH,KAAKyU,iBAAmBH,EAAYC,SAAW,GAC/CvU,KAAK0U,cAAuC,MAAvBJ,EAAYC,SAAmBvU,KAAKuU,QAAUvU,KAAKyU,iBACxEzU,KAAKC,UAAoB,SAAR8E,IAA4C,IAA1BuP,EAAYrU,uEAGlCU,EAAgBoG,GAC7B,IAAM1G,EA6CH0P,KAAK4E,KAAmB,IAAd5E,KAAK6E,UAAqBC,KAAKC,MA5C5C9U,KAAK4G,eAAehD,QAAQ,CAACvD,MAAKM,QAAOoG,SACzCvG,IAAIC,MAAJ,yBAAAC,OAAmCC,IACnCX,KAAK+U,+DAIL/U,KAAK4G,eAAiB,GACtB5G,KAAK+U,gEAIL/U,KAAKyH,gBAAkBzH,KAAKyH,eAC5BzH,KAAK+U,kDAGAjU,GACLd,KAAKwU,eAAe/S,KAAKX,4CAGZ,IAAAuB,EAAArC,KACbA,KAAKwU,eAAexO,QAAQ,SAAA5E,GAAC,OAAIA,EAAEiB,wCAG5B2S,GACNhV,KAAKkH,QAAU8N,EACfhV,KAAK+U,2DAIN/U,KAAKC,WAAaD,KAAKC,UACvBD,KAAK+U,0DAIL,MAAO,CACHtN,eAAgBzH,KAAKyH,eACrBP,QAASlH,KAAKkH,QACdqN,QAASvU,KAAKuU,QACdtU,UAAWD,KAAKC,oBCjF5B,IAEegV,GAAA,CACXC,iBADW,WAEP,IAAIC,EAAO7Q,OAAOU,aAAaC,QAJtB,YAKT,IAAIkQ,EACA,MAAO,GAGX,IACI,OAAOvT,KAAKqJ,MAAMkK,GAEtB,MAAMlE,GAEF,OADAvP,QAAQQ,MAAM,gDAAkDiT,EAAMlE,GAC/D,KAIfmE,MAhBW,SAgBJtQ,GAAoB,IAAAzC,EAAArC,KACvB8E,EAAS4B,SAAS,kBAAMrE,EAAKiS,YAAYxP,MAG7CwP,YApBW,SAoBCxP,GACRE,aAAaqQ,QAvBJ,WAuBsBzT,KAAKC,UAAUiD,EAASwQ,qBChBhDC,OAPf,SAAgCnT,GAE5B,OAAOU,EAAAC,EAAAC,cAAA,OAAKM,UAAU,UACFR,EAAAC,EAAAC,cAAA,OAAKM,UAAU,SAAf,uDAAgER,EAAAC,EAAAC,cAAA,cAASZ,EAAMzB,OAA/E,SCOlB6U,GCDN,WACI,IAAMzQ,EAA+B,mBAAzBT,OAAOC,SAASkR,KAA4B,OAAS,SAwCrE,SAAqB1Q,GACP,QAAPA,GACCvE,IAAIkV,SAAS,SACblV,IAAIC,MAAJ,mCAAAC,OAA6CqE,KAE7CvE,IAAIkV,SAAS,QA3CjBC,CAAY5Q,GAEZ,IAAMD,EAUV,SAAwBC,GACpB,IAAI6Q,EAAYX,GAAcC,mBACxBpQ,EAAW,IAAIuP,GAASuB,EAAW7Q,GAGzC,OAFAkQ,GAAcG,MAAMtQ,GACpBtE,IAAIC,MAAM,uBAAwBqE,GAC3BA,EAfU+Q,CAAe9Q,GAGhC,MAAO,CACHD,WACAgR,gBAaR,SAA4BhR,GACxB,IAAIiR,EAAW3Q,EAAKO,QAAQrB,OAAOC,SAASa,MAExC0Q,EAAkB,CAAC,OAAQ,0BAA2B,QAAQ,oBAYlE,OAVGhR,EAAS4P,gBACRoB,EAAkB,CAAC,aAGpBC,EAASrS,OAAS,IACjBoS,EAAkBC,GAGtBvV,IAAIC,MAAM,6BAA8BqV,GAEjCA,EAhCiBE,CAAmBlR,IDL/BmR,GAiBZvC,GAAY5G,MAAM0I,GAAQ1Q,SAAUzD,GACpCwL,EAAoBC,MAAM0I,GAAQ1Q,SAAUzD,GAC5C0R,EAAoBjG,MAAM0I,GAAQ1Q,SAAUzD,GAG5CA,EAAI0L,QAAQ,CACRxL,UAAW,kBAAM,GACjBC,OAAQ,SAACgI,GAAD,OAAqBgM,GAAQ1Q,SAASmI,iBAAiBzD,EAAE7I,MAAOmC,EAAAC,EAAAC,cAACkT,GAAD,CAAwBvV,MAAO6I,EAAE7I,YApBjH,IAAIwV,GAAOrT,EAAAC,EAAAC,cAACoT,EAAD,CAAStR,SAAU0Q,GAAQ1Q,WACtCuR,IAASC,OAAOH,GAAMI,SAASC,eAAe,SAO1ChW,IAAIC,MAAM,6BAA8B+U,GAAQM,iBAChDN,GAAQM,gBAAgB9P,QAAQ3E,EAAIiG,QAAQmP,KAAKpV,IAJrDb,IAAIC,MAAM,6DEDNiW,EAAgC,CAChC,CAAElI,MAnBe,UAmBMmI,MAAO,GAAIrI,KAAM,MAAOsI,OAAQ,MACvD,CAAEpI,MAnBW,oBAmBMmI,MAAO,GAAIrI,KAAM,MAAOsI,OAAO,OAClD,CAAEpI,MAnBW,gBAmBMmI,MAAO,EAAGrI,KAAM,MAAOsI,OAAO,QA0C/CC,EAAe,eAnCjB,SAAAC,EAAYC,GACXnX,OAAAG,EAAA,EAAAH,CAAAI,KAAA8W,GAAA9W,KAHD+W,aAGA,EACI/W,KAAK+W,QAAUA,oDAGZpW,GAAsC,IAAA0B,EAAArC,KACzC,OAAOA,KAAK+W,QAAQ7R,IAAI,SAAA0G,GAAC,OAAIvJ,EAAK2U,YAAYpL,EAAGjL,KAAQ+M,OAAO,SAAClE,EAAGuC,GAAJ,OAAUvC,GAAKuC,0CAGpEpL,GACX,IAAI0K,EAAI1K,EAAMsW,MAAMtW,GAEpB,OAAQ,MAAL0K,GAAyB,GAAZA,EAAE3H,OACP,KAGJ2H,EAAE,uCAGDiE,EAAuB/O,GAE/B,OAAI+O,EAAOd,MAAMC,KAAKlO,GAMd,CACJD,MAHQwK,SAASvK,EAASgF,QAAQ+J,EAAOsH,OAAQ,IAAKtH,EAAOqH,OAI7DrI,KAAMgB,EAAOhB,KACb3N,MAAOJ,GARA,cAaE,CAAiBmW,mCC9DtC,IAAIQ,EAAoB,EAGH7I,aAOjB,SAAAA,EAAY/N,EAAgBgO,GAAoB1O,OAAAG,EAAA,EAAAH,CAAAI,KAAAqO,GAAArO,KANhDiD,QAM+C,EAAAjD,KAL/CM,WAK+C,EAAAN,KAJ/CsO,UAI+C,EAAAtO,KAH/CyN,kBAG+C,EAAAzN,KAF/C0S,kBAE+C,EAC3C1S,KAAKiD,GAAKiU,IACVlX,KAAKM,MAAQA,EACbN,KAAKsO,KAAOA,GAAQ,MACpBtO,KAAKyN,aAAeY,EAAe8I,aAAanX,KAAKM,OACrDN,KAAK0S,cAAe,gEAIpB,OAAG1S,KAAKM,MAAQ,EACL,GAEJyP,KAAKqH,MAAMrH,KAAKvP,IAAIR,KAAKM,OAASyP,KAAKvP,IAAI,IAAM,uCAG/CyH,GACT,OAAOA,GAAQjI,KAAKsO,MAChB,IAAK,MACL,IAAK,MACD,MAAO,MACX,IAAK,MAAO,MAAO,MACnB,QAAU,MAAM,IAAInN,MAAM8G,EAAO,sEAIhCqG,GACL,OAAOD,EAAegJ,aAAarX,KAAKM,MAAOgO,GAAQtO,KAAKsO,kDAI5D,OAAOtO,KAAKkI,SAASlI,KAAKsX,0DAI1B,OAAOtX,KAAKkI,SAAS,6CAIrB,OAAOlI,KAAKkI,SAAS,gDAIrB,OAAOlI,KAAKkI,SAAS,wCAGhB5H,GACLN,KAAKM,MAAQA,EACbN,KAAKyN,aAAeY,EAAe8I,aAAa7W,sCAIhD,OAAON,oDAIP,OAAOA,4CAGSgI,GAChB,OAAO+H,KAAKqH,MAAMrH,KAAKvP,IAAIwH,GAAO+H,KAAKvP,IAAI,IAAM,kCAGtCyH,GACX,OAAQA,GACJ,IAAK,MAAO,OAAO,EACnB,IAAK,MAAO,OAAO,GACnB,IAAK,MAAO,OAAO,mCAIb3H,EAAgBgO,GAC1B,OAAO,IAAID,EAAe/N,EAAOgO,GAAQ,qCAGhC3N,GAET,IAAIuO,EAAS2H,EAAa5L,MAAMtK,GAEhC,IAAIuO,EACA,MAAM,IAAI/N,MAAMR,EAAQ,0BAG5B,OAAO,IAAI0N,EAAea,EAAO5O,MAAO4O,EAAOZ,2CAG/BhO,EAAgBgO,GAChC,OAAOA,GACH,IAAK,MACD,IAAIiJ,EAASxH,KAAKyH,IAAIlX,GAAO4H,SAAS,IACtC,OAAO5H,GAAS,EAAI,KAAOiX,EAAS,MAAQA,EAChD,IAAK,MACD,OAAQjX,IAAQ,GAAG4H,SAAS,GAChC,IAAK,MACD,OAAO5H,EAAM4H,SAAS,IAC1B,QACI,MAAM,IAAI/G,MAAM,oBAAsBmN,wCAI7BmJ,GACb,OAA4B,IAArBA,EAAItI,QAAQ,KAAa,MAAQsI,EAAIlL,OAAO,GAAK,KAAOkL,mfC9GtDrI,6BAQjB,SAAAA,kBAAY9B,EAA2BwC,EAA+Bb,GAAgBrP,OAAA8X,4GAAA,EAAA9X,CAAAI,KAAAoP,mBAAApP,KAPtFsN,sBAOqF,EAAAtN,KANrF8P,aAMqF,EAAA9P,KALrFiP,UAKqF,EAAAjP,KAJrF0S,kBAIqF,EAAA1S,KAHrFwR,uBAGqF,EAAAxR,KAFrFsQ,qBAEqF,EACjFtQ,KAAKsN,iBAAmBA,EACxBtN,KAAK8P,QAAUA,EACf9P,KAAKiP,KAAOA,EACZjP,KAAK0S,cAAe,EACpB1S,KAAKwR,kBAAoBxR,KAAKiP,KAAKE,QAAQ,MAAQ,GAAKnP,KAAKiP,KAAKE,QAAQ,MAAO,EACjFnP,KAAKsQ,gBAAgC,MAAdtQ,KAAKiP,0LAGvBa,SACL,GAAIA,mBAAmBV,kBACnB,MAAM,IAAIjO,MAAM,gCAGpB,IAAIwW,iBAAmB3X,KAAK8P,QAAQS,WAEhC3K,IAAM,GACV,GAAgB,KAAb5F,KAAKiP,KACJrJ,IAAM,IAAM+R,iBAAiBrX,UAC1B,CACH,GAAc,MAAXwP,QACH,MAAM,IAAI3O,MAAM,qCAAuCnB,KAAKsN,kBAE5D1H,IAAMkK,QAAQxP,MAAQN,KAAKiP,KAAO0I,iBAAiBrX,MAGvD,OAAO+N,+CAAeD,OAAOwJ,KAAKhS,KAAM+R,iBAAiBrJ,qDAIzD,OAAOtO,KAAK8P,QAAQU,0DAIpB,OAAOxQ,KAAKiP,KAAOjP,KAAK8P,QAAQ5H","file":"static/js/main.b8debf08.chunk.js","sourcesContent":["export default {\r\n plainObject: function(obj : any) : boolean {\r\n return typeof obj == \"object\" && !(obj instanceof Array) && obj instanceof Object;\r\n },\r\n\r\n aFunction: function(obj : any) : boolean {\r\n return typeof obj == \"function\";\r\n },\r\n\r\n string: function(obj : any) : boolean {\r\n return typeof obj == \"string\";\r\n },\r\n\r\n array: function(obj : any) : boolean {\r\n return obj instanceof Array;\r\n },\r\n\r\n number: function(obj : any) : boolean {\r\n return typeof obj == \"number\" && !isNaN(obj)\r\n }\r\n}","import is from '../core/is';\r\nimport log from 'loglevel';\r\n\r\nexport type CommandInput = {\r\n input: string;\r\n}\r\n\r\ntype HandleFunction = (input: CommandInput) => void;\r\ntype InputErrorHandler = (input:string, error: Error) => void;\r\n\r\nexport interface ICommandHandler {\r\n canHandle (input:string) : boolean;\r\n handle: HandleFunction;\r\n}\r\n\r\nexport class CmdShell {\r\n debugMode: boolean;\r\n handlers: ICommandHandler[];\r\n errorHandler: InputErrorHandler | null; \r\n constructor() {\r\n this.handlers = [];\r\n this.debugMode = false;\r\n this.errorHandler = null;\r\n };\r\n\r\n execute (rawInput: string) {\r\n\r\n log.debug(`Executing command: ${rawInput}`)\r\n\r\n var input = rawInput.trim().toLowerCase();\r\n var handler = this.findHandler(input);\r\n\r\n if(handler != null) {\r\n if(this.debugMode) {\r\n this.invokeHandler(input, handler);\r\n } else {\r\n try {\r\n this.invokeHandler(input, handler);\r\n } catch (e) {\r\n this.handleError(input, e);\r\n }\r\n }\r\n }\r\n else {\r\n log.debug(`Handled is not found for command: ${rawInput}`)\r\n this.handleError(input, new Error(\"Unsupported expression: \" + input.trim()));\r\n }\r\n };\r\n\r\n onError(h: InputErrorHandler) {\r\n this.errorHandler = h;\r\n }\r\n \r\n command (cmd : string | object, handler? : any) {\r\n var h = this.createHandler(cmd, handler);\r\n if(h == null){\r\n console.warn('unexpected set of arguments: ', JSON.stringify(arguments));\r\n return;\r\n }\r\n\r\n if(!is.aFunction(h.canHandle)) {\r\n console.warn('handler is missing \"canHandle\" function. registration denied.');\r\n return;\r\n }\r\n\r\n if(!is.aFunction(h.handle)) {\r\n console.warn('handler is missing \"handle\" function. registration denied.');\r\n return;\r\n }\r\n\r\n this.handlers.push(h);\r\n };\r\n\r\n createHandler (cmd : string | object, handler : HandleFunction) : ICommandHandler | null {\r\n if(is.plainObject(cmd)) {\r\n return cmd as ICommandHandler;\r\n }\r\n\r\n if(is.string(cmd)) {\r\n return { canHandle: function (input) { return input === cmd; }, handle: handler };\r\n }\r\n\r\n return null;\r\n }\r\n\r\n findHandler (input: string) : ICommandHandler | null {\r\n return this.handlers.filter(h => h.canHandle(input))[0];\r\n };\r\n\r\n invokeHandler (input : string, handler : ICommandHandler) {\r\n\r\n var cmdResult = handler.handle({ input: input});\r\n if(cmdResult != null) {\r\n log.debug(cmdResult);\r\n }\r\n };\r\n\r\n handleError (input: string, err: Error) {\r\n if(this.debugMode)\r\n console.error(input, err);\r\n\r\n if(this.errorHandler != null)\r\n this.errorHandler(input, err);\r\n }\r\n}\r\n\r\nexport default new CmdShell();","import React from 'react';\r\nimport log from 'loglevel';\r\n\r\nexport interface IInputBoxProps\r\n{\r\n onCommandEntered: (input :string) => void;\r\n}\r\n\r\nexport default class InputBox extends React.Component {\r\n history: string[];\r\n historyIndex: number;\r\n nameInput: HTMLInputElement | null;\r\n\r\n constructor(props: IInputBoxProps) {\r\n super(props);\r\n this.nameInput = null;\r\n this.history = [];\r\n this.historyIndex = -1;\r\n }\r\n\r\n componentDidMount(){\r\n if(this.nameInput != null)\r\n this.nameInput.focus();\r\n }\r\n\r\n render() {\r\n return { this.nameInput = input; }} \r\n onKeyUp={e => this.onKeyUp(e)}\r\n onKeyDown={e => this.onKeyDown(e)}\r\n className=\"expressionInput mono\"\r\n placeholder=\"type expression like '1>>2' or 'help' \"/>;\r\n }\r\n\r\n onKeyUp(e: any) {\r\n var input = e.target;\r\n if (e.keyCode != 13 || input.value.trim().length == 0) {\r\n return;\r\n }\r\n \r\n var commandInput = input.value;\r\n this.history.unshift(commandInput);\r\n this.historyIndex = -1;\r\n\r\n input.value = ''; \r\n this.props.onCommandEntered(commandInput);\r\n }\r\n\r\n onKeyDown(args: any) {\r\n\r\n if(args.keyCode == 38) {\r\n var newIndex = this.historyIndex+1;\r\n\r\n if (this.history.length > newIndex) { // up\r\n args.target.value = this.history[newIndex];\r\n this.historyIndex = newIndex;\r\n }\r\n\r\n args.preventDefault();\r\n return;\r\n }\r\n\r\n if(args.keyCode == 40) {\r\n if(this.historyIndex > 0) { // down\r\n args.target.value = this.history[--this.historyIndex];\r\n }\r\n\r\n args.preventDefault();\r\n }\r\n }\r\n}","import React from 'react';\r\nimport AppState from '../AppState';\r\n\r\n\r\ntype DisplayResultProps = {\r\n appState: AppState,\r\n inputHash: string,\r\n input: string,\r\n key: number\r\n}\r\n\r\nexport default class DisplayResultView extends React.Component {\r\n render() {\r\n\r\n return
\r\n
>{this.props.input}#
\r\n
\r\n {this.props.children}\r\n
\r\n
;\r\n }\r\n}\r\n\r\n","import AppState from \"../AppState\";\r\nimport React from \"react\";\r\n\r\ntype IndicatorsProps = {\r\n appState: AppState\r\n};\r\n\r\nfunction Indicators(props: IndicatorsProps) {\r\n\r\n const list = [];\r\n const state = props.appState;\r\n\r\n if(props.appState.env != 'prod') {\r\n list.push(state.env);\r\n }\r\n\r\n if(props.appState.debugMode) {\r\n list.push(\"debug\");\r\n }\r\n\r\n if(localStorage.getItem('TrackAnalytics') === 'false') {\r\n list.push(\"notrack\");\r\n }\r\n\r\n if(list.length == 0)\r\n return null;\r\n\r\n return
\r\n {list.map(i => {i} )}\r\n
\r\n}\r\n\r\nexport default Indicators;","export default {\r\n encodeHash: function(input:string):string {\r\n return encodeURIComponent(input.trim().replace(/\\s/g,','));\r\n },\r\n decodeHash: function(hashValue:string):string {\r\n return decodeURIComponent(hashValue.replace(/^\\#/, '')).replace(/,/g,' ');\r\n },\r\n getArgs: function (hashValue:string) : string[] {\r\n\r\n var decodedHash = this.decodeHash(hashValue);\r\n var args : string[] = [];\r\n\r\n splitHashList(decodedHash).forEach(function(value) {\r\n args.push(value);\r\n });\r\n\r\n return args;\r\n }\r\n};\r\n\r\nfunction splitHashList(str: string) : string[] {\r\n\r\n return str.split('||').filter(s => s.length > 0);\r\n}","import React from 'react';\r\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome';\r\nimport { faEnvelope } from \"@fortawesome/free-solid-svg-icons\";\r\nimport { faTwitter, faGithub} from \"@fortawesome/free-brands-svg-icons\";\r\nimport './TopLinks.css';\r\n\r\nfunction TopLinks() {\r\n return ;\r\n}\r\n\r\nexport default TopLinks;","import React from 'react';\r\nimport InputBox from './InputBox';\r\nimport DisplayResultView from './DisplayResultView';\r\nimport AppState, { CommandResultView } from '../AppState';\r\nimport cmd from '../cmd';\r\nimport log from 'loglevel';\r\nimport Indicators from './Indicators';\r\nimport hash from '../../core/hash';\r\nimport TopLinks from './TopLinks';\r\n\r\n\r\ntype AppRootProps = {\r\n appState: AppState, \r\n};\r\n\r\ntype AppRootState = {\r\n uiTheme: string,\r\n emphasizeBytes: boolean,\r\n commandResults: CommandResultView[]\r\n}\r\n\r\nexport default class AppRoot extends React.Component {\r\n \r\n componentWillMount() {\r\n this.refresh();\r\n this.props.appState.onChange(() => this.refresh());\r\n }\r\n\r\n refresh() {\r\n this.setState(this.props.appState);\r\n }\r\n \r\n getIndicator(value : boolean) {\r\n return value ? 'on' : 'off';\r\n }\r\n\r\n getResultViews() : JSX.Element[] {\r\n\r\n var results = this.state.commandResults.map((r, i) => \r\n \r\n {r.view}\r\n );\r\n return results;\r\n }\r\n\r\n toggleEmphasizeBytes() {\r\n this.props.appState.toggleEmphasizeBytes();\r\n }\r\n\r\n render() {\r\n return
\r\n \r\n
\r\n

BitwiseCmd\r\n

\r\n \r\n
\r\n\r\n
\r\n cmd.execute(input)} />\r\n\r\n \r\n this.toggleEmphasizeBytes()}>[em]\r\n \r\n
\r\n\r\n
\r\n {this.getResultViews()}\r\n
\r\n
;\r\n }\r\n}","import React from 'react';\r\n\r\nfunction ErrorResultView(props : {errorMessage:string}) {\r\n \r\n return
\r\n
{props.errorMessage}
\r\n
;\r\n}\r\n\r\nexport default ErrorResultView;\r\n","export default {\r\n formatString: function(num: number, kind: string) : string {\r\n return num.toString(getBase(kind || \"bin\"));\r\n },\r\n padLeft: function (str: string, length: number, symbol: string) : string {\r\n var sb = Array.prototype.slice.call(str), symbol = symbol || \"0\";\r\n\r\n if(length == null) {\r\n return str;\r\n }\r\n\r\n while(length > sb.length) {\r\n sb.unshift(symbol);\r\n }\r\n\r\n return sb.join('');\r\n }\r\n};\r\n\r\nfunction getBase(kind:string) : number {\r\n switch (kind){\r\n case 'bin': return 2;\r\n case 'hex': return 16;\r\n case 'dec': return 10;\r\n }\r\n\r\n throw new Error(\"Unsupported kind: \" + kind);\r\n}","import React from 'react';\r\n\r\nexport type BinaryStringViewProps = {\r\n allowFlipBits: boolean;\r\n binaryString: string;\r\n onFlipBit?: (input: FlipBitEventArg) => void;\r\n emphasizeBytes: boolean;\r\n className?:string\r\n};\r\n\r\nexport type FlipBitEventArg = {\r\n index: number;\r\n binaryString: string;\r\n $event: any;\r\n newBinaryString: string, \r\n};\r\n\r\nexport default class BinaryStringView extends React.Component {\r\n render() {\r\n return {this.getChildren()}\r\n }\r\n\r\n onBitClick(index: number, e : any) {\r\n if(!this.props.allowFlipBits || !this.props.onFlipBit) {\r\n return;\r\n }\r\n\r\n if(!this.props.onFlipBit) {\r\n \r\n }\r\n\r\n const arr = this.props.binaryString.split('');\r\n arr[index] = arr[index] == '0' ? '1' : '0';\r\n const newBinaryString = arr.join('');\r\n\r\n this.props.onFlipBit({ index: index, binaryString: this.props.binaryString, $event: e, newBinaryString }); \r\n }\r\n\r\n getChildren() {\r\n var bits = this.createBits(this.props.binaryString.split(''));\r\n \r\n if(this.props.emphasizeBytes) {\r\n return this.splitIntoBytes(bits);\r\n }\r\n\r\n return bits;\r\n }\r\n\r\n createBits(bitChars:string[]) : JSX.Element[] {\r\n const allowFlipBits = this.props.allowFlipBits || false;\r\n const css = allowFlipBits ? ' flipable' : ''\r\n\r\n return bitChars.map((c, i) => {\r\n var className = c == '0' ? `zero${css}` : `one${css}`;\r\n return this.onBitClick(i, e)}>{c}\r\n });\r\n }\r\n\r\n splitIntoBytes(bits: JSX.Element[]) {\r\n const bytes = [];\r\n\r\n var key = 0;\r\n while(bits.length > 0) {\r\n bytes.push({bits.splice(0, 8)});\r\n }\r\n \r\n return bytes;\r\n }\r\n}","import React from 'react';\r\nimport { IpAddress, OctetNumber, getNetworkClass } from '../ip';\r\nimport formatter from '../../core/formatter'\r\nimport BinaryStringView from '../../core/components/BinaryString';\r\nimport './IpAddressView.css';\r\ntype IpAddressViewProps = {\r\n ipAddresses: IpAddress[]\r\n};\r\n\r\nexport class IpAddressView extends React.Component \r\n{\r\n \r\n render() {\r\n if(this.props.ipAddresses.length === 1)\r\n return this.renderSingleIp(this.props.ipAddresses[0]);\r\n \r\n return this.renderMultipleIps();\r\n }\r\n\r\n renderMultipleIps() {\r\n return \r\n \r\n {this.props.ipAddresses.map((ip, i) => \r\n \r\n \r\n )}\r\n \r\n
{ip.toString()}\r\n {this.bin(ip.firstByte, 1, ip)}.\r\n {this.bin(ip.secondByte, 2, ip)}.\r\n {this.bin(ip.thirdByte, 3, ip)}.\r\n {this.bin(ip.fourthByte, 4, ip)}\r\n
\r\n }\r\n\r\n renderSingleIp(ip: IpAddress) {\r\n return \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {/* \r\n \r\n */}\r\n \r\n
{ip.firstByte}{ip.secondByte}{ip.thirdByte}{ip.fourthByte}
{this.bin(ip.firstByte, 1, ip)}{this.bin(ip.secondByte, 2, ip)}{this.bin(ip.thirdByte, 3, ip)}{this.bin(ip.fourthByte, 4, ip)}
\r\n Network Class: {getNetworkClass(ip).toUpperCase()}\r\n
;\r\n }\r\n\r\n bin(value: number, octetNumber: OctetNumber, ip: IpAddress) {\r\n return this.onFlippedBit(e.newBinaryString, octetNumber, ip)} />;\r\n }\r\n \r\n onFlippedBit(binaryString: string, number: OctetNumber, ip : IpAddress) {\r\n ip.setOctet(number, parseInt(binaryString, 2));\r\n this.forceUpdate();\r\n }\r\n};\r\n\r\nfunction fmt(num: number) : string {\r\n return formatter.padLeft(formatter.formatString(num, 'bin'), 8, '0');\r\n}\r\n\r\nexport default IpAddressView;","import formatter from '../core/formatter';\r\n\r\n\r\nexport type OctetNumber = 1 | 2 | 3 | 4;\r\nexport type NetworkClass = 'a' | 'b' | 'c' | 'd' | 'e';\r\nexport type ParsedIpObject = IpAddress | IpAddressWithSubnetMask;\r\n\r\nconst ipAddressParser = {\r\n parse: function(input: string) : ParsedIpObject[] | ParsingError | null {\r\n\r\n const matches = this.getMaches(input);\r\n const correctInputs = matches.filter(m => m.matches != null);\r\n const incorrectInputs = matches.filter(m => m.matches == null);\r\n \r\n if(correctInputs.length == 0)\r\n return null;\r\n\r\n if(incorrectInputs.length > 0) {\r\n return new ParsingError(`Value(s) ${incorrectInputs.map(v => v.input).join(',')} was not recognized as valid ip address or ip address with a subnet mask`);\r\n }\r\n\r\n const parsedObjects = matches.map(m => this.parseSingle(m.matches!, m.input));\r\n const parsingErrors = parsedObjects.filter(p => p instanceof ParsingError);\r\n\r\n if(parsingErrors.length > 0) {\r\n return parsingErrors[0] as ParsingError;\r\n }\r\n\r\n return parsedObjects as ParsedIpObject[];\r\n \r\n },\r\n\r\n getMaches(input : string) : { matches: RegExpExecArray | null, input: string }[] {\r\n\r\n return input.\r\n replace(/[\\t\\s]+/g, ' ')\r\n .split(' ')\r\n .filter(s => s.length>0)\r\n .map(s => {\r\n const ipV4Regex = /^([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})(\\/\\d+)?$/;\r\n const matches = ipV4Regex.exec(s);\r\n \r\n if(matches == null || matches.length === 0)\r\n return {matches: null, input: s};\r\n \r\n return {matches, input: s};\r\n });\r\n },\r\n\r\n parseSingle(matches : RegExpExecArray, input: string) : ParsedIpObject | ParsingError {\r\n const invalid = (n: number) => n < 0 || n > 255;\r\n \r\n const first = parseInt(matches[1]);\r\n const second = parseInt(matches[2]);\r\n const third = parseInt(matches[3]);\r\n const fourth = parseInt(matches[4]);\r\n\r\n if(invalid(first) || invalid(second) || invalid(third) || invalid(fourth))\r\n return new ParsingError(`${input} value doesn't fall within the valid range of the IP address space`);\r\n\r\n const ipAddress = new IpAddress(first, second, third, fourth);\r\n\r\n if(matches[5]) {\r\n const maskPart = matches[5].substr(1);\r\n const maskBits = parseInt(maskPart);\r\n\r\n if(maskBits > 32) {\r\n return new ParsingError(`Subnet mask value in ${input} is out of range`);\r\n }\r\n\r\n return new IpAddressWithSubnetMask(ipAddress, maskBits);\r\n }\r\n\r\n return ipAddress;\r\n }\r\n}\r\n\r\nexport class ParsingError {\r\n errorMessage: string;\r\n constructor(message: string) {\r\n this.errorMessage = message;\r\n }\r\n}\r\n\r\nexport class IpAddressWithSubnetMask {\r\n maskBits: number;\r\n ipAddress: IpAddress;\r\n \r\n constructor(ipAddress : IpAddress, maskBits : number) {\r\n this.ipAddress = ipAddress;\r\n this.maskBits = maskBits;\r\n }\r\n\r\n toString() {\r\n return `${this.ipAddress.toString()}/${this.maskBits}`;\r\n }\r\n\r\n createSubnetMaskIp() : IpAddress {\r\n\r\n const mask = (bits: number) => 255<<(8-bits)&255;\r\n\r\n if(this.maskBits <= 8) {\r\n return new IpAddress(mask(this.maskBits), 0, 0, 0);\r\n }\r\n else if(this.maskBits <= 16) {\r\n return new IpAddress(255, mask(this.maskBits-8), 0, 0);\r\n }\r\n else if(this.maskBits <= 24) {\r\n return new IpAddress(255, 255, mask(this.maskBits-16), 0);\r\n }\r\n else {\r\n return new IpAddress(255, 255, 255, mask(this.maskBits-24));\r\n }\r\n }\r\n}\r\n\r\nexport class IpAddress {\r\n\r\n firstByte : number;\r\n secondByte: number;\r\n thirdByte : number;\r\n fourthByte: number\r\n\r\n constructor(firstByte : number, secondByte: number, thirdByte : number, fourthByte: number) {\r\n this.firstByte = firstByte;\r\n this.secondByte = secondByte;\r\n this.thirdByte = thirdByte;\r\n this.fourthByte = fourthByte;\r\n }\r\n\r\n toString() : string {\r\n return `${this.firstByte}.${this.secondByte}.${this.thirdByte}.${this.fourthByte}`;\r\n }\r\n\r\n setOctet(octet: OctetNumber, value : number) {\r\n switch(octet) {\r\n case 1:\r\n this.firstByte = value;\r\n break;\r\n case 2:\r\n this.secondByte = value;\r\n break;\r\n case 3:\r\n this.thirdByte = value;\r\n break;\r\n case 4:\r\n this.fourthByte = value;\r\n break;\r\n }\r\n }\r\n}\r\n\r\n\r\n\r\nconst getNetworkClass = function (ipAddress: IpAddress) : NetworkClass {\r\n const byte = ipAddress.firstByte;\r\n const bineryRep = formatter.formatString(ipAddress.firstByte, 'bin');\r\n\r\n const firstBitOne = (byte & 128) === 128;\r\n const firstBitZero = (byte & 128) === 0;\r\n const secondBitOne = (byte & 64) === 64;\r\n\r\n const thirdBitOne = (byte & 32) === 32;\r\n const thirdBitZero = (byte & 32) === 0;\r\n\r\n const forthBitZero = (byte & 16) === 0;\r\n const forthBitOne = (byte & 16) === 16;\r\n\r\n // e: 1111\r\n\r\n if(firstBitOne && secondBitOne && thirdBitOne && forthBitOne)\r\n return 'e';\r\n\r\n if(firstBitOne && secondBitOne && thirdBitOne && forthBitZero) // Start bits: 1110;\r\n return 'd';\r\n\r\n if(firstBitOne && secondBitOne && thirdBitZero) // Start bits: 110;\r\n return 'c';\r\n \r\n return firstBitOne ? 'b' : 'a';\r\n};\r\n\r\nexport {ipAddressParser, getNetworkClass};","import React from 'react';\r\nimport AppState from '../shell/AppState';\r\nimport { CmdShell, CommandInput } from '../shell/cmd';\r\nimport ErrorResultView from '../shell/components/ErrorResultView';\r\nimport IpAddressView from './components/IpAddressView';\r\nimport { ipAddressParser, ParsingError, IpAddress, ParsedIpObject, IpAddressWithSubnetMask } from './ip';\r\nimport log from 'loglevel';\r\n\r\nconst networkingAppModule = {\r\n setup: function(appState: AppState, cmd: CmdShell) {\r\n \r\n // Add Ip Address commands\r\n cmd.command({\r\n canHandle: (input:string) => ipAddressParser.parse(input) != null,\r\n handle: function(c: CommandInput) {\r\n var result = ipAddressParser.parse(c.input);\r\n\r\n if(result == null)\r\n return;\r\n\r\n if(result instanceof ParsingError) {\r\n appState.addCommandResult(c.input, );\r\n return;\r\n }\r\n\r\n const ipAddresses : IpAddress[] = [];\r\n \r\n (result as ParsedIpObject[]).forEach(r => {\r\n if(r instanceof IpAddressWithSubnetMask)\r\n {\r\n ipAddresses.push(r.ipAddress);\r\n ipAddresses.push(r.createSubnetMaskIp());\r\n }\r\n else if(r instanceof IpAddress) {\r\n ipAddresses.push(r);\r\n }\r\n });\r\n \r\n appState.addCommandResult(c.input, );\r\n }\r\n });\r\n\r\n log.debug();\r\n }\r\n}\r\n\r\nexport default networkingAppModule;","import NumericOperand from \"./NumericOperand\";\r\nimport { ExpressionInput, ExpressionInputItem } from \"./expression-interfaces\";\r\n\r\nexport default class ListOfNumbersExpression implements ExpressionInput {\r\n numbers: NumericOperand[];\r\n expressionString: string;\r\n maxBitsLength: number;\r\n\r\n constructor(expressionString: string, numbers: NumericOperand[]) {\r\n this.expressionString = expressionString;\r\n this.numbers = numbers;\r\n this.maxBitsLength = numbers.map(n => n.lengthInBits).reduce((n , c) => n >= c ? n : c, 0);\r\n }\r\n\r\n toString() {\r\n return this.numbers.map(n => n.value.toString()).join(' ');\r\n }\r\n}","import { ExpressionInput, ExpressionInputItem } from \"./expression-interfaces\";\r\n\r\nexport default class BitwiseOperationExpression implements ExpressionInput {\r\n \r\n expressionString: string;\r\n expressionItems: ExpressionInputItem[];\r\n\r\n constructor(expressionString: string, expressions: ExpressionInputItem[]) {\r\n this.expressionString = expressionString;\r\n this.expressionItems = expressions;\r\n }\r\n}","import NumericOperand from './NumericOperand';\r\nimport ExpressionOperand from './ExpressionOperand'\r\nimport ListOfNumbersExpression from './ListOfNumbersExpression';\r\nimport BitwiseOperationExpression from './BitwiseOperationExpression';\r\nimport { ExpressionInput, ExpressionInputItem, NumberBase } from './expression-interfaces';\r\n\r\nexport { default as NumericOperand } from './NumericOperand';\r\nexport { default as ExpressionOperand } from './ExpressionOperand';\r\nexport { default as ListOfNumbersExpression } from './ListOfNumbersExpression';\r\nexport { default as BitwiseOperationExpression } from './BitwiseOperationExpression';\r\n\r\ninterface IExpressionParserFactory {\r\n canCreate: (input: string) => boolean;\r\n create: (input: string) => ExpressionInput;\r\n};\r\n\r\nclass ExpressionParser {\r\n factories: IExpressionParserFactory[];\r\n constructor() {\r\n this.factories = [];\r\n };\r\n\r\n canParse (input: string) : boolean {\r\n var trimmed = input.replace(/^\\s+|\\s+$/, '');\r\n var i = this.factories.length-1;\r\n for(;i>=0;i--) {\r\n if(this.factories[i].canCreate(trimmed) === true){\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n\r\n parse (input: string) : ExpressionInput | null {\r\n var trimmed = input.replace(/^\\s+|\\s+$/, '');\r\n var i = 0, l = this.factories.length, factory;\r\n\r\n for(;i {\r\n if(n.trim().length > 0) {\r\n numbers.push(NumericOperand.parse(n.trim()));\r\n }\r\n });\r\n\r\n return new ListOfNumbersExpression(input, numbers);\r\n }\r\n}\r\n\r\nclass BitwiseOperationExpressionFactory implements IExpressionParserFactory {\r\n fullRegex: RegExp;\r\n regex: RegExp;\r\n\r\n constructor() {\r\n this.fullRegex = /^((<<|>>|>>>|\\||\\&|\\^)?(~?-?([b,x,a-f,0-9]+)))+$/;\r\n this.regex = /(<<|>>|>>>|\\||\\&|\\^)?(~?-?(?:[b,x,a-f,0-9]+))/g;\r\n }\r\n\r\n canCreate (input: string) : boolean {\r\n this.fullRegex.lastIndex = 0;\r\n return this.fullRegex.test(this.normalizeString(input));\r\n };\r\n\r\n create (input: string) : ExpressionInput {\r\n var m, operands : ExpressionInputItem[] = [],\r\n normalizedString = this.normalizeString(input);\r\n\r\n while ((m = this.regex.exec(normalizedString)) != null) {\r\n operands.push(this.parseMatch(m));\r\n }\r\n\r\n return new BitwiseOperationExpression(normalizedString, operands)\r\n };\r\n\r\n parseMatch (m:any): ExpressionInputItem {\r\n var input = m[0],\r\n sign = m[1],\r\n num = m[2];\r\n\r\n var parsed = null;\r\n if(num.indexOf('~') == 0) {\r\n parsed = new ExpressionOperand(num, NumericOperand.parse(num.substring(1)), '~');\r\n }\r\n else {\r\n parsed = NumericOperand.parse(num);\r\n }\r\n\r\n if(sign == null) {\r\n return parsed as ExpressionOperand;\r\n } else {\r\n return new ExpressionOperand(input, parsed as NumericOperand, sign);\r\n }\r\n };\r\n\r\n normalizeString (input : string): string {\r\n return input.replace(/\\s+/g,'');\r\n };\r\n}\r\n\r\nvar parser = new ExpressionParser();\r\nparser.addFactory(new ListOfNumbersExpressionFactory());\r\nparser.addFactory(new BitwiseOperationExpressionFactory());\r\n\r\nexport {parser};\r\n","import { NumericOperand, ListOfNumbersExpression, BitwiseOperationExpression, ExpressionOperand } from '../expression';\r\nimport { ExpressionInputItem, ExpressionInput } from '../expression-interfaces';\r\n\r\ntype Config = {\r\n emphasizeBytes: boolean;\r\n allowFlipBits: boolean;\r\n}\r\n\r\ntype ExpressionItemModel = {\r\n sign: string;\r\n css: string;\r\n expressionItem: ExpressionInputItem;\r\n allowFlipBits: boolean;\r\n label: string;\r\n}\r\n\r\nexport default class BitwiseExpressionViewModel {\r\n\r\n emphasizeBytes: boolean;\r\n items: ExpressionItemModel[];\r\n maxNumberOfBits: number;\r\n allowFlipBits: boolean;\r\n\r\n constructor({ emphasizeBytes = false, allowFlipBits = false} : Config) {\r\n this.emphasizeBytes = emphasizeBytes;\r\n this.items = [];\r\n this.maxNumberOfBits = 0;\r\n this.allowFlipBits = allowFlipBits === true;\r\n }\r\n\r\n static buildListOfNumbers(expr : ListOfNumbersExpression, config : Config) {\r\n var model = new BitwiseExpressionViewModel(config);\r\n expr.numbers.forEach(op => model.addOperandRow(op));\r\n model.maxNumberOfBits = BitwiseExpressionViewModel.getNumberOfBits(model.maxNumberOfBits, model.emphasizeBytes);\r\n return model;\r\n }\r\n\r\n static buildMultiple (expr : BitwiseOperationExpression, config : Config) {\r\n\r\n var op = expr.expressionItems[0],\r\n i = 0, len = expr.expressionItems.length,\r\n ex, m = new BitwiseExpressionViewModel(config);\r\n\r\n var prev : NumericOperand | null = null;\r\n\r\n for (;i {\r\n constructor(props: BitwiseOperationExpressionViewProps) {\r\n super(props);\r\n this.state = {};\r\n }\r\n render() {\r\n var rows = this.getRows();\r\n if(!rows) {\r\n return null;\r\n }\r\n\r\n return \r\n \r\n {rows}\r\n \r\n
\r\n }\r\n\r\n getRows() : JSX.Element[] | null {\r\n var model = BitwiseExpressionViewModel.createModel(this.props.expression, this.props.emphasizeBytes);\r\n\r\n return model.items.map((itm, i) => \r\n this.onBitFlipped()} />);\r\n }\r\n\r\n onBitFlipped() {\r\n this.forceUpdate();\r\n //this.setState({d:new Date()});\r\n }\r\n}\r\n\r\ntype ExpressionRowProps = {\r\n sign: string, \r\n css: string, \r\n maxNumberOfBits: number, \r\n emphasizeBytes: boolean, \r\n allowFlipBits: boolean, \r\n expressionItem: ExpressionInputItem,\r\n onBitFlipped: any\r\n}\r\n\r\nclass ExpressionRow extends React.Component {\r\n constructor(props: ExpressionRowProps) {\r\n super(props);\r\n this.state = { operand: null };\r\n }\r\n render() {\r\n const { sign, css, maxNumberOfBits, emphasizeBytes, allowFlipBits } = this.props;\r\n \r\n return \r\n {sign}\r\n {this.getLabel()}\r\n \r\n this.flipBit(args)}/>\r\n \r\n {this.getOther()}\r\n ;;\r\n }\r\n\r\n getBinaryString() : string { \r\n return this.props.expressionItem.evaluate().toBinaryString();\r\n }\r\n\r\n getLabel(): string {\r\n\r\n // For expressions like |~2 \r\n // TODO: find a better way...\r\n if(this.props.expressionItem.isExpression) {\r\n const ex = this.props.expressionItem as ExpressionOperand;\r\n return ex.sign + this.getLabelString(ex.getUnderlyingOperand());\r\n }\r\n\r\n return this.getLabelString(this.props.expressionItem.getUnderlyingOperand()); \r\n }\r\n\r\n getOther() {\r\n\r\n if(this.props.expressionItem.isExpression) {\r\n const ex = this.props.expressionItem as ExpressionOperand;\r\n const op = ex.evaluate();\r\n\r\n return op.toString();\r\n }\r\n\r\n return this.props.expressionItem.evaluate().toOtherKindString();\r\n }\r\n\r\n getLabelString (op: NumericOperand) : string {\r\n return op.toString(op.base == 'bin' ? 'dec' : op.base);\r\n }\r\n\r\n flipBit(args: FlipBitEventArg) { \r\n\r\n const op = this.props.expressionItem.getUnderlyingOperand();\r\n const { index, binaryString } = args;\r\n\r\n var arr = binaryString.split('');\r\n arr[index] = arr[index] == '0' ? '1' : '0';\r\n var bin = arr.join('');\r\n\r\n var newValue = parseInt(bin, 2);\r\n op.setValue(newValue);\r\n\r\n this.props.onBitFlipped();\r\n }\r\n}","import React from 'react';\r\nimport AppState from '../shell/AppState';\r\nimport { CmdShell, CommandInput } from '../shell/cmd';\r\nimport BitwiseOperationExpressionView from './components/BitwiseOperationExpressionView';\r\nimport {parser} from './expression';\r\n\r\nconst expressionAppModule = {\r\n setup: function(appState: AppState, cmd: CmdShell) {\r\n \r\n // Bitwise Expressions\r\n cmd.command({\r\n canHandle: (input:string) => parser.canParse(input),\r\n handle: function(c: CommandInput) {\r\n var expr = parser.parse(c.input);\r\n appState.addCommandResult(c.input, );\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport default expressionAppModule;","import React from 'react'\r\n\r\nfunction AboutResultView() {\r\n\r\n return
\r\n

Created by Borys Levytskyi. Please give it a like if BitwiseCmd has helped you in your work.

\r\n

If you have an idea, suggestion or you've spotted a bug here, please send it to bitwisecmd@gmail.com or tweet on @BitwiseCmd. Your feedback is greatly appreciated.

\r\n

Project on GitHub

\r\n
;\r\n};\r\n\r\nexport default AboutResultView;","import React from 'react';\r\nimport cmd from '../../shell/cmd';\r\n\r\ntype CommandLinkProps = {\r\n command?:string;\r\n text:string;\r\n}\r\n\r\nfunction CommandLink(props: CommandLinkProps) {\r\n return cmd.execute(props.command || props.text)}>{props.text}\r\n}\r\n\r\nexport default CommandLink;","import React from 'react';\r\nimport CommandLink from '../../core/components/CommandLink';\r\nimport './HelpResultView.css';\r\n\r\nfunction HelpResultView() {\r\n \r\n return
\r\n
\r\n
\r\n
\r\n Bitiwse Calculation Commands\r\n
    \r\n
  • — type bitwise expression to see result in binary (only positive integers are supported now)
  • \r\n
  • — type one or more numbers to see their binary representations
  • \r\n
\r\n
\r\n
\r\n IP Address Commands\r\n
    \r\n
  • — enter single or multiple ip addresses (separated by space) to see their binary represenation
  • \r\n
  • — subnet mask notiations are support as well
  • \r\n
\r\n
\r\n
\r\n Color Theme Commands\r\n
    \r\n
  • — set Light color theme
  • \r\n
  • — set Dark color theme
  • \r\n
  • — set Midnight color theme
  • \r\n
\r\n
\r\n
\r\n Other Commands\r\n
    \r\n
  • — clear output pane
  • \r\n
  • — display this help
  • \r\n
  • — display changelog
  • \r\n
  • — turn On/Off Emphasize Bytes
  • \r\n
  • — about the app
  • \r\n
  • — generate v4 GUID
  • \r\n
\r\n
\r\n
\r\n
\r\n
\r\n Supported Bitwise Operations
\r\n \r\n \r\n as implemented in JavaScript engine of your browser\r\n \r\n \r\n
    \r\n
  • & — bitwise AND
  • \r\n
  • | — bitwise inclusive OR
  • \r\n
  • ^ — bitwise exclusive XOR
  • \r\n
  • ~ — bitwise NOT
  • \r\n
  • << — left shift
  • \r\n
  • >> — sign propagating right shift
  • \r\n
  • >>> — zero-fill right shift
  • \r\n
\r\n
\r\n
\r\n Tip\r\n

\r\n You can click on bits to flip them in number inputs (e.g. ) or IP addresses (e.g. )\r\n

\r\n
\r\n
\r\n
\r\n
;\r\n}\r\n\r\nexport default HelpResultView;\r\n","import React from 'react';\r\n\r\nfunction TextResultView(props : { text: string }) {\r\n return

{props.text}

;\r\n}\r\n\r\nexport default TextResultView;","import React from 'react';\r\nimport CommandLink from '../../core/components/CommandLink';\r\nimport './WhatsNewResultView.css';\r\n\r\nfunction WhatsnewResultView() {\r\n \r\n return
\r\n

Changelog

\r\n
\r\n

Jun 14th, 2021
\r\n Added support of ip addresses and subnet masks notatioans. Try them out: \r\n

\r\n
    \r\n
  • Single IP address
  • \r\n
  • Multiple IP addresses and subnet mask notations
  • \r\n
\r\n \r\n
\r\n
\r\n

Jun 6th, 2017
\r\n Added command. Use it for generating v4 GUIDs

\r\n
\r\n
\r\n

May 27th, 2017
\r\n Added support of binary number notation (e.g. ).

\r\n
\r\n
\r\n

May 20th, 2017
\r\n New theme added.

\r\n
\r\n
\r\n

May 16th, 2017
\r\n Complete rewrite using React. Old implementation is available at http://bitwisecmd.com/old. Please let me know if you have problems with this release by creating issue in Github Repo.

\r\n
\r\n
;\r\n}\r\n\r\nexport default WhatsnewResultView;","import React from 'react';\r\nimport uuid from 'uuid';\r\nimport AppState from './AppState';\r\nimport { CmdShell, CommandInput } from './cmd';\r\nimport AboutResultView from './components/AboutResultView';\r\nimport ErrorResultView from './components/ErrorResultView';\r\nimport HelpResultView from './components/HelpResultView';\r\nimport TextResultView from './components/TextResultView';\r\nimport WhatsnewResultView from './components/WhatsNewResultView';\r\n\r\nconst shellModule = {\r\n setup: function(appState: AppState, cmd: CmdShell) {\r\n \r\n cmd.debugMode = appState.debugMode;\r\n appState.onChange(() => cmd.debugMode = appState.debugMode);\r\n \r\n cmd.command(\"help\", (c: CommandInput) => appState.addCommandResult(c.input, ));\r\n cmd.command(\"clear\", () => appState.clearCommandResults());\r\n cmd.command(\"em\", () => appState.toggleEmphasizeBytes());\r\n cmd.command(\"dark\", () => appState.setUiTheme('dark'));\r\n cmd.command(\"light\", () => appState.setUiTheme('light'));\r\n cmd.command(\"midnight\", () => appState.setUiTheme('midnight'));\r\n cmd.command(\"about\", (c: CommandInput) => appState.addCommandResult(c.input, ));\r\n cmd.command(\"whatsnew\", (c: CommandInput) => appState.addCommandResult(c.input, ));\r\n cmd.command(\"guid\", (c: CommandInput) => appState.addCommandResult(c.input, ));\r\n cmd.command(\"-notrack\", () => {});\r\n cmd.command(\"-debug\", (c: CommandInput) => {\r\n appState.toggleDebugMode();\r\n appState.addCommandResult(c.input, );\r\n }); \r\n\r\n cmd.onError((input: string, err: Error) => appState.addCommandResult(input, ));\r\n }\r\n}\r\n\r\nexport default shellModule;","import log from 'loglevel';\r\n\r\nconst APP_VERSION = 5;\r\n\r\nexport type PersistedAppData = {\r\n emphasizeBytes: boolean;\r\n uiTheme: string;\r\n version: number;\r\n debugMode: boolean | null;\r\n}\r\n\r\nexport type CommandResultView = {\r\n key: number,\r\n input: string,\r\n view: JSX.Element\r\n};\r\n\r\nexport type AppStateChangeHandler = (state: AppState) => void;\r\n\r\nexport default class AppState {\r\n\r\n version: number = APP_VERSION;\r\n emphasizeBytes: boolean;\r\n debugMode: boolean = false;\r\n uiTheme: string;\r\n changeHandlers: AppStateChangeHandler[];\r\n commandResults: CommandResultView[];\r\n persistedVersion: number;\r\n wasOldVersion: boolean;\r\n env: string; \r\n\r\n constructor(persistData : PersistedAppData, env: string) {\r\n this.commandResults = [];\r\n this.changeHandlers = [];\r\n this.uiTheme = persistData.uiTheme || 'midnight';\r\n this.env = env;\r\n\r\n this.emphasizeBytes = persistData.emphasizeBytes || true;\r\n this.persistedVersion = persistData.version || 0.1;\r\n this.wasOldVersion = persistData.version != null && this.version > this.persistedVersion;\r\n this.debugMode = env !== 'prod' || persistData.debugMode === true;\r\n }\r\n\r\n addCommandResult(input : string, view : JSX.Element) {\r\n const key = generateKey();\r\n this.commandResults.unshift({key, input, view});\r\n log.debug(`command result added: ${input}`);\r\n this.triggerChanged();\r\n }\r\n\r\n clearCommandResults() {\r\n this.commandResults = [];\r\n this.triggerChanged();\r\n }\r\n\r\n toggleEmphasizeBytes() {\r\n this.emphasizeBytes = !this.emphasizeBytes;\r\n this.triggerChanged();\r\n }\r\n\r\n onChange(handler : AppStateChangeHandler) {\r\n this.changeHandlers.push(handler);\r\n }\r\n\r\n triggerChanged() {\r\n this.changeHandlers.forEach(h => h(this));\r\n }\r\n\r\n setUiTheme(theme: string) {\r\n this.uiTheme = theme;\r\n this.triggerChanged(); \r\n }\r\n\r\n toggleDebugMode() {\r\n this.debugMode = !this.debugMode;\r\n this.triggerChanged();\r\n }\r\n\r\n getPersistData() : PersistedAppData {\r\n return {\r\n emphasizeBytes: this.emphasizeBytes,\r\n uiTheme: this.uiTheme,\r\n version: this.version,\r\n debugMode: this.debugMode\r\n }\r\n }\r\n};\r\n\r\nfunction generateKey() : number {\r\n return Math.ceil(Math.random()*10000000) ^ Date.now(); // Because why the hell not...\r\n}","import AppState, { PersistedAppData } from \"./AppState\";\r\n\r\nconst storeKey = 'AppState';\r\n\r\nexport default {\r\n getPersistedData() : PersistedAppData {\r\n var json = window.localStorage.getItem(storeKey);\r\n if(!json) {\r\n return {} as PersistedAppData;\r\n }\r\n\r\n try {\r\n return JSON.parse(json) as PersistedAppData;\r\n }\r\n catch(ex) {\r\n console.error('Failed to parse AppState json. Json Value: \\n' + json, ex);\r\n return {} as PersistedAppData;;\r\n }\r\n },\r\n\r\n watch (appState: AppState) {\r\n appState.onChange(() => this.persistData(appState));\r\n },\r\n\r\n persistData(appState: AppState) {\r\n localStorage.setItem(storeKey, JSON.stringify(appState.getPersistData()));\r\n }\r\n}","import React from 'react';\r\n\r\nfunction UnknownInputResultView(props : {input:string}) {\r\n \r\n return
\r\n
¯\\_(ツ)_/¯ Sorry, i don′t know what {props.input} is
\r\n
;\r\n}\r\n\r\nexport default UnknownInputResultView;\r\n","import cmd, { CommandInput } from './shell/cmd';\r\nimport AppRoot from './shell/components/AppRoot';\r\nimport log from 'loglevel';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport './index.css';\r\nimport networkingAppModule from './networking/module';\r\nimport expressionAppModule from './expression/module';\r\nimport shellModule from './shell/module';\r\nimport bootstrapAppData from './shell/startup';\r\nimport UnknownInputResultView from './shell/components/UnknownInputResultView';\r\n\r\nconst appData = bootstrapAppData();\r\n\r\ninitializeModules();\r\n\r\nvar root = ;\r\nReactDOM.render(root, document.getElementById('root'));\r\n\r\nexecuteStartupCommands();\r\n\r\nlog.debug(\"started\");\r\n\r\nfunction executeStartupCommands() {\r\n log.debug(\"Executing startup commands\", appData.startupCommands);\r\n appData.startupCommands.forEach(cmd.execute.bind(cmd));\r\n}\r\n\r\nfunction initializeModules() {\r\n shellModule.setup(appData.appState, cmd);\r\n networkingAppModule.setup(appData.appState, cmd);\r\n expressionAppModule.setup(appData.appState, cmd);\r\n\r\n // Last command handler reports that input is unknown\r\n cmd.command({\r\n canHandle: () => true,\r\n handle: (c: CommandInput) => appData.appState.addCommandResult(c.input, )\r\n });\r\n}\r\n\r\n\r\n\r\n","import log from 'loglevel';\r\nimport hash from '../core/hash';\r\nimport AppState from './AppState';\r\nimport { Env } from './interfaces';\r\nimport appStateStore from './appStateStore';\r\n\r\nexport type StartupAppData = {\r\n appState: AppState,\r\n startupCommands: string[]\r\n}\r\n\r\nfunction bootstrapAppData() : StartupAppData {\r\n const env = window.location.host === \"bitwisecmd.com\" ? 'prod' : 'stage';\r\n\r\n setupLogger(env);\r\n\r\n const appState = createAppState(env);\r\n const startupCommands = getStartupCommands(appState);\r\n\r\n return {\r\n appState,\r\n startupCommands\r\n }\r\n}\r\n\r\n\r\nfunction createAppState(env:string) {\r\n var stateData = appStateStore.getPersistedData();\r\n const appState = new AppState(stateData, env);\r\n appStateStore.watch(appState);\r\n log.debug(\"appState initialized\", appState);\r\n return appState;\r\n}\r\n\r\nfunction getStartupCommands(appState : AppState) : string[] {\r\n var hashArgs = hash.getArgs(window.location.hash);\r\n\r\n var startupCommands = ['help', '127.0.0.1 192.168.0.0/8', '1|2&6','4 0b1000000 0x80'];\r\n\r\n if(appState.wasOldVersion) {\r\n startupCommands = [\"whatsnew\"];\r\n }\r\n\r\n if(hashArgs.length > 0) {\r\n startupCommands = hashArgs;\r\n }\r\n\r\n log.debug('Executing startup commands', startupCommands);\r\n\r\n return startupCommands;\r\n}\r\n\r\nfunction setupLogger(env: Env) {\r\n if(env != 'prod'){\r\n log.setLevel(\"debug\");\r\n log.debug(`Log level is set to debug. Env: ${env}`)\r\n } else {\r\n log.setLevel(\"warn\");\r\n }\r\n}\r\n\r\nexport default bootstrapAppData;","import { NumberBase } from \"./expression-interfaces\";\r\n\r\nconst decimalRegex = /^-?\\d+$/;\r\nconst hexRegex = /^-?0x[0-9,a-f]+$/i;\r\nconst binRegex = /^-?0b[0-1]+$/i;\r\nconst operatorRegex = /^<<|>>|<<<|\\&|\\|\\^|~$/;\r\n\r\ninterface ParserConfig {\r\n regex: RegExp,\r\n radix: number,\r\n base: NumberBase,\r\n prefix: string|RegExp\r\n}\r\n\r\nexport interface ParsedNumber {\r\n value: number;\r\n base: NumberBase;\r\n input: string;\r\n}\r\n\r\nvar knownParsers : ParserConfig[] = [\r\n { regex: decimalRegex, radix: 10, base: 'dec', prefix: '^$' },\r\n { regex: hexRegex, radix: 16, base: 'hex', prefix:/0x/i },\r\n { regex: binRegex, radix: 2, base: 'bin', prefix:/0b/i }];\r\n\r\n\r\nclass NumberParser {\r\n\r\n parsers: ParserConfig[];\r\n\r\n constructor(parsers: ParserConfig[])\r\n {\r\n this.parsers = parsers;\r\n }\r\n\r\n parse (input : string) : ParsedNumber | null {\r\n return this.parsers.map(p => this.applyParser(p, input)).reduce((c, n) => c || n);\r\n };\r\n\r\n parseOperator (input: string) : string | null {\r\n var m = input.match(input);\r\n \r\n if(m == null || m.length == 0) {\r\n return null;\r\n }\r\n\r\n return m[0];\r\n };\r\n\r\n applyParser(parser : ParserConfig, rawInput: string) : ParsedNumber | null {\r\n \r\n if(!parser.regex.test(rawInput)) {\r\n return null;\r\n }\r\n \r\n var value = parseInt(rawInput.replace(parser.prefix, ''), parser.radix);\r\n \r\n return {\r\n value: value,\r\n base: parser.base,\r\n input: rawInput\r\n } \r\n }\r\n}\r\n\r\nconst numberParser = new NumberParser(knownParsers);\r\n\r\nexport {numberParser};","import {numberParser} from './numberParser';\r\nimport { ExpressionInputItem, NumberBase } from './expression-interfaces';\r\n\r\nvar globalId : number = 1;\r\n\r\n// Represents numeric value\r\nexport default class NumericOperand implements ExpressionInputItem {\r\n id: number;\r\n value: number;\r\n base: NumberBase;\r\n lengthInBits: number;\r\n isExpression: boolean;\r\n\r\n constructor(value : number, base?: NumberBase) {\r\n this.id = globalId++;\r\n this.value = value;\r\n this.base = base || \"dec\";\r\n this.lengthInBits = NumericOperand.getBitLength(this.value);\r\n this.isExpression = false;\r\n }\r\n \r\n getLengthInBits() {\r\n if(this.value < 0) {\r\n return 32;\r\n }\r\n return Math.floor(Math.log(this.value) / Math.log(2)) + 1;\r\n };\r\n\r\n getOtherBase(kind?: NumberBase) : NumberBase {\r\n switch(kind || this.base) {\r\n case 'dec': \r\n case 'bin':\r\n return 'hex';\r\n case 'hex': return 'dec';\r\n default : throw new Error(kind + \" kind doesn't have opposite kind\")\r\n }\r\n };\r\n\r\n toString(base?: NumberBase) : string {\r\n return NumericOperand.toBaseString(this.value, base || this.base);\r\n }\r\n\r\n toOtherKindString() : string {\r\n return this.toString(this.getOtherBase());\r\n }\r\n\r\n toDecimalString() {\r\n return this.toString('dec');\r\n }\r\n\r\n toHexString() {\r\n return this.toString('hex');\r\n }\r\n\r\n toBinaryString() : string {\r\n return this.toString('bin');\r\n }\r\n\r\n setValue(value : number) {\r\n this.value = value;\r\n this.lengthInBits = NumericOperand.getBitLength(value);\r\n }\r\n\r\n evaluate() : NumericOperand {\r\n return this;\r\n }\r\n\r\n getUnderlyingOperand() : NumericOperand {\r\n return this\r\n }\r\n \r\n static getBitLength(num : number) {\r\n return Math.floor(Math.log(num) / Math.log(2)) + 1;\r\n } \r\n \r\n static getBase(kind : string){\r\n switch (kind){\r\n case 'bin': return 2;\r\n case 'hex': return 16;\r\n case 'dec': return 10;\r\n }\r\n };\r\n\r\n static create(value : number, base? : NumberBase) {\r\n return new NumericOperand(value, base || \"dec\");\r\n };\r\n\r\n static parse(input: string) : NumericOperand {\r\n \r\n var parsed = numberParser.parse(input);\r\n\r\n if(!parsed) {\r\n throw new Error(input + \" is not a valid number\");\r\n }\r\n\r\n return new NumericOperand(parsed.value, parsed.base);\r\n }\r\n\r\n static toBaseString(value : number, base : NumberBase) : string {\r\n switch(base) {\r\n case 'hex':\r\n var hexVal = Math.abs(value).toString(16);\r\n return value >= 0 ? '0x' + hexVal : '-0x' + hexVal;\r\n case 'bin':\r\n return (value>>>0).toString(2);\r\n case 'dec':\r\n return value.toString(10);\r\n default:\r\n throw new Error(\"Unexpected kind: \" + base)\r\n }\r\n };\r\n\r\n static toHexString (hex : string) {\r\n return hex.indexOf('-') === 0 ? '-0x' + hex.substr(1) : '0x' + hex;\r\n };\r\n}","import NumericOperand from './NumericOperand';\r\nimport { ExpressionInputItem } from './expression-interfaces';\r\n\r\nexport default class ExpressionOperand implements ExpressionInputItem {\r\n expressionString: string;\r\n operand: ExpressionInputItem;\r\n sign: string;\r\n isExpression: boolean;\r\n isShiftExpression: boolean;\r\n isNotExpression: boolean;\r\n\r\n constructor(expressionString : string, operand : ExpressionInputItem, sign : string) {\r\n this.expressionString = expressionString;\r\n this.operand = operand;\r\n this.sign = sign;\r\n this.isExpression = true;\r\n this.isShiftExpression = this.sign.indexOf('<') >= 0 || this.sign.indexOf('>')>= 0;\r\n this.isNotExpression = this.sign === '~';\r\n }\r\n \r\n evaluate(operand?: NumericOperand) : NumericOperand {\r\n if (operand instanceof ExpressionOperand) {\r\n throw new Error('value shouldnt be expression'); \r\n }\r\n\r\n var evaluatedOperand = this.operand.evaluate();\r\n\r\n var str = '';\r\n if(this.sign == '~'){\r\n str = '~' + evaluatedOperand.value;\r\n } else {\r\n if(operand == null)\r\n throw new Error(\"Other is required for expression: \" + this.expressionString)\r\n\r\n str = operand.value + this.sign + evaluatedOperand.value;\r\n }\r\n\r\n return NumericOperand.create(eval(str), evaluatedOperand.base);\r\n }\r\n\r\n getUnderlyingOperand() : NumericOperand {\r\n return this.operand.getUnderlyingOperand();\r\n }\r\n\r\n toString(): string {\r\n return this.sign + this.operand.toString();\r\n }\r\n}"],"sourceRoot":""} \ No newline at end of file