create-jsview 2.1.366-test.0 → 2.1.428
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +3 -3
- package/template-react-webpack/package-lock-json +6 -6
- package/template-react-webpack/package.json +2 -2
- package/template-vue-vite/.DS_Store +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/1.54c7645a.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/1.5dc15599.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/1280x7200.f72b317a.jpg +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/2.c46fde4a.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/2.df10a8ad.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/3.920d6934.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/3.dd39d2bc.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/4.4cd633a0.jpg +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/4.f58de085.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/Couplets.22a8bcb3.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/Square.2085a1e3.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/animated_webp.df116064.webp +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/ball_3.6443240f.webp +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/bg1.9dacd4a9.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/bg2.05147169.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/bg3.4725410a.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/bg4.67998d21.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/bg5.e6aeb8ef.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/bg_btn.3bc67ce7.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/bgimage.9ebd66c5.jpg +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/bgmusic.bf797943.mp3 +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/blue_egg.a2c54f95.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/bmpDemo.e06bdb19.bmp +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/boom.159be4de.mp3 +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/border.32f99a05.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/btn_ok.a0827ed4.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/coin.50aac2a4.mp3 +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/coupon_left.c9f544cb.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/coupon_mid.ef262879.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/coupon_right.248ee7dc.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/egg_break.e01a800c.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/fail.446dfd56.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/firecracker.bf5b0aa9.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/fireworks.1c112f43.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/focus1.ff67f2e6.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/get.3509893a.mp3 +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/girl_run.1c322b33.gif +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/goldencoin1.d31809e9.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/goldencoin2.3f5b59d2.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/holder_logo.5d13253c.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/icon.0d3ef206.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/jpegDemo.ede7ed35.jpeg +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/jump.d2e172b2.mp3 +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/jump_down.68b45798.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/jump_up.2f896dd9.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/leadWire.0c2130df.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/light.fd536e0c.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/light2.eac76425.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/line_left.36cc4bd9.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/line_mid.21f25bbe.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/line_right.3a4bbae6.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/lose.86f51553.mp3 +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/mask.c1211360.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/mathjax-tex-svg.d4295dc3.txt +1 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/php.9533a06f.jpg +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/php2.7e5cf392.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/pngNoAlphaDemo.8d9edc0f.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/purpleStar.b1920ac5.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/quan.54556d84.webp +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/redCircle.091d191f.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/redStar.9c31bb42.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/red_egg.27ca7d39.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/redpacket1.72196c20.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/redpacket2.0ae89a46.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/resultSquare.b9e3527b.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/roll.aa0dfe6f.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/run.b84383b2.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/scroll.c4efa5a1.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/scroll1.744c0b08.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/snow.22f35787.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/spark.50b3f017.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/star1.dd634833.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/star2.df352429.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/star3.5a62b76f.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/star4.2283606c.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/swipLight.ab6b2bc2.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/tease.3d7fb077.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/tease_lock.3602bb0d.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/test.671066bc.jpg +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/webpDemo.eb0b7786.webp +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/assets/yellowStar.d80f0718.png +0 -0
- package/template-vue-vite/dist-test-jsview-chunk/css/App.0e83537d.css +6 -0
- package/template-vue-vite/dist-test-jsview-chunk/css/App.10e9d05f.css +14 -0
- package/template-vue-vite/dist-test-jsview-chunk/css/App.16cc5e4a.css +20 -0
- package/template-vue-vite/dist-test-jsview-chunk/css/App.18bd653b.css +10 -0
- package/template-vue-vite/dist-test-jsview-chunk/css/App.2943d6ec.css +9 -0
- package/template-vue-vite/dist-test-jsview-chunk/css/App.329ae9f6.css +23 -0
- package/template-vue-vite/dist-test-jsview-chunk/css/App.32c55297.css +8 -0
- package/template-vue-vite/dist-test-jsview-chunk/css/App.3e2a4eb1.css +108 -0
- package/template-vue-vite/dist-test-jsview-chunk/css/App.4ea37a27.css +39 -0
- package/template-vue-vite/dist-test-jsview-chunk/css/App.54fdcefd.css +51 -0
- package/template-vue-vite/dist-test-jsview-chunk/css/App.6406907b.css +9 -0
- package/template-vue-vite/dist-test-jsview-chunk/css/App.643b5c1b.css +8 -0
- package/template-vue-vite/dist-test-jsview-chunk/css/App.66f2f353.css +553 -0
- package/template-vue-vite/dist-test-jsview-chunk/css/App.76117f77.css +21 -0
- package/template-vue-vite/dist-test-jsview-chunk/css/App.7a70ea9d.css +20 -0
- package/template-vue-vite/dist-test-jsview-chunk/css/App.7ee969c5.css +40 -0
- package/template-vue-vite/dist-test-jsview-chunk/css/App.8056ee27.css +144 -0
- package/template-vue-vite/dist-test-jsview-chunk/css/App.81e870e8.css +16 -0
- package/template-vue-vite/dist-test-jsview-chunk/css/App.8a41b2c9.css +4 -0
- package/template-vue-vite/dist-test-jsview-chunk/css/App.8b7fc4be.css +21 -0
- package/template-vue-vite/dist-test-jsview-chunk/css/App.9acd4020.css +9 -0
- package/template-vue-vite/dist-test-jsview-chunk/css/App.9b8ef7c4.css +17 -0
- package/template-vue-vite/dist-test-jsview-chunk/css/App.9c2363fe.css +11 -0
- package/template-vue-vite/dist-test-jsview-chunk/css/App.9c9050df.css +10 -0
- package/template-vue-vite/dist-test-jsview-chunk/css/App.a37ce6b4.css +78 -0
- package/template-vue-vite/dist-test-jsview-chunk/css/App.acd46c9f.css +29 -0
- package/template-vue-vite/dist-test-jsview-chunk/css/App.be6992f1.css +5 -0
- package/template-vue-vite/dist-test-jsview-chunk/css/App.ce985162.css +37 -0
- package/template-vue-vite/dist-test-jsview-chunk/css/App.cf0eea52.css +29 -0
- package/template-vue-vite/dist-test-jsview-chunk/css/App.d80395de.css +76 -0
- package/template-vue-vite/dist-test-jsview-chunk/css/App.dc17d9ed.css +355 -0
- package/template-vue-vite/dist-test-jsview-chunk/css/App.e25f7308.css +20 -0
- package/template-vue-vite/dist-test-jsview-chunk/css/App.e3998d69.css +10 -0
- package/template-vue-vite/dist-test-jsview-chunk/css/App.e864d83a.css +99 -0
- package/template-vue-vite/dist-test-jsview-chunk/css/App.eea7c4d0.css +37 -0
- package/template-vue-vite/dist-test-jsview-chunk/css/App.f7bae60e.css +24 -0
- package/template-vue-vite/dist-test-jsview-chunk/css/App.fb916576.css +53 -0
- package/template-vue-vite/dist-test-jsview-chunk/css/App.ff455e8a.css +23 -0
- package/template-vue-vite/dist-test-jsview-chunk/css/DispersedItemSample.24d1e5c2.css +31 -0
- package/template-vue-vite/dist-test-jsview-chunk/css/Homepage.6291bd50.css +60 -0
- package/template-vue-vite/dist-test-jsview-chunk/css/HorizontalButtonList.f4192657.css +12 -0
- package/template-vue-vite/dist-test-jsview-chunk/css/MainPage.7bafbf88.css +9 -0
- package/template-vue-vite/dist-test-jsview-chunk/css/SubPage.e3029827.css +17 -0
- package/template-vue-vite/dist-test-jsview-chunk/css/index.bc47ba9c.css +20 -0
- package/template-vue-vite/dist-test-jsview-chunk/css/main.78821670.css +11 -0
- package/template-vue-vite/dist-test-jsview-chunk/debug/jsview-jsmap-serve.mjs +130 -0
- package/template-vue-vite/dist-test-jsview-chunk/debug/map/jsview-dom-browser.min.24b59670.js.map +1 -0
- package/template-vue-vite/dist-test-jsview-chunk/debug/map/jsview-dom-entry.280f04b1.js.map +1 -0
- package/template-vue-vite/dist-test-jsview-chunk/debug/map/jsview-dom-native.min.0039079f.js.map +1 -0
- package/template-vue-vite/dist-test-jsview-chunk/debug/map/jsview-engine-js-browser.min.f40edc22.js.map +1 -0
- package/template-vue-vite/dist-test-jsview-chunk/debug/map/jsview-forge-define.bfab260e.js.map +1 -0
- package/template-vue-vite/dist-test-jsview-chunk/debug/map/jsview-forge-define.min.26efdcd1.js.map +1 -0
- package/template-vue-vite/dist-test-jsview-chunk/debug/map/jsview-loader.f9249ad3.js.map +1 -0
- package/template-vue-vite/dist-test-jsview-chunk/debug/map/jsview-vue-entry.415721d8.js.map +1 -0
- package/template-vue-vite/dist-test-jsview-chunk/index.html +14 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.0020360a.js +141 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.073cedd6.js +399 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.0f963d38.js +95 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.11cde12f.js +344 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.121965ad.js +116 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.1575b8f0.js +200 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.21ff555f.js +455 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.29b9c765.js +383 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.34ff6b40.js +107 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.361be0b7.js +144 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.368006e4.js +431 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.36fc32c5.js +192 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.386a753e.js +259 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.3b0de676.js +321 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.3e808b09.js +92 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.40f6e609.js +97 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.539ee14e.js +331 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.55166fae.js +189 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.56200035.js +221 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.5698ed0a.js +243 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.5788a834.js +1675 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.5a51ba28.js +788 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.5db3be20.js +215 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.5f895413.js +53 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.5f95520c.js +320 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.64e2a47b.js +276 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.69ca326b.js +107 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.6f92a934.js +277 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.6fafe9e2.js +430 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.7067dfe2.js +120 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.754fa30e.js +776 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.7a63fc1e.js +240 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.7b9d1275.js +447 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.7bf78a71.js +89 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.832753e3.js +98 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.83b9bc1a.js +194 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.8473b928.js +568 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.85f0e26b.js +1342 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.8e86826b.js +502 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.94064c31.js +104 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.9625268d.js +173 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.96596f9f.js +119 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.977c745b.js +237 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.9e7fbf3c.js +122 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.a059fc60.js +676 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.a446bb49.js +369 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.a485fc61.js +139 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.a574bf96.js +122 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.a58787a4.js +225 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.a6e90b5c.js +614 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.a6ef2ea5.js +241 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.a82ae465.js +119 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.ab97fadc.js +306 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.b8d07d60.js +68 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.ba82ae89.js +731 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.c0fa704f.js +181 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.ca457df6.js +193 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.cab5b11a.js +182 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.ceb70fcc.js +395 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.d1955c7b.js +139 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.d35f431e.js +524 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.d434d1bc.js +1201 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.d9ea2537.js +172 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.dce9c295.js +209 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.e06251fc.js +157 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.e160a2dd.js +587 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.e1d44beb.js +198 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.e442e6e0.js +611 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.e75db44d.js +257 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.ebb89cc7.js +97 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.f5f253ec.js +143 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App.f6a2ac1e.js +251 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/App2.f586c86d.js +112 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/BrowserApic.64639b51.js +112 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/BrowserApic.vue.5e093f8c.js +130 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/BrowserApic2.8b0c8a0a.js +106 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/BrowserApic2.vue.7959bd77.js +124 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/BrowserApicLib.14ef44a9.js +416 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/BrowserAudio.28bef0de.js +251 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/BrowserAudio.vue.b874d583.js +265 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/BrowserJsvLatex.06fbda62.js +100 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/BrowserJsvLatex.vue.f0cdb016.js +112 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/BrowserJsvPlayer.a6858caf.js +563 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/BrowserJsvPlayer.vue.8615ee65.js +575 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/BrowserPreload.fe21457d.js +139 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/BrowserPreload.vue.23eda6fd.js +146 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/BrowserQrcode.727b4b8f.js +175 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/BrowserQrcode.vue.8e2b3454.js +181 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/BrowserSpray.b126f2ae.js +57 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/BrowserSpray.vue.52301a81.js +70 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/BrowserTextureAnim.e70349c2.js +315 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/BrowserTextureAnim.vue.5426b5db.js +327 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/DispersedItemSample.9696c982.js +534 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/GifData.e5dd9fac.js +429 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/Homepage.d8afeb55.js +466 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/HorizontalButtonList.bbdbc725.js +160 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/MainPage.cff1e89b.js +57 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/SubPage.9633adf8.js +59 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/app.config.92148fde.js +18 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/export-sfc.2749ebea.js +23 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/index.32520aa9.js +938 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/index.56197146.js +2892 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/index.f76869d4.js +7522 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/jpegDemo.ff177df5.js +7 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/jsview-dom-browser.min.24b59670.js +1913 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/jsview-dom-entry.280f04b1.js +76 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/jsview-dom-native.min.0039079f.js +1487 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/jsview-engine-js-browser.min.f40edc22.js +10684 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/jsview-forge-define.bfab260e.js +9 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/jsview-forge-define.min.26efdcd1.js +97 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/jsview-loader.f9249ad3.js +238 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/jsview-vue-entry.415721d8.js +22233 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/jsview.config.a8cf302c.js +49 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/main.bd759d7c.js +565 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/main.jsv.51a0d4f8.mjs +28 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/main.jsv.mjs +28 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/permission.88de599e.js +7 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/pngNoAlphaDemo.fbc58313.js +7 -0
- package/template-vue-vite/dist-test-jsview-chunk/js/vue.889a9b8b.js +5382 -0
- package/template-vue-vite/dist-test-jsview-chunk/jsv-info.json +9 -0
- package/template-vue-vite/dist-test-jsview-chunk/jsv-list.json +248 -0
- package/template-vue-vite/package-lock-json +6 -6
- package/template-vue-vite/package.json +2 -2
- package/template-vue-vite/src/permissionResult.tsx +5 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsview-vue-entry.415721d8.js","sources":["../../node_modules/@shijiu/jsview-vue/bin/jsview-vue-common.mjs","../../node_modules/vue-router/dist/vue-router.mjs","../../node_modules/@shijiu/jsview-vue/bin/jsview-vue.mjs"],"sourcesContent":["//!\n//! utils/JsViewVueWidget/JsvApic/JsvCommonLoopToolBase.js;\n//!\nclass LoopToolBase {\n constructor() {\n this.mFrameIndex = -1;\n this.mTotalFrameNum = -1;\n this.mNextFrameIndex = -1;\n this.mValide = false;\n }\n getNextIndex(curIndex) {\n return -1;\n }\n hasNext() {\n return this.mNextFrameIndex != -1;\n }\n next() {\n this.mFrameIndex = this.mNextFrameIndex;\n this.mNextFrameIndex = this.getNextIndex(this.mFrameIndex);\n return this.mFrameIndex;\n }\n setApicInfo(frameNum, loopNum) {\n this.mTotalFrameNum = frameNum;\n this.mLoopNum = loopNum;\n }\n}\nconst LoopType = {\n LOOP_DEFAULT: 0,\n LOOP_INFINITE: 1,\n LOOP_FINITE: 2,\n LOOP_PART: 3,\n LOOP_SINGLE: 4\n};\nconst ApicEndState = {\n HIDE: 1,\n LAST_FRAME: 2\n};\n\nexport { ApicEndState as A, LoopType as L, LoopToolBase as a };\n","/*!\r\n * vue-router v4.1.6\r\n * (c) 2022 Eduardo San Martin Morote\r\n * @license MIT\r\n */\r\nimport { getCurrentInstance, inject, onUnmounted, onDeactivated, onActivated, computed, unref, watchEffect, defineComponent, reactive, h, provide, ref, watch, shallowRef, nextTick } from 'vue';\r\nimport { setupDevtoolsPlugin } from '@vue/devtools-api';\r\n\r\nconst isBrowser = typeof window !== 'undefined';\r\n\r\nfunction isESModule(obj) {\r\n return obj.__esModule || obj[Symbol.toStringTag] === 'Module';\r\n}\r\nconst assign = Object.assign;\r\nfunction applyToParams(fn, params) {\r\n const newParams = {};\r\n for (const key in params) {\r\n const value = params[key];\r\n newParams[key] = isArray(value)\r\n ? value.map(fn)\r\n : fn(value);\r\n }\r\n return newParams;\r\n}\r\nconst noop = () => { };\r\n/**\r\n * Typesafe alternative to Array.isArray\r\n * https://github.com/microsoft/TypeScript/pull/48228\r\n */\r\nconst isArray = Array.isArray;\r\n\r\nfunction warn(msg) {\r\n // avoid using ...args as it breaks in older Edge builds\r\n const args = Array.from(arguments).slice(1);\r\n console.warn.apply(console, ['[Vue Router warn]: ' + msg].concat(args));\r\n}\r\n\r\nconst TRAILING_SLASH_RE = /\\/$/;\r\nconst removeTrailingSlash = (path) => path.replace(TRAILING_SLASH_RE, '');\r\n/**\r\n * Transforms a URI into a normalized history location\r\n *\r\n * @param parseQuery\r\n * @param location - URI to normalize\r\n * @param currentLocation - current absolute location. Allows resolving relative\r\n * paths. Must start with `/`. Defaults to `/`\r\n * @returns a normalized history location\r\n */\r\nfunction parseURL(parseQuery, location, currentLocation = '/') {\r\n let path, query = {}, searchString = '', hash = '';\r\n // Could use URL and URLSearchParams but IE 11 doesn't support it\r\n // TODO: move to new URL()\r\n const hashPos = location.indexOf('#');\r\n let searchPos = location.indexOf('?');\r\n // the hash appears before the search, so it's not part of the search string\r\n if (hashPos < searchPos && hashPos >= 0) {\r\n searchPos = -1;\r\n }\r\n if (searchPos > -1) {\r\n path = location.slice(0, searchPos);\r\n searchString = location.slice(searchPos + 1, hashPos > -1 ? hashPos : location.length);\r\n query = parseQuery(searchString);\r\n }\r\n if (hashPos > -1) {\r\n path = path || location.slice(0, hashPos);\r\n // keep the # character\r\n hash = location.slice(hashPos, location.length);\r\n }\r\n // no search and no query\r\n path = resolveRelativePath(path != null ? path : location, currentLocation);\r\n // empty path means a relative query or hash `?foo=f`, `#thing`\r\n return {\r\n fullPath: path + (searchString && '?') + searchString + hash,\r\n path,\r\n query,\r\n hash,\r\n };\r\n}\r\n/**\r\n * Stringifies a URL object\r\n *\r\n * @param stringifyQuery\r\n * @param location\r\n */\r\nfunction stringifyURL(stringifyQuery, location) {\r\n const query = location.query ? stringifyQuery(location.query) : '';\r\n return location.path + (query && '?') + query + (location.hash || '');\r\n}\r\n/**\r\n * Strips off the base from the beginning of a location.pathname in a non-case-sensitive way.\r\n *\r\n * @param pathname - location.pathname\r\n * @param base - base to strip off\r\n */\r\nfunction stripBase(pathname, base) {\r\n // no base or base is not found at the beginning\r\n if (!base || !pathname.toLowerCase().startsWith(base.toLowerCase()))\r\n return pathname;\r\n return pathname.slice(base.length) || '/';\r\n}\r\n/**\r\n * Checks if two RouteLocation are equal. This means that both locations are\r\n * pointing towards the same {@link RouteRecord} and that all `params`, `query`\r\n * parameters and `hash` are the same\r\n *\r\n * @param a - first {@link RouteLocation}\r\n * @param b - second {@link RouteLocation}\r\n */\r\nfunction isSameRouteLocation(stringifyQuery, a, b) {\r\n const aLastIndex = a.matched.length - 1;\r\n const bLastIndex = b.matched.length - 1;\r\n return (aLastIndex > -1 &&\r\n aLastIndex === bLastIndex &&\r\n isSameRouteRecord(a.matched[aLastIndex], b.matched[bLastIndex]) &&\r\n isSameRouteLocationParams(a.params, b.params) &&\r\n stringifyQuery(a.query) === stringifyQuery(b.query) &&\r\n a.hash === b.hash);\r\n}\r\n/**\r\n * Check if two `RouteRecords` are equal. Takes into account aliases: they are\r\n * considered equal to the `RouteRecord` they are aliasing.\r\n *\r\n * @param a - first {@link RouteRecord}\r\n * @param b - second {@link RouteRecord}\r\n */\r\nfunction isSameRouteRecord(a, b) {\r\n // since the original record has an undefined value for aliasOf\r\n // but all aliases point to the original record, this will always compare\r\n // the original record\r\n return (a.aliasOf || a) === (b.aliasOf || b);\r\n}\r\nfunction isSameRouteLocationParams(a, b) {\r\n if (Object.keys(a).length !== Object.keys(b).length)\r\n return false;\r\n for (const key in a) {\r\n if (!isSameRouteLocationParamsValue(a[key], b[key]))\r\n return false;\r\n }\r\n return true;\r\n}\r\nfunction isSameRouteLocationParamsValue(a, b) {\r\n return isArray(a)\r\n ? isEquivalentArray(a, b)\r\n : isArray(b)\r\n ? isEquivalentArray(b, a)\r\n : a === b;\r\n}\r\n/**\r\n * Check if two arrays are the same or if an array with one single entry is the\r\n * same as another primitive value. Used to check query and parameters\r\n *\r\n * @param a - array of values\r\n * @param b - array of values or a single value\r\n */\r\nfunction isEquivalentArray(a, b) {\r\n return isArray(b)\r\n ? a.length === b.length && a.every((value, i) => value === b[i])\r\n : a.length === 1 && a[0] === b;\r\n}\r\n/**\r\n * Resolves a relative path that starts with `.`.\r\n *\r\n * @param to - path location we are resolving\r\n * @param from - currentLocation.path, should start with `/`\r\n */\r\nfunction resolveRelativePath(to, from) {\r\n if (to.startsWith('/'))\r\n return to;\r\n if ((process.env.NODE_ENV !== 'production') && !from.startsWith('/')) {\r\n warn(`Cannot resolve a relative location without an absolute path. Trying to resolve \"${to}\" from \"${from}\". It should look like \"/${from}\".`);\r\n return to;\r\n }\r\n if (!to)\r\n return from;\r\n const fromSegments = from.split('/');\r\n const toSegments = to.split('/');\r\n let position = fromSegments.length - 1;\r\n let toPosition;\r\n let segment;\r\n for (toPosition = 0; toPosition < toSegments.length; toPosition++) {\r\n segment = toSegments[toPosition];\r\n // we stay on the same position\r\n if (segment === '.')\r\n continue;\r\n // go up in the from array\r\n if (segment === '..') {\r\n // we can't go below zero, but we still need to increment toPosition\r\n if (position > 1)\r\n position--;\r\n // continue\r\n }\r\n // we reached a non-relative path, we stop here\r\n else\r\n break;\r\n }\r\n return (fromSegments.slice(0, position).join('/') +\r\n '/' +\r\n toSegments\r\n // ensure we use at least the last element in the toSegments\r\n .slice(toPosition - (toPosition === toSegments.length ? 1 : 0))\r\n .join('/'));\r\n}\r\n\r\nvar NavigationType;\r\n(function (NavigationType) {\r\n NavigationType[\"pop\"] = \"pop\";\r\n NavigationType[\"push\"] = \"push\";\r\n})(NavigationType || (NavigationType = {}));\r\nvar NavigationDirection;\r\n(function (NavigationDirection) {\r\n NavigationDirection[\"back\"] = \"back\";\r\n NavigationDirection[\"forward\"] = \"forward\";\r\n NavigationDirection[\"unknown\"] = \"\";\r\n})(NavigationDirection || (NavigationDirection = {}));\r\n/**\r\n * Starting location for Histories\r\n */\r\nconst START = '';\r\n// Generic utils\r\n/**\r\n * Normalizes a base by removing any trailing slash and reading the base tag if\r\n * present.\r\n *\r\n * @param base - base to normalize\r\n */\r\nfunction normalizeBase(base) {\r\n if (!base) {\r\n if (isBrowser) {\r\n // respect <base> tag\r\n const baseEl = document.querySelector('base');\r\n base = (baseEl && baseEl.getAttribute('href')) || '/';\r\n // strip full URL origin\r\n base = base.replace(/^\\w+:\\/\\/[^\\/]+/, '');\r\n }\r\n else {\r\n base = '/';\r\n }\r\n }\r\n // ensure leading slash when it was removed by the regex above avoid leading\r\n // slash with hash because the file could be read from the disk like file://\r\n // and the leading slash would cause problems\r\n if (base[0] !== '/' && base[0] !== '#')\r\n base = '/' + base;\r\n // remove the trailing slash so all other method can just do `base + fullPath`\r\n // to build an href\r\n return removeTrailingSlash(base);\r\n}\r\n// remove any character before the hash\r\nconst BEFORE_HASH_RE = /^[^#]+#/;\r\nfunction createHref(base, location) {\r\n return base.replace(BEFORE_HASH_RE, '#') + location;\r\n}\r\n\r\nfunction getElementPosition(el, offset) {\r\n const docRect = document.documentElement.getBoundingClientRect();\r\n const elRect = el.getBoundingClientRect();\r\n return {\r\n behavior: offset.behavior,\r\n left: elRect.left - docRect.left - (offset.left || 0),\r\n top: elRect.top - docRect.top - (offset.top || 0),\r\n };\r\n}\r\nconst computeScrollPosition = () => ({\r\n left: window.pageXOffset,\r\n top: window.pageYOffset,\r\n});\r\nfunction scrollToPosition(position) {\r\n let scrollToOptions;\r\n if ('el' in position) {\r\n const positionEl = position.el;\r\n const isIdSelector = typeof positionEl === 'string' && positionEl.startsWith('#');\r\n /**\r\n * `id`s can accept pretty much any characters, including CSS combinators\r\n * like `>` or `~`. It's still possible to retrieve elements using\r\n * `document.getElementById('~')` but it needs to be escaped when using\r\n * `document.querySelector('#\\\\~')` for it to be valid. The only\r\n * requirements for `id`s are them to be unique on the page and to not be\r\n * empty (`id=\"\"`). Because of that, when passing an id selector, it should\r\n * be properly escaped for it to work with `querySelector`. We could check\r\n * for the id selector to be simple (no CSS combinators `+ >~`) but that\r\n * would make things inconsistent since they are valid characters for an\r\n * `id` but would need to be escaped when using `querySelector`, breaking\r\n * their usage and ending up in no selector returned. Selectors need to be\r\n * escaped:\r\n *\r\n * - `#1-thing` becomes `#\\31 -thing`\r\n * - `#with~symbols` becomes `#with\\\\~symbols`\r\n *\r\n * - More information about the topic can be found at\r\n * https://mathiasbynens.be/notes/html5-id-class.\r\n * - Practical example: https://mathiasbynens.be/demo/html5-id\r\n */\r\n if ((process.env.NODE_ENV !== 'production') && typeof position.el === 'string') {\r\n if (!isIdSelector || !document.getElementById(position.el.slice(1))) {\r\n try {\r\n const foundEl = document.querySelector(position.el);\r\n if (isIdSelector && foundEl) {\r\n warn(`The selector \"${position.el}\" should be passed as \"el: document.querySelector('${position.el}')\" because it starts with \"#\".`);\r\n // return to avoid other warnings\r\n return;\r\n }\r\n }\r\n catch (err) {\r\n warn(`The selector \"${position.el}\" is invalid. If you are using an id selector, make sure to escape it. You can find more information about escaping characters in selectors at https://mathiasbynens.be/notes/css-escapes or use CSS.escape (https://developer.mozilla.org/en-US/docs/Web/API/CSS/escape).`);\r\n // return to avoid other warnings\r\n return;\r\n }\r\n }\r\n }\r\n const el = typeof positionEl === 'string'\r\n ? isIdSelector\r\n ? document.getElementById(positionEl.slice(1))\r\n : document.querySelector(positionEl)\r\n : positionEl;\r\n if (!el) {\r\n (process.env.NODE_ENV !== 'production') &&\r\n warn(`Couldn't find element using selector \"${position.el}\" returned by scrollBehavior.`);\r\n return;\r\n }\r\n scrollToOptions = getElementPosition(el, position);\r\n }\r\n else {\r\n scrollToOptions = position;\r\n }\r\n if ('scrollBehavior' in document.documentElement.style)\r\n window.scrollTo(scrollToOptions);\r\n else {\r\n window.scrollTo(scrollToOptions.left != null ? scrollToOptions.left : window.pageXOffset, scrollToOptions.top != null ? scrollToOptions.top : window.pageYOffset);\r\n }\r\n}\r\nfunction getScrollKey(path, delta) {\r\n const position = history.state ? history.state.position - delta : -1;\r\n return position + path;\r\n}\r\nconst scrollPositions = new Map();\r\nfunction saveScrollPosition(key, scrollPosition) {\r\n scrollPositions.set(key, scrollPosition);\r\n}\r\nfunction getSavedScrollPosition(key) {\r\n const scroll = scrollPositions.get(key);\r\n // consume it so it's not used again\r\n scrollPositions.delete(key);\r\n return scroll;\r\n}\r\n// TODO: RFC about how to save scroll position\r\n/**\r\n * ScrollBehavior instance used by the router to compute and restore the scroll\r\n * position when navigating.\r\n */\r\n// export interface ScrollHandler<ScrollPositionEntry extends HistoryStateValue, ScrollPosition extends ScrollPositionEntry> {\r\n// // returns a scroll position that can be saved in history\r\n// compute(): ScrollPositionEntry\r\n// // can take an extended ScrollPositionEntry\r\n// scroll(position: ScrollPosition): void\r\n// }\r\n// export const scrollHandler: ScrollHandler<ScrollPosition> = {\r\n// compute: computeScroll,\r\n// scroll: scrollToPosition,\r\n// }\r\n\r\nlet createBaseLocation = () => location.protocol + '//' + location.host;\r\n/**\r\n * Creates a normalized history location from a window.location object\r\n * @param location -\r\n */\r\nfunction createCurrentLocation(base, location) {\r\n const { pathname, search, hash } = location;\r\n // allows hash bases like #, /#, #/, #!, #!/, /#!/, or even /folder#end\r\n const hashPos = base.indexOf('#');\r\n if (hashPos > -1) {\r\n let slicePos = hash.includes(base.slice(hashPos))\r\n ? base.slice(hashPos).length\r\n : 1;\r\n let pathFromHash = hash.slice(slicePos);\r\n // prepend the starting slash to hash so the url starts with /#\r\n if (pathFromHash[0] !== '/')\r\n pathFromHash = '/' + pathFromHash;\r\n return stripBase(pathFromHash, '');\r\n }\r\n const path = stripBase(pathname, base);\r\n return path + search + hash;\r\n}\r\nfunction useHistoryListeners(base, historyState, currentLocation, replace) {\r\n let listeners = [];\r\n let teardowns = [];\r\n // TODO: should it be a stack? a Dict. Check if the popstate listener\r\n // can trigger twice\r\n let pauseState = null;\r\n const popStateHandler = ({ state, }) => {\r\n const to = createCurrentLocation(base, location);\r\n const from = currentLocation.value;\r\n const fromState = historyState.value;\r\n let delta = 0;\r\n if (state) {\r\n currentLocation.value = to;\r\n historyState.value = state;\r\n // ignore the popstate and reset the pauseState\r\n if (pauseState && pauseState === from) {\r\n pauseState = null;\r\n return;\r\n }\r\n delta = fromState ? state.position - fromState.position : 0;\r\n }\r\n else {\r\n replace(to);\r\n }\r\n // console.log({ deltaFromCurrent })\r\n // Here we could also revert the navigation by calling history.go(-delta)\r\n // this listener will have to be adapted to not trigger again and to wait for the url\r\n // to be updated before triggering the listeners. Some kind of validation function would also\r\n // need to be passed to the listeners so the navigation can be accepted\r\n // call all listeners\r\n listeners.forEach(listener => {\r\n listener(currentLocation.value, from, {\r\n delta,\r\n type: NavigationType.pop,\r\n direction: delta\r\n ? delta > 0\r\n ? NavigationDirection.forward\r\n : NavigationDirection.back\r\n : NavigationDirection.unknown,\r\n });\r\n });\r\n };\r\n function pauseListeners() {\r\n pauseState = currentLocation.value;\r\n }\r\n function listen(callback) {\r\n // set up the listener and prepare teardown callbacks\r\n listeners.push(callback);\r\n const teardown = () => {\r\n const index = listeners.indexOf(callback);\r\n if (index > -1)\r\n listeners.splice(index, 1);\r\n };\r\n teardowns.push(teardown);\r\n return teardown;\r\n }\r\n function beforeUnloadListener() {\r\n const { history } = window;\r\n if (!history.state)\r\n return;\r\n history.replaceState(assign({}, history.state, { scroll: computeScrollPosition() }), '');\r\n }\r\n function destroy() {\r\n for (const teardown of teardowns)\r\n teardown();\r\n teardowns = [];\r\n window.removeEventListener('popstate', popStateHandler);\r\n window.removeEventListener('beforeunload', beforeUnloadListener);\r\n }\r\n // set up the listeners and prepare teardown callbacks\r\n window.addEventListener('popstate', popStateHandler);\r\n window.addEventListener('beforeunload', beforeUnloadListener);\r\n return {\r\n pauseListeners,\r\n listen,\r\n destroy,\r\n };\r\n}\r\n/**\r\n * Creates a state object\r\n */\r\nfunction buildState(back, current, forward, replaced = false, computeScroll = false) {\r\n return {\r\n back,\r\n current,\r\n forward,\r\n replaced,\r\n position: window.history.length,\r\n scroll: computeScroll ? computeScrollPosition() : null,\r\n };\r\n}\r\nfunction useHistoryStateNavigation(base) {\r\n const { history, location } = window;\r\n // private variables\r\n const currentLocation = {\r\n value: createCurrentLocation(base, location),\r\n };\r\n const historyState = { value: history.state };\r\n // build current history entry as this is a fresh navigation\r\n if (!historyState.value) {\r\n changeLocation(currentLocation.value, {\r\n back: null,\r\n current: currentLocation.value,\r\n forward: null,\r\n // the length is off by one, we need to decrease it\r\n position: history.length - 1,\r\n replaced: true,\r\n // don't add a scroll as the user may have an anchor, and we want\r\n // scrollBehavior to be triggered without a saved position\r\n scroll: null,\r\n }, true);\r\n }\r\n function changeLocation(to, state, replace) {\r\n /**\r\n * if a base tag is provided, and we are on a normal domain, we have to\r\n * respect the provided `base` attribute because pushState() will use it and\r\n * potentially erase anything before the `#` like at\r\n * https://github.com/vuejs/router/issues/685 where a base of\r\n * `/folder/#` but a base of `/` would erase the `/folder/` section. If\r\n * there is no host, the `<base>` tag makes no sense and if there isn't a\r\n * base tag we can just use everything after the `#`.\r\n */\r\n const hashIndex = base.indexOf('#');\r\n const url = hashIndex > -1\r\n ? (location.host && document.querySelector('base')\r\n ? base\r\n : base.slice(hashIndex)) + to\r\n : createBaseLocation() + base + to;\r\n try {\r\n // BROWSER QUIRK\r\n // NOTE: Safari throws a SecurityError when calling this function 100 times in 30 seconds\r\n history[replace ? 'replaceState' : 'pushState'](state, '', url);\r\n historyState.value = state;\r\n }\r\n catch (err) {\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n warn('Error with push/replace State', err);\r\n }\r\n else {\r\n console.error(err);\r\n }\r\n // Force the navigation, this also resets the call count\r\n location[replace ? 'replace' : 'assign'](url);\r\n }\r\n }\r\n function replace(to, data) {\r\n const state = assign({}, history.state, buildState(historyState.value.back, \r\n // keep back and forward entries but override current position\r\n to, historyState.value.forward, true), data, { position: historyState.value.position });\r\n changeLocation(to, state, true);\r\n currentLocation.value = to;\r\n }\r\n function push(to, data) {\r\n // Add to current entry the information of where we are going\r\n // as well as saving the current position\r\n const currentState = assign({}, \r\n // use current history state to gracefully handle a wrong call to\r\n // history.replaceState\r\n // https://github.com/vuejs/router/issues/366\r\n historyState.value, history.state, {\r\n forward: to,\r\n scroll: computeScrollPosition(),\r\n });\r\n if ((process.env.NODE_ENV !== 'production') && !history.state) {\r\n warn(`history.state seems to have been manually replaced without preserving the necessary values. Make sure to preserve existing history state if you are manually calling history.replaceState:\\n\\n` +\r\n `history.replaceState(history.state, '', url)\\n\\n` +\r\n `You can find more information at https://next.router.vuejs.org/guide/migration/#usage-of-history-state.`);\r\n }\r\n changeLocation(currentState.current, currentState, true);\r\n const state = assign({}, buildState(currentLocation.value, to, null), { position: currentState.position + 1 }, data);\r\n changeLocation(to, state, false);\r\n currentLocation.value = to;\r\n }\r\n return {\r\n location: currentLocation,\r\n state: historyState,\r\n push,\r\n replace,\r\n };\r\n}\r\n/**\r\n * Creates an HTML5 history. Most common history for single page applications.\r\n *\r\n * @param base -\r\n */\r\nfunction createWebHistory(base) {\r\n base = normalizeBase(base);\r\n const historyNavigation = useHistoryStateNavigation(base);\r\n const historyListeners = useHistoryListeners(base, historyNavigation.state, historyNavigation.location, historyNavigation.replace);\r\n function go(delta, triggerListeners = true) {\r\n if (!triggerListeners)\r\n historyListeners.pauseListeners();\r\n history.go(delta);\r\n }\r\n const routerHistory = assign({\r\n // it's overridden right after\r\n location: '',\r\n base,\r\n go,\r\n createHref: createHref.bind(null, base),\r\n }, historyNavigation, historyListeners);\r\n Object.defineProperty(routerHistory, 'location', {\r\n enumerable: true,\r\n get: () => historyNavigation.location.value,\r\n });\r\n Object.defineProperty(routerHistory, 'state', {\r\n enumerable: true,\r\n get: () => historyNavigation.state.value,\r\n });\r\n return routerHistory;\r\n}\r\n\r\n/**\r\n * Creates an in-memory based history. The main purpose of this history is to handle SSR. It starts in a special location that is nowhere.\r\n * It's up to the user to replace that location with the starter location by either calling `router.push` or `router.replace`.\r\n *\r\n * @param base - Base applied to all urls, defaults to '/'\r\n * @returns a history object that can be passed to the router constructor\r\n */\r\nfunction createMemoryHistory(base = '') {\r\n let listeners = [];\r\n let queue = [START];\r\n let position = 0;\r\n base = normalizeBase(base);\r\n function setLocation(location) {\r\n position++;\r\n if (position === queue.length) {\r\n // we are at the end, we can simply append a new entry\r\n queue.push(location);\r\n }\r\n else {\r\n // we are in the middle, we remove everything from here in the queue\r\n queue.splice(position);\r\n queue.push(location);\r\n }\r\n }\r\n function triggerListeners(to, from, { direction, delta }) {\r\n const info = {\r\n direction,\r\n delta,\r\n type: NavigationType.pop,\r\n };\r\n for (const callback of listeners) {\r\n callback(to, from, info);\r\n }\r\n }\r\n const routerHistory = {\r\n // rewritten by Object.defineProperty\r\n location: START,\r\n // TODO: should be kept in queue\r\n state: {},\r\n base,\r\n createHref: createHref.bind(null, base),\r\n replace(to) {\r\n // remove current entry and decrement position\r\n queue.splice(position--, 1);\r\n setLocation(to);\r\n },\r\n push(to, data) {\r\n setLocation(to);\r\n },\r\n listen(callback) {\r\n listeners.push(callback);\r\n return () => {\r\n const index = listeners.indexOf(callback);\r\n if (index > -1)\r\n listeners.splice(index, 1);\r\n };\r\n },\r\n destroy() {\r\n listeners = [];\r\n queue = [START];\r\n position = 0;\r\n },\r\n go(delta, shouldTrigger = true) {\r\n const from = this.location;\r\n const direction = \r\n // we are considering delta === 0 going forward, but in abstract mode\r\n // using 0 for the delta doesn't make sense like it does in html5 where\r\n // it reloads the page\r\n delta < 0 ? NavigationDirection.back : NavigationDirection.forward;\r\n position = Math.max(0, Math.min(position + delta, queue.length - 1));\r\n if (shouldTrigger) {\r\n triggerListeners(this.location, from, {\r\n direction,\r\n delta,\r\n });\r\n }\r\n },\r\n };\r\n Object.defineProperty(routerHistory, 'location', {\r\n enumerable: true,\r\n get: () => queue[position],\r\n });\r\n return routerHistory;\r\n}\r\n\r\n/**\r\n * Creates a hash history. Useful for web applications with no host (e.g. `file://`) or when configuring a server to\r\n * handle any URL is not possible.\r\n *\r\n * @param base - optional base to provide. Defaults to `location.pathname + location.search` If there is a `<base>` tag\r\n * in the `head`, its value will be ignored in favor of this parameter **but note it affects all the history.pushState()\r\n * calls**, meaning that if you use a `<base>` tag, it's `href` value **has to match this parameter** (ignoring anything\r\n * after the `#`).\r\n *\r\n * @example\r\n * ```js\r\n * // at https://example.com/folder\r\n * createWebHashHistory() // gives a url of `https://example.com/folder#`\r\n * createWebHashHistory('/folder/') // gives a url of `https://example.com/folder/#`\r\n * // if the `#` is provided in the base, it won't be added by `createWebHashHistory`\r\n * createWebHashHistory('/folder/#/app/') // gives a url of `https://example.com/folder/#/app/`\r\n * // you should avoid doing this because it changes the original url and breaks copying urls\r\n * createWebHashHistory('/other-folder/') // gives a url of `https://example.com/other-folder/#`\r\n *\r\n * // at file:///usr/etc/folder/index.html\r\n * // for locations with no `host`, the base is ignored\r\n * createWebHashHistory('/iAmIgnored') // gives a url of `file:///usr/etc/folder/index.html#`\r\n * ```\r\n */\r\nfunction createWebHashHistory(base) {\r\n // Make sure this implementation is fine in terms of encoding, specially for IE11\r\n // for `file://`, directly use the pathname and ignore the base\r\n // location.pathname contains an initial `/` even at the root: `https://example.com`\r\n base = location.host ? base || location.pathname + location.search : '';\r\n // allow the user to provide a `#` in the middle: `/base/#/app`\r\n if (!base.includes('#'))\r\n base += '#';\r\n if ((process.env.NODE_ENV !== 'production') && !base.endsWith('#/') && !base.endsWith('#')) {\r\n warn(`A hash base must end with a \"#\":\\n\"${base}\" should be \"${base.replace(/#.*$/, '#')}\".`);\r\n }\r\n return createWebHistory(base);\r\n}\r\n\r\nfunction isRouteLocation(route) {\r\n return typeof route === 'string' || (route && typeof route === 'object');\r\n}\r\nfunction isRouteName(name) {\r\n return typeof name === 'string' || typeof name === 'symbol';\r\n}\r\n\r\n/**\r\n * Initial route location where the router is. Can be used in navigation guards\r\n * to differentiate the initial navigation.\r\n *\r\n * @example\r\n * ```js\r\n * import { START_LOCATION } from 'vue-router'\r\n *\r\n * router.beforeEach((to, from) => {\r\n * if (from === START_LOCATION) {\r\n * // initial navigation\r\n * }\r\n * })\r\n * ```\r\n */\r\nconst START_LOCATION_NORMALIZED = {\r\n path: '/',\r\n name: undefined,\r\n params: {},\r\n query: {},\r\n hash: '',\r\n fullPath: '/',\r\n matched: [],\r\n meta: {},\r\n redirectedFrom: undefined,\r\n};\r\n\r\nconst NavigationFailureSymbol = Symbol((process.env.NODE_ENV !== 'production') ? 'navigation failure' : '');\r\n/**\r\n * Enumeration with all possible types for navigation failures. Can be passed to\r\n * {@link isNavigationFailure} to check for specific failures.\r\n */\r\nvar NavigationFailureType;\r\n(function (NavigationFailureType) {\r\n /**\r\n * An aborted navigation is a navigation that failed because a navigation\r\n * guard returned `false` or called `next(false)`\r\n */\r\n NavigationFailureType[NavigationFailureType[\"aborted\"] = 4] = \"aborted\";\r\n /**\r\n * A cancelled navigation is a navigation that failed because a more recent\r\n * navigation finished started (not necessarily finished).\r\n */\r\n NavigationFailureType[NavigationFailureType[\"cancelled\"] = 8] = \"cancelled\";\r\n /**\r\n * A duplicated navigation is a navigation that failed because it was\r\n * initiated while already being at the exact same location.\r\n */\r\n NavigationFailureType[NavigationFailureType[\"duplicated\"] = 16] = \"duplicated\";\r\n})(NavigationFailureType || (NavigationFailureType = {}));\r\n// DEV only debug messages\r\nconst ErrorTypeMessages = {\r\n [1 /* ErrorTypes.MATCHER_NOT_FOUND */]({ location, currentLocation }) {\r\n return `No match for\\n ${JSON.stringify(location)}${currentLocation\r\n ? '\\nwhile being at\\n' + JSON.stringify(currentLocation)\r\n : ''}`;\r\n },\r\n [2 /* ErrorTypes.NAVIGATION_GUARD_REDIRECT */]({ from, to, }) {\r\n return `Redirected from \"${from.fullPath}\" to \"${stringifyRoute(to)}\" via a navigation guard.`;\r\n },\r\n [4 /* ErrorTypes.NAVIGATION_ABORTED */]({ from, to }) {\r\n return `Navigation aborted from \"${from.fullPath}\" to \"${to.fullPath}\" via a navigation guard.`;\r\n },\r\n [8 /* ErrorTypes.NAVIGATION_CANCELLED */]({ from, to }) {\r\n return `Navigation cancelled from \"${from.fullPath}\" to \"${to.fullPath}\" with a new navigation.`;\r\n },\r\n [16 /* ErrorTypes.NAVIGATION_DUPLICATED */]({ from, to }) {\r\n return `Avoided redundant navigation to current location: \"${from.fullPath}\".`;\r\n },\r\n};\r\nfunction createRouterError(type, params) {\r\n // keep full error messages in cjs versions\r\n if ((process.env.NODE_ENV !== 'production') || !true) {\r\n return assign(new Error(ErrorTypeMessages[type](params)), {\r\n type,\r\n [NavigationFailureSymbol]: true,\r\n }, params);\r\n }\r\n else {\r\n return assign(new Error(), {\r\n type,\r\n [NavigationFailureSymbol]: true,\r\n }, params);\r\n }\r\n}\r\nfunction isNavigationFailure(error, type) {\r\n return (error instanceof Error &&\r\n NavigationFailureSymbol in error &&\r\n (type == null || !!(error.type & type)));\r\n}\r\nconst propertiesToLog = ['params', 'query', 'hash'];\r\nfunction stringifyRoute(to) {\r\n if (typeof to === 'string')\r\n return to;\r\n if ('path' in to)\r\n return to.path;\r\n const location = {};\r\n for (const key of propertiesToLog) {\r\n if (key in to)\r\n location[key] = to[key];\r\n }\r\n return JSON.stringify(location, null, 2);\r\n}\r\n\r\n// default pattern for a param: non-greedy everything but /\r\nconst BASE_PARAM_PATTERN = '[^/]+?';\r\nconst BASE_PATH_PARSER_OPTIONS = {\r\n sensitive: false,\r\n strict: false,\r\n start: true,\r\n end: true,\r\n};\r\n// Special Regex characters that must be escaped in static tokens\r\nconst REGEX_CHARS_RE = /[.+*?^${}()[\\]/\\\\]/g;\r\n/**\r\n * Creates a path parser from an array of Segments (a segment is an array of Tokens)\r\n *\r\n * @param segments - array of segments returned by tokenizePath\r\n * @param extraOptions - optional options for the regexp\r\n * @returns a PathParser\r\n */\r\nfunction tokensToParser(segments, extraOptions) {\r\n const options = assign({}, BASE_PATH_PARSER_OPTIONS, extraOptions);\r\n // the amount of scores is the same as the length of segments except for the root segment \"/\"\r\n const score = [];\r\n // the regexp as a string\r\n let pattern = options.start ? '^' : '';\r\n // extracted keys\r\n const keys = [];\r\n for (const segment of segments) {\r\n // the root segment needs special treatment\r\n const segmentScores = segment.length ? [] : [90 /* PathScore.Root */];\r\n // allow trailing slash\r\n if (options.strict && !segment.length)\r\n pattern += '/';\r\n for (let tokenIndex = 0; tokenIndex < segment.length; tokenIndex++) {\r\n const token = segment[tokenIndex];\r\n // resets the score if we are inside a sub-segment /:a-other-:b\r\n let subSegmentScore = 40 /* PathScore.Segment */ +\r\n (options.sensitive ? 0.25 /* PathScore.BonusCaseSensitive */ : 0);\r\n if (token.type === 0 /* TokenType.Static */) {\r\n // prepend the slash if we are starting a new segment\r\n if (!tokenIndex)\r\n pattern += '/';\r\n pattern += token.value.replace(REGEX_CHARS_RE, '\\\\$&');\r\n subSegmentScore += 40 /* PathScore.Static */;\r\n }\r\n else if (token.type === 1 /* TokenType.Param */) {\r\n const { value, repeatable, optional, regexp } = token;\r\n keys.push({\r\n name: value,\r\n repeatable,\r\n optional,\r\n });\r\n const re = regexp ? regexp : BASE_PARAM_PATTERN;\r\n // the user provided a custom regexp /:id(\\\\d+)\r\n if (re !== BASE_PARAM_PATTERN) {\r\n subSegmentScore += 10 /* PathScore.BonusCustomRegExp */;\r\n // make sure the regexp is valid before using it\r\n try {\r\n new RegExp(`(${re})`);\r\n }\r\n catch (err) {\r\n throw new Error(`Invalid custom RegExp for param \"${value}\" (${re}): ` +\r\n err.message);\r\n }\r\n }\r\n // when we repeat we must take care of the repeating leading slash\r\n let subPattern = repeatable ? `((?:${re})(?:/(?:${re}))*)` : `(${re})`;\r\n // prepend the slash if we are starting a new segment\r\n if (!tokenIndex)\r\n subPattern =\r\n // avoid an optional / if there are more segments e.g. /:p?-static\r\n // or /:p?-:p2\r\n optional && segment.length < 2\r\n ? `(?:/${subPattern})`\r\n : '/' + subPattern;\r\n if (optional)\r\n subPattern += '?';\r\n pattern += subPattern;\r\n subSegmentScore += 20 /* PathScore.Dynamic */;\r\n if (optional)\r\n subSegmentScore += -8 /* PathScore.BonusOptional */;\r\n if (repeatable)\r\n subSegmentScore += -20 /* PathScore.BonusRepeatable */;\r\n if (re === '.*')\r\n subSegmentScore += -50 /* PathScore.BonusWildcard */;\r\n }\r\n segmentScores.push(subSegmentScore);\r\n }\r\n // an empty array like /home/ -> [[{home}], []]\r\n // if (!segment.length) pattern += '/'\r\n score.push(segmentScores);\r\n }\r\n // only apply the strict bonus to the last score\r\n if (options.strict && options.end) {\r\n const i = score.length - 1;\r\n score[i][score[i].length - 1] += 0.7000000000000001 /* PathScore.BonusStrict */;\r\n }\r\n // TODO: dev only warn double trailing slash\r\n if (!options.strict)\r\n pattern += '/?';\r\n if (options.end)\r\n pattern += '$';\r\n // allow paths like /dynamic to only match dynamic or dynamic/... but not dynamic_something_else\r\n else if (options.strict)\r\n pattern += '(?:/|$)';\r\n const re = new RegExp(pattern, options.sensitive ? '' : 'i');\r\n function parse(path) {\r\n const match = path.match(re);\r\n const params = {};\r\n if (!match)\r\n return null;\r\n for (let i = 1; i < match.length; i++) {\r\n const value = match[i] || '';\r\n const key = keys[i - 1];\r\n params[key.name] = value && key.repeatable ? value.split('/') : value;\r\n }\r\n return params;\r\n }\r\n function stringify(params) {\r\n let path = '';\r\n // for optional parameters to allow to be empty\r\n let avoidDuplicatedSlash = false;\r\n for (const segment of segments) {\r\n if (!avoidDuplicatedSlash || !path.endsWith('/'))\r\n path += '/';\r\n avoidDuplicatedSlash = false;\r\n for (const token of segment) {\r\n if (token.type === 0 /* TokenType.Static */) {\r\n path += token.value;\r\n }\r\n else if (token.type === 1 /* TokenType.Param */) {\r\n const { value, repeatable, optional } = token;\r\n const param = value in params ? params[value] : '';\r\n if (isArray(param) && !repeatable) {\r\n throw new Error(`Provided param \"${value}\" is an array but it is not repeatable (* or + modifiers)`);\r\n }\r\n const text = isArray(param)\r\n ? param.join('/')\r\n : param;\r\n if (!text) {\r\n if (optional) {\r\n // if we have more than one optional param like /:a?-static we don't need to care about the optional param\r\n if (segment.length < 2) {\r\n // remove the last slash as we could be at the end\r\n if (path.endsWith('/'))\r\n path = path.slice(0, -1);\r\n // do not append a slash on the next iteration\r\n else\r\n avoidDuplicatedSlash = true;\r\n }\r\n }\r\n else\r\n throw new Error(`Missing required param \"${value}\"`);\r\n }\r\n path += text;\r\n }\r\n }\r\n }\r\n // avoid empty path when we have multiple optional params\r\n return path || '/';\r\n }\r\n return {\r\n re,\r\n score,\r\n keys,\r\n parse,\r\n stringify,\r\n };\r\n}\r\n/**\r\n * Compares an array of numbers as used in PathParser.score and returns a\r\n * number. This function can be used to `sort` an array\r\n *\r\n * @param a - first array of numbers\r\n * @param b - second array of numbers\r\n * @returns 0 if both are equal, < 0 if a should be sorted first, > 0 if b\r\n * should be sorted first\r\n */\r\nfunction compareScoreArray(a, b) {\r\n let i = 0;\r\n while (i < a.length && i < b.length) {\r\n const diff = b[i] - a[i];\r\n // only keep going if diff === 0\r\n if (diff)\r\n return diff;\r\n i++;\r\n }\r\n // if the last subsegment was Static, the shorter segments should be sorted first\r\n // otherwise sort the longest segment first\r\n if (a.length < b.length) {\r\n return a.length === 1 && a[0] === 40 /* PathScore.Static */ + 40 /* PathScore.Segment */\r\n ? -1\r\n : 1;\r\n }\r\n else if (a.length > b.length) {\r\n return b.length === 1 && b[0] === 40 /* PathScore.Static */ + 40 /* PathScore.Segment */\r\n ? 1\r\n : -1;\r\n }\r\n return 0;\r\n}\r\n/**\r\n * Compare function that can be used with `sort` to sort an array of PathParser\r\n *\r\n * @param a - first PathParser\r\n * @param b - second PathParser\r\n * @returns 0 if both are equal, < 0 if a should be sorted first, > 0 if b\r\n */\r\nfunction comparePathParserScore(a, b) {\r\n let i = 0;\r\n const aScore = a.score;\r\n const bScore = b.score;\r\n while (i < aScore.length && i < bScore.length) {\r\n const comp = compareScoreArray(aScore[i], bScore[i]);\r\n // do not return if both are equal\r\n if (comp)\r\n return comp;\r\n i++;\r\n }\r\n if (Math.abs(bScore.length - aScore.length) === 1) {\r\n if (isLastScoreNegative(aScore))\r\n return 1;\r\n if (isLastScoreNegative(bScore))\r\n return -1;\r\n }\r\n // if a and b share the same score entries but b has more, sort b first\r\n return bScore.length - aScore.length;\r\n // this is the ternary version\r\n // return aScore.length < bScore.length\r\n // ? 1\r\n // : aScore.length > bScore.length\r\n // ? -1\r\n // : 0\r\n}\r\n/**\r\n * This allows detecting splats at the end of a path: /home/:id(.*)*\r\n *\r\n * @param score - score to check\r\n * @returns true if the last entry is negative\r\n */\r\nfunction isLastScoreNegative(score) {\r\n const last = score[score.length - 1];\r\n return score.length > 0 && last[last.length - 1] < 0;\r\n}\r\n\r\nconst ROOT_TOKEN = {\r\n type: 0 /* TokenType.Static */,\r\n value: '',\r\n};\r\nconst VALID_PARAM_RE = /[a-zA-Z0-9_]/;\r\n// After some profiling, the cache seems to be unnecessary because tokenizePath\r\n// (the slowest part of adding a route) is very fast\r\n// const tokenCache = new Map<string, Token[][]>()\r\nfunction tokenizePath(path) {\r\n if (!path)\r\n return [[]];\r\n if (path === '/')\r\n return [[ROOT_TOKEN]];\r\n if (!path.startsWith('/')) {\r\n throw new Error((process.env.NODE_ENV !== 'production')\r\n ? `Route paths should start with a \"/\": \"${path}\" should be \"/${path}\".`\r\n : `Invalid path \"${path}\"`);\r\n }\r\n // if (tokenCache.has(path)) return tokenCache.get(path)!\r\n function crash(message) {\r\n throw new Error(`ERR (${state})/\"${buffer}\": ${message}`);\r\n }\r\n let state = 0 /* TokenizerState.Static */;\r\n let previousState = state;\r\n const tokens = [];\r\n // the segment will always be valid because we get into the initial state\r\n // with the leading /\r\n let segment;\r\n function finalizeSegment() {\r\n if (segment)\r\n tokens.push(segment);\r\n segment = [];\r\n }\r\n // index on the path\r\n let i = 0;\r\n // char at index\r\n let char;\r\n // buffer of the value read\r\n let buffer = '';\r\n // custom regexp for a param\r\n let customRe = '';\r\n function consumeBuffer() {\r\n if (!buffer)\r\n return;\r\n if (state === 0 /* TokenizerState.Static */) {\r\n segment.push({\r\n type: 0 /* TokenType.Static */,\r\n value: buffer,\r\n });\r\n }\r\n else if (state === 1 /* TokenizerState.Param */ ||\r\n state === 2 /* TokenizerState.ParamRegExp */ ||\r\n state === 3 /* TokenizerState.ParamRegExpEnd */) {\r\n if (segment.length > 1 && (char === '*' || char === '+'))\r\n crash(`A repeatable param (${buffer}) must be alone in its segment. eg: '/:ids+.`);\r\n segment.push({\r\n type: 1 /* TokenType.Param */,\r\n value: buffer,\r\n regexp: customRe,\r\n repeatable: char === '*' || char === '+',\r\n optional: char === '*' || char === '?',\r\n });\r\n }\r\n else {\r\n crash('Invalid state to consume buffer');\r\n }\r\n buffer = '';\r\n }\r\n function addCharToBuffer() {\r\n buffer += char;\r\n }\r\n while (i < path.length) {\r\n char = path[i++];\r\n if (char === '\\\\' && state !== 2 /* TokenizerState.ParamRegExp */) {\r\n previousState = state;\r\n state = 4 /* TokenizerState.EscapeNext */;\r\n continue;\r\n }\r\n switch (state) {\r\n case 0 /* TokenizerState.Static */:\r\n if (char === '/') {\r\n if (buffer) {\r\n consumeBuffer();\r\n }\r\n finalizeSegment();\r\n }\r\n else if (char === ':') {\r\n consumeBuffer();\r\n state = 1 /* TokenizerState.Param */;\r\n }\r\n else {\r\n addCharToBuffer();\r\n }\r\n break;\r\n case 4 /* TokenizerState.EscapeNext */:\r\n addCharToBuffer();\r\n state = previousState;\r\n break;\r\n case 1 /* TokenizerState.Param */:\r\n if (char === '(') {\r\n state = 2 /* TokenizerState.ParamRegExp */;\r\n }\r\n else if (VALID_PARAM_RE.test(char)) {\r\n addCharToBuffer();\r\n }\r\n else {\r\n consumeBuffer();\r\n state = 0 /* TokenizerState.Static */;\r\n // go back one character if we were not modifying\r\n if (char !== '*' && char !== '?' && char !== '+')\r\n i--;\r\n }\r\n break;\r\n case 2 /* TokenizerState.ParamRegExp */:\r\n // TODO: is it worth handling nested regexp? like :p(?:prefix_([^/]+)_suffix)\r\n // it already works by escaping the closing )\r\n // https://paths.esm.dev/?p=AAMeJbiAwQEcDKbAoAAkP60PG2R6QAvgNaA6AFACM2ABuQBB#\r\n // is this really something people need since you can also write\r\n // /prefix_:p()_suffix\r\n if (char === ')') {\r\n // handle the escaped )\r\n if (customRe[customRe.length - 1] == '\\\\')\r\n customRe = customRe.slice(0, -1) + char;\r\n else\r\n state = 3 /* TokenizerState.ParamRegExpEnd */;\r\n }\r\n else {\r\n customRe += char;\r\n }\r\n break;\r\n case 3 /* TokenizerState.ParamRegExpEnd */:\r\n // same as finalizing a param\r\n consumeBuffer();\r\n state = 0 /* TokenizerState.Static */;\r\n // go back one character if we were not modifying\r\n if (char !== '*' && char !== '?' && char !== '+')\r\n i--;\r\n customRe = '';\r\n break;\r\n default:\r\n crash('Unknown state');\r\n break;\r\n }\r\n }\r\n if (state === 2 /* TokenizerState.ParamRegExp */)\r\n crash(`Unfinished custom RegExp for param \"${buffer}\"`);\r\n consumeBuffer();\r\n finalizeSegment();\r\n // tokenCache.set(path, tokens)\r\n return tokens;\r\n}\r\n\r\nfunction createRouteRecordMatcher(record, parent, options) {\r\n const parser = tokensToParser(tokenizePath(record.path), options);\r\n // warn against params with the same name\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n const existingKeys = new Set();\r\n for (const key of parser.keys) {\r\n if (existingKeys.has(key.name))\r\n warn(`Found duplicated params with name \"${key.name}\" for path \"${record.path}\". Only the last one will be available on \"$route.params\".`);\r\n existingKeys.add(key.name);\r\n }\r\n }\r\n const matcher = assign(parser, {\r\n record,\r\n parent,\r\n // these needs to be populated by the parent\r\n children: [],\r\n alias: [],\r\n });\r\n if (parent) {\r\n // both are aliases or both are not aliases\r\n // we don't want to mix them because the order is used when\r\n // passing originalRecord in Matcher.addRoute\r\n if (!matcher.record.aliasOf === !parent.record.aliasOf)\r\n parent.children.push(matcher);\r\n }\r\n return matcher;\r\n}\r\n\r\n/**\r\n * Creates a Router Matcher.\r\n *\r\n * @internal\r\n * @param routes - array of initial routes\r\n * @param globalOptions - global route options\r\n */\r\nfunction createRouterMatcher(routes, globalOptions) {\r\n // normalized ordered array of matchers\r\n const matchers = [];\r\n const matcherMap = new Map();\r\n globalOptions = mergeOptions({ strict: false, end: true, sensitive: false }, globalOptions);\r\n function getRecordMatcher(name) {\r\n return matcherMap.get(name);\r\n }\r\n function addRoute(record, parent, originalRecord) {\r\n // used later on to remove by name\r\n const isRootAdd = !originalRecord;\r\n const mainNormalizedRecord = normalizeRouteRecord(record);\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n checkChildMissingNameWithEmptyPath(mainNormalizedRecord, parent);\r\n }\r\n // we might be the child of an alias\r\n mainNormalizedRecord.aliasOf = originalRecord && originalRecord.record;\r\n const options = mergeOptions(globalOptions, record);\r\n // generate an array of records to correctly handle aliases\r\n const normalizedRecords = [\r\n mainNormalizedRecord,\r\n ];\r\n if ('alias' in record) {\r\n const aliases = typeof record.alias === 'string' ? [record.alias] : record.alias;\r\n for (const alias of aliases) {\r\n normalizedRecords.push(assign({}, mainNormalizedRecord, {\r\n // this allows us to hold a copy of the `components` option\r\n // so that async components cache is hold on the original record\r\n components: originalRecord\r\n ? originalRecord.record.components\r\n : mainNormalizedRecord.components,\r\n path: alias,\r\n // we might be the child of an alias\r\n aliasOf: originalRecord\r\n ? originalRecord.record\r\n : mainNormalizedRecord,\r\n // the aliases are always of the same kind as the original since they\r\n // are defined on the same record\r\n }));\r\n }\r\n }\r\n let matcher;\r\n let originalMatcher;\r\n for (const normalizedRecord of normalizedRecords) {\r\n const { path } = normalizedRecord;\r\n // Build up the path for nested routes if the child isn't an absolute\r\n // route. Only add the / delimiter if the child path isn't empty and if the\r\n // parent path doesn't have a trailing slash\r\n if (parent && path[0] !== '/') {\r\n const parentPath = parent.record.path;\r\n const connectingSlash = parentPath[parentPath.length - 1] === '/' ? '' : '/';\r\n normalizedRecord.path =\r\n parent.record.path + (path && connectingSlash + path);\r\n }\r\n if ((process.env.NODE_ENV !== 'production') && normalizedRecord.path === '*') {\r\n throw new Error('Catch all routes (\"*\") must now be defined using a param with a custom regexp.\\n' +\r\n 'See more at https://next.router.vuejs.org/guide/migration/#removed-star-or-catch-all-routes.');\r\n }\r\n // create the object beforehand, so it can be passed to children\r\n matcher = createRouteRecordMatcher(normalizedRecord, parent, options);\r\n if ((process.env.NODE_ENV !== 'production') && parent && path[0] === '/')\r\n checkMissingParamsInAbsolutePath(matcher, parent);\r\n // if we are an alias we must tell the original record that we exist,\r\n // so we can be removed\r\n if (originalRecord) {\r\n originalRecord.alias.push(matcher);\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n checkSameParams(originalRecord, matcher);\r\n }\r\n }\r\n else {\r\n // otherwise, the first record is the original and others are aliases\r\n originalMatcher = originalMatcher || matcher;\r\n if (originalMatcher !== matcher)\r\n originalMatcher.alias.push(matcher);\r\n // remove the route if named and only for the top record (avoid in nested calls)\r\n // this works because the original record is the first one\r\n if (isRootAdd && record.name && !isAliasRecord(matcher))\r\n removeRoute(record.name);\r\n }\r\n if (mainNormalizedRecord.children) {\r\n const children = mainNormalizedRecord.children;\r\n for (let i = 0; i < children.length; i++) {\r\n addRoute(children[i], matcher, originalRecord && originalRecord.children[i]);\r\n }\r\n }\r\n // if there was no original record, then the first one was not an alias and all\r\n // other aliases (if any) need to reference this record when adding children\r\n originalRecord = originalRecord || matcher;\r\n // TODO: add normalized records for more flexibility\r\n // if (parent && isAliasRecord(originalRecord)) {\r\n // parent.children.push(originalRecord)\r\n // }\r\n // Avoid adding a record that doesn't display anything. This allows passing through records without a component to\r\n // not be reached and pass through the catch all route\r\n if ((matcher.record.components &&\r\n Object.keys(matcher.record.components).length) ||\r\n matcher.record.name ||\r\n matcher.record.redirect) {\r\n insertMatcher(matcher);\r\n }\r\n }\r\n return originalMatcher\r\n ? () => {\r\n // since other matchers are aliases, they should be removed by the original matcher\r\n removeRoute(originalMatcher);\r\n }\r\n : noop;\r\n }\r\n function removeRoute(matcherRef) {\r\n if (isRouteName(matcherRef)) {\r\n const matcher = matcherMap.get(matcherRef);\r\n if (matcher) {\r\n matcherMap.delete(matcherRef);\r\n matchers.splice(matchers.indexOf(matcher), 1);\r\n matcher.children.forEach(removeRoute);\r\n matcher.alias.forEach(removeRoute);\r\n }\r\n }\r\n else {\r\n const index = matchers.indexOf(matcherRef);\r\n if (index > -1) {\r\n matchers.splice(index, 1);\r\n if (matcherRef.record.name)\r\n matcherMap.delete(matcherRef.record.name);\r\n matcherRef.children.forEach(removeRoute);\r\n matcherRef.alias.forEach(removeRoute);\r\n }\r\n }\r\n }\r\n function getRoutes() {\r\n return matchers;\r\n }\r\n function insertMatcher(matcher) {\r\n let i = 0;\r\n while (i < matchers.length &&\r\n comparePathParserScore(matcher, matchers[i]) >= 0 &&\r\n // Adding children with empty path should still appear before the parent\r\n // https://github.com/vuejs/router/issues/1124\r\n (matcher.record.path !== matchers[i].record.path ||\r\n !isRecordChildOf(matcher, matchers[i])))\r\n i++;\r\n matchers.splice(i, 0, matcher);\r\n // only add the original record to the name map\r\n if (matcher.record.name && !isAliasRecord(matcher))\r\n matcherMap.set(matcher.record.name, matcher);\r\n }\r\n function resolve(location, currentLocation) {\r\n let matcher;\r\n let params = {};\r\n let path;\r\n let name;\r\n if ('name' in location && location.name) {\r\n matcher = matcherMap.get(location.name);\r\n if (!matcher)\r\n throw createRouterError(1 /* ErrorTypes.MATCHER_NOT_FOUND */, {\r\n location,\r\n });\r\n // warn if the user is passing invalid params so they can debug it better when they get removed\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n const invalidParams = Object.keys(location.params || {}).filter(paramName => !matcher.keys.find(k => k.name === paramName));\r\n if (invalidParams.length) {\r\n warn(`Discarded invalid param(s) \"${invalidParams.join('\", \"')}\" when navigating. See https://github.com/vuejs/router/blob/main/packages/router/CHANGELOG.md#414-2022-08-22 for more details.`);\r\n }\r\n }\r\n name = matcher.record.name;\r\n params = assign(\r\n // paramsFromLocation is a new object\r\n paramsFromLocation(currentLocation.params, \r\n // only keep params that exist in the resolved location\r\n // TODO: only keep optional params coming from a parent record\r\n matcher.keys.filter(k => !k.optional).map(k => k.name)), \r\n // discard any existing params in the current location that do not exist here\r\n // #1497 this ensures better active/exact matching\r\n location.params &&\r\n paramsFromLocation(location.params, matcher.keys.map(k => k.name)));\r\n // throws if cannot be stringified\r\n path = matcher.stringify(params);\r\n }\r\n else if ('path' in location) {\r\n // no need to resolve the path with the matcher as it was provided\r\n // this also allows the user to control the encoding\r\n path = location.path;\r\n if ((process.env.NODE_ENV !== 'production') && !path.startsWith('/')) {\r\n warn(`The Matcher cannot resolve relative paths but received \"${path}\". Unless you directly called \\`matcher.resolve(\"${path}\")\\`, this is probably a bug in vue-router. Please open an issue at https://new-issue.vuejs.org/?repo=vuejs/router.`);\r\n }\r\n matcher = matchers.find(m => m.re.test(path));\r\n // matcher should have a value after the loop\r\n if (matcher) {\r\n // we know the matcher works because we tested the regexp\r\n params = matcher.parse(path);\r\n name = matcher.record.name;\r\n }\r\n // location is a relative path\r\n }\r\n else {\r\n // match by name or path of current route\r\n matcher = currentLocation.name\r\n ? matcherMap.get(currentLocation.name)\r\n : matchers.find(m => m.re.test(currentLocation.path));\r\n if (!matcher)\r\n throw createRouterError(1 /* ErrorTypes.MATCHER_NOT_FOUND */, {\r\n location,\r\n currentLocation,\r\n });\r\n name = matcher.record.name;\r\n // since we are navigating to the same location, we don't need to pick the\r\n // params like when `name` is provided\r\n params = assign({}, currentLocation.params, location.params);\r\n path = matcher.stringify(params);\r\n }\r\n const matched = [];\r\n let parentMatcher = matcher;\r\n while (parentMatcher) {\r\n // reversed order so parents are at the beginning\r\n matched.unshift(parentMatcher.record);\r\n parentMatcher = parentMatcher.parent;\r\n }\r\n return {\r\n name,\r\n path,\r\n params,\r\n matched,\r\n meta: mergeMetaFields(matched),\r\n };\r\n }\r\n // add initial routes\r\n routes.forEach(route => addRoute(route));\r\n return { addRoute, resolve, removeRoute, getRoutes, getRecordMatcher };\r\n}\r\nfunction paramsFromLocation(params, keys) {\r\n const newParams = {};\r\n for (const key of keys) {\r\n if (key in params)\r\n newParams[key] = params[key];\r\n }\r\n return newParams;\r\n}\r\n/**\r\n * Normalizes a RouteRecordRaw. Creates a copy\r\n *\r\n * @param record\r\n * @returns the normalized version\r\n */\r\nfunction normalizeRouteRecord(record) {\r\n return {\r\n path: record.path,\r\n redirect: record.redirect,\r\n name: record.name,\r\n meta: record.meta || {},\r\n aliasOf: undefined,\r\n beforeEnter: record.beforeEnter,\r\n props: normalizeRecordProps(record),\r\n children: record.children || [],\r\n instances: {},\r\n leaveGuards: new Set(),\r\n updateGuards: new Set(),\r\n enterCallbacks: {},\r\n components: 'components' in record\r\n ? record.components || null\r\n : record.component && { default: record.component },\r\n };\r\n}\r\n/**\r\n * Normalize the optional `props` in a record to always be an object similar to\r\n * components. Also accept a boolean for components.\r\n * @param record\r\n */\r\nfunction normalizeRecordProps(record) {\r\n const propsObject = {};\r\n // props does not exist on redirect records, but we can set false directly\r\n const props = record.props || false;\r\n if ('component' in record) {\r\n propsObject.default = props;\r\n }\r\n else {\r\n // NOTE: we could also allow a function to be applied to every component.\r\n // Would need user feedback for use cases\r\n for (const name in record.components)\r\n propsObject[name] = typeof props === 'boolean' ? props : props[name];\r\n }\r\n return propsObject;\r\n}\r\n/**\r\n * Checks if a record or any of its parent is an alias\r\n * @param record\r\n */\r\nfunction isAliasRecord(record) {\r\n while (record) {\r\n if (record.record.aliasOf)\r\n return true;\r\n record = record.parent;\r\n }\r\n return false;\r\n}\r\n/**\r\n * Merge meta fields of an array of records\r\n *\r\n * @param matched - array of matched records\r\n */\r\nfunction mergeMetaFields(matched) {\r\n return matched.reduce((meta, record) => assign(meta, record.meta), {});\r\n}\r\nfunction mergeOptions(defaults, partialOptions) {\r\n const options = {};\r\n for (const key in defaults) {\r\n options[key] = key in partialOptions ? partialOptions[key] : defaults[key];\r\n }\r\n return options;\r\n}\r\nfunction isSameParam(a, b) {\r\n return (a.name === b.name &&\r\n a.optional === b.optional &&\r\n a.repeatable === b.repeatable);\r\n}\r\n/**\r\n * Check if a path and its alias have the same required params\r\n *\r\n * @param a - original record\r\n * @param b - alias record\r\n */\r\nfunction checkSameParams(a, b) {\r\n for (const key of a.keys) {\r\n if (!key.optional && !b.keys.find(isSameParam.bind(null, key)))\r\n return warn(`Alias \"${b.record.path}\" and the original record: \"${a.record.path}\" must have the exact same param named \"${key.name}\"`);\r\n }\r\n for (const key of b.keys) {\r\n if (!key.optional && !a.keys.find(isSameParam.bind(null, key)))\r\n return warn(`Alias \"${b.record.path}\" and the original record: \"${a.record.path}\" must have the exact same param named \"${key.name}\"`);\r\n }\r\n}\r\n/**\r\n * A route with a name and a child with an empty path without a name should warn when adding the route\r\n *\r\n * @param mainNormalizedRecord - RouteRecordNormalized\r\n * @param parent - RouteRecordMatcher\r\n */\r\nfunction checkChildMissingNameWithEmptyPath(mainNormalizedRecord, parent) {\r\n if (parent &&\r\n parent.record.name &&\r\n !mainNormalizedRecord.name &&\r\n !mainNormalizedRecord.path) {\r\n warn(`The route named \"${String(parent.record.name)}\" has a child without a name and an empty path. Using that name won't render the empty path child so you probably want to move the name to the child instead. If this is intentional, add a name to the child route to remove the warning.`);\r\n }\r\n}\r\nfunction checkMissingParamsInAbsolutePath(record, parent) {\r\n for (const key of parent.keys) {\r\n if (!record.keys.find(isSameParam.bind(null, key)))\r\n return warn(`Absolute path \"${record.record.path}\" must have the exact same param named \"${key.name}\" as its parent \"${parent.record.path}\".`);\r\n }\r\n}\r\nfunction isRecordChildOf(record, parent) {\r\n return parent.children.some(child => child === record || isRecordChildOf(record, child));\r\n}\r\n\r\n/**\r\n * Encoding Rules ␣ = Space Path: ␣ \" < > # ? { } Query: ␣ \" < > # & = Hash: ␣ \"\r\n * < > `\r\n *\r\n * On top of that, the RFC3986 (https://tools.ietf.org/html/rfc3986#section-2.2)\r\n * defines some extra characters to be encoded. Most browsers do not encode them\r\n * in encodeURI https://github.com/whatwg/url/issues/369, so it may be safer to\r\n * also encode `!'()*`. Leaving un-encoded only ASCII alphanumeric(`a-zA-Z0-9`)\r\n * plus `-._~`. This extra safety should be applied to query by patching the\r\n * string returned by encodeURIComponent encodeURI also encodes `[\\]^`. `\\`\r\n * should be encoded to avoid ambiguity. Browsers (IE, FF, C) transform a `\\`\r\n * into a `/` if directly typed in. The _backtick_ (`````) should also be\r\n * encoded everywhere because some browsers like FF encode it when directly\r\n * written while others don't. Safari and IE don't encode ``\"<>{}``` in hash.\r\n */\r\n// const EXTRA_RESERVED_RE = /[!'()*]/g\r\n// const encodeReservedReplacer = (c: string) => '%' + c.charCodeAt(0).toString(16)\r\nconst HASH_RE = /#/g; // %23\r\nconst AMPERSAND_RE = /&/g; // %26\r\nconst SLASH_RE = /\\//g; // %2F\r\nconst EQUAL_RE = /=/g; // %3D\r\nconst IM_RE = /\\?/g; // %3F\r\nconst PLUS_RE = /\\+/g; // %2B\r\n/**\r\n * NOTE: It's not clear to me if we should encode the + symbol in queries, it\r\n * seems to be less flexible than not doing so and I can't find out the legacy\r\n * systems requiring this for regular requests like text/html. In the standard,\r\n * the encoding of the plus character is only mentioned for\r\n * application/x-www-form-urlencoded\r\n * (https://url.spec.whatwg.org/#urlencoded-parsing) and most browsers seems lo\r\n * leave the plus character as is in queries. To be more flexible, we allow the\r\n * plus character on the query, but it can also be manually encoded by the user.\r\n *\r\n * Resources:\r\n * - https://url.spec.whatwg.org/#urlencoded-parsing\r\n * - https://stackoverflow.com/questions/1634271/url-encoding-the-space-character-or-20\r\n */\r\nconst ENC_BRACKET_OPEN_RE = /%5B/g; // [\r\nconst ENC_BRACKET_CLOSE_RE = /%5D/g; // ]\r\nconst ENC_CARET_RE = /%5E/g; // ^\r\nconst ENC_BACKTICK_RE = /%60/g; // `\r\nconst ENC_CURLY_OPEN_RE = /%7B/g; // {\r\nconst ENC_PIPE_RE = /%7C/g; // |\r\nconst ENC_CURLY_CLOSE_RE = /%7D/g; // }\r\nconst ENC_SPACE_RE = /%20/g; // }\r\n/**\r\n * Encode characters that need to be encoded on the path, search and hash\r\n * sections of the URL.\r\n *\r\n * @internal\r\n * @param text - string to encode\r\n * @returns encoded string\r\n */\r\nfunction commonEncode(text) {\r\n return encodeURI('' + text)\r\n .replace(ENC_PIPE_RE, '|')\r\n .replace(ENC_BRACKET_OPEN_RE, '[')\r\n .replace(ENC_BRACKET_CLOSE_RE, ']');\r\n}\r\n/**\r\n * Encode characters that need to be encoded on the hash section of the URL.\r\n *\r\n * @param text - string to encode\r\n * @returns encoded string\r\n */\r\nfunction encodeHash(text) {\r\n return commonEncode(text)\r\n .replace(ENC_CURLY_OPEN_RE, '{')\r\n .replace(ENC_CURLY_CLOSE_RE, '}')\r\n .replace(ENC_CARET_RE, '^');\r\n}\r\n/**\r\n * Encode characters that need to be encoded query values on the query\r\n * section of the URL.\r\n *\r\n * @param text - string to encode\r\n * @returns encoded string\r\n */\r\nfunction encodeQueryValue(text) {\r\n return (commonEncode(text)\r\n // Encode the space as +, encode the + to differentiate it from the space\r\n .replace(PLUS_RE, '%2B')\r\n .replace(ENC_SPACE_RE, '+')\r\n .replace(HASH_RE, '%23')\r\n .replace(AMPERSAND_RE, '%26')\r\n .replace(ENC_BACKTICK_RE, '`')\r\n .replace(ENC_CURLY_OPEN_RE, '{')\r\n .replace(ENC_CURLY_CLOSE_RE, '}')\r\n .replace(ENC_CARET_RE, '^'));\r\n}\r\n/**\r\n * Like `encodeQueryValue` but also encodes the `=` character.\r\n *\r\n * @param text - string to encode\r\n */\r\nfunction encodeQueryKey(text) {\r\n return encodeQueryValue(text).replace(EQUAL_RE, '%3D');\r\n}\r\n/**\r\n * Encode characters that need to be encoded on the path section of the URL.\r\n *\r\n * @param text - string to encode\r\n * @returns encoded string\r\n */\r\nfunction encodePath(text) {\r\n return commonEncode(text).replace(HASH_RE, '%23').replace(IM_RE, '%3F');\r\n}\r\n/**\r\n * Encode characters that need to be encoded on the path section of the URL as a\r\n * param. This function encodes everything {@link encodePath} does plus the\r\n * slash (`/`) character. If `text` is `null` or `undefined`, returns an empty\r\n * string instead.\r\n *\r\n * @param text - string to encode\r\n * @returns encoded string\r\n */\r\nfunction encodeParam(text) {\r\n return text == null ? '' : encodePath(text).replace(SLASH_RE, '%2F');\r\n}\r\n/**\r\n * Decode text using `decodeURIComponent`. Returns the original text if it\r\n * fails.\r\n *\r\n * @param text - string to decode\r\n * @returns decoded string\r\n */\r\nfunction decode(text) {\r\n try {\r\n return decodeURIComponent('' + text);\r\n }\r\n catch (err) {\r\n (process.env.NODE_ENV !== 'production') && warn(`Error decoding \"${text}\". Using original value`);\r\n }\r\n return '' + text;\r\n}\r\n\r\n/**\r\n * Transforms a queryString into a {@link LocationQuery} object. Accept both, a\r\n * version with the leading `?` and without Should work as URLSearchParams\r\n\r\n * @internal\r\n *\r\n * @param search - search string to parse\r\n * @returns a query object\r\n */\r\nfunction parseQuery(search) {\r\n const query = {};\r\n // avoid creating an object with an empty key and empty value\r\n // because of split('&')\r\n if (search === '' || search === '?')\r\n return query;\r\n const hasLeadingIM = search[0] === '?';\r\n const searchParams = (hasLeadingIM ? search.slice(1) : search).split('&');\r\n for (let i = 0; i < searchParams.length; ++i) {\r\n // pre decode the + into space\r\n const searchParam = searchParams[i].replace(PLUS_RE, ' ');\r\n // allow the = character\r\n const eqPos = searchParam.indexOf('=');\r\n const key = decode(eqPos < 0 ? searchParam : searchParam.slice(0, eqPos));\r\n const value = eqPos < 0 ? null : decode(searchParam.slice(eqPos + 1));\r\n if (key in query) {\r\n // an extra variable for ts types\r\n let currentValue = query[key];\r\n if (!isArray(currentValue)) {\r\n currentValue = query[key] = [currentValue];\r\n }\r\n currentValue.push(value);\r\n }\r\n else {\r\n query[key] = value;\r\n }\r\n }\r\n return query;\r\n}\r\n/**\r\n * Stringifies a {@link LocationQueryRaw} object. Like `URLSearchParams`, it\r\n * doesn't prepend a `?`\r\n *\r\n * @internal\r\n *\r\n * @param query - query object to stringify\r\n * @returns string version of the query without the leading `?`\r\n */\r\nfunction stringifyQuery(query) {\r\n let search = '';\r\n for (let key in query) {\r\n const value = query[key];\r\n key = encodeQueryKey(key);\r\n if (value == null) {\r\n // only null adds the value\r\n if (value !== undefined) {\r\n search += (search.length ? '&' : '') + key;\r\n }\r\n continue;\r\n }\r\n // keep null values\r\n const values = isArray(value)\r\n ? value.map(v => v && encodeQueryValue(v))\r\n : [value && encodeQueryValue(value)];\r\n values.forEach(value => {\r\n // skip undefined values in arrays as if they were not present\r\n // smaller code than using filter\r\n if (value !== undefined) {\r\n // only append & with non-empty search\r\n search += (search.length ? '&' : '') + key;\r\n if (value != null)\r\n search += '=' + value;\r\n }\r\n });\r\n }\r\n return search;\r\n}\r\n/**\r\n * Transforms a {@link LocationQueryRaw} into a {@link LocationQuery} by casting\r\n * numbers into strings, removing keys with an undefined value and replacing\r\n * undefined with null in arrays\r\n *\r\n * @param query - query object to normalize\r\n * @returns a normalized query object\r\n */\r\nfunction normalizeQuery(query) {\r\n const normalizedQuery = {};\r\n for (const key in query) {\r\n const value = query[key];\r\n if (value !== undefined) {\r\n normalizedQuery[key] = isArray(value)\r\n ? value.map(v => (v == null ? null : '' + v))\r\n : value == null\r\n ? value\r\n : '' + value;\r\n }\r\n }\r\n return normalizedQuery;\r\n}\r\n\r\n/**\r\n * RouteRecord being rendered by the closest ancestor Router View. Used for\r\n * `onBeforeRouteUpdate` and `onBeforeRouteLeave`. rvlm stands for Router View\r\n * Location Matched\r\n *\r\n * @internal\r\n */\r\nconst matchedRouteKey = Symbol((process.env.NODE_ENV !== 'production') ? 'router view location matched' : '');\r\n/**\r\n * Allows overriding the router view depth to control which component in\r\n * `matched` is rendered. rvd stands for Router View Depth\r\n *\r\n * @internal\r\n */\r\nconst viewDepthKey = Symbol((process.env.NODE_ENV !== 'production') ? 'router view depth' : '');\r\n/**\r\n * Allows overriding the router instance returned by `useRouter` in tests. r\r\n * stands for router\r\n *\r\n * @internal\r\n */\r\nconst routerKey = Symbol((process.env.NODE_ENV !== 'production') ? 'router' : '');\r\n/**\r\n * Allows overriding the current route returned by `useRoute` in tests. rl\r\n * stands for route location\r\n *\r\n * @internal\r\n */\r\nconst routeLocationKey = Symbol((process.env.NODE_ENV !== 'production') ? 'route location' : '');\r\n/**\r\n * Allows overriding the current route used by router-view. Internally this is\r\n * used when the `route` prop is passed.\r\n *\r\n * @internal\r\n */\r\nconst routerViewLocationKey = Symbol((process.env.NODE_ENV !== 'production') ? 'router view location' : '');\r\n\r\n/**\r\n * Create a list of callbacks that can be reset. Used to create before and after navigation guards list\r\n */\r\nfunction useCallbacks() {\r\n let handlers = [];\r\n function add(handler) {\r\n handlers.push(handler);\r\n return () => {\r\n const i = handlers.indexOf(handler);\r\n if (i > -1)\r\n handlers.splice(i, 1);\r\n };\r\n }\r\n function reset() {\r\n handlers = [];\r\n }\r\n return {\r\n add,\r\n list: () => handlers,\r\n reset,\r\n };\r\n}\r\n\r\nfunction registerGuard(record, name, guard) {\r\n const removeFromList = () => {\r\n record[name].delete(guard);\r\n };\r\n onUnmounted(removeFromList);\r\n onDeactivated(removeFromList);\r\n onActivated(() => {\r\n record[name].add(guard);\r\n });\r\n record[name].add(guard);\r\n}\r\n/**\r\n * Add a navigation guard that triggers whenever the component for the current\r\n * location is about to be left. Similar to {@link beforeRouteLeave} but can be\r\n * used in any component. The guard is removed when the component is unmounted.\r\n *\r\n * @param leaveGuard - {@link NavigationGuard}\r\n */\r\nfunction onBeforeRouteLeave(leaveGuard) {\r\n if ((process.env.NODE_ENV !== 'production') && !getCurrentInstance()) {\r\n warn('getCurrentInstance() returned null. onBeforeRouteLeave() must be called at the top of a setup function');\r\n return;\r\n }\r\n const activeRecord = inject(matchedRouteKey, \r\n // to avoid warning\r\n {}).value;\r\n if (!activeRecord) {\r\n (process.env.NODE_ENV !== 'production') &&\r\n warn('No active route record was found when calling `onBeforeRouteLeave()`. Make sure you call this function inside a component child of <router-view>. Maybe you called it inside of App.vue?');\r\n return;\r\n }\r\n registerGuard(activeRecord, 'leaveGuards', leaveGuard);\r\n}\r\n/**\r\n * Add a navigation guard that triggers whenever the current location is about\r\n * to be updated. Similar to {@link beforeRouteUpdate} but can be used in any\r\n * component. The guard is removed when the component is unmounted.\r\n *\r\n * @param updateGuard - {@link NavigationGuard}\r\n */\r\nfunction onBeforeRouteUpdate(updateGuard) {\r\n if ((process.env.NODE_ENV !== 'production') && !getCurrentInstance()) {\r\n warn('getCurrentInstance() returned null. onBeforeRouteUpdate() must be called at the top of a setup function');\r\n return;\r\n }\r\n const activeRecord = inject(matchedRouteKey, \r\n // to avoid warning\r\n {}).value;\r\n if (!activeRecord) {\r\n (process.env.NODE_ENV !== 'production') &&\r\n warn('No active route record was found when calling `onBeforeRouteUpdate()`. Make sure you call this function inside a component child of <router-view>. Maybe you called it inside of App.vue?');\r\n return;\r\n }\r\n registerGuard(activeRecord, 'updateGuards', updateGuard);\r\n}\r\nfunction guardToPromiseFn(guard, to, from, record, name) {\r\n // keep a reference to the enterCallbackArray to prevent pushing callbacks if a new navigation took place\r\n const enterCallbackArray = record &&\r\n // name is defined if record is because of the function overload\r\n (record.enterCallbacks[name] = record.enterCallbacks[name] || []);\r\n return () => new Promise((resolve, reject) => {\r\n const next = (valid) => {\r\n if (valid === false) {\r\n reject(createRouterError(4 /* ErrorTypes.NAVIGATION_ABORTED */, {\r\n from,\r\n to,\r\n }));\r\n }\r\n else if (valid instanceof Error) {\r\n reject(valid);\r\n }\r\n else if (isRouteLocation(valid)) {\r\n reject(createRouterError(2 /* ErrorTypes.NAVIGATION_GUARD_REDIRECT */, {\r\n from: to,\r\n to: valid,\r\n }));\r\n }\r\n else {\r\n if (enterCallbackArray &&\r\n // since enterCallbackArray is truthy, both record and name also are\r\n record.enterCallbacks[name] === enterCallbackArray &&\r\n typeof valid === 'function') {\r\n enterCallbackArray.push(valid);\r\n }\r\n resolve();\r\n }\r\n };\r\n // wrapping with Promise.resolve allows it to work with both async and sync guards\r\n const guardReturn = guard.call(record && record.instances[name], to, from, (process.env.NODE_ENV !== 'production') ? canOnlyBeCalledOnce(next, to, from) : next);\r\n let guardCall = Promise.resolve(guardReturn);\r\n if (guard.length < 3)\r\n guardCall = guardCall.then(next);\r\n if ((process.env.NODE_ENV !== 'production') && guard.length > 2) {\r\n const message = `The \"next\" callback was never called inside of ${guard.name ? '\"' + guard.name + '\"' : ''}:\\n${guard.toString()}\\n. If you are returning a value instead of calling \"next\", make sure to remove the \"next\" parameter from your function.`;\r\n if (typeof guardReturn === 'object' && 'then' in guardReturn) {\r\n guardCall = guardCall.then(resolvedValue => {\r\n // @ts-expect-error: _called is added at canOnlyBeCalledOnce\r\n if (!next._called) {\r\n warn(message);\r\n return Promise.reject(new Error('Invalid navigation guard'));\r\n }\r\n return resolvedValue;\r\n });\r\n }\r\n else if (guardReturn !== undefined) {\r\n // @ts-expect-error: _called is added at canOnlyBeCalledOnce\r\n if (!next._called) {\r\n warn(message);\r\n reject(new Error('Invalid navigation guard'));\r\n return;\r\n }\r\n }\r\n }\r\n guardCall.catch(err => reject(err));\r\n });\r\n}\r\nfunction canOnlyBeCalledOnce(next, to, from) {\r\n let called = 0;\r\n return function () {\r\n if (called++ === 1)\r\n warn(`The \"next\" callback was called more than once in one navigation guard when going from \"${from.fullPath}\" to \"${to.fullPath}\". It should be called exactly one time in each navigation guard. This will fail in production.`);\r\n // @ts-expect-error: we put it in the original one because it's easier to check\r\n next._called = true;\r\n if (called === 1)\r\n next.apply(null, arguments);\r\n };\r\n}\r\nfunction extractComponentsGuards(matched, guardType, to, from) {\r\n const guards = [];\r\n for (const record of matched) {\r\n if ((process.env.NODE_ENV !== 'production') && !record.components && !record.children.length) {\r\n warn(`Record with path \"${record.path}\" is either missing a \"component(s)\"` +\r\n ` or \"children\" property.`);\r\n }\r\n for (const name in record.components) {\r\n let rawComponent = record.components[name];\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n if (!rawComponent ||\r\n (typeof rawComponent !== 'object' &&\r\n typeof rawComponent !== 'function')) {\r\n warn(`Component \"${name}\" in record with path \"${record.path}\" is not` +\r\n ` a valid component. Received \"${String(rawComponent)}\".`);\r\n // throw to ensure we stop here but warn to ensure the message isn't\r\n // missed by the user\r\n throw new Error('Invalid route component');\r\n }\r\n else if ('then' in rawComponent) {\r\n // warn if user wrote import('/component.vue') instead of () =>\r\n // import('./component.vue')\r\n warn(`Component \"${name}\" in record with path \"${record.path}\" is a ` +\r\n `Promise instead of a function that returns a Promise. Did you ` +\r\n `write \"import('./MyPage.vue')\" instead of ` +\r\n `\"() => import('./MyPage.vue')\" ? This will break in ` +\r\n `production if not fixed.`);\r\n const promise = rawComponent;\r\n rawComponent = () => promise;\r\n }\r\n else if (rawComponent.__asyncLoader &&\r\n // warn only once per component\r\n !rawComponent.__warnedDefineAsync) {\r\n rawComponent.__warnedDefineAsync = true;\r\n warn(`Component \"${name}\" in record with path \"${record.path}\" is defined ` +\r\n `using \"defineAsyncComponent()\". ` +\r\n `Write \"() => import('./MyPage.vue')\" instead of ` +\r\n `\"defineAsyncComponent(() => import('./MyPage.vue'))\".`);\r\n }\r\n }\r\n // skip update and leave guards if the route component is not mounted\r\n if (guardType !== 'beforeRouteEnter' && !record.instances[name])\r\n continue;\r\n if (isRouteComponent(rawComponent)) {\r\n // __vccOpts is added by vue-class-component and contain the regular options\r\n const options = rawComponent.__vccOpts || rawComponent;\r\n const guard = options[guardType];\r\n guard && guards.push(guardToPromiseFn(guard, to, from, record, name));\r\n }\r\n else {\r\n // start requesting the chunk already\r\n let componentPromise = rawComponent();\r\n if ((process.env.NODE_ENV !== 'production') && !('catch' in componentPromise)) {\r\n warn(`Component \"${name}\" in record with path \"${record.path}\" is a function that does not return a Promise. If you were passing a functional component, make sure to add a \"displayName\" to the component. This will break in production if not fixed.`);\r\n componentPromise = Promise.resolve(componentPromise);\r\n }\r\n guards.push(() => componentPromise.then(resolved => {\r\n if (!resolved)\r\n return Promise.reject(new Error(`Couldn't resolve component \"${name}\" at \"${record.path}\"`));\r\n const resolvedComponent = isESModule(resolved)\r\n ? resolved.default\r\n : resolved;\r\n // replace the function with the resolved component\r\n // cannot be null or undefined because we went into the for loop\r\n record.components[name] = resolvedComponent;\r\n // __vccOpts is added by vue-class-component and contain the regular options\r\n const options = resolvedComponent.__vccOpts || resolvedComponent;\r\n const guard = options[guardType];\r\n return guard && guardToPromiseFn(guard, to, from, record, name)();\r\n }));\r\n }\r\n }\r\n }\r\n return guards;\r\n}\r\n/**\r\n * Allows differentiating lazy components from functional components and vue-class-component\r\n * @internal\r\n *\r\n * @param component\r\n */\r\nfunction isRouteComponent(component) {\r\n return (typeof component === 'object' ||\r\n 'displayName' in component ||\r\n 'props' in component ||\r\n '__vccOpts' in component);\r\n}\r\n/**\r\n * Ensures a route is loaded, so it can be passed as o prop to `<RouterView>`.\r\n *\r\n * @param route - resolved route to load\r\n */\r\nfunction loadRouteLocation(route) {\r\n return route.matched.every(record => record.redirect)\r\n ? Promise.reject(new Error('Cannot load a route that redirects.'))\r\n : Promise.all(route.matched.map(record => record.components &&\r\n Promise.all(Object.keys(record.components).reduce((promises, name) => {\r\n const rawComponent = record.components[name];\r\n if (typeof rawComponent === 'function' &&\r\n !('displayName' in rawComponent)) {\r\n promises.push(rawComponent().then(resolved => {\r\n if (!resolved)\r\n return Promise.reject(new Error(`Couldn't resolve component \"${name}\" at \"${record.path}\". Ensure you passed a function that returns a promise.`));\r\n const resolvedComponent = isESModule(resolved)\r\n ? resolved.default\r\n : resolved;\r\n // replace the function with the resolved component\r\n // cannot be null or undefined because we went into the for loop\r\n record.components[name] = resolvedComponent;\r\n return;\r\n }));\r\n }\r\n return promises;\r\n }, [])))).then(() => route);\r\n}\r\n\r\n// TODO: we could allow currentRoute as a prop to expose `isActive` and\r\n// `isExactActive` behavior should go through an RFC\r\nfunction useLink(props) {\r\n const router = inject(routerKey);\r\n const currentRoute = inject(routeLocationKey);\r\n const route = computed(() => router.resolve(unref(props.to)));\r\n const activeRecordIndex = computed(() => {\r\n const { matched } = route.value;\r\n const { length } = matched;\r\n const routeMatched = matched[length - 1];\r\n const currentMatched = currentRoute.matched;\r\n if (!routeMatched || !currentMatched.length)\r\n return -1;\r\n const index = currentMatched.findIndex(isSameRouteRecord.bind(null, routeMatched));\r\n if (index > -1)\r\n return index;\r\n // possible parent record\r\n const parentRecordPath = getOriginalPath(matched[length - 2]);\r\n return (\r\n // we are dealing with nested routes\r\n length > 1 &&\r\n // if the parent and matched route have the same path, this link is\r\n // referring to the empty child. Or we currently are on a different\r\n // child of the same parent\r\n getOriginalPath(routeMatched) === parentRecordPath &&\r\n // avoid comparing the child with its parent\r\n currentMatched[currentMatched.length - 1].path !== parentRecordPath\r\n ? currentMatched.findIndex(isSameRouteRecord.bind(null, matched[length - 2]))\r\n : index);\r\n });\r\n const isActive = computed(() => activeRecordIndex.value > -1 &&\r\n includesParams(currentRoute.params, route.value.params));\r\n const isExactActive = computed(() => activeRecordIndex.value > -1 &&\r\n activeRecordIndex.value === currentRoute.matched.length - 1 &&\r\n isSameRouteLocationParams(currentRoute.params, route.value.params));\r\n function navigate(e = {}) {\r\n if (guardEvent(e)) {\r\n return router[unref(props.replace) ? 'replace' : 'push'](unref(props.to)\r\n // avoid uncaught errors are they are logged anyway\r\n ).catch(noop);\r\n }\r\n return Promise.resolve();\r\n }\r\n // devtools only\r\n if (((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) && isBrowser) {\r\n const instance = getCurrentInstance();\r\n if (instance) {\r\n const linkContextDevtools = {\r\n route: route.value,\r\n isActive: isActive.value,\r\n isExactActive: isExactActive.value,\r\n };\r\n // @ts-expect-error: this is internal\r\n instance.__vrl_devtools = instance.__vrl_devtools || [];\r\n // @ts-expect-error: this is internal\r\n instance.__vrl_devtools.push(linkContextDevtools);\r\n watchEffect(() => {\r\n linkContextDevtools.route = route.value;\r\n linkContextDevtools.isActive = isActive.value;\r\n linkContextDevtools.isExactActive = isExactActive.value;\r\n }, { flush: 'post' });\r\n }\r\n }\r\n /**\r\n * NOTE: update {@link _RouterLinkI}'s `$slots` type when updating this\r\n */\r\n return {\r\n route,\r\n href: computed(() => route.value.href),\r\n isActive,\r\n isExactActive,\r\n navigate,\r\n };\r\n}\r\nconst RouterLinkImpl = /*#__PURE__*/ defineComponent({\r\n name: 'RouterLink',\r\n compatConfig: { MODE: 3 },\r\n props: {\r\n to: {\r\n type: [String, Object],\r\n required: true,\r\n },\r\n replace: Boolean,\r\n activeClass: String,\r\n // inactiveClass: String,\r\n exactActiveClass: String,\r\n custom: Boolean,\r\n ariaCurrentValue: {\r\n type: String,\r\n default: 'page',\r\n },\r\n },\r\n useLink,\r\n setup(props, { slots }) {\r\n const link = reactive(useLink(props));\r\n const { options } = inject(routerKey);\r\n const elClass = computed(() => ({\r\n [getLinkClass(props.activeClass, options.linkActiveClass, 'router-link-active')]: link.isActive,\r\n // [getLinkClass(\r\n // props.inactiveClass,\r\n // options.linkInactiveClass,\r\n // 'router-link-inactive'\r\n // )]: !link.isExactActive,\r\n [getLinkClass(props.exactActiveClass, options.linkExactActiveClass, 'router-link-exact-active')]: link.isExactActive,\r\n }));\r\n return () => {\r\n const children = slots.default && slots.default(link);\r\n return props.custom\r\n ? children\r\n : h('a', {\r\n 'aria-current': link.isExactActive\r\n ? props.ariaCurrentValue\r\n : null,\r\n href: link.href,\r\n // this would override user added attrs but Vue will still add\r\n // the listener, so we end up triggering both\r\n onClick: link.navigate,\r\n class: elClass.value,\r\n }, children);\r\n };\r\n },\r\n});\r\n// export the public type for h/tsx inference\r\n// also to avoid inline import() in generated d.ts files\r\n/**\r\n * Component to render a link that triggers a navigation on click.\r\n */\r\nconst RouterLink = RouterLinkImpl;\r\nfunction guardEvent(e) {\r\n // don't redirect with control keys\r\n if (e.metaKey || e.altKey || e.ctrlKey || e.shiftKey)\r\n return;\r\n // don't redirect when preventDefault called\r\n if (e.defaultPrevented)\r\n return;\r\n // don't redirect on right click\r\n if (e.button !== undefined && e.button !== 0)\r\n return;\r\n // don't redirect if `target=\"_blank\"`\r\n // @ts-expect-error getAttribute does exist\r\n if (e.currentTarget && e.currentTarget.getAttribute) {\r\n // @ts-expect-error getAttribute exists\r\n const target = e.currentTarget.getAttribute('target');\r\n if (/\\b_blank\\b/i.test(target))\r\n return;\r\n }\r\n // this may be a Weex event which doesn't have this method\r\n if (e.preventDefault)\r\n e.preventDefault();\r\n return true;\r\n}\r\nfunction includesParams(outer, inner) {\r\n for (const key in inner) {\r\n const innerValue = inner[key];\r\n const outerValue = outer[key];\r\n if (typeof innerValue === 'string') {\r\n if (innerValue !== outerValue)\r\n return false;\r\n }\r\n else {\r\n if (!isArray(outerValue) ||\r\n outerValue.length !== innerValue.length ||\r\n innerValue.some((value, i) => value !== outerValue[i]))\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\n/**\r\n * Get the original path value of a record by following its aliasOf\r\n * @param record\r\n */\r\nfunction getOriginalPath(record) {\r\n return record ? (record.aliasOf ? record.aliasOf.path : record.path) : '';\r\n}\r\n/**\r\n * Utility class to get the active class based on defaults.\r\n * @param propClass\r\n * @param globalClass\r\n * @param defaultClass\r\n */\r\nconst getLinkClass = (propClass, globalClass, defaultClass) => propClass != null\r\n ? propClass\r\n : globalClass != null\r\n ? globalClass\r\n : defaultClass;\r\n\r\nconst RouterViewImpl = /*#__PURE__*/ defineComponent({\r\n name: 'RouterView',\r\n // #674 we manually inherit them\r\n inheritAttrs: false,\r\n props: {\r\n name: {\r\n type: String,\r\n default: 'default',\r\n },\r\n route: Object,\r\n },\r\n // Better compat for @vue/compat users\r\n // https://github.com/vuejs/router/issues/1315\r\n compatConfig: { MODE: 3 },\r\n setup(props, { attrs, slots }) {\r\n (process.env.NODE_ENV !== 'production') && warnDeprecatedUsage();\r\n const injectedRoute = inject(routerViewLocationKey);\r\n const routeToDisplay = computed(() => props.route || injectedRoute.value);\r\n const injectedDepth = inject(viewDepthKey, 0);\r\n // The depth changes based on empty components option, which allows passthrough routes e.g. routes with children\r\n // that are used to reuse the `path` property\r\n const depth = computed(() => {\r\n let initialDepth = unref(injectedDepth);\r\n const { matched } = routeToDisplay.value;\r\n let matchedRoute;\r\n while ((matchedRoute = matched[initialDepth]) &&\r\n !matchedRoute.components) {\r\n initialDepth++;\r\n }\r\n return initialDepth;\r\n });\r\n const matchedRouteRef = computed(() => routeToDisplay.value.matched[depth.value]);\r\n provide(viewDepthKey, computed(() => depth.value + 1));\r\n provide(matchedRouteKey, matchedRouteRef);\r\n provide(routerViewLocationKey, routeToDisplay);\r\n const viewRef = ref();\r\n // watch at the same time the component instance, the route record we are\r\n // rendering, and the name\r\n watch(() => [viewRef.value, matchedRouteRef.value, props.name], ([instance, to, name], [oldInstance, from, oldName]) => {\r\n // copy reused instances\r\n if (to) {\r\n // this will update the instance for new instances as well as reused\r\n // instances when navigating to a new route\r\n to.instances[name] = instance;\r\n // the component instance is reused for a different route or name, so\r\n // we copy any saved update or leave guards. With async setup, the\r\n // mounting component will mount before the matchedRoute changes,\r\n // making instance === oldInstance, so we check if guards have been\r\n // added before. This works because we remove guards when\r\n // unmounting/deactivating components\r\n if (from && from !== to && instance && instance === oldInstance) {\r\n if (!to.leaveGuards.size) {\r\n to.leaveGuards = from.leaveGuards;\r\n }\r\n if (!to.updateGuards.size) {\r\n to.updateGuards = from.updateGuards;\r\n }\r\n }\r\n }\r\n // trigger beforeRouteEnter next callbacks\r\n if (instance &&\r\n to &&\r\n // if there is no instance but to and from are the same this might be\r\n // the first visit\r\n (!from || !isSameRouteRecord(to, from) || !oldInstance)) {\r\n (to.enterCallbacks[name] || []).forEach(callback => callback(instance));\r\n }\r\n }, { flush: 'post' });\r\n return () => {\r\n const route = routeToDisplay.value;\r\n // we need the value at the time we render because when we unmount, we\r\n // navigated to a different location so the value is different\r\n const currentName = props.name;\r\n const matchedRoute = matchedRouteRef.value;\r\n const ViewComponent = matchedRoute && matchedRoute.components[currentName];\r\n if (!ViewComponent) {\r\n return normalizeSlot(slots.default, { Component: ViewComponent, route });\r\n }\r\n // props from route configuration\r\n const routePropsOption = matchedRoute.props[currentName];\r\n const routeProps = routePropsOption\r\n ? routePropsOption === true\r\n ? route.params\r\n : typeof routePropsOption === 'function'\r\n ? routePropsOption(route)\r\n : routePropsOption\r\n : null;\r\n const onVnodeUnmounted = vnode => {\r\n // remove the instance reference to prevent leak\r\n if (vnode.component.isUnmounted) {\r\n matchedRoute.instances[currentName] = null;\r\n }\r\n };\r\n const component = h(ViewComponent, assign({}, routeProps, attrs, {\r\n onVnodeUnmounted,\r\n ref: viewRef,\r\n }));\r\n if (((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) &&\r\n isBrowser &&\r\n component.ref) {\r\n // TODO: can display if it's an alias, its props\r\n const info = {\r\n depth: depth.value,\r\n name: matchedRoute.name,\r\n path: matchedRoute.path,\r\n meta: matchedRoute.meta,\r\n };\r\n const internalInstances = isArray(component.ref)\r\n ? component.ref.map(r => r.i)\r\n : [component.ref.i];\r\n internalInstances.forEach(instance => {\r\n // @ts-expect-error\r\n instance.__vrv_devtools = info;\r\n });\r\n }\r\n return (\r\n // pass the vnode to the slot as a prop.\r\n // h and <component :is=\"...\"> both accept vnodes\r\n normalizeSlot(slots.default, { Component: component, route }) ||\r\n component);\r\n };\r\n },\r\n});\r\nfunction normalizeSlot(slot, data) {\r\n if (!slot)\r\n return null;\r\n const slotContent = slot(data);\r\n return slotContent.length === 1 ? slotContent[0] : slotContent;\r\n}\r\n// export the public type for h/tsx inference\r\n// also to avoid inline import() in generated d.ts files\r\n/**\r\n * Component to display the current route the user is at.\r\n */\r\nconst RouterView = RouterViewImpl;\r\n// warn against deprecated usage with <transition> & <keep-alive>\r\n// due to functional component being no longer eager in Vue 3\r\nfunction warnDeprecatedUsage() {\r\n const instance = getCurrentInstance();\r\n const parentName = instance.parent && instance.parent.type.name;\r\n if (parentName &&\r\n (parentName === 'KeepAlive' || parentName.includes('Transition'))) {\r\n const comp = parentName === 'KeepAlive' ? 'keep-alive' : 'transition';\r\n warn(`<router-view> can no longer be used directly inside <transition> or <keep-alive>.\\n` +\r\n `Use slot props instead:\\n\\n` +\r\n `<router-view v-slot=\"{ Component }\">\\n` +\r\n ` <${comp}>\\n` +\r\n ` <component :is=\"Component\" />\\n` +\r\n ` </${comp}>\\n` +\r\n `</router-view>`);\r\n }\r\n}\r\n\r\n/**\r\n * Copies a route location and removes any problematic properties that cannot be shown in devtools (e.g. Vue instances).\r\n *\r\n * @param routeLocation - routeLocation to format\r\n * @param tooltip - optional tooltip\r\n * @returns a copy of the routeLocation\r\n */\r\nfunction formatRouteLocation(routeLocation, tooltip) {\r\n const copy = assign({}, routeLocation, {\r\n // remove variables that can contain vue instances\r\n matched: routeLocation.matched.map(matched => omit(matched, ['instances', 'children', 'aliasOf'])),\r\n });\r\n return {\r\n _custom: {\r\n type: null,\r\n readOnly: true,\r\n display: routeLocation.fullPath,\r\n tooltip,\r\n value: copy,\r\n },\r\n };\r\n}\r\nfunction formatDisplay(display) {\r\n return {\r\n _custom: {\r\n display,\r\n },\r\n };\r\n}\r\n// to support multiple router instances\r\nlet routerId = 0;\r\nfunction addDevtools(app, router, matcher) {\r\n // Take over router.beforeEach and afterEach\r\n // make sure we are not registering the devtool twice\r\n if (router.__hasDevtools)\r\n return;\r\n router.__hasDevtools = true;\r\n // increment to support multiple router instances\r\n const id = routerId++;\r\n setupDevtoolsPlugin({\r\n id: 'org.vuejs.router' + (id ? '.' + id : ''),\r\n label: 'Vue Router',\r\n packageName: 'vue-router',\r\n homepage: 'https://router.vuejs.org',\r\n logo: 'https://router.vuejs.org/logo.png',\r\n componentStateTypes: ['Routing'],\r\n app,\r\n }, api => {\r\n if (typeof api.now !== 'function') {\r\n console.warn('[Vue Router]: You seem to be using an outdated version of Vue Devtools. Are you still using the Beta release instead of the stable one? You can find the links at https://devtools.vuejs.org/guide/installation.html.');\r\n }\r\n // display state added by the router\r\n api.on.inspectComponent((payload, ctx) => {\r\n if (payload.instanceData) {\r\n payload.instanceData.state.push({\r\n type: 'Routing',\r\n key: '$route',\r\n editable: false,\r\n value: formatRouteLocation(router.currentRoute.value, 'Current Route'),\r\n });\r\n }\r\n });\r\n // mark router-link as active and display tags on router views\r\n api.on.visitComponentTree(({ treeNode: node, componentInstance }) => {\r\n if (componentInstance.__vrv_devtools) {\r\n const info = componentInstance.__vrv_devtools;\r\n node.tags.push({\r\n label: (info.name ? `${info.name.toString()}: ` : '') + info.path,\r\n textColor: 0,\r\n tooltip: 'This component is rendered by <router-view>',\r\n backgroundColor: PINK_500,\r\n });\r\n }\r\n // if multiple useLink are used\r\n if (isArray(componentInstance.__vrl_devtools)) {\r\n componentInstance.__devtoolsApi = api;\r\n componentInstance.__vrl_devtools.forEach(devtoolsData => {\r\n let backgroundColor = ORANGE_400;\r\n let tooltip = '';\r\n if (devtoolsData.isExactActive) {\r\n backgroundColor = LIME_500;\r\n tooltip = 'This is exactly active';\r\n }\r\n else if (devtoolsData.isActive) {\r\n backgroundColor = BLUE_600;\r\n tooltip = 'This link is active';\r\n }\r\n node.tags.push({\r\n label: devtoolsData.route.path,\r\n textColor: 0,\r\n tooltip,\r\n backgroundColor,\r\n });\r\n });\r\n }\r\n });\r\n watch(router.currentRoute, () => {\r\n // refresh active state\r\n refreshRoutesView();\r\n api.notifyComponentUpdate();\r\n api.sendInspectorTree(routerInspectorId);\r\n api.sendInspectorState(routerInspectorId);\r\n });\r\n const navigationsLayerId = 'router:navigations:' + id;\r\n api.addTimelineLayer({\r\n id: navigationsLayerId,\r\n label: `Router${id ? ' ' + id : ''} Navigations`,\r\n color: 0x40a8c4,\r\n });\r\n // const errorsLayerId = 'router:errors'\r\n // api.addTimelineLayer({\r\n // id: errorsLayerId,\r\n // label: 'Router Errors',\r\n // color: 0xea5455,\r\n // })\r\n router.onError((error, to) => {\r\n api.addTimelineEvent({\r\n layerId: navigationsLayerId,\r\n event: {\r\n title: 'Error during Navigation',\r\n subtitle: to.fullPath,\r\n logType: 'error',\r\n time: api.now(),\r\n data: { error },\r\n groupId: to.meta.__navigationId,\r\n },\r\n });\r\n });\r\n // attached to `meta` and used to group events\r\n let navigationId = 0;\r\n router.beforeEach((to, from) => {\r\n const data = {\r\n guard: formatDisplay('beforeEach'),\r\n from: formatRouteLocation(from, 'Current Location during this navigation'),\r\n to: formatRouteLocation(to, 'Target location'),\r\n };\r\n // Used to group navigations together, hide from devtools\r\n Object.defineProperty(to.meta, '__navigationId', {\r\n value: navigationId++,\r\n });\r\n api.addTimelineEvent({\r\n layerId: navigationsLayerId,\r\n event: {\r\n time: api.now(),\r\n title: 'Start of navigation',\r\n subtitle: to.fullPath,\r\n data,\r\n groupId: to.meta.__navigationId,\r\n },\r\n });\r\n });\r\n router.afterEach((to, from, failure) => {\r\n const data = {\r\n guard: formatDisplay('afterEach'),\r\n };\r\n if (failure) {\r\n data.failure = {\r\n _custom: {\r\n type: Error,\r\n readOnly: true,\r\n display: failure ? failure.message : '',\r\n tooltip: 'Navigation Failure',\r\n value: failure,\r\n },\r\n };\r\n data.status = formatDisplay('❌');\r\n }\r\n else {\r\n data.status = formatDisplay('✅');\r\n }\r\n // we set here to have the right order\r\n data.from = formatRouteLocation(from, 'Current Location during this navigation');\r\n data.to = formatRouteLocation(to, 'Target location');\r\n api.addTimelineEvent({\r\n layerId: navigationsLayerId,\r\n event: {\r\n title: 'End of navigation',\r\n subtitle: to.fullPath,\r\n time: api.now(),\r\n data,\r\n logType: failure ? 'warning' : 'default',\r\n groupId: to.meta.__navigationId,\r\n },\r\n });\r\n });\r\n /**\r\n * Inspector of Existing routes\r\n */\r\n const routerInspectorId = 'router-inspector:' + id;\r\n api.addInspector({\r\n id: routerInspectorId,\r\n label: 'Routes' + (id ? ' ' + id : ''),\r\n icon: 'book',\r\n treeFilterPlaceholder: 'Search routes',\r\n });\r\n function refreshRoutesView() {\r\n // the routes view isn't active\r\n if (!activeRoutesPayload)\r\n return;\r\n const payload = activeRoutesPayload;\r\n // children routes will appear as nested\r\n let routes = matcher.getRoutes().filter(route => !route.parent);\r\n // reset match state to false\r\n routes.forEach(resetMatchStateOnRouteRecord);\r\n // apply a match state if there is a payload\r\n if (payload.filter) {\r\n routes = routes.filter(route => \r\n // save matches state based on the payload\r\n isRouteMatching(route, payload.filter.toLowerCase()));\r\n }\r\n // mark active routes\r\n routes.forEach(route => markRouteRecordActive(route, router.currentRoute.value));\r\n payload.rootNodes = routes.map(formatRouteRecordForInspector);\r\n }\r\n let activeRoutesPayload;\r\n api.on.getInspectorTree(payload => {\r\n activeRoutesPayload = payload;\r\n if (payload.app === app && payload.inspectorId === routerInspectorId) {\r\n refreshRoutesView();\r\n }\r\n });\r\n /**\r\n * Display information about the currently selected route record\r\n */\r\n api.on.getInspectorState(payload => {\r\n if (payload.app === app && payload.inspectorId === routerInspectorId) {\r\n const routes = matcher.getRoutes();\r\n const route = routes.find(route => route.record.__vd_id === payload.nodeId);\r\n if (route) {\r\n payload.state = {\r\n options: formatRouteRecordMatcherForStateInspector(route),\r\n };\r\n }\r\n }\r\n });\r\n api.sendInspectorTree(routerInspectorId);\r\n api.sendInspectorState(routerInspectorId);\r\n });\r\n}\r\nfunction modifierForKey(key) {\r\n if (key.optional) {\r\n return key.repeatable ? '*' : '?';\r\n }\r\n else {\r\n return key.repeatable ? '+' : '';\r\n }\r\n}\r\nfunction formatRouteRecordMatcherForStateInspector(route) {\r\n const { record } = route;\r\n const fields = [\r\n { editable: false, key: 'path', value: record.path },\r\n ];\r\n if (record.name != null) {\r\n fields.push({\r\n editable: false,\r\n key: 'name',\r\n value: record.name,\r\n });\r\n }\r\n fields.push({ editable: false, key: 'regexp', value: route.re });\r\n if (route.keys.length) {\r\n fields.push({\r\n editable: false,\r\n key: 'keys',\r\n value: {\r\n _custom: {\r\n type: null,\r\n readOnly: true,\r\n display: route.keys\r\n .map(key => `${key.name}${modifierForKey(key)}`)\r\n .join(' '),\r\n tooltip: 'Param keys',\r\n value: route.keys,\r\n },\r\n },\r\n });\r\n }\r\n if (record.redirect != null) {\r\n fields.push({\r\n editable: false,\r\n key: 'redirect',\r\n value: record.redirect,\r\n });\r\n }\r\n if (route.alias.length) {\r\n fields.push({\r\n editable: false,\r\n key: 'aliases',\r\n value: route.alias.map(alias => alias.record.path),\r\n });\r\n }\r\n if (Object.keys(route.record.meta).length) {\r\n fields.push({\r\n editable: false,\r\n key: 'meta',\r\n value: route.record.meta,\r\n });\r\n }\r\n fields.push({\r\n key: 'score',\r\n editable: false,\r\n value: {\r\n _custom: {\r\n type: null,\r\n readOnly: true,\r\n display: route.score.map(score => score.join(', ')).join(' | '),\r\n tooltip: 'Score used to sort routes',\r\n value: route.score,\r\n },\r\n },\r\n });\r\n return fields;\r\n}\r\n/**\r\n * Extracted from tailwind palette\r\n */\r\nconst PINK_500 = 0xec4899;\r\nconst BLUE_600 = 0x2563eb;\r\nconst LIME_500 = 0x84cc16;\r\nconst CYAN_400 = 0x22d3ee;\r\nconst ORANGE_400 = 0xfb923c;\r\n// const GRAY_100 = 0xf4f4f5\r\nconst DARK = 0x666666;\r\nfunction formatRouteRecordForInspector(route) {\r\n const tags = [];\r\n const { record } = route;\r\n if (record.name != null) {\r\n tags.push({\r\n label: String(record.name),\r\n textColor: 0,\r\n backgroundColor: CYAN_400,\r\n });\r\n }\r\n if (record.aliasOf) {\r\n tags.push({\r\n label: 'alias',\r\n textColor: 0,\r\n backgroundColor: ORANGE_400,\r\n });\r\n }\r\n if (route.__vd_match) {\r\n tags.push({\r\n label: 'matches',\r\n textColor: 0,\r\n backgroundColor: PINK_500,\r\n });\r\n }\r\n if (route.__vd_exactActive) {\r\n tags.push({\r\n label: 'exact',\r\n textColor: 0,\r\n backgroundColor: LIME_500,\r\n });\r\n }\r\n if (route.__vd_active) {\r\n tags.push({\r\n label: 'active',\r\n textColor: 0,\r\n backgroundColor: BLUE_600,\r\n });\r\n }\r\n if (record.redirect) {\r\n tags.push({\r\n label: typeof record.redirect === 'string'\r\n ? `redirect: ${record.redirect}`\r\n : 'redirects',\r\n textColor: 0xffffff,\r\n backgroundColor: DARK,\r\n });\r\n }\r\n // add an id to be able to select it. Using the `path` is not possible because\r\n // empty path children would collide with their parents\r\n let id = record.__vd_id;\r\n if (id == null) {\r\n id = String(routeRecordId++);\r\n record.__vd_id = id;\r\n }\r\n return {\r\n id,\r\n label: record.path,\r\n tags,\r\n children: route.children.map(formatRouteRecordForInspector),\r\n };\r\n}\r\n// incremental id for route records and inspector state\r\nlet routeRecordId = 0;\r\nconst EXTRACT_REGEXP_RE = /^\\/(.*)\\/([a-z]*)$/;\r\nfunction markRouteRecordActive(route, currentRoute) {\r\n // no route will be active if matched is empty\r\n // reset the matching state\r\n const isExactActive = currentRoute.matched.length &&\r\n isSameRouteRecord(currentRoute.matched[currentRoute.matched.length - 1], route.record);\r\n route.__vd_exactActive = route.__vd_active = isExactActive;\r\n if (!isExactActive) {\r\n route.__vd_active = currentRoute.matched.some(match => isSameRouteRecord(match, route.record));\r\n }\r\n route.children.forEach(childRoute => markRouteRecordActive(childRoute, currentRoute));\r\n}\r\nfunction resetMatchStateOnRouteRecord(route) {\r\n route.__vd_match = false;\r\n route.children.forEach(resetMatchStateOnRouteRecord);\r\n}\r\nfunction isRouteMatching(route, filter) {\r\n const found = String(route.re).match(EXTRACT_REGEXP_RE);\r\n route.__vd_match = false;\r\n if (!found || found.length < 3) {\r\n return false;\r\n }\r\n // use a regexp without $ at the end to match nested routes better\r\n const nonEndingRE = new RegExp(found[1].replace(/\\$$/, ''), found[2]);\r\n if (nonEndingRE.test(filter)) {\r\n // mark children as matches\r\n route.children.forEach(child => isRouteMatching(child, filter));\r\n // exception case: `/`\r\n if (route.record.path !== '/' || filter === '/') {\r\n route.__vd_match = route.re.test(filter);\r\n return true;\r\n }\r\n // hide the / route\r\n return false;\r\n }\r\n const path = route.record.path.toLowerCase();\r\n const decodedPath = decode(path);\r\n // also allow partial matching on the path\r\n if (!filter.startsWith('/') &&\r\n (decodedPath.includes(filter) || path.includes(filter)))\r\n return true;\r\n if (decodedPath.startsWith(filter) || path.startsWith(filter))\r\n return true;\r\n if (route.record.name && String(route.record.name).includes(filter))\r\n return true;\r\n return route.children.some(child => isRouteMatching(child, filter));\r\n}\r\nfunction omit(obj, keys) {\r\n const ret = {};\r\n for (const key in obj) {\r\n if (!keys.includes(key)) {\r\n // @ts-expect-error\r\n ret[key] = obj[key];\r\n }\r\n }\r\n return ret;\r\n}\r\n\r\n/**\r\n * Creates a Router instance that can be used by a Vue app.\r\n *\r\n * @param options - {@link RouterOptions}\r\n */\r\nfunction createRouter(options) {\r\n const matcher = createRouterMatcher(options.routes, options);\r\n const parseQuery$1 = options.parseQuery || parseQuery;\r\n const stringifyQuery$1 = options.stringifyQuery || stringifyQuery;\r\n const routerHistory = options.history;\r\n if ((process.env.NODE_ENV !== 'production') && !routerHistory)\r\n throw new Error('Provide the \"history\" option when calling \"createRouter()\":' +\r\n ' https://next.router.vuejs.org/api/#history.');\r\n const beforeGuards = useCallbacks();\r\n const beforeResolveGuards = useCallbacks();\r\n const afterGuards = useCallbacks();\r\n const currentRoute = shallowRef(START_LOCATION_NORMALIZED);\r\n let pendingLocation = START_LOCATION_NORMALIZED;\r\n // leave the scrollRestoration if no scrollBehavior is provided\r\n if (isBrowser && options.scrollBehavior && 'scrollRestoration' in history) {\r\n history.scrollRestoration = 'manual';\r\n }\r\n const normalizeParams = applyToParams.bind(null, paramValue => '' + paramValue);\r\n const encodeParams = applyToParams.bind(null, encodeParam);\r\n const decodeParams = \r\n // @ts-expect-error: intentionally avoid the type check\r\n applyToParams.bind(null, decode);\r\n function addRoute(parentOrRoute, route) {\r\n let parent;\r\n let record;\r\n if (isRouteName(parentOrRoute)) {\r\n parent = matcher.getRecordMatcher(parentOrRoute);\r\n record = route;\r\n }\r\n else {\r\n record = parentOrRoute;\r\n }\r\n return matcher.addRoute(record, parent);\r\n }\r\n function removeRoute(name) {\r\n const recordMatcher = matcher.getRecordMatcher(name);\r\n if (recordMatcher) {\r\n matcher.removeRoute(recordMatcher);\r\n }\r\n else if ((process.env.NODE_ENV !== 'production')) {\r\n warn(`Cannot remove non-existent route \"${String(name)}\"`);\r\n }\r\n }\r\n function getRoutes() {\r\n return matcher.getRoutes().map(routeMatcher => routeMatcher.record);\r\n }\r\n function hasRoute(name) {\r\n return !!matcher.getRecordMatcher(name);\r\n }\r\n function resolve(rawLocation, currentLocation) {\r\n // const objectLocation = routerLocationAsObject(rawLocation)\r\n // we create a copy to modify it later\r\n currentLocation = assign({}, currentLocation || currentRoute.value);\r\n if (typeof rawLocation === 'string') {\r\n const locationNormalized = parseURL(parseQuery$1, rawLocation, currentLocation.path);\r\n const matchedRoute = matcher.resolve({ path: locationNormalized.path }, currentLocation);\r\n const href = routerHistory.createHref(locationNormalized.fullPath);\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n if (href.startsWith('//'))\r\n warn(`Location \"${rawLocation}\" resolved to \"${href}\". A resolved location cannot start with multiple slashes.`);\r\n else if (!matchedRoute.matched.length) {\r\n warn(`No match found for location with path \"${rawLocation}\"`);\r\n }\r\n }\r\n // locationNormalized is always a new object\r\n return assign(locationNormalized, matchedRoute, {\r\n params: decodeParams(matchedRoute.params),\r\n hash: decode(locationNormalized.hash),\r\n redirectedFrom: undefined,\r\n href,\r\n });\r\n }\r\n let matcherLocation;\r\n // path could be relative in object as well\r\n if ('path' in rawLocation) {\r\n if ((process.env.NODE_ENV !== 'production') &&\r\n 'params' in rawLocation &&\r\n !('name' in rawLocation) &&\r\n // @ts-expect-error: the type is never\r\n Object.keys(rawLocation.params).length) {\r\n warn(`Path \"${\r\n // @ts-expect-error: the type is never\r\n rawLocation.path}\" was passed with params but they will be ignored. Use a named route alongside params instead.`);\r\n }\r\n matcherLocation = assign({}, rawLocation, {\r\n path: parseURL(parseQuery$1, rawLocation.path, currentLocation.path).path,\r\n });\r\n }\r\n else {\r\n // remove any nullish param\r\n const targetParams = assign({}, rawLocation.params);\r\n for (const key in targetParams) {\r\n if (targetParams[key] == null) {\r\n delete targetParams[key];\r\n }\r\n }\r\n // pass encoded values to the matcher, so it can produce encoded path and fullPath\r\n matcherLocation = assign({}, rawLocation, {\r\n params: encodeParams(rawLocation.params),\r\n });\r\n // current location params are decoded, we need to encode them in case the\r\n // matcher merges the params\r\n currentLocation.params = encodeParams(currentLocation.params);\r\n }\r\n const matchedRoute = matcher.resolve(matcherLocation, currentLocation);\r\n const hash = rawLocation.hash || '';\r\n if ((process.env.NODE_ENV !== 'production') && hash && !hash.startsWith('#')) {\r\n warn(`A \\`hash\\` should always start with the character \"#\". Replace \"${hash}\" with \"#${hash}\".`);\r\n }\r\n // the matcher might have merged current location params, so\r\n // we need to run the decoding again\r\n matchedRoute.params = normalizeParams(decodeParams(matchedRoute.params));\r\n const fullPath = stringifyURL(stringifyQuery$1, assign({}, rawLocation, {\r\n hash: encodeHash(hash),\r\n path: matchedRoute.path,\r\n }));\r\n const href = routerHistory.createHref(fullPath);\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n if (href.startsWith('//')) {\r\n warn(`Location \"${rawLocation}\" resolved to \"${href}\". A resolved location cannot start with multiple slashes.`);\r\n }\r\n else if (!matchedRoute.matched.length) {\r\n warn(`No match found for location with path \"${'path' in rawLocation ? rawLocation.path : rawLocation}\"`);\r\n }\r\n }\r\n return assign({\r\n fullPath,\r\n // keep the hash encoded so fullPath is effectively path + encodedQuery +\r\n // hash\r\n hash,\r\n query: \r\n // if the user is using a custom query lib like qs, we might have\r\n // nested objects, so we keep the query as is, meaning it can contain\r\n // numbers at `$route.query`, but at the point, the user will have to\r\n // use their own type anyway.\r\n // https://github.com/vuejs/router/issues/328#issuecomment-649481567\r\n stringifyQuery$1 === stringifyQuery\r\n ? normalizeQuery(rawLocation.query)\r\n : (rawLocation.query || {}),\r\n }, matchedRoute, {\r\n redirectedFrom: undefined,\r\n href,\r\n });\r\n }\r\n function locationAsObject(to) {\r\n return typeof to === 'string'\r\n ? parseURL(parseQuery$1, to, currentRoute.value.path)\r\n : assign({}, to);\r\n }\r\n function checkCanceledNavigation(to, from) {\r\n// JsView Modified >>>\r\n// 修改location是否相等判定\r\n // if (pendingLocation !== to) {\r\n if (pendingLocation.href !== to.href) { // 防止按键粘连带来的连续进入同一页面报警\r\n// JsView Modified <<<\r\n return createRouterError(8 /* ErrorTypes.NAVIGATION_CANCELLED */, {\r\n from,\r\n to,\r\n });\r\n }\r\n }\r\n function push(to) {\r\n return pushWithRedirect(to);\r\n }\r\n function replace(to) {\r\n return push(assign(locationAsObject(to), { replace: true }));\r\n }\r\n function handleRedirectRecord(to) {\r\n const lastMatched = to.matched[to.matched.length - 1];\r\n if (lastMatched && lastMatched.redirect) {\r\n const { redirect } = lastMatched;\r\n let newTargetLocation = typeof redirect === 'function' ? redirect(to) : redirect;\r\n if (typeof newTargetLocation === 'string') {\r\n newTargetLocation =\r\n newTargetLocation.includes('?') || newTargetLocation.includes('#')\r\n ? (newTargetLocation = locationAsObject(newTargetLocation))\r\n : // force empty params\r\n { path: newTargetLocation };\r\n // @ts-expect-error: force empty params when a string is passed to let\r\n // the router parse them again\r\n newTargetLocation.params = {};\r\n }\r\n if ((process.env.NODE_ENV !== 'production') &&\r\n !('path' in newTargetLocation) &&\r\n !('name' in newTargetLocation)) {\r\n warn(`Invalid redirect found:\\n${JSON.stringify(newTargetLocation, null, 2)}\\n when navigating to \"${to.fullPath}\". A redirect must contain a name or path. This will break in production.`);\r\n throw new Error('Invalid redirect');\r\n }\r\n return assign({\r\n query: to.query,\r\n hash: to.hash,\r\n // avoid transferring params if the redirect has a path\r\n params: 'path' in newTargetLocation ? {} : to.params,\r\n }, newTargetLocation);\r\n }\r\n }\r\n function pushWithRedirect(to, redirectedFrom) {\r\n const targetLocation = (pendingLocation = resolve(to));\r\n const from = currentRoute.value;\r\n const data = to.state;\r\n const force = to.force;\r\n // to could be a string where `replace` is a function\r\n const replace = to.replace === true;\r\n const shouldRedirect = handleRedirectRecord(targetLocation);\r\n if (shouldRedirect)\r\n return pushWithRedirect(assign(locationAsObject(shouldRedirect), {\r\n state: typeof shouldRedirect === 'object'\r\n ? assign({}, data, shouldRedirect.state)\r\n : data,\r\n force,\r\n replace,\r\n }), \r\n // keep original redirectedFrom if it exists\r\n redirectedFrom || targetLocation);\r\n // if it was a redirect we already called `pushWithRedirect` above\r\n const toLocation = targetLocation;\r\n toLocation.redirectedFrom = redirectedFrom;\r\n let failure;\r\n if (!force && isSameRouteLocation(stringifyQuery$1, from, targetLocation)) {\r\n failure = createRouterError(16 /* ErrorTypes.NAVIGATION_DUPLICATED */, { to: toLocation, from });\r\n // trigger scroll to allow scrolling to the same anchor\r\n handleScroll(from, from, \r\n // this is a push, the only way for it to be triggered from a\r\n // history.listen is with a redirect, which makes it become a push\r\n true, \r\n // This cannot be the first navigation because the initial location\r\n // cannot be manually navigated to\r\n false);\r\n }\r\n return (failure ? Promise.resolve(failure) : navigate(toLocation, from))\r\n .catch((error) => isNavigationFailure(error)\r\n ? // navigation redirects still mark the router as ready\r\n isNavigationFailure(error, 2 /* ErrorTypes.NAVIGATION_GUARD_REDIRECT */)\r\n ? error\r\n : markAsReady(error) // also returns the error\r\n : // reject any unknown error\r\n triggerError(error, toLocation, from))\r\n .then((failure) => {\r\n if (failure) {\r\n if (isNavigationFailure(failure, 2 /* ErrorTypes.NAVIGATION_GUARD_REDIRECT */)) {\r\n if ((process.env.NODE_ENV !== 'production') &&\r\n // we are redirecting to the same location we were already at\r\n isSameRouteLocation(stringifyQuery$1, resolve(failure.to), toLocation) &&\r\n // and we have done it a couple of times\r\n redirectedFrom &&\r\n // @ts-expect-error: added only in dev\r\n (redirectedFrom._count = redirectedFrom._count\r\n ? // @ts-expect-error\r\n redirectedFrom._count + 1\r\n : 1) > 10) {\r\n warn(`Detected an infinite redirection in a navigation guard when going from \"${from.fullPath}\" to \"${toLocation.fullPath}\". Aborting to avoid a Stack Overflow. This will break in production if not fixed.`);\r\n return Promise.reject(new Error('Infinite redirect in navigation guard'));\r\n }\r\n return pushWithRedirect(\r\n // keep options\r\n assign({\r\n // preserve an existing replacement but allow the redirect to override it\r\n replace,\r\n }, locationAsObject(failure.to), {\r\n state: typeof failure.to === 'object'\r\n ? assign({}, data, failure.to.state)\r\n : data,\r\n force,\r\n }), \r\n // preserve the original redirectedFrom if any\r\n redirectedFrom || toLocation);\r\n }\r\n }\r\n else {\r\n // if we fail we don't finalize the navigation\r\n failure = finalizeNavigation(toLocation, from, true, replace, data);\r\n }\r\n triggerAfterEach(toLocation, from, failure);\r\n return failure;\r\n });\r\n }\r\n /**\r\n * Helper to reject and skip all navigation guards if a new navigation happened\r\n * @param to\r\n * @param from\r\n */\r\n function checkCanceledNavigationAndReject(to, from) {\r\n const error = checkCanceledNavigation(to, from);\r\n return error ? Promise.reject(error) : Promise.resolve();\r\n }\r\n // TODO: refactor the whole before guards by internally using router.beforeEach\r\n function navigate(to, from) {\r\n let guards;\r\n const [leavingRecords, updatingRecords, enteringRecords] = extractChangingRecords(to, from);\r\n // all components here have been resolved once because we are leaving\r\n guards = extractComponentsGuards(leavingRecords.reverse(), 'beforeRouteLeave', to, from);\r\n // leavingRecords is already reversed\r\n for (const record of leavingRecords) {\r\n record.leaveGuards.forEach(guard => {\r\n guards.push(guardToPromiseFn(guard, to, from));\r\n });\r\n }\r\n const canceledNavigationCheck = checkCanceledNavigationAndReject.bind(null, to, from);\r\n guards.push(canceledNavigationCheck);\r\n // run the queue of per route beforeRouteLeave guards\r\n return (runGuardQueue(guards)\r\n .then(() => {\r\n // check global guards beforeEach\r\n guards = [];\r\n for (const guard of beforeGuards.list()) {\r\n guards.push(guardToPromiseFn(guard, to, from));\r\n }\r\n guards.push(canceledNavigationCheck);\r\n return runGuardQueue(guards);\r\n })\r\n .then(() => {\r\n // check in components beforeRouteUpdate\r\n guards = extractComponentsGuards(updatingRecords, 'beforeRouteUpdate', to, from);\r\n for (const record of updatingRecords) {\r\n record.updateGuards.forEach(guard => {\r\n guards.push(guardToPromiseFn(guard, to, from));\r\n });\r\n }\r\n guards.push(canceledNavigationCheck);\r\n // run the queue of per route beforeEnter guards\r\n return runGuardQueue(guards);\r\n })\r\n .then(() => {\r\n // check the route beforeEnter\r\n guards = [];\r\n for (const record of to.matched) {\r\n // do not trigger beforeEnter on reused views\r\n if (record.beforeEnter && !from.matched.includes(record)) {\r\n if (isArray(record.beforeEnter)) {\r\n for (const beforeEnter of record.beforeEnter)\r\n guards.push(guardToPromiseFn(beforeEnter, to, from));\r\n }\r\n else {\r\n guards.push(guardToPromiseFn(record.beforeEnter, to, from));\r\n }\r\n }\r\n }\r\n guards.push(canceledNavigationCheck);\r\n // run the queue of per route beforeEnter guards\r\n return runGuardQueue(guards);\r\n })\r\n .then(() => {\r\n // NOTE: at this point to.matched is normalized and does not contain any () => Promise<Component>\r\n // clear existing enterCallbacks, these are added by extractComponentsGuards\r\n to.matched.forEach(record => (record.enterCallbacks = {}));\r\n // check in-component beforeRouteEnter\r\n guards = extractComponentsGuards(enteringRecords, 'beforeRouteEnter', to, from);\r\n guards.push(canceledNavigationCheck);\r\n // run the queue of per route beforeEnter guards\r\n return runGuardQueue(guards);\r\n })\r\n .then(() => {\r\n // check global guards beforeResolve\r\n guards = [];\r\n for (const guard of beforeResolveGuards.list()) {\r\n guards.push(guardToPromiseFn(guard, to, from));\r\n }\r\n guards.push(canceledNavigationCheck);\r\n return runGuardQueue(guards);\r\n })\r\n // catch any navigation canceled\r\n .catch(err => isNavigationFailure(err, 8 /* ErrorTypes.NAVIGATION_CANCELLED */)\r\n ? err\r\n : Promise.reject(err)));\r\n }\r\n function triggerAfterEach(to, from, failure) {\r\n // navigation is confirmed, call afterGuards\r\n // TODO: wrap with error handlers\r\n for (const guard of afterGuards.list())\r\n guard(to, from, failure);\r\n }\r\n /**\r\n * - Cleans up any navigation guards\r\n * - Changes the url if necessary\r\n * - Calls the scrollBehavior\r\n */\r\n function finalizeNavigation(toLocation, from, isPush, replace, data) {\r\n // a more recent navigation took place\r\n const error = checkCanceledNavigation(toLocation, from);\r\n if (error)\r\n return error;\r\n // only consider as push if it's not the first navigation\r\n const isFirstNavigation = from === START_LOCATION_NORMALIZED;\r\n const state = !isBrowser ? {} : history.state;\r\n // change URL only if the user did a push/replace and if it's not the initial navigation because\r\n // it's just reflecting the url\r\n if (isPush) {\r\n // on the initial navigation, we want to reuse the scroll position from\r\n // history state if it exists\r\n if (replace || isFirstNavigation)\r\n routerHistory.replace(toLocation.fullPath, assign({\r\n scroll: isFirstNavigation && state && state.scroll,\r\n }, data));\r\n else\r\n routerHistory.push(toLocation.fullPath, data);\r\n }\r\n // accept current navigation\r\n currentRoute.value = toLocation;\r\n handleScroll(toLocation, from, isPush, isFirstNavigation);\r\n markAsReady();\r\n }\r\n let removeHistoryListener;\r\n // attach listener to history to trigger navigations\r\n function setupListeners() {\r\n // avoid setting up listeners twice due to an invalid first navigation\r\n if (removeHistoryListener)\r\n return;\r\n removeHistoryListener = routerHistory.listen((to, _from, info) => {\r\n if (!router.listening)\r\n return;\r\n // cannot be a redirect route because it was in history\r\n const toLocation = resolve(to);\r\n // due to dynamic routing, and to hash history with manual navigation\r\n // (manually changing the url or calling history.hash = '#/somewhere'),\r\n // there could be a redirect record in history\r\n const shouldRedirect = handleRedirectRecord(toLocation);\r\n if (shouldRedirect) {\r\n pushWithRedirect(assign(shouldRedirect, { replace: true }), toLocation).catch(noop);\r\n return;\r\n }\r\n pendingLocation = toLocation;\r\n const from = currentRoute.value;\r\n // TODO: should be moved to web history?\r\n if (isBrowser) {\r\n saveScrollPosition(getScrollKey(from.fullPath, info.delta), computeScrollPosition());\r\n }\r\n navigate(toLocation, from)\r\n .catch((error) => {\r\n if (isNavigationFailure(error, 4 /* ErrorTypes.NAVIGATION_ABORTED */ | 8 /* ErrorTypes.NAVIGATION_CANCELLED */)) {\r\n return error;\r\n }\r\n if (isNavigationFailure(error, 2 /* ErrorTypes.NAVIGATION_GUARD_REDIRECT */)) {\r\n // Here we could call if (info.delta) routerHistory.go(-info.delta,\r\n // false) but this is bug prone as we have no way to wait the\r\n // navigation to be finished before calling pushWithRedirect. Using\r\n // a setTimeout of 16ms seems to work but there is no guarantee for\r\n // it to work on every browser. So instead we do not restore the\r\n // history entry and trigger a new navigation as requested by the\r\n // navigation guard.\r\n // the error is already handled by router.push we just want to avoid\r\n // logging the error\r\n pushWithRedirect(error.to, toLocation\r\n // avoid an uncaught rejection, let push call triggerError\r\n )\r\n .then(failure => {\r\n // manual change in hash history #916 ending up in the URL not\r\n // changing, but it was changed by the manual url change, so we\r\n // need to manually change it ourselves\r\n if (isNavigationFailure(failure, 4 /* ErrorTypes.NAVIGATION_ABORTED */ |\r\n 16 /* ErrorTypes.NAVIGATION_DUPLICATED */) &&\r\n !info.delta &&\r\n info.type === NavigationType.pop) {\r\n routerHistory.go(-1, false);\r\n }\r\n })\r\n .catch(noop);\r\n // avoid the then branch\r\n return Promise.reject();\r\n }\r\n // do not restore history on unknown direction\r\n if (info.delta) {\r\n routerHistory.go(-info.delta, false);\r\n }\r\n // unrecognized error, transfer to the global handler\r\n return triggerError(error, toLocation, from);\r\n })\r\n .then((failure) => {\r\n failure =\r\n failure ||\r\n finalizeNavigation(\r\n // after navigation, all matched components are resolved\r\n toLocation, from, false);\r\n // revert the navigation\r\n if (failure) {\r\n if (info.delta &&\r\n // a new navigation has been triggered, so we do not want to revert, that will change the current history\r\n // entry while a different route is displayed\r\n !isNavigationFailure(failure, 8 /* ErrorTypes.NAVIGATION_CANCELLED */)) {\r\n routerHistory.go(-info.delta, false);\r\n }\r\n else if (info.type === NavigationType.pop &&\r\n isNavigationFailure(failure, 4 /* ErrorTypes.NAVIGATION_ABORTED */ | 16 /* ErrorTypes.NAVIGATION_DUPLICATED */)) {\r\n // manual change in hash history #916\r\n // it's like a push but lacks the information of the direction\r\n routerHistory.go(-1, false);\r\n }\r\n }\r\n triggerAfterEach(toLocation, from, failure);\r\n })\r\n .catch(noop);\r\n });\r\n }\r\n // Initialization and Errors\r\n let readyHandlers = useCallbacks();\r\n let errorHandlers = useCallbacks();\r\n let ready;\r\n /**\r\n * Trigger errorHandlers added via onError and throws the error as well\r\n *\r\n * @param error - error to throw\r\n * @param to - location we were navigating to when the error happened\r\n * @param from - location we were navigating from when the error happened\r\n * @returns the error as a rejected promise\r\n */\r\n function triggerError(error, to, from) {\r\n markAsReady(error);\r\n const list = errorHandlers.list();\r\n if (list.length) {\r\n list.forEach(handler => handler(error, to, from));\r\n }\r\n else {\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n warn('uncaught error during route navigation:');\r\n }\r\n console.error(error);\r\n }\r\n return Promise.reject(error);\r\n }\r\n function isReady() {\r\n if (ready && currentRoute.value !== START_LOCATION_NORMALIZED)\r\n return Promise.resolve();\r\n return new Promise((resolve, reject) => {\r\n readyHandlers.add([resolve, reject]);\r\n });\r\n }\r\n function markAsReady(err) {\r\n if (!ready) {\r\n // still not ready if an error happened\r\n ready = !err;\r\n setupListeners();\r\n readyHandlers\r\n .list()\r\n .forEach(([resolve, reject]) => (err ? reject(err) : resolve()));\r\n readyHandlers.reset();\r\n }\r\n return err;\r\n }\r\n // Scroll behavior\r\n function handleScroll(to, from, isPush, isFirstNavigation) {\r\n const { scrollBehavior } = options;\r\n if (!isBrowser || !scrollBehavior)\r\n return Promise.resolve();\r\n const scrollPosition = (!isPush && getSavedScrollPosition(getScrollKey(to.fullPath, 0))) ||\r\n ((isFirstNavigation || !isPush) &&\r\n history.state &&\r\n history.state.scroll) ||\r\n null;\r\n return nextTick()\r\n .then(() => scrollBehavior(to, from, scrollPosition))\r\n .then(position => position && scrollToPosition(position))\r\n .catch(err => triggerError(err, to, from));\r\n }\r\n const go = (delta) => routerHistory.go(delta);\r\n let started;\r\n const installedApps = new Set();\r\n const router = {\r\n currentRoute,\r\n listening: true,\r\n addRoute,\r\n removeRoute,\r\n hasRoute,\r\n getRoutes,\r\n resolve,\r\n options,\r\n push,\r\n replace,\r\n go,\r\n back: () => go(-1),\r\n forward: () => go(1),\r\n beforeEach: beforeGuards.add,\r\n beforeResolve: beforeResolveGuards.add,\r\n afterEach: afterGuards.add,\r\n onError: errorHandlers.add,\r\n isReady,\r\n install(app) {\r\n const router = this;\r\n app.component('RouterLink', RouterLink);\r\n app.component('RouterView', RouterView);\r\n app.config.globalProperties.$router = router;\r\n Object.defineProperty(app.config.globalProperties, '$route', {\r\n enumerable: true,\r\n get: () => unref(currentRoute),\r\n });\r\n // this initial navigation is only necessary on client, on server it doesn't\r\n // make sense because it will create an extra unnecessary navigation and could\r\n // lead to problems\r\n if (isBrowser &&\r\n // used for the initial navigation client side to avoid pushing\r\n // multiple times when the router is used in multiple apps\r\n !started &&\r\n currentRoute.value === START_LOCATION_NORMALIZED) {\r\n // see above\r\n started = true;\r\n push(routerHistory.location).catch(err => {\r\n if ((process.env.NODE_ENV !== 'production'))\r\n warn('Unexpected error when starting the router:', err);\r\n });\r\n }\r\n const reactiveRoute = {};\r\n for (const key in START_LOCATION_NORMALIZED) {\r\n // @ts-expect-error: the key matches\r\n reactiveRoute[key] = computed(() => currentRoute.value[key]);\r\n }\r\n app.provide(routerKey, router);\r\n app.provide(routeLocationKey, reactive(reactiveRoute));\r\n app.provide(routerViewLocationKey, currentRoute);\r\n const unmountApp = app.unmount;\r\n installedApps.add(app);\r\n app.unmount = function () {\r\n installedApps.delete(app);\r\n // the router is not attached to an app anymore\r\n if (installedApps.size < 1) {\r\n // invalidate the current navigation\r\n pendingLocation = START_LOCATION_NORMALIZED;\r\n removeHistoryListener && removeHistoryListener();\r\n removeHistoryListener = null;\r\n currentRoute.value = START_LOCATION_NORMALIZED;\r\n started = false;\r\n ready = false;\r\n }\r\n unmountApp();\r\n };\r\n // TODO: this probably needs to be updated so it can be used by vue-termui\r\n if (((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) && isBrowser) {\r\n addDevtools(app, router, matcher);\r\n }\r\n },\r\n };\r\n return router;\r\n}\r\nfunction runGuardQueue(guards) {\r\n return guards.reduce((promise, guard) => promise.then(() => guard()), Promise.resolve());\r\n}\r\nfunction extractChangingRecords(to, from) {\r\n const leavingRecords = [];\r\n const updatingRecords = [];\r\n const enteringRecords = [];\r\n const len = Math.max(from.matched.length, to.matched.length);\r\n for (let i = 0; i < len; i++) {\r\n const recordFrom = from.matched[i];\r\n if (recordFrom) {\r\n if (to.matched.find(record => isSameRouteRecord(record, recordFrom)))\r\n updatingRecords.push(recordFrom);\r\n else\r\n leavingRecords.push(recordFrom);\r\n }\r\n const recordTo = to.matched[i];\r\n if (recordTo) {\r\n // the type doesn't matter because we are comparing per reference\r\n if (!from.matched.find(record => isSameRouteRecord(record, recordTo))) {\r\n enteringRecords.push(recordTo);\r\n }\r\n }\r\n }\r\n return [leavingRecords, updatingRecords, enteringRecords];\r\n}\r\n\r\n/**\r\n * Returns the router instance. Equivalent to using `$router` inside\r\n * templates.\r\n */\r\nfunction useRouter() {\r\n return inject(routerKey);\r\n}\r\n/**\r\n * Returns the current route location. Equivalent to using `$route` inside\r\n * templates.\r\n */\r\nfunction useRoute() {\r\n return inject(routeLocationKey);\r\n}\r\n\r\nexport { NavigationFailureType, RouterLink, RouterView, START_LOCATION_NORMALIZED as START_LOCATION, createMemoryHistory, createRouter, createRouterMatcher, createWebHashHistory, createWebHistory, isNavigationFailure, loadRouteLocation, matchedRouteKey, onBeforeRouteLeave, onBeforeRouteUpdate, parseQuery, routeLocationKey, routerKey, routerViewLocationKey, stringifyQuery, useLink, useRoute, useRouter, viewDepthKey };\r\n","import { ref, computed, toRaw, reactive, nextTick, onMounted, onUpdated, onBeforeUnmount, onBeforeUpdate, openBlock, createElementBlock, renderSlot, shallowRef, resolveComponent, normalizeStyle, createElementVNode, unref, createVNode, withCtx, Fragment, renderList, createCommentVNode, inject, provide, onUnmounted, onActivated, onDeactivated, createBlock, watchEffect, mergeProps, toDisplayString, watch, shallowReactive, withDirectives, vShow } from 'vue';\nimport { Forge as Forge$1, ForgeExtension } from '@shijiu/jsview/dom/jsv-forge-define';\nimport { L as LoopType } from './jsview-vue-common.mjs';\nexport { A as ApicEndState } from './jsview-vue-common.mjs';\nimport { _ as _export_sfc } from './export-sfc.mjs';\nimport { Forge as Forge$2 } from '@shijiu/jsview/dom/jsv-forge-define.mjs';\nimport { createWebHashHistory, createMemoryHistory } from 'vue-router';\n\n//!\n//! utils/JsViewEngineWidget/WidgetCommon.ts;\n//!\nclass BaseDispatcher {\n _Component;\n constructor() {\n console.error(\"BaseDispatcher is deprecated and will be removed soon. Use MetroWidget exposed methods instead.\");\n this._Component = null;\n this.registerComponent = this.registerComponent.bind(this);\n this.unregisterComponent = this.unregisterComponent.bind(this);\n this.dispatch = this.dispatch.bind(this);\n }\n registerComponent(component) {\n console.error(\"BaseDispatcher is deprecated and will be removed soon. Use MetroWidget exposed methods instead.\");\n this._Component = component;\n }\n unregisterComponent() {\n console.error(\"BaseDispatcher is deprecated and will be removed soon. Use MetroWidget exposed methods instead.\");\n this._Component = null;\n }\n dispatch(event) {\n if (event && this._Component) {\n console.error(\"BaseDispatcher is deprecated and will be removed soon. Use MetroWidget exposed methods instead.\");\n this._Component._dispatchEvent(event);\n }\n }\n}\nconst getMeasureObj = (width, height, focusable, hasSub) => {\n console.error(\"getMeasureObj is deprecated and will be removed soon.\");\n return {\n width,\n height,\n focusable,\n hasSub\n };\n};\nfunction getPositionRelativeToView(divElement, targetElement) {\n console.error(\"getPositionRelativeToView is deprecated and will be removed soon.\");\n if (!divElement) {\n return null;\n }\n let element = divElement;\n let position = {\n left: 0,\n top: 0,\n width: element.style.width,\n height: element.style.height\n };\n while (element && element !== targetElement) {\n position.left += element.style.left ? element.style.left : 0;\n position.top += element.style.top ? element.style.top : 0;\n element = element.parentNode;\n }\n return position;\n}\nconst EdgeDirection = {\n left: Symbol(\"left\"),\n right: Symbol(\"right\"),\n top: Symbol(\"top\"),\n bottom: Symbol(\"bottom\"),\n opposite: (dir) => {\n switch (dir) {\n case EdgeDirection.left:\n return EdgeDirection.right;\n case EdgeDirection.right:\n return EdgeDirection.left;\n case EdgeDirection.top:\n return EdgeDirection.bottom;\n case EdgeDirection.bottom:\n return EdgeDirection.top;\n }\n }\n};\nconst SlideStyle = {\n seamLess: Symbol(\"seamless\"),\n wholePage: Symbol(\"wholePage\"),\n seamlessFixedId: Symbol(\"seamlessFixedId\"),\n startBoundaryProtect: 1,\n endBoundaryProtect: 2\n};\nconst VERTICAL = Symbol(\"vertical\");\nconst HORIZONTAL = Symbol(\"horizontal\");\nconst defaultSpeed = 1.5;\nconst defaultEasing = \"\";\nclass SlideSetting {\n static Type = {\n WHOLE_PAGE: 0,\n SEAMLESS: 1,\n FIX_POSITION: 2\n };\n static START_PROTECT = 1;\n static END_PROTECT = 2;\n Type;\n Speed = null;\n Easing;\n BoundaryProtect;\n Duration = null;\n constructor(type, speed, duration, easing, boundaryProtect) {\n if (typeof speed != \"number\" || speed <= 0) {\n console.error(\"SlideSetting error: speed must be number greater than 0.\");\n speed = defaultSpeed;\n }\n this.Type = type;\n this.Speed = speed;\n this.Easing = easing;\n this.Duration = duration;\n this.BoundaryProtect = boundaryProtect;\n }\n}\nclass WholePageSlide extends SlideSetting {\n constructor({\n speed = defaultSpeed,\n easing = defaultEasing,\n boundaryProtect = SlideSetting.START_PROTECT,\n duration = null\n } = {}) {\n super(SlideSetting.Type.WHOLE_PAGE, speed, duration, easing, boundaryProtect);\n }\n}\nclass SeamlessSlide extends SlideSetting {\n StartPercent;\n EndPercent;\n FixFirstPage;\n constructor({\n startPercent = 0.2,\n endPercent = 0.8,\n speed = defaultSpeed,\n duration = null,\n easing = defaultEasing,\n fixFirstPage = false,\n boundaryProtect = SlideSetting.START_PROTECT | SlideSetting.END_PROTECT\n } = {}) {\n super(SlideSetting.Type.SEAMLESS, speed, duration, easing, boundaryProtect);\n this.StartPercent = startPercent;\n this.EndPercent = endPercent;\n this.FixFirstPage = fixFirstPage;\n }\n}\nclass FixPositionSlide extends SlideSetting {\n FixPercent;\n FixFirstPage;\n constructor({\n fixPercent = 0.5,\n speed = defaultSpeed,\n duration = null,\n easing = defaultEasing,\n fixFirstPage = false,\n boundaryProtect = SlideSetting.START_PROTECT | SlideSetting.END_PROTECT\n } = {}) {\n super(SlideSetting.Type.FIX_POSITION, speed, duration, easing, boundaryProtect);\n this.FixPercent = fixPercent;\n this.FixFirstPage = fixFirstPage;\n }\n}\nconst FocusMoveType = {\n NO_ADJUST: 0,\n COLUMN_LOOP: 1,\n ROW_LOOP: 1 << 1,\n COLUMN_FIND_NEAR: 1 << 2,\n ROW_FIND_NEAR: 1 << 3\n};\nconst RENDER_ITEM_BREAK_KEY = \"__QcodeJsviewMetroWidgetSlot\";\n\n//!\n//! utils/JsViewEngineWidget/MetroWidget/Dispatcher.js;\n//!\nclass Dispatcher extends BaseDispatcher {\n}\nDispatcher.Type = {\n setFocusId: Symbol(\"setFocusId\"),\n updateItem: Symbol(\"updateItem\"),\n slideToItem: Symbol(\"slideTo\"),\n setEnterFocusId: Symbol(\"setEnterFocusId\"),\n setEnterFocusRect: Symbol(\"setEnterFocusRect\")\n};\n\n//!\n//! utils/JsViewEngineWidget/TemplateParser/Fence.ts;\n//!\nclass Fence {\n /**\n * MetroLayout用于计算使用区域的Fence(栅栏)\n *\n * @private\n * @constructor _Fence\n * @memberof Forge.MetroLayout\n * @param {int} takenStartPos 栅栏使用区域的起始位置\n * @param {int} width 栅栏使用区域的宽度\n * @param {int} fenceWidth 栅栏的总宽度\n * @param {int} offsetAhead 栅栏的横向位置\n * */\n Gaps;\n FenceTotalWidth;\n AheadOffsetInner;\n constructor(takenStartPos, width, fenceWidth, offsetAhead) {\n this.Gaps = [{ GapStart: 0, GapEnd: fenceWidth - 1 }];\n this.FenceTotalWidth = fenceWidth;\n this.AheadOffsetInner = offsetAhead;\n if (width > 0)\n this.SplitGap(0, takenStartPos, width);\n }\n get AheadOffset() {\n return this.AheadOffsetInner;\n }\n /**\n * 查询栅栏是否能放下给定宽度的方块\n *\n * @public\n * @func HasGapFor\n * @memberof Forge.MetroLayout._Fence\n * @instance\n * @param {int} width\n * @return {Object} 格式为{startPos: 栅栏空隙的起始位置},null为没有能容下的空隙。\n * */\n HasGapFor(width) {\n for (let i = 0; i < this.Gaps.length; i++) {\n if (this.Gaps[i].GapEnd - this.Gaps[i].GapStart + 1 >= width) {\n return this.Gaps[i];\n }\n }\n return null;\n }\n /**\n * 标记栅栏空隙被占用\n *\n * @public\n * @func MarkGapUsed\n * @memberof Forge.MetroLayout._Fence\n * @instance\n * @param {int} startPos 占用块的起始位置\n * @param {int} width 占用快的宽度\n * @return {int} 剩余栅栏的个数\n * */\n MarkGapUsed(startPos, width) {\n if (width <= 0)\n return this.Gaps.length;\n const end_pos = startPos + width - 1;\n let gapIdx = -1;\n for (let i = 0; i < this.Gaps.length; i++) {\n if (this.Gaps[i].GapStart <= startPos && this.Gaps[i].GapEnd >= end_pos) {\n gapIdx = i;\n break;\n }\n }\n if (gapIdx === -1) {\n return 0;\n }\n this.SplitGap(gapIdx, startPos, width);\n return this.Gaps.length;\n }\n SplitGap(gapIdx, takerStartPos, takerWidth) {\n const editGap = this.Gaps.splice(gapIdx, 1)[0];\n const takerEndPos = takerStartPos + takerWidth - 1;\n if (takerStartPos < editGap.GapStart || takerEndPos > editGap.GapEnd) {\n console.log(\"ERROR in split Fence Gap, range overflow\");\n }\n if (takerEndPos !== editGap.GapEnd) {\n this.Gaps.splice(gapIdx, 0, {\n GapStart: takerEndPos + 1,\n GapEnd: editGap.GapEnd\n });\n }\n if (takerStartPos !== editGap.GapStart) {\n this.Gaps.splice(gapIdx, 0, {\n GapStart: editGap.GapStart,\n GapEnd: takerStartPos - 1\n });\n }\n }\n /**\n * 标记栅栏空隙被占用\n *\n * @public\n * @func Fork\n * @memberof Forge.MetroLayout._Fence\n * @instance\n * @param {int} new_ahead_offset 新栅栏的起点位置\n * @return {Forge.MetroLayout._Fence} 复制出来的Fence\n * */\n Fork(new_ahead_offset) {\n const newFence = new Fence(0, 0, 0, 0);\n newFence.Gaps = JSON.parse(JSON.stringify(this.Gaps));\n newFence.FenceTotalWidth = this.FenceTotalWidth;\n newFence.AheadOffsetInner = new_ahead_offset;\n return newFence;\n }\n}\n\n//!\n//! utils/JsViewEngineWidget/CheckType.js;\n//!\nconst isArray$1 = Array.isArray;\nconst isMap$1 = (val) => Object.prototype.toString.call(val) === \"[object Map]\";\nconst isSet$1 = (val) => Object.prototype.toString.call(val) === \"[object Set]\";\nconst isDate$1 = (val) => Object.prototype.toString.call(val) === \"[object Date]\";\nconst isFunction$1 = (val) => typeof val === \"function\";\nconst isString$1 = (val) => typeof val === \"string\";\nconst isSymbol$1 = (val) => typeof val === \"symbol\";\nconst isObject$1 = (val) => val !== null && typeof val === \"object\";\nfunction getTypeName(ctor) {\n const match = ctor && ctor.toString().match(/^\\s*function (\\w+)/);\n return match ? match[1] : ctor === null ? \"null\" : \"\";\n}\nconst objectToString$1 = Object.prototype.toString;\nconst toTypeString$1 = (value) => objectToString$1.call(value);\nconst toRawType$1 = (value) => {\n return toTypeString$1(value).slice(8, -1);\n};\nfunction makeMap$1(str, expectsLowerCase) {\n const map = /* @__PURE__ */ Object.create(null);\n const list = str.split(\",\");\n for (let i = 0; i < list.length; i++) {\n map[list[i]] = true;\n }\n return expectsLowerCase ? (val) => !!map[val.toLowerCase()] : (val) => !!map[val];\n}\nconst isSimpleType$1 = /* @__PURE__ */ makeMap$1(\"String,Number,Boolean,Function,Symbol,BigInt\");\nfunction checkType$1(value, type) {\n if (typeof type === \"undefined\" || type === null) {\n return true;\n }\n const check = (v, t) => {\n let valid;\n const expectedType = getTypeName(t);\n if (isSimpleType$1(expectedType)) {\n const t2 = typeof v;\n valid = t2 === expectedType.toLowerCase();\n if (!valid && t2 === \"object\") {\n valid = v instanceof t2;\n }\n } else if (expectedType === \"Object\") {\n valid = isObject$1(v);\n } else if (expectedType === \"Array\") {\n valid = isArray$1(v);\n } else if (expectedType === \"null\") {\n valid = v === null;\n } else {\n valid = v instanceof t;\n }\n return valid;\n };\n if (toRawType$1(type) == \"Array\") {\n let result = false;\n for (let t of type) {\n if (check(value, t)) {\n return true;\n }\n }\n return false;\n } else {\n return check(value, type);\n }\n}\n\n//!\n//! utils/JsViewEngineWidget/MetroWidget/Const.ts;\n//!\nconst METRO_WIDGET = {\n SLIDE: 1,\n CHILD_SLIDE_EVENT: 1 << 1,\n ON_KEY_DOWN: 1 << 2,\n //resize locate const\n ITEM_RESIZE: {\n ANCHOR: 1,\n WIDGET_SET: 2,\n CUSTOMER_SET: 3\n },\n //item slide type\n ITEM_SLIDE: {\n DISABLE: 1,\n ACT_ITEM_FOCUS: 2,\n ACT_FOCUS_RECT_EVENT: 3\n }\n};\n\n//!\n//! utils/JsViewEngineWidget/TemplateParser/MetroTemplate.ts;\n//!\nconst TAG$6 = \"MetroTemplate\";\nconst measureObjectDefine = {\n left: {\n type: Number,\n default: 0,\n validator(value, errorLogger) {\n if (Math.round(value) != value) {\n errorLogger(`prop left value expected integer, got float. value is ${value}`);\n return false;\n }\n return true;\n }\n },\n top: {\n type: Number,\n default: 0,\n validator(value, errorLogger) {\n if (Math.round(value) != value) {\n errorLogger(`prop top value expected integer, got float. value is ${value}`);\n return false;\n }\n return true;\n }\n },\n width: {\n type: Number,\n validator(value, errorLogger) {\n const _v = Math.round(value);\n if (_v != value) {\n errorLogger(`prop width value expected integer, got float. value is ${value}`);\n return false;\n }\n if (_v <= 0) {\n errorLogger(`prop width value must be larger than 0. value is ${value}`);\n return false;\n }\n return true;\n }\n },\n height: {\n type: Number,\n validator(value, errorLogger) {\n const _v = Math.round(value);\n if (_v != value) {\n errorLogger(`prop height value expected integer, got float. value is ${value}`);\n return false;\n }\n if (_v <= 0) {\n errorLogger(`prop height value must be larger than 0. value is ${value}`);\n return false;\n }\n return true;\n }\n },\n marginRight: {\n type: Number,\n default: 0,\n validator(value, errorLogger) {\n if (Math.round(value) != value) {\n errorLogger(`prop marginRight value expected integer, got float. value is ${value}`);\n return false;\n }\n return true;\n }\n },\n marginBottom: {\n type: Number,\n default: 0,\n validator(value, errorLogger) {\n if (Math.round(value) != value) {\n errorLogger(`prop marginBottom value expected integer, got float. value is ${value}`);\n return false;\n }\n return true;\n }\n },\n focusable: {\n type: Boolean,\n default: true\n },\n findNextAnchor: {\n type: [Object, null],\n default: null,\n validator(value, errorLogger) {\n if (value) {\n if (!checkType$1(value.left, Number)) {\n errorLogger(`findNextAnchor.left expected integer, got ${toRawType$1(value.left)}. value is ${value.left}`);\n return false;\n }\n if (!checkType$1(value.top, Number)) {\n errorLogger(`findNextAnchor.top expected integer, got ${toRawType$1(value.top)}. value is ${value.top}`);\n return false;\n }\n if (!checkType$1(value.right, Number)) {\n errorLogger(`findNextAnchor.right expected integer, got ${toRawType$1(value.right)}. value is ${value.right}`);\n return false;\n }\n if (!checkType$1(value.bottom, Number)) {\n errorLogger(`findNextAnchor.bottom expected integer, got ${toRawType$1(value.bottom)}. value is ${value.bottom}`);\n return false;\n }\n }\n return true;\n }\n },\n itemSlide: {\n type: Number,\n default: METRO_WIDGET.ITEM_SLIDE.ACT_ITEM_FOCUS\n },\n permanent: {\n type: Boolean,\n default: false\n },\n zIndex: {\n type: Number,\n default: -1\n }\n};\nclass MetroTemplate {\n supportHistoryPath;\n idsMap;\n uidMap;\n templateList;\n direction;\n lineMax;\n pageSize;\n layoutType;\n tailItemIndex = -1;\n cachedLayoutRange = [];\n constructor(direction, lineMax, pageSize, layoutType, supportHistoryPath) {\n this.idsMap = [];\n this.templateList = [];\n this.direction = direction;\n this.lineMax = lineMax;\n this.layoutType = layoutType;\n this.pageSize = pageSize;\n this.supportHistoryPath = supportHistoryPath;\n this.uidMap = {};\n }\n get size() {\n return this.templateList.length;\n }\n get focusableSize() {\n return this.idsMap.length;\n }\n addTemplateItem(item) {\n this.templateList.push(item);\n item.index = this.templateList.length - 1;\n if (item.focusable) {\n this.idsMap.push(item.index);\n item.id = this.idsMap.length - 1;\n } else {\n item.id = -1;\n }\n }\n index2Id(index) {\n const item = this.templateList[index];\n if (typeof item == \"undefined\") {\n console.log(TAG$6, \"index not exist\", index, \", template length\", this.templateList.length);\n return -1;\n } else {\n return item.id;\n }\n }\n id2Index(id) {\n const index = this.idsMap[id];\n if (typeof index == \"undefined\") {\n console.log(TAG$6, \"id not exist\", id);\n return -1;\n }\n return index;\n }\n getItemById(id) {\n return this.getItemByIndex(this.id2Index(id));\n }\n getItemByIndex(index) {\n const item = index >= 0 ? this.templateList[index] : this.templateList[this.templateList.length + index];\n return item ? item : null;\n }\n getItemByUid(uid) {\n return this.uidMap[uid];\n }\n addItem(itemObj) {\n const item = this.addItemInner(itemObj);\n if (itemObj.uid) {\n this.uidMap[itemObj.uid] = item;\n }\n return item;\n }\n getBoundingBoxSize() {\n const lastItem = this.templateList[this.templateList.length - 1];\n if (this.direction == VERTICAL) {\n return {\n width: this.lineMax,\n height: lastItem.height + lastItem.top - 1\n };\n } else {\n return {\n height: this.lineMax,\n width: lastItem.width + lastItem.left - 1\n };\n }\n }\n getTailItemIndex() {\n return this.tailItemIndex;\n }\n cacheLayout(start, end) {\n if (typeof end == \"undefined\") {\n end = this.templateList.length;\n }\n end = Math.min(end, this.templateList.length);\n for (let i = start; i < end; ++i) {\n let item = this.templateList[i];\n item.layoutCache = {\n left: item.left,\n top: item.top,\n width: item.width,\n height: item.height\n };\n }\n this.cachedLayoutRange.push([start, end]);\n }\n cleanLayoutCache() {\n for (let r of this.cachedLayoutRange) {\n for (let i = r[0]; i < r[1]; ++i) {\n this.templateList[i].layoutCache = null;\n }\n }\n this.cachedLayoutRange = [];\n }\n static getTemplateItem(itemObj) {\n const valid = this.checkMeasureObject(itemObj);\n if (!valid) {\n throw new Error(\"check measure object failed.\");\n }\n return {\n id: -1,\n index: -1,\n centerXPos: 0,\n // Set after template be layout\n centerYPos: 0,\n // Set after template be layout\n pageNumber: 0,\n pageHeadIndex: 0,\n width: itemObj.width,\n height: itemObj.height,\n left: itemObj.left ?? 0,\n top: itemObj.top ?? 0,\n marginRight: itemObj.marginRight ?? 0,\n marginBottom: itemObj.marginBottom ?? 0,\n focusable: itemObj.focusable ?? true,\n findNextAnchor: itemObj.findNextAnchor ?? null,\n neighborIndexList: {\n left: [],\n top: [],\n right: [],\n bottom: []\n },\n tmpNeighborIndexList: {\n left: [],\n top: [],\n right: [],\n bottom: []\n },\n pathHistory: {\n left: -1,\n right: -1,\n top: -1,\n bottom: -1\n },\n layoutCache: null\n };\n }\n static checkMeasureObject(obj) {\n let result = true;\n const errorLog = (errorInfo) => {\n console.error(TAG$6, \"measure obj check error: \", errorInfo, \". raw object\", obj);\n };\n for (let key in measureObjectDefine) {\n const defineInfo = measureObjectDefine[key];\n if (typeof obj[key] == \"undefined\") {\n if (typeof defineInfo.default != \"undefined\") {\n obj[key] = typeof defineInfo.default == \"function\" ? defineInfo.default() : defineInfo.default;\n }\n }\n if (checkType$1(obj[key], defineInfo.type)) {\n if (typeof defineInfo.validator != \"undefined\") {\n if (!defineInfo.validator(obj[key], errorLog)) {\n result = false;\n break;\n }\n }\n } else {\n result = false;\n errorLog(`prop ${key} expected ${getTypeName(defineInfo.type)} value, got ${toRawType$1(obj[key])}`);\n break;\n }\n }\n return result;\n }\n}\n\n//!\n//! utils/JsViewEngineWidget/RangeModel.js;\n//!\nclass SingleRangeModel {\n /**\n * 范围计算模型(RangesModel数组中的单元模型)\n *\n * @public\n * @constructor Forge.SingleRangeModel\n * @param {int} start 范围的初始起点\n * @param {int} end 范围的初始终点\n * */\n constructor(start, end) {\n this.Start = start;\n this.End = end;\n }\n /**\n * 与给定的单元范围进行合并\n *\n * @public\n * @func Merge\n * @memberof Forge.SingleRangeModel\n * @instance\n * @param {Forge.SingleRangeModel} merge_from 合并对象\n * @return {boolean} true:合并成功(有交集或者范围恰好衔接),false:合并失败\n * */\n Merge(merge_from) {\n if (!this.IsInterAct(merge_from)) {\n if (this.End + 1 === merge_from.Start) {\n this.End = merge_from.End;\n return true;\n }\n if (this.Start === merge_from.End + 1) {\n this.Start = merge_from.Start;\n return true;\n }\n return false;\n }\n if (this.Start > merge_from.Start)\n this.Start = merge_from.Start;\n if (this.End < merge_from.End)\n this.End = merge_from.End;\n return true;\n }\n /**\n * 检查是否与给定单元范围有交集\n *\n * @public\n * @func IsInterAct\n * @memberof Forge.SingleRangeModel\n * @instance\n * @param {Forge.SingleRangeModel} rang 合并对象\n * @return {boolean} true:有交集,false:无交集\n * */\n IsInterAct(range) {\n if (range.Start < this.Start) {\n if (range.End < this.Start)\n return false;\n return true;\n }\n if (range.Start <= this.End)\n return true;\n return false;\n }\n /**\n * 排除指定单元范围\n *\n * @public\n * @func Exclude\n * @memberof Forge.SingleRangeModel\n * @instance\n * @param {Forge.SingleRangeModel} exclude 指定单元范围\n * @return {Object} {success(boolean):是否排除成功,如无交集则为false, <br>\n * newSplitedRange(Forge.SingleRangeModel):进行排除后,被分离出来的后半段单元范围}\n * */\n Exclude(exclude) {\n const result = {\n success: false,\n newSplitedRange: null\n };\n if (!this.IsInterAct(exclude))\n return result;\n if (exclude.Start <= this.Start) {\n if (exclude.End < this.End)\n this.Start = exclude.End + 1;\n else\n this.Clear();\n } else {\n if (exclude.End < this.End) {\n result.newSplitedRange = new SingleRangeModel(\n exclude.End + 1,\n this.End\n );\n }\n this.End = exclude.Start - 1;\n }\n result.success = true;\n return result;\n }\n /**\n * 范围是否空区域\n *\n * @public\n * @func IsEmpty\n * @memberof Forge.SingleRangeModel\n * @instance\n * @return {boolean} true:为空区域,false:不为空\n * */\n IsEmpty() {\n return this.Start > this.End;\n }\n /**\n * 将单元范围清成空区域\n *\n * @public\n * @func Clear\n * @memberof Forge.SingleRangeModel\n * @instance\n * */\n Clear() {\n this.End = this.Start - 1;\n }\n /**\n * 复制单元范围\n *\n * @public\n * @func Clone\n * @memberof Forge.SingleRangeModel\n * @instance\n * @return {Forge.SingleRangeModel} 复制出的实例\n * */\n Clone() {\n const range_model = new SingleRangeModel(this.Start, this.End);\n return range_model;\n }\n}\nclass RangesModel {\n /**\n * 范围计算模型(用于复数范围比较)<br>\n * 例如:范围[-10, -2] + [2, 10] 与 范围[-8,-1] + [1, 8]进行交集计算<br>\n * 再如:范围[-10, -2] + [2, 10] 与 范围 [-8, 8]进行排除运算\n *\n * @public\n * @constructor Forge.RangesModel\n * @param {int} start 范围的初始起点\n * @param {int} end 范围的初始终点\n * */\n constructor(start, end) {\n this.Ranges = [];\n if (typeof start !== \"undefined\" && typeof end !== \"undefined\")\n this.Ranges.push(new SingleRangeModel(start, end));\n }\n /**\n * 范围合并\n *\n * @public\n * @func Merge\n * @memberof Forge.RangesModel\n * @instance\n * @param {Forge.SingleRangeModel} merge_from\n * */\n Merge(merge_from) {\n let merged_with_other = false;\n let insert_place = this.Ranges.length;\n for (let i = 0; i < this.Ranges.length; i++) {\n if (merge_from.End + 1 < this.Ranges[i].Start) {\n insert_place = i;\n break;\n } else {\n }\n if (this.Ranges[i].Merge(merge_from)) {\n merged_with_other = true;\n while (i + 1 < this.Ranges.length && this.Ranges[i].Merge(this.Ranges[i + 1])) {\n this.Ranges.splice(i + 1, 1);\n }\n break;\n }\n }\n if (!merged_with_other) {\n this.Ranges.splice(insert_place, 0, merge_from);\n }\n }\n /**\n * 范围排除\n *\n * @public\n * @func Exclude\n * @memberof Forge.RangesModel\n * @instance\n * @param {Forge.SingleRangeModel} exclude_range\n * */\n Exclude(exclude_range) {\n for (let i = 0; i < this.Ranges.length; i++) {\n if (exclude_range.End < this.Ranges[i].Start) {\n break;\n }\n const result = this.Ranges[i].Exclude(exclude_range);\n if (this.Ranges[i].IsEmpty()) {\n this.Ranges.splice(i, 1);\n i--;\n }\n if (result.newSplitedRange !== null) {\n this.Ranges.splice(i + 1, 0, result.newSplitedRange);\n break;\n }\n }\n }\n /**\n * 遍历范围数组的每个位置\n *\n * @public\n * @func ForEach\n * @memberof Forge.RangeModel\n * @instance\n * @param {function} callback 对于每个位置的回调处理,参数(int:当前位置值)。\n * @param {boolean} invert 是否是倒序进行遍历,默认为正序\n * */\n ForEach(callback, invert) {\n if (!callback) {\n console.log(\"Callback function is invalid\");\n return;\n }\n if (invert) {\n for (let i = this.Ranges.length - 1; i >= 0; i--) {\n for (let j = this.Ranges[i].End; j >= this.Ranges[i].Start; j--) {\n callback(j);\n }\n }\n } else {\n for (let i = 0; i < this.Ranges.length; i++) {\n for (let j = this.Ranges[i].Start; j <= this.Ranges[i].End; j++) {\n callback(j);\n }\n }\n }\n }\n /**\n * 判断与另一个 RangesModel 是否相交\n *\n * @public\n * @func IsInterAct\n * @memberof Forge.RangesModel\n * @instance\n * @param {Forge.RangesModel} ranges 比较对象\n * @return {Boolean} 是否相交\n * */\n IsInterAct(ranges) {\n for (let range of ranges.Ranges) {\n for (let myRange of this.Ranges) {\n if (myRange.IsInterAct(range)) {\n return true;\n }\n }\n }\n return false;\n }\n /**\n * 排除 另一个 RangesModel\n *\n * @public\n * @func ExcludeRanges\n * @memberof Forge.RangesModel\n * @instance\n * @param {Forge.RangesModel} ranges 比较对象\n * */\n ExcludeRanges(ranges) {\n for (let range of ranges.Ranges) {\n this.Exclude(range);\n }\n }\n IsEmpty() {\n return this.Ranges.length == 0;\n }\n Clone() {\n const newRanges = new RangesModel(0, 0);\n newRanges.Ranges = this.Ranges.map((range) => range.Clone());\n return newRanges;\n }\n}\n\n//!\n//! utils/JsViewEngineWidget/TemplateParser/CommonMetroTemplate.ts;\n//!\nconst TAG$5 = \"CommonTemplateParser\";\n;\n;\nclass CommonMetroTemplate extends MetroTemplate {\n _FenceStack;\n _FenceEdge;\n _NotOccupiedEdgeList;\n constructor(direction, lineMax, pageSize, layoutType, supportHistoryPath) {\n super(direction, lineMax, pageSize, layoutType, supportHistoryPath);\n this._FenceStack = [new Fence(0, 0, this.lineMax, 0)];\n this._FenceEdge = { StartX: 0, StartY: 0 };\n this._NotOccupiedEdgeList = [];\n }\n calculateNeighborWhenAddStop() {\n this._UpdateLastFenceEdge();\n this._CalculateNeighborItem();\n this._CalculateNeighborItem(true);\n const templateList = this.templateList;\n for (let j = templateList.length - 1; j >= 0; j--) {\n const item = templateList[j];\n if (item.focusable) {\n this._FindFocusableNeighbor(\"bottom\", item);\n this._FindFocusableNeighbor(\"top\", item);\n this._FindFocusableNeighbor(\"left\", item);\n this._FindFocusableNeighbor(\"right\", item);\n }\n }\n }\n _UpdateLastFenceEdge() {\n const oldFence = this._FenceEdge;\n const newMinFence = { StartX: -1, StartY: -1 };\n for (let i = 0; i < this._NotOccupiedEdgeList.length; i++) {\n const crossItem = this._NotOccupiedEdgeList[i];\n const crossEdgeObj = crossItem.edgeObj;\n if (this.direction === VERTICAL) {\n if (crossEdgeObj.bottomEdge !== null) {\n if (crossEdgeObj.bottomEdge.position > oldFence.StartY) {\n if (newMinFence.StartY === -1) {\n newMinFence.StartY = crossEdgeObj.bottomEdge.position;\n } else if (crossEdgeObj.bottomEdge.position < newMinFence.StartY) {\n newMinFence.StartY = crossEdgeObj.bottomEdge.position;\n }\n }\n }\n } else {\n if (crossEdgeObj.rightEdge !== null) {\n if (crossEdgeObj.rightEdge.position > oldFence.StartX) {\n if (newMinFence.StartX === -1) {\n newMinFence.StartX = crossEdgeObj.rightEdge.position;\n } else if (crossEdgeObj.rightEdge.position < newMinFence.StartX) {\n newMinFence.StartX = crossEdgeObj.rightEdge.position;\n }\n }\n }\n }\n }\n this._FenceEdge = newMinFence;\n }\n _CheckIdsHasFocusable(ids) {\n const templateList = this.templateList;\n let found = false;\n for (let i = 0; i < ids.length; i++) {\n const id = ids[i];\n if (templateList[id].focusable) {\n found = true;\n break;\n }\n }\n return found;\n }\n _GetValidNeighborIndex(srcItemId, lastItemId, neighborDirection) {\n const templateList = this.templateList;\n let validId = -1;\n const item = templateList[lastItemId];\n const srcItem = templateList[srcItemId];\n let firstIds;\n let secondIds;\n if (neighborDirection === \"top\") {\n secondIds = item.neighborIndexList.left;\n firstIds = item.neighborIndexList.right;\n } else {\n secondIds = item.neighborIndexList.right;\n firstIds = item.neighborIndexList.left;\n }\n if (firstIds.length > 0) {\n for (let i = 0; i < firstIds.length; i++) {\n const id = firstIds[i];\n const checkItem = templateList[id];\n if (checkItem.focusable && (neighborDirection === \"top\" && checkItem.top + checkItem.height <= srcItem.top || neighborDirection === \"bottom\" && checkItem.top >= srcItem.top + srcItem.height)) {\n validId = id;\n break;\n }\n }\n }\n if (validId === -1) {\n if (secondIds.length > 0) {\n for (let i = 0; i < secondIds.length; i++) {\n const id = secondIds[i];\n const checkItem = templateList[id];\n if (checkItem.focusable && (neighborDirection === \"top\" && checkItem.top + checkItem.height <= srcItem.top || neighborDirection === \"bottom\" && checkItem.top >= srcItem.top + srcItem.height)) {\n validId = id;\n break;\n }\n }\n }\n }\n return validId;\n }\n _FindFocusableNeighbor(direction, item) {\n if (item.neighborIndexList[direction].length > 0 && !this._CheckIdsHasFocusable(item.neighborIndexList[direction])) {\n const lastItemId = item.neighborIndexList[direction][item.neighborIndexList[direction].length - 1];\n const idx = this._GetValidNeighborIndex(item.id, lastItemId, direction);\n if (idx !== -1) {\n item.neighborIndexList[direction] = [];\n item.neighborIndexList[direction].push(idx);\n }\n }\n }\n addItemInner(itemObj) {\n const templateItem = MetroTemplate.getTemplateItem(itemObj);\n const fenceStack = this._FenceStack;\n const itemWidth = templateItem.width;\n const itemHeight = templateItem.height;\n let xPos;\n let yPos;\n let xWidth;\n let yWidth;\n let itemKeyPos = 0;\n let itemSecondPos = 0;\n let itemKeyWidth = 0;\n let itemSecondWidth = 0;\n let itemKeyMargin = 0;\n let itemSecondMargin = 0;\n if (this.layoutType === \"relative\") {\n if (this.direction === VERTICAL) {\n itemKeyWidth = itemWidth;\n itemSecondWidth = itemHeight;\n itemKeyMargin = templateItem.marginRight;\n itemSecondMargin = templateItem.marginBottom;\n } else {\n itemKeyWidth = itemHeight;\n itemSecondWidth = itemWidth;\n itemKeyMargin = templateItem.marginBottom;\n itemSecondMargin = templateItem.marginRight;\n }\n let topFence = null;\n let gapInfo = null;\n while (fenceStack.length > 0) {\n const checkingFence = fenceStack[fenceStack.length - 1];\n gapInfo = checkingFence.HasGapFor(itemKeyWidth + itemKeyMargin);\n if (gapInfo !== null) {\n topFence = checkingFence;\n break;\n }\n fenceStack.pop();\n }\n if (gapInfo !== null && topFence != null) {\n itemKeyPos = gapInfo.GapStart;\n itemSecondPos = topFence.AheadOffset;\n } else {\n throw new Error(\n `${TAG$5} item size ${itemWidth}x${itemHeight} is greater than widget line max ${this.lineMax}`\n );\n }\n if (this.direction === VERTICAL) {\n xPos = itemKeyPos;\n yPos = itemSecondPos;\n xWidth = itemKeyWidth;\n yWidth = itemSecondWidth;\n } else {\n xPos = itemSecondPos;\n yPos = itemKeyPos;\n xWidth = itemSecondWidth;\n yWidth = itemKeyWidth;\n }\n } else {\n xPos = templateItem.left;\n yPos = templateItem.top;\n xWidth = itemWidth;\n yWidth = itemHeight;\n }\n templateItem.left = xPos;\n templateItem.top = yPos;\n templateItem.centerXPos = Math.floor(xPos + xWidth / 2) - 1;\n templateItem.centerYPos = Math.floor(yPos + yWidth / 2) - 1;\n let curPageNumber = 0;\n let curPageHeadIndex = 0;\n if (this.templateList.length > 0) {\n const lastItem = this.templateList[this.templateList.length - 1];\n curPageNumber = lastItem.pageNumber;\n curPageHeadIndex = lastItem.pageHeadIndex;\n let positionKey = \"left\";\n let sizeKey = \"width\";\n if (this.direction === VERTICAL) {\n positionKey = \"top\";\n sizeKey = \"height\";\n }\n const curPageStart = this.templateList[curPageHeadIndex][positionKey];\n if (templateItem[positionKey] + templateItem[sizeKey] > curPageStart + this.pageSize) {\n curPageNumber++;\n curPageHeadIndex = this.templateList.length;\n }\n }\n templateItem.pageNumber = curPageNumber;\n templateItem.pageHeadIndex = curPageHeadIndex;\n this.addTemplateItem(templateItem);\n if (this.tailItemIndex < 0) {\n this.tailItemIndex = templateItem.index;\n } else {\n let pre, cur;\n if (this.direction === VERTICAL) {\n cur = templateItem.height + templateItem.top;\n pre = this.templateList[this.tailItemIndex].height + this.templateList[this.tailItemIndex].top;\n } else {\n cur = templateItem.width + templateItem.left;\n pre = this.templateList[this.tailItemIndex].width + this.templateList[this.tailItemIndex].left;\n }\n if (cur >= pre) {\n this.tailItemIndex = templateItem.index;\n }\n }\n this._TryCalculateNeighborItem(\n this.templateList.length - 1,\n templateItem.left,\n templateItem.top,\n templateItem.width + templateItem.marginRight,\n templateItem.height + templateItem.marginBottom\n );\n const itemSecondEndPos = itemSecondPos + itemSecondWidth + itemSecondMargin - 1;\n if (fenceStack[0].AheadOffset <= itemSecondEndPos) {\n fenceStack.splice(\n 0,\n 0,\n new Fence(0, 0, this.lineMax, itemSecondEndPos + 1)\n );\n }\n let endFenceExisted = false;\n let farAwayEndFenceExisted = false;\n let oneAheadLastFenceIdx = -1;\n for (let fenceIdx = fenceStack.length - 1; fenceIdx >= 0; fenceIdx--) {\n if (fenceStack[fenceIdx].AheadOffset <= itemSecondEndPos) {\n if (fenceStack[fenceIdx].AheadOffset === itemSecondEndPos)\n endFenceExisted = true;\n const leftGaps = fenceStack[fenceIdx].MarkGapUsed(\n itemKeyPos,\n itemKeyWidth + itemKeyMargin\n );\n if (leftGaps === 0) {\n fenceStack.splice(fenceIdx, 1);\n }\n } else {\n if (fenceStack[fenceIdx].AheadOffset === itemSecondEndPos + 1)\n farAwayEndFenceExisted = true;\n oneAheadLastFenceIdx = fenceIdx;\n break;\n }\n }\n const fenceAheadOffset = itemSecondEndPos;\n if (!endFenceExisted) {\n if (oneAheadLastFenceIdx + 1 <= fenceStack.length - 1) {\n const fence = fenceStack[oneAheadLastFenceIdx + 1].Fork(fenceAheadOffset);\n fenceStack.splice(oneAheadLastFenceIdx + 1, 0, fence);\n }\n }\n if (!farAwayEndFenceExisted) {\n if (oneAheadLastFenceIdx > 0) {\n const fence = fenceStack[oneAheadLastFenceIdx].Fork(\n fenceAheadOffset + 1\n );\n fenceStack.splice(oneAheadLastFenceIdx + 1, 0, fence);\n }\n }\n return templateItem;\n }\n /** get next item functions */\n getNextItem(baseId, vOffset, hOffset, moveType) {\n if (vOffset === 0 && hOffset === 0)\n console.log(\"GetNextItem(): offset is 0\");\n if (vOffset !== 0 && hOffset !== 0) {\n console.log(\n \"GetNextItem(): not support change vertical and horizontal at the same time\"\n );\n }\n const itemIndex = this.id2Index(baseId);\n if (itemIndex < 0) {\n console.log(\"getNextItem: no focusable item.\");\n return null;\n }\n const offset = vOffset !== 0 ? vOffset : hOffset;\n let nextTemplateItem = this.getNextItemInner(\n itemIndex,\n offset,\n vOffset !== 0,\n this.supportHistoryPath\n );\n const isVertical = this.direction === VERTICAL;\n if (nextTemplateItem === null) {\n if (isVertical && moveType & FocusMoveType.ROW_LOOP && hOffset != 0) {\n nextTemplateItem = this._GetNextLoopItem(\n itemIndex,\n hOffset,\n isVertical\n );\n } else if (!isVertical && moveType & FocusMoveType.COLUMN_LOOP && vOffset != 0) {\n nextTemplateItem = this._GetNextLoopItem(\n itemIndex,\n vOffset,\n isVertical\n );\n }\n }\n if (nextTemplateItem === null) {\n if (vOffset != 0 && moveType & FocusMoveType.ROW_FIND_NEAR) {\n nextTemplateItem = this._GetNearLineItem(itemIndex, vOffset, true);\n } else if (hOffset != 0 && moveType & FocusMoveType.COLUMN_FIND_NEAR) {\n nextTemplateItem = this._GetNearLineItem(itemIndex, hOffset, false);\n }\n }\n return nextTemplateItem;\n }\n getNextItemInner(index, offset, vertical, useHistory, checkAnchor = -1) {\n const templateList = this.templateList;\n const baseItem = templateList[index];\n if (checkAnchor < 0) {\n if (baseItem.findNextAnchor) {\n if (vertical) {\n if (offset > 0) {\n if (baseItem.findNextAnchor.bottom) {\n checkAnchor = baseItem.left + baseItem.findNextAnchor.bottom * (baseItem.width + baseItem.marginRight);\n }\n } else {\n if (baseItem.findNextAnchor.top) {\n checkAnchor = baseItem.left + baseItem.findNextAnchor.top * (baseItem.width + baseItem.marginRight);\n }\n }\n } else {\n if (offset > 0) {\n if (baseItem.findNextAnchor.right) {\n checkAnchor = baseItem.top + baseItem.findNextAnchor.right * (baseItem.height + baseItem.marginBottom);\n }\n } else {\n if (baseItem.findNextAnchor.left) {\n checkAnchor = baseItem.top + baseItem.findNextAnchor.left * (baseItem.height + baseItem.marginBottom);\n }\n }\n }\n }\n if (checkAnchor < 0) {\n checkAnchor = vertical ? baseItem.centerXPos : baseItem.centerYPos;\n }\n } else {\n if (vertical) {\n checkAnchor = Math.max(Math.min(checkAnchor, baseItem.left + baseItem.width - 1), baseItem.left);\n } else {\n checkAnchor = Math.max(Math.min(checkAnchor, baseItem.top + baseItem.height - 1), baseItem.top);\n }\n }\n const posKey = vertical ? \"left\" : \"top\";\n const sizeKey = vertical ? \"width\" : \"height\";\n let direction = vertical ? \"top\" : \"left\";\n let pathHistoryDirection = vertical ? \"bottom\" : \"right\";\n if (offset > 0) {\n pathHistoryDirection = vertical ? \"top\" : \"left\";\n direction = vertical ? \"bottom\" : \"right\";\n }\n const notRecordHistoryDirection = vertical ? \"bottom\" : \"right\";\n const notRecordHistoryOrient = vertical ? HORIZONTAL : VERTICAL;\n let lastItemIndex = templateList.length - 1;\n const orientType = this.direction;\n for (let i = templateList.length - 1; i >= 0; i--) {\n const lastItem = templateList[i];\n if (lastItem.focusable) {\n lastItemIndex = i;\n break;\n }\n }\n let found = false;\n let nextIndex = -1;\n let pathHistoryIndex = -1;\n if (useHistory && !baseItem.findNextAnchor) {\n pathHistoryIndex = templateList[index].pathHistory[direction];\n }\n if (pathHistoryIndex < 0) {\n let neighborList = templateList[index].neighborIndexList[direction];\n if (templateList[index].tmpNeighborIndexList[direction].length > 0) {\n neighborList = neighborList.concat(\n templateList[index].tmpNeighborIndexList[direction]\n );\n }\n if (neighborList.length === 1) {\n nextIndex = neighborList[0];\n if (lastItemIndex !== index || direction !== notRecordHistoryDirection || orientType !== notRecordHistoryOrient) {\n templateList[index].pathHistory[direction] = nextIndex;\n templateList[nextIndex].pathHistory[pathHistoryDirection] = index;\n }\n found = true;\n } else {\n for (let i = 0; i < neighborList.length; i++) {\n nextIndex = neighborList[i];\n const checkingItem = templateList[nextIndex];\n if (checkAnchor <= checkingItem[posKey] + checkingItem[sizeKey] - 1 && checkAnchor >= checkingItem[posKey]) {\n if (lastItemIndex !== index || direction !== notRecordHistoryDirection || orientType !== notRecordHistoryOrient) {\n templateList[index].pathHistory[direction] = nextIndex;\n templateList[nextIndex].pathHistory[pathHistoryDirection] = index;\n }\n found = true;\n break;\n }\n }\n if (!found || !templateList[nextIndex].focusable) {\n for (let i = 0; i < neighborList.length; i++) {\n const neighborIndex = neighborList[i];\n const checkingItem = templateList[neighborIndex];\n if (checkingItem.focusable) {\n if (lastItemIndex !== index || direction !== notRecordHistoryDirection || orientType !== notRecordHistoryOrient) {\n templateList[index].pathHistory[direction] = nextIndex;\n templateList[nextIndex].pathHistory[pathHistoryDirection] = index;\n }\n nextIndex = neighborIndex;\n found = true;\n break;\n }\n }\n }\n }\n } else {\n nextIndex = pathHistoryIndex;\n if (lastItemIndex !== index || direction !== notRecordHistoryDirection || orientType !== notRecordHistoryOrient) {\n templateList[nextIndex].pathHistory[pathHistoryDirection] = index;\n }\n found = true;\n }\n if (found) {\n if (!templateList[nextIndex].focusable) {\n return this.getNextItemInner(nextIndex, offset, vertical, false, checkAnchor);\n }\n return templateList[nextIndex];\n }\n return null;\n }\n _GetItemDistance(item1, item2) {\n return Math.pow(item1.centerXPos - item2.centerXPos, 2) + Math.pow(item1.centerYPos - item2.centerYPos, 2);\n }\n _GetTotalNeighbor(index, direction) {\n const item = this.templateList[index];\n return item.neighborIndexList[direction].concat(\n item.tmpNeighborIndexList[direction]\n );\n }\n _GetNearestItem(targetItemIndex, itemIndexList) {\n let nearestIndex = -1, minDistance = Number.POSITIVE_INFINITY;\n let targetItem = this.templateList[targetItemIndex];\n for (let i of itemIndexList) {\n const d = this._GetItemDistance(this.templateList[i], targetItem);\n if (d < minDistance) {\n nearestIndex = i;\n minDistance = d;\n }\n }\n return nearestIndex;\n }\n _GetNextLoopItem(index, offset, isVertical) {\n const templateList = this.templateList;\n const baseItem = templateList[index];\n let searchDirection = isVertical ? \"right\" : \"bottom\";\n let startDirection = isVertical ? \"top\" : \"left\";\n if (offset > 0) {\n searchDirection = isVertical ? \"left\" : \"top\";\n startDirection = isVertical ? \"bottom\" : \"right\";\n }\n let targetIndex = -1;\n let focusableTarget = -1;\n let startIndex = -1;\n let neighborList = [];\n neighborList = this._GetTotalNeighbor(index, searchDirection);\n while (startIndex < 0 && neighborList.length > 0) {\n for (let i of neighborList) {\n if (this._GetTotalNeighbor(i, startDirection).length > 0) {\n startIndex = i;\n break;\n } else {\n neighborList = this._GetTotalNeighbor(i, searchDirection);\n }\n }\n }\n if (startIndex >= 0) {\n neighborList = this._GetTotalNeighbor(startIndex, startDirection);\n let nearestIndex = -1, minDistance = Number.POSITIVE_INFINITY;\n for (let i of neighborList) {\n const d = this._GetItemDistance(templateList[i], baseItem);\n if (d < minDistance) {\n nearestIndex = i;\n minDistance = d;\n }\n }\n neighborList = this._GetTotalNeighbor(nearestIndex, searchDirection);\n while (neighborList.length > 0) {\n targetIndex = this._GetNearestItem(nearestIndex, neighborList);\n if (templateList[targetIndex].focusable) {\n focusableTarget = targetIndex;\n }\n neighborList = this._GetTotalNeighbor(targetIndex, searchDirection);\n }\n if (focusableTarget >= 0) {\n return templateList[focusableTarget];\n } else if (targetIndex >= 0) {\n return this._GetNextLoopItem(targetIndex, offset, isVertical);\n }\n }\n return null;\n }\n //获取临近行的item\n _GetNearLineItem(index, offset, isVertical) {\n const templateList = this.templateList;\n let searchDirection = isVertical ? \"right\" : \"bottom\";\n let startDirection = isVertical ? \"top\" : \"left\";\n if (offset > 0) {\n searchDirection = isVertical ? \"left\" : \"top\";\n startDirection = isVertical ? \"bottom\" : \"right\";\n }\n let startIndex = -1;\n let neighborList = [];\n neighborList = this._GetTotalNeighbor(index, searchDirection);\n while (startIndex < 0 && neighborList.length > 0) {\n for (let i of neighborList) {\n const n = this._GetTotalNeighbor(i, startDirection);\n if (n.length > 0) {\n return templateList[this._GetNearestItem(index, n)];\n } else {\n neighborList = this._GetTotalNeighbor(i, searchDirection);\n }\n }\n }\n return null;\n }\n updateItemSize(index, newSize) {\n console.error(TAG$5, \"updateItemSize is not supported.\");\n }\n static intersects(s0, e0, s1, e1) {\n return s0 <= e1 && s1 <= e0;\n }\n static iterCount = 0;\n /** get visible item list functions */\n getVisibleItemList(visibleStart, visibleEnd, baseId) {\n if (visibleStart > visibleEnd || this.templateList.length == 0) {\n return [-1, -1];\n }\n visibleStart = Math.round(visibleStart);\n visibleEnd = Math.round(visibleEnd);\n let searchBaseItemIdx = this.id2Index(baseId);\n if (searchBaseItemIdx < 0)\n searchBaseItemIdx = 0;\n const vertical = this.direction === VERTICAL;\n const sizeKey = vertical ? \"height\" : \"width\";\n const posKey = vertical ? \"top\" : \"left\";\n const visible = (s, e) => {\n return CommonMetroTemplate.intersects(visibleStart, visibleEnd, s, e);\n };\n let baseItem = this.templateList[searchBaseItemIdx];\n let startIndex = 0, endIndex = this.templateList.length - 1;\n while (baseItem && !visible(baseItem[posKey], baseItem[posKey] + baseItem[sizeKey])) {\n if (baseItem[posKey] < visibleStart) {\n startIndex = baseItem.index;\n } else {\n endIndex = baseItem.index;\n }\n if (Math.abs(startIndex - endIndex) <= 1) {\n const tailItem = this.templateList[this.getTailItemIndex()];\n let tailInfo = null;\n if (tailItem) {\n tailInfo = {\n left: tailItem.left,\n top: tailItem.top,\n width: tailItem.width,\n height: tailItem.height\n };\n }\n console.log(\"MetroWidget: can not find visible item\", visibleStart, visibleEnd, tailInfo);\n return [-1, -1];\n } else {\n baseItem = this.templateList[Math.round((startIndex + endIndex) / 2)];\n }\n }\n CommonMetroTemplate.iterCount = 0;\n let visibleItem = /* @__PURE__ */ new Set();\n visibleItem.add(baseItem.index);\n const nKeys = [\"left\", \"top\", \"bottom\", \"right\"];\n const addVisibleNeighbor = (targetItem) => {\n for (let key of nKeys) {\n let n = this._GetTotalNeighbor(targetItem.index, key);\n if (n && n.length > 0) {\n for (let i of n) {\n let item = this.templateList[i];\n if (visible(item[posKey], item[posKey] + item[sizeKey]) && !visibleItem.has(i)) {\n visibleItem.add(i);\n addVisibleNeighbor(item);\n }\n }\n }\n }\n };\n addVisibleNeighbor(baseItem);\n return [\n Math.min(...visibleItem),\n Math.max(...visibleItem)\n ];\n }\n /** neighbor calculate functions */\n _TryCalculateNeighborItem(index, xPos, yPos, width, height) {\n const curNotOccupiedEdge = {\n index,\n edgeObj: {\n leftEdge: {\n position: xPos,\n range: new RangesModel(yPos, yPos + height - 1)\n },\n rightEdge: {\n position: xPos + width,\n range: new RangesModel(yPos, yPos + height - 1)\n },\n topEdge: {\n position: yPos,\n range: new RangesModel(xPos, xPos + width - 1)\n },\n bottomEdge: {\n position: yPos + height,\n range: new RangesModel(xPos, xPos + width - 1)\n }\n }\n };\n if (xPos === 0) {\n curNotOccupiedEdge.edgeObj.leftEdge = null;\n }\n if (yPos === 0) {\n curNotOccupiedEdge.edgeObj.topEdge = null;\n }\n let newFance = false;\n const widthMax = this.lineMax;\n let newFenceEdgeStart_x = this._FenceEdge.StartX;\n let newFenceEdgeStart_y = this._FenceEdge.StartY;\n if (this.direction === VERTICAL) {\n if (xPos + width === widthMax) {\n curNotOccupiedEdge.edgeObj.rightEdge = null;\n }\n if (yPos > this._FenceEdge.StartY) {\n newFance = true;\n newFenceEdgeStart_y = yPos;\n }\n } else {\n if (yPos + height === widthMax) {\n curNotOccupiedEdge.edgeObj.bottomEdge = null;\n }\n if (xPos > this._FenceEdge.StartX) {\n newFance = true;\n newFenceEdgeStart_x = xPos;\n }\n }\n this._FenceEdge.StartX = newFenceEdgeStart_x;\n this._FenceEdge.StartY = newFenceEdgeStart_y;\n this._NotOccupiedEdgeList.push(curNotOccupiedEdge);\n if (newFance) {\n this._CalculateNeighborItem();\n }\n }\n _CalculateNeighborItem(tmpNeighbor = false) {\n const templateList = this.templateList;\n for (let i = 0; i < this._NotOccupiedEdgeList.length; i++) {\n const crossItem = this._NotOccupiedEdgeList[i];\n const crossEdgeObj = crossItem.edgeObj;\n const crossItemIndex = crossItem.index;\n if (crossEdgeObj.leftEdge == null && crossEdgeObj.rightEdge == null && crossEdgeObj.topEdge == null && crossEdgeObj.bottomEdge == null) {\n this._NotOccupiedEdgeList.splice(i, 1);\n i--;\n continue;\n }\n if (this.direction === VERTICAL) {\n if (!tmpNeighbor && crossEdgeObj.bottomEdge != null && crossEdgeObj.bottomEdge.position > this._FenceEdge.StartY) {\n continue;\n }\n } else {\n if (!tmpNeighbor && crossEdgeObj.rightEdge && crossEdgeObj.rightEdge.position > this._FenceEdge.StartX) {\n continue;\n }\n }\n const neighbor = this._FindNearestNeighbor(crossItem);\n for (let key in neighbor) {\n if (neighbor[key] !== -1) {\n const targetItem = this._NotOccupiedEdgeList[neighbor[key]];\n this._TryUpdateItemNeighbor(\n tmpNeighbor,\n key,\n crossItem,\n targetItem\n );\n }\n }\n }\n }\n _IfBlockedByOtherNeighbor(direction, crossItem, targetItem) {\n let positionKey = \"top\";\n let sizeKey = \"height\";\n let subPositionKey = \"left\";\n switch (direction) {\n case \"left\":\n break;\n case \"right\":\n break;\n case \"top\":\n positionKey = \"left\";\n subPositionKey = \"top\";\n sizeKey = \"width\";\n break;\n case \"bottom\":\n positionKey = \"left\";\n subPositionKey = \"top\";\n sizeKey = \"width\";\n break;\n default:\n console.log(`_IfBlockedByOtherNeighbor unknown direction:${direction}`);\n break;\n }\n const crossTemplateItem = this.getItemByIndex(crossItem.index);\n const targetTemplateItem = this.getItemByIndex(targetItem.index);\n let valid = true;\n if (crossTemplateItem && targetTemplateItem) {\n const crossNeighborList = crossTemplateItem.neighborIndexList[direction];\n const targetStart = targetTemplateItem[positionKey];\n const targetEnd = targetStart + targetTemplateItem[sizeKey] - 1;\n for (let i = crossNeighborList.length - 1; i >= 0; i--) {\n const item = this.getItemByIndex(crossNeighborList[i]);\n if (item == null)\n continue;\n const itemStart = item[positionKey];\n const itemEnd = itemStart + item[sizeKey] - 1;\n if (itemStart <= targetEnd && itemEnd >= targetStart) {\n if (Math.abs(\n item[subPositionKey] - crossTemplateItem[subPositionKey]\n ) < Math.abs(\n targetTemplateItem[subPositionKey] - crossTemplateItem[subPositionKey]\n )) {\n valid = false;\n break;\n } else {\n crossNeighborList.splice(i, 1);\n }\n }\n }\n }\n return valid;\n }\n _CheckNeighborItemMatching(direction, crossItem, targetItem) {\n const crossEdgeObj = crossItem.edgeObj;\n const targetEdgeObj = targetItem.edgeObj;\n let targetEdgeName = \"rightEdge\";\n let crossEdgeName = \"leftEdge\";\n switch (direction) {\n case \"left\":\n targetEdgeName = \"rightEdge\";\n crossEdgeName = \"leftEdge\";\n break;\n case \"right\":\n targetEdgeName = \"leftEdge\";\n crossEdgeName = \"rightEdge\";\n break;\n case \"top\":\n targetEdgeName = \"bottomEdge\";\n crossEdgeName = \"topEdge\";\n break;\n case \"bottom\":\n crossEdgeName = \"bottomEdge\";\n targetEdgeName = \"topEdge\";\n break;\n default:\n console.log(\n `_CheckNeighborItemMatching unknown direction:${direction}`\n );\n break;\n }\n const targetEdgeRangeClone = targetEdgeObj[targetEdgeName].range.Clone();\n targetEdgeObj[targetEdgeName].range.ExcludeRanges(\n crossEdgeObj[crossEdgeName].range\n );\n crossEdgeObj[crossEdgeName].range.ExcludeRanges(\n targetEdgeRangeClone\n );\n if (targetEdgeObj[targetEdgeName].range.IsEmpty()) {\n targetEdgeObj[targetEdgeName] = null;\n }\n if (crossEdgeObj[crossEdgeName].range.IsEmpty()) {\n crossEdgeObj[crossEdgeName] = null;\n }\n }\n _FindNearestNeighbor(crossItem) {\n const crossEdgeObj = crossItem.edgeObj;\n let nearestLeftIndex = -1;\n let nearestRightIndex = -1;\n let nearestTopIndex = -1;\n let nearestBottomIndex = -1;\n let leftDistance = -1;\n let rightDistance = -1;\n let topDistance = -1;\n let bottomDistance = -1;\n for (let j = 0; j < this._NotOccupiedEdgeList.length; j++) {\n const targetItem = this._NotOccupiedEdgeList[j];\n const targetEdgeObj = targetItem.edgeObj;\n if (crossItem === targetItem) {\n continue;\n }\n if (crossEdgeObj.leftEdge !== null && targetEdgeObj.rightEdge !== null) {\n if (crossEdgeObj.leftEdge.position >= targetEdgeObj.rightEdge.position && crossEdgeObj.leftEdge.range.IsInterAct(\n targetEdgeObj.rightEdge.range\n )) {\n if (leftDistance === -1) {\n leftDistance = crossEdgeObj.leftEdge.position - targetEdgeObj.rightEdge.position;\n nearestLeftIndex = j;\n continue;\n } else if (leftDistance > crossEdgeObj.leftEdge.position - targetEdgeObj.rightEdge.position) {\n leftDistance = crossEdgeObj.leftEdge.position - targetEdgeObj.rightEdge.position;\n nearestLeftIndex = j;\n continue;\n }\n }\n }\n if (crossEdgeObj.rightEdge !== null && targetEdgeObj.leftEdge !== null) {\n if (crossEdgeObj.rightEdge.position <= targetEdgeObj.leftEdge.position && crossEdgeObj.rightEdge.range.IsInterAct(\n targetEdgeObj.leftEdge.range\n )) {\n if (rightDistance === -1) {\n rightDistance = targetEdgeObj.leftEdge.position - crossEdgeObj.rightEdge.position;\n nearestRightIndex = j;\n continue;\n } else if (rightDistance > targetEdgeObj.leftEdge.position - crossEdgeObj.rightEdge.position) {\n rightDistance = targetEdgeObj.leftEdge.position - crossEdgeObj.rightEdge.position;\n nearestRightIndex = j;\n continue;\n }\n }\n }\n if (crossEdgeObj.topEdge !== null && targetEdgeObj.bottomEdge !== null) {\n if (crossEdgeObj.topEdge.position >= targetEdgeObj.bottomEdge.position && crossEdgeObj.topEdge.range.IsInterAct(\n targetEdgeObj.bottomEdge.range\n )) {\n if (topDistance === -1) {\n topDistance = crossEdgeObj.topEdge.position - targetEdgeObj.bottomEdge.position;\n nearestTopIndex = j;\n continue;\n } else if (topDistance > crossEdgeObj.topEdge.position - targetEdgeObj.bottomEdge.position) {\n topDistance = crossEdgeObj.topEdge.position - targetEdgeObj.bottomEdge.position;\n nearestTopIndex = j;\n continue;\n }\n }\n }\n if (crossEdgeObj.bottomEdge !== null && targetEdgeObj.topEdge !== null) {\n if (crossEdgeObj.bottomEdge.position <= targetEdgeObj.topEdge.position && crossEdgeObj.bottomEdge.range.IsInterAct(\n targetEdgeObj.topEdge.range\n )) {\n if (bottomDistance === -1) {\n bottomDistance = targetEdgeObj.topEdge.position - crossEdgeObj.bottomEdge.position;\n nearestBottomIndex = j;\n continue;\n } else if (bottomDistance > targetEdgeObj.topEdge.position - crossEdgeObj.bottomEdge.position) {\n bottomDistance = targetEdgeObj.topEdge.position - crossEdgeObj.bottomEdge.position;\n nearestBottomIndex = j;\n continue;\n }\n }\n }\n }\n return {\n left: nearestLeftIndex,\n right: nearestRightIndex,\n top: nearestTopIndex,\n bottom: nearestBottomIndex\n };\n }\n _TryUpdateItemNeighbor(tmpNeighbor, direction, crossItem, targetItem) {\n const keyMap = {\n target: {\n left: \"right\",\n right: \"left\",\n top: \"bottom\",\n bottom: \"top\"\n },\n cross: {\n left: \"left\",\n right: \"right\",\n top: \"top\",\n bottom: \"bottom\"\n }\n };\n let crossNeighborKey = keyMap.cross[direction];\n let targetNeighborKey = keyMap.target[direction];\n if (!crossNeighborKey || !targetNeighborKey) {\n console.error(\"_TryUpdateItemNeighbor: undefined direction\", direction);\n }\n const targetIndex = targetItem.index;\n const crossItemIndex = crossItem.index;\n const templateList = this.templateList;\n if (this._IfBlockedByOtherNeighbor(direction, crossItem, targetItem)) {\n if (!tmpNeighbor) {\n this._CheckNeighborItemMatching(direction, crossItem, targetItem);\n templateList[targetIndex].neighborIndexList[targetNeighborKey].push(\n crossItemIndex\n );\n templateList[crossItemIndex].neighborIndexList[crossNeighborKey].push(targetIndex);\n templateList[targetIndex].tmpNeighborIndexList[targetNeighborKey] = [];\n templateList[crossItemIndex].tmpNeighborIndexList[crossNeighborKey] = [];\n } else {\n templateList[targetIndex].tmpNeighborIndexList[targetNeighborKey].push(crossItemIndex);\n templateList[crossItemIndex].tmpNeighborIndexList[crossNeighborKey].push(targetIndex);\n }\n }\n }\n}\n\n//!\n//! utils/JsViewEngineWidget/TemplateParser/TemplateItemAdder.ts;\n//!\nclass TemplateItemAdder {\n _MetroTemplate;\n _Data;\n _PageRange;\n _MeasureFunc;\n _CurIndex;\n _CurPage;\n _SideEffect;\n _Key;\n _ID;\n _OnAddDone;\n constructor(template_parser, data, measure_func, page_range, side_effect, id, onAddDone = null) {\n this._MetroTemplate = template_parser;\n this._Data = data;\n this._PageRange = page_range;\n this._MeasureFunc = measure_func;\n this._CurIndex = 0;\n this._CurPage = 0;\n this._SideEffect = side_effect;\n this._OnAddDone = onAddDone;\n this._Key = this._MetroTemplate.direction === HORIZONTAL ? \"left\" : \"top\";\n this._ID = id;\n }\n addDataToTemplate(data, index) {\n const itemData = data[index];\n const measureObj = this._MeasureFunc(itemData);\n if (typeof measureObj.doSlide !== \"undefined\") {\n measureObj.itemSlide = measureObj.doSlide ? METRO_WIDGET.ITEM_SLIDE.ACT_ITEM_FOCUS : METRO_WIDGET.ITEM_SLIDE.ACT_FOCUS_RECT_EVENT;\n console.warn(\"MetroWidget: doSlide will be deprecated soon. use itemSlide instead.\");\n }\n let templateItem = this._MetroTemplate.addItem(measureObj);\n this._SideEffect?.(itemData, templateItem, measureObj);\n return { templateObj: templateItem, measureObj };\n }\n tryAddItem(cur_item = null, page_num = 1) {\n let added = false;\n if (this._CurIndex < this._Data.length && (!cur_item || cur_item[this._Key] >= (this._CurPage - 1) * this._PageRange)) {\n while (this._CurIndex < this._Data.length) {\n try {\n let { templateObj } = this.addDataToTemplate(this._Data, this._CurIndex);\n this._CurIndex++;\n if (templateObj[this._Key] >= (this._CurPage + page_num) * this._PageRange) {\n this._CurPage += page_num;\n break;\n }\n } catch (e) {\n console.error(\n `MetroWidget: ${this._ID} parse template item ${this._CurIndex} failed. data: `,\n this._Data\n );\n throw e;\n }\n }\n this._MetroTemplate.calculateNeighborWhenAddStop();\n added = true;\n }\n this._OnAddDone?.();\n return added;\n }\n tryAddItemByPosition(position) {\n const page_num = Math.ceil(position / this._PageRange + 1);\n if (page_num > this._CurPage) {\n this.tryAddItem(null, page_num - this._CurPage);\n }\n this._OnAddDone?.();\n }\n tryAddItemByIndex(index) {\n let _index = Math.min(index, this._Data.length - 1);\n let added = false;\n while (this._CurIndex <= _index) {\n added = true;\n try {\n let { templateObj } = this.addDataToTemplate(this._Data, this._CurIndex);\n this._CurIndex++;\n if (templateObj[this._Key] >= (this._CurPage + 1) * this._PageRange) {\n this._CurPage++;\n }\n } catch (e) {\n console.error(\n `MetroWidget: ${this._ID} parse template item ${this._CurIndex} failed. data:`,\n this._Data\n );\n throw e;\n }\n }\n if (added) {\n this._MetroTemplate.calculateNeighborWhenAddStop();\n }\n this.tryAddItem(this._MetroTemplate.getItemByIndex(index), 2);\n this._OnAddDone?.();\n }\n tryAddItemById(id) {\n let _id = Math.min(id, this._Data.length - 1);\n const last_id = this._MetroTemplate.focusableSize - 1;\n if (last_id < _id) {\n let added = false;\n let cur_id = last_id;\n while (cur_id < _id && this._CurIndex < this._Data.length) {\n added = true;\n try {\n let { templateObj } = this.addDataToTemplate(this._Data, this._CurIndex);\n cur_id = templateObj.id;\n if (templateObj[this._Key] >= (this._CurPage + 1) * this._PageRange) {\n this._CurPage++;\n }\n this._CurIndex++;\n } catch (e) {\n console.error(\n `MetroWidget: ${this._ID} parse template item ${this._CurIndex} failed. data:`,\n this._Data\n );\n throw e;\n }\n }\n if (added) {\n this._MetroTemplate.calculateNeighborWhenAddStop();\n }\n }\n this.tryAddItem(this._MetroTemplate.getItemById(id), 2);\n this._OnAddDone?.();\n }\n tryAddItemByUid(uid) {\n if (this._MetroTemplate.getItemByUid(uid)) {\n return;\n }\n let added = false;\n let targetItem = null;\n while (!targetItem && this._CurIndex < this._Data.length) {\n added = true;\n try {\n let { templateObj, measureObj } = this.addDataToTemplate(this._Data, this._CurIndex);\n if (measureObj.uid == uid) {\n targetItem = templateObj;\n }\n this._CurIndex++;\n if (templateObj[this._Key] >= (this._CurPage + 1) * this._PageRange) {\n this._CurPage++;\n }\n } catch (e) {\n console.error(\n `MetroWidget: ${this._ID} parse template item ${this._CurIndex} failed. data:`,\n this._Data\n );\n throw e;\n }\n }\n if (added) {\n this._MetroTemplate.calculateNeighborWhenAddStop();\n }\n if (targetItem) {\n this.tryAddItem(targetItem, 2);\n }\n }\n updateData(data) {\n this._Data = data;\n }\n}\n\n//!\n//! utils/JsViewEngineWidget/TemplateParser/ListMetroTemplate.ts;\n//!\nconst TAG$4 = \"ListMetroTemplate\";\nclass ListMetroTemplate extends MetroTemplate {\n constructor(direction, lineMax, pageSize, layoutType) {\n super(direction, lineMax, pageSize, layoutType, false);\n }\n calculateNeighborWhenAddStop() {\n }\n addItemInner(itemObj) {\n const templateItem = MetroTemplate.getTemplateItem(itemObj);\n this._addTemplateItem(templateItem);\n this.tailItemIndex = templateItem.index;\n return templateItem;\n }\n _addTemplateItem(templateItem) {\n let sizeKey = this.direction == VERTICAL ? \"width\" : \"height\";\n if (templateItem[sizeKey] > this.lineMax) {\n throw new Error(`item size is ${templateItem.width}x${templateItem.height}, large than lineMax ${this.lineMax}`);\n }\n const preItem = this.getItemByIndex(this.size - 1);\n this.addTemplateItem(templateItem);\n if (this.direction == VERTICAL) {\n if (this.layoutType == \"relative\") {\n templateItem.left = 0;\n templateItem.top = preItem ? preItem.top + preItem.height + preItem.marginBottom : 0;\n }\n if (preItem) {\n templateItem.neighborIndexList.top.push(preItem.index);\n preItem.neighborIndexList.bottom.push(templateItem.index);\n }\n } else {\n if (this.layoutType == \"relative\") {\n templateItem.top = 0;\n templateItem.left = preItem ? preItem.left + preItem.width + preItem.marginRight : 0;\n }\n if (preItem) {\n templateItem.neighborIndexList.left.push(preItem.index);\n preItem.neighborIndexList.right.push(templateItem.index);\n }\n }\n templateItem.centerXPos = Math.floor(templateItem.left + templateItem.width / 2) - 1;\n templateItem.centerYPos = Math.floor(templateItem.top + templateItem.height / 2) - 1;\n let curPageNumber = 0;\n let curPageHeadIndex = 0;\n if (preItem) {\n curPageNumber = preItem.pageNumber;\n curPageHeadIndex = preItem.pageHeadIndex;\n let positionKey = \"left\";\n let sizeKey2 = \"width\";\n if (this.direction === VERTICAL) {\n positionKey = \"top\";\n sizeKey2 = \"height\";\n }\n const curPageStart = this.templateList[curPageHeadIndex][positionKey];\n if (templateItem[positionKey] + templateItem[sizeKey2] > curPageStart + this.pageSize) {\n curPageNumber++;\n curPageHeadIndex = templateItem.index;\n }\n }\n templateItem.pageNumber = curPageNumber;\n templateItem.pageHeadIndex = curPageHeadIndex;\n }\n getNextItem(baseId, vOffset, hOffset, moveType) {\n const item = this.getItemById(baseId);\n if (item) {\n let neighborDirection = null;\n if (this.direction == VERTICAL) {\n if (vOffset > 0) {\n neighborDirection = \"bottom\";\n } else if (vOffset < 0) {\n neighborDirection = \"top\";\n }\n } else {\n if (hOffset > 0) {\n neighborDirection = \"right\";\n } else if (hOffset < 0) {\n neighborDirection = \"left\";\n }\n }\n if (!neighborDirection)\n return null;\n let target = this.getItemByIndex(item.neighborIndexList[neighborDirection]?.[0]);\n while (target) {\n if (target.focusable) {\n break;\n } else {\n target = this.getItemByIndex(item.neighborIndexList[neighborDirection]?.[0]);\n }\n }\n return target;\n }\n return null;\n }\n getVisibleItemList(visibleStart, visibleEnd, baseId) {\n const positionKey = this.direction == VERTICAL ? \"top\" : \"left\";\n const sizeKey = this.direction == VERTICAL ? \"height\" : \"width\";\n if (this.size == 0) {\n return [-1, -1];\n }\n const lastItem = this.templateList[this.templateList.length - 1];\n if (visibleStart >= visibleEnd || visibleEnd < 0 || visibleStart >= lastItem[positionKey] + lastItem[sizeKey]) {\n return [-1, -1];\n }\n let item = this.getItemById(baseId);\n const startIndex = item ? item.index : Math.round(this.size / 2);\n let start = -1, end = -1;\n let index = startIndex;\n while (index >= 0) {\n const item2 = this.getItemByIndex(index);\n if (!item2)\n break;\n if (item2[positionKey] + item2[sizeKey] > visibleStart) {\n start = item2.index;\n }\n if (end < 0 && item2[positionKey] <= visibleEnd) {\n end = item2.index;\n }\n --index;\n }\n index = startIndex;\n const s = this.size;\n while (index < s) {\n const item2 = this.getItemByIndex(index);\n if (!item2)\n break;\n if (item2[positionKey] <= visibleEnd) {\n end = item2.index;\n }\n if (start < 0 && item2[positionKey] + item2[sizeKey] > visibleStart) {\n start = item2.index;\n }\n ++index;\n }\n return [start, end];\n }\n updateItemSize(index, newSize) {\n const needChangeList = this.templateList.splice(index);\n needChangeList[0].width = newSize.width;\n needChangeList[0].height = newSize.height;\n for (let i of needChangeList) {\n if (i.id >= 0) {\n this.idsMap.splice(i.id);\n break;\n }\n }\n for (let i of needChangeList) {\n this._addTemplateItem(i);\n }\n }\n}\n\n//!\n//! utils/JsViewEngineWidget/TemplateParser/index.ts;\n//!\n\n//!\n//! utils/JsViewEngineWidget/MetroWidget/PageUpdater.ts;\n//!\nclass PageUpdater {\n tmpRangeSet;\n rangeSet;\n updateFunc;\n count = 1;\n constructor(updateFunc) {\n this.tmpRangeSet = /* @__PURE__ */ new Set();\n this.rangeSet = /* @__PURE__ */ new Set();\n ;\n this.updateFunc = updateFunc;\n }\n update(template, start, end, anchorId, mergeTmp, permanentList, extensionRange = 0) {\n this.count++;\n const [visibleStart, visibleEnd] = template.getVisibleItemList(\n start - extensionRange,\n end + extensionRange,\n anchorId\n );\n const preTmpRangeSet = this.tmpRangeSet;\n const preRangeSet = this.rangeSet;\n this.rangeSet = /* @__PURE__ */ new Set();\n this.tmpRangeSet = /* @__PURE__ */ new Set();\n if (visibleStart >= 0 && visibleEnd >= 0) {\n for (let i = visibleStart; i <= visibleEnd; ++i) {\n this.rangeSet.add(i);\n }\n }\n if (permanentList) {\n const permanentShowList = permanentList.filter((item) => {\n let result = false;\n if (item.alreadyShow || item.index <= visibleEnd) {\n item.alreadyShow = true;\n result = true;\n }\n return result;\n });\n for (let pItem of permanentShowList) {\n this.rangeSet.add(pItem.index);\n }\n }\n if (preRangeSet.size > 0) {\n this.tmpRangeSet = /* @__PURE__ */ new Set([...this.rangeSet, ...preRangeSet]);\n }\n if (mergeTmp) {\n this.tmpRangeSet = /* @__PURE__ */ new Set([...this.tmpRangeSet, ...preTmpRangeSet]);\n }\n const c = this.count;\n return {\n apply: () => {\n if (c == this.count) {\n this.apply();\n } else {\n }\n },\n applyTmp: () => {\n if (c == this.count) {\n this.applyTmp();\n } else {\n }\n }\n };\n }\n apply() {\n this.tmpRangeSet.clear();\n this.updateFunc(this.rangeSet);\n }\n applyTmp() {\n if (this.tmpRangeSet.size > 0) {\n this.updateFunc(this.tmpRangeSet);\n }\n }\n getRange() {\n return this.rangeSet;\n }\n getTmpRange() {\n return this.tmpRangeSet;\n }\n}\n\n//!\n//! utils/JsViewEngineWidget/MetroWidget/RenderItem.ts;\n//!\n;\nclass RenderItem {\n divMountedCallback = [];\n customerData;\n templateInfo;\n renderStyle;\n itemConfig;\n mounted = ref(false);\n touchInit = false;\n rootDiv = null;\n enableTap = false;\n customerCallbackMap = {};\n onRef;\n registerObj;\n query;\n constructor(templateInfo, customerData, renderStyle, itemConfig, onRef, query) {\n this.templateInfo = templateInfo;\n this.customerData = customerData;\n this.renderStyle = renderStyle;\n this.itemConfig = itemConfig;\n this.onRef = onRef;\n const register = this.register.bind(this);\n const unregister = this.unregister.bind(this);\n this.registerObj = { register, unregister };\n this.query = query;\n }\n get id() {\n return this.templateInfo.id;\n }\n get index() {\n return this.templateInfo.index;\n }\n //TODO item的div ref 会调用多次, 待调查\n divRef = (ele) => {\n this.rootDiv = ele;\n if (ele) {\n this.onDivMounted();\n } else {\n this.onDivUnmounted();\n }\n };\n slotRef = (ele) => {\n if (!this.mounted.value && ele) {\n this.mounted.value = true;\n this.onRef?.();\n } else if (!ele && this.mounted.value) {\n this.mounted.value = false;\n }\n };\n register(name, callback) {\n this.customerCallbackMap[name] = callback;\n }\n unregister(name) {\n delete this.customerCallbackMap[name];\n }\n onFocus(rect) {\n if (this.mounted.value) {\n this.customerCallbackMap.onFocus?.(rect);\n return true;\n } else {\n return false;\n }\n }\n onBlur() {\n if (this.mounted.value) {\n this.customerCallbackMap.onBlur?.();\n return true;\n } else {\n return false;\n }\n }\n onTap = computed(() => {\n return this.enableTap ? { click: this.onClick.bind(this) } : {};\n });\n onClick() {\n if (this.mounted.value) {\n this.customerCallbackMap.onClick?.();\n return true;\n } else {\n return false;\n }\n }\n onWidgetEdge(rect) {\n if (this.mounted.value) {\n this.customerCallbackMap.onWidgetEdge?.(rect);\n return true;\n } else {\n return false;\n }\n }\n addDivMountedListener(cbk) {\n this.divMountedCallback.push(cbk);\n ;\n }\n onDivMounted() {\n if (this.divMountedCallback.length > 0) {\n this.divMountedCallback.forEach((cbk) => {\n if (this.rootDiv) {\n cbk(this.rootDiv);\n }\n });\n }\n this.divMountedCallback = [];\n if (this.enableTap && this.rootDiv) {\n const divView = this.rootDiv.jsvGetProxyView();\n divView.DragEnables?.(1);\n }\n }\n onDivUnmounted() {\n this.touchInit = false;\n this.divMountedCallback = [];\n }\n}\n\n//!\n//! utils/JsViewEngineWidget/MetroWidget/VisibleInfo.ts;\n//!\nclass VisibleInfo {\n _start = 0;\n range = 0;\n padding;\n _startMax = 0;\n set start(value) {\n this._start = value;\n this._startMax = Math.max(this._start, this._startMax);\n }\n get start() {\n return this._start;\n }\n get end() {\n return this._start + this.range - 1;\n }\n get startMax() {\n return this._startMax;\n }\n get startWithPadding() {\n return this._start - this.padding.start;\n }\n get endWithPadding() {\n return this._start + this.range + this.padding.end - 1;\n }\n copy() {\n const obj = new VisibleInfo();\n obj._start = this._start;\n obj.padding = { ...this.padding };\n obj._startMax = this._startMax;\n obj.range = this.range;\n return obj;\n }\n}\n\n//!\n//! utils/JsViewEngineWidget/MetroWidget/WidgetRectInfo.ts;\n//!\nclass WidgetRectInfo {\n mWidth;\n mHeight;\n mPadding = {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n };\n constructor(w, h, padding) {\n this.mWidth = w;\n this.mHeight = h;\n this.mPadding.left = padding?.left ?? 0;\n this.mPadding.top = padding?.top ?? 0;\n this.mPadding.right = padding?.right ?? 0;\n this.mPadding.bottom = padding?.bottom ?? 0;\n if (this.contentWidth <= 0 || this.contentHeight <= 0) {\n throw new Error(\"padding size is large than widget size.\");\n }\n }\n get width() {\n return this.mWidth;\n }\n get height() {\n return this.mHeight;\n }\n get contentWidth() {\n return this.mWidth - this.mPadding.left - this.mPadding.right;\n }\n get contentHeight() {\n return this.mHeight - this.mPadding.top - this.mPadding.bottom;\n }\n get padding() {\n return this.mPadding;\n }\n}\n\n//!\n//! utils/JsViewEngineWidget/MetroWidget/AnimationManager.ts;\n//!\nvar TaskType = /* @__PURE__ */ ((TaskType2) => {\n TaskType2[TaskType2[\"RESIZE_ITEM\"] = 0] = \"RESIZE_ITEM\";\n TaskType2[TaskType2[\"SLIDE\"] = 1] = \"SLIDE\";\n TaskType2[TaskType2[\"ON_FOCUS_CHANGE\"] = 2] = \"ON_FOCUS_CHANGE\";\n return TaskType2;\n})(TaskType || {});\nclass MacroEndTaskManager {\n taskList = [];\n frameCount;\n customerOnFlushTakEnd;\n customerOnBreak;\n mTaskToken = ref(0);\n mToken = 0;\n mFlushedFrameCount = -1;\n constructor(onFlushTask, onBreak) {\n this.customerOnBreak = onBreak;\n this.customerOnFlushTakEnd = onFlushTask;\n }\n getToken() {\n if (this.mToken < Number.MAX_SAFE_INTEGER) {\n ++this.mToken;\n } else {\n this.mToken = 1;\n }\n return this.mToken;\n }\n addTask(type, params) {\n if (this.mFlushedFrameCount == Forge$1.sFrameCount.count) {\n console.log(\"MetroWidget: tasks in currnet frame flushed. ignore task\", type, params);\n return;\n }\n this.taskList.push({\n type,\n params,\n frameCount: Forge$1.sFrameCount.count\n });\n if (this.frameCount !== Forge$1.sFrameCount.count) {\n this.frameCount = Forge$1.sFrameCount.count;\n const breakList = [];\n for (let i = this.taskList.length - 1; i >= 0; --i) {\n if (this.taskList[i].frameCount != this.frameCount) {\n let t = this.taskList.splice(i, 1);\n breakList.push(t[0]);\n }\n }\n this.onBreak(breakList);\n }\n this.mTaskToken.value = this.getToken();\n let selfToken = this.mTaskToken.value;\n Promise.resolve().then(() => {\n if (selfToken == this.mTaskToken.value) {\n this.onFlushTask();\n this.mFlushedFrameCount = this.frameCount;\n Forge$1.sRenderBridge.RequestSwap();\n } else {\n }\n });\n }\n onFlushTask() {\n if (this.taskList.length > 0) {\n this.customerOnFlushTakEnd(this.taskList);\n this.taskList = [];\n }\n }\n onBreak(taskList) {\n this.customerOnBreak(taskList);\n }\n}\nclass AnimObject {\n frameCount;\n forgeAnim;\n element;\n animSetting;\n constructor(frameCount, element, from, to, setting) {\n this.frameCount = frameCount;\n this.animSetting = setting;\n this.element = element;\n let duration = 0;\n if (typeof setting.duration == \"number\") {\n duration = setting.duration;\n } else if (typeof setting.speed == \"number\") {\n duration = Math.round(Math.max(Math.abs(to[0] - from[0]), Math.abs(to[1] - from[1])) / setting.speed);\n }\n this.forgeAnim = new Forge$1.TranslateAnimation(\n from[0],\n to[0],\n from[1],\n to[1],\n duration,\n setting.easing\n );\n this.forgeAnim.SetAnimationListener(\n new Forge$1.AnimationListener(this.onStart.bind(this), this.onEnd.bind(this), null)\n );\n }\n start() {\n this.element?.jsvGetProxyView(true).StartAnimation(this.forgeAnim);\n }\n stop() {\n this.element?.jsvGetProxyView(true).StopAnimation();\n }\n getFrameCount() {\n return this.frameCount;\n }\n onStart() {\n this.animSetting?.onStart?.();\n }\n onEnd(done) {\n this.animSetting?.onEnd?.(done);\n }\n}\nclass AnimationManager {\n animList = [];\n frameCount = 0;\n startSlideAnim(element, from, to, setting) {\n let curFrameCount = Forge$1.sFrameCount.count;\n if (curFrameCount != this.frameCount) {\n this.tryCleanOldAnim();\n this.frameCount = curFrameCount;\n }\n const obj = new AnimObject(curFrameCount, element, from, to, setting);\n this.animList.push(obj);\n obj.start();\n }\n tryCleanOldAnim() {\n for (let i = this.animList.length - 1; i >= 0; --i) {\n const anim = this.animList[i];\n if (anim.getFrameCount() != this.frameCount) {\n this.animList.splice(i, 1);\n anim.stop();\n }\n }\n }\n}\n\n//!\n//! utils/JsViewVueWidget/JsvFreeMoveActor/ForgeTypeDefine.ts;\n//!\nconst forgeEvtTypeRef = Forge$1.FreeMoveActEvtType;\nconst ActEventDefine = {\n ActFinish: forgeEvtTypeRef.ActEvent_ActFinish,\n SpeedRevertX: forgeEvtTypeRef.ActEvent_Speed_X_Revert,\n SpeedRevertY: forgeEvtTypeRef.ActEvent_Speed_Y_Revert,\n ActReject: forgeEvtTypeRef.ActEvent_ActReject\n // 当动作不可能完成,会回调此事件\n};\nconst GroupType_ActionAssoc = Forge$1.FreeMoveExternType?.GroupType_ActionAssoc;\nconst GroupType_Invalid = Forge$1.FreeMoveExternType?.GroupType_Invalid;\nconst ConditionSetBuilder = Forge$1.FreeMoveConditionSet;\nconst StateCmdBuilder = Forge$1.FreeMoveStateBuilder;\nconst ActionCmdBuilder = Forge$1.FreeMoveActionBuilder;\nconst CmdPackBuilder = Forge$1.FreeMoveCmdPackBuilder;\nconst FreeMoveAnimClass = Forge$1.FreeMoveAnimation;\nconst RunFreeMoveCmdPacks = Forge$1.AnimFireCommand.RunFreeMoveCmdPacks;\nconst FinishRenderBreak = Forge$1.sRenderBridge.FinishRenderBreak.bind(Forge$1.sRenderBridge);\n\n//!\n//! utils/JsViewVueWidget/JsvFreeMoveActor/SetCondition.ts;\n//!\nconst setChildCommnadPackList = (conditionSet, callbackManager, cmdPackList) => {\n for (let i = 0; i < cmdPackList.length; i++) {\n if (typeof cmdPackList[i] == \"function\") {\n cmdPackList[i] = CmdPackBuilder.InitStateCmdPack(callbackManager.buildCallbackCmd(cmdPackList[i]));\n }\n }\n ConditionSetBuilder.SetCmdPackList(conditionSet, cmdPackList);\n};\nclass ConditionPackBuilder {\n _Callbacks;\n _CommonInfo;\n _CommonInfoValid;\n _ContorlSlefNexus;\n constructor(callbackManager, selfNexus) {\n this._Callbacks = callbackManager;\n this._CommonInfo = ConditionSetBuilder.InitCommonInfo();\n this._CommonInfoValid = false;\n this._ContorlSlefNexus = selfNexus;\n }\n isInUsing() {\n return this._CommonInfoValid;\n }\n updateCommandInfo(group, multiTimes, specName, shoudRenderBreak) {\n ConditionSetBuilder.UpdateCommonInfo(this._CommonInfo, group, multiTimes, specName, shoudRenderBreak);\n this._CommonInfoValid = true;\n }\n /**\n * reachPosition\n * 获取 ReachPosition 的condition\n * x或y已经处于,或者被越过时触发\n * \n * @param {double} xPosition 位置有效值,可以传入undefined来决定此值不设置\n * @param {double} yPosition 位置有效值,可以传入undefined来决定此值不设置\n */\n reachPosition(xPosition, yPosition) {\n if (!this._CheckCommonInfo()) {\n return null;\n }\n this._CommonInfoValid = false;\n return this._BuildPack(ConditionSetBuilder.ReachPosition(xPosition, yPosition, this._CommonInfo));\n }\n /**\n * reachPosition\n * 获取 ReachPosition 的condition\n * x或y已经处于,或者被越过时触发\n * \n * @param {double} xPosition 位置有效值,可以传入undefined来决定此值不设置\n * @param {double} yPosition 位置有效值,可以传入undefined来决定此值不设置\n */\n wallPosition(direction, xPosition, yPosition) {\n if (!this._CheckCommonInfo()) {\n return null;\n }\n this._CommonInfoValid = false;\n return this._BuildPack(ConditionSetBuilder.WallPosition(direction, xPosition, yPosition, this._CommonInfo));\n }\n boxPosition(left, top, right, bottom) {\n if (!this._CheckCommonInfo()) {\n return null;\n }\n this._CommonInfoValid = false;\n return this._BuildPack(ConditionSetBuilder.BoxPosition(left, top, right, bottom, this._CommonInfo));\n }\n offsetPosition(left, top, right, bottom) {\n if (!this._CheckCommonInfo()) {\n return null;\n }\n this._CommonInfoValid = false;\n return this._BuildPack(ConditionSetBuilder.OffsetPosition(left, top, right, bottom, this._CommonInfo));\n }\n startMove(xEnable, yEnable) {\n if (!this._CheckCommonInfo()) {\n return null;\n }\n this._CommonInfoValid = false;\n let direction = 0;\n if (xEnable) {\n direction |= 1;\n }\n if (yEnable) {\n direction |= 2;\n }\n return this._BuildPack(ConditionSetBuilder.StartMove(direction, this._CommonInfo));\n }\n /**\n * AcrossPosition\n * 获取 AcrossPosition 的condition\n * x或y被越过时触发\n * \n * @param {double} xPosition 位置有效值,可以传入undefined来决定此值不设置\n * @param {double} yPosition 位置有效值,可以传入undefined来决定此值不设置\n */\n acrossPosition(xPosition, yPosition) {\n if (!this._CheckCommonInfo()) {\n return null;\n }\n this._CommonInfoValid = false;\n return this._BuildPack(ConditionSetBuilder.AcrossPosition(xPosition, yPosition, this._CommonInfo));\n }\n /**\n * OnNexusEvent\n * 响应 actRef 关联的 action 所发出的内部状态信息\n * \n * @param {NexusNode} nexusRecv 一个进行Action时传给action的空的{}, 内容被action内部填写\n * @param {number} detailEventType 监听的事件类型\n */\n onNexusEvent(nexusRecv, detailEventType) {\n if (!this._CheckCommonInfo()) {\n return null;\n }\n this._CommonInfoValid = false;\n if (isNaN(nexusRecv?.token) || isNaN(detailEventType)) {\n console.error(\"onNexusEvent params error\", nexusRecv, detailEventType);\n return null;\n }\n return this._BuildPack(ConditionSetBuilder.OnNexusEvent(nexusRecv.token, detailEventType, this._CommonInfo));\n }\n /**\n * OnHitBlock\n * 监听Actor关联的LayoutView与blocker碰撞的状态\n * 碰撞发生后,可以 State.revertWithHitBlock 将LayoutView返回到紧贴到碰撞点的状态\n * \n * @param {number} blkGID 想监听的blocker集群的组ID, 例如所有的跳板横向碰撞面,或者所有的跳板边缘的纵向碰撞面, 0为无效值\n */\n onHitBlock(blkGID) {\n if (!this._CheckCommonInfo()) {\n return null;\n }\n this._CommonInfoValid = false;\n return this._BuildPack(ConditionSetBuilder.OnHitBlock(blkGID, this._CommonInfo));\n }\n /**\n * onNextTick\n * 用于对一些Condition激活进行延迟,例如teleportTo处理后延迟激活 OnHitBlock 动作,规避teleportTo处理直接触发OnHitBlocker\n * \n */\n onNextTick(tickGap = 1) {\n if (!this._CheckCommonInfo()) {\n return null;\n }\n this._CommonInfoValid = false;\n if (tickGap <= 0) {\n tickGap = 1;\n }\n return this._BuildPack(ConditionSetBuilder.OnNextTick(tickGap, this._CommonInfo));\n }\n onDragStart() {\n if (!this._CheckCommonInfo()) {\n return null;\n }\n this._CommonInfoValid = false;\n return this._BuildPack(ConditionSetBuilder.OnDragStart(this._CommonInfo, this._ContorlSlefNexus.token));\n }\n onDragEnd() {\n if (!this._CheckCommonInfo()) {\n return null;\n }\n this._CommonInfoValid = false;\n return this._BuildPack(ConditionSetBuilder.OnDragEnd(this._CommonInfo, this._ContorlSlefNexus.token));\n }\n onTouchDown() {\n if (!this._CheckCommonInfo()) {\n return null;\n }\n this._CommonInfoValid = false;\n return this._BuildPack(ConditionSetBuilder.OnTouchDown(this._CommonInfo, this._ContorlSlefNexus.token));\n }\n onTouchRelease() {\n if (!this._CheckCommonInfo()) {\n return null;\n }\n this._CommonInfoValid = false;\n return this._BuildPack(ConditionSetBuilder.OnTouchRelease(this._CommonInfo, this._ContorlSlefNexus.token));\n }\n onFlingStart() {\n if (!this._CheckCommonInfo()) {\n return null;\n }\n this._CommonInfoValid = false;\n return this._BuildPack(ConditionSetBuilder.OnFlingStart(this._CommonInfo, this._ContorlSlefNexus.token));\n }\n onFlingProgress() {\n if (!this._CheckCommonInfo()) {\n return null;\n }\n this._CommonInfoValid = false;\n return this._BuildPack(ConditionSetBuilder.OnFlingProgress(this._CommonInfo, this._ContorlSlefNexus.token));\n }\n onFlingEnd() {\n if (!this._CheckCommonInfo()) {\n return null;\n }\n this._CommonInfoValid = false;\n return this._BuildPack(ConditionSetBuilder.OnFlingEnd(this._CommonInfo, this._ContorlSlefNexus.token));\n }\n onFlingCancel() {\n if (!this._CheckCommonInfo()) {\n return null;\n }\n this._CommonInfoValid = false;\n return this._BuildPack(ConditionSetBuilder.OnFlingCancel(this._CommonInfo, this._ContorlSlefNexus.token));\n }\n _CheckCommonInfo() {\n if (!this._CommonInfoValid) {\n console.error(\"Error: must call from new conditoin()\");\n return false;\n }\n return true;\n }\n _BuildPack(conditionSet) {\n let cmdPack = CmdPackBuilder.InitStateCmdPack(StateCmdBuilder.NewCondition(conditionSet));\n let callbackManager = this._Callbacks;\n cmdPack[\"then\"] = (childCmdPackList) => {\n setChildCommnadPackList(conditionSet, callbackManager, childCmdPackList);\n return cmdPack;\n };\n return cmdPack;\n }\n}\n\n//!\n//! utils/JsViewVueWidget/JsvFreeMoveActor/SetAction.ts;\n//!\nconst ConditionCmdCreator = (builderThis, setCondFunc, acts, isFinal, callback) => {\n let commonInfo = ConditionSetBuilder.InitCommonInfo();\n ConditionSetBuilder.UpdateCommonInfo(commonInfo, GroupType_ActionAssoc);\n let conditionSet = setCondFunc(commonInfo);\n ;\n let conditionSubCmds = acts ? acts : [];\n if (callback) {\n conditionSubCmds.push(builderThis._CallbackManager.buildCallbackCmd(callback));\n }\n if (isFinal) {\n conditionSubCmds.push(StateCmdBuilder.DelActionAssocCondition());\n }\n if (conditionSubCmds.length > 0) {\n ConditionSetBuilder.SetCmdList(conditionSet, conditionSubCmds);\n }\n return StateCmdBuilder.NewCondition(conditionSet);\n};\nconst ActOnNexusEvent = (builderThis, nexusId, eventType, acts, isFinal, callback) => {\n return ConditionCmdCreator(builderThis, (commonInfo) => {\n return ConditionSetBuilder.OnNexusEvent(nexusId, eventType, commonInfo);\n }, acts, isFinal, callback);\n};\nconst ActOnReachPosition = (builderThis, xPos, yPos, acts, isFinal, callback) => {\n return ConditionCmdCreator(builderThis, (commonInfo) => {\n return ConditionSetBuilder.ReachPosition(xPos, yPos, commonInfo);\n }, acts, isFinal, callback);\n};\nconst ActOnGetToSpeed = (builderThis, xSpeed, ySpeed, acts, isFinal, callback) => {\n return ConditionCmdCreator(builderThis, (commonInfo) => {\n return ConditionSetBuilder.ReachSpeed(xSpeed, ySpeed, commonInfo);\n }, acts, isFinal, callback);\n};\nconst ActOnGetAcrossSpeed = (builderThis, xSpeed, ySpeed, acts, isFinal, callback) => {\n return ConditionCmdCreator(builderThis, (commonInfo) => {\n return ConditionSetBuilder.AcrossSpeed(xSpeed, ySpeed, commonInfo);\n }, acts, isFinal, callback);\n};\nclass ActorPackBuilder {\n _CallbackManager;\n _ActionTokenGen;\n _SpeedKeeps;\n _AccKeeps;\n _NexusRecv;\n _CommonInfoValid;\n _ContorlSlefNexus;\n constructor(callbackManager, selfNexus) {\n this._CallbackManager = callbackManager;\n this._ActionTokenGen = 1;\n this._SpeedKeeps = 0;\n this._AccKeeps = 0;\n this._NexusRecv = null;\n this._CommonInfoValid = false;\n this._ContorlSlefNexus = selfNexus;\n }\n isInUsing() {\n return this._CommonInfoValid;\n }\n updateCommonInfo(xySpdEnables, xyAccEnables, nexusRecv) {\n this._SpeedKeeps = xySpdEnables;\n this._AccKeeps = xyAccEnables;\n this._NexusRecv = nexusRecv;\n this._CommonInfoValid = true;\n }\n _CheckCommonInfo() {\n if (!this._CommonInfoValid) {\n console.error(\"Error: must call from new action()\");\n return false;\n }\n return true;\n }\n /**\n * teleportTo 将Actor在下一帧直接传送到目标位置\n * 注意点: 此过程可以触发所有position的cross条件,但不会触发speed的相关判断,常用于拖拽 + 边界判断\n * \n * @param {int} targetX 带符号整数,标识运动的目标位置,相对于Actor当前位置, 如果设置为undefined, 则表示该轴不设目标\n * @param {int} targetY 带符号整数,标识运动的目标位置,相对于Actor当前位置, 如果设置为undefined, 则表示该轴不设目标\n * @return CommandPack(放入run或者then的CmdPackList队列)\n */\n teleportTo(targetX, targetY) {\n if (!this._BasicPreProcess(\"teleportTo\")) {\n return;\n }\n return this._TeleportToInner(targetX, targetY, false);\n }\n /**\n * teleportOffset 将Actor在下一帧直接传送到目标位置\n * 注意点: 此过程可以触发所有position的cross条件,但不会触发speed的相关判断,常用于拖拽 + 边界判断\n * \n * @param {int} offsetX 带符号整数,标识运动的目标位置,相对于Actor当前位置, 如果设置为undefined, 则表示该轴不设目标\n * @param {int} offsetY 带符号整数,标识运动的目标位置,相对于Actor当前位置, 如果设置为undefined, 则表示该轴不设目标\n * @return CommandPack(放入run或者then的CmdPackList队列)\n */\n teleportOffset(offsetX, offsetY) {\n if (!this._BasicPreProcess(\"teleportOffset\")) {\n return;\n }\n return this._TeleportToInner(offsetX, offsetY, true);\n }\n /**\n * moveTo 以给定速度移动, 知道边界满足\n * \n * @param {int} edgeX 带符号整数,标识运动的边界位置,相对于Actor原始位置, 如果设置为undefined, 则表示该轴不设目标\n * @param {int} edgeY 带符号整数,标识运动的边界位置,相对于Actor原始位置, 如果设置为undefined, 则表示该轴不设目标\n * @param {double} xSpeed 运行速度,使用时会自动取绝对值,单位(pixel/帧), \n * undefined时,若edgeX设置, 则把edge作为运动目标,以另一轴速度反推此速度, 否则不改变该轴速度\n * @param {double} ySpeed 运行速度,使用时会自动取绝对值,单位(pixel/帧)\n * undefined时,若targetY设置, 则把edge作为运动目标,以另一轴速度反推此速度, 否则不改变该轴速度\n * @param {function} endCallback 参数(x, y) 运动到目标位置后的回调函数, x或者y达到后即回调,以先到为准,回报当前Actor的相对于原始位置的x,y\n * @return CommandPack(放入run或者then的CmdPackList队列)\n */\n moveTo(edgeX, edgeY, xSpeed, ySpeed, endCallback = null) {\n if (!this._BasicPreProcess(\"moveTo\")) {\n return;\n }\n if (!xSpeed && !ySpeed) {\n return null;\n }\n let cmdList = [];\n cmdList.push(ActionCmdBuilder.SetArrowSpeed(edgeX, edgeY, xSpeed, ySpeed));\n cmdList.push(\n ActOnReachPosition(\n this,\n edgeX,\n edgeY,\n [\n ActionCmdBuilder.StopMovingExact(),\n this._NexusRecv ? StateCmdBuilder.FireNexusEvent(ActEventDefine.ActFinish, this._NexusRecv.token) : null\n ],\n true,\n endCallback ? (actorState) => {\n endCallback?.(actorState.xPos, actorState.yPos);\n } : null\n )\n );\n let c = CmdPackBuilder.InitActCmdPack(this._SpeedKeeps, this._AccKeeps, this._NexusRecv?.token, cmdList);\n return c;\n }\n /*\n * altSpeed 调整速度,costTime不为0时为平滑过渡\n * 参数说明:\n * xSpeed (double) 带符号整数,符号表示方向,标识运动的运行速度,单位(pixel/帧), 可设undefined代表不改变该轴速度\n * ySpeed (double) 带符号整数,符号表示方向,标识运动的运行速度,单位(pixel/帧), 可设undefined代表不改变该轴速度\n * spreadFrame (int) 选填,正整数, 变速需要经历帧数, 若为立即变速,则设置为0,或者不再设置(undefined)\n * finishCallback (Function(xSpeed, ySpeed)) 选填,达到目标速度后的回调,当costTime不为0时有效\n */\n altSpeed(xSpeed, ySpeed, spreadFrame, finishCallback = null) {\n if (!this._BasicPreProcess(\"altSpeed\")) {\n return;\n }\n let cmdList = [];\n if (isNaN(spreadFrame) || spreadFrame == 0) {\n cmdList.push(ActionCmdBuilder.SetSpeed(xSpeed, ySpeed));\n return CmdPackBuilder.InitActCmdPack(this._SpeedKeeps, this._AccKeeps, this._NexusRecv?.token, cmdList);\n } else {\n cmdList.push(ActionCmdBuilder.AltSpeed(xSpeed, ySpeed, spreadFrame));\n cmdList.push(\n ActOnGetToSpeed(\n this,\n xSpeed,\n ySpeed,\n [\n ActionCmdBuilder.ResetAcc(0, 0),\n this._NexusRecv ? StateCmdBuilder.FireNexusEvent(ActEventDefine.ActFinish, this._NexusRecv.token) : null\n ],\n true,\n // isFinal\n finishCallback ? (actorState) => {\n finishCallback(actorState.xSpd, actorState.ySpd);\n } : null\n )\n );\n return CmdPackBuilder.InitActCmdPack(this._SpeedKeeps, this._AccKeeps, this._NexusRecv?.token, cmdList);\n }\n }\n /*\n * brakeToPosition 以当前速度开始,减速并停止到目标位置\n * 参数说明:\n * targetX (int) 带符号整数,目标运动终点位置,如果设置为undefined,标识不以此轴为终点\n * targetY (int) 带符号整数,目标运动终点位置,如果设置为undefined,标识不以此轴为终点\n * finishCallback (Function(x,y)) 运动到目标位置后的回调函数, x或者y达到后即回调,以先到为准,回报当前Actor的相对于原始位置的x,y\n * rejectedCallback (Function()) 当前速度无法达到target位置时,回调此函数,然后放弃改变任何速度和加速度\n */\n brakeToPosition(targetX, targetY, finishCallback = null, rejectedCallback = null) {\n if (!this._NexusRecv) {\n this._NexusRecv = this._ContorlSlefNexus;\n }\n if (!this._BasicPreProcess(\"brakeToPosition\")) {\n return;\n }\n let cmdList = [];\n cmdList.push(ActionCmdBuilder.BrakeToPos(targetX, targetY));\n cmdList.push(\n ActOnNexusEvent(\n this,\n this._NexusRecv.token,\n ActEventDefine.ActFinish,\n null,\n true,\n (actorState) => {\n finishCallback?.(actorState.xPos, actorState.yPos);\n }\n )\n );\n cmdList.push(\n ActOnNexusEvent(\n this,\n this._NexusRecv.token,\n ActEventDefine.ActReject,\n null,\n true,\n () => {\n rejectedCallback?.();\n }\n )\n );\n return CmdPackBuilder.InitActCmdPack(this._SpeedKeeps, this._AccKeeps, this._NexusRecv?.token, cmdList);\n }\n /*\n * setSpeed \n * 调整运行速度,立刻生效\n * \n * 参数说明:\n * spdX (double) x 速度有效值,可正可负, 每帧的posX移动量, 可以传入undefined来决定此值不设置\n * spdY (double) y 速度有效值,可正可负, 每帧的posY移动量, 可以传入undefined来决定此值不设置\n */\n setSpeed(spdX, spdY) {\n if (!this._BasicPreProcess(\"setSpeed\")) {\n return;\n }\n let cmdList = [];\n cmdList.push(ActionCmdBuilder.SetSpeed(spdX, spdY));\n return CmdPackBuilder.InitActCmdPack(this._SpeedKeeps, this._AccKeeps, this._NexusRecv?.token, cmdList);\n }\n /*\n * setSpeed \n * 调整运行速度,立刻生效\n * \n * 参数说明:\n * spdX (double) x 速度有效值,可正可负, 每帧的posX移动量, 可以传入undefined来决定此值不设置\n * spdY (double) y 速度有效值,可正可负, 每帧的posY移动量, 可以传入undefined来决定此值不设置\n */\n setAccel(accelX, accelY, onRevertX = null, onRevertY = null) {\n if (!this._BasicPreProcess(\"setAccel\")) {\n return;\n }\n let cmdList = [];\n cmdList.push(ActionCmdBuilder.SetAccel(accelX, accelY));\n this._BuildAccelOnPole(this, cmdList, this._NexusRecv, onRevertX, onRevertY);\n return CmdPackBuilder.InitActCmdPack(this._SpeedKeeps, this._AccKeeps, this._NexusRecv?.token, cmdList);\n }\n /*\n * setSpdAndAccel \n * 同时设置速度和加速度,并提供拐点回调(用于抛物线处理)\n * \n * 参数说明:\n * spdX (double) x 速度有效值,可正可负, 每帧的posX移动量, 可以传入undefined来决定此值不设置\n * spdY (double) y 速度有效值,可正可负, 每帧的posY移动量, 可以传入undefined来决定此值不设置\n * accelX (double) 加速度有效值,可正可负,每帧spdX的调整量,可以传入undefined来决定此值不设置\n * accelY (double) 加速度有效值,可正可负,每帧spdY的调整量,可以传入undefined来决定此值不设置\n * onRevertX (function) x速度开始反向运动时,进行回调(例如抛物到达顶点)\n * onRevertY (function) y速度开始反向运动时,进行回调(例如抛物到达顶点)\n */\n setSpdAndAccel(spdX, spdY, accelX, accelY, onRevertX = null, onRevertY = null) {\n if (!this._BasicPreProcess(\"setSpdAndAccel\")) {\n return;\n }\n let cmdList = [];\n cmdList.push(ActionCmdBuilder.SetSpeed(spdX, spdY));\n cmdList.push(ActionCmdBuilder.SetAccel(accelX, accelY));\n this._BuildAccelOnPole(this, cmdList, this._NexusRecv, onRevertX, onRevertY);\n return CmdPackBuilder.InitActCmdPack(this._SpeedKeeps, this._AccKeeps, this._NexusRecv?.token, cmdList);\n }\n /*\n * stopMoving\n * 停止运动\n * isExact (boolean) 设置为true时, 如果在positionCondition中会按照condition的位置进行精准停止\n */\n stopMoving(isExact = true) {\n if (!this._BasicPreProcess(\"stopMoving\")) {\n return;\n }\n let cmdList = [];\n cmdList.push(isExact ? ActionCmdBuilder.StopMovingExact() : ActionCmdBuilder.StopMoving());\n return CmdPackBuilder.InitActCmdPack(this._SpeedKeeps, this._AccKeeps, this._NexusRecv?.token, cmdList);\n }\n _BuildAccelOnPole(builderThis, cmdList, nexusRecv, onRevertX, onRevertY) {\n if (nexusRecv || onRevertX || onRevertY) {\n cmdList.push(\n ActOnGetAcrossSpeed(\n builderThis,\n 0,\n void 0,\n [nexusRecv ? StateCmdBuilder.FireNexusEvent(ActEventDefine.SpeedRevertX, nexusRecv.token) : null],\n false,\n // isFinal\n onRevertX ? () => {\n onRevertX();\n } : null\n )\n );\n cmdList.push(\n ActOnGetAcrossSpeed(\n builderThis,\n void 0,\n 0,\n [nexusRecv ? StateCmdBuilder.FireNexusEvent(ActEventDefine.SpeedRevertY, nexusRecv.token) : null],\n false,\n // isFinal\n onRevertY ? () => {\n onRevertY();\n } : null\n )\n );\n }\n }\n _BasicPreProcess(procName) {\n if (!this._CheckCommonInfo()) {\n return false;\n }\n this._CommonInfoValid = false;\n return true;\n }\n _TeleportToInner(x, y, isOffset = false) {\n let cmdList = [];\n cmdList.push(ActionCmdBuilder.TeleportTo(x, y, isOffset));\n let c = CmdPackBuilder.InitActCmdPack(this._SpeedKeeps, this._AccKeeps, this._NexusRecv?.token, cmdList);\n return c;\n }\n}\n\n//!\n//! utils/JsViewVueWidget/JsvFreeMoveActor/SetState.ts;\n//!\nclass StatePackBuilder {\n constructor() {\n }\n /*\n * clearConditions\n * 清理所有预制的condition\n */\n clearAllConditions() {\n return CmdPackBuilder.InitStateCmdPack(StateCmdBuilder.RemoveAllCondtions());\n }\n /*\n * removeConditionByGroup\n * 清理指定组的condition\n */\n removeConditionByGroup(group) {\n return CmdPackBuilder.InitStateCmdPack(StateCmdBuilder.RemoveByGroup(group));\n }\n /**\n * activeCondition\n * 重新激活对应gid或者specName的condition\n * 一个condition处于非激活有两种可能,\n * 1. 允许触发一次的condition已经完成触发\n * 2. 被DeactiveCondition关闭过的condition\n * \n * @param {int} groupType (可选)对应condition的groupType, 与specName二选一\n * @param {String} specName (可选)对应condition的specName, 与groupId二选一, 当groupId为 undefined 或 -1 时生效\n */\n activeCondition(groupType, specName) {\n return CmdPackBuilder.InitStateCmdPack(StateCmdBuilder.ActiveCondition(groupType, specName));\n }\n /**\n * deactiveCondition\n * 停止对应gid或者specName的condition\n * \n * @param {int} groupType (可选)对应condition的groupType, 与specName二选一\n * @param {String} specName (可选)对应condition的specName, 与groupId二选一, 当groupId为 undefined 或 -1 时生效\n */\n deactiveCondition(groupType, specName) {\n return CmdPackBuilder.InitStateCmdPack(StateCmdBuilder.DeactiveCondition(groupType, specName));\n }\n /*\n * setStartPos 立刻将actor运动起始点设置到目标位置, 作为下一个Action执行时的位置起点\n * 注意1: 只影响当speed/accel不为0时的下一帧的运动起始位置,\n * 当speed/accel为0状态下要移动物体请用 Action.teleportTo\n * 注意2: 此为state设置,下一帧直接以此state开始,所以不会触发任何positionCondition的cross条件\n * 需要condition触发时,请用 Action.teleportTo\n * 参数说明:\n * targetX (int) 带符号整数,目标位置,如果设置为undefined,标识不以此轴为终点\n * targetY (int) 带符号整数,目标位置,如果设置为undefined,标识不以此轴为终点\n */\n setStartPos(targetX, targetY) {\n return CmdPackBuilder.InitStateCmdPack(StateCmdBuilder.SetPos(targetX, targetY));\n }\n /*\n * setStartOffsetPos 立刻将actor移动以当前位置相对位移的位置, 作为下一个Action执行时的位置起点\n * 注意1: 只影响当speed/accel不为0时的下一帧的运动起始位置,\n * 当speed/accel为0状态下要移动物体请用 Action.teleportOffset\n * 注意2: 此为state设置,下一帧直接以此state开始,所以不会触发任何positionCondition的cross条件\n * 需要condition触发时,请用 Action.teleportOffset\n * 参数说明:\n * targetX (int) 带符号整数,目标位置,如果设置为undefined,标识不以此轴为终点\n * targetY (int) 带符号整数,目标位置,如果设置为undefined,标识不以此轴为终点\n */\n setStartOffsetPos(offsetX, offsetY) {\n return CmdPackBuilder.InitStateCmdPack(StateCmdBuilder.SetOffsetPos(offsetX, offsetY));\n }\n /*\n * 在BlockerCondition发生时,进行位置回滚处理\n */\n revertWithHitBlock() {\n return CmdPackBuilder.InitStateCmdPack(StateCmdBuilder.RevertWithHitBlock());\n }\n setHitWallOverflow() {\n return CmdPackBuilder.InitStateCmdPack(StateCmdBuilder.SetHitWallOverflow());\n }\n touchLockSwitch(isLock, direction, unlockThreshold = -1) {\n return CmdPackBuilder.InitStateCmdPack(StateCmdBuilder.TouchLockSwitch(isLock, direction, unlockThreshold));\n }\n /*\n * fireNexusEvent 发出Nexus event\n */\n fireNexusEvent(nexusRecv, detailEventType) {\n return CmdPackBuilder.InitStateCmdPack(StateCmdBuilder.FireNexusEvent(detailEventType, nexusRecv.token));\n }\n}\n\n//!\n//! utils/JsViewVueWidget/JsvFreeMoveActor/CallbackManager.ts;\n//!\nclass CallbackInfo {\n funcRef;\n // 回调函数\n times;\n // 回调的次数\n once;\n // 是否单次回调就销毁\n}\nclass CallbackManager {\n _CallbackMap;\n _IdGen;\n constructor() {\n this._CallbackMap = /* @__PURE__ */ new Map();\n this._IdGen = 1;\n }\n addCallback(func, callMulti) {\n let id = \"\" + this._IdGen++;\n this._CallbackMap.set(id, {\n funcRef: func,\n // 回调函数\n times: 0,\n // 回调的次数\n once: !callMulti\n // 是否单次回调就销毁\n });\n return id;\n }\n clearCallback() {\n this._CallbackMap = /* @__PURE__ */ new Map();\n }\n expiredIds(ids) {\n if (ids) {\n for (let key of this._CallbackMap.keys()) {\n for (let id of ids) {\n if (id === key) {\n this._CallbackMap.delete(id);\n }\n }\n }\n }\n }\n invokeCallback(id, actorState) {\n let callbackObj = this._CallbackMap.get(id);\n if (callbackObj) {\n if (callbackObj.once) {\n this._CallbackMap.delete(id);\n } else {\n callbackObj.times++;\n }\n try {\n callbackObj.funcRef?.(actorState);\n } catch (e) {\n console.error(\"Error: callback error\", e);\n }\n }\n }\n buildCallbackCmd(func) {\n let funcIdStr = this.addCallback(func, true);\n return StateCmdBuilder.FireEcho(funcIdStr);\n }\n}\n\n//!\n//! utils/JsViewVueWidget/JsvFreeMoveActor/NexusNode.ts;\n//!\nlet sNexusIdGen = 1073741824;\nclass NexusNode {\n token;\n constructor() {\n sNexusIdGen = (sNexusIdGen + 1 - 1073741824) % 1073741824 + 1073741824;\n this.token = sNexusIdGen;\n }\n}\nfunction newNexus() {\n return new NexusNode();\n}\n\n//!\n//! utils/JsViewVueWidget/JsvFreeMoveActor/ActorControl.ts;\n//!\nclass ActorControl {\n _BindView;\n _BindAnim;\n _Callbacks;\n _SelfNexusRecv;\n _SharedQuickConditionPackBuilder;\n _SharedQuickActionPackBuilder;\n _StatePackBuilder;\n constructor() {\n this._BindView = null;\n this._BindAnim = null;\n this._Callbacks = new CallbackManager();\n this._SelfNexusRecv = newNexus();\n this._SharedQuickConditionPackBuilder = new ConditionPackBuilder(this._Callbacks, this._SelfNexusRecv);\n this._SharedQuickActionPackBuilder = new ActorPackBuilder(this._Callbacks, this._SelfNexusRecv);\n this._StatePackBuilder = new StatePackBuilder();\n }\n bindForgeView(bindView, instantActive) {\n this._BindView = bindView;\n if (instantActive) {\n this._EnsureAnim();\n }\n }\n /** \n * run 执行编排好的intent集合\n *\n * @param {Array} cmdPackList 内容来自 Condition(), State(), Action() 这些工厂类创建的Command pack\n */\n run(cmdPackList) {\n if (window.JsView) {\n this._WrappedRun(cmdPackList);\n } else {\n let that = this;\n this._BindView.RegisterOnProxyReady(() => {\n that._WrappedRun(cmdPackList);\n });\n }\n }\n _WrappedRun(cmdPackList) {\n this._EnsureAnim();\n if (!(cmdPackList instanceof Array)) {\n console.error(\"params error\");\n return;\n }\n RunFreeMoveCmdPacks(this._BindView, cmdPackList);\n }\n /**\n * Condition\n * 获取创建 ConditionPack 的工厂对象\n * ConditionPack对应支持 .then(cmdPackList), 可传入同 Run 的处理队列\n * 可用方法见 ./SetCondition.js\n * @param {int} group 可选参数,默认为0, 有效值为0~3, 对应默认组, 1组, 2组, 3组, 便于remove时,按组进行清理\n * @param {boolean} multiTimes 可选参数,默认为false, 是否要多次执行, 若为单次,则执行后condition作废\n * @param {string} specName 可选参数,默认null, 命名condition, 用于指定名字进行active/deactive动作的场景\n * @param {boolean} shoudRenderBreak 可选参数,默认false, 关联的回调是否会发起RenderBreak\n * @return {ConditionPackBuilder} ConditionPack 的工厂对象\n */\n condition(group = 0, multiTimes = false, specName = null, shoudRenderBreak = false) {\n let builder = this._SharedQuickConditionPackBuilder;\n if (builder.isInUsing()) {\n builder = new ConditionPackBuilder(this._Callbacks, this._SelfNexusRecv);\n }\n builder.updateCommandInfo(group, multiTimes, specName, shoudRenderBreak);\n return builder;\n }\n /**\n * Action\n * 获取创建 ActionPack 的工厂对象\n * 注意: ActionPack 是指会改变 speed 或 accelerate 并自动生成子condition的指令,\n * 每个新的Action会覆盖掉前一次的Action设置,包括其关联的condition,\n * 以及上一个action中的回调,以及上一个action中规划中的ActionEvent\n * 可用方法见 ./SetAction.js\n * \n * @param {int} xySpeedKeeps xy轴上的速度是否保持(与新Action不冲突的才会被保留),\n * x轴保持为1, y轴保持为2,可\"与或\"让两个轴都保持\n * @param {int} xyAccKeeps xy轴上的加速度是否保持(与新Action不冲突的才会被保留),\n * x轴保持为1, y轴保持为2,可\"与或\"让两个轴都保持\n * @param {NexusNode} nexusRecv 此动作发出的 nexusEvent 的接受者\n * @return {ActionPackBuilder} ActionPack 的工厂对象\n */\n action(xySpeedKeeps = 0, xyAccKeeps = 0, nexusRecv = null) {\n let builder = this._SharedQuickActionPackBuilder;\n if (builder.isInUsing()) {\n builder = new ActorPackBuilder(this._Callbacks, this._SelfNexusRecv);\n }\n builder.updateCommonInfo(xySpeedKeeps, xyAccKeeps, nexusRecv);\n return builder;\n }\n /**\n * State\n * 获取创建 StatePack 的工厂对象\n * 在下一帧运行前的设置值,例如清理condition, 或者在下一帧运动的前调整启动运动的位置\n * 可用方法见 ./SetState.js\n * @return {StatePackBuilder} StatePack 的工厂对象\n */\n state() {\n return this._StatePackBuilder;\n }\n _OnEchoEvent(retJson) {\n let retJsonObject = JSON.parse(retJson);\n let echoRetList = retJsonObject[\"retList\"];\n if (echoRetList) {\n for (let echoRet of echoRetList) {\n let renderBreakId = echoRet[\"rbTkn\"];\n if (renderBreakId != 0) {\n FinishRenderBreak(renderBreakId);\n }\n this._Callbacks.invokeCallback(echoRet[\"eTkn\"], retJsonObject);\n }\n }\n }\n _EnsureAnim() {\n if (!this._BindAnim) {\n this._BindAnim = new FreeMoveAnimClass(this._OnEchoEvent.bind(this), this._SelfNexusRecv.token);\n this._BindView.StartAnimation(this._BindAnim);\n }\n }\n}\n\n//!\n//! utils/JsViewEngineWidget/MetroWidget/MetroWidgetSetup.js;\n//!\nconst TAG$3 = \"MetroWidget\";\nconst _getMetroTemplate = function(widgetRectInfo, direction, support_history_path, layout_type, mode) {\n let page_size;\n let line_max;\n if (direction === VERTICAL) {\n line_max = widgetRectInfo.contentWidth;\n page_size = widgetRectInfo.contentHeight;\n } else {\n line_max = widgetRectInfo.contentHeight;\n page_size = widgetRectInfo.contentWidth;\n }\n let metroWidget;\n switch (mode) {\n case \"list\":\n metroWidget = new ListMetroTemplate(\n direction,\n line_max,\n page_size,\n layout_type,\n support_history_path\n );\n break;\n default:\n metroWidget = new CommonMetroTemplate(\n direction,\n line_max,\n page_size,\n layout_type,\n support_history_path\n );\n break;\n }\n return metroWidget;\n};\nconst TOUCH_MODE = 1;\nconst FOCUS_MODE = 2;\nconst setup = (props, itemRender, locateDiv, renderData, slideDiv, slideDivLeft, slideDivTop, focusNode, pageUpdateToken, touchDiv, touchDivSize, templateMode) => {\n if (props.itemConfig) {\n console.error(TAG$3, \"prop: itemCofig will be deprecated soon.\");\n }\n let widgetRectInfo = new WidgetRectInfo(props.width, props.height, props.padding);\n let metroTemplate = _getMetroTemplate(\n widgetRectInfo,\n props.direction,\n props.supportHistoryPath,\n props.layoutType,\n templateMode\n );\n const TouchState = {\n IDLE: 0,\n TAP: 1,\n DRAG: 2,\n FLING: 3\n };\n const modeForExport = ref(FOCUS_MODE);\n const mode = {\n _mode: FOCUS_MODE,\n _touchState: TouchState.IDLE,\n _duringTouch: false,\n _duringFling: false,\n touchStart() {\n this._mode = TOUCH_MODE;\n modeForExport.value = TOUCH_MODE;\n this._touchState = TouchState.TAP;\n },\n touchEnd() {\n this._touchState = TouchState.IDLE;\n },\n flingStart() {\n this._touchState = TouchState.FLING;\n },\n flingEnd() {\n },\n dragStart() {\n this._touchState = TouchState.DRAG;\n },\n dragEnd() {\n },\n keyDown() {\n this._mode = FOCUS_MODE;\n modeForExport.value = FOCUS_MODE;\n this._touchState = TouchState.IDLE;\n },\n duringFling() {\n return this._touchState == TouchState.FLING;\n },\n duringTouch() {\n return this._touchState != TouchState.IDLE;\n },\n getMode() {\n return this._mode;\n },\n getTouchState() {\n return this._touchState;\n }\n };\n let innerData = [];\n let dataList = [];\n let pageUpdater = null;\n let enterFocusId = -1;\n let enterFocusRect = null;\n let focusId = 0;\n let preFocusId = -1;\n let preEdgeRect = null;\n let isFocus = false;\n let vertical = props.direction == VERTICAL;\n let preAnchorItemIndex = -1;\n let templateItemAdder = null;\n let permanentItemList = [];\n let mounted = false;\n let pageRange = vertical ? props.height : props.width;\n let slideLock = false;\n let childSlideEventLock = false;\n let onKeyDownLock = false;\n let visibleInfo = new VisibleInfo();\n let preSlideDirection = 0;\n let alreadyCallItemFocus = false;\n const currentFocusIndex = ref(0);\n const DEFAULT_ANIMATION_DURATION = 200;\n const isItemVisible = (item) => {\n let pos_key = vertical ? \"top\" : \"left\";\n let size_key = vertical ? \"height\" : \"width\";\n return item.templateInfo[pos_key] >= visibleInfo.start && item.templateInfo[pos_key] + item.templateInfo[size_key] - 1 < visibleInfo.end;\n };\n const animationManager = new AnimationManager();\n const onMacroTaskEnd = (taskList) => {\n let resizeList = [];\n let resizeTaskMap = {};\n let slideTask = null;\n let minIndex = Infinity;\n let slideInfo = null;\n let updateParam = null;\n let anchorInfo = null;\n let duration = 200;\n let easing = null;\n let pos_key = vertical ? \"top\" : \"left\";\n let size_key = vertical ? \"height\" : \"width\";\n let doAnim = false;\n let existOnFocusChange = false;\n let targetVisibleStart = visibleInfo.start;\n taskList.forEach((i) => {\n if (i.type == TaskType.SLIDE) {\n slideTask = i;\n updateParam = i.params;\n if (!isNaN(i.params?.target)) {\n targetVisibleStart = -i.params.target;\n }\n }\n });\n for (let task of taskList) {\n if (task.type == TaskType.RESIZE_ITEM) {\n resizeTaskMap[task.params.index] = task;\n resizeList.push(task);\n const { index, animInfo } = task.params;\n doAnim = doAnim || !!animInfo;\n minIndex = Math.min(minIndex, index);\n duration = task.params.animInfo?.duration ?? duration;\n easing = task.params.animInfo?.easing ?? easing;\n if (index == id2Index(focusId) && typeof animInfo?.anchor != \"undefined\") {\n const item = getItemByIndex(index);\n anchorInfo = {\n anchorPosition: item.templateInfo[pos_key] + item.templateInfo[size_key] * animInfo.anchor - 1 - targetVisibleStart,\n anchor: animInfo.anchor\n };\n }\n } else if (task.type == TaskType.ON_FOCUS_CHANGE) {\n existOnFocusChange = true;\n }\n }\n if (slideTask) {\n slideInfo = {\n target: slideTask.params.target,\n animObj: slideTask.params.animObj\n };\n }\n let existItemResize = false;\n if (resizeList.length > 0) {\n existItemResize = true;\n metroTemplate.cacheLayout(minIndex, minIndex + 20);\n resizeList.forEach((task) => {\n metroTemplate.updateItemSize(task.params.index, {\n width: task.params.width,\n height: task.params.height\n });\n });\n let preVisibleStart = targetVisibleStart;\n if (anchorInfo) {\n const focusItem = getItemById(focusId);\n const start = focusItem.templateInfo[pos_key] + focusItem.templateInfo[size_key] * anchorInfo.anchor - 1 - anchorInfo.anchorPosition;\n targetVisibleStart = normalizeVisibleStart(start, focusItem.templateInfo);\n } else {\n targetVisibleStart = _calculateVisibleStart(getItemById(focusId).templateInfo, preSlideDirection);\n }\n if (preVisibleStart != targetVisibleStart) {\n slideInfo = {\n target: -targetVisibleStart\n };\n if (doAnim) {\n slideInfo.animObj = {\n easing: \"\",\n onStart: null,\n speed: null,\n duration,\n onEnd: (animDone) => {\n }\n };\n updateParam = null;\n } else {\n if (slideTask) {\n slideInfo.animObj = slideTask.params?.animObj;\n } else {\n updateParam = null;\n slideInfo.animObj = {\n //resize无动画时正常slide\n easing: \"\",\n onStart: null,\n onEnd: null,\n speed: props.slideSetting.Speed,\n duration: props.slideSetting.Duration\n };\n }\n }\n }\n visibleInfo.start = targetVisibleStart;\n const handler = pageUpdater.update(\n metroTemplate,\n visibleInfo.startWithPadding,\n visibleInfo.endWithPadding,\n focusId,\n true,\n permanentItemList\n );\n handler.applyTmp();\n if (doAnim) {\n const visibleIndexList = Array.from(pageUpdater.getTmpRange());\n for (let index of visibleIndexList) {\n const renderItem = getItemByIndex(index);\n const { left, top } = renderItem.templateInfo;\n if (index >= minIndex) {\n const layoutCache = renderItem.templateInfo.layoutCache;\n if (renderItem.mounted.value) {\n animationManager.startSlideAnim(\n renderItem.rootDiv,\n [layoutCache.left - left, layoutCache.top - top],\n [0, 0],\n resizeTaskMap[index] ? resizeTaskMap[index].params.animInfo : { duration }\n );\n } else {\n renderItem.addDivMountedListener((div) => {\n animationManager.startSlideAnim(\n div,\n [layoutCache.left - left, layoutCache.top - top],\n [0, 0],\n resizeTaskMap[index] ? resizeTaskMap[index].params.animInfo : { duration }\n );\n });\n }\n }\n }\n }\n }\n let viewSlid = false;\n if (slideInfo) {\n const target = slideInfo.target;\n viewSlid = executeSlide(target, slideInfo, updateParam);\n }\n if (existItemResize) {\n props.onAllItemResizeDone?.();\n }\n if (viewSlid || existOnFocusChange) {\n props.onFocusRectChange?.();\n }\n };\n const executeSlide = (target, slideInfo, updateParam) => {\n let preLeft = slideDivLeft.value;\n let preTop = slideDivTop.value;\n slideDivLeft.value = vertical ? 0 : target;\n slideDivTop.value = vertical ? target : 0;\n let viewSlid = preLeft != slideDivLeft.value || preTop != slideDivTop.value;\n visibleInfo.start = -target;\n const updater2 = pageUpdater.update(\n metroTemplate,\n visibleInfo.startWithPadding - props.keepTraceRange * pageRange,\n Math.min(\n visibleInfo.startMax + visibleInfo.range + visibleInfo.padding.end - 1,\n visibleInfo.endWithPadding + props.keepTraceRange * pageRange\n ),\n focusId,\n updateParam?.mergeTmp ?? false,\n permanentItemList\n );\n if (slideInfo.animObj) {\n updater2.applyTmp();\n animationManager.startSlideAnim(\n slideDiv.value,\n vertical ? [0, preTop - slideDivTop.value] : [preLeft - slideDivLeft.value, 0],\n [0, 0],\n {\n ...slideInfo.animObj,\n onEnd: () => {\n updater2.apply();\n }\n }\n );\n } else {\n updater2.apply();\n }\n _onScroll();\n return viewSlid;\n };\n const onMacroEndTaskBreak = (list) => {\n if (list) {\n list.forEach((task) => {\n if (task.type == TaskType.RESIZE_ITEM) {\n metroTemplate.updateItemSize(task.params.index, {\n width: task.params.width,\n height: task.params.height\n });\n }\n });\n }\n };\n const macroEndTaskManager = new MacroEndTaskManager(onMacroTaskEnd, onMacroEndTaskBreak);\n const updateItemSize = (index, newSize, animInfo) => {\n macroEndTaskManager.addTask(\n TaskType.RESIZE_ITEM,\n {\n index,\n width: newSize.width,\n height: newSize.height,\n animInfo\n }\n );\n };\n const _slideTo = (target, animObj, updateParam = { mergeTmp: false }) => {\n if (slideLock) {\n return;\n }\n ;\n macroEndTaskManager.addTask(TaskType.SLIDE, { target: -target, animObj, updateParam });\n };\n let callFocusAfterUpdate = false;\n const _onFocusChange = (id) => {\n props.onFocusChange?.(id);\n };\n const _getCurrentId = () => {\n return {\n id: focusId,\n index: id2Index(focusId)\n };\n };\n const _getPosition = (index) => {\n let templateInfo = getItemByIndex(index).templateInfo;\n let x_offset = vertical ? 0 : -visibleInfo.start;\n let y_offset = vertical ? -visibleInfo.start : 0;\n return {\n left: templateInfo.left + x_offset,\n top: templateInfo.top + y_offset,\n width: templateInfo.width,\n height: templateInfo.height\n };\n };\n const _getTemplatePosition = (index) => {\n let templateInfo = getItemByIndex(index).templateInfo;\n return {\n left: templateInfo.left,\n top: templateInfo.top,\n width: templateInfo.width,\n height: templateInfo.height\n };\n };\n const id2Index = (id) => {\n return metroTemplate.id2Index(id);\n };\n const index2Id = (index) => {\n return metroTemplate.index2Id(index);\n };\n const getItemByIndex = (index) => {\n return innerData[index];\n };\n const getItemById = (id) => {\n return innerData[id2Index(id)];\n };\n const getNextItem = (anchorId, vDirection, hDirection, moveType) => {\n const nextItem = metroTemplate.getNextItem(\n anchorId,\n vDirection,\n hDirection,\n moveType\n );\n if (nextItem) {\n return innerData[nextItem.index];\n } else {\n return null;\n }\n };\n const setItemZIndex = (item, z_index, is_focus) => {\n if (item) {\n let i = z_index;\n if (is_focus && item.itemConfig.focusZIndex >= 0) {\n i = item.itemConfig.focusZIndex;\n } else if (item.itemConfig.normalZIndex >= 0) {\n i = item.itemConfig.normalZIndex;\n }\n item.renderStyle.zIndex = i;\n }\n };\n const onItemClick = (item) => {\n if (!item) {\n return;\n }\n ;\n if (isFocus) {\n item.onClick();\n }\n };\n const onItemBlur = (blurItem) => {\n if (!blurItem)\n return;\n setItemZIndex(blurItem, 0, false);\n if (isFocus) {\n blurItem.onBlur();\n }\n };\n const onItemFocus = (focusItem, rect) => {\n if (!focusItem || mode.getMode() != FOCUS_MODE)\n return;\n setItemZIndex(focusItem, innerData.length, true);\n if (isFocus) {\n _itemOnFocusSideEffect(focusItem, rect);\n const called = focusItem.onFocus(rect);\n if (!called) {\n callFocusAfterUpdate = true;\n }\n return called;\n }\n return false;\n };\n const setFocusByUid = (uid, needSlide = true, doAnim = false, extraSetting) => {\n if (!uid) {\n return;\n }\n templateItemAdder.tryAddItemByUid(uid);\n const item = metroTemplate.getItemByUid(uid);\n if (!item) {\n console.warn(TAG$3, `setFocusByUid failed: uid ${uid} not exist.`);\n return;\n }\n setFocusId(item.id, needSlide, doAnim, extraSetting);\n };\n const setFocusId = (id, needSlide = true, doAnim = false, extraSetting) => {\n if (id == focusId) {\n return;\n }\n templateItemAdder.tryAddItemById(id);\n let next_focus_item = getItemById(id);\n if (next_focus_item) {\n const nextTemplateInfo = next_focus_item.templateInfo;\n _changeFocusId(nextTemplateInfo.id);\n const preFocusItem = getItemById(preFocusId);\n onItemBlur(preFocusItem);\n onItemFocus(next_focus_item, preEdgeRect);\n if (needSlide) {\n slideToItem(id2Index(id), doAnim);\n }\n let unlock2 = null;\n if (extraSetting) {\n if (extraSetting.lockChildSlideEvent) {\n unlock2 = lock(METRO_WIDGET.CHILD_SLIDE_EVENT);\n }\n }\n const curTemplateInfo = getItemById(focusId).templateInfo;\n let x_off_set = curTemplateInfo.left - nextTemplateInfo.left;\n let y_off_set = curTemplateInfo.top - nextTemplateInfo.top;\n preEdgeRect = {\n direction: null,\n rect: {\n x: x_off_set,\n y: y_off_set,\n width: curTemplateInfo.width,\n height: curTemplateInfo.height\n }\n };\n unlock2?.();\n }\n };\n const lock = (type) => {\n const unlocker = [];\n if (type & METRO_WIDGET.SLIDE) {\n slideLock = true;\n unlocker.push(() => {\n slideLock = false;\n });\n }\n if (type & METRO_WIDGET.CHILD_SLIDE_EVENT) {\n childSlideEventLock = true;\n unlocker.push(() => {\n childSlideEventLock = false;\n });\n }\n if (type & METRO_WIDGET.ON_KEY_DOWN) {\n onKeyDownLock = true;\n unlocker.push(() => {\n onKeyDownLock = false;\n });\n }\n return () => {\n unlocker.map((item) => {\n item();\n });\n };\n };\n const unlock = (type) => {\n if (type & METRO_WIDGET.SLIDE) {\n slideLock = false;\n }\n if (type & METRO_WIDGET.CHILD_SLIDE_EVENT) {\n childSlideEventLock = false;\n }\n if (type & METRO_WIDGET.ON_KEY_DOWN) {\n onKeyDownLock = false;\n }\n };\n const getFocusBlockRef = () => {\n return toRaw(focusNode.value);\n };\n const setEnterFocusId = (id) => {\n templateItemAdder.tryAddItemById(id);\n enterFocusId = id;\n };\n const setEnterFocusRect = (rect) => {\n enterFocusRect = rect;\n };\n const slideTo = (position, doAnim) => {\n templateItemAdder.tryAddItemByPosition(position);\n if (typeof position !== \"undefined\" && position != null && visibleInfo.start !== position) {\n let animObj = null;\n if (doAnim) {\n animObj = {\n easing: props.slideSetting.Easing,\n onStart: null,\n speed: props.slideSetting.Speed,\n duration: props.slideSetting.Duration\n };\n }\n _slideTo(position, animObj);\n }\n };\n const setZIndex = (index, normalZIndex, focusZIndex) => {\n const targetItem = getItemByIndex(index);\n if (targetItem) {\n const n = normalZIndex, f = focusZIndex ?? normalZIndex;\n targetItem.itemConfig.focusZIndex = f;\n targetItem.itemConfig.normalZIndex = n;\n const focused = isFocus && focusId == index2Id(index);\n setItemZIndex(targetItem, focused ? f : n, focused);\n }\n };\n const slideToItem = (index, doAnim) => {\n templateItemAdder.tryAddItemByIndex(index);\n const targetItem = getItemByIndex(index);\n if (targetItem) {\n const direction = index - preAnchorItemIndex >= 0 ? 1 : -1;\n const visible_start = _calculateVisibleStart(targetItem.templateInfo, direction);\n slideTo(visible_start, doAnim);\n }\n };\n const slideToDiv = (div, doAnim) => {\n if (div) {\n const item_layout = div.jsvGetRelativePosition(toRaw(locateDiv.value));\n const direction = 1;\n let fakeItem = {\n templateInfo: {\n left: item_layout.left,\n top: item_layout.top,\n width: item_layout.width,\n height: item_layout.height,\n centerYPos: Math.floor(item_layout.top + item_layout.height / 2),\n centerXPos: Math.floor(item_layout.left + item_layout.width / 2),\n index: id2Index(focusId)\n }\n };\n let cur_slide = _calculateVisibleStart(fakeItem.templateInfo, direction);\n if (cur_slide != visibleInfo.start) {\n _slideTo(cur_slide, doAnim ? {\n easing: \"\",\n onStart: null,\n speed: props.slideSetting.Speed,\n duration: props.slideSetting.Duration,\n onEnd: null\n } : null);\n }\n }\n };\n const refreshData = (force_update) => {\n if (!props.provideData) {\n console.error(\"refreshData: provideData is null.\");\n return;\n }\n let _force_update = force_update;\n if (metroTemplate.size === 0) {\n _force_update = true;\n }\n let new_list = toRaw(props.provideData());\n if (focusId >= new_list.length) {\n _changeFocusId(new_list.length - 1, false);\n }\n let new_index = 0;\n if (!_force_update) {\n for (new_index = 0; new_index < new_list.length; ++new_index) {\n let already_add = false;\n for (let j = 0; j < innerData.length; ++j) {\n if (new_list[new_index] === innerData[j].customerData) {\n already_add = true;\n break;\n }\n }\n if (!already_add) {\n break;\n }\n }\n }\n let need_update_content = false;\n if (!_force_update && new_index === metroTemplate.size) {\n if (new_index !== new_list.length) {\n need_update_content = true;\n templateItemAdder.updateData(new_list);\n } else {\n }\n } else {\n pageUpdateToken.value++;\n permanentItemList = [];\n need_update_content = true;\n metroTemplate = _getMetroTemplate(\n widgetRectInfo,\n props.direction,\n props.supportHistoryPath,\n props.layoutType,\n templateMode\n );\n innerData = [];\n dataList = new_list;\n templateItemAdder = new TemplateItemAdder(\n metroTemplate,\n dataList,\n props.measures,\n pageRange,\n _onTemplateItemAdd,\n props.name,\n _onTemplateAddDone\n );\n }\n if (need_update_content) {\n if (props.onScroll) {\n templateItemAdder.tryAddItemByIndex(dataList.length - 1);\n } else {\n templateItemAdder.tryAddItemById(focusId);\n }\n }\n const updater2 = pageUpdater.update(\n metroTemplate,\n visibleInfo.startWithPadding - props.keepTraceRange * pageRange,\n Math.min(\n visibleInfo.startMax + visibleInfo.range + visibleInfo.padding.end - 1,\n visibleInfo.endWithPadding + props.keepTraceRange * pageRange\n ),\n focusId,\n false,\n permanentItemList\n );\n updater2.apply();\n onItemFocus(getItemById(focusId), null);\n slideToItem(id2Index(focusId), false);\n };\n const getVisibleItems = () => {\n const [visibleStart, visibleEnd] = metroTemplate.getVisibleItemList(\n visibleInfo.startWithPadding,\n visibleInfo.endWithPadding,\n focusId\n );\n return {\n start: visibleStart,\n end: visibleEnd,\n dataList: dataList.slice(visibleStart, visibleEnd + 1)\n };\n };\n const moveFocus = (direction) => {\n if (direction == \"left\" || direction == 37 || direction == EdgeDirection.left) {\n _moveToNext(-1, 0);\n } else if (direction == \"right\" || direction == 39 || direction == EdgeDirection.right) {\n _moveToNext(1, 0);\n } else if (direction == \"top\" || direction == 38 || direction == EdgeDirection.top) {\n _moveToNext(0, -1);\n } else if (direction == \"bottom\" || direction == 40 || direction == EdgeDirection.bottom) {\n _moveToNext(0, 1);\n } else {\n console.error(TAG$3, \"moveFocus direction is invalid.\", direction);\n }\n };\n const getCustomerDataSize = () => {\n return dataList.length;\n };\n const getCurrentFocusIndex = () => {\n return id2Index(focusId);\n };\n const getCurMode = () => {\n return mode.getMode();\n };\n const getTemplatePosition = (index) => {\n return _getTemplatePosition(index);\n };\n const lockSlide = () => {\n slideLock = true;\n };\n const unlockSlide = () => {\n slideLock = false;\n };\n const exportObject = {\n lockSlide,\n unlockSlide,\n lock,\n unlock,\n slideTo,\n setFocusId,\n setFocusByUid,\n getFocusBlockRef,\n setEnterFocusId,\n setEnterFocusRect,\n slideToItem,\n slideToDiv,\n refreshData,\n getVisibleItems,\n moveFocus,\n getCustomerDataSize,\n setZIndex,\n getCurrentFocusIndex,\n getCurMode,\n getTemplatePosition\n };\n const _calculateNearestItemByRect = (visibleSet, enter_rect_info) => {\n let edge_direction = enter_rect_info.direction;\n let rect = enter_rect_info.rect;\n var direction = \"\";\n var point = { x: 0, y: 0 };\n switch (edge_direction) {\n case EdgeDirection.left:\n direction = \"left\";\n point.x = rect.x;\n point.y = rect.y + rect.height / 4;\n break;\n case EdgeDirection.right:\n direction = \"right\";\n point.x = rect.x + rect.width;\n point.y = rect.y + rect.height / 4;\n break;\n case EdgeDirection.top:\n direction = \"up\";\n point.x = rect.x + rect.width / 4;\n point.y = rect.y;\n break;\n case EdgeDirection.bottom:\n direction = \"down\";\n point.x = rect.x + rect.width / 4;\n point.y = rect.y + rect.height;\n break;\n default:\n break;\n }\n var src_x_range = new SingleRangeModel(point.x, point.x);\n var src_y_range = new SingleRangeModel(point.y, point.y);\n var min_distance_item = null;\n var min_distance = -1;\n var min_direction_weighted = 0;\n var distance = 0;\n var direction_weighted = 0;\n let key_pos = vertical ? \"top\" : \"left\";\n let key_width = vertical ? \"height\" : \"width\";\n for (let index of visibleSet) {\n let itemTemplateInfo = getItemByIndex(index).templateInfo;\n if (!itemTemplateInfo.focusable)\n continue;\n let full_show = itemTemplateInfo[key_pos] >= visibleInfo.start && itemTemplateInfo[key_pos] + itemTemplateInfo[key_width] - 1 <= visibleInfo.end;\n if (full_show) {\n let x_pos = vertical ? itemTemplateInfo.left : itemTemplateInfo.left - visibleInfo.start;\n let y_pos = vertical ? itemTemplateInfo.top - visibleInfo.start : itemTemplateInfo.top;\n var target_x_range = new SingleRangeModel(\n x_pos,\n x_pos + itemTemplateInfo.width - 1\n );\n var target_y_range = new SingleRangeModel(\n y_pos,\n y_pos + itemTemplateInfo.height - 1\n );\n switch (direction) {\n case \"left\":\n if (point.x < x_pos + itemTemplateInfo.width - 1) {\n continue;\n }\n if (point.y < y_pos) {\n distance = Math.pow(point.x - (x_pos + itemTemplateInfo.width - 1), 2) + Math.pow(y_pos - point.y, 2);\n } else if (src_y_range.IsInterAct(target_y_range)) {\n distance = Math.pow(\n point.x - (x_pos + itemTemplateInfo.width - 1),\n 2\n );\n } else if (point.y > y_pos + itemTemplateInfo.height - 1) {\n distance = Math.pow(point.x - (x_pos + itemTemplateInfo.width - 1), 2) + Math.pow(point.y - (y_pos + itemTemplateInfo.height - 1), 2);\n }\n direction_weighted = Math.abs(\n point.x - (x_pos + itemTemplateInfo.width - 1)\n );\n break;\n case \"right\":\n if (point.x > x_pos) {\n continue;\n }\n if (point.y < y_pos) {\n distance = Math.pow(x_pos - point.x, 2) + Math.pow(y_pos - point.y, 2);\n } else if (src_y_range.IsInterAct(target_y_range)) {\n distance = Math.pow(x_pos - point.x, 2);\n } else if (point.y > y_pos + itemTemplateInfo.height - 1) {\n distance = Math.pow(x_pos - point.x, 2) + Math.pow(point.y - (y_pos + itemTemplateInfo.height - 1), 2);\n }\n direction_weighted = Math.abs(point.x - x_pos);\n break;\n case \"up\":\n if (point.y < y_pos + itemTemplateInfo.height - 1) {\n continue;\n }\n if (point.x < x_pos) {\n distance = Math.pow(point.x - x_pos, 2) + Math.pow(point.y - (y_pos + itemTemplateInfo.height - 1), 2);\n } else if (src_x_range.IsInterAct(target_x_range)) {\n distance = Math.pow(\n point.y - (y_pos + itemTemplateInfo.height - 1),\n 2\n );\n } else if (point.x > x_pos + itemTemplateInfo.width - 1) {\n distance = Math.pow(point.x - (x_pos + itemTemplateInfo.width - 1), 2) + Math.pow(point.y - (y_pos + itemTemplateInfo.height - 1), 2);\n }\n direction_weighted = Math.abs(\n point.y - (y_pos + itemTemplateInfo.height - 1)\n );\n break;\n case \"down\":\n if (point.y > y_pos) {\n continue;\n }\n if (point.x < x_pos) {\n distance = Math.pow(point.x - x_pos, 2) + Math.pow(y_pos - point.y, 2);\n } else if (src_x_range.IsInterAct(target_x_range)) {\n distance = Math.pow(y_pos - point.y, 2);\n } else if (point.x > x_pos + itemTemplateInfo.width - 1) {\n distance = Math.pow(point.x - (x_pos + itemTemplateInfo.width - 1), 2) + Math.pow(y_pos - point.y, 2);\n }\n direction_weighted = Math.abs(point.y - y_pos);\n break;\n default:\n console.log(\"direction is error:\" + direction);\n break;\n }\n if (min_distance < 0) {\n min_distance = distance;\n min_direction_weighted = direction_weighted;\n min_distance_item = itemTemplateInfo;\n } else {\n if (min_direction_weighted > direction_weighted || min_direction_weighted === direction_weighted && min_distance > distance) {\n min_distance = distance;\n min_direction_weighted = direction_weighted;\n min_distance_item = itemTemplateInfo;\n }\n }\n }\n }\n if (min_distance_item) {\n return min_distance_item.id;\n } else {\n return 0;\n }\n };\n const focusBlockOnKeyDown = (ev) => {\n if (onKeyDownLock) {\n return true;\n }\n if (mode.getMode() == TOUCH_MODE) {\n if (mode.duringTouch()) {\n return true;\n } else {\n mode.keyDown();\n const focusItem = _getVisibleFocusableItem();\n _changeFocusId(focusItem.id, false);\n onItemFocus(focusItem);\n return true;\n }\n }\n switch (ev.keyCode) {\n case 37:\n _moveToNext(-1, 0);\n break;\n case 38:\n _moveToNext(0, -1);\n break;\n case 39:\n _moveToNext(1, 0);\n break;\n case 40:\n _moveToNext(0, 1);\n break;\n case 13:\n onItemClick(getItemById(focusId));\n break;\n default:\n return false;\n }\n return true;\n };\n const randomColor = () => {\n let randomColor2 = Math.round(Math.random() * 2 ** 24).toString(16);\n return \"#\" + new Array(6 - randomColor2.length).fill(\"0\").join(\"\") + randomColor2 + \"77\";\n };\n const _onTemplateAddDone = () => {\n const lastTemplateInfo = getItemByIndex(\n metroTemplate.getTailItemIndex()\n )?.templateInfo;\n if (lastTemplateInfo) {\n if (vertical) {\n touchDivSize.width = props.width;\n touchDivSize.height = lastTemplateInfo.top + lastTemplateInfo.height - 1;\n } else {\n touchDivSize.width = lastTemplateInfo.left + lastTemplateInfo.width - 1;\n touchDivSize.height = props.height;\n }\n resetDragRect(touchDivSize.width, touchDivSize.height);\n }\n };\n const _onTemplateItemAdd = (customerData, templateItem, measuresObj) => {\n let focusZIndex = -1, normalZIndex = -1;\n if (typeof measuresObj[\"zIndex\"] != \"undefined\" && measuresObj[\"zIndex\"] != null) {\n if (typeof measuresObj[\"zIndex\"] == \"object\") {\n if (typeof measuresObj[\"zIndex\"][\"focus\"] == \"number\") {\n focusZIndex = measuresObj[\"zIndex\"][\"focus\"];\n }\n if (typeof measuresObj[\"zIndex\"][\"normal\"] == \"number\") {\n normalZIndex = measuresObj[\"zIndex\"][\"normal\"];\n }\n } else if (typeof measuresObj[\"zIndex\"] == \"number\") {\n focusZIndex = measuresObj[\"zIndex\"];\n normalZIndex = measuresObj[\"zIndex\"];\n }\n }\n let itemConfig = {\n focusZIndex,\n normalZIndex,\n permanent: measuresObj.permanent ?? false,\n itemSlide: measuresObj.itemSlide ?? METRO_WIDGET.ITEM_SLIDE.ACT_ITEM_FOCUS\n };\n const renderStyle = reactive({\n left: templateItem.left,\n top: templateItem.top,\n width: templateItem.width,\n height: templateItem.height,\n zIndex: itemConfig.normalZIndex\n });\n const item = new RenderItem(\n templateItem,\n customerData,\n renderStyle,\n itemConfig,\n () => {\n if (callFocusAfterUpdate && item.id === focusId) {\n nextTick(() => {\n onItemFocus(item, preEdgeRect);\n });\n callFocusAfterUpdate = false;\n }\n },\n //query object\n {\n id: templateItem.id,\n index: templateItem.index,\n position: _getPosition,\n templatePosition: _getTemplatePosition,\n getCurrentFocusId: _getCurrentId,\n slideTo,\n updateItemSize,\n widgetHandler: exportObject\n }\n );\n item.enableTap = measuresObj.enableTap ?? false;\n innerData.push(item);\n if (item.itemConfig.permanent) {\n permanentItemList.push({\n index: item.index,\n alreadyShow: false\n });\n }\n };\n const _itemOnFocusSideEffect = (item, edgeRect) => {\n _onFocusChange(item.id);\n if (item.rootDiv) {\n let event = {\n type: \"focusRect\",\n direction: edgeRect?.direction?.description,\n element: toRaw(item.rootDiv)\n };\n _bubbleCustomEvent(event);\n }\n };\n const focusBlockOnCustomEvent = (ev) => {\n if (ev.type === \"focusRect\") {\n if (childSlideEventLock) {\n return true;\n }\n if (ev.ownerNode == exportObject) {\n return false;\n }\n const focusItem = getItemById(focusId);\n if (focusItem.itemConfig.itemSlide !== METRO_WIDGET.ITEM_SLIDE.ACT_FOCUS_RECT_EVENT) {\n return;\n }\n let item_div = ev.element;\n let direction = 0;\n if (props.direction == HORIZONTAL) {\n if (ev.direction == \"left\") {\n direction = -1;\n } else if (ev.direction == \"right\") {\n direction = 1;\n }\n } else {\n if (ev.direction == \"top\") {\n direction = -1;\n } else if (ev.direction == \"bottom\") {\n direction = 1;\n }\n }\n const item_layout = item_div.jsvGetRelativePosition(toRaw(locateDiv.value));\n let fakeItem = {\n templateInfo: {\n left: item_layout.left,\n top: item_layout.top,\n width: item_layout.width,\n height: item_layout.height,\n centerYPos: Math.floor(item_layout.top + item_layout.height / 2),\n centerXPos: Math.floor(item_layout.left + item_layout.width / 2),\n index: id2Index(focusId)\n }\n };\n let cur_slide = _calculateVisibleStart(fakeItem.templateInfo, direction);\n if (cur_slide != visibleInfo.start) {\n _slideTo(\n cur_slide,\n {\n easing: \"\",\n onStart: null,\n speed: props.slideSetting.Speed,\n duration: props.slideSetting.Duration\n },\n {\n mergeTmp: true\n }\n );\n return true;\n }\n }\n return false;\n };\n const _changeFocusId = (id, cache_pre = true) => {\n preFocusId = cache_pre ? focusId : -1;\n focusId = id;\n currentFocusIndex.value = id2Index(id);\n macroEndTaskManager.addTask(TaskType.ON_FOCUS_CHANGE);\n };\n const _bubbleCustomEvent = (event) => {\n if (props.sendFocusRectEvent && event) {\n event.ownerNode = exportObject;\n toRaw(focusNode.value)?.bubbleCustomEvent(event);\n }\n };\n const _moveToNext = (horizontal_direction, vertical_direction, item_edge_rect) => {\n if (innerData.length == 0) {\n let direction;\n if (horizontal_direction > 0) {\n direction = EdgeDirection.right;\n } else if (horizontal_direction < 0) {\n direction = EdgeDirection.left;\n } else if (vertical_direction > 0) {\n direction = EdgeDirection.bottom;\n } else if (vertical_direction < 0) {\n direction = EdgeDirection.top;\n } else {\n console.warn(TAG$3, \"moveToNext error\");\n }\n if (direction) {\n props.onEdge?.({\n direction,\n rect: {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n }\n });\n }\n return;\n }\n let next_focus_item = getNextItem(\n focusId,\n vertical_direction,\n horizontal_direction,\n props.focusMoveType\n );\n if (next_focus_item !== null) {\n _changeFocusId(next_focus_item.id);\n const preFocusItem = getItemById(preFocusId);\n templateItemAdder.tryAddItem(next_focus_item.templateInfo, 1);\n let x_off_set = preFocusItem.templateInfo.left - next_focus_item.templateInfo.left;\n let y_off_set = preFocusItem.templateInfo.top - next_focus_item.templateInfo.top;\n if (item_edge_rect && item_edge_rect.rect) {\n item_edge_rect.rect.x += x_off_set;\n item_edge_rect.rect.y += y_off_set;\n preEdgeRect = item_edge_rect;\n } else {\n let direction;\n if (horizontal_direction > 0) {\n direction = EdgeDirection.right;\n } else if (horizontal_direction < 0) {\n direction = EdgeDirection.left;\n } else if (vertical_direction > 0) {\n direction = EdgeDirection.bottom;\n } else if (vertical_direction < 0) {\n direction = EdgeDirection.top;\n }\n preEdgeRect = {\n direction,\n rect: {\n x: x_off_set,\n y: y_off_set,\n width: preFocusItem.templateInfo.width,\n height: preFocusItem.templateInfo.height\n }\n };\n }\n onItemBlur(preFocusItem);\n onItemFocus(next_focus_item, preEdgeRect);\n let cur_visible_start2 = _calculateVisibleStart(next_focus_item.templateInfo, vertical ? vertical_direction : horizontal_direction);\n if (visibleInfo.start !== cur_visible_start2) {\n if (next_focus_item.itemConfig.itemSlide == METRO_WIDGET.ITEM_SLIDE.ACT_ITEM_FOCUS) {\n let animObj = {\n easing: \"\",\n onStart: null,\n speed: props.slideSetting.Speed,\n duration: props.slideSetting.Duration\n };\n _slideTo(cur_visible_start2, animObj, { mergeTmp: false });\n } else {\n const updater2 = pageUpdater.update(\n metroTemplate,\n cur_visible_start2,\n cur_visible_start2 + visibleInfo.range + visibleInfo.padding.end - 1,\n next_focus_item.id,\n false,\n permanentItemList\n );\n updater2.applyTmp();\n }\n }\n } else {\n let x_off_set = vertical ? 0 : visibleInfo.start;\n let y_off_set = vertical ? visibleInfo.start : 0;\n let edge;\n if (horizontal_direction === 1) {\n edge = EdgeDirection.right;\n }\n if (horizontal_direction === -1) {\n edge = EdgeDirection.left;\n }\n if (vertical_direction === 1) {\n edge = EdgeDirection.bottom;\n }\n if (vertical_direction === -1) {\n edge = EdgeDirection.top;\n }\n const curTemplateInfo = getItemById(focusId)?.templateInfo;\n let rect;\n if (curTemplateInfo) {\n rect = {\n x: curTemplateInfo.left - x_off_set,\n y: curTemplateInfo.top - y_off_set,\n width: curTemplateInfo.width,\n height: curTemplateInfo.height\n };\n } else {\n rect = {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n };\n }\n props.onEdge?.({\n direction: edge,\n rect,\n childEdgeInfo: item_edge_rect\n });\n innerData[id2Index(focusId)]?.onWidgetEdge({\n direction: edge\n });\n }\n };\n const normalizeVisibleStart = (origin, targetItem = null) => {\n let pos_key = vertical ? \"top\" : \"left\";\n let size_key = vertical ? \"height\" : \"width\";\n let visible_start = origin;\n if ((props.slideSetting.BoundaryProtect & SlideSetting.START_PROTECT) > 0) {\n let boundary = 0;\n const headTemplateInfo = getItemByIndex(0).templateInfo;\n if (targetItem && (!headTemplateInfo.focusable || targetItem.index == headTemplateInfo.index) && targetItem[pos_key] + targetItem[size_key] <= visibleInfo.range) {\n boundary = headTemplateInfo[size_key];\n }\n visible_start = visible_start < boundary ? 0 : visible_start;\n }\n if ((props.slideSetting.BoundaryProtect & SlideSetting.END_PROTECT) > 0) {\n let lastTemplateInfo = getItemByIndex(metroTemplate.getTailItemIndex()).templateInfo;\n let last_visible_start = lastTemplateInfo[pos_key] + lastTemplateInfo[size_key] - visibleInfo.range;\n last_visible_start = last_visible_start < 0 ? 0 : last_visible_start;\n let boundary = last_visible_start;\n if (targetItem && (!lastTemplateInfo.focusable || targetItem.index == lastTemplateInfo.index) && targetItem[pos_key] - last_visible_start >= 0) {\n boundary = lastTemplateInfo[pos_key] - visibleInfo.range;\n }\n visible_start = visible_start > boundary ? last_visible_start : visible_start;\n }\n return visible_start;\n };\n const _calculateVisibleStart = (targetTemplateInfo, direction) => {\n if (!targetTemplateInfo) {\n console.error(\"MetroWidget: _calculateVisibleStart target item is null\");\n return 0;\n }\n preSlideDirection = direction;\n preAnchorItemIndex = targetTemplateInfo.index;\n let pos_key = vertical ? \"top\" : \"left\";\n let size_key = vertical ? \"height\" : \"width\";\n let center_key = vertical ? \"centerYPos\" : \"centerXPos\";\n let new_visible_start = visibleInfo.start;\n let needCalculate = true;\n switch (props.slideSetting.Type) {\n case SlideSetting.Type.FIX_POSITION:\n if (props.slideSetting.FixFirstPage) {\n if (targetTemplateInfo[pos_key] + targetTemplateInfo[size_key] - 1 < visibleInfo.range) {\n new_visible_start = 0;\n needCalculate = false;\n }\n }\n if (needCalculate) {\n new_visible_start = Math.ceil(\n targetTemplateInfo[center_key] - visibleInfo.range * props.slideSetting.FixPercent\n );\n }\n break;\n case SlideSetting.Type.WHOLE_PAGE:\n if (typeof targetTemplateInfo.pageHeadIndex == \"undefined\") {\n console.error(\n \"child controlled whole page slide type is not supported.\"\n );\n } else {\n new_visible_start = getItemByIndex(targetTemplateInfo.pageHeadIndex).templateInfo[pos_key];\n }\n break;\n case SlideSetting.Type.SEAMLESS:\n if (props.slideSetting.FixFirstPage) {\n if (targetTemplateInfo[pos_key] + targetTemplateInfo[size_key] - 1 < visibleInfo.range) {\n new_visible_start = 0;\n needCalculate = false;\n }\n }\n if (needCalculate) {\n if (targetTemplateInfo[size_key] >= visibleInfo.range * (props.slideSetting.EndPercent - props.slideSetting.StartPercent)) {\n new_visible_start = targetTemplateInfo[center_key] - visibleInfo.range * 0.5;\n } else {\n if (direction > 0) {\n if (targetTemplateInfo[pos_key] + targetTemplateInfo[size_key] > visibleInfo.start + visibleInfo.range * props.slideSetting.EndPercent) {\n new_visible_start = targetTemplateInfo[pos_key] + targetTemplateInfo[size_key] - visibleInfo.range * props.slideSetting.EndPercent;\n }\n } else if (direction < 0) {\n if (targetTemplateInfo[pos_key] < visibleInfo.start + visibleInfo.range * props.slideSetting.StartPercent) {\n new_visible_start = targetTemplateInfo[pos_key] - visibleInfo.range * props.slideSetting.StartPercent;\n }\n } else {\n if (targetTemplateInfo[pos_key] < visibleInfo.start) {\n new_visible_start = targetTemplateInfo[pos_key] - visibleInfo.range * props.slideSetting.StartPercent;\n } else if (targetTemplateInfo[pos_key] + targetTemplateInfo[size_key] > visibleInfo.end) {\n new_visible_start = targetTemplateInfo[pos_key] + targetTemplateInfo[size_key] - visibleInfo.range * props.slideSetting.EndPercent;\n }\n }\n }\n }\n break;\n default:\n console.error(\n \"MetroWidget: undefined slide type\",\n props.slideSetting.Type\n );\n }\n new_visible_start = normalizeVisibleStart(new_visible_start, targetTemplateInfo);\n return Math.round(new_visible_start);\n };\n const _onFocusableItemEdge = (edge_info) => {\n let horizontal_direction = 0;\n let vertical_direction = 0;\n switch (edge_info.direction) {\n case EdgeDirection.left:\n horizontal_direction = -1;\n break;\n case EdgeDirection.right:\n horizontal_direction = 1;\n break;\n case EdgeDirection.top:\n vertical_direction = -1;\n break;\n case EdgeDirection.bottom:\n vertical_direction = 1;\n break;\n default:\n break;\n }\n _moveToNext(horizontal_direction, vertical_direction, edge_info);\n };\n const _ifValidEnterRect = (rect_info) => {\n return rect_info && rect_info.direction && rect_info.rect;\n };\n const focusBlockOnFocus = (params) => {\n isFocus = true;\n if (innerData.length === 0) {\n console.log(`MetroWidget: ${props.name} get focus while data is empty.`);\n return;\n }\n let focus_id = typeof enterFocusId !== \"undefined\" && enterFocusId >= 0 && enterFocusId < metroTemplate.size ? enterFocusId : focusId;\n focus_id = _ifValidEnterRect(enterFocusRect) ? _calculateNearestItemByRect(pageUpdater.getRange(), enterFocusRect) : focus_id;\n preEdgeRect = enterFocusRect;\n _changeFocusId(focus_id, false);\n enterFocusId = -1;\n enterFocusRect = null;\n alreadyCallItemFocus = onItemFocus(getItemById(focusId), preEdgeRect);\n props.onFocus?.();\n };\n const focusBlockOnBlur = () => {\n enterFocusId = -1;\n enterFocusRect = null;\n preEdgeRect = null;\n preFocusId = focusId;\n onItemBlur(getItemById(preFocusId));\n props.onBlur?.();\n isFocus = false;\n };\n const _updatePage = (rangeSet) => {\n const tmpArray = Array.from(rangeSet);\n renderData.value = tmpArray.map((item) => {\n return getItemByIndex(item);\n });\n if (props.enableItemRenderBreak) {\n itemRender.value = false;\n nextTick(() => {\n itemRender.value = true;\n });\n }\n };\n const _getVisibleFocusableItem = () => {\n const focusItem = getItemById(focusId);\n if (isItemVisible(focusItem)) {\n return focusItem;\n } else {\n for (let item of renderData.value) {\n if (item.templateInfo.focusable && isItemVisible(item)) {\n return item;\n }\n }\n }\n };\n const _onScroll = () => {\n if (props.onScroll) {\n const lastTemplateInfo = getItemByIndex(\n metroTemplate.getTailItemIndex()\n )?.templateInfo;\n let totalWidth = 0;\n if (lastTemplateInfo) {\n if (vertical) {\n totalWidth = lastTemplateInfo.top + lastTemplateInfo.height - 1;\n } else {\n totalWidth = lastTemplateInfo.left + lastTemplateInfo.width - 1;\n }\n }\n props.onScroll(visibleInfo.start, visibleInfo.range, totalWidth);\n }\n };\n let actorController = null;\n const touchLoadItemRect = visibleInfo.range;\n const reachAnchorGroup = 2;\n const wallConditionGroup = 1;\n let divPos = -1;\n let frameCount = -1;\n const getVisibleStart = (moveInfo) => {\n if (frameCount != Forge$1.sFrameCount.count) {\n divPos = vertical ? slideDivTop.value : slideDivLeft.value;\n }\n if (vertical) {\n return -(divPos + Math.round(moveInfo.yPos));\n } else {\n return -(divPos + Math.round(moveInfo.xPos));\n }\n };\n const mergeTouchSlideToSlideDiv = () => {\n if (vertical) {\n slideDivTop.value = -visibleInfo.start;\n } else {\n slideDivLeft.value = -visibleInfo.start;\n }\n const walls = getTouchWall();\n actorController.run([\n actorController.state().removeConditionByGroup(wallConditionGroup),\n actorController.condition(wallConditionGroup, true).boxPosition(walls.left, walls.top, walls.right, walls.bottom).then([actorController.state().setHitWallOverflow()]),\n //TODO 通过prop设置哪个方向overflow\n actorController.action().teleportTo(0, 0)\n ]);\n };\n const onTouchDown = (data) => {\n mode.touchStart();\n mode.flingEnd();\n const t = 100;\n const offsetThreshold = {\n left: vertical ? void 0 : t,\n right: vertical ? void 0 : t,\n top: vertical ? t : void 0,\n bottom: vertical ? t : void 0\n };\n actorController.run([\n actorController.condition(void 0, false).offsetPosition(offsetThreshold.left, offsetThreshold.top, offsetThreshold.right, offsetThreshold.bottom).then([actorController.state().touchLockSwitch(true, vertical ? 1 : 2, t)]),\n actorController.condition(void 0, false).startMove(true, true).then([onDragStart])\n ]);\n onItemBlur(getItemById(focusId));\n templateItemAdder.tryAddItemByPosition(visibleInfo.end + visibleInfo.range);\n const updater2 = pageUpdater.update(\n metroTemplate,\n visibleInfo.startWithPadding - visibleInfo.range,\n visibleInfo.endWithPadding + visibleInfo.range,\n 0,\n false,\n permanentItemList\n );\n updater2.apply();\n const anchorArea = 2 * Forge$1.sRenderBridge.GetScreenInfo().designedWidth;\n let anchorPosList = [];\n let anchorSpacing = visibleInfo.range * 2 / 3;\n let anchorPos = anchorSpacing;\n while (anchorPos < anchorArea) {\n anchorPosList.push(-visibleInfo.start + anchorPos);\n anchorPosList.push(-visibleInfo.start - visibleInfo.range - anchorPos + 1);\n anchorPos += anchorSpacing;\n }\n const reachConditionList = anchorPosList.map((pos) => {\n actorController.condition(reachAnchorGroup).reachPosition(pos, void 0).then([(data2) => {\n updateRenderItems(true, true);\n }]);\n });\n reachConditionList.unshift(\n actorController.state().removeConditionByGroup(reachAnchorGroup)\n );\n actorController.run(reachConditionList);\n };\n const onTouchRelease = () => {\n if (mode.getTouchState() == TouchState.TAP) {\n updateRenderItems(false, false);\n mode.touchEnd();\n }\n };\n const onDragStart = (data) => {\n mode.dragStart();\n visibleInfo.start = getVisibleStart(data);\n };\n const onDragEnd = (data) => {\n visibleInfo.start = getVisibleStart(data);\n actorController.run([\n actorController.state().removeConditionByGroup(reachAnchorGroup)\n ]);\n mergeTouchSlideToSlideDiv();\n updateRenderItems(false, false);\n mode.touchEnd();\n };\n const onFlingStart = (data) => {\n mode.flingStart();\n visibleInfo.start = getVisibleStart(data);\n updateRenderItems(true, true);\n };\n const onFlingProgress = (data) => {\n visibleInfo.start = getVisibleStart(data);\n updateRenderItems(true, true);\n };\n const onFlingEnd = (data) => {\n visibleInfo.start = getVisibleStart(data);\n if (mode.duringFling()) {\n mergeTouchSlideToSlideDiv();\n updateRenderItems(false, false);\n mode.flingEnd();\n mode.touchEnd();\n }\n };\n const getTouchWall = () => {\n const boxSize = metroTemplate.getBoundingBoxSize();\n let wall = {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n };\n if (vertical) {\n wall.top = -boxSize.height + props.height - slideDivTop.value;\n wall.bottom = -slideDivTop.value;\n } else {\n wall.left = -boxSize.width + props.width - slideDivLeft.value;\n wall.right = -slideDivLeft.value;\n }\n return wall;\n };\n const updateRenderItems = (applyTmp, expand) => {\n templateItemAdder.tryAddItemByPosition(visibleInfo.start + visibleInfo.range);\n const updater2 = pageUpdater.update(\n metroTemplate,\n expand ? visibleInfo.start - visibleInfo.range : visibleInfo.startWithPadding,\n expand ? visibleInfo.start + 2 * visibleInfo.range : visibleInfo.endWithPadding,\n 0,\n true,\n permanentItemList\n );\n applyTmp ? updater2.applyTmp() : updater2.apply();\n };\n const resetDragRect = () => {\n if (actorController != null) {\n const walls = getTouchWall();\n actorController.run([\n actorController.state().removeConditionByGroup(wallConditionGroup),\n actorController.condition(wallConditionGroup, true).boxPosition(walls.left, walls.top, walls.right, walls.bottom).then([actorController.state().setHitWallOverflow()])\n //TODO 通过prop设置哪个方向overflow\n ]);\n }\n };\n const initTouch = () => {\n actorController = new ActorControl();\n const divView = touchDiv.value.jsvGetProxyView();\n actorController.bindForgeView(divView, true);\n divView.DragEnables?.(4 | 8 | 16);\n const walls = getTouchWall();\n actorController.run([\n actorController.condition(void 0, true).onTouchDown().then([onTouchDown]),\n // actorController\n // .condition(undefined, true)\n // .onDragStart()\n // .then([onDragStart]),\n actorController.condition(void 0, true).onDragEnd().then([onDragEnd]),\n actorController.condition(void 0, true).onFlingStart().then([onFlingStart]),\n actorController.condition(void 0, true).onFlingProgress().then([onFlingProgress]),\n actorController.condition(void 0, true).onFlingEnd().then([onFlingEnd]),\n actorController.condition(void 0, true).onTouchRelease().then([actorController.state().touchLockSwitch(false, vertical ? 1 : 2)]),\n actorController.condition(wallConditionGroup, true).boxPosition(walls.left, walls.top, walls.right, walls.bottom).then([actorController.state().setHitWallOverflow()])\n //TODO 通过prop设置哪个方向overflow\n ]);\n };\n pageUpdater = new PageUpdater(_updatePage);\n visibleInfo.range = vertical ? widgetRectInfo.contentHeight : widgetRectInfo.contentWidth;\n visibleInfo.padding = vertical ? { start: widgetRectInfo.padding.top, end: widgetRectInfo.padding.bottom } : { start: widgetRectInfo.padding.left, end: widgetRectInfo.padding.right };\n if (props.provideData) {\n dataList = toRaw(props.provideData());\n } else if (props.data) {\n dataList = toRaw(props.data);\n }\n templateItemAdder = new TemplateItemAdder(\n metroTemplate,\n dataList,\n props.measures,\n pageRange,\n _onTemplateItemAdd,\n props.name,\n _onTemplateAddDone\n );\n if (props.onScroll) {\n templateItemAdder.tryAddItemByIndex(dataList.length - 1);\n } else {\n templateItemAdder.tryAddItem(null, 2);\n }\n let init_focus_id = 0;\n let cur_visible_start = 0;\n if (typeof props.initFocusId == \"number\") {\n templateItemAdder.tryAddItemById(props.initFocusId);\n const item = getItemById(props.initFocusId);\n if (item) {\n init_focus_id = props.initFocusId;\n if (item.itemConfig.itemSlide == METRO_WIDGET.ITEM_SLIDE.ACT_ITEM_FOCUS) {\n cur_visible_start = _calculateVisibleStart(item.templateInfo, 1);\n }\n }\n }\n focusId = init_focus_id;\n visibleInfo.start = cur_visible_start;\n const updater = pageUpdater.update(\n metroTemplate,\n visibleInfo.startWithPadding,\n visibleInfo.endWithPadding,\n 0,\n false,\n permanentItemList\n );\n updater.apply();\n onMounted(() => {\n _changeFocusId(focusId, false);\n mounted = true;\n if (visibleInfo.start) {\n _slideTo(visibleInfo.start, null);\n }\n if (isFocus && !alreadyCallItemFocus) {\n onItemFocus(getItemById(focusId), preEdgeRect);\n }\n if (props.enableItemRenderBreak) {\n nextTick(() => {\n itemRender.value = true;\n });\n }\n if (props.enableTouch) {\n initTouch();\n }\n });\n onUpdated(() => {\n });\n onBeforeUnmount(() => {\n mounted = false;\n });\n return {\n widgetRectInfo,\n focusBlockOnFocus,\n focusBlockOnBlur,\n focusBlockOnKeyDown,\n focusBlockOnCustomEvent,\n _onFocusableItemEdge,\n exportObject,\n setZIndex,\n onTouchDown,\n onTouchRelease,\n currentFocusIndex,\n modeForExport\n };\n};\n\n//!\n//! utils/JsViewEngineWidget/MetroWidget/SlotComponent.vue;\n//!\n/*! \n\n\n\n\n */\nconst _sfc_main$G = {\n __name: \"SlotComponent\",\n setup(__props) {\n onBeforeUpdate(() => {\n console.log(\"onBeforeUpdate\");\n return false;\n });\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", null, [\n renderSlot(_ctx.$slots, \"default\")\n ]);\n };\n }\n};\n\n//!\n//! utils/JsViewEngineWidget/MetroWidget/MetroWidget.vue;\n//!\n/*! <!--\n * @Author: ChenChanghua\n * @Date: 2021-09-22 16:08:58\n * @Description: file content\n-->\n\n<!--\n * 【界面概述】\n * 展示MetroWidget控件的用法\n *\n * 【控件介绍】\n * MetroWidget:\n * props:\n * top {int} 控件的y,默认为0\n * left {int} 控件的x, 默认为0\n * width {int} (必选)控件的宽\n * height {int} (必选)控件的高\n * layoutType {String} 布局的类型, 目前支持 \"relative\"(默认)|\"absolute\", relative为自动布局, \n absolute为依据measures中给的top, left布局\n * \n * name {string} 用于设置焦点的名称\n * padding {object} 控件内边距, 默认为{left: 0, right: 0, top: 0, bottom: 0}\n * direction {enum} (必选)控件方向 HORIZONTAL/VERTICAL\n * focusMoveType {int} 焦点移动的模式, 可通过 | 运算进行组合\n NO_ADJUST: 无特殊处理\n COLUMN_LOOP: 到达列首/尾后跳转到上/下一列, 只在水平滚动时生效\n ROW_LOOP: 到达行首/尾后跳转到上/下一行, 只在竖直滚动时生效\n COLUMN_FIND_NEAR: 一列中没有下一个元素时是否跳转到相邻列\n ROW_FIND_NEAR: 一行中没有下一个元素时是否跳转到相邻行\n * keepTraceRange { number } 可视区域前后多少屏的item在移出可视范围后不释放(默认移出可视区域的item会被释放)\n * initFocusId {int} 初始焦点,默认为0\n * slideSetting {SlideSetting} 页面滑动的设置, 目前SlideSetting有三个子类, 具体见 WidgetCommon 中的说明\n WholePageSlide\n @description 整页滚动的设置类\n @constructor {Object} {speed, easing, boundProtect}\n SeamlessSlide\n @description 无缝滚动的设置类\n @constructor {Object} {startPercent, endPercent, speed, easing, boundProtect}\n FixPositionSlide\n @description 固定位置滚动的设置类\n @constructor {Object} {fixPercent, speed, easing, boundProtect}\n * itemConfig {Function (item) => {takeOverSlide: true}} 返回item的配置信息\n * enableItemRenderBreak {boolean} 按键事件是否能打断item的描画, 默认为false\n * placeHolderSetting {Object} item描画可打断时, 显示的占位符\n {\n backgroundColor: 纯色占位符\n focusBackgroundColor: 获焦时的颜色\n borderRadius: 占位符圆角设置\n gap: 占位符之间的gap\n }\n * sendFocusRectEvent {boolean} item获焦时在焦点树上冒泡一个事件, MetroWidget接收到事件时会触发滚动操作, 一般用于嵌套\n 时的滚动\n\n * data {array} 数据列表\n * provideData {function} 获取数据的回调, 与data二选一\n * measures {function} (必选)返回item的模板信息的回调,\n * @params item {object} data中的数据\n * @return 模板信息,\n {\n left {int}: 绝对布局时的left,\n top {int}: 绝对布局时的top,\n width {int}: item的宽,\n height {int}: item的高,\n focusable {boolean}: item是否可以获得焦点,\n marginBottom {int}: item的下方margin,\n marginRight {int}: item的右方margin,\n findNextAnchor {object}: 自定义上下左右四条边寻找临近item的基准位置,值为0-1 {left: 0.5, right: 0.5, top: 0.5, bottom: 0.5}\n itemSlide {number}: item的滚动控制, 可选值为:\n METRO_WIDGET_CONST.ITEM_SLIDE.DISABLE 不滚动\n METRO_WIDGET_CONST.ITEM_SLIDE.ACT_ITEM_FOCUS 按照SlideSetting滚动\n METRO_WIDGET_CONST.ITEM_SLIDE.ACT_FOCUS_RECT_EVENT 按照子组件发送的focusRect事件滚动\n zIndex {int | object}: item的zIndex, 为object时可以分别设置{focus: 0, normal: 0}, 为number时则同时设置获焦和不获焦的zIndex,\n uid {string}: item的uid, 可以通过uid来设置焦点\n permanent {boolean}: 出去与是否保留\n }\n *\n * onFocus {function} 控件获取焦点的回调\n * onBlur {function} 控件失去焦点的回调\n * onEdge {function} 焦点移动到边缘时的回调\n * @params {object} edgeInfo {\n \"direction\": {EdgeDirection}边缘方向, \n \"rect\": 到达边缘时的区域{x: 0, y: 0, width: 0,height: 0}\n }\n onScroll {function} 滚动时的回调 (visibleStart, visibleRange, totalSize) => {}\n visibleStart: 可视区域的起点\n visibleRange: 可视区域大小(不含padding)\n totalSize: 所有item的总长\n * onFocusRectChange {() => void} 焦点区域变化的回调\n * onAllItemResizeDone {() => void} 所有item resize完成的回调\n * loadAll {boolean} 加载不显示的view,触控场景使用\n * flingPageWidth {}\n * flingPageEdge {}\n * disableClip {boolean} 取消显示范围的clipView\n \n * methods:\n getFocusBlockRef 获取此MetroWidget的 jsv-focus-block句柄,可以使用requestFocus完成获焦\n\n slideTo\n @description 滚动到指定位置\n @params {int} position 滚动目标位置\n @params {boolean} doAnim 是否做动画\n slideToItem\n @description 滚动到指定item\n @params {int} index 目标item的index, 注意与item的id区别, id是可获焦item的序号\n @params {boolean} doAnim 是否做动画\n slideToDiv\n @description 滚动到指定div, div必需是MetroWidget的子\n @params {object} div 目标div\n @params {boolean} doAnim 是否做动画\n setEnterFocusId\n @description 设置落焦时的焦点\n @params {int} id 落焦时的焦点id\n setEnterFocusRect\n @description 设置落焦时的焦点查找去区域\n @params {Object} rectInfo 焦点移入时的区域,MetroWidget 将会根据此区域寻找最近的item\n {\n direction: {EdgeDirection}\n rect: {\n x: {int},\n y: {int},\n width: {int},\n height: {int}\n }\n }\n setFocusId\n @description 设置焦点\n @params {int} id 焦点id\n @params {boolean} needSlide 是否需要滚动\n @params {boolean} doAnim 滚动时是否做动画\n @params {object} extraSetting 额外的参数设置\n {\n lockChildSlideEvent: {boolean} 设置焦点时忽略子发过来的滚动事件\n }\n setFocusByUid\n @description 通过uid设置焦点\n @params {int} id 焦点id\n @params {boolean} needSlide 是否需要滚动\n @params {boolean} doAnim 滚动时是否做动画\n @params {object} extraSetting 额外的参数设置\n {\n lockChildSlideEvent: {boolean} 设置焦点时忽略子发过来的滚动事件\n }\n refreshData\n @description 刷新数据, 只有存在provideData时才会生效. refresh时对比的array里的object, 所以可以建一个新的array, 只要保证数据成员还是之前的那个object就行\n @params {boolean} forceUpdate 是否强制刷新\n getVisibleItems\n @description 获取可视item的列表信息\n @return {start: 开始的index, end: 结束的index, dataList: 可视item的数据列表}\n lock\n @description 设置内部的锁\n @params {int} type 锁的类型, 通过|来实现多个类型的复合\n SLIDE: 滚动动画锁\n CHILD_SLIDE_EVENT: 子组件发送的滚动事件锁\n ON_KEY_DOWN: 按键锁\n @return {function} 解锁的函数\n unlock\n @description 解锁\n @params {int} type 参考lock的type参数\n moveFocus\n @description 移动焦点\n @params {int | string | EdgeDirection} 可传三种类型的值: \n 1. 方向键的数值 37|38|39|40, \n 2. 字符串 left|top|right|bottom,\n 3. EdgeDirection\n getCustomerDataSize\n @description 获取用户数据长度\n setZIndex\n @description 设置item的zIndex\n @params {int} index: item的index\n @params {int} blurZIndex: blur状态下的zIndex\n @params {int} focusZIndex: focus状态下的zIndex, 缺省时采用blurZIndex相同的值\n getTemplatePosition\n @description 获取item的template位置\n @params {int} index: item的index\n @return {object} {left: number, top: number, width: number, height: number,}\n lockSlide\n @description 锁定滚动\n unlockSlide\n @description 取消锁定\n \n slots:\n renderItem: 该slot用于描画每个单元格\n background: 该slot描画在item后, 一般用于描画需要跟随MetroWidget滚动的内容\n foreground: 该slot描画在item前, 一般用于描画需要跟随MetroWidget滚动的内容\n * 【技巧说明】\n * Q: 插槽props如何使用?\n * A: data: 当前item的数据\n * query: 获取一些额外信息的对象\n { \n id: {int} item的id,\n position: {Function} (index : int) => {left: 0, top: 0, width: 0, height: 0} \n 获取 item 相对 MetroWidget 左上角坐标\n templatePosition: {Function} (index : int) => {left: 0, top: 0, width: 0, height: 0} \n 获取 item 的布局坐标, 一般用于自定义滚动\n getCurrentFocusId: {Function} () => {id: 0, index: 0} \n 获取当前焦点信息,id 为在可获得焦点元素列表中的索引,index 为在所有元素列表中的索引\n slideTo: {Function} (targetPosition : int, doAnim : Boolean) => void \n 滚动到指定位置,注意这个位置是 item 的布局坐标,另外当某些item需要接管滚动时,itemConfig中takeOverSlide要为true。\n updateItemSize: {(index: number, newSize: {width: number, height: number}, animInfo: {anchor: number, duration: number, onEnd: Function}) => void} 更新item的尺寸, 目前仅在list模式下可用.\n params:\n index: 更新item的index,\n newSize: 新的尺寸\n animInfo: 动画设置\n anchor: 缩放锚点\n duration: 动画时长(毫秒)\n onEnd: 动画结束回调\n\n }\n * onItemEdge: 若单元格内另有可接管按键的控件(如MetroWidget),该控件到达边缘需要通知MetroWidget时的回调\n * onAction: 单元格内控件需要通过onAction.register方法向MetroWidget注册 item 的回调,回调函数有\n onFocus, onBlur, onClick, onWidgetEdge\n * \n * Q: 如何进行布局,定制每个格的尺寸?\n * A: 首先选定一个布局的方式,一列列地横向布局(HROIZONTAL)还是一行行地纵向(VERTICAL)布局,设置给属性direction\n * 然后将单元格尺寸反馈器(函数)设置到measures中,进行布局时,组件会回调measures函数获得每个单元格的尺寸,\n * 当一列放满单元格后(如果是纵向布局,则是一行放满后),自动换列去布局下一列。\n *\n * Q: 单元格的普通状态,焦点状态,失焦状态如何渲染?\n * A: 在单元的空间中通过往onAction注册的onFocus,onBlur控制显示\n *\n * Q: 控件中的导航处理(上下左右,OK键)需要什么响应的开发?\n * A: 上下左右键已经由控件接管,不需要开发者而外处理,上下左右键会触发翻页时间,翻页的形式由属性slideStyle来定制。\n * 另外,通过OnClick属性可以注册按键回调函数,来处理用户的OK键动作。\n *\n * Q: 边缘格获取焦点放大后显示不全?\n * A: 设置padding,注意item的排布范围是控件的宽高减去对应的padding\n *\n * Q: 焦点怎么移出控件?\n * A: 当焦点移动到控件边缘时,会调用onEdge回调。在回调中通过参数传递的值来决定焦点转移的行为\n * \n * Q: item内是可获焦的元素时该如何处理?\n * A: 焦点处理: item内的元素需要在注册的onFocus和onBlue回调中管理焦点. 即在onFocus时把焦点设置到内部的可获焦节点;\n onBlur时将焦点给回父MetroWidget, 注意此时是焦点树上的子节点往父节点切换, 此时为了把子节点blur掉, \n requestFocus函数需要传递一个false参数\n * 注意点:\n * 1. MetroWidget中存在一些处理依赖vue的callback执行顺序, 因此涉及更改MetroWidget状态的处理不要在watchPostEffect中调用\n-->\n\n\n\n\n */\nconst _sfc_main$F = {\n __name: \"MetroWidget\",\n props: {\n padding: {\n type: Object,\n default() {\n return {\n top: 0,\n left: 0,\n right: 0,\n bottom: 0\n };\n }\n },\n direction: {\n type: Symbol,\n default: HORIZONTAL\n },\n height: {\n type: Number,\n required: true\n },\n width: {\n type: Number,\n required: true\n },\n onEdge: {\n type: Function,\n default: null\n },\n onFocus: {\n type: Function,\n default: null\n },\n onBlur: {\n type: Function,\n default: null\n },\n loadAll: {\n type: Boolean,\n default: false\n },\n flingPageWidth: {\n type: Number,\n default: -1\n },\n flingPageEdge: {\n type: Number,\n default: 1 / 4\n },\n measures: {\n type: Function,\n required: true\n },\n initFocusId: {\n type: Number,\n default: 0\n },\n data: {\n type: Array\n },\n left: {\n type: Number,\n default: 0\n },\n top: {\n type: Number,\n default: 0\n },\n name: {\n type: String\n },\n supportHistoryPath: {\n type: Boolean,\n default: true\n },\n itemConfig: {\n type: Function\n },\n onFocusChange: {\n type: Function\n },\n slideSetting: {\n type: SlideSetting,\n default() {\n return new SeamlessSlide({ startPercent: 0.2, endPercent: 0.8 });\n }\n },\n layoutType: {\n type: String,\n default: \"relative\"\n },\n enableItemRenderBreak: {\n type: Boolean,\n default: false\n },\n provideData: {\n type: Function\n },\n placeHolderSetting: {\n type: Object,\n default() {\n return {\n backgroundColor: \"rgba(255,255,255,0.5)\"\n };\n }\n },\n sendFocusRectEvent: {\n type: Boolean,\n default: false\n },\n keepTraceRange: {\n type: Number,\n default: 0\n },\n onScroll: {\n type: Function\n },\n focusMoveType: {\n type: Number,\n default: 0\n },\n disableClip: {\n type: Boolean,\n default: false\n },\n onFocusRectChange: {\n type: Function\n },\n onAllItemResizeDone: {\n type: Function\n }\n // enableTouch: {\n // type: Boolean,\n // default: false,\n // },\n },\n setup(__props, { expose }) {\n const props = __props;\n const renderBreakKey = props.enableItemRenderBreak ? RENDER_ITEM_BREAK_KEY : \"\";\n const itemRender = ref(!props.enableItemRenderBreak);\n const locateDiv = shallowRef(null);\n const renderData = shallowRef([]);\n const slideDiv = shallowRef(null);\n const slideDivLeft = ref(0);\n const slideDivTop = ref(0);\n const focusNode = shallowRef(null);\n const pageUpdateToken = ref(0);\n const touchDiv = shallowRef(null);\n const touchDivSize = reactive({\n width: 0,\n height: 0\n });\n const normalizedPlaceHolder = computed(() => {\n return {\n gap: props.placeHolderSetting.gap ?? 0,\n borderRadius: props.placeHolderSetting.borderRadius ?? 0,\n backgroundColor: props.placeHolderSetting.backgroundColor,\n focusBackgroundColor: props.placeHolderSetting.focusBackgroundColor ?? props.placeHolderSetting.backgroundColor\n };\n });\n const {\n widgetRectInfo,\n focusBlockOnFocus,\n focusBlockOnBlur,\n focusBlockOnKeyDown,\n focusBlockOnCustomEvent,\n _onFocusableItemEdge,\n exportObject,\n onTouchDown,\n onTouchRelease,\n currentFocusIndex,\n modeForExport\n } = setup(\n props,\n itemRender,\n locateDiv,\n renderData,\n slideDiv,\n slideDivLeft,\n slideDivTop,\n focusNode,\n pageUpdateToken,\n touchDiv,\n touchDivSize,\n \"common\"\n );\n expose(exportObject);\n return (_ctx, _cache) => {\n const _component_jsv_focus_block = resolveComponent(\"jsv-focus-block\");\n return openBlock(), createElementBlock(\"div\", {\n style: normalizeStyle({\n left: __props.left,\n top: __props.top,\n width: __props.width,\n height: __props.height,\n overflow: __props.disableClip ? null : \"hidden\"\n })\n }, [\n createElementVNode(\"div\", {\n style: normalizeStyle({\n left: unref(widgetRectInfo).padding.left,\n top: unref(widgetRectInfo).padding.top\n })\n }, [\n createElementVNode(\"div\", {\n id: \"slideDiv\",\n key: \"slideDiv\",\n ref_key: \"slideDiv\",\n ref: slideDiv,\n style: normalizeStyle({\n left: slideDivLeft.value,\n top: slideDivTop.value\n })\n }, [\n createElementVNode(\"div\", {\n ref_key: \"touchDiv\",\n ref: touchDiv,\n style: normalizeStyle({\n width: touchDivSize.width,\n height: touchDivSize.height\n }),\n onJsvTouchend: _cache[0] || (_cache[0] = (...args) => unref(onTouchRelease) && unref(onTouchRelease)(...args))\n }, [\n createElementVNode(\"div\", null, [\n renderSlot(_ctx.$slots, \"background\")\n ]),\n createElementVNode(\"div\", {\n ref_key: \"locateDiv\",\n ref: locateDiv\n }, [\n createVNode(_component_jsv_focus_block, {\n ref_key: \"focusNode\",\n ref: focusNode,\n name: __props.name,\n onAction: {\n onFocus: unref(focusBlockOnFocus),\n onBlur: unref(focusBlockOnBlur),\n onKeyDown: unref(focusBlockOnKeyDown),\n onCustomEvent: unref(focusBlockOnCustomEvent)\n }\n }, {\n default: withCtx(() => [\n (openBlock(true), createElementBlock(Fragment, null, renderList(unref(renderData), (item, index) => {\n return openBlock(), createElementBlock(\"div\", {\n key: pageUpdateToken.value + \"_\" + item.index,\n ref_for: true,\n ref: item.divRef,\n style: normalizeStyle({\n left: item.templateInfo.left,\n top: item.templateInfo.top,\n width: item.templateInfo.width,\n height: item.templateInfo.height,\n zIndex: item.renderStyle.zIndex\n }),\n onClick: item.onTap.value\n }, [\n !__props.enableItemRenderBreak || item.mounted.value || itemRender.value ? (openBlock(), createElementBlock(\"div\", {\n key: unref(renderBreakKey),\n ref_for: true,\n ref: item.slotRef,\n id: `${__props.name}_${index}`\n }, [\n createVNode(_sfc_main$G, { key: \"__QcodeJsviewFreezeComponent\" }, {\n default: withCtx(() => [\n renderSlot(_ctx.$slots, \"renderItem\", {\n data: item.customerData,\n onEdge: unref(_onFocusableItemEdge),\n onAction: item.registerObj,\n query: item.query,\n onItemEdge: unref(_onFocusableItemEdge)\n })\n ]),\n _: 2\n }, 1024)\n ], 8, [\"id\"])) : createCommentVNode(\"\", true),\n __props.enableItemRenderBreak && __props.placeHolderSetting && !item.mounted.value ? (openBlock(), createElementBlock(\"div\", {\n key: 1,\n style: normalizeStyle({\n width: item.renderStyle.width - unref(normalizedPlaceHolder).gap,\n height: item.renderStyle.height - unref(normalizedPlaceHolder).gap,\n backgroundColor: unref(currentFocusIndex) == item.index && unref(modeForExport) == 2 ? unref(normalizedPlaceHolder).focusBackgroundColor : unref(normalizedPlaceHolder).backgroundColor,\n borderRadius: unref(normalizedPlaceHolder).borderRadius\n })\n }, null, 4)) : createCommentVNode(\"\", true)\n ], 12, [\"onClick\"]);\n }), 128))\n ]),\n _: 3\n }, 8, [\"name\", \"onAction\"])\n ], 512)\n ], 36),\n createElementVNode(\"div\", null, [\n renderSlot(_ctx.$slots, \"foreground\")\n ])\n ], 4)\n ], 4)\n ], 4);\n };\n }\n};\n\n//!\n//! utils/JsViewEngineWidget/MetroWidget/ListWidget.vue;\n//!\n/*! <!--\n 只显示单列/行的MetroWidget\n-->\n\n\n\n */\nconst _sfc_main$E = {\n __name: \"ListWidget\",\n props: {\n padding: {\n type: Object,\n default() {\n return {\n top: 0,\n left: 0,\n right: 0,\n bottom: 0\n };\n }\n },\n direction: {\n type: Symbol,\n default: HORIZONTAL\n },\n height: {\n type: Number,\n required: true\n },\n width: {\n type: Number,\n required: true\n },\n onEdge: {\n type: Function,\n default: null\n },\n onFocus: {\n type: Function,\n default: null\n },\n onBlur: {\n type: Function,\n default: null\n },\n loadAll: {\n type: Boolean,\n default: false\n },\n flingPageWidth: {\n type: Number,\n default: -1\n },\n flingPageEdge: {\n type: Number,\n default: 1 / 4\n },\n measures: {\n type: Function,\n required: true\n },\n initFocusId: {\n type: Number,\n default: 0\n },\n data: {\n type: Array\n },\n left: {\n type: Number,\n default: 0\n },\n top: {\n type: Number,\n default: 0\n },\n name: {\n type: String\n },\n supportHistoryPath: {\n type: Boolean,\n default: true\n },\n itemConfig: {\n type: Function\n },\n onFocusChange: {\n type: Function\n },\n slideSetting: {\n type: SlideSetting,\n default() {\n return new SeamlessSlide({ startPercent: 0.2, endPercent: 0.8 });\n }\n },\n layoutType: {\n type: String,\n default: \"relative\"\n },\n enableItemRenderBreak: {\n type: Boolean,\n default: false\n },\n provideData: {\n type: Function\n },\n placeHolderSetting: {\n type: Object,\n default() {\n return {\n backgroundColor: \"rgba(255,255,255,0.5)\"\n };\n }\n },\n sendFocusRectEvent: {\n type: Boolean,\n default: false\n },\n keepTraceRange: {\n type: Number,\n default: 0\n },\n onScroll: {\n type: Function\n },\n focusMoveType: {\n type: Number,\n default: 0\n },\n disableClip: {\n type: Boolean,\n default: false\n },\n onFocusRectChange: {\n type: Function\n },\n onAllItemResizeDone: {\n type: Function\n }\n // enableTouch: {\n // type: Boolean,\n // default: false,\n // },\n },\n setup(__props, { expose }) {\n const props = __props;\n const renderBreakKey = props.enableItemRenderBreak ? RENDER_ITEM_BREAK_KEY : \"\";\n const itemRender = ref(!props.enableItemRenderBreak);\n const locateDiv = shallowRef(null);\n const renderData = shallowRef([]);\n const slideDiv = shallowRef(null);\n const slideDivLeft = ref(0);\n const slideDivTop = ref(0);\n const focusNode = shallowRef(null);\n const pageUpdateToken = ref(0);\n const touchDiv = shallowRef(null);\n const touchDivSize = reactive({\n width: 0,\n height: 0\n });\n const normalizedPlaceHolder = computed(() => {\n return {\n gap: props.placeHolderSetting.gap ?? 0,\n borderRadius: props.placeHolderSetting.borderRadius ?? 0,\n backgroundColor: props.placeHolderSetting.backgroundColor,\n focusBackgroundColor: props.placeHolderSetting.focusBackgroundColor ?? props.placeHolderSetting.backgroundColor\n };\n });\n const {\n widgetRectInfo,\n focusBlockOnFocus,\n focusBlockOnBlur,\n focusBlockOnKeyDown,\n focusBlockOnCustomEvent,\n _onFocusableItemEdge,\n exportObject,\n onTouchDown,\n onTouchRelease,\n currentFocusIndex\n } = setup(\n props,\n itemRender,\n locateDiv,\n renderData,\n slideDiv,\n slideDivLeft,\n slideDivTop,\n focusNode,\n pageUpdateToken,\n touchDiv,\n touchDivSize,\n \"list\"\n );\n expose(exportObject);\n return (_ctx, _cache) => {\n const _component_jsv_focus_block = resolveComponent(\"jsv-focus-block\");\n return openBlock(), createElementBlock(\"div\", {\n style: normalizeStyle({\n left: __props.left,\n top: __props.top,\n width: __props.width,\n height: __props.height,\n overflow: __props.disableClip ? null : \"hidden\"\n })\n }, [\n createElementVNode(\"div\", {\n style: normalizeStyle({\n left: unref(widgetRectInfo).padding.left,\n top: unref(widgetRectInfo).padding.top\n })\n }, [\n createElementVNode(\"div\", {\n id: \"slideDiv\",\n key: \"slideDiv\",\n ref_key: \"slideDiv\",\n ref: slideDiv,\n style: normalizeStyle({\n left: slideDivLeft.value,\n top: slideDivTop.value\n })\n }, [\n createElementVNode(\"div\", {\n ref_key: \"touchDiv\",\n ref: touchDiv,\n style: normalizeStyle({\n width: touchDivSize.width,\n height: touchDivSize.height\n }),\n onJsvTouchend: _cache[0] || (_cache[0] = (...args) => unref(onTouchRelease) && unref(onTouchRelease)(...args))\n }, [\n createElementVNode(\"div\", null, [\n renderSlot(_ctx.$slots, \"background\")\n ]),\n createElementVNode(\"div\", {\n ref_key: \"locateDiv\",\n ref: locateDiv\n }, [\n createVNode(_component_jsv_focus_block, {\n ref_key: \"focusNode\",\n ref: focusNode,\n name: __props.name,\n onAction: {\n onFocus: unref(focusBlockOnFocus),\n onBlur: unref(focusBlockOnBlur),\n onKeyDown: unref(focusBlockOnKeyDown),\n onCustomEvent: unref(focusBlockOnCustomEvent)\n }\n }, {\n default: withCtx(() => [\n (openBlock(true), createElementBlock(Fragment, null, renderList(unref(renderData), (item, index) => {\n return openBlock(), createElementBlock(\"div\", {\n key: pageUpdateToken.value + \"_\" + item.index,\n ref_for: true,\n ref: item.divRef,\n style: normalizeStyle({\n left: item.templateInfo.left,\n top: item.templateInfo.top,\n width: item.templateInfo.width,\n height: item.templateInfo.height,\n zIndex: item.renderStyle.zIndex\n }),\n onClick: item.onTap.value\n }, [\n !__props.enableItemRenderBreak || item.mounted.value || itemRender.value ? (openBlock(), createElementBlock(\"div\", {\n key: unref(renderBreakKey),\n ref_for: true,\n ref: item.slotRef,\n id: `${__props.name}_${index}`\n }, [\n renderSlot(_ctx.$slots, \"renderItem\", {\n data: item.customerData,\n onEdge: unref(_onFocusableItemEdge),\n onAction: item.registerObj,\n query: item.query,\n onItemEdge: unref(_onFocusableItemEdge)\n })\n ], 8, [\"id\"])) : createCommentVNode(\"\", true),\n __props.enableItemRenderBreak && __props.placeHolderSetting && !item.mounted.value ? (openBlock(), createElementBlock(\"div\", {\n key: 1,\n style: normalizeStyle({\n width: item.renderStyle.width - unref(normalizedPlaceHolder).gap,\n height: item.renderStyle.height - unref(normalizedPlaceHolder).gap,\n backgroundColor: unref(currentFocusIndex) == item.index ? unref(normalizedPlaceHolder).focusBackgroundColor : unref(normalizedPlaceHolder).backgroundColor,\n borderRadius: unref(normalizedPlaceHolder).borderRadius\n })\n }, null, 4)) : createCommentVNode(\"\", true)\n ], 12, [\"onClick\"]);\n }), 128))\n ]),\n _: 3\n }, 8, [\"name\", \"onAction\"])\n ], 512)\n ], 36),\n createElementVNode(\"div\", null, [\n renderSlot(_ctx.$slots, \"foreground\")\n ])\n ], 4)\n ], 4)\n ], 4);\n };\n }\n};\n\n//!\n//! utils/JsViewEngineWidget/JsvFocus/JsvFocusHub.ts;\n//!\nclass JsvFocusHubApi {\n _FocusHub;\n // JsvFocusableNode中的class Hub\n constructor(focusableHubRef) {\n this._FocusHub = focusableHubRef;\n }\n // 内部接口\n getOrigin() {\n return this._FocusHub;\n }\n /**\n * setFocus\n * \n * 设置焦点,在焦点对应的 JsvFocusBlock 完成mounted之前设置的话,\n * 会在JsvFocusBlock完成mounted后立即设上焦点 \n * \n * @param {string} focusName \n * 当前命名空间的名字/全局命名空间的名字。\n * 当前命名空间的名字: 是指和当前节点相同命名空间的名字(首字符不为\".\")。\n * 对于二级命名空间,可以使用 \"{namespace}.{name}\"的方式。\n * 全局命名空间的名字: 是指通过getName()函数获取后再附加下级节点的名字。\n * *请注意: 请避免手写的全局命名空间名字,防止在二次集成时可能会出现名字找不到的问题。\n * @param {boolean} passToChild 保持/恢复子焦点的聚焦状态(若此焦点的子焦点为聚焦状态,\n * 当本焦点从失焦状态恢复为聚焦状态时,子焦点也自动回复为聚焦状态),默认为不保持/恢复。\n */\n setFocus(focusName, passToChild = false) {\n this._FocusHub.setFocus(focusName, passToChild);\n }\n /**\n * returnFocusToParent\n * \n * 将焦点从当前节点还给其父JsvFocusBlock节点 \n */\n returnFocusToParent() {\n this._FocusHub.returnFocusToParent();\n }\n /**\n * getCurrentFocus\n * \n * 获取当前焦点的的 focusName 信息,用于后续的进行的 setFocus 操作\n * (注意, 不带NameSpace)\n * \n * @return {string} 当前焦点的focusName\n */\n getCurrentFocus() {\n return this._FocusHub.getCurrentFocus();\n }\n /**\n * getLastFocus\n * \n * 获得切到到当前焦点前的上一个焦点的name(注意, 不带NameSpace), \n * 注意:如果上一次的焦点已经不在dom树时, 返回null\n * \n * @return {string} 焦点的focusName\n */\n getLastFocus() {\n return this._FocusHub.getLastFocus();\n }\n /**\n * getDeactivedPageFocus\n * \n * 在对一个keep-alive的界面进行deactive后,为了未来将其active时恢复离开时的焦点时使用。\n * 在 onDeactive 回调中调用\n * 注意: 只有当一个有焦点的keep-alive倍deactive时才能获得\n * \n * @return {string} 焦点的focusName\n */\n getDeactivedPageFocus() {\n return this._FocusHub.getDeactivedPageFocus();\n }\n /**\n * getNameSpace\n * \n * 获取当前FocusHub的nameSpace\n * \n * @return {string} 当前FocusHub的nameSpace\n */\n getNameSpace() {\n return this._FocusHub.getNameSpace();\n }\n /**\n * enableFocusTrace\n * \n * 调试API: 启用焦点变化时的回调日志,通过console.log打出,其中含产生此行为的调用堆栈\n * \n * @param {boolean} needCallStack 是否打印焦点变化时产生变化的api调用的堆栈,例如setFocus, unmount之类\n */\n enableFocusTrace(needCallStack = true) {\n this._FocusHub.enableFocusTrace(needCallStack);\n }\n /**\n * printAllFocusable\n * \n * 调试API: console.log当前 Hub 中所有的节点引用,只打印当前NameSpace的内容\n */\n printAllFocusable() {\n this._FocusHub.printAllFocusable();\n }\n /**\n * getCurrentFocusStack\n * \n * 调试API: console.log当前焦点的焦点链条(从root到此节点的链条)\n * \n * @return {Array} 当前焦点的链条队列\n */\n getCurrentFocusStack() {\n return this._FocusHub.getCurrentFocusStack();\n }\n}\nconst ROOT_HUB_PROVIDE_NAME = \"__jsvFocusRootHub__\";\nconst HUB_NS_PROVIDE_NAME = \"__jsvFocusNameSpace__\";\n\n//!\n//! utils/JsViewEngineWidget/JsvFocus/JsvFocusBlock.vue;\n//!\n/*! <!--\n * props:\n * onKeyUp: 按键抬起回调\n * @params keyEvent\n * @return 是否消耗 true: 已消耗,不再冒泡; false: 继续冒泡\n * onKeyDown: 按键落下回调\n * @params keyEvent\n * @return 是否消耗 true: 已消耗,不再冒泡; false: 继续冒泡\n * onFocus: 获得焦点回调\n * onBlur: 失去焦点回调\n * onDispatchKeyDown: 分发按键落下事件回调\n * @params keyEvent\n * @return 是否消耗 true: 已消耗,不再分发; false: 继续分发\n * onDispatchKeyUp: 分发按键抬起事件回调\n * @params keyEvent\n * @return 是否消耗 true: 已消耗,不再分发; false: 继续分发\n * name: 用于设置焦点的id\n * namespace: 焦点id的命名空间\n * autoFocus: 当Mount后自动获得焦点, 设置为\"exact\",将把其子节点的焦点给抢过来\n * methods:\n * async getFullName\n @description 获取其从根节点开始到本节点的全名\n @params {string} name 节点的id名\n * async requestFocus\n @description 赋予焦点\n @params {boolean} passToChild 焦点由子往父时是否保持子的焦点\n-->\n\n\n\n\n */\nconst _sfc_main$D = {\n __name: \"JsvFocusBlock\",\n props: {\n name: String,\n namespace: String,\n autoFocus: String,\n onAction: Object,\n onDispatchKeyUp: Function,\n onDispatchKeyDown: Function,\n onKeyUp: Function,\n onKeyDown: Function,\n onFocus: Function,\n onBlur: Function,\n onCustomEvent: Function\n },\n setup(__props, { expose }) {\n const props = __props;\n if (props.namespace && props.name) {\n throw new Error(\"JsvFocusBlock Error: Either name or namespace can be set.\");\n }\n if (props.namespace === \"\") {\n throw new Error(\"JsvFocusBlock Error: Invalid namespace of empty value.\");\n }\n if (props.namespace && props.namespace.indexOf(\".\") >= 0) {\n throw new Error(\n 'JsvFocusBlock Error: Invalid namespace of \"' + props.namespace + '\". namespace must not contains \".\"'\n );\n }\n if (props.name && props.name.indexOf(\".\") >= 0) {\n throw new Error(\n 'JsvFocusBlock Error: Invalid name of \"' + props.name + '\". name must not contains \".\"'\n );\n }\n let actionCallback = {};\n let fDivRef = shallowRef(null);\n let focusNodeRef = null;\n if (props.namespace) {\n const originNameSpace = inject(HUB_NS_PROVIDE_NAME);\n let newNameSpace;\n if (originNameSpace == null) {\n newNameSpace = props.namespace;\n } else {\n newNameSpace = `${originNameSpace}.${props.namespace}`;\n }\n provide(HUB_NS_PROVIDE_NAME, newNameSpace);\n }\n const getFullName = async () => {\n const node = toRaw(fDivRef.value)?.FocusNodeRef;\n await node?.waitMounted();\n return node?.getFullName();\n };\n const requestFocus = async (passToChild) => {\n const node = toRaw(fDivRef.value)?.FocusNodeRef;\n await node?.waitMounted();\n node?.requestFocus(passToChild);\n };\n const bubbleCustomEvent = (ev) => {\n toRaw(fDivRef.value)?.FocusNodeRef.bubbleCustomEvent(ev);\n };\n const returnFocusToParent = (ev) => {\n toRaw(fDivRef.value)?.FocusNodeRef.ReturnFocusToParent(ev);\n };\n const exportObject = {\n getFullName,\n requestFocus,\n bubbleCustomEvent,\n returnFocusToParent\n };\n const _mountToFocusSystem = () => {\n const focusNode = toRaw(fDivRef.value)?.FocusNodeRef;\n focusNode.jsvVueComponent = exportObject;\n actionCallback.onDispatchKeyDown = props.onDispatchKeyDown || props.onAction?.onDispatchKeyDown;\n if (actionCallback.onDispatchKeyDown) {\n focusNode.setDispatchKeyDown(_onDispatchKeyDown);\n }\n actionCallback.onDispatchKeyUp = props.onDispatchKeyUp || props.onAction?.onDispatchKeyUp;\n if (actionCallback.onDispatchKeyUp) {\n focusNode.setDispatchKeyUp(_onDispatchKeyUp);\n }\n actionCallback.onKeyDown = props.onKeyDown || props.onAction?.onKeyDown;\n if (actionCallback.onKeyDown) {\n focusNode.setOnKeyDown(_onKeyDown);\n }\n actionCallback.onKeyUp = props.onKeyUp || props.onAction?.onKeyUp;\n if (actionCallback.onKeyUp) {\n focusNode.setOnKeyUp(_onKeyUp);\n }\n actionCallback.onFocus = props.onFocus || props.onAction?.onFocus;\n if (actionCallback.onFocus) {\n focusNode.setOnFocus(_onFocus);\n }\n actionCallback.onBlur = props.onBlur || props.onAction?.onBlur;\n if (actionCallback.onBlur) {\n focusNode.setOnBlur(_onBlur);\n }\n actionCallback.onCustomEvent = props.onCustomEvent || props.onAction?.onCustomEvent;\n if (actionCallback.onCustomEvent) {\n focusNode.setOnCustomEvent(_onCustomEvent);\n }\n let self = toRaw(fDivRef.value);\n let parent = self.parentNode;\n while (parent) {\n if (self.FocusNodeRef.GetParentPage()) {\n break;\n }\n if (parent.tagName !== \"FDIV\") {\n parent = parent.parentNode;\n continue;\n }\n self.FocusNodeRef.setParent(parent.FocusNodeRef);\n break;\n }\n };\n const _onDispatchKeyDown = (ev) => {\n ev.ownerNode = exportObject;\n return actionCallback?.onDispatchKeyDown(ev) || false;\n };\n const _onDispatchKeyUp = (ev) => {\n ev.ownerNode = exportObject;\n return actionCallback?.onDispatchKeyUp(ev) || false;\n };\n const _onKeyDown = (ev) => {\n ev.ownerNode = exportObject;\n return actionCallback?.onKeyDown(ev) || false;\n };\n const _onKeyUp = (ev) => {\n ev.ownerNode = exportObject;\n return actionCallback?.onKeyUp(ev) || false;\n };\n const _onFocus = () => {\n actionCallback?.onFocus(exportObject);\n };\n const _onBlur = () => {\n actionCallback?.onBlur(exportObject);\n };\n const _onCustomEvent = (ev) => {\n return actionCallback?.onCustomEvent(ev) || false;\n };\n onMounted(() => {\n focusNodeRef = toRaw(fDivRef.value)?.FocusNodeRef;\n _mountToFocusSystem();\n if (!!props.autoFocus || props.autoFocus === \"\") {\n requestFocus(props.autoFocus !== \"exact\");\n }\n });\n onUnmounted(() => {\n focusNodeRef?.onUnMount();\n if (focusNodeRef?.jsvVueComponent) {\n focusNodeRef.jsvVueComponent = void 0;\n }\n focusNodeRef = null;\n });\n onActivated(() => {\n focusNodeRef = toRaw(fDivRef.value)?.FocusNodeRef;\n _mountToFocusSystem();\n if (!!props.autoFocus || props.autoFocus === \"\") {\n requestFocus(props.autoFocus !== \"exact\");\n }\n });\n onDeactivated(() => {\n focusNodeRef?.onUnMount(true);\n if (focusNodeRef?.jsvVueComponent) {\n focusNodeRef.jsvVueComponent = void 0;\n }\n focusNodeRef = null;\n });\n expose(exportObject);\n return (_ctx, _cache) => {\n const _component_fdiv = resolveComponent(\"fdiv\");\n return openBlock(), createBlock(_component_fdiv, {\n ref_key: \"fDivRef\",\n ref: fDivRef,\n fname: __props.name,\n \"new-namespace\": __props.namespace\n }, {\n default: withCtx(() => [\n renderSlot(_ctx.$slots, \"default\")\n ]),\n _: 3\n }, 8, [\"fname\", \"new-namespace\"]);\n };\n }\n};\n\n//!\n//! utils/JsViewEngineWidget/JsvFocus/JsvFocusManager.js;\n//!\nconst useFocusHub = (withNameSpace) => {\n if (withNameSpace) {\n let nameSpace = inject(HUB_NS_PROVIDE_NAME);\n if (nameSpace && nameSpace.length > 0) {\n return new JsvFocusHubApi(inject(ROOT_HUB_PROVIDE_NAME).getOrigin().wrapWithNameSpace(nameSpace));\n }\n }\n return inject(ROOT_HUB_PROVIDE_NAME);\n};\nclass JsvFocusManager {\n constructor() {\n }\n install(app, ...options) {\n console.log(\"JsvFocusManager install\");\n if (typeof options[0] !== \"string\") {\n throw new Error(\n \"JsvFocusManager Error: 2nd argument is required. Such as: app.use(FocusManager, '#app')\"\n );\n }\n const doAppMount = this.$_hookMount(app, options[0]);\n app.mount = doAppMount;\n app.component(\"JsvFocusBlock\", _sfc_main$D);\n app.config.globalProperties.$jsvFocusManager = this;\n app.provide(HUB_NS_PROVIDE_NAME, null);\n app.provide(ROOT_HUB_PROVIDE_NAME, new JsvFocusHubApi(this.$_topFDiv.getHub()));\n }\n getCurrentFocusStack() {\n let focus_stack = this.$_topFDiv?.getHub()?.getCurrentFocusStack();\n return focus_stack ? focus_stack : [];\n }\n // declareAlias(alias, blockName) {\n // if(typeof alias !== 'string') {\n // throw new Error('JsvFocusManager Error: 1st argument must be a string as alias.')\n // }\n // if(typeof blockName !== 'string') {\n // throw new Error('JsvFocusManager Error: 2nd argument must be a string as block name or namespace.')\n // }\n // if(this.#aliasMap.hasOwnProperty(alias)) {\n // throw new Error('JsvFocusManager Error: \"' + '\" has been decleared.')\n // }\n // this.#aliasMap[alias] = blockName\n // }\n // changeFocusTo(nameOrSpace, name, exact) {\n // if(this.#aliasMap.hasOwnProperty(nameOrSpace)) {\n // nameOrSpace = this.#aliasMap[nameOrSpace]\n // }\n // if(name && this.#aliasMap.hasOwnProperty(name)) {\n // name = this.#aliasMap[name]\n // }\n // if(name) {\n // nameOrSpace += (\".\" + name)\n // }\n // if(!this.$_topFDiv) {\n // console.warn(\"JsvFocusManager Warning: Failed to change focus to \" + nameOrSpace)\n // return\n // }\n // const rootNodeRef = this.$_topFDiv.getElement().FocusNodeRef;\n // const focusNode = rootNodeRef.getNodeByName(nameOrSpace);\n // if(!focusNode) {\n // console.warn(\"JsvFocusManager Warning: Failed to find focus to \" + nameOrSpace)\n // return\n // }\n // focusNode.requestFocus(exact);\n // }\n $_hookMount(app, rootNodeId) {\n rootNodeId = rootNodeId.replace(\"#\", \"\");\n this.$_topFDiv = document.jsvInitFDivRoot(rootNodeId);\n this.$_appMount = app.mount.bind(app);\n return this.$_doAppMount.bind(this);\n }\n $_doAppMount(rootContainer) {\n const rootComponent = this.$_appMount(rootContainer);\n this.$_topFDiv.onMounted();\n return rootComponent;\n }\n // #aliasMap = {}\n $_appMount = void 0;\n $_topFDiv = void 0;\n}\nfunction jsvCreateFocusManager() {\n return new JsvFocusManager();\n}\n\n//!\n//! utils/JsViewEngineWidget/index.js;\n//!\n\n//!\n//! utils/JsViewPlugin/JsvAccount/JsvAccount.js;\n//!\nlet AccountPluginInfo = {\n //downloadUrl:\"http://192.168.0.104:8080/plugin/JsvAccount-2.0.zip\", //插件下载地址\n packageName: \"com.qcode.account\",\n name: \"账号系统\",\n version: \"1.0.1\",\n //插件需要的最低版本号\n versionCodeMin: 1,\n versionCodeMax: 1,\n bridgeName: \"jsvAccountBridge\",\n //插件bridge注册到jsview的名称\n className: \"com.qcode.account.JsvAccount\",\n //插件初始化类名称\n initMethod: \"createInstance\",\n //插件初始化方法\n listener: \"top.JsvAccountPluginLoadResult\"\n //插件加载结果回调\n //md5:\"984c59e1100693e2eee34615ea6c70b7\"\n};\nclass account {\n constructor(callback) {\n this.loginLogoutCallback = [];\n this.mMarketCode = this.getMarketCode();\n window.top.JsvAccountPluginLoadResult = function(result) {\n console.log(result);\n if (result != null) {\n let obj = JSON.parse(result);\n if (obj) {\n if (obj.status === 1) {\n callback(\"success\");\n } else {\n callback(\"fail\");\n }\n }\n }\n this.onEvent();\n }.bind(this);\n if (this.mMarketCode === \"109\") {\n if (typeof window.jsvAccountBridge == \"undefined\" || !window.jsvAccountBridge) {\n this.loadJsvAccountPlugin();\n } else {\n callback(\"success\");\n this.onEvent();\n }\n } else {\n callback(\"fail\");\n }\n }\n getMarketCode() {\n let json_str = null;\n if (window.jJsvRuntimeBridge && typeof window.jJsvRuntimeBridge.getAppInfo === \"function\") {\n json_str = window.jJsvRuntimeBridge.getAppInfo();\n } else if (window.jContentShellJBridge && typeof window.jContentShellJBridge.getAppInfo === \"function\") {\n json_str = window.jContentShellJBridge.getAppInfo();\n }\n if (json_str != null) {\n let json_obj = JSON.parse(json_str);\n return json_obj.MarketCode;\n }\n return \"109\";\n }\n configAccountPluginInfo() {\n if (this.mMarketCode === \"103\") {\n AccountPluginInfo = {\n //downloadUrl:\"http://192.168.0.104:8080/plugin/JsvAccount.zip\", //插件下载地址\n packageName: \"com.qcode.account\",\n name: \"账号系统\",\n version: \"1.1.1\",\n //插件需要的最低版本号\n versionCodeMin: 111,\n versionCodeMax: 111,\n bridgeName: \"jsvAccountBridge\",\n //插件bridge注册到jsview的名称\n className: \"com.qcode.account.JsvAccount\",\n //插件初始化类名称\n initMethod: \"createInstance\",\n //插件初始化方法\n listener: \"top.JsvAccountPluginLoadResult\"\n //插件加载结果回调\n //md5:\"984c59e1100693e2eee34615ea6c70b7\"\n };\n }\n }\n loadJsvAccountPlugin() {\n console.log(\"loadJsvAccountPlugin 1\");\n if (typeof window.jPluginManagerBridge == \"undefined\" || !window.jPluginManagerBridge) {\n return;\n }\n console.log(\"loadJsvAccountPlugin 2\");\n window.jPluginManagerBridge.LoadPlugin(JSON.stringify(AccountPluginInfo));\n }\n onEvent() {\n if (!!window.JsView) {\n window.JMD.subscribe(\"JsvAccount\", function(event_data) {\n console.log(\"event data:\" + event_data);\n let data_obj = JSON.parse(event_data);\n let event_obj = JSON.parse(data_obj.param);\n switch (event_obj.event) {\n case \"onLoginLogout\":\n for (var i = 0; i < this.loginLogoutCallback.length; i++) {\n this.loginLogoutCallback[i](event_obj.data);\n }\n break;\n default:\n break;\n }\n }.bind(this));\n }\n }\n registerLoginLogoutCallback(callback) {\n for (var i = 0; i < this.loginLogoutCallback.length; i++) {\n if (this.loginLogoutCallback[i] == callback)\n return;\n }\n this.loginLogoutCallback.push(callback);\n }\n unRegisterLoginLogoutCallback(callback) {\n for (var i = 0; i < this.loginLogoutCallback.length; i++) {\n if (this.loginLogoutCallback[i] == callback) {\n this.loginLogoutCallback.splice(i, 1);\n return;\n }\n }\n }\n getAccountInfo() {\n if (typeof window.jsvAccountBridge != \"undefined\" && typeof window.jsvAccountBridge.getAccountInfo != \"undefined\") {\n return window.jsvAccountBridge.getAccountInfo();\n }\n }\n startLoginPage() {\n if (typeof window.jsvAccountBridge != \"undefined\" && typeof window.jsvAccountBridge.startLoginPage != \"undefined\") {\n window.jsvAccountBridge.startLoginPage();\n }\n }\n startUserDetailsPage() {\n if (typeof window.jsvAccountBridge != \"undefined\" && typeof window.jsvAccountBridge.startUserDetailsPage != \"undefined\") {\n window.jsvAccountBridge.startUserDetailsPage();\n }\n }\n startUserCenterPage() {\n if (typeof window.jsvAccountBridge != \"undefined\" && typeof window.jsvAccountBridge.startUserCenterPage != \"undefined\") {\n window.jsvAccountBridge.startUserCenterPage();\n }\n }\n}\nlet accountObj = null;\nclass JsvAccount {\n /**\n * 构造函数\n * @param {function} callback,插件初始化结果,如果返回的结果为\"success\",表示成功,否则表示失败。\n *\n */\n constructor(callback) {\n if (accountObj == null)\n accountObj = new account(callback);\n }\n /**\n * 注册登陆状态变化通知函数\n * @param {function} callback,通知函数\n *\n */\n registerLoginLogoutCallback(callback) {\n accountObj.registerLoginLogoutCallback(callback);\n }\n /**\n * 注销登陆状态变化通知函数\n * @param {function} callback,通知函数\n *\n */\n unRegisterLoginLogoutCallback(callback) {\n accountObj.unRegisterLoginLogoutCallback(callback);\n }\n /**\n * 获取账号信息\n * @returns {string} json数据结构,账号信息\n *\n */\n getAccountInfo() {\n return accountObj.getAccountInfo();\n }\n /**\n * 打开登陆界面\n *\n */\n startLoginPage() {\n accountObj.startLoginPage();\n }\n /**\n * 打开用户信息界面,不可用\n *\n */\n startUserDetailsPage() {\n accountObj.startUserDetailsPage();\n }\n /**\n * 打开用户中心界面,不可用\n *\n */\n startUserCenterPage() {\n accountObj.startUserCenterPage();\n }\n}\n\n//!\n//! utils/JsViewPlugin/JsvPlayer/version.mjs;\n//!\nlet PluginInfo$2 = {\n // downloadUrl:\"http://192.168.0.101:8080/plugin/JsvPlayer-214.zip\", //插件下载地址\n packageName: \"com.qcode.jsvplayer\",\n name: \"播放器插件\",\n version: \"2.1.4\",\n //插件需要的版本号\n versionCodeMin: 214,\n versionCodeMax: 214,\n bridgeName: \"jsvPlayerBridge\",\n //插件bridge注册到jsview的名称\n className: \"com.qcode.jsvplayer.JsvPlayer\",\n //插件初始化类名称\n initMethod: \"createInstance\",\n //插件初始化方法\n listener: \"top.JsvPlayerPluginLoadResult\",\n //插件加载结果回调\n listener2: \"top.JsvPlayerPluginStatus\",\n // debug:true,\n md5: \"6443d073696fe73818ca7b7d19b3591c\"\n};\n\n//!\n//! utils/JsViewPlugin/JsvPlayer/GetVersion.js;\n//!\nfunction reconfigPluginInfo() {\n if (typeof window.jJsvRuntimeBridge !== \"undefined\" && window.jJsvRuntimeBridge && typeof window.jJsvRuntimeBridge.getPluginBaseUrl !== \"undefined\") {\n let plugin_base_url = window.jJsvRuntimeBridge.getPluginBaseUrl();\n if (plugin_base_url) {\n PluginInfo$2.downloadUrl = (plugin_base_url[plugin_base_url.length - 1] === \"/\" ? plugin_base_url : plugin_base_url + \"/\") + PluginInfo$2.packageName + \"/JsvPlayer-\" + PluginInfo$2.versionCodeMax + \".dat?md5=\" + PluginInfo$2.md5;\n }\n }\n}\nreconfigPluginInfo();\nfunction getPluginInfo() {\n return PluginInfo$2;\n}\n\n//!\n//! utils/JsViewPlugin/JsvPlayer/JsvMedia.js;\n//!\nlet EVENT_STATUS_NONE = 0;\nlet EVENT_STATUS_LOADSTART = 1;\nlet EVENT_STATUS_LOAD = 2;\nlet EVENT_STATUS_SEEK = 3;\nlet EVENT_STATUS_SEEKED = 4;\nlet EVENT_STATUS_STALLED = 5;\nlet EVENT_STATUS_RESUME = 6;\nlet EVENT_STATUS_DISPLAY = 7;\nlet EVENT_STATUS_TIMESHIFT = 8;\nlet EVENT_STATUS_TIMESHIFTED = 9;\nlet EVENT_STATUS_BACKLIVE = 10;\nlet EVENT_STATUS_BACKLIVED = 11;\nlet EVENT_STATUS_END = 12;\nlet MediaPluginInfo = getPluginInfo();\nvar mediaArray = [];\nvar pluginLoadListener = [];\nvar PluginEventKey = \"JsvPlayer\";\nvar chipType = \"\";\nlet LOG_LEVEL_FATAL = 5;\nlet LOG_LEVEL_ERROR = 4;\nlet LOG_LEVEL_WARNING = 3;\nlet LOG_LEVEL_DEBUG = 2;\nlet LOG_LEVEL_TRACE = 1;\nlet LogLevel = LOG_LEVEL_TRACE;\nfunction logPrint(level, message) {\n if (level >= LogLevel) {\n console.log(message);\n }\n}\nfunction logFatal(message) {\n logPrint(LOG_LEVEL_FATAL, message);\n}\nfunction logError(message) {\n logPrint(LOG_LEVEL_ERROR, message);\n}\nfunction logWarning$1(message) {\n logPrint(LOG_LEVEL_WARNING, message);\n}\nfunction logDebug(message) {\n logPrint(LOG_LEVEL_DEBUG, message);\n}\nfunction logTrace(message) {\n logPrint(LOG_LEVEL_TRACE, message);\n}\nfunction setLogLevel(level) {\n LogLevel = level;\n}\nvar PLUGIN_EVENT_STATUS_START_LOAD = 1;\nvar PLUGIN_EVENT_STATUS_DOWNLOAD = 2;\nvar PLUGIN_EVENT_STATUS_UNZIPED = 3;\nvar PLUGIN_EVENT_STATUS_DEXLOADED = 4;\nvar PLUGIN_EVENT_STATUS_COMPLETE = 5;\nvar pluginLoadState = 0;\nfunction JsvPlayerPluginStatus(status) {\n logDebug(\"JsvPlayerPluginStatus: \" + status);\n let ret = JSON.parse(status);\n let notify_obj = {};\n notify_obj.status = 1;\n if (ret && ret.first_load) {\n pluginLoadState = 3;\n notify_obj.code = 1;\n } else {\n pluginLoadState = 2;\n notify_obj.code = 2;\n }\n for (let i = 0; i < pluginLoadListener.length; i++) {\n pluginLoadListener[i](notify_obj);\n }\n}\nwindow.top.JsvPlayerPluginStatus = function(status) {\n JsvPlayerPluginStatus(status);\n};\nfunction JsvPlayerPluginLoadResult(result) {\n logDebug(\"JsvPlayerPluginLoadResult: \" + result);\n var ret_obj = JSON.parse(result);\n let notify_obj = {};\n if (ret_obj && (ret_obj.status === 5 || ret_obj.status === 1)) {\n pluginLoadState = 4;\n notify_obj.status = 3;\n notify_obj.code = 0;\n } else if (ret_obj && ret_obj.status === -12) {\n pluginLoadState = 5;\n notify_obj.status = 4;\n notify_obj.code = ret_obj.status;\n } else {\n pluginLoadState = 5;\n notify_obj.status = 4;\n if (ret_obj) {\n notify_obj.code = ret_obj.status;\n } else {\n notify_obj.code = -1;\n }\n }\n if (pluginLoadState === 5) {\n logFatal(\"*************************JsvPlayer plugin load failed, error code is \" + ret_obj.status + \"*************************\");\n }\n UnregisterJsvPlayerPluginEvent();\n if (pluginLoadState === 4) {\n let capabilitySet = getJsvPlayerCapabilitySet$1();\n if (capabilitySet !== null && capabilitySet !== \"\") {\n let capabilitySetObj = JSON.parse(capabilitySet);\n if (capabilitySetObj !== null && capabilitySetObj.hasOwnProperty(\"chipType\")) {\n chipType = capabilitySetObj.chipType;\n }\n }\n }\n for (let i = 0; i < mediaArray.length; i++) {\n mediaArray[i].buildPlatformInstance();\n }\n for (let i = 0; i < pluginLoadListener.length; i++) {\n pluginLoadListener[i](notify_obj);\n }\n}\nwindow.top.JsvPlayerPluginLoadResult = function(result) {\n JsvPlayerPluginLoadResult(result);\n};\nwindow.top.CreatePlayerResult = function(result) {\n logDebug(\"CreatePlayerResult: \" + result);\n let result_obj = JSON.parse(result);\n if (result_obj.code == 0) {\n for (var i = 0; i < mediaArray.length; i++) {\n if (mediaArray[i].key === result_obj.key) {\n mediaArray[i].initPlayer();\n break;\n }\n }\n } else {\n logError(\"Create player failed, key=\" + result_obj.key);\n }\n}.bind(globalThis);\nfunction JsvPlayerPluginEvent(data) {\n console.log(\"LoadPlugin2 result: \" + data);\n let obj = JSON.parse(data);\n let event_obj = JSON.parse(obj.param);\n if (event_obj.hasOwnProperty(\"status\")) {\n let status = event_obj.status;\n let notify_obj = {};\n switch (status) {\n case PLUGIN_EVENT_STATUS_START_LOAD:\n {\n let code = 1;\n if (event_obj.hasOwnProperty(\"code\")) {\n code = event_obj.code;\n }\n notify_obj.status = 1;\n notify_obj.code = code;\n if (code === 1) {\n pluginLoadState = 3;\n } else {\n pluginLoadState = 2;\n }\n }\n break;\n case PLUGIN_EVENT_STATUS_DOWNLOAD:\n notify_obj.status = 2;\n notify_obj.code = 1;\n notify_obj.progress = 100;\n break;\n case PLUGIN_EVENT_STATUS_UNZIPED:\n notify_obj.status = 2;\n notify_obj.code = 2;\n break;\n case PLUGIN_EVENT_STATUS_DEXLOADED:\n notify_obj.status = 2;\n notify_obj.code = 3;\n break;\n case PLUGIN_EVENT_STATUS_COMPLETE:\n {\n let code = 0;\n if (event_obj.hasOwnProperty(\"code\")) {\n code = event_obj.code;\n }\n if (code === 0) {\n notify_obj.status = 3;\n notify_obj.code = 0;\n pluginLoadState = 4;\n } else {\n notify_obj.status = 4;\n notify_obj.code = code;\n pluginLoadState = 5;\n }\n UnregisterJsvPlayerPluginEvent();\n }\n break;\n default:\n logWarning$1(\"Load plugin status, invalid status: \" + status);\n return;\n }\n for (let i = 0; i < pluginLoadListener.length; i++) {\n pluginLoadListener[i](notify_obj);\n }\n if (pluginLoadState === 4) {\n let capabilitySet = getJsvPlayerCapabilitySet$1();\n if (capabilitySet !== null && capabilitySet !== \"\") {\n let capabilitySetObj = JSON.parse(capabilitySet);\n if (capabilitySetObj !== null && capabilitySetObj.hasOwnProperty(\"chipType\")) {\n chipType = capabilitySetObj.chipType;\n }\n }\n for (let i = 0; i < mediaArray.length; i++) {\n mediaArray[i].buildPlatformInstance();\n }\n }\n } else {\n let type = event_obj.type;\n let param = event_obj.param;\n if (type === 1) {\n JsvPlayerPluginStatus(param);\n } else if (type === 2) {\n JsvPlayerPluginLoadResult(param);\n } else {\n logError(\"Invalid type: \" + type);\n }\n }\n}\nfunction RegisterJsvPlayerPluginEvent() {\n window.JMD.subscribe(PluginEventKey, JsvPlayerPluginEvent);\n}\nfunction UnregisterJsvPlayerPluginEvent() {\n window.JMD.unsubscribe(PluginEventKey, JsvPlayerPluginEvent);\n}\nfunction globalLoadJsvPlayerPlugin$1(listener) {\n logDebug(\"globalLoadJsvPlayerPlugin\");\n let notify_obj = {};\n if (typeof window.jPluginManagerBridge === \"undefined\" || !window.jPluginManagerBridge) {\n notify_obj.status = 4;\n notify_obj.code = 1;\n } else if (pluginLoadState === 2) {\n notify_obj.status = 1;\n notify_obj.code = 2;\n } else if (pluginLoadState === 3) {\n notify_obj.status = 1;\n notify_obj.code = 1;\n } else if (pluginLoadState === 4) {\n notify_obj.status = 3;\n notify_obj.code = 0;\n }\n if (notify_obj.hasOwnProperty(\"status\")) {\n if (typeof listener !== \"undefined\" && listener) {\n setTimeout(() => {\n listener(notify_obj);\n }, 0);\n }\n }\n if (pluginLoadState === 4 || typeof window.jPluginManagerBridge === \"undefined\" || !window.jPluginManagerBridge) {\n return;\n } else if (pluginLoadState === 5) {\n pluginLoadState = 0;\n }\n if (typeof listener !== \"undefined\" && listener) {\n pluginLoadListener.push(listener);\n }\n if (pluginLoadState > 0) {\n return;\n }\n pluginLoadState = 1;\n RegisterJsvPlayerPluginEvent();\n if (typeof window.jPluginManagerBridge.LoadPlugin2 !== \"undefined\") {\n window.jPluginManagerBridge.LoadPlugin2(PluginEventKey, JSON.stringify(MediaPluginInfo));\n } else {\n window.jPluginManagerBridge.LoadPlugin(JSON.stringify(MediaPluginInfo));\n }\n}\nvar preLoadingJsvPlayerPlugin = 0;\nvar prePluginLoadListener = [];\nvar PreLoadPluginEventKey = \"PreJsvPlayer\";\nfunction JsvPlayerPrePluginEvent(data) {\n console.log(\"PreLoadPlugin result: \" + data);\n let obj = JSON.parse(data);\n let event_obj = JSON.parse(obj.param);\n if (event_obj.hasOwnProperty(\"status\")) {\n let status = event_obj.status;\n let notify_obj = {};\n switch (status) {\n case PLUGIN_EVENT_STATUS_START_LOAD:\n {\n notify_obj.status = 1;\n notify_obj.code = 0;\n }\n break;\n case PLUGIN_EVENT_STATUS_DOWNLOAD:\n notify_obj.status = 2;\n notify_obj.code = 1;\n notify_obj.progress = 100;\n break;\n case PLUGIN_EVENT_STATUS_UNZIPED:\n notify_obj.status = 2;\n notify_obj.code = 2;\n break;\n case PLUGIN_EVENT_STATUS_COMPLETE:\n {\n let code = 0;\n if (event_obj.hasOwnProperty(\"code\")) {\n code = event_obj.code;\n }\n if (code === 0) {\n notify_obj.status = 3;\n notify_obj.code = 0;\n } else {\n notify_obj.status = 4;\n notify_obj.code = code;\n }\n UnregisterPreLoadJsvPlayerPluginEvent();\n }\n break;\n default:\n logWarning$1(\"Load plugin status, invalid status: \" + status);\n return;\n }\n for (let i = 0; i < prePluginLoadListener.length; i++) {\n prePluginLoadListener[i](notify_obj);\n }\n }\n}\nfunction RegisterPreLoadJsvPlayerPluginEvent() {\n window.JMD.subscribe(PreLoadPluginEventKey, JsvPlayerPrePluginEvent);\n}\nfunction UnregisterPreLoadJsvPlayerPluginEvent() {\n window.JMD.unsubscribe(PreLoadPluginEventKey, JsvPlayerPrePluginEvent);\n}\nfunction globalPreLoadJsvPlayerPlugin$1(versionCode, url, md5, listener) {\n logDebug(\"globaPrelLoadJsvPlayerPlugin\");\n let notify_obj = {};\n if (preLoadingJsvPlayerPlugin !== 0) {\n notify_obj.status = 4;\n notify_obj.code = 2;\n } else if (typeof versionCode !== \"number\" || versionCode <= 0) {\n notify_obj.status = 4;\n notify_obj.code = -1;\n } else if (typeof window.jPluginManagerBridge === \"undefined\" || !window.jPluginManagerBridge || typeof window.jPluginManagerBridge.PreLoadPlugin !== \"function\") {\n notify_obj.status = 4;\n notify_obj.code = 1;\n }\n if (notify_obj.hasOwnProperty(\"status\")) {\n if (typeof listener !== \"undefined\" && listener) {\n setTimeout(() => {\n listener(notify_obj);\n }, 0);\n }\n return;\n }\n let plugin_info = {};\n plugin_info.name = \"播放器插件\";\n plugin_info.packageName = MediaPluginInfo.packageName;\n plugin_info.versionCode = versionCode;\n if (typeof url === \"string\" && url !== \"\") {\n plugin_info.downloadUrl = url;\n }\n if (typeof md5 === \"string\" && md5 !== \"\") {\n plugin_info.md5 = md5;\n }\n let ret = window.jPluginManagerBridge.PreLoadPlugin(PreLoadPluginEventKey, JSON.stringify(plugin_info));\n if (ret === -1) {\n notify_obj.status = 4;\n notify_obj.code = -1;\n } else if (ret === -2) {\n notify_obj.status = 4;\n notify_obj.code = 2;\n } else if (ret === 1) {\n notify_obj.status = 4;\n notify_obj.code = 2;\n } else if (ret === 2) {\n notify_obj.status = 4;\n notify_obj.code = 3;\n }\n if (notify_obj.hasOwnProperty(\"status\")) {\n if (typeof listener !== \"undefined\" && listener) {\n setTimeout(() => {\n listener(notify_obj);\n }, 0);\n }\n } else {\n if (typeof listener !== \"undefined\" && listener) {\n prePluginLoadListener.push(listener);\n }\n preLoadingJsvPlayerPlugin = 1;\n RegisterPreLoadJsvPlayerPluginEvent();\n }\n}\nfunction findMediaObjectByKey(key) {\n for (var i = 0; i < mediaArray.length; i++) {\n if (mediaArray[i].key === key) {\n return mediaArray[i];\n }\n }\n return null;\n}\nclass JsvBaseMedia {\n constructor(type, window_mode, hole_id, player_type, key, background, design_map_width, decode_type) {\n logTrace(\"Create JsvBaseMedia, type=\" + type + \", hole_id=\" + hole_id + \", player_type=\" + player_type + \", key=\" + key + \", background=\" + background + \", design_map_width=\" + design_map_width + \", decode_type=\" + decode_type);\n this.state = {\n muted: false,\n paused: true,\n repeat: false,\n enablePlayer: false,\n autoplay: false,\n startTime: 0,\n currentTime: 0,\n aspectRatio: \"origin\",\n keepLastFrame: true,\n timeUpdateLess: false,\n rate: 1,\n volume: 1,\n chromaKey: null,\n audioTrack: -1\n };\n this.local = {\n currentTime: 0,\n playableDuration: 0,\n duration: 0,\n isRenderable: false,\n paused: true\n };\n this.type = type;\n this.playerCreate = false;\n this.key = key;\n this.windowMode = window_mode;\n this.background = background;\n this.holeId = hole_id;\n this.holeIdModify = hole_id;\n this.playerType = player_type;\n this.designMapWidth = design_map_width;\n this.decodeType = decode_type;\n this.channelID = -1;\n this.ref = 1;\n this.appVisible = window.JsView && window.JsView.getVisibility ? window.JsView.getVisibility() === \"show\" : true;\n this.eventReport = true;\n this.currentEventStatus = EVENT_STATUS_NONE;\n this.frameRateLimit = false;\n this._onEvent = this.onEvent.bind(this);\n this._onVisibilityChangeCallBack = this.onVisibilityChangeCallBack.bind(this);\n let found = false;\n for (let i = 0; i < mediaArray.length; i++) {\n if (mediaArray[i].key === this.key) {\n found = true;\n break;\n }\n }\n if (!found) {\n mediaArray.push(this);\n }\n if (typeof window.jsvPlayerBridge == \"undefined\" || !window.jsvPlayerBridge) {\n globalLoadJsvPlayerPlugin$1();\n } else {\n this.buildPlatformInstance();\n }\n }\n /**\n * 私有接口,外部不需要调用此接口。\n */\n buildPlatformInstance() {\n logTrace(\"buildPlatformInstance, key=\" + this.key);\n if (typeof window.jsvPlayerBridge == \"undefined\" || !window.jsvPlayerBridge) {\n logError(\"no jsvPlayerBridge\");\n return;\n }\n let share_view = true;\n window.jsvPlayerBridge.CreatePlayer2(this.key, this.windowMode, this.holeId, this.background, this.designMapWidth, share_view, this.playerType, this.decodeType).then(\n (result) => {\n logDebug(\"CreatePlayerResult: \" + result);\n let result_obj = JSON.parse(result);\n if (result_obj.code == 0) {\n for (var i = 0; i < mediaArray.length; i++) {\n if (mediaArray[i].key === result_obj.key) {\n mediaArray[i].initPlayer();\n break;\n }\n }\n } else {\n logError(\"Create player failed, key=\" + result_obj.key);\n }\n },\n (data) => {\n logError(\"Create player failed, reject(\" + data + \")\");\n }\n );\n }\n /**\n * 私有接口,外部不需要调用此接口。\n */\n initPlayer() {\n if (this.playerCreate)\n return;\n logDebug(\"InitPlayer:1, key=\" + this.key);\n this.playerCreate = true;\n window.JMD.subscribe(this.key, this._onEvent);\n if (window.JsView && window.JsView.onVisibilityChange) {\n logDebug(\"playerKey: \" + this.key + \", onVisibilityChange register\");\n window.JsView.onVisibilityChange(this._onVisibilityChangeCallBack);\n }\n if (this.holeIdModify !== this.holeId) {\n window.jsvPlayerBridge.setHoleID(this.key, this.holeIdModify);\n this.holeId = this.holeIdModify;\n }\n this.appVisible = window.JsView && window.JsView.getVisibility ? window.JsView.getVisibility() === \"show\" : true;\n if (this.appVisible) {\n this.initParams();\n }\n }\n initParams() {\n logDebug(\"InitPlayer:2, key=\" + this.key);\n if (this.channelID >= 0) {\n this.joinChannelPrivate(this.channelID);\n } else if (this.state[\"src\"]) {\n this.setState(\"src\", this.state[\"src\"], \"string\");\n if (this.state[\"currentTime\"]) {\n this.setState(\"currentTime\", this.state[\"currentTime\"], \"number\");\n } else if (this.state[\"startTime\"]) {\n this.setState(\"startTime\", this.state[\"startTime\"], \"number\");\n }\n }\n if (this.state[\"paused\"] == false) {\n this.setState(\"paused\", this.state[\"paused\"], \"boolean\");\n }\n if (this.state[\"autoplay\"]) {\n this.setState(\"autoplay\", this.state[\"autoplay\"], \"boolean\");\n }\n if (this.state[\"repeat\"]) {\n this.setState(\"repeat\", this.state[\"repeat\"], \"boolean\");\n }\n if (this.state[\"muted\"]) {\n this.setState(\"muted\", this.state[\"muted\"], \"boolean\");\n }\n if (this.state[\"timeUpdateLess\"]) {\n this.setState(\"timeUpdateLess\", this.state[\"timeUpdateLess\"], \"boolean\");\n }\n if (this.state[\"keepLastFrame\"] == false) {\n this.setState(\"keepLastFrame\", this.state[\"keepLastFrame\"], \"boolean\");\n }\n if (this.state[\"aspectRatio\"] !== \"origin\") {\n this.setState(\"aspectRatio\", this.state[\"aspectRatio\"], \"string\");\n }\n if (this.state[\"chromaKey\"]) {\n this.setState(\"chromaKey\", this.state[\"chromaKey\"], \"string\");\n }\n if (this.state[\"audioTrack\"] !== -1) {\n this.setState(\"audioTrack\", this.state[\"audioTrack\"], \"number\");\n }\n }\n onVisibilityChangeCallBack() {\n let visible = window.JsView && window.JsView.getVisibility ? window.JsView.getVisibility() === \"show\" : true;\n this.setVisibility(visible);\n }\n /**\n * 设置可见状态,在可见状态发生变化时,释放或者启动流。\n * @param {boolean} visible true:可见,false,不可见。\n */\n setVisibility(visible) {\n logDebug(\"playerKey:\" + this.key + \", 小程序可见状态: \" + visible);\n if (typeof visible !== \"boolean\") {\n logError(\"playerKey:\" + this.key + \", setVisibility, param type is invalid\");\n return;\n }\n if (visible === this.appVisible) {\n logDebug(\"playerKey:\" + this.key + \", 小程序可见状态未发生变化,不执行动作\");\n return;\n }\n if (visible) {\n this.appVisible = visible;\n this.state.paused = this.local.paused;\n this.state.currentTime = this.local.currentTime;\n logDebug(\"currentTime: \" + this.state.currentTime);\n this.initParams();\n } else {\n logDebug(\"playerKey:\" + this.key + \", playerCreate: \" + this.playerCreate + \", channelID: \" + this.channelID + \", src: \" + this.state[\"src\"]);\n if (this.playerCreate) {\n this.eventReport = false;\n if (this.channelID > 0) {\n logDebug(\"leaveChannel\");\n window.jsvPlayerBridge.leaveChannel(this.key);\n } else if (this.state[\"src\"]) {\n logDebug(\"unload\");\n this.local.currentTime = this.currentTime;\n this.local.paused = this.paused;\n logDebug(\"currentTime: \" + this.local.currentTime);\n this.unloadPrivate();\n }\n }\n this.appVisible = visible;\n }\n }\n /**\n * 当使用一个已有的Media对象时,需要通过这个接口追加一个ref,在调用releasePlayer接口释放时,会ref--,当ref==0才真正释放播放器实例。\n */\n setRef() {\n this.ref++;\n }\n /**\n * 释放播放器,一般不需要应用逻辑调用,在JsvPlayer高阶组件unmounted处理时调用此接口释放。\n */\n releasePlayer() {\n logTrace(\"releasePlayer, key=\" + this.key + \", ref=\" + this.ref);\n this.ref--;\n if (this.ref === 0) {\n if (typeof window.jsvPlayerBridge != \"undefined\" && window.jsvPlayerBridge) {\n this.changeFrameRate(false);\n window.JMD.unsubscribe(this.key, this._onEvent);\n window.jsvPlayerBridge.ReleasePlayer(this.key);\n if (window.JsView && window.JsView.removeEventCallback) {\n logDebug(\"playerKey: \" + this.key + \", onVisibilityChange unregister\");\n window.JsView.removeEventCallback(this._onVisibilityChangeCallBack);\n }\n }\n for (let i = 0; i < mediaArray.length; i++) {\n if (mediaArray[i].key === this.key) {\n mediaArray.splice(i, 1);\n break;\n }\n }\n }\n }\n setHoleID(hole_id) {\n logTrace(\"setHoleID, key=\" + this.key + \", hole_id=\" + hole_id);\n if (this.playerCreate) {\n this.holeId = hole_id;\n this.holeIdModify = hole_id;\n window.jsvPlayerBridge.setHoleID(this.key, hole_id);\n } else {\n this.holeIdModify = hole_id;\n }\n }\n /**\n * 当full模式且播放器模式是2(jsvplayer),如果是H2芯片,需要修改动画帧率到30帧,否则会导致播放器音画不同步。\n * @param {boolean} enable 开关,视频起播时打开;视频停止,或者播放器释放时,关闭。\n */\n changeFrameRate(enable) {\n if (this.windowMode === \"full\" && this.playerType === 2 && chipType === \"allwinnerh2\") {\n if (this.frameRateLimit != enable) {\n logDebug(\"changeFrameRate, key=\" + this.key + \", enable=\" + enable);\n this.frameRateLimit = enable;\n if (enable) {\n window.JsView?.reduceFps?.(30);\n } else {\n window.JsView?.reduceFps?.(0);\n }\n }\n }\n }\n needReportEvent(event) {\n let ret = true;\n if (!this.eventReport) {\n ret = false;\n switch (this.currentEventStatus) {\n case EVENT_STATUS_NONE:\n this.eventReport = true;\n ret = true;\n break;\n case EVENT_STATUS_LOADSTART:\n if (event == EVENT_STATUS_LOADSTART || event == EVENT_STATUS_LOAD || event == EVENT_STATUS_DISPLAY || event == EVENT_STATUS_BACKLIVED || event == EVENT_STATUS_TIMESHIFTED) {\n this.eventReport = true;\n }\n if (event == EVENT_STATUS_LOADSTART) {\n ret = false;\n } else {\n ret = true;\n }\n break;\n case EVENT_STATUS_LOAD:\n if (event == EVENT_STATUS_LOAD || event == EVENT_STATUS_DISPLAY || event == EVENT_STATUS_BACKLIVED || event == EVENT_STATUS_TIMESHIFTED) {\n this.eventReport = true;\n }\n if (event == EVENT_STATUS_LOADSTART || event == EVENT_STATUS_LOAD) {\n ret = false;\n } else {\n ret = true;\n }\n break;\n case EVENT_STATUS_DISPLAY:\n if (event == EVENT_STATUS_DISPLAY || event == EVENT_STATUS_BACKLIVED || event == EVENT_STATUS_TIMESHIFTED) {\n this.eventReport = true;\n }\n if (event != EVENT_STATUS_END) {\n ret = false;\n } else {\n ret = true;\n }\n break;\n case EVENT_STATUS_TIMESHIFT:\n if (event == EVENT_STATUS_TIMESHIFT || event == EVENT_STATUS_TIMESHIFTED || event == EVENT_STATUS_BACKLIVE || event == EVENT_STATUS_BACKLIVED || event == EVENT_STATUS_DISPLAY) {\n this.eventReport = true;\n }\n if (event == EVENT_STATUS_TIMESHIFT) {\n ret = false;\n } else {\n ret = true;\n }\n break;\n case EVENT_STATUS_TIMESHIFTED:\n if (event == EVENT_STATUS_TIMESHIFTED || event == EVENT_STATUS_BACKLIVE || event == EVENT_STATUS_BACKLIVED || event == EVENT_STATUS_DISPLAY) {\n this.eventReport = true;\n }\n if (event == EVENT_STATUS_TIMESHIFT || event == EVENT_STATUS_TIMESHIFTED) {\n ret = false;\n } else {\n ret = true;\n }\n break;\n case EVENT_STATUS_BACKLIVE:\n if (event == EVENT_STATUS_TIMESHIFT || event == EVENT_STATUS_TIMESHIFTED || event == EVENT_STATUS_BACKLIVE || event == EVENT_STATUS_BACKLIVED || event == EVENT_STATUS_DISPLAY) {\n this.eventReport = true;\n }\n if (event == EVENT_STATUS_BACKLIVE) {\n ret = false;\n } else {\n ret = true;\n }\n break;\n case EVENT_STATUS_BACKLIVED:\n if (event == EVENT_STATUS_TIMESHIFTED || event == EVENT_STATUS_TIMESHIFT || event == EVENT_STATUS_BACKLIVED || event == EVENT_STATUS_DISPLAY) {\n this.eventReport = true;\n }\n if (event == EVENT_STATUS_BACKLIVE || event == EVENT_STATUS_BACKLIVED) {\n ret = false;\n } else {\n ret = true;\n }\n break;\n case EVENT_STATUS_END:\n this.eventReport = true;\n ret = true;\n break;\n default:\n logWarning$1(\"current event status is \" + this.currentEventStatus);\n this.eventReport = true;\n ret = true;\n break;\n }\n logTrace(\"eventReport:\" + this.eventReport + \", ret=\" + ret);\n }\n return ret;\n }\n /**\n * 私有接口,外部不需要调用此接口。\n */\n onEvent(event_str) {\n logTrace(\"player event: \" + event_str);\n let obj = JSON.parse(event_str);\n let event_obj = JSON.parse(obj.param);\n let event = event_obj.event;\n let data = event_obj.data;\n switch (event) {\n case \"onProgress\":\n {\n if (this.local.isRenderable == false) {\n return;\n }\n let time_update = this.local.currentTime != data.currentTime;\n this.local.currentTime = data.currentTime;\n if (time_update && this.hasOwnProperty(\"ontimeupdate\")) {\n this[\"ontimeupdate\"](data.currentTime);\n }\n let progress_update = this.local.playableDuration != data.playableDuration;\n this.local.playableDuration = data.playableDuration;\n if (progress_update && this.hasOwnProperty(\"onprogress\")) {\n this[\"onprogress\"]();\n }\n let canplay_through = this.local.playableDuration == this.local.duration;\n if (canplay_through && progress_update && this.hasOwnProperty(\"oncanplaythrough\")) {\n this[\"oncanplaythrough\"]();\n }\n }\n break;\n case \"onEnd\":\n if (this.needReportEvent(EVENT_STATUS_END)) {\n this.local.isRenderable = false;\n this.setState(\"paused\", true, \"boolean\");\n if (this.hasOwnProperty(\"onend\")) {\n this[\"onend\"]();\n }\n this.currentEventStatus = EVENT_STATUS_END;\n }\n break;\n case \"onLoadStart\":\n logDebug(\"onLoadStart:\" + data);\n if (this.needReportEvent(EVENT_STATUS_LOADSTART)) {\n if (this.hasOwnProperty(\"onloadstart\")) {\n this[\"onloadstart\"]();\n }\n this.currentEventStatus = EVENT_STATUS_LOADSTART;\n }\n break;\n case \"onLoad\":\n logDebug(\"onLoad:\" + data);\n if (this.needReportEvent(EVENT_STATUS_LOAD)) {\n this.local.currentTime = data.currentTime;\n this.local.duration = data.duration;\n if (this.hasOwnProperty(\"onloadedmetadata\")) {\n this[\"onloadedmetadata\"]();\n }\n if (this.hasOwnProperty(\"onload\")) {\n this[\"onload\"]();\n }\n if (this.hasOwnProperty(\"ondurationchange\")) {\n this[\"ondurationchange\"]();\n }\n this.currentEventStatus = EVENT_STATUS_LOAD;\n }\n break;\n case \"onError\":\n logDebug(\"onError:\" + data);\n this.local.isRenderable = false;\n if (this.hasOwnProperty(\"onerror\")) {\n const Error = {\n MEDIA_ERR_ABORTED: 1,\n MEDIA_ERR_NETWORK: 2,\n MEDIA_ERR_DECODE: 3,\n MEDIA_ERR_SRC_NOT_SUPPORTED: 4,\n MEDIA_ERR_ONLY_ONE_4K: 5,\n MEDIA_ERR_NO_DECODE_RESOURCE: 6\n };\n const platform_error = data.error.what;\n let e = Error.MEDIA_ERR_ABORTED;\n switch (platform_error) {\n case -1004:\n e = Error.MEDIA_ERR_NETWORK;\n break;\n case -1007:\n e = Error.MEDIA_ERR_DECODE;\n break;\n case -1010:\n e = Error.MEDIA_ERR_SRC_NOT_SUPPORTED;\n break;\n case -50001:\n e = Error.MEDIA_ERR_ONLY_ONE_4K;\n break;\n case -50002:\n e = Error.MEDIA_ERR_NO_DECODE_RESOURCE;\n break;\n default:\n break;\n }\n this[\"onerror\"](e);\n }\n break;\n case \"onSeek\":\n logDebug(\"onSeek:\" + data);\n if (this.needReportEvent(EVENT_STATUS_SEEK)) {\n this.local.isRenderable = false;\n if (this.hasOwnProperty(\"onseeking\")) {\n this[\"onseeking\"]();\n }\n }\n break;\n case \"onEventExt\":\n logDebug(\"onEventExt:\" + data);\n switch (data.eventExt) {\n case \"videoMetadataUpdate\":\n if (this.hasOwnProperty(\"onloadedmetadata\")) {\n this[\"onloadedmetadata\"]();\n }\n break;\n case \"videoSeekComplete\":\n if (this.needReportEvent(EVENT_STATUS_SEEKED)) {\n if (this.hasOwnProperty(\"onseeked\")) {\n this[\"onseeked\"]();\n }\n }\n break;\n default:\n logWarning$1(\"unimplentation event ext type = \" + data.eventExt);\n break;\n }\n break;\n case \"onAudioFocusGain\":\n logDebug(\"onAudioFocusGain:\" + data);\n if (this.hasOwnProperty(\"onaudiofocusgain\")) {\n this[\"onaudiofocusgain\"](data);\n }\n break;\n case \"onAudioFocusLoss\":\n logDebug(\"onAudioFocusLoss:\" + data);\n if (this.hasOwnProperty(\"onaudiofocusloss\")) {\n this[\"onaudiofocusloss\"](data);\n }\n break;\n case \"onPlaybackStalled\":\n if (this.needReportEvent(EVENT_STATUS_STALLED)) {\n this.local.isRenderable = false;\n if (this.hasOwnProperty(\"onstalled\")) {\n this[\"onstalled\"]();\n }\n }\n break;\n case \"onPlaybackResume\":\n if (this.needReportEvent(EVENT_STATUS_RESUME)) {\n this.local.isRenderable = true;\n if (this.hasOwnProperty(\"onplaying\")) {\n this[\"onplaying\"]();\n }\n }\n break;\n case \"onReadyForDisplay\":\n this.changeFrameRate(true);\n if (this.needReportEvent(EVENT_STATUS_DISPLAY)) {\n this.local.isRenderable = true;\n if (this.hasOwnProperty(\"oncanplay\")) {\n this[\"oncanplay\"]();\n }\n this.currentEventStatus = EVENT_STATUS_DISPLAY;\n }\n break;\n case \"onTimeShift\":\n logDebug(\"onTimeShift\");\n if (this.needReportEvent(EVENT_STATUS_TIMESHIFT)) {\n if (this.hasOwnProperty(\"ontimeshift\")) {\n this[\"ontimeshift\"](data.seekTime);\n }\n this.currentEventStatus = EVENT_STATUS_TIMESHIFT;\n }\n break;\n case \"onTimeShifted\":\n logDebug(\"onTimeShifted\");\n if (this.needReportEvent(EVENT_STATUS_TIMESHIFTED)) {\n if (this.hasOwnProperty(\"ontimeshifted\")) {\n this[\"ontimeshifted\"]();\n }\n this.currentEventStatus = EVENT_STATUS_TIMESHIFTED;\n }\n break;\n case \"onBackLive\":\n logDebug(\"onBackLive\");\n if (this.needReportEvent(EVENT_STATUS_BACKLIVE)) {\n if (this.hasOwnProperty(\"onbacklive\")) {\n this[\"onbacklive\"]();\n }\n this.currentEventStatus = EVENT_STATUS_BACKLIVE;\n }\n break;\n case \"onBackLived\":\n logDebug(\"onBackLived\");\n if (this.needReportEvent(EVENT_STATUS_BACKLIVED)) {\n if (this.hasOwnProperty(\"onbacklived\")) {\n this[\"onbacklived\"]();\n }\n this.currentEventStatus = EVENT_STATUS_BACKLIVED;\n }\n break;\n default:\n break;\n }\n }\n /**\n * 属性,boolean类型,不支持读取,true表示自动播放。\n */\n set autoplay(value) {\n this.setState(\"autoplay\", value, \"boolean\");\n }\n /**\n * 属性,double类型,当前时间,单位秒,set用于seek操作(起播后)或者设置起播时间(起播前),get用于读取当前时间。\n */\n get currentTime() {\n if (!this.appVisible) {\n return this.local.currentTime;\n }\n let result = this.getProperty(\"currentTime\");\n if (result != null) {\n this.local.currentTime = result;\n return result;\n }\n return 0;\n }\n set currentTime(value) {\n this.local.isRenderable = false;\n this.local.currentTime = value;\n this.setState(\"currentTime\", value, \"number\");\n }\n /**\n * 属性,double类型,总时长,单位秒,只支持读取。\n */\n get duration() {\n if (!this.appVisible) {\n return this.local.duration;\n }\n let result = this.getProperty(\"duration\");\n if (result != null)\n return result;\n return 0;\n }\n /**\n * 属性,boolean类型,不支持读取,true表示循环播放。\n */\n set loop(value) {\n if (typeof value == \"boolean\") {\n this.setState(\"repeat\", value, \"boolean\");\n } else if (typeof value == \"undefined\") {\n this.setState(\"repeat\", false, \"boolean\");\n } else {\n this.setState(\"repeat\", true, \"boolean\");\n }\n }\n /**\n * 属性,boolean类型,设置和获取静音状态。\n */\n get muted() {\n return this.getState(\"muted\");\n }\n set muted(value) {\n this.setState(\"muted\", value, \"boolean\");\n }\n /**\n * 属性,boolean类型,当前pause状态,只支持读取。\n */\n get paused() {\n return this.getState(\"paused\");\n }\n /**\n * 属性,float类型,设置或者读取倍速播放,通常的值是0.5、0.75、1.0、1.25、1.5、2.0、3.0。\n */\n get playbackRate() {\n return this.getState(\"rate\");\n }\n set playbackRate(value) {\n logDebug(\"playbackRate\");\n this.setState(\"rate\", value, \"number\");\n }\n /**\n * 已废弃。\n */\n get preload() {\n return this.enablePlayer ? \"auto\" : \"none\";\n }\n set preload(value) {\n if (value !== \"none\") {\n this.load();\n }\n }\n /**\n * 属性,string类型,播放地址,不支持读取。\n */\n set src(value) {\n this.setSrc(value, null, null, 1);\n }\n /**\n * 属性,float类型,播放器音量,0-1.0,只影响当前播放器实例。\n */\n get volume() {\n return this.getState(\"volume\");\n }\n set volume(value) {\n this.setState(\"volume\", value, \"number\");\n }\n /**\n * 属性,double类型,起播时间,单位秒,可使用currentTime代替。\n */\n get startTime() {\n return this.getState(\"startTime\");\n }\n set startTime(value) {\n this.setState(\"startTime\", value, \"number\");\n }\n /**\n * 属性,double类型,可播放时长,本地缓存的视频时长,只支持读取。\n */\n get playableDuration() {\n return this.local.playableDuration;\n }\n /**\n * 属性,boolean类型,true表示关闭timeupdate事件上报。\n */\n set timeupdateless(value) {\n this.setState(\"timeUpdateLess\", !!value, \"boolean\");\n }\n /**\n * 属性,boolean类型,true表示保留最后一帧,false表示不保留。\n */\n set keepLastFrame(value) {\n this.setState(\"keepLastFrame\", !!value, \"boolean\");\n }\n /**\n * 设置播放地址。\n * @param {string} url 播放地址。\n * @param {String} windowMode 播放器窗口模式。\n * null:使用this.windowMode作为窗口模式。\n * full:观影模式,全屏方式,不建议修改w/h/l/t,视频清晰度/流畅度最佳;\n * resizable:可变窗口模式,可以随意修改w/h/l/t,支持动画效果,视频清晰度/流畅度表现可能不如full模式;\n * pip:画中画模式,只在支持多路硬解的情况下使用,用户画中画的小窗播放,对清晰度/流畅度要求较差,可能会有反交错问题。\n * @param {string} head 网络请求的head信息,可以为NULL。\n * @param {int} type 类型,1表示点播,2表示直播,3表示时移,4表示回看,默认1。\n * @param {double} timeShift 时移时间,只有在type=3时才有效,表示从当前时间时移多长时间,单位秒。\n * @param {int} 分辨率类型 0:unknown或其它;1:标清;2:高清;3:超清(720P);4:蓝光(1080P);5:2K;6:4K;7:8K。\n * @param {int} 用户频道号,只在直播回看状态下需要设置 \n */\n setSrc(url, windowMode, head, type, timeShift, resolution, mixNo) {\n let src = {};\n src.url = url;\n if (head) {\n src.head = head;\n }\n if (windowMode) {\n src.windowMode = windowMode;\n }\n if (type) {\n src.type = type;\n } else {\n src.type = 1;\n }\n if (type === 3 && timeShift) {\n src.timeShift = timeShift;\n }\n if (resolution && typeof resolution === \"number\") {\n src.resolution = resolution;\n }\n if (mixNo && typeof mixNo == \"number\") {\n src.channelID = mixNo;\n }\n this.currentEventStatus = EVENT_STATUS_NONE;\n this.setState(\"src\", JSON.stringify(src), \"string\");\n this.eventReport = true;\n }\n /**\n * 添加监听事件。\n * @param {string} type 事件类型。\n * @param {callback} listener 事件处理函数。\n */\n addEventListener(type, listener) {\n this[\"on\" + type] = listener;\n }\n /**\n * 重新加载视频流,初始化播放器。\n */\n load() {\n this.setState(\"enablePlayer\", true, \"boolean\");\n }\n /**\n * 暂停\n */\n pause() {\n this.local.paused = true;\n this.setState(\"paused\", true, \"boolean\");\n if (this.hasOwnProperty(\"onpause\")) {\n this[\"onpause\"]();\n }\n }\n /**\n * 播放\n */\n play() {\n this.local.paused = false;\n this.setState(\"paused\", false, \"boolean\");\n if (this.hasOwnProperty(\"onplay\")) {\n this[\"onplay\"]();\n }\n }\n /**\n * 获取AudioTrack个数\n * @returns total number of audio track.\n */\n getAudioTrackCount() {\n let count = this.getProperty(\"audioTrackCount\");\n if (count === null) {\n return 1;\n }\n return count;\n }\n /**\n * 获取当前使用的audio track\n * @returns the current playing track,-1 is invalid\n */\n getSelectedAudioTrack() {\n return this.getState(\"audioTrack\");\n }\n /**\n * 选择audio track\n * @param {*} track audio track index\n */\n selectAudioTrack(track) {\n this.setState(\"audioTrack\", track, \"number\");\n }\n /**\n * 停止视频流。\n */\n unload() {\n this.unloadPrivate();\n this.currentEventStatus = EVENT_STATUS_NONE;\n this.eventReport = true;\n }\n unloadPrivate() {\n this.setState(\"paused\", true, \"boolean\");\n this.local.isRenderable = false;\n this.setState(\"enablePlayer\", false, \"boolean\");\n this.changeFrameRate(false);\n }\n /**\n * 要求终端访问指定的频道,并立即返回。对由本地设置为跳过的频道,也返回-1。\n * 频道地址为通过 CTCSetConfig 设置的频道列表中的地址:\n * 如频道地址为 igmp://的组播地址,则加入组播频道,播放器开始播放组播频道,并处理相应的时移等功能;\n * 如频道地址为 rtsp://的单播地址,则连接单播频道,播放器开始播放;\n * 如频道地址为 http://的地址,则浏览器直接发起请求,访问该页面。\n * @param {int} mixNo 用户频道号。\n * @returns {int} 0,表示成功;-1:表示频道号无效。\n */\n joinChannel(mixNo) {\n logTrace(\"joinChannel, key=\" + this.key + \", mixNo=\" + mixNo);\n if (this.type === \"audio\") {\n logWarning$1(\"Audio player do not support joinChannel.\");\n return 0;\n }\n let ret = this.joinChannelPrivate(mixNo);\n if (ret >= 0) {\n this.currentEventStatus = EVENT_STATUS_NONE;\n this.eventReport = true;\n }\n return ret;\n }\n joinChannelPrivate(mixNo) {\n if (this.type === \"audio\") {\n logWarning$1(\"Audio player do not support joinChannelPrivate.\");\n return 0;\n }\n if (mixNo <= 0) {\n return -1;\n }\n let ret = 0;\n if (this.playerCreate && this.appVisible) {\n ret = window.jsvPlayerBridge.JoinChannel(this.key, mixNo);\n }\n if (ret >= 0) {\n this.channelID = mixNo;\n this.local.paused = false;\n this.setState(\"paused\", false, \"boolean\");\n }\n return ret;\n }\n /**\n * 要求终端离开指定的频道,并立即返回。\n * 如原频道地址为 igmp://的组播地址,则立即离开组播频道,播放器停止播放组播频道,并断开相应的时移连接;\n * 如频道地址为 rtsp://的单播地址,则断开单播频道,播放器停止播放;\n * 如频道地址为 http://的地址,则浏览器不作操作。\n * 【注】:本方法只用于离开通过 joinChannel 方法加入的频道。\n * @returns {int} 0,表示成功;-1:表示频道号无效。\n */\n leaveChannel() {\n logTrace(\"leaveChannel, key=\" + this.key + \", channelID=\" + this.channelID);\n if (this.type === \"audio\") {\n logWarning$1(\"Audio player do not support leaveChannel.\");\n return 0;\n }\n let ret = this.leaveChannelPrivate();\n this.currentEventStatus = EVENT_STATUS_NONE;\n this.eventReport = true;\n return ret;\n }\n leaveChannelPrivate() {\n let ret = 0;\n if (this.type === \"audio\") {\n logWarning$1(\"Audio player do not support leaveChannelPrivate.\");\n return ret;\n }\n if (this.playerCreate && this.appVisible) {\n ret = window.jsvPlayerBridge.leaveChannel(this.key);\n }\n this.channelID = -1;\n return ret;\n }\n // /**\n // * 快进。\n // * @param {float} speed 2至32\n // */\n // fastForward(value) {\n // this.setState(\"fastForward\", value, \"number\");\n // }\n // /**\n // * 快退。\n // * @param {float} speed -2至-32\n // */\n // fastRewind(value) {\n // this.setState(\"fastForward\", value, \"number\");\n // }\n /**\n * 当流停止后,不需要显示最后一帧,调用此接口清除。\n */\n clearLastFrame() {\n logTrace(\"clearLastFrame, key=\" + this.key);\n if (typeof window.jsvPlayerBridge !== \"undefined\") {\n window.jsvPlayerBridge.clearLastFrame(this.key);\n }\n return;\n }\n /**\n * @return {int} 当前音量,0-100。\n * */\n getGlobalVolume() {\n logTrace(\"getGlobalVolume, key=\" + this.key);\n if (typeof window.jsvPlayerBridge !== \"undefined\") {\n return window.jsvPlayerBridge.getGlobalVolume(100);\n }\n return 0;\n }\n /**\n * 设置系统音量。\n * @param {int} volume 0-100,音量值。\n * @param {int} flags 1表示显示音量调节UI;4表示使用提示音;5表示同时显示音量调节UI和使用提示音。\n * */\n setGlobalVolume(volume, flags) {\n logTrace(\"setGlobalVolume, key=\" + this.key + \", volume=\" + volume + \", flags=\" + flags);\n if (typeof window.jsvPlayerBridge !== \"undefined\") {\n return window.jsvPlayerBridge.setGlobalVolume(volume, typeof flags != \"undefined\" ? flags : 0, 100);\n }\n }\n /**\n * 调整系统音量,一次设置一个步长。\n * @param {int} direction 1增大音量;-1减小音量。\n * @param {int} flags FLAG_SHOW_UI(1)表示显示音量调节UI;FLAG_PLAY_SOUND(4)表示使用提示音。两个值可以是或的关系。\n * */\n adjustGlobalVolume(direction, flags) {\n logTrace(\"adjustGlobalVolume, key=\" + this.key + \", direction=\" + direction + \", flags=\" + flags);\n if (typeof window.jsvPlayerBridge !== \"undefined\") {\n return window.jsvPlayerBridge.adjustGlobalVolume(direction, typeof flags != \"undefined\" ? flags : 0);\n }\n }\n /**\n * 设置系统静音状态。\n * @param {boolean} status true表示静音,false表示取消静音。\n * @param {int} flags FLAG_SHOW_UI(1)表示显示音量调节UI;FLAG_PLAY_SOUND(4)表示使用提示音。两个值可以是或的关系。android 6.0(包含)以上有效。\n * */\n setGlobalMuted(status, flags) {\n logTrace(\"setGlobalMuted, key=\" + this.key + \", status=\" + status + \", flags=\" + flags);\n if (typeof window.jsvPlayerBridge !== \"undefined\") {\n logDebug(\"setMuted:\" + status);\n window.jsvPlayerBridge.setGlobalMuted(status, typeof flags != \"undefined\" ? flags : 0);\n }\n }\n /**\n * 获取系统静音状态。\n * @return {boolean} true表示静音,false表示非静音。\n * */\n getGlobalMutedStatus() {\n logTrace(\"getGlobalMutedStatus, key=\" + this.key);\n if (typeof window.jsvPlayerBridge !== \"undefined\") {\n return window.jsvPlayerBridge.getGlobalMutedStatus();\n }\n }\n /**\n * 回到视频的开头。\n */\n gotoStart() {\n logTrace(\"gotoStart, key=\" + this.key);\n if (this.playerCreate && this.appVisible) {\n window.jsvPlayerBridge.gotoStart(this.key);\n } else {\n this.state[\"currentTime\"] = 0;\n }\n }\n /**\n * 到达视频的末尾。\n */\n gotoEnd() {\n logTrace(\"gotoEnd, key=\" + this.key);\n if (this.playerCreate && this.appVisible) {\n window.jsvPlayerBridge.gotoEnd(this.key);\n }\n }\n /**\n * 获取timeShift状态,包含是否支持时移以及最大时移时间。\n * @returns {JsonObject} 包含两个字段:1、timeShift,boolean类型,true表示支持时移;2、timeShiftLength,int类型,最大时移时长。\n */\n getTimeShiftInfo() {\n logTrace(\"getTimeShiftInfo, key=\" + this.key);\n let result = this.getProperty(\"timeShift\");\n if (result != null && result != \"\")\n return JSON.parse(result);\n return null;\n }\n /**\n * 设置时移时间。\n * @param {double} time,值为从当前时间计算向前移动了多长时间,单位秒。\n */\n setTimeShift(time) {\n logTrace(\"setTimeShift, key=\" + this.key + \", time=\" + time);\n if (this.type === \"audio\") {\n logWarning$1(\"Audio player do not support setTimeShift.\");\n return;\n }\n if (this.playerCreate && this.appVisible) {\n window.jsvPlayerBridge.setTimeShift(this.key, time);\n }\n }\n /**\n * 设置色度抠像参数,只支持扣绿。\n * 参考格式:{color: 0x30FF30, colorDistance: 0.15, edgeDistance: 0.4, greenOffset: 0.05}\n * @param {JSON object} chromaKey,抠像参数,JSON Object包含的参数如下:\n * color,色值,int类型,为抠图色值范围的中心点,格式为0xRRGGBB。\n * colorDistance,float类型,色域范围,范围0-1.0。\n * edgeDistance,float类型,alpha透明度距离,范围colorDistance-1.0,从colorDistance到edgeDistance的alpha值从1.0-0线性递减。\n * greenOffset,float类型,红蓝差值,范围0-1.0。\n */\n setChromaKey(chromaKey) {\n logTrace(\"setChromaKey, key=\" + this.key + \", chroma key=\" + JSON.stringify(chromaKey));\n if (this.type === \"audio\") {\n logWarning$1(\"Audio player do not support setChromaKey.\");\n return;\n }\n this.setState(\"chromaKey\", JSON.stringify(chromaKey), \"string\");\n }\n setDebugMode(mode) {\n logTrace(\"setDebugMode, key=\" + this.key + \", mode=\" + mode);\n if (typeof window.jsvPlayerBridge !== \"undefined\") {\n return window.jsvPlayerBridge.setDebugMode(this.key, mode);\n }\n }\n /**\n * 获取是否支持倍速设置,在onCanPlay事件发送以后,通过此接口查询。\n * @returns {boolean} true:支持播放倍速设置;false:不支持播放倍速设置。\n * */\n supportPlaybackRateSet() {\n logTrace(\"supportPlaybackRateSet, key=\" + this.key);\n if (typeof window.jsvPlayerBridge !== \"undefined\") {\n return window.jsvPlayerBridge.supportRateSet(this.key);\n }\n return false;\n }\n /**\n * 私有接口,外部不需要调用此接口。\n */\n setState(key, value, type) {\n if (typeof value !== type) {\n logWarning$1(\"invalid paramter type to set \" + key + \". value is not \" + type);\n return;\n }\n this.state[key] = value;\n logDebug(\"set \" + key + \" = \" + value);\n let param = {};\n param[key] = value;\n if (this.playerCreate && this.appVisible) {\n window.jsvPlayerBridge.SetProperty(this.key, JSON.stringify(param));\n }\n }\n /**\n * 私有接口,外部不需要调用此接口。\n */\n getState(key) {\n let value = this.state[key];\n logDebug(\"get \" + key + \" = \" + value);\n if (typeof value == \"undefined\" && this.playerCreate && this.appVisible) {\n value = window.jsvPlayerBridge.GetProperty(this.key, key);\n this.state[key] = value;\n }\n return value;\n }\n /**\n * 私有接口,外部不需要调用此接口。\n */\n getProperty(key) {\n if (this.playerCreate && typeof window.jsvPlayerBridge != \"undefined\" && this.appVisible) {\n let result_str = window.jsvPlayerBridge.GetProperty(this.key, key);\n if (result_str == null || result_str == \"\")\n return null;\n let result = JSON.parse(result_str);\n if (result.hasOwnProperty(key))\n return result[key];\n return null;\n }\n return null;\n }\n}\nclass JsvMedia extends JsvBaseMedia {\n constructor(type, window_mode, hole_id, player_type, key, background, design_map_width, decode_type) {\n super(type, window_mode, hole_id, player_type, key, background, design_map_width, decode_type);\n }\n}\nclass JsvMediaAudio extends JsvMedia {\n constructor(key, design_map_width) {\n super(\"audio\", \"resizable\", 0, 3, key, true, design_map_width, 0);\n }\n}\nclass JsvMediaVideo extends JsvMedia {\n constructor(hole_id, window_mode, player_type, key, background, design_map_width, decode_type) {\n super(\"video\", window_mode, hole_id, player_type, key, background, design_map_width, decode_type);\n this.state.aspectRatio = \"origin\";\n }\n /**\n * 属性,string类型,设置海报地址,未实现。\n */\n set poster(value) {\n logWarning$1(\"Video.poster() TODO\");\n }\n /**\n * 属性,string类型,设置和读取显示模式。\n * full(fill模式)表示拉升至充满显示区域;origin(contain模式)表示原始比例缩放至宽或高和显示区域相等(不超过显示区域);x:y表示按照指定比例显示。\n */\n get videoAspectRatio() {\n return this.getState(\"aspectRatio\");\n }\n set videoAspectRatio(value) {\n this.setState(\"aspectRatio\", value, \"string\");\n }\n /**\n * 属性,int类型,只读,获取视频的宽。\n */\n get videoHeight() {\n return this.getState(\"videoHeight\");\n }\n /**\n * 属性,int类型,只读,获取视频的宽。\n */\n get videoWidth() {\n return this.getState(\"videoWidth\");\n }\n}\nfunction getJsvPlayerCapabilitySet$1() {\n if (typeof window.jsvPlayerBridge !== \"undefined\") {\n return window.jsvPlayerBridge.getCapabilitySet();\n }\n return null;\n}\nfunction setJsvPlayerNumber(videoType, num) {\n logTrace(\"setPlayerNumber, videoType=\" + videoType + \", num=\" + num);\n if (typeof window.jsvPlayerBridge !== \"undefined\") {\n return window.jsvPlayerBridge.setPlayerNumber(videoType, num);\n } else {\n return null;\n }\n}\nfunction setJsvPlayerDebugMode$1(mode) {\n logTrace(\"setJsvPlayerDebugMode, mode=\" + mode);\n if (typeof window.jsvPlayerBridge !== \"undefined\") {\n window.jsvPlayerBridge.setDebugMode(null, mode);\n }\n}\nfunction getJsvPlayerRunningNum$1() {\n logTrace(\"getJsvPlayerRunningNum\");\n if (typeof window.jsvPlayerBridge !== \"undefined\") {\n return window.jsvPlayerBridge.getRunningPlayerNum();\n }\n return -1;\n}\nfunction setOperator(operator) {\n logTrace(\"setOperator\");\n if (typeof window.jsvPlayerBridge !== \"undefined\") {\n return window.jsvPlayerBridge.setOperator(operator);\n }\n}\nfunction globalLoadSetOperator$1(operator) {\n setOperator(operator);\n}\n\n//!\n//! utils/JsViewVueWidget/JsvActorMove/ActorControlBase.js;\n//!\n//! JsvSpriteBase comes from JsView React Project\nclass ActorControlBase {\n constructor(params_count) {\n this._Current = new Array(params_count).fill(0);\n this._Target = new Array(params_count).fill(0);\n this._ParameterCount = params_count;\n this._StateIndex = 0;\n this._StateLocked = false;\n this._StartSwitcher = false;\n this._StartingParams = null;\n this._PausedCallback = null;\n this._EndCallback = null;\n this._NextEndCallback = null;\n this._Token = 0;\n this._SpriteView = null;\n }\n start(start_params, end_callback) {\n this._NextEndCallback = end_callback;\n this._EndCallback = null;\n this._StartingParams = start_params;\n this._StartSwitcher = true;\n this._StateMachineNext();\n }\n pause(paused_callback) {\n if (this._EndCallback !== null || this._NextEndCallback !== null) {\n this._EndCallback = null;\n this._NextEndCallback = null;\n }\n if (this._StateIndex === 0) {\n if (paused_callback) {\n this._CallbackWithCatch(\n this._Current,\n paused_callback,\n this._StartingParams\n /* 使用最后一次启动参数作为回调 */\n );\n }\n } else {\n if (paused_callback) {\n this._PausedCallback = paused_callback;\n }\n this._StateMachineNext();\n }\n }\n startFpsTesting() {\n Forge$1.sRenderBridge.SetStepFpsSwitch(true);\n }\n stopFpsTesting() {\n Forge$1.sRenderBridge.SetStepFpsSwitch(false);\n }\n altStraightSpeedInner(newSpeedPerSecond, time) {\n Forge$1.AnimFireCommand.AltSpeed(this._SpriteView, newSpeedPerSecond, time);\n }\n _WrapBuildAnimation(repeat_start_array, current_array, tos_array, start_params) {\n console.warn(\"Should Override\", repeat_start_array, current_array, tos_array, start_params);\n }\n _WrapAddExtraListener(listener, start_params) {\n console.warn(\"Should Override\", listener, start_params);\n }\n _WrapCallback(currents, callback, start_params) {\n console.warn(\"Should Override\", currents, callback, start_params);\n }\n _WrapReCalculateCurrent(froms, tos, progress, start_params) {\n console.warn(\"Should Override\", froms, tos, progress, start_params);\n }\n _CallbackWithCatch(currents, callback, start_params) {\n try {\n this._WrapCallback(currents, callback, start_params);\n } catch (e) {\n console.error(\"Error:in callback:\", e);\n }\n }\n _StateMachineNext() {\n if (this._StateLocked) {\n return;\n }\n if (this._StateIndex === 0) {\n if (this._StartSwitcher) {\n this._StartSwitcher = false;\n if (this._StartAnimation()) {\n this._StateIndex = 1;\n }\n }\n } else if (this._StateIndex === 1) {\n this._StopAnimation();\n }\n }\n _StartAnimation() {\n this._EndCallback = this._NextEndCallback;\n this._NextEndCallback = null;\n const start_params = this._StartingParams;\n this._StartingParams = null;\n const froms = [...this._Current];\n const tos = this._Target;\n const anim = this._WrapBuildAnimation(froms, tos, start_params);\n const memo_tos = [...tos];\n const that = this;\n const listener = new Forge$1.AnimationListener().OnFinalProgress(\n (progress) => {\n that._OnPaused(\n froms,\n memo_tos,\n progress,\n start_params\n );\n }\n );\n if (anim === null) {\n setTimeout(() => {\n that._OnPaused(\n froms,\n memo_tos,\n 1,\n start_params\n );\n }, 0);\n return;\n }\n this._WrapAddExtraListener(listener, start_params);\n anim.AddAnimationListener(listener);\n anim.Enable(Forge$1.AnimationEnable.KeepTransform);\n this._SpriteView.StartAnimation(anim);\n return true;\n }\n _StopAnimation() {\n this._SpriteView.StopAnimation();\n }\n _OnPaused(froms, tos, progress, start_params) {\n this._WrapReCalculateCurrent(froms, tos, progress, start_params);\n this._StateLocked = true;\n this._StateIndex = 0;\n const paused_callback = this._PausedCallback;\n const ended_callback = this._EndCallback;\n this._PausedCallback = null;\n this._EndCallback = null;\n if (paused_callback) {\n this._CallbackWithCatch(this._Current, paused_callback, start_params);\n }\n if (ended_callback && progress === 1) {\n this._CallbackWithCatch(this._Current, ended_callback, start_params);\n }\n this._StateLocked = false;\n this._StateMachineNext();\n }\n _SetView(jsv_view) {\n this._SpriteView = jsv_view;\n }\n}\n\n//!\n//! utils/JsViewVueWidget/JsvActorMove/JsvActorMoveControl.js;\n//!\nconst CONST_MOVE_TYPE_ACC = 1;\nconst CONST_MOVE_TYPE_UNIFORM = 2;\nconst CONST_MOVE_TYPE_JUMP = 3;\n//! 单向运动控制模块,单方向指的是只能进行一个方向的运动,要不是x,要不是y\nclass JsvActorMoveControl extends ActorControlBase {\n constructor() {\n super(2);\n }\n /*\n * moveToX 参数说明:\n * paused_callback (Function(x,y)) 运动暂停完成后的回调,回报当前JsvActorMove的相对x,y\n */\n pause(paused_callback) {\n super.pause(paused_callback);\n }\n /*\n * moveToX 参数说明:\n * target_x (int) 带符号整数,标识运动的目标位置,相对于JsvActorMove当前位置\n * speed (int) 带符号整数,符号表示方向,标识运动的运行速度,单位(pixel/s)\n * end_callback (Function(x,y)) 运动到目标位置后的回调函数,回报当前JsvActorMove的相对x,y\n */\n moveToX(target_x, speed, end_callback) {\n this._UniformMove(0, target_x, NaN, speed, null, end_callback);\n }\n /*\n * moveToY 参数说明:\n * target_y (int) 带符号整数,标识运动的目标位置,相对于JsvActorMove当前位置\n * speed (int) 带符号整数,符号表示方向,标识运动的运行速度,单位(pixel/s)\n * end_callback (Function(x,y)) 运动到目标位置后的回调函数,回报当前JsvActorMove的相对x,y\n */\n moveToY(target_y, speed, end_callback) {\n this._UniformMove(1, NaN, target_y, speed, null, end_callback);\n }\n /*\n * altStraightSpeed \n * 将由moveToX, moveToY, scrollMoveAlongX, scrollMoveAlongY 发起的直线运动进行均匀变速\n * 参数说明:\n * spnewSpeedPerSecond (int) 带符号整数,符号表示方向,标识运动的运行速度,单位(pixel/s)\n * time (int)减速过程的时长,单位毫秒\n */\n altStraightSpeed(newSpeedPerSecond, time) {\n this.altStraightSpeedInner(newSpeedPerSecond, time);\n }\n /*\n * scrollMoveAlongX 用于背景无限滚轴动画效果的接口,参数说明:\n * target_x (int) 带符号整数,标识运动的目标位置,相对于JsvActorMove当前位置\n * speed (int) 带符号整数,符号表示方向,标识运动的运行速度,单位(pixel/s)\n * repeat_start (int) 带符号整数,标识往复运动的起始点,使用时注意,JsvActorMove的当前位置必须在\n * repeat_start和target_x之间\n * repeat_callback (Function(times)) 完整一个运动周期后的回调,返回当前运动的周期数times\n */\n scrollMoveAlongX(target_x, speed, repeat_start, repeat_callback) {\n this._UniformMove(\n 0,\n target_x,\n NaN,\n speed,\n {\n start: repeat_start,\n repeatCallback: repeat_callback\n },\n null\n );\n }\n /*\n * scrollMoveAlongY 用于背景无限滚轴动画效果的接口,参数说明:\n * target_y (int) 带符号整数,标识运动的目标位置,相对于JsvActorMove当前位置\n * speed (int) 带符号整数,符号表示方向,标识运动的运行速度,单位(pixel/s)\n * repeat_start (int) 带符号整数,标识往复运动的起始点,使用时注意,JsvActorMove的当前位置必须在\n * repeat_start和target_y之间\n * repeat_callback (Function(times)) 完整一个运动周期后的回调,返回当前运动的周期数times\n */\n scrollMoveAlongY(target_y, speed, repeat_start, repeat_callback) {\n this._UniformMove(\n 1,\n NaN,\n target_y,\n speed,\n {\n start: repeat_start,\n repeatCallback: repeat_callback\n },\n null\n );\n }\n _UniformMove(x_or_y, target_x, target_y, speed, repeat_set, end_callback) {\n const start_params = {\n type: CONST_MOVE_TYPE_UNIFORM,\n xOrY: x_or_y,\n speed,\n repeatSet: repeat_set\n };\n this._Target[0] = target_x;\n this._Target[1] = target_y;\n super.start(start_params, end_callback);\n }\n /*\n * throwAlongX 参数说明:\n * init_v (int) 带符号整形,描素运动初速度,单位(pixel/s)\n * acc (int) 带符号整形,描素运动的加速度,单位(pixel/(s*s))\n * end_condition (Object) 动画结束的条件设定\n * 格式{type:\"catch\", position:xxx, offset:xxx, direction: 1 or -1}\n * 例如:\n * 1. X轴方向运动,在相对于起始点右方30px位置,接住向上运动的物体时,\n * 设置 direction = -1, offset = -30\n * 2. X轴方向运动,在相对于起始点左方30px位置,接住运动到右边界后回旋向左的运动的物体时,\n * 设置 direction = 1, offset = 30\n * position为相对于元素0点位置的绝对坐标,和offset的设定二选一\n * end_callback (Function(x,y)) 运动到目标位置后的回调函数,回报当前JsvActorMove的相对x,y\n * pole_callback (Function(void)) 动画运行到拐点时的回调\n */\n throwAlongX(init_v, acc, end_condition, end_callback, pole_callback) {\n this._Throw(0, init_v, acc, end_condition, end_callback, pole_callback);\n }\n /*\n * throwAlongY 参数说明:\n * init_v (int) 带符号整形,描素运动初速度,单位(pixel/s)\n * acc (int) 带符号整形,描素运动的加速度,单位(pixel/(s*s))\n * end_condition (Object) 动画结束的条件设定\n * 格式{type:\"catch\", position:xxx, offset:xxx, direction: 1 or -1}\n * 例如:\n * 1. Y轴方向运动,在相对于起始点上方30px位置,接住向上运动的物体时,\n * 设置 direction = -1, offset = -30\n * 2. Y轴方向运动,在相对于起始点下方30px位置,接住运动到高点后跌落下来的运动的物体时,\n * 设置 direction = 1, offset = 30\n * position为相对于元素0点位置的绝对坐标,和offset的设定二选一\n * end_callback (Function(x,y)) 运动到目标位置后的回调函数,回报当前JsvActorMove的相对x,y\n * pole_callback (Function(void)) 动画运行到拐点时的回调\n */\n throwAlongY(init_v, acc, end_condition, end_callback, pole_callback) {\n this._Throw(1, init_v, acc, end_condition, end_callback, pole_callback);\n }\n _Throw(x_or_y, init_v, acc, end_condition, end_callback, pole_callback) {\n let super_start = super.start.bind(this);\n super.pause(() => {\n const start_params = this._CalculateTerminalStatus(x_or_y, init_v, acc, end_condition, pole_callback);\n if (start_params !== null) {\n super_start(start_params, end_callback);\n } else {\n }\n });\n }\n /*\n * jumpTo 参数说明:\n * new_x (int) 带符号整数,标识目标位置,数值相对于JsvActorMove在render中的起始位置\n * new_y (int) 带符号整数,标识目标位置,数值相对于JsvActorMove在render中的起始位置\n */\n jumpTo(new_x, new_y) {\n this._Target[0] = new_x;\n this._Target[1] = new_y;\n const start_params = {\n type: CONST_MOVE_TYPE_JUMP\n };\n super.start(start_params, null);\n }\n _CalculateTerminalStatus(x_or_y, init_v, acc, end_condition, pole_callback) {\n const start_params = {\n type: CONST_MOVE_TYPE_ACC,\n xOrY: x_or_y,\n initV: init_v,\n acc,\n hasPole: false,\n polePosition: 0,\n poleCallback: pole_callback,\n isPositiveMove: init_v > 0 || init_v === 0 && acc > 0\n };\n let start_pos = x_or_y === 0 ? this._Current[0] : this._Current[1];\n if (acc === 0) {\n console.error(\"Error: Acceleration is not inited!\");\n return null;\n }\n let direction_revert = false;\n let catch_direction = end_condition.direction;\n let catch_pos = Object.prototype.hasOwnProperty.call(end_condition, \"position\") ? end_condition.position : end_condition.offset + start_pos;\n let move_pole_pos = 0;\n let trace_include_pole = false;\n if (init_v < 0 || init_v === 0 && acc < 0) {\n direction_revert = true;\n init_v = -init_v;\n acc = -acc;\n start_pos = -start_pos;\n catch_direction = -catch_direction;\n catch_pos = -catch_pos;\n }\n if (acc * init_v < 0) {\n move_pole_pos = start_pos + init_v * init_v / 2 / -acc;\n if (init_v * catch_direction < 0) {\n if (catch_pos > move_pole_pos) {\n console.error(`Error: can not catch, range(<${move_pole_pos}), but catch=${catch_pos}`);\n return null;\n }\n trace_include_pole = true;\n } else {\n if (catch_pos > move_pole_pos || catch_pos < start_pos) {\n console.error(`Error: can not catch, range(${start_pos}-${move_pole_pos}), but catch=${catch_pos}`);\n return null;\n }\n }\n } else {\n if (acc * catch_direction < 0) {\n console.error(\"Error: can not catch, direction incorrect\");\n return null;\n }\n if (catch_pos < start_pos) {\n console.error(`Error: can not catch, range(>${start_pos}), but catch=${catch_pos}`);\n return null;\n }\n }\n if (direction_revert) {\n catch_pos = -catch_pos;\n move_pole_pos = -move_pole_pos;\n }\n start_params.hasPole = trace_include_pole;\n start_params.polePosition = move_pole_pos;\n if (x_or_y === 0) {\n this._Target[0] = catch_pos;\n this._Target[1] = this._Current[1];\n } else {\n this._Target[0] = this._Current[0];\n this._Target[1] = catch_pos;\n }\n return start_params;\n }\n _BuildAccelAnimation(current_array, tos_array, start_params) {\n const anim = new Forge$1.ThrowAnimation(\n current_array[0],\n current_array[1],\n start_params.xOrY,\n start_params.initV,\n start_params.acc,\n start_params.xOrY === 0 ? tos_array[0] : tos_array[1],\n start_params.hasPole,\n start_params.polePosition\n );\n anim.SetPoleCallback(start_params.poleCallback);\n return anim;\n }\n _BuildUniformMoveAnimation(current_array, tos_array, start_params) {\n const affect_x = start_params.xOrY === 0;\n const from_pos = affect_x ? current_array[0] : current_array[1];\n const to_pos = affect_x ? tos_array[0] : tos_array[1];\n let anim = null;\n if (from_pos == to_pos) {\n return null;\n }\n if (start_params.repeatSet !== null) {\n const repeat_set = start_params.repeatSet;\n const start_percent = (from_pos - repeat_set.start) / (to_pos - repeat_set.start);\n if (start_percent > 1 || start_percent < 0) {\n console.error(`Error: current=${from_pos} out of repeat range[${repeat_set.start}-${to_pos}]`);\n return null;\n }\n anim = new Forge$1.TranslateFrameAnimation(\n repeat_set.start,\n to_pos,\n start_params.speed,\n affect_x,\n current_array[0],\n current_array[1]\n );\n anim.SetStartPos(start_percent);\n anim.EnableInfinite();\n } else {\n anim = new Forge$1.TranslateFrameAnimation(\n from_pos,\n to_pos,\n start_params.speed,\n affect_x,\n current_array[0],\n current_array[1]\n );\n }\n return anim;\n }\n _BuildJumpAnimation(current_array, tos_array) {\n const anim = new Forge$1.TranslateAnimation(\n tos_array[0],\n tos_array[0],\n tos_array[1],\n tos_array[1],\n 1,\n null\n );\n return anim;\n }\n _ReCalculateAccelCurrent(froms, tos, progress, start_params) {\n const position = { x: { value: froms[0] }, y: { value: froms[1] } };\n let from = start_params.xOrY === 0 ? position.x.value : position.y.value;\n let to = start_params.xOrY === 0 ? tos[0] : tos[1];\n const result_position_ref = start_params.xOrY === 0 ? position.x : position.y;\n let result_pos_value = 0;\n from = start_params.isPositiveMove ? from : -from;\n to = start_params.isPositiveMove ? to : -to;\n const pole_position = start_params.isPositiveMove ? start_params.polePosition : -start_params.polePosition;\n if (start_params.hasPole) {\n const moved = (pole_position * 2 - from - to) * progress;\n if (moved > pole_position - from) {\n result_pos_value = pole_position - (moved - (pole_position - from));\n } else {\n result_pos_value = from + moved;\n }\n } else {\n result_pos_value = from + (to - from) * progress;\n }\n result_position_ref.value = Math.floor(start_params.isPositiveMove ? result_pos_value : -result_pos_value);\n this._Current[0] = position.x.value;\n this._Current[1] = position.y.value;\n }\n _ReCalculateUMoveCurrent(froms, tos, progress, start_params) {\n let repeat_start = start_params?.repeatSet?.start;\n if (start_params.xOrY === 0) {\n froms[0] = repeat_start ? repeat_start : froms[0];\n const value = (tos[0] - froms[0]) * progress + froms[0];\n const direction = value >= 0 ? 1 : -1;\n this._Current[0] = direction * Math.floor(Math.abs(value));\n } else {\n froms[1] = repeat_start ? repeat_start : froms[1];\n const value = (tos[1] - froms[1]) * progress + froms[1];\n const direction = value >= 0 ? 1 : -1;\n this._Current[1] = direction * Math.floor(Math.abs(value));\n }\n }\n _ReCalculateJumpCurrent(froms, tos) {\n this._Current[0] = tos[0];\n this._Current[1] = tos[1];\n }\n // 异常内部函数\n start() {\n }\n // Override\n _WrapBuildAnimation(current_array, tos_array, start_params) {\n if (start_params.type === CONST_MOVE_TYPE_ACC) {\n return this._BuildAccelAnimation(current_array, tos_array, start_params);\n }\n if (start_params.type === CONST_MOVE_TYPE_UNIFORM) {\n return this._BuildUniformMoveAnimation(current_array, tos_array, start_params);\n }\n if (start_params.type === CONST_MOVE_TYPE_JUMP) {\n return this._BuildJumpAnimation(current_array, tos_array);\n }\n console.error(\"Error:Undefined yet\");\n }\n // Override\n _WrapAddExtraListener(listener, start_params) {\n if (start_params.type === CONST_MOVE_TYPE_UNIFORM) {\n if (start_params.repeatSet !== null && start_params.repeatSet.repeatCallback) {\n const repeat_callback = start_params.repeatSet.repeatCallback;\n listener.OnRepeat((times) => {\n repeat_callback(times);\n });\n }\n }\n }\n // Override\n _WrapCallback(currents, callback, start_params) {\n if (callback) {\n callback(currents[0], currents[1], start_params);\n }\n }\n // Override\n _WrapReCalculateCurrent(froms, tos, progress, start_params) {\n if (start_params.type === CONST_MOVE_TYPE_ACC) {\n this._ReCalculateAccelCurrent(froms, tos, progress, start_params);\n } else if (start_params.type === CONST_MOVE_TYPE_UNIFORM) {\n return this._ReCalculateUMoveCurrent(froms, tos, progress, start_params);\n } else if (start_params.type === CONST_MOVE_TYPE_JUMP) {\n return this._ReCalculateJumpCurrent(froms, tos);\n } else {\n console.error(\"Error:Undefined yet\");\n }\n }\n}\n\n//!\n//! utils/JsViewVueWidget/JsvActorMove/JsvActorMove.vue;\n//!\n/*! <!--\n * @Author: ChenChanghua\n * @Date: 2021-10-20 17:21:21\n * @LastEditors: ChenChanghua\n * @LastEditTime: 2022-08-31 11:14:13\n * @Description: file content\n-->\n\n<!--\n * 【模块 export 内容】\n * JsvActorMove:单轴(X 或 Y)运动控制控件,可控制完成单方向的匀速运动和变速运动(抛物运动),\n * 若想进行X和Y轴同时的运动,可以通过运动分解后的两个JsvActorMove进行组合来实现\n * props说明:\n * control {JsvActorMoveControl} JsvActorMove控制器实体,通过new JsvActorMoveControl()生成,说明见下文\n *\n * JsvActorMoveControl: 面向对象的类,JsvActorMove控制器\n * 功能函数:(参数说明见函数本体)\n * moveToX(target_x, speed, end_callback)\n * 功能:延X轴进行匀速运动\n * moveToY(target_y, speed, end_callback)\n * 功能:延Y轴进行匀速运动\n * scrollMoveAlongX(target_x, speed, repeat_start, repeat_callback)\n * 功能:延X轴进行重复匀速运动\n * scrollMoveAlongY(target_y, speed, repeat_start, repeat_callback)\n * 功能:延Y轴进行重复匀速运动\n * throwAlongX(init_v, acc, end_condition, end_callback, pole_callback)\n * 功能:延X轴进行回旋运动\n * throwAlongY(init_v, acc, end_condition, end_callback, pole_callback)\n * 功能:延Y轴进行回旋运动(例如Y轴抛物运动)\n * jumpTo(new_x, new_y)\n * 功能:直接将JsvActorMove移动到目标位置,无中间运动动画\n * pause(pause_callback)\n * 功能:暂停动画,并将JsvActorMove保持在暂停的位置上\n * pause(pause_callback)\n * 功能:暂停动画,并将JsvActorMove保持在暂停的位置上\n * altStraightSpeed(newSpeedPerSecond, time)\n * 功能: 将由moveToX, moveToY, scrollMoveAlongX, scrollMoveAlongY 发起的直线运动进行均匀变速\n\n-->\n\n\n\n */\nconst _sfc_main$C = {\n __name: \"JsvActorMove\",\n props: {\n control: {\n type: JsvActorMoveControl,\n required: true\n }\n },\n setup(__props, { expose }) {\n const props = __props;\n let mainDivRef = shallowRef(null);\n onMounted(() => {\n props.control._SetView(mainDivRef.value.jsvGetProxyView());\n });\n expose({\n mainDiv: mainDivRef\n });\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", {\n ref_key: \"mainDivRef\",\n ref: mainDivRef\n }, [\n renderSlot(_ctx.$slots, \"default\")\n ], 512);\n };\n }\n};\n\n//!\n//! utils/JsViewVueWidget/JsvActorMove/index.js;\n//!\n\n//!\n//! utils/JsViewVueWidget/JsvFreeMoveActor/FreeMoveActor.vue;\n//!\n/*! <!--\n * @Author: donglin.lu@qcast.cn\n * @Date: 2023-07-05 17:21:21\n * @LastEditors: donglin.lu@qcast.cn\n * @Description: file content\n-->\n\n<!--\n * 【模块 export 内容】\n * JsvFreeMoveActor:单轴(X 或 Y)运动控制控件,可控制完成单方向的匀速运动和变速运动(抛物运动),\n * 若想进行X和Y轴同时的运动,可以通过运动分解后的两个JsvActorMove进行组合来实现\n * props说明:\n *\n-->\n\n\n\n */\nconst _sfc_main$B = {\n __name: \"FreeMoveActor\",\n props: {\n // 设置给父节点,动画节点必须top/left为0, 以保证PC端模拟通过style直接获取当前位置信息的逻辑能通过\n top: {\n default: 0,\n type: Number\n },\n left: {\n default: 0,\n type: Number\n },\n // 设置给实际的动画节点\n width: {\n default: 0,\n type: Number\n },\n height: {\n default: 0,\n type: Number\n }\n },\n setup(__props, { expose }) {\n const props = __props;\n let mainDivRef = shallowRef(null);\n let controller = new ActorControl();\n onMounted(() => {\n controller.bindForgeView(mainDivRef.value.jsvGetProxyView());\n });\n expose({\n control: controller\n });\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", {\n style: normalizeStyle({\n top: props.top,\n left: props.left\n })\n }, [\n createElementVNode(\"div\", {\n ref_key: \"mainDivRef\",\n ref: mainDivRef,\n style: normalizeStyle({\n top: 0,\n left: 0,\n width: props.width,\n height: props.height\n })\n }, [\n renderSlot(_ctx.$slots, \"default\")\n ], 4)\n ], 4);\n };\n }\n};\n\n//!\n//! utils/JsViewVueWidget/JsvFreeMoveActor/KeepFlags.ts;\n//!\nconst KeepFlags = {\n None: 0,\n X: 1,\n Y: 2,\n XY: 3\n /* 1 & 2 位运算 */\n};\n\n//!\n//! utils/JsViewVueWidget/JsvFreeMoveActor/JsvEnvBlocker.vue;\n//!\n/*! <!--\n * 【模块 export 内容】\n * JsvEnvBlocker: 触发FreeMoveAnimation的 blockerCondition 的全屏碰撞体\n * props说明:\n * top, left, width, height(Number): 关联的div的定位信息\n * topGID(Number): 上边缘响应监听的组id(用于blockerCondition的组参数), 0或者undefined代表不激活这条边的测试\n * bottomGID(Number): 下边缘响应监听的组id\n * leftGID(Number): 左边缘响应监听的组id\n * rightGID(Number): 右边缘响应监听的组id\n * \n-->\n\n\n\n\n */\nconst _sfc_main$A = {\n __name: \"JsvEnvBlocker\",\n props: {\n // (支持reactive)位置信息\n left: {\n type: Number,\n default: 0\n },\n top: {\n type: Number,\n default: 0\n },\n width: {\n type: Number,\n require: true\n },\n height: {\n type: Number,\n require: true\n },\n // 四边关联的Group id, 和 blockerCondition的参数对应,若不设置或者为0则此边不触发condition\n topGID: {\n type: Number\n },\n bottomGID: {\n type: Number\n },\n leftGID: {\n type: Number\n },\n rightGID: {\n type: Number\n },\n // (支持reactive)是否激活,仍然在渲染树时,非必须可以通过enable关闭以节省CPU开销\n enable: {\n type: Boolean,\n default: true\n }\n },\n setup(__props) {\n const props = __props;\n const viewRef = shallowRef(null);\n const viewMounted = reactive({ status: false });\n let sensorRef = null;\n watchEffect(() => {\n if (viewMounted.status) {\n if (!isNaN(props.topGID)) {\n sensorRef.ResetTopGID(props.topGID);\n }\n if (!isNaN(props.bottomGID)) {\n sensorRef.ResetBottomGID(props.bottomGID);\n }\n if (!isNaN(props.leftGID)) {\n sensorRef.ResetLeftGID(props.leftGID);\n }\n if (!isNaN(props.rightGID)) {\n sensorRef.ResetRightGID(props.rightGID);\n }\n }\n });\n watchEffect(() => {\n if (viewMounted.status) {\n sensorRef.Enable(props.enable);\n }\n });\n onMounted(() => {\n console.log(\"JsvEnvBlocker: on mounted\");\n sensorRef = new Forge$1.EnvBlockerSensor(\n toRaw(viewRef.value).jsvGetProxyView()\n );\n viewMounted.status = true;\n });\n onUnmounted(() => {\n viewMounted.status = false;\n sensorRef.Enable(false);\n });\n onActivated(() => {\n sensorRef.Enable(props.enable);\n });\n onDeactivated(() => {\n sensorRef.Enable(false);\n });\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", {\n ref_key: \"viewRef\",\n ref: viewRef,\n style: normalizeStyle({\n top: props.top,\n left: props.left,\n width: props.width,\n height: props.height\n })\n }, [\n renderSlot(_ctx.$slots, \"default\")\n ], 4);\n };\n }\n};\n\n//!\n//! utils/JsViewVueWidget/JsvFreeMoveActor/index.js;\n//!\nlet FreeMoveDef = {\n ActEventDefine,\n KeepFlags\n};\nlet FreeMoveFunc = {\n newNexus\n};\n\n//!\n//! utils/JsViewVueWidget/JsvFlexCell/JsvFlexDiv.vue;\n//!\n/*! <!--\n * @Author: donglin.lu@qcast.cn\n * @Date: 2024-01-26 17:24:00\n * @LastEditors: donglin.lu@qcast.cn\n * @Description: file content\n-->\n\n<!--\n * 【模块 export 内容】\n * JsvFlexDiv: 包装成一个支持flex属性的div\n * props说明:\n * class: 等同于div的class设置\n * style: 等同于div的style,关于flex的属性支持如下:\n * 作为container:\n * flexDirection: row|row-reverse|column|column-reverse 默认row, 决定主轴为行还是列,正向还是反向\n * flexWrap: nowrap|wrap 默认nowrap, 主轴方向是否换行\n * justifyContent: flex-start|flex-end|center 默认flex-start\n * 主轴对齐方式(与direction相关决定start为左还是右)\n * alignItems: flex-start|flex-end|center|stretch 默认center\n * 副轴方向单行内的对齐方式,例如主轴为行时,项目在每行中竖直方向的对齐\n * alignContent: flex-start|flex-end|center 默认flex-start\n * 副轴方向多行内容总体的对齐方式,例如主轴为行时,项目在每行中竖直方向的对齐\n * 作为item(二级container):\n * alignSelf: auto|flex-start|flex-end|center|stretch 默认auto, 覆盖container的alignItems设置\n * 特别注意: 这些属性会引起位置对齐问题, 所以会自动去掉: \"overflow:hidden\"\n * askSize: boolean 设置会跟进flex的尺寸变化,但会降低性能\n * onSized: Function 比askSize更进一步,可以通过回调知道尺寸变化后的时机,回调参数(width, height)为flex后的尺寸\n *\n * expose说明:\n * getWidth(): 当askSize或者onSize生效时,获取元素的宽度\n * getHeight(): 当askSize或者onSize生效时,获取元素的高度\n * \n-->\n\n\n\n */\nconst _sfc_main$z = {\n __name: \"JsvFlexDiv\",\n props: {\n style: Object,\n askSize: {\n type: Boolean,\n default: false\n },\n onSized: {\n type: Function,\n default: null\n }\n },\n setup(__props, { expose }) {\n const props = __props;\n let config = shallowRef({});\n config.value[\"data-jsv-flex-container\"] = true;\n watchEffect(() => {\n config.value.style = { flexWrap: \"nowrap\", ...props.style, overflow: \"\" };\n });\n let SizeX = shallowRef(void 0);\n let SizeY = shallowRef(void 0);\n let SizeWidth = shallowRef(void 0);\n let SizeHeight = shallowRef(void 0);\n let onSizeCallback = (x, y, width, height) => {\n SizeX.value = x;\n SizeY.value = y;\n SizeWidth.value = width;\n SizeHeight.value = height;\n if (width != 0 && height != 0) {\n props.onSized?.(width, height);\n }\n };\n let containerRef = shallowRef(null);\n let flexCallbackRegisted = false;\n watchEffect(() => {\n if ((props.askSize || props.onSized != null) && containerRef.value != null) {\n if (!flexCallbackRegisted) {\n containerRef.value.jsvGetProxyView().RegisterFlexAssigned(onSizeCallback);\n flexCallbackRegisted = true;\n }\n } else {\n if (flexCallbackRegisted) {\n containerRef.value.jsvGetProxyView().RegisterFlexAssigned(null);\n flexCallbackRegisted = false;\n }\n }\n });\n expose({\n // TODO: PC模拟环境中目前没有浏览器的类似ResizeObserver接口\n // 可以监听到left/ top变化,所以先关闭Left / Top的获取\n // getLeft: () => {\n // return SizeX.value;\n // },\n // getTop: () => {\n // return SizeY.value;\n // },\n getWidth: () => {\n return SizeWidth.value;\n },\n getHeight: () => {\n return SizeHeight.value;\n }\n });\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", mergeProps({\n ref_key: \"containerRef\",\n ref: containerRef\n }, { ..._ctx.$attrs, ...unref(config) }), [\n renderSlot(_ctx.$slots, \"default\")\n ], 16);\n };\n }\n};\n\n//!\n//! utils/JsViewVueWidget/JsvFlexCell/index.js;\n//!\n\n//!\n//! utils/JsViewVueTools/ForgeHandles.js;\n//!\nlet handles = {\n TextureManager: null,\n RootView: null,\n RootActivity: null\n};\nwindow.JsvCode.ForgeHandles.listenToReady(() => {\n handles.TextureManager = window.JsvCode.ForgeHandles.TextureManager;\n handles.RootView = window.JsvCode.ForgeHandles.RootView;\n handles.RootActivity = window.JsvCode.ForgeHandles.RootActivity;\n});\n\n//!\n//! utils/JsViewVueWidget/JsvApic/JsvApic/JsvApic.vue;\n//!\n/*! <!--\n * @Author: ChenChanghua\n * @Date: 2021-10-13 13:14:42\n * @LastEditors: ChenChanghua\n * @LastEditTime: 2022-08-02 13:35:10\n * @Description: file content\n-->\n\n<!--\n * 【模块 export 内容】\n * JsvApic:Vue高阶组件,控制动图播放\n * prop说明:\n * src {string} 对应img标签的src, 传url时需要注意使用url([链接])\n * style {object} 对应img标签的style\n * loopType {enum} 循环播放类型 LOOP_DEFAULT(默认)/LOOP_INFINITE(无限)/LOOP_FINITE(有限)/LOOP_PART(部分帧循环)\n * loopInfo {int[][3]} loopType为LOOP_PART时的循环设置,\n * 格式[[循环次数1,循环开始帧1,循环结束帧1], [循环次数2,循环开始帧2,循环结束帧2], ...]\n * 通过ref=拿到句柄后,可调用的方法:\n * stop(): 停止播放\n * play(): 开始播放\n-->\n\n\n\n */\nconst _sfc_main$y = {\n props: {\n src: String,\n style: Object,\n autoPlay: {\n type: Boolean,\n default: true\n },\n loopType: {\n type: Number,\n default: LoopType.LOOP_DEFAULT\n },\n loopInfo: {\n type: Array,\n default: () => [[-1, -1, -1]]\n },\n onStart: Function,\n onEnd: Function,\n onLoad: Function\n },\n setup() {\n return {\n element: {}\n };\n },\n data() {\n return {\n onStartId: -1,\n onEndId: -1\n };\n },\n methods: {\n play() {\n if (this.$refs.element) {\n let mainViewTexture = this.$refs.element.jsvGetProxyTexture(\n handles.TextureManager\n );\n let params = {\n LT: this.loopType,\n LI: this.loopInfo\n };\n mainViewTexture.DispatchCommand(\n Forge.NativeConstant.APIC_PLAY,\n JSON.stringify(params)\n );\n mainViewTexture.unregisterOnStart(this.onStartId);\n if (this.onStart) {\n this.onStartId = mainViewTexture.registerOnStart(this.onStart);\n }\n mainViewTexture.unregisterOnEnd(this.onEndId);\n if (this.onEnd) {\n this.onEndId = mainViewTexture.registerOnEnd(this.onEnd);\n }\n }\n },\n stop() {\n if (this.$refs.element) {\n let mainViewTexture = this.$refs.element.jsvGetProxyTexture(\n handles.TextureManager\n );\n mainViewTexture.DispatchCommand(Forge.NativeConstant.APIC_STOP, \"\");\n }\n }\n },\n mounted() {\n if (this.autoPlay) {\n this.play();\n }\n if (this.onLoad) {\n if (this.$refs.element) {\n let mainViewTexture = this.$refs.element.jsvGetProxyTexture(\n handles.TextureManager\n );\n mainViewTexture.RegisterLoadImageCallback(null, this.onLoad, null);\n }\n }\n },\n beforeUnmount() {\n this.stop();\n if (this.$refs.element) {\n let mainViewTexture = this.$refs.element.jsvGetProxyTexture(\n handles.TextureManager\n );\n if (this.onStart) {\n mainViewTexture.unregisterOnStart(this.onStartId);\n }\n if (this.onEnd) {\n mainViewTexture.unregisterOnEnd(this.onEndId);\n }\n }\n }\n};\nfunction _sfc_render$c(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"img\", {\n \"data-jsv-disable-apic-autoplay\": \"\",\n alt: \"\",\n ref: \"element\",\n src: $props.src,\n style: normalizeStyle($props.style)\n }, null, 12, [\"src\"]);\n}\nconst JsvApic = /* @__PURE__ */ _export_sfc(_sfc_main$y, [[\"render\", _sfc_render$c]]);\n\n//!\n//! utils/JsViewVueWidget/JsvApic/JsvApic/index.js;\n//!\n//! 考虑到.vue文件除了export default的component外,还有可能export其他对象,因此使用import * as\nlet _JsvApic;\nif (window.JsView) {\n _JsvApic = JsvApic;\n} else {\n const BrowserApic = await import('./browser/BrowserApic.vue.mjs');\n _JsvApic = BrowserApic.default;\n}\nconst _JsvApic$1 = _JsvApic;\n\n//!\n//! utils/JsViewVueWidget/JsvApic/JsvApic2/JsvApic2.vue;\n//!\n/*! <!--\n * @Author: ChenChanghua\n * @Date: 2021-10-13 13:14:42\n * @LastEditors: ChenChanghua\n * @LastEditTime: 2022-08-02 13:35:10\n * @Description: file content\n-->\n\n<!--\n * 【模块 export 内容】\n * JsvApic:Vue高阶组件,控制动图播放\n * prop说明:\n * src {string} 对应img标签的src, 传url时需要注意使用url([链接])\n * style {object} 对应img标签的style\n * 通过ref=拿到句柄后,可调用的方法:\n * stop(): 停止播放\n * show(): 显示某一帧\n * play(loopType, loopInfo, endState): 开始播放\n * loopType:\n * 循环类型: LoopType.LOOP_DEFAULT 按图片配置循环\n * LoopType.LOOP_INFINITE 无限循环\n * LoopType.LOOP_FINITE 有限次循环\n * LoopType.LOOP_PART 循环播放部分\n * loopInfo:\n * 循环参数, 为数字时表示循环次数, 为数组时[[循环次数1,循环开始帧1,循环结束帧1], [循环次数2,循环开始帧2,循环结束帧2], ...]\n * endState:\n * 播放结束后的状态: ApicEndState.HIDE 隐藏\n * ApicEndState.LAST_FRAME 保持最后一帧\n-->\n\n\n\n */\nconst _sfc_main$x = {\n props: {\n src: String,\n style: Object,\n onStart: Function,\n onEnd: Function,\n onLoad: Function\n },\n setup() {\n return {\n element: {}\n };\n },\n data() {\n return {\n onStartId: -1,\n onEndId: -1\n };\n },\n methods: {\n show(frameIndex = 0) {\n if (!isNaN(frameIndex)) {\n this.play(LoopType.LOOP_SINGLE, [[0, frameIndex, 0]]);\n }\n },\n play(loopType, loopInfo, endState) {\n let params = {\n LT: loopType,\n ES: endState\n };\n if (loopInfo instanceof Array) {\n params.LI = loopInfo;\n } else if (!isNaN(loopInfo)) {\n params.LI = [[loopInfo, 0, 0]];\n } else {\n params.LI = [[0, 0, 0]];\n }\n if (this.$refs.element) {\n let mainViewTexture = this.$refs.element.jsvGetProxyTexture(\n handles.TextureManager\n );\n mainViewTexture.DispatchCommand(\n Forge.NativeConstant.APIC_PLAY,\n JSON.stringify(params)\n );\n mainViewTexture.unregisterOnStart(this.onStartId);\n if (this.onStart) {\n this.onStartId = mainViewTexture.registerOnStart(this.onStart);\n }\n mainViewTexture.unregisterOnEnd(this.onEndId);\n if (this.onEnd) {\n this.onEndId = mainViewTexture.registerOnEnd(this.onEnd);\n }\n }\n },\n stop() {\n if (this.$refs.element) {\n let mainViewTexture = this.$refs.element.jsvGetProxyTexture(\n handles.TextureManager\n );\n mainViewTexture.DispatchCommand(Forge.NativeConstant.APIC_STOP, \"\");\n }\n }\n },\n mounted() {\n if (this.onLoad) {\n if (this.$refs.element) {\n let mainViewTexture = this.$refs.element.jsvGetProxyTexture(\n handles.TextureManager\n );\n mainViewTexture.RegisterLoadImageCallback(null, this.onLoad, null);\n }\n }\n },\n beforeUnmount() {\n this.stop();\n if (this.$refs.element) {\n let mainViewTexture = this.$refs.element.jsvGetProxyTexture(\n handles.TextureManager\n );\n if (this.onStart) {\n mainViewTexture.unregisterOnStart(this.onStartId);\n }\n if (this.onEnd) {\n mainViewTexture.unregisterOnEnd(this.onEndId);\n }\n }\n }\n};\nfunction _sfc_render$b(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"img\", {\n \"data-jsv-disable-apic-autoplay\": \"\",\n alt: \"\",\n ref: \"element\",\n src: $props.src,\n style: normalizeStyle($props.style)\n }, null, 12, [\"src\"]);\n}\nconst JsvApic2 = /* @__PURE__ */ _export_sfc(_sfc_main$x, [[\"render\", _sfc_render$b]]);\n\n//!\n//! utils/JsViewVueWidget/JsvApic/JsvApic2/index.js;\n//!\n//! 考虑到.vue文件除了export default的component外,还有可能export其他对象,因此使用import * as\nlet _JsvApic2;\nif (window.JsView) {\n _JsvApic2 = JsvApic2;\n} else {\n const BrowserApic2 = await import('./browser/BrowserApic2.vue.mjs');\n _JsvApic2 = BrowserApic2.default;\n}\nconst _JsvApic2$1 = _JsvApic2;\n\n//!\n//! utils/JsViewVueWidget/JsvInput/Cursor.vue;\n//!\n/*! <!--\n * @Author: ChenChanghua\n * @Date: 2022-01-20 10:37:01\n * @LastEditTime: 2023-02-01 13:47:13\n * @Description: file content\n-->\n\n\n */\nconst _sfc_main$w = {\n props: {\n left: {\n type: Number,\n default: 0\n },\n top: { type: Number, default: 0 },\n width: Number,\n height: Number,\n color: String\n },\n setup() {\n return {\n intervalToken: -1,\n visible: ref(false)\n };\n },\n methods: {\n _cleanInterval() {\n if (this.intervalToken > 0) {\n clearInterval(this.intervalToken);\n this.intervalToken = -1;\n }\n },\n startBlink() {\n this._cleanInterval();\n this.intervalToken = setInterval(() => {\n this.visible = !this.visible;\n }, 750);\n },\n stopBlink(show) {\n this._cleanInterval();\n this.visible = show;\n }\n },\n mounted() {\n this.startBlink();\n },\n beforeUnmount() {\n this._cleanInterval();\n }\n};\nfunction _sfc_render$a(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"div\", {\n style: normalizeStyle({\n left: $props.left,\n top: $props.top,\n width: $props.width,\n height: $props.height,\n backgroundColor: $props.color,\n visibility: $setup.visible ? \"inherit\" : \"hidden\"\n })\n }, null, 4);\n}\nconst CursorVue = /* @__PURE__ */ _export_sfc(_sfc_main$w, [[\"render\", _sfc_render$a]]);\n\n//!\n//! utils/JsViewVueWidget/JsvInput/JsvInput.vue;\n//!\n/*! <!--\n * @Author: ChenChanghua\n * @Date: 2022-01-20 10:35:56\n * @LastEditTime: 2023-02-01 13:47:26\n * @Description: file content\n-->\n\n\n */\nconst InputType = {\n TEXT: Forge$1.TextInputType.TEXT,\n NUMBER: Forge$1.TextInputType.NUMBER,\n PASSWORD: Forge$1.TextInputType.PASSWORD\n};\nconst ifDigital = (char) => \"0\".charCodeAt() <= char.charCodeAt() && char.charCodeAt() <= \"9\".charCodeAt();\nconst ifDirectionKeyCode = (code) => code >= 37 && code <= 40;\nconst edgeMap = {\n 37: EdgeDirection.left,\n 38: EdgeDirection.top,\n 39: EdgeDirection.right,\n 40: EdgeDirection.bottom\n};\nconst MAX_WIDTH = 1920;\nconst _sfc_main$v = {\n components: {\n CursorVue\n },\n props: {\n name: {\n type: String\n },\n left: {\n type: Number,\n default: 0\n },\n top: {\n type: Number,\n default: 0\n },\n width: {\n type: Number,\n default: 100\n },\n height: {\n type: Number,\n default: 20\n },\n type: {\n type: Number,\n default: InputType.TEXT\n },\n placeholder: {\n type: String,\n default: \"请输入\"\n },\n placeholderColor: {\n type: String,\n default: \"#CDCCD6\"\n },\n maxLength: {\n type: Number,\n default: 100\n },\n readonly: {\n type: Boolean,\n default: false\n },\n value: {\n type: String,\n default: \"\"\n },\n fontStyle: {\n type: [Object, Array],\n default() {\n return {\n textAlign: \"left\",\n fontSize: 12,\n color: \"#000000\"\n };\n }\n },\n cursorShow: {\n type: Boolean,\n default: true\n },\n cursorWidth: {\n type: Number,\n default: 2\n },\n cursorColor: {\n type: String,\n default: \"\"\n },\n onTextOverflow: {\n type: Function\n },\n onTextChange: {\n type: Function\n },\n onEdge: {\n type: Function\n }\n },\n data() {\n return {\n fullString: this.value,\n curOffset: this.value.length,\n textWidth: 0,\n textLeft: 0\n };\n },\n setup() {\n return {\n editControlView: null,\n editControlViewId: -1,\n isFocus: false,\n visibleAreaCurStart: 0,\n visibleAreaCurPos: 0,\n visibleAreaCurEnd: 0,\n cursorPauseTimeoutToken: -1\n };\n },\n computed: {\n realText() {\n return this.type === InputType.PASSWORD ? this.fullString.replace(/\\w/g, \"*\") : this.fullString;\n },\n placeholderVisible() {\n return this.fullString.length === 0 && this.placeholder.length > 0;\n },\n cursorLeft() {\n return this._calculateCursorPosition(this.realText, this.curOffset) + this.textLeft;\n },\n cursorColorInner() {\n return this.cursorColor ? this.cursorColor : this.fontStyle.color;\n }\n },\n methods: {\n _updateTextWidth(text) {\n if (text.length !== this.fullString.length) {\n if (text.length === 0) {\n this.textWidth = this.width;\n } else {\n this.textWidth = this._calculateCursorPosition(text, text.length);\n if (this.textWidth < this.width) {\n this.textWidth = this.width;\n }\n }\n }\n },\n _onTextChanged(text, cursor_pos, moved) {\n if (moved) {\n this.pauseCursorBlink();\n } else {\n if (text.length >= this.maxLength) {\n text = this.fullString;\n if (this.editControlView && this.isFocus) {\n this.editControlView.updateCursorOffset(\n this.fullString,\n this.curOffset\n );\n }\n return;\n }\n }\n if (text.length > 0) {\n const start = cursor_pos - 1;\n const end = cursor_pos;\n const add_text = text.slice(start, end);\n if (add_text && !ifDigital(add_text) && this.type === InputType.NUMBER) {\n if (this.editControlView) {\n this.editControlView.updateCursorOffset(\n this.fullString,\n this.curOffset\n );\n }\n return;\n }\n }\n this._updateTextWidth(text);\n this.textLeft = this._calculateSlide(\n this.fullString,\n text,\n cursor_pos,\n moved\n );\n this.fullString = text;\n this.curOffset = cursor_pos;\n this.onTextChange?.(text);\n },\n // 1:shown 0:hidden\n _onStatusChanged(status) {\n },\n _getStringWithFont(str) {\n const size = this.fontStyle.fontSize ? this.fontStyle.fontSize : 12;\n const font = this.fontStyle.fontFamily;\n const alignment = this.fontStyle.textAlign;\n const italic = this.fontStyle.fontStyle === \"italic\";\n const bold = this.fontStyle.fontWeight === \"bold\";\n return Forge$1.sTextUtils.StringWithFont(\n str,\n size,\n font,\n alignment,\n \"middle\",\n null,\n italic,\n bold\n );\n },\n _getFullStringLength(str) {\n return Forge$1.sTextUtils.GetTextWidth(this._getStringWithFont(str));\n },\n add(string) {\n if (this.type === InputType.NUMBER && !ifDigital(string)) {\n return;\n }\n const pre_full_str = this.fullString;\n const pre_index = this.curOffset;\n if (this.fullString.length < this.maxLength) {\n const new_str = pre_full_str.slice(0, pre_index) + string + pre_full_str.slice(pre_index);\n const new_index = pre_index + string.length;\n this._onTextChanged(new_str, new_index);\n } else {\n if (this.onTextOverflow) {\n this.onTextOverflow();\n }\n }\n },\n delete() {\n const pre_full_str = this.fullString;\n const pre_index = this.curOffset;\n if (pre_index > 0) {\n const new_str = pre_full_str.slice(0, pre_index - 1) + pre_full_str.slice(pre_index);\n const new_index = pre_index - 1;\n this._onTextChanged(new_str, new_index);\n }\n },\n clear() {\n this._onTextChanged(\"\", 0);\n },\n replace(string) {\n this._onTextChanged(string, string.length);\n },\n _calculateCursorPosition(full_str, cursor_offset) {\n const target_str = this._GetRealText(full_str);\n const font_params = this._getStringWithFont(target_str);\n const max_width = MAX_WIDTH;\n const max_rect = new Forge$1.RectArea(0, 0, max_width, this.height);\n const text_attr = Forge$1.sTextUtils.TextAttr(\"none\", \"none\");\n const cur_pos = Forge$1.sTextUtils.GetCursorPosition(\n target_str,\n max_rect,\n font_params,\n text_attr,\n this.height,\n cursor_offset\n );\n return cur_pos.x;\n },\n _getLeftWithDelChar(current_cursor_position, target_str) {\n let new_left = this.textLeft;\n let offset = 0;\n if (current_cursor_position === 0) {\n offset = -new_left;\n new_left = 0;\n } else if (current_cursor_position - this.cursorWidth > 0 && current_cursor_position - this.cursorWidth <= this.visibleAreaCurStart) {\n offset = this.visibleAreaCurPos - current_cursor_position;\n if (new_left < 0 && new_left + offset + this.textWidth < this.width) {\n offset = this.width - (new_left + this.textWidth);\n }\n new_left += offset;\n if (new_left > 0) {\n new_left = 0;\n } else {\n if (this.fontStyle.textAlign === \"right\") {\n const text_real_width = this._getFullStringLength(target_str);\n if (new_left > text_real_width - MAX_WIDTH) {\n new_left = text_real_width - MAX_WIDTH;\n offset = this.visibleAreaCurStart + new_left;\n }\n }\n }\n } else {\n if (new_left < 0 && new_left + this.textWidth < this.width) {\n offset = this.width - (new_left + this.textWidth);\n new_left = this.width - this.textWidth;\n } else {\n if (this.fontStyle.textAlign === \"right\") {\n const text_real_width = this._getFullStringLength(target_str);\n if (text_real_width >= this.width) {\n if (new_left > text_real_width - MAX_WIDTH) {\n new_left = text_real_width - MAX_WIDTH;\n offset = this.visibleAreaCurStart + new_left;\n }\n } else {\n new_left = this.width - MAX_WIDTH;\n offset = this.visibleAreaCurStart + new_left;\n }\n }\n }\n }\n this._updateVisibleAreaCursor(-offset);\n return new_left;\n },\n _getLeftWithMoveRight() {\n let new_left = this.textLeft;\n let offset = this.width / 2;\n if (this.textWidth + (new_left - offset) < this.width) {\n new_left = this.width - this.textWidth;\n offset = -new_left - this.visibleAreaCurStart;\n } else {\n new_left -= offset;\n }\n this._updateVisibleAreaCursor(offset);\n return new_left;\n },\n _getLeftWithMoveLeft() {\n let new_left = this.textLeft;\n let offset = this.width / 2;\n new_left += offset;\n if (new_left > 0) {\n new_left = 0;\n offset = this.visibleAreaCurStart;\n } else {\n if (this.fontStyle.textAlign === \"right\") {\n const text_real_width = this._getFullStringLength(\n this._GetShowText()\n );\n if (new_left > text_real_width - MAX_WIDTH) {\n new_left = text_real_width - MAX_WIDTH;\n offset = this.visibleAreaCurStart + new_left;\n }\n }\n }\n this._updateVisibleAreaCursor(-offset);\n return new_left;\n },\n _updateVisibleAreaCursor(offset) {\n this.visibleAreaCurStart += offset;\n if (this.visibleAreaCurStart < 0) {\n this.visibleAreaCurStart = 0;\n }\n this.visibleAreaCurEnd = this.visibleAreaCurStart + this.width;\n },\n _getLeftWithAddChar(current_cursor_position, end_add) {\n let new_left = this.textLeft;\n if (current_cursor_position + this.cursorWidth >= this.visibleAreaCurEnd) {\n let offset = current_cursor_position - this.visibleAreaCurPos;\n new_left -= offset;\n if (end_add) {\n if (this.fontStyle.textAlign === \"right\") {\n new_left = this.width - MAX_WIDTH;\n offset = -this.visibleAreaCurStart - new_left;\n } else {\n new_left = this.width - this.textWidth;\n offset = -this.visibleAreaCurStart - new_left;\n }\n }\n this._updateVisibleAreaCursor(offset);\n }\n return new_left;\n },\n _calculateSlide(pre_str, target_str, cur_index, moved) {\n if (target_str.length === 0) {\n if (this.fontStyle.textAlign === \"right\") {\n const offset2 = MAX_WIDTH - this.width - this.visibleAreaCurStart;\n this._updateVisibleAreaCursor(offset2);\n this.visibleAreaCurPos = this.visibleAreaCurEnd;\n return this.width - MAX_WIDTH;\n }\n const offset = -this.visibleAreaCurStart;\n this._updateVisibleAreaCursor(offset);\n this.visibleAreaCurPos = this.visibleAreaCurEnd;\n return 0;\n }\n let new_left = this.textLeft;\n const current_cursor_position = this._calculateCursorPosition(\n target_str,\n cur_index\n );\n let option_mode = \"op_vis_normal\";\n if (pre_str.length > target_str.length) {\n option_mode = \"op_del\";\n } else if (pre_str.length < target_str.length) {\n option_mode = \"op_add\";\n } else {\n if (moved) {\n if (current_cursor_position <= this.visibleAreaCurStart) {\n option_mode = \"op_move_left\";\n } else if (current_cursor_position >= this.visibleAreaCurEnd) {\n option_mode = \"op_move_right\";\n }\n }\n }\n switch (option_mode) {\n case \"op_del\":\n new_left = this._getLeftWithDelChar(\n current_cursor_position,\n target_str\n );\n break;\n case \"op_add\":\n new_left = this._getLeftWithAddChar(\n current_cursor_position,\n target_str.length === cur_index\n );\n break;\n case \"op_move_left\":\n new_left = this._getLeftWithMoveLeft(current_cursor_position);\n break;\n case \"op_move_right\":\n new_left = this._getLeftWithMoveRight(current_cursor_position);\n break;\n case \"op_vis_normal\":\n default:\n break;\n }\n this.visibleAreaCurPos = current_cursor_position;\n return new_left;\n },\n onFocus() {\n this.isFocus = true;\n this.$refs.cursor?.startBlink();\n if (this.editControlView && !this.readonly) {\n this.editControlView.showIme(\n this.type,\n this.fullString,\n this.curOffset\n );\n }\n },\n onBlur() {\n this.isFocus = false;\n if (this.editControlView && !this.readonly) {\n this.editControlView.hideIme();\n }\n },\n clearCursorPauseTimer() {\n if (this.cursorPauseTimeoutToken) {\n clearTimeout(this.cursorPauseTimeoutToken);\n this.cursorPauseTimeoutToken = -1;\n }\n },\n pauseCursorBlink() {\n if (this.$refs.cursor) {\n this.$refs.cursor?.stopBlink(true);\n }\n this.clearCursorPauseTimer();\n this.cursorPauseTimeoutToken = setTimeout(() => {\n this.$refs.cursor?.startBlink();\n }, 500);\n },\n onKeyDown(keyEvent) {\n let key_used = false;\n let pre_index = this.curOffset;\n let cur_index;\n let valid_move = false;\n switch (keyEvent.keyCode) {\n case 37:\n this.pauseCursorBlink();\n if (pre_index !== 0) {\n valid_move = true;\n cur_index = --pre_index;\n key_used = true;\n }\n break;\n case 39:\n this.pauseCursorBlink();\n if (pre_index < this.fullString.length) {\n valid_move = true;\n cur_index = ++pre_index;\n key_used = true;\n }\n break;\n case 38:\n case 40:\n break;\n case 13:\n this.editControlView.showIme(\n this.type,\n this.fullString,\n this.curOffset\n );\n key_used = true;\n break;\n case 27:\n case 1e4:\n key_used = false;\n break;\n default:\n if (!window.JsView) {\n this.editControlView.showIme(\n this.type,\n this.fullString,\n this.curOffset\n );\n key_used = true;\n }\n break;\n }\n if (ifDirectionKeyCode(keyEvent.keyCode)) {\n if (valid_move) {\n this.curOffset = cur_index;\n this.textLeft = this._calculateSlide(\n this.fullString,\n this.fullString,\n cur_index,\n true\n );\n if (this.editControlView) {\n this.editControlView.updateCursorOffset(this.fullString, cur_index);\n }\n } else {\n if (this.onEdge && edgeMap[keyEvent.keyCode]) {\n this.onEdge({\n direction: edgeMap[keyEvent.keyCode],\n rect: {\n x: this.left,\n y: this.top,\n width: this.width,\n height: this.height\n }\n });\n }\n }\n }\n return key_used;\n },\n _GetRealText(src_str) {\n let value = src_str;\n if (this.type === Forge$1.TextInputType.PASSWORD) {\n value = value.replace(/\\w/g, \"*\");\n }\n return value;\n },\n _GetShowText() {\n return this._GetRealText(this.fullString);\n }\n },\n created() {\n this.editControlView = new Forge$1.EditControlView();\n this.editControlView.OnTextChanged = this._onTextChanged;\n this.editControlView.OnStatusChanged = this._onStatusChanged;\n this.editControlViewId = Forge$1.sViewStore.add(\n new Forge$1.ViewInfo(this.editControlView)\n );\n const cur_position = this._calculateCursorPosition(\n this.value,\n this.value.length\n );\n this.visibleAreaCurEnd = cur_position > this.width ? cur_position : this.width;\n this.visibleAreaCurStart = this.visibleAreaCurEnd - this.width;\n this.visibleAreaCurPos = cur_position;\n this.textWidth = cur_position > this.width ? cur_position : this.width;\n this.textLeft = this._calculateSlide(\"\", this.value, this.value.length);\n },\n mounted() {\n this.$refs.cursor?.startBlink();\n },\n beforeUnmount() {\n if (this.editControlViewId != -1) {\n Forge$1.sViewStore.remove(this.editControlViewId);\n this.editControlViewId = -1;\n }\n this.clearCursorPauseTimer();\n }\n};\nfunction _sfc_render$9(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_cursor_vue = resolveComponent(\"cursor-vue\");\n const _component_jsv_focus_block = resolveComponent(\"jsv-focus-block\");\n return openBlock(), createBlock(_component_jsv_focus_block, {\n name: $props.name,\n onAction: {\n onFocus: $options.onFocus,\n onBlur: $options.onBlur,\n onKeyDown: $options.onKeyDown\n },\n style: normalizeStyle({\n left: $props.left,\n top: $props.top,\n width: $props.width,\n height: $props.height\n })\n }, {\n default: withCtx(() => [\n createElementVNode(\"div\", {\n style: normalizeStyle({\n width: $props.width,\n height: $props.height,\n overflow: \"hidden\"\n })\n }, [\n createElementVNode(\"div\", {\n style: normalizeStyle({\n left: this.textLeft,\n width: this.textWidth,\n height: $props.height,\n lineHeight: $props.height,\n ...this.fontStyle\n })\n }, toDisplayString($options.realText), 5),\n $options.placeholderVisible ? (openBlock(), createElementBlock(\"div\", {\n key: 0,\n style: normalizeStyle({\n left: 0,\n width: $props.width,\n height: $props.height,\n lineHeight: $props.height,\n ...$props.fontStyle,\n color: $props.placeholderColor\n })\n }, toDisplayString($props.placeholder), 5)) : createCommentVNode(\"\", true)\n ], 4),\n $props.cursorShow ? (openBlock(), createBlock(_component_cursor_vue, {\n key: 0,\n ref: \"cursor\",\n left: $options.cursorLeft,\n height: $props.height,\n color: $options.cursorColorInner,\n width: $props.cursorWidth\n }, null, 8, [\"left\", \"height\", \"color\", \"width\"])) : createCommentVNode(\"\", true),\n createElementVNode(\"div\", { \"data-jsv-vw-innerview\": $setup.editControlViewId }, null, 8, [\"data-jsv-vw-innerview\"])\n ]),\n _: 1\n }, 8, [\"name\", \"onAction\", \"style\"]);\n}\nconst JsvInput = /* @__PURE__ */ _export_sfc(_sfc_main$v, [[\"render\", _sfc_render$9]]);\n\n//!\n//! utils/JsViewVueWidget/JsvInput/index.js;\n//!\n\n//!\n//! utils/JsViewVueWidget/JsvPreload/JsvPreload.vue;\n//!\n/*! <!--\n * 【模块 export 内容】\n * JsvPreload:Vue高阶组件,图片预加载的控件\n * preloadList {ObjectArray}: 预加载的信息列表,单个内容通过buildPreloadInfo构建\n * 列表中的图片会被进行下载,解码并将解码结果存储在内存中,内存占用的周期同JsvPreload组件声明周期\n * downloadList {ObjectArray}: 预下载的信息列表,单个内容通过buildDownloadInfo构建\n * 列表的内容可以是图片,音频等任何网络资源,下载后缓存在本地,归入本地缓存管理(LRU清理策略)\n * onPreloading {Function(float percent)}: 预加载中回调,返回预加载进度\n * onPreloadDone {Function(sizeArray)}: 预加载完成回调,sizeArray(格式Object[]),每个的格式为{width, height}\n * onDownloadDone {Function(pathesArray, extra)}: 预下载完成回调,pathesArray(格式为String[])为下载好回调的地址, \n * 其中pathesArray为存储位置的路径列表, extra为额外信息(目前只有下载图片时的尺寸)\n *\n * 注意事项:\n * 指定加载时的尺寸(0为不指定),与img标签中的 jsv_img_scaledown_tex 属性一起使用\n * 指定加载色空间,与div标签中的 jsv_img_color_space 一起使用。\n * 因为,同样url情况下,jsv_img_scaledown_tex 和 jsv_img_color_space 启用后,不同的尺寸不同颜色空间\n * 对应着各自不同的图片内存缓存\n *\n * 静态函数:\n * buildPreloadInfo: 静态函数,创建预加载信息项,用于制作JsvPreload的preloadList属性列表信息\n * 参数:\n * url {string}: (必填)图片url\n * width {int}: 图片内存存储区域宽度,默认为0(同图片源文件宽度)\n * height {int}: 图片内存存储区域宽度,默认为0(同图片源文件宽度)\n * color_type {string}: 图片存储颜色空间,去掉alpha通道可节省内存,例如\"RGB_565\"等,与img标签jsv_img_color_space配合,默认值\"RGBA_8888\"\n * net_setting {object}: (未实现)网络加载参数,cookie, refer等,默认值 null\n *\n * buildDownloadInfo: 函数,创建预下载信息项,用于制作JsvPreload的downloadList属性列表信息\n * 参数:\n * url {string}: (必填)图片url\n * width {int}: 图片内存存储区域宽度,默认为0(同图片源文件宽度)\n * height {int}: 图片内存存储区域宽度,默认为0(同图片源文件宽度)\n * color_type {string}: 图片存储颜色空间,去掉alpha通道可节省内存,例如\"RGB_565\"等,与img标签jsv_img_color_space配合,默认值\"RGBA_8888\"\n * net_setting {object}: (未实现)网络加载参数,cookie, refer等,默认值 null\n -->\n\n\n\n\n */\nconst CONST_FORMAT_TOKEN = \"_JsvP_\";\nconst buildPreloadInfo$1 = (url, width = 0, height = 0, color_type = \"RGBA_8888\", net_setting = null, is_poster_img) => {\n return {\n url,\n width,\n height,\n colorType: color_type,\n netSetting: net_setting,\n magicToken: CONST_FORMAT_TOKEN,\n // 用于格式校验\n isPosterImage: is_poster_img ?? false\n };\n};\nconst buildDownloadInfo$1 = (url, net_setting = null, get_image_size) => {\n return {\n url,\n netSetting: net_setting,\n getImageSize: get_image_size,\n magicToken: CONST_FORMAT_TOKEN\n // 用于格式校验\n };\n};\nconst _sfc_main$u = {\n __name: \"JsvPreload\",\n props: {\n preloadList: Object,\n downloadList: Object,\n onPreloading: Function,\n onPreloadDone: Function,\n onDownloadDone: Function\n },\n setup(__props) {\n const props = __props;\n const CONST_FORMAT_TOKEN2 = \"_JsvP_\";\n const loadViewList = reactive({\n preloadViewList: [],\n downloadViewList: []\n });\n let preloadStateList = [];\n let downloadStateList = [];\n let downloadResultMap = {};\n let preloadResultMap = {};\n let preloadIsNullNum = 0;\n let downloadIsNullNum = 0;\n let preloadToken = 1;\n let downloadToken = 1;\n const _releasePreloadView = () => {\n if (window.JsView) {\n if (loadViewList.preloadViewList.length > 0) {\n for (const view_info of loadViewList.preloadViewList) {\n if (view_info) {\n const id = view_info.viewId;\n view_info.textureRef?.DisableBackgroundLoad();\n view_info.textureRef?.UnregisterLoadImageCallback(\n view_info.callToken\n );\n Forge$1.sViewStore.remove(id);\n }\n }\n }\n loadViewList.preloadViewList = [];\n preloadStateList = [];\n }\n };\n const _releaseDownloadView = () => {\n if (window.JsView) {\n if (loadViewList.downloadViewList.length > 0) {\n for (const view_info of loadViewList.downloadViewList) {\n if (view_info) {\n const id = view_info.viewId;\n view_info.textureRef?.DisableBackgroundLoad();\n view_info.textureRef?.UnregisterLoadImageCallback(\n view_info.callToken\n );\n Forge$1.sViewStore.remove(id);\n }\n }\n }\n }\n loadViewList.downloadViewList = [];\n downloadStateList = [];\n };\n const _releaseForgeView = () => {\n _releasePreloadView();\n _releaseDownloadView();\n };\n const _checkPreload = () => {\n let loadedNum = 0;\n preloadStateList.forEach((state) => {\n loadedNum = state ? ++loadedNum : loadedNum;\n });\n if (props.onPreloading) {\n props.onPreloading(loadedNum / preloadStateList.length);\n }\n if (props.onPreloadDone && loadedNum === preloadStateList.length - preloadIsNullNum) {\n props.onPreloadDone(preloadResultMap);\n }\n };\n const _getPreloadViewIdList = () => {\n if (!props.preloadList) {\n return;\n }\n preloadStateList = new Array(props.preloadList.length).fill(false);\n let preloadListData = props.preloadList;\n for (let i = 0; i < preloadListData.length; i++) {\n if (!preloadListData[i] || !preloadListData[i].url) {\n preloadListData.splice(i, 1);\n preloadIsNullNum++;\n i--;\n }\n }\n loadViewList.preloadViewList = preloadListData.map((item, index) => {\n if (item.magicToken !== CONST_FORMAT_TOKEN2) {\n console.error(\n \"Error:format mismatch, data should comes from function buildPreloadInfo()\"\n );\n }\n const base_url = item.url;\n let image_url = base_url;\n if (base_url && base_url.indexOf(\"http\") < 0) {\n if (window.JsView.Dom.UrlRef) {\n image_url = new window.JsView.Dom.UrlRef(base_url).href;\n }\n }\n let target_size = null;\n if (item.width !== 0 && item.height !== 0) {\n target_size = { width: item.width, height: item.height };\n }\n let texture = null;\n if (image_url && (image_url.toLowerCase().indexOf(\".webp\") >= 0 || image_url.toLowerCase().indexOf(\".gif\") >= 0)) {\n texture = handles.TextureManager.GetImage2(image_url, false);\n } else {\n texture = handles.TextureManager.GetImage2(\n image_url,\n false,\n target_size,\n item.colorType,\n item.netSetting ?? \"\",\n item.isPosterImage\n );\n }\n if (!texture) {\n console.error(\n \"Error: Preload view build texture failed for \" + image_url\n );\n preloadStateList[index] = true;\n return;\n }\n const callback_token = texture.RegisterLoadImageCallback(null, (params) => {\n console.log(`preload succeed ${image_url}`, params);\n preloadStateList[index] = true;\n preloadResultMap[item.url] = {\n width: params.width,\n height: params.height\n };\n console.log(`preload succeed ${item.url}, params:${params}`);\n _checkPreload();\n });\n texture.EnableBackgroundLoad();\n const texture_setting = new Forge$1.ExternalTextureSetting(texture);\n const preload_view = new Forge$1.PreloadView(texture_setting);\n return {\n viewId: Forge$1.sViewStore.add(new Forge$1.ViewInfo(preload_view)),\n textureRef: texture,\n callToken: callback_token\n };\n });\n };\n const _checkDownload = () => {\n let loadedNum = 0;\n downloadStateList.forEach((state) => {\n loadedNum = state ? ++loadedNum : loadedNum;\n });\n if (props.onDownloadDone && loadedNum === downloadStateList.length - downloadIsNullNum) {\n props.onDownloadDone(downloadStateList, downloadResultMap);\n }\n };\n const _getDownloadViewIdList = () => {\n if (!props.downloadList) {\n return;\n }\n downloadStateList = new Array(props.downloadList.length).fill(null);\n let downloadListData = props.downloadList;\n for (let i = 0; i < downloadListData.length; i++) {\n if (!downloadListData[i] || !downloadListData[i].url) {\n downloadListData.splice(i, 1);\n downloadIsNullNum++;\n i--;\n }\n }\n loadViewList.downloadViewList = downloadListData.map((item, index) => {\n if (item.magicToken !== CONST_FORMAT_TOKEN2) {\n console.error(\n \"Error:format mismatch, data should comes from function buildDownloadInfo()\"\n );\n }\n console.log(`OnDownload get${index} url=${item.url}`);\n const base_url = item.url;\n let image_url = base_url;\n if (base_url && base_url.indexOf(\"http\") < 0) {\n if (window.JsView.Dom.UrlRef) {\n image_url = new window.JsView.Dom.UrlRef(base_url).href;\n }\n }\n const texture = handles.TextureManager.GetDownloadTexture(\n image_url,\n null,\n item.getImageSize\n );\n if (!texture) {\n console.error(\"Error: Down view build texture failed for \" + image_url);\n downloadStateList[index] = \"invalid\";\n return;\n }\n const callback_token = texture.RegisterLoadImageCallback(\n null,\n (texture_info) => {\n console.log(`OnDownload done index${index}`);\n downloadStateList[index] = texture_info.extra.absolutePath;\n if (item.getImageSize && texture_info.extra.width && texture_info.extra.height) {\n downloadResultMap[texture_info.extra.absolutePath] = {\n width: texture_info.extra.width,\n height: texture_info.extra.height\n };\n }\n _checkDownload();\n }\n );\n texture.EnableBackgroundLoad();\n const texture_setting = new Forge$1.TextureSetting(texture);\n const preload_view = new Forge$1.PreloadView(texture_setting);\n return {\n viewId: Forge$1.sViewStore.add(new Forge$1.ViewInfo(preload_view)),\n textureRef: texture,\n callToken: callback_token\n };\n });\n };\n _releaseForgeView();\n watchEffect(() => {\n if (props.preloadList) {\n console.log(\"JsvPreload: update preloadList\");\n preloadIsNullNum = 0;\n _releasePreloadView();\n _getPreloadViewIdList();\n preloadToken++;\n }\n });\n watchEffect(() => {\n if (props.downloadList) {\n console.log(\"JsvPreload: update downloadList\");\n downloadIsNullNum = 0;\n _releaseDownloadView();\n _getDownloadViewIdList();\n downloadToken++;\n }\n });\n onBeforeUnmount(() => {\n _releaseForgeView();\n });\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", null, [\n (openBlock(), createElementBlock(\"div\", {\n key: \"preload_\" + unref(preloadToken)\n }, [\n (openBlock(true), createElementBlock(Fragment, null, renderList(loadViewList.preloadViewList, (item) => {\n return openBlock(), createElementBlock(\"div\", {\n key: item.viewId,\n id: item.viewId\n }, [\n item.viewId ? (openBlock(), createElementBlock(\"div\", {\n key: 0,\n \"data-jsv-vw-innerview\": item.viewId\n }, null, 8, [\"data-jsv-vw-innerview\"])) : createCommentVNode(\"\", true)\n ], 8, [\"id\"]);\n }), 128))\n ])),\n (openBlock(), createElementBlock(\"div\", {\n key: \"download_\" + unref(downloadToken)\n }, [\n (openBlock(true), createElementBlock(Fragment, null, renderList(loadViewList.downloadViewList, (item) => {\n return openBlock(), createElementBlock(\"div\", {\n key: item.viewId,\n id: item.viewId\n }, [\n item.viewId ? (openBlock(), createElementBlock(\"div\", {\n key: 0,\n \"data-jsv-vw-innerview\": item.viewId\n }, null, 8, [\"data-jsv-vw-innerview\"])) : createCommentVNode(\"\", true)\n ], 8, [\"id\"]);\n }), 128))\n ]))\n ]);\n };\n }\n};\n\n//!\n//! utils/JsViewVueWidget/JsvPreload/index.js;\n//!\n//! 考虑到.vue文件除了export default的component外,还有可能export其他对象,因此使用import * as\nlet _JsvPreload;\nif (window.JsView) {\n _JsvPreload = _sfc_main$u;\n} else {\n const BrowserPreload = await import('./browser/BrowserPreload.vue.mjs');\n _JsvPreload = BrowserPreload.default;\n}\nlet buildPreloadInfo = buildPreloadInfo$1;\nlet buildDownloadInfo = buildDownloadInfo$1;\nconst JsvPreload = _JsvPreload;\n\n//!\n//! utils/JsViewVueTools/JsvTextureDefines.ts;\n//!\nclass TextureInstantType {\n static Auto = Forge$2.TextureInstantLoad.AUTO;\n static Sync = Forge$2.TextureInstantLoad.SYNC;\n static Async = Forge$2.TextureInstantLoad.ASYNC;\n}\n\n//!\n//! utils/JsViewVueWidget/JsvQrcode/JsvQrcode.vue;\n//!\n/*! <!--\n * 【模块 export 内容】\n * QRCode:Vue高阶组件,描绘二维码,\n * props说明:\n * value {string} (必须) 二维码代表的字符串\n * size {int} (必须) 二维码展示尺寸,二维码为正方形,所以改值代表宽和高,默认值:128\n * fgColor {string} 二维码前景色,默认值\"#000000\",黑色\n * bgColor {string} 二维码背景色,默认值\"#ffffff\",白色\n * level {string} 二维码的容错能力,可选值{'L':低, 'M':中, 'H':高, 'Q':最精细},默认值'L'\n * instant {string} 是否立即加载(auto, sync, async), auto = async\n * 是否当前帧限制(默认为非当前帧显示,不影响按键响应,但是会闪)\n * imageSettings {Object} 设置中心logo图片,默认值为null,设置格式为:\n * {\n * src {string} logo的url地址\n * height {int} logo的宽度\n * height {int} logo的高度\n * }\n -->\n\n\n\n */\nconst _sfc_main$t = {\n props: {\n value: String,\n size: Number,\n fgColor: {\n type: String,\n default: \"#000000\"\n },\n bgColor: {\n type: String,\n default: \"#ffffff\"\n },\n level: {\n type: String,\n // ,容错级别,分别是L(7%)、M(15%)、Q(25%)、H(30%),\n default: \"L\"\n },\n sync: {\n // 是否当前帧限制(默认为非当前帧显示,不影响按键响应,但是会闪)\n type: String,\n default: \"auto\"\n // QrCode的 auto = async\n },\n imageSettings: Object\n },\n methods: {\n getImageSettings() {\n const imageSettings = this.imageSettings;\n if (!imageSettings) {\n return null;\n }\n const w = imageSettings.width;\n const h = imageSettings.height;\n const x = !imageSettings.x ? this.size / 2 - w / 2 : imageSettings.x;\n const y = !imageSettings.y ? this.size / 2 - h / 2 : imageSettings.y;\n return { x, y, h, w };\n },\n renderJsvQRCode() {\n if (this.qrCodeView !== null) {\n this.jsvBaseView.RemoveView(this.qrCodeView);\n }\n let view = null;\n let lp_params = null;\n const texture_manager = handles.TextureManager;\n let instantLoad;\n switch (this.sync) {\n case \"sync\":\n instantLoad = TextureInstantType.Sync;\n break;\n case \"async\":\n instantLoad = TextureInstantType.Async;\n break;\n case \"auto\":\n default:\n instantLoad = TextureInstantType.Auto;\n }\n const qrcode_texture = texture_manager.GetQRCodeTexture(\n this.value,\n this.size,\n this.size,\n instantLoad,\n Forge$1.QRCodeLevel[this.level],\n this.bgColor,\n this.fgColor\n );\n view = new Forge$1.LayoutView(new Forge$1.TextureSetting(qrcode_texture));\n const calculatedImageSettings = this.getImageSettings();\n if (this.imageSettings && calculatedImageSettings) {\n let url = this.imageSettings.src;\n if (typeof url === \"string\") {\n url = new window.JsView.Dom.UrlRef(this.imageSettings.src).href;\n }\n const img_texture = texture_manager.GetImage(url);\n const img_view = new Forge$1.LayoutView(\n new Forge$1.TextureSetting(img_texture)\n );\n view.AddView(\n img_view,\n new Forge$1.LayoutParams({\n x: calculatedImageSettings.x,\n y: calculatedImageSettings.y,\n width: calculatedImageSettings.w,\n height: calculatedImageSettings.h\n })\n );\n console.log(\"view = \" + view);\n }\n lp_params = new Forge$1.LayoutParams({\n x: 0,\n y: 0,\n width: this.size,\n height: this.size\n });\n this.qrCodeView = view;\n this.jsvBaseView.AddView(this.qrCodeView, lp_params);\n }\n },\n created() {\n const propsData = {\n value: this.value,\n size: this.size,\n level: this.level,\n bgColor: this.bgColor,\n fgColor: this.fgColor,\n imageSettings: this.imageSettings\n };\n if (this.jsvBaseView === null) {\n this.jsvBaseView = new Forge$1.LayoutView();\n this.innerViewId = Forge$1.sViewStore.add(\n new Forge$1.ViewInfo(this.jsvBaseView)\n );\n }\n if (this.oldProps !== propsData) {\n this.renderJsvQRCode();\n }\n },\n data() {\n return {\n oldProps: null,\n innerViewId: -1,\n jsvBaseView: null,\n qrCodeView: null\n };\n },\n mounted() {\n if (this.innerViewId !== -1) {\n Forge$1.sViewStore.remove(this.innerViewId);\n this.innerViewId = -1;\n this.jsvBaseView = null;\n }\n }\n};\nfunction _sfc_render$8(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"div\", { \"data-jsv-vw-innerview\": $data.innerViewId }, null, 8, [\"data-jsv-vw-innerview\"]);\n}\nconst JsvQrcode = /* @__PURE__ */ _export_sfc(_sfc_main$t, [[\"render\", _sfc_render$8]]);\n\n//!\n//! utils/JsViewVueWidget/JsvQrcode/index.js;\n//!\n//! 考虑到.vue文件除了export default的component外,还有可能export其他对象,因此使用import * as\nlet _JsvQrcode;\nif (window.JsView) {\n _JsvQrcode = JsvQrcode;\n} else {\n const BrowserQrcode = await import('./browser/BrowserQrcode.vue.mjs');\n _JsvQrcode = BrowserQrcode.default;\n}\nconst _JsvQrcode$1 = _JsvQrcode;\n\n//!\n//! utils/JsViewVueWidget/JsvSpray/JsvSpray.vue;\n//!\n/*! <!--\n * @Author: ChenChanghua\n * @Date: 2021-10-12 18:20:43\n * @Description: file content\n-->\n\n<!--\n * 【模块 export 内容】\n * JsvSpray:Vue高阶组件,粒子效果控件\n * prop说明:\n * pointRes {string} (必需)粒子图案 可选值: 绝对路径url|url(相对路径url)|#FFFFFF|rbga(255,0,0,1.0)\n * sprayStyle {object} (必需)粒子效果配置\n * ignoreClip {boolean} 无视clipView描画\n *\n * prop中的sprayStyle说明:\n * type {int} (必需)喷射类型 0: 一次喷射 1: 持续喷射\n * particleNum {int} (必需)粒子个数\n * deltaAngle {int} (必需)粒子喷射角度范围。如设30则粒子喷射范围为div上边法向正负30度\n * deltaWidth {int} (必需)粒子喷射位置宽度范围\n * deltaHeight {int} (必需)粒子喷射位置高度范围\n * pointSizeMin {int} (必需)粒子尺寸下限(像素)\n * pointSizeMax {int} (必需)粒子尺寸上限(像素)\n * speedMin {float} (必需)粒子速度下限\n * speedMax {float} (必需)粒子速度上限\n * lifeMin {int} (必需)粒子生命周期下限(ms)\n * lifeMax {int} (必需)粒子生命周期上限(ms)\n * accelerateX {float} (必需)水平方向加速度\n * accelerateY {float} (必需)垂直方向加速度\n * addNumSpeed {float} 持续喷射时,起始粒子添加速度(个/ms), 默认为0.001\n * enableFade {boolean} 粒子淡出开关, 默认为false\n * enableShrink {boolean} 粒子缩小开关, 默认为false\n * angularVelocityMin {float} 角速度最小值, 默认为0\n * angularVelocityMax {float} 角速度最大值, 默认为0\n * alphaMin {float} 透明度最小值, 默认为1\n * alphaMax {float} 透明度最大值, 默认为1\n-->\n\n\n */\nlet buildForgeView = (pointRes, sprayStyle, sizeRef, ignoreClip) => {\n if (!pointRes) {\n return -1;\n }\n const texture_manager = handles.TextureManager;\n let texture_setting;\n if (pointRes.trim().startsWith(\"#\") || pointRes.trim().startsWith(\"rgba\")) {\n texture_setting = new Forge$1.TextureSetting(\n texture_manager.GetColorTexture(pointRes)\n );\n } else {\n const base_url = pointRes;\n let image_url = base_url;\n if (base_url && base_url.indexOf(\"http\") === 0) {\n image_url = base_url;\n } else if (window.JsView.Dom.UrlRef) {\n image_url = new window.JsView.Dom.UrlRef(pointRes).href;\n }\n texture_setting = new Forge$1.ExternalTextureSetting(\n texture_manager.GetImage2(image_url, false, null, \"RGB_8888\", null)\n );\n }\n const spray_view = new Forge$1.SprayView(texture_setting);\n const add_num_per_frame = sprayStyle.addNumSpeed ? sprayStyle.addNumSpeed : 1e-3;\n const accelerate_x = typeof sprayStyle.accelerateX !== \"undefined\" ? sprayStyle.accelerateX : 0;\n const accelerate_y = typeof sprayStyle.accelerateY !== \"undefined\" ? sprayStyle.accelerateY : -100;\n let angularVelocityMin = 0, angularVelocityMax = 0;\n if (typeof sprayStyle.angularVelocityMin === \"number\" && typeof sprayStyle.angularVelocityMax === \"number\") {\n angularVelocityMin = sprayStyle.angularVelocityMin;\n angularVelocityMax = sprayStyle.angularVelocityMax;\n }\n let alphaMin = 1, alphaMax = 1;\n if (typeof sprayStyle.alphaMin === \"number\" && typeof sprayStyle.alphaMax === \"number\") {\n alphaMin = sprayStyle.alphaMin;\n alphaMax = sprayStyle.alphaMax;\n }\n let lifeMin = sprayStyle.lifeMin, lifeMax = sprayStyle.lifeMax;\n if (sprayStyle.lifeMax > 50 * 1e3) {\n console.warn(\"JsvSpray: particle maximum lifetime is 50000ms, current value is\", sprayStyle.lifeMax);\n lifeMin = sprayStyle.lifeMin > 5e4 ? 5e4 : sprayStyle.lifeMin;\n lifeMax = sprayStyle.lifeMax > 5e4 ? 5e4 : sprayStyle.lifeMax;\n }\n spray_view.SetSprayInfo(\n sprayStyle.type,\n sprayStyle.particleNum,\n add_num_per_frame,\n sprayStyle.deltaAngle / 180 * 3.1415,\n sprayStyle.deltaWidth,\n sprayStyle.deltaHeight,\n sprayStyle.pointSizeMin,\n sprayStyle.pointSizeMax,\n sprayStyle.speedMin,\n sprayStyle.speedMax,\n lifeMin,\n lifeMax,\n accelerate_x,\n accelerate_y,\n sprayStyle.enableFade,\n sprayStyle.enableShrink,\n ignoreClip,\n angularVelocityMin,\n angularVelocityMax,\n alphaMin,\n alphaMax\n );\n const view_width = sprayStyle.deltaWidth === 0 ? 1 : 2 * sprayStyle.deltaWidth;\n const view_height = sprayStyle.deltaHeight === 0 ? 1 : 2 * sprayStyle.deltaHeight;\n sizeRef.width = view_width;\n sizeRef.height = view_height;\n return Forge$1.sViewStore.add(new Forge$1.ViewInfo(spray_view, null));\n};\nconst _sfc_main$s = {\n props: {\n pointRes: {\n type: String,\n required: true\n },\n sprayStyle: {\n type: Object,\n required: true\n },\n ignoreClip: {\n type: Boolean,\n default: false\n }\n },\n data() {\n return {\n size: {\n width: 0,\n height: 0\n },\n viewId: -1\n };\n },\n methods: {\n unloadView() {\n if (this.viewId != -1) {\n Forge$1.sViewStore.remove(this.viewId);\n this.viewId = -1;\n }\n }\n },\n created() {\n this.viewId = buildForgeView(\n this.pointRes,\n this.sprayStyle,\n this.size,\n this.ignoreClip\n );\n },\n updated() {\n this.unloadView();\n this.viewId = buildForgeView(\n this.pointRes,\n this.sprayStyle,\n this.size,\n this.ignoreClip\n );\n },\n beforeUnmount() {\n this.unloadView();\n }\n};\nfunction _sfc_render$7(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"div\", {\n style: normalizeStyle({ width: $data.size.width, height: $data.size.height }),\n \"data-jsv-vw-innerview\": $data.viewId\n }, null, 12, [\"data-jsv-vw-innerview\"]);\n}\nconst JsvSpray = /* @__PURE__ */ _export_sfc(_sfc_main$s, [[\"render\", _sfc_render$7]]);\n\n//!\n//! utils/JsViewVueWidget/JsvSpray/index.js;\n//!\n//! 考虑到.vue文件除了export default的component外,还有可能export其他对象,因此使用import * as\nlet _JsvSpray;\nif (window.JsView) {\n _JsvSpray = JsvSpray;\n} else {\n const BrowserSpray = await import('./browser/BrowserSpray.vue.mjs');\n _JsvSpray = BrowserSpray.default;\n}\nconst _JsvSpray$1 = _JsvSpray;\n\n//!\n//! utils/JsViewVueTools/JsvDynamicKeyFrames.js;\n//!\n/*!\n * 【模块 export 内容】\n * getKeyFramesGroup: 函数,获取KeyFrame操作类 KeyFrameStyleSheet\n * KeyFrameStyleSheet:面向对象类,KeyFrames CSS rule的操作类,用于添加和删除KeyFrame\n * 功能函数:(参数说明见函数本体)\n * insertRule(key_frame_string) 动态添加keyFrame\n * removeRule(name) 动态删除keyFrame\n * removeMultiRules(names_array) 批量动态删除keyFrame\n * hasRule(name) 查询KeyFrame是否存在\n */\n/*!\n * getKeyFramesGroup 参数说明:\n * anchor_tag (String) keyFrame的名称,可以不设置或者为undefined\n * 返回值:\n * KeyFrameStyleSheet 以anchor_tag为锚点,找到对应的cssRule,以此cssRule创建出的KeyFrame管理句柄\n */\nfunction getKeyFramesGroup(anchor_tag) {\n return window.JsvCode.Dom.getKeyFrameGroup(anchor_tag);\n}\n\n//!\n//! utils/JsViewVueWidget/JsvSpriteAnim/sAnimationToken.js;\n//!\nlet sAnimationToken = 0;\nconst getsAnimationToken = () => {\n return sAnimationToken++;\n};\n\n//!\n//! utils/JsViewVueWidget/JsvSpriteAnim/FrameBuidler.ts;\n//!\nlet keyFrameStyleSheet = getKeyFramesGroup(null);\nconst TRANSFORM_ORIGIN_LEFT_TOP = \"left top\";\nclass TransformInfoResule {\n csw = 1;\n csh = 1;\n cx = 0;\n cy = 0;\n sw = 1;\n sh = 1;\n x = 0;\n y = 0;\n}\nclass SpritePack {\n keyFrameRefName = null;\n clipKeyFrameName = null;\n transKeyFrameName = null;\n clipStyle = null;\n // 对应clip div的style控制\n transStyle = null;\n // 对应translate div的style控制\n imageStyle = null;\n // 对应最内部的图片展示的div的style控制\n}\nfunction getAnimNameBase() {\n return `sprite-anim-name-${getsAnimationToken()}`;\n}\n;\nfunction getTransformInfo(source_obj, target_obj, canvas_width, canvas_height) {\n const result = new TransformInfoResule();\n const clip_scale_w = target_obj.w / canvas_width;\n const clip_scale_h = target_obj.h / canvas_height;\n result.csw = clip_scale_w;\n result.csh = clip_scale_h;\n result.cx = target_obj.x / clip_scale_w;\n result.cy = target_obj.y / clip_scale_h;\n result.sw = source_obj.w / target_obj.w / clip_scale_w;\n result.sh = source_obj.h / target_obj.h / clip_scale_h;\n result.x = -source_obj.x;\n result.y = -source_obj.y;\n return result;\n}\n;\nfunction createTransformStyle(w_scale, h_scale, x, y) {\n let output = \"\";\n output = `${output}scale3d(${parseFloat(w_scale).toPrecision(5)},${parseFloat(h_scale).toPrecision(5)},1) translate3d(${parseFloat(x).toPrecision(5)}px,${parseFloat(y).toPrecision(5)}px,0)`;\n return output;\n}\n;\nfunction expireAnimates(runningSprite) {\n if (!runningSprite) {\n return;\n }\n let keyFrameRefName = runningSprite.keyFrameRefName;\n const names_array = [`${keyFrameRefName}-clip`, `${keyFrameRefName}-image`];\n if (keyFrameStyleSheet) {\n keyFrameStyleSheet.removeMultiRules(names_array);\n }\n}\nfunction newAnimateFrames(image_url, frame_info_list, canvas_width, canvas_height, source_width, source_height) {\n if (!frame_info_list || frame_info_list.length == 0) {\n return new SpritePack();\n }\n if (!keyFrameStyleSheet) {\n console.error(\"Error: Get keyFrameStyleSheet failed\");\n return new SpritePack();\n }\n const frame_percent = 1 / (frame_info_list.length - 1);\n const anim_base_name = getAnimNameBase();\n const anim_name_clip = `${anim_base_name}-clip`;\n const anim_name_image = `${anim_base_name}-image`;\n let image_keyframs = `@keyframes ${anim_name_image} {`;\n let clip_keyframs = `@keyframes ${anim_name_clip} {`;\n for (let i = 0; i < frame_info_list.length; i++) {\n let item;\n item = frame_info_list[i];\n let header;\n if (i !== frame_info_list.length) {\n header = `${parseFloat(frame_percent * i * 100).toFixed(2)}% {`;\n } else {\n header = \"100% {\";\n }\n image_keyframs += header;\n clip_keyframs += header;\n if (item.source) {\n const tr = getTransformInfo(\n item.source,\n item.target,\n canvas_width,\n canvas_height\n );\n const clip_trans = createTransformStyle(tr.csw, tr.csh, tr.cx, tr.cy);\n const image_trans = createTransformStyle(tr.sw, tr.sh, tr.x, tr.y);\n let tr_str = \"\";\n tr_str = `${tr_str}transform:${clip_trans};transform-origin:left top;`;\n clip_keyframs += tr_str;\n tr_str = \"\";\n tr_str = `${tr_str}transform:${image_trans};transform-origin:left top;`;\n image_keyframs += tr_str;\n }\n image_keyframs += \"}\";\n clip_keyframs += \"}\";\n }\n image_keyframs += \"}\";\n clip_keyframs += \"}\";\n keyFrameStyleSheet.insertRule(image_keyframs);\n keyFrameStyleSheet.insertRule(clip_keyframs);\n let pack_info = new SpritePack();\n pack_info.keyFrameRefName = anim_base_name;\n pack_info.clipKeyFrameName = anim_name_clip;\n pack_info.clipStyle = {\n overflow: \"hidden\",\n width: canvas_width,\n height: canvas_height,\n transform: null,\n // 重置 transform,以免影响keyframe动画\n transformOrigin: TRANSFORM_ORIGIN_LEFT_TOP,\n animation: null\n // 外部设置,需要时间和loop信息\n };\n pack_info.transKeyFrameName = anim_name_image;\n pack_info.transStyle = {\n transform: null,\n // 重置 transform,以免影响keyframe动画\n transformOrigin: TRANSFORM_ORIGIN_LEFT_TOP,\n animation: null,\n // 外部设置,需要时间和loop信息\n width: source_width,\n height: source_height\n };\n pack_info.imageStyle = {\n backgroundImage: image_url,\n width: source_width,\n height: source_height\n };\n return pack_info;\n}\nfunction newFrozeFrame(image_url, frame_info_list, index, canvas_width, canvas_height, source_width, source_height) {\n let sprite_info = new SpritePack();\n const tr = getTransformInfo(\n frame_info_list[index].source,\n frame_info_list[index].target,\n canvas_width,\n canvas_height\n );\n sprite_info.clipStyle = {\n transform: createTransformStyle(tr.csw, tr.csh, tr.cx, tr.cy),\n transformOrigin: TRANSFORM_ORIGIN_LEFT_TOP,\n overflow: \"hidden\",\n left: 0,\n top: 0,\n width: canvas_width,\n height: canvas_height\n };\n sprite_info.transStyle = {\n transformOrigin: TRANSFORM_ORIGIN_LEFT_TOP,\n transform: createTransformStyle(tr.sw, tr.sh, tr.x, tr.y),\n width: source_width,\n height: source_height\n };\n sprite_info.imageStyle = {\n backgroundImage: image_url,\n width: source_width,\n height: source_height\n };\n return sprite_info;\n}\n;\n\n//!\n//! utils/JsViewVueWidget/JsvSpriteAnim/JsvSpriteAnim.vue?vue&type=style&index=0&scoped=fa78d758&lang.css;\n//!\nconst JsvSpriteAnim_vue_vue_type_style_index_0_scoped_fa78d758_lang = \"\";\n\n//!\n//! utils/JsViewVueWidget/JsvSpriteAnim/JsvSpriteAnim.vue;\n//!\n/*! <!--\n * 【模块 export 内容】\n * JsvSpriteAnim: 描画动态的精灵图(雪碧图)\n * prop说明:\n * spriteInfo {object} (必需)精灵图配置信息\n * { frames: [\n * {\n * source:{x, y, w, h},\n * target:{x, y, w, h},\n * },\n * ...\n * ],\n * meta:{w,h}\n * }\n * viewSize {object} (可选){w:0, h:0}, 从SpriteInfo中提炼的最大子图内容显示尺寸\n * imageUrl {string} (必需)图片地址,另外,为了减小无效的解析处理,规定只有image的URL变更时才重新解析spriteInfo\n * duration {float} (动图必需)动图的时间\n * onAnimEnd {function} 动图结束回调\n * autostart {string} 启动动图,默认none,\n * 自动启动模式:true/start:精灵图自动启动\n * none:不自动启动\n * loop {string或number} 动图的循环次数 infinite/数字,默认为单次\n * controller {SpriteController} 控制动图start,stop的对象\n *\n * SpriteController/或者本组件的ref: 面向对象类,精灵图动作控制器\n * 功能函数:(参数说明见函数本体)\n * start()\n * 功能: 启动精灵图动画\n * 参数表:\n * indexArray : 帧数组/\"all\", 展示帧的序列 \n * endFrame : 取值\"start\"/\"end\", 动画的结束帧内容 \n * duration : 单次生效, 临时覆盖prop中设置的duration\n * loopSet : 单次生效, 临时覆盖prop中设置的loop, 次数或者infinite \n * animateEnd : 单次回调, 另外prop的onAnimEnd仍然会触发\n *\n * stop()\n * 功能: 停止精灵图动画,可选择静止在第一帧或最后一帧\n * 参数表:\n * index : 目标帧index/\"start\"/\"end\" \n -->\n\n\n\n\n\n */\nconst _sfc_main$r = {\n __name: \"JsvSpriteAnim\",\n props: {\n spriteInfo: Object,\n viewSize: Object,\n imageUrl: String,\n duration: { type: Number, default: 1 },\n onAnimEnd: Function,\n autostart: { type: [Boolean, String], default: false },\n loop: { type: [String, Number], default: \"\" },\n controller: Object,\n spriteName: String\n // 废弃(Deprecated)\n },\n setup(__props, { expose }) {\n const props = __props;\n let innerId = shallowRef(0);\n let spriteDuration = shallowRef(props.duration);\n let apiStartEndCallback = null;\n let canvasSize = { width: 0, height: 0 };\n let transformStyle = {\n clipStyle: shallowRef({}),\n transStyle: shallowRef({}),\n imageStyle: shallowRef({})\n };\n let staticFrameCachedInfo = null;\n let animFrameCachedInfo = null;\n let cachedProps = {\n spriteInfo: props.spriteInfo\n };\n const _IsAutoStart = () => {\n let autoStart = false;\n if (typeof props.autostart === \"boolean\") {\n autoStart = props.autostart;\n }\n if (typeof props.autostart === \"string\" && props.autostart !== \"none\") {\n autoStart = true;\n }\n return autoStart;\n };\n const _BuildStaticFrame = (targetIndex) => {\n if (!staticFrameCachedInfo) {\n staticFrameCachedInfo = {\n props: {\n frameIndex: void 0\n },\n result: null\n };\n }\n if (staticFrameCachedInfo.result == null || staticFrameCachedInfo.props.frameIndex != targetIndex) {\n let framesLength = props.spriteInfo.frames.length;\n if (targetIndex < 0 || targetIndex >= framesLength) {\n console.error(\n `Error: static out of range idx=${targetIndex} len=${framesLength}`\n );\n targetIndex = 0;\n }\n let spriteInfo = newFrozeFrame(\n props.imageUrl,\n props.spriteInfo.frames,\n targetIndex,\n canvasSize.width,\n canvasSize.height,\n props.spriteInfo.meta.size.w,\n props.spriteInfo.meta.size.h\n );\n staticFrameCachedInfo.props.frameIndex = targetIndex;\n staticFrameCachedInfo.result = spriteInfo;\n }\n return staticFrameCachedInfo.result;\n };\n const _BuildAnimateFrame = (indexArray) => {\n if (props.spriteInfo.frames == 1) {\n return _BuildStaticFrame(0);\n }\n if (!animFrameCachedInfo) {\n animFrameCachedInfo = {\n props: {\n indexArray: \"all\"\n },\n result: null\n };\n }\n let arrayMatch = true;\n if (animFrameCachedInfo.result == null) {\n arrayMatch = false;\n } else {\n let originArray = animFrameCachedInfo.props.indexArray;\n if (indexArray != originArray) {\n if (typeof indexArray == \"string\" || typeof originArray == \"string\") {\n arrayMatch = false;\n }\n if (indexArray.length == originArray.length) {\n for (let i = 0; i < indexArray.length; i++) {\n if (indexArray[i] != originArray[i]) {\n arrayMatch = false;\n break;\n }\n }\n } else {\n arrayMatch = false;\n }\n }\n }\n if (!arrayMatch) {\n let newFramesArray;\n if (indexArray == \"all\") {\n newFramesArray = props.spriteInfo.frames;\n } else {\n newFramesArray = [];\n let lastFrameIndex = 0;\n let framesLength = props.spriteInfo.frames.length;\n for (const frameIndex of indexArray) {\n let targetIndex = frameIndex;\n if (frameIndex < 0 || frameIndex >= framesLength) {\n console.warn(`out of range ${frameIndex} of len=${framesLength}`);\n targetIndex = lastFrameIndex;\n }\n newFramesArray.push(props.spriteInfo.frames[targetIndex]);\n }\n }\n if (animFrameCachedInfo.result != null) {\n expireAnimates(animFrameCachedInfo.result);\n animFrameCachedInfo.result = null;\n }\n let spriteInfo = newAnimateFrames(\n props.imageUrl,\n newFramesArray,\n canvasSize.width,\n canvasSize.height,\n props.spriteInfo.meta.size.w,\n props.spriteInfo.meta.size.h\n );\n animFrameCachedInfo.props.indexArray = indexArray;\n animFrameCachedInfo.result = spriteInfo;\n }\n return animFrameCachedInfo.result;\n };\n const _ApplySpriteInfo = (spriteInfo) => {\n transformStyle.clipStyle.value = spriteInfo.clipStyle;\n transformStyle.transStyle.value = spriteInfo.transStyle;\n transformStyle.imageStyle.value = spriteInfo.imageStyle;\n innerId.value += 1;\n };\n const _OnReset = () => {\n let spriteInfo;\n if (_IsAutoStart()) {\n spriteInfo = _BuildAnimateFrame(\"all\");\n spriteInfo.clipStyle.animation = `${spriteInfo.clipKeyFrameName} ${spriteDuration.value}s steps(1,end) ${props.loop}`;\n spriteInfo.transStyle.animation = `${spriteInfo.transKeyFrameName} ${spriteDuration.value}s steps(1,end) ${props.loop}`;\n } else {\n spriteInfo = _BuildStaticFrame(0);\n }\n _ApplySpriteInfo(spriteInfo);\n cachedProps.spriteInfo = props.spriteInfo;\n };\n if (props.viewSize) {\n canvasSize.width = props.viewSize.w;\n canvasSize.height = props.viewSize.h;\n } else {\n let max_width = 0;\n let max_height = 0;\n for (let i = 0; i < props.spriteInfo.frames.length; i++) {\n const target = props.spriteInfo.frames[i].target;\n const sprite_with = target.x + target.w;\n const sprite_height = target.y + target.h;\n if (sprite_with > max_width) {\n max_width = sprite_with;\n }\n if (sprite_height > max_height) {\n max_height = sprite_height;\n }\n }\n canvasSize.width = max_width;\n canvasSize.height = max_height;\n }\n watch(props, (newProps) => {\n if (newProps.spriteInfo != cachedProps.spriteInfo) {\n console.log(\"Sprite reset for spriteInfo changed\");\n _OnReset();\n }\n });\n _OnReset();\n let blinkAnim = shallowRef(null);\n let blinkAnimCache = reactive({});\n onUnmounted(() => {\n if (animFrameCachedInfo?.result != null) {\n expireAnimates(animFrameCachedInfo.result);\n animFrameCachedInfo.result = null;\n }\n });\n const onAnimEndDelegate = () => {\n if (props.onAnimEnd) {\n props.onAnimEnd();\n }\n if (apiStartEndCallback) {\n let cb = apiStartEndCallback;\n apiStartEndCallback = null;\n cb();\n }\n };\n const onBlinkAnimEnd = () => {\n blinkAnim.value = null;\n };\n const op = {\n start: (indexArray, endFrame, duration, loopSet, animateEnd) => {\n if (props.spriteInfo.frames && props.spriteInfo.frames.length === 1) {\n console.error(\n `Error: start failed for frames not enough len=${props.spriteInfo.frames.length}`\n );\n return;\n }\n if (!indexArray) {\n indexArray = \"all\";\n }\n if (!loopSet) {\n loopSet = props.loop;\n }\n if (!duration) {\n duration = props.duration;\n }\n apiStartEndCallback = () => {\n let endIndex = 0;\n if (indexArray instanceof Array) {\n endIndex = endFrame == \"start\" ? indexArray[0] : indexArray[indexArray.length - 1];\n } else {\n endIndex = endFrame == \"start\" ? 0 : props.spriteInfo.frames.length - 1;\n }\n let endSpriteInfo = _BuildStaticFrame(endIndex);\n _ApplySpriteInfo(endSpriteInfo);\n if (animateEnd) {\n animateEnd();\n }\n };\n let spriteInfo = _BuildAnimateFrame(indexArray);\n spriteInfo.clipStyle.animation = `${spriteInfo.clipKeyFrameName} ${duration}s steps(1,end) ${loopSet}`;\n spriteInfo.transStyle.animation = `${spriteInfo.transKeyFrameName} ${duration}s steps(1,end) ${loopSet}`;\n _ApplySpriteInfo(spriteInfo);\n },\n stop: (index) => {\n apiStartEndCallback = null;\n let targetIndex;\n if (typeof index == \"undefined\") {\n targetIndex = 0;\n } else if (typeof index == \"string\") {\n targetIndex = index == \"start\" ? 0 : props.spriteInfo.frames.length - 1;\n } else {\n targetIndex = index;\n }\n let spriteInfo = _BuildStaticFrame(targetIndex);\n _ApplySpriteInfo(spriteInfo);\n },\n // 含有透明度的transform变化\n blink: (alphas, duration, ease, delay, repeat) => {\n }\n };\n props.controller?._setSpriteImg(op);\n expose(op);\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", {\n id: \"clip\",\n style: normalizeStyle(unref(transformStyle).clipStyle.value),\n key: unref(innerId)\n }, [\n createElementVNode(\"div\", {\n id: \"trans\",\n style: normalizeStyle(unref(transformStyle).transStyle.value),\n onAnimationend: onAnimEndDelegate\n }, [\n createElementVNode(\"div\", {\n id: \"image\",\n style: normalizeStyle({ ...unref(transformStyle).imageStyle.value, animation: unref(blinkAnim) }),\n onAnimationend: onBlinkAnimEnd\n }, null, 36)\n ], 36)\n ], 4);\n };\n }\n};\nconst styleSheetsContent$1 = { \"0\": { \"sprite-tag-fa78d758\": \"@keyframes sprite-tag-fa78d758 {}\" } };\nwindow.JsvCode.Dom.DeclareStyleSheets(styleSheetsContent$1);\nconst JsvSpriteAnim = /* @__PURE__ */ _export_sfc(_sfc_main$r, [[\"__scopeId\", \"data-v-fa78d758\"]]);\n\n//!\n//! utils/JsViewVueWidget/JsvSpriteAnim/JsvSpriteLoader.vue;\n//!\n/*! <!--\n * 【模块 export 内容】\n * JsvSpriteLoader: 雪碧图资源加载器\n * prop说明:\n * imageUrl: http打头的远程图片加载器\n * configUrl: http打头的远程configUrl文件\n * onConfigReady: config文件下载完成后的回调(data, PromiseResolve)\n * noNeedResource: 是否需要等待imageUrl和json记载完毕后再激活子内容, 默认为false, 可设置为true\n -->\n\n\n\n\n\n */\nconst _sfc_main$q = {\n __name: \"JsvSpriteLoader\",\n props: {\n imageUrl: String,\n configUrl: String,\n onConfigReady: Function,\n noNeedResource: { type: Boolean, default: false }\n },\n setup(__props) {\n const props = __props;\n let resetId = shallowRef(0);\n let dataReady = shallowRef(false);\n let igonreLoad = shallowRef(false);\n let preloadInfo;\n let imageResolve = null;\n let configResolve = null;\n let imagePromise = new Promise((resolve) => {\n imageResolve = resolve;\n });\n let configPromise = new Promise((resolve) => {\n configResolve = resolve;\n });\n let cachedProps = {\n imageUrl: props.imageUrl,\n noNeedResource: props.noNeedResource\n };\n let _onPreloadDone = () => {\n imageResolve();\n };\n function fetchConfig(configUrl) {\n var xhr = new XMLHttpRequest();\n xhr.open(\"GET\", configUrl, true);\n xhr.onload = function() {\n if (xhr.status >= 200 && xhr.status < 300) {\n var jsonData = JSON.parse(xhr.responseText);\n props.onConfigReady(jsonData, configResolve);\n } else {\n console.error(\"Failed to load JSON file. Status:\", xhr.status);\n }\n };\n xhr.onerror = function() {\n console.error(\"Network error occurred\");\n };\n xhr.send();\n }\n let _OnReset = () => {\n dataReady.value = false;\n igonreLoad.value = props.noNeedResource;\n if (!props.noNeedResource && props.imageUrl) {\n preloadInfo = [buildPreloadInfo(props.imageUrl)];\n if (props.configUrl && props.onConfigReady) {\n fetchConfig(props.configUrl);\n } else {\n console.log(\n `no config: configUrlSet=${props.configUrl} func=${props.onConfigReady}`\n );\n }\n Promise.all([imagePromise, configPromise]).then(() => {\n dataReady.value = true;\n });\n }\n cachedProps.imageUrl = props.imageUrl;\n cachedProps.noNeedResource = props.noNeedResource;\n resetId.value++;\n };\n _OnReset();\n watch(props, (newProps) => {\n if (newProps.imageUrl != cachedProps.imageUrl || cachedProps.noNeedResource != newProps.noNeedResource) {\n console.log(\"SpriteLoader reset for url or needFlag changed\");\n _OnReset();\n }\n });\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", {\n id: \"sprite-loader\",\n key: unref(resetId)\n }, [\n createVNode(unref(JsvPreload), {\n preloadList: unref(preloadInfo),\n onPreloadDone: unref(_onPreloadDone)\n }, null, 8, [\"preloadList\", \"onPreloadDone\"]),\n unref(dataReady) || unref(igonreLoad) ? renderSlot(_ctx.$slots, \"default\", { key: 0 }) : createCommentVNode(\"\", true)\n ]);\n };\n }\n};\n\n//!\n//! utils/JsViewVueWidget/JsvSpriteAnim/SpriteController.js;\n//!\nclass SpriteController {\n /**\n * 方法说明\n * start() 启动动图\n * stop(end_frame) 停止动图 end_frame: \"start\", \"end\"\n */\n constructor() {\n this._SpriteImage = null;\n this.Used = false;\n }\n _setSpriteImg(sprite) {\n this._SpriteImage = sprite;\n }\n /*\n * start() 启动精灵图\n * 参数说明:\n * end_frame {String} 输入'start'时,停止在第一帧,输入'end'时,停止在最后一帧\n * duration {int} 指定精灵图运行时间\n */\n start(end_frame, duration) {\n if (!this.Used) {\n this.Used = true;\n }\n if (this._SpriteImage) {\n this._SpriteImage.start(end_frame, duration);\n }\n }\n /*\n * stop(end_frame) 停止精灵图\n * 参数说明:\n * end_frame {String} 输入'start'时,停止在第一帧,输入'end'时,停止在最后一帧\n */\n stop(end_frame) {\n if (!this.Used) {\n this.Used = true;\n }\n if (this._SpriteImage) {\n this._SpriteImage.stop(end_frame);\n }\n }\n /**\n * blink() 对精灵图做闪烁动画(忽隐忽现)\n * 参数说明:\n * alpha {Array} 透明度变化\n * duration {int} 时长(秒)\n * delay {int} 时长(秒)\n * ease {string}\n * repeat {int} 动画完成后是否应该自动重新启动?如果要使其永久运行,请设置为-1\n */\n blink(alpha, duration, ease, delay, repeat) {\n if (!this.Used) {\n this.Used = true;\n }\n if (this._SpriteImage) {\n this._SpriteImage.blink(alpha, duration, ease, delay, repeat);\n }\n }\n}\n\n//!\n//! utils/JsViewVueWidget/JsvSpriteAnim/index.js;\n//!\n\n//!\n//! utils/JsViewVueWidget/JsvVisibleSensor/JsvVisibleSensor.vue;\n//!\n/*! <!--\n * 【模块 export 内容】\n * JsvVisibleSensor: 可视区域监控器\n * props说明:\n * horizonShown {number} (可选, 可响应式, 默认1.0完全露出)横轴百分比区域完全显示时(左边或右边完全露出,仅中间段判断会失效),\n * 横轴切换到显示状态,否则为不可视状态\n * verticalShown {number} (可选, 可响应式)纵轴百分比区域完全显示时(上边或下边完全露出,仅中间段判断会失效),\n * 纵轴切换到显示状态,否则为不可视状态\n * left {number} (可选, 可响应式)可视检测区域的left\n * top {number} (可选, 可响应式)可视检测区域的top\n * width {number} (可选, 可响应式)可视检测区域的width\n * height {number} (可选, 可响应式)可视检测区域的height\n *\n * container {div reference} (可选, 可响应式)子区域参照,若为null,则认为检测可视区域为全屏幕\n *\n * callback {function} (必须, 可响应式)可视变化时的回调处理, 参数\n * (old_horizantal_visible, new_horizantal_visible, old_vertical_visible, new_vertical_visible)\n -->\n\n\n\n\n */\nconst _sfc_main$p = {\n __name: \"JsvVisibleSensor\",\n props: {\n // (支持reactive)可视区域设定\n horizonShown: Number,\n verticalShown: Number,\n // (支持reactive)Container, 父区域的div引用,\n container: Object,\n // (不支持reactive)回调处理\n callback: Function,\n // (支持reactive)位置信息\n left: {\n type: Number,\n default: 0\n },\n top: {\n type: Number,\n default: 0\n },\n width: {\n type: Number,\n require: true\n },\n height: {\n type: Number,\n require: true\n },\n // (支持reactive)是否激活,仍然在渲染树时,非必须可以通过enable关闭以节省CPU开销\n enable: {\n type: Boolean,\n default: true\n }\n },\n setup(__props, { expose }) {\n const props = __props;\n const viewRef = shallowRef(null);\n const viewMounted = reactive({ status: false });\n let sensorRef = null;\n watchEffect(() => {\n if (viewMounted.status) {\n let horizon = fixAreaValue(props.horizonShown);\n let vertical = fixAreaValue(props.verticalShown);\n sensorRef.ResetArea({ horizon, vertical });\n }\n });\n watchEffect(() => {\n if (viewMounted.status) {\n sensorRef.Enable(props.enable);\n }\n });\n watchEffect(() => {\n if (viewMounted.status) {\n if (props.container) {\n window.MyContainerView = toRaw(props.container);\n let jsv_main_view_ref = toRaw(props.container).jsvGetProxyView();\n if (jsv_main_view_ref) {\n sensorRef.ResetContainer(jsv_main_view_ref);\n } else {\n console.error(\"Error: container is NOT a div\");\n }\n } else {\n sensorRef.ResetContainer(null);\n }\n }\n });\n let oldH, newH, oldV, newV;\n const visibleChange = (old_h, new_h, old_v, new_v) => {\n oldH = old_h;\n newH = new_h;\n oldV = old_v;\n newV = new_v;\n props.callback?.(old_h, new_h, old_v, new_v);\n };\n onMounted(() => {\n console.log(\"JsvVisibleSensor: on mounted\");\n sensorRef = new Forge$1.VisibleSensor(\n toRaw(viewRef.value).jsvGetProxyView(),\n (old_h, new_h, old_v, new_v) => {\n visibleChange(old_h, new_h, old_v, new_v);\n }\n );\n viewMounted.status = true;\n });\n onActivated(() => {\n sensorRef.Enable(props.enable);\n });\n onDeactivated(() => {\n if (newH || newV) {\n visibleChange(newH, false, newV, false);\n }\n sensorRef.Enable(false);\n });\n expose({});\n function fixAreaValue(origin_value) {\n if (origin_value > 1) {\n console.warn(`will limited to 1 origin=${origin_value}`);\n return 1;\n } else if (origin_value < 0) {\n console.warn(`will limited to 0 origin=${origin_value}`);\n return 0;\n } else {\n return origin_value;\n }\n }\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", {\n ref_key: \"viewRef\",\n ref: viewRef,\n style: normalizeStyle({\n top: props.top,\n left: props.left,\n width: props.width,\n height: props.height\n })\n }, [\n renderSlot(_ctx.$slots, \"default\")\n ], 4);\n };\n }\n};\n\nvar JsvVisibleSensor$1 = /*#__PURE__*/Object.freeze({\n __proto__: null,\n default: _sfc_main$p\n});\n\n//!\n//! utils/JsViewVueWidget/JsvVisibleSensor/index.js;\n//!\n//! 考虑到.vue文件除了export default的component外,还有可能export其他对象,因此使用import * as\nlet _JsvVisibleSensor = JsvVisibleSensor$1;\nconst JsvVisibleSensor = _JsvVisibleSensor.default;\n\n//!\n//! utils/JsViewVueWidget/JsvSwiper/JsvSwiper.vue;\n//!\n/*! <!--\n * 【模块 export 内容】\n * JsvSwiper:Vue高阶组件,图片轮播组件\n * props说明:\n * showIndicator {boolean} 是否显示指示点,默认显示\n * dotSize {int} 指示点大小,默认为10px\n * dotGap {int} 指示点之间间隔,默认为10px\n * indicatorPos {int} 指示点位置, 横向时为距顶端的位置,默认为高的80%;\n 纵向时为距左端的位置,默认为宽的80%\n * indicatorAlign {String} 指示面板的 align, 值为 start / middle / end,默认为middle\n * totalFrame {int} (必需)item 的个数\n * firstFrame {int} 初始 item 的 index,默认为0\n * layoutInfo {Object} (必需)组件的大小及位置 {top: 0, left: 0, width: 0, height: 0}\n * onClick {Function} 点击事件 function () {}\n * onChange {Function} 滚动事件 function (index) {}\n * onEdge {Function} 到达边缘事件 ({direction: EdgeDirection}) => Void\n * autoplayInterval {int} 自动滚动的时间(毫秒),等于0时不自动滚动, 默认为5000\n * animation {Object} 滚动动画设置 {duration: 0, easing: \"linear\"}\n * vertical {boolean} 组件是否为纵向的,默认为 false\n * name {String} 组件获得焦点的 name\n * onFocus {Function} 获得焦点的回调 \n * onBlur {Function} 失去焦点的回调\n * swipeType {String} 切换方式,目前只支持 translate,之后可能会添加 opacity 等方式\n * smoothTranslate {boolean} 平滑模式动画开关\n * reverseSwipe {boolean} 反转滚动方向,默认值为false. 默认滚动方向是正向, 既向index增大的方向, 反转后为反向, 既向index减小的方向\n * disableLoopWhenFocus {boolean} 获焦时按键是否循环滚动\n * public methods:\n * slideTo\n * @description 滚动到指定id\n @params {int} id 目标id\n @params {int} 方向, 1为正向, -1为负向\n-->\n\n\n\n\n */\nconst VIEW_NUM = 3;\nfunction modToRange(value, mod, start = 0) {\n let m = value % mod;\n if (m < start) {\n m += mod;\n } else if (m >= start + mod) {\n m -= mod;\n }\n return m;\n}\nconst keyCode2EdgeDirection = (keyCode) => {\n switch (keyCode) {\n case 37:\n return EdgeDirection.left;\n case 38:\n return EdgeDirection.top;\n case 39:\n return EdgeDirection.right;\n case 40:\n return EdgeDirection.bottom;\n default:\n console.error(\"not direction key\", keyCode);\n return null;\n }\n};\nconst _sfc_main$o = {\n components: { JsvActorMove: _sfc_main$C, JsvVisibleSensor },\n props: {\n showIndicator: {\n type: Boolean,\n default: true\n },\n dotSize: {\n type: Number,\n default: 10\n },\n dotGap: {\n type: Number,\n default: 10\n },\n indicatorPos: {\n type: Number,\n default: -1\n },\n indicatorAlign: {\n type: String,\n validator(value) {\n return [\"start\", \"middle\", \"end\"].includes(value);\n },\n default: \"middle\"\n },\n totalFrame: {\n type: Number,\n require: true\n },\n firstFrame: {\n type: Number,\n default: 0\n },\n layoutInfo: {\n type: Object,\n require: true\n },\n onClick: {\n type: Function\n },\n onChange: {\n type: Function\n },\n onEdge: {\n type: Function\n },\n autoplayInterval: {\n type: Number,\n default: 5e3\n },\n animation: {\n type: Object,\n default() {\n return {\n duration: 200,\n easing: \"linear\"\n };\n }\n },\n vertical: {\n type: Boolean,\n default: false\n },\n name: {\n type: String\n },\n onFocus: {\n type: Function\n },\n onBlur: {\n type: Function\n },\n swipeType: {\n type: String,\n default: \"translate\"\n },\n smoothTranslate: {\n type: Boolean,\n default: false\n },\n reverseSwipe: {\n type: Boolean,\n default: false\n },\n disableLoopWhenFocus: {\n type: Boolean,\n default: false\n }\n },\n computed: {\n indexList() {\n return new Array(this.totalFrame).fill(0).map((_, index) => {\n return index;\n });\n },\n indicatorLayout() {\n let indicatorSize = this.totalFrame * (this.dotSize + this.dotGap) - this.dotGap;\n if (this.vertical) {\n let top;\n if (this.indicatorAlign === \"start\") {\n top = this.dotGap;\n } else if (this.indicatorAlign === \"end\") {\n top = this.layoutInfo.height - indicatorSize - this.dotGap;\n } else {\n top = (this.layoutInfo.height - indicatorSize) / 2;\n }\n return {\n left: this.indicatorPos < 0 ? this.layoutInfo.width * 0.8 : this.indicatorPos,\n top,\n zIndex: 1\n };\n } else {\n let left;\n if (this.indicatorAlign === \"start\") {\n left = this.dotGap;\n } else if (this.indicatorAlign === \"end\") {\n left = this.layoutInfo.width - indicatorSize - this.dotGap;\n } else {\n left = (this.layoutInfo.width - indicatorSize) / 2;\n }\n return {\n left,\n top: this.indicatorPos < 0 ? this.layoutInfo.height * 0.8 : this.indicatorPos,\n zIndex: 1\n };\n }\n },\n indicatorDotSize() {\n return this.dotSize + this.dotGap;\n },\n currentDataIndex() {\n return modToRange(this.firstFrame + this.offset, this.totalFrame);\n },\n currentViewIndex() {\n return modToRange(this.offset + 1, VIEW_NUM);\n },\n viewInfoList() {\n let styleList = [\n {\n top: 0,\n left: 0,\n width: this.layoutInfo.width,\n height: this.layoutInfo.height\n },\n {\n top: 0,\n left: 0,\n width: this.layoutInfo.width,\n height: this.layoutInfo.height\n },\n {\n top: 0,\n left: 0,\n width: this.layoutInfo.width,\n height: this.layoutInfo.height\n }\n ];\n switch (this.swipeType) {\n case \"translate\":\n styleList[0].top = this.vertical ? -this.layoutInfo.height : 0;\n styleList[0].left = this.vertical ? 0 : -this.layoutInfo.width;\n styleList[2].top = this.vertical ? this.layoutInfo.height : 0;\n styleList[2].left = this.vertical ? 0 : this.layoutInfo.width;\n break;\n case \"opacity\":\n styleList[0].opaticy = 0;\n styleList[1].opaticy = 1;\n styleList[2].opaticy = 0;\n break;\n default:\n break;\n }\n let viewList = [];\n for (let i = 0; i < VIEW_NUM; i++) {\n viewList.push({\n dataIndex: modToRange(\n this.currentDataIndex + modToRange(i - this.currentViewIndex, VIEW_NUM, -1),\n this.totalFrame\n ),\n style: styleList[modToRange(i - this.offset, VIEW_NUM)]\n });\n }\n return viewList;\n }\n },\n setup(props) {\n let controllerList = new Array(VIEW_NUM);\n if (props.smoothTranslate) {\n for (let i = 0; i < controllerList.length; i++) {\n controllerList[i] = new JsvActorMoveControl();\n }\n }\n let preOffset = -1;\n let offset = ref(0);\n let focused = ref(false);\n let timeoutHandler = -1;\n return {\n preOffset,\n offset,\n focused,\n timeoutHandler,\n controllerList,\n autoplay: false\n };\n },\n watch: {\n offset(newValue) {\n this.onChange?.(modToRange(this.firstFrame + newValue, this.totalFrame));\n }\n },\n methods: {\n stopAutoplay() {\n this.autoplay = false;\n clearInterval(this.timeoutHandler);\n this.timeoutHandler = -1;\n },\n startAutoplay() {\n if (this.autoplayInterval > 0 && this.totalFrame > 1) {\n this.autoplay = true;\n if (this.timeoutHandler > 0) {\n clearInterval(this.timeoutHandler);\n }\n this.timeoutHandler = setInterval(() => {\n this._trigger(this.reverseSwipe ? -1 : 1);\n }, this.autoplayInterval);\n }\n },\n slideTo(id, direction = 0) {\n const curId = modToRange(this.firstFrame + this.offset, this.totalFrame);\n if (curId != id) {\n let d;\n if (direction != 0) {\n d = direction;\n } else {\n d = id - curId;\n }\n this._trigger(modToRange(id - curId, this.totalFrame, d > 0 ? 0 : -this.totalFrame + 1));\n }\n },\n _onKeyDown(ev) {\n let direction = 0;\n switch (ev.keyCode) {\n case 37:\n if (!this.vertical) {\n direction = -1;\n }\n break;\n case 38:\n if (this.vertical) {\n direction = -1;\n }\n break;\n case 39:\n if (!this.vertical) {\n direction = 1;\n }\n break;\n case 40:\n if (this.vertical) {\n direction = 1;\n }\n break;\n case 13:\n this.onClick?.(this.currentDataIndex);\n return true;\n default:\n return false;\n }\n if (direction !== 0) {\n if (!this.disableLoopWhenFocus) {\n this._trigger(direction);\n return true;\n } else {\n if (this.currentDataIndex + direction >= 0 && this.currentDataIndex + direction < this.totalFrame) {\n this._trigger(direction);\n return true;\n }\n }\n }\n this.onEdge?.({\n direction: keyCode2EdgeDirection(ev.keyCode),\n rect: {\n x: this.layoutInfo.left,\n y: this.layoutInfo.top,\n width: this.layoutInfo.width,\n height: this.layoutInfo.height\n }\n });\n return true;\n },\n _onAnimationEnd() {\n },\n _onFocus() {\n this.focused = true;\n this.stopAutoplay();\n this.onFocus?.();\n },\n _onBlur() {\n this.focused = false;\n this.startAutoplay();\n this.onBlur?.();\n },\n _startAnimation(direction, smooth = false) {\n let duration = this.animation.duration;\n let curViewAnimation;\n let preViewAnimation;\n switch (this.swipeType) {\n case \"translate\":\n if (smooth) {\n const speed = (this.vertical ? this.layoutInfo.height : this.layoutInfo.width) / this.animation.duration * 1e3;\n curViewAnimation = new Forge$1.TranslateFrameAnimation(\n this.vertical ? direction * this.layoutInfo.height : direction * this.layoutInfo.width,\n 0,\n speed,\n !this.vertical,\n this.vertical ? 0 : direction * this.layoutInfo.width,\n this.vertical ? direction * this.layoutInfo.height : 0\n );\n preViewAnimation = new Forge$1.TranslateFrameAnimation(\n this.vertical ? direction * this.layoutInfo.height : direction * this.layoutInfo.width,\n 0,\n speed,\n !this.vertical,\n this.vertical ? 0 : direction * this.layoutInfo.width,\n this.vertical ? direction * this.layoutInfo.height : 0\n );\n } else {\n curViewAnimation = new Forge$1.TranslateAnimation(\n this.vertical ? 0 : direction * this.layoutInfo.width,\n 0,\n this.vertical ? direction * this.layoutInfo.height : 0,\n 0,\n duration,\n null\n );\n preViewAnimation = new Forge$1.TranslateAnimation(\n this.vertical ? 0 : direction * this.layoutInfo.width,\n 0,\n this.vertical ? direction * this.layoutInfo.height : 0,\n 0,\n duration,\n null\n );\n }\n break;\n case \"opacity\":\n break;\n default:\n break;\n }\n curViewAnimation.SetAnimationListener(\n new Forge$1.AnimationListener(null, this._onAnimationEnd, null)\n );\n this.$refs.element?.[this.currentViewIndex]?.jsvGetProxyView(true).StartAnimation(curViewAnimation);\n this.$refs.element?.[modToRange(this.currentViewIndex - direction, VIEW_NUM)]?.jsvGetProxyView(true).StartAnimation(preViewAnimation);\n },\n _trigger(direction) {\n if (this.totalFrame <= 1)\n return;\n this.preOffset = this.offset;\n this.offset += direction;\n this._startAnimation(direction > 0 ? 1 : -1, this.smoothTranslate);\n },\n onBeVisible(old_h, new_h, old_v, new_v) {\n if (old_h && !new_h || old_v && !new_h) {\n this.stopAutoplay();\n } else if (!old_h && new_h || !old_v && new_h) {\n if (!this.focused) {\n this.startAutoplay();\n }\n }\n }\n },\n mounted() {\n if (!this.focused) {\n this.startAutoplay();\n }\n },\n beforeUnmount() {\n this.stopAutoplay();\n }\n};\nfunction _sfc_render$6(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_jsv_visible_sensor = resolveComponent(\"jsv-visible-sensor\");\n const _component_jsv_focus_block = resolveComponent(\"jsv-focus-block\");\n return openBlock(), createElementBlock(Fragment, null, [\n createVNode(_component_jsv_visible_sensor, {\n horizonShown: 0.2,\n verticalShown: 0.2,\n width: $props.layoutInfo.width,\n height: $props.layoutInfo.height,\n enable: true,\n callback: $options.onBeVisible\n }, null, 8, [\"horizonShown\", \"verticalShown\", \"width\", \"height\", \"callback\"]),\n createVNode(_component_jsv_focus_block, {\n name: $props.name,\n style: normalizeStyle({\n left: $props.layoutInfo.left,\n top: $props.layoutInfo.top,\n width: $props.layoutInfo.width,\n height: $props.layoutInfo.height\n }),\n onAction: {\n onFocus: $options._onFocus,\n onBlur: $options._onBlur,\n onKeyDown: $options._onKeyDown\n }\n }, {\n default: withCtx(() => [\n $props.totalFrame == 1 ? (openBlock(), createElementBlock(\"div\", { key: 0 }, [\n renderSlot(_ctx.$slots, \"itemView\", {\n currentIndex: 0,\n dataIndex: 0,\n focused: $setup.focused\n })\n ])) : (openBlock(), createElementBlock(\"div\", {\n key: 1,\n style: normalizeStyle({\n width: $props.layoutInfo.width,\n height: $props.layoutInfo.height,\n overflow: \"hidden\"\n })\n }, [\n createElementVNode(\"div\", { style: {\n zIndex: 0\n } }, [\n createElementVNode(\"div\", null, [\n (openBlock(true), createElementBlock(Fragment, null, renderList($options.viewInfoList, (item, index) => {\n return openBlock(), createElementBlock(\"div\", {\n key: index,\n style: normalizeStyle(item.style),\n ref_for: true,\n ref: \"element\"\n }, [\n (openBlock(), createElementBlock(\"div\", {\n key: item.dataIndex\n }, [\n renderSlot(_ctx.$slots, \"itemView\", {\n currentIndex: $options.currentDataIndex,\n dataIndex: item.dataIndex,\n focused: $setup.focused\n })\n ]))\n ], 4);\n }), 128))\n ])\n ]),\n $props.showIndicator ? (openBlock(), createElementBlock(\"div\", {\n key: 0,\n style: normalizeStyle($options.indicatorLayout)\n }, [\n (openBlock(true), createElementBlock(Fragment, null, renderList($options.indexList, (index) => {\n return openBlock(), createElementBlock(\"div\", {\n key: index,\n style: normalizeStyle(\n $props.vertical ? { top: $options.indicatorDotSize * index } : { left: $options.indicatorDotSize * index }\n )\n }, [\n renderSlot(_ctx.$slots, \"indicatorDot\", {\n dataIndex: index,\n currentIndex: $options.currentDataIndex,\n focused: $setup.focused\n }, () => [\n createElementVNode(\"div\", {\n style: normalizeStyle({\n width: $props.dotSize,\n height: $props.dotSize,\n backgroundColor: index == $options.currentDataIndex ? \"rgba(50, 50, 50, 1.0)\" : \"rgba(100, 100, 100, 0.7)\",\n borderRadius: Math.round($props.dotSize / 2) + \"px\"\n })\n }, null, 4)\n ])\n ], 4);\n }), 128))\n ], 4)) : createCommentVNode(\"\", true)\n ], 4))\n ]),\n _: 3\n }, 8, [\"name\", \"style\", \"onAction\"])\n ], 64);\n}\nconst JsvSwiper = /* @__PURE__ */ _export_sfc(_sfc_main$o, [[\"render\", _sfc_render$6]]);\n\n//!\n//! utils/JsViewVueWidget/JsvSwiper/index.js;\n//!\n\n//!\n//! utils/JsViewVueWidget/JsvSwiper3D/JsvSwiper.vue;\n//!\n/*! <!--\n * 【模块 export 内容】\n * JsvSwiper3D:Vue高阶组件,图片轮播3D组件\n * props说明:\n * dispNumber {int} (必需) 需要展示的item 的个数\n * initIndex {int} 初始 item 的 index,默认为展示个数的中间项\n * layoutInfo {Object} (必需)组件的大小 {width: 0, height: 0,left:0,top:0}\n * onClick {Function} 点击事件 function () {}\n * onChange {Function} 滚动事件 function (index) {}\n * duration {number} 动画时长 单位:秒\n * name {String} 组件获得焦点的 name\n * onFocus {Function} 获得焦点的回调 \n * onBlur {Function} 失去焦点的回调\n * ItemArray {Array} (必需) 总数组{要有image属性}\n * sideScale {float} 边缘缩小倍数\n * initItemStyle {Object} (必需)中间最大项的style{width,height}\n-->\n\n\n\n\n\n\n */\nconst _sfc_main$n = {\n __name: \"JsvSwiper\",\n props: {\n dispNumber: { type: Number, require: true },\n initIndex: { type: Number },\n layoutInfo: { type: Object, require: true },\n duration: { type: Number, require: true },\n sideScale: { type: Number, require: true },\n name: { type: String, require: true },\n ItemArray: { type: Array, require: true },\n initItemStyle: { type: Object, require: true },\n onFocus: { type: Function },\n onBlur: { type: Function },\n onClick: { type: Function },\n onChange: { type: Function }\n },\n setup(__props) {\n const props = __props;\n let showNumber = props.dispNumber < 3 ? 3 : props.dispNumber;\n if (showNumber % 2 == 0) {\n showNumber = showNumber + 1;\n }\n let items = shallowReactive(new Array(showNumber + 2));\n let currentId;\n let preFocusedIdx;\n if (props.initIndex == void 0) {\n currentId = Math.floor(showNumber / 2);\n } else {\n currentId = props.initIndex;\n }\n let allItems = [];\n let length = props.ItemArray.length;\n if (length < props.dispNumber) {\n throw new Error(\"数量不足\");\n } else {\n for (let i = 0; i < props.ItemArray.length; i++) {\n allItems.push({\n propsItem: props.ItemArray[i],\n dataIndex: i,\n defineSize: {\n top: null,\n width: null,\n height: null\n }\n });\n }\n }\n let space = shallowRef(0);\n let direction = \"left\";\n let focusedIdx = currentId;\n let prevNumber = Math.floor(showNumber / 2) + 1;\n const move1 = () => {\n for (let i = 0; i < showNumber + 2; i++) {\n let itemIdx = focusedIdx - prevNumber + i;\n if (itemIdx < 0) {\n itemIdx += props.ItemArray.length;\n } else if (itemIdx >= props.ItemArray.length) {\n itemIdx -= props.ItemArray.length;\n }\n items[i] = allItems[itemIdx];\n }\n };\n move1();\n let posAni = shallowRef(\"\");\n let scaleAni = shallowRef(\"\");\n let currentAni = shallowRef(\"\");\n let pos0Ani = shallowRef(\"\");\n let leftArray = reactive([]);\n let midIndex = Math.floor(items.length / 2);\n for (let i = 0; i < items.length; i++) {\n leftArray.push({\n index: null,\n width: null,\n left: null\n });\n }\n for (let index = 0; index < items.length; index++) {\n let currentIndex = Math.abs(index - Math.floor(items.length / 2));\n let scale = 1 - currentIndex * props.sideScale;\n const width = props.initItemStyle.width * scale;\n if (index == items.length - 2) {\n let startPosX = props.layoutInfo.width / 2;\n let endPosX = props.layoutInfo.width - width / 2;\n space.value = (endPosX - startPosX) / ((showNumber - 1) / 2);\n }\n leftArray[index] = { index, width };\n }\n for (let index = 0; index < items.length; index++) {\n let startPosX = props.layoutInfo.width / 2;\n if (index == Math.floor(items.length / 2)) {\n leftArray[index].left = startPosX - leftArray[index].width / 2;\n }\n }\n for (let i = midIndex - 1; i >= 0; i--) {\n let startPosX = leftArray[i + 1].left + leftArray[i + 1].width / 2;\n leftArray[i].left = startPosX - space.value - leftArray[i].width / 2;\n }\n let aniDistance = leftArray[midIndex].left - leftArray[midIndex - 1].left;\n for (let i = midIndex + 1; i < items.length; i++) {\n let startPosX = leftArray[i - 1].left + leftArray[i - 1].width / 2;\n leftArray[i].left = startPosX + space.value - leftArray[i].width / 2;\n }\n const getItemStyle = (index) => {\n let currentIndex;\n let scale;\n let zIndex;\n let top;\n let width;\n let height;\n let left;\n currentIndex = Math.abs(index - Math.floor(items.length / 2));\n scale = 1 - currentIndex * props.sideScale;\n zIndex = items.length - currentIndex;\n top = (props.initItemStyle.height - props.initItemStyle.height * scale) / 2;\n width = leftArray[index].width;\n height = props.initItemStyle.height * scale;\n if (index == items.length - 2) {\n let startPosX = props.layoutInfo.width / 2;\n let endPosX = props.layoutInfo.width - width / 2;\n space.value = (endPosX - startPosX) / ((showNumber - 1) / 2);\n }\n left = leftArray[index].left;\n items[index].defineSize.top = top;\n items[index].defineSize.width = width;\n items[index].defineSize.height = height;\n return {\n zIndex,\n left,\n top,\n width,\n height,\n animation: posAni.value\n };\n };\n const scaleItemStyle = (index) => {\n const currentIndex = Math.abs(index - Math.floor(items.length / 2));\n const scale = 1 - currentIndex * props.sideScale;\n const width = props.initItemStyle.width * scale;\n const height = props.initItemStyle.height * scale;\n if (direction == \"left\") {\n return {\n width,\n height,\n animation: index > (items.length - 1) / 2 ? scaleAni.value : currentAni.value\n };\n } else {\n return {\n width,\n height,\n animation: index < (items.length - 1) / 2 ? scaleAni.value : currentAni.value\n };\n }\n };\n const onKeyDown = (ev) => {\n switch (ev.keyCode) {\n case 37:\n direction = \"left\";\n if (posAni.value == \"\") {\n posAni.value = `slideToLeftA ${props.duration}s`;\n } else if (posAni.value == `slideToLeftA ${props.duration}s`) {\n posAni.value = `slideToLeftB ${props.duration}s`;\n } else {\n posAni.value = `slideToLeftA ${props.duration}s`;\n }\n if (pos0Ani.value == \"\") {\n pos0Ani.value = `slideToLeft0A ${props.duration}s`;\n } else if (pos0Ani.value == `slideToLeft0A ${props.duration}s`) {\n pos0Ani.value = `slideToLeft0B ${props.duration}s`;\n } else {\n pos0Ani.value = `slideToLeft0A ${props.duration}s`;\n }\n preFocusedIdx = focusedIdx;\n focusedIdx--;\n if (focusedIdx < 0) {\n focusedIdx = props.ItemArray.length - 1;\n } else if (focusedIdx >= props.ItemArray.length) {\n focusedIdx = 0;\n }\n move1();\n scaleAniManager();\n props.onChange?.(preFocusedIdx, focusedIdx);\n break;\n case 39:\n direction = \"right\";\n if (posAni.value == \"\") {\n posAni.value = `slideToRightA ${props.duration}s`;\n } else if (posAni.value == `slideToRightA ${props.duration}s`) {\n posAni.value = `slideToRightB ${props.duration}s`;\n } else {\n posAni.value = `slideToRightA ${props.duration}s`;\n }\n if (pos0Ani.value == \"\") {\n pos0Ani.value = `slideToRight0A ${props.duration}s`;\n } else if (pos0Ani.value == `slideToRight0A ${props.duration}s`) {\n pos0Ani.value = `slideToRight0B ${props.duration}s`;\n } else {\n pos0Ani.value = `slideToRight0A ${props.duration}s`;\n }\n preFocusedIdx = focusedIdx;\n focusedIdx++;\n if (focusedIdx < 0) {\n focusedIdx = props.ItemArray.length - 1;\n } else if (focusedIdx >= props.ItemArray.length) {\n focusedIdx = 0;\n }\n move1();\n scaleAniManager();\n props.onChange?.(preFocusedIdx, focusedIdx);\n break;\n case 13:\n props.onClick?.(focusedIdx);\n default:\n break;\n }\n };\n let styleShell = getKeyFramesGroup();\n let slideToLeftA = `@keyframes slideToLeftA {\n from {\n transform: translate3d(${-aniDistance}, 0, 0);\n }\n to {\n transform: translate3d(0, 0, 0);\n }\n }`;\n styleShell.insertRule(slideToLeftA);\n let slideToLeftB = `@keyframes slideToLeftB {\n from {\n transform: translate3d(${-aniDistance}, 0, 0);\n }\n to {\n transform: translate3d(0, 0, 0);\n }\n }`;\n styleShell.insertRule(slideToLeftB);\n let slideToRightA = `@keyframes slideToRightA {\n from {\n transform: translate3d(${aniDistance}, 0, 0);\n }\n to {\n transform: translate3d(0, 0, 0);\n }\n }`;\n styleShell.insertRule(slideToRightA);\n let slideToRightB = `@keyframes slideToRightB {\n from {\n transform: translate3d(${aniDistance}, 0, 0);\n }\n to {\n transform: translate3d(0, 0, 0);\n }\n }`;\n styleShell.insertRule(slideToRightB);\n let lowerA = `@keyframes lowerA {\n from {\n transform: scale3d(${1 + props.sideScale},${1 + props.sideScale}, 1);\n }\n to {\n transform: scale3d(1, 1, 1);\n }\n }`;\n styleShell.insertRule(lowerA);\n let lowerB = `@keyframes lowerB {\n from {\n transform: scale3d(${1 + props.sideScale},${1 + props.sideScale}, 1);\n }\n to {\n transform: scale3d(1, 1, 1);\n }\n }`;\n styleShell.insertRule(lowerB);\n let biggerA = `@keyframes biggerA {\n from {\n transform: scale3d(${1 / (1 + props.sideScale)},${1 / (1 + props.sideScale)} , 1);\n }\n to {\n transform: scale3d(1, 1, 1);\n }\n }`;\n styleShell.insertRule(biggerA);\n let biggerB = `@keyframes biggerB {\n from {\n transform: scale3d(${1 / (1 + props.sideScale)},${1 / (1 + props.sideScale)} , 1);\n }\n to {\n transform: scale3d(1, 1, 1);\n }\n }`;\n styleShell.insertRule(biggerB);\n let slideToLeft0A = `@keyframes slideToLeft0A {\n from {\n transform: translate3d(${aniDistance}, 0, 0);\n }\n to {\n transform: translate3d(0, 0, 0);\n }\n }`;\n styleShell.insertRule(slideToLeft0A);\n let slideToLeft0B = `@keyframes slideToLeft0B {\n from {\n transform: translate3d(${aniDistance}, 0, 0);\n }\n to {\n transform: translate3d(0, 0, 0);\n }\n }`;\n styleShell.insertRule(slideToLeft0B);\n let slideToRight0A = `@keyframes slideToRight0A {\n from {\n transform: translate3d(${-aniDistance}, 0, 0);\n }\n to {\n transform: translate3d(0, 0, 0);\n }\n }`;\n styleShell.insertRule(slideToRight0A);\n let slideToRight0B = `@keyframes slideToRight0B {\n from {\n transform: translate3d(${-aniDistance}, 0, 0);\n }\n to {\n transform: translate3d(0, 0, 0);\n }\n }`;\n styleShell.insertRule(slideToRight0B);\n const scaleAniManager = () => {\n if (currentAni.value == \"\") {\n currentAni.value = `biggerA ${props.duration}s`;\n } else if (currentAni.value == `biggerA ${props.duration}s`) {\n currentAni.value = `biggerB ${props.duration}s`;\n } else if (currentAni.value == `biggerB ${props.duration}s`) {\n currentAni.value = `biggerA ${props.duration}s`;\n } else {\n currentAni.value == `biggerA ${props.duration}s`;\n }\n if (scaleAni.value == \"\") {\n scaleAni.value = `lowerA ${props.duration}s`;\n } else if (scaleAni.value == `lowerA ${props.duration}s`) {\n scaleAni.value = `lowerB ${props.duration}s`;\n } else if (scaleAni.value == `lowerB ${props.duration}s`) {\n scaleAni.value = `lowerA ${props.duration}s`;\n } else {\n scaleAni.value == `lowerA ${props.duration}s`;\n }\n };\n const onActionObj = {\n onKeyDown,\n onFocus: props.onFocus,\n onBlur: props.onBlur\n };\n onBeforeUnmount(() => {\n styleShell.removeRule(\"slideToLeftA\");\n styleShell.removeRule(\"slideToLeftB\");\n styleShell.removeRule(\"slideToRightA\");\n styleShell.removeRule(\"slideToRightB\");\n styleShell.removeRule(\"slideToLeft0A\");\n styleShell.removeRule(\"slideToLeft0B\");\n styleShell.removeRule(\"slideToRight0A\");\n styleShell.removeRule(\"slideToRight0B\");\n styleShell.removeRule(\"lowerA\");\n styleShell.removeRule(\"lowerB\");\n styleShell.removeRule(\"biggerA\");\n styleShell.removeRule(\"biggerB\");\n });\n return (_ctx, _cache) => {\n const _component_jsv_focus_block = resolveComponent(\"jsv-focus-block\");\n return openBlock(), createBlock(_component_jsv_focus_block, {\n onAction: onActionObj,\n name: props.name\n }, {\n default: withCtx(() => [\n createElementVNode(\"div\", {\n style: normalizeStyle({\n overflow: \"hidden\",\n width: props.layoutInfo.width,\n height: props.layoutInfo.height,\n left: props.layoutInfo.left,\n top: props.layoutInfo.top\n })\n }, [\n createElementVNode(\"div\", {\n style: normalizeStyle({\n width: unref(items).length * unref(space),\n height: props.layoutInfo.height,\n left: 0\n })\n }, [\n (openBlock(true), createElementBlock(Fragment, null, renderList(unref(items), (item, index) => {\n return openBlock(), createElementBlock(\"div\", {\n key: item + `${index}`,\n style: normalizeStyle(getItemStyle(index))\n }, [\n createElementVNode(\"div\", {\n style: normalizeStyle(scaleItemStyle(index))\n }, [\n renderSlot(_ctx.$slots, \"itemView\", {\n dataIndex: item.dataIndex,\n propsItem: item.propsItem,\n defineSize: item.defineSize\n })\n ], 4)\n ], 4);\n }), 128))\n ], 4)\n ], 4)\n ]),\n _: 3\n }, 8, [\"name\"]);\n };\n }\n};\n\n//!\n//! utils/JsViewVueWidget/JsvSwiper3D/index.js;\n//!\n\n//!\n//! utils/JsViewVueTools/TypeCheckAndSet.js;\n//!\nvar number_convert_tmp = new Float32Array(1);\nfunction numberCheckSet(number) {\n number_convert_tmp[0] = number;\n if (!isNaN(number_convert_tmp[0])) {\n return number_convert_tmp[0];\n } else {\n console.warn(`${number} is not type of number, default as 0`);\n return 0;\n }\n}\nfunction urlCheckSet(origin_url) {\n if (origin_url && origin_url.indexOf(\"http\") === 0) {\n return origin_url;\n } else if (window.JsView.Dom.UrlRef) {\n return new window.JsView.Dom.UrlRef(origin_url).href;\n } else {\n console.warn(`${origin_url} is not valid url format, default as null`);\n return null;\n }\n}\n\n//!\n//! utils/JsViewVueTools/NinePatchHelper.js;\n//!\nfunction toHtmlBorderSet() {\n}\n/*!\n * imageWidth { int } // (必填)原图信息: 原图的宽度(由于正方形,宽高相同)\n * centerWidth { int } // (必填)原图信息: .9图的中心区域宽度(repeat区域)\n * imageDspWidth { int } // (选填)原图缩放后的显示宽度,计算方法: \n * 四角为90度圆弧时: imageDspWidth = 显示图形的圆弧半径 / 原图中圆弧的半径 * 原图宽度\n * 原图中圆弧半径 = (原图宽度 - borderOutset * 2) / 2\n * 四角为其他形状时,原图.9图的四角区域,缩放到要和显示图形重合后的宽度。\n * borderOutset { int } // (必填)原图信息: 图片边缘到中心内容区域边缘的距离, 快速计算: (原图宽度 - 原图中放内容宽度) / 2\n */\nfunction toNinePatchForgeViewSet(imageWidth, centerWidth, imageDspWidth, borderOutset) {\n let image_scaledown_width = imageDspWidth > 0 ? imageDspWidth : imageWidth;\n let outset_of_content_scaledown = Math.ceil(borderOutset * image_scaledown_width / imageWidth);\n let center_repeat_width_scaledown = Math.max(1, Math.ceil(centerWidth * image_scaledown_width / imageWidth));\n let outset_of_repeat_scaledown = Math.floor((image_scaledown_width - center_repeat_width_scaledown) / 2);\n return {\n padding: {\n start: outset_of_content_scaledown,\n width: Math.max(0, image_scaledown_width - 2 * outset_of_content_scaledown)\n },\n repeat: [{\n start: outset_of_repeat_scaledown,\n width: center_repeat_width_scaledown\n }],\n imageDspSize: image_scaledown_width\n };\n}\n\n//!\n//! utils/JsViewVueWidget/JsvTextureAnim/CommonType.js;\n//!\nconst DECORATE_BORDER_RADIUS = \"BroderRaidus\";\nconst DECORATE_NINEPATCH_ALPHA_MIX = \"NinePatchAlphaMix\";\n\n//!\n//! utils/JsViewVueWidget/JsvTextureAnim/JsvTextureAnim.vue;\n//!\n/*! <!--\n * @Author: ChenChanghua\n * @Date: 2022-02-07 14:21:37\n * @LastEditors: Please set LastEditors\n * @LastEditTime: 2023-02-13 13:27:12\n * @Description: file content\n-->\n\n\n\n */\nconst TexAlignAnchor$1 = {\n LEFT_TOP: 1,\n CENTER_TOP: 2,\n RIGHT_TOP: 3,\n LEFT_MIDDLE: 4,\n CENTER: 5,\n RIGHT_MIDDLE: 6,\n LEFT_BOTTOM: 7,\n CENTER_BOTTOM: 8,\n RIGHT_BOTTOM: 9\n};\nconst _sfc_main$m = {\n props: {\n src: String,\n top: Number,\n left: Number,\n width: Number,\n height: Number,\n borderRadius: [String, Number],\n decorate: Object,\n animation: String,\n duration: Number,\n transform: String,\n transformOrigin: String,\n onAnimationEnd: Function,\n repeat: {\n type: Number,\n default: 0\n },\n delay: {\n type: Number,\n default: 0\n },\n easing: {\n type: String,\n default: \"linear\"\n },\n autoStart: {\n type: Boolean,\n default: false\n },\n texCoord: {\n type: Object\n }\n },\n watch: {\n texCoord: {\n handler(newValue, oldValue) {\n this._updateTexCoord();\n },\n deep: true\n }\n },\n setup() {\n return {\n forgeAnimation: null,\n innerViewId: -1\n };\n },\n methods: {\n _createForgeView(view_texture, decorate_setting) {\n if (decorate_setting) {\n return this._createLayoutViewWithDecorate(\n view_texture,\n decorate_setting\n );\n } else {\n let texture_set = new Forge$1.ExternalTextureSetting(view_texture);\n return new Forge$1.LayoutView(texture_set);\n }\n },\n _readRadius(setting) {\n if (typeof setting == \"number\") {\n return {\n type: DECORATE_BORDER_RADIUS,\n topLeft: setting,\n topRight: setting,\n bottomRight: setting,\n bottomLeft: setting\n };\n } else if (typeof setting == \"string\" && setting.length > 0) {\n const pattern = /\\d+/g;\n let match = setting.match(pattern);\n if (match?.length > 0) {\n let top_left = match[0];\n let top_right = match.length > 1 ? match[1] : top_left;\n return {\n type: DECORATE_BORDER_RADIUS,\n topLeft: top_left,\n topRight: top_right,\n bottomRight: match.length > 2 ? match[2] : top_left,\n bottomLeft: match.length > 3 ? match[3] : top_right\n };\n }\n }\n return null;\n },\n _createLayoutViewWithDecorate(view_texture, decorate_setting) {\n if (decorate_setting && typeof decorate_setting == \"object\") {\n switch (decorate_setting.type) {\n case DECORATE_NINEPATCH_ALPHA_MIX: {\n return this._createNinePatchAlphaMixView(\n view_texture,\n decorate_setting\n );\n }\n case DECORATE_BORDER_RADIUS: {\n return this._createBorderRadius(view_texture, decorate_setting);\n }\n default:\n console.error(\"Unknown set=\", decorate_setting);\n return null;\n }\n }\n },\n _createNinePatchAlphaMixView(view_texture, decorate_setting) {\n const textureManager = handles.TextureManager;\n let texture_set = new Forge$1.ExternalTextureSetting(view_texture);\n let nine_patch_view = new Forge$1.NinePatchView(texture_set);\n if (decorate_setting.url) {\n let converted_url = urlCheckSet(decorate_setting.url);\n let view_texture2 = textureManager.GetImage2(converted_url);\n nine_patch_view.EnableAlphaMix(view_texture2);\n } else {\n console.error(\"ninepatch url not set\");\n return null;\n }\n let view_set = toNinePatchForgeViewSet(\n numberCheckSet(decorate_setting.imageWidth),\n numberCheckSet(decorate_setting.centerWidth),\n decorate_setting.imageDspWidth,\n numberCheckSet(decorate_setting.borderOutset)\n );\n nine_patch_view.SetPadding(view_set.padding, view_set.padding);\n nine_patch_view.SetRepeat(view_set.repeat, view_set.repeat);\n nine_patch_view.SetImageDspSize(\n view_set.imageDspSize,\n view_set.imageDspSize\n );\n return nine_patch_view;\n },\n _createBorderRadius(view_texture, decorate_setting) {\n let texture_mask = new Forge$1.ViewRoundCornerMask(\n numberCheckSet(decorate_setting.topLeft),\n numberCheckSet(decorate_setting.topRight),\n numberCheckSet(decorate_setting.bottomLeft),\n numberCheckSet(decorate_setting.bottomRight)\n );\n let texture_set = new Forge$1.ExternalTextureSetting(\n view_texture,\n texture_mask\n );\n return new Forge$1.LayoutView(texture_set);\n },\n _onAnimationEnd() {\n this.onAnimationEnd?.();\n },\n _updateTexCoord() {\n if (this.texCoord) {\n if (this.texCoord.width > 0 && this.texCoord.height > 0) {\n const offsetLeft = !isNaN(this.texCoord.left) ? this.texCoord.left : -this.texCoord.width / 2;\n const offsetTop = !isNaN(this.texCoord.top) ? this.texCoord.top : -this.texCoord.height / 2;\n const anchor = Number.isInteger(this.texCoord.alignAnchor) ? this.texCoord.alignAnchor : 5;\n this.innerView.SetTextureCoord(\n offsetLeft,\n offsetTop,\n this.texCoord.width,\n this.texCoord.height,\n anchor\n );\n } else {\n console.error(\"JsvTextureAnim\");\n }\n }\n },\n start() {\n if (this.forgeAnimation && this.innerView) {\n this.innerView.StartTextureAnimation(this.forgeAnimation);\n }\n },\n getTransition() {\n let transition = \"\";\n let decorate = this.decorate;\n if (decorate && decorate.type == DECORATE_NINEPATCH_ALPHA_MIX && decorate.animTime > 0) {\n let anim_time = decorate.animTime;\n transition = `left ${anim_time}s, top ${anim_time}s, width ${anim_time}s, height ${anim_time}s`;\n }\n return transition;\n }\n },\n created() {\n if (window.JsView) {\n const textureManager = handles.TextureManager;\n let image_url = urlCheckSet(this.src);\n let view_texture = textureManager.GetImage2(\n image_url,\n false,\n null,\n \"RGB_8888\",\n null\n );\n let decorate = this.$props.decorate;\n if (this.$props.borderRadius) {\n decorate = this._readRadius(this.$props.borderRadius);\n }\n this.innerView = this._createForgeView(view_texture, decorate);\n if (this.transform) {\n this.innerView.ResetTextureCssTransform(\n this.transform,\n this.transformOrigin\n );\n }\n this._updateTexCoord();\n if (this.animation) {\n this.forgeAnimation = new Forge$1.CssKeyframeAnimation(\n \"@keyframes texAnimDef\" + this.animation,\n this.duration,\n null,\n 1,\n 1\n );\n this.forgeAnimation.EnableDelay(this.delay).SetRepeat(this.repeat);\n this.forgeAnimation.SetAnimationListener(\n new Forge$1.AnimationListener(null, this._onAnimationEnd, null)\n );\n } else {\n this.forgeAnimation = null;\n }\n this.innerViewId = Forge$1.sViewStore.add(\n new Forge$1.ViewInfo(this.innerView)\n );\n }\n },\n beforeUnmount() {\n if (this.innerViewId !== -1) {\n Forge$1.sViewStore.remove(this.innerViewId);\n this.innerViewId = -1;\n }\n },\n mounted() {\n if (this.autoStart) {\n this.start();\n }\n },\n activated() {\n if (this.innerView) {\n if (this.animation && this.forgeAnimation == null) {\n this.forgeAnimation = new Forge$1.CssKeyframeAnimation(\n \"@keyframes texAnimDef\" + this.animation,\n this.duration,\n null,\n 1,\n 1\n );\n this.forgeAnimation.EnableDelay(this.delay).SetRepeat(this.repeat);\n this.forgeAnimation.SetAnimationListener(\n new Forge$1.AnimationListener(null, this._onAnimationEnd, null)\n );\n this.innerView.StartTextureAnimation(this.forgeAnimation);\n } else {\n this.forgeAnimation = null;\n }\n }\n },\n deactivated() {\n if (this.innerView) {\n this.innerView.StopTextureAnimation();\n }\n this.forgeAnimation = null;\n }\n};\nfunction _sfc_render$5(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"div\", {\n style: normalizeStyle({\n top: $props.top,\n left: $props.left,\n width: $props.width,\n height: $props.height,\n transition: $options.getTransition()\n }),\n \"data-jsv-vw-innerview\": $setup.innerViewId\n }, null, 12, [\"data-jsv-vw-innerview\"]);\n}\nconst JsvTextureAnim = /* @__PURE__ */ _export_sfc(_sfc_main$m, [[\"render\", _sfc_render$5]]);\n\n//!\n//! utils/JsViewVueWidget/JsvTextureAnim/index.js;\n//!\nlet _JsvTextureAnim;\nif (window.JsView) {\n _JsvTextureAnim = JsvTextureAnim;\n} else {\n const BrowserTextureAnim = await import('./browser/BrowserTextureAnim.vue.mjs');\n _JsvTextureAnim = BrowserTextureAnim.default;\n}\nconst _JsvTextureAnim$1 = _JsvTextureAnim;\nconst TexAlignAnchor = TexAlignAnchor$1;\n\n//!\n//! utils/JsViewVueWidget/JsvFilterView.vue;\n//!\n/*! <!--\n * 【模块 export 内容】\n * JsvFilterView:黑白滤镜组件\n * props说明:\n * width {int} 宽\n * height {int} 高\n * left {int} left位置\n * top {int} top位置\n * filterType {String} 滤镜设置:\n * null: 无滤镜\n * \"gray-down\": 黑白滤镜(公祭日滤镜)\n-->\n\n\n */\nconst _sfc_main$l = {\n __name: \"JsvFilterView\",\n props: {\n width: {\n type: Number\n },\n height: {\n type: Number\n },\n left: {\n type: Number,\n default: 0\n },\n top: {\n type: Number,\n default: 0\n },\n filterType: {\n type: String,\n default: null\n }\n },\n setup(__props) {\n const props = __props;\n let filterView = new Forge$1.FilterView();\n let viewId = Forge$1.sViewStore.add(new Forge$1.ViewInfo(filterView, null));\n watchEffect(() => {\n if (filterView) {\n console.log(`filterType change to ${props.filterType}`);\n switch (props.filterType) {\n case \"gray-down\":\n filterView.FilterSwitch(true);\n break;\n default:\n filterView.FilterSwitch(false);\n }\n }\n });\n onBeforeUnmount(() => {\n if (viewId > 0) {\n Forge$1.sViewStore.remove(viewId);\n viewId = -1;\n }\n });\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", {\n style: normalizeStyle({\n left: __props.left,\n top: __props.top,\n width: __props.width,\n height: __props.height\n }),\n \"data-jsv-vw-innerview\": unref(viewId)\n }, [\n renderSlot(_ctx.$slots, \"default\")\n ], 12, [\"data-jsv-vw-innerview\"]);\n };\n }\n};\n\n//!\n//! utils/JsViewVueWidget/JsvGrid.vue;\n//!\n/*! <!--\n * 【界面概述】\n * 表格式布局控件, 页面滚动时无动画. 一般用于对页面刷新速度有要求的场景\n *\n * 【控件介绍】\n * JsvGrid:\n * props:\n * left {int} 控件的left\n * top {int} 控件的top\n * name {String} (必选)控件的焦点Id\n * provideData {function} (必选)提供数据的接口, 数据中每个item均会包装成reactive对象,出于优化性能考虑, 请简化item中的属性\n * row {int} (必选)布局的行数\n * column {int} (必选)布局的列数\n * itemSize {Object} 格子的大小 {width: 0, height: 0}\n * updateType {UpdateType} 滚动的类型, 目前有两种PageType(整页), LineType(逐行)\n * initFocusId {int} 初始的焦点\n * gapInfo {Object} 格子间隔设置 {row: 行间距, colum: 列间距}\n * verticalUpdate {boolean} 是否纵向滚动\n * columnFirst {boolean} 单页是否列优先排布 \n * loopUpdate {boolean} 焦点移动到边界时循环滚动\n * onEdge {function} 焦点移动到边缘时的回调\n * @params {object} edgeInfo {\n \"direction\": {EdgeDirection}边缘方向, \n \"rect\": 到达边缘时的区域{x: 0, y: 0, width: 0,height: 0}\n }\n * focusMoveType {int} 焦点移动的模式, 可通过 | 运算进行组合\n NO_ADJUST: 无特殊处理\n COLUMN_LOOP: 到达列首/尾后跳转到上/下一列, 只在水平滚动时生效\n ROW_LOOP: 到达行首/尾后跳转到上/下一行, 只在竖直滚动时生效\n COLUMN_FIND_NEAR: 一列中没有下一个元素时是否跳转到相邻列\n ROW_FIND_NEAR: 一行中没有下一个元素时是否跳转到相邻行\n * methods:\n getFocusBlockRef\n @description 获取focusBlock的引用\n @return {boolean} focusBlock的引用\n setFocusId\n @description 设置焦点id\n @params {int} id 焦点id\n refreshData\n @description 刷新数据\n * 【技巧说明】\n * Q: 插槽props如何使用?\n * A: userData: 通过provideData返回的数据会包装成reactive对象后给插槽内的item\n * widgetData: 控件内部的关于item的属性 \n {\n dataIndex: {int} 当前格子数据的index,\n gridIndex: {int} 当前格子的index,\n selected: {boolean} 格子是否选中\n getCurrentFocusId: {function} 获取widget的当前焦点的dataIndex\n gridCoord: {{row: 0, column: 0}} 获取当前格子的行列坐标\n }\n * onAction: 单元格内控件需要通过onAction.register方法注册 item 的回调,回调函数有\n onFocus, onBlur, onClick\n * \n * Q: 单元格的普通状态,焦点状态,失焦状态如何渲染?\n * A: 在单元的空间中通过往onAction注册的onFocus,onBlur控制显示\n *\n * Q: 控件中的导航处理(上下左右,OK键)需要什么响应的开发?\n * A: 上下左右键已经由控件接管,不需要开发者而外处理,上下左右键会触发翻页时间\n * \n * Q: 焦点怎么移出控件?\n * A: 当焦点移动到控件边缘时,会调用onEdge回调。在回调中通过参数传递的值来决定焦点转移的行为\n * \n * Q: item内是可获焦的元素时该如何处理?\n * A: 焦点处理: item内的元素需要在注册的onFocus中管理焦点. 子组件通过onKeyDown处理按键, 未处理的方向键会冒泡给JsvGrid, 从而触发格子间焦点的变换\n-->\n\n\n\n */\nconst TAG$2 = \"JsvGrid\";\nconst WHOLE_PAGE = 0;\nconst FIX_LINE = 1;\nclass UpdateType {\n constructor(type) {\n this.type = type;\n }\n}\nclass PageType extends UpdateType {\n constructor() {\n super(WHOLE_PAGE);\n }\n}\nclass LineType extends UpdateType {\n constructor(start, end) {\n super(FIX_LINE);\n this.start = start;\n this.end = end;\n }\n}\nconst _sfc_main$k = {\n props: {\n left: {\n type: Number\n },\n top: {\n type: Number\n },\n name: {\n type: String\n },\n provideData: {\n type: Function,\n require: true\n },\n row: {\n type: Number,\n require: true\n },\n column: {\n type: Number,\n require: true\n },\n itemSize: {\n type: Object,\n require: true\n },\n updateType: {\n type: UpdateType,\n default() {\n return new PageType();\n }\n },\n initFocusId: {\n type: Number,\n default: 0\n },\n gapInfo: {\n type: Object,\n default() {\n return {\n row: 0,\n column: 0\n };\n }\n },\n verticalUpdate: {\n type: Boolean\n },\n columnFirst: {\n type: Boolean\n },\n onEdge: {\n type: Function\n },\n loopUpdate: {\n type: Boolean,\n default: false\n },\n focusMoveType: {\n type: Number,\n default: FocusMoveType.NO_ADJUST\n }\n },\n setup(props) {\n return {\n originDataList: [],\n divInfoList: [],\n startIndex: -1,\n dataList: [],\n dataInfo: {\n endIndex: -1\n },\n focusDataIndex: 0,\n preFocusDataIndex: -1,\n focused: false\n };\n },\n created() {\n this._formatData();\n this._initDivInfoList();\n if (this.initFocusId >= 0 && this.initFocusId < this.originDataList.length) {\n this.focusDataIndex = this._indexConvert(this.initFocusId);\n }\n this._updateData(this._getStartIndex(this.focusDataIndex, 1));\n if (this.divInfoList[this._getDivIndex(this.focusDataIndex)]) {\n this.divInfoList[this._getDivIndex(this.focusDataIndex)].widgetData.selected = true;\n }\n },\n methods: {\n _getCurrentFocusId() {\n return this.dataList[this.focusDataIndex].originIndex;\n },\n _getDivIndex(dataIndex) {\n return dataIndex - this.startIndex;\n },\n _initDivInfoList() {\n this.divInfoList = new Array(this.row * this.column);\n const realWidth = this.itemSize.width + this.gapInfo.column;\n const realHeight = this.itemSize.height + this.gapInfo.row;\n if (this.verticalUpdate) {\n for (let i = 0; i < this.divInfoList.length; i++) {\n this.divInfoList[i] = {\n left: i % this.column * realWidth,\n top: Math.floor(i / this.column) * realHeight,\n onAction: {\n register(name, func) {\n this[name] = func;\n },\n unregister(name) {\n delete this[name];\n }\n },\n widgetData: reactive({\n visibility: false,\n dataIndex: -1,\n gridIndex: i,\n getCurrentFocusId: this._getCurrentFocusId,\n gridCoord: {\n column: i % this.column,\n row: Math.floor(i / this.column)\n },\n selected: false\n }),\n userData: reactive({})\n };\n }\n } else {\n for (let i = 0; i < this.divInfoList.length; i++) {\n this.divInfoList[i] = {\n left: Math.floor(i / this.row) * realWidth,\n top: i % this.row * realHeight,\n onAction: {\n register(name, func) {\n this[name] = func;\n },\n unregister(name) {\n delete this[name];\n }\n },\n widgetData: reactive({\n visibility: false,\n dataIndex: -1,\n gridIndex: i,\n getCurrentFocusId: this._getCurrentFocusId,\n gridCoord: {\n column: Math.floor(i / this.row),\n row: i % this.row\n },\n selected: false\n }),\n userData: reactive({})\n };\n }\n }\n },\n _cleanOldData() {\n for (let i = 0; i < this.divInfoList.length; i++) {\n this.divInfoList[i].widgetData.visibility = false;\n this.divInfoList[i].widgetData.dataIndex = false;\n for (let key in this.divInfoList[i].userData) {\n this.divInfoList[i].userData[key] = null;\n }\n }\n },\n _indexConvert(i) {\n const pageItemNumber = this.row * this.column;\n const pageStart = i - i % pageItemNumber;\n const pageIndex = i % pageItemNumber;\n if (this.verticalUpdate && this.columnFirst) {\n const r = pageIndex % this.row;\n const c = Math.floor(pageIndex / this.row);\n return c + r * this.column + pageStart;\n } else if (!this.verticalUpdate && !this.columnFirst) {\n const r = Math.floor(pageIndex / this.column);\n const c = pageIndex % this.column;\n return c * this.row + r + pageStart;\n } else {\n return i;\n }\n },\n _formatData() {\n this.originDataList = this.provideData();\n const totalPage = Math.ceil(\n this.originDataList.length / this.row / this.column\n );\n this.dataList = new Array(totalPage * this.row * this.column).fill(null);\n let endIndex = -1;\n for (let i = 0; i < this.originDataList.length; i++) {\n const newIndex = this._indexConvert(i);\n this.dataList[newIndex] = {\n data: this.originDataList[i],\n originIndex: i\n };\n if (newIndex > endIndex) {\n endIndex = newIndex;\n }\n }\n this.dataInfo.endIndex = endIndex;\n },\n _updateData(startIndex) {\n if (this.startIndex === startIndex)\n return;\n if (startIndex + this.row * this.column >= this.dataList.length) {\n this.startIndex = this.dataList.length - this.row * this.column;\n } else {\n this.startIndex = startIndex;\n }\n for (let i = 0; i < this.divInfoList.length; i++) {\n const item = this.divInfoList[i];\n const data = this.dataList[i + this.startIndex];\n if (data == null) {\n item.widgetData.visibility = false;\n } else {\n item.widgetData.dataIndex = data.originIndex;\n for (let key in data.data) {\n item.userData[key] = data.data[key];\n }\n if (!item.widgetData.visibility) {\n item.widgetData.visibility = true;\n }\n }\n }\n },\n _getStartIndex(targetIndex, direction) {\n const type = this.updateType.type;\n let preStartIndex = this.startIndex < 0 ? 0 : this.startIndex;\n let startIndex = preStartIndex;\n if (type == WHOLE_PAGE) {\n startIndex = targetIndex - targetIndex % (this.row * this.column);\n } else if (type == FIX_LINE) {\n const lineNum = this.verticalUpdate ? this.column : this.row;\n const lastStartIndex = Math.max(\n 0,\n this.dataInfo.endIndex + lineNum - this.dataInfo.endIndex % lineNum - this.row * this.column\n );\n const targetLineStart = targetIndex - targetIndex % lineNum;\n if (targetLineStart >= preStartIndex + this.updateType.end * lineNum) {\n startIndex = targetLineStart - this.updateType.end * lineNum;\n }\n if (targetLineStart <= preStartIndex + this.updateType.start * lineNum) {\n startIndex = targetLineStart - this.updateType.start * lineNum;\n }\n startIndex = Math.min(Math.max(0, startIndex), lastStartIndex);\n }\n return startIndex;\n },\n _sendOnEdge(edgeDirection, divIndex) {\n let rect;\n if (divIndex >= 0) {\n let focusDiv = this.divInfoList[divIndex];\n rect = {\n x: focusDiv.left,\n y: focusDiv.top,\n width: this.itemSize.width,\n height: this.itemSize.height\n };\n } else {\n rect = {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n };\n }\n this.onEdge({ direction: edgeDirection, rect });\n },\n _moveTo(hOffset, vOffset) {\n let nextIndex = -1;\n let mainOffset, subOffset, lineNum, mainFindNear, subFindNear, lineLoop;\n if (this.verticalUpdate) {\n mainOffset = vOffset;\n subOffset = hOffset;\n lineNum = this.column;\n mainFindNear = this.focusMoveType & FocusMoveType.COLUMN_FIND_NEAR;\n subFindNear = this.focusMoveType & FocusMoveType.ROW_FIND_NEAR;\n lineLoop = this.focusMoveType & FocusMoveType.ROW_LOOP;\n } else {\n mainOffset = hOffset;\n subOffset = vOffset;\n lineNum = this.row;\n mainFindNear = this.focusMoveType & FocusMoveType.ROW_FIND_NEAR;\n subFindNear = this.focusMoveType & FocusMoveType.COLUMN_FIND_NEAR;\n lineLoop = this.focusMoveType & FocusMoveType.COLUMN_LOOP;\n }\n if (mainOffset != 0) {\n let i = this.focusDataIndex + mainOffset * lineNum;\n if (this.dataList[i]) {\n nextIndex = i;\n } else if (i >= 0) {\n if (mainFindNear) {\n i = i - i % this.column;\n if (this.dataList[i]) {\n while (this.dataList[i]) {\n nextIndex = i;\n i++;\n }\n }\n }\n }\n }\n if (subOffset != 0) {\n let i = this.focusDataIndex % lineNum + subOffset;\n if (i >= 0 && i < lineNum && this.dataList[this.focusDataIndex + subOffset]) {\n nextIndex = this.focusDataIndex + subOffset;\n } else {\n if (lineLoop) {\n i = this.focusDataIndex + subOffset * lineNum - this.focusDataIndex % lineNum;\n if (subOffset < 0) {\n i = i + lineNum - 1;\n }\n if (this.dataList[i]) {\n nextIndex = i;\n }\n } else if (subFindNear) {\n if (i >= 0 && i < lineNum) {\n for (i = this.focusDataIndex + subOffset; i >= this.startIndex; i -= lineNum) {\n if (this.dataList[i]) {\n nextIndex = i;\n break;\n }\n }\n }\n }\n }\n }\n if (nextIndex < 0 && this.loopUpdate) {\n if (this.verticalUpdate && vOffset != 0) {\n nextIndex = vOffset > 0 ? 0 : this.dataInfo.endIndex;\n } else if (!this.verticalUpdate && hOffset != 0) {\n nextIndex = hOffset > 0 ? 0 : this.dataInfo.endIndex;\n }\n }\n if (nextIndex >= 0) {\n let offset;\n if (hOffset !== 0) {\n offset = hOffset;\n }\n if (vOffset != 0) {\n offset = vOffset;\n }\n this.preFocusDataIndex = this.focusDataIndex;\n this.focusDataIndex = nextIndex;\n if (this.preFocusDataIndex >= 0) {\n this.divInfoList[this._getDivIndex(this.preFocusDataIndex)]?.onAction.onBlur?.();\n }\n this.divInfoList[this._getDivIndex(this.preFocusDataIndex)].widgetData.selected = false;\n this._updateData(this._getStartIndex(nextIndex, offset));\n this.divInfoList[this._getDivIndex(this.focusDataIndex)]?.onAction.onFocus?.();\n this.divInfoList[this._getDivIndex(this.focusDataIndex)].widgetData.selected = true;\n } else {\n let edgeDirection;\n if (hOffset > 0) {\n edgeDirection = EdgeDirection.right;\n }\n if (hOffset < 0) {\n edgeDirection = EdgeDirection.left;\n }\n if (vOffset > 0) {\n edgeDirection = EdgeDirection.bottom;\n }\n if (vOffset < 0) {\n edgeDirection = EdgeDirection.top;\n }\n this._sendOnEdge(edgeDirection, this._getDivIndex(this.focusDataIndex));\n }\n },\n _onFocus() {\n this.focused = true;\n if (this.originDataList && this.originDataList.length > 0) {\n this.divInfoList[this._getDivIndex(this.focusDataIndex)]?.onAction.onFocus?.();\n } else {\n console.warn(`${TAG$2}: ${this.name} focus while data is empty`);\n }\n },\n _onBlur() {\n this.focused = false;\n if (this.originDataList && this.originDataList.length > 0) {\n this.divInfoList[this._getDivIndex(this.focusDataIndex)]?.onAction.onBlur?.();\n }\n },\n _onKeyDown(ev) {\n if (!this.originDataList || this.originDataList.length == 0) {\n const edgeDirectionMap = {\n 37: EdgeDirection.left,\n 38: EdgeDirection.top,\n 39: EdgeDirection.right,\n 40: EdgeDirection.bottom\n };\n if (typeof edgeDirectionMap[ev.keyCode] !== \"undefined\") {\n this._sendOnEdge(edgeDirectionMap[ev.keyCode], -1);\n return true;\n }\n return false;\n }\n switch (ev.keyCode) {\n case 37:\n this._moveTo(-1, 0);\n return true;\n case 39:\n this._moveTo(1, 0);\n return true;\n case 38:\n this._moveTo(0, -1);\n return true;\n case 40:\n this._moveTo(0, 1);\n return true;\n case 13:\n this.divInfoList[this._getDivIndex(this.focusDataIndex)]?.onAction.onClick?.();\n return true;\n default:\n return false;\n }\n },\n getFocusBlockRef() {\n return this.$refs.focusBlock;\n },\n setFocusId(id) {\n if (id >= 0 && id < this.originDataList.length) {\n let preIndex = this.focusDataIndex;\n this.preFocusDataIndex = -1;\n this.focusDataIndex = this._indexConvert(id);\n if (this.focused) {\n this.divInfoList[this._getDivIndex(preIndex)]?.onAction.onBlur?.();\n }\n if (this.divInfoList[this._getDivIndex(preIndex)]) {\n this.divInfoList[this._getDivIndex(preIndex)].widgetData.selected = false;\n }\n this._updateData(this._getStartIndex(this.focusDataIndex, 1));\n if (this.focused) {\n this.divInfoList[this._getDivIndex(this.focusDataIndex)]?.onAction.onFocus?.();\n }\n if (this.divInfoList[this._getDivIndex(this.focusDataIndex)]) {\n this.divInfoList[this._getDivIndex(this.focusDataIndex)].widgetData.selected = true;\n }\n }\n },\n refreshData() {\n if (this.focused) {\n this.divInfoList[this._getDivIndex(this.focusDataIndex)]?.onAction.onBlur?.();\n }\n if (this.divInfoList[this._getDivIndex(this.focusDataIndex)]) {\n this.divInfoList[this._getDivIndex(this.focusDataIndex)].widgetData.selected = false;\n }\n this._formatData();\n this.startIndex = -1;\n this._cleanOldData();\n if (this.focusDataIndex > this.originDataList.length) {\n this.focusDataIndex = 0;\n this.preFocusDataIndex = -1;\n }\n this._updateData(this._getStartIndex(this.focusDataIndex, 1));\n if (this.focused) {\n this.divInfoList[this._getDivIndex(this.focusDataIndex)]?.onAction.onFocus?.();\n }\n if (this.divInfoList[this._getDivIndex(this.focusDataIndex)]) {\n this.divInfoList[this._getDivIndex(this.focusDataIndex)].widgetData.selected = true;\n }\n }\n }\n};\nfunction _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_jsv_focus_block = resolveComponent(\"jsv-focus-block\");\n return openBlock(), createBlock(_component_jsv_focus_block, {\n ref: \"focusBlock\",\n name: $props.name,\n onAction: {\n onFocus: $options._onFocus,\n onBlur: $options._onBlur,\n onKeyDown: $options._onKeyDown\n },\n style: normalizeStyle({\n left: $props.left,\n top: $props.top\n })\n }, {\n default: withCtx(() => [\n (openBlock(true), createElementBlock(Fragment, null, renderList($setup.divInfoList, (item, index) => {\n return openBlock(), createElementBlock(\"div\", {\n key: index,\n style: normalizeStyle({\n left: item.left,\n top: item.top,\n width: $props.itemSize.width,\n height: $props.itemSize.height,\n visibility: item.widgetData.visibility ? \"inherit\" : \"hidden\"\n })\n }, [\n renderSlot(_ctx.$slots, \"renderItem\", {\n userData: item.userData,\n widgetData: item.widgetData,\n onAction: item.onAction\n })\n ], 4);\n }), 128))\n ]),\n _: 3\n }, 8, [\"name\", \"onAction\", \"style\"]);\n}\nconst JsvGrid = /* @__PURE__ */ _export_sfc(_sfc_main$k, [[\"render\", _sfc_render$4]]);\n\n//!\n//! utils/JsViewVueWidget/JsvNativeSharedDiv.vue;\n//!\n/*! <!--\n * 【控件介绍】\n * JsvNativeSharedDiv:创建一个Native端可以跟进显示位置的div,用于Native端外挂插件的开发\n * style {Object} 布局样式(必须),必须包含的信息为{left, top, width, height}\n * getId {function} 回调函数,用于接收ID信息,ID信息用于Native端对该view进行跟踪的标识\n * setId {String} 给定命名ID,避免同进程不同context重名要和Context相关,\n * 例如`${window.JsView?.getJsContextId()}_${you_name}`\n -->\n\n\n\n */\nconst _sfc_main$j = {\n props: {\n style: {\n type: Object,\n default: () => {\n return {};\n }\n },\n getId: Function,\n setId: String,\n seeThrough: {\n type: Boolean,\n default: true\n }\n },\n setup() {\n return {\n isBrowserDebug: window.jsvIsBrowserDebug,\n jsvMainView: void 0,\n innerViewId: void 0\n };\n },\n beforeMount() {\n if (this.isBrowserDebug) {\n return;\n }\n let textureSetting = null;\n if (this.seeThrough) {\n const seeThroughTexture = handles.TextureManager.GetColorTexture(\"rgba(0,0,0,0)\");\n textureSetting = new Forge$1.TextureSetting(\n seeThroughTexture,\n null,\n null,\n false\n );\n }\n this.jsvMainView = new Forge$1.NativeSharedView(textureSetting);\n this.innerViewId = Forge$1.sViewStore.add(\n new Forge$1.ViewInfo(this.jsvMainView)\n );\n if (typeof this.jsvMainView != \"undefined\" && this.jsvMainView) {\n if (this.setId) {\n this.jsvMainView.SetTrackId(this.setId);\n }\n this.getId?.(this.jsvMainView.GetTrackId());\n }\n },\n beforeUnmount() {\n if (this.isBrowserDebug) {\n return;\n }\n if (this.innerViewId !== -1) {\n Forge$1.sViewStore.remove(this.innerViewId);\n this.innerViewId = -1;\n this.jsvMainView = null;\n }\n }\n};\nfunction _sfc_render$3(_ctx, _cache, $props, $setup, $data, $options) {\n return !$setup.isBrowserDebug ? (openBlock(), createElementBlock(\"div\", {\n key: 0,\n style: normalizeStyle({\n left: $props.style.left,\n top: $props.style.top,\n width: $props.style.width,\n height: $props.style.height\n }),\n \"data-jsv-vw-innerview\": $setup.innerViewId\n }, [\n renderSlot(_ctx.$slots, \"default\")\n ], 12, [\"data-jsv-vw-innerview\"])) : (openBlock(), createElementBlock(\"div\", {\n key: 1,\n style: normalizeStyle({ ...$props.style })\n }, [\n renderSlot(_ctx.$slots, \"default\")\n ], 4));\n}\nconst JsvNativeSharedDiv = /* @__PURE__ */ _export_sfc(_sfc_main$j, [[\"render\", _sfc_render$3]]);\n\n//!\n//! utils/JsViewVueWidget/JsvHole.js;\n//!\n\n//!\n//! utils/JsViewVueTools/JsvHashHistory.js;\n//!\nclass JsvHashHistory {\n constructor(base) {\n if (window.jsvIsBrowserDebug) {\n this.#history = createWebHashHistory(base);\n } else {\n this.#history = this.#createMockHashHistory(base);\n }\n }\n get location() {\n return this.#history.location;\n }\n get state() {\n return this.#history.state;\n }\n get base() {\n return this.#history.base;\n }\n createHref(location2) {\n return this.#history.createHref(location2);\n }\n listen(callback) {\n return this.#history.listen(callback);\n }\n replace(to, data) {\n this.#history.replace(to, data);\n this.#updateLocation(this.#history.location);\n }\n push(to, data) {\n this.#history.push(to, data);\n this.#updateLocation(this.#history.location);\n }\n go(delta, triggerListeners) {\n this.#history.go(delta, triggerListeners);\n this.#updateLocation(this.#history.location);\n }\n destroy() {\n this.#history.destroy();\n }\n #createMockHashHistory(base) {\n base = location.host || location.protocol === \"file:\" ? base || location.pathname + location.search : \"\";\n if (!base.includes(\"#\"))\n base += \"#\";\n if (!base.endsWith(\"#/\") && !base.endsWith(\"#\")) {\n console.warn(`A hash base must end with a \"#\":\n\"${base}\" should be \"${base.replace(/#.*$/, \"#\")}\".`);\n }\n this.baseURL = window.location.origin + base;\n const history = createMemoryHistory(base);\n const initHash = this.#getInitHash();\n if (initHash) {\n const replaceTo = {\n path: initHash.substring(1),\n // 去除#\n query: void 0\n };\n const queryIdx = initHash.indexOf(\"?\");\n if (queryIdx >= 0) {\n replaceTo.path = replaceTo.path.substring(0, queryIdx - 1), replaceTo.query = this.#convertUrlParams(initHash.substring(queryIdx));\n }\n history.replace(replaceTo);\n } else {\n this.#updateLocation(history.location);\n }\n return history;\n }\n #getInitHash() {\n let initHash;\n if (window.JsView.takeNativeHashChange) {\n initHash = window.JsView.takeNativeHashChange({\n //this.push(new_hash.substring(1)); // 去除#\n });\n if (initHash != null) {\n console.log(\"History: found init hash change to:\" + initHash);\n } else {\n initHash = window.location.hash;\n }\n }\n return initHash;\n }\n #updateLocation(location2) {\n if (!window.jsvIsBrowserDebug) {\n const url = new window.JsView.Dom.UrlRef(\n location2 ? this.baseURL + location2 : this.baseURL,\n true\n );\n window.location.applyUrlInfo(url);\n }\n }\n #convertUrlParams(value) {\n const questionMarkIdx = value.indexOf(\"?\");\n if (questionMarkIdx >= 0) {\n value = value.substr(questionMarkIdx + 1);\n }\n var paramArray = value.split(\"&\");\n var result = {};\n for (const param of paramArray) {\n const [key, value2] = param.split(\"=\");\n if (result.hasOwnProperty(key)) {\n if (!Array.isArray(result[key])) {\n result[key] = [result[key]];\n }\n result[key].push(value2);\n } else {\n result[key] = value2;\n }\n }\n ;\n return result;\n }\n #history;\n}\nfunction jsvCreateHashHistory(base) {\n return new JsvHashHistory(base);\n}\n\n//!\n//! utils/JsViewVueTools/JsvDynamicCssStyle.js;\n//!\n/*!\n * 【模块 export 内容】\n * CssStyleSheet:面向对象类,CSS rule的操作器,用于添加和删除CssStyle,服务于JsvStyleClass\n * 接口:\n * insertRule {String} 将传入的Css rule对象插入到CSS列表中,\n * 请保证不要和其他css rule重名,重名场合以最后一个为准\n * removeRule {String} 从CSS列表中删除指定名字的css rule\n * removeMultiRules {String[]} 从CSS列表中删除复数个css rule\n * getCssStyleSheet: 函数,获取 _StyleSheet 实例的函数,可接受一个参数anchor_tag,用来定位CSS rule的群组\n */\nfunction getCssStyleGroup() {\n console.error(\"Error: expired api, use JsvStyleSheetsDeclarer instead\");\n return null;\n}\n\n//!\n//! utils/JsViewVueTools/JsvRuntimeBridge.js;\n//!\nlet feature_supports = null;\nlet direct_call_map = {};\nfunction direct_call(name, ...args) {\n if (direct_call_map.hasOwnProperty(name)) {\n let func = direct_call_map[name];\n if (func) {\n return func(...args);\n }\n } else {\n let func = null;\n if (window.jJsvRuntimeBridge && typeof window.jJsvRuntimeBridge[name] === \"function\") {\n func = window.jJsvRuntimeBridge[name];\n } else if (window.jContentShellJBridge && typeof window.jContentShellJBridge[name] === \"function\") {\n func = window.jContentShellJBridge[name];\n }\n direct_call_map[name] = func;\n if (func) {\n return func(...args);\n }\n }\n return null;\n}\n/*!\n * 获取当前集成JsView的APP目前支持的扩展功能列表\n *\n * @returns {string} 功能列表,以逗号隔开,包含:\n * favourite : 支持加入收藏夹功能\n * history : 支持浏览后自动进入历史记录功能\n * textureVideo : 支持将video渲染到texture的方式(JsvVideo高阶控件的usetexture属性控制)\n */\nfunction getExtFeatureSupports() {\n if (!feature_supports) {\n feature_supports = direct_call(\"getExtFeaturesSupport\");\n }\n return feature_supports;\n}\n/*!\n * 获取设备mac地址,优先获取有线mac,无则获取wifi mac\n * @returns {string} mac address\n *\n */\nfunction getMac() {\n return direct_call(\"getMac\");\n}\n/*!\n * 获取设备有线mac地址\n * @returns {string} mac address\n *\n */\nfunction getWireMac() {\n return direct_call(\"getWireMac\");\n}\n/*!\n * 获取设备wifi mac地址\n * @returns {string} mac address\n *\n */\nfunction getWifiMac() {\n return direct_call(\"getWifiMac\");\n}\n/*!\n * 获取设备UUID\n * @returns {string} UUID\n *\n */\nfunction getDeviceUUID() {\n return direct_call(\"getDeviceUUID\");\n}\n/*!\n * 获取设备Android ID\n * @returns {string} Android ID\n *\n */\nfunction getAndroidId() {\n return direct_call(\"getAndroidId\");\n}\n/*!\n * 打开另外一个小程序\n * @param {string} url 小程序url\n * @param {string} startup_image 启动图url\n * @param {string} startup_video 启动视频url\n * @param {int} startup_duration 启动图时长,默认0\n * @param {int} add_history 是否添加历史,0不添加,1添加\n *\n */\nfunction openWindow(url, startup_image, startup_video, startup_duration, add_history) {\n let setting = {};\n if (typeof startup_image !== void 0 && startup_image !== null && startup_image !== \"\")\n setting.startupImage = startup_image;\n if (typeof startup_video !== void 0 && startup_video !== null && startup_video !== \"\") {\n setting.startupVideo = startup_video;\n }\n setting.startupDuration = startup_duration;\n setting.addHistory = add_history ? 1 : 0;\n direct_call(\"openWindow\", url, JSON.stringify(setting));\n}\n/*!\n * 关闭当前小程序\n *\n */\nfunction closePage() {\n direct_call(\"closePage\");\n}\n/*!\n * 获取设备UUID\n * @param {string} key 属性名称\n * @returns {string} 属性值\n *\n */\nfunction getSystemProperty(key) {\n return direct_call(\"getSystemProperty\", key);\n}\n/*!\n * 获取已安装应用列表\n * @returns {string} 应用列表,JSON结构的数组\n *\n */\nfunction getInstalledApps() {\n return direct_call(\"getInstalledApps\");\n}\n/*!\n * 启动安卓APP\n * @param {string} package_name 包名\n * @param {string} activity Activity方式启动\n * @param {string} action Action方式启动\n * @param {string} uri Uri方式启动\n * @param {Array} flags 数组,用于intent.addFlags\n * @param {Array} param JSON格式数组,用于intent.putExtra\n *\n */\nfunction startNativeApp(package_name, activity, action, uri, flags, param) {\n var obj = {};\n if (typeof package_name != void 0 && package_name !== null && package_name !== \"\")\n obj.packageName = package_name;\n if (typeof activity != void 0 && activity !== null && activity !== \"\")\n obj.activity = activity;\n if (typeof action != void 0 && action !== null && action !== \"\")\n obj.action = action;\n if (typeof uri != void 0 && uri !== null && uri !== \"\")\n obj.uri = uri;\n if (typeof flags != void 0 && flags !== null && flags.length > 0)\n obj.flags = flags;\n if (typeof param != void 0 && param !== null && param.length > 0)\n obj.param = param;\n direct_call(\"startNativeApp\", JSON.stringify(obj));\n}\nfunction sendNativeBroadcast(package_name, broadcast, action, uri, flags, param) {\n var obj = {};\n if (typeof package_name != void 0 && package_name !== null && package_name !== \"\")\n obj.packageName = package_name;\n if (typeof broadcast != void 0 && broadcast !== null && broadcast !== \"\")\n obj.broadcast = broadcast;\n if (typeof action != void 0 && action !== null && action !== \"\")\n obj.action = action;\n if (typeof uri != void 0 && uri !== null && uri !== \"\")\n obj.uri = uri;\n if (typeof flags != void 0 && flags !== null && flags.length > 0)\n obj.flags = flags;\n if (typeof param != void 0 && param !== null && param.length > 0)\n obj.param = param;\n direct_call(\"sendNativeBroadcast\", JSON.stringify(obj));\n}\n/*!\n * 获取设备信息\n * @returns {string} 终端设备信息,JSON数据结构\n *\n */\nfunction getDeviceInfo() {\n return direct_call(\"getDeviceInfo\");\n}\n/*!\n * 获取自己的app信息\n * @returns \n */\nfunction getAppInfo() {\n return direct_call(\"getAppInfo\");\n}\n/*!\n * 页面加载成功后调用去除启动图\n *\n */\nfunction notifyPageLoadDone() {\n notifyPageLoaded();\n}\nfunction notifyPageLoaded() {\n window.JsView?.enableReceivingUserInput?.();\n direct_call(\"notifyPageLoaded\");\n}\n/*!\n * 是否支持收藏功能\n * @returns {boolean} true支持,false不支持\n *\n */\nfunction hasFavouriteFunction() {\n let features = getExtFeatureSupports();\n if (features && features.indexOf(\"favourite\") >= 0) {\n return true;\n }\n return false;\n}\n/*!\n * 获取启动内核版本和引擎\n * @returns {Object} 包含\n * COREVERSIONRANGE: 启动时设定的内核版本范围\n * ENGINE: 启动时设定的Js引擎的URL\n */\nfunction getStartParams() {\n let json = direct_call(\"getStartParams\");\n if (json) {\n return JSON.parse(json);\n } else {\n return null;\n }\n}\n/*!\n * 添加收藏\n * @param {string} url 收藏的url\n * @param {function} callback 执行接口回调, 处理可能被用户否决\n *\n */\nfunction addFavourite(url, callback) {\n if (window.jJsvRuntimeBridge && typeof window.jJsvRuntimeBridge.addFavourite === \"function\") {\n let async_message = window.jJsvRuntimeBridge.addFavourite(url);\n async_message.then((result) => {\n if (callback) {\n callback(result);\n }\n }).catch((result) => {\n if (callback) {\n callback(result);\n }\n });\n }\n}\n/*!\n * 更新收藏\n * @param {string} url 收藏的url\n * @param {function} callback 执行接口回调, 处理可能被用户否决\n *\n */\nfunction updateFavourite(url, callback) {\n if (window.jJsvRuntimeBridge && typeof window.jJsvRuntimeBridge.updateFavourite === \"function\") {\n let async_message = window.jJsvRuntimeBridge.updateFavourite(url);\n async_message.then((result) => {\n if (callback) {\n callback(result);\n }\n }).catch((result) => {\n if (callback) {\n callback(result);\n }\n });\n }\n}\n/*!\n * 删除指定收藏\n * @param {string} app_name app name 唯一标识\n * @param {function} callback 执行接口回调, 处理可能被用户否决\n *\n */\nfunction removeFavourite(app_name, callback) {\n if (window.jJsvRuntimeBridge && typeof window.jJsvRuntimeBridge.removeFavourite === \"function\") {\n let async_message = window.jJsvRuntimeBridge.removeFavourite(app_name);\n async_message.then((result) => {\n if (callback) {\n callback(result);\n }\n }).catch((result) => {\n if (callback) {\n callback(result);\n }\n });\n }\n}\n/*!\n * 获取指定收藏\n * @param {string} app_name app name 唯一标识\n */\nfunction getFavourite(app_name) {\n if (window.jJsvRuntimeBridge && typeof window.jJsvRuntimeBridge.getFavourite === \"function\") {\n return window.jJsvRuntimeBridge.getFavourite(app_name);\n }\n return null;\n}\n/*!\n * 获取所有收藏\n *\n */\nfunction getFavouriteAll() {\n if (window.jJsvRuntimeBridge && typeof window.jJsvRuntimeBridge.getFavouriteAll === \"function\") {\n return window.jJsvRuntimeBridge.getFavouriteAll();\n }\n return null;\n}\n/*!\n * 浮窗控制接口,设置从本浮窗界面进行预热的二级浮窗的启动默认尺寸(若不设置则为全屏)\n * @param {string} mode 全屏模式还是需要Resize的模式。取值范围: \"full\" 或者 \"mini\"\n * 设置成 \"mini\" 模式后,启动后的界面内需要调用popupResizePosition来调整尺寸才能可见\n */\nfunction setPopupInitSize(mode) {\n direct_call(\"setPopupInitSize\", mode);\n}\n/*!\n * 浮窗控制接口,设置浮窗显示区域,以相对定位的方式调整弹出框的位置(弹出框弹出后先以尺寸1x1的方式展现)\n * @param {string} align 横纵对齐方式,有left, right, bottom, top, center可选择\n * 例如: 右下角\"right bottom\", 居中\"center center\"\n * @param {number} max_width 显示区域最大宽度(占屏幕百分比)\n * @param {number} max_height 显示区域最大高度(占屏幕百分比)\n * @param {number} aspect 横纵比设定\n * 显示区域根据 max_width, max_height, aspect 来计算出同时满足3个条件的最大区域\n */\nfunction popupResizePosition(align, max_width, max_height, aspect) {\n direct_call(\"popupResizePosition\", align, max_width, max_height, aspect);\n}\n/*!\n * 浮窗系统认为自己准备好后,调用此接口,获取设备的焦点。若不调用的话,默认浮窗系统捕获的焦点\n */\nfunction popupGainFocus() {\n direct_call(\"popupGainFocus\");\n}\nfunction popupDiscardFocus() {\n direct_call(\"popupGainFocus\");\n}\n/*!\n * 页面预热接口,预热页面将会将以一个新的FrameLayout(内含JsView)的方式加载一个新的应用\n * 但这个应用在warmLoadView之前,不会创建texture/surface的实际描画资源,也不会加载图片\n * 仅加载所有JS代码,并正常走完所有启动逻辑(包括描画逻辑),但不会走setTimeout对应的延时逻辑,也不会显示\n * 预热的界面可以极大加速界面切换的时间,例如应用跳转到购物类界面\n * mode为1表示全预热,app_url不能为空,mode为2表示只预热engine url,如果app_url不为空,engine url来自于app_ur\n * 否则来自于当前使用的engine url,app_url表示小程序的链接。\n * 【特别注意】warmUp起来的view,在warmLoadView调用之前,若启动者JsView关闭的话,此View应该在\n * View管理模块被清理掉,以防泄露,但在warmLoadView完成后,就不需要进行关联清理,请管理模块务必保证此机制。\n * [参数]\n * int mode 预热模式,1:全预热,2:半预热\n * String app_url 要预热的app_url,当半预热时,可以为null\n * [返回值]\n * int: 为view_refer_id值,预热后的View的ID,用于后续的warmLoadView和closeWarmView使用\n */\nfunction warmUpView(mode, app_url) {\n if (mode !== 1 && mode !== 2) {\n console.error(`not support mode(${mode})`);\n return -1;\n }\n if (mode === 1 && (app_url === null || app_url.length === 0)) {\n console.error(`not support params(${mode} ${app_url})`);\n return -1;\n }\n return direct_call(\"warmUpView\", mode, app_url);\n}\n/*!\n * 将warmUpView后的View展示出来\n * 若warmUpView中app_url不为null,进行了全预热,则本调用的app_url可以为null\n * 当warmUpView中设置了app_url时,仍可以新的app_url调整history hash(#)部分进行子页面切换\n *\n * @param {number} view_refer_id warmUpView调用后返回来的View ID\n * @param {string} app_url 界面的应用地址,支持?(search)和#(hash)字段\n * @param {boolean} add_history 启动的界面是否进访问历史列表\n */\nfunction warmLoadView(view_refer_id, app_url, add_history) {\n direct_call(\"warmLoadView\", view_refer_id, app_url, !!add_history);\n}\n/*!\n * 关闭warmUp后未进行warmLoad的View,释放资源\n * @param {number} view_refer_id warmUpView调用后返回来的View ID\n */\nfunction closeWarmedView(view_refer_id) {\n direct_call(\"closeWarmedView\", view_refer_id);\n}\n/*!\n * 触发预下载内核\n * @param {string} core_version 带branch(主分支版本不带此信息)和版本信息的内核版本, \n * 例如: 1021265_release_build_xxx\n * @returns promise 对象,用于监听下载完成与下载失败\n */\nfunction preDownloadSdk(core_version) {\n return direct_call(\"preDownloadSdk\", core_version);\n}\n//! 显示声明,可以提高执行速度和利用上编辑器的成员名提示功能\nconst bridge = {\n getMac,\n getWireMac,\n getWifiMac,\n getDeviceUUID,\n getAndroidId,\n openWindow,\n closePage,\n getStartParams,\n getSystemProperty,\n getInstalledApps,\n startNativeApp,\n sendNativeBroadcast,\n getDeviceInfo,\n getAppInfo,\n notifyPageLoadDone,\n notifyPageLoaded,\n hasFavouriteFunction,\n addFavourite,\n updateFavourite,\n removeFavourite,\n getFavourite,\n getFavouriteAll,\n setPopupInitSize,\n popupResizePosition,\n popupGainFocus,\n popupDiscardFocus,\n warmUpView,\n warmLoadView,\n closeWarmedView,\n preDownloadSdk\n};\n\n//!\n//! utils/JsViewVueTools/JsvRefTaker.js;\n//!\n/*!\n *******************\n * JsvRefTaker模块\n * \n * 用于解决 script setup 写法,不容易通过 this.$ref.xxxx 拿到子模块的句柄,\n * 但使用ref(null)的方式构筑的深度reactive对象又会严重影响element的内部处理性能的问题\n * \n * 使用方法:\n * <script setup>\n * const element_ref = buildTaker();\n * \n * onMounted(()=>{\n * // onMounted以后,可以用 .current 访问到引用\n * console.log(element.current)\n * })\n * <\\/script>\n * \n * <template>\n * <div :ref=\"element_ref.fnc\" />\n * </template>\n * \n ********************/\nfunction buildTaker() {\n let pack = {\n fnc: null,\n current: null\n };\n pack.fnc = (r) => {\n pack.current = r;\n };\n return pack;\n}\n\n//!\n//! utils/JsViewVueTools/JsvStyleClass.js;\n//!\nlet sIdGenerator = 100;\n//! 转换CSS名称的对应表\nlet sCssNamesMap = null;\nlet sUnitSuffixMap = null;\nfunction _EnsureCssNamesMap() {\n sCssNamesMap = {\n animation: [\"animation\", \"-webkit-animation\"],\n backgroundImage: [\"background-image\"],\n borderRadius: [\"border-radius\"],\n borderImage: [\"border-image\"],\n borderImageOutset: [\"border-image-outset\"],\n borderImageWidth: [\"border-image-width\"],\n backgroundColor: [\"background-color\"],\n backfaceVisibility: [\"backface-visibility\", \"-webkit-backface-visibility\"],\n clipPath: [\"clip-path\"],\n fontFamily: [\"font-family\"],\n fontSize: [\"font-size\"],\n fontStyle: [\"font-style\"],\n lineHeight: [\"line-height\"],\n objectFit: [\"object-fit\"],\n perspective: [\"perspective\", \"-webkit-perspective\"],\n perspectiveOrigin: [\"perspective-origin\", \"-webkit-perspective-origin\"],\n textAlign: [\"text-align\"],\n textOverflow: [\"text-overflow\"],\n transform: [\"transform\", \"-webkit-transform\"],\n transformOrigin: [\"transform-origin\", \"-webkit-transform-origin\"],\n transformStyle: [\"transform-style\", \"-webkit-transform-style\"],\n transition: [\"transition\", \"-webkit-transition\"],\n whiteSpace: [\"white-space\"],\n zIndex: [\"z-index\"]\n };\n sUnitSuffixMap = {\n fontSize: \"px\",\n left: \"px\",\n top: \"px\",\n width: \"px\",\n height: \"px\"\n };\n}\nfunction _ConvertStyles(styles_define) {\n _EnsureCssNamesMap();\n let styles_result = \"{\";\n for (const prop in styles_define) {\n if (styles_define.prototype.hasOwnProperty.call(styles_define, prop)) {\n let value = styles_define[prop];\n if (sUnitSuffixMap.prototype.hasOwnProperty.call(sUnitSuffixMap, prop)) {\n if (typeof value === \"number\") {\n value = `${value}${sUnitSuffixMap[prop]}`;\n }\n }\n if (sCssNamesMap.prototype.hasOwnProperty.call(sCssNamesMap, prop)) {\n const alias_array = sCssNamesMap[prop];\n for (const alias of alias_array) {\n styles_result += `${alias}:${value};`;\n }\n } else {\n styles_result += `${prop}:${value};`;\n }\n }\n }\n styles_result += \"}\";\n return styles_result;\n}\nconst CONST_TYPE_BASE = null;\nconst CONST_TYPE_TEXT = \"text\";\n//! 全局多实例互斥\nif (typeof window.__JsvStyleClassMutex === \"undefined\") {\n window.__JsvStyleClassMutex = 0;\n}\nconst CONST_GLOBAL_TOKEN = window.__JsvStyleClassMutex++;\nclass JsvStyleClass {\n /*\n * constructor 参数说明:\n * styles_define (Object) style定义,例如{top:xxx, left:xxx, width:xxx, height:xxxx}\n */\n constructor(styles_define) {\n this._Name = null;\n this._Styles = null;\n this._StyleGroup = null;\n this._JsvInnerAttach = null;\n if (styles_define) {\n this._UpdateInner(styles_define);\n } else {\n }\n }\n /*\n * reset 参数说明:\n * styles_define (Object) style定义,例如{top:xxx, left:xxx, width:xxx, height:xxxx}\n */\n reset(styles_define) {\n this._UpdateInner(styles_define);\n }\n /*\n * getName 参数说明:\n *\n * 返回值\n * String 系统分配给这个JsvStyleClass的 className\n */\n getName() {\n return this._Name;\n }\n /*\n * recycle 参数说明:\n * 无\n */\n recycle() {\n this._RecycleInner();\n }\n _UpdateInner(styles_define) {\n this._RecycleInner();\n this._Name = `JsvStyle_${CONST_GLOBAL_TOKEN}_${sIdGenerator++}`;\n this._Styles = Object.assign({}, styles_define);\n if (window.JsvDisableReactWrapper) {\n const css_define = _ConvertStyles(styles_define);\n if (!this._StyleGroup) {\n this._StyleGroup = getCssStyleGroup();\n }\n this._StyleGroup.insertRule(`.${this._Name}${css_define}`);\n } else {\n Forge$1.ReactUtils.StyleClassMap[this._Name] = this;\n }\n }\n _RecycleInner() {\n if (this._Name) {\n if (window.JsvDisableReactWrapper) {\n this._StyleGroup.removeRule(`.${this._Name}`);\n } else {\n delete Forge$1.ReactUtils.StyleClassMap[this._Name];\n }\n this._Name = null;\n this._Styles = null;\n this._JsvInnerAttach = null;\n }\n }\n // 约定接口,引擎中获取本对象的类型\n classType() {\n return CONST_TYPE_BASE;\n }\n // 约定接口,引擎中获取本对象的style设置\n getStyles() {\n return this._Styles;\n }\n // 约定接口,\n // 用于存储配置转化出来的缓存信息和标识位\n getAttach() {\n return this._JsvInnerAttach;\n }\n // 约定接口,\n // 用于读取缓存信息和标识位\n updateAttach(new_attach) {\n this._JsvInnerAttach = new_attach;\n }\n}\nclass JsvTextStyleClass extends JsvStyleClass {\n constructor(styles_define) {\n super(styles_define);\n this.jsvTextAttributes = {\n jsv_text_line_align: \"middle\",\n // 文字行内垂直对齐方式\n jsv_text_vertical_align: \"top\"\n // 文字区域内垂直对齐方式\n };\n }\n setVerticalAlign(new_align) {\n this.jsvTextAttributes.jsv_text_vertical_align = new_align;\n }\n setLineAlign(new_align) {\n this.jsvTextAttributes.jsv_text_line_align = new_align;\n }\n // 注意:此接口仅提供给JsViewReactWidget中的hoc调用,\n getVerticalAlign() {\n return this.jsvTextAttributes.jsv_text_vertical_align;\n }\n // 注意:此接口仅提供给JsViewReactWidget中的hoc调用,\n getLineAlign() {\n return this.jsvTextAttributes.jsv_text_line_align;\n }\n // Override\n classType() {\n return CONST_TYPE_TEXT;\n }\n}\nfunction combinedStyles(style_array, extract_all) {\n let class_process_done = false;\n const name_list = [];\n let normal_style = {};\n for (const item of style_array) {\n if (item instanceof JsvStyleClass) {\n if (extract_all) {\n normal_style = Object.assign(normal_style, item.getStyles());\n } else {\n name_list.push(item.getName());\n }\n if (class_process_done) {\n console.warn(\"WARNING:found class define after normal style set\");\n }\n } else {\n class_process_done = true;\n normal_style = Object.assign(normal_style, item);\n }\n }\n return {\n combinedClass: name_list.join(\" \"),\n combinedStyle: normal_style\n };\n}\n\n//!\n//! utils/JsViewVueTools/JsvStyleSheetsDeclarer.js;\n//!\n/*!\n * 【模块 export 内容】\n * JsvStyleSheetsDeclarer: 动态和删除全局的 CssStyle\n * 接口:\n * DeclareClass(className:string, styleProperties:object) 新加全局Class\n * className: 定义的class的名称, 为了规避全局重名,建议用'-'进行区域区分,例如主界面叫 main-xxxx, 详情页用 detail-xxxx\n * styleProperties: 具体的style定义的对象,内部的名字采用驼峰规范\n * \n * UndeclareClass(className:string) 删除全局Class\n * className: 通过 DeclareClass 声明的出来的动态className\n */\nclass JsvStyleSheetsDeclarer {\n static DeclareClass(className, styleProperties) {\n const scopedStyleSheets = {\n 0: {}\n };\n if (className.startsWith(\".\") == false) {\n className = \".\" + className;\n }\n scopedStyleSheets[0][className] = JSON.stringify(styleProperties);\n window.JsvCode.Dom.DeclareStyleSheets(scopedStyleSheets);\n }\n static UndeclareClass(className) {\n const scopedStyleSheets = {\n 0: {}\n };\n if (className.startsWith(\".\") == false) {\n className = \".\" + className;\n }\n scopedStyleSheets[0][className] = \"{}\";\n window.JsvCode.Dom.UndeclareStyleSheets(scopedStyleSheets);\n }\n}\n\n//!\n//! utils/JsViewVueTools/DebugContentShellJBridge.js;\n//!\nclass BridgeProxy {\n indicateHomePageLoadDone() {\n const bridge = this._GetBridge();\n if (bridge && bridge.indicateHomePageLoadDone) {\n bridge.indicateHomePageLoadDone();\n }\n }\n _GetBridge() {\n return window.jContentShellJBridge;\n }\n}\nconst instance = new BridgeProxy();\n\n//!\n//! utils/JsViewVueTools/DebugTool.js;\n//!\n//! 用于存储用于Debug的全局引用\nlet DebugObjectRefer = {\n RootRouter: null\n};\nlet DebugTools = {\n // 打印当前活跃的FDiv元素\n printFocusNodes: () => {\n DebugObjectRefer.RootRouter.printNodes();\n }\n};\nfunction DebugWrap81ErrorStack() {\n if (!console._jsvOriginError) {\n console._jsvOriginError = console.error;\n console.error = (...args) => {\n console._jsvOriginError(...args, new Error(\"stack\"));\n };\n }\n}\nfunction DebugWrap81WarnStack() {\n if (!console._jsvOriginWarn) {\n console._jsvOriginWarn = console.warn;\n console.warn = (...args) => {\n console._jsvOriginWarn(...args, new Error(\"stack\"));\n };\n }\n}\n//! 全局引用,以便于在devtools中能直接进行查询\nwindow.JsvDebugTools = DebugTools;\n\n//!\n//! utils/JsViewVueTools/JsvImpactTracer.js;\n//!\n/*!\n * createImpactCallback 参数说明:\n * on_contact (function[]) 接受碰撞事件的回调\n * on_dis_contact (function[]) 接受物体分离事件的回调\n * 返回值:\n * Object 句柄,用于传输给 createImpactTracer\n */\nfunction createImpactCallback(on_contact, on_dis_contact) {\n return new Forge$1.sImpactSensorManager.Callback(on_contact, on_dis_contact);\n}\n/*!\n * createImpactTracer 参数说明:\n * ele1 (Element) html element句柄,1号碰撞体\n * ele2 (Element) html element句柄,2号碰撞体\n * callback (Object) 由 createImpactCallback 创建的回调构造体句柄\n * auto_froze (Object) 由 createImpactAutoFroze 创建的碰撞即停构造体句柄\n * 返回值:\n * Object 句柄,提供 Recycle() 函数用于停止碰撞检测,需要再componentWillUnmount进行调用(清理)\n */\nfunction createImpactTracer(ele1, ele2, callback, auto_froze) {\n return Forge$1.sImpactSensorManager.StartTrace(ele1.jsvGetProxyView(), ele2.jsvGetProxyView(), callback, auto_froze);\n}\n//! 创建用于设置碰撞即停管理对象的参数\n//! 结果用于函数 createImpactAutoFroze 和 updateImpactAutoFroze\nfunction _ConvertToViewsList(elements_array) {\n const views_array = [];\n if (elements_array) {\n for (const ele of elements_array) {\n views_array.push(ele.jsvGetProxyView());\n }\n }\n return views_array;\n}\n/*!\n * createImpactAutoFroze 参数说明:\n * element_auto_froze_pre_impact (Array<Element>) 关联运动元素的列表,这些元素碰撞前一帧停止运动\n * element_auto_froze_on_impact (Array<Element>) 关联运动元素的列表,这些元素碰撞当前帧停止运动\n * 返回值:\n * Object 句柄,用于传输给 createImpactTracer,也用于 updateImpactAutoFroze 调整关联元素\n *\n * 【注意点】\n * 多个碰撞对可以共享同一个碰撞管理对象,并且建议共享同一个对象以提升效率\n * 该管理对象中的view的列表可以通过 updateImpactAutoFrozeHandler进行更新,\n * 更新后立刻在对所有的共享此管理对象的碰撞对中生效\n */\nfunction createImpactAutoFroze(element_auto_froze_pre_impact, element_auto_froze_on_impact) {\n if (!element_auto_froze_pre_impact && !element_auto_froze_on_impact) {\n return;\n }\n const pre_impact_list = _ConvertToViewsList(element_auto_froze_pre_impact);\n const on_impact_list = _ConvertToViewsList(element_auto_froze_on_impact);\n return new Forge$1.sImpactSensorManager.AutoFroze(\n pre_impact_list.length > 0 ? pre_impact_list : null,\n on_impact_list.length > 0 ? on_impact_list : null\n );\n}\n/*!\n * updateImpactAutoFroze 参数说明:\n * handler (Object) 由 createImpactAutoFroze 创建的句柄\n * element_auto_froze_pre_impact (Array<Element>) 关联运动元素的列表,这些元素碰撞前一帧停止运动\n * element_auto_froze_on_impact (Array<Element>) 关联运动元素的列表,这些元素碰撞当前帧停止运动\n * 返回值:\n * 无\n */\nfunction updateImpactAutoFroze(handler, element_auto_froze_pre_impact, element_auto_froze_on_impact) {\n if (handler instanceof Forge$1.sImpactSensorManager.AutoFroze) {\n console.error(\"Error: handler type error\");\n return;\n }\n const pre_impact_list = _ConvertToViewsList(element_auto_froze_pre_impact);\n const on_impact_list = _ConvertToViewsList(element_auto_froze_on_impact);\n handler.UpdatePreImpactList(pre_impact_list.length > 0 ? pre_impact_list : null);\n handler.UpdateOnImpactList(on_impact_list.length ? on_impact_list : null);\n}\n\n//!\n//! utils/JsViewVueTools/JsvTextTools.js;\n//!\n/*!\n * 获取文字宽度, 一般用于测量文字宽度\n *\n * @param {string} text 文字\n * @param {object} style 文字的css style\n * @return {int} 文字宽度\n **/\nconst getTextWidth = (text, style) => {\n const textParams = {\n str: text ? text : \"\",\n font: style.fontFamily ? style.fontFamily : Forge.TextUtils._sDefaultFont,\n size: style.fontSize ? style.fontSize : Forge.TextUtils._sDefaultFontSize,\n italic: style.fontStyle === \"italic\" ? \"italic\" : \"\",\n bold: style.fontWeight === \"bold\" ? \"bold\" : \"\"\n };\n return window.PlatformUtils.GetTextWidth(textParams);\n};\n/*!\n * @typedef {object} SliceInfo\n * @property {int} start - 文字起始index\n * @property {int} end - 文字结束index\n * @property {int} width - 文字宽度\n */\n/*!\n * @typedef {object} TextInfo\n * @property {int} totalWidth - 文字整体宽度\n * @property {Array<SliceInfo>} sliceInfo - 每段文字的信息\n */\n/*!\n * 单行超长文字会切成多个div拼接, 由于jsview坐标的取整机制, 拼接出的width和文字width会产生误差, 此接口会返回拼接后的width\n *\n * @param {string} text 文字\n * @param {object} style 文字的css style\n * @return {TextInfo} 文字信息\n **/\nconst getOneLineTextDrawWidth = (text, style) => {\n const info = window.PlatformUtils.GetOneLineTextDrawWidth(\n text ?? \"\",\n style.fontFamily ?? Forge.TextUtils._sDefaultFont,\n style.fontSize ?? Forge.TextUtils._sDefaultFontSize,\n style.fontStyle === \"italic\" ? \"italic\" : \"\",\n style.fontWeight === \"bold\" ? \"bold\" : \"\"\n );\n const result = {\n totalWidth: info[0],\n sliceInfo: []\n };\n for (let i = 1; i < info.length; i += 3) {\n result.sliceInfo.push({\n start: info[i],\n end: info[i + 1],\n width: info[2 + 2]\n });\n }\n return result;\n};\nconst isRtl = (str) => {\n for (let i = 0; i < str.length; i++) {\n let c = str.charCodeAt(i);\n if (c != 32) {\n if (c >= 1536 && c <= 1791) {\n return true;\n } else {\n return false;\n }\n }\n }\n return false;\n};\nconst TextTools = {\n getOneLineTextDrawWidth,\n getTextWidth,\n isRtl\n};\n\n//!\n//! utils/JsViewVueTools/JsvPreDownloader.ts;\n//!\n/*! \n * JsvPreDownloader 通用下载器,可以在不同的环境中进行资源下载操作。\n * JsvPreDownloader.download:实例方法,根据传入参数来下载资源。支持单个url或者url列表,返回Promise对象。\n * 参数:\n * url {string | Array}: (必填)图片url\n * netSetting {string}: 网络设置\n * isImage {boolean} : 是否为图片 \n * \n * JsvPreDownloader.buildDownloadItem: 实例方法,创建预下载信息项。\n * 参数:\n * url {string}: (必填)图片url\n * netSetting {string}: 网络设置\n * isImage {boolean} : 是否为图片 \n * \n */\nconst TAG$1 = \"JSvPreDownload\";\nlet isNullNumber = 0;\nlet workNumber = 0;\nclass JsvPreDownloaderBase {\n download(url, netSetting = \"\", isImage = false) {\n return new Promise((resolve, reject) => {\n if (typeof url === \"string\") {\n this.downloadInner(url, netSetting, isImage).then(resolve, reject);\n } else if (Array.isArray(url) && url.length > 0) {\n const downloadResult = new Array(url.length);\n const check = () => {\n let allDone = false;\n let allSuccess = true;\n for (let i of downloadResult) {\n if (!i?.succeed) {\n allSuccess = false;\n }\n }\n if (isNullNumber + workNumber == url.length) {\n allDone = true;\n }\n if (allDone) {\n if (allSuccess) {\n resolve(downloadResult);\n } else {\n reject(downloadResult);\n }\n }\n };\n for (let i = 0; i < url.length; ++i) {\n if (url[i] == null || url[i].url == null) {\n downloadResult[i] = {\n succeed: false,\n info: {\n errorCode: 100,\n errorInfo: \"This item is null or url is null\",\n url: null\n }\n };\n isNullNumber += 1;\n } else {\n this.downloadInner(url[i].url, url[i].netSetting, !!url[i].isImage).then(\n (info) => {\n downloadResult[i] = {\n succeed: true,\n info\n };\n workNumber += 1;\n check();\n },\n (errorInfo) => {\n downloadResult[i] = {\n succeed: false,\n info: errorInfo\n };\n workNumber += 1;\n check();\n }\n );\n }\n }\n } else {\n console.error(TAG$1, \"download url invalid\", url);\n reject(\"download url invalid.\");\n }\n });\n }\n buildDownloadItem(url, netSetting = \"\", isImage = false) {\n const item = {\n url,\n netSetting,\n isImage\n };\n return item;\n }\n}\nclass JsvPreDownloaderInJsView extends JsvPreDownloaderBase {\n downloadInner(url, netSetting = \"\", isImage = false) {\n return new Promise((resolve, reject) => {\n if (typeof window.jJsvInnerUtils !== \"undefined\" && typeof window.jJsvInnerUtils.downloadResource) {\n const setting = {\n netSetting,\n fileType: isImage ? \"image\" : \"notImage\"\n };\n window.jJsvInnerUtils.downloadResource(url, JSON.stringify(setting), (info) => {\n try {\n const obj = JSON.parse(info);\n const result = JSON.parse(obj.info);\n if (obj.status == 0) {\n resolve(result);\n } else {\n console.warn(\"JsvPreDownload: download failed\", result);\n reject(result);\n }\n } catch (e) {\n reject(\"JsvPreDownload: parse callback info failed: \" + info);\n }\n });\n } else {\n console.error(\"JsvPreDownload: window.jJsvInnerUtils.downloadResource not exist.\");\n reject(\"window.jJsvInnerUtils.downloadResource not exist.\");\n }\n });\n }\n}\nclass JsvPreDownloaderInBrowser extends JsvPreDownloaderBase {\n downloadInner(url, netSetting = \"\", isImage = false) {\n return new Promise((resolve, reject) => {\n if (isImage) {\n const image = new Image();\n image.onload = () => {\n console.log(\"load image\");\n resolve({\n url,\n path: \"\",\n fileType: \"image\",\n imageSize: {\n width: image.width,\n height: image.height\n }\n });\n };\n image.onerror = () => {\n console.error(TAG$1, \"browser load image failed.\");\n reject({\n url,\n errorCode: -1,\n errorInfo: \"browser load image failed\"\n });\n };\n image.src = url;\n } else {\n resolve({\n url,\n path: \"\",\n fileType: \"notImage\"\n });\n }\n });\n }\n}\nconst exportObj = window.JsView ? JsvPreDownloaderInJsView : JsvPreDownloaderInBrowser;\nwindow.Test = exportObj;\n\n//!\n//! utils/JsViewVueTools/DefaultKeyMap.js;\n//!\n//! 10000以内的按键值同网页的键值,参照ASCII码\nconst DefaultKeyCodeMap = {\n Left: 37,\n Up: 38,\n Right: 39,\n Down: 40,\n Ok: 13,\n Back: 1e4,\n Menu: 10001\n};\n\n//!\n//! utils/JsViewVueTools/JsvDemoTester.js;\n//!\nlet interfaceLoaded = false;\nlet idGeneratoer = 1;\nlet idObjectMap = {};\nconst ensureInterface = () => {\n return new Promise((resolve, reject) => {\n if (interfaceLoaded) {\n resolve();\n return;\n }\n if (window.JsView) {\n let cb = () => {\n if (window.jJsvDemoTester) {\n console.log(\"window.jJsvDemoTester ready\");\n } else {\n console.log(\"window.jJsvDemoTester failed\");\n }\n console.log(\"remove cb=\" + cb);\n window.JsView.removeEventListener(cb);\n interfaceLoaded = true;\n resolve();\n };\n window.JsView.addEventListener(\"__DemoTesterReady\", cb);\n window.JsView.ensureTesterUtils();\n } else {\n interfaceLoaded = true;\n resolve();\n }\n });\n};\nconst enableNativeViewListener = (nativeViewId, info) => {\n let listenerId = idGeneratoer;\n idGeneratoer++;\n idObjectMap[listenerId] = {\n eventCallback: (ret) => {\n info.value = ret.info;\n console.log(`JsvDemoTester nativeView info=${info.value}`);\n }\n };\n (async () => {\n await ensureInterface();\n if (idObjectMap.hasOwnProperty(listenerId)) {\n let eventName = \"__enableNativeViewListener_\" + listenerId;\n window.JsView?.addEventListener(eventName, idObjectMap[listenerId].eventCallback);\n window.jJsvDemoTester?.enableNativeViewListener(nativeViewId, listenerId, eventName);\n }\n })();\n return listenerId;\n};\nconst disableNativeViewListener = (listenerId) => {\n (async () => {\n await ensureInterface();\n if (idObjectMap.hasOwnProperty(listenerId)) {\n window.JsView?.removeEventListener(idObjectMap[listenerId].eventCallback);\n window.jJsvDemoTester?.disableNativeViewListener(listenerId);\n delete idObjectMap[listenerId];\n } else {\n console.warn(\"disableNativeViewListener id gone\");\n }\n })();\n};\n\n//!\n//! utils/JsViewVueTools/JsvPerformance.ts;\n//!\nclass JsvPerformance {\n static posterSingleThreadDecode = false;\n static setPosterSingleThreadDecode(v) {\n JsvPerformance.posterSingleThreadDecode = v;\n }\n static getPosterSingleThreadDecode() {\n return JsvPerformance.posterSingleThreadDecode;\n }\n}\n\n//!\n//! utils/JsViewVueTools/JsvTextureStore/Store.ts;\n//!\nclass JsvTextureStore {\n textureMap = /* @__PURE__ */ new Map();\n constructor() {\n }\n addToStore(storeName, textureRef) {\n this.textureMap.set(storeName, textureRef);\n }\n getFromStore(storeName) {\n return this.textureMap.get(storeName);\n }\n removeFromStore(storeName) {\n if (this.textureMap.has(storeName)) {\n let textureBaseRef = this.textureMap.get(storeName);\n this.textureMap.delete(storeName);\n return textureBaseRef;\n } else {\n console.error(`Error: name=${storeName} not in map`);\n return void 0;\n }\n }\n}\nlet sStore = new JsvTextureStore();\n\n//!\n//! utils/JsViewVueTools/JsvTextureStore/Texture.ts;\n//!\nclass TextureBase {\n baseName = \"T\";\n textureRef = null;\n // Forge.ImageTexture\n storeName = \"\";\n constructor(baseName) {\n if (baseName) {\n this.baseName = baseName;\n }\n }\n addToStore() {\n this.storeName = `${this.baseName}-${this.textureRef?.GetTextureId()}`;\n sStore.addToStore(this.storeName, this);\n }\n /**\n * commit\n * 完成绘制设置,出发制作目标texture\n * \n * @return {String} BaseName-textureId 格式的名字,用于 jsvtexturestore:// 的访问链接\n */\n commit() {\n return this.storeName;\n }\n recycle() {\n let textureRef = sStore.removeFromStore(this.storeName);\n if (textureRef) {\n this.textureRef?.RequestToUnload();\n }\n }\n}\n\n//!\n//! utils/JsViewVueTools/JsvTextureStore/CanvasTexture/CommandList.ts;\n//!\nconst CMD_INVALID = 0;\n//! Canvas初始化\nconst CMD_ALLOC_CANVAS = 1;\n//! Paint初始化\nconst CMD_PREPARE_PAINT = 2;\n//! Path初始化\nconst CMD_PREPARE_PATH = 3;\n//! 绘制指令\nconst CMD_CLEAR_CANVAS = 10;\nconst CMD_DRAW_COLOR = 11;\nconst CMD_DRAW_CIRCLE_WITH_PAINT = 12;\nconst CMD_DRAW_RECT_WITH_PAINT = 13;\nconst CMD_DRAW_PATH_WITH_PAINT = 14;\nconst CMD_DRAW_LINE = 15;\nconst CMD_DRAW_LINEAR_GRADIENT_RECT = 16;\n//! Path的子命令\nconst PATH_CMD_MOVE_TO = 30;\nconst PATH_CMD_LINE_TO = 31;\nconst PATH_CMD_ARC_TO = 32;\nconst PATH_CMD_CLOSE = 33;\n\n//!\n//! utils/JsViewVueTools/JsvTextureStore/CanvasTexture/Path.ts;\n//!\nclass DrawingPath {\n drawCommandsRefs = [];\n finishedDraw = false;\n // 控制stroke和fill只能调用一次\n constructor(drawCmds) {\n this.drawCommandsRefs = drawCmds;\n }\n /**\n * stroke\n * 绘制边框\n * \n * @param {Number} lineWidth 描边的线宽\n * @param {String} color 颜色设定,例如rgba(red:0~255, green:0~255, blue:0~255, alpla:0~1.0), 或则 #AARRGGBB\n */\n stroke(lineWidth, color) {\n if (this.finishedDraw) {\n console.error(\"Error: path can only draw once\");\n return;\n }\n this.drawCommandsRefs.push({\n \"cmd\": CMD_PREPARE_PAINT,\n \"type\": \"stroke\",\n \"lineWidth\": lineWidth,\n \"clr\": color\n });\n this.onFinishDraw();\n this.finishedDraw = true;\n }\n /**\n * fill\n * 绘制填充\n * \n * @param {String} color 颜色设定,例如rgba(red:0~255, green:0~255, blue:0~255, alpla:0~1.0), 或则 #AARRGGBB\n */\n fill(color) {\n if (this.finishedDraw) {\n console.error(\"Error: path can only draw once\");\n return;\n }\n this.drawCommandsRefs.push({\n \"cmd\": CMD_PREPARE_PAINT,\n \"type\": \"fill\",\n \"clr\": color\n });\n this.onFinishDraw();\n this.finishedDraw = true;\n }\n onFinishDraw() {\n }\n}\nclass RectPath extends DrawingPath {\n rectLeft;\n rectTop;\n rectRight;\n rectBottom;\n constructor(drawCmds, left, top, right, bottom) {\n super(drawCmds);\n this.rectLeft = left;\n this.rectTop = top;\n this.rectRight = right;\n this.rectBottom = bottom;\n }\n // override\n onFinishDraw() {\n this.drawCommandsRefs.push({\n \"cmd\": CMD_DRAW_RECT_WITH_PAINT,\n \"left\": this.rectLeft,\n \"top\": this.rectTop,\n \"right\": this.rectRight,\n \"bottom\": this.rectBottom\n });\n }\n}\nclass CirclePath extends DrawingPath {\n circleCenterX;\n circleCenterY;\n circleRadius;\n constructor(drawCmds, centerX, centerY, radius) {\n super(drawCmds);\n this.circleCenterX = centerX;\n this.circleCenterY = centerY;\n this.circleRadius = radius;\n }\n // override\n onFinishDraw() {\n this.drawCommandsRefs.push({\n \"cmd\": CMD_DRAW_CIRCLE_WITH_PAINT,\n \"x\": this.circleCenterX,\n \"y\": this.circleCenterY,\n \"radius\": this.circleRadius\n });\n }\n}\nclass CustomPath extends DrawingPath {\n pathCommands = [];\n constructor(drawCmds) {\n super(drawCmds);\n }\n /**\n * moveTo\n * 将画笔移动到目标位置\n * \n * @param {Number} targetX 目标位置x\n * @param {Number} targetY 目标位置y\n */\n moveTo(targetX, targetY) {\n this.pathCommands?.push({\n \"cmd\": PATH_CMD_MOVE_TO,\n \"x\": targetX,\n \"y\": targetY\n });\n }\n /**\n * lineTo\n * 将画笔从当前位置到目标位置之间绘制一条直线\n * \n * @param {Number} targetX 目标位置x\n * @param {Number} targetY 目标位置y\n */\n lineTo(targetX, targetY) {\n this.pathCommands?.push({\n \"cmd\": PATH_CMD_LINE_TO,\n \"x\": targetX,\n \"y\": targetY\n });\n }\n /**\n * arcTo\n * 绘制以(left, top, right, bottom)围城的矩形为横轴比的椭圆圆弧\n * \n * @param {Number} left 定义椭圆区域的left\n * @param {Number} top 定义椭圆区域的top\n * @param {Number} right 定义椭圆区域的right\n * @param {Number} bottom 定义椭圆区域的bottom\n * @param {Number} startAngle 起始角度(例如30 = 30度)\n * @param {Number} sweepAngle 扫过的角度(例如要绘制半圆,则设置180)\n */\n arcTo(left, top, right, bottom, startAngle, sweepAngle) {\n this.pathCommands?.push({\n \"cmd\": PATH_CMD_ARC_TO,\n \"left\": left,\n \"top\": top,\n \"right\": right,\n \"bottom\": bottom,\n \"startAngle\": startAngle,\n \"sweepAngle\": sweepAngle\n });\n }\n /**\n * close\n * 到此为止的路径进行闭环\n */\n close() {\n this.pathCommands?.push({\n \"cmd\": PATH_CMD_CLOSE\n });\n }\n // override\n onFinishDraw() {\n if (this.pathCommands) {\n this.drawCommandsRefs.push({\n \"cmd\": CMD_PREPARE_PATH\n });\n this.drawCommandsRefs.push(...this.pathCommands);\n this.drawCommandsRefs.push({\n \"cmd\": CMD_DRAW_PATH_WITH_PAINT\n });\n this.pathCommands = null;\n }\n }\n}\n\n//!\n//! utils/JsViewVueTools/JsvTextureStore/CanvasTexture/CanvasTexture.ts;\n//!\nclass CanvasTexture extends TextureBase {\n drawCommands = [];\n commited = false;\n // commit只能执行一次, 执行过后无法再更改texture内容\n instantLoad = TextureInstantType.Sync;\n /**\n * canvasTexture\n * \n * @param {int} width 此Canvas画布的宽度\n * @param {int} height 此Canvas画布的高度\n * @param {String|null} baseName 可选, 访问名的前缀信息\n */\n constructor(width, height, baseName) {\n super(baseName);\n this.drawCommands?.push({\n \"cmd\": CMD_ALLOC_CANVAS,\n \"w\": width,\n \"h\": height\n });\n }\n /**\n * clearCanvas\n * 清空canvas\n */\n clearCanvas() {\n this.drawCommands?.push({\n \"cmd\": CMD_CLEAR_CANVAS\n });\n }\n /**\n * drawColor\n * 以给定颜色\n * \n * @param {String} color 颜色设定,例如rgba(red:0~255, green:0~255, blue:0~255, alpla:0~1.0), 或则 #AARRGGBB\n */\n drawColor(color) {\n this.drawCommands?.push({\n \"cmd\": CMD_DRAW_COLOR,\n \"clr\": color\n });\n }\n /**\n * customPath\n * 获得Path操作对象,\n * 在自定义绘制指令后,通过 stroke 或者 fill 来完成绘制\n * \n * @return {CustomPath}\n */\n customPath() {\n if (this.drawCommands) {\n return new CustomPath(this.drawCommands);\n } else {\n console.error(\"already commited\");\n return null;\n }\n }\n /**\n * rectPath\n * 获得RectPath操作对象,通过 stroke 或者 fill 来完成绘制\n * \n * @param {Number} left 矩形左上角left\n * @param {Number} top 矩形左上角top\n * @param {Number} right 矩形右下角right\n * @param {Number} bottom 矩形右下角bottom\n * @return {RectPath}\n */\n rectPath(left, top, right, bottom) {\n if (this.drawCommands) {\n return new RectPath(this.drawCommands, left, top, right, bottom);\n } else {\n console.error(\"already commited\");\n return null;\n }\n }\n /**\n * CirclePath\n * 获得CirclePath操作对象,通过 stroke 或者 fill 来完成绘制\n * \n * @param {Number} centerX 圆心x\n * @param {Number} centerY 圆心y\n * @param {Number} radius 圆半径\n * @return {CirclePath}\n */\n circlePath(centerX, centerY, radius) {\n if (this.drawCommands) {\n return new CirclePath(this.drawCommands, centerX, centerY, radius);\n } else {\n console.error(\"already commited\");\n return null;\n }\n }\n /**\n * drawLine\n * 绘制一条带有抗锯齿信息的直线\n * \n * @param {Number} fromX 绘制起点X\n * @param {Number} fromY 绘制起点Y\n * @param {Number} toX 绘制终点X\n * @param {Number} toY 绘制终点Y\n * @param {Number} lineWidth 线宽\n * @param {String} color 颜色设定,例如rgba(red:0~255, green:0~255, blue:0~255, alpla:0~1.0), 或则 #AARRGGBB\n */\n drawLine(fromX, fromY, toX, toY, lineWidth, color) {\n this.drawCommands?.push({\n \"cmd\": CMD_DRAW_LINE,\n \"x0\": fromX,\n \"y0\": fromY,\n \"x1\": toX,\n \"y1\": toY,\n \"lineWidth\": lineWidth,\n \"clr\": color\n });\n }\n /**\n * fillLinearGradient\n * 用渐变色填充一个矩形区域\n * \n * @param {int} fromX 绘制起点X\n * @param {int} fromY 绘制起点Y\n * @param {int} toX 绘制终点X\n * @param {int} toY 绘制终点Y\n * @param {Array<String>} colorArray 颜色设定的数组\n * @param {Array<double>} stopsArray 与color数组个数相同,颜色基准点位置\n */\n drawLinearGradientRect(fromX, fromY, toX, toY, colorArray, stopsArray) {\n if (!colorArray || !stopsArray || colorArray.length !== stopsArray.length) {\n console.error(\"CanvasTexture error: drawLinearGradientRect colorArray.length must be equal to stopsArray.length. Current array is:\", Array.from(colorArray), Array.from(stopsArray));\n return;\n }\n this.drawCommands?.push({\n \"cmd\": CMD_DRAW_LINEAR_GRADIENT_RECT,\n \"x0\": fromX,\n \"y0\": fromY,\n \"x1\": toX,\n \"y1\": toY,\n \"clrs\": colorArray,\n \"stops\": stopsArray\n });\n }\n /**\n * setAsyncLoad\n * texture异步加载,让界面不会卡顿\n * \n * @param {int} fromX 绘制起点X\n * @param {int} fromY 绘制起点Y\n * @param {int} toX 绘制终点X\n * @param {int} toY 绘制终点Y\n * @param {Array<String>} colorArray 颜色设定的数组\n * @param {Array<double>} stopsArray 与color数组个数相同,颜色基准点位置\n */\n setAsyncLoad() {\n this.instantLoad = TextureInstantType.Async;\n }\n // override\n commit() {\n if (!this.commited) {\n this.textureRef = handles.TextureManager.GetCanvasTexture(\n JSON.stringify(this.drawCommands),\n this.instantLoad\n );\n this.addToStore();\n this.commited = true;\n this.drawCommands = null;\n } else {\n console.error(\"Error: should not commit twice\");\n }\n return super.commit();\n }\n}\n\n//!\n//! utils/JsViewVueTools/JsvTextureStore/JsvTextureStore.ts;\n//!\n/*! \n * JsvTextureStoreApi\n * canvasTexture:\n * 创建texture(图片纹理)句柄, 通过 CanvasTexture 的API进行绘制, 使用注意以下几点\n * a. commit() 接口调用之前可以任意绘制, commit之后就无法更改, commit之后才能使用, commit后绘制内容会被全局保存\n * b. commit()的返回是其使用名称, 在div.backgroundImage和img.src中可使用, 格式: jsvtexturestore://commit返回名\n * c.【非常重要】CanvasTexture是全局管理, commit()之后 不会自动释放, 需要手动调用 deleteTexture, 其参数是commit的返回值\n * deleteTexture:\n * 删除全局保存的texture(图片纹理)\n * \n * CanvasTexture的接口(见 ./CanvasTexture/CanvasTexture.ts 的函数头):\n * Path类型: 例如 rectPath, circlePath (见 ./CanvasTexture/Path.ts 的函数头)\n * 通过 canvasTexture.xxxPath() 获得一个path操作对象,然后通过其接口进行游标运动形成绘制路径\n * Path.fill() 或者 Path.stroke 调用前可以移动游标进行路径规划, 一旦fill或者stroke后就不能更改了。\n * 非Path接口: 完成单一绘制动作,例如drawLine, drawColor\n */\nlet sJsvTextureConst = {\n LEFT: 1,\n TOP: 2,\n RIGHT: 3,\n BOTTOM: 4\n};\nlet sTextureStoreApi = {\n /**\n * canvasTexture\n * 创建CanvasTexture句柄,执行commit()后, 获取访问名(访问名规则: 输入参数 baseName + 分配id)\n * 可以在 img.src 或者 div.backgroundImage 通过 \"texturestore://访问名\"\n * \n * @param {int} width 此Canvas画布的宽度\n * @param {int} height 此Canvas画布的高度\n * @param {String|null} baseName 可选, 访问名的前缀信息\n * @return {CanvasTexture}\n */\n canvasTexture: (width, height, baseName) => {\n return new CanvasTexture(width, height, baseName);\n },\n /**\n * deleteTexture\n * 删除commit后的texture\n * \n * @param {String} storeName 此Texture的应用名称, 是canvasTexture.commit()后的返回值\n */\n deleteTexture: (storeName) => {\n let textureRef = sStore.getFromStore(storeName);\n if (textureRef) {\n textureRef.recycle();\n }\n }\n};\n\n//!\n//! utils/JsViewVueTools/index.js;\n//!\n\n//!\n//! utils/JsViewVueWidget/JsvMarquee.vue;\n//!\n/*! <!--\n * 【模块 export 内容】\n * JsvMarquee:Vue高阶组件,文字跑马灯\n * props说明:\n * text {String} 文字内容\n * style {Object} 样式\n * slideSpeed {int} 滚动速度 px/s, 默认60\n * slideDirection{String} 滚动方向 ste(start to end)/ets(end to start)/ltr/rtl\n * forceSlide {boolean} 短文字是否滚动,默认false\n * timeGap {int} 每次完整移动的时间间隔 单位:ms\n * textGap {int} 两屏之间的文字宽度间隔。 \n * 说明\n * JsvMarquee会识别阿拉伯字符自动设置direction\n-->\n\n\n\n\n */\nconst _sfc_main$i = {\n __name: \"JsvMarquee\",\n props: {\n text: {\n type: String,\n default: \"\"\n },\n style: {\n type: Object,\n default() {\n return {\n left: 0,\n top: 0,\n width: 0,\n height: 20,\n color: \"rgba(255,255,255,1.0)\",\n fontSize: 10,\n textAlign: \"start\",\n lineHeight: 20,\n whiteSpace: \"nowrap\",\n direction: \"ltr\"\n };\n }\n },\n slideSpeed: {\n type: Number,\n default: 60\n },\n slideDirection: {\n type: String,\n validator(value) {\n return [\"ste\", \"ets\", \"ltr\", \"rtl\"].includes(value);\n },\n default: \"ste\"\n },\n forceSlide: {\n type: Boolean,\n default: false\n },\n timeGap: {\n type: Number,\n default: 1e3\n },\n textGap: {\n type: Number\n }\n },\n setup(__props) {\n const props = __props;\n const defaultFontStyle = () => {\n return {\n color: \"rgba(255,255,255,1.0)\",\n fontSize: 10,\n textAlign: \"start\",\n whiteSpace: \"nowrap\",\n direction: \"ltr\"\n };\n };\n let myTextGap = shallowRef(0);\n if (props.textGap == void 0) {\n myTextGap.value = props.style.width;\n } else {\n myTextGap.value = props.textGap;\n }\n const text1 = shallowRef(props.text);\n const text2 = shallowRef(null);\n const slideDiv = shallowRef(null);\n const slideDiv2 = shallowRef(null);\n const textDiv = shallowRef(null);\n const textDiv2 = shallowRef(null);\n const MoreLong = shallowRef(false);\n const longWidth2 = shallowRef(0);\n const rightLeft = shallowRef(0);\n const noSlide = shallowRef(false);\n const normalSlide = shallowRef(false);\n let animIdleHandler = -1;\n let myTextLeft = shallowRef(0);\n const _direction = computed(() => {\n if (props.style?.direction == \"rtl\" || props.style.direction == \"ltr\") {\n return props.style.direction;\n } else {\n return TextTools.isRtl(props.text) ? \"rtl\" : \"ltr\";\n }\n });\n const fontStyle = computed(() => {\n let { top, width, height, ...rest } = props.style;\n let r = defaultFontStyle();\n Object.assign(r, rest);\n if (props.forceSlide) {\n r.textAlign = \"start\";\n }\n r.direction = _direction.value;\n return r;\n });\n let textWidth = shallowRef(getTextWidth(props.text, fontStyle.value));\n const slideDivLeft = computed(\n () => fontStyle.value.direction == \"rtl\" ? 0 : 0\n );\n const sureNum = () => {\n if (textWidth.value > 2.5 * props.style.width) {\n MoreLong.value = true;\n noSlide.value = false;\n normalSlide.value = false;\n let halfLength = Math.floor(props.text.length / 2);\n text1.value = props.text.slice(0, halfLength);\n text2.value = props.text.slice(halfLength);\n textWidth.value = TextTools.getOneLineTextDrawWidth(\n text1.value,\n fontStyle.value\n ).totalWidth;\n longWidth2.value = TextTools.getOneLineTextDrawWidth(text2.value, fontStyle.value).totalWidth + myTextGap.value;\n if (_direction.value == \"rtl\") {\n myTextLeft.value = props.style.width - textWidth.value;\n } else {\n myTextLeft.value = 0;\n }\n } else if (textWidth.value + myTextGap.value < props.style.width) {\n text1.value = props.text;\n text2.value = null;\n noSlide.value = true;\n MoreLong.value = false;\n normalSlide.value = false;\n } else if (props.forceSlide || textWidth.value < 2.5 * props.style.width && textWidth.value > props.style.width) {\n textWidth.value = textWidth.value + myTextGap.value;\n text1.value = props.text;\n text2.value = props.text;\n MoreLong.value = false;\n noSlide.value = false;\n normalSlide.value = true;\n if (TextTools.getOneLineTextDrawWidth(props.text, fontStyle.value).totalWidth > props.style.width) {\n if (_direction.value == \"rtl\") {\n myTextLeft.value = props.style.width - textWidth.value + myTextGap.value;\n } else {\n myTextLeft.value = 0;\n }\n } else {\n myTextLeft.value = 0;\n }\n } else {\n text1.value = props.text;\n text2.value = null;\n noSlide.value = true;\n MoreLong.value = false;\n normalSlide.value = false;\n }\n };\n sureNum();\n const baseSlide = (refObj, startPos, endPos, callback) => {\n const anim = new Forge$1.TranslateFrameAnimation(\n startPos,\n endPos,\n props.slideSpeed,\n true,\n 0,\n 0\n );\n anim.SetAnimationListener(\n new Forge$1.AnimationListener(\n null,\n (ended) => {\n if (ended) {\n callback?.();\n }\n },\n null\n )\n );\n anim.Enable(Forge$1.AnimationEnable.ReleaseAfterEndCallback);\n toRaw(refObj.value)?.jsvGetProxyView(true).StartAnimation(anim);\n };\n const slideTimer = () => {\n animIdleHandler = -1;\n animIdleHandler = setTimeout(() => {\n if (_direction.value == \"ltr\" && props.slideDirection == \"ste\") {\n slideAllStep();\n } else if (_direction.value == \"ltr\" && props.slideDirection == \"ets\") {\n slideAllStepTurn();\n } else if (_direction.value == \"rtl\" && props.slideDirection == \"ste\") {\n slideAllStep2();\n } else if (_direction.value == \"rtl\" && props.slideDirection == \"ets\") {\n slideAllStep2Turn();\n }\n }, props.timeGap);\n };\n const longSlideTimer = () => {\n animIdleHandler = -1;\n animIdleHandler = setTimeout(() => {\n if (_direction.value == \"ltr\" && props.slideDirection == \"ste\") {\n slideAllStepLong();\n } else if (_direction.value == \"ltr\" && props.slideDirection == \"ets\") {\n slideAllStepLongTurn();\n } else if (_direction.value == \"rtl\" && props.slideDirection == \"ste\") {\n slideAllStep2Long();\n } else if (_direction.value == \"rtl\" && props.slideDirection == \"ets\") {\n slideAllStep2LongTurn();\n }\n }, props.timeGap);\n };\n const slideAllStep = () => {\n baseSlide(slideDiv, 0, -textWidth.value, null);\n baseSlide(slideDiv2, 0, -textWidth.value, slideTimer);\n };\n const slideAllStepTurn = () => {\n baseSlide(slideDiv, 0, textWidth.value, null);\n baseSlide(slideDiv2, -2 * textWidth.value, -textWidth.value, slideTimer);\n };\n const slideAllStep2 = () => {\n baseSlide(slideDiv, 0, textWidth.value, null);\n baseSlide(slideDiv2, 0, textWidth.value, slideTimer);\n };\n const slideAllStep2Turn = () => {\n baseSlide(slideDiv, 0, -textWidth.value, null);\n baseSlide(slideDiv2, 2 * textWidth.value, textWidth.value, slideTimer);\n };\n const slideAllStepLong = () => {\n baseSlide(slideDiv, 0, -textWidth.value, () => {\n baseSlide(slideDiv, longWidth2.value, 0, longSlideTimer);\n });\n baseSlide(slideDiv2, 0, -(longWidth2.value + textWidth.value), null);\n };\n const slideAllStepLongTurn = () => {\n baseSlide(slideDiv, 0, textWidth.value, () => {\n baseSlide(slideDiv, -longWidth2.value, 0, longSlideTimer);\n });\n baseSlide(slideDiv2, -(longWidth2.value + textWidth.value), 0, null);\n };\n const slideAllStep2Long = () => {\n baseSlide(slideDiv, 0, textWidth.value, () => {\n baseSlide(slideDiv, -longWidth2.value, 0, longSlideTimer);\n });\n baseSlide(slideDiv2, 0, longWidth2.value + textWidth.value, null);\n };\n const slideAllStep2LongTurn = () => {\n baseSlide(slideDiv, 0, -textWidth.value, () => {\n baseSlide(slideDiv, longWidth2.value, 0, longSlideTimer);\n });\n baseSlide(slideDiv2, longWidth2.value + textWidth.value, 0, null);\n };\n const stopSlide = () => {\n if (animIdleHandler > 0) {\n clearTimeout(animIdleHandler);\n animIdleHandler = -1;\n }\n toRaw(slideDiv.value?.jsvGetProxyView(true))?.StopAnimation();\n toRaw(slideDiv2.value?.jsvGetProxyView(true))?.StopAnimation();\n };\n const commonFailState = () => {\n if (props.forceSlide) {\n console.error(\"请注意文字长度和间隙加起来必须大于组件宽度\");\n text1.value = props.text;\n } else {\n text1.value = props.text;\n }\n };\n const commonState = (callback1, callback2) => {\n if (props.slideDirection == \"ets\") {\n callback1();\n } else {\n callback2();\n }\n };\n const stateCallback = (old_h, new_h, old_v, new_v) => {\n if (new_h || new_v) {\n runAnimation();\n } else if (!new_h && !new_v) {\n stopSlide();\n }\n };\n const runAnimation = () => {\n if (fontStyle.value.direction == \"ltr\") {\n if (MoreLong.value) {\n commonState(slideAllStepLongTurn, slideAllStepLong);\n } else if (noSlide.value) {\n commonFailState();\n } else if (normalSlide.value) {\n commonState(slideAllStepTurn, slideAllStep);\n } else {\n text1.value = props.text;\n }\n } else {\n if (MoreLong.value) {\n commonState(slideAllStep2LongTurn, slideAllStep2Long);\n rightLeft.value = slideDivLeft.value - longWidth2.value + myTextGap.value;\n } else if (noSlide.value) {\n commonFailState();\n } else if (normalSlide.value) {\n commonState(slideAllStep2Turn, slideAllStep2);\n rightLeft.value = slideDivLeft.value - textWidth.value;\n } else {\n text1.value = props.text;\n }\n }\n };\n let ComparingText = \"\";\n watchEffect(() => {\n if (props.text !== ComparingText) {\n ComparingText = props.text;\n const newText = props.text;\n const newTextGap = props.textGap;\n const newTextWidth = TextTools.getOneLineTextDrawWidth(\n newText,\n fontStyle.value\n ).totalWidth;\n textWidth.value = newTextWidth;\n myTextGap.value = newTextGap == void 0 ? myTextGap.value : newTextGap;\n sureNum();\n stopSlide();\n runAnimation();\n }\n });\n onBeforeUnmount(() => {\n stopSlide();\n });\n return (_ctx, _cache) => {\n return openBlock(), createBlock(unref(JsvVisibleSensor), {\n horizonShown: 1,\n verticalShown: 1,\n left: props.style.left,\n top: props.style.top,\n width: props.style.width,\n height: props.style.height,\n container: null,\n callback: stateCallback\n }, {\n default: withCtx(() => [\n createElementVNode(\"div\", {\n style: normalizeStyle({\n left: 0,\n top: 0,\n width: __props.style.width,\n height: __props.style.height,\n overflow: \"hidden\"\n })\n }, [\n createElementVNode(\"div\", {\n ref_key: \"slideDiv\",\n ref: slideDiv,\n style: normalizeStyle({\n left: unref(slideDivLeft),\n top: 0,\n width: __props.style.width,\n height: __props.style.height\n })\n }, [\n createElementVNode(\"div\", {\n ref_key: \"textDiv\",\n ref: textDiv,\n style: normalizeStyle({\n ...unref(fontStyle),\n height: __props.style.height,\n JsvTextAlignMinWidth: __props.style.width,\n left: unref(myTextLeft),\n top: 0\n })\n }, toDisplayString(unref(text1)), 5)\n ], 4),\n createElementVNode(\"div\", {\n ref_key: \"slideDiv2\",\n ref: slideDiv2,\n style: normalizeStyle({\n left: unref(_direction) == \"ltr\" ? unref(textWidth) : unref(rightLeft),\n top: 0,\n width: unref(MoreLong) ? unref(longWidth2) - unref(myTextGap) : __props.style.width,\n height: __props.style.height\n })\n }, [\n createElementVNode(\"div\", {\n ref_key: \"textDiv2\",\n ref: textDiv2,\n style: normalizeStyle({\n ...unref(fontStyle),\n height: __props.style.height,\n left: unref(myTextLeft),\n top: 0,\n JsvTextAlignMinWidth: unref(MoreLong) ? unref(longWidth2) - unref(myTextGap) : __props.style.width\n })\n }, toDisplayString(unref(text2)), 5)\n ], 4)\n ], 4)\n ]),\n _: 1\n }, 8, [\"left\", \"top\", \"width\", \"height\"]);\n };\n }\n};\n\n//!\n//! utils/JsViewVueWidget/JsvMaskClipDiv.vue;\n//!\n/*! <!--\n *\n * JsvMaskClipDiv:蒙版遮罩处理组件\n * props说明:\n * style {Object} 布局样式(必需),样式对象内容为{left:0, top:0, width:xxx, height:xxx},\n * maskSrc {string/URL} 蒙版图片,可为URL字符串,或者通过import进来的图片引用\n * viewSrc {string/URL} 被遮罩的图片,可为URL字符串,或者通过import进来的图片引用\n * maskTop {double} 蒙版相对于被遮罩图片的左上角Y定位,单位为百分比(Y坐标 / 被遮罩图片的高)\n * maskLeft {double} 蒙版相对于被遮罩图片的左上角X定位,单位为百分比(X坐标 / 被遮罩图片的宽)\n * maskWidth {double} 蒙版相对于被遮罩图片宽度的百分比(蒙版的宽度 / 被遮罩图片的宽)\n * maskHeight{double} 蒙版相对于被遮罩图片高度的百分比(蒙版的高度 / 被遮罩图片的宽)\n *\n-->\n\n\n\n */\nconst _sfc_main$h = {\n props: {\n class: {\n type: String\n },\n style: {\n type: [Array, Object]\n },\n maskSrc: {\n type: String\n },\n viewSrc: {\n type: String\n },\n maskTop: {\n type: Number\n },\n maskBottom: {\n type: Number\n },\n maskLeft: {\n type: Number\n },\n maskRight: {\n type: Number\n },\n maskWidth: {\n type: Number\n },\n maskHeight: {\n type: Number\n }\n },\n setup() {\n return {\n innerView: null,\n innerViewId: -1,\n styleDetail: null,\n html: !window.JsView,\n cache: {\n viewSrc: null,\n maskSrc: null,\n maskTop: 0,\n maskLeft: 0,\n maskWidth: 0,\n maskHeight: 0,\n styleList: null\n }\n };\n },\n methods: {\n _drawClip(canvas, clip_image, clip_ready, bg_image, bg_ready) {\n const ctx = canvas.getContext(\"2d\");\n if (!clip_ready || !bg_ready) {\n return;\n }\n const canvasW = this.maskWidth * bg_image.width;\n const canvasH = this.maskHeight * bg_image.height;\n canvas.width = canvasW;\n canvas.height = canvasH;\n ctx.drawImage(clip_image, 0, 0, canvasW, canvasH);\n ctx.globalCompositeOperation = \"source-atop\";\n ctx.drawImage(\n bg_image,\n -this.maskLeft * bg_image.width,\n -this.maskTop * bg_image.height,\n bg_image.width,\n bg_image.height\n );\n console.log(`w=${bg_image.width} h=${bg_image.height}`);\n },\n updateMainTexturePosition() {\n const scale_width = 1 / this.maskWidth;\n const scale_height = 1 / this.maskHeight;\n const move_x = -this.maskLeft;\n const move_y = this.maskTop;\n this.innerView.ResetTextureCssTransform(\n `scale3d(${scale_width},${scale_height},1) translate3d(${move_x}px,-${move_y}px,0)`,\n \"left top\"\n );\n this.cache.maskTop = this.maskTop;\n this.cache.maskLeft = this.maskLeft;\n this.cache.maskWidth = this.maskWidth;\n this.cache.maskHeight = this.maskHeight;\n },\n _initForHtml() {\n let _this = this;\n this.$refs.innerViewDiv?.jsvGetProxyView(true).RegisterOnProxyReady(() => {\n const canvas = window.originDocument.createElement(\"canvas\");\n canvas.style.width = _this.style.width + \"px\";\n canvas.style.height = _this.style.height + \"px\";\n _this.$refs.innerViewDiv?.jsvGetProxyView(true).HtmlGetElement().appendChild(canvas);\n const clip_image = new Image();\n const bg_image = new Image();\n clip_image.src = _this.maskSrc;\n bg_image.src = _this.viewSrc;\n let clip_ready = false;\n let bg_ready = false;\n clip_image.onload = () => {\n clip_ready = true;\n _this._drawClip(canvas, clip_image, clip_ready, bg_image, bg_ready);\n };\n bg_image.onload = () => {\n bg_ready = true;\n _this._drawClip(canvas, clip_image, clip_ready, bg_image, bg_ready);\n };\n });\n },\n _updateInnerView() {\n if (this.innerView === null) {\n this.innerView = new Forge$1.LayoutView();\n this.innerViewId = Forge$1.sViewStore.add(\n new Forge$1.ViewInfo(this.innerView, null)\n );\n }\n if (this.viewSrc !== this.cache.viewSrc || this.maskSrc !== this.cache.maskSrc) {\n ForgeExtension.SetMaskedBackgroundImage(\n this.innerView,\n this.viewSrc,\n this.maskSrc\n );\n this.cache.viewSrc = this.viewSrc;\n this.cache.maskSrc = this.maskSrc;\n }\n this.innerView.ResetLayoutParams({\n width: this.style.width,\n height: this.style.height\n });\n if (this.maskTop !== this.cache.maskTop || this.maskLeft !== this.cache.maskLeft || this.maskWidth !== this.cache.maskWidth || this.maskHeight !== this.cache.maskHeight) {\n this.updateMainTexturePosition();\n }\n }\n },\n created() {\n if (window.JsView) {\n this._updateInnerView();\n }\n },\n mounted() {\n if (!window.JsView) {\n this._initForHtml();\n }\n },\n updated() {\n if (window.JsView) {\n this._updateInnerView();\n }\n },\n beforeUnmount() {\n if (this.innerViewId !== -1) {\n Forge$1.sViewStore.remove(this.innerViewId);\n this.innerViewId = -1;\n this.innerView = null;\n }\n }\n};\nfunction _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) {\n return $setup.html ? (openBlock(), createElementBlock(\"div\", {\n key: 0,\n ref: \"innerViewDiv\",\n style: normalizeStyle({\n top: $props.style.top,\n left: $props.style.left\n })\n }, null, 4)) : (openBlock(), createElementBlock(\"div\", {\n key: 1,\n \"data-jsv-vw-innerview\": $setup.innerViewId,\n style: normalizeStyle({\n top: $props.style.top,\n left: $props.style.left,\n width: $props.style.width,\n height: $props.style.height\n })\n }, null, 12, [\"data-jsv-vw-innerview\"]));\n}\nconst JsvMaskClipDiv = /* @__PURE__ */ _export_sfc(_sfc_main$h, [[\"render\", _sfc_render$2]]);\n\n//!\n//! utils/JsViewVueWidget/JsvNinePatch.vue;\n//!\n/*! <!--\n * 【模块 export 内容】\n * JsvNinePatch:Vue高阶组件,.9图展示控件,该控件的原图要求为正方形,延展后可为长方形\n * props说明:\n * style {Object} 同div的Style,通过width/height来控制.9图片延展后的显示尺寸,另外通过top/left控制坐标\n * imageUrl {String} (必填)显示图片的加载地址\n * imageWidth {int} (必填)原图信息: 原图的宽度(由于正方形,宽高相同)\n * contentWidth {int} (废弃)此值为了兼容,会赋值给centerWidth\n * centerWidth {int} (必填)原图信息: .9图的中心区域宽度(repeat区域)\n * imageDspWidth {int} 原图缩放后的显示宽度,计算方法: \n * 四角为90度圆弧时: imageDspWidth = 显示图形的圆弧半径 / 原图中圆弧的半径 * 原图宽度\n * 原图中圆弧半径 = (原图宽度 - borderOutset * 2) / 2\n * 四角为其他形状时,原图.9图的四角区域,缩放到要和显示图形重合后的宽度。\n * borderOutset {int} (必填)原图信息: 图片边缘到中心内容区域边缘的距离, 快速计算: (原图宽度 - 原图中放内容宽度) / 2\n * animTime {int} (必填)缩放动画的时长(单位秒)\n * waitForInit {boolean} (选填)尺寸为0时是否进行描画(例如: 首次显示不展示动画的场合,设置为true),默认值为true\n * onTransitionEnd { Function } (选填)transition动画结束的回调\n-->\n\n\n\n\n */\nconst _sfc_main$g = {\n __name: \"JsvNinePatch\",\n props: {\n style: {\n type: Object,\n default: () => {\n return {};\n }\n },\n top: { type: Number, default: 0 },\n left: { type: Number, default: 0 },\n waitForInit: { type: Boolean, default: true },\n imageUrl: { type: String, required: true },\n imageWidth: { type: Number, required: true },\n imageDspWidth: { type: Number, default: 0 },\n contentWidth: { type: Number, default: -1 },\n centerWidth: { type: Number, default: -1, required: true },\n borderOutset: { type: Number, required: true },\n animTime: { type: Number, default: 0 },\n onTransitionEnd: { type: Function },\n animation: { type: String }\n },\n setup(__props) {\n const props = __props;\n const isReady = () => {\n if (!props.waitForInit) {\n return true;\n }\n return props.style && props.style.width !== 0 && props.style.height !== 0;\n };\n const getTransition = () => {\n let transition = \"\";\n if (props.animTime && props.animTime > 0) {\n transition = `left ${props.animTime}s, top ${props.animTime}s, width ${props.animTime}s, height ${props.animTime}s`;\n }\n return transition;\n };\n let centerWidth = props.contentWidth > 0 ? props.contentWidth : 1;\n if (props.centerWidth >= 0) {\n centerWidth = props.centerWidth > 0 ? props.centerWidth : 1;\n }\n const imageDspWidthInner = computed(\n () => props.imageDspWidth > 0 ? props.imageDspWidth : props.imageWidth\n );\n const sliceWidth = ref(\n Math.ceil(Math.max(0, (props.imageWidth - centerWidth) / 2))\n );\n const borderDspWidth = ref(\n Math.ceil(sliceWidth.value * imageDspWidthInner.value / props.imageWidth)\n );\n const convertedBorderOutset = ref(\n Math.ceil(props.borderOutset * imageDspWidthInner.value / props.imageWidth)\n );\n watchEffect(() => {\n if (props.style?.width && props.style.width <= imageDspWidthInner.value || props.style?.height && props.style.height <= imageDspWidthInner.value) {\n console.warn(\n \"JsvNinePatch: style size must be larger than imageDspWidth. style is\",\n props.style,\n \"imageDspWidth is\",\n imageDspWidthInner.value\n );\n }\n });\n return (_ctx, _cache) => {\n return isReady() ? (openBlock(), createElementBlock(\"div\", {\n key: 0,\n style: normalizeStyle({\n ...__props.style,\n transition: !!__props.animation ? null : getTransition(),\n animation: __props.animation,\n borderImage: `url(${__props.imageUrl}) ${sliceWidth.value} fill`,\n borderImageWidth: `${borderDspWidth.value}px`,\n borderImageOutset: `${convertedBorderOutset.value}px`\n }),\n onTransitionend: _cache[0] || (_cache[0] = (...args) => props.onTransitionEnd && props.onTransitionEnd(...args))\n }, null, 36)) : createCommentVNode(\"\", true);\n };\n }\n};\n\n//!\n//! utils/JsViewVueWidget/JsvPosterDiv.vue;\n//!\n/*! <!--\n * 【模块 export 内容】\n * JsvPosterDiv:Vue高阶组件,海报描画\n * props说明:\n * style {Object} 包含\n * left/top/width/height\n * border-radius\n * backgroundImage/backgroundColor \n * 的style设置\n-->\n\n\n\n */\nconst _sfc_main$f = {\n __name: \"JsvPosterDiv\",\n props: {\n style: Object\n },\n setup(__props) {\n const props = __props;\n let common_style = reactive({});\n let image_style = reactive({});\n watchEffect(() => {\n if (props.style) {\n let { left, top, width, height, ...others } = props.style;\n common_style.left = left;\n common_style.top = top;\n image_style.width = width;\n image_style.height = height;\n Object.assign(image_style, others);\n }\n });\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", {\n style: normalizeStyle(unref(common_style))\n }, [\n renderSlot(_ctx.$slots, \"default\"),\n createElementVNode(\"div\", mergeProps({\n \"data-jsv-vw-enable-fade\": \"true\",\n \"data-jsv-vw-mask-poster-on-top\": \"true\",\n style: unref(image_style)\n }, _ctx.$attrs), null, 16)\n ], 4);\n };\n }\n};\n\n//!\n//! utils/JsViewVueWidget/JsvPosterImage.vue;\n//!\n/*! <!--\n * 【模块 export 内容】\n * JsvPosterImage:Vue高阶组件,海报描画,可设置color space 和 texture size\n * props说明:\n * colorSpace {String} 颜色空间,默认RGBA_8888\n * style {Object} 包含left/top/width/height/border-radius的style设置\n * imageCompress {boolean} 是否压缩图片, 默认打开\n-->\n\n\n\n\n */\nconst _sfc_main$e = {\n __name: \"JsvPosterImage\",\n props: {\n colorSpace: {\n type: String,\n default: \"RGBA_8888\"\n },\n imageCompress: {\n type: Boolean,\n default: true\n },\n isPosterImage: {\n type: Boolean,\n default: true\n },\n fadeIn: {\n type: Boolean,\n default: true\n },\n src: {\n type: String,\n default: null\n },\n style: Object\n },\n setup(__props) {\n const props = __props;\n const scaleddown = computed(() => {\n return props.imageCompress ? \"true\" : \"false\";\n });\n const isPosterImage = computed(() => {\n return JsvPerformance.getPosterSingleThreadDecode() || props.isPosterImage ? \"true\" : \"false\";\n });\n let common_style = reactive({});\n let image_style = reactive({});\n let show_background_holder = !!window.JsView;\n watchEffect(() => {\n if (props.style) {\n let { left, top, width, height, backgroundImage, backgroundColor, ...others } = props.style;\n common_style.left = left;\n common_style.top = top;\n image_style.width = width;\n image_style.height = height;\n Object.assign(image_style, others);\n }\n });\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", {\n style: normalizeStyle(unref(common_style))\n }, [\n unref(show_background_holder) ? renderSlot(_ctx.$slots, \"default\", { key: 0 }) : createCommentVNode(\"\", true),\n !!props.src ? (openBlock(), createElementBlock(\"img\", mergeProps({\n key: 1,\n \"data-jsv-vw-enable-fade\": props.fadeIn,\n \"data-jsv-vw-mask-poster-on-top\": \"true\",\n \"data-jsv-img-scaledown-tex\": unref(scaleddown),\n \"data-jsv-img-color-space\": __props.colorSpace,\n \"data-jsv-img-poster-image\": unref(isPosterImage),\n style: unref(image_style),\n src: props.src\n }, _ctx.$attrs), null, 16, [\"data-jsv-vw-enable-fade\", \"data-jsv-img-scaledown-tex\", \"data-jsv-img-color-space\", \"data-jsv-img-poster-image\", \"src\"])) : createCommentVNode(\"\", true)\n ], 4);\n };\n }\n};\n\n//!\n//! utils/JsViewVueWidget/JsvScaleTextBox.vue;\n//!\n/*! <!--\n * 【控件介绍】\n * JsvScaleTextBox:\n * 创建一个div,可以控制其内部的文字图层的清晰度,\n * 当文字被放大(例如焦点所在位置放大效果)时发现文字显示模糊的场景,\n * 将这些文字都放入到本控件中,设置scale属性等于文字的缩放大小,即可解决显示清晰问题。\n *\n * prop说明:\n * definitionScale 内部文字被放大的倍数,写法为\"1.0x\", \"1.6x\"\n * 其他 同div的其他props,例如style, class等\n-->\n\n\n */\nconst _sfc_main$d = {\n props: {\n definitionScale: {\n type: String\n }\n }\n};\nfunction _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"div\", { \"data-jsv-vw-text-definition\": $props.definitionScale }, [\n renderSlot(_ctx.$slots, \"default\")\n ], 8, [\"data-jsv-vw-text-definition\"]);\n}\nconst JsvScaleTextBox = /* @__PURE__ */ _export_sfc(_sfc_main$d, [[\"render\", _sfc_render$1]]);\n\n//!\n//! utils/JsViewVueWidget/JsvSoundPool.js;\n//!\n/*!\n * 【模块 export 内容】\n * JsvSoundPool: 面向对象的类,用于播放效果音,创建JsvSoundPool对象后通过request的回调获得AudioController句柄后进行控制\n * 功能函数: (参数说明见函数本体)\n * constructor(max)\n * 功能: 构造JsvSoundPool,构造后需要destroy进行资源释放\n * request(url, netSetting, priority, callback)\n * 功能: 创建加载指定音轨(url)的控制器(AudioController),在回调中获得AudioController\n * release(controller)\n * 功能: 释放指定AudioController资源\n * destroy()\n * 功能: 释放JsvSoundPool管理的所有资源\n * autoPause()\n * 功能: 暂停当前Pool中所有正在播放的音轨\n * autoResume()\n * 功能: 播放当前Pool中所有暂停掉的音轨\n * AudioController:\n * 功能函数: (参数说明见函数本体)\n * play()\n * 功能: 播放当前音轨,与stop()配套\n * pause()\n * 功能: 暂停当前音轨,与resume()配套\n * stop()\n * 功能: 停止当前音轨,与play()配套\n * resume()\n * 功能: 恢复当前音轨播放,与pause()配套\n * setRate(rate)\n * 功能: 当前播放速率\n * setVolume(leftVolume, rightVolume)\n * 功能: 调整音量\n * setLoop(loop)\n * 功能: 设置是否进行循环和循环次数\n * setPriority(priority)\n * 功能: 设置播放优先级\n */\nconst supportSoundPool = !!window.SoundPool;\nclass AudioController {\n constructor(soundPool, soundId, url) {\n this._SoundPool = soundPool;\n this._SoundId = soundId;\n this._Url = url;\n this._StreamId = -1;\n this._Rate = 1;\n this._Loop = 0;\n this._LeftVolume = 1;\n this._RightVolume = 1;\n this._Priority = 0;\n }\n /**\n * @description: 播放音频\n */\n play() {\n if (this._StreamId !== -1) {\n this._SoundPool.stop(this._StreamId);\n }\n this._StreamId = this._SoundPool.play(this._SoundId, this._LeftVolume, this._RightVolume, this._Priority, this._Loop, this._Rate);\n }\n /**\n * @description: 暂停音频(Android4.0不支持)\n */\n pause() {\n if (this._StreamId !== -1) {\n this._SoundPool.pause(this._StreamId);\n }\n }\n /**\n * @description: 恢复播放音频(Android4.0不支持)\n */\n resume() {\n if (this._StreamId !== -1) {\n this._SoundPool.resume(this._StreamId);\n }\n }\n /**\n * @description: 停止音频(Android4.0不支持)\n */\n stop() {\n if (this._StreamId !== -1) {\n this._SoundPool.stop(this._StreamId);\n this._StreamId = -1;\n }\n }\n /**\n * @description: 设置播放速度\n * @param {float} rate 播放的倍率\n */\n setRate(rate) {\n this._Rate = rate;\n if (this._Streamid !== -1) {\n this._SoundPool.setRate(this._StreamId, this._Rate);\n }\n }\n /**\n * @description: 设置音量\n * @param {float} leftVolume 左声道音量\n * @param {float} rightVolume 右声道音量\n */\n setVolume(leftVolume, rightVolume) {\n this._LeftVolume = leftVolume;\n this._RightVolume = rightVolume;\n if (this._StreamId !== -1) {\n this._SoundPool.setVolume(this._StreamId, this._LeftVolume, this._RightVolume);\n }\n }\n /**\n * @description: 设置循环次数, 注意: 循环一次表示总共播两次\n * @param {int} loop 循环次数\n */\n setLoop(loop) {\n this._Loop = loop;\n if (this._StreamId !== -1) {\n this._SoundPool.setLoop(this._StreamId, this._Loop);\n }\n }\n /**\n * @description: 设置优先级\n * @param {int} priority 优先级\n */\n setPriority(priority) {\n this._Priority = priority;\n if (this._StreamId !== -1) {\n this._SoundPool.setPriority(this._StreamId, this._Priority);\n }\n }\n}\nclass JsvSoundPool {\n /**\n * @param {int} max max streams\n */\n constructor(max) {\n if (!supportSoundPool)\n return;\n this._SoundPool = new window.SoundPool(max);\n this._SoundIdMap = {};\n this._StreamIdMap = /* @__PURE__ */ new Set();\n }\n /**\n * @description: 准备音频资源\n * @param {string} url 音频url\n * @param {string} netSetting http请求配置\n * @param {int} priority 优先级\n * @param {function} callback 资源加载完成回调 function(int state, AudioController controller) {}\n */\n request(url, netSetting, priority, callback) {\n if (!supportSoundPool) {\n callback(-1, null);\n console.log(\"not support sound pool.\");\n return;\n }\n let realUrl;\n if (window.JsView) {\n realUrl = new window.JsView.Dom.UrlRef(url).href;\n } else {\n realUrl = url;\n }\n if (this._SoundIdMap[realUrl]) {\n this._SoundIdMap[realUrl].referCount++;\n const controller = new AudioController(this._SoundPool, this._SoundIdMap[realUrl].soundId);\n this._StreamIdMap.add(controller);\n callback(0, controller);\n } else {\n this._SoundPool.load(realUrl, netSetting, priority, (sound_id, state) => {\n if (state === 0) {\n this._SoundIdMap[realUrl] = {\n soundId: sound_id,\n referCount: 1\n };\n const controller = new AudioController(this._SoundPool, sound_id, realUrl);\n this._StreamIdMap.add(controller);\n callback(state, controller);\n } else {\n callback(state, null);\n console.error(`load ${realUrl} failed`);\n }\n });\n }\n }\n /**\n * @description: 释放音频资源\n * @param {AudioController} controller 控制句柄\n */\n release(controller) {\n if (!supportSoundPool)\n return;\n controller.stop();\n this._StreamIdMap.delete(controller);\n if (this._SoundIdMap[controller._Url]) {\n const item = this._SoundIdMap[controller._Url];\n item.referCount--;\n if (item.referCount <= 0) {\n this._SoundPool.unload(item.soundId);\n }\n }\n }\n /**\n * @description: 销毁SoundPool\n */\n destroy() {\n if (!supportSoundPool)\n return;\n this._SoundPool.release();\n }\n /**\n * @description: 全部暂停\n */\n autoPause() {\n if (!supportSoundPool)\n return;\n this._SoundPool.autoPause();\n }\n /**\n * @description: 全部开始\n */\n autoResume() {\n if (!supportSoundPool)\n return;\n this._SoundPool.autoResume();\n }\n}\n\n//!\n//! utils/JsViewVueWidget/JsvTextBox.vue;\n//!\n/*! <!--\n* Created by chunfeng.luo@qcast.cn on 10/13/20.\n*/\nconst _sfc_main$c = {\n __name: \"JsvTextBox\",\n props: {\n style: Object,\n verticalAlign: {\n type: String,\n default: \"middle\"\n },\n lineAlign: {\n type: String,\n default: \"middle\"\n },\n enableLatex: Boolean,\n className: String,\n textDirection: {\n type: String,\n default: \"unset\"\n }\n },\n setup(__props) {\n const props = __props;\n const computeAlignItems = computed(() => {\n switch (props.verticalAlign) {\n case \"top\":\n return \"flex-start\";\n case \"bottom\":\n return \"flex-end\";\n default:\n case \"center\":\n return \"center\";\n }\n });\n return (_ctx, _cache) => {\n return openBlock(), createBlock(unref(_sfc_main$z), {\n style: normalizeStyle({\n ...props.style,\n flexDirection: \"row\",\n alignItems: unref(computeAlignItems)\n })\n }, {\n default: withCtx(() => [\n createElementVNode(\"div\", {\n style: normalizeStyle({\n width: props.style.width,\n JsvTextLatex: __props.enableLatex ? 1 : 0,\n JsvTextLineAlign: __props.lineAlign,\n JsvTextInnerDirection: __props.textDirection\n })\n }, [\n renderSlot(_ctx.$slots, \"default\")\n ], 4)\n ]),\n _: 3\n }, 8, [\"style\"]);\n };\n }\n};\n\n//!\n//! utils/JsViewVueWidget/JsvRadarChart.vue;\n//!\n/*! <!--\n * 【模块 export 内容】\n * JsvRadarChart:Vue高阶组件,多维属性图展示控件,又称雷达图,该控件的原图要求为正方形,按对角线划分,一边为透明,一边为带边框的正三角形,\n * 带上等分线。\n * props说明:\n * style {Object} (必填) 同div的Style,通过top/left控制圆心坐标\n * backgroundUrl {String} (必填) 背景图片的加载地址\n * foregroundUrl {String} (必填) 展示图片的加载地址\n * data {Array} (必填) 响应式数组对象,有title和value两个属性 例: const data=ref([{title:'智力',value:80}])\n * 注:value为0-100的整数\n * fontSize {Number} (必填) 要展示的字体大小\n * fontColor {String} 字体颜色,默认黑色。\n * radius {Number} (必填) 半径宽度 \n * extendOffset {Number} (必填) 延展半径宽度(width),用于展示title\n * 补充说明:\n * 该控件以左上角为顶点旋转渲染,所以图片中带边框的正三角形的三个顶点应该为:左上,右上,左下;请调整图的朝向。\n-->\n\n */\nconst _sfc_main$b = {\n __name: \"JsvRadarChart\",\n props: {\n style: {\n type: Object,\n default: () => {\n return {};\n }\n },\n backgroundUrl: { type: String, required: true },\n foregroundUrl: { type: String, required: true },\n data: { type: Array, required: true, default: () => ref([{ title: \"\", value: 10 }]) },\n fontSize: { type: Number, required: true, default: 16 },\n fontColor: { type: String, default: \"#000000\" },\n radius: { type: Number, required: true },\n extendOffset: { type: Number, required: true }\n },\n setup(__props) {\n const props = __props;\n const check = props.data.every((item, index) => {\n if (item.value > 0 && item.value <= 100) {\n return true;\n } else {\n return false;\n }\n });\n const data = shallowRef(props.data);\n watch(props.data, (n, o) => {\n props.data.value = n;\n });\n const timer = { id: -1 };\n const isReady = () => {\n if (!props.data.value) {\n return true;\n } else if (!check) {\n console.warn(\"请检查数组内每一项value的值,范围0-100\");\n return false;\n }\n return props.style && props.radius !== 0;\n };\n let showData = shallowRef(null);\n showData.value = data.value.map((item) => {\n return {\n ...item,\n height: 10,\n value: 10\n };\n });\n const changeTransition = () => {\n let transition = \"width 1s ,height 1s linear\";\n return transition;\n };\n const longestTitleObj = data.value.reduce((accumulator, currentObj) => {\n return accumulator.title.length > currentObj.title.length ? accumulator : currentObj;\n }, data.value[0]);\n let textWidth = shallowRef(null);\n textWidth.value = getTextWidth(longestTitleObj.title, { fontSize: props.fontSize });\n const coordinate = props.data.map((item, index) => {\n item.top = 0 + (props.radius + props.extendOffset) * Math.cos(index * (360 / props.data.length / 180 * Math.PI));\n item.left = 0 + (props.radius + props.extendOffset) * Math.sin(index * (360 / props.data.length / 180 * Math.PI));\n return {\n ...item\n };\n });\n const cos = Math.cos(Math.PI);\n const sin = Math.sin(Math.PI);\n const reverse = coordinate.map((item, index) => {\n const cx = 0;\n const cy = 0;\n const x = item.left;\n const y = item.top;\n const newX = cos * (x - cx) - sin * (y - cy) + cx;\n const newY = sin * (x - cx) + cos * (y - cy) + cy;\n return {\n ...item,\n top: newY,\n left: newX\n };\n });\n const temp = reverse[reverse.length - 1].title;\n for (let i = reverse.length - 1; i >= 1; i--) {\n reverse[i].title = reverse[i - 1].title;\n }\n reverse[0].title = temp;\n const final = reverse.map((item, index) => {\n const temp2 = reverse[reverse.length - 1].value;\n index == 0 ? item.value = temp2 : item.value = reverse[reverse.length - 1].value;\n if (index == 0 || index == props.data.length / 2) {\n item.textAlign = \"center\", item.left -= textWidth.value / 2;\n if (index == props.data.length / 2) {\n item.top -= props.fontSize;\n }\n } else if (item.left > 0 && item.top > 0) {\n item.textAlign = \"start\";\n } else if (item.left < 0) {\n item.textAlign = \"end\";\n item.left -= textWidth.value;\n }\n return {\n ...item,\n textAlign: item.textAlign\n };\n });\n onMounted(() => {\n if (props.data.value.length == 0) {\n console.error(\"data长度不要为空\");\n } else {\n data.value = showData.value;\n timer.id = setTimeout(() => {\n if (props.data.value) {\n data.value = props.data.value.map((item, index) => {\n const prevIndex = index === 0 ? props.data.length - 1 : index - 1;\n const prevValue = props.data.value[prevIndex].value;\n return {\n ...item,\n height: prevValue\n };\n });\n }\n }, 500);\n }\n });\n onBeforeUpdate(() => {\n timer.id = setTimeout(() => {\n if (props.data.value) {\n data.value = props.data.value.map((item, index) => {\n const prevIndex = index === 0 ? props.data.length - 1 : index - 1;\n const prevValue = props.data.value[prevIndex].value;\n return {\n ...item,\n height: prevValue\n };\n });\n }\n }, 500);\n });\n onBeforeUnmount(() => {\n if (timer.id > 0) {\n clearTimeout(timer.id);\n timer.id = -1;\n }\n });\n return (_ctx, _cache) => {\n return isReady() ? (openBlock(), createElementBlock(\"div\", {\n key: 0,\n style: normalizeStyle({ top: props.style.top, left: props.style.left })\n }, [\n createElementVNode(\"div\", {\n style: normalizeStyle({ transform: `rotate3d(0,0,1,180deg)` })\n }, [\n (openBlock(true), createElementBlock(Fragment, null, renderList(unref(data), (item, index) => {\n return openBlock(), createElementBlock(\"div\", {\n key: `${item}square`,\n style: normalizeStyle({\n width: props.radius,\n height: props.radius / Math.cos(Math.PI * (90 - 360 / props.data.length) / 180),\n transform: `rotate3d(0,0,1,${-index * (360 / props.data.length)}deg) skew(0,${90 - 360 / props.data.length}deg)`,\n transformOrigin: `left top`,\n backgroundImage: props.backgroundUrl\n })\n }, [\n createElementVNode(\"div\", {\n style: normalizeStyle({\n width: Math.ceil(props.radius * item.value / 100),\n height: Math.ceil(props.radius / Math.cos(Math.PI * (90 - 360 / props.data.length) / 180) * item.height / 100),\n backgroundImage: props.foregroundUrl,\n transition: changeTransition()\n })\n }, null, 4)\n ], 4);\n }), 128))\n ], 4),\n (openBlock(true), createElementBlock(Fragment, null, renderList(unref(final), (item, index) => {\n return openBlock(), createElementBlock(\"div\", {\n key: `${item}text`,\n style: normalizeStyle({\n left: item.left,\n top: item.top,\n width: unref(textWidth),\n height: props.fontSize + 10,\n color: props.fontColor,\n fontSize: props.fontSize,\n textAlign: item.textAlign\n })\n }, toDisplayString(item.title), 5);\n }), 128))\n ], 4)) : createCommentVNode(\"\", true);\n };\n }\n};\n\n//!\n//! utils/JsViewVueWidget/JsvRipple/Constant.js;\n//!\nconst JsvRippleShape = {\n CIRCLE: Forge.FilterView.WAVE.CIRCLE_WAVE,\n RECTANGLE: Forge.FilterView.WAVE.RECTANGLE_WAVE\n};\n\n//!\n//! utils/JsViewVueWidget/JsvRipple/JsvRipple.vue;\n//!\n/*! <!--\n * 【模块 export 内容】\n * JsvRipple: 波纹组件\n * 组件说明:\n * 只在盒子端支持, 浏览器端无效果\n * 出于性能考虑, 最多同时有5个波纹\n * 波的函数为 f(x, t) = amplitude * exp(-timeDecay * t) * (1.0 / (1.0 + distanceDecay * x * x)) \n * sin(PI_2 * frequency * (x / speed - t))\n * props说明:\n * width {int} 宽\n * height {int} 高\n * left {int} left位置\n * top {int} top位置\n * enable {boolean} 是否启用特效\n * method说明:\n * addSource {(x, y, amplitude, shapeParams, mediumParams) => number}\n * 返回值: token\n * 参数: \n * x {int}: 波纹中心x坐标\n * y {int}: 波纹中心y坐标\n * amplitude {int}: 波幅\n * shapeParams {{type: number, width?: number, height?: number, radius?: number}}:\n * type: 波纹类型, 目前只有两种\n * JsvRippleShape.CIRCLE 圆形波\n * JsvRippleShape.RECTANGLE 圆角矩形波\n * width: JsvRippleShape.RECTANGLE 时设置, 矩形的宽\n * height: JsvRippleShape.RECTANGLE 时设置, 矩形的高\n * radius: JsvRippleShape.RECTANGLE 时设置, 圆角半径\n * mediumParams {{timeDecay: number, distanceDecay: nubmer, speed: number, frequency: number, waveNum: number}}:\n * timeDecay: 时间衰减因子, 在公式中的影响为 exp(-timeDecay * t), 一般认为amplitude * exp(-timeDecay * t) < 1 时波消失, 所以要控制波的时长可以计算 ln(amplitude) / timeDecay\n * distanceDecay: 距离衰减因子, 公式中的影响为 (1.0 / (1.0 + distanceDecay * x * x))\n * speed: 波速 px/s\n * frequency: 频率 次/s\n * waveNum: 波的个数\n * removeSource {(token) => void}\n * 参数:\n * token: 波源的token\n-->\n\n\n\n */\nconst _sfc_main$a = {\n __name: \"JsvRipple\",\n props: {\n width: {\n type: Number\n },\n height: {\n type: Number\n },\n left: {\n type: Number,\n default: 0\n },\n top: {\n type: Number,\n default: 0\n },\n enable: {\n type: Boolean,\n default: true\n }\n },\n setup(__props, { expose }) {\n const props = __props;\n const TAG = \"JsvRipple\";\n let filterView = new Forge$1.FilterView(null, Forge$1.FilterView.Type.WAVE);\n let viewId = Forge$1.sViewStore.add(new Forge$1.ViewInfo(filterView, null));\n watchEffect(() => {\n if (filterView) {\n filterView.FilterSwitch(!!props.enable);\n }\n });\n onBeforeUnmount(() => {\n if (viewId > 0) {\n Forge$1.sViewStore.remove(viewId);\n viewId = -1;\n }\n });\n const defaultMediumParams = {\n timeDecay: 3,\n distanceDecay: 8,\n speed: 100,\n frequency: 8,\n waveNum: 2\n };\n const addSource = (x, y, amplitude, shapeParams = {\n type: JsvRippleShape.CIRCLE\n }, mediumParams = {}) => {\n if (filterView) {\n const defObj = Object.assign({}, defaultMediumParams);\n const m = Object.assign(defObj, mediumParams);\n return filterView.AddWaveSourceSingle(x, y, amplitude, shapeParams, m);\n } else {\n console.warn(TAG, \"addSource while filterView is null.\");\n }\n };\n const removeSource = (id) => {\n if (filterView) {\n filterView.RemoveSource(id);\n } else {\n console.warn(TAG, \"removeSource while filterView is null\");\n }\n };\n expose({\n addSource,\n removeSource\n });\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", {\n style: normalizeStyle({\n left: __props.left,\n top: __props.top,\n width: __props.width,\n height: __props.height\n }),\n \"data-jsv-vw-innerview\": unref(viewId)\n }, [\n renderSlot(_ctx.$slots, \"default\")\n ], 12, [\"data-jsv-vw-innerview\"]);\n };\n }\n};\n\n//!\n//! utils/JsViewVueWidget/JsvRipple/index.js;\n//!\n\n//!\n//! utils/JsViewVueWidget/JsvLine/LineManager.js;\n//!\nlet sMap$1 = /* @__PURE__ */ new Map();\nconst createTexture$1 = (lineWidth, color) => {\n let myKey = `${lineWidth}${color}`;\n if (sMap$1.size == 0) {\n let t = new LineTexture(lineWidth, color);\n t.DoRef();\n sMap$1.set(myKey, t);\n return t;\n } else {\n let hasMatch = false;\n for (let key of sMap$1.keys()) {\n if (key == myKey) {\n hasMatch = true;\n sMap$1.get(key).DoRef();\n return sMap$1.get(myKey);\n }\n }\n if (!hasMatch) {\n let t = new LineTexture(lineWidth, color);\n t.DoRef();\n sMap$1.set(myKey, t);\n return t;\n }\n }\n};\nclass LineTexture {\n constructor(lineWidth, color) {\n this.key = `${lineWidth}${color}`;\n if (lineWidth < 8) {\n lineWidth = 8;\n }\n this.bitmap = {\n width: 2,\n height: lineWidth + 2\n };\n this.count = 0;\n this.newLineWidth = Math.floor(lineWidth / 2);\n this.canvasTexture = sTextureStoreApi.canvasTexture(this.bitmap.width, this.bitmap.height);\n this.canvasTexture.drawLine(-1, this.newLineWidth + 1, 3, this.newLineWidth + 1, lineWidth, color);\n this.sourceId = this.canvasTexture.commit();\n }\n getSourceId() {\n return this.sourceId;\n }\n DoRef() {\n this.count++;\n }\n UnRef() {\n this.count--;\n if (this.count === 0) {\n sTextureStoreApi.deleteTexture(this.sourceId);\n sMap$1.delete(this.key);\n }\n }\n}\n\n//!\n//! utils/JsViewVueWidget/JsvLine/JsvLine.vue?vue&type=style&index=0&scoped=10b9ebcf&lang.css;\n//!\nconst JsvLine_vue_vue_type_style_index_0_scoped_10b9ebcf_lang = \"\";\n\n//!\n//! utils/JsViewVueWidget/JsvLine/JsvLine.vue;\n//!\n/*! <!--\n * 【模块 export 内容】\n * JsvLine:Vue高阶组件,用于划线。支持横线、竖线和斜线。\n * props说明:(注意:全部属性非响应式, 需要变更时用 key 来触发重绘)\n * startPos {Object} (必填) 起始位置,属性:x,y\n * endPos {Object} (必填) 结束位置, 属性:x,y\n * lineWidth {Number} (必填) 线条的粗细程度\n * appear {String} 线条的出现方式 fadeIn 淡入 / fadeOut 淡出\n * backgroundImage {String} 背景图片\n * backgroundColor {String} 背景颜色,默认值:白色#FFFFFF\n * borderRadius {Number} 圆角半径\n * \n-->\n\n\n\n\n\n\n */\nconst _sfc_main$9 = {\n __name: \"JsvLine\",\n props: {\n startPos: { type: Object, require: true },\n endPos: { type: Object, require: true },\n lineWidth: { type: Number, require: true },\n appear: { type: String },\n backgroundImage: { type: String },\n backgroundColor: { type: String, require: true },\n borderRadius: { type: Number }\n },\n setup(__props) {\n const props = __props;\n let isShow = shallowRef(true);\n const getDistance = (point1, point2) => {\n const w = Math.abs(point1.x - point2.x);\n const h = Math.abs(point1.y - point2.y);\n return Math.sqrt(w * w + h * h);\n };\n const width = getDistance(props.startPos, props.endPos);\n let angle = 180 / Math.PI * Math.asin((props.endPos.y - props.startPos.y) / width);\n if (props.endPos.x < props.startPos.x) {\n angle = 180 - angle;\n }\n const AnimEnd = () => {\n if (props.appear == \"fadeOut\") {\n isShow.value = false;\n }\n };\n let myLineTexture = null;\n let sourceId = null;\n if (props.backgroundColor) {\n myLineTexture = createTexture$1(props.lineWidth, props.backgroundColor);\n sourceId = myLineTexture.getSourceId();\n }\n onBeforeUnmount(() => {\n if (props.backgroundColor) {\n myLineTexture.UnRef();\n }\n });\n return (_ctx, _cache) => {\n return unref(isShow) ? (openBlock(), createElementBlock(\"div\", {\n key: 0,\n style: normalizeStyle({\n left: props.startPos.x,\n top: props.startPos.y - __props.lineWidth / 2,\n width: unref(width),\n height: props.lineWidth + 4,\n borderRadius: props.borderRadius,\n transform: `rotate3d(0,0,1, ${unref(angle)}deg)`,\n transformOrigin: \"left center\",\n backgroundImage: props.backgroundColor ? `jsvtexturestore://${unref(sourceId)}` : props.backgroundImage,\n animation: props.appear ? `${props.appear} 1s ease-in-out` : \"\"\n }),\n onAnimationend: AnimEnd\n }, null, 36)) : createCommentVNode(\"\", true);\n };\n }\n};\nconst styleSheetsContent = { \"0\": { \"fadeIn-10b9ebcf\": \"@keyframes fadeIn-10b9ebcf {0%{opacity:0;}100%{opacity:1;}}\", \"fadeOut-10b9ebcf\": \"@keyframes fadeOut-10b9ebcf {0%{opacity:1;}100%{opacity:0;}}\" } };\nwindow.JsvCode.Dom.DeclareStyleSheets(styleSheetsContent);\nconst JsvLine = /* @__PURE__ */ _export_sfc(_sfc_main$9, [[\"__scopeId\", \"data-v-10b9ebcf\"]]);\n\n//!\n//! utils/JsViewVueWidget/JsvLine/index.js;\n//!\n\n//!\n//! utils/JsViewVueWidget/JsvSector.vue;\n//!\n/*! <!--\n * 【模块 export 内容】\n * JsvSector:Vue高阶组件,扇形图。\n * props说明:\n * centerPosition {Object} 圆心坐标,属性:{x,y}\n * radius {Number} 半径\n * animationTime {Number} 动画变化时间,单位 /秒\n * config {Object} 配置信息对象,包含初始角度,扫过的角度以及颜色。属性:{startAngle,sweepAngle,color}\n * extraTime {Number} 可选配置(饼图用)扇形运动额外时间\n * \n-->\n\n\n\n\n\n */\nconst _sfc_main$8 = {\n __name: \"JsvSector\",\n props: {\n centerPosition: { type: Object, require: true },\n radius: { type: Number, require: true },\n config: { type: Object, require: true },\n animationTime: { type: Number, default: 1 },\n extraTime: { type: Number, default: 0 }\n },\n setup(__props) {\n const props = __props;\n let sourceId = shallowRef(\"\");\n let canvasRef = sTextureStoreApi.canvasTexture(\n 2 * props.radius,\n 2 * props.radius\n );\n let customPath = canvasRef.customPath();\n customPath.arcTo(0, -props.radius, 2 * props.radius, props.radius, 0, 180);\n customPath.close();\n customPath.fill(props.config.color);\n sourceId.value = canvasRef.commit();\n let upAngle = shallowRef(0);\n let downAngle = shallowRef(0);\n const judge = () => {\n downAngle.value = -(180 - props.config.sweepAngle / 2);\n upAngle.value = props.config.sweepAngle / 2;\n };\n judge();\n watch(props, (n, o) => {\n judge();\n });\n onBeforeUnmount(() => {\n sTextureStoreApi.deleteTexture(sourceId.value);\n });\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", {\n style: normalizeStyle({\n width: props.radius,\n height: props.radius,\n transform: `rotate3d(0,0,1,${props.config.startAngle}deg)`,\n transformOrigin: `center center`,\n transition: `transform ${props.animationTime}s`,\n left: props.centerPosition.x / 2,\n top: props.centerPosition.y / 2\n })\n }, [\n createElementVNode(\"div\", {\n style: normalizeStyle({\n width: props.radius,\n height: props.radius / 2,\n top: props.radius / 2,\n left: 0,\n transform: `rotate3d(0,0,1,${unref(upAngle)}deg)`,\n transformOrigin: `center top`,\n overflow: \"hidden\",\n transition: `transform ${props.animationTime}s`\n })\n }, [\n createElementVNode(\"div\", {\n style: normalizeStyle({\n width: props.radius,\n height: props.radius,\n backgroundImage: `jsvtexturestore://${unref(sourceId)}`,\n transform: `rotate3d(0,0,1,${unref(downAngle)}deg)`,\n transformOrigin: `center top`,\n transition: `transform ${props.animationTime + props.extraTime}s`\n })\n }, null, 4)\n ], 4),\n createElementVNode(\"div\", {\n style: normalizeStyle({\n width: props.radius,\n height: props.radius / 2,\n top: props.radius / 2,\n left: 0,\n overflow: \"hidden\"\n })\n }, [\n createElementVNode(\"div\", {\n style: normalizeStyle({\n width: props.radius,\n height: props.radius,\n backgroundImage: `jsvtexturestore://${unref(sourceId)}`,\n transform: `rotate3d(0,0,1,${unref(downAngle)}deg)`,\n transformOrigin: `center top`,\n transition: `transform ${props.animationTime + props.extraTime}s`\n })\n }, null, 4)\n ], 4)\n ], 4);\n };\n }\n};\n\n//!\n//! utils/JsViewVueWidget/JsvPieChart.vue;\n//!\n/*! <!--\n * 【模块 export 内容】\n * JsvPieChart:Vue高阶组件,饼图。\n * props说明:\n * centerPosition {Object} 圆心坐标,属性:{x,y}\n * radius {Number} 半径\n * animationTime {Number} 动画变化时间,单位 /秒\n * data {Array} 数组对象,包含百分比和颜色。例如:[{color:'#FFFFFF',percent:20}]\n * 说明:传入的数组要为响应式,且保证所有项的percent都是大于0并且相加等于100\n-->\n\n\n\n\n\n\n */\nconst _sfc_main$7 = {\n __name: \"JsvPieChart\",\n props: {\n centerPosition: { type: Object, required: true },\n data: { type: Array, required: true },\n radius: { type: Number, required: true },\n animationTime: { type: Number, default: 1 }\n },\n setup(__props) {\n const props = __props;\n let myData = props.data;\n let previousPercent = [];\n let extraTimeArray = [];\n myData.forEach((item, index) => {\n previousPercent.push(item.percent);\n extraTimeArray.push(0);\n });\n const CheckData = (data) => {\n let totalPercent = 0;\n data.forEach((item) => {\n if (!item.hasOwnProperty(\"percent\")) {\n console.error(\"每一项必须包含percent属性\");\n }\n if (item.percent < 0 || item.percent > 100) {\n console.error(\"每一项percent必须大于0或者小于等于100!\");\n }\n totalPercent += item.percent;\n });\n if (totalPercent < 99 || totalPercent > 101) {\n console.error(\"percent属性值总和必须等于100!\");\n }\n return true;\n };\n CheckData(props.data);\n let finalData = reactive([]);\n const filterData = (data) => {\n data.forEach((item, index) => {\n if (item.percent > previousPercent[index]) {\n extraTimeArray[index] = -0.1;\n } else if (item.percent < previousPercent[index]) {\n extraTimeArray[index] = 0.1;\n } else {\n extraTimeArray[index] = 0;\n }\n item.angle = (item.percent / 100 * 360).toFixed(2);\n if (index == 0) {\n finalData.push({\n startAngle: Number(0).toFixed(2),\n sweepAngle: Number(item.percent / 100 * 360).toFixed(2),\n color: item.color,\n index,\n extraTime: extraTimeArray[0]\n });\n } else {\n finalData.push({\n startAngle: (Number(finalData[index - 1].startAngle) + Number(finalData[index - 1].sweepAngle)).toFixed(2),\n sweepAngle: Number(item.angle).toFixed(2),\n color: item.color,\n index,\n extraTime: extraTimeArray[index]\n });\n }\n });\n };\n filterData(myData);\n watch(\n props.data,\n (n, o) => {\n if (CheckData(n)) {\n finalData.splice(0, finalData.length);\n filterData(n);\n myData = n;\n }\n },\n { deep: true }\n );\n watch(myData, (n, o) => {\n previousPercent = [];\n extraTimeArray = [];\n myData.forEach((item, index) => {\n previousPercent.push(item.percent);\n extraTimeArray.push(0);\n });\n n.forEach((item, index) => {\n previousPercent.push(item.percent);\n });\n });\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", {\n key: \"pie-\" + unref(finalData).length\n }, [\n (openBlock(true), createElementBlock(Fragment, null, renderList(unref(finalData).slice().reverse(), (item, index) => {\n return openBlock(), createElementBlock(\"div\", null, [\n (openBlock(), createBlock(_sfc_main$8, {\n radius: props.radius,\n config: {\n startAngle: Number(item.startAngle),\n sweepAngle: unref(finalData).length == 1 || item.sweepAngle == 360 ? Number(item.sweepAngle) : Number(item.sweepAngle) + 1,\n color: item.color\n },\n key: `indexZ${index}`,\n animationTime: props.animationTime,\n centerPosition: props.centerPosition,\n extraTime: item.extraTime\n }, null, 8, [\"radius\", \"config\", \"animationTime\", \"centerPosition\", \"extraTime\"]))\n ]);\n }), 256))\n ]);\n };\n }\n};\n\n//!\n//! utils/JsViewVueWidget/JsvConnectLine/ArcLineManager.js;\n//!\nlet sMap = /* @__PURE__ */ new Map();\nconst createTexture = (lineWidth, color, radius) => {\n let myKey = `${lineWidth}${color}${radius}`;\n if (sMap.size == 0) {\n let t = new ConnectLineTexture(lineWidth, color, radius);\n t.DoRef();\n sMap.set(myKey, t);\n return t;\n } else {\n let hasMatch = false;\n for (let key of sMap.keys()) {\n if (key == myKey) {\n hasMatch = true;\n sMap.get(key).DoRef();\n return sMap.get(myKey);\n }\n }\n if (!hasMatch) {\n let t = new ConnectLineTexture(lineWidth, color, radius);\n t.DoRef();\n sMap.set(myKey, t);\n return t;\n }\n }\n};\nclass ConnectLineTexture {\n constructor(lineWidth, color, radius) {\n this.key = `${lineWidth}${color}${radius}`;\n this.bitmap = {\n width: radius + lineWidth / 2 + 2,\n height: radius + lineWidth / 2 + 2\n };\n this.centerX = 0;\n this.centerY = 0;\n this.count = 0;\n this.canvasTexture = sTextureStoreApi.canvasTexture(this.bitmap.width, this.bitmap.height);\n this.customPath = this.canvasTexture.customPath();\n this.customPath.arcTo(\n this.centerX - radius,\n this.centerY - radius,\n this.centerX + radius,\n this.centerY + radius,\n 0,\n 90\n );\n this.customPath.stroke(lineWidth + 2, color);\n this.sourceId = this.canvasTexture.commit();\n }\n getSourceId() {\n return this.sourceId;\n }\n DoRef() {\n this.count++;\n }\n UnRef() {\n this.count--;\n if (this.count === 0) {\n sTextureStoreApi.deleteTexture(this.sourceId);\n sMap.delete(this.key);\n }\n }\n}\n\n//!\n//! utils/JsViewVueWidget/JsvConnectLine/JsvConnectLine.vue;\n//!\n/*! <!--\n * 【模块 export 内容】\n * JsvConnectLine:Vue高阶组件,由JsvLine组件变化而来,用于连接两个区域的线条。\n * props说明(注意:全部属性非响应式, 需要变更时用 key 来触发重绘):\n * startPos {Object} (必填) 起始位置,属性:x,y\n * endPos {Object} (必填) 结束位置, 属性:x,y\n * lineWidth {Number} (必填) 线条的粗细程度\n * backgroundColor {String} 背景颜色,默认值:白色#FFFFFF\n * radius {Number} 圆角半径,若半径超过起点终点距离的一半,则没有曲线为直线。\n * isVertical {Boolean} (必填) true为y轴拐点,false为x轴拐点\n * percent {Number} (必填) 承接isVertical,百分比拐点。\n * RoundSet {Object} 圆角配置对象,可选开始拐点和结束拐点,false代表不配置,true代表配置。属性值:start,end\n * \n-->\n\n\n\n\n\n */\nconst _sfc_main$6 = {\n __name: \"JsvConnectLine\",\n props: {\n startPos: {\n type: Object,\n require: true\n },\n endPos: {\n type: Object,\n require: true\n },\n lineWidth: {\n type: Number,\n require: true\n },\n isVertical: {\n type: Boolean,\n require: true\n },\n percent: {\n type: Number,\n require: true\n },\n backgroundColor: {\n type: String\n },\n radius: {\n type: Number\n },\n RoundSet: {\n type: Object,\n default: {\n start: false,\n end: false\n }\n }\n },\n setup(__props) {\n const props = __props;\n if (props.percent < 0 || props.percent > 100) {\n throw new Error(\"请传入正确的百分比值:0-100!\");\n }\n let isNormal = shallowRef(false);\n let isOneDirection = shallowRef(false);\n let angleStart = 0;\n let angleEnd = 0;\n let start = shallowRef(false);\n let end = shallowRef(false);\n let endPos1 = {};\n let startPos2 = {};\n let endPos2 = {};\n let startPos3 = {};\n let endCircleLeft = 0;\n let endCircleTop = 0;\n let startCircleLeft = 0;\n let startCircleTop = 0;\n let lineWidth;\n if (props.lineWidth % 2 == 0) {\n lineWidth = props.lineWidth;\n } else {\n lineWidth = props.lineWidth + 1;\n }\n if (props.startPos.x == props.endPos.x || props.startPos.y == props.endPos.y) {\n isOneDirection.value = true;\n } else {\n isOneDirection.value = false;\n }\n let myLineTexture = null;\n let sourceId = null;\n myLineTexture = createTexture(lineWidth, props.backgroundColor, props.radius);\n sourceId = myLineTexture.getSourceId();\n let InflectionPoint = {\n x: props.isVertical ? props.startPos.x : props.startPos.x + (props.endPos.x - props.startPos.x) * props.percent / 100,\n y: props.isVertical ? props.startPos.y + (props.endPos.y - props.startPos.y) * props.percent / 100 : props.startPos.y\n };\n let startDistanceX;\n let startDistanceY;\n let endDistanceX;\n let endDistanceY;\n if (props.isVertical) {\n if (props.startPos.y < props.endPos.y) {\n isNormal.value = true;\n angleStart = 90;\n angleEnd = -90;\n } else {\n isNormal.value = false;\n angleStart = 180;\n angleEnd = 0;\n }\n endDistanceX = startDistanceX = Math.abs(props.startPos.x - props.endPos.x) / 2;\n startDistanceY = Math.abs(props.startPos.y - InflectionPoint.y);\n endDistanceY = Math.abs(props.endPos.y - InflectionPoint.y);\n } else {\n if (props.startPos.y < props.endPos.y) {\n isNormal.value = true;\n angleStart = -90;\n angleEnd = 90;\n } else {\n isNormal.value = false;\n angleStart = 0;\n angleEnd = 180;\n }\n startDistanceX = Math.abs(props.startPos.x - InflectionPoint.x);\n endDistanceX = Math.abs(props.endPos.x - InflectionPoint.x);\n endDistanceY = startDistanceY = Math.abs(props.startPos.y - props.endPos.y) / 2;\n }\n if (props.radius) {\n if (props.RoundSet.start) {\n if (props.radius + lineWidth / 2 + 2 <= startDistanceX && props.radius + lineWidth / 2 + 2 <= startDistanceY) {\n start.value = true;\n endPos1.x = props.isVertical ? props.startPos.x : InflectionPoint.x - props.radius;\n if (props.isVertical) {\n endPos1.y = isNormal.value ? InflectionPoint.y - props.radius + 2 : InflectionPoint.y + props.radius - 2;\n } else {\n endPos1.y = props.startPos.y;\n }\n let startPos2Extra = isNormal.value ? props.radius : -props.radius;\n startPos2.x = props.isVertical ? props.startPos.x + props.radius : InflectionPoint.x;\n startPos2.y = props.isVertical ? InflectionPoint.y : props.startPos.y + startPos2Extra;\n startCircleLeft = props.isVertical ? props.startPos.x + props.radius : InflectionPoint.x - props.radius;\n if (props.isVertical) {\n startCircleTop = isNormal.value ? InflectionPoint.y - props.radius + 2 : InflectionPoint.y + props.radius + 2;\n } else {\n startCircleTop = isNormal.value ? props.startPos.y + props.radius + 2 : props.startPos.y - props.radius + 2;\n }\n } else {\n let startPos2Extra = isNormal.value ? -lineWidth / 2 - 1 : lineWidth / 2 + 1;\n let endPos1Extra = isNormal.value ? lineWidth / 2 + 1 : -lineWidth / 2 - 1;\n endPos1.x = props.isVertical ? props.startPos.x : InflectionPoint.x;\n endPos1.y = props.isVertical ? InflectionPoint.y + endPos1Extra : props.startPos.y;\n startPos2.x = props.isVertical ? props.startPos.x : InflectionPoint.x;\n startPos2.y = props.isVertical ? InflectionPoint.y : props.startPos.y + startPos2Extra;\n }\n } else {\n let startPos2Extra = isNormal.value ? -lineWidth / 2 - 1 : lineWidth / 2 + 1;\n let endPos1Extra = isNormal.value ? lineWidth / 2 + 1 : -lineWidth / 2 - 1;\n endPos1.x = props.isVertical ? props.startPos.x : InflectionPoint.x;\n endPos1.y = props.isVertical ? InflectionPoint.y + endPos1Extra : props.startPos.y;\n startPos2.x = props.isVertical ? props.startPos.x : InflectionPoint.x;\n startPos2.y = props.isVertical ? InflectionPoint.y : props.startPos.y + startPos2Extra;\n }\n if (props.RoundSet.end) {\n if (props.radius + lineWidth / 2 + 2 <= endDistanceX && props.radius + lineWidth / 2 + 2 <= endDistanceY) {\n let startPos3Extra = isNormal.value ? props.radius : -props.radius;\n end.value = true;\n endPos2.x = props.isVertical ? props.endPos.x - props.radius : InflectionPoint.x;\n let endPos2Extra = isNormal.value ? -props.radius + 2 : props.radius - 2;\n endPos2.y = props.isVertical ? InflectionPoint.y : props.endPos.y + endPos2Extra;\n startPos3.x = props.isVertical ? props.endPos.x : InflectionPoint.x + props.radius;\n startPos3.y = props.isVertical ? InflectionPoint.y + startPos3Extra : props.endPos.y;\n endCircleLeft = props.isVertical ? props.endPos.x - props.radius : InflectionPoint.x + props.radius;\n if (props.isVertical) {\n endCircleTop = isNormal.value ? InflectionPoint.y + props.radius + 2 : InflectionPoint.y - props.radius + 2;\n } else {\n endCircleTop = isNormal.value ? props.endPos.y - props.radius + 2 : props.endPos.y + props.radius + 2;\n }\n } else {\n let endPos2Extra = isNormal.value ? lineWidth / 2 + 1 : -lineWidth / 2 - 1;\n let startPos3Extra = isNormal.value ? -lineWidth / 2 - 1 : lineWidth / 2 + 1;\n endPos2.x = props.isVertical ? props.endPos.x : InflectionPoint.x;\n endPos2.y = props.isVertical ? InflectionPoint.y : props.endPos.y + endPos2Extra;\n startPos3.x = props.isVertical ? props.endPos.x : InflectionPoint.x;\n startPos3.y = props.isVertical ? InflectionPoint.y + startPos3Extra : props.endPos.y;\n }\n } else {\n let endPos2Extra = isNormal.value ? lineWidth / 2 + 1 : -lineWidth / 2 - 1;\n let startPos3Extra = isNormal.value ? -lineWidth / 2 - 1 : lineWidth / 2 + 1;\n endPos2.x = props.isVertical ? props.endPos.x : InflectionPoint.x;\n endPos2.y = props.isVertical ? InflectionPoint.y : props.endPos.y + endPos2Extra;\n startPos3.x = props.isVertical ? props.endPos.x : InflectionPoint.x;\n startPos3.y = props.isVertical ? InflectionPoint.y + startPos3Extra : props.endPos.y;\n }\n } else {\n let startPos2Extra = isNormal.value ? -lineWidth / 2 - 1 : lineWidth / 2 + 1;\n let endPos1Extra = isNormal.value ? lineWidth / 2 + 1 : -lineWidth / 2 - 1;\n endPos1.x = props.isVertical ? props.startPos.x : InflectionPoint.x;\n endPos1.y = props.isVertical ? InflectionPoint.y + endPos1Extra : props.startPos.y;\n startPos2.x = props.isVertical ? props.startPos.x : InflectionPoint.x;\n startPos2.y = props.isVertical ? InflectionPoint.y : props.startPos.y + startPos2Extra;\n let endPos2Extra = isNormal.value ? lineWidth / 2 + 1 : -lineWidth / 2 - 1;\n let startPos3Extra = isNormal.value ? -lineWidth / 2 - 1 : lineWidth / 2 + 1;\n endPos2.x = props.isVertical ? props.endPos.x : InflectionPoint.x;\n endPos2.y = props.isVertical ? InflectionPoint.y : props.endPos.y + endPos2Extra;\n startPos3.x = props.isVertical ? props.endPos.x : InflectionPoint.x;\n startPos3.y = props.isVertical ? InflectionPoint.y + startPos3Extra : props.endPos.y;\n }\n return (_ctx, _cache) => {\n return unref(isOneDirection) ? (openBlock(), createElementBlock(\"div\", { key: 0 }, [\n createVNode(unref(JsvLine), {\n startPos: props.startPos,\n endPos: props.endPos,\n lineWidth: unref(lineWidth),\n backgroundColor: props.backgroundColor\n }, null, 8, [\"startPos\", \"endPos\", \"lineWidth\", \"backgroundColor\"])\n ])) : (openBlock(), createElementBlock(\"div\", { key: 1 }, [\n createVNode(unref(JsvLine), {\n startPos: props.startPos,\n endPos: unref(endPos1),\n lineWidth: unref(lineWidth),\n backgroundColor: props.backgroundColor\n }, null, 8, [\"startPos\", \"endPos\", \"lineWidth\", \"backgroundColor\"]),\n createVNode(unref(JsvLine), {\n startPos: unref(startPos2),\n endPos: unref(endPos2),\n lineWidth: unref(lineWidth),\n backgroundColor: props.backgroundColor\n }, null, 8, [\"startPos\", \"endPos\", \"lineWidth\", \"backgroundColor\"]),\n createVNode(unref(JsvLine), {\n startPos: unref(startPos3),\n endPos: props.endPos,\n lineWidth: unref(lineWidth),\n backgroundColor: props.backgroundColor\n }, null, 8, [\"startPos\", \"endPos\", \"lineWidth\", \"backgroundColor\"]),\n unref(start) ? (openBlock(), createElementBlock(\"div\", {\n key: 0,\n style: normalizeStyle({\n width: props.radius + unref(lineWidth) / 2 + 2,\n height: props.radius + unref(lineWidth) / 2 + 2,\n left: unref(startCircleLeft),\n top: unref(startCircleTop),\n backgroundImage: `jsvtexturestore://${unref(sourceId)}`,\n transform: `rotate3d(0,0,1, ${unref(angleStart)}deg)`,\n transformOrigin: \"left top\"\n })\n }, null, 4)) : createCommentVNode(\"\", true),\n unref(end) ? (openBlock(), createElementBlock(\"div\", {\n key: 1,\n style: normalizeStyle({\n width: props.radius + unref(lineWidth) / 2 + 2,\n height: props.radius + unref(lineWidth) / 2 + 2,\n left: unref(endCircleLeft),\n top: unref(endCircleTop),\n backgroundImage: `jsvtexturestore://${unref(sourceId)}`,\n transform: `rotate3d(0,0,1, ${unref(angleEnd)}deg)`,\n transformOrigin: \"left top\"\n })\n }, null, 4)) : createCommentVNode(\"\", true)\n ]));\n };\n }\n};\n\n//!\n//! utils/JsViewVueWidget/JsvConnectLine/index.js;\n//!\n\n//!\n//! utils/JsViewVueWidget/JsvProgressBar.vue;\n//!\n/*! <!--\n * 【模块 export 内容】\n * JsvProgressBar:Vue高阶组件,进度条组件。\n * props说明:\n * width {Number} (必填) 进度条总宽度\n * height {Number} (必填) 进度条总宽度(也是圆的直径)\n * bgcBefore {String} (必填) 进度条前景颜色\n * bgcBehind {String} (必填) 进度条背景颜色\n * aniTime {Number} (可选) 进度条变化的动画时间,单位:秒。\n * progress {Number} (可选) 进度条的百分比进度。有效值:0-100\n * isCanvas {Boolean} (可选) 进度条的展示样式:①点九 ②clipView 默认为true,即点九样式。\n-->\n\n\n\n\n\n\n */\nconst _sfc_main$5 = {\n __name: \"JsvProgressBar\",\n props: {\n width: { type: Number, required: true },\n height: { type: Number, required: true },\n bgcBefore: { type: String, required: true },\n bgcBehind: { type: String, required: true },\n aniTime: { type: Number, default: 0 },\n progress: { type: Number, required: true },\n isCanvas: { type: Boolean, default: true }\n },\n setup(__props) {\n const props = __props;\n let canvasRef;\n let canvasRef2;\n let sourceId = shallowRef(\"\");\n let sourceId2 = shallowRef(\"\");\n let bitmap = {\n width: props.height,\n height: props.height\n };\n let radius = Math.floor(props.height / 2) - 2;\n canvasRef = sTextureStoreApi.canvasTexture(bitmap.width, bitmap.height);\n canvasRef2 = sTextureStoreApi.canvasTexture(bitmap.width, bitmap.height);\n let myProgress = shallowRef(props.progress);\n let realWidth = shallowRef(0);\n let isZero = shallowRef(true);\n let customPath = canvasRef.circlePath(radius + 2, radius + 2, radius);\n let customPath2 = canvasRef2.circlePath(radius + 2, radius + 2, radius);\n customPath.fill(props.bgcBefore);\n customPath2.fill(props.bgcBehind);\n sourceId.value = canvasRef.commit();\n sourceId2.value = canvasRef2.commit();\n const myTransitionEnd = () => {\n if (myProgress.value <= 0) {\n isZero.value = false;\n }\n };\n const myTransition = () => {\n if (props.aniTime !== 0) {\n return `width ${props.aniTime}s linear`;\n } else {\n return \"\";\n }\n };\n watchEffect(() => {\n if (props.progress >= 100) {\n myProgress.value = 100;\n realWidth.value = props.width;\n isZero.value = true;\n } else if (props.progress <= 0) {\n myProgress.value = 0;\n if (props.isCanvas) {\n realWidth.value = props.height;\n } else {\n realWidth.value = 0;\n }\n } else {\n myProgress.value = props.progress;\n if (props.isCanvas) {\n realWidth.value = Math.floor(\n (props.width - props.height) * myProgress.value * 0.01 + props.height\n );\n isZero.value = true;\n } else {\n realWidth.value = Math.floor(props.width * myProgress.value * 0.01);\n }\n }\n });\n onBeforeUnmount(() => {\n sTextureStoreApi?.deleteTexture(sourceId.value);\n sTextureStoreApi?.deleteTexture(sourceId2.value);\n });\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(Fragment, null, [\n props.isCanvas ? (openBlock(), createElementBlock(\"div\", { key: 0 }, [\n withDirectives(createElementVNode(\"div\", null, [\n createVNode(_sfc_main$g, {\n style: normalizeStyle({\n left: 0,\n top: 0,\n width: unref(realWidth),\n height: props.height\n }),\n imageUrl: `jsvtexturestore://${unref(sourceId)}`,\n imageWidth: props.height,\n centerWidth: 1,\n imageDspWidth: props.height - 2,\n borderOutset: 2,\n animTime: props.aniTime,\n onTransitionEnd: myTransitionEnd\n }, null, 8, [\"style\", \"imageUrl\", \"imageWidth\", \"imageDspWidth\", \"animTime\"])\n ], 512), [\n [vShow, unref(isZero)]\n ])\n ])) : (openBlock(), createElementBlock(\"div\", { key: 1 }, [\n createElementVNode(\"div\", {\n style: normalizeStyle({\n width: unref(realWidth),\n height: props.height,\n top: 0,\n left: 0,\n borderRadius: unref(radius),\n transition: myTransition(),\n overflow: \"hidden\"\n })\n }, [\n createElementVNode(\"div\", {\n style: normalizeStyle({\n left: 0,\n width: props.width,\n height: props.height,\n top: 0,\n borderRadius: unref(radius),\n backgroundColor: props.bgcBefore\n })\n }, null, 4)\n ], 4)\n ])),\n createVNode(_sfc_main$g, {\n style: normalizeStyle({\n left: 0,\n top: 0,\n width: props.width,\n height: props.height\n }),\n imageUrl: `jsvtexturestore://${unref(sourceId2)}`,\n imageWidth: props.height,\n centerWidth: 1,\n imageDspWidth: props.height - 2,\n borderOutset: 2,\n animTime: 0\n }, null, 8, [\"style\", \"imageUrl\", \"imageWidth\", \"imageDspWidth\"])\n ], 64);\n };\n }\n};\n\n//!\n//! utils/JsViewVueWidget/JsvEnableRenderBreak.vue;\n//!\n/*! \n\n */\nconst _sfc_main$4 = {\n __name: \"JsvEnableRenderBreak\",\n setup(__props) {\n const itemMounted = shallowRef(false);\n const itemRef = (value) => {\n itemMounted.value = !!value;\n };\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(Fragment, null, [\n (openBlock(), createElementBlock(\"div\", {\n key: unref(RENDER_ITEM_BREAK_KEY),\n ref: itemRef\n }, [\n renderSlot(_ctx.$slots, \"renderItem\", { key: unref(RENDER_ITEM_BREAK_KEY) })\n ])),\n !unref(itemMounted) ? (openBlock(), createElementBlock(\"div\", { key: 0 }, [\n renderSlot(_ctx.$slots, \"placeHolder\")\n ])) : createCommentVNode(\"\", true)\n ], 64);\n };\n }\n};\n\n//!\n//! utils/JsViewVueWidget/JsvMindMap/Constant.ts;\n//!\nconst LEFT = \"left\";\nconst TOP = \"top\";\nconst RIGHT = \"right\";\nconst BOTTOM = \"bottom\";\nconst LEFT_BIT = 1;\nconst TOP_BIT = 2;\nconst RIGHT_BIT = 4;\nconst BOTTOM_BIT = 8;\nfunction dirStrToBit(dir) {\n switch (dir) {\n case LEFT:\n return LEFT_BIT;\n case RIGHT:\n return RIGHT_BIT;\n case TOP:\n return TOP_BIT;\n case BOTTOM:\n return BOTTOM_BIT;\n default:\n return 0;\n }\n}\n\n//!\n//! utils/JsViewVueWidget/JsvMindMap/Geometry.ts;\n//!\nfunction opposite(dir) {\n switch (dir) {\n case \"left\":\n return \"right\";\n case \"top\":\n return \"bottom\";\n case \"right\":\n return \"left\";\n case \"bottom\":\n return \"top\";\n }\n}\nclass Point {\n x = 0;\n y = 0;\n constructor(x, y) {\n this.x = x;\n this.y = y;\n }\n distance(p, quad = false) {\n const qd = (p.x - this.x) ** 2 + (p.y - this.y) ** 2;\n if (quad) {\n return qd;\n } else {\n return Math.sqrt(qd);\n }\n }\n /**\n * 获取两点指点的相对位置(四向划分, 以45度线为界)\n * @param p \n * @returns \n */\n relativeTo(p) {\n const dx = this.x - p.x;\n const dy = this.y - p.y;\n const absDx = Math.abs(dx);\n const absDy = Math.abs(dy);\n if (absDx < absDy) {\n return dy > 0 ? BOTTOM : TOP;\n } else {\n return dx > 0 ? RIGHT : LEFT;\n }\n }\n clone() {\n return new Point(this.x, this.y);\n }\n}\nclass Line {\n p0;\n p1;\n constructor(p0, p1) {\n this.p0 = p0;\n this.p1 = p1;\n }\n get center() {\n return new Point(Math.round((this.p0.x + this.p1.x) / 2), Math.round((this.p0.y + this.p1.y) / 2));\n }\n}\nclass Rect {\n x;\n y;\n width;\n height;\n constructor(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n /**\n * 计算两个矩形之间的最小距离\n * @param rect \n * @param quad \n * @returns \n */\n distance(rect, quad = false) {\n const center1 = this.center;\n const center2 = rect.center;\n const deltaX = Math.abs(center1.x - center2.x);\n const deltaY = Math.abs(center1.y - center2.y);\n const halfWidth1 = this.width / 2;\n const halfHeight1 = this.height / 2;\n const halfWidth2 = rect.width / 2;\n const halfHeight2 = rect.height / 2;\n const closestX = Math.max(0, deltaX - halfWidth1 - halfWidth2);\n const closestY = Math.max(0, deltaY - halfHeight1 - halfHeight2);\n if (quad) {\n return closestX * closestX + closestY * closestY;\n } else {\n return Math.sqrt(closestX * closestX + closestY * closestY);\n }\n }\n /**\n * 获取两个矩形的相对位置\n * @param rect 自身相对于rect的位置\n * @returns \n */\n relativeTo(rect, eightDirInfo = null) {\n if (this.distance(rect, true) == 0) {\n const c1 = this.center;\n const c2 = rect.center;\n if (eightDirInfo) {\n eightDirInfo.value = 0;\n if (c1.x < c2.x) {\n eightDirInfo.value |= LEFT_BIT;\n } else {\n eightDirInfo.value |= RIGHT_BIT;\n }\n if (c1.y < c2.y) {\n eightDirInfo.value |= TOP_BIT;\n } else {\n eightDirInfo.value |= BOTTOM_BIT;\n }\n }\n return c1.relativeTo(c2);\n } else {\n if (this.y < rect.y + rect.height - 1 && rect.y < this.y + this.height - 1) {\n if (eightDirInfo) {\n eightDirInfo.value = this.x < rect.x ? LEFT_BIT : RIGHT_BIT;\n }\n return this.x < rect.x ? LEFT : RIGHT;\n } else if (this.x < rect.x + rect.width - 1 && rect.x < this.x + this.width - 1) {\n if (eightDirInfo) {\n eightDirInfo.value = this.y < rect.y ? TOP_BIT : BOTTOM_BIT;\n }\n return this.y < rect.y ? TOP : BOTTOM;\n } else {\n if (this.x < rect.x) {\n if (this.y > rect.y) {\n if (eightDirInfo) {\n eightDirInfo.value = LEFT_BIT | BOTTOM_BIT;\n }\n return this.center.relativeTo(rect.bottomLeft);\n } else {\n if (eightDirInfo) {\n eightDirInfo.value = TOP_BIT | LEFT_BIT;\n }\n return this.center.relativeTo(rect.topLeft);\n }\n } else {\n if (this.y > rect.y) {\n if (eightDirInfo) {\n eightDirInfo.value = BOTTOM_BIT | RIGHT_BIT;\n }\n return this.center.relativeTo(rect.bottomRight);\n } else {\n if (eightDirInfo) {\n eightDirInfo.value = TOP_BIT | RIGHT_BIT;\n }\n return this.center.relativeTo(rect.topRight);\n }\n }\n }\n }\n }\n getEdge(dir) {\n switch (dir) {\n case \"left\":\n return this.leftEdge;\n case \"top\":\n return this.topEdge;\n case \"right\":\n return this.rightEdge;\n case \"bottom\":\n return this.bottomEdge;\n }\n }\n containPoint(point) {\n return this.x <= point.x && this.x + this.width - 1 >= point.x && this.y <= point.y && this.y + this.height - 1 >= point.y;\n }\n containRect(rect) {\n return this.x <= rect.x && this.y <= rect.y && this.x + this.width - 1 >= rect.x + rect.width - 1 && this.y + this.height - 1 >= rect.y + rect.height - 1;\n }\n /**\n * 获取矩形中离点最近的点\n * @param point \n */\n getClosestPoint(point) {\n if (this.containPoint(point)) {\n return point.clone();\n } else if (this.x <= point.x && this.x + this.width - 1 >= point.x) {\n return new Point(point.x, point.y < this.y ? this.y : this.y + this.width - 1);\n } else if (this.y <= point.y && this.y + this.height - 1 >= point.y) {\n return new Point(point.x < this.x ? this.x : this.x + this.width - 1, point.y);\n } else {\n if (point.x < this.x) {\n return point.y < this.y ? this.topLeft : this.bottomLeft;\n } else {\n return point.y < this.y ? this.topRight : this.bottomRight;\n }\n }\n }\n get topLeft() {\n return new Point(this.x, this.y);\n }\n get topRight() {\n return new Point(this.x + this.width - 1, this.y);\n }\n get bottomLeft() {\n return new Point(this.x, this.y + this.height - 1);\n }\n get bottomRight() {\n return new Point(this.x + this.width - 1, this.y + this.height - 1);\n }\n get center() {\n return new Point(Math.round(this.x + this.width / 2), Math.round(this.y + this.height / 2));\n }\n get leftEdge() {\n return new Line(this.topLeft, this.bottomLeft);\n }\n get topEdge() {\n return new Line(this.topLeft, this.topRight);\n }\n get rightEdge() {\n return new Line(this.topRight, this.bottomRight);\n }\n get bottomEdge() {\n return new Line(this.bottomLeft, this.bottomRight);\n }\n get left() {\n return this.x;\n }\n get top() {\n return this.y;\n }\n get right() {\n return this.x + this.width - 1;\n }\n get bottom() {\n return this.y + this.height - 1;\n }\n get minX() {\n return this.x;\n }\n get maxX() {\n return this.x + this.width - 1;\n }\n get minY() {\n return this.y;\n }\n get maxY() {\n return this.y + this.height - 1;\n }\n}\n\n//!\n//! utils/JsViewVueWidget/JsvMindMap/DataTree.ts;\n//!\nconst NO_NEIGHBOR = Symbol(\"noNeighbor\");\nlet token = 0;\nclass DataNode {\n idToken = token++;\n static DEFAULT_MOVE_TYPE = \"star\";\n parent = null;\n children = [];\n rect;\n depth;\n customerData;\n customerId;\n moveType = \"inherit\";\n lineList = [];\n //焦点移动相关\n moveInfoCache = {\n moveType: null,\n parentDir: null,\n childDir: null,\n left: null,\n top: null,\n right: null,\n bottom: null\n };\n constructor(rect, depth, id, data, moveType = \"inherit\") {\n this.rect = rect;\n this.depth = depth;\n this.customerData = data;\n this.moveType = moveType;\n this.customerId = id;\n }\n //>>>>为了对接rtree库>>>>\n get minX() {\n return this.rect.minX;\n }\n get maxX() {\n return this.rect.maxX;\n }\n get minY() {\n return this.rect.minY;\n }\n get maxY() {\n return this.rect.maxY;\n }\n //<<<<<<<<\n addLine(lineObj) {\n this.lineList.push(lineObj);\n }\n getLineList() {\n return this.lineList;\n }\n getParentDir() {\n return this.moveInfoCache.parentDir;\n }\n insert(r) {\n this.children.push(r);\n r.parent = this;\n }\n find(equalFunc) {\n if (equalFunc(this)) {\n return this;\n } else if (this.children.length > 0) {\n for (let i of this.children) {\n const result = i.find(equalFunc);\n if (result) {\n return result;\n }\n }\n }\n return null;\n }\n /**\n * 获取子tree的所有节点的列表(包含此节点)\n */\n all() {\n const nodeList = [];\n const queue = [];\n queue.push(this);\n while (queue.length > 0) {\n const n = queue.pop();\n if (n) {\n nodeList.push(n);\n if (n.children.length > 0) {\n queue.push(...n.children);\n }\n }\n }\n return nodeList;\n }\n /**\n * 寻找指定方向的node\n * 移动逻辑说明:\n * moveType代表本节点和其子节点之间的移动方式\n * star: \n */\n findNode(direction) {\n if (this.moveInfoCache[direction] == null) {\n this.calculateMoveInfo();\n }\n return this.moveInfoCache[direction] == NO_NEIGHBOR ? null : this.moveInfoCache[direction];\n }\n calculateMoveInfo() {\n const directions = /* @__PURE__ */ new Set([LEFT, TOP, RIGHT, BOTTOM]);\n if (this.moveInfoCache.parentDir == null) {\n if (this.parent) {\n const pMoveType = this.parent.getMoveType();\n if (pMoveType == \"layer\") {\n const dir = opposite(this.parent.getLayoutChildDir());\n this.parent.children.forEach((i) => {\n i.moveInfoCache.parentDir = dir;\n i.moveInfoCache[dir] = this.parent;\n });\n } else {\n const dir = this.parent.rect.relativeTo(this.rect);\n this.moveInfoCache.parentDir = dir;\n this.moveInfoCache[dir] = this.parent;\n }\n }\n }\n if (this.moveInfoCache.parentDir) {\n directions.delete(this.moveInfoCache.parentDir);\n }\n const moveType = this.getMoveType();\n if (this.children.length == 0) {\n if (this.moveInfoCache.parentDir) {\n const dir = opposite(this.moveInfoCache.parentDir);\n this.moveInfoCache[dir] = NO_NEIGHBOR;\n directions.delete(dir);\n } else {\n }\n } else {\n if (moveType == \"layer\") {\n const dir = this.getLayoutChildDir();\n const nearest = this.findNearest(this.children);\n this.moveInfoCache[dir] = nearest;\n const oppositeDir = opposite(dir);\n this.children.forEach((i) => {\n i.moveInfoCache.parentDir = oppositeDir;\n i.moveInfoCache[oppositeDir] = this;\n });\n directions.delete(dir);\n } else {\n const minDistance = {};\n for (let item of this.children) {\n const dir = item.rect.relativeTo(this.rect);\n const distance = item.rect.distance(this.rect, true);\n if (typeof minDistance[dir] == \"undefined\" || minDistance[dir] > distance) {\n minDistance[dir] = distance;\n this.moveInfoCache[dir] = item;\n }\n directions.delete(dir);\n }\n }\n }\n for (let d of directions) {\n if (this.moveInfoCache[d] == null) {\n const node = this.findNearestBrother(d);\n this.moveInfoCache[d] = node == null ? NO_NEIGHBOR : node;\n }\n }\n }\n getLayoutChildDir() {\n const commonDir = this.findListCommonDir(this.children);\n let dir;\n if (commonDir != null) {\n dir = commonDir;\n } else {\n console.warn(\"layer mode while children node are not at same side of parent.\");\n const nearest = this.findNearest(this.children);\n dir = nearest.rect.relativeTo(this.rect);\n }\n return dir;\n }\n findListCommonDir(list) {\n let result = 15;\n let detail = { value: 0 };\n list.forEach((node) => {\n detail.value = 0;\n node.rect.relativeTo(this.rect, detail);\n result &= detail.value;\n });\n if (result & LEFT_BIT) {\n return LEFT;\n } else if (result & TOP_BIT) {\n return TOP;\n } else if (result & RIGHT_BIT) {\n return RIGHT;\n } else if (result & BOTTOM_BIT) {\n return BOTTOM;\n } else {\n return null;\n }\n }\n /**\n * 寻找指定方向的同级节点, 寻找逻辑:\n * 1. 寻找该方向的最近兄弟节点, 否则就寻找父的最近兄弟节点, 直到找到节点或者到达根节点\n * 2. 若找到的是其他子树的节点, 则往叶方向寻找与本分支同级节点最近的节点, 直到无子或者找到与本节点同级的节点为止\n * @param direction\n */\n findNearestBrother(direction) {\n let result = null;\n let stack = [this];\n while (stack.length > 0) {\n const target = stack[stack.length - 1];\n if (target.parent) {\n if (target.parent.children.length > 0) {\n const nearestNode = target.findDirNearest(target.parent.children, direction);\n if (nearestNode != null) {\n result = nearestNode;\n stack.pop();\n while (stack.length > 0 && result.children.length > 0) {\n const t = stack.pop();\n const n = t.findDirNearest(result.children, direction);\n if (n) {\n result = n;\n }\n }\n break;\n } else {\n stack.push(target.parent);\n }\n } else {\n stack.push(target.parent);\n }\n } else {\n break;\n }\n }\n return result;\n }\n cleanMoveInfoCache() {\n this.moveInfoCache.left = null;\n this.moveInfoCache.top = null;\n this.moveInfoCache.right = null;\n this.moveInfoCache.bottom = null;\n this.moveInfoCache.moveType = null;\n this.moveInfoCache.parentDir = null;\n if (this.children) {\n this.children.forEach((i) => i.cleanMoveInfoCache());\n }\n }\n getMoveType() {\n if (this.moveInfoCache.moveType)\n return this.moveInfoCache.moveType;\n let type = this.moveType;\n if (type == \"inherit\") {\n type = DataNode.DEFAULT_MOVE_TYPE;\n let node = this.parent;\n while (node) {\n if (node.moveType != \"inherit\") {\n type = node.moveType;\n break;\n }\n }\n }\n this.moveInfoCache.moveType = type;\n return type;\n }\n /**\n * 寻找最近的node\n */\n findNearest(list, minDistance = Infinity) {\n if (this.children.length == 0)\n return null;\n let targetChild = null;\n for (let i of list) {\n if (i != this) {\n const d = this.rect.distance(i.rect);\n if (d < minDistance) {\n minDistance = d;\n targetChild = i;\n }\n }\n }\n return targetChild;\n }\n //寻找指定方向最近item\n findDirNearest(list, direction) {\n if (!list || list.length == 0)\n return null;\n let targetChild = null;\n let dirDetail = { value: 0 };\n let minDistance = Infinity;\n const dirBit = dirStrToBit(direction);\n for (let i of list) {\n if (i != this) {\n dirDetail.value = 0;\n i.rect.relativeTo(this.rect, dirDetail);\n if (dirDetail.value & dirBit) {\n const d = i.rect.distance(this.rect, true);\n if (d < minDistance) {\n minDistance = d;\n targetChild = i;\n }\n }\n }\n }\n return targetChild;\n }\n //描画相关代码\n customerListener = {};\n mounted = false;\n focused = false;\n divRef = null;\n lineStyle = null;\n setLineStyle(style) {\n this.lineStyle = style;\n }\n getLineStyle() {\n return this.lineStyle;\n }\n onFocus() {\n this.focused = true;\n this.customerListener.onFocus?.();\n }\n onBlur() {\n this.focused = false;\n this.customerListener.onBlur?.();\n }\n onClick() {\n this.customerListener.onClick?.();\n }\n getRegister() {\n return {\n register: (name, func) => {\n this.customerListener[name] = func;\n }\n };\n }\n onRef = (divRef) => {\n if (this.divRef == null && !!divRef) {\n this.mounted = true;\n this.divRef = divRef;\n if (this.focused) {\n this.customerListener.onFocus?.();\n }\n } else if (this.divRef != null && !divRef) {\n this.divRef = null;\n this.mounted = false;\n this.customerListener = {};\n }\n };\n}\n\n//!\n//! utils/JsViewVueWidget/JsvMindMap/rtree.js;\n//!\nfunction quickselect(arr, k, left, right, compare) {\n quickselectStep(arr, k, left || 0, right || arr.length - 1, compare || defaultCompare);\n}\nfunction quickselectStep(arr, k, left, right, compare) {\n while (right > left) {\n if (right - left > 600) {\n var n = right - left + 1;\n var m = k - left + 1;\n var z = Math.log(n);\n var s = 0.5 * Math.exp(2 * z / 3);\n var sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n var newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n var newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n quickselectStep(arr, k, newLeft, newRight, compare);\n }\n var t = arr[k];\n var i = left;\n var j = right;\n swap(arr, left, k);\n if (compare(arr[right], t) > 0) {\n swap(arr, left, right);\n }\n while (i < j) {\n swap(arr, i, j);\n i++;\n j--;\n while (compare(arr[i], t) < 0) {\n i++;\n }\n while (compare(arr[j], t) > 0) {\n j--;\n }\n }\n if (compare(arr[left], t) === 0) {\n swap(arr, left, j);\n } else {\n j++;\n swap(arr, j, right);\n }\n if (j <= k) {\n left = j + 1;\n }\n if (k <= j) {\n right = j - 1;\n }\n }\n}\nfunction swap(arr, i, j) {\n var tmp = arr[i];\n arr[i] = arr[j];\n arr[j] = tmp;\n}\nfunction defaultCompare(a, b) {\n return a < b ? -1 : a > b ? 1 : 0;\n}\nvar RBush = function RBush2(maxEntries) {\n if (maxEntries === void 0)\n maxEntries = 9;\n this._maxEntries = Math.max(4, maxEntries);\n this._minEntries = Math.max(2, Math.ceil(this._maxEntries * 0.4));\n this.clear();\n};\nRBush.prototype.all = function all() {\n return this._all(this.data, []);\n};\nRBush.prototype.search = function search(bbox) {\n var node = this.data;\n var result = [];\n if (!intersects(bbox, node)) {\n return result;\n }\n var toBBox2 = this.toBBox;\n var nodesToSearch = [];\n while (node) {\n for (var i = 0; i < node.children.length; i++) {\n var child = node.children[i];\n var childBBox = node.leaf ? toBBox2(child) : child;\n if (intersects(bbox, childBBox)) {\n if (node.leaf) {\n result.push(child);\n } else if (contains(bbox, childBBox)) {\n this._all(child, result);\n } else {\n nodesToSearch.push(child);\n }\n }\n }\n node = nodesToSearch.pop();\n }\n return result;\n};\nRBush.prototype.collides = function collides(bbox) {\n var node = this.data;\n if (!intersects(bbox, node)) {\n return false;\n }\n var nodesToSearch = [];\n while (node) {\n for (var i = 0; i < node.children.length; i++) {\n var child = node.children[i];\n var childBBox = node.leaf ? this.toBBox(child) : child;\n if (intersects(bbox, childBBox)) {\n if (node.leaf || contains(bbox, childBBox)) {\n return true;\n }\n nodesToSearch.push(child);\n }\n }\n node = nodesToSearch.pop();\n }\n return false;\n};\nRBush.prototype.load = function load(data) {\n if (!(data && data.length)) {\n return this;\n }\n if (data.length < this._minEntries) {\n for (var i = 0; i < data.length; i++) {\n this.insert(data[i]);\n }\n return this;\n }\n var node = this._build(data.slice(), 0, data.length - 1, 0);\n if (!this.data.children.length) {\n this.data = node;\n } else if (this.data.height === node.height) {\n this._splitRoot(this.data, node);\n } else {\n if (this.data.height < node.height) {\n var tmpNode = this.data;\n this.data = node;\n node = tmpNode;\n }\n this._insert(node, this.data.height - node.height - 1, true);\n }\n return this;\n};\nRBush.prototype.insert = function insert(item) {\n if (item) {\n this._insert(item, this.data.height - 1);\n }\n return this;\n};\nRBush.prototype.clear = function clear() {\n this.data = createNode([]);\n return this;\n};\nRBush.prototype.trace = function trace(item, equalsFn, indexGetter = null) {\n if (!item) {\n return [];\n }\n var node = this.data;\n var bbox = this.toBBox(item);\n var path = [];\n var indexes = [];\n var i, parent, goingUp;\n let found = false;\n while (node || path.length) {\n if (!node) {\n node = path.pop();\n parent = path[path.length - 1];\n i = indexes.pop();\n goingUp = true;\n }\n if (node.leaf) {\n var index = findItem(item, node.children, equalsFn);\n if (index !== -1) {\n if (indexGetter) {\n indexGetter.value = index;\n }\n path.push(node);\n found = true;\n break;\n }\n }\n if (!goingUp && !node.leaf && contains(node, bbox)) {\n path.push(node);\n indexes.push(i);\n i = 0;\n parent = node;\n node = node.children[0];\n } else if (parent) {\n i++;\n node = parent.children[i];\n goingUp = false;\n } else {\n node = null;\n }\n }\n return found ? path : [];\n};\nRBush.prototype.remove = function remove(item, equalsFn) {\n if (!item) {\n return this;\n }\n const index = {};\n const trace2 = this.trace(item, equalsFn, index);\n if (trace2.length > 0) {\n trace2[trace2.length - 1].splice(index.value);\n this._condense(trace2);\n }\n return this;\n};\nRBush.prototype.toBBox = function toBBox(item) {\n return item;\n};\nRBush.prototype.compareMinX = function compareMinX(a, b) {\n return a.minX - b.minX;\n};\nRBush.prototype.compareMinY = function compareMinY(a, b) {\n return a.minY - b.minY;\n};\nRBush.prototype.toJSON = function toJSON() {\n return this.data;\n};\nRBush.prototype.fromJSON = function fromJSON(data) {\n this.data = data;\n return this;\n};\nRBush.prototype._all = function _all(node, result) {\n var nodesToSearch = [];\n while (node) {\n if (node.leaf) {\n result.push.apply(result, node.children);\n } else {\n nodesToSearch.push.apply(nodesToSearch, node.children);\n }\n node = nodesToSearch.pop();\n }\n return result;\n};\nRBush.prototype._build = function _build(items, left, right, height) {\n var N = right - left + 1;\n var M = this._maxEntries;\n var node;\n if (N <= M) {\n node = createNode(items.slice(left, right + 1));\n calcBBox(node, this.toBBox);\n return node;\n }\n if (!height) {\n height = Math.ceil(Math.log(N) / Math.log(M));\n M = Math.ceil(N / Math.pow(M, height - 1));\n }\n node = createNode([]);\n node.leaf = false;\n node.height = height;\n var N2 = Math.ceil(N / M);\n var N1 = N2 * Math.ceil(Math.sqrt(M));\n multiSelect(items, left, right, N1, this.compareMinX);\n for (var i = left; i <= right; i += N1) {\n var right2 = Math.min(i + N1 - 1, right);\n multiSelect(items, i, right2, N2, this.compareMinY);\n for (var j = i; j <= right2; j += N2) {\n var right3 = Math.min(j + N2 - 1, right2);\n node.children.push(this._build(items, j, right3, height - 1));\n }\n }\n calcBBox(node, this.toBBox);\n return node;\n};\nRBush.prototype._chooseSubtree = function _chooseSubtree(bbox, node, level, path) {\n while (true) {\n path.push(node);\n if (node.leaf || path.length - 1 === level) {\n break;\n }\n var minArea = Infinity;\n var minEnlargement = Infinity;\n var targetNode = void 0;\n for (var i = 0; i < node.children.length; i++) {\n var child = node.children[i];\n var area = bboxArea(child);\n var enlargement = enlargedArea(bbox, child) - area;\n if (enlargement < minEnlargement) {\n minEnlargement = enlargement;\n minArea = area < minArea ? area : minArea;\n targetNode = child;\n } else if (enlargement === minEnlargement) {\n if (area < minArea) {\n minArea = area;\n targetNode = child;\n }\n }\n }\n node = targetNode || node.children[0];\n }\n return node;\n};\nRBush.prototype._insert = function _insert(item, level, isNode) {\n var bbox = isNode ? item : this.toBBox(item);\n var insertPath = [];\n var node = this._chooseSubtree(bbox, this.data, level, insertPath);\n node.children.push(item);\n extend(node, bbox);\n while (level >= 0) {\n if (insertPath[level].children.length > this._maxEntries) {\n this._split(insertPath, level);\n level--;\n } else {\n break;\n }\n }\n this._adjustParentBBoxes(bbox, insertPath, level);\n};\nRBush.prototype._split = function _split(insertPath, level) {\n var node = insertPath[level];\n var M = node.children.length;\n var m = this._minEntries;\n this._chooseSplitAxis(node, m, M);\n var splitIndex = this._chooseSplitIndex(node, m, M);\n var newNode = createNode(node.children.splice(splitIndex, node.children.length - splitIndex));\n newNode.height = node.height;\n newNode.leaf = node.leaf;\n calcBBox(node, this.toBBox);\n calcBBox(newNode, this.toBBox);\n if (level) {\n insertPath[level - 1].children.push(newNode);\n } else {\n this._splitRoot(node, newNode);\n }\n};\nRBush.prototype._splitRoot = function _splitRoot(node, newNode) {\n this.data = createNode([node, newNode]);\n this.data.height = node.height + 1;\n this.data.leaf = false;\n calcBBox(this.data, this.toBBox);\n};\nRBush.prototype._chooseSplitIndex = function _chooseSplitIndex(node, m, M) {\n var index;\n var minOverlap = Infinity;\n var minArea = Infinity;\n for (var i = m; i <= M - m; i++) {\n var bbox1 = distBBox(node, 0, i, this.toBBox);\n var bbox2 = distBBox(node, i, M, this.toBBox);\n var overlap = intersectionArea(bbox1, bbox2);\n var area = bboxArea(bbox1) + bboxArea(bbox2);\n if (overlap < minOverlap) {\n minOverlap = overlap;\n index = i;\n minArea = area < minArea ? area : minArea;\n } else if (overlap === minOverlap) {\n if (area < minArea) {\n minArea = area;\n index = i;\n }\n }\n }\n return index || M - m;\n};\nRBush.prototype._chooseSplitAxis = function _chooseSplitAxis(node, m, M) {\n var compareMinX2 = node.leaf ? this.compareMinX : compareNodeMinX;\n var compareMinY2 = node.leaf ? this.compareMinY : compareNodeMinY;\n var xMargin = this._allDistMargin(node, m, M, compareMinX2);\n var yMargin = this._allDistMargin(node, m, M, compareMinY2);\n if (xMargin < yMargin) {\n node.children.sort(compareMinX2);\n }\n};\nRBush.prototype._allDistMargin = function _allDistMargin(node, m, M, compare) {\n node.children.sort(compare);\n var toBBox2 = this.toBBox;\n var leftBBox = distBBox(node, 0, m, toBBox2);\n var rightBBox = distBBox(node, M - m, M, toBBox2);\n var margin = bboxMargin(leftBBox) + bboxMargin(rightBBox);\n for (var i = m; i < M - m; i++) {\n var child = node.children[i];\n extend(leftBBox, node.leaf ? toBBox2(child) : child);\n margin += bboxMargin(leftBBox);\n }\n for (var i$1 = M - m - 1; i$1 >= m; i$1--) {\n var child$1 = node.children[i$1];\n extend(rightBBox, node.leaf ? toBBox2(child$1) : child$1);\n margin += bboxMargin(rightBBox);\n }\n return margin;\n};\nRBush.prototype._adjustParentBBoxes = function _adjustParentBBoxes(bbox, path, level) {\n for (var i = level; i >= 0; i--) {\n extend(path[i], bbox);\n }\n};\nRBush.prototype._condense = function _condense(path) {\n for (var i = path.length - 1, siblings = void 0; i >= 0; i--) {\n if (path[i].children.length === 0) {\n if (i > 0) {\n siblings = path[i - 1].children;\n siblings.splice(siblings.indexOf(path[i]), 1);\n } else {\n this.clear();\n }\n } else {\n calcBBox(path[i], this.toBBox);\n }\n }\n};\nfunction findItem(item, items, equalsFn) {\n if (!equalsFn) {\n return items.indexOf(item);\n }\n for (var i = 0; i < items.length; i++) {\n if (equalsFn(item, items[i])) {\n return i;\n }\n }\n return -1;\n}\nfunction calcBBox(node, toBBox2) {\n distBBox(node, 0, node.children.length, toBBox2, node);\n}\nfunction distBBox(node, k, p, toBBox2, destNode) {\n if (!destNode) {\n destNode = createNode(null);\n }\n destNode.minX = Infinity;\n destNode.minY = Infinity;\n destNode.maxX = -Infinity;\n destNode.maxY = -Infinity;\n for (var i = k; i < p; i++) {\n var child = node.children[i];\n extend(destNode, node.leaf ? toBBox2(child) : child);\n }\n return destNode;\n}\nfunction extend(a, b) {\n a.minX = Math.min(a.minX, b.minX);\n a.minY = Math.min(a.minY, b.minY);\n a.maxX = Math.max(a.maxX, b.maxX);\n a.maxY = Math.max(a.maxY, b.maxY);\n return a;\n}\nfunction compareNodeMinX(a, b) {\n return a.minX - b.minX;\n}\nfunction compareNodeMinY(a, b) {\n return a.minY - b.minY;\n}\nfunction bboxArea(a) {\n return (a.maxX - a.minX) * (a.maxY - a.minY);\n}\nfunction bboxMargin(a) {\n return a.maxX - a.minX + (a.maxY - a.minY);\n}\nfunction enlargedArea(a, b) {\n return (Math.max(b.maxX, a.maxX) - Math.min(b.minX, a.minX)) * (Math.max(b.maxY, a.maxY) - Math.min(b.minY, a.minY));\n}\nfunction intersectionArea(a, b) {\n var minX = Math.max(a.minX, b.minX);\n var minY = Math.max(a.minY, b.minY);\n var maxX = Math.min(a.maxX, b.maxX);\n var maxY = Math.min(a.maxY, b.maxY);\n return Math.max(0, maxX - minX) * Math.max(0, maxY - minY);\n}\nfunction contains(a, b) {\n return a.minX <= b.minX && a.minY <= b.minY && b.maxX <= a.maxX && b.maxY <= a.maxY;\n}\nfunction intersects(a, b) {\n return b.minX <= a.maxX && b.minY <= a.maxY && b.maxX >= a.minX && b.maxY >= a.minY;\n}\nfunction createNode(children) {\n return {\n children,\n height: 1,\n leaf: true,\n minX: Infinity,\n minY: Infinity,\n maxX: -Infinity,\n maxY: -Infinity\n };\n}\nfunction multiSelect(arr, left, right, n, compare) {\n var stack = [left, right];\n while (stack.length) {\n right = stack.pop();\n left = stack.pop();\n if (right - left <= n) {\n continue;\n }\n var mid = left + Math.ceil((right - left) / n / 2) * n;\n quickselect(arr, mid, left, right, compare);\n stack.push(left, mid, mid, right);\n }\n}\n\n//!\n//! utils/JsViewVueWidget/JsvMindMap/JsvMindMap.vue;\n//!\n/*! <!-- \n * @Author: ChenChanghua\n * @Date: 2023-11-06 16:08:58\n * @Description: file content\n -->\n\n<!-- \n[界面概述]\n 思维导图控件\n \n[控件介绍]\n JsvMindMap:\n props:\n name: {string} 焦点name\n provideData: {function} 提供数据的函数\n width: {number} 组件宽\n height: {number} 组件高\n formatNode: {function} 接受数据, 返回标准格式节点信息的函数\n {\n left: number, left(必需)\n top: number, top(必需)\n width: number, width(必需)\n height: number, height(必需)\n id: string, 节点的唯一id(必需)\n childrenList: Array<any>, 子数据列表\n moveType: \"star\" | \"layer\" | \"inherit\", 节点布局类型(可选)\n lineStyle: object 此节点线的style\n { \n lineWidth: number, 线宽\n backgroundColor: string, 线的颜色(与backgroundImage互斥)\n backgroundImage: string, 线的图片(与backgroundColor互斥)\n borderRadius: string | number, 线的圆角设置\n }\n }\n left: {number} 组件left\n top: {number} 组件top\n slideAnim: {object} 滚动动画设置, { duration: number, easing?: string }, duration为毫秒\n onEdge: {function} 到达边缘回调\n focusRectPadding: {number} 焦点区域内边距\n renderRectMargin: {number} 描画区域外边距\n methods:\n getCurFocusNode\n @description 获取当前焦点的数据\n @return {object} 当前焦点节点的数据\n getCurFocusId\n @description 获取当前焦点的id\n @return {string} 当前节点的id\n getCurVisibleRect\n @description 获取当前的可视区域\n @return {object} 可视区域{x: number, y: number, width: number, height: number}\n slideTo\n @description 滚动到指定位置\n @params {int} x x坐标\n @params {int} y y坐标\n @params {object} animInfo 动画设置, 为null时不做动画. {duration: number, easing: string, onEnd: function}\n setFocusTo\n @description 设置焦点\n @params {string} id 目标节点的id\n @params {boolean} needSlide 是否需要滚动\n @params {object} animInfo 滚动动画设置\n moveInItem\n @description 把指定节点移入焦点区域\n @params {string} id 目标节点的id\n @params {object} animInfo 动画信息\n moveFocus\n @description 往指定方向移动焦点\n @params {string} direction 移动方向 \"left\" | \"top\" | \"right\" | \"bottom\"\n getEntireTreeBoundingSize\n @description 获取整个树的包围框宽高\n @return {object} 宽高 {width: number, height: number}\n refreshData\n @description 刷新数据\n \n[额外说明]\n1. 焦点移动逻辑\n 每个节点首先有个父方向, 若父节点是star模式, 则父方向由父节点相对位置决定, 若父节点是layer模式, 则父方向为父节点子方向的反向\n layer模式的节点, 有一个子方向, 其子方向是所有子所在的一侧方向(只有上下左右四侧), 若无子, 则父方向的反向为子方向. 确定了父方向和子方向后, 剩余两个方向则寻找该方向最近的兄弟节点, 若无则寻找最近分支上最近的同级或者叶节点\n star模式的节点, 除了父方向, 剩余三个方向均寻找相应方向的最近子节点, 若未找到则按layer寻找兄弟节点相同的逻辑寻找同级节点\n -->\n\n\n\n */\nconst _sfc_main$3 = {\n __name: \"JsvMindMap\",\n props: {\n name: {\n //组件的焦点名\n type: String,\n required: true\n },\n provideData: {\n //提供数据的回调\n type: Function,\n required: true\n },\n width: {\n //组件宽\n type: Number,\n required: true\n },\n height: {\n //组件高\n type: Number,\n required: true\n },\n formatNode: {\n /**\n * 标准化节点数据的函数, (data, depth) => Object\n * 节点数据格式\n * {\n * left: number, left(必需)\n * top: number, top(必需)\n * width: number, width(必需)\n * height: number, height(必需)\n * childrenList: Array<any>, 子数据列表\n * id: string, 节点的唯一id(必需)\n * moveType: \"star\" | \"layer\" | \"inherit\", 节点布局类型(可选)\n * lineStyle: { 此节点线的style\n * lineWidth: number, 线宽\n * backgroundColor: string, 线的颜色(与backgroundImage互斥)\n * backgroundImage: string, 线的图片(与backgroundColor互斥)\n * borderRadius: string | number, 线的圆角设置\n * }\n * }\n */\n type: Function,\n required: true\n },\n left: {\n //组件left\n type: Number,\n default: 0\n },\n top: {\n //组件top\n type: Number,\n default: 0\n },\n slideAnim: {\n type: Object\n },\n onEdge: {\n //组件到达边缘的回调\n type: Function\n },\n focusRectPadding: {\n //组件区域向内收缩获得的焦点区域, 获焦的节点会移动到该区域内\n type: Number,\n default: 50\n },\n renderRectMargin: {\n //组件区域向外延展获得的描画区域, 区域内的节点会描画\n type: Number,\n default: 100\n }\n },\n setup(__props, { expose }) {\n const props = __props;\n const TAG = \"JsvMindMap\";\n const dirMap = {\n 37: \"left\",\n 38: \"top\",\n 39: \"right\",\n 40: \"bottom\"\n };\n const edgeDirectionMap = {\n 37: EdgeDirection.left,\n 38: EdgeDirection.top,\n 39: EdgeDirection.right,\n 40: EdgeDirection.bottom\n };\n const dirToKeyCode = {\n left: 37,\n top: 38,\n right: 39,\n bottom: 40\n };\n const defaultLineStyle = {\n lineWidth: 5,\n backgroundColor: \"#000000\"\n };\n let rootNode = null;\n const currentFocusId = ref(0);\n let preFocusNode = null;\n let curFocusNode = null;\n const locateDiv = shallowRef(null);\n const renderNodeList = shallowRef([]);\n const renderLineList = shallowRef([]);\n const widgetWidth = 500;\n const widgetHeight = 500;\n let widgetFocused = false;\n let rTree = null;\n const slideAnimInfo = {\n duration: props.slideAnim?.duration ?? 200,\n easing: props.slideAnim?.easing ?? \"\",\n onEnd: props.slideAnim?.easing ?? (() => {\n })\n };\n const viewPortRect = new Rect(0, 0, widgetWidth, widgetHeight);\n const getRenderRect = () => {\n return new Rect(\n viewPortRect.x - props.renderRectMargin,\n viewPortRect.y - props.renderRectMargin,\n viewPortRect.width + 2 * props.renderRectMargin,\n viewPortRect.height + 2 * props.renderRectMargin\n );\n };\n const getFocusRect = () => {\n return new Rect(\n viewPortRect.x + props.focusRectPadding,\n viewPortRect.y + props.focusRectPadding,\n viewPortRect.width - 2 * props.focusRectPadding,\n viewPortRect.height - 2 * props.focusRectPadding\n );\n };\n const buildNode = (root, data) => {\n let depth = 0;\n if (root != null) {\n depth = root.depth + 1;\n }\n const formatedData = props.formatNode(data, root ? root.depth + 1 : 0);\n const dataNode = new DataNode(\n new Rect(\n formatedData.left,\n formatedData.top,\n formatedData.width,\n formatedData.height\n ),\n depth,\n formatedData.id,\n data,\n formatedData.moveType ?? \"layer\"\n );\n dataNode.setLineStyle(formatedData.lineStyle ?? defaultLineStyle);\n if (root == null) {\n rootNode = dataNode;\n } else {\n root.insert(dataNode);\n }\n if (formatedData.childrenList?.length > 0) {\n for (let child of formatedData.childrenList) {\n buildNode(dataNode, child);\n }\n }\n };\n const buildTree = () => {\n rootNode = null;\n rTree = null;\n buildNode(null, props.provideData());\n const allNodeList = rootNode.all();\n allNodeList.forEach((i) => i.calculateMoveInfo());\n rTree = new RBush();\n allNodeList.forEach((node) => rTree.insert(node));\n for (let i = 1; i < allNodeList.length; ++i) {\n const node = allNodeList[i];\n const parentDir = node.getParentDir();\n const lineStyle = node.parent.getLineStyle();\n const lineObj = {\n startPos: node.parent.rect.getEdge(opposite(parentDir)).center,\n endPos: node.rect.getEdge(parentDir).center,\n idToken: node.parent.idToken + \"_\" + node.idToken,\n ...lineStyle\n };\n node.addLine(lineObj);\n node.parent.addLine(lineObj);\n }\n curFocusNode = rootNode;\n };\n const visibleListStore = {\n _tmpList: [],\n _curList: [],\n _merge(l1, l2) {\n const pre = l1.concat();\n const set = new Set(pre);\n l2.forEach((i) => set.add(i));\n return Array.from(set);\n },\n setCurList(list) {\n const newTmp = this._merge(this._curList, list);\n this._tmpList = this._merge(this._tmpList, newTmp);\n this._curList = list;\n },\n getTmp() {\n return this._tmpList;\n },\n getCur() {\n this._tmpList = this._curList;\n return this._curList;\n }\n };\n const setFocusNode = (node) => {\n if (!node)\n return;\n preFocusNode = curFocusNode;\n curFocusNode = node;\n currentFocusId.value = curFocusNode.customerId;\n if (widgetFocused) {\n preFocusNode?.onBlur();\n curFocusNode?.onFocus();\n }\n };\n const moveInNode = (node, animInfo) => {\n if (node) {\n const moveTarget = getMoveInfo(node);\n if (moveTarget) {\n moveTo(moveTarget, animInfo);\n }\n }\n };\n const focusToNext = (keyCode) => {\n const dirStr = dirMap[keyCode];\n const nextNode = curFocusNode.findNode(dirStr);\n if (nextNode) {\n setFocusNode(nextNode);\n moveInNode(curFocusNode, {\n duration: slideAnimInfo.duration\n });\n } else {\n if (props.onEdge) {\n props.onEdge({\n direction: edgeDirectionMap[keyCode],\n rect: {\n x: curFocusNode?.rect.x ?? 0,\n y: curFocusNode?.rect.y ?? 0,\n width: curFocusNode?.rect.width ?? 0,\n height: curFocusNode?.rect.height ?? 0\n }\n });\n }\n }\n };\n const locateDivPos = reactive({\n left: viewPortRect.x,\n top: viewPortRect.y\n });\n const moveTo = (info, animInfo) => {\n if (!info)\n return;\n if (info.x != viewPortRect.x || info.y != viewPortRect.y) {\n viewPortRect.x = info.x;\n viewPortRect.y = info.y;\n const preLeft = locateDivPos.left, preTop = locateDivPos.top;\n locateDivPos.left = -viewPortRect.x;\n locateDivPos.top = -viewPortRect.y;\n visibleListStore.setCurList(rTree.search(getRenderRect()));\n if (animInfo && !isNaN(animInfo.duration)) {\n const forgeAnim = new Forge.TranslateAnimation(\n preLeft - locateDivPos.left,\n 0,\n preTop - locateDivPos.top,\n 0,\n animInfo.duration,\n animInfo.easing\n );\n forgeAnim.SetAnimationListener(\n new Forge.AnimationListener(\n null,\n () => {\n updateVisible(visibleListStore.getCur());\n animInfo.onEnd?.();\n },\n null\n )\n );\n locateDiv.value?.jsvGetProxyView(true).StartAnimation(forgeAnim);\n updateVisible(visibleListStore.getTmp());\n } else {\n updateVisible(visibleListStore.getCur());\n }\n }\n };\n const getMoveInfo = (node) => {\n const rect = node.rect;\n const rectCenter = rect.center;\n const focusRect = getFocusRect();\n const centerTargetRect = new Rect(\n focusRect.x + Math.round(rect.width / 2),\n focusRect.y + Math.round(rect.height / 2),\n focusRect.width - rect.width,\n focusRect.height - rect.height\n );\n if (!centerTargetRect.containPoint(rectCenter)) {\n const point = centerTargetRect.getClosestPoint(rectCenter);\n return {\n x: viewPortRect.x + rectCenter.x - point.x,\n y: viewPortRect.y + rectCenter.y - point.y\n };\n }\n return null;\n };\n const updateVisible = (list) => {\n renderNodeList.value = list;\n const lineSet = /* @__PURE__ */ new Set();\n for (let node of list) {\n let list2 = node.getLineList();\n for (let line of list2) {\n lineSet.add(line);\n }\n }\n renderLineList.value = Array.from(lineSet);\n };\n const focusBlockOnFocus = () => {\n widgetFocused = true;\n curFocusNode?.onFocus();\n };\n const focusBlockOnBlur = () => {\n widgetFocused = false;\n curFocusNode?.onBlur();\n };\n const onKeyDown = (ev) => {\n switch (ev.keyCode) {\n case 37:\n case 38:\n case 39:\n case 40:\n {\n focusToNext(ev.keyCode);\n }\n return true;\n case 13:\n curFocusNode?.onClick();\n return true;\n default:\n return false;\n }\n };\n {\n buildTree();\n const center = curFocusNode.rect.center;\n const viewPortPos = {\n x: Math.round(center.x - viewPortRect.width / 2),\n y: Math.round(center.y - viewPortRect.height / 2)\n };\n moveTo(viewPortPos);\n }\n const getCurFocusId = () => {\n return currentFocusId.value;\n };\n const getCurFocusNode = () => {\n return curFocusNode.customerData;\n };\n const getCurVisibleRect = () => {\n return viewPortRect;\n };\n const slideTo = (x, y, animInfo) => {\n if (isNaN(x) || isNaN(y)) {\n console.warn(TAG, \"slideTo failed: x and y must be number.\");\n return;\n }\n moveTo({ x, y }, animInfo);\n };\n const setFocusTo = (id, needSlide = true, animInfo) => {\n const node = rootNode.find((n) => n.customerId == id);\n if (!node) {\n console.warn(TAG, `setFocusTo failed: node ${id} not found.`);\n return;\n }\n setFocusNode(node);\n if (needSlide) {\n moveInNode(node, animInfo);\n }\n };\n const moveInItem = (id, animInfo) => {\n const node = rootNode.find((n) => n.customerId == id);\n if (!node) {\n console.warn(TAG, `moveInItem failed: node ${id} not found.`);\n return;\n }\n moveInNode(node, animInfo);\n };\n const getEntireTreeBoundingSize = () => {\n const data = rTree.data;\n return {\n width: data.maxX - data.minX + 1,\n height: data.maxY - data.minY + 1\n };\n };\n const moveFocus = (direction) => {\n if (!direction in dirToKeyCode) {\n console.warn(TAG, \"moveFocus failed: undefined direction \" + direction);\n }\n focusToNext(dirToKeyCode[direction]);\n };\n const refreshData = () => {\n buildTree();\n const center = curFocusNode.rect.center;\n const viewPortPos = {\n x: Math.round(center.x - viewPortRect.width / 2),\n y: Math.round(center.y - viewPortRect.height / 2)\n };\n moveTo(viewPortPos);\n };\n const exposeObj = {\n getCurFocusNode,\n getCurFocusId,\n getCurVisibleRect,\n slideTo,\n setFocusTo,\n moveInItem,\n moveFocus,\n getEntireTreeBoundingSize,\n refreshData\n };\n expose(exposeObj);\n return (_ctx, _cache) => {\n const _component_jsv_focus_block = resolveComponent(\"jsv-focus-block\");\n return openBlock(), createElementBlock(\"div\", {\n style: normalizeStyle({\n left: props.left,\n top: props.top,\n width: unref(viewPortRect).width,\n height: unref(viewPortRect).height,\n overflow: \"hidden\"\n })\n }, [\n createElementVNode(\"div\", {\n ref_key: \"locateDiv\",\n ref: locateDiv,\n style: normalizeStyle({\n left: locateDivPos.left,\n top: locateDivPos.top,\n width: unref(viewPortRect).width,\n height: unref(viewPortRect).height\n })\n }, [\n renderSlot(_ctx.$slots, \"background\"),\n createVNode(_component_jsv_focus_block, {\n autoFocus: \"\",\n onAction: {\n onKeyDown,\n onFocus: focusBlockOnFocus,\n onBlur: focusBlockOnBlur\n }\n }, {\n default: withCtx(() => [\n (openBlock(true), createElementBlock(Fragment, null, renderList(unref(renderLineList), (item) => {\n return openBlock(), createBlock(unref(JsvLine), mergeProps(item, {\n key: item.idToken\n }), null, 16);\n }), 128)),\n (openBlock(true), createElementBlock(Fragment, null, renderList(unref(renderNodeList), (item) => {\n return openBlock(), createElementBlock(\"div\", {\n key: item.idToken,\n ref_for: true,\n ref: item.onRef,\n style: normalizeStyle({\n left: item.rect.left,\n top: item.rect.top,\n width: item.rect.width,\n height: item.rect.height\n })\n }, [\n renderSlot(_ctx.$slots, \"default\", {\n data: item.customerData,\n handler: exposeObj,\n onAction: item.getRegister()\n })\n ], 4);\n }), 128))\n ]),\n _: 3\n }, 8, [\"onAction\"])\n ], 4)\n ], 4);\n };\n }\n};\n\n//!\n//! utils/JsViewVueWidget/JsvMindMap/index.js;\n//!\n\n//!\n//! utils/JsViewVueWidget/index.js;\n//!\n\n//!\n//! utils/JsViewPlugin/JsvPlayer/JsvPlayer.vue;\n//!\n/*! \n\n\n\n\n */\nconst _sfc_main$2 = {\n props: {\n /**\n * 回调函数,播放器对象通知接口\n * @param {Object} video对象,可以通过此video对象调用video相关属性和方法,具体属性和方法定义见JsvMedia.js文件里相关说明。\n */\n onRef: { type: Function, default: () => {\n } },\n /**\n * 属性,Boolean类型,true表示自动播放,默认false。\n */\n autoplay: { type: Boolean, default: false },\n /**\n * 属性,String类型,播放器实例索引,同样的key使用同一个播放器实例。\n */\n playerKey: { type: String, default: null },\n /**\n * 属性,String类型,播放器窗口模式,默认resizable模式。\n * full:观影模式,全屏方式,不建议修改w/h/l/t,视频清晰度/流畅度最佳;\n * resizable:可变窗口模式,可以随意修改w/h/l/t,支持动画效果,视频清晰度/流畅度表现可能不如full模式;\n * pip:画中画模式,只在支持多路硬解的情况下使用,用户画中画的小窗播放,对清晰度/流畅度要求较差,可能会有反交错问题。\n */\n windowMode: { type: String, default: \"resizable\" },\n /**\n * 属性,int类型,底层使用的播放器类型。1:系统播放器;2:jsv视频播放器;3:jsv音频播放器。默认2。\n */\n playerType: { type: Number, default: 2 },\n /**\n * 属性,int类型,播放器解码方式。0:根据硬件能力自动匹配;1:硬解码;2:软解码。默认0(根据芯片能力自动匹配)。\n */\n decodeType: { type: Number, default: 0 },\n /**\n * 属性,Boolean类型,层级关系,true表示在界面的下面,false表示在界面上面,默认true。\n */\n background: { type: Boolean, default: true },\n /**\n * 属性,Boolean类型,true表示静音,默认false。\n */\n muted: { type: Boolean, default: false },\n /**\n * 属性,Boolean类型,true表示循环播放,默认false。\n */\n loop: { type: Boolean, default: false },\n /**\n * 属性,String类型,播放地址。\n */\n src: { type: String, default: \"\" },\n /**\n * 属性,Double类型,起播时间,0-duration。\n */\n currentTime: { type: Number, default: 0 },\n /**\n * 属性,Boolean类型,是否保留最后一帧,true保留,false不保留。\n */\n keepLastFrame: { type: Boolean, default: true },\n /**\n * 属性,String类型,视频显示比例,origin原始比例显示,full全屏显示,x:y按照指定比例显示。\n */\n videoAspectRatio: { type: String, default: \"origin\" },\n /**\n * 属性,JSON Object类型,色度抠像参数,包含color,colorDistance,edgeDistance,greenOffset四个参数,\n * 参考格式:{color: 0x30FF30, colorDistance: 0.15, edgeDistance: 0.4, greenOffset: 0.05}\n * color,色值,int类型,为抠图色值范围的中心点,格式为0xRRGGBB。\n \t * colorDistance,float类型,色域范围,范围0-1.0。\n \t * edgeDistance,float类型,alpha透明度距离,范围colorDistance-1.0,从colorDistance到edgeDistance的alpha值从1.0-0线性递减。\n \t * greenOffset,float类型,红蓝差值,范围0-1.0。\n * 目前只支持扣绿。\n */\n chromaKey: { type: Object, default: null },\n /**\n * 回调函数,播放结束时通过此回调接口通知。\n */\n onEnded: { type: Function, default: () => {\n return {};\n } },\n /**\n * 回调函数,播放错误时通过此接口通知。\n * @param {int} 错误类型,当前定义了四种错误。1是异常中断;2是网络错误;3是解码错误;4是格式不支持。\n */\n onError: { type: Function, default: () => {\n return {};\n } },\n // onAbort: {type: Function, default: ()=>{return{}}},\n /**\n * 回调函数,当正常播放时,每0.5秒上报一次,回调接口里会带上当前时间,也可以使用video对象的currentTime属性去获取当前时间。\n * @param {Long} 当前播放时间,单位秒。\n */\n onTimeUpdate: { type: Function, default: () => {\n return {};\n } },\n /**\n * 回调函数,开始加载,设置完播放地址后,上报此事件。\n */\n onLoadStart: { type: Function, default: () => {\n return {};\n } },\n /**\n * 回调函数,开始正常播放,同一个播放地址仅触发一次。\n */\n onCanPlayThrough: { type: Function, default: () => {\n return {};\n } },\n /**\n * 回调函数,正常下载,duration不变的情况下只触发一次。\n */\n onProgress: { type: Function, default: () => {\n return {};\n } },\n /**\n * 回调函数,视频准备好后触发。\n */\n onLoadedMetaData: { type: Function, default: () => {\n return {};\n } },\n /**\n * 回调函数,视频准备好后触发,这个时候可以正常seek。\n */\n onLoad: { type: Function, default: () => {\n return {};\n } },\n /**\n * 回调函数,视频准备好后触发,这个时候可以获取duration。\n */\n onDurationChange: { type: Function, default: () => {\n return {};\n } },\n /**\n * 回调函数,视频准备好后,seek(修改currentTime)会出发此事件。\n */\n onSeeking: { type: Function, default: () => {\n return {};\n } },\n /**\n * 回调函数,seek完成后触发此事件。\n */\n onSeeked: { type: Function, default: () => {\n return {};\n } },\n /**\n * 回调函数,缓冲时触发。\n */\n onStalled: { type: Function, default: () => {\n return {};\n } },\n /**\n * 回调函数,正常播放后触发。\n */\n onPlaying: { type: Function, default: () => {\n return {};\n } },\n /**\n * 回调函数,正常显示后触发此事件。\n */\n onCanPlay: { type: Function, default: () => {\n return {};\n } },\n /**\n * 回调函数,音频失去焦点后触发此事件,可能会导致pause(点播)或者离开频道(直播)。\n */\n onAudioFocusLoss: { type: Function, default: () => {\n return {};\n } },\n /**\n * 回调函数,音频获取焦点后触发此事件,可能会触发resume(点播)或者加入频道(直播)。\n */\n onAudioFocusGain: { type: Function, default: () => {\n return {};\n } },\n /**\n * 回调函数,直播进入时移状态时,触发此事件。\n */\n onTimeShift: { type: Function, default: () => {\n return {};\n } },\n /**\n * 回调函数,直播进入时移状态时,成功播放触发此事件。\n */\n onTimeShifted: { type: Function, default: () => {\n return {};\n } },\n /**\n * 回调函数,时移回到直播状态,触发此事件。\n */\n onBackLive: { type: Function, default: () => {\n return {};\n } },\n /**\n * 回调函数,时移回到直播状态时,成功播放触发此事件。\n */\n onBackLived: { type: Function, default: () => {\n return {};\n } },\n /**\n * 属性,Object类型,设置窗口属性,同其他组件的style设置。\n */\n style: { type: Object, default: () => {\n return {};\n } },\n /**\n * 属性,Boolean类型,活跃状态,当多个JsvPlayer组件指向一个video对象时,只能有一个处于活跃状态。\n * 视频显示在活跃JsvPlayer设置的显示区域内,事件通知也只会送给活跃的JsvPlayer组件注册的回调函数。\n */\n active: { type: Boolean, default: true }\n },\n components: {\n JsvNativeSharedDiv\n },\n watch: {\n active(newValue) {\n logDebug(\"active newValue: \" + newValue);\n if (this.video && this.playerType !== 3) {\n if (newValue) {\n this.registerEvent();\n this.video.setHoleID(this.holeId);\n this.holeStyle = {\n left: 0,\n top: 0,\n width: this.style.width,\n height: this.style.height\n };\n } else {\n this.holeStyle = {\n left: 0,\n top: 0,\n width: 0,\n height: 0\n };\n }\n }\n },\n style(newValue) {\n logDebug(\"holeStyle newValue: left=\" + newValue.left + \", top=\" + newValue.top + \", width=\" + newValue.width + \", height=\" + newValue.height);\n if (this.active && this.playerType !== 3) {\n this.holeStyle = {\n left: 0,\n top: 0,\n width: newValue.width,\n height: newValue.height\n };\n }\n },\n keepLastFrame(newValue) {\n logDebug(\"keepLastFrame newValue: \" + newValue);\n if (this.video && this.active) {\n this.video.keepLastFrame = this.keepLastFrame;\n }\n }\n },\n setup() {\n return {\n video: null,\n holeId: \"\"\n };\n },\n data() {\n return {\n holeStyle: {}\n };\n },\n created() {\n },\n mounted() {\n logDebug(\"JsvPlayer:\", this.style);\n let key = \"Jsv_\" + Math.floor(Math.random() * 1e4);\n if (this.playerKey) {\n key = this.playerKey;\n }\n logDebug(\"player key:\" + key);\n let player_type = 2;\n if (this.playerType)\n player_type = this.playerType;\n let background = true;\n if (!this.background)\n background = this.background;\n logDebug(\"JsvPlayer background:\" + background);\n const designMap = window.Forge.DesignMap();\n logDebug(\"JsvPlayer:\", this.holeId);\n this.video = findMediaObjectByKey(key);\n let first_create = true;\n if (!this.video) {\n if (player_type === 3) {\n this.video = new JsvMediaAudio(key, designMap.width);\n } else {\n this.video = new JsvMediaVideo(this.holeId, this.windowMode, player_type, key, background, designMap.width, this.decodeType);\n }\n } else {\n this.video.setRef();\n first_create = false;\n }\n if (this.video != null) {\n if (this.active) {\n this.registerEvent();\n if (this.src && this.src !== \"\")\n this.video.src = this.src;\n if (this.currentTime !== 0)\n this.video.currentTime = this.currentTime;\n if (this.autoplay) {\n this.video.autoplay = this.autoplay;\n }\n if (this.muted) {\n this.video.muted = this.muted;\n }\n if (this.loop) {\n this.video.loop = this.loop;\n }\n if (!this.keepLastFrame) {\n this.video.keepLastFrame = this.keepLastFrame;\n }\n if (this.videoAspectRatio !== \"origin\") {\n this.video.videoAspectRatio = this.videoAspectRatio;\n }\n if (this.chromaKey && this.chromaKey !== \"\") {\n this.video.setChromaKey(this.chromaKey);\n }\n if (!first_create) {\n this.video.setHoleID(this.holeId);\n if (this.playerType !== 3) {\n this.holeStyle = {\n left: 0,\n top: 0,\n width: this.style.width,\n height: this.style.height\n };\n }\n }\n }\n this.onRef?.(this.video);\n }\n },\n unmounted() {\n if (this.video != null) {\n this.video.releasePlayer();\n this.onRef?.(null);\n }\n },\n methods: {\n getHoleId(id) {\n logDebug(\"getHoleId:\", id);\n this.holeId = id;\n },\n registerEvent() {\n if (this.video && this.active) {\n this.video.addEventListener(\"end\", this.onEnded);\n this.video.addEventListener(\"error\", this.onError);\n this.video.addEventListener(\"timeupdate\", this.onTimeUpdate);\n this.video.addEventListener(\"loadstart\", () => {\n logDebug(\"JsvPlayer received loadstart event.\");\n if (this.playerType !== 3) {\n this.holeStyle = {\n left: 0,\n top: 0,\n width: this.style.width,\n height: this.style.height\n };\n }\n this.onLoadStart();\n });\n this.video.addEventListener(\"canplaythrough\", this.onCanPlayThrough);\n this.video.addEventListener(\"progress\", this.onProgress);\n this.video.addEventListener(\"loadedmetadata\", this.onLoadedMetaData);\n this.video.addEventListener(\"load\", this.onLoad);\n this.video.addEventListener(\"durationchange\", this.onDurationChange);\n this.video.addEventListener(\"seeking\", this.onSeeking);\n this.video.addEventListener(\"seeked\", this.onSeeked);\n this.video.addEventListener(\"stalled\", this.onStalled);\n this.video.addEventListener(\"playing\", this.onPlaying);\n this.video.addEventListener(\"canplay\", this.onCanPlay);\n this.video.addEventListener(\"audiofocusloss\", this.onAudioFocusLoss);\n this.video.addEventListener(\"audiofocusgain\", this.onAudioFocusGain);\n this.video.addEventListener(\"timeshift\", this.onTimeShift);\n this.video.addEventListener(\"timeshifted\", this.onTimeShifted);\n this.video.addEventListener(\"backlive\", this.onBackLive);\n this.video.addEventListener(\"backlived\", this.onBackLived);\n }\n }\n }\n};\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_JsvNativeSharedDiv = resolveComponent(\"JsvNativeSharedDiv\");\n return $props.playerType != 3 ? (openBlock(), createElementBlock(\"div\", {\n key: 0,\n style: normalizeStyle($props.style),\n backgroundColor: \"rgba(0,0,0,1)\"\n }, [\n createVNode(_component_JsvNativeSharedDiv, {\n style: normalizeStyle($data.holeStyle),\n getId: $options.getHoleId\n }, null, 8, [\"style\", \"getId\"])\n ], 4)) : createCommentVNode(\"\", true);\n}\nconst JsvPlayer = /* @__PURE__ */ _export_sfc(_sfc_main$2, [[\"render\", _sfc_render]]);\n\n//!\n//! utils/JsViewPlugin/JsvPlayer/index.js;\n//!\n//! 考虑到.vue文件除了export default的component外,还有可能export其他对象,因此使用import * as\nlet _JsvPlayer = JsvPlayer;\nlet globalLoadJsvPlayerPlugin = globalLoadJsvPlayerPlugin$1;\nlet globalPreLoadJsvPlayerPlugin = globalPreLoadJsvPlayerPlugin$1;\nlet getJsvPlayerCapabilitySet = getJsvPlayerCapabilitySet$1;\nlet setJsvPlayerDebugMode = setJsvPlayerDebugMode$1;\nlet getJsvPlayerRunningNum = getJsvPlayerRunningNum$1;\nlet globalLoadSetOperator = globalLoadSetOperator$1;\nif (window.jsvIsBrowserDebug) {\n const BrowserPlayer = await import('./browser/BrowserJsvPlayer.vue.mjs');\n _JsvPlayer = BrowserPlayer.default;\n globalLoadJsvPlayerPlugin = (listener) => {\n console.log(\"Loading player plugin\");\n setTimeout(() => {\n listener();\n }, 0);\n };\n globalPreLoadJsvPlayerPlugin = (listener) => {\n console.log(\"Preloading player plugin\");\n setTimeout(() => {\n listener();\n }, 0);\n };\n getJsvPlayerCapabilitySet = () => {\n return null;\n };\n setJsvPlayerDebugMode = () => {\n console.log(\"Set debug mode\");\n };\n getJsvPlayerRunningNum = () => {\n return -1;\n };\n globalLoadSetOperator = (operator) => {\n console.log(\"operator is \" + operator);\n };\n}\n\n//!\n//! utils/JsViewPlugin/JsvAudio/version.mjs;\n//!\nlet PluginInfo$1 = {\n // downloadUrl:\"http://192.168.0.63:8080/plugin/JsvAudio-164.zip\", //插件下载地址\n packageName: \"com.qcode.jsvaudio\",\n name: \"音频插件\",\n version: \"1.0.27\",\n //插件需要的版本号\n versionCodeMin: 27,\n versionCodeMax: 27,\n bridgeName: \"jsvAudioBridge\",\n //插件bridge注册到jsview的名称\n className: \"com.qcode.jsvaudio.JsvAudio\",\n //插件初始化类名称\n initMethod: \"createInstance\",\n //插件初始化方法\n listener: \"top.JsvAudioPluginLoadResult\",\n //插件加载结果回调\n listener2: \"top.JsvAudioPluginStatus\"\n // debug:true,\n // md5:\"baafc8ea737adcad5443f44cc0112498\"\n};\n\n//!\n//! utils/JsViewPlugin/JsvAudio/PluginLoader.js;\n//!\nlet PluginLoader$1 = class PluginLoader {\n constructor() {\n this.onDoneListener = [];\n this.pluginLoadListener = [];\n this.pluginInfo = this.getPluginInfo();\n this.status = 0;\n }\n getPluginInfo() {\n let info = PluginInfo$1;\n if (typeof window.jJsvRuntimeBridge !== \"undefined\" && window.jJsvRuntimeBridge && typeof window.jJsvRuntimeBridge.getPluginBaseUrl !== \"undefined\") {\n let plugin_base_url = window.jJsvRuntimeBridge.getPluginBaseUrl();\n if (plugin_base_url) {\n info.downloadUrl = (plugin_base_url[plugin_base_url.length - 1] === \"/\" ? plugin_base_url : plugin_base_url + \"/\") + info.packageName + \"/JsvAudio-\" + info.versionCodeMax + \".dat?md5=\" + info.md5;\n }\n }\n return info;\n }\n registerOnDoneListener(listener) {\n if (listener) {\n this.onDoneListener.push(listener);\n }\n }\n /**\n * listener回调处理中参数信息的说明:\n * 插件加载状态回调。\n * 回调函数的参数定义如下:\n * 1:无法正常加载插件。\n * 2:正在加载旧插件,此时插件加载过程很短,可以不用出现用户提示界面。\n * 3:正在加载新插件,此时插件需要经历下载、解压等过程,用时较长,可以考虑给用户相关提示。\n * 4:插件加载完成。\n * 5:已加载不同版本的插件,此版本无法加载。\n * \n * 备注:不管插件加载处于什么状态,都可以正常使用播放器组件,播放器对象在插件未加载完成的情况下,会把相关状态保存,等完成加载后再自动下发。\n */\n loadPlugin(listener) {\n console.log(\"globalLoadJsvAudioPlugin\");\n let plugin_status = 0;\n if (typeof window.jPluginManagerBridge === \"undefined\" || !window.jPluginManagerBridge) {\n plugin_status = 1;\n } else if (this.status === 2) {\n plugin_status = 2;\n } else if (this.status === 3) {\n plugin_status = 3;\n } else if (this.status === 4) {\n plugin_status = 4;\n } else if (this.status === 5) {\n plugin_status = 1;\n }\n if (plugin_status !== 0) {\n if (typeof listener !== \"undefined\" && listener) {\n setTimeout(() => {\n listener(plugin_status);\n }, 0);\n }\n return;\n }\n if (typeof listener !== \"undefined\" && listener) {\n this.pluginLoadListener.push(listener);\n }\n if (this.status > 0) {\n return;\n }\n this.status = 1;\n window.jPluginManagerBridge.LoadPlugin(JSON.stringify(this.pluginInfo));\n }\n onStatusChange(status) {\n console.log(\"JsvAudioPluginStatus: \" + status);\n let ret = JSON.parse(status);\n let plugin_status = 2;\n if (ret && ret.first_load) {\n this.status = 3;\n plugin_status = 3;\n } else {\n this.status = 2;\n }\n for (let i = 0; i < this.pluginLoadListener.length; i++) {\n this.pluginLoadListener[i](plugin_status);\n }\n }\n onLoadDone(result) {\n console.log(\"JsvAudioPluginLoadResult: \" + result);\n let ret_obj = JSON.parse(result);\n let plugin_status = 1;\n if (ret_obj && (ret_obj.status === 4 || ret_obj.status === 1)) {\n this.status = 4;\n plugin_status = 4;\n } else if (ret_obj && ret_obj.status === -12) {\n this.status = 5;\n plugin_status = 5;\n } else {\n this.status = 5;\n }\n if (this.status === 5) {\n console.log(\"*************************JsvAudio plugin load failed, error code is \" + ret_obj.status + \"*************************\");\n }\n for (let i = 0; i < this.pluginLoadListener.length; i++) {\n this.pluginLoadListener[i](plugin_status);\n }\n for (let listener of this.onDoneListener) {\n listener(plugin_status);\n }\n }\n registerGlobalListener() {\n window.top.JsvAudioPluginStatus = this.onStatusChange.bind(this);\n window.top.JsvAudioPluginLoadResult = this.onLoadDone.bind(this);\n }\n};\nconst sPluginLoader$1 = new PluginLoader$1();\nsPluginLoader$1.registerGlobalListener();\n\n//!\n//! utils/JsViewPlugin/JsvAudio/JsvAudioBridgeProxy.js;\n//!\nclass JsvAudioBridgeProxy {\n static isReady() {\n return typeof window.jsvAudioBridge != \"undefined\" && !!window.jsvAudioBridge;\n }\n static CreateAudio(key) {\n if (typeof window.jsvAudioBridge != \"undefined\" && typeof window.jsvAudioBridge.CreateAudio != \"undefined\") {\n return window.jsvAudioBridge.CreateAudio(key);\n }\n return Promise.reject(JSON.stringify({\n state: -2,\n errorInfo: \"jsvAudioBridge is null.\"\n }));\n }\n static ReleasePlayer(key) {\n if (typeof window.jsvAudioBridge != \"undefined\" && typeof window.jsvAudioBridge.ReleasePlayer != \"undefined\") {\n return window.jsvAudioBridge.ReleasePlayer(key);\n }\n return -1;\n }\n static GetProperty(key, name) {\n if (typeof window.jsvAudioBridge != \"undefined\" && typeof window.jsvAudioBridge.GetProperty != \"undefined\") {\n return window.jsvAudioBridge.GetProperty(key, name);\n }\n return null;\n }\n static SetProperty(key, params) {\n if (typeof window.jsvAudioBridge != \"undefined\" && typeof window.jsvAudioBridge.SetProperty != \"undefined\") {\n return window.jsvAudioBridge.SetProperty(key, params);\n }\n }\n static ScreenWakeLock(lock) {\n if (typeof window.jsvAudioBridge != \"undefined\" && typeof window.jsvAudioBridge.ScreenWakeLock != \"undefined\") {\n window.jsvAudioBridge.ScreenWakeLock(lock);\n }\n }\n}\n\n//!\n//! utils/JsViewPlugin/JsvAudio/CheckType.js;\n//!\nconst isArray = Array.isArray;\nconst isMap = (val) => Object.prototype.toString.call(val) === \"[object Map]\";\nconst isSet = (val) => Object.prototype.toString.call(val) === \"[object Set]\";\nconst isDate = (val) => Object.prototype.toString.call(val) === \"[object Date]\";\nconst isFunction = (val) => typeof val === \"function\";\nconst isString = (val) => typeof val === \"string\";\nconst isSymbol = (val) => typeof val === \"symbol\";\nconst isObject = (val) => val !== null && typeof val === \"object\";\nfunction getType(ctor) {\n const match = ctor && ctor.toString().match(/^\\s*function (\\w+)/);\n return match ? match[1] : ctor === null ? \"null\" : \"\";\n}\nconst objectToString = Object.prototype.toString;\nconst toTypeString = (value) => objectToString.call(value);\nconst toRawType = (value) => {\n return toTypeString(value).slice(8, -1);\n};\nfunction makeMap(str, expectsLowerCase) {\n const map = /* @__PURE__ */ Object.create(null);\n const list = str.split(\",\");\n for (let i = 0; i < list.length; i++) {\n map[list[i]] = true;\n }\n return expectsLowerCase ? (val) => !!map[val.toLowerCase()] : (val) => !!map[val];\n}\nconst isSimpleType = /* @__PURE__ */ makeMap(\"String,Number,Boolean,Function,Symbol,BigInt\");\nfunction checkType(value, type) {\n if (typeof type === \"undefined\" || type === null) {\n return true;\n }\n let valid;\n const expectedType = getType(type);\n if (isSimpleType(expectedType)) {\n const t = typeof value;\n valid = t === expectedType.toLowerCase();\n if (!valid && t === \"object\") {\n valid = value instanceof type;\n }\n } else if (expectedType === \"Object\") {\n valid = isObject(value);\n } else if (expectedType === \"Array\") {\n valid = isArray(value);\n } else if (expectedType === \"null\") {\n valid = value === null;\n } else {\n valid = value instanceof type;\n }\n return valid;\n}\n\n//!\n//! utils/JsViewPlugin/JsvAudio/Events.js;\n//!\nconst Events = {\n EVENT_EXT: \"onEventExt\",\n // QCode Modify\n EVENT_LOAD_START: \"onLoadStart\",\n EVENT_LOAD: \"onLoad\",\n EVENT_ERROR: \"onError\",\n EVENT_PROGRESS: \"onProgress\",\n EVENT_END: \"onEnd\",\n EVENT_PAUSE: \"onPause\",\n EVENT_PLAY: \"onPlay\",\n EVENT_AUDIO_FOCUS_GAIN: \"onAudioFocusGain\",\n EVENT_AUDIO_FOCUS_LOSS: \"onAudioFocusLoss\"\n};\n\n//!\n//! utils/JsViewPlugin/JsvAudio/ScreenLockManager.js;\n//!\nclass ScreenLockManager {\n static refCount = 0;\n static lock() {\n ScreenLockManager.refCount++;\n JsvAudioBridgeProxy.ScreenWakeLock(true);\n }\n static unlock() {\n ScreenLockManager.refCount = Math.max(0, ScreenLockManager.refCount - 1);\n if (ScreenLockManager.refCount == 0) {\n JsvAudioBridgeProxy.ScreenWakeLock(false);\n }\n }\n}\n\n//!\n//! utils/JsViewPlugin/JsvAudio/AudioProxy.js;\n//!\nconst TAG = \"JsvAudio\";\nlet keyToken = 0;\nconst getKeyToken = () => {\n return ++keyToken;\n};\nclass AudioManager {\n constructor() {\n this.audioMap = {};\n sPluginLoader$1.registerOnDoneListener(this.onPluginLoadDone.bind(this));\n }\n createAudio(id) {\n if (!Object.hasOwn(this.audioMap, id)) {\n this.audioMap[id] = new AudioProxy(id, this);\n } else {\n this.audioMap[id].ref();\n }\n if (!JsvAudioBridgeProxy.isReady()) {\n sPluginLoader$1.loadPlugin();\n } else {\n this.audioMap[id].buildPlatformInstance();\n }\n return this.audioMap[id];\n }\n releaseAudio(id) {\n delete this.audioMap[id];\n }\n onPluginLoadDone(status) {\n for (let id in this.audioMap) {\n this.audioMap[id].buildPlatformInstance();\n }\n }\n}\nconst sAudioManager = new AudioManager();\nconst AUDIO_PROPS = {\n \"src\": { type: Object },\n \"paused\": { type: Boolean },\n \"autoplay\": { type: Boolean },\n \"volume\": { type: Number },\n \"muted\": { type: Boolean },\n \"loop\": { type: Boolean },\n \"enablePlayer\": { type: Boolean }\n};\nclass AudioProxy {\n constructor(id, audioManager) {\n this._onEvent = this.onEvent.bind(this);\n this._playerId = id;\n this._ref = 1;\n this._audioManager = audioManager;\n this._created = false;\n this._eventListener = {};\n this._propCache = {};\n this._onVisibilityChange = this.onVisibilityChange.bind(this);\n window.JsView?.onVisibilityChange(this._onVisibilityChange);\n }\n /** 初始化函数, 外部不应该调用 */\n buildPlatformInstance() {\n console.log(\"buildPlatformInstance, key=\" + this._playerId);\n if (!JsvAudioBridgeProxy.isReady()) {\n console.error(\"no jsvAudioBridge\");\n return;\n }\n JsvAudioBridgeProxy.CreateAudio(this._playerId).then((data) => {\n const info = JSON.parse(data);\n if (info.state == 0) {\n this.initPlayer();\n } else {\n console.error(TAG, \"create audio failed\", info.errorInfo);\n }\n });\n }\n initPlayer() {\n if (this._created)\n return;\n console.log(\"InitPlayer:1, key=\" + this._playerId);\n this._created = true;\n window.JMD.subscribe(this._playerId, this._onEvent);\n this.initParams();\n }\n initParams() {\n if (this._propCache[\"src\"]) {\n this.setProperty(\"src\", this._propCache[\"src\"]);\n }\n if (this._propCache[\"paused\"] == false) {\n this.setProperty(\"paused\", this._propCache[\"paused\"]);\n }\n if (this._propCache[\"autoplay\"]) {\n this.setProperty(\"autoplay\", this._propCache[\"autoplay\"]);\n }\n if (this._propCache[\"loop\"]) {\n this.setProperty(\"loop\", this._propCache[\"loop\"]);\n }\n if (this._propCache[\"muted\"]) {\n this.setProperty(\"muted\", this._propCache[\"muted\"]);\n }\n }\n /*******/\n /** events */\n addEventListener(type, listener) {\n if (listener) {\n this._eventListener[\"on\" + type] = listener;\n }\n }\n callEventListener(name, ...params) {\n this._eventListener[name]?.(...params);\n }\n onEvent(eventStr) {\n console.log(\"player event: \", eventStr);\n let obj = JSON.parse(eventStr);\n let event_obj = JSON.parse(obj.param);\n let event = event_obj.event;\n let data = event_obj.data;\n switch (event) {\n case Events.EVENT_END:\n this.setProperty(\"paused\", true);\n this.callEventListener(\"onended\");\n break;\n case Events.EVENT_LOAD_START:\n this.callEventListener(\"onloadstart\");\n break;\n case Events.EVENT_LOAD:\n this.callEventListener(\"onloadedmetadata\");\n this.callEventListener(\"onload\");\n this.callEventListener(\"ondurationchange\");\n break;\n case Events.EVENT_ERROR:\n const Error = {\n MEDIA_ERR_ABORTED: 1,\n MEDIA_ERR_NETWORK: 2,\n MEDIA_ERR_DECODE: 3,\n MEDIA_ERR_SRC_NOT_SUPPORTED: 4,\n MEDIA_ERR_NO_DECODE_RESOURCE: 6\n };\n const platform_error = data.error.what;\n let e = Error.MEDIA_ERR_ABORTED;\n switch (platform_error) {\n case -1004:\n e = Error.MEDIA_ERR_NETWORK;\n break;\n case -1007:\n e = Error.MEDIA_ERR_DECODE;\n break;\n case -1010:\n e = Error.MEDIA_ERR_SRC_NOT_SUPPORTED;\n break;\n case -50002:\n e = Error.MEDIA_ERR_NO_DECODE_RESOURCE;\n break;\n default:\n break;\n }\n this.callEventListener(\"onerror\", e);\n break;\n case Events.EVENT_EXT:\n switch (data.eventExt) {\n case \"videoMetadataUpdate\":\n this.callEventListener(\"onloadedmetadata\");\n break;\n default:\n logWarning(\"unimplentation event ext type = \" + data.eventExt);\n break;\n }\n break;\n default:\n break;\n }\n }\n /** control */\n load() {\n this.setProperty(\"enablePlayer\", true);\n }\n play() {\n this.setProperty(\"paused\", false);\n }\n pause() {\n this.setProperty(\"paused\", true);\n }\n unload() {\n this.pause();\n this.setProperty(\"enablePlayer\", false);\n }\n /** audio props */\n /** src 不支持get */\n set src(value) {\n this.setSrc(value, null);\n }\n /** volume */\n set volume(value) {\n this.setProperty(\"volume\", value);\n }\n get volume() {\n return this.getProperty(\"volume\");\n }\n /** muted */\n set muted(value) {\n this.setProperty(\"muted\", value);\n }\n get muted() {\n return this.getProperty(\"muted\");\n }\n /** loop 不支持 get*/\n set loop(value) {\n this.setProperty(\"loop\", value);\n }\n /** paused 不支持 set */\n get paused() {\n return this.getProperty(\"paused\");\n }\n /** autoplay 不支持 get */\n set autoplay(value) {\n this.setProperty(\"autoplay\", value);\n }\n /** duration 不支持 set */\n get duration() {\n return this.getProperty(\"duration\");\n }\n /** current 目前不支持时移, 只能get */\n get currentTime() {\n return this.getProperty(\"currentTime\");\n }\n setSrc(url, head) {\n if (!url) {\n console.error(\"JsvAudio: src is null\");\n return;\n }\n let realUrl;\n if (window.JsView) {\n realUrl = new window.JsView.Dom.UrlRef(url).href;\n } else {\n realUrl = url;\n }\n const param = {\n url: realUrl,\n head: JSON.stringify(head)\n };\n this.setProperty(\"src\", param);\n }\n setProperty(key, value) {\n if (AUDIO_PROPS.hasOwnProperty(key)) {\n if (checkType(value, AUDIO_PROPS[key].type)) {\n console.log(TAG, \"setProperty\", key, value);\n this._propCache[key] = value;\n if (this._created) {\n const param = { [key]: value };\n JsvAudioBridgeProxy.SetProperty(this._playerId, JSON.stringify(param));\n }\n } else {\n console.error(TAG, `Invalid prop: type check failed for prop \"${key}\". Expected ${toRawType(AUDIO_PROPS[key].type)}, got ${toRawType(value)} with value ${value}.`);\n }\n } else {\n console.error(TAG, `property ${key} not supported`);\n }\n }\n getProperty(key) {\n if (this._created) {\n const jsonStr = JsvAudioBridgeProxy.GetProperty(this._playerId, key);\n if (jsonStr) {\n const obj = JSON.parse(jsonStr);\n return obj[key];\n }\n }\n return null;\n }\n ref() {\n this._ref++;\n console.log(\"JsvAudio ref up\", this._ref);\n }\n release() {\n this._ref--;\n console.log(\"JsvAudio release\", this._ref);\n if (this._ref === 0) {\n window.JMD.unsubscribe(this._playerId, this._onEvent);\n JsvAudioBridgeProxy.ReleasePlayer(this._playerId);\n this._audioManager.releaseAudio(this._playerId);\n window.JsView?.removeEventCallback(this._onVisibilityChange);\n }\n }\n onVisibilityChange(state) {\n console.log(TAG, \"audio visibility change\", JSON.stringify(state));\n if (state.status == \"show\") {\n if (typeof this._propCache[\"customerPause\"] != \"undefined\") {\n const customerPause = this._propCache[\"customerPause\"];\n delete this._propCache[\"customerPause\"];\n if (!customerPause) {\n this.play();\n }\n }\n } else {\n this._propCache[\"customerPause\"] = this._propCache[\"paused\"];\n this.pause();\n }\n }\n //屏保开关\n closeScreenSaver() {\n ScreenLockManager.lock();\n }\n openScreenSaver() {\n ScreenLockManager.unlock();\n }\n}\n\n//!\n//! utils/JsViewPlugin/JsvAudio/JsvAudio.vue;\n//!\n/*! \n\n\n */\nconst _sfc_main$1 = {\n __name: \"JsvAudio\",\n props: {\n /**\n * 回调函数,播放器对象通知接口\n * @param {Object} video对象,可以通过此video对象调用video相关属性和方法,具体属性和方法定义见JsvMedia.js文件里相关说明。\n */\n onRef: { type: Function, default: () => {\n } },\n /**\n * 属性,Boolean类型,true表示自动播放,默认false。\n */\n autoplay: { type: Boolean, default: false },\n /**\n * 属性,String类型,播放器实例索引,同样的key使用同一个播放器实例。\n */\n playerKey: { type: String, default: null },\n /**\n * 属性,Boolean类型,true表示静音,默认false。\n */\n muted: { type: Boolean, default: false },\n /**\n * 属性,Boolean类型,true表示循环播放,默认false。\n */\n loop: { type: Boolean, default: false },\n /**\n * 属性,String类型,播放地址。\n */\n src: { type: String, default: \"\" },\n /**\n * 回调函数,播放结束时通过此回调接口通知。\n */\n onEnded: {\n type: Function,\n default: () => {\n return {};\n }\n },\n /**\n * 回调函数,播放错误时通过此接口通知。\n * @param {int} 错误类型,当前定义了四种错误。1是异常中断;2是网络错误;3是解码错误;4是格式不支持。\n */\n onError: {\n type: Function,\n default: () => {\n return {};\n }\n },\n /**\n * 回调函数,开始加载,设置完播放地址后,上报此事件。\n */\n onLoadStart: {\n type: Function,\n default: () => {\n return {};\n }\n },\n /**\n * 回调函数,视频准备好后触发。\n */\n onLoadedMetaData: {\n type: Function,\n default: () => {\n return {};\n }\n },\n /**\n * 回调函数,视频准备好后触发,这个时候可以正常seek。\n */\n onLoad: {\n type: Function,\n default: () => {\n return {};\n }\n },\n /**\n * 回调函数,音频失去焦点后触发此事件,可能会导致pause(点播)或者离开频道(直播)。\n */\n onAudioFocusLoss: {\n type: Function,\n default: () => {\n return {};\n }\n },\n /**\n * 回调函数,音频获取焦点后触发此事件,可能会触发resume(点播)或者加入频道(直播)。\n */\n onAudioFocusGain: {\n type: Function,\n default: () => {\n return {};\n }\n }\n },\n setup(__props) {\n const props = __props;\n const jsviewCoreInfo = window.JsView?.getJsContextId?.() + \"_\" + window.JsView.CodeRevision;\n let key = \"JsvAudio_\" + jsviewCoreInfo + \"_\" + getKeyToken();\n if (props.playerKey) {\n key = props.playerKey + \"_\" + jsviewCoreInfo;\n }\n console.log(\"player key:\" + key);\n const audio = sAudioManager.createAudio(key);\n audio.addEventListener(\"ended\", props.onEnded);\n audio.addEventListener(\"error\", props.onError);\n audio.addEventListener(\"loadstart\", props.onLoadStart);\n audio.addEventListener(\"loadedmetadata\", props.onLoadedMetaData);\n audio.addEventListener(\"load\", props.onLoad);\n audio.addEventListener(\"audiofocusloss\", props.onAudioFocusLoss);\n audio.addEventListener(\"audiofocusgain\", props.onAudioFocusGain);\n if (props.src && props.src !== \"\") {\n audio.src = props.src;\n }\n if (props.autoplay) {\n audio.autoplay = props.autoplay;\n }\n if (props.muted) {\n audio.muted = props.muted;\n }\n if (props.loop) {\n audio.loop = props.loop;\n }\n props.onRef?.(audio);\n onBeforeUnmount(() => {\n if (audio != null) {\n audio.openScreenSaver();\n audio.release();\n props.onRef?.(null);\n }\n });\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", {\n style: { width: 1, height: 1 },\n backgroundColor: \"rgba(0,0,0,1)\"\n });\n };\n }\n};\n\n//!\n//! utils/JsViewPlugin/JsvAudio/index.js;\n//!\nlet globalLoadJsvAudioPlugin;\nlet _JsvAudio;\nif (!window.JsView) {\n const BrowserJsvAudio = await import('./browser/BrowserAudio.vue.mjs');\n globalLoadJsvAudioPlugin = (listener) => {\n setTimeout(listener, 0);\n };\n _JsvAudio = BrowserJsvAudio.default;\n} else {\n globalLoadJsvAudioPlugin = sPluginLoader$1.loadPlugin.bind(sPluginLoader$1);\n _JsvAudio = _sfc_main$1;\n}\n\n//!\n//! utils/JsViewPlugin/JsvLatex/version.mjs;\n//!\nlet PluginInfo = {\n // downloadUrl: \"http://192.168.2.1:8097/pluginpackapp.zip\", //插件下载地址\n packageName: \"com.qcode.jsvlatex\",\n name: \"数学公式插件\",\n version: \"1.0.4\",\n //插件需要的版本号\n versionCodeMin: 4,\n versionCodeMax: 4,\n bridgeName: \"jsvLatexBridge\",\n //插件bridge注册到jsview的名称\n className: \"com.qcode.jsvlatex.JsvLatex\",\n //插件初始化类名称\n initMethod: \"createInstance\",\n //插件初始化方法\n listener: \"top.JsvLatexPluginLoadResult\",\n //插件加载结果回调\n listener2: \"top.JsvLatexPluginStatus\"\n // debug:true,\n // md5: \"f8a12f63d450df862abc6dbf273e258d\"\n};\n\n//!\n//! utils/JsViewPlugin/JsvLatex/JsvLatexBridgeProxy.js;\n//!\nclass JsvLatexBridgeProxy {\n static GetLibPath() {\n if (typeof window.jsvLatexBridge != \"undefined\" && typeof window.jsvLatexBridge.GetLibPath != \"undefined\") {\n return window.jsvLatexBridge.GetLibPath();\n } else {\n console.error(\"widnow.jsvLatexBridge doesn't exist.\");\n return null;\n }\n }\n}\n\n//!\n//! utils/JsViewPlugin/JsvLatex/PluginLoader.js;\n//!\nclass PluginLoader {\n constructor() {\n this.onDoneListener = [];\n this.pluginLoadListener = [];\n this.pluginInfo = this.getPluginInfo();\n this.loadDone = false;\n this.loadSucceed = false;\n this.status = 0;\n }\n getPluginInfo() {\n let info = PluginInfo;\n if (typeof window.jJsvRuntimeBridge !== \"undefined\" && window.jJsvRuntimeBridge && typeof window.jJsvRuntimeBridge.getPluginBaseUrl !== \"undefined\") {\n let plugin_base_url = window.jJsvRuntimeBridge.getPluginBaseUrl();\n if (plugin_base_url) {\n info.downloadUrl = (plugin_base_url[plugin_base_url.length - 1] === \"/\" ? plugin_base_url : plugin_base_url + \"/\") + info.packageName + \"/JsvLatex-\" + info.versionCodeMax + \".dat?md5=\" + info.md5;\n }\n }\n return info;\n }\n registerOnDoneListener(listener) {\n if (listener) {\n this.onDoneListener.push(listener);\n }\n }\n getLoadInfo() {\n return {\n done: this.loadDone,\n succeed: this.loadSucceed\n };\n }\n /**\n * listener回调处理中参数信息的说明:\n * 插件加载状态回调。\n * 回调函数的参数定义如下:\n * 1:无法正常加载插件。\n * 2:正在加载旧插件,此时插件加载过程很短,可以不用出现用户提示界面。\n * 3:正在加载新插件,此时插件需要经历下载、解压等过程,用时较长,可以考虑给用户相关提示。\n * 4:插件加载完成。\n * 5:已加载不同版本的插件,此版本无法加载。\n * \n * 备注:不管插件加载处于什么状态,都可以正常使用播放器组件,播放器对象在插件未加载完成的情况下,会把相关状态保存,等完成加载后再自动下发。\n */\n loadPlugin(listener) {\n console.log(\"globalLoadJsvLatexPlugin\");\n let plugin_status = 0;\n if (typeof window.jPluginManagerBridge === \"undefined\" || !window.jPluginManagerBridge) {\n plugin_status = 1;\n } else if (this.status === 2) {\n plugin_status = 2;\n } else if (this.status === 3) {\n plugin_status = 3;\n } else if (this.status === 4) {\n plugin_status = 4;\n } else if (this.status === 5) {\n plugin_status = 1;\n }\n if (plugin_status !== 0) {\n if (typeof listener !== \"undefined\" && listener) {\n setTimeout(() => {\n listener(plugin_status);\n }, 0);\n }\n return;\n }\n if (typeof listener !== \"undefined\" && listener) {\n this.pluginLoadListener.push(listener);\n }\n if (this.status > 0) {\n return;\n }\n this.status = 1;\n window.jPluginManagerBridge.LoadPlugin(JSON.stringify(this.pluginInfo));\n }\n onStatusChange(status) {\n console.log(\"JsvLatexPluginStatus: \" + status);\n let ret = JSON.parse(status);\n let plugin_status = 2;\n if (ret && ret.first_load) {\n this.status = 3;\n plugin_status = 3;\n } else {\n this.status = 2;\n }\n for (let i = 0; i < this.pluginLoadListener.length; i++) {\n this.pluginLoadListener[i](plugin_status);\n }\n }\n onLoadDone(result) {\n console.log(\"JsvLatexPluginLoadResult: \" + result);\n this.loadDone = true;\n let ret_obj = JSON.parse(result);\n let plugin_status = 1;\n if (ret_obj && (ret_obj.status === 4 || ret_obj.status === 1)) {\n this.status = 4;\n plugin_status = 4;\n } else if (ret_obj && ret_obj.status === -12) {\n this.status = 5;\n plugin_status = 5;\n } else {\n this.status = 5;\n }\n if (this.status === 5) {\n this.loadSucceed = false;\n console.log(\"*************************JsvLatex plugin load failed, error code is \" + ret_obj.status + \"*************************\");\n } else {\n this.loadSucceed = true;\n }\n if (window.JsView) {\n const libPath = JsvLatexBridgeProxy.GetLibPath();\n console.log(\"JsvLatex libPath\", libPath);\n if (libPath) {\n window.JsView.loadRenderPlugin?.(\n \"latexPlugin\",\n \"com.qcode.latexlib.Main\",\n libPath\n );\n } else {\n console.error(\"JsvLatexPlugin error: get libPath failed.\");\n }\n }\n for (let i = 0; i < this.pluginLoadListener.length; i++) {\n this.pluginLoadListener[i](plugin_status);\n }\n for (let listener of this.onDoneListener) {\n listener(plugin_status);\n }\n }\n registerGlobalListener() {\n window.top.JsvLatexPluginStatus = this.onStatusChange.bind(this);\n window.top.JsvLatexPluginLoadResult = this.onLoadDone.bind(this);\n }\n}\nconst sPluginLoader = new PluginLoader();\nsPluginLoader.registerGlobalListener();\n\n//!\n//! utils/JsViewPlugin/JsvLatex/Color.ts;\n//!\nconst cssColor2Android = (cssColor) => {\n let validColor = false;\n if (typeof cssColor == \"string\" && cssColor[0] == \"#\") {\n const numberStr = cssColor.slice(1);\n if (numberStr.length == 3) {\n try {\n const colorNumber = parseInt(numberStr, 16);\n validColor = true;\n let red = (colorNumber >> 8 & 15) * 17;\n let green = (colorNumber >> 4 & 15) * 17;\n let blue = (colorNumber & 15) * 17;\n return 255 << 24 | red << 16 | green << 8 | blue;\n } catch (e) {\n }\n } else if (numberStr.length == 6) {\n try {\n const colorNumber = parseInt(numberStr, 16);\n validColor = true;\n let red = colorNumber >> 16 & 255;\n let green = colorNumber >> 8 & 255;\n let blue = colorNumber & 255;\n return 255 << 24 | red << 16 | green << 8 | blue;\n } catch (e) {\n }\n } else if (numberStr.length == 8) {\n try {\n const colorNumber = parseInt(numberStr, 16);\n validColor = true;\n let red = colorNumber >> 24 & 255;\n let green = colorNumber >> 16 & 255;\n let blue = colorNumber >> 8 & 255;\n let alpha = colorNumber & 255;\n return alpha << 24 | red << 16 | green << 8 | blue;\n } catch (e) {\n }\n }\n }\n if (!validColor) {\n console.error(new Error(\"invalid color \" + cssColor));\n }\n return 0;\n};\n\n//!\n//! utils/JsViewPlugin/JsvLatex/JsvLatex.vue;\n//!\n/*! <!-- \n * @Author: ChenChanghua\n * @Date: 2023-11-15 16:08:58\n * @Description: file content\n -->\n\n<!-- \n[界面概述]\n 思维导图控件\n \n[控件介绍]\n JsvLatex:\n props:\n latexStr: {string} latex公式\n fontSize: {function} 字号\n left: {number} left\n top: {number} top\n width: {number} width\n height: {number} height\n lineSpace: {number} 行距\n color: {string} 文字颜色\n -->\n\n\n\n */\nconst _sfc_main = {\n __name: \"JsvLatex\",\n props: {\n latexStr: {\n type: String,\n required: true\n },\n width: {\n type: Number,\n required: true\n },\n height: {\n type: Number,\n default: 0\n },\n fontSize: {\n type: Number,\n default: 25\n },\n lineSpace: {\n type: Number,\n default: 10\n },\n color: {\n type: String,\n default: \"#FFFFFF\"\n },\n left: {\n type: Number,\n default: 0\n },\n top: {\n type: Number,\n default: 0\n }\n },\n setup(__props, { expose }) {\n const props = __props;\n const show = ref(false);\n let innerViewId = -1;\n let clientWidth = props.width;\n let clientHeight = props.height;\n const getClientSize = () => {\n return {\n width: clientWidth,\n height: clientHeight\n };\n };\n const showView = () => {\n show.value = true;\n const textureManager = handles.TextureManager;\n const pluginTexture = textureManager.GetPluginTexture(\n \"latexPlugin\",\n JSON.stringify({\n libRootPath: JsvLatexBridgeProxy.GetLibPath(),\n latexStr: props.latexStr,\n width: props.width,\n textSize: props.fontSize,\n lineSpace: props.lineSpace,\n color: cssColor2Android(props.color)\n })\n );\n pluginTexture.RegisterLoadImageCallback(null, (data) => {\n tryUpdateClientSize(data.width, data.height);\n });\n const tryUpdateClientSize = (textureW, textureH) => {\n if (props.width != 0 && props.height == 0) {\n clientHeight = Math.round(props.width * (textureH / textureW));\n } else if (props.height != 0 && props.width == 0) {\n clientWidth = Math.round(props.height * (textureW / textureH));\n }\n };\n let layoutView = new Forge$1.LayoutView(\n new Forge$1.TextureSetting(pluginTexture)\n );\n layoutView.EnableAutoSize();\n innerViewId = Forge$1.sViewStore.add(new Forge$1.ViewInfo(layoutView));\n };\n const loadInfo = sPluginLoader.getLoadInfo();\n if (loadInfo.done) {\n if (loadInfo.succeed) {\n showView();\n }\n } else {\n sPluginLoader.registerOnDoneListener((status) => {\n if (status != null) {\n showView();\n }\n });\n }\n onBeforeUnmount(() => {\n if (innerViewId !== -1) {\n Forge$1.sViewStore.remove(innerViewId);\n innerViewId = -1;\n }\n });\n expose({\n getClientSize\n });\n return (_ctx, _cache) => {\n return show.value ? (openBlock(), createElementBlock(\"div\", {\n key: 0,\n \"data-jsv-vw-innerview\": unref(innerViewId),\n style: normalizeStyle({\n left: __props.left,\n top: __props.top,\n width: __props.width,\n height: __props.height\n })\n }, null, 12, [\"data-jsv-vw-innerview\"])) : createCommentVNode(\"\", true);\n };\n }\n};\n\n//!\n//! utils/JsViewPlugin/JsvLatex/index.js;\n//!\nlet globalLoadJsvLatexPlugin;\nlet _JsvLatex;\nif (!window.JsView) {\n const BrowserJsvLatex = await import('./browser/BrowserJsvLatex.vue.mjs');\n globalLoadJsvLatexPlugin = (listener) => {\n setTimeout(listener, 0);\n };\n _JsvLatex = BrowserJsvLatex.default;\n} else {\n globalLoadJsvLatexPlugin = sPluginLoader.loadPlugin.bind(sPluginLoader);\n _JsvLatex = _sfc_main;\n}\n\n//!\n//! utils/JsViewPlugin/index.js;\n//!\n\n//!\n//! utils/index.js;\n//!\n\nexport { BaseDispatcher, DECORATE_BORDER_RADIUS, DECORATE_NINEPATCH_ALPHA_MIX, DebugObjectRefer, DebugTools, DebugWrap81ErrorStack, DebugWrap81WarnStack, DefaultKeyCodeMap, EdgeDirection, FixPositionSlide, FocusMoveType, FreeMoveDef, FreeMoveFunc, HORIZONTAL, InputType, instance as JSBridge, JsvAccount, _sfc_main$C as JsvActorMove, JsvActorMoveControl, _JsvApic$1 as JsvApic, _JsvApic2$1 as JsvApic2, _JsvAudio as JsvAudio, _sfc_main$6 as JsvConnectLine, _sfc_main$4 as JsvEnableRenderBreak, _sfc_main$A as JsvEnvBlocker, _sfc_main$l as JsvFilterView, _sfc_main$z as JsvFlexDiv, _sfc_main$D as JsvFocusBlock, _sfc_main$B as JsvFreeMoveActor, JsvGrid, JsvNativeSharedDiv as JsvHole, JsvInput, _JsvLatex as JsvLatex, JsvLine, _sfc_main$i as JsvMarquee, JsvMaskClipDiv, _sfc_main$3 as JsvMindMap, JsvNativeSharedDiv, _sfc_main$g as JsvNinePatch, JsvPerformance, _sfc_main$7 as JsvPieChart, _JsvPlayer as JsvPlayer, _sfc_main$f as JsvPosterDiv, _sfc_main$e as JsvPosterImage, exportObj as JsvPreDownloader, JsvPreload, _sfc_main$5 as JsvProgressBar, _JsvQrcode$1 as JsvQrcode, _sfc_main$b as JsvRadarChart, _sfc_main$a as JsvRipple, JsvRippleShape, JsvScaleTextBox, _sfc_main$8 as JsvSector, JsvSoundPool, _JsvSpray$1 as JsvSpray, JsvSpriteAnim, _sfc_main$q as JsvSpriteLoader, JsvStyleClass, JsvStyleSheetsDeclarer, JsvSwiper, _sfc_main$n as JsvSwiper3D, _sfc_main$c as JsvTextBox, JsvTextStyleClass, _JsvTextureAnim$1 as JsvTextureAnim, sJsvTextureConst as JsvTextureConst, sTextureStoreApi as JsvTextureStoreApi, JsvNativeSharedDiv as JsvTransparentDiv, JsvVisibleSensor, LineType, _sfc_main$E as ListWidget, LoopType, METRO_WIDGET, METRO_WIDGET as METRO_WIDGET_CONST, _sfc_main$F as MetroWidget, PageType, RENDER_ITEM_BREAK_KEY, Dispatcher as SWidgetDispatcher, SeamlessSlide, _sfc_main$F as SimpleWidget, SlideSetting, SlideStyle, SpriteController, TexAlignAnchor, TextTools, TextureInstantType, VERTICAL, WholePageSlide, buildDownloadInfo, buildPreloadInfo, combinedStyles, createImpactAutoFroze, createImpactCallback, createImpactTracer, disableNativeViewListener, enableNativeViewListener, getCssStyleGroup, getJsvPlayerCapabilitySet, getJsvPlayerRunningNum, getKeyFramesGroup, getMeasureObj, getPositionRelativeToView, getTextWidth, globalLoadJsvAudioPlugin, globalLoadJsvLatexPlugin, globalLoadJsvPlayerPlugin, globalLoadSetOperator, globalPreLoadJsvPlayerPlugin, bridge as jJsvRuntimeBridge, jsvCreateFocusManager, jsvCreateHashHistory, numberCheckSet, setJsvPlayerDebugMode, toHtmlBorderSet, toNinePatchForgeViewSet, updateImpactAutoFroze, urlCheckSet, useFocusHub };\n"],"names":["isArray","parseQuery","location","stringifyQuery","NavigationType","NavigationDirection","search","history","replace","NavigationFailureType","token","re","value","matchedRoute","href","failure","resolve","router","h","createElementVNode","Error","Forge$2","TAG","PluginLoader"],"mappings":";;;AAAA;AACA;AACA;AACA,MAAM,aAAa;AAAA,EACjB,cAAc;AACZ,SAAK,cAAc;AACnB,SAAK,iBAAiB;AACtB,SAAK,kBAAkB;AACvB,SAAK,UAAU;AAAA,EAChB;AAAA,EACD,aAAa,UAAU;AACrB,WAAO;AAAA,EACR;AAAA,EACD,UAAU;AACR,WAAO,KAAK,mBAAmB;AAAA,EAChC;AAAA,EACD,OAAO;AACL,SAAK,cAAc,KAAK;AACxB,SAAK,kBAAkB,KAAK,aAAa,KAAK,WAAW;AACzD,WAAO,KAAK;AAAA,EACb;AAAA,EACD,YAAY,UAAU,SAAS;AAC7B,SAAK,iBAAiB;AACtB,SAAK,WAAW;AAAA,EACjB;AACH;AACK,MAAC,WAAW;AAAA,EACf,cAAc;AAAA,EACd,eAAe;AAAA,EACf,aAAa;AAAA,EACb,WAAW;AAAA,EACX,aAAa;AACf;AACK,MAAC,eAAe;AAAA,EACnB,MAAM;AAAA,EACN,YAAY;AACd;ACpCA;AAAA;AAAA;AAAA;AAAA;AAQA,MAAM,YAAY,OAAO,WAAW;AAEpC,SAAS,WAAW,KAAK;AACrB,SAAO,IAAI,cAAc,IAAI,OAAO,WAAW,MAAM;AACzD;AACA,MAAM,SAAS,OAAO;AACtB,SAAS,cAAc,IAAI,QAAQ;AAC/B,QAAM,YAAY,CAAA;AAClB,aAAW,OAAO,QAAQ;AACtB,UAAM,QAAQ,OAAO,GAAG;AACxB,cAAU,GAAG,IAAIA,UAAQ,KAAK,IACxB,MAAM,IAAI,EAAE,IACZ,GAAG,KAAK;AAAA,EACjB;AACD,SAAO;AACX;AACA,MAAM,OAAO,MAAM;AAAA;AAKnB,MAAMA,YAAU,MAAM;AAQtB,MAAM,oBAAoB;AAC1B,MAAM,sBAAsB,CAAC,SAAS,KAAK,QAAQ,mBAAmB,EAAE;AAUxE,SAAS,SAASC,aAAYC,WAAU,kBAAkB,KAAK;AAC3D,MAAI,MAAM,QAAQ,CAAE,GAAE,eAAe,IAAI,OAAO;AAGhD,QAAM,UAAUA,UAAS,QAAQ,GAAG;AACpC,MAAI,YAAYA,UAAS,QAAQ,GAAG;AAEpC,MAAI,UAAU,aAAa,WAAW,GAAG;AACrC,gBAAY;AAAA,EACf;AACD,MAAI,YAAY,IAAI;AAChB,WAAOA,UAAS,MAAM,GAAG,SAAS;AAClC,mBAAeA,UAAS,MAAM,YAAY,GAAG,UAAU,KAAK,UAAUA,UAAS,MAAM;AACrF,YAAQD,YAAW,YAAY;AAAA,EAClC;AACD,MAAI,UAAU,IAAI;AACd,WAAO,QAAQC,UAAS,MAAM,GAAG,OAAO;AAExC,WAAOA,UAAS,MAAM,SAASA,UAAS,MAAM;AAAA,EACjD;AAED,SAAO,oBAAoB,QAAQ,OAAO,OAAOA,WAAU,eAAe;AAE1E,SAAO;AAAA,IACH,UAAU,QAAQ,gBAAgB,OAAO,eAAe;AAAA,IACxD;AAAA,IACA;AAAA,IACA;AAAA,EACR;AACA;AAOA,SAAS,aAAaC,iBAAgBD,WAAU;AAC5C,QAAM,QAAQA,UAAS,QAAQC,gBAAeD,UAAS,KAAK,IAAI;AAChE,SAAOA,UAAS,QAAQ,SAAS,OAAO,SAASA,UAAS,QAAQ;AACtE;AAOA,SAAS,UAAU,UAAU,MAAM;AAE/B,MAAI,CAAC,QAAQ,CAAC,SAAS,YAAa,EAAC,WAAW,KAAK,aAAa;AAC9D,WAAO;AACX,SAAO,SAAS,MAAM,KAAK,MAAM,KAAK;AAC1C;AASA,SAAS,oBAAoBC,iBAAgB,GAAG,GAAG;AAC/C,QAAM,aAAa,EAAE,QAAQ,SAAS;AACtC,QAAM,aAAa,EAAE,QAAQ,SAAS;AACtC,SAAQ,aAAa,MACjB,eAAe,cACf,kBAAkB,EAAE,QAAQ,UAAU,GAAG,EAAE,QAAQ,UAAU,CAAC,KAC9D,0BAA0B,EAAE,QAAQ,EAAE,MAAM,KAC5CA,gBAAe,EAAE,KAAK,MAAMA,gBAAe,EAAE,KAAK,KAClD,EAAE,SAAS,EAAE;AACrB;AAQA,SAAS,kBAAkB,GAAG,GAAG;AAI7B,UAAQ,EAAE,WAAW,QAAQ,EAAE,WAAW;AAC9C;AACA,SAAS,0BAA0B,GAAG,GAAG;AACrC,MAAI,OAAO,KAAK,CAAC,EAAE,WAAW,OAAO,KAAK,CAAC,EAAE;AACzC,WAAO;AACX,aAAW,OAAO,GAAG;AACjB,QAAI,CAAC,+BAA+B,EAAE,GAAG,GAAG,EAAE,GAAG,CAAC;AAC9C,aAAO;AAAA,EACd;AACD,SAAO;AACX;AACA,SAAS,+BAA+B,GAAG,GAAG;AAC1C,SAAOH,UAAQ,CAAC,IACV,kBAAkB,GAAG,CAAC,IACtBA,UAAQ,CAAC,IACL,kBAAkB,GAAG,CAAC,IACtB,MAAM;AACpB;AAQA,SAAS,kBAAkB,GAAG,GAAG;AAC7B,SAAOA,UAAQ,CAAC,IACV,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,CAAC,OAAO,MAAM,UAAU,EAAE,CAAC,CAAC,IAC7D,EAAE,WAAW,KAAK,EAAE,CAAC,MAAM;AACrC;AAOA,SAAS,oBAAoB,IAAI,MAAM;AACnC,MAAI,GAAG,WAAW,GAAG;AACjB,WAAO;AAKX,MAAI,CAAC;AACD,WAAO;AACX,QAAM,eAAe,KAAK,MAAM,GAAG;AACnC,QAAM,aAAa,GAAG,MAAM,GAAG;AAC/B,MAAI,WAAW,aAAa,SAAS;AACrC,MAAI;AACJ,MAAI;AACJ,OAAK,aAAa,GAAG,aAAa,WAAW,QAAQ,cAAc;AAC/D,cAAU,WAAW,UAAU;AAE/B,QAAI,YAAY;AACZ;AAEJ,QAAI,YAAY,MAAM;AAElB,UAAI,WAAW;AACX;AAAA,IAEP;AAGG;AAAA,EACP;AACD,SAAQ,aAAa,MAAM,GAAG,QAAQ,EAAE,KAAK,GAAG,IAC5C,MACA,WAEK,MAAM,cAAc,eAAe,WAAW,SAAS,IAAI,EAAE,EAC7D,KAAK,GAAG;AACrB;AAEA,IAAI;AAAA,CACH,SAAUI,iBAAgB;AACvB,EAAAA,gBAAe,KAAK,IAAI;AACxB,EAAAA,gBAAe,MAAM,IAAI;AAC7B,GAAG,mBAAmB,iBAAiB,CAAE,EAAC;AAC1C,IAAI;AAAA,CACH,SAAUC,sBAAqB;AAC5B,EAAAA,qBAAoB,MAAM,IAAI;AAC9B,EAAAA,qBAAoB,SAAS,IAAI;AACjC,EAAAA,qBAAoB,SAAS,IAAI;AACrC,GAAG,wBAAwB,sBAAsB,CAAE,EAAC;AAIpD,MAAM,QAAQ;AAQd,SAAS,cAAc,MAAM;AACzB,MAAI,CAAC,MAAM;AACP,QAAI,WAAW;AAEX,YAAM,SAAS,SAAS,cAAc,MAAM;AAC5C,aAAQ,UAAU,OAAO,aAAa,MAAM,KAAM;AAElD,aAAO,KAAK,QAAQ,mBAAmB,EAAE;AAAA,IAC5C,OACI;AACD,aAAO;AAAA,IACV;AAAA,EACJ;AAID,MAAI,KAAK,CAAC,MAAM,OAAO,KAAK,CAAC,MAAM;AAC/B,WAAO,MAAM;AAGjB,SAAO,oBAAoB,IAAI;AACnC;AAEA,MAAM,iBAAiB;AACvB,SAAS,WAAW,MAAMH,WAAU;AAChC,SAAO,KAAK,QAAQ,gBAAgB,GAAG,IAAIA;AAC/C;AAEA,SAAS,mBAAmB,IAAI,QAAQ;AACpC,QAAM,UAAU,SAAS,gBAAgB,sBAAqB;AAC9D,QAAM,SAAS,GAAG;AAClB,SAAO;AAAA,IACH,UAAU,OAAO;AAAA,IACjB,MAAM,OAAO,OAAO,QAAQ,QAAQ,OAAO,QAAQ;AAAA,IACnD,KAAK,OAAO,MAAM,QAAQ,OAAO,OAAO,OAAO;AAAA,EACvD;AACA;AACA,MAAM,wBAAwB,OAAO;AAAA,EACjC,MAAM,OAAO;AAAA,EACb,KAAK,OAAO;AAChB;AACA,SAAS,iBAAiB,UAAU;AAChC,MAAI;AACJ,MAAI,QAAQ,UAAU;AAClB,UAAM,aAAa,SAAS;AAC5B,UAAM,eAAe,OAAO,eAAe,YAAY,WAAW,WAAW,GAAG;AAuChF,UAAM,KAAK,OAAO,eAAe,WAC3B,eACI,SAAS,eAAe,WAAW,MAAM,CAAC,CAAC,IAC3C,SAAS,cAAc,UAAU,IACrC;AACN,QAAI,CAAC,IAAI;AAGL;AAAA,IACH;AACD,sBAAkB,mBAAmB,IAAI,QAAQ;AAAA,EACpD,OACI;AACD,sBAAkB;AAAA,EACrB;AACD,MAAI,oBAAoB,SAAS,gBAAgB;AAC7C,WAAO,SAAS,eAAe;AAAA,OAC9B;AACD,WAAO,SAAS,gBAAgB,QAAQ,OAAO,gBAAgB,OAAO,OAAO,aAAa,gBAAgB,OAAO,OAAO,gBAAgB,MAAM,OAAO,WAAW;AAAA,EACnK;AACL;AACA,SAAS,aAAa,MAAM,OAAO;AAC/B,QAAM,WAAW,QAAQ,QAAQ,QAAQ,MAAM,WAAW,QAAQ;AAClE,SAAO,WAAW;AACtB;AACA,MAAM,kBAAkB,oBAAI;AAC5B,SAAS,mBAAmB,KAAK,gBAAgB;AAC7C,kBAAgB,IAAI,KAAK,cAAc;AAC3C;AACA,SAAS,uBAAuB,KAAK;AACjC,QAAM,SAAS,gBAAgB,IAAI,GAAG;AAEtC,kBAAgB,OAAO,GAAG;AAC1B,SAAO;AACX;AAiBA,IAAI,qBAAqB,MAAM,SAAS,WAAW,OAAO,SAAS;AAKnE,SAAS,sBAAsB,MAAMA,WAAU;AAC3C,QAAM,EAAE,UAAU,QAAAI,SAAQ,KAAI,IAAKJ;AAEnC,QAAM,UAAU,KAAK,QAAQ,GAAG;AAChC,MAAI,UAAU,IAAI;AACd,QAAI,WAAW,KAAK,SAAS,KAAK,MAAM,OAAO,CAAC,IAC1C,KAAK,MAAM,OAAO,EAAE,SACpB;AACN,QAAI,eAAe,KAAK,MAAM,QAAQ;AAEtC,QAAI,aAAa,CAAC,MAAM;AACpB,qBAAe,MAAM;AACzB,WAAO,UAAU,cAAc,EAAE;AAAA,EACpC;AACD,QAAM,OAAO,UAAU,UAAU,IAAI;AACrC,SAAO,OAAOI,UAAS;AAC3B;AACA,SAAS,oBAAoB,MAAM,cAAc,iBAAiB,SAAS;AACvE,MAAI,YAAY,CAAA;AAChB,MAAI,YAAY,CAAA;AAGhB,MAAI,aAAa;AACjB,QAAM,kBAAkB,CAAC,EAAE,YAAa;AACpC,UAAM,KAAK,sBAAsB,MAAM,QAAQ;AAC/C,UAAM,OAAO,gBAAgB;AAC7B,UAAM,YAAY,aAAa;AAC/B,QAAI,QAAQ;AACZ,QAAI,OAAO;AACP,sBAAgB,QAAQ;AACxB,mBAAa,QAAQ;AAErB,UAAI,cAAc,eAAe,MAAM;AACnC,qBAAa;AACb;AAAA,MACH;AACD,cAAQ,YAAY,MAAM,WAAW,UAAU,WAAW;AAAA,IAC7D,OACI;AACD,cAAQ,EAAE;AAAA,IACb;AAOD,cAAU,QAAQ,cAAY;AAC1B,eAAS,gBAAgB,OAAO,MAAM;AAAA,QAClC;AAAA,QACA,MAAM,eAAe;AAAA,QACrB,WAAW,QACL,QAAQ,IACJ,oBAAoB,UACpB,oBAAoB,OACxB,oBAAoB;AAAA,MAC1C,CAAa;AAAA,IACb,CAAS;AAAA,EACT;AACI,WAAS,iBAAiB;AACtB,iBAAa,gBAAgB;AAAA,EAChC;AACD,WAAS,OAAO,UAAU;AAEtB,cAAU,KAAK,QAAQ;AACvB,UAAM,WAAW,MAAM;AACnB,YAAM,QAAQ,UAAU,QAAQ,QAAQ;AACxC,UAAI,QAAQ;AACR,kBAAU,OAAO,OAAO,CAAC;AAAA,IACzC;AACQ,cAAU,KAAK,QAAQ;AACvB,WAAO;AAAA,EACV;AACD,WAAS,uBAAuB;AAC5B,UAAM,EAAE,SAAAC,SAAS,IAAG;AACpB,QAAI,CAACA,SAAQ;AACT;AACJ,IAAAA,SAAQ,aAAa,OAAO,CAAA,GAAIA,SAAQ,OAAO,EAAE,QAAQ,sBAAqB,GAAI,GAAG,EAAE;AAAA,EAC1F;AACD,WAAS,UAAU;AACf,eAAW,YAAY;AACnB;AACJ,gBAAY,CAAA;AACZ,WAAO,oBAAoB,YAAY,eAAe;AACtD,WAAO,oBAAoB,gBAAgB,oBAAoB;AAAA,EAClE;AAED,SAAO,iBAAiB,YAAY,eAAe;AACnD,SAAO,iBAAiB,gBAAgB,oBAAoB;AAC5D,SAAO;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,EACR;AACA;AAIA,SAAS,WAAW,MAAM,SAAS,SAAS,WAAW,OAAO,gBAAgB,OAAO;AACjF,SAAO;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU,OAAO,QAAQ;AAAA,IACzB,QAAQ,gBAAgB,sBAAqB,IAAK;AAAA,EAC1D;AACA;AACA,SAAS,0BAA0B,MAAM;AACrC,QAAM,EAAE,SAAAA,UAAS,UAAAL,UAAU,IAAG;AAE9B,QAAM,kBAAkB;AAAA,IACpB,OAAO,sBAAsB,MAAMA,SAAQ;AAAA,EACnD;AACI,QAAM,eAAe,EAAE,OAAOK,SAAQ,MAAK;AAE3C,MAAI,CAAC,aAAa,OAAO;AACrB,mBAAe,gBAAgB,OAAO;AAAA,MAClC,MAAM;AAAA,MACN,SAAS,gBAAgB;AAAA,MACzB,SAAS;AAAA;AAAA,MAET,UAAUA,SAAQ,SAAS;AAAA,MAC3B,UAAU;AAAA;AAAA;AAAA,MAGV,QAAQ;AAAA,IACX,GAAE,IAAI;AAAA,EACV;AACD,WAAS,eAAe,IAAI,OAAOC,UAAS;AAUxC,UAAM,YAAY,KAAK,QAAQ,GAAG;AAClC,UAAM,MAAM,YAAY,MACjBN,UAAS,QAAQ,SAAS,cAAc,MAAM,IAC3C,OACA,KAAK,MAAM,SAAS,KAAK,KAC7B,mBAAoB,IAAG,OAAO;AACpC,QAAI;AAGA,MAAAK,SAAQC,WAAU,iBAAiB,WAAW,EAAE,OAAO,IAAI,GAAG;AAC9D,mBAAa,QAAQ;AAAA,IACxB,SACM,KAAP;AAIS;AACD,gBAAQ,MAAM,GAAG;AAAA,MACpB;AAED,MAAAN,UAASM,WAAU,YAAY,QAAQ,EAAE,GAAG;AAAA,IAC/C;AAAA,EACJ;AACD,WAAS,QAAQ,IAAI,MAAM;AACvB,UAAM,QAAQ,OAAO,IAAID,SAAQ,OAAO;AAAA,MAAW,aAAa,MAAM;AAAA;AAAA,MAEtE;AAAA,MAAI,aAAa,MAAM;AAAA,MAAS;AAAA,IAAI,GAAG,MAAM,EAAE,UAAU,aAAa,MAAM,SAAU,CAAA;AACtF,mBAAe,IAAI,OAAO,IAAI;AAC9B,oBAAgB,QAAQ;AAAA,EAC3B;AACD,WAAS,KAAK,IAAI,MAAM;AAGpB,UAAM,eAAe;AAAA,MAAO,CAAE;AAAA;AAAA;AAAA;AAAA,MAI9B,aAAa;AAAA,MAAOA,SAAQ;AAAA,MAAO;AAAA,QAC/B,SAAS;AAAA,QACT,QAAQ,sBAAuB;AAAA,MAC3C;AAAA,IAAS;AAMD,mBAAe,aAAa,SAAS,cAAc,IAAI;AACvD,UAAM,QAAQ,OAAO,CAAA,GAAI,WAAW,gBAAgB,OAAO,IAAI,IAAI,GAAG,EAAE,UAAU,aAAa,WAAW,EAAC,GAAI,IAAI;AACnH,mBAAe,IAAI,OAAO,KAAK;AAC/B,oBAAgB,QAAQ;AAAA,EAC3B;AACD,SAAO;AAAA,IACH,UAAU;AAAA,IACV,OAAO;AAAA,IACP;AAAA,IACA;AAAA,EACR;AACA;AAMA,SAAS,iBAAiB,MAAM;AAC5B,SAAO,cAAc,IAAI;AACzB,QAAM,oBAAoB,0BAA0B,IAAI;AACxD,QAAM,mBAAmB,oBAAoB,MAAM,kBAAkB,OAAO,kBAAkB,UAAU,kBAAkB,OAAO;AACjI,WAAS,GAAG,OAAO,mBAAmB,MAAM;AACxC,QAAI,CAAC;AACD,uBAAiB,eAAc;AACnC,YAAQ,GAAG,KAAK;AAAA,EACnB;AACD,QAAM,gBAAgB,OAAO;AAAA;AAAA,IAEzB,UAAU;AAAA,IACV;AAAA,IACA;AAAA,IACA,YAAY,WAAW,KAAK,MAAM,IAAI;AAAA,EAC9C,GAAO,mBAAmB,gBAAgB;AACtC,SAAO,eAAe,eAAe,YAAY;AAAA,IAC7C,YAAY;AAAA,IACZ,KAAK,MAAM,kBAAkB,SAAS;AAAA,EAC9C,CAAK;AACD,SAAO,eAAe,eAAe,SAAS;AAAA,IAC1C,YAAY;AAAA,IACZ,KAAK,MAAM,kBAAkB,MAAM;AAAA,EAC3C,CAAK;AACD,SAAO;AACX;AASA,SAAS,oBAAoB,OAAO,IAAI;AACpC,MAAI,YAAY,CAAA;AAChB,MAAI,QAAQ,CAAC,KAAK;AAClB,MAAI,WAAW;AACf,SAAO,cAAc,IAAI;AACzB,WAAS,YAAYL,WAAU;AAC3B;AACA,QAAI,aAAa,MAAM,QAAQ;AAE3B,YAAM,KAAKA,SAAQ;AAAA,IACtB,OACI;AAED,YAAM,OAAO,QAAQ;AACrB,YAAM,KAAKA,SAAQ;AAAA,IACtB;AAAA,EACJ;AACD,WAAS,iBAAiB,IAAI,MAAM,EAAE,WAAW,MAAK,GAAI;AACtD,UAAM,OAAO;AAAA,MACT;AAAA,MACA;AAAA,MACA,MAAM,eAAe;AAAA,IACjC;AACQ,eAAW,YAAY,WAAW;AAC9B,eAAS,IAAI,MAAM,IAAI;AAAA,IAC1B;AAAA,EACJ;AACD,QAAM,gBAAgB;AAAA;AAAA,IAElB,UAAU;AAAA;AAAA,IAEV,OAAO,CAAE;AAAA,IACT;AAAA,IACA,YAAY,WAAW,KAAK,MAAM,IAAI;AAAA,IACtC,QAAQ,IAAI;AAER,YAAM,OAAO,YAAY,CAAC;AAC1B,kBAAY,EAAE;AAAA,IACjB;AAAA,IACD,KAAK,IAAI,MAAM;AACX,kBAAY,EAAE;AAAA,IACjB;AAAA,IACD,OAAO,UAAU;AACb,gBAAU,KAAK,QAAQ;AACvB,aAAO,MAAM;AACT,cAAM,QAAQ,UAAU,QAAQ,QAAQ;AACxC,YAAI,QAAQ;AACR,oBAAU,OAAO,OAAO,CAAC;AAAA,MAC7C;AAAA,IACS;AAAA,IACD,UAAU;AACN,kBAAY,CAAA;AACZ,cAAQ,CAAC,KAAK;AACd,iBAAW;AAAA,IACd;AAAA,IACD,GAAG,OAAO,gBAAgB,MAAM;AAC5B,YAAM,OAAO,KAAK;AAClB,YAAM;AAAA;AAAA;AAAA;AAAA,QAIN,QAAQ,IAAI,oBAAoB,OAAO,oBAAoB;AAAA;AAC3D,iBAAW,KAAK,IAAI,GAAG,KAAK,IAAI,WAAW,OAAO,MAAM,SAAS,CAAC,CAAC;AACnE,UAAI,eAAe;AACf,yBAAiB,KAAK,UAAU,MAAM;AAAA,UAClC;AAAA,UACA;AAAA,QACpB,CAAiB;AAAA,MACJ;AAAA,IACJ;AAAA,EACT;AACI,SAAO,eAAe,eAAe,YAAY;AAAA,IAC7C,YAAY;AAAA,IACZ,KAAK,MAAM,MAAM,QAAQ;AAAA,EACjC,CAAK;AACD,SAAO;AACX;AA0BA,SAAS,qBAAqB,MAAM;AAIhC,SAAO,SAAS,OAAO,QAAQ,SAAS,WAAW,SAAS,SAAS;AAErE,MAAI,CAAC,KAAK,SAAS,GAAG;AAClB,YAAQ;AAIZ,SAAO,iBAAiB,IAAI;AAChC;AAEA,SAAS,gBAAgB,OAAO;AAC5B,SAAO,OAAO,UAAU,YAAa,SAAS,OAAO,UAAU;AACnE;AACA,SAAS,YAAY,MAAM;AACvB,SAAO,OAAO,SAAS,YAAY,OAAO,SAAS;AACvD;AAiBA,MAAM,4BAA4B;AAAA,EAC9B,MAAM;AAAA,EACN,MAAM;AAAA,EACN,QAAQ,CAAE;AAAA,EACV,OAAO,CAAE;AAAA,EACT,MAAM;AAAA,EACN,UAAU;AAAA,EACV,SAAS,CAAE;AAAA,EACX,MAAM,CAAE;AAAA,EACR,gBAAgB;AACpB;AAEA,MAAM,0BAA0B,OAAwE,EAAE;AAK1G,IAAI;AAAA,CACH,SAAUO,wBAAuB;AAK9B,EAAAA,uBAAsBA,uBAAsB,SAAS,IAAI,CAAC,IAAI;AAK9D,EAAAA,uBAAsBA,uBAAsB,WAAW,IAAI,CAAC,IAAI;AAKhE,EAAAA,uBAAsBA,uBAAsB,YAAY,IAAI,EAAE,IAAI;AACtE,GAAG,0BAA0B,wBAAwB,CAAE,EAAC;AAqBxD,SAAS,kBAAkB,MAAM,QAAQ;AAQhC;AACD,WAAO,OAAO,IAAI,SAAS;AAAA,MACvB;AAAA,MACA,CAAC,uBAAuB,GAAG;AAAA,IAC9B,GAAE,MAAM;AAAA,EACZ;AACL;AACA,SAAS,oBAAoB,OAAO,MAAM;AACtC,SAAQ,iBAAiB,SACrB,2BAA2B,UAC1B,QAAQ,QAAQ,CAAC,EAAE,MAAM,OAAO;AACzC;AAgBA,MAAM,qBAAqB;AAC3B,MAAM,2BAA2B;AAAA,EAC7B,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,KAAK;AACT;AAEA,MAAM,iBAAiB;AAQvB,SAAS,eAAe,UAAU,cAAc;AAC5C,QAAM,UAAU,OAAO,CAAE,GAAE,0BAA0B,YAAY;AAEjE,QAAM,QAAQ,CAAA;AAEd,MAAI,UAAU,QAAQ,QAAQ,MAAM;AAEpC,QAAM,OAAO,CAAA;AACb,aAAW,WAAW,UAAU;AAE5B,UAAM,gBAAgB,QAAQ,SAAS,CAAA,IAAK;AAAA,MAAC;AAAA;AAAA,IAAE;AAE/C,QAAI,QAAQ,UAAU,CAAC,QAAQ;AAC3B,iBAAW;AACf,aAAS,aAAa,GAAG,aAAa,QAAQ,QAAQ,cAAc;AAChE,YAAMC,SAAQ,QAAQ,UAAU;AAEhC,UAAI,kBAAkB,MACjB,QAAQ,YAAY,OAA0C;AACnE,UAAIA,OAAM,SAAS,GAA0B;AAEzC,YAAI,CAAC;AACD,qBAAW;AACf,mBAAWA,OAAM,MAAM,QAAQ,gBAAgB,MAAM;AACrD,2BAAmB;AAAA,MACtB,WACQA,OAAM,SAAS,GAAyB;AAC7C,cAAM,EAAE,OAAO,YAAY,UAAU,OAAM,IAAKA;AAChD,aAAK,KAAK;AAAA,UACN,MAAM;AAAA,UACN;AAAA,UACA;AAAA,QACpB,CAAiB;AACD,cAAMC,MAAK,SAAS,SAAS;AAE7B,YAAIA,QAAO,oBAAoB;AAC3B,6BAAmB;AAEnB,cAAI;AACA,gBAAI,OAAO,IAAIA,MAAK;AAAA,UACvB,SACM,KAAP;AACI,kBAAM,IAAI,MAAM,oCAAoC,WAAWA,WAC3D,IAAI,OAAO;AAAA,UAClB;AAAA,QACJ;AAED,YAAI,aAAa,aAAa,OAAOA,cAAaA,YAAW,IAAIA;AAEjE,YAAI,CAAC;AACD;AAAA;AAAA,UAGI,YAAY,QAAQ,SAAS,IACvB,OAAO,gBACP,MAAM;AACpB,YAAI;AACA,wBAAc;AAClB,mBAAW;AACX,2BAAmB;AACnB,YAAI;AACA,6BAAmB;AACvB,YAAI;AACA,6BAAmB;AACvB,YAAIA,QAAO;AACP,6BAAmB;AAAA,MAC1B;AACD,oBAAc,KAAK,eAAe;AAAA,IACrC;AAGD,UAAM,KAAK,aAAa;AAAA,EAC3B;AAED,MAAI,QAAQ,UAAU,QAAQ,KAAK;AAC/B,UAAM,IAAI,MAAM,SAAS;AACzB,UAAM,CAAC,EAAE,MAAM,CAAC,EAAE,SAAS,CAAC,KAAK;AAAA,EACpC;AAED,MAAI,CAAC,QAAQ;AACT,eAAW;AACf,MAAI,QAAQ;AACR,eAAW;AAAA,WAEN,QAAQ;AACb,eAAW;AACf,QAAM,KAAK,IAAI,OAAO,SAAS,QAAQ,YAAY,KAAK,GAAG;AAC3D,WAAS,MAAM,MAAM;AACjB,UAAM,QAAQ,KAAK,MAAM,EAAE;AAC3B,UAAM,SAAS,CAAA;AACf,QAAI,CAAC;AACD,aAAO;AACX,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACnC,YAAM,QAAQ,MAAM,CAAC,KAAK;AAC1B,YAAM,MAAM,KAAK,IAAI,CAAC;AACtB,aAAO,IAAI,IAAI,IAAI,SAAS,IAAI,aAAa,MAAM,MAAM,GAAG,IAAI;AAAA,IACnE;AACD,WAAO;AAAA,EACV;AACD,WAAS,UAAU,QAAQ;AACvB,QAAI,OAAO;AAEX,QAAI,uBAAuB;AAC3B,eAAW,WAAW,UAAU;AAC5B,UAAI,CAAC,wBAAwB,CAAC,KAAK,SAAS,GAAG;AAC3C,gBAAQ;AACZ,6BAAuB;AACvB,iBAAWD,UAAS,SAAS;AACzB,YAAIA,OAAM,SAAS,GAA0B;AACzC,kBAAQA,OAAM;AAAA,QACjB,WACQA,OAAM,SAAS,GAAyB;AAC7C,gBAAM,EAAE,OAAO,YAAY,SAAQ,IAAKA;AACxC,gBAAM,QAAQ,SAAS,SAAS,OAAO,KAAK,IAAI;AAChD,cAAIV,UAAQ,KAAK,KAAK,CAAC,YAAY;AAC/B,kBAAM,IAAI,MAAM,mBAAmB,gEAAgE;AAAA,UACtG;AACD,gBAAM,OAAOA,UAAQ,KAAK,IACpB,MAAM,KAAK,GAAG,IACd;AACN,cAAI,CAAC,MAAM;AACP,gBAAI,UAAU;AAEV,kBAAI,QAAQ,SAAS,GAAG;AAEpB,oBAAI,KAAK,SAAS,GAAG;AACjB,yBAAO,KAAK,MAAM,GAAG,EAAE;AAAA;AAGvB,yCAAuB;AAAA,cAC9B;AAAA,YACJ;AAEG,oBAAM,IAAI,MAAM,2BAA2B,QAAQ;AAAA,UAC1D;AACD,kBAAQ;AAAA,QACX;AAAA,MACJ;AAAA,IACJ;AAED,WAAO,QAAQ;AAAA,EAClB;AACD,SAAO;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACR;AACA;AAUA,SAAS,kBAAkB,GAAG,GAAG;AAC7B,MAAI,IAAI;AACR,SAAO,IAAI,EAAE,UAAU,IAAI,EAAE,QAAQ;AACjC,UAAM,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC;AAEvB,QAAI;AACA,aAAO;AACX;AAAA,EACH;AAGD,MAAI,EAAE,SAAS,EAAE,QAAQ;AACrB,WAAO,EAAE,WAAW,KAAK,EAAE,CAAC,MAAM,KAA4B,KACxD,KACA;AAAA,EACT,WACQ,EAAE,SAAS,EAAE,QAAQ;AAC1B,WAAO,EAAE,WAAW,KAAK,EAAE,CAAC,MAAM,KAA4B,KACxD,IACA;AAAA,EACT;AACD,SAAO;AACX;AAQA,SAAS,uBAAuB,GAAG,GAAG;AAClC,MAAI,IAAI;AACR,QAAM,SAAS,EAAE;AACjB,QAAM,SAAS,EAAE;AACjB,SAAO,IAAI,OAAO,UAAU,IAAI,OAAO,QAAQ;AAC3C,UAAM,OAAO,kBAAkB,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;AAEnD,QAAI;AACA,aAAO;AACX;AAAA,EACH;AACD,MAAI,KAAK,IAAI,OAAO,SAAS,OAAO,MAAM,MAAM,GAAG;AAC/C,QAAI,oBAAoB,MAAM;AAC1B,aAAO;AACX,QAAI,oBAAoB,MAAM;AAC1B,aAAO;AAAA,EACd;AAED,SAAO,OAAO,SAAS,OAAO;AAOlC;AAOA,SAAS,oBAAoB,OAAO;AAChC,QAAM,OAAO,MAAM,MAAM,SAAS,CAAC;AACnC,SAAO,MAAM,SAAS,KAAK,KAAK,KAAK,SAAS,CAAC,IAAI;AACvD;AAEA,MAAM,aAAa;AAAA,EACf,MAAM;AAAA,EACN,OAAO;AACX;AACA,MAAM,iBAAiB;AAIvB,SAAS,aAAa,MAAM;AACxB,MAAI,CAAC;AACD,WAAO,CAAC,CAAE,CAAA;AACd,MAAI,SAAS;AACT,WAAO,CAAC,CAAC,UAAU,CAAC;AACxB,MAAI,CAAC,KAAK,WAAW,GAAG,GAAG;AACvB,UAAM,IAAI,MAEJ,iBAAiB,OAAO;AAAA,EACjC;AAED,WAAS,MAAM,SAAS;AACpB,UAAM,IAAI,MAAM,QAAQ,WAAW,YAAY,SAAS;AAAA,EAC3D;AACD,MAAI,QAAQ;AACZ,MAAI,gBAAgB;AACpB,QAAM,SAAS,CAAA;AAGf,MAAI;AACJ,WAAS,kBAAkB;AACvB,QAAI;AACA,aAAO,KAAK,OAAO;AACvB,cAAU,CAAA;AAAA,EACb;AAED,MAAI,IAAI;AAER,MAAI;AAEJ,MAAI,SAAS;AAEb,MAAI,WAAW;AACf,WAAS,gBAAgB;AACrB,QAAI,CAAC;AACD;AACJ,QAAI,UAAU,GAA+B;AACzC,cAAQ,KAAK;AAAA,QACT,MAAM;AAAA,QACN,OAAO;AAAA,MACvB,CAAa;AAAA,IACJ,WACQ,UAAU,KACf,UAAU,KACV,UAAU,GAAuC;AACjD,UAAI,QAAQ,SAAS,MAAM,SAAS,OAAO,SAAS;AAChD,cAAM,uBAAuB,oDAAoD;AACrF,cAAQ,KAAK;AAAA,QACT,MAAM;AAAA,QACN,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,YAAY,SAAS,OAAO,SAAS;AAAA,QACrC,UAAU,SAAS,OAAO,SAAS;AAAA,MACnD,CAAa;AAAA,IACJ,OACI;AACD,YAAM,iCAAiC;AAAA,IAC1C;AACD,aAAS;AAAA,EACZ;AACD,WAAS,kBAAkB;AACvB,cAAU;AAAA,EACb;AACD,SAAO,IAAI,KAAK,QAAQ;AACpB,WAAO,KAAK,GAAG;AACf,QAAI,SAAS,QAAQ,UAAU,GAAoC;AAC/D,sBAAgB;AAChB,cAAQ;AACR;AAAA,IACH;AACD,YAAQ,OAAK;AAAA,MACT,KAAK;AACD,YAAI,SAAS,KAAK;AACd,cAAI,QAAQ;AACR;UACH;AACD;QACH,WACQ,SAAS,KAAK;AACnB;AACA,kBAAQ;AAAA,QACX,OACI;AACD;QACH;AACD;AAAA,MACJ,KAAK;AACD;AACA,gBAAQ;AACR;AAAA,MACJ,KAAK;AACD,YAAI,SAAS,KAAK;AACd,kBAAQ;AAAA,QACX,WACQ,eAAe,KAAK,IAAI,GAAG;AAChC;QACH,OACI;AACD;AACA,kBAAQ;AAER,cAAI,SAAS,OAAO,SAAS,OAAO,SAAS;AACzC;AAAA,QACP;AACD;AAAA,MACJ,KAAK;AAMD,YAAI,SAAS,KAAK;AAEd,cAAI,SAAS,SAAS,SAAS,CAAC,KAAK;AACjC,uBAAW,SAAS,MAAM,GAAG,EAAE,IAAI;AAAA;AAEnC,oBAAQ;AAAA,QACf,OACI;AACD,sBAAY;AAAA,QACf;AACD;AAAA,MACJ,KAAK;AAED;AACA,gBAAQ;AAER,YAAI,SAAS,OAAO,SAAS,OAAO,SAAS;AACzC;AACJ,mBAAW;AACX;AAAA,MACJ;AACI,cAAM,eAAe;AACrB;AAAA,IACP;AAAA,EACJ;AACD,MAAI,UAAU;AACV,UAAM,uCAAuC,SAAS;AAC1D;AACA;AAEA,SAAO;AACX;AAEA,SAAS,yBAAyB,QAAQ,QAAQ,SAAS;AACvD,QAAM,SAAS,eAAe,aAAa,OAAO,IAAI,GAAG,OAAO;AAUhE,QAAM,UAAU,OAAO,QAAQ;AAAA,IAC3B;AAAA,IACA;AAAA;AAAA,IAEA,UAAU,CAAE;AAAA,IACZ,OAAO,CAAE;AAAA,EACjB,CAAK;AACD,MAAI,QAAQ;AAIR,QAAI,CAAC,QAAQ,OAAO,YAAY,CAAC,OAAO,OAAO;AAC3C,aAAO,SAAS,KAAK,OAAO;AAAA,EACnC;AACD,SAAO;AACX;AASA,SAAS,oBAAoB,QAAQ,eAAe;AAEhD,QAAM,WAAW,CAAA;AACjB,QAAM,aAAa,oBAAI;AACvB,kBAAgB,aAAa,EAAE,QAAQ,OAAO,KAAK,MAAM,WAAW,SAAS,aAAa;AAC1F,WAAS,iBAAiB,MAAM;AAC5B,WAAO,WAAW,IAAI,IAAI;AAAA,EAC7B;AACD,WAAS,SAAS,QAAQ,QAAQ,gBAAgB;AAE9C,UAAM,YAAY,CAAC;AACnB,UAAM,uBAAuB,qBAAqB,MAAM;AAKxD,yBAAqB,UAAU,kBAAkB,eAAe;AAChE,UAAM,UAAU,aAAa,eAAe,MAAM;AAElD,UAAM,oBAAoB;AAAA,MACtB;AAAA,IACZ;AACQ,QAAI,WAAW,QAAQ;AACnB,YAAM,UAAU,OAAO,OAAO,UAAU,WAAW,CAAC,OAAO,KAAK,IAAI,OAAO;AAC3E,iBAAW,SAAS,SAAS;AACzB,0BAAkB,KAAK,OAAO,CAAA,GAAI,sBAAsB;AAAA;AAAA;AAAA,UAGpD,YAAY,iBACN,eAAe,OAAO,aACtB,qBAAqB;AAAA,UAC3B,MAAM;AAAA;AAAA,UAEN,SAAS,iBACH,eAAe,SACf;AAAA;AAAA;AAAA,QAGT,CAAA,CAAC;AAAA,MACL;AAAA,IACJ;AACD,QAAI;AACJ,QAAI;AACJ,eAAW,oBAAoB,mBAAmB;AAC9C,YAAM,EAAE,KAAM,IAAG;AAIjB,UAAI,UAAU,KAAK,CAAC,MAAM,KAAK;AAC3B,cAAM,aAAa,OAAO,OAAO;AACjC,cAAM,kBAAkB,WAAW,WAAW,SAAS,CAAC,MAAM,MAAM,KAAK;AACzE,yBAAiB,OACb,OAAO,OAAO,QAAQ,QAAQ,kBAAkB;AAAA,MACvD;AAMD,gBAAU,yBAAyB,kBAAkB,QAAQ,OAAO;AAKpE,UAAI,gBAAgB;AAChB,uBAAe,MAAM,KAAK,OAAO;AAAA,MAIpC,OACI;AAED,0BAAkB,mBAAmB;AACrC,YAAI,oBAAoB;AACpB,0BAAgB,MAAM,KAAK,OAAO;AAGtC,YAAI,aAAa,OAAO,QAAQ,CAAC,cAAc,OAAO;AAClD,sBAAY,OAAO,IAAI;AAAA,MAC9B;AACD,UAAI,qBAAqB,UAAU;AAC/B,cAAM,WAAW,qBAAqB;AACtC,iBAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACtC,mBAAS,SAAS,CAAC,GAAG,SAAS,kBAAkB,eAAe,SAAS,CAAC,CAAC;AAAA,QAC9E;AAAA,MACJ;AAGD,uBAAiB,kBAAkB;AAOnC,UAAK,QAAQ,OAAO,cAChB,OAAO,KAAK,QAAQ,OAAO,UAAU,EAAE,UACvC,QAAQ,OAAO,QACf,QAAQ,OAAO,UAAU;AACzB,sBAAc,OAAO;AAAA,MACxB;AAAA,IACJ;AACD,WAAO,kBACD,MAAM;AAEJ,kBAAY,eAAe;AAAA,IAC9B,IACC;AAAA,EACT;AACD,WAAS,YAAY,YAAY;AAC7B,QAAI,YAAY,UAAU,GAAG;AACzB,YAAM,UAAU,WAAW,IAAI,UAAU;AACzC,UAAI,SAAS;AACT,mBAAW,OAAO,UAAU;AAC5B,iBAAS,OAAO,SAAS,QAAQ,OAAO,GAAG,CAAC;AAC5C,gBAAQ,SAAS,QAAQ,WAAW;AACpC,gBAAQ,MAAM,QAAQ,WAAW;AAAA,MACpC;AAAA,IACJ,OACI;AACD,YAAM,QAAQ,SAAS,QAAQ,UAAU;AACzC,UAAI,QAAQ,IAAI;AACZ,iBAAS,OAAO,OAAO,CAAC;AACxB,YAAI,WAAW,OAAO;AAClB,qBAAW,OAAO,WAAW,OAAO,IAAI;AAC5C,mBAAW,SAAS,QAAQ,WAAW;AACvC,mBAAW,MAAM,QAAQ,WAAW;AAAA,MACvC;AAAA,IACJ;AAAA,EACJ;AACD,WAAS,YAAY;AACjB,WAAO;AAAA,EACV;AACD,WAAS,cAAc,SAAS;AAC5B,QAAI,IAAI;AACR,WAAO,IAAI,SAAS,UAChB,uBAAuB,SAAS,SAAS,CAAC,CAAC,KAAK;AAAA;AAAA,KAG/C,QAAQ,OAAO,SAAS,SAAS,CAAC,EAAE,OAAO,QACxC,CAAC,gBAAgB,SAAS,SAAS,CAAC,CAAC;AACzC;AACJ,aAAS,OAAO,GAAG,GAAG,OAAO;AAE7B,QAAI,QAAQ,OAAO,QAAQ,CAAC,cAAc,OAAO;AAC7C,iBAAW,IAAI,QAAQ,OAAO,MAAM,OAAO;AAAA,EAClD;AACD,WAAS,QAAQE,WAAU,iBAAiB;AACxC,QAAI;AACJ,QAAI,SAAS,CAAA;AACb,QAAI;AACJ,QAAI;AACJ,QAAI,UAAUA,aAAYA,UAAS,MAAM;AACrC,gBAAU,WAAW,IAAIA,UAAS,IAAI;AACtC,UAAI,CAAC;AACD,cAAM,kBAAkB,GAAsC;AAAA,UAC1D,UAAAA;AAAA,QACpB,CAAiB;AAQL,aAAO,QAAQ,OAAO;AACtB,eAAS;AAAA;AAAA,QAET;AAAA,UAAmB,gBAAgB;AAAA;AAAA;AAAA,UAGnC,QAAQ,KAAK,OAAO,OAAK,CAAC,EAAE,QAAQ,EAAE,IAAI,OAAK,EAAE,IAAI;AAAA,QAAC;AAAA;AAAA;AAAA,QAGtDA,UAAS,UACL,mBAAmBA,UAAS,QAAQ,QAAQ,KAAK,IAAI,OAAK,EAAE,IAAI,CAAC;AAAA,MAAC;AAEtE,aAAO,QAAQ,UAAU,MAAM;AAAA,IAClC,WACQ,UAAUA,WAAU;AAGzB,aAAOA,UAAS;AAIhB,gBAAU,SAAS,KAAK,OAAK,EAAE,GAAG,KAAK,IAAI,CAAC;AAE5C,UAAI,SAAS;AAET,iBAAS,QAAQ,MAAM,IAAI;AAC3B,eAAO,QAAQ,OAAO;AAAA,MACzB;AAAA,IAEJ,OACI;AAED,gBAAU,gBAAgB,OACpB,WAAW,IAAI,gBAAgB,IAAI,IACnC,SAAS,KAAK,OAAK,EAAE,GAAG,KAAK,gBAAgB,IAAI,CAAC;AACxD,UAAI,CAAC;AACD,cAAM,kBAAkB,GAAsC;AAAA,UAC1D,UAAAA;AAAA,UACA;AAAA,QACpB,CAAiB;AACL,aAAO,QAAQ,OAAO;AAGtB,eAAS,OAAO,IAAI,gBAAgB,QAAQA,UAAS,MAAM;AAC3D,aAAO,QAAQ,UAAU,MAAM;AAAA,IAClC;AACD,UAAM,UAAU,CAAA;AAChB,QAAI,gBAAgB;AACpB,WAAO,eAAe;AAElB,cAAQ,QAAQ,cAAc,MAAM;AACpC,sBAAgB,cAAc;AAAA,IACjC;AACD,WAAO;AAAA,MACH;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,MAAM,gBAAgB,OAAO;AAAA,IACzC;AAAA,EACK;AAED,SAAO,QAAQ,WAAS,SAAS,KAAK,CAAC;AACvC,SAAO,EAAE,UAAU,SAAS,aAAa,WAAW,iBAAgB;AACxE;AACA,SAAS,mBAAmB,QAAQ,MAAM;AACtC,QAAM,YAAY,CAAA;AAClB,aAAW,OAAO,MAAM;AACpB,QAAI,OAAO;AACP,gBAAU,GAAG,IAAI,OAAO,GAAG;AAAA,EAClC;AACD,SAAO;AACX;AAOA,SAAS,qBAAqB,QAAQ;AAClC,SAAO;AAAA,IACH,MAAM,OAAO;AAAA,IACb,UAAU,OAAO;AAAA,IACjB,MAAM,OAAO;AAAA,IACb,MAAM,OAAO,QAAQ,CAAE;AAAA,IACvB,SAAS;AAAA,IACT,aAAa,OAAO;AAAA,IACpB,OAAO,qBAAqB,MAAM;AAAA,IAClC,UAAU,OAAO,YAAY,CAAE;AAAA,IAC/B,WAAW,CAAE;AAAA,IACb,aAAa,oBAAI,IAAK;AAAA,IACtB,cAAc,oBAAI,IAAK;AAAA,IACvB,gBAAgB,CAAE;AAAA,IAClB,YAAY,gBAAgB,SACtB,OAAO,cAAc,OACrB,OAAO,aAAa,EAAE,SAAS,OAAO,UAAW;AAAA,EAC/D;AACA;AAMA,SAAS,qBAAqB,QAAQ;AAClC,QAAM,cAAc,CAAA;AAEpB,QAAM,QAAQ,OAAO,SAAS;AAC9B,MAAI,eAAe,QAAQ;AACvB,gBAAY,UAAU;AAAA,EACzB,OACI;AAGD,eAAW,QAAQ,OAAO;AACtB,kBAAY,IAAI,IAAI,OAAO,UAAU,YAAY,QAAQ,MAAM,IAAI;AAAA,EAC1E;AACD,SAAO;AACX;AAKA,SAAS,cAAc,QAAQ;AAC3B,SAAO,QAAQ;AACX,QAAI,OAAO,OAAO;AACd,aAAO;AACX,aAAS,OAAO;AAAA,EACnB;AACD,SAAO;AACX;AAMA,SAAS,gBAAgB,SAAS;AAC9B,SAAO,QAAQ,OAAO,CAAC,MAAM,WAAW,OAAO,MAAM,OAAO,IAAI,GAAG,CAAE,CAAA;AACzE;AACA,SAAS,aAAa,UAAU,gBAAgB;AAC5C,QAAM,UAAU,CAAA;AAChB,aAAW,OAAO,UAAU;AACxB,YAAQ,GAAG,IAAI,OAAO,iBAAiB,eAAe,GAAG,IAAI,SAAS,GAAG;AAAA,EAC5E;AACD,SAAO;AACX;AA0CA,SAAS,gBAAgB,QAAQ,QAAQ;AACrC,SAAO,OAAO,SAAS,KAAK,WAAS,UAAU,UAAU,gBAAgB,QAAQ,KAAK,CAAC;AAC3F;AAmBA,MAAM,UAAU;AAChB,MAAM,eAAe;AACrB,MAAM,WAAW;AACjB,MAAM,WAAW;AACjB,MAAM,QAAQ;AACd,MAAM,UAAU;AAehB,MAAM,sBAAsB;AAC5B,MAAM,uBAAuB;AAC7B,MAAM,eAAe;AACrB,MAAM,kBAAkB;AACxB,MAAM,oBAAoB;AAC1B,MAAM,cAAc;AACpB,MAAM,qBAAqB;AAC3B,MAAM,eAAe;AASrB,SAAS,aAAa,MAAM;AACxB,SAAO,UAAU,KAAK,IAAI,EACrB,QAAQ,aAAa,GAAG,EACxB,QAAQ,qBAAqB,GAAG,EAChC,QAAQ,sBAAsB,GAAG;AAC1C;AAOA,SAAS,WAAW,MAAM;AACtB,SAAO,aAAa,IAAI,EACnB,QAAQ,mBAAmB,GAAG,EAC9B,QAAQ,oBAAoB,GAAG,EAC/B,QAAQ,cAAc,GAAG;AAClC;AAQA,SAAS,iBAAiB,MAAM;AAC5B,SAAQ,aAAa,IAAI,EAEpB,QAAQ,SAAS,KAAK,EACtB,QAAQ,cAAc,GAAG,EACzB,QAAQ,SAAS,KAAK,EACtB,QAAQ,cAAc,KAAK,EAC3B,QAAQ,iBAAiB,GAAG,EAC5B,QAAQ,mBAAmB,GAAG,EAC9B,QAAQ,oBAAoB,GAAG,EAC/B,QAAQ,cAAc,GAAG;AAClC;AAMA,SAAS,eAAe,MAAM;AAC1B,SAAO,iBAAiB,IAAI,EAAE,QAAQ,UAAU,KAAK;AACzD;AAOA,SAAS,WAAW,MAAM;AACtB,SAAO,aAAa,IAAI,EAAE,QAAQ,SAAS,KAAK,EAAE,QAAQ,OAAO,KAAK;AAC1E;AAUA,SAAS,YAAY,MAAM;AACvB,SAAO,QAAQ,OAAO,KAAK,WAAW,IAAI,EAAE,QAAQ,UAAU,KAAK;AACvE;AAQA,SAAS,OAAO,MAAM;AAClB,MAAI;AACA,WAAO,mBAAmB,KAAK,IAAI;AAAA,EACtC,SACM,KAAP;AAAA,EAEC;AACD,SAAO,KAAK;AAChB;AAWA,SAAS,WAAWI,SAAQ;AACxB,QAAM,QAAQ,CAAA;AAGd,MAAIA,YAAW,MAAMA,YAAW;AAC5B,WAAO;AACX,QAAM,eAAeA,QAAO,CAAC,MAAM;AACnC,QAAM,gBAAgB,eAAeA,QAAO,MAAM,CAAC,IAAIA,SAAQ,MAAM,GAAG;AACxE,WAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,EAAE,GAAG;AAE1C,UAAM,cAAc,aAAa,CAAC,EAAE,QAAQ,SAAS,GAAG;AAExD,UAAM,QAAQ,YAAY,QAAQ,GAAG;AACrC,UAAM,MAAM,OAAO,QAAQ,IAAI,cAAc,YAAY,MAAM,GAAG,KAAK,CAAC;AACxE,UAAM,QAAQ,QAAQ,IAAI,OAAO,OAAO,YAAY,MAAM,QAAQ,CAAC,CAAC;AACpE,QAAI,OAAO,OAAO;AAEd,UAAI,eAAe,MAAM,GAAG;AAC5B,UAAI,CAACN,UAAQ,YAAY,GAAG;AACxB,uBAAe,MAAM,GAAG,IAAI,CAAC,YAAY;AAAA,MAC5C;AACD,mBAAa,KAAK,KAAK;AAAA,IAC1B,OACI;AACD,YAAM,GAAG,IAAI;AAAA,IAChB;AAAA,EACJ;AACD,SAAO;AACX;AAUA,SAAS,eAAe,OAAO;AAC3B,MAAIM,UAAS;AACb,WAAS,OAAO,OAAO;AACnB,UAAM,QAAQ,MAAM,GAAG;AACvB,UAAM,eAAe,GAAG;AACxB,QAAI,SAAS,MAAM;AAEf,UAAI,UAAU,QAAW;AACrB,QAAAA,YAAWA,QAAO,SAAS,MAAM,MAAM;AAAA,MAC1C;AACD;AAAA,IACH;AAED,UAAM,SAASN,UAAQ,KAAK,IACtB,MAAM,IAAI,OAAK,KAAK,iBAAiB,CAAC,CAAC,IACvC,CAAC,SAAS,iBAAiB,KAAK,CAAC;AACvC,WAAO,QAAQ,CAAAY,WAAS;AAGpB,UAAIA,WAAU,QAAW;AAErB,QAAAN,YAAWA,QAAO,SAAS,MAAM,MAAM;AACvC,YAAIM,UAAS;AACT,UAAAN,WAAU,MAAMM;AAAA,MACvB;AAAA,IACb,CAAS;AAAA,EACJ;AACD,SAAON;AACX;AASA,SAAS,eAAe,OAAO;AAC3B,QAAM,kBAAkB,CAAA;AACxB,aAAW,OAAO,OAAO;AACrB,UAAM,QAAQ,MAAM,GAAG;AACvB,QAAI,UAAU,QAAW;AACrB,sBAAgB,GAAG,IAAIN,UAAQ,KAAK,IAC9B,MAAM,IAAI,OAAM,KAAK,OAAO,OAAO,KAAK,CAAE,IAC1C,SAAS,OACL,QACA,KAAK;AAAA,IAClB;AAAA,EACJ;AACD,SAAO;AACX;AASA,MAAM,kBAAkB,OAAkF,EAAE;AAO5G,MAAM,eAAe,OAAuE,EAAE;AAO9F,MAAM,YAAY,OAA4D,EAAE;AAOhF,MAAM,mBAAmB,OAAoE,EAAE;AAO/F,MAAM,wBAAwB,OAA0E,EAAE;AAK1G,SAAS,eAAe;AACpB,MAAI,WAAW,CAAA;AACf,WAAS,IAAI,SAAS;AAClB,aAAS,KAAK,OAAO;AACrB,WAAO,MAAM;AACT,YAAM,IAAI,SAAS,QAAQ,OAAO;AAClC,UAAI,IAAI;AACJ,iBAAS,OAAO,GAAG,CAAC;AAAA,IACpC;AAAA,EACK;AACD,WAAS,QAAQ;AACb,eAAW,CAAA;AAAA,EACd;AACD,SAAO;AAAA,IACH;AAAA,IACA,MAAM,MAAM;AAAA,IACZ;AAAA,EACR;AACA;AAyDA,SAAS,iBAAiB,OAAO,IAAI,MAAM,QAAQ,MAAM;AAErD,QAAM,qBAAqB;AAAA,GAEtB,OAAO,eAAe,IAAI,IAAI,OAAO,eAAe,IAAI,KAAK,CAAA;AAClE,SAAO,MAAM,IAAI,QAAQ,CAAC,SAAS,WAAW;AAC1C,UAAM,OAAO,CAAC,UAAU;AACpB,UAAI,UAAU,OAAO;AACjB,eAAO,kBAAkB,GAAuC;AAAA,UAC5D;AAAA,UACA;AAAA,QACH,CAAA,CAAC;AAAA,MACL,WACQ,iBAAiB,OAAO;AAC7B,eAAO,KAAK;AAAA,MACf,WACQ,gBAAgB,KAAK,GAAG;AAC7B,eAAO,kBAAkB,GAA8C;AAAA,UACnE,MAAM;AAAA,UACN,IAAI;AAAA,QACP,CAAA,CAAC;AAAA,MACL,OACI;AACD,YAAI;AAAA,QAEA,OAAO,eAAe,IAAI,MAAM,sBAChC,OAAO,UAAU,YAAY;AAC7B,6BAAmB,KAAK,KAAK;AAAA,QAChC;AACD;MACH;AAAA,IACb;AAEQ,UAAM,cAAc,MAAM,KAAK,UAAU,OAAO,UAAU,IAAI,GAAG,IAAI,MAAsF,IAAI;AAC/J,QAAI,YAAY,QAAQ,QAAQ,WAAW;AAC3C,QAAI,MAAM,SAAS;AACf,kBAAY,UAAU,KAAK,IAAI;AAsBnC,cAAU,MAAM,SAAO,OAAO,GAAG,CAAC;AAAA,EAC1C,CAAK;AACL;AAYA,SAAS,wBAAwB,SAAS,WAAW,IAAI,MAAM;AAC3D,QAAM,SAAS,CAAA;AACf,aAAW,UAAU,SAAS;AAK1B,eAAW,QAAQ,OAAO,YAAY;AAClC,UAAI,eAAe,OAAO,WAAW,IAAI;AAiCzC,UAAI,cAAc,sBAAsB,CAAC,OAAO,UAAU,IAAI;AAC1D;AACJ,UAAI,iBAAiB,YAAY,GAAG;AAEhC,cAAM,UAAU,aAAa,aAAa;AAC1C,cAAM,QAAQ,QAAQ,SAAS;AAC/B,iBAAS,OAAO,KAAK,iBAAiB,OAAO,IAAI,MAAM,QAAQ,IAAI,CAAC;AAAA,MACvE,OACI;AAED,YAAI,mBAAmB;AAKvB,eAAO,KAAK,MAAM,iBAAiB,KAAK,cAAY;AAChD,cAAI,CAAC;AACD,mBAAO,QAAQ,OAAO,IAAI,MAAM,+BAA+B,aAAa,OAAO,OAAO,CAAC;AAC/F,gBAAM,oBAAoB,WAAW,QAAQ,IACvC,SAAS,UACT;AAGN,iBAAO,WAAW,IAAI,IAAI;AAE1B,gBAAM,UAAU,kBAAkB,aAAa;AAC/C,gBAAM,QAAQ,QAAQ,SAAS;AAC/B,iBAAO,SAAS,iBAAiB,OAAO,IAAI,MAAM,QAAQ,IAAI;QACjE,CAAA,CAAC;AAAA,MACL;AAAA,IACJ;AAAA,EACJ;AACD,SAAO;AACX;AAOA,SAAS,iBAAiB,WAAW;AACjC,SAAQ,OAAO,cAAc,YACzB,iBAAiB,aACjB,WAAW,aACX,eAAe;AACvB;AAgCA,SAAS,QAAQ,OAAO;AACpB,QAAM,SAAS,OAAO,SAAS;AAC/B,QAAM,eAAe,OAAO,gBAAgB;AAC5C,QAAM,QAAQ,SAAS,MAAM,OAAO,QAAQ,MAAM,MAAM,EAAE,CAAC,CAAC;AAC5D,QAAM,oBAAoB,SAAS,MAAM;AACrC,UAAM,EAAE,QAAO,IAAK,MAAM;AAC1B,UAAM,EAAE,OAAQ,IAAG;AACnB,UAAM,eAAe,QAAQ,SAAS,CAAC;AACvC,UAAM,iBAAiB,aAAa;AACpC,QAAI,CAAC,gBAAgB,CAAC,eAAe;AACjC,aAAO;AACX,UAAM,QAAQ,eAAe,UAAU,kBAAkB,KAAK,MAAM,YAAY,CAAC;AACjF,QAAI,QAAQ;AACR,aAAO;AAEX,UAAM,mBAAmB,gBAAgB,QAAQ,SAAS,CAAC,CAAC;AAC5D;AAAA;AAAA,MAEA,SAAS;AAAA;AAAA;AAAA,MAIL,gBAAgB,YAAY,MAAM;AAAA,MAElC,eAAe,eAAe,SAAS,CAAC,EAAE,SAAS,mBACjD,eAAe,UAAU,kBAAkB,KAAK,MAAM,QAAQ,SAAS,CAAC,CAAC,CAAC,IAC1E;AAAA;AAAA,EACd,CAAK;AACD,QAAM,WAAW,SAAS,MAAM,kBAAkB,QAAQ,MACtD,eAAe,aAAa,QAAQ,MAAM,MAAM,MAAM,CAAC;AAC3D,QAAM,gBAAgB,SAAS,MAAM,kBAAkB,QAAQ,MAC3D,kBAAkB,UAAU,aAAa,QAAQ,SAAS,KAC1D,0BAA0B,aAAa,QAAQ,MAAM,MAAM,MAAM,CAAC;AACtE,WAAS,SAAS,IAAI,IAAI;AACtB,QAAI,WAAW,CAAC,GAAG;AACf,aAAO,OAAO,MAAM,MAAM,OAAO,IAAI,YAAY,MAAM;AAAA,QAAE,MAAM,MAAM,EAAE;AAAA;AAAA,MAEnF,EAAc,MAAM,IAAI;AAAA,IACf;AACD,WAAO,QAAQ;EAClB;AAwBD,SAAO;AAAA,IACH;AAAA,IACA,MAAM,SAAS,MAAM,MAAM,MAAM,IAAI;AAAA,IACrC;AAAA,IACA;AAAA,IACA;AAAA,EACR;AACA;AACA,MAAM,iBAA+B,gCAAgB;AAAA,EACjD,MAAM;AAAA,EACN,cAAc,EAAE,MAAM,EAAG;AAAA,EACzB,OAAO;AAAA,IACH,IAAI;AAAA,MACA,MAAM,CAAC,QAAQ,MAAM;AAAA,MACrB,UAAU;AAAA,IACb;AAAA,IACD,SAAS;AAAA,IACT,aAAa;AAAA;AAAA,IAEb,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,kBAAkB;AAAA,MACd,MAAM;AAAA,MACN,SAAS;AAAA,IACZ;AAAA,EACJ;AAAA,EACD;AAAA,EACA,MAAM,OAAO,EAAE,SAAS;AACpB,UAAM,OAAO,SAAS,QAAQ,KAAK,CAAC;AACpC,UAAM,EAAE,QAAO,IAAK,OAAO,SAAS;AACpC,UAAM,UAAU,SAAS,OAAO;AAAA,MAC5B,CAAC,aAAa,MAAM,aAAa,QAAQ,iBAAiB,oBAAoB,CAAC,GAAG,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMvF,CAAC,aAAa,MAAM,kBAAkB,QAAQ,sBAAsB,0BAA0B,CAAC,GAAG,KAAK;AAAA,IAC1G,EAAC;AACF,WAAO,MAAM;AACT,YAAM,WAAW,MAAM,WAAW,MAAM,QAAQ,IAAI;AACpD,aAAO,MAAM,SACP,WACA,EAAE,KAAK;AAAA,QACL,gBAAgB,KAAK,gBACf,MAAM,mBACN;AAAA,QACN,MAAM,KAAK;AAAA;AAAA;AAAA,QAGX,SAAS,KAAK;AAAA,QACd,OAAO,QAAQ;AAAA,MAClB,GAAE,QAAQ;AAAA,IAC3B;AAAA,EACK;AACL,CAAC;AAMD,MAAM,aAAa;AACnB,SAAS,WAAW,GAAG;AAEnB,MAAI,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE;AACxC;AAEJ,MAAI,EAAE;AACF;AAEJ,MAAI,EAAE,WAAW,UAAa,EAAE,WAAW;AACvC;AAGJ,MAAI,EAAE,iBAAiB,EAAE,cAAc,cAAc;AAEjD,UAAM,SAAS,EAAE,cAAc,aAAa,QAAQ;AACpD,QAAI,cAAc,KAAK,MAAM;AACzB;AAAA,EACP;AAED,MAAI,EAAE;AACF,MAAE,eAAc;AACpB,SAAO;AACX;AACA,SAAS,eAAe,OAAO,OAAO;AAClC,aAAW,OAAO,OAAO;AACrB,UAAM,aAAa,MAAM,GAAG;AAC5B,UAAM,aAAa,MAAM,GAAG;AAC5B,QAAI,OAAO,eAAe,UAAU;AAChC,UAAI,eAAe;AACf,eAAO;AAAA,IACd,OACI;AACD,UAAI,CAACA,UAAQ,UAAU,KACnB,WAAW,WAAW,WAAW,UACjC,WAAW,KAAK,CAAC,OAAO,MAAM,UAAU,WAAW,CAAC,CAAC;AACrD,eAAO;AAAA,IACd;AAAA,EACJ;AACD,SAAO;AACX;AAKA,SAAS,gBAAgB,QAAQ;AAC7B,SAAO,SAAU,OAAO,UAAU,OAAO,QAAQ,OAAO,OAAO,OAAQ;AAC3E;AAOA,MAAM,eAAe,CAAC,WAAW,aAAa,iBAAiB,aAAa,OACtE,YACA,eAAe,OACX,cACA;AAEV,MAAM,iBAA+B,gCAAgB;AAAA,EACjD,MAAM;AAAA;AAAA,EAEN,cAAc;AAAA,EACd,OAAO;AAAA,IACH,MAAM;AAAA,MACF,MAAM;AAAA,MACN,SAAS;AAAA,IACZ;AAAA,IACD,OAAO;AAAA,EACV;AAAA;AAAA;AAAA,EAGD,cAAc,EAAE,MAAM,EAAG;AAAA,EACzB,MAAM,OAAO,EAAE,OAAO,MAAK,GAAI;AAE3B,UAAM,gBAAgB,OAAO,qBAAqB;AAClD,UAAM,iBAAiB,SAAS,MAAM,MAAM,SAAS,cAAc,KAAK;AACxE,UAAM,gBAAgB,OAAO,cAAc,CAAC;AAG5C,UAAM,QAAQ,SAAS,MAAM;AACzB,UAAI,eAAe,MAAM,aAAa;AACtC,YAAM,EAAE,QAAO,IAAK,eAAe;AACnC,UAAI;AACJ,cAAQ,eAAe,QAAQ,YAAY,MACvC,CAAC,aAAa,YAAY;AAC1B;AAAA,MACH;AACD,aAAO;AAAA,IACnB,CAAS;AACD,UAAM,kBAAkB,SAAS,MAAM,eAAe,MAAM,QAAQ,MAAM,KAAK,CAAC;AAChF,YAAQ,cAAc,SAAS,MAAM,MAAM,QAAQ,CAAC,CAAC;AACrD,YAAQ,iBAAiB,eAAe;AACxC,YAAQ,uBAAuB,cAAc;AAC7C,UAAM,UAAU;AAGhB,UAAM,MAAM,CAAC,QAAQ,OAAO,gBAAgB,OAAO,MAAM,IAAI,GAAG,CAAC,CAAC,UAAU,IAAI,IAAI,GAAG,CAAC,aAAa,MAAM,OAAO,MAAM;AAEpH,UAAI,IAAI;AAGJ,WAAG,UAAU,IAAI,IAAI;AAOrB,YAAI,QAAQ,SAAS,MAAM,YAAY,aAAa,aAAa;AAC7D,cAAI,CAAC,GAAG,YAAY,MAAM;AACtB,eAAG,cAAc,KAAK;AAAA,UACzB;AACD,cAAI,CAAC,GAAG,aAAa,MAAM;AACvB,eAAG,eAAe,KAAK;AAAA,UAC1B;AAAA,QACJ;AAAA,MACJ;AAED,UAAI,YACA;AAAA;AAAA,OAGC,CAAC,QAAQ,CAAC,kBAAkB,IAAI,IAAI,KAAK,CAAC,cAAc;AACzD,SAAC,GAAG,eAAe,IAAI,KAAK,CAAA,GAAI,QAAQ,cAAY,SAAS,QAAQ,CAAC;AAAA,MACzE;AAAA,IACb,GAAW,EAAE,OAAO,OAAM,CAAE;AACpB,WAAO,MAAM;AACT,YAAM,QAAQ,eAAe;AAG7B,YAAM,cAAc,MAAM;AAC1B,YAAM,eAAe,gBAAgB;AACrC,YAAM,gBAAgB,gBAAgB,aAAa,WAAW,WAAW;AACzE,UAAI,CAAC,eAAe;AAChB,eAAO,cAAc,MAAM,SAAS,EAAE,WAAW,eAAe,MAAK,CAAE;AAAA,MAC1E;AAED,YAAM,mBAAmB,aAAa,MAAM,WAAW;AACvD,YAAM,aAAa,mBACb,qBAAqB,OACjB,MAAM,SACN,OAAO,qBAAqB,aACxB,iBAAiB,KAAK,IACtB,mBACR;AACN,YAAM,mBAAmB,WAAS;AAE9B,YAAI,MAAM,UAAU,aAAa;AAC7B,uBAAa,UAAU,WAAW,IAAI;AAAA,QACzC;AAAA,MACjB;AACY,YAAM,YAAY,EAAE,eAAe,OAAO,CAAE,GAAE,YAAY,OAAO;AAAA,QAC7D;AAAA,QACA,KAAK;AAAA,MACR,CAAA,CAAC;AAmBF;AAAA;AAAA;AAAA,QAGA,cAAc,MAAM,SAAS,EAAE,WAAW,WAAW,OAAO,KACxD;AAAA;AAAA,IAChB;AAAA,EACK;AACL,CAAC;AACD,SAAS,cAAc,MAAM,MAAM;AAC/B,MAAI,CAAC;AACD,WAAO;AACX,QAAM,cAAc,KAAK,IAAI;AAC7B,SAAO,YAAY,WAAW,IAAI,YAAY,CAAC,IAAI;AACvD;AAMA,MAAM,aAAa;AAodnB,SAAS,aAAa,SAAS;AAC3B,QAAM,UAAU,oBAAoB,QAAQ,QAAQ,OAAO;AAC3D,QAAM,eAAe,QAAQ,cAAc;AAC3C,QAAM,mBAAmB,QAAQ,kBAAkB;AACnD,QAAM,gBAAgB,QAAQ;AAI9B,QAAM,eAAe;AACrB,QAAM,sBAAsB;AAC5B,QAAM,cAAc;AACpB,QAAM,eAAe,WAAW,yBAAyB;AACzD,MAAI,kBAAkB;AAEtB,MAAI,aAAa,QAAQ,kBAAkB,uBAAuB,SAAS;AACvE,YAAQ,oBAAoB;AAAA,EAC/B;AACD,QAAM,kBAAkB,cAAc,KAAK,MAAM,gBAAc,KAAK,UAAU;AAC9E,QAAM,eAAe,cAAc,KAAK,MAAM,WAAW;AACzD,QAAM;AAAA;AAAA,IAEN,cAAc,KAAK,MAAM,MAAM;AAAA;AAC/B,WAAS,SAAS,eAAe,OAAO;AACpC,QAAI;AACJ,QAAI;AACJ,QAAI,YAAY,aAAa,GAAG;AAC5B,eAAS,QAAQ,iBAAiB,aAAa;AAC/C,eAAS;AAAA,IACZ,OACI;AACD,eAAS;AAAA,IACZ;AACD,WAAO,QAAQ,SAAS,QAAQ,MAAM;AAAA,EACzC;AACD,WAAS,YAAY,MAAM;AACvB,UAAM,gBAAgB,QAAQ,iBAAiB,IAAI;AACnD,QAAI,eAAe;AACf,cAAQ,YAAY,aAAa;AAAA,IAIpC;AAAA,EACJ;AACD,WAAS,YAAY;AACjB,WAAO,QAAQ,YAAY,IAAI,kBAAgB,aAAa,MAAM;AAAA,EACrE;AACD,WAAS,SAAS,MAAM;AACpB,WAAO,CAAC,CAAC,QAAQ,iBAAiB,IAAI;AAAA,EACzC;AACD,WAAS,QAAQ,aAAa,iBAAiB;AAG3C,sBAAkB,OAAO,CAAE,GAAE,mBAAmB,aAAa,KAAK;AAClE,QAAI,OAAO,gBAAgB,UAAU;AACjC,YAAM,qBAAqB,SAAS,cAAc,aAAa,gBAAgB,IAAI;AACnF,YAAMa,gBAAe,QAAQ,QAAQ,EAAE,MAAM,mBAAmB,QAAQ,eAAe;AACvF,YAAMC,QAAO,cAAc,WAAW,mBAAmB,QAAQ;AASjE,aAAO,OAAO,oBAAoBD,eAAc;AAAA,QAC5C,QAAQ,aAAaA,cAAa,MAAM;AAAA,QACxC,MAAM,OAAO,mBAAmB,IAAI;AAAA,QACpC,gBAAgB;AAAA,QAChB,MAAAC;AAAA,MAChB,CAAa;AAAA,IACJ;AACD,QAAI;AAEJ,QAAI,UAAU,aAAa;AAUvB,wBAAkB,OAAO,CAAE,GAAE,aAAa;AAAA,QACtC,MAAM,SAAS,cAAc,YAAY,MAAM,gBAAgB,IAAI,EAAE;AAAA,MACrF,CAAa;AAAA,IACJ,OACI;AAED,YAAM,eAAe,OAAO,CAAE,GAAE,YAAY,MAAM;AAClD,iBAAW,OAAO,cAAc;AAC5B,YAAI,aAAa,GAAG,KAAK,MAAM;AAC3B,iBAAO,aAAa,GAAG;AAAA,QAC1B;AAAA,MACJ;AAED,wBAAkB,OAAO,CAAE,GAAE,aAAa;AAAA,QACtC,QAAQ,aAAa,YAAY,MAAM;AAAA,MACvD,CAAa;AAGD,sBAAgB,SAAS,aAAa,gBAAgB,MAAM;AAAA,IAC/D;AACD,UAAM,eAAe,QAAQ,QAAQ,iBAAiB,eAAe;AACrE,UAAM,OAAO,YAAY,QAAQ;AAMjC,iBAAa,SAAS,gBAAgB,aAAa,aAAa,MAAM,CAAC;AACvE,UAAM,WAAW,aAAa,kBAAkB,OAAO,CAAA,GAAI,aAAa;AAAA,MACpE,MAAM,WAAW,IAAI;AAAA,MACrB,MAAM,aAAa;AAAA,IACtB,CAAA,CAAC;AACF,UAAM,OAAO,cAAc,WAAW,QAAQ;AAS9C,WAAO,OAAO;AAAA,MACV;AAAA;AAAA;AAAA,MAGA;AAAA,MACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAMA,qBAAqB,iBACf,eAAe,YAAY,KAAK,IAC/B,YAAY,SAAS;;IAC/B,GAAE,cAAc;AAAA,MACb,gBAAgB;AAAA,MAChB;AAAA,IACZ,CAAS;AAAA,EACJ;AACD,WAAS,iBAAiB,IAAI;AAC1B,WAAO,OAAO,OAAO,WACf,SAAS,cAAc,IAAI,aAAa,MAAM,IAAI,IAClD,OAAO,CAAA,GAAI,EAAE;AAAA,EACtB;AACD,WAAS,wBAAwB,IAAI,MAAM;AAIvC,QAAI,gBAAgB,SAAS,GAAG,MAAM;AAElC,aAAO,kBAAkB,GAAyC;AAAA,QAC9D;AAAA,QACA;AAAA,MAChB,CAAa;AAAA,IACJ;AAAA,EACJ;AACD,WAAS,KAAK,IAAI;AACd,WAAO,iBAAiB,EAAE;AAAA,EAC7B;AACD,WAAS,QAAQ,IAAI;AACjB,WAAO,KAAK,OAAO,iBAAiB,EAAE,GAAG,EAAE,SAAS,KAAM,CAAA,CAAC;AAAA,EAC9D;AACD,WAAS,qBAAqB,IAAI;AAC9B,UAAM,cAAc,GAAG,QAAQ,GAAG,QAAQ,SAAS,CAAC;AACpD,QAAI,eAAe,YAAY,UAAU;AACrC,YAAM,EAAE,SAAU,IAAG;AACrB,UAAI,oBAAoB,OAAO,aAAa,aAAa,SAAS,EAAE,IAAI;AACxE,UAAI,OAAO,sBAAsB,UAAU;AACvC,4BACI,kBAAkB,SAAS,GAAG,KAAK,kBAAkB,SAAS,GAAG,IAC1D,oBAAoB,iBAAiB,iBAAiB;AAAA;AAAA,UAErD,EAAE,MAAM;;AAGpB,0BAAkB,SAAS;MAC9B;AAOD,aAAO,OAAO;AAAA,QACV,OAAO,GAAG;AAAA,QACV,MAAM,GAAG;AAAA;AAAA,QAET,QAAQ,UAAU,oBAAoB,CAAE,IAAG,GAAG;AAAA,MACjD,GAAE,iBAAiB;AAAA,IACvB;AAAA,EACJ;AACD,WAAS,iBAAiB,IAAI,gBAAgB;AAC1C,UAAM,iBAAkB,kBAAkB,QAAQ,EAAE;AACpD,UAAM,OAAO,aAAa;AAC1B,UAAM,OAAO,GAAG;AAChB,UAAM,QAAQ,GAAG;AAEjB,UAAMN,WAAU,GAAG,YAAY;AAC/B,UAAM,iBAAiB,qBAAqB,cAAc;AAC1D,QAAI;AACA,aAAO;AAAA,QAAiB,OAAO,iBAAiB,cAAc,GAAG;AAAA,UAC7D,OAAO,OAAO,mBAAmB,WAC3B,OAAO,CAAE,GAAE,MAAM,eAAe,KAAK,IACrC;AAAA,UACN;AAAA,UACA,SAAAA;AAAA,QAChB,CAAa;AAAA;AAAA,QAED,kBAAkB;AAAA,MAAc;AAEpC,UAAM,aAAa;AACnB,eAAW,iBAAiB;AAC5B,QAAI;AACJ,QAAI,CAAC,SAAS,oBAAoB,kBAAkB,MAAM,cAAc,GAAG;AACvE,gBAAU,kBAAkB,IAA2C,EAAE,IAAI,YAAY,KAAI,CAAE;AAE/F;AAAA,QAAa;AAAA,QAAM;AAAA;AAAA;AAAA,QAGnB;AAAA;AAAA;AAAA,QAGA;AAAA,MAAK;AAAA,IACR;AACD,YAAQ,UAAU,QAAQ,QAAQ,OAAO,IAAI,SAAS,YAAY,IAAI,GACjE,MAAM,CAAC,UAAU,oBAAoB,KAAK;AAAA;AAAA,MAEvC;AAAA,QAAoB;AAAA,QAAO;AAAA;AAAA,MAA6C,IAClE,QACA,YAAY,KAAK;AAAA;AAAA;AAAA,MAEvB,aAAa,OAAO,YAAY,IAAI;AAAA,KAAC,EACxC,KAAK,CAACO,aAAY;AACnB,UAAIA,UAAS;AACT,YAAI;AAAA,UAAoBA;AAAA,UAAS;AAAA;AAAA,WAA+C;AAc5E,iBAAO;AAAA;AAAA,YAEP,OAAO;AAAA;AAAA,cAEH,SAAAP;AAAA,YACxB,GAAuB,iBAAiBO,SAAQ,EAAE,GAAG;AAAA,cAC7B,OAAO,OAAOA,SAAQ,OAAO,WACvB,OAAO,CAAA,GAAI,MAAMA,SAAQ,GAAG,KAAK,IACjC;AAAA,cACN;AAAA,YACxB,CAAqB;AAAA;AAAA,YAED,kBAAkB;AAAA,UAAU;AAAA,QAC/B;AAAA,MACJ,OACI;AAED,QAAAA,WAAU,mBAAmB,YAAY,MAAM,MAAMP,UAAS,IAAI;AAAA,MACrE;AACD,uBAAiB,YAAY,MAAMO,QAAO;AAC1C,aAAOA;AAAA,IACnB,CAAS;AAAA,EACJ;AAMD,WAAS,iCAAiC,IAAI,MAAM;AAChD,UAAM,QAAQ,wBAAwB,IAAI,IAAI;AAC9C,WAAO,QAAQ,QAAQ,OAAO,KAAK,IAAI,QAAQ;EAClD;AAED,WAAS,SAAS,IAAI,MAAM;AACxB,QAAI;AACJ,UAAM,CAAC,gBAAgB,iBAAiB,eAAe,IAAI,uBAAuB,IAAI,IAAI;AAE1F,aAAS,wBAAwB,eAAe,QAAS,GAAE,oBAAoB,IAAI,IAAI;AAEvF,eAAW,UAAU,gBAAgB;AACjC,aAAO,YAAY,QAAQ,WAAS;AAChC,eAAO,KAAK,iBAAiB,OAAO,IAAI,IAAI,CAAC;AAAA,MAC7D,CAAa;AAAA,IACJ;AACD,UAAM,0BAA0B,iCAAiC,KAAK,MAAM,IAAI,IAAI;AACpF,WAAO,KAAK,uBAAuB;AAEnC,WAAQ,cAAc,MAAM,EACvB,KAAK,MAAM;AAEZ,eAAS,CAAA;AACT,iBAAW,SAAS,aAAa,QAAQ;AACrC,eAAO,KAAK,iBAAiB,OAAO,IAAI,IAAI,CAAC;AAAA,MAChD;AACD,aAAO,KAAK,uBAAuB;AACnC,aAAO,cAAc,MAAM;AAAA,IACvC,CAAS,EACI,KAAK,MAAM;AAEZ,eAAS,wBAAwB,iBAAiB,qBAAqB,IAAI,IAAI;AAC/E,iBAAW,UAAU,iBAAiB;AAClC,eAAO,aAAa,QAAQ,WAAS;AACjC,iBAAO,KAAK,iBAAiB,OAAO,IAAI,IAAI,CAAC;AAAA,QACjE,CAAiB;AAAA,MACJ;AACD,aAAO,KAAK,uBAAuB;AAEnC,aAAO,cAAc,MAAM;AAAA,IACvC,CAAS,EACI,KAAK,MAAM;AAEZ,eAAS,CAAA;AACT,iBAAW,UAAU,GAAG,SAAS;AAE7B,YAAI,OAAO,eAAe,CAAC,KAAK,QAAQ,SAAS,MAAM,GAAG;AACtD,cAAIf,UAAQ,OAAO,WAAW,GAAG;AAC7B,uBAAW,eAAe,OAAO;AAC7B,qBAAO,KAAK,iBAAiB,aAAa,IAAI,IAAI,CAAC;AAAA,UAC1D,OACI;AACD,mBAAO,KAAK,iBAAiB,OAAO,aAAa,IAAI,IAAI,CAAC;AAAA,UAC7D;AAAA,QACJ;AAAA,MACJ;AACD,aAAO,KAAK,uBAAuB;AAEnC,aAAO,cAAc,MAAM;AAAA,IACvC,CAAS,EACI,KAAK,MAAM;AAGZ,SAAG,QAAQ,QAAQ,YAAW,OAAO,iBAAiB,CAAE,CAAC;AAEzD,eAAS,wBAAwB,iBAAiB,oBAAoB,IAAI,IAAI;AAC9E,aAAO,KAAK,uBAAuB;AAEnC,aAAO,cAAc,MAAM;AAAA,IACvC,CAAS,EACI,KAAK,MAAM;AAEZ,eAAS,CAAA;AACT,iBAAW,SAAS,oBAAoB,QAAQ;AAC5C,eAAO,KAAK,iBAAiB,OAAO,IAAI,IAAI,CAAC;AAAA,MAChD;AACD,aAAO,KAAK,uBAAuB;AACnC,aAAO,cAAc,MAAM;AAAA,IACvC,CAAS,EAEI,MAAM,SAAO;AAAA,MAAoB;AAAA,MAAK;AAAA;AAAA,IAAwC,IAC7E,MACA,QAAQ,OAAO,GAAG,CAAC;AAAA,EAC5B;AACD,WAAS,iBAAiB,IAAI,MAAM,SAAS;AAGzC,eAAW,SAAS,YAAY,KAAM;AAClC,YAAM,IAAI,MAAM,OAAO;AAAA,EAC9B;AAMD,WAAS,mBAAmB,YAAY,MAAM,QAAQQ,UAAS,MAAM;AAEjE,UAAM,QAAQ,wBAAwB,YAAY,IAAI;AACtD,QAAI;AACA,aAAO;AAEX,UAAM,oBAAoB,SAAS;AACnC,UAAM,QAAQ,CAAC,YAAY,CAAA,IAAK,QAAQ;AAGxC,QAAI,QAAQ;AAGR,UAAIA,YAAW;AACX,sBAAc,QAAQ,WAAW,UAAU,OAAO;AAAA,UAC9C,QAAQ,qBAAqB,SAAS,MAAM;AAAA,QAChE,GAAmB,IAAI,CAAC;AAAA;AAER,sBAAc,KAAK,WAAW,UAAU,IAAI;AAAA,IACnD;AAED,iBAAa,QAAQ;AACrB,iBAAa,YAAY,MAAM,QAAQ,iBAAiB;AACxD;EACH;AACD,MAAI;AAEJ,WAAS,iBAAiB;AAEtB,QAAI;AACA;AACJ,4BAAwB,cAAc,OAAO,CAAC,IAAI,OAAO,SAAS;AAC9D,UAAI,CAAC,OAAO;AACR;AAEJ,YAAM,aAAa,QAAQ,EAAE;AAI7B,YAAM,iBAAiB,qBAAqB,UAAU;AACtD,UAAI,gBAAgB;AAChB,yBAAiB,OAAO,gBAAgB,EAAE,SAAS,MAAM,GAAG,UAAU,EAAE,MAAM,IAAI;AAClF;AAAA,MACH;AACD,wBAAkB;AAClB,YAAM,OAAO,aAAa;AAE1B,UAAI,WAAW;AACX,2BAAmB,aAAa,KAAK,UAAU,KAAK,KAAK,GAAG,sBAAqB,CAAE;AAAA,MACtF;AACD,eAAS,YAAY,IAAI,EACpB,MAAM,CAAC,UAAU;AAClB,YAAI;AAAA,UAAoB;AAAA,UAAO,IAAwC;AAAA;AAAA,QAAC,GAAyC;AAC7G,iBAAO;AAAA,QACV;AACD,YAAI;AAAA,UAAoB;AAAA,UAAO;AAAA;AAAA,WAA+C;AAU1E;AAAA,YAAiB,MAAM;AAAA,YAAI;AAAA;AAAA,UAE1B,EACI,KAAK,aAAW;AAIjB,gBAAI;AAAA,cAAoB;AAAA,cAAS,IAC7B;AAAA;AAAA,YAA0C,KAC1C,CAAC,KAAK,SACN,KAAK,SAAS,eAAe,KAAK;AAClC,4BAAc,GAAG,IAAI,KAAK;AAAA,YAC7B;AAAA,UACzB,CAAqB,EACI,MAAM,IAAI;AAEf,iBAAO,QAAQ;QAClB;AAED,YAAI,KAAK,OAAO;AACZ,wBAAc,GAAG,CAAC,KAAK,OAAO,KAAK;AAAA,QACtC;AAED,eAAO,aAAa,OAAO,YAAY,IAAI;AAAA,MAC3D,CAAa,EACI,KAAK,CAAC,YAAY;AACnB,kBACI,WACI;AAAA;AAAA,UAEA;AAAA,UAAY;AAAA,UAAM;AAAA,QAAK;AAE/B,YAAI,SAAS;AACT,cAAI,KAAK;AAAA;AAAA,UAGL,CAAC;AAAA,YAAoB;AAAA,YAAS;AAAA;AAAA,aAA0C;AACxE,0BAAc,GAAG,CAAC,KAAK,OAAO,KAAK;AAAA,UACtC,WACQ,KAAK,SAAS,eAAe,OAClC;AAAA,YAAoB;AAAA,YAAS,IAAwC;AAAA;AAAA,aAA4C;AAGjH,0BAAc,GAAG,IAAI,KAAK;AAAA,UAC7B;AAAA,QACJ;AACD,yBAAiB,YAAY,MAAM,OAAO;AAAA,MAC1D,CAAa,EACI,MAAM,IAAI;AAAA,IAC3B,CAAS;AAAA,EACJ;AAED,MAAI,gBAAgB;AACpB,MAAI,gBAAgB;AACpB,MAAI;AASJ,WAAS,aAAa,OAAO,IAAI,MAAM;AACnC,gBAAY,KAAK;AACjB,UAAM,OAAO,cAAc;AAC3B,QAAI,KAAK,QAAQ;AACb,WAAK,QAAQ,aAAW,QAAQ,OAAO,IAAI,IAAI,CAAC;AAAA,IACnD,OACI;AAID,cAAQ,MAAM,KAAK;AAAA,IACtB;AACD,WAAO,QAAQ,OAAO,KAAK;AAAA,EAC9B;AACD,WAAS,UAAU;AACf,QAAI,SAAS,aAAa,UAAU;AAChC,aAAO,QAAQ;AACnB,WAAO,IAAI,QAAQ,CAACQ,UAAS,WAAW;AACpC,oBAAc,IAAI,CAACA,UAAS,MAAM,CAAC;AAAA,IAC/C,CAAS;AAAA,EACJ;AACD,WAAS,YAAY,KAAK;AACtB,QAAI,CAAC,OAAO;AAER,cAAQ,CAAC;AACT;AACA,oBACK,KAAM,EACN,QAAQ,CAAC,CAACA,UAAS,MAAM,MAAO,MAAM,OAAO,GAAG,IAAIA,SAAS,CAAC;AACnE,oBAAc,MAAK;AAAA,IACtB;AACD,WAAO;AAAA,EACV;AAED,WAAS,aAAa,IAAI,MAAM,QAAQ,mBAAmB;AACvD,UAAM,EAAE,eAAgB,IAAG;AAC3B,QAAI,CAAC,aAAa,CAAC;AACf,aAAO,QAAQ;AACnB,UAAM,iBAAkB,CAAC,UAAU,uBAAuB,aAAa,GAAG,UAAU,CAAC,CAAC,MAChF,qBAAqB,CAAC,WACpB,QAAQ,SACR,QAAQ,MAAM,UAClB;AACJ,WAAO,SAAU,EACZ,KAAK,MAAM,eAAe,IAAI,MAAM,cAAc,CAAC,EACnD,KAAK,cAAY,YAAY,iBAAiB,QAAQ,CAAC,EACvD,MAAM,SAAO,aAAa,KAAK,IAAI,IAAI,CAAC;AAAA,EAChD;AACD,QAAM,KAAK,CAAC,UAAU,cAAc,GAAG,KAAK;AAC5C,MAAI;AACJ,QAAM,gBAAgB,oBAAI;AAC1B,QAAM,SAAS;AAAA,IACX;AAAA,IACA,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAM,MAAM,GAAG,EAAE;AAAA,IACjB,SAAS,MAAM,GAAG,CAAC;AAAA,IACnB,YAAY,aAAa;AAAA,IACzB,eAAe,oBAAoB;AAAA,IACnC,WAAW,YAAY;AAAA,IACvB,SAAS,cAAc;AAAA,IACvB;AAAA,IACA,QAAQ,KAAK;AACT,YAAMC,UAAS;AACf,UAAI,UAAU,cAAc,UAAU;AACtC,UAAI,UAAU,cAAc,UAAU;AACtC,UAAI,OAAO,iBAAiB,UAAUA;AACtC,aAAO,eAAe,IAAI,OAAO,kBAAkB,UAAU;AAAA,QACzD,YAAY;AAAA,QACZ,KAAK,MAAM,MAAM,YAAY;AAAA,MAC7C,CAAa;AAID,UAAI;AAAA;AAAA,MAGA,CAAC,WACD,aAAa,UAAU,2BAA2B;AAElD,kBAAU;AACV,aAAK,cAAc,QAAQ,EAAE,MAAM,SAAO;AAAA,QAG1D,CAAiB;AAAA,MACJ;AACD,YAAM,gBAAgB,CAAA;AACtB,iBAAW,OAAO,2BAA2B;AAEzC,sBAAc,GAAG,IAAI,SAAS,MAAM,aAAa,MAAM,GAAG,CAAC;AAAA,MAC9D;AACD,UAAI,QAAQ,WAAWA,OAAM;AAC7B,UAAI,QAAQ,kBAAkB,SAAS,aAAa,CAAC;AACrD,UAAI,QAAQ,uBAAuB,YAAY;AAC/C,YAAM,aAAa,IAAI;AACvB,oBAAc,IAAI,GAAG;AACrB,UAAI,UAAU,WAAY;AACtB,sBAAc,OAAO,GAAG;AAExB,YAAI,cAAc,OAAO,GAAG;AAExB,4BAAkB;AAClB,mCAAyB,sBAAqB;AAC9C,kCAAwB;AACxB,uBAAa,QAAQ;AACrB,oBAAU;AACV,kBAAQ;AAAA,QACX;AACD;MAChB;AAAA,IAKS;AAAA,EACT;AACI,SAAO;AACX;AACA,SAAS,cAAc,QAAQ;AAC3B,SAAO,OAAO,OAAO,CAAC,SAAS,UAAU,QAAQ,KAAK,MAAM,MAAK,CAAE,GAAG,QAAQ,QAAS,CAAA;AAC3F;AACA,SAAS,uBAAuB,IAAI,MAAM;AACtC,QAAM,iBAAiB,CAAA;AACvB,QAAM,kBAAkB,CAAA;AACxB,QAAM,kBAAkB,CAAA;AACxB,QAAM,MAAM,KAAK,IAAI,KAAK,QAAQ,QAAQ,GAAG,QAAQ,MAAM;AAC3D,WAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAC1B,UAAM,aAAa,KAAK,QAAQ,CAAC;AACjC,QAAI,YAAY;AACZ,UAAI,GAAG,QAAQ,KAAK,YAAU,kBAAkB,QAAQ,UAAU,CAAC;AAC/D,wBAAgB,KAAK,UAAU;AAAA;AAE/B,uBAAe,KAAK,UAAU;AAAA,IACrC;AACD,UAAM,WAAW,GAAG,QAAQ,CAAC;AAC7B,QAAI,UAAU;AAEV,UAAI,CAAC,KAAK,QAAQ,KAAK,YAAU,kBAAkB,QAAQ,QAAQ,CAAC,GAAG;AACnE,wBAAgB,KAAK,QAAQ;AAAA,MAChC;AAAA,IACJ;AAAA,EACJ;AACD,SAAO,CAAC,gBAAgB,iBAAiB,eAAe;AAC5D;AAMA,SAAS,YAAY;AACjB,SAAO,OAAO,SAAS;AAC3B;AAKA,SAAS,WAAW;AAChB,SAAO,OAAO,gBAAgB;AAClC;AC39GK,MAAC,gBAAgB;AAAA,EACpB,MAAM,OAAO,MAAM;AAAA,EACnB,OAAO,OAAO,OAAO;AAAA,EACrB,KAAK,OAAO,KAAK;AAAA,EACjB,QAAQ,OAAO,QAAQ;AAAA,EACvB,UAAU,CAAC,QAAQ;AACjB,YAAQ,KAAG;AAAA,MACT,KAAK,cAAc;AACjB,eAAO,cAAc;AAAA,MACvB,KAAK,cAAc;AACjB,eAAO,cAAc;AAAA,MACvB,KAAK,cAAc;AACjB,eAAO,cAAc;AAAA,MACvB,KAAK,cAAc;AACjB,eAAO,cAAc;AAAA,IACxB;AAAA,EACF;AACH;AAQK,MAAC,WAAW,OAAO,UAAU;AAC7B,MAAC,aAAa,OAAO,YAAY;AACtC,MAAM,eAAe;AACrB,MAAM,gBAAgB;AACtB,MAAM,aAAa;AAAA,EACjB,OAAO,OAAO;AAAA,IACZ,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,cAAc;AAAA,EAClB;AAAA,EACE,OAAO,gBAAgB;AAAA,EACvB,OAAO,cAAc;AAAA,EACrB;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,YAAY,MAAM,OAAO,UAAU,QAAQ,iBAAiB;AAC1D,QAAI,OAAO,SAAS,YAAY,SAAS,GAAG;AAC1C,cAAQ,MAAM,0DAA0D;AACxE,cAAQ;AAAA,IACT;AACD,SAAK,OAAO;AACZ,SAAK,QAAQ;AACb,SAAK,SAAS;AACd,SAAK,WAAW;AAChB,SAAK,kBAAkB;AAAA,EACxB;AACH;AACA,MAAM,uBAAuB,aAAa;AAAA,EACxC,YAAY;AAAA,IACV,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,kBAAkB,aAAa;AAAA,IAC/B,WAAW;AAAA,EACZ,IAAG,IAAI;AACN,UAAM,aAAa,KAAK,YAAY,OAAO,UAAU,QAAQ,eAAe;AAAA,EAC7E;AACH;AACA,MAAM,sBAAsB,aAAa;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,IACV,eAAe;AAAA,IACf,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,SAAS;AAAA,IACT,eAAe;AAAA,IACf,kBAAkB,aAAa,gBAAgB,aAAa;AAAA,EAC7D,IAAG,IAAI;AACN,UAAM,aAAa,KAAK,UAAU,OAAO,UAAU,QAAQ,eAAe;AAC1E,SAAK,eAAe;AACpB,SAAK,aAAa;AAClB,SAAK,eAAe;AAAA,EACrB;AACH;AACA,MAAM,yBAAyB,aAAa;AAAA,EAC1C;AAAA,EACA;AAAA,EACA,YAAY;AAAA,IACV,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,SAAS;AAAA,IACT,eAAe;AAAA,IACf,kBAAkB,aAAa,gBAAgB,aAAa;AAAA,EAC7D,IAAG,IAAI;AACN,UAAM,aAAa,KAAK,cAAc,OAAO,UAAU,QAAQ,eAAe;AAC9E,SAAK,aAAa;AAClB,SAAK,eAAe;AAAA,EACrB;AACH;AACA,MAAM,gBAAgB;AAAA,EACpB,WAAW;AAAA,EACX,aAAa;AAAA,EACb,UAAU,KAAK;AAAA,EACf,kBAAkB,KAAK;AAAA,EACvB,eAAe,KAAK;AACtB;AACA,MAAM,wBAAwB;AAe9B;AACA;AACA;AACA,MAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYV;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY,eAAe,OAAO,YAAY,aAAa;AACzD,SAAK,OAAO,CAAC,EAAE,UAAU,GAAG,QAAQ,aAAa,EAAC,CAAE;AACpD,SAAK,kBAAkB;AACvB,SAAK,mBAAmB;AACxB,QAAI,QAAQ;AACV,WAAK,SAAS,GAAG,eAAe,KAAK;AAAA,EACxC;AAAA,EACD,IAAI,cAAc;AAChB,WAAO,KAAK;AAAA,EACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWD,UAAU,OAAO;AACf,aAAS,IAAI,GAAG,IAAI,KAAK,KAAK,QAAQ,KAAK;AACzC,UAAI,KAAK,KAAK,CAAC,EAAE,SAAS,KAAK,KAAK,CAAC,EAAE,WAAW,KAAK,OAAO;AAC5D,eAAO,KAAK,KAAK,CAAC;AAAA,MACnB;AAAA,IACF;AACD,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYD,YAAY,UAAU,OAAO;AAC3B,QAAI,SAAS;AACX,aAAO,KAAK,KAAK;AACnB,UAAM,UAAU,WAAW,QAAQ;AACnC,QAAI,SAAS;AACb,aAAS,IAAI,GAAG,IAAI,KAAK,KAAK,QAAQ,KAAK;AACzC,UAAI,KAAK,KAAK,CAAC,EAAE,YAAY,YAAY,KAAK,KAAK,CAAC,EAAE,UAAU,SAAS;AACvE,iBAAS;AACT;AAAA,MACD;AAAA,IACF;AACD,QAAI,WAAW,IAAI;AACjB,aAAO;AAAA,IACR;AACD,SAAK,SAAS,QAAQ,UAAU,KAAK;AACrC,WAAO,KAAK,KAAK;AAAA,EAClB;AAAA,EACD,SAAS,QAAQ,eAAe,YAAY;AAC1C,UAAM,UAAU,KAAK,KAAK,OAAO,QAAQ,CAAC,EAAE,CAAC;AAC7C,UAAM,cAAc,gBAAgB,aAAa;AACjD,QAAI,gBAAgB,QAAQ,YAAY,cAAc,QAAQ,QAAQ;AACpE,cAAQ,IAAI,0CAA0C;AAAA,IACvD;AACD,QAAI,gBAAgB,QAAQ,QAAQ;AAClC,WAAK,KAAK,OAAO,QAAQ,GAAG;AAAA,QAC1B,UAAU,cAAc;AAAA,QACxB,QAAQ,QAAQ;AAAA,MACxB,CAAO;AAAA,IACF;AACD,QAAI,kBAAkB,QAAQ,UAAU;AACtC,WAAK,KAAK,OAAO,QAAQ,GAAG;AAAA,QAC1B,UAAU,QAAQ;AAAA,QAClB,QAAQ,gBAAgB;AAAA,MAChC,CAAO;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWD,KAAK,kBAAkB;AACrB,UAAM,WAAW,IAAI,MAAM,GAAG,GAAG,GAAG,CAAC;AACrC,aAAS,OAAO,KAAK,MAAM,KAAK,UAAU,KAAK,IAAI,CAAC;AACpD,aAAS,kBAAkB,KAAK;AAChC,aAAS,mBAAmB;AAC5B,WAAO;AAAA,EACR;AACH;AAEA;AACA;AACA;AACA,MAAM,YAAY,MAAM;AAOxB,MAAM,aAAa,CAAC,QAAQ,QAAQ,QAAQ,OAAO,QAAQ;AAC3D,SAAS,YAAY,MAAM;AACzB,QAAM,QAAQ,QAAQ,KAAK,SAAQ,EAAG,MAAM,oBAAoB;AAChE,SAAO,QAAQ,MAAM,CAAC,IAAI,SAAS,OAAO,SAAS;AACrD;AACA,MAAM,mBAAmB,OAAO,UAAU;AAC1C,MAAM,iBAAiB,CAAC,UAAU,iBAAiB,KAAK,KAAK;AAC7D,MAAM,cAAc,CAAC,UAAU;AAC7B,SAAO,eAAe,KAAK,EAAE,MAAM,GAAG,EAAE;AAC1C;AACA,SAAS,UAAU,KAAK,kBAAkB;AACxC,QAAM,MAAsB,uBAAO,OAAO,IAAI;AAC9C,QAAM,OAAO,IAAI,MAAM,GAAG;AAC1B,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,QAAI,KAAK,CAAC,CAAC,IAAI;AAAA,EAChB;AACD,SAAO,mBAAmB,CAAC,QAAQ,CAAC,CAAC,IAAI,IAAI,YAAa,CAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,GAAG;AAClF;AACA,MAAM,iBAAiC,0BAAU,8CAA8C;AAC/F,SAAS,YAAY,OAAO,MAAM;AAChC,MAAI,OAAO,SAAS,eAAe,SAAS,MAAM;AAChD,WAAO;AAAA,EACR;AACD,QAAM,QAAQ,CAAC,GAAG,MAAM;AACtB,QAAI;AACJ,UAAM,eAAe,YAAY,CAAC;AAClC,QAAI,eAAe,YAAY,GAAG;AAChC,YAAM,KAAK,OAAO;AAClB,cAAQ,OAAO,aAAa;AAC5B,UAAI,CAAC,SAAS,OAAO,UAAU;AAC7B,gBAAQ,aAAa;AAAA,MACtB;AAAA,IACP,WAAe,iBAAiB,UAAU;AACpC,cAAQ,WAAW,CAAC;AAAA,IAC1B,WAAe,iBAAiB,SAAS;AACnC,cAAQ,UAAU,CAAC;AAAA,IACzB,WAAe,iBAAiB,QAAQ;AAClC,cAAQ,MAAM;AAAA,IACpB,OAAW;AACL,cAAQ,aAAa;AAAA,IACtB;AACD,WAAO;AAAA,EACX;AACE,MAAI,YAAY,IAAI,KAAK,SAAS;AAEhC,aAAS,KAAK,MAAM;AAClB,UAAI,MAAM,OAAO,CAAC,GAAG;AACnB,eAAO;AAAA,MACR;AAAA,IACF;AACD,WAAO;AAAA,EACX,OAAS;AACL,WAAO,MAAM,OAAO,IAAI;AAAA,EACzB;AACH;AAEA;AACA;AACA;AACK,MAAC,eAAe;AAAA,EACnB,OAAO;AAAA,EACP,mBAAmB,KAAK;AAAA,EACxB,aAAa,KAAK;AAAA;AAAA,EAElB,aAAa;AAAA,IACX,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,cAAc;AAAA,EACf;AAAA;AAAA,EAED,YAAY;AAAA,IACV,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,sBAAsB;AAAA,EACvB;AACH;AAEA;AACA;AACA;AACA,MAAM,QAAQ;AACd,MAAM,sBAAsB;AAAA,EAC1B,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU,OAAO,aAAa;AAC5B,UAAI,KAAK,MAAM,KAAK,KAAK,OAAO;AAC9B,oBAAY,yDAAyD,OAAO;AAC5E,eAAO;AAAA,MACR;AACD,aAAO;AAAA,IACR;AAAA,EACF;AAAA,EACD,KAAK;AAAA,IACH,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU,OAAO,aAAa;AAC5B,UAAI,KAAK,MAAM,KAAK,KAAK,OAAO;AAC9B,oBAAY,wDAAwD,OAAO;AAC3E,eAAO;AAAA,MACR;AACD,aAAO;AAAA,IACR;AAAA,EACF;AAAA,EACD,OAAO;AAAA,IACL,MAAM;AAAA,IACN,UAAU,OAAO,aAAa;AAC5B,YAAM,KAAK,KAAK,MAAM,KAAK;AAC3B,UAAI,MAAM,OAAO;AACf,oBAAY,0DAA0D,OAAO;AAC7E,eAAO;AAAA,MACR;AACD,UAAI,MAAM,GAAG;AACX,oBAAY,oDAAoD,OAAO;AACvE,eAAO;AAAA,MACR;AACD,aAAO;AAAA,IACR;AAAA,EACF;AAAA,EACD,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,UAAU,OAAO,aAAa;AAC5B,YAAM,KAAK,KAAK,MAAM,KAAK;AAC3B,UAAI,MAAM,OAAO;AACf,oBAAY,2DAA2D,OAAO;AAC9E,eAAO;AAAA,MACR;AACD,UAAI,MAAM,GAAG;AACX,oBAAY,qDAAqD,OAAO;AACxE,eAAO;AAAA,MACR;AACD,aAAO;AAAA,IACR;AAAA,EACF;AAAA,EACD,aAAa;AAAA,IACX,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU,OAAO,aAAa;AAC5B,UAAI,KAAK,MAAM,KAAK,KAAK,OAAO;AAC9B,oBAAY,gEAAgE,OAAO;AACnF,eAAO;AAAA,MACR;AACD,aAAO;AAAA,IACR;AAAA,EACF;AAAA,EACD,cAAc;AAAA,IACZ,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU,OAAO,aAAa;AAC5B,UAAI,KAAK,MAAM,KAAK,KAAK,OAAO;AAC9B,oBAAY,iEAAiE,OAAO;AACpF,eAAO;AAAA,MACR;AACD,aAAO;AAAA,IACR;AAAA,EACF;AAAA,EACD,WAAW;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,gBAAgB;AAAA,IACd,MAAM,CAAC,QAAQ,IAAI;AAAA,IACnB,SAAS;AAAA,IACT,UAAU,OAAO,aAAa;AAC5B,UAAI,OAAO;AACT,YAAI,CAAC,YAAY,MAAM,MAAM,MAAM,GAAG;AACpC,sBAAY,6CAA6C,YAAY,MAAM,IAAI,eAAe,MAAM,MAAM;AAC1G,iBAAO;AAAA,QACR;AACD,YAAI,CAAC,YAAY,MAAM,KAAK,MAAM,GAAG;AACnC,sBAAY,4CAA4C,YAAY,MAAM,GAAG,eAAe,MAAM,KAAK;AACvG,iBAAO;AAAA,QACR;AACD,YAAI,CAAC,YAAY,MAAM,OAAO,MAAM,GAAG;AACrC,sBAAY,8CAA8C,YAAY,MAAM,KAAK,eAAe,MAAM,OAAO;AAC7G,iBAAO;AAAA,QACR;AACD,YAAI,CAAC,YAAY,MAAM,QAAQ,MAAM,GAAG;AACtC,sBAAY,+CAA+C,YAAY,MAAM,MAAM,eAAe,MAAM,QAAQ;AAChH,iBAAO;AAAA,QACR;AAAA,MACF;AACD,aAAO;AAAA,IACR;AAAA,EACF;AAAA,EACD,WAAW;AAAA,IACT,MAAM;AAAA,IACN,SAAS,aAAa,WAAW;AAAA,EAClC;AAAA,EACD,WAAW;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AACH;AACA,MAAM,cAAc;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,gBAAgB;AAAA,EAChB,oBAAoB,CAAA;AAAA,EACpB,YAAY,WAAW,SAAS,UAAU,YAAY,oBAAoB;AACxE,SAAK,SAAS;AACd,SAAK,eAAe;AACpB,SAAK,YAAY;AACjB,SAAK,UAAU;AACf,SAAK,aAAa;AAClB,SAAK,WAAW;AAChB,SAAK,qBAAqB;AAC1B,SAAK,SAAS;EACf;AAAA,EACD,IAAI,OAAO;AACT,WAAO,KAAK,aAAa;AAAA,EAC1B;AAAA,EACD,IAAI,gBAAgB;AAClB,WAAO,KAAK,OAAO;AAAA,EACpB;AAAA,EACD,gBAAgB,MAAM;AACpB,SAAK,aAAa,KAAK,IAAI;AAC3B,SAAK,QAAQ,KAAK,aAAa,SAAS;AACxC,QAAI,KAAK,WAAW;AAClB,WAAK,OAAO,KAAK,KAAK,KAAK;AAC3B,WAAK,KAAK,KAAK,OAAO,SAAS;AAAA,IACrC,OAAW;AACL,WAAK,KAAK;AAAA,IACX;AAAA,EACF;AAAA,EACD,SAAS,OAAO;AACd,UAAM,OAAO,KAAK,aAAa,KAAK;AACpC,QAAI,OAAO,QAAQ,aAAa;AAC9B,cAAQ,IAAI,OAAO,mBAAmB,OAAO,qBAAqB,KAAK,aAAa,MAAM;AAC1F,aAAO;AAAA,IACb,OAAW;AACL,aAAO,KAAK;AAAA,IACb;AAAA,EACF;AAAA,EACD,SAAS,IAAI;AACX,UAAM,QAAQ,KAAK,OAAO,EAAE;AAC5B,QAAI,OAAO,SAAS,aAAa;AAC/B,cAAQ,IAAI,OAAO,gBAAgB,EAAE;AACrC,aAAO;AAAA,IACR;AACD,WAAO;AAAA,EACR;AAAA,EACD,YAAY,IAAI;AACd,WAAO,KAAK,eAAe,KAAK,SAAS,EAAE,CAAC;AAAA,EAC7C;AAAA,EACD,eAAe,OAAO;AACpB,UAAM,OAAO,SAAS,IAAI,KAAK,aAAa,KAAK,IAAI,KAAK,aAAa,KAAK,aAAa,SAAS,KAAK;AACvG,WAAO,OAAO,OAAO;AAAA,EACtB;AAAA,EACD,aAAa,KAAK;AAChB,WAAO,KAAK,OAAO,GAAG;AAAA,EACvB;AAAA,EACD,QAAQ,SAAS;AACf,UAAM,OAAO,KAAK,aAAa,OAAO;AACtC,QAAI,QAAQ,KAAK;AACf,WAAK,OAAO,QAAQ,GAAG,IAAI;AAAA,IAC5B;AACD,WAAO;AAAA,EACR;AAAA,EACD,qBAAqB;AACnB,UAAM,WAAW,KAAK,aAAa,KAAK,aAAa,SAAS,CAAC;AAC/D,QAAI,KAAK,aAAa,UAAU;AAC9B,aAAO;AAAA,QACL,OAAO,KAAK;AAAA,QACZ,QAAQ,SAAS,SAAS,SAAS,MAAM;AAAA,MACjD;AAAA,IACA,OAAW;AACL,aAAO;AAAA,QACL,QAAQ,KAAK;AAAA,QACb,OAAO,SAAS,QAAQ,SAAS,OAAO;AAAA,MAChD;AAAA,IACK;AAAA,EACF;AAAA,EACD,mBAAmB;AACjB,WAAO,KAAK;AAAA,EACb;AAAA,EACD,YAAY,OAAO,KAAK;AACtB,QAAI,OAAO,OAAO,aAAa;AAC7B,YAAM,KAAK,aAAa;AAAA,IACzB;AACD,UAAM,KAAK,IAAI,KAAK,KAAK,aAAa,MAAM;AAC5C,aAAS,IAAI,OAAO,IAAI,KAAK,EAAE,GAAG;AAChC,UAAI,OAAO,KAAK,aAAa,CAAC;AAC9B,WAAK,cAAc;AAAA,QACjB,MAAM,KAAK;AAAA,QACX,KAAK,KAAK;AAAA,QACV,OAAO,KAAK;AAAA,QACZ,QAAQ,KAAK;AAAA,MACrB;AAAA,IACK;AACD,SAAK,kBAAkB,KAAK,CAAC,OAAO,GAAG,CAAC;AAAA,EACzC;AAAA,EACD,mBAAmB;AACjB,aAAS,KAAK,KAAK,mBAAmB;AACpC,eAAS,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG;AAChC,aAAK,aAAa,CAAC,EAAE,cAAc;AAAA,MACpC;AAAA,IACF;AACD,SAAK,oBAAoB;EAC1B;AAAA,EACD,OAAO,gBAAgB,SAAS;AAC9B,UAAM,QAAQ,KAAK,mBAAmB,OAAO;AAC7C,QAAI,CAAC,OAAO;AACV,YAAM,IAAI,MAAM,8BAA8B;AAAA,IAC/C;AACD,WAAO;AAAA,MACL,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,YAAY;AAAA;AAAA,MAEZ,YAAY;AAAA;AAAA,MAEZ,YAAY;AAAA,MACZ,eAAe;AAAA,MACf,OAAO,QAAQ;AAAA,MACf,QAAQ,QAAQ;AAAA,MAChB,MAAM,QAAQ,QAAQ;AAAA,MACtB,KAAK,QAAQ,OAAO;AAAA,MACpB,aAAa,QAAQ,eAAe;AAAA,MACpC,cAAc,QAAQ,gBAAgB;AAAA,MACtC,WAAW,QAAQ,aAAa;AAAA,MAChC,gBAAgB,QAAQ,kBAAkB;AAAA,MAC1C,mBAAmB;AAAA,QACjB,MAAM,CAAE;AAAA,QACR,KAAK,CAAE;AAAA,QACP,OAAO,CAAE;AAAA,QACT,QAAQ,CAAE;AAAA,MACX;AAAA,MACD,sBAAsB;AAAA,QACpB,MAAM,CAAE;AAAA,QACR,KAAK,CAAE;AAAA,QACP,OAAO,CAAE;AAAA,QACT,QAAQ,CAAE;AAAA,MACX;AAAA,MACD,aAAa;AAAA,QACX,MAAM;AAAA,QACN,OAAO;AAAA,QACP,KAAK;AAAA,QACL,QAAQ;AAAA,MACT;AAAA,MACD,aAAa;AAAA,IACnB;AAAA,EACG;AAAA,EACD,OAAO,mBAAmB,KAAK;AAC7B,QAAI,SAAS;AACb,UAAM,WAAW,CAAC,cAAc;AAC9B,cAAQ,MAAM,OAAO,6BAA6B,WAAW,gBAAgB,GAAG;AAAA,IACtF;AACI,aAAS,OAAO,qBAAqB;AACnC,YAAM,aAAa,oBAAoB,GAAG;AAC1C,UAAI,OAAO,IAAI,GAAG,KAAK,aAAa;AAClC,YAAI,OAAO,WAAW,WAAW,aAAa;AAC5C,cAAI,GAAG,IAAI,OAAO,WAAW,WAAW,aAAa,WAAW,QAAO,IAAK,WAAW;AAAA,QACxF;AAAA,MACF;AACD,UAAI,YAAY,IAAI,GAAG,GAAG,WAAW,IAAI,GAAG;AAC1C,YAAI,OAAO,WAAW,aAAa,aAAa;AAC9C,cAAI,CAAC,WAAW,UAAU,IAAI,GAAG,GAAG,QAAQ,GAAG;AAC7C,qBAAS;AACT;AAAA,UACD;AAAA,QACF;AAAA,MACT,OAAa;AACL,iBAAS;AACT,iBAAS,QAAQ,gBAAgB,YAAY,WAAW,IAAI,gBAAgB,YAAY,IAAI,GAAG,CAAC,GAAG;AACnG;AAAA,MACD;AAAA,IACF;AACD,WAAO;AAAA,EACR;AACH;AAEA;AACA;AACA;AACA,MAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASrB,YAAY,OAAO,KAAK;AACtB,SAAK,QAAQ;AACb,SAAK,MAAM;AAAA,EACZ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWD,MAAM,YAAY;AAChB,QAAI,CAAC,KAAK,WAAW,UAAU,GAAG;AAChC,UAAI,KAAK,MAAM,MAAM,WAAW,OAAO;AACrC,aAAK,MAAM,WAAW;AACtB,eAAO;AAAA,MACR;AACD,UAAI,KAAK,UAAU,WAAW,MAAM,GAAG;AACrC,aAAK,QAAQ,WAAW;AACxB,eAAO;AAAA,MACR;AACD,aAAO;AAAA,IACR;AACD,QAAI,KAAK,QAAQ,WAAW;AAC1B,WAAK,QAAQ,WAAW;AAC1B,QAAI,KAAK,MAAM,WAAW;AACxB,WAAK,MAAM,WAAW;AACxB,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWD,WAAW,OAAO;AAChB,QAAI,MAAM,QAAQ,KAAK,OAAO;AAC5B,UAAI,MAAM,MAAM,KAAK;AACnB,eAAO;AACT,aAAO;AAAA,IACR;AACD,QAAI,MAAM,SAAS,KAAK;AACtB,aAAO;AACT,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYD,QAAQ,SAAS;AACf,UAAM,SAAS;AAAA,MACb,SAAS;AAAA,MACT,iBAAiB;AAAA,IACvB;AACI,QAAI,CAAC,KAAK,WAAW,OAAO;AAC1B,aAAO;AACT,QAAI,QAAQ,SAAS,KAAK,OAAO;AAC/B,UAAI,QAAQ,MAAM,KAAK;AACrB,aAAK,QAAQ,QAAQ,MAAM;AAAA;AAE3B,aAAK,MAAK;AAAA,IAClB,OAAW;AACL,UAAI,QAAQ,MAAM,KAAK,KAAK;AAC1B,eAAO,kBAAkB,IAAI;AAAA,UAC3B,QAAQ,MAAM;AAAA,UACd,KAAK;AAAA,QACf;AAAA,MACO;AACD,WAAK,MAAM,QAAQ,QAAQ;AAAA,IAC5B;AACD,WAAO,UAAU;AACjB,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUD,UAAU;AACR,WAAO,KAAK,QAAQ,KAAK;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASD,QAAQ;AACN,SAAK,MAAM,KAAK,QAAQ;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUD,QAAQ;AACN,UAAM,cAAc,IAAI,iBAAiB,KAAK,OAAO,KAAK,GAAG;AAC7D,WAAO;AAAA,EACR;AACH;AACA,MAAM,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWhB,YAAY,OAAO,KAAK;AACtB,SAAK,SAAS;AACd,QAAI,OAAO,UAAU,eAAe,OAAO,QAAQ;AACjD,WAAK,OAAO,KAAK,IAAI,iBAAiB,OAAO,GAAG,CAAC;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUD,MAAM,YAAY;AAChB,QAAI,oBAAoB;AACxB,QAAI,eAAe,KAAK,OAAO;AAC/B,aAAS,IAAI,GAAG,IAAI,KAAK,OAAO,QAAQ,KAAK;AAC3C,UAAI,WAAW,MAAM,IAAI,KAAK,OAAO,CAAC,EAAE,OAAO;AAC7C,uBAAe;AACf;AAAA,MAED;AACD,UAAI,KAAK,OAAO,CAAC,EAAE,MAAM,UAAU,GAAG;AACpC,4BAAoB;AACpB,eAAO,IAAI,IAAI,KAAK,OAAO,UAAU,KAAK,OAAO,CAAC,EAAE,MAAM,KAAK,OAAO,IAAI,CAAC,CAAC,GAAG;AAC7E,eAAK,OAAO,OAAO,IAAI,GAAG,CAAC;AAAA,QAC5B;AACD;AAAA,MACD;AAAA,IACF;AACD,QAAI,CAAC,mBAAmB;AACtB,WAAK,OAAO,OAAO,cAAc,GAAG,UAAU;AAAA,IAC/C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUD,QAAQ,eAAe;AACrB,aAAS,IAAI,GAAG,IAAI,KAAK,OAAO,QAAQ,KAAK;AAC3C,UAAI,cAAc,MAAM,KAAK,OAAO,CAAC,EAAE,OAAO;AAC5C;AAAA,MACD;AACD,YAAM,SAAS,KAAK,OAAO,CAAC,EAAE,QAAQ,aAAa;AACnD,UAAI,KAAK,OAAO,CAAC,EAAE,QAAO,GAAI;AAC5B,aAAK,OAAO,OAAO,GAAG,CAAC;AACvB;AAAA,MACD;AACD,UAAI,OAAO,oBAAoB,MAAM;AACnC,aAAK,OAAO,OAAO,IAAI,GAAG,GAAG,OAAO,eAAe;AACnD;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWD,QAAQ,UAAU,QAAQ;AACxB,QAAI,CAAC,UAAU;AACb,cAAQ,IAAI,8BAA8B;AAC1C;AAAA,IACD;AACD,QAAI,QAAQ;AACV,eAAS,IAAI,KAAK,OAAO,SAAS,GAAG,KAAK,GAAG,KAAK;AAChD,iBAAS,IAAI,KAAK,OAAO,CAAC,EAAE,KAAK,KAAK,KAAK,OAAO,CAAC,EAAE,OAAO,KAAK;AAC/D,mBAAS,CAAC;AAAA,QACX;AAAA,MACF;AAAA,IACP,OAAW;AACL,eAAS,IAAI,GAAG,IAAI,KAAK,OAAO,QAAQ,KAAK;AAC3C,iBAAS,IAAI,KAAK,OAAO,CAAC,EAAE,OAAO,KAAK,KAAK,OAAO,CAAC,EAAE,KAAK,KAAK;AAC/D,mBAAS,CAAC;AAAA,QACX;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWD,WAAW,QAAQ;AACjB,aAAS,SAAS,OAAO,QAAQ;AAC/B,eAAS,WAAW,KAAK,QAAQ;AAC/B,YAAI,QAAQ,WAAW,KAAK,GAAG;AAC7B,iBAAO;AAAA,QACR;AAAA,MACF;AAAA,IACF;AACD,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUD,cAAc,QAAQ;AACpB,aAAS,SAAS,OAAO,QAAQ;AAC/B,WAAK,QAAQ,KAAK;AAAA,IACnB;AAAA,EACF;AAAA,EACD,UAAU;AACR,WAAO,KAAK,OAAO,UAAU;AAAA,EAC9B;AAAA,EACD,QAAQ;AACN,UAAM,YAAY,IAAI,YAAY,GAAG,CAAC;AACtC,cAAU,SAAS,KAAK,OAAO,IAAI,CAAC,UAAU,MAAM,MAAK,CAAE;AAC3D,WAAO;AAAA,EACR;AACH;AAEA;AACA;AACA;AACA,MAAM,QAAQ;AAGd,MAAM,4BAA4B,cAAc;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY,WAAW,SAAS,UAAU,YAAY,oBAAoB;AACxE,UAAM,WAAW,SAAS,UAAU,YAAY,kBAAkB;AAClE,SAAK,cAAc,CAAC,IAAI,MAAM,GAAG,GAAG,KAAK,SAAS,CAAC,CAAC;AACpD,SAAK,aAAa,EAAE,QAAQ,GAAG,QAAQ;AACvC,SAAK,uBAAuB;EAC7B;AAAA,EACD,+BAA+B;AAC7B,SAAK,qBAAoB;AACzB,SAAK,uBAAsB;AAC3B,SAAK,uBAAuB,IAAI;AAChC,UAAM,eAAe,KAAK;AAC1B,aAAS,IAAI,aAAa,SAAS,GAAG,KAAK,GAAG,KAAK;AACjD,YAAM,OAAO,aAAa,CAAC;AAC3B,UAAI,KAAK,WAAW;AAClB,aAAK,uBAAuB,UAAU,IAAI;AAC1C,aAAK,uBAAuB,OAAO,IAAI;AACvC,aAAK,uBAAuB,QAAQ,IAAI;AACxC,aAAK,uBAAuB,SAAS,IAAI;AAAA,MAC1C;AAAA,IACF;AAAA,EACF;AAAA,EACD,uBAAuB;AACrB,UAAM,WAAW,KAAK;AACtB,UAAM,cAAc,EAAE,QAAQ,IAAI,QAAQ;AAC1C,aAAS,IAAI,GAAG,IAAI,KAAK,qBAAqB,QAAQ,KAAK;AACzD,YAAM,YAAY,KAAK,qBAAqB,CAAC;AAC7C,YAAM,eAAe,UAAU;AAC/B,UAAI,KAAK,cAAc,UAAU;AAC/B,YAAI,aAAa,eAAe,MAAM;AACpC,cAAI,aAAa,WAAW,WAAW,SAAS,QAAQ;AACtD,gBAAI,YAAY,WAAW,IAAI;AAC7B,0BAAY,SAAS,aAAa,WAAW;AAAA,YAC9C,WAAU,aAAa,WAAW,WAAW,YAAY,QAAQ;AAChE,0BAAY,SAAS,aAAa,WAAW;AAAA,YAC9C;AAAA,UACF;AAAA,QACF;AAAA,MACT,OAAa;AACL,YAAI,aAAa,cAAc,MAAM;AACnC,cAAI,aAAa,UAAU,WAAW,SAAS,QAAQ;AACrD,gBAAI,YAAY,WAAW,IAAI;AAC7B,0BAAY,SAAS,aAAa,UAAU;AAAA,YAC7C,WAAU,aAAa,UAAU,WAAW,YAAY,QAAQ;AAC/D,0BAAY,SAAS,aAAa,UAAU;AAAA,YAC7C;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACD,SAAK,aAAa;AAAA,EACnB;AAAA,EACD,sBAAsB,KAAK;AACzB,UAAM,eAAe,KAAK;AAC1B,QAAI,QAAQ;AACZ,aAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,YAAM,KAAK,IAAI,CAAC;AAChB,UAAI,aAAa,EAAE,EAAE,WAAW;AAC9B,gBAAQ;AACR;AAAA,MACD;AAAA,IACF;AACD,WAAO;AAAA,EACR;AAAA,EACD,uBAAuB,WAAW,YAAY,mBAAmB;AAC/D,UAAM,eAAe,KAAK;AAC1B,QAAI,UAAU;AACd,UAAM,OAAO,aAAa,UAAU;AACpC,UAAM,UAAU,aAAa,SAAS;AACtC,QAAI;AACJ,QAAI;AACJ,QAAI,sBAAsB,OAAO;AAC/B,kBAAY,KAAK,kBAAkB;AACnC,iBAAW,KAAK,kBAAkB;AAAA,IACxC,OAAW;AACL,kBAAY,KAAK,kBAAkB;AACnC,iBAAW,KAAK,kBAAkB;AAAA,IACnC;AACD,QAAI,SAAS,SAAS,GAAG;AACvB,eAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACxC,cAAM,KAAK,SAAS,CAAC;AACrB,cAAM,YAAY,aAAa,EAAE;AACjC,YAAI,UAAU,cAAc,sBAAsB,SAAS,UAAU,MAAM,UAAU,UAAU,QAAQ,OAAO,sBAAsB,YAAY,UAAU,OAAO,QAAQ,MAAM,QAAQ,SAAS;AAC9L,oBAAU;AACV;AAAA,QACD;AAAA,MACF;AAAA,IACF;AACD,QAAI,YAAY,IAAI;AAClB,UAAI,UAAU,SAAS,GAAG;AACxB,iBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACzC,gBAAM,KAAK,UAAU,CAAC;AACtB,gBAAM,YAAY,aAAa,EAAE;AACjC,cAAI,UAAU,cAAc,sBAAsB,SAAS,UAAU,MAAM,UAAU,UAAU,QAAQ,OAAO,sBAAsB,YAAY,UAAU,OAAO,QAAQ,MAAM,QAAQ,SAAS;AAC9L,sBAAU;AACV;AAAA,UACD;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACD,WAAO;AAAA,EACR;AAAA,EACD,uBAAuB,WAAW,MAAM;AACtC,QAAI,KAAK,kBAAkB,SAAS,EAAE,SAAS,KAAK,CAAC,KAAK,sBAAsB,KAAK,kBAAkB,SAAS,CAAC,GAAG;AAClH,YAAM,aAAa,KAAK,kBAAkB,SAAS,EAAE,KAAK,kBAAkB,SAAS,EAAE,SAAS,CAAC;AACjG,YAAM,MAAM,KAAK,uBAAuB,KAAK,IAAI,YAAY,SAAS;AACtE,UAAI,QAAQ,IAAI;AACd,aAAK,kBAAkB,SAAS,IAAI;AACpC,aAAK,kBAAkB,SAAS,EAAE,KAAK,GAAG;AAAA,MAC3C;AAAA,IACF;AAAA,EACF;AAAA,EACD,aAAa,SAAS;AACpB,UAAM,eAAe,cAAc,gBAAgB,OAAO;AAC1D,UAAM,aAAa,KAAK;AACxB,UAAM,YAAY,aAAa;AAC/B,UAAM,aAAa,aAAa;AAChC,QAAI;AACJ,QAAI;AACJ,QAAI;AACJ,QAAI;AACJ,QAAI,aAAa;AACjB,QAAI,gBAAgB;AACpB,QAAI,eAAe;AACnB,QAAI,kBAAkB;AACtB,QAAI,gBAAgB;AACpB,QAAI,mBAAmB;AACvB,QAAI,KAAK,eAAe,YAAY;AAClC,UAAI,KAAK,cAAc,UAAU;AAC/B,uBAAe;AACf,0BAAkB;AAClB,wBAAgB,aAAa;AAC7B,2BAAmB,aAAa;AAAA,MACxC,OAAa;AACL,uBAAe;AACf,0BAAkB;AAClB,wBAAgB,aAAa;AAC7B,2BAAmB,aAAa;AAAA,MACjC;AACD,UAAI,WAAW;AACf,UAAI,UAAU;AACd,aAAO,WAAW,SAAS,GAAG;AAC5B,cAAM,gBAAgB,WAAW,WAAW,SAAS,CAAC;AACtD,kBAAU,cAAc,UAAU,eAAe,aAAa;AAC9D,YAAI,YAAY,MAAM;AACpB,qBAAW;AACX;AAAA,QACD;AACD,mBAAW,IAAG;AAAA,MACf;AACD,UAAI,YAAY,QAAQ,YAAY,MAAM;AACxC,qBAAa,QAAQ;AACrB,wBAAgB,SAAS;AAAA,MACjC,OAAa;AACL,cAAM,IAAI;AAAA,UACR,GAAG,mBAAmB,aAAa,8CAA8C,KAAK;AAAA,QAChG;AAAA,MACO;AACD,UAAI,KAAK,cAAc,UAAU;AAC/B,eAAO;AACP,eAAO;AACP,iBAAS;AACT,iBAAS;AAAA,MACjB,OAAa;AACL,eAAO;AACP,eAAO;AACP,iBAAS;AACT,iBAAS;AAAA,MACV;AAAA,IACP,OAAW;AACL,aAAO,aAAa;AACpB,aAAO,aAAa;AACpB,eAAS;AACT,eAAS;AAAA,IACV;AACD,iBAAa,OAAO;AACpB,iBAAa,MAAM;AACnB,iBAAa,aAAa,KAAK,MAAM,OAAO,SAAS,CAAC,IAAI;AAC1D,iBAAa,aAAa,KAAK,MAAM,OAAO,SAAS,CAAC,IAAI;AAC1D,QAAI,gBAAgB;AACpB,QAAI,mBAAmB;AACvB,QAAI,KAAK,aAAa,SAAS,GAAG;AAChC,YAAM,WAAW,KAAK,aAAa,KAAK,aAAa,SAAS,CAAC;AAC/D,sBAAgB,SAAS;AACzB,yBAAmB,SAAS;AAC5B,UAAI,cAAc;AAClB,UAAI,UAAU;AACd,UAAI,KAAK,cAAc,UAAU;AAC/B,sBAAc;AACd,kBAAU;AAAA,MACX;AACD,YAAM,eAAe,KAAK,aAAa,gBAAgB,EAAE,WAAW;AACpE,UAAI,aAAa,WAAW,IAAI,aAAa,OAAO,IAAI,eAAe,KAAK,UAAU;AACpF;AACA,2BAAmB,KAAK,aAAa;AAAA,MACtC;AAAA,IACF;AACD,iBAAa,aAAa;AAC1B,iBAAa,gBAAgB;AAC7B,SAAK,gBAAgB,YAAY;AACjC,QAAI,KAAK,gBAAgB,GAAG;AAC1B,WAAK,gBAAgB,aAAa;AAAA,IACxC,OAAW;AACL,UAAI,KAAK;AACT,UAAI,KAAK,cAAc,UAAU;AAC/B,cAAM,aAAa,SAAS,aAAa;AACzC,cAAM,KAAK,aAAa,KAAK,aAAa,EAAE,SAAS,KAAK,aAAa,KAAK,aAAa,EAAE;AAAA,MACnG,OAAa;AACL,cAAM,aAAa,QAAQ,aAAa;AACxC,cAAM,KAAK,aAAa,KAAK,aAAa,EAAE,QAAQ,KAAK,aAAa,KAAK,aAAa,EAAE;AAAA,MAC3F;AACD,UAAI,OAAO,KAAK;AACd,aAAK,gBAAgB,aAAa;AAAA,MACnC;AAAA,IACF;AACD,SAAK;AAAA,MACH,KAAK,aAAa,SAAS;AAAA,MAC3B,aAAa;AAAA,MACb,aAAa;AAAA,MACb,aAAa,QAAQ,aAAa;AAAA,MAClC,aAAa,SAAS,aAAa;AAAA,IACzC;AACI,UAAM,mBAAmB,gBAAgB,kBAAkB,mBAAmB;AAC9E,QAAI,WAAW,CAAC,EAAE,eAAe,kBAAkB;AACjD,iBAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA,IAAI,MAAM,GAAG,GAAG,KAAK,SAAS,mBAAmB,CAAC;AAAA,MAC1D;AAAA,IACK;AACD,QAAI,kBAAkB;AACtB,QAAI,yBAAyB;AAC7B,QAAI,uBAAuB;AAC3B,aAAS,WAAW,WAAW,SAAS,GAAG,YAAY,GAAG,YAAY;AACpE,UAAI,WAAW,QAAQ,EAAE,eAAe,kBAAkB;AACxD,YAAI,WAAW,QAAQ,EAAE,gBAAgB;AACvC,4BAAkB;AACpB,cAAM,WAAW,WAAW,QAAQ,EAAE;AAAA,UACpC;AAAA,UACA,eAAe;AAAA,QACzB;AACQ,YAAI,aAAa,GAAG;AAClB,qBAAW,OAAO,UAAU,CAAC;AAAA,QAC9B;AAAA,MACT,OAAa;AACL,YAAI,WAAW,QAAQ,EAAE,gBAAgB,mBAAmB;AAC1D,mCAAyB;AAC3B,+BAAuB;AACvB;AAAA,MACD;AAAA,IACF;AACD,UAAM,mBAAmB;AACzB,QAAI,CAAC,iBAAiB;AACpB,UAAI,uBAAuB,KAAK,WAAW,SAAS,GAAG;AACrD,cAAM,QAAQ,WAAW,uBAAuB,CAAC,EAAE,KAAK,gBAAgB;AACxE,mBAAW,OAAO,uBAAuB,GAAG,GAAG,KAAK;AAAA,MACrD;AAAA,IACF;AACD,QAAI,CAAC,wBAAwB;AAC3B,UAAI,uBAAuB,GAAG;AAC5B,cAAM,QAAQ,WAAW,oBAAoB,EAAE;AAAA,UAC7C,mBAAmB;AAAA,QAC7B;AACQ,mBAAW,OAAO,uBAAuB,GAAG,GAAG,KAAK;AAAA,MACrD;AAAA,IACF;AACD,WAAO;AAAA,EACR;AAAA;AAAA,EAED,YAAY,QAAQ,SAAS,SAAS,UAAU;AAC9C,QAAI,YAAY,KAAK,YAAY;AAC/B,cAAQ,IAAI,4BAA4B;AAC1C,QAAI,YAAY,KAAK,YAAY,GAAG;AAClC,cAAQ;AAAA,QACN;AAAA,MACR;AAAA,IACK;AACD,UAAM,YAAY,KAAK,SAAS,MAAM;AACtC,QAAI,YAAY,GAAG;AACjB,cAAQ,IAAI,iCAAiC;AAC7C,aAAO;AAAA,IACR;AACD,UAAM,SAAS,YAAY,IAAI,UAAU;AACzC,QAAI,mBAAmB,KAAK;AAAA,MAC1B;AAAA,MACA;AAAA,MACA,YAAY;AAAA,MACZ,KAAK;AAAA,IACX;AACI,UAAM,aAAa,KAAK,cAAc;AACtC,QAAI,qBAAqB,MAAM;AAC7B,UAAI,cAAc,WAAW,cAAc,YAAY,WAAW,GAAG;AACnE,2BAAmB,KAAK;AAAA,UACtB;AAAA,UACA;AAAA,UACA;AAAA,QACV;AAAA,MACA,WAAiB,CAAC,cAAc,WAAW,cAAc,eAAe,WAAW,GAAG;AAC9E,2BAAmB,KAAK;AAAA,UACtB;AAAA,UACA;AAAA,UACA;AAAA,QACV;AAAA,MACO;AAAA,IACF;AACD,QAAI,qBAAqB,MAAM;AAC7B,UAAI,WAAW,KAAK,WAAW,cAAc,eAAe;AAC1D,2BAAmB,KAAK,iBAAiB,WAAW,SAAS,IAAI;AAAA,MAClE,WAAU,WAAW,KAAK,WAAW,cAAc,kBAAkB;AACpE,2BAAmB,KAAK,iBAAiB,WAAW,SAAS,KAAK;AAAA,MACnE;AAAA,IACF;AACD,WAAO;AAAA,EACR;AAAA,EACD,iBAAiB,OAAO,QAAQ,UAAU,YAAY,cAAc,IAAI;AACtE,UAAM,eAAe,KAAK;AAC1B,UAAM,WAAW,aAAa,KAAK;AACnC,QAAI,cAAc,GAAG;AACnB,UAAI,SAAS,gBAAgB;AAC3B,YAAI,UAAU;AACZ,cAAI,SAAS,GAAG;AACd,gBAAI,SAAS,eAAe,QAAQ;AAClC,4BAAc,SAAS,OAAO,SAAS,eAAe,UAAU,SAAS,QAAQ,SAAS;AAAA,YAC3F;AAAA,UACb,OAAiB;AACL,gBAAI,SAAS,eAAe,KAAK;AAC/B,4BAAc,SAAS,OAAO,SAAS,eAAe,OAAO,SAAS,QAAQ,SAAS;AAAA,YACxF;AAAA,UACF;AAAA,QACX,OAAe;AACL,cAAI,SAAS,GAAG;AACd,gBAAI,SAAS,eAAe,OAAO;AACjC,4BAAc,SAAS,MAAM,SAAS,eAAe,SAAS,SAAS,SAAS,SAAS;AAAA,YAC1F;AAAA,UACb,OAAiB;AACL,gBAAI,SAAS,eAAe,MAAM;AAChC,4BAAc,SAAS,MAAM,SAAS,eAAe,QAAQ,SAAS,SAAS,SAAS;AAAA,YACzF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AACD,UAAI,cAAc,GAAG;AACnB,sBAAc,WAAW,SAAS,aAAa,SAAS;AAAA,MACzD;AAAA,IACP,OAAW;AACL,UAAI,UAAU;AACZ,sBAAc,KAAK,IAAI,KAAK,IAAI,aAAa,SAAS,OAAO,SAAS,QAAQ,CAAC,GAAG,SAAS,IAAI;AAAA,MACvG,OAAa;AACL,sBAAc,KAAK,IAAI,KAAK,IAAI,aAAa,SAAS,MAAM,SAAS,SAAS,CAAC,GAAG,SAAS,GAAG;AAAA,MAC/F;AAAA,IACF;AACD,UAAM,SAAS,WAAW,SAAS;AACnC,UAAM,UAAU,WAAW,UAAU;AACrC,QAAI,YAAY,WAAW,QAAQ;AACnC,QAAI,uBAAuB,WAAW,WAAW;AACjD,QAAI,SAAS,GAAG;AACd,6BAAuB,WAAW,QAAQ;AAC1C,kBAAY,WAAW,WAAW;AAAA,IACnC;AACD,UAAM,4BAA4B,WAAW,WAAW;AACxD,UAAM,yBAAyB,WAAW,aAAa;AACvD,QAAI,gBAAgB,aAAa,SAAS;AAC1C,UAAM,aAAa,KAAK;AACxB,aAAS,IAAI,aAAa,SAAS,GAAG,KAAK,GAAG,KAAK;AACjD,YAAM,WAAW,aAAa,CAAC;AAC/B,UAAI,SAAS,WAAW;AACtB,wBAAgB;AAChB;AAAA,MACD;AAAA,IACF;AACD,QAAI,QAAQ;AACZ,QAAI,YAAY;AAChB,QAAI,mBAAmB;AACvB,QAAI,cAAc,CAAC,SAAS,gBAAgB;AAC1C,yBAAmB,aAAa,KAAK,EAAE,YAAY,SAAS;AAAA,IAC7D;AACD,QAAI,mBAAmB,GAAG;AACxB,UAAI,eAAe,aAAa,KAAK,EAAE,kBAAkB,SAAS;AAClE,UAAI,aAAa,KAAK,EAAE,qBAAqB,SAAS,EAAE,SAAS,GAAG;AAClE,uBAAe,aAAa;AAAA,UAC1B,aAAa,KAAK,EAAE,qBAAqB,SAAS;AAAA,QAC5D;AAAA,MACO;AACD,UAAI,aAAa,WAAW,GAAG;AAC7B,oBAAY,aAAa,CAAC;AAC1B,YAAI,kBAAkB,SAAS,cAAc,6BAA6B,eAAe,wBAAwB;AAC/G,uBAAa,KAAK,EAAE,YAAY,SAAS,IAAI;AAC7C,uBAAa,SAAS,EAAE,YAAY,oBAAoB,IAAI;AAAA,QAC7D;AACD,gBAAQ;AAAA,MAChB,OAAa;AACL,iBAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AAC5C,sBAAY,aAAa,CAAC;AAC1B,gBAAM,eAAe,aAAa,SAAS;AAC3C,cAAI,eAAe,aAAa,MAAM,IAAI,aAAa,OAAO,IAAI,KAAK,eAAe,aAAa,MAAM,GAAG;AAC1G,gBAAI,kBAAkB,SAAS,cAAc,6BAA6B,eAAe,wBAAwB;AAC/G,2BAAa,KAAK,EAAE,YAAY,SAAS,IAAI;AAC7C,2BAAa,SAAS,EAAE,YAAY,oBAAoB,IAAI;AAAA,YAC7D;AACD,oBAAQ;AACR;AAAA,UACD;AAAA,QACF;AACD,YAAI,CAAC,SAAS,CAAC,aAAa,SAAS,EAAE,WAAW;AAChD,mBAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AAC5C,kBAAM,gBAAgB,aAAa,CAAC;AACpC,kBAAM,eAAe,aAAa,aAAa;AAC/C,gBAAI,aAAa,WAAW;AAC1B,kBAAI,kBAAkB,SAAS,cAAc,6BAA6B,eAAe,wBAAwB;AAC/G,6BAAa,KAAK,EAAE,YAAY,SAAS,IAAI;AAC7C,6BAAa,SAAS,EAAE,YAAY,oBAAoB,IAAI;AAAA,cAC7D;AACD,0BAAY;AACZ,sBAAQ;AACR;AAAA,YACD;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACP,OAAW;AACL,kBAAY;AACZ,UAAI,kBAAkB,SAAS,cAAc,6BAA6B,eAAe,wBAAwB;AAC/G,qBAAa,SAAS,EAAE,YAAY,oBAAoB,IAAI;AAAA,MAC7D;AACD,cAAQ;AAAA,IACT;AACD,QAAI,OAAO;AACT,UAAI,CAAC,aAAa,SAAS,EAAE,WAAW;AACtC,eAAO,KAAK,iBAAiB,WAAW,QAAQ,UAAU,OAAO,WAAW;AAAA,MAC7E;AACD,aAAO,aAAa,SAAS;AAAA,IAC9B;AACD,WAAO;AAAA,EACR;AAAA,EACD,iBAAiB,OAAO,OAAO;AAC7B,WAAO,KAAK,IAAI,MAAM,aAAa,MAAM,YAAY,CAAC,IAAI,KAAK,IAAI,MAAM,aAAa,MAAM,YAAY,CAAC;AAAA,EAC1G;AAAA,EACD,kBAAkB,OAAO,WAAW;AAClC,UAAM,OAAO,KAAK,aAAa,KAAK;AACpC,WAAO,KAAK,kBAAkB,SAAS,EAAE;AAAA,MACvC,KAAK,qBAAqB,SAAS;AAAA,IACzC;AAAA,EACG;AAAA,EACD,gBAAgB,iBAAiB,eAAe;AAC9C,QAAI,eAAe,IAAI,cAAc,OAAO;AAC5C,QAAI,aAAa,KAAK,aAAa,eAAe;AAClD,aAAS,KAAK,eAAe;AAC3B,YAAM,IAAI,KAAK,iBAAiB,KAAK,aAAa,CAAC,GAAG,UAAU;AAChE,UAAI,IAAI,aAAa;AACnB,uBAAe;AACf,sBAAc;AAAA,MACf;AAAA,IACF;AACD,WAAO;AAAA,EACR;AAAA,EACD,iBAAiB,OAAO,QAAQ,YAAY;AAC1C,UAAM,eAAe,KAAK;AAC1B,UAAM,WAAW,aAAa,KAAK;AACnC,QAAI,kBAAkB,aAAa,UAAU;AAC7C,QAAI,iBAAiB,aAAa,QAAQ;AAC1C,QAAI,SAAS,GAAG;AACd,wBAAkB,aAAa,SAAS;AACxC,uBAAiB,aAAa,WAAW;AAAA,IAC1C;AACD,QAAI,cAAc;AAClB,QAAI,kBAAkB;AACtB,QAAI,aAAa;AACjB,QAAI,eAAe,CAAA;AACnB,mBAAe,KAAK,kBAAkB,OAAO,eAAe;AAC5D,WAAO,aAAa,KAAK,aAAa,SAAS,GAAG;AAChD,eAAS,KAAK,cAAc;AAC1B,YAAI,KAAK,kBAAkB,GAAG,cAAc,EAAE,SAAS,GAAG;AACxD,uBAAa;AACb;AAAA,QACV,OAAe;AACL,yBAAe,KAAK,kBAAkB,GAAG,eAAe;AAAA,QACzD;AAAA,MACF;AAAA,IACF;AACD,QAAI,cAAc,GAAG;AACnB,qBAAe,KAAK,kBAAkB,YAAY,cAAc;AAChE,UAAI,eAAe,IAAI,cAAc,OAAO;AAC5C,eAAS,KAAK,cAAc;AAC1B,cAAM,IAAI,KAAK,iBAAiB,aAAa,CAAC,GAAG,QAAQ;AACzD,YAAI,IAAI,aAAa;AACnB,yBAAe;AACf,wBAAc;AAAA,QACf;AAAA,MACF;AACD,qBAAe,KAAK,kBAAkB,cAAc,eAAe;AACnE,aAAO,aAAa,SAAS,GAAG;AAC9B,sBAAc,KAAK,gBAAgB,cAAc,YAAY;AAC7D,YAAI,aAAa,WAAW,EAAE,WAAW;AACvC,4BAAkB;AAAA,QACnB;AACD,uBAAe,KAAK,kBAAkB,aAAa,eAAe;AAAA,MACnE;AACD,UAAI,mBAAmB,GAAG;AACxB,eAAO,aAAa,eAAe;AAAA,MAC3C,WAAiB,eAAe,GAAG;AAC3B,eAAO,KAAK,iBAAiB,aAAa,QAAQ,UAAU;AAAA,MAC7D;AAAA,IACF;AACD,WAAO;AAAA,EACR;AAAA;AAAA,EAED,iBAAiB,OAAO,QAAQ,YAAY;AAC1C,UAAM,eAAe,KAAK;AAC1B,QAAI,kBAAkB,aAAa,UAAU;AAC7C,QAAI,iBAAiB,aAAa,QAAQ;AAC1C,QAAI,SAAS,GAAG;AACd,wBAAkB,aAAa,SAAS;AACxC,uBAAiB,aAAa,WAAW;AAAA,IAC1C;AAED,QAAI,eAAe,CAAA;AACnB,mBAAe,KAAK,kBAAkB,OAAO,eAAe;AAC5D,WAAyB,aAAa,SAAS,GAAG;AAChD,eAAS,KAAK,cAAc;AAC1B,cAAM,IAAI,KAAK,kBAAkB,GAAG,cAAc;AAClD,YAAI,EAAE,SAAS,GAAG;AAChB,iBAAO,aAAa,KAAK,gBAAgB,OAAO,CAAC,CAAC;AAAA,QAC5D,OAAe;AACL,yBAAe,KAAK,kBAAkB,GAAG,eAAe;AAAA,QACzD;AAAA,MACF;AAAA,IACF;AACD,WAAO;AAAA,EACR;AAAA,EACD,eAAe,OAAO,SAAS;AAC7B,YAAQ,MAAM,OAAO,kCAAkC;AAAA,EACxD;AAAA,EACD,OAAO,WAAW,IAAI,IAAI,IAAI,IAAI;AAChC,WAAO,MAAM,MAAM,MAAM;AAAA,EAC1B;AAAA,EACD,OAAO,YAAY;AAAA;AAAA,EAEnB,mBAAmB,cAAc,YAAY,QAAQ;AACnD,QAAI,eAAe,cAAc,KAAK,aAAa,UAAU,GAAG;AAC9D,aAAO,CAAC,IAAI,EAAE;AAAA,IACf;AACD,mBAAe,KAAK,MAAM,YAAY;AACtC,iBAAa,KAAK,MAAM,UAAU;AAClC,QAAI,oBAAoB,KAAK,SAAS,MAAM;AAC5C,QAAI,oBAAoB;AACtB,0BAAoB;AACtB,UAAM,WAAW,KAAK,cAAc;AACpC,UAAM,UAAU,WAAW,WAAW;AACtC,UAAM,SAAS,WAAW,QAAQ;AAClC,UAAM,UAAU,CAAC,GAAG,MAAM;AACxB,aAAO,oBAAoB,WAAW,cAAc,YAAY,GAAG,CAAC;AAAA,IAC1E;AACI,QAAI,WAAW,KAAK,aAAa,iBAAiB;AAClD,QAAI,aAAa,GAAG,WAAW,KAAK,aAAa,SAAS;AAC1D,WAAO,YAAY,CAAC,QAAQ,SAAS,MAAM,GAAG,SAAS,MAAM,IAAI,SAAS,OAAO,CAAC,GAAG;AACnF,UAAI,SAAS,MAAM,IAAI,cAAc;AACnC,qBAAa,SAAS;AAAA,MAC9B,OAAa;AACL,mBAAW,SAAS;AAAA,MACrB;AACD,UAAI,KAAK,IAAI,aAAa,QAAQ,KAAK,GAAG;AACxC,cAAM,WAAW,KAAK,aAAa,KAAK,iBAAkB,CAAA;AAC1D,YAAI,WAAW;AACf,YAAI,UAAU;AACZ,qBAAW;AAAA,YACT,MAAM,SAAS;AAAA,YACf,KAAK,SAAS;AAAA,YACd,OAAO,SAAS;AAAA,YAChB,QAAQ,SAAS;AAAA,UAC7B;AAAA,QACS;AACD,gBAAQ,IAAI,0CAA0C,cAAc,YAAY,QAAQ;AACxF,eAAO,CAAC,IAAI,EAAE;AAAA,MACtB,OAAa;AACL,mBAAW,KAAK,aAAa,KAAK,OAAO,aAAa,YAAY,CAAC,CAAC;AAAA,MACrE;AAAA,IACF;AACD,wBAAoB,YAAY;AAChC,QAAI,cAA8B,oBAAI;AACtC,gBAAY,IAAI,SAAS,KAAK;AAC9B,UAAM,QAAQ,CAAC,QAAQ,OAAO,UAAU,OAAO;AAC/C,UAAM,qBAAqB,CAAC,eAAe;AACzC,eAAS,OAAO,OAAO;AACrB,YAAI,IAAI,KAAK,kBAAkB,WAAW,OAAO,GAAG;AACpD,YAAI,KAAK,EAAE,SAAS,GAAG;AACrB,mBAAS,KAAK,GAAG;AACf,gBAAI,OAAO,KAAK,aAAa,CAAC;AAC9B,gBAAI,QAAQ,KAAK,MAAM,GAAG,KAAK,MAAM,IAAI,KAAK,OAAO,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,GAAG;AAC9E,0BAAY,IAAI,CAAC;AACjB,iCAAmB,IAAI;AAAA,YACxB;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACP;AACI,uBAAmB,QAAQ;AAC3B,WAAO;AAAA,MACL,KAAK,IAAI,GAAG,WAAW;AAAA,MACvB,KAAK,IAAI,GAAG,WAAW;AAAA,IAC7B;AAAA,EACG;AAAA;AAAA,EAED,0BAA0B,OAAO,MAAM,MAAM,OAAO,QAAQ;AAC1D,UAAM,qBAAqB;AAAA,MACzB;AAAA,MACA,SAAS;AAAA,QACP,UAAU;AAAA,UACR,UAAU;AAAA,UACV,OAAO,IAAI,YAAY,MAAM,OAAO,SAAS,CAAC;AAAA,QAC/C;AAAA,QACD,WAAW;AAAA,UACT,UAAU,OAAO;AAAA,UACjB,OAAO,IAAI,YAAY,MAAM,OAAO,SAAS,CAAC;AAAA,QAC/C;AAAA,QACD,SAAS;AAAA,UACP,UAAU;AAAA,UACV,OAAO,IAAI,YAAY,MAAM,OAAO,QAAQ,CAAC;AAAA,QAC9C;AAAA,QACD,YAAY;AAAA,UACV,UAAU,OAAO;AAAA,UACjB,OAAO,IAAI,YAAY,MAAM,OAAO,QAAQ,CAAC;AAAA,QAC9C;AAAA,MACF;AAAA,IACP;AACI,QAAI,SAAS,GAAG;AACd,yBAAmB,QAAQ,WAAW;AAAA,IACvC;AACD,QAAI,SAAS,GAAG;AACd,yBAAmB,QAAQ,UAAU;AAAA,IACtC;AACD,QAAI,WAAW;AACf,UAAM,WAAW,KAAK;AACtB,QAAI,sBAAsB,KAAK,WAAW;AAC1C,QAAI,sBAAsB,KAAK,WAAW;AAC1C,QAAI,KAAK,cAAc,UAAU;AAC/B,UAAI,OAAO,UAAU,UAAU;AAC7B,2BAAmB,QAAQ,YAAY;AAAA,MACxC;AACD,UAAI,OAAO,KAAK,WAAW,QAAQ;AACjC,mBAAW;AACX,8BAAsB;AAAA,MACvB;AAAA,IACP,OAAW;AACL,UAAI,OAAO,WAAW,UAAU;AAC9B,2BAAmB,QAAQ,aAAa;AAAA,MACzC;AACD,UAAI,OAAO,KAAK,WAAW,QAAQ;AACjC,mBAAW;AACX,8BAAsB;AAAA,MACvB;AAAA,IACF;AACD,SAAK,WAAW,SAAS;AACzB,SAAK,WAAW,SAAS;AACzB,SAAK,qBAAqB,KAAK,kBAAkB;AACjD,QAAI,UAAU;AACZ,WAAK,uBAAsB;AAAA,IAC5B;AAAA,EACF;AAAA,EACD,uBAAuB,cAAc,OAAO;AACrB,SAAK;AAC1B,aAAS,IAAI,GAAG,IAAI,KAAK,qBAAqB,QAAQ,KAAK;AACzD,YAAM,YAAY,KAAK,qBAAqB,CAAC;AAC7C,YAAM,eAAe,UAAU;AACR,gBAAU;AACjC,UAAI,aAAa,YAAY,QAAQ,aAAa,aAAa,QAAQ,aAAa,WAAW,QAAQ,aAAa,cAAc,MAAM;AACtI,aAAK,qBAAqB,OAAO,GAAG,CAAC;AACrC;AACA;AAAA,MACD;AACD,UAAI,KAAK,cAAc,UAAU;AAC/B,YAAI,CAAC,eAAe,aAAa,cAAc,QAAQ,aAAa,WAAW,WAAW,KAAK,WAAW,QAAQ;AAChH;AAAA,QACD;AAAA,MACT,OAAa;AACL,YAAI,CAAC,eAAe,aAAa,aAAa,aAAa,UAAU,WAAW,KAAK,WAAW,QAAQ;AACtG;AAAA,QACD;AAAA,MACF;AACD,YAAM,WAAW,KAAK,qBAAqB,SAAS;AACpD,eAAS,OAAO,UAAU;AACxB,YAAI,SAAS,GAAG,MAAM,IAAI;AACxB,gBAAM,aAAa,KAAK,qBAAqB,SAAS,GAAG,CAAC;AAC1D,eAAK;AAAA,YACH;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACZ;AAAA,QACS;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACD,0BAA0B,WAAW,WAAW,YAAY;AAC1D,QAAI,cAAc;AAClB,QAAI,UAAU;AACd,QAAI,iBAAiB;AACrB,YAAQ,WAAS;AAAA,MACf,KAAK;AACH;AAAA,MACF,KAAK;AACH;AAAA,MACF,KAAK;AACH,sBAAc;AACd,yBAAiB;AACjB,kBAAU;AACV;AAAA,MACF,KAAK;AACH,sBAAc;AACd,yBAAiB;AACjB,kBAAU;AACV;AAAA,MACF;AACE,gBAAQ,IAAI,+CAA+C,WAAW;AACtE;AAAA,IACH;AACD,UAAM,oBAAoB,KAAK,eAAe,UAAU,KAAK;AAC7D,UAAM,qBAAqB,KAAK,eAAe,WAAW,KAAK;AAC/D,QAAI,QAAQ;AACZ,QAAI,qBAAqB,oBAAoB;AAC3C,YAAM,oBAAoB,kBAAkB,kBAAkB,SAAS;AACvE,YAAM,cAAc,mBAAmB,WAAW;AAClD,YAAM,YAAY,cAAc,mBAAmB,OAAO,IAAI;AAC9D,eAAS,IAAI,kBAAkB,SAAS,GAAG,KAAK,GAAG,KAAK;AACtD,cAAM,OAAO,KAAK,eAAe,kBAAkB,CAAC,CAAC;AACrD,YAAI,QAAQ;AACV;AACF,cAAM,YAAY,KAAK,WAAW;AAClC,cAAM,UAAU,YAAY,KAAK,OAAO,IAAI;AAC5C,YAAI,aAAa,aAAa,WAAW,aAAa;AACpD,cAAI,KAAK;AAAA,YACP,KAAK,cAAc,IAAI,kBAAkB,cAAc;AAAA,UACxD,IAAG,KAAK;AAAA,YACP,mBAAmB,cAAc,IAAI,kBAAkB,cAAc;AAAA,UACjF,GAAa;AACD,oBAAQ;AACR;AAAA,UACZ,OAAiB;AACL,8BAAkB,OAAO,GAAG,CAAC;AAAA,UAC9B;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACD,WAAO;AAAA,EACR;AAAA,EACD,2BAA2B,WAAW,WAAW,YAAY;AAC3D,UAAM,eAAe,UAAU;AAC/B,UAAM,gBAAgB,WAAW;AACjC,QAAI,iBAAiB;AACrB,QAAI,gBAAgB;AACpB,YAAQ,WAAS;AAAA,MACf,KAAK;AACH,yBAAiB;AACjB,wBAAgB;AAChB;AAAA,MACF,KAAK;AACH,yBAAiB;AACjB,wBAAgB;AAChB;AAAA,MACF,KAAK;AACH,yBAAiB;AACjB,wBAAgB;AAChB;AAAA,MACF,KAAK;AACH,wBAAgB;AAChB,yBAAiB;AACjB;AAAA,MACF;AACE,gBAAQ;AAAA,UACN,gDAAgD;AAAA,QAC1D;AACQ;AAAA,IACH;AACD,UAAM,uBAAuB,cAAc,cAAc,EAAE,MAAM,MAAK;AACtE,kBAAc,cAAc,EAAE,MAAM;AAAA,MAClC,aAAa,aAAa,EAAE;AAAA,IAClC;AACI,iBAAa,aAAa,EAAE,MAAM;AAAA,MAChC;AAAA,IACN;AACI,QAAI,cAAc,cAAc,EAAE,MAAM,QAAO,GAAI;AACjD,oBAAc,cAAc,IAAI;AAAA,IACjC;AACD,QAAI,aAAa,aAAa,EAAE,MAAM,QAAO,GAAI;AAC/C,mBAAa,aAAa,IAAI;AAAA,IAC/B;AAAA,EACF;AAAA,EACD,qBAAqB,WAAW;AAC9B,UAAM,eAAe,UAAU;AAC/B,QAAI,mBAAmB;AACvB,QAAI,oBAAoB;AACxB,QAAI,kBAAkB;AACtB,QAAI,qBAAqB;AACzB,QAAI,eAAe;AACnB,QAAI,gBAAgB;AACpB,QAAI,cAAc;AAClB,QAAI,iBAAiB;AACrB,aAAS,IAAI,GAAG,IAAI,KAAK,qBAAqB,QAAQ,KAAK;AACzD,YAAM,aAAa,KAAK,qBAAqB,CAAC;AAC9C,YAAM,gBAAgB,WAAW;AACjC,UAAI,cAAc,YAAY;AAC5B;AAAA,MACD;AACD,UAAI,aAAa,aAAa,QAAQ,cAAc,cAAc,MAAM;AACtE,YAAI,aAAa,SAAS,YAAY,cAAc,UAAU,YAAY,aAAa,SAAS,MAAM;AAAA,UACpG,cAAc,UAAU;AAAA,QAClC,GAAW;AACD,cAAI,iBAAiB,IAAI;AACvB,2BAAe,aAAa,SAAS,WAAW,cAAc,UAAU;AACxE,+BAAmB;AACnB;AAAA,UACZ,WAAqB,eAAe,aAAa,SAAS,WAAW,cAAc,UAAU,UAAU;AAC3F,2BAAe,aAAa,SAAS,WAAW,cAAc,UAAU;AACxE,+BAAmB;AACnB;AAAA,UACD;AAAA,QACF;AAAA,MACF;AACD,UAAI,aAAa,cAAc,QAAQ,cAAc,aAAa,MAAM;AACtE,YAAI,aAAa,UAAU,YAAY,cAAc,SAAS,YAAY,aAAa,UAAU,MAAM;AAAA,UACrG,cAAc,SAAS;AAAA,QACjC,GAAW;AACD,cAAI,kBAAkB,IAAI;AACxB,4BAAgB,cAAc,SAAS,WAAW,aAAa,UAAU;AACzE,gCAAoB;AACpB;AAAA,UACZ,WAAqB,gBAAgB,cAAc,SAAS,WAAW,aAAa,UAAU,UAAU;AAC5F,4BAAgB,cAAc,SAAS,WAAW,aAAa,UAAU;AACzE,gCAAoB;AACpB;AAAA,UACD;AAAA,QACF;AAAA,MACF;AACD,UAAI,aAAa,YAAY,QAAQ,cAAc,eAAe,MAAM;AACtE,YAAI,aAAa,QAAQ,YAAY,cAAc,WAAW,YAAY,aAAa,QAAQ,MAAM;AAAA,UACnG,cAAc,WAAW;AAAA,QACnC,GAAW;AACD,cAAI,gBAAgB,IAAI;AACtB,0BAAc,aAAa,QAAQ,WAAW,cAAc,WAAW;AACvE,8BAAkB;AAClB;AAAA,UACZ,WAAqB,cAAc,aAAa,QAAQ,WAAW,cAAc,WAAW,UAAU;AAC1F,0BAAc,aAAa,QAAQ,WAAW,cAAc,WAAW;AACvE,8BAAkB;AAClB;AAAA,UACD;AAAA,QACF;AAAA,MACF;AACD,UAAI,aAAa,eAAe,QAAQ,cAAc,YAAY,MAAM;AACtE,YAAI,aAAa,WAAW,YAAY,cAAc,QAAQ,YAAY,aAAa,WAAW,MAAM;AAAA,UACtG,cAAc,QAAQ;AAAA,QAChC,GAAW;AACD,cAAI,mBAAmB,IAAI;AACzB,6BAAiB,cAAc,QAAQ,WAAW,aAAa,WAAW;AAC1E,iCAAqB;AACrB;AAAA,UACZ,WAAqB,iBAAiB,cAAc,QAAQ,WAAW,aAAa,WAAW,UAAU;AAC7F,6BAAiB,cAAc,QAAQ,WAAW,aAAa,WAAW;AAC1E,iCAAqB;AACrB;AAAA,UACD;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACD,WAAO;AAAA,MACL,MAAM;AAAA,MACN,OAAO;AAAA,MACP,KAAK;AAAA,MACL,QAAQ;AAAA,IACd;AAAA,EACG;AAAA,EACD,uBAAuB,aAAa,WAAW,WAAW,YAAY;AACpE,UAAM,SAAS;AAAA,MACb,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,OAAO;AAAA,QACP,KAAK;AAAA,QACL,QAAQ;AAAA,MACT;AAAA,MACD,OAAO;AAAA,QACL,MAAM;AAAA,QACN,OAAO;AAAA,QACP,KAAK;AAAA,QACL,QAAQ;AAAA,MACT;AAAA,IACP;AACI,QAAI,mBAAmB,OAAO,MAAM,SAAS;AAC7C,QAAI,oBAAoB,OAAO,OAAO,SAAS;AAC/C,QAAI,CAAC,oBAAoB,CAAC,mBAAmB;AAC3C,cAAQ,MAAM,+CAA+C,SAAS;AAAA,IACvE;AACD,UAAM,cAAc,WAAW;AAC/B,UAAM,iBAAiB,UAAU;AACjC,UAAM,eAAe,KAAK;AAC1B,QAAI,KAAK,0BAA0B,WAAW,WAAW,UAAU,GAAG;AACpE,UAAI,CAAC,aAAa;AAChB,aAAK,2BAA2B,WAAW,WAAW,UAAU;AAChE,qBAAa,WAAW,EAAE,kBAAkB,iBAAiB,EAAE;AAAA,UAC7D;AAAA,QACV;AACQ,qBAAa,cAAc,EAAE,kBAAkB,gBAAgB,EAAE,KAAK,WAAW;AACjF,qBAAa,WAAW,EAAE,qBAAqB,iBAAiB,IAAI,CAAA;AACpE,qBAAa,cAAc,EAAE,qBAAqB,gBAAgB,IAAI,CAAA;AAAA,MAC9E,OAAa;AACL,qBAAa,WAAW,EAAE,qBAAqB,iBAAiB,EAAE,KAAK,cAAc;AACrF,qBAAa,cAAc,EAAE,qBAAqB,gBAAgB,EAAE,KAAK,WAAW;AAAA,MACrF;AAAA,IACF;AAAA,EACF;AACH;AAEA;AACA;AACA;AACA,MAAM,kBAAkB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY,iBAAiB,MAAM,cAAc,YAAY,aAAa,IAAI,YAAY,MAAM;AAC9F,SAAK,iBAAiB;AACtB,SAAK,QAAQ;AACb,SAAK,aAAa;AAClB,SAAK,eAAe;AACpB,SAAK,YAAY;AACjB,SAAK,WAAW;AAChB,SAAK,cAAc;AACnB,SAAK,aAAa;AAClB,SAAK,OAAO,KAAK,eAAe,cAAc,aAAa,SAAS;AACpE,SAAK,MAAM;AAAA,EACZ;AAAA,EACD,kBAAkB,MAAM,OAAO;AAC7B,UAAM,WAAW,KAAK,KAAK;AAC3B,UAAM,aAAa,KAAK,aAAa,QAAQ;AAC7C,QAAI,OAAO,WAAW,YAAY,aAAa;AAC7C,iBAAW,YAAY,WAAW,UAAU,aAAa,WAAW,iBAAiB,aAAa,WAAW;AAC7G,cAAQ,KAAK,sEAAsE;AAAA,IACpF;AACD,QAAI,eAAe,KAAK,eAAe,QAAQ,UAAU;AACzD,SAAK,cAAc,UAAU,cAAc,UAAU;AACrD,WAAO,EAAE,aAAa,cAAc;EACrC;AAAA,EACD,WAAW,WAAW,MAAM,WAAW,GAAG;AACxC,QAAI,QAAQ;AACZ,QAAI,KAAK,YAAY,KAAK,MAAM,WAAW,CAAC,YAAY,SAAS,KAAK,IAAI,MAAM,KAAK,WAAW,KAAK,KAAK,aAAa;AACrH,aAAO,KAAK,YAAY,KAAK,MAAM,QAAQ;AACzC,YAAI;AACF,cAAI,EAAE,YAAa,IAAG,KAAK,kBAAkB,KAAK,OAAO,KAAK,SAAS;AACvE,eAAK;AACL,cAAI,YAAY,KAAK,IAAI,MAAM,KAAK,WAAW,YAAY,KAAK,YAAY;AAC1E,iBAAK,YAAY;AACjB;AAAA,UACD;AAAA,QACF,SAAQ,GAAP;AACA,kBAAQ;AAAA,YACN,gBAAgB,KAAK,2BAA2B,KAAK;AAAA,YACrD,KAAK;AAAA,UACjB;AACU,gBAAM;AAAA,QACP;AAAA,MACF;AACD,WAAK,eAAe;AACpB,cAAQ;AAAA,IACT;AACD,SAAK,aAAU;AACf,WAAO;AAAA,EACR;AAAA,EACD,qBAAqB,UAAU;AAC7B,UAAM,WAAW,KAAK,KAAK,WAAW,KAAK,aAAa,CAAC;AACzD,QAAI,WAAW,KAAK,UAAU;AAC5B,WAAK,WAAW,MAAM,WAAW,KAAK,QAAQ;AAAA,IAC/C;AACD,SAAK,aAAU;AAAA,EAChB;AAAA,EACD,kBAAkB,OAAO;AACvB,QAAI,SAAS,KAAK,IAAI,OAAO,KAAK,MAAM,SAAS,CAAC;AAClD,QAAI,QAAQ;AACZ,WAAO,KAAK,aAAa,QAAQ;AAC/B,cAAQ;AACR,UAAI;AACF,YAAI,EAAE,YAAa,IAAG,KAAK,kBAAkB,KAAK,OAAO,KAAK,SAAS;AACvE,aAAK;AACL,YAAI,YAAY,KAAK,IAAI,MAAM,KAAK,WAAW,KAAK,KAAK,YAAY;AACnE,eAAK;AAAA,QACN;AAAA,MACF,SAAQ,GAAP;AACA,gBAAQ;AAAA,UACN,gBAAgB,KAAK,2BAA2B,KAAK;AAAA,UACrD,KAAK;AAAA,QACf;AACQ,cAAM;AAAA,MACP;AAAA,IACF;AACD,QAAI,OAAO;AACT,WAAK,eAAe;IACrB;AACD,SAAK,WAAW,KAAK,eAAe,eAAe,KAAK,GAAG,CAAC;AAC5D,SAAK,aAAU;AAAA,EAChB;AAAA,EACD,eAAe,IAAI;AACjB,QAAI,MAAM,KAAK,IAAI,IAAI,KAAK,MAAM,SAAS,CAAC;AAC5C,UAAM,UAAU,KAAK,eAAe,gBAAgB;AACpD,QAAI,UAAU,KAAK;AACjB,UAAI,QAAQ;AACZ,UAAI,SAAS;AACb,aAAO,SAAS,OAAO,KAAK,YAAY,KAAK,MAAM,QAAQ;AACzD,gBAAQ;AACR,YAAI;AACF,cAAI,EAAE,YAAa,IAAG,KAAK,kBAAkB,KAAK,OAAO,KAAK,SAAS;AACvE,mBAAS,YAAY;AACrB,cAAI,YAAY,KAAK,IAAI,MAAM,KAAK,WAAW,KAAK,KAAK,YAAY;AACnE,iBAAK;AAAA,UACN;AACD,eAAK;AAAA,QACN,SAAQ,GAAP;AACA,kBAAQ;AAAA,YACN,gBAAgB,KAAK,2BAA2B,KAAK;AAAA,YACrD,KAAK;AAAA,UACjB;AACU,gBAAM;AAAA,QACP;AAAA,MACF;AACD,UAAI,OAAO;AACT,aAAK,eAAe;MACrB;AAAA,IACF;AACD,SAAK,WAAW,KAAK,eAAe,YAAY,EAAE,GAAG,CAAC;AACtD,SAAK,aAAU;AAAA,EAChB;AAAA,EACD,gBAAgB,KAAK;AACnB,QAAI,KAAK,eAAe,aAAa,GAAG,GAAG;AACzC;AAAA,IACD;AACD,QAAI,QAAQ;AACZ,QAAI,aAAa;AACjB,WAAO,CAAC,cAAc,KAAK,YAAY,KAAK,MAAM,QAAQ;AACxD,cAAQ;AACR,UAAI;AACF,YAAI,EAAE,aAAa,WAAU,IAAK,KAAK,kBAAkB,KAAK,OAAO,KAAK,SAAS;AACnF,YAAI,WAAW,OAAO,KAAK;AACzB,uBAAa;AAAA,QACd;AACD,aAAK;AACL,YAAI,YAAY,KAAK,IAAI,MAAM,KAAK,WAAW,KAAK,KAAK,YAAY;AACnE,eAAK;AAAA,QACN;AAAA,MACF,SAAQ,GAAP;AACA,gBAAQ;AAAA,UACN,gBAAgB,KAAK,2BAA2B,KAAK;AAAA,UACrD,KAAK;AAAA,QACf;AACQ,cAAM;AAAA,MACP;AAAA,IACF;AACD,QAAI,OAAO;AACT,WAAK,eAAe;IACrB;AACD,QAAI,YAAY;AACd,WAAK,WAAW,YAAY,CAAC;AAAA,IAC9B;AAAA,EACF;AAAA,EACD,WAAW,MAAM;AACf,SAAK,QAAQ;AAAA,EACd;AACH;AAMA,MAAM,0BAA0B,cAAc;AAAA,EAC5C,YAAY,WAAW,SAAS,UAAU,YAAY;AACpD,UAAM,WAAW,SAAS,UAAU,YAAY,KAAK;AAAA,EACtD;AAAA,EACD,+BAA+B;AAAA,EAC9B;AAAA,EACD,aAAa,SAAS;AACpB,UAAM,eAAe,cAAc,gBAAgB,OAAO;AAC1D,SAAK,iBAAiB,YAAY;AAClC,SAAK,gBAAgB,aAAa;AAClC,WAAO;AAAA,EACR;AAAA,EACD,iBAAiB,cAAc;AAC7B,QAAI,UAAU,KAAK,aAAa,WAAW,UAAU;AACrD,QAAI,aAAa,OAAO,IAAI,KAAK,SAAS;AACxC,YAAM,IAAI,MAAM,gBAAgB,aAAa,SAAS,aAAa,8BAA8B,KAAK,SAAS;AAAA,IAChH;AACD,UAAM,UAAU,KAAK,eAAe,KAAK,OAAO,CAAC;AACjD,SAAK,gBAAgB,YAAY;AACjC,QAAI,KAAK,aAAa,UAAU;AAC9B,UAAI,KAAK,cAAc,YAAY;AACjC,qBAAa,OAAO;AACpB,qBAAa,MAAM,UAAU,QAAQ,MAAM,QAAQ,SAAS,QAAQ,eAAe;AAAA,MACpF;AACD,UAAI,SAAS;AACX,qBAAa,kBAAkB,IAAI,KAAK,QAAQ,KAAK;AACrD,gBAAQ,kBAAkB,OAAO,KAAK,aAAa,KAAK;AAAA,MACzD;AAAA,IACP,OAAW;AACL,UAAI,KAAK,cAAc,YAAY;AACjC,qBAAa,MAAM;AACnB,qBAAa,OAAO,UAAU,QAAQ,OAAO,QAAQ,QAAQ,QAAQ,cAAc;AAAA,MACpF;AACD,UAAI,SAAS;AACX,qBAAa,kBAAkB,KAAK,KAAK,QAAQ,KAAK;AACtD,gBAAQ,kBAAkB,MAAM,KAAK,aAAa,KAAK;AAAA,MACxD;AAAA,IACF;AACD,iBAAa,aAAa,KAAK,MAAM,aAAa,OAAO,aAAa,QAAQ,CAAC,IAAI;AACnF,iBAAa,aAAa,KAAK,MAAM,aAAa,MAAM,aAAa,SAAS,CAAC,IAAI;AACnF,QAAI,gBAAgB;AACpB,QAAI,mBAAmB;AACvB,QAAI,SAAS;AACX,sBAAgB,QAAQ;AACxB,yBAAmB,QAAQ;AAC3B,UAAI,cAAc;AAClB,UAAI,WAAW;AACf,UAAI,KAAK,cAAc,UAAU;AAC/B,sBAAc;AACd,mBAAW;AAAA,MACZ;AACD,YAAM,eAAe,KAAK,aAAa,gBAAgB,EAAE,WAAW;AACpE,UAAI,aAAa,WAAW,IAAI,aAAa,QAAQ,IAAI,eAAe,KAAK,UAAU;AACrF;AACA,2BAAmB,aAAa;AAAA,MACjC;AAAA,IACF;AACD,iBAAa,aAAa;AAC1B,iBAAa,gBAAgB;AAAA,EAC9B;AAAA,EACD,YAAY,QAAQ,SAAS,SAAS,UAAU;AAC9C,UAAM,OAAO,KAAK,YAAY,MAAM;AACpC,QAAI,MAAM;AACR,UAAI,oBAAoB;AACxB,UAAI,KAAK,aAAa,UAAU;AAC9B,YAAI,UAAU,GAAG;AACf,8BAAoB;AAAA,QAC9B,WAAmB,UAAU,GAAG;AACtB,8BAAoB;AAAA,QACrB;AAAA,MACT,OAAa;AACL,YAAI,UAAU,GAAG;AACf,8BAAoB;AAAA,QAC9B,WAAmB,UAAU,GAAG;AACtB,8BAAoB;AAAA,QACrB;AAAA,MACF;AACD,UAAI,CAAC;AACH,eAAO;AACT,UAAI,SAAS,KAAK,eAAe,KAAK,kBAAkB,iBAAiB,IAAI,CAAC,CAAC;AAC/E,aAAO,QAAQ;AACb,YAAI,OAAO,WAAW;AACpB;AAAA,QACV,OAAe;AACL,mBAAS,KAAK,eAAe,KAAK,kBAAkB,iBAAiB,IAAI,CAAC,CAAC;AAAA,QAC5E;AAAA,MACF;AACD,aAAO;AAAA,IACR;AACD,WAAO;AAAA,EACR;AAAA,EACD,mBAAmB,cAAc,YAAY,QAAQ;AACnD,UAAM,cAAc,KAAK,aAAa,WAAW,QAAQ;AACzD,UAAM,UAAU,KAAK,aAAa,WAAW,WAAW;AACxD,QAAI,KAAK,QAAQ,GAAG;AAClB,aAAO,CAAC,IAAI,EAAE;AAAA,IACf;AACD,UAAM,WAAW,KAAK,aAAa,KAAK,aAAa,SAAS,CAAC;AAC/D,QAAI,gBAAgB,cAAc,aAAa,KAAK,gBAAgB,SAAS,WAAW,IAAI,SAAS,OAAO,GAAG;AAC7G,aAAO,CAAC,IAAI,EAAE;AAAA,IACf;AACD,QAAI,OAAO,KAAK,YAAY,MAAM;AAClC,UAAM,aAAa,OAAO,KAAK,QAAQ,KAAK,MAAM,KAAK,OAAO,CAAC;AAC/D,QAAI,QAAQ,IAAI,MAAM;AACtB,QAAI,QAAQ;AACZ,WAAO,SAAS,GAAG;AACjB,YAAM,QAAQ,KAAK,eAAe,KAAK;AACvC,UAAI,CAAC;AACH;AACF,UAAI,MAAM,WAAW,IAAI,MAAM,OAAO,IAAI,cAAc;AACtD,gBAAQ,MAAM;AAAA,MACf;AACD,UAAI,MAAM,KAAK,MAAM,WAAW,KAAK,YAAY;AAC/C,cAAM,MAAM;AAAA,MACb;AACD,QAAE;AAAA,IACH;AACD,YAAQ;AACR,UAAM,IAAI,KAAK;AACf,WAAO,QAAQ,GAAG;AAChB,YAAM,QAAQ,KAAK,eAAe,KAAK;AACvC,UAAI,CAAC;AACH;AACF,UAAI,MAAM,WAAW,KAAK,YAAY;AACpC,cAAM,MAAM;AAAA,MACb;AACD,UAAI,QAAQ,KAAK,MAAM,WAAW,IAAI,MAAM,OAAO,IAAI,cAAc;AACnE,gBAAQ,MAAM;AAAA,MACf;AACD,QAAE;AAAA,IACH;AACD,WAAO,CAAC,OAAO,GAAG;AAAA,EACnB;AAAA,EACD,eAAe,OAAO,SAAS;AAC7B,UAAM,iBAAiB,KAAK,aAAa,OAAO,KAAK;AACrD,mBAAe,CAAC,EAAE,QAAQ,QAAQ;AAClC,mBAAe,CAAC,EAAE,SAAS,QAAQ;AACnC,aAAS,KAAK,gBAAgB;AAC5B,UAAI,EAAE,MAAM,GAAG;AACb,aAAK,OAAO,OAAO,EAAE,EAAE;AACvB;AAAA,MACD;AAAA,IACF;AACD,aAAS,KAAK,gBAAgB;AAC5B,WAAK,iBAAiB,CAAC;AAAA,IACxB;AAAA,EACF;AACH;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA,MAAM,YAAY;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR,YAAY,YAAY;AACtB,SAAK,cAA8B,oBAAI;AACvC,SAAK,WAA2B,oBAAI;AAEpC,SAAK,aAAa;AAAA,EACnB;AAAA,EACD,OAAO,UAAU,OAAO,KAAK,UAAU,UAAU,eAAe,iBAAiB,GAAG;AAClF,SAAK;AACL,UAAM,CAAC,cAAc,UAAU,IAAI,SAAS;AAAA,MAC1C,QAAQ;AAAA,MACR,MAAM;AAAA,MACN;AAAA,IACN;AACI,UAAM,iBAAiB,KAAK;AAC5B,UAAM,cAAc,KAAK;AACzB,SAAK,WAA2B,oBAAI;AACpC,SAAK,cAA8B,oBAAI;AACvC,QAAI,gBAAgB,KAAK,cAAc,GAAG;AACxC,eAAS,IAAI,cAAc,KAAK,YAAY,EAAE,GAAG;AAC/C,aAAK,SAAS,IAAI,CAAC;AAAA,MACpB;AAAA,IACF;AACD,QAAI,eAAe;AACjB,YAAM,oBAAoB,cAAc,OAAO,CAAC,SAAS;AACvD,YAAI,SAAS;AACb,YAAI,KAAK,eAAe,KAAK,SAAS,YAAY;AAChD,eAAK,cAAc;AACnB,mBAAS;AAAA,QACV;AACD,eAAO;AAAA,MACf,CAAO;AACD,eAAS,SAAS,mBAAmB;AACnC,aAAK,SAAS,IAAI,MAAM,KAAK;AAAA,MAC9B;AAAA,IACF;AACD,QAAI,YAAY,OAAO,GAAG;AACxB,WAAK,cAA8B,oBAAI,IAAI,CAAC,GAAG,KAAK,UAAU,GAAG,WAAW,CAAC;AAAA,IAC9E;AACD,QAAI,UAAU;AACZ,WAAK,cAA8B,oBAAI,IAAI,CAAC,GAAG,KAAK,aAAa,GAAG,cAAc,CAAC;AAAA,IACpF;AACD,UAAM,IAAI,KAAK;AACf,WAAO;AAAA,MACL,OAAO,MAAM;AACX,YAAI,KAAK,KAAK,OAAO;AACnB,eAAK,MAAK;AAAA,QAEX;AAAA,MACF;AAAA,MACD,UAAU,MAAM;AACd,YAAI,KAAK,KAAK,OAAO;AACnB,eAAK,SAAQ;AAAA,QAEd;AAAA,MACF;AAAA,IACP;AAAA,EACG;AAAA,EACD,QAAQ;AACN,SAAK,YAAY;AACjB,SAAK,WAAW,KAAK,QAAQ;AAAA,EAC9B;AAAA,EACD,WAAW;AACT,QAAI,KAAK,YAAY,OAAO,GAAG;AAC7B,WAAK,WAAW,KAAK,WAAW;AAAA,IACjC;AAAA,EACF;AAAA,EACD,WAAW;AACT,WAAO,KAAK;AAAA,EACb;AAAA,EACD,cAAc;AACZ,WAAO,KAAK;AAAA,EACb;AACH;AAMA,MAAM,WAAW;AAAA,EACf,qBAAqB,CAAA;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU,IAAI,KAAK;AAAA,EACnB,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,sBAAsB,CAAA;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY,cAAc,cAAc,aAAa,YAAY,OAAO,OAAO;AAC7E,SAAK,eAAe;AACpB,SAAK,eAAe;AACpB,SAAK,cAAc;AACnB,SAAK,aAAa;AAClB,SAAK,QAAQ;AACb,UAAM,WAAW,KAAK,SAAS,KAAK,IAAI;AACxC,UAAM,aAAa,KAAK,WAAW,KAAK,IAAI;AAC5C,SAAK,cAAc,EAAE,UAAU,WAAU;AACzC,SAAK,QAAQ;AAAA,EACd;AAAA,EACD,IAAI,KAAK;AACP,WAAO,KAAK,aAAa;AAAA,EAC1B;AAAA,EACD,IAAI,QAAQ;AACV,WAAO,KAAK,aAAa;AAAA,EAC1B;AAAA;AAAA,EAED,SAAS,CAAC,QAAQ;AAChB,SAAK,UAAU;AACf,QAAI,KAAK;AACP,WAAK,aAAY;AAAA,IACvB,OAAW;AACL,WAAK,eAAc;AAAA,IACpB;AAAA,EACL;AAAA,EACE,UAAU,CAAC,QAAQ;AACjB,QAAI,CAAC,KAAK,QAAQ,SAAS,KAAK;AAC9B,WAAK,QAAQ,QAAQ;AACrB,WAAK,QAAK;AAAA,IACX,WAAU,CAAC,OAAO,KAAK,QAAQ,OAAO;AACrC,WAAK,QAAQ,QAAQ;AAAA,IACtB;AAAA,EACL;AAAA,EACE,SAAS,MAAM,UAAU;AACvB,SAAK,oBAAoB,IAAI,IAAI;AAAA,EAClC;AAAA,EACD,WAAW,MAAM;AACf,WAAO,KAAK,oBAAoB,IAAI;AAAA,EACrC;AAAA,EACD,QAAQ,MAAM;AACZ,QAAI,KAAK,QAAQ,OAAO;AACtB,WAAK,oBAAoB,UAAU,IAAI;AACvC,aAAO;AAAA,IACb,OAAW;AACL,aAAO;AAAA,IACR;AAAA,EACF;AAAA,EACD,SAAS;AACP,QAAI,KAAK,QAAQ,OAAO;AACtB,WAAK,oBAAoB;AACzB,aAAO;AAAA,IACb,OAAW;AACL,aAAO;AAAA,IACR;AAAA,EACF;AAAA,EACD,QAAQ,SAAS,MAAM;AACrB,WAAO,KAAK,YAAY,EAAE,OAAO,KAAK,QAAQ,KAAK,IAAI,EAAG,IAAG;EACjE,CAAG;AAAA,EACD,UAAU;AACR,QAAI,KAAK,QAAQ,OAAO;AACtB,WAAK,oBAAoB;AACzB,aAAO;AAAA,IACb,OAAW;AACL,aAAO;AAAA,IACR;AAAA,EACF;AAAA,EACD,aAAa,MAAM;AACjB,QAAI,KAAK,QAAQ,OAAO;AACtB,WAAK,oBAAoB,eAAe,IAAI;AAC5C,aAAO;AAAA,IACb,OAAW;AACL,aAAO;AAAA,IACR;AAAA,EACF;AAAA,EACD,sBAAsB,KAAK;AACzB,SAAK,mBAAmB,KAAK,GAAG;AAAA,EAEjC;AAAA,EACD,eAAe;AACb,QAAI,KAAK,mBAAmB,SAAS,GAAG;AACtC,WAAK,mBAAmB,QAAQ,CAAC,QAAQ;AACvC,YAAI,KAAK,SAAS;AAChB,cAAI,KAAK,OAAO;AAAA,QACjB;AAAA,MACT,CAAO;AAAA,IACF;AACD,SAAK,qBAAqB;AAC1B,QAAI,KAAK,aAAa,KAAK,SAAS;AAClC,YAAM,UAAU,KAAK,QAAQ,gBAAe;AAC5C,cAAQ,cAAc,CAAC;AAAA,IACxB;AAAA,EACF;AAAA,EACD,iBAAiB;AACf,SAAK,YAAY;AACjB,SAAK,qBAAqB;EAC3B;AACH;AAEA;AACA;AACA;AACA,MAAM,YAAY;AAAA,EAChB,SAAS;AAAA,EACT,QAAQ;AAAA,EACR;AAAA,EACA,YAAY;AAAA,EACZ,IAAI,MAAM,OAAO;AACf,SAAK,SAAS;AACd,SAAK,YAAY,KAAK,IAAI,KAAK,QAAQ,KAAK,SAAS;AAAA,EACtD;AAAA,EACD,IAAI,QAAQ;AACV,WAAO,KAAK;AAAA,EACb;AAAA,EACD,IAAI,MAAM;AACR,WAAO,KAAK,SAAS,KAAK,QAAQ;AAAA,EACnC;AAAA,EACD,IAAI,WAAW;AACb,WAAO,KAAK;AAAA,EACb;AAAA,EACD,IAAI,mBAAmB;AACrB,WAAO,KAAK,SAAS,KAAK,QAAQ;AAAA,EACnC;AAAA,EACD,IAAI,iBAAiB;AACnB,WAAO,KAAK,SAAS,KAAK,QAAQ,KAAK,QAAQ,MAAM;AAAA,EACtD;AAAA,EACD,OAAO;AACL,UAAM,MAAM,IAAI;AAChB,QAAI,SAAS,KAAK;AAClB,QAAI,UAAU,EAAE,GAAG,KAAK,QAAO;AAC/B,QAAI,YAAY,KAAK;AACrB,QAAI,QAAQ,KAAK;AACjB,WAAO;AAAA,EACR;AACH;AAEA;AACA;AACA;AACA,MAAM,eAAe;AAAA,EACnB;AAAA,EACA;AAAA,EACA,WAAW;AAAA,IACT,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,QAAQ;AAAA,EACZ;AAAA,EACE,YAAY,GAAGC,IAAG,SAAS;AACzB,SAAK,SAAS;AACd,SAAK,UAAUA;AACf,SAAK,SAAS,OAAO,SAAS,QAAQ;AACtC,SAAK,SAAS,MAAM,SAAS,OAAO;AACpC,SAAK,SAAS,QAAQ,SAAS,SAAS;AACxC,SAAK,SAAS,SAAS,SAAS,UAAU;AAC1C,QAAI,KAAK,gBAAgB,KAAK,KAAK,iBAAiB,GAAG;AACrD,YAAM,IAAI,MAAM,yCAAyC;AAAA,IAC1D;AAAA,EACF;AAAA,EACD,IAAI,QAAQ;AACV,WAAO,KAAK;AAAA,EACb;AAAA,EACD,IAAI,SAAS;AACX,WAAO,KAAK;AAAA,EACb;AAAA,EACD,IAAI,eAAe;AACjB,WAAO,KAAK,SAAS,KAAK,SAAS,OAAO,KAAK,SAAS;AAAA,EACzD;AAAA,EACD,IAAI,gBAAgB;AAClB,WAAO,KAAK,UAAU,KAAK,SAAS,MAAM,KAAK,SAAS;AAAA,EACzD;AAAA,EACD,IAAI,UAAU;AACZ,WAAO,KAAK;AAAA,EACb;AACH;AAEA;AACA;AACA;AACA,IAAI,WAA4B,kBAAC,cAAc;AAC7C,YAAU,UAAU,aAAa,IAAI,CAAC,IAAI;AAC1C,YAAU,UAAU,OAAO,IAAI,CAAC,IAAI;AACpC,YAAU,UAAU,iBAAiB,IAAI,CAAC,IAAI;AAC9C,SAAO;AACT,GAAG,YAAY,CAAA,CAAE;AACjB,MAAM,oBAAoB;AAAA,EACxB,WAAW,CAAA;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa,IAAI,CAAC;AAAA,EAClB,SAAS;AAAA,EACT,qBAAqB;AAAA,EACrB,YAAY,aAAa,SAAS;AAChC,SAAK,kBAAkB;AACvB,SAAK,wBAAwB;AAAA,EAC9B;AAAA,EACD,WAAW;AACT,QAAI,KAAK,SAAS,OAAO,kBAAkB;AACzC,QAAE,KAAK;AAAA,IACb,OAAW;AACL,WAAK,SAAS;AAAA,IACf;AACD,WAAO,KAAK;AAAA,EACb;AAAA,EACD,QAAQ,MAAM,QAAQ;AACpB,QAAI,KAAK,sBAAsB,QAAQ,YAAY,OAAO;AACxD,cAAQ,IAAI,4DAA4D,MAAM,MAAM;AACpF;AAAA,IACD;AACD,SAAK,SAAS,KAAK;AAAA,MACjB;AAAA,MACA;AAAA,MACA,YAAY,QAAQ,YAAY;AAAA,IACtC,CAAK;AACD,QAAI,KAAK,eAAe,QAAQ,YAAY,OAAO;AACjD,WAAK,aAAa,QAAQ,YAAY;AACtC,YAAM,YAAY,CAAA;AAClB,eAAS,IAAI,KAAK,SAAS,SAAS,GAAG,KAAK,GAAG,EAAE,GAAG;AAClD,YAAI,KAAK,SAAS,CAAC,EAAE,cAAc,KAAK,YAAY;AAClD,cAAI,IAAI,KAAK,SAAS,OAAO,GAAG,CAAC;AACjC,oBAAU,KAAK,EAAE,CAAC,CAAC;AAAA,QACpB;AAAA,MACF;AACD,WAAK,QAAQ,SAAS;AAAA,IACvB;AACD,SAAK,WAAW,QAAQ,KAAK,SAAQ;AACrC,QAAI,YAAY,KAAK,WAAW;AAChC,YAAQ,UAAU,KAAK,MAAM;AAC3B,UAAI,aAAa,KAAK,WAAW,OAAO;AACtC,aAAK,YAAW;AAChB,aAAK,qBAAqB,KAAK;AAC/B,gBAAQ,cAAc;MAEvB;AAAA,IACP,CAAK;AAAA,EACF;AAAA,EACD,cAAc;AACZ,QAAI,KAAK,SAAS,SAAS,GAAG;AAC5B,WAAK,sBAAsB,KAAK,QAAQ;AACxC,WAAK,WAAW;IACjB;AAAA,EACF;AAAA,EACD,QAAQ,UAAU;AAChB,SAAK,gBAAgB,QAAQ;AAAA,EAC9B;AACH;AACA,MAAM,WAAW;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY,YAAY,SAAS,MAAM,IAAI,SAAS;AAClD,SAAK,aAAa;AAClB,SAAK,cAAc;AACnB,SAAK,UAAU;AACf,QAAI,WAAW;AACf,QAAI,OAAO,QAAQ,YAAY,UAAU;AACvC,iBAAW,QAAQ;AAAA,IACpB,WAAU,OAAO,QAAQ,SAAS,UAAU;AAC3C,iBAAW,KAAK,MAAM,KAAK,IAAI,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,GAAG,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,QAAQ,KAAK;AAAA,IACrG;AACD,SAAK,YAAY,IAAI,QAAQ;AAAA,MAC3B,KAAK,CAAC;AAAA,MACN,GAAG,CAAC;AAAA,MACJ,KAAK,CAAC;AAAA,MACN,GAAG,CAAC;AAAA,MACJ;AAAA,MACA,QAAQ;AAAA,IACd;AACI,SAAK,UAAU;AAAA,MACb,IAAI,QAAQ,kBAAkB,KAAK,QAAQ,KAAK,IAAI,GAAG,KAAK,MAAM,KAAK,IAAI,GAAG,IAAI;AAAA,IACxF;AAAA,EACG;AAAA,EACD,QAAQ;AACN,SAAK,SAAS,gBAAgB,IAAI,EAAE,eAAe,KAAK,SAAS;AAAA,EAClE;AAAA,EACD,OAAO;AACL,SAAK,SAAS,gBAAgB,IAAI,EAAE,cAAa;AAAA,EAClD;AAAA,EACD,gBAAgB;AACd,WAAO,KAAK;AAAA,EACb;AAAA,EACD,UAAU;AACR,SAAK,aAAa;EACnB;AAAA,EACD,MAAM,MAAM;AACV,SAAK,aAAa,QAAQ,IAAI;AAAA,EAC/B;AACH;AACA,MAAM,iBAAiB;AAAA,EACrB,WAAW,CAAA;AAAA,EACX,aAAa;AAAA,EACb,eAAe,SAAS,MAAM,IAAI,SAAS;AACzC,QAAI,gBAAgB,QAAQ,YAAY;AACxC,QAAI,iBAAiB,KAAK,YAAY;AACpC,WAAK,gBAAe;AACpB,WAAK,aAAa;AAAA,IACnB;AACD,UAAM,MAAM,IAAI,WAAW,eAAe,SAAS,MAAM,IAAI,OAAO;AACpE,SAAK,SAAS,KAAK,GAAG;AACtB,QAAI,MAAK;AAAA,EACV;AAAA,EACD,kBAAkB;AAChB,aAAS,IAAI,KAAK,SAAS,SAAS,GAAG,KAAK,GAAG,EAAE,GAAG;AAClD,YAAM,OAAO,KAAK,SAAS,CAAC;AAC5B,UAAI,KAAK,mBAAmB,KAAK,YAAY;AAC3C,aAAK,SAAS,OAAO,GAAG,CAAC;AACzB,aAAK,KAAI;AAAA,MACV;AAAA,IACF;AAAA,EACF;AACH;AAEA;AACA;AACA;AACA,MAAM,kBAAkB,QAAQ;AAChC,MAAM,iBAAiB;AAAA,EACrB,WAAW,gBAAgB;AAAA,EAC3B,cAAc,gBAAgB;AAAA,EAC9B,cAAc,gBAAgB;AAAA,EAC9B,WAAW,gBAAgB;AAAA;AAE7B;AACA,MAAM,wBAAwB,QAAQ,oBAAoB;AAChC,QAAQ,oBAAoB;AACtD,MAAM,sBAAsB,QAAQ;AACpC,MAAM,kBAAkB,QAAQ;AAChC,MAAM,mBAAmB,QAAQ;AACjC,MAAM,iBAAiB,QAAQ;AAC/B,MAAM,oBAAoB,QAAQ;AAClC,MAAM,sBAAsB,QAAQ,gBAAgB;AACpD,MAAM,oBAAoB,QAAQ,cAAc,kBAAkB,KAAK,QAAQ,aAAa;AAE5F;AACA;AACA;AACA,MAAM,0BAA0B,CAAC,cAAc,iBAAiB,gBAAgB;AAC9E,WAAS,IAAI,GAAG,IAAI,YAAY,QAAQ,KAAK;AAC3C,QAAI,OAAO,YAAY,CAAC,KAAK,YAAY;AACvC,kBAAY,CAAC,IAAI,eAAe,iBAAiB,gBAAgB,iBAAiB,YAAY,CAAC,CAAC,CAAC;AAAA,IAClG;AAAA,EACF;AACD,sBAAoB,eAAe,cAAc,WAAW;AAC9D;AACA,MAAM,qBAAqB;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY,iBAAiB,WAAW;AACtC,SAAK,aAAa;AAClB,SAAK,cAAc,oBAAoB;AACvC,SAAK,mBAAmB;AACxB,SAAK,oBAAoB;AAAA,EAC1B;AAAA,EACD,YAAY;AACV,WAAO,KAAK;AAAA,EACb;AAAA,EACD,kBAAkB,OAAO,YAAY,UAAU,kBAAkB;AAC/D,wBAAoB,iBAAiB,KAAK,aAAa,OAAO,YAAY,UAAU,gBAAgB;AACpG,SAAK,mBAAmB;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASD,cAAc,WAAW,WAAW;AAClC,QAAI,CAAC,KAAK,oBAAoB;AAC5B,aAAO;AAAA,IACR;AACD,SAAK,mBAAmB;AACxB,WAAO,KAAK,WAAW,oBAAoB,cAAc,WAAW,WAAW,KAAK,WAAW,CAAC;AAAA,EACjG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASD,aAAa,WAAW,WAAW,WAAW;AAC5C,QAAI,CAAC,KAAK,oBAAoB;AAC5B,aAAO;AAAA,IACR;AACD,SAAK,mBAAmB;AACxB,WAAO,KAAK,WAAW,oBAAoB,aAAa,WAAW,WAAW,WAAW,KAAK,WAAW,CAAC;AAAA,EAC3G;AAAA,EACD,YAAY,MAAM,KAAK,OAAO,QAAQ;AACpC,QAAI,CAAC,KAAK,oBAAoB;AAC5B,aAAO;AAAA,IACR;AACD,SAAK,mBAAmB;AACxB,WAAO,KAAK,WAAW,oBAAoB,YAAY,MAAM,KAAK,OAAO,QAAQ,KAAK,WAAW,CAAC;AAAA,EACnG;AAAA,EACD,eAAe,MAAM,KAAK,OAAO,QAAQ;AACvC,QAAI,CAAC,KAAK,oBAAoB;AAC5B,aAAO;AAAA,IACR;AACD,SAAK,mBAAmB;AACxB,WAAO,KAAK,WAAW,oBAAoB,eAAe,MAAM,KAAK,OAAO,QAAQ,KAAK,WAAW,CAAC;AAAA,EACtG;AAAA,EACD,UAAU,SAAS,SAAS;AAC1B,QAAI,CAAC,KAAK,oBAAoB;AAC5B,aAAO;AAAA,IACR;AACD,SAAK,mBAAmB;AACxB,QAAI,YAAY;AAChB,QAAI,SAAS;AACX,mBAAa;AAAA,IACd;AACD,QAAI,SAAS;AACX,mBAAa;AAAA,IACd;AACD,WAAO,KAAK,WAAW,oBAAoB,UAAU,WAAW,KAAK,WAAW,CAAC;AAAA,EAClF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASD,eAAe,WAAW,WAAW;AACnC,QAAI,CAAC,KAAK,oBAAoB;AAC5B,aAAO;AAAA,IACR;AACD,SAAK,mBAAmB;AACxB,WAAO,KAAK,WAAW,oBAAoB,eAAe,WAAW,WAAW,KAAK,WAAW,CAAC;AAAA,EAClG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQD,aAAa,WAAW,iBAAiB;AACvC,QAAI,CAAC,KAAK,oBAAoB;AAC5B,aAAO;AAAA,IACR;AACD,SAAK,mBAAmB;AACxB,QAAI,MAAM,WAAW,KAAK,KAAK,MAAM,eAAe,GAAG;AACrD,cAAQ,MAAM,6BAA6B,WAAW,eAAe;AACrE,aAAO;AAAA,IACR;AACD,WAAO,KAAK,WAAW,oBAAoB,aAAa,UAAU,OAAO,iBAAiB,KAAK,WAAW,CAAC;AAAA,EAC5G;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQD,WAAW,QAAQ;AACjB,QAAI,CAAC,KAAK,oBAAoB;AAC5B,aAAO;AAAA,IACR;AACD,SAAK,mBAAmB;AACxB,WAAO,KAAK,WAAW,oBAAoB,WAAW,QAAQ,KAAK,WAAW,CAAC;AAAA,EAChF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,WAAW,UAAU,GAAG;AACtB,QAAI,CAAC,KAAK,oBAAoB;AAC5B,aAAO;AAAA,IACR;AACD,SAAK,mBAAmB;AACxB,QAAI,WAAW,GAAG;AAChB,gBAAU;AAAA,IACX;AACD,WAAO,KAAK,WAAW,oBAAoB,WAAW,SAAS,KAAK,WAAW,CAAC;AAAA,EACjF;AAAA,EACD,cAAc;AACZ,QAAI,CAAC,KAAK,oBAAoB;AAC5B,aAAO;AAAA,IACR;AACD,SAAK,mBAAmB;AACxB,WAAO,KAAK,WAAW,oBAAoB,YAAY,KAAK,aAAa,KAAK,kBAAkB,KAAK,CAAC;AAAA,EACvG;AAAA,EACD,YAAY;AACV,QAAI,CAAC,KAAK,oBAAoB;AAC5B,aAAO;AAAA,IACR;AACD,SAAK,mBAAmB;AACxB,WAAO,KAAK,WAAW,oBAAoB,UAAU,KAAK,aAAa,KAAK,kBAAkB,KAAK,CAAC;AAAA,EACrG;AAAA,EACD,cAAc;AACZ,QAAI,CAAC,KAAK,oBAAoB;AAC5B,aAAO;AAAA,IACR;AACD,SAAK,mBAAmB;AACxB,WAAO,KAAK,WAAW,oBAAoB,YAAY,KAAK,aAAa,KAAK,kBAAkB,KAAK,CAAC;AAAA,EACvG;AAAA,EACD,iBAAiB;AACf,QAAI,CAAC,KAAK,oBAAoB;AAC5B,aAAO;AAAA,IACR;AACD,SAAK,mBAAmB;AACxB,WAAO,KAAK,WAAW,oBAAoB,eAAe,KAAK,aAAa,KAAK,kBAAkB,KAAK,CAAC;AAAA,EAC1G;AAAA,EACD,eAAe;AACb,QAAI,CAAC,KAAK,oBAAoB;AAC5B,aAAO;AAAA,IACR;AACD,SAAK,mBAAmB;AACxB,WAAO,KAAK,WAAW,oBAAoB,aAAa,KAAK,aAAa,KAAK,kBAAkB,KAAK,CAAC;AAAA,EACxG;AAAA,EACD,kBAAkB;AAChB,QAAI,CAAC,KAAK,oBAAoB;AAC5B,aAAO;AAAA,IACR;AACD,SAAK,mBAAmB;AACxB,WAAO,KAAK,WAAW,oBAAoB,gBAAgB,KAAK,aAAa,KAAK,kBAAkB,KAAK,CAAC;AAAA,EAC3G;AAAA,EACD,aAAa;AACX,QAAI,CAAC,KAAK,oBAAoB;AAC5B,aAAO;AAAA,IACR;AACD,SAAK,mBAAmB;AACxB,WAAO,KAAK,WAAW,oBAAoB,WAAW,KAAK,aAAa,KAAK,kBAAkB,KAAK,CAAC;AAAA,EACtG;AAAA,EACD,gBAAgB;AACd,QAAI,CAAC,KAAK,oBAAoB;AAC5B,aAAO;AAAA,IACR;AACD,SAAK,mBAAmB;AACxB,WAAO,KAAK,WAAW,oBAAoB,cAAc,KAAK,aAAa,KAAK,kBAAkB,KAAK,CAAC;AAAA,EACzG;AAAA,EACD,mBAAmB;AACjB,QAAI,CAAC,KAAK,kBAAkB;AAC1B,cAAQ,MAAM,uCAAuC;AACrD,aAAO;AAAA,IACR;AACD,WAAO;AAAA,EACR;AAAA,EACD,WAAW,cAAc;AACvB,QAAI,UAAU,eAAe,iBAAiB,gBAAgB,aAAa,YAAY,CAAC;AACxF,QAAI,kBAAkB,KAAK;AAC3B,YAAQ,MAAM,IAAI,CAAC,qBAAqB;AACtC,8BAAwB,cAAc,iBAAiB,gBAAgB;AACvE,aAAO;AAAA,IACb;AACI,WAAO;AAAA,EACR;AACH;AAEA;AACA;AACA;AACA,MAAM,sBAAsB,CAAC,aAAa,aAAa,MAAM,SAAS,aAAa;AACjF,MAAI,aAAa,oBAAoB;AACrC,sBAAoB,iBAAiB,YAAY,qBAAqB;AACtE,MAAI,eAAe,YAAY,UAAU;AAEzC,MAAI,mBAAmB,OAAO,OAAO;AACrC,MAAI,UAAU;AACZ,qBAAiB,KAAK,YAAY,iBAAiB,iBAAiB,QAAQ,CAAC;AAAA,EAC9E;AACD,MAAI,SAAS;AACX,qBAAiB,KAAK,gBAAgB,wBAAyB,CAAA;AAAA,EAChE;AACD,MAAI,iBAAiB,SAAS,GAAG;AAC/B,wBAAoB,WAAW,cAAc,gBAAgB;AAAA,EAC9D;AACD,SAAO,gBAAgB,aAAa,YAAY;AAClD;AACA,MAAM,kBAAkB,CAAC,aAAa,SAAS,WAAW,MAAM,SAAS,aAAa;AACpF,SAAO,oBAAoB,aAAa,CAAC,eAAe;AACtD,WAAO,oBAAoB,aAAa,SAAS,WAAW,UAAU;AAAA,EAC1E,GAAK,MAAM,SAAS,QAAQ;AAC5B;AACA,MAAM,qBAAqB,CAAC,aAAa,MAAM,MAAM,MAAM,SAAS,aAAa;AAC/E,SAAO,oBAAoB,aAAa,CAAC,eAAe;AACtD,WAAO,oBAAoB,cAAc,MAAM,MAAM,UAAU;AAAA,EACnE,GAAK,MAAM,SAAS,QAAQ;AAC5B;AACA,MAAM,kBAAkB,CAAC,aAAa,QAAQ,QAAQ,MAAM,SAAS,aAAa;AAChF,SAAO,oBAAoB,aAAa,CAAC,eAAe;AACtD,WAAO,oBAAoB,WAAW,QAAQ,QAAQ,UAAU;AAAA,EACpE,GAAK,MAAM,SAAS,QAAQ;AAC5B;AACA,MAAM,sBAAsB,CAAC,aAAa,QAAQ,QAAQ,MAAM,SAAS,aAAa;AACpF,SAAO,oBAAoB,aAAa,CAAC,eAAe;AACtD,WAAO,oBAAoB,YAAY,QAAQ,QAAQ,UAAU;AAAA,EACrE,GAAK,MAAM,SAAS,QAAQ;AAC5B;AACA,MAAM,iBAAiB;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY,iBAAiB,WAAW;AACtC,SAAK,mBAAmB;AACxB,SAAK,kBAAkB;AACvB,SAAK,cAAc;AACnB,SAAK,YAAY;AACjB,SAAK,aAAa;AAClB,SAAK,mBAAmB;AACxB,SAAK,oBAAoB;AAAA,EAC1B;AAAA,EACD,YAAY;AACV,WAAO,KAAK;AAAA,EACb;AAAA,EACD,iBAAiB,cAAc,cAAc,WAAW;AACtD,SAAK,cAAc;AACnB,SAAK,YAAY;AACjB,SAAK,aAAa;AAClB,SAAK,mBAAmB;AAAA,EACzB;AAAA,EACD,mBAAmB;AACjB,QAAI,CAAC,KAAK,kBAAkB;AAC1B,cAAQ,MAAM,oCAAoC;AAClD,aAAO;AAAA,IACR;AACD,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASD,WAAW,SAAS,SAAS;AAC3B,QAAI,CAAC,KAAK,iBAAiB,YAAY,GAAG;AACxC;AAAA,IACD;AACD,WAAO,KAAK,iBAAiB,SAAS,SAAS,KAAK;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASD,eAAe,SAAS,SAAS;AAC/B,QAAI,CAAC,KAAK,iBAAiB,gBAAgB,GAAG;AAC5C;AAAA,IACD;AACD,WAAO,KAAK,iBAAiB,SAAS,SAAS,IAAI;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaD,OAAO,OAAO,OAAO,QAAQ,QAAQ,cAAc,MAAM;AACvD,QAAI,CAAC,KAAK,iBAAiB,QAAQ,GAAG;AACpC;AAAA,IACD;AACD,QAAI,CAAC,UAAU,CAAC,QAAQ;AACtB,aAAO;AAAA,IACR;AACD,QAAI,UAAU,CAAA;AACd,YAAQ,KAAK,iBAAiB,cAAc,OAAO,OAAO,QAAQ,MAAM,CAAC;AACzE,YAAQ;AAAA,MACN;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,UACE,iBAAiB,gBAAiB;AAAA,UAClC,KAAK,aAAa,gBAAgB,eAAe,eAAe,WAAW,KAAK,WAAW,KAAK,IAAI;AAAA,QACrG;AAAA,QACD;AAAA,QACA,cAAc,CAAC,eAAe;AAC5B,wBAAc,WAAW,MAAM,WAAW,IAAI;AAAA,QACxD,IAAY;AAAA,MACL;AAAA,IACP;AACI,QAAI,IAAI,eAAe,eAAe,KAAK,aAAa,KAAK,WAAW,KAAK,YAAY,OAAO,OAAO;AACvG,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASD,SAAS,QAAQ,QAAQ,aAAa,iBAAiB,MAAM;AAC3D,QAAI,CAAC,KAAK,iBAAiB,UAAU,GAAG;AACtC;AAAA,IACD;AACD,QAAI,UAAU,CAAA;AACd,QAAI,MAAM,WAAW,KAAK,eAAe,GAAG;AAC1C,cAAQ,KAAK,iBAAiB,SAAS,QAAQ,MAAM,CAAC;AACtD,aAAO,eAAe,eAAe,KAAK,aAAa,KAAK,WAAW,KAAK,YAAY,OAAO,OAAO;AAAA,IAC5G,OAAW;AACL,cAAQ,KAAK,iBAAiB,SAAS,QAAQ,QAAQ,WAAW,CAAC;AACnE,cAAQ;AAAA,QACN;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,YACE,iBAAiB,SAAS,GAAG,CAAC;AAAA,YAC9B,KAAK,aAAa,gBAAgB,eAAe,eAAe,WAAW,KAAK,WAAW,KAAK,IAAI;AAAA,UACrG;AAAA,UACD;AAAA;AAAA,UAEA,iBAAiB,CAAC,eAAe;AAC/B,2BAAe,WAAW,MAAM,WAAW,IAAI;AAAA,UAC3D,IAAc;AAAA,QACL;AAAA,MACT;AACM,aAAO,eAAe,eAAe,KAAK,aAAa,KAAK,WAAW,KAAK,YAAY,OAAO,OAAO;AAAA,IACvG;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASD,gBAAgB,SAAS,SAAS,iBAAiB,MAAM,mBAAmB,MAAM;AAChF,QAAI,CAAC,KAAK,YAAY;AACpB,WAAK,aAAa,KAAK;AAAA,IACxB;AACD,QAAI,CAAC,KAAK,iBAAiB,iBAAiB,GAAG;AAC7C;AAAA,IACD;AACD,QAAI,UAAU,CAAA;AACd,YAAQ,KAAK,iBAAiB,WAAW,SAAS,OAAO,CAAC;AAC1D,YAAQ;AAAA,MACN;AAAA,QACE;AAAA,QACA,KAAK,WAAW;AAAA,QAChB,eAAe;AAAA,QACf;AAAA,QACA;AAAA,QACA,CAAC,eAAe;AACd,2BAAiB,WAAW,MAAM,WAAW,IAAI;AAAA,QAClD;AAAA,MACF;AAAA,IACP;AACI,YAAQ;AAAA,MACN;AAAA,QACE;AAAA,QACA,KAAK,WAAW;AAAA,QAChB,eAAe;AAAA,QACf;AAAA,QACA;AAAA,QACA,MAAM;AACJ;QACD;AAAA,MACF;AAAA,IACP;AACI,WAAO,eAAe,eAAe,KAAK,aAAa,KAAK,WAAW,KAAK,YAAY,OAAO,OAAO;AAAA,EACvG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASD,SAAS,MAAM,MAAM;AACnB,QAAI,CAAC,KAAK,iBAAiB,UAAU,GAAG;AACtC;AAAA,IACD;AACD,QAAI,UAAU,CAAA;AACd,YAAQ,KAAK,iBAAiB,SAAS,MAAM,IAAI,CAAC;AAClD,WAAO,eAAe,eAAe,KAAK,aAAa,KAAK,WAAW,KAAK,YAAY,OAAO,OAAO;AAAA,EACvG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASD,SAAS,QAAQ,QAAQ,YAAY,MAAM,YAAY,MAAM;AAC3D,QAAI,CAAC,KAAK,iBAAiB,UAAU,GAAG;AACtC;AAAA,IACD;AACD,QAAI,UAAU,CAAA;AACd,YAAQ,KAAK,iBAAiB,SAAS,QAAQ,MAAM,CAAC;AACtD,SAAK,kBAAkB,MAAM,SAAS,KAAK,YAAY,WAAW,SAAS;AAC3E,WAAO,eAAe,eAAe,KAAK,aAAa,KAAK,WAAW,KAAK,YAAY,OAAO,OAAO;AAAA,EACvG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaD,eAAe,MAAM,MAAM,QAAQ,QAAQ,YAAY,MAAM,YAAY,MAAM;AAC7E,QAAI,CAAC,KAAK,iBAAiB,gBAAgB,GAAG;AAC5C;AAAA,IACD;AACD,QAAI,UAAU,CAAA;AACd,YAAQ,KAAK,iBAAiB,SAAS,MAAM,IAAI,CAAC;AAClD,YAAQ,KAAK,iBAAiB,SAAS,QAAQ,MAAM,CAAC;AACtD,SAAK,kBAAkB,MAAM,SAAS,KAAK,YAAY,WAAW,SAAS;AAC3E,WAAO,eAAe,eAAe,KAAK,aAAa,KAAK,WAAW,KAAK,YAAY,OAAO,OAAO;AAAA,EACvG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,WAAW,UAAU,MAAM;AACzB,QAAI,CAAC,KAAK,iBAAiB,YAAY,GAAG;AACxC;AAAA,IACD;AACD,QAAI,UAAU,CAAA;AACd,YAAQ,KAAK,UAAU,iBAAiB,gBAAe,IAAK,iBAAiB,WAAU,CAAE;AACzF,WAAO,eAAe,eAAe,KAAK,aAAa,KAAK,WAAW,KAAK,YAAY,OAAO,OAAO;AAAA,EACvG;AAAA,EACD,kBAAkB,aAAa,SAAS,WAAW,WAAW,WAAW;AACvE,QAAI,aAAa,aAAa,WAAW;AACvC,cAAQ;AAAA,QACN;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA,CAAC,YAAY,gBAAgB,eAAe,eAAe,cAAc,UAAU,KAAK,IAAI,IAAI;AAAA,UAChG;AAAA;AAAA,UAEA,YAAY,MAAM;AAChB;UACZ,IAAc;AAAA,QACL;AAAA,MACT;AACM,cAAQ;AAAA,QACN;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA,CAAC,YAAY,gBAAgB,eAAe,eAAe,cAAc,UAAU,KAAK,IAAI,IAAI;AAAA,UAChG;AAAA;AAAA,UAEA,YAAY,MAAM;AAChB;UACZ,IAAc;AAAA,QACL;AAAA,MACT;AAAA,IACK;AAAA,EACF;AAAA,EACD,iBAAiB,UAAU;AACzB,QAAI,CAAC,KAAK,oBAAoB;AAC5B,aAAO;AAAA,IACR;AACD,SAAK,mBAAmB;AACxB,WAAO;AAAA,EACR;AAAA,EACD,iBAAiB,GAAG,GAAG,WAAW,OAAO;AACvC,QAAI,UAAU,CAAA;AACd,YAAQ,KAAK,iBAAiB,WAAW,GAAG,GAAG,QAAQ,CAAC;AACxD,QAAI,IAAI,eAAe,eAAe,KAAK,aAAa,KAAK,WAAW,KAAK,YAAY,OAAO,OAAO;AACvG,WAAO;AAAA,EACR;AACH;AAEA;AACA;AACA;AACA,MAAM,iBAAiB;AAAA,EACrB,cAAc;AAAA,EACb;AAAA;AAAA;AAAA;AAAA;AAAA,EAKD,qBAAqB;AACnB,WAAO,eAAe,iBAAiB,gBAAgB,mBAAoB,CAAA;AAAA,EAC5E;AAAA;AAAA;AAAA;AAAA;AAAA,EAKD,uBAAuB,OAAO;AAC5B,WAAO,eAAe,iBAAiB,gBAAgB,cAAc,KAAK,CAAC;AAAA,EAC5E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWD,gBAAgB,WAAW,UAAU;AACnC,WAAO,eAAe,iBAAiB,gBAAgB,gBAAgB,WAAW,QAAQ,CAAC;AAAA,EAC5F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQD,kBAAkB,WAAW,UAAU;AACrC,WAAO,eAAe,iBAAiB,gBAAgB,kBAAkB,WAAW,QAAQ,CAAC;AAAA,EAC9F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWD,YAAY,SAAS,SAAS;AAC5B,WAAO,eAAe,iBAAiB,gBAAgB,OAAO,SAAS,OAAO,CAAC;AAAA,EAChF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWD,kBAAkB,SAAS,SAAS;AAClC,WAAO,eAAe,iBAAiB,gBAAgB,aAAa,SAAS,OAAO,CAAC;AAAA,EACtF;AAAA;AAAA;AAAA;AAAA,EAID,qBAAqB;AACnB,WAAO,eAAe,iBAAiB,gBAAgB,mBAAoB,CAAA;AAAA,EAC5E;AAAA,EACD,qBAAqB;AACnB,WAAO,eAAe,iBAAiB,gBAAgB,mBAAoB,CAAA;AAAA,EAC5E;AAAA,EACD,gBAAgB,QAAQ,WAAW,kBAAkB,IAAI;AACvD,WAAO,eAAe,iBAAiB,gBAAgB,gBAAgB,QAAQ,WAAW,eAAe,CAAC;AAAA,EAC3G;AAAA;AAAA;AAAA;AAAA,EAID,eAAe,WAAW,iBAAiB;AACzC,WAAO,eAAe,iBAAiB,gBAAgB,eAAe,iBAAiB,UAAU,KAAK,CAAC;AAAA,EACxG;AACH;AAaA,MAAM,gBAAgB;AAAA,EACpB;AAAA,EACA;AAAA,EACA,cAAc;AACZ,SAAK,eAA+B,oBAAI;AACxC,SAAK,SAAS;AAAA,EACf;AAAA,EACD,YAAY,MAAM,WAAW;AAC3B,QAAI,KAAK,KAAK,KAAK;AACnB,SAAK,aAAa,IAAI,IAAI;AAAA,MACxB,SAAS;AAAA;AAAA,MAET,OAAO;AAAA;AAAA,MAEP,MAAM,CAAC;AAAA;AAAA,IAEb,CAAK;AACD,WAAO;AAAA,EACR;AAAA,EACD,gBAAgB;AACd,SAAK,eAA+B,oBAAI;EACzC;AAAA,EACD,WAAW,KAAK;AACd,QAAI,KAAK;AACP,eAAS,OAAO,KAAK,aAAa,KAAI,GAAI;AACxC,iBAAS,MAAM,KAAK;AAClB,cAAI,OAAO,KAAK;AACd,iBAAK,aAAa,OAAO,EAAE;AAAA,UAC5B;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACD,eAAe,IAAI,YAAY;AAC7B,QAAI,cAAc,KAAK,aAAa,IAAI,EAAE;AAC1C,QAAI,aAAa;AACf,UAAI,YAAY,MAAM;AACpB,aAAK,aAAa,OAAO,EAAE;AAAA,MACnC,OAAa;AACL,oBAAY;AAAA,MACb;AACD,UAAI;AACF,oBAAY,UAAU,UAAU;AAAA,MACjC,SAAQ,GAAP;AACA,gBAAQ,MAAM,yBAAyB,CAAC;AAAA,MACzC;AAAA,IACF;AAAA,EACF;AAAA,EACD,iBAAiB,MAAM;AACrB,QAAI,YAAY,KAAK,YAAY,MAAM,IAAI;AAC3C,WAAO,gBAAgB,SAAS,SAAS;AAAA,EAC1C;AACH;AAEA;AACA;AACA;AACA,IAAI,cAAc;AAClB,MAAM,UAAU;AAAA,EACd;AAAA,EACA,cAAc;AACZ,mBAAe,cAAc,IAAI,cAAc,aAAa;AAC5D,SAAK,QAAQ;AAAA,EACd;AACH;AACA,SAAS,WAAW;AAClB,SAAO,IAAI,UAAS;AACtB;AAEA;AACA;AACA;AACA,MAAM,aAAa;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AACZ,SAAK,YAAY;AACjB,SAAK,YAAY;AACjB,SAAK,aAAa,IAAI;AACtB,SAAK,iBAAiB;AACtB,SAAK,mCAAmC,IAAI,qBAAqB,KAAK,YAAY,KAAK,cAAc;AACrG,SAAK,gCAAgC,IAAI,iBAAiB,KAAK,YAAY,KAAK,cAAc;AAC9F,SAAK,oBAAoB,IAAI;EAC9B;AAAA,EACD,cAAc,UAAU,eAAe;AACrC,SAAK,YAAY;AACjB,QAAI,eAAe;AACjB,WAAK,YAAW;AAAA,IACjB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,IAAI,aAAa;AACf,QAAI,OAAO,QAAQ;AACjB,WAAK,YAAY,WAAW;AAAA,IAClC,OAAW;AACL,UAAI,OAAO;AACX,WAAK,UAAU,qBAAqB,MAAM;AACxC,aAAK,YAAY,WAAW;AAAA,MACpC,CAAO;AAAA,IACF;AAAA,EACF;AAAA,EACD,YAAY,aAAa;AACvB,SAAK,YAAW;AAChB,QAAI,EAAE,uBAAuB,QAAQ;AACnC,cAAQ,MAAM,cAAc;AAC5B;AAAA,IACD;AACD,wBAAoB,KAAK,WAAW,WAAW;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYD,UAAU,QAAQ,GAAG,aAAa,OAAO,WAAW,MAAM,mBAAmB,OAAO;AAClF,QAAI,UAAU,KAAK;AACnB,QAAI,QAAQ,aAAa;AACvB,gBAAU,IAAI,qBAAqB,KAAK,YAAY,KAAK,cAAc;AAAA,IACxE;AACD,YAAQ,kBAAkB,OAAO,YAAY,UAAU,gBAAgB;AACvE,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBD,OAAO,eAAe,GAAG,aAAa,GAAG,YAAY,MAAM;AACzD,QAAI,UAAU,KAAK;AACnB,QAAI,QAAQ,aAAa;AACvB,gBAAU,IAAI,iBAAiB,KAAK,YAAY,KAAK,cAAc;AAAA,IACpE;AACD,YAAQ,iBAAiB,cAAc,YAAY,SAAS;AAC5D,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQD,QAAQ;AACN,WAAO,KAAK;AAAA,EACb;AAAA,EACD,aAAa,SAAS;AACpB,QAAI,gBAAgB,KAAK,MAAM,OAAO;AACtC,QAAI,cAAc,cAAc,SAAS;AACzC,QAAI,aAAa;AACf,eAAS,WAAW,aAAa;AAC/B,YAAI,gBAAgB,QAAQ,OAAO;AACnC,YAAI,iBAAiB,GAAG;AACtB,4BAAkB,aAAa;AAAA,QAChC;AACD,aAAK,WAAW,eAAe,QAAQ,MAAM,GAAG,aAAa;AAAA,MAC9D;AAAA,IACF;AAAA,EACF;AAAA,EACD,cAAc;AACZ,QAAI,CAAC,KAAK,WAAW;AACnB,WAAK,YAAY,IAAI,kBAAkB,KAAK,aAAa,KAAK,IAAI,GAAG,KAAK,eAAe,KAAK;AAC9F,WAAK,UAAU,eAAe,KAAK,SAAS;AAAA,IAC7C;AAAA,EACF;AACH;AAEA;AACA;AACA;AACA,MAAM,QAAQ;AACd,MAAM,oBAAoB,SAAS,gBAAgB,WAAW,sBAAsB,aAAa,MAAM;AACrG,MAAI;AACJ,MAAI;AACJ,MAAI,cAAc,UAAU;AAC1B,eAAW,eAAe;AAC1B,gBAAY,eAAe;AAAA,EAC/B,OAAS;AACL,eAAW,eAAe;AAC1B,gBAAY,eAAe;AAAA,EAC5B;AACD,MAAI;AACJ,UAAQ,MAAI;AAAA,IACV,KAAK;AACH,oBAAc,IAAI;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACR;AACM;AAAA,IACF;AACE,oBAAc,IAAI;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACR;AACM;AAAA,EACH;AACD,SAAO;AACT;AACA,MAAM,aAAa;AACnB,MAAM,aAAa;AACnB,MAAM,QAAQ,CAAC,OAAO,YAAY,WAAW,YAAY,UAAU,cAAc,aAAa,WAAW,iBAAiB,UAAU,cAAc,iBAAiB;AACjK,MAAI,MAAM,YAAY;AACpB,YAAQ,MAAM,OAAO,0CAA0C;AAAA,EAChE;AACD,MAAI,iBAAiB,IAAI,eAAe,MAAM,OAAO,MAAM,QAAQ,MAAM,OAAO;AAChF,MAAI,gBAAgB;AAAA,IAClB;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN;AAAA,EACJ;AACE,QAAM,aAAa;AAAA,IACjB,MAAM;AAAA,IACN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,EACX;AACE,QAAM,gBAAgB,IAAI,UAAU;AACpC,QAAM,OAAO;AAAA,IACX,OAAO;AAAA,IACP,aAAa,WAAW;AAAA,IACxB,cAAc;AAAA,IACd,cAAc;AAAA,IACd,aAAa;AACX,WAAK,QAAQ;AACb,oBAAc,QAAQ;AACtB,WAAK,cAAc,WAAW;AAAA,IAC/B;AAAA,IACD,WAAW;AACT,WAAK,cAAc,WAAW;AAAA,IAC/B;AAAA,IACD,aAAa;AACX,WAAK,cAAc,WAAW;AAAA,IAC/B;AAAA,IACD,WAAW;AAAA,IACV;AAAA,IACD,YAAY;AACV,WAAK,cAAc,WAAW;AAAA,IAC/B;AAAA,IACD,UAAU;AAAA,IACT;AAAA,IACD,UAAU;AACR,WAAK,QAAQ;AACb,oBAAc,QAAQ;AACtB,WAAK,cAAc,WAAW;AAAA,IAC/B;AAAA,IACD,cAAc;AACZ,aAAO,KAAK,eAAe,WAAW;AAAA,IACvC;AAAA,IACD,cAAc;AACZ,aAAO,KAAK,eAAe,WAAW;AAAA,IACvC;AAAA,IACD,UAAU;AACR,aAAO,KAAK;AAAA,IACb;AAAA,IACD,gBAAgB;AACd,aAAO,KAAK;AAAA,IACb;AAAA,EACL;AACE,MAAI,YAAY,CAAA;AAChB,MAAI,WAAW,CAAA;AACf,MAAI,cAAc;AAClB,MAAI,eAAe;AACnB,MAAI,iBAAiB;AACrB,MAAI,UAAU;AACd,MAAI,aAAa;AACjB,MAAI,cAAc;AAClB,MAAI,UAAU;AACd,MAAI,WAAW,MAAM,aAAa;AAClC,MAAI,qBAAqB;AACzB,MAAI,oBAAoB;AACxB,MAAI,oBAAoB,CAAA;AAExB,MAAI,YAAY,WAAW,MAAM,SAAS,MAAM;AAChD,MAAI,YAAY;AAChB,MAAI,sBAAsB;AAC1B,MAAI,gBAAgB;AACpB,MAAI,cAAc,IAAI;AACtB,MAAI,oBAAoB;AACxB,MAAI,uBAAuB;AAC3B,QAAM,oBAAoB,IAAI,CAAC;AAE/B,QAAM,gBAAgB,CAAC,SAAS;AAC9B,QAAI,UAAU,WAAW,QAAQ;AACjC,QAAI,WAAW,WAAW,WAAW;AACrC,WAAO,KAAK,aAAa,OAAO,KAAK,YAAY,SAAS,KAAK,aAAa,OAAO,IAAI,KAAK,aAAa,QAAQ,IAAI,IAAI,YAAY;AAAA,EACzI;AACE,QAAM,mBAAmB,IAAI;AAC7B,QAAM,iBAAiB,CAAC,aAAa;AACnC,QAAI,aAAa,CAAA;AACjB,QAAI,gBAAgB,CAAA;AACpB,QAAI,YAAY;AAChB,QAAI,WAAW;AACf,QAAI,YAAY;AAChB,QAAI,cAAc;AAClB,QAAI,aAAa;AACjB,QAAI,WAAW;AACf,QAAI,SAAS;AACb,QAAI,UAAU,WAAW,QAAQ;AACjC,QAAI,WAAW,WAAW,WAAW;AACrC,QAAI,SAAS;AACb,QAAI,qBAAqB;AACzB,QAAI,qBAAqB,YAAY;AACrC,aAAS,QAAQ,CAAC,MAAM;AACtB,UAAI,EAAE,QAAQ,SAAS,OAAO;AAC5B,oBAAY;AACZ,sBAAc,EAAE;AAChB,YAAI,CAAC,MAAM,EAAE,QAAQ,MAAM,GAAG;AAC5B,+BAAqB,CAAC,EAAE,OAAO;AAAA,QAChC;AAAA,MACF;AAAA,IACP,CAAK;AACD,aAAS,QAAQ,UAAU;AACzB,UAAI,KAAK,QAAQ,SAAS,aAAa;AACrC,sBAAc,KAAK,OAAO,KAAK,IAAI;AACnC,mBAAW,KAAK,IAAI;AACpB,cAAM,EAAE,OAAO,aAAa,KAAK;AACjC,iBAAS,UAAU,CAAC,CAAC;AACrB,mBAAW,KAAK,IAAI,UAAU,KAAK;AACnC,mBAAW,KAAK,OAAO,UAAU,YAAY;AAC7C,iBAAS,KAAK,OAAO,UAAU,UAAU;AACzC,YAAI,SAAS,SAAS,OAAO,KAAK,OAAO,UAAU,UAAU,aAAa;AACxE,gBAAM,OAAO,eAAe,KAAK;AACjC,uBAAa;AAAA,YACX,gBAAgB,KAAK,aAAa,OAAO,IAAI,KAAK,aAAa,QAAQ,IAAI,SAAS,SAAS,IAAI;AAAA,YACjG,QAAQ,SAAS;AAAA,UAC7B;AAAA,QACS;AAAA,MACF,WAAU,KAAK,QAAQ,SAAS,iBAAiB;AAChD,6BAAqB;AAAA,MACtB;AAAA,IACF;AACD,QAAI,WAAW;AACb,kBAAY;AAAA,QACV,QAAQ,UAAU,OAAO;AAAA,QACzB,SAAS,UAAU,OAAO;AAAA,MAClC;AAAA,IACK;AACD,QAAI,kBAAkB;AACtB,QAAI,WAAW,SAAS,GAAG;AACzB,wBAAkB;AAClB,oBAAc,YAAY,UAAU,WAAW,EAAE;AACjD,iBAAW,QAAQ,CAAC,SAAS;AAC3B,sBAAc,eAAe,KAAK,OAAO,OAAO;AAAA,UAC9C,OAAO,KAAK,OAAO;AAAA,UACnB,QAAQ,KAAK,OAAO;AAAA,QAC9B,CAAS;AAAA,MACT,CAAO;AACD,UAAI,kBAAkB;AACtB,UAAI,YAAY;AACd,cAAM,YAAY,YAAY,OAAO;AACrC,cAAM,QAAQ,UAAU,aAAa,OAAO,IAAI,UAAU,aAAa,QAAQ,IAAI,WAAW,SAAS,IAAI,WAAW;AACtH,6BAAqB,sBAAsB,OAAO,UAAU,YAAY;AAAA,MAChF,OAAa;AACL,6BAAqB,uBAAuB,YAAY,OAAO,EAAE,cAAc,iBAAiB;AAAA,MACjG;AACD,UAAI,mBAAmB,oBAAoB;AACzC,oBAAY;AAAA,UACV,QAAQ,CAAC;AAAA,QACnB;AACQ,YAAI,QAAQ;AACV,oBAAU,UAAU;AAAA,YAClB,QAAQ;AAAA,YACR,SAAS;AAAA,YACT,OAAO;AAAA,YACP;AAAA,YACA,OAAO,CAAC,aAAa;AAAA,YACpB;AAAA,UACb;AACU,wBAAc;AAAA,QACxB,OAAe;AACL,cAAI,WAAW;AACb,sBAAU,UAAU,UAAU,QAAQ;AAAA,UAClD,OAAiB;AACL,0BAAc;AACd,sBAAU,UAAU;AAAA;AAAA,cAElB,QAAQ;AAAA,cACR,SAAS;AAAA,cACT,OAAO;AAAA,cACP,OAAO,MAAM,aAAa;AAAA,cAC1B,UAAU,MAAM,aAAa;AAAA,YAC3C;AAAA,UACW;AAAA,QACF;AAAA,MACF;AACD,kBAAY,QAAQ;AACpB,YAAM,UAAU,YAAY;AAAA,QAC1B;AAAA,QACA,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACR;AACM,cAAQ,SAAQ;AAChB,UAAI,QAAQ;AACV,cAAM,mBAAmB,MAAM,KAAK,YAAY,YAAa,CAAA;AAC7D,iBAAS,SAAS,kBAAkB;AAClC,gBAAM,aAAa,eAAe,KAAK;AACvC,gBAAM,EAAE,MAAM,QAAQ,WAAW;AACjC,cAAI,SAAS,UAAU;AACrB,kBAAM,cAAc,WAAW,aAAa;AAC5C,gBAAI,WAAW,QAAQ,OAAO;AAC5B,+BAAiB;AAAA,gBACf,WAAW;AAAA,gBACX,CAAC,YAAY,OAAO,MAAM,YAAY,MAAM,GAAG;AAAA,gBAC/C,CAAC,GAAG,CAAC;AAAA,gBACL,cAAc,KAAK,IAAI,cAAc,KAAK,EAAE,OAAO,WAAW,EAAE,SAAU;AAAA,cAC1F;AAAA,YACA,OAAmB;AACL,yBAAW,sBAAsB,CAAC,QAAQ;AACxC,iCAAiB;AAAA,kBACf;AAAA,kBACA,CAAC,YAAY,OAAO,MAAM,YAAY,MAAM,GAAG;AAAA,kBAC/C,CAAC,GAAG,CAAC;AAAA,kBACL,cAAc,KAAK,IAAI,cAAc,KAAK,EAAE,OAAO,WAAW,EAAE,SAAU;AAAA,gBAC5F;AAAA,cACA,CAAe;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACD,QAAI,WAAW;AACf,QAAI,WAAW;AACb,YAAM,SAAS,UAAU;AACzB,iBAAW,aAAa,QAAQ,WAAW,WAAW;AAAA,IACvD;AACD,QAAI,iBAAiB;AACnB,YAAM,sBAAmB;AAAA,IAC1B;AACD,QAAI,YAAY,oBAAoB;AAClC,YAAM,oBAAiB;AAAA,IACxB;AAAA,EACL;AACE,QAAM,eAAe,CAAC,QAAQ,WAAW,gBAAgB;AACvD,QAAI,UAAU,aAAa;AAC3B,QAAI,SAAS,YAAY;AACzB,iBAAa,QAAQ,WAAW,IAAI;AACpC,gBAAY,QAAQ,WAAW,SAAS;AACxC,QAAI,WAAW,WAAW,aAAa,SAAS,UAAU,YAAY;AACtE,gBAAY,QAAQ,CAAC;AACrB,UAAM,WAAW,YAAY;AAAA,MAC3B;AAAA,MACA,YAAY,mBAAmB,MAAM,iBAAiB;AAAA,MACtD,KAAK;AAAA,QACH,YAAY,WAAW,YAAY,QAAQ,YAAY,QAAQ,MAAM;AAAA,QACrE,YAAY,iBAAiB,MAAM,iBAAiB;AAAA,MACrD;AAAA,MACD;AAAA,MACA,aAAa,YAAY;AAAA,MACzB;AAAA,IACN;AACI,QAAI,UAAU,SAAS;AACrB,eAAS,SAAQ;AACjB,uBAAiB;AAAA,QACf,SAAS;AAAA,QACT,WAAW,CAAC,GAAG,SAAS,YAAY,KAAK,IAAI,CAAC,UAAU,aAAa,OAAO,CAAC;AAAA,QAC7E,CAAC,GAAG,CAAC;AAAA,QACL;AAAA,UACE,GAAG,UAAU;AAAA,UACb,OAAO,MAAM;AACX,qBAAS,MAAK;AAAA,UACf;AAAA,QACF;AAAA,MACT;AAAA,IACA,OAAW;AACL,eAAS,MAAK;AAAA,IACf;AACD;AACA,WAAO;AAAA,EACX;AACE,QAAM,sBAAsB,CAAC,SAAS;AACpC,QAAI,MAAM;AACR,WAAK,QAAQ,CAAC,SAAS;AACrB,YAAI,KAAK,QAAQ,SAAS,aAAa;AACrC,wBAAc,eAAe,KAAK,OAAO,OAAO;AAAA,YAC9C,OAAO,KAAK,OAAO;AAAA,YACnB,QAAQ,KAAK,OAAO;AAAA,UAChC,CAAW;AAAA,QACF;AAAA,MACT,CAAO;AAAA,IACF;AAAA,EACL;AACE,QAAM,sBAAsB,IAAI,oBAAoB,gBAAgB,mBAAmB;AACvF,QAAM,iBAAiB,CAAC,OAAO,SAAS,aAAa;AACnD,wBAAoB;AAAA,MAClB,SAAS;AAAA,MACT;AAAA,QACE;AAAA,QACA,OAAO,QAAQ;AAAA,QACf,QAAQ,QAAQ;AAAA,QAChB;AAAA,MACD;AAAA,IACP;AAAA,EACA;AACE,QAAM,WAAW,CAAC,QAAQ,SAAS,cAAc,EAAE,UAAU,YAAY;AACvE,QAAI,WAAW;AACb;AAAA,IACD;AAED,wBAAoB,QAAQ,SAAS,OAAO,EAAE,QAAQ,CAAC,QAAQ,SAAS,YAAW,CAAE;AAAA,EACzF;AACE,MAAI,uBAAuB;AAC3B,QAAM,iBAAiB,CAAC,OAAO;AAC7B,UAAM,gBAAgB,EAAE;AAAA,EAC5B;AACE,QAAM,gBAAgB,MAAM;AAC1B,WAAO;AAAA,MACL,IAAI;AAAA,MACJ,OAAO,SAAS,OAAO;AAAA,IAC7B;AAAA,EACA;AACE,QAAM,eAAe,CAAC,UAAU;AAC9B,QAAI,eAAe,eAAe,KAAK,EAAE;AACzC,QAAI,WAAW,WAAW,IAAI,CAAC,YAAY;AAC3C,QAAI,WAAW,WAAW,CAAC,YAAY,QAAQ;AAC/C,WAAO;AAAA,MACL,MAAM,aAAa,OAAO;AAAA,MAC1B,KAAK,aAAa,MAAM;AAAA,MACxB,OAAO,aAAa;AAAA,MACpB,QAAQ,aAAa;AAAA,IAC3B;AAAA,EACA;AACE,QAAM,uBAAuB,CAAC,UAAU;AACtC,QAAI,eAAe,eAAe,KAAK,EAAE;AACzC,WAAO;AAAA,MACL,MAAM,aAAa;AAAA,MACnB,KAAK,aAAa;AAAA,MAClB,OAAO,aAAa;AAAA,MACpB,QAAQ,aAAa;AAAA,IAC3B;AAAA,EACA;AACE,QAAM,WAAW,CAAC,OAAO;AACvB,WAAO,cAAc,SAAS,EAAE;AAAA,EACpC;AACE,QAAM,WAAW,CAAC,UAAU;AAC1B,WAAO,cAAc,SAAS,KAAK;AAAA,EACvC;AACE,QAAM,iBAAiB,CAAC,UAAU;AAChC,WAAO,UAAU,KAAK;AAAA,EAC1B;AACE,QAAM,cAAc,CAAC,OAAO;AAC1B,WAAO,UAAU,SAAS,EAAE,CAAC;AAAA,EACjC;AACE,QAAM,cAAc,CAAC,UAAU,YAAY,YAAY,aAAa;AAClE,UAAM,WAAW,cAAc;AAAA,MAC7B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACN;AACI,QAAI,UAAU;AACZ,aAAO,UAAU,SAAS,KAAK;AAAA,IACrC,OAAW;AACL,aAAO;AAAA,IACR;AAAA,EACL;AACE,QAAM,gBAAgB,CAAC,MAAM,SAAS,aAAa;AACjD,QAAI,MAAM;AACR,UAAI,IAAI;AACR,UAAI,YAAY,KAAK,WAAW,eAAe,GAAG;AAChD,YAAI,KAAK,WAAW;AAAA,MACrB,WAAU,KAAK,WAAW,gBAAgB,GAAG;AAC5C,YAAI,KAAK,WAAW;AAAA,MACrB;AACD,WAAK,YAAY,SAAS;AAAA,IAC3B;AAAA,EACL;AACE,QAAM,cAAc,CAAC,SAAS;AAC5B,QAAI,CAAC,MAAM;AACT;AAAA,IACD;AAED,QAAI,SAAS;AACX,WAAK,QAAO;AAAA,IACb;AAAA,EACL;AACE,QAAM,aAAa,CAAC,aAAa;AAC/B,QAAI,CAAC;AACH;AACF,kBAAc,UAAU,GAAG,KAAK;AAChC,QAAI,SAAS;AACX,eAAS,OAAM;AAAA,IAChB;AAAA,EACL;AACE,QAAM,cAAc,CAAC,WAAW,SAAS;AACvC,QAAI,CAAC,aAAa,KAAK,QAAS,KAAI;AAClC;AACF,kBAAc,WAAW,UAAU,QAAQ,IAAI;AAC/C,QAAI,SAAS;AACX,6BAAuB,WAAW,IAAI;AACtC,YAAM,SAAS,UAAU,QAAQ,IAAI;AACrC,UAAI,CAAC,QAAQ;AACX,+BAAuB;AAAA,MACxB;AACD,aAAO;AAAA,IACR;AACD,WAAO;AAAA,EACX;AACE,QAAM,gBAAgB,CAAC,KAAK,YAAY,MAAM,SAAS,OAAO,iBAAiB;AAC7E,QAAI,CAAC,KAAK;AACR;AAAA,IACD;AACD,sBAAkB,gBAAgB,GAAG;AACrC,UAAM,OAAO,cAAc,aAAa,GAAG;AAC3C,QAAI,CAAC,MAAM;AACT,cAAQ,KAAK,OAAO,6BAA6B,gBAAgB;AACjE;AAAA,IACD;AACD,eAAW,KAAK,IAAI,WAAW,QAAQ,YAAY;AAAA,EACvD;AACE,QAAM,aAAa,CAAC,IAAI,YAAY,MAAM,SAAS,OAAO,iBAAiB;AACzE,QAAI,MAAM,SAAS;AACjB;AAAA,IACD;AACD,sBAAkB,eAAe,EAAE;AACnC,QAAI,kBAAkB,YAAY,EAAE;AACpC,QAAI,iBAAiB;AACnB,YAAM,mBAAmB,gBAAgB;AACzC,qBAAe,iBAAiB,EAAE;AAClC,YAAM,eAAe,YAAY,UAAU;AAC3C,iBAAW,YAAY;AACvB,kBAAY,iBAAiB,WAAW;AACxC,UAAI,WAAW;AACb,oBAAY,SAAS,EAAE,GAAG,MAAM;AAAA,MACjC;AACD,UAAI,UAAU;AACd,UAAI,cAAc;AAChB,YAAI,aAAa,qBAAqB;AACpC,oBAAU,KAAK,aAAa,iBAAiB;AAAA,QAC9C;AAAA,MACF;AACD,YAAM,kBAAkB,YAAY,OAAO,EAAE;AAC7C,UAAI,YAAY,gBAAgB,OAAO,iBAAiB;AACxD,UAAI,YAAY,gBAAgB,MAAM,iBAAiB;AACvD,oBAAc;AAAA,QACZ,WAAW;AAAA,QACX,MAAM;AAAA,UACJ,GAAG;AAAA,UACH,GAAG;AAAA,UACH,OAAO,gBAAgB;AAAA,UACvB,QAAQ,gBAAgB;AAAA,QACzB;AAAA,MACT;AACM;IACD;AAAA,EACL;AACE,QAAM,OAAO,CAAC,SAAS;AACrB,UAAM,WAAW,CAAA;AACjB,QAAI,OAAO,aAAa,OAAO;AAC7B,kBAAY;AACZ,eAAS,KAAK,MAAM;AAClB,oBAAY;AAAA,MACpB,CAAO;AAAA,IACF;AACD,QAAI,OAAO,aAAa,mBAAmB;AACzC,4BAAsB;AACtB,eAAS,KAAK,MAAM;AAClB,8BAAsB;AAAA,MAC9B,CAAO;AAAA,IACF;AACD,QAAI,OAAO,aAAa,aAAa;AACnC,sBAAgB;AAChB,eAAS,KAAK,MAAM;AAClB,wBAAgB;AAAA,MACxB,CAAO;AAAA,IACF;AACD,WAAO,MAAM;AACX,eAAS,IAAI,CAAC,SAAS;AACrB;MACR,CAAO;AAAA,IACP;AAAA,EACA;AACE,QAAM,SAAS,CAAC,SAAS;AACvB,QAAI,OAAO,aAAa,OAAO;AAC7B,kBAAY;AAAA,IACb;AACD,QAAI,OAAO,aAAa,mBAAmB;AACzC,4BAAsB;AAAA,IACvB;AACD,QAAI,OAAO,aAAa,aAAa;AACnC,sBAAgB;AAAA,IACjB;AAAA,EACL;AACE,QAAM,mBAAmB,MAAM;AAC7B,WAAO,MAAM,UAAU,KAAK;AAAA,EAChC;AACE,QAAM,kBAAkB,CAAC,OAAO;AAC9B,sBAAkB,eAAe,EAAE;AACnC,mBAAe;AAAA,EACnB;AACE,QAAM,oBAAoB,CAAC,SAAS;AAClC,qBAAiB;AAAA,EACrB;AACE,QAAM,UAAU,CAAC,UAAU,WAAW;AACpC,sBAAkB,qBAAqB,QAAQ;AAC/C,QAAI,OAAO,aAAa,eAAe,YAAY,QAAQ,YAAY,UAAU,UAAU;AACzF,UAAI,UAAU;AACd,UAAI,QAAQ;AACV,kBAAU;AAAA,UACR,QAAQ,MAAM,aAAa;AAAA,UAC3B,SAAS;AAAA,UACT,OAAO,MAAM,aAAa;AAAA,UAC1B,UAAU,MAAM,aAAa;AAAA,QACvC;AAAA,MACO;AACD,eAAS,UAAU,OAAO;AAAA,IAC3B;AAAA,EACL;AACE,QAAM,YAAY,CAAC,OAAO,cAAc,gBAAgB;AACtD,UAAM,aAAa,eAAe,KAAK;AACvC,QAAI,YAAY;AACd,YAAM,IAAI,cAAc,IAAI,eAAe;AAC3C,iBAAW,WAAW,cAAc;AACpC,iBAAW,WAAW,eAAe;AACrC,YAAM,UAAU,WAAW,WAAW,SAAS,KAAK;AACpD,oBAAc,YAAY,UAAU,IAAI,GAAG,OAAO;AAAA,IACnD;AAAA,EACL;AACE,QAAM,cAAc,CAAC,OAAO,WAAW;AACrC,sBAAkB,kBAAkB,KAAK;AACzC,UAAM,aAAa,eAAe,KAAK;AACvC,QAAI,YAAY;AACd,YAAM,YAAY,QAAQ,sBAAsB,IAAI,IAAI;AACxD,YAAM,gBAAgB,uBAAuB,WAAW,cAAc,SAAS;AAC/E,cAAQ,eAAe,MAAM;AAAA,IAC9B;AAAA,EACL;AACE,QAAM,aAAa,CAAC,KAAK,WAAW;AAClC,QAAI,KAAK;AACP,YAAM,cAAc,IAAI,uBAAuB,MAAM,UAAU,KAAK,CAAC;AACrE,YAAM,YAAY;AAClB,UAAI,WAAW;AAAA,QACb,cAAc;AAAA,UACZ,MAAM,YAAY;AAAA,UAClB,KAAK,YAAY;AAAA,UACjB,OAAO,YAAY;AAAA,UACnB,QAAQ,YAAY;AAAA,UACpB,YAAY,KAAK,MAAM,YAAY,MAAM,YAAY,SAAS,CAAC;AAAA,UAC/D,YAAY,KAAK,MAAM,YAAY,OAAO,YAAY,QAAQ,CAAC;AAAA,UAC/D,OAAO,SAAS,OAAO;AAAA,QACxB;AAAA,MACT;AACM,UAAI,YAAY,uBAAuB,SAAS,cAAc,SAAS;AACvE,UAAI,aAAa,YAAY,OAAO;AAClC,iBAAS,WAAW,SAAS;AAAA,UAC3B,QAAQ;AAAA,UACR,SAAS;AAAA,UACT,OAAO,MAAM,aAAa;AAAA,UAC1B,UAAU,MAAM,aAAa;AAAA,UAC7B,OAAO;AAAA,QACR,IAAG,IAAI;AAAA,MACT;AAAA,IACF;AAAA,EACL;AACE,QAAM,cAAc,CAAC,iBAAiB;AACpC,QAAI,CAAC,MAAM,aAAa;AACtB,cAAQ,MAAM,mCAAmC;AACjD;AAAA,IACD;AACD,QAAI,gBAAgB;AACpB,QAAI,cAAc,SAAS,GAAG;AAC5B,sBAAgB;AAAA,IACjB;AACD,QAAI,WAAW,MAAM,MAAM,YAAa,CAAA;AACxC,QAAI,WAAW,SAAS,QAAQ;AAC9B,qBAAe,SAAS,SAAS,GAAG,KAAK;AAAA,IAC1C;AACD,QAAI,YAAY;AAChB,QAAI,CAAC,eAAe;AAClB,WAAK,YAAY,GAAG,YAAY,SAAS,QAAQ,EAAE,WAAW;AAC5D,YAAI,cAAc;AAClB,iBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,EAAE,GAAG;AACzC,cAAI,SAAS,SAAS,MAAM,UAAU,CAAC,EAAE,cAAc;AACrD,0BAAc;AACd;AAAA,UACD;AAAA,QACF;AACD,YAAI,CAAC,aAAa;AAChB;AAAA,QACD;AAAA,MACF;AAAA,IACF;AACD,QAAI,sBAAsB;AAC1B,QAAI,CAAC,iBAAiB,cAAc,cAAc,MAAM;AACtD,UAAI,cAAc,SAAS,QAAQ;AACjC,8BAAsB;AACtB,0BAAkB,WAAW,QAAQ;AAAA,MAEtC;AAAA,IACP,OAAW;AACL,sBAAgB;AAChB,0BAAoB,CAAA;AACpB,4BAAsB;AACtB,sBAAgB;AAAA,QACd;AAAA,QACA,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN;AAAA,MACR;AACM,kBAAY,CAAA;AACZ,iBAAW;AACX,0BAAoB,IAAI;AAAA,QACtB;AAAA,QACA;AAAA,QACA,MAAM;AAAA,QACN;AAAA,QACA;AAAA,QACA,MAAM;AAAA,QACN;AAAA,MACR;AAAA,IACK;AACD,QAAI,qBAAqB;AACvB,UAAI,MAAM,UAAU;AAClB,0BAAkB,kBAAkB,SAAS,SAAS,CAAC;AAAA,MAC/D,OAAa;AACL,0BAAkB,eAAe,OAAO;AAAA,MACzC;AAAA,IACF;AACD,UAAM,WAAW,YAAY;AAAA,MAC3B;AAAA,MACA,YAAY,mBAAmB,MAAM,iBAAiB;AAAA,MACtD,KAAK;AAAA,QACH,YAAY,WAAW,YAAY,QAAQ,YAAY,QAAQ,MAAM;AAAA,QACrE,YAAY,iBAAiB,MAAM,iBAAiB;AAAA,MACrD;AAAA,MACD;AAAA,MACA;AAAA,MACA;AAAA,IACN;AACI,aAAS,MAAK;AACd,gBAAY,YAAY,OAAO,GAAG,IAAI;AACtC,gBAAY,SAAS,OAAO,GAAG,KAAK;AAAA,EACxC;AACE,QAAM,kBAAkB,MAAM;AAC5B,UAAM,CAAC,cAAc,UAAU,IAAI,cAAc;AAAA,MAC/C,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ;AAAA,IACN;AACI,WAAO;AAAA,MACL,OAAO;AAAA,MACP,KAAK;AAAA,MACL,UAAU,SAAS,MAAM,cAAc,aAAa,CAAC;AAAA,IAC3D;AAAA,EACA;AACE,QAAM,YAAY,CAAC,cAAc;AAC/B,QAAI,aAAa,UAAU,aAAa,MAAM,aAAa,cAAc,MAAM;AAC7E,kBAAY,IAAI,CAAC;AAAA,IACvB,WAAe,aAAa,WAAW,aAAa,MAAM,aAAa,cAAc,OAAO;AACtF,kBAAY,GAAG,CAAC;AAAA,IACtB,WAAe,aAAa,SAAS,aAAa,MAAM,aAAa,cAAc,KAAK;AAClF,kBAAY,GAAG,EAAE;AAAA,IACvB,WAAe,aAAa,YAAY,aAAa,MAAM,aAAa,cAAc,QAAQ;AACxF,kBAAY,GAAG,CAAC;AAAA,IACtB,OAAW;AACL,cAAQ,MAAM,OAAO,mCAAmC,SAAS;AAAA,IAClE;AAAA,EACL;AACE,QAAM,sBAAsB,MAAM;AAChC,WAAO,SAAS;AAAA,EACpB;AACE,QAAM,uBAAuB,MAAM;AACjC,WAAO,SAAS,OAAO;AAAA,EAC3B;AACE,QAAM,aAAa,MAAM;AACvB,WAAO,KAAK;EAChB;AACE,QAAM,sBAAsB,CAAC,UAAU;AACrC,WAAO,qBAAqB,KAAK;AAAA,EACrC;AACE,QAAM,YAAY,MAAM;AACtB,gBAAY;AAAA,EAChB;AACE,QAAM,cAAc,MAAM;AACxB,gBAAY;AAAA,EAChB;AACE,QAAM,eAAe;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AACE,QAAM,8BAA8B,CAAC,YAAY,oBAAoB;AACnE,QAAI,iBAAiB,gBAAgB;AACrC,QAAI,OAAO,gBAAgB;AAC3B,QAAI,YAAY;AAChB,QAAI,QAAQ,EAAE,GAAG,GAAG,GAAG,EAAC;AACxB,YAAQ,gBAAc;AAAA,MACpB,KAAK,cAAc;AACjB,oBAAY;AACZ,cAAM,IAAI,KAAK;AACf,cAAM,IAAI,KAAK,IAAI,KAAK,SAAS;AACjC;AAAA,MACF,KAAK,cAAc;AACjB,oBAAY;AACZ,cAAM,IAAI,KAAK,IAAI,KAAK;AACxB,cAAM,IAAI,KAAK,IAAI,KAAK,SAAS;AACjC;AAAA,MACF,KAAK,cAAc;AACjB,oBAAY;AACZ,cAAM,IAAI,KAAK,IAAI,KAAK,QAAQ;AAChC,cAAM,IAAI,KAAK;AACf;AAAA,MACF,KAAK,cAAc;AACjB,oBAAY;AACZ,cAAM,IAAI,KAAK,IAAI,KAAK,QAAQ;AAChC,cAAM,IAAI,KAAK,IAAI,KAAK;AACxB;AAAA,IAGH;AACD,QAAI,cAAc,IAAI,iBAAiB,MAAM,GAAG,MAAM,CAAC;AACvD,QAAI,cAAc,IAAI,iBAAiB,MAAM,GAAG,MAAM,CAAC;AACvD,QAAI,oBAAoB;AACxB,QAAI,eAAe;AACnB,QAAI,yBAAyB;AAC7B,QAAI,WAAW;AACf,QAAI,qBAAqB;AACzB,QAAI,UAAU,WAAW,QAAQ;AACjC,QAAI,YAAY,WAAW,WAAW;AACtC,aAAS,SAAS,YAAY;AAC5B,UAAI,mBAAmB,eAAe,KAAK,EAAE;AAC7C,UAAI,CAAC,iBAAiB;AACpB;AACF,UAAI,YAAY,iBAAiB,OAAO,KAAK,YAAY,SAAS,iBAAiB,OAAO,IAAI,iBAAiB,SAAS,IAAI,KAAK,YAAY;AAC7I,UAAI,WAAW;AACb,YAAI,QAAQ,WAAW,iBAAiB,OAAO,iBAAiB,OAAO,YAAY;AACnF,YAAI,QAAQ,WAAW,iBAAiB,MAAM,YAAY,QAAQ,iBAAiB;AACnF,YAAI,iBAAiB,IAAI;AAAA,UACvB;AAAA,UACA,QAAQ,iBAAiB,QAAQ;AAAA,QAC3C;AACQ,YAAI,iBAAiB,IAAI;AAAA,UACvB;AAAA,UACA,QAAQ,iBAAiB,SAAS;AAAA,QAC5C;AACQ,gBAAQ,WAAS;AAAA,UACf,KAAK;AACH,gBAAI,MAAM,IAAI,QAAQ,iBAAiB,QAAQ,GAAG;AAChD;AAAA,YACD;AACD,gBAAI,MAAM,IAAI,OAAO;AACnB,yBAAW,KAAK,IAAI,MAAM,KAAK,QAAQ,iBAAiB,QAAQ,IAAI,CAAC,IAAI,KAAK,IAAI,QAAQ,MAAM,GAAG,CAAC;AAAA,YACrG,WAAU,YAAY,WAAW,cAAc,GAAG;AACjD,yBAAW,KAAK;AAAA,gBACd,MAAM,KAAK,QAAQ,iBAAiB,QAAQ;AAAA,gBAC5C;AAAA,cAChB;AAAA,YACA,WAAuB,MAAM,IAAI,QAAQ,iBAAiB,SAAS,GAAG;AACxD,yBAAW,KAAK,IAAI,MAAM,KAAK,QAAQ,iBAAiB,QAAQ,IAAI,CAAC,IAAI,KAAK,IAAI,MAAM,KAAK,QAAQ,iBAAiB,SAAS,IAAI,CAAC;AAAA,YACrI;AACD,iCAAqB,KAAK;AAAA,cACxB,MAAM,KAAK,QAAQ,iBAAiB,QAAQ;AAAA,YAC1D;AACY;AAAA,UACF,KAAK;AACH,gBAAI,MAAM,IAAI,OAAO;AACnB;AAAA,YACD;AACD,gBAAI,MAAM,IAAI,OAAO;AACnB,yBAAW,KAAK,IAAI,QAAQ,MAAM,GAAG,CAAC,IAAI,KAAK,IAAI,QAAQ,MAAM,GAAG,CAAC;AAAA,YACtE,WAAU,YAAY,WAAW,cAAc,GAAG;AACjD,yBAAW,KAAK,IAAI,QAAQ,MAAM,GAAG,CAAC;AAAA,YACpD,WAAuB,MAAM,IAAI,QAAQ,iBAAiB,SAAS,GAAG;AACxD,yBAAW,KAAK,IAAI,QAAQ,MAAM,GAAG,CAAC,IAAI,KAAK,IAAI,MAAM,KAAK,QAAQ,iBAAiB,SAAS,IAAI,CAAC;AAAA,YACtG;AACD,iCAAqB,KAAK,IAAI,MAAM,IAAI,KAAK;AAC7C;AAAA,UACF,KAAK;AACH,gBAAI,MAAM,IAAI,QAAQ,iBAAiB,SAAS,GAAG;AACjD;AAAA,YACD;AACD,gBAAI,MAAM,IAAI,OAAO;AACnB,yBAAW,KAAK,IAAI,MAAM,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,MAAM,KAAK,QAAQ,iBAAiB,SAAS,IAAI,CAAC;AAAA,YACtG,WAAU,YAAY,WAAW,cAAc,GAAG;AACjD,yBAAW,KAAK;AAAA,gBACd,MAAM,KAAK,QAAQ,iBAAiB,SAAS;AAAA,gBAC7C;AAAA,cAChB;AAAA,YACA,WAAuB,MAAM,IAAI,QAAQ,iBAAiB,QAAQ,GAAG;AACvD,yBAAW,KAAK,IAAI,MAAM,KAAK,QAAQ,iBAAiB,QAAQ,IAAI,CAAC,IAAI,KAAK,IAAI,MAAM,KAAK,QAAQ,iBAAiB,SAAS,IAAI,CAAC;AAAA,YACrI;AACD,iCAAqB,KAAK;AAAA,cACxB,MAAM,KAAK,QAAQ,iBAAiB,SAAS;AAAA,YAC3D;AACY;AAAA,UACF,KAAK;AACH,gBAAI,MAAM,IAAI,OAAO;AACnB;AAAA,YACD;AACD,gBAAI,MAAM,IAAI,OAAO;AACnB,yBAAW,KAAK,IAAI,MAAM,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,QAAQ,MAAM,GAAG,CAAC;AAAA,YACtE,WAAU,YAAY,WAAW,cAAc,GAAG;AACjD,yBAAW,KAAK,IAAI,QAAQ,MAAM,GAAG,CAAC;AAAA,YACpD,WAAuB,MAAM,IAAI,QAAQ,iBAAiB,QAAQ,GAAG;AACvD,yBAAW,KAAK,IAAI,MAAM,KAAK,QAAQ,iBAAiB,QAAQ,IAAI,CAAC,IAAI,KAAK,IAAI,QAAQ,MAAM,GAAG,CAAC;AAAA,YACrG;AACD,iCAAqB,KAAK,IAAI,MAAM,IAAI,KAAK;AAC7C;AAAA,UACF;AACE,oBAAQ,IAAI,wBAAwB,SAAS;AAC7C;AAAA,QACH;AACD,YAAI,eAAe,GAAG;AACpB,yBAAe;AACf,mCAAyB;AACzB,8BAAoB;AAAA,QAC9B,OAAe;AACL,cAAI,yBAAyB,sBAAsB,2BAA2B,sBAAsB,eAAe,UAAU;AAC3H,2BAAe;AACf,qCAAyB;AACzB,gCAAoB;AAAA,UACrB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACD,QAAI,mBAAmB;AACrB,aAAO,kBAAkB;AAAA,IAC/B,OAAW;AACL,aAAO;AAAA,IACR;AAAA,EACL;AACE,QAAM,sBAAsB,CAAC,OAAO;AAClC,QAAI,eAAe;AACjB,aAAO;AAAA,IACR;AACD,QAAI,KAAK,QAAS,KAAI,YAAY;AAChC,UAAI,KAAK,eAAe;AACtB,eAAO;AAAA,MACf,OAAa;AACL,aAAK,QAAO;AACZ,cAAM,YAAY;AAClB,uBAAe,UAAU,IAAI,KAAK;AAClC,oBAAY,SAAS;AACrB,eAAO;AAAA,MACR;AAAA,IACF;AACD,YAAQ,GAAG,SAAO;AAAA,MAChB,KAAK;AACH,oBAAY,IAAI,CAAC;AACjB;AAAA,MACF,KAAK;AACH,oBAAY,GAAG,EAAE;AACjB;AAAA,MACF,KAAK;AACH,oBAAY,GAAG,CAAC;AAChB;AAAA,MACF,KAAK;AACH,oBAAY,GAAG,CAAC;AAChB;AAAA,MACF,KAAK;AACH,oBAAY,YAAY,OAAO,CAAC;AAChC;AAAA,MACF;AACE,eAAO;AAAA,IACV;AACD,WAAO;AAAA,EACX;AAKE,QAAM,qBAAqB,MAAM;AAC/B,UAAM,mBAAmB;AAAA,MACvB,cAAc,iBAAkB;AAAA,IACjC,GAAE;AACH,QAAI,kBAAkB;AACpB,UAAI,UAAU;AACZ,qBAAa,QAAQ,MAAM;AAC3B,qBAAa,SAAS,iBAAiB,MAAM,iBAAiB,SAAS;AAAA,MAC/E,OAAa;AACL,qBAAa,QAAQ,iBAAiB,OAAO,iBAAiB,QAAQ;AACtE,qBAAa,SAAS,MAAM;AAAA,MAC7B;AACD,oBAAc,aAAa,OAAO,aAAa,MAAM;AAAA,IACtD;AAAA,EACL;AACE,QAAM,qBAAqB,CAAC,cAAc,cAAc,gBAAgB;AACtE,QAAI,cAAc,IAAI,eAAe;AACrC,QAAI,OAAO,YAAY,QAAQ,KAAK,eAAe,YAAY,QAAQ,KAAK,MAAM;AAChF,UAAI,OAAO,YAAY,QAAQ,KAAK,UAAU;AAC5C,YAAI,OAAO,YAAY,QAAQ,EAAE,OAAO,KAAK,UAAU;AACrD,wBAAc,YAAY,QAAQ,EAAE,OAAO;AAAA,QAC5C;AACD,YAAI,OAAO,YAAY,QAAQ,EAAE,QAAQ,KAAK,UAAU;AACtD,yBAAe,YAAY,QAAQ,EAAE,QAAQ;AAAA,QAC9C;AAAA,MACF,WAAU,OAAO,YAAY,QAAQ,KAAK,UAAU;AACnD,sBAAc,YAAY,QAAQ;AAClC,uBAAe,YAAY,QAAQ;AAAA,MACpC;AAAA,IACF;AACD,QAAI,aAAa;AAAA,MACf;AAAA,MACA;AAAA,MACA,WAAW,YAAY,aAAa;AAAA,MACpC,WAAW,YAAY,aAAa,aAAa,WAAW;AAAA,IAClE;AACI,UAAM,cAAc,SAAS;AAAA,MAC3B,MAAM,aAAa;AAAA,MACnB,KAAK,aAAa;AAAA,MAClB,OAAO,aAAa;AAAA,MACpB,QAAQ,aAAa;AAAA,MACrB,QAAQ,WAAW;AAAA,IACzB,CAAK;AACD,UAAM,OAAO,IAAI;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,MAAM;AACJ,YAAI,wBAAwB,KAAK,OAAO,SAAS;AAC/C,mBAAS,MAAM;AACb,wBAAY,MAAM,WAAW;AAAA,UACzC,CAAW;AACD,iCAAuB;AAAA,QACxB;AAAA,MACF;AAAA;AAAA,MAED;AAAA,QACE,IAAI,aAAa;AAAA,QACjB,OAAO,aAAa;AAAA,QACpB,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,mBAAmB;AAAA,QACnB;AAAA,QACA;AAAA,QACA,eAAe;AAAA,MAChB;AAAA,IACP;AACI,SAAK,YAAY,YAAY,aAAa;AAC1C,cAAU,KAAK,IAAI;AACnB,QAAI,KAAK,WAAW,WAAW;AAC7B,wBAAkB,KAAK;AAAA,QACrB,OAAO,KAAK;AAAA,QACZ,aAAa;AAAA,MACrB,CAAO;AAAA,IACF;AAAA,EACL;AACE,QAAM,yBAAyB,CAAC,MAAM,aAAa;AACjD,mBAAe,KAAK,EAAE;AACtB,QAAI,KAAK,SAAS;AAChB,UAAI,QAAQ;AAAA,QACV,MAAM;AAAA,QACN,WAAW,UAAU,WAAW;AAAA,QAChC,SAAS,MAAM,KAAK,OAAO;AAAA,MACnC;AACM,yBAAmB,KAAK;AAAA,IACzB;AAAA,EACL;AACE,QAAM,0BAA0B,CAAC,OAAO;AACtC,QAAI,GAAG,SAAS,aAAa;AAC3B,UAAI,qBAAqB;AACvB,eAAO;AAAA,MACR;AACD,UAAI,GAAG,aAAa,cAAc;AAChC,eAAO;AAAA,MACR;AACD,YAAM,YAAY,YAAY,OAAO;AACrC,UAAI,UAAU,WAAW,cAAc,aAAa,WAAW,sBAAsB;AACnF;AAAA,MACD;AACD,UAAI,WAAW,GAAG;AAClB,UAAI,YAAY;AAChB,UAAI,MAAM,aAAa,YAAY;AACjC,YAAI,GAAG,aAAa,QAAQ;AAC1B,sBAAY;AAAA,QACtB,WAAmB,GAAG,aAAa,SAAS;AAClC,sBAAY;AAAA,QACb;AAAA,MACT,OAAa;AACL,YAAI,GAAG,aAAa,OAAO;AACzB,sBAAY;AAAA,QACtB,WAAmB,GAAG,aAAa,UAAU;AACnC,sBAAY;AAAA,QACb;AAAA,MACF;AACD,YAAM,cAAc,SAAS,uBAAuB,MAAM,UAAU,KAAK,CAAC;AAC1E,UAAI,WAAW;AAAA,QACb,cAAc;AAAA,UACZ,MAAM,YAAY;AAAA,UAClB,KAAK,YAAY;AAAA,UACjB,OAAO,YAAY;AAAA,UACnB,QAAQ,YAAY;AAAA,UACpB,YAAY,KAAK,MAAM,YAAY,MAAM,YAAY,SAAS,CAAC;AAAA,UAC/D,YAAY,KAAK,MAAM,YAAY,OAAO,YAAY,QAAQ,CAAC;AAAA,UAC/D,OAAO,SAAS,OAAO;AAAA,QACxB;AAAA,MACT;AACM,UAAI,YAAY,uBAAuB,SAAS,cAAc,SAAS;AACvE,UAAI,aAAa,YAAY,OAAO;AAClC;AAAA,UACE;AAAA,UACA;AAAA,YACE,QAAQ;AAAA,YACR,SAAS;AAAA,YACT,OAAO,MAAM,aAAa;AAAA,YAC1B,UAAU,MAAM,aAAa;AAAA,UAC9B;AAAA,UACD;AAAA,YACE,UAAU;AAAA,UACX;AAAA,QACX;AACQ,eAAO;AAAA,MACR;AAAA,IACF;AACD,WAAO;AAAA,EACX;AACE,QAAM,iBAAiB,CAAC,IAAI,YAAY,SAAS;AAC/C,iBAAa,YAAY,UAAU;AACnC,cAAU;AACV,sBAAkB,QAAQ,SAAS,EAAE;AACrC,wBAAoB,QAAQ,SAAS,eAAe;AAAA,EACxD;AACE,QAAM,qBAAqB,CAAC,UAAU;AACpC,QAAI,MAAM,sBAAsB,OAAO;AACrC,YAAM,YAAY;AAClB,YAAM,UAAU,KAAK,GAAG,kBAAkB,KAAK;AAAA,IAChD;AAAA,EACL;AACE,QAAM,cAAc,CAAC,sBAAsB,oBAAoB,mBAAmB;AAChF,QAAI,UAAU,UAAU,GAAG;AACzB,UAAI;AACJ,UAAI,uBAAuB,GAAG;AAC5B,oBAAY,cAAc;AAAA,MAClC,WAAiB,uBAAuB,GAAG;AACnC,oBAAY,cAAc;AAAA,MAClC,WAAiB,qBAAqB,GAAG;AACjC,oBAAY,cAAc;AAAA,MAClC,WAAiB,qBAAqB,GAAG;AACjC,oBAAY,cAAc;AAAA,MAClC,OAAa;AACL,gBAAQ,KAAK,OAAO,kBAAkB;AAAA,MACvC;AACD,UAAI,WAAW;AACb,cAAM,SAAS;AAAA,UACb;AAAA,UACA,MAAM;AAAA,YACJ,GAAG;AAAA,YACH,GAAG;AAAA,YACH,OAAO;AAAA,YACP,QAAQ;AAAA,UACT;AAAA,QACX,CAAS;AAAA,MACF;AACD;AAAA,IACD;AACD,QAAI,kBAAkB;AAAA,MACpB;AAAA,MACA;AAAA,MACA;AAAA,MACA,MAAM;AAAA,IACZ;AACI,QAAI,oBAAoB,MAAM;AAC5B,qBAAe,gBAAgB,EAAE;AACjC,YAAM,eAAe,YAAY,UAAU;AAC3C,wBAAkB,WAAW,gBAAgB,cAAc,CAAC;AAC5D,UAAI,YAAY,aAAa,aAAa,OAAO,gBAAgB,aAAa;AAC9E,UAAI,YAAY,aAAa,aAAa,MAAM,gBAAgB,aAAa;AAC7E,UAAI,kBAAkB,eAAe,MAAM;AACzC,uBAAe,KAAK,KAAK;AACzB,uBAAe,KAAK,KAAK;AACzB,sBAAc;AAAA,MACtB,OAAa;AACL,YAAI;AACJ,YAAI,uBAAuB,GAAG;AAC5B,sBAAY,cAAc;AAAA,QACpC,WAAmB,uBAAuB,GAAG;AACnC,sBAAY,cAAc;AAAA,QACpC,WAAmB,qBAAqB,GAAG;AACjC,sBAAY,cAAc;AAAA,QACpC,WAAmB,qBAAqB,GAAG;AACjC,sBAAY,cAAc;AAAA,QAC3B;AACD,sBAAc;AAAA,UACZ;AAAA,UACA,MAAM;AAAA,YACJ,GAAG;AAAA,YACH,GAAG;AAAA,YACH,OAAO,aAAa,aAAa;AAAA,YACjC,QAAQ,aAAa,aAAa;AAAA,UACnC;AAAA,QACX;AAAA,MACO;AACD,iBAAW,YAAY;AACvB,kBAAY,iBAAiB,WAAW;AACxC,UAAI,qBAAqB,uBAAuB,gBAAgB,cAAc,WAAW,qBAAqB,oBAAoB;AAClI,UAAI,YAAY,UAAU,oBAAoB;AAC5C,YAAI,gBAAgB,WAAW,aAAa,aAAa,WAAW,gBAAgB;AAClF,cAAI,UAAU;AAAA,YACZ,QAAQ;AAAA,YACR,SAAS;AAAA,YACT,OAAO,MAAM,aAAa;AAAA,YAC1B,UAAU,MAAM,aAAa;AAAA,UACzC;AACU,mBAAS,oBAAoB,SAAS,EAAE,UAAU,MAAO,CAAA;AAAA,QACnE,OAAe;AACL,gBAAM,WAAW,YAAY;AAAA,YAC3B;AAAA,YACA;AAAA,YACA,qBAAqB,YAAY,QAAQ,YAAY,QAAQ,MAAM;AAAA,YACnE,gBAAgB;AAAA,YAChB;AAAA,YACA;AAAA,UACZ;AACU,mBAAS,SAAQ;AAAA,QAClB;AAAA,MACF;AAAA,IACP,OAAW;AACL,UAAI,YAAY,WAAW,IAAI,YAAY;AAC3C,UAAI,YAAY,WAAW,YAAY,QAAQ;AAC/C,UAAI;AACJ,UAAI,yBAAyB,GAAG;AAC9B,eAAO,cAAc;AAAA,MACtB;AACD,UAAI,yBAAyB,IAAI;AAC/B,eAAO,cAAc;AAAA,MACtB;AACD,UAAI,uBAAuB,GAAG;AAC5B,eAAO,cAAc;AAAA,MACtB;AACD,UAAI,uBAAuB,IAAI;AAC7B,eAAO,cAAc;AAAA,MACtB;AACD,YAAM,kBAAkB,YAAY,OAAO,GAAG;AAC9C,UAAI;AACJ,UAAI,iBAAiB;AACnB,eAAO;AAAA,UACL,GAAG,gBAAgB,OAAO;AAAA,UAC1B,GAAG,gBAAgB,MAAM;AAAA,UACzB,OAAO,gBAAgB;AAAA,UACvB,QAAQ,gBAAgB;AAAA,QAClC;AAAA,MACA,OAAa;AACL,eAAO;AAAA,UACL,GAAG;AAAA,UACH,GAAG;AAAA,UACH,OAAO;AAAA,UACP,QAAQ;AAAA,QAClB;AAAA,MACO;AACD,YAAM,SAAS;AAAA,QACb,WAAW;AAAA,QACX;AAAA,QACA,eAAe;AAAA,MACvB,CAAO;AACD,gBAAU,SAAS,OAAO,CAAC,GAAG,aAAa;AAAA,QACzC,WAAW;AAAA,MACnB,CAAO;AAAA,IACF;AAAA,EACL;AACE,QAAM,wBAAwB,CAAC,QAAQ,aAAa,SAAS;AAC3D,QAAI,UAAU,WAAW,QAAQ;AACjC,QAAI,WAAW,WAAW,WAAW;AACrC,QAAI,gBAAgB;AACpB,SAAK,MAAM,aAAa,kBAAkB,aAAa,iBAAiB,GAAG;AACzE,UAAI,WAAW;AACf,YAAM,mBAAmB,eAAe,CAAC,EAAE;AAC3C,UAAI,eAAe,CAAC,iBAAiB,aAAa,WAAW,SAAS,iBAAiB,UAAU,WAAW,OAAO,IAAI,WAAW,QAAQ,KAAK,YAAY,OAAO;AAChK,mBAAW,iBAAiB,QAAQ;AAAA,MACrC;AACD,sBAAgB,gBAAgB,WAAW,IAAI;AAAA,IAChD;AACD,SAAK,MAAM,aAAa,kBAAkB,aAAa,eAAe,GAAG;AACvE,UAAI,mBAAmB,eAAe,cAAc,iBAAkB,CAAA,EAAE;AACxE,UAAI,qBAAqB,iBAAiB,OAAO,IAAI,iBAAiB,QAAQ,IAAI,YAAY;AAC9F,2BAAqB,qBAAqB,IAAI,IAAI;AAClD,UAAI,WAAW;AACf,UAAI,eAAe,CAAC,iBAAiB,aAAa,WAAW,SAAS,iBAAiB,UAAU,WAAW,OAAO,IAAI,sBAAsB,GAAG;AAC9I,mBAAW,iBAAiB,OAAO,IAAI,YAAY;AAAA,MACpD;AACD,sBAAgB,gBAAgB,WAAW,qBAAqB;AAAA,IACjE;AACD,WAAO;AAAA,EACX;AACE,QAAM,yBAAyB,CAAC,oBAAoB,cAAc;AAChE,QAAI,CAAC,oBAAoB;AACvB,cAAQ,MAAM,yDAAyD;AACvE,aAAO;AAAA,IACR;AACD,wBAAoB;AACpB,yBAAqB,mBAAmB;AACxC,QAAI,UAAU,WAAW,QAAQ;AACjC,QAAI,WAAW,WAAW,WAAW;AACrC,QAAI,aAAa,WAAW,eAAe;AAC3C,QAAI,oBAAoB,YAAY;AACpC,QAAI,gBAAgB;AACpB,YAAQ,MAAM,aAAa,MAAI;AAAA,MAC7B,KAAK,aAAa,KAAK;AACrB,YAAI,MAAM,aAAa,cAAc;AACnC,cAAI,mBAAmB,OAAO,IAAI,mBAAmB,QAAQ,IAAI,IAAI,YAAY,OAAO;AACtF,gCAAoB;AACpB,4BAAgB;AAAA,UACjB;AAAA,QACF;AACD,YAAI,eAAe;AACjB,8BAAoB,KAAK;AAAA,YACvB,mBAAmB,UAAU,IAAI,YAAY,QAAQ,MAAM,aAAa;AAAA,UACpF;AAAA,QACS;AACD;AAAA,MACF,KAAK,aAAa,KAAK;AACrB,YAAI,OAAO,mBAAmB,iBAAiB,aAAa;AAC1D,kBAAQ;AAAA,YACN;AAAA,UACZ;AAAA,QACA,OAAe;AACL,8BAAoB,eAAe,mBAAmB,aAAa,EAAE,aAAa,OAAO;AAAA,QAC1F;AACD;AAAA,MACF,KAAK,aAAa,KAAK;AACrB,YAAI,MAAM,aAAa,cAAc;AACnC,cAAI,mBAAmB,OAAO,IAAI,mBAAmB,QAAQ,IAAI,IAAI,YAAY,OAAO;AACtF,gCAAoB;AACpB,4BAAgB;AAAA,UACjB;AAAA,QACF;AACD,YAAI,eAAe;AACjB,cAAI,mBAAmB,QAAQ,KAAK,YAAY,SAAS,MAAM,aAAa,aAAa,MAAM,aAAa,eAAe;AACzH,gCAAoB,mBAAmB,UAAU,IAAI,YAAY,QAAQ;AAAA,UACrF,OAAiB;AACL,gBAAI,YAAY,GAAG;AACjB,kBAAI,mBAAmB,OAAO,IAAI,mBAAmB,QAAQ,IAAI,YAAY,QAAQ,YAAY,QAAQ,MAAM,aAAa,YAAY;AACtI,oCAAoB,mBAAmB,OAAO,IAAI,mBAAmB,QAAQ,IAAI,YAAY,QAAQ,MAAM,aAAa;AAAA,cACzH;AAAA,YACf,WAAuB,YAAY,GAAG;AACxB,kBAAI,mBAAmB,OAAO,IAAI,YAAY,QAAQ,YAAY,QAAQ,MAAM,aAAa,cAAc;AACzG,oCAAoB,mBAAmB,OAAO,IAAI,YAAY,QAAQ,MAAM,aAAa;AAAA,cAC1F;AAAA,YACf,OAAmB;AACL,kBAAI,mBAAmB,OAAO,IAAI,YAAY,OAAO;AACnD,oCAAoB,mBAAmB,OAAO,IAAI,YAAY,QAAQ,MAAM,aAAa;AAAA,cACzG,WAAyB,mBAAmB,OAAO,IAAI,mBAAmB,QAAQ,IAAI,YAAY,KAAK;AACvF,oCAAoB,mBAAmB,OAAO,IAAI,mBAAmB,QAAQ,IAAI,YAAY,QAAQ,MAAM,aAAa;AAAA,cACzH;AAAA,YACF;AAAA,UACF;AAAA,QACF;AACD;AAAA,MACF;AACE,gBAAQ;AAAA,UACN;AAAA,UACA,MAAM,aAAa;AAAA,QAC7B;AAAA,IACK;AACD,wBAAoB,sBAAsB,mBAAmB,kBAAkB;AAC/E,WAAO,KAAK,MAAM,iBAAiB;AAAA,EACvC;AACE,QAAM,uBAAuB,CAAC,cAAc;AAC1C,QAAI,uBAAuB;AAC3B,QAAI,qBAAqB;AACzB,YAAQ,UAAU,WAAS;AAAA,MACzB,KAAK,cAAc;AACjB,+BAAuB;AACvB;AAAA,MACF,KAAK,cAAc;AACjB,+BAAuB;AACvB;AAAA,MACF,KAAK,cAAc;AACjB,6BAAqB;AACrB;AAAA,MACF,KAAK,cAAc;AACjB,6BAAqB;AACrB;AAAA,IAGH;AACD,gBAAY,sBAAsB,oBAAoB,SAAS;AAAA,EACnE;AACE,QAAM,oBAAoB,CAAC,cAAc;AACvC,WAAO,aAAa,UAAU,aAAa,UAAU;AAAA,EACzD;AACE,QAAM,oBAAoB,CAAC,WAAW;AACpC,cAAU;AACV,QAAI,UAAU,WAAW,GAAG;AAC1B,cAAQ,IAAI,gBAAgB,MAAM,qCAAqC;AACvE;AAAA,IACD;AACD,QAAI,WAAW,OAAO,iBAAiB,eAAe,gBAAgB,KAAK,eAAe,cAAc,OAAO,eAAe;AAC9H,eAAW,kBAAkB,cAAc,IAAI,4BAA4B,YAAY,SAAU,GAAE,cAAc,IAAI;AACrH,kBAAc;AACd,mBAAe,UAAU,KAAK;AAC9B,mBAAe;AACf,qBAAiB;AACjB,2BAAuB,YAAY,YAAY,OAAO,GAAG,WAAW;AACpE,UAAM,UAAO;AAAA,EACjB;AACE,QAAM,mBAAmB,MAAM;AAC7B,mBAAe;AACf,qBAAiB;AACjB,kBAAc;AACd,iBAAa;AACb,eAAW,YAAY,UAAU,CAAC;AAClC,UAAM,SAAM;AACZ,cAAU;AAAA,EACd;AACE,QAAM,cAAc,CAAC,aAAa;AAChC,UAAM,WAAW,MAAM,KAAK,QAAQ;AACpC,eAAW,QAAQ,SAAS,IAAI,CAAC,SAAS;AACxC,aAAO,eAAe,IAAI;AAAA,IAChC,CAAK;AACD,QAAI,MAAM,uBAAuB;AAC/B,iBAAW,QAAQ;AACnB,eAAS,MAAM;AACb,mBAAW,QAAQ;AAAA,MAC3B,CAAO;AAAA,IACF;AAAA,EACL;AACE,QAAM,2BAA2B,MAAM;AACrC,UAAM,YAAY,YAAY,OAAO;AACrC,QAAI,cAAc,SAAS,GAAG;AAC5B,aAAO;AAAA,IACb,OAAW;AACL,eAAS,QAAQ,WAAW,OAAO;AACjC,YAAI,KAAK,aAAa,aAAa,cAAc,IAAI,GAAG;AACtD,iBAAO;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACL;AACE,QAAM,YAAY,MAAM;AACtB,QAAI,MAAM,UAAU;AAClB,YAAM,mBAAmB;AAAA,QACvB,cAAc,iBAAkB;AAAA,MACjC,GAAE;AACH,UAAI,aAAa;AACjB,UAAI,kBAAkB;AACpB,YAAI,UAAU;AACZ,uBAAa,iBAAiB,MAAM,iBAAiB,SAAS;AAAA,QACxE,OAAe;AACL,uBAAa,iBAAiB,OAAO,iBAAiB,QAAQ;AAAA,QAC/D;AAAA,MACF;AACD,YAAM,SAAS,YAAY,OAAO,YAAY,OAAO,UAAU;AAAA,IAChE;AAAA,EACL;AACE,MAAI,kBAAkB;AACI,cAAY;AACtC,QAAM,mBAAmB;AACzB,QAAM,qBAAqB;AAC3B,MAAI,SAAS;AACb,MAAI,aAAa;AACjB,QAAM,kBAAkB,CAAC,aAAa;AACpC,QAAI,cAAc,QAAQ,YAAY,OAAO;AAC3C,eAAS,WAAW,YAAY,QAAQ,aAAa;AAAA,IACtD;AACD,QAAI,UAAU;AACZ,aAAO,EAAE,SAAS,KAAK,MAAM,SAAS,IAAI;AAAA,IAChD,OAAW;AACL,aAAO,EAAE,SAAS,KAAK,MAAM,SAAS,IAAI;AAAA,IAC3C;AAAA,EACL;AACE,QAAM,4BAA4B,MAAM;AACtC,QAAI,UAAU;AACZ,kBAAY,QAAQ,CAAC,YAAY;AAAA,IACvC,OAAW;AACL,mBAAa,QAAQ,CAAC,YAAY;AAAA,IACnC;AACD,UAAM,QAAQ;AACd,oBAAgB,IAAI;AAAA,MAClB,gBAAgB,MAAK,EAAG,uBAAuB,kBAAkB;AAAA,MACjE,gBAAgB,UAAU,oBAAoB,IAAI,EAAE,YAAY,MAAM,MAAM,MAAM,KAAK,MAAM,OAAO,MAAM,MAAM,EAAE,KAAK,CAAC,gBAAgB,MAAK,EAAG,mBAAkB,CAAE,CAAC;AAAA;AAAA,MAErK,gBAAgB,OAAQ,EAAC,WAAW,GAAG,CAAC;AAAA,IAC9C,CAAK;AAAA,EACL;AACE,QAAM,cAAc,CAAC,SAAS;AAC5B,SAAK,WAAU;AAEf,UAAM,IAAI;AACV,UAAM,kBAAkB;AAAA,MACtB,MAAM,WAAW,SAAS;AAAA,MAC1B,OAAO,WAAW,SAAS;AAAA,MAC3B,KAAK,WAAW,IAAI;AAAA,MACpB,QAAQ,WAAW,IAAI;AAAA,IAC7B;AACI,oBAAgB,IAAI;AAAA,MAClB,gBAAgB,UAAU,QAAQ,KAAK,EAAE,eAAe,gBAAgB,MAAM,gBAAgB,KAAK,gBAAgB,OAAO,gBAAgB,MAAM,EAAE,KAAK,CAAC,gBAAgB,MAAK,EAAG,gBAAgB,MAAM,WAAW,IAAI,GAAG,CAAC,CAAC,CAAC;AAAA,MAC3N,gBAAgB,UAAU,QAAQ,KAAK,EAAE,UAAU,MAAM,IAAI,EAAE,KAAK,CAAC,WAAW,CAAC;AAAA,IACvF,CAAK;AACD,eAAW,YAAY,OAAO,CAAC;AAC/B,sBAAkB,qBAAqB,YAAY,MAAM,YAAY,KAAK;AAC1E,UAAM,WAAW,YAAY;AAAA,MAC3B;AAAA,MACA,YAAY,mBAAmB,YAAY;AAAA,MAC3C,YAAY,iBAAiB,YAAY;AAAA,MACzC;AAAA,MACA;AAAA,MACA;AAAA,IACN;AACI,aAAS,MAAK;AACd,UAAM,aAAa,IAAI,QAAQ,cAAc,cAAe,EAAC;AAC7D,QAAI,gBAAgB,CAAA;AACpB,QAAI,gBAAgB,YAAY,QAAQ,IAAI;AAC5C,QAAI,YAAY;AAChB,WAAO,YAAY,YAAY;AAC7B,oBAAc,KAAK,CAAC,YAAY,QAAQ,SAAS;AACjD,oBAAc,KAAK,CAAC,YAAY,QAAQ,YAAY,QAAQ,YAAY,CAAC;AACzE,mBAAa;AAAA,IACd;AACD,UAAM,qBAAqB,cAAc,IAAI,CAAC,QAAQ;AACpD,sBAAgB,UAAU,gBAAgB,EAAE,cAAc,KAAK,MAAM,EAAE,KAAK,CAAC,CAAC,UAAU;AACtF,0BAAkB,MAAM,IAAI;AAAA,MAC7B,CAAA,CAAC;AAAA,IACR,CAAK;AACD,uBAAmB;AAAA,MACjB,gBAAgB,MAAK,EAAG,uBAAuB,gBAAgB;AAAA,IACrE;AACI,oBAAgB,IAAI,kBAAkB;AAAA,EAC1C;AACE,QAAM,iBAAiB,MAAM;AAC3B,QAAI,KAAK,mBAAmB,WAAW,KAAK;AAC1C,wBAAkB,OAAO,KAAK;AAC9B,WAAK,SAAQ;AAAA,IACd;AAAA,EACL;AACE,QAAM,cAAc,CAAC,SAAS;AAC5B,SAAK,UAAS;AACd,gBAAY,QAAQ,gBAAgB,IAAI;AAAA,EAC5C;AACE,QAAM,YAAY,CAAC,SAAS;AAC1B,gBAAY,QAAQ,gBAAgB,IAAI;AACxC,oBAAgB,IAAI;AAAA,MAClB,gBAAgB,MAAK,EAAG,uBAAuB,gBAAgB;AAAA,IACrE,CAAK;AACD;AACA,sBAAkB,OAAO,KAAK;AAC9B,SAAK,SAAQ;AAAA,EACjB;AACE,QAAM,eAAe,CAAC,SAAS;AAC7B,SAAK,WAAU;AACf,gBAAY,QAAQ,gBAAgB,IAAI;AACxC,sBAAkB,MAAM,IAAI;AAAA,EAChC;AACE,QAAM,kBAAkB,CAAC,SAAS;AAChC,gBAAY,QAAQ,gBAAgB,IAAI;AACxC,sBAAkB,MAAM,IAAI;AAAA,EAChC;AACE,QAAM,aAAa,CAAC,SAAS;AAC3B,gBAAY,QAAQ,gBAAgB,IAAI;AACxC,QAAI,KAAK,eAAe;AACtB;AACA,wBAAkB,OAAO,KAAK;AAE9B,WAAK,SAAQ;AAAA,IACd;AAAA,EACL;AACE,QAAM,eAAe,MAAM;AACzB,UAAM,UAAU,cAAc;AAC9B,QAAI,OAAO;AAAA,MACT,MAAM;AAAA,MACN,KAAK;AAAA,MACL,OAAO;AAAA,MACP,QAAQ;AAAA,IACd;AACI,QAAI,UAAU;AACZ,WAAK,MAAM,CAAC,QAAQ,SAAS,MAAM,SAAS,YAAY;AACxD,WAAK,SAAS,CAAC,YAAY;AAAA,IACjC,OAAW;AACL,WAAK,OAAO,CAAC,QAAQ,QAAQ,MAAM,QAAQ,aAAa;AACxD,WAAK,QAAQ,CAAC,aAAa;AAAA,IAC5B;AACD,WAAO;AAAA,EACX;AACE,QAAM,oBAAoB,CAAC,UAAU,WAAW;AAC9C,sBAAkB,qBAAqB,YAAY,QAAQ,YAAY,KAAK;AAC5E,UAAM,WAAW,YAAY;AAAA,MAC3B;AAAA,MACA,SAAS,YAAY,QAAQ,YAAY,QAAQ,YAAY;AAAA,MAC7D,SAAS,YAAY,QAAQ,IAAI,YAAY,QAAQ,YAAY;AAAA,MACjE;AAAA,MACA;AAAA,MACA;AAAA,IACN;AACI,eAAW,SAAS,SAAU,IAAG,SAAS,MAAK;AAAA,EACnD;AACE,QAAM,gBAAgB,MAAM;AAC1B,QAAI,mBAAmB,MAAM;AAC3B,YAAM,QAAQ;AACd,sBAAgB,IAAI;AAAA,QAClB,gBAAgB,MAAK,EAAG,uBAAuB,kBAAkB;AAAA,QACjE,gBAAgB,UAAU,oBAAoB,IAAI,EAAE,YAAY,MAAM,MAAM,MAAM,KAAK,MAAM,OAAO,MAAM,MAAM,EAAE,KAAK,CAAC,gBAAgB,MAAK,EAAG,mBAAkB,CAAE,CAAC;AAAA;AAAA,MAE7K,CAAO;AAAA,IACF;AAAA,EACL;AACE,QAAM,YAAY,MAAM;AACtB,sBAAkB,IAAI;AACtB,UAAM,UAAU,SAAS,MAAM,gBAAe;AAC9C,oBAAgB,cAAc,SAAS,IAAI;AAC3C,YAAQ,cAAc,IAAI,IAAI,EAAE;AAChC,UAAM,QAAQ;AACd,oBAAgB,IAAI;AAAA,MAClB,gBAAgB,UAAU,QAAQ,IAAI,EAAE,cAAc,KAAK,CAAC,WAAW,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,MAKxE,gBAAgB,UAAU,QAAQ,IAAI,EAAE,YAAY,KAAK,CAAC,SAAS,CAAC;AAAA,MACpE,gBAAgB,UAAU,QAAQ,IAAI,EAAE,eAAe,KAAK,CAAC,YAAY,CAAC;AAAA,MAC1E,gBAAgB,UAAU,QAAQ,IAAI,EAAE,kBAAkB,KAAK,CAAC,eAAe,CAAC;AAAA,MAChF,gBAAgB,UAAU,QAAQ,IAAI,EAAE,aAAa,KAAK,CAAC,UAAU,CAAC;AAAA,MACtE,gBAAgB,UAAU,QAAQ,IAAI,EAAE,eAAgB,EAAC,KAAK,CAAC,gBAAgB,MAAK,EAAG,gBAAgB,OAAO,WAAW,IAAI,CAAC,CAAC,CAAC;AAAA,MAChI,gBAAgB,UAAU,oBAAoB,IAAI,EAAE,YAAY,MAAM,MAAM,MAAM,KAAK,MAAM,OAAO,MAAM,MAAM,EAAE,KAAK,CAAC,gBAAgB,MAAK,EAAG,mBAAkB,CAAE,CAAC;AAAA;AAAA,IAE3K,CAAK;AAAA,EACL;AACE,gBAAc,IAAI,YAAY,WAAW;AACzC,cAAY,QAAQ,WAAW,eAAe,gBAAgB,eAAe;AAC7E,cAAY,UAAU,WAAW,EAAE,OAAO,eAAe,QAAQ,KAAK,KAAK,eAAe,QAAQ,WAAW,EAAE,OAAO,eAAe,QAAQ,MAAM,KAAK,eAAe,QAAQ;AAC/K,MAAI,MAAM,aAAa;AACrB,eAAW,MAAM,MAAM,YAAa,CAAA;AAAA,EACxC,WAAa,MAAM,MAAM;AACrB,eAAW,MAAM,MAAM,IAAI;AAAA,EAC5B;AACD,sBAAoB,IAAI;AAAA,IACtB;AAAA,IACA;AAAA,IACA,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA,MAAM;AAAA,IACN;AAAA,EACJ;AACE,MAAI,MAAM,UAAU;AAClB,sBAAkB,kBAAkB,SAAS,SAAS,CAAC;AAAA,EAC3D,OAAS;AACL,sBAAkB,WAAW,MAAM,CAAC;AAAA,EACrC;AACD,MAAI,gBAAgB;AACpB,MAAI,oBAAoB;AACxB,MAAI,OAAO,MAAM,eAAe,UAAU;AACxC,sBAAkB,eAAe,MAAM,WAAW;AAClD,UAAM,OAAO,YAAY,MAAM,WAAW;AAC1C,QAAI,MAAM;AACR,sBAAgB,MAAM;AACtB,UAAI,KAAK,WAAW,aAAa,aAAa,WAAW,gBAAgB;AACvE,4BAAoB,uBAAuB,KAAK,cAAc,CAAC;AAAA,MAChE;AAAA,IACF;AAAA,EACF;AACD,YAAU;AACV,cAAY,QAAQ;AACpB,QAAM,UAAU,YAAY;AAAA,IAC1B;AAAA,IACA,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AACE,UAAQ,MAAK;AACb,YAAU,MAAM;AACd,mBAAe,SAAS,KAAK;AAE7B,QAAI,YAAY,OAAO;AACrB,eAAS,YAAY,OAAO,IAAI;AAAA,IACjC;AACD,QAAI,WAAW,CAAC,sBAAsB;AACpC,kBAAY,YAAY,OAAO,GAAG,WAAW;AAAA,IAC9C;AACD,QAAI,MAAM,uBAAuB;AAC/B,eAAS,MAAM;AACb,mBAAW,QAAQ;AAAA,MAC3B,CAAO;AAAA,IACF;AACD,QAAI,MAAM,aAAa;AACrB;IACD;AAAA,EACL,CAAG;AACD,YAAU,MAAM;AAAA,EAClB,CAAG;AACD,kBAAgB,MAAM;AAAA,EAExB,CAAG;AACD,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,MAAM,cAAc;AAAA,EAClB,QAAQ;AAAA,EACR,MAAM,SAAS;AACb,mBAAe,MAAM;AACnB,cAAQ,IAAI,gBAAgB;AAC5B,aAAO;AAAA,IACb,CAAK;AACD,WAAO,CAAC,MAAM,WAAW;AACvB,aAAO,UAAW,GAAE,mBAAmB,OAAO,MAAM;AAAA,QAClD,WAAW,KAAK,QAAQ,SAAS;AAAA,MACzC,CAAO;AAAA,IACP;AAAA,EACG;AACH;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkPK,MAAC,cAAc;AAAA,EAClB,QAAQ;AAAA,EACR,OAAO;AAAA,IACL,SAAS;AAAA,MACP,MAAM;AAAA,MACN,UAAU;AACR,eAAO;AAAA,UACL,KAAK;AAAA,UACL,MAAM;AAAA,UACN,OAAO;AAAA,UACP,QAAQ;AAAA,QAClB;AAAA,MACO;AAAA,IACF;AAAA,IACD,WAAW;AAAA,MACT,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA,IACD,OAAO;AAAA,MACL,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA,IACD,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,SAAS;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,SAAS;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,gBAAgB;AAAA,MACd,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,eAAe;AAAA,MACb,MAAM;AAAA,MACN,SAAS,IAAI;AAAA,IACd;AAAA,IACD,UAAU;AAAA,MACR,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA,IACD,aAAa;AAAA,MACX,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,MAAM;AAAA,MACJ,MAAM;AAAA,IACP;AAAA,IACD,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,KAAK;AAAA,MACH,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,MAAM;AAAA,MACJ,MAAM;AAAA,IACP;AAAA,IACD,oBAAoB;AAAA,MAClB,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,YAAY;AAAA,MACV,MAAM;AAAA,IACP;AAAA,IACD,eAAe;AAAA,MACb,MAAM;AAAA,IACP;AAAA,IACD,cAAc;AAAA,MACZ,MAAM;AAAA,MACN,UAAU;AACR,eAAO,IAAI,cAAc,EAAE,cAAc,KAAK,YAAY,IAAG,CAAE;AAAA,MAChE;AAAA,IACF;AAAA,IACD,YAAY;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,uBAAuB;AAAA,MACrB,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,aAAa;AAAA,MACX,MAAM;AAAA,IACP;AAAA,IACD,oBAAoB;AAAA,MAClB,MAAM;AAAA,MACN,UAAU;AACR,eAAO;AAAA,UACL,iBAAiB;AAAA,QAC3B;AAAA,MACO;AAAA,IACF;AAAA,IACD,oBAAoB;AAAA,MAClB,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,gBAAgB;AAAA,MACd,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,UAAU;AAAA,MACR,MAAM;AAAA,IACP;AAAA,IACD,eAAe;AAAA,MACb,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,aAAa;AAAA,MACX,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,mBAAmB;AAAA,MACjB,MAAM;AAAA,IACP;AAAA,IACD,qBAAqB;AAAA,MACnB,MAAM;AAAA,IACP;AAAA;AAAA;AAAA;AAAA;AAAA,EAKF;AAAA,EACD,MAAM,SAAS,EAAE,UAAU;AACzB,UAAM,QAAQ;AACd,UAAM,iBAAiB,MAAM,wBAAwB,wBAAwB;AAC7E,UAAM,aAAa,IAAI,CAAC,MAAM,qBAAqB;AACnD,UAAM,YAAY,WAAW,IAAI;AACjC,UAAM,aAAa,WAAW,CAAA,CAAE;AAChC,UAAM,WAAW,WAAW,IAAI;AAChC,UAAM,eAAe,IAAI,CAAC;AAC1B,UAAM,cAAc,IAAI,CAAC;AACzB,UAAM,YAAY,WAAW,IAAI;AACjC,UAAM,kBAAkB,IAAI,CAAC;AAC7B,UAAM,WAAW,WAAW,IAAI;AAChC,UAAM,eAAe,SAAS;AAAA,MAC5B,OAAO;AAAA,MACP,QAAQ;AAAA,IACd,CAAK;AACD,UAAM,wBAAwB,SAAS,MAAM;AAC3C,aAAO;AAAA,QACL,KAAK,MAAM,mBAAmB,OAAO;AAAA,QACrC,cAAc,MAAM,mBAAmB,gBAAgB;AAAA,QACvD,iBAAiB,MAAM,mBAAmB;AAAA,QAC1C,sBAAsB,MAAM,mBAAmB,wBAAwB,MAAM,mBAAmB;AAAA,MACxG;AAAA,IACA,CAAK;AACD,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACN,IAAQ;AAAA,MACF;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACN;AACI,WAAO,YAAY;AACnB,WAAO,CAAC,MAAM,WAAW;AACvB,YAAM,6BAA6B,iBAAiB,iBAAiB;AACrE,aAAO,UAAS,GAAI,mBAAmB,OAAO;AAAA,QAC5C,OAAO,eAAe;AAAA,UACpB,MAAM,QAAQ;AAAA,UACd,KAAK,QAAQ;AAAA,UACb,OAAO,QAAQ;AAAA,UACf,QAAQ,QAAQ;AAAA,UAChB,UAAU,QAAQ,cAAc,OAAO;AAAA,QACjD,CAAS;AAAA,MACT,GAAS;AAAA,QACDC,gBAAmB,OAAO;AAAA,UACxB,OAAO,eAAe;AAAA,YACpB,MAAM,MAAM,cAAc,EAAE,QAAQ;AAAA,YACpC,KAAK,MAAM,cAAc,EAAE,QAAQ;AAAA,UAC/C,CAAW;AAAA,QACX,GAAW;AAAA,UACDA,gBAAmB,OAAO;AAAA,YACxB,IAAI;AAAA,YACJ,KAAK;AAAA,YACL,SAAS;AAAA,YACT,KAAK;AAAA,YACL,OAAO,eAAe;AAAA,cACpB,MAAM,aAAa;AAAA,cACnB,KAAK,YAAY;AAAA,YAC/B,CAAa;AAAA,UACb,GAAa;AAAA,YACDA,gBAAmB,OAAO;AAAA,cACxB,SAAS;AAAA,cACT,KAAK;AAAA,cACL,OAAO,eAAe;AAAA,gBACpB,OAAO,aAAa;AAAA,gBACpB,QAAQ,aAAa;AAAA,cACrC,CAAe;AAAA,cACD,eAAe,OAAO,CAAC,MAAM,OAAO,CAAC,IAAI,IAAI,SAAS,MAAM,cAAc,KAAK,MAAM,cAAc,EAAE,GAAG,IAAI;AAAA,YAC1H,GAAe;AAAA,cACDA,gBAAmB,OAAO,MAAM;AAAA,gBAC9B,WAAW,KAAK,QAAQ,YAAY;AAAA,cACpD,CAAe;AAAA,cACDA,gBAAmB,OAAO;AAAA,gBACxB,SAAS;AAAA,gBACT,KAAK;AAAA,cACrB,GAAiB;AAAA,gBACD,YAAY,4BAA4B;AAAA,kBACtC,SAAS;AAAA,kBACT,KAAK;AAAA,kBACL,MAAM,QAAQ;AAAA,kBACd,UAAU;AAAA,oBACR,SAAS,MAAM,iBAAiB;AAAA,oBAChC,QAAQ,MAAM,gBAAgB;AAAA,oBAC9B,WAAW,MAAM,mBAAmB;AAAA,oBACpC,eAAe,MAAM,uBAAuB;AAAA,kBAC7C;AAAA,gBACnB,GAAmB;AAAA,kBACD,SAAS,QAAQ,MAAM;AAAA,qBACpB,UAAU,IAAI,GAAG,mBAAmB,UAAU,MAAM,WAAW,MAAM,UAAU,GAAG,CAAC,MAAM,UAAU;AAClG,6BAAO,UAAS,GAAI,mBAAmB,OAAO;AAAA,wBAC5C,KAAK,gBAAgB,QAAQ,MAAM,KAAK;AAAA,wBACxC,SAAS;AAAA,wBACT,KAAK,KAAK;AAAA,wBACV,OAAO,eAAe;AAAA,0BACpB,MAAM,KAAK,aAAa;AAAA,0BACxB,KAAK,KAAK,aAAa;AAAA,0BACvB,OAAO,KAAK,aAAa;AAAA,0BACzB,QAAQ,KAAK,aAAa;AAAA,0BAC1B,QAAQ,KAAK,YAAY;AAAA,wBACnD,CAAyB;AAAA,wBACD,SAAS,KAAK,MAAM;AAAA,sBAC5C,GAAyB;AAAA,wBACD,CAAC,QAAQ,yBAAyB,KAAK,QAAQ,SAAS,WAAW,SAAS,aAAa,mBAAmB,OAAO;AAAA,0BACjH,KAAK,MAAM,cAAc;AAAA,0BACzB,SAAS;AAAA,0BACT,KAAK,KAAK;AAAA,0BACV,IAAI,GAAG,QAAQ,QAAQ;AAAA,wBACjD,GAA2B;AAAA,0BACD,YAAY,aAAa,EAAE,KAAK,+BAA8B,GAAI;AAAA,4BAChE,SAAS,QAAQ,MAAM;AAAA,8BACrB,WAAW,KAAK,QAAQ,cAAc;AAAA,gCACpC,MAAM,KAAK;AAAA,gCACX,QAAQ,MAAM,oBAAoB;AAAA,gCAClC,UAAU,KAAK;AAAA,gCACf,OAAO,KAAK;AAAA,gCACZ,YAAY,MAAM,oBAAoB;AAAA,8BACtE,CAA+B;AAAA,4BAC/B,CAA6B;AAAA,4BACD,GAAG;AAAA,0BACJ,GAAE,IAAI;AAAA,wBACjC,GAA2B,GAAG,CAAC,IAAI,CAAC,KAAK,mBAAmB,IAAI,IAAI;AAAA,wBAC5C,QAAQ,yBAAyB,QAAQ,sBAAsB,CAAC,KAAK,QAAQ,SAAS,aAAa,mBAAmB,OAAO;AAAA,0BAC3H,KAAK;AAAA,0BACL,OAAO,eAAe;AAAA,4BACpB,OAAO,KAAK,YAAY,QAAQ,MAAM,qBAAqB,EAAE;AAAA,4BAC7D,QAAQ,KAAK,YAAY,SAAS,MAAM,qBAAqB,EAAE;AAAA,4BAC/D,iBAAiB,MAAM,iBAAiB,KAAK,KAAK,SAAS,MAAM,aAAa,KAAK,IAAI,MAAM,qBAAqB,EAAE,uBAAuB,MAAM,qBAAqB,EAAE;AAAA,4BACxK,cAAc,MAAM,qBAAqB,EAAE;AAAA,0BACvE,CAA2B;AAAA,wBACF,GAAE,MAAM,CAAC,KAAK,mBAAmB,IAAI,IAAI;AAAA,sBAClE,GAAyB,IAAI,CAAC,SAAS,CAAC;AAAA,oBACnB,CAAA,GAAG,GAAG;AAAA,kBAC3B,CAAmB;AAAA,kBACD,GAAG;AAAA,gBACJ,GAAE,GAAG,CAAC,QAAQ,UAAU,CAAC;AAAA,cAC3B,GAAE,GAAG;AAAA,YACP,GAAE,EAAE;AAAA,YACLA,gBAAmB,OAAO,MAAM;AAAA,cAC9B,WAAW,KAAK,QAAQ,YAAY;AAAA,YAClD,CAAa;AAAA,UACF,GAAE,CAAC;AAAA,QACL,GAAE,CAAC;AAAA,MACL,GAAE,CAAC;AAAA,IACV;AAAA,EACG;AACH;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOK,MAAC,cAAc;AAAA,EAClB,QAAQ;AAAA,EACR,OAAO;AAAA,IACL,SAAS;AAAA,MACP,MAAM;AAAA,MACN,UAAU;AACR,eAAO;AAAA,UACL,KAAK;AAAA,UACL,MAAM;AAAA,UACN,OAAO;AAAA,UACP,QAAQ;AAAA,QAClB;AAAA,MACO;AAAA,IACF;AAAA,IACD,WAAW;AAAA,MACT,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA,IACD,OAAO;AAAA,MACL,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA,IACD,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,SAAS;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,SAAS;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,gBAAgB;AAAA,MACd,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,eAAe;AAAA,MACb,MAAM;AAAA,MACN,SAAS,IAAI;AAAA,IACd;AAAA,IACD,UAAU;AAAA,MACR,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA,IACD,aAAa;AAAA,MACX,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,MAAM;AAAA,MACJ,MAAM;AAAA,IACP;AAAA,IACD,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,KAAK;AAAA,MACH,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,MAAM;AAAA,MACJ,MAAM;AAAA,IACP;AAAA,IACD,oBAAoB;AAAA,MAClB,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,YAAY;AAAA,MACV,MAAM;AAAA,IACP;AAAA,IACD,eAAe;AAAA,MACb,MAAM;AAAA,IACP;AAAA,IACD,cAAc;AAAA,MACZ,MAAM;AAAA,MACN,UAAU;AACR,eAAO,IAAI,cAAc,EAAE,cAAc,KAAK,YAAY,IAAG,CAAE;AAAA,MAChE;AAAA,IACF;AAAA,IACD,YAAY;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,uBAAuB;AAAA,MACrB,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,aAAa;AAAA,MACX,MAAM;AAAA,IACP;AAAA,IACD,oBAAoB;AAAA,MAClB,MAAM;AAAA,MACN,UAAU;AACR,eAAO;AAAA,UACL,iBAAiB;AAAA,QAC3B;AAAA,MACO;AAAA,IACF;AAAA,IACD,oBAAoB;AAAA,MAClB,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,gBAAgB;AAAA,MACd,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,UAAU;AAAA,MACR,MAAM;AAAA,IACP;AAAA,IACD,eAAe;AAAA,MACb,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,aAAa;AAAA,MACX,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,mBAAmB;AAAA,MACjB,MAAM;AAAA,IACP;AAAA,IACD,qBAAqB;AAAA,MACnB,MAAM;AAAA,IACP;AAAA;AAAA;AAAA;AAAA;AAAA,EAKF;AAAA,EACD,MAAM,SAAS,EAAE,UAAU;AACzB,UAAM,QAAQ;AACd,UAAM,iBAAiB,MAAM,wBAAwB,wBAAwB;AAC7E,UAAM,aAAa,IAAI,CAAC,MAAM,qBAAqB;AACnD,UAAM,YAAY,WAAW,IAAI;AACjC,UAAM,aAAa,WAAW,CAAA,CAAE;AAChC,UAAM,WAAW,WAAW,IAAI;AAChC,UAAM,eAAe,IAAI,CAAC;AAC1B,UAAM,cAAc,IAAI,CAAC;AACzB,UAAM,YAAY,WAAW,IAAI;AACjC,UAAM,kBAAkB,IAAI,CAAC;AAC7B,UAAM,WAAW,WAAW,IAAI;AAChC,UAAM,eAAe,SAAS;AAAA,MAC5B,OAAO;AAAA,MACP,QAAQ;AAAA,IACd,CAAK;AACD,UAAM,wBAAwB,SAAS,MAAM;AAC3C,aAAO;AAAA,QACL,KAAK,MAAM,mBAAmB,OAAO;AAAA,QACrC,cAAc,MAAM,mBAAmB,gBAAgB;AAAA,QACvD,iBAAiB,MAAM,mBAAmB;AAAA,QAC1C,sBAAsB,MAAM,mBAAmB,wBAAwB,MAAM,mBAAmB;AAAA,MACxG;AAAA,IACA,CAAK;AACD,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACN,IAAQ;AAAA,MACF;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACN;AACI,WAAO,YAAY;AACnB,WAAO,CAAC,MAAM,WAAW;AACvB,YAAM,6BAA6B,iBAAiB,iBAAiB;AACrE,aAAO,UAAS,GAAI,mBAAmB,OAAO;AAAA,QAC5C,OAAO,eAAe;AAAA,UACpB,MAAM,QAAQ;AAAA,UACd,KAAK,QAAQ;AAAA,UACb,OAAO,QAAQ;AAAA,UACf,QAAQ,QAAQ;AAAA,UAChB,UAAU,QAAQ,cAAc,OAAO;AAAA,QACjD,CAAS;AAAA,MACT,GAAS;AAAA,QACDA,gBAAmB,OAAO;AAAA,UACxB,OAAO,eAAe;AAAA,YACpB,MAAM,MAAM,cAAc,EAAE,QAAQ;AAAA,YACpC,KAAK,MAAM,cAAc,EAAE,QAAQ;AAAA,UAC/C,CAAW;AAAA,QACX,GAAW;AAAA,UACDA,gBAAmB,OAAO;AAAA,YACxB,IAAI;AAAA,YACJ,KAAK;AAAA,YACL,SAAS;AAAA,YACT,KAAK;AAAA,YACL,OAAO,eAAe;AAAA,cACpB,MAAM,aAAa;AAAA,cACnB,KAAK,YAAY;AAAA,YAC/B,CAAa;AAAA,UACb,GAAa;AAAA,YACDA,gBAAmB,OAAO;AAAA,cACxB,SAAS;AAAA,cACT,KAAK;AAAA,cACL,OAAO,eAAe;AAAA,gBACpB,OAAO,aAAa;AAAA,gBACpB,QAAQ,aAAa;AAAA,cACrC,CAAe;AAAA,cACD,eAAe,OAAO,CAAC,MAAM,OAAO,CAAC,IAAI,IAAI,SAAS,MAAM,cAAc,KAAK,MAAM,cAAc,EAAE,GAAG,IAAI;AAAA,YAC1H,GAAe;AAAA,cACDA,gBAAmB,OAAO,MAAM;AAAA,gBAC9B,WAAW,KAAK,QAAQ,YAAY;AAAA,cACpD,CAAe;AAAA,cACDA,gBAAmB,OAAO;AAAA,gBACxB,SAAS;AAAA,gBACT,KAAK;AAAA,cACrB,GAAiB;AAAA,gBACD,YAAY,4BAA4B;AAAA,kBACtC,SAAS;AAAA,kBACT,KAAK;AAAA,kBACL,MAAM,QAAQ;AAAA,kBACd,UAAU;AAAA,oBACR,SAAS,MAAM,iBAAiB;AAAA,oBAChC,QAAQ,MAAM,gBAAgB;AAAA,oBAC9B,WAAW,MAAM,mBAAmB;AAAA,oBACpC,eAAe,MAAM,uBAAuB;AAAA,kBAC7C;AAAA,gBACnB,GAAmB;AAAA,kBACD,SAAS,QAAQ,MAAM;AAAA,qBACpB,UAAU,IAAI,GAAG,mBAAmB,UAAU,MAAM,WAAW,MAAM,UAAU,GAAG,CAAC,MAAM,UAAU;AAClG,6BAAO,UAAS,GAAI,mBAAmB,OAAO;AAAA,wBAC5C,KAAK,gBAAgB,QAAQ,MAAM,KAAK;AAAA,wBACxC,SAAS;AAAA,wBACT,KAAK,KAAK;AAAA,wBACV,OAAO,eAAe;AAAA,0BACpB,MAAM,KAAK,aAAa;AAAA,0BACxB,KAAK,KAAK,aAAa;AAAA,0BACvB,OAAO,KAAK,aAAa;AAAA,0BACzB,QAAQ,KAAK,aAAa;AAAA,0BAC1B,QAAQ,KAAK,YAAY;AAAA,wBACnD,CAAyB;AAAA,wBACD,SAAS,KAAK,MAAM;AAAA,sBAC5C,GAAyB;AAAA,wBACD,CAAC,QAAQ,yBAAyB,KAAK,QAAQ,SAAS,WAAW,SAAS,aAAa,mBAAmB,OAAO;AAAA,0BACjH,KAAK,MAAM,cAAc;AAAA,0BACzB,SAAS;AAAA,0BACT,KAAK,KAAK;AAAA,0BACV,IAAI,GAAG,QAAQ,QAAQ;AAAA,wBACjD,GAA2B;AAAA,0BACD,WAAW,KAAK,QAAQ,cAAc;AAAA,4BACpC,MAAM,KAAK;AAAA,4BACX,QAAQ,MAAM,oBAAoB;AAAA,4BAClC,UAAU,KAAK;AAAA,4BACf,OAAO,KAAK;AAAA,4BACZ,YAAY,MAAM,oBAAoB;AAAA,0BAClE,CAA2B;AAAA,wBAC3B,GAA2B,GAAG,CAAC,IAAI,CAAC,KAAK,mBAAmB,IAAI,IAAI;AAAA,wBAC5C,QAAQ,yBAAyB,QAAQ,sBAAsB,CAAC,KAAK,QAAQ,SAAS,aAAa,mBAAmB,OAAO;AAAA,0BAC3H,KAAK;AAAA,0BACL,OAAO,eAAe;AAAA,4BACpB,OAAO,KAAK,YAAY,QAAQ,MAAM,qBAAqB,EAAE;AAAA,4BAC7D,QAAQ,KAAK,YAAY,SAAS,MAAM,qBAAqB,EAAE;AAAA,4BAC/D,iBAAiB,MAAM,iBAAiB,KAAK,KAAK,QAAQ,MAAM,qBAAqB,EAAE,uBAAuB,MAAM,qBAAqB,EAAE;AAAA,4BAC3I,cAAc,MAAM,qBAAqB,EAAE;AAAA,0BACvE,CAA2B;AAAA,wBACF,GAAE,MAAM,CAAC,KAAK,mBAAmB,IAAI,IAAI;AAAA,sBAClE,GAAyB,IAAI,CAAC,SAAS,CAAC;AAAA,oBACnB,CAAA,GAAG,GAAG;AAAA,kBAC3B,CAAmB;AAAA,kBACD,GAAG;AAAA,gBACJ,GAAE,GAAG,CAAC,QAAQ,UAAU,CAAC;AAAA,cAC3B,GAAE,GAAG;AAAA,YACP,GAAE,EAAE;AAAA,YACLA,gBAAmB,OAAO,MAAM;AAAA,cAC9B,WAAW,KAAK,QAAQ,YAAY;AAAA,YAClD,CAAa;AAAA,UACF,GAAE,CAAC;AAAA,QACL,GAAE,CAAC;AAAA,MACL,GAAE,CAAC;AAAA,IACV;AAAA,EACG;AACH;AAEA;AACA;AACA;AACA,MAAM,eAAe;AAAA,EACnB;AAAA;AAAA,EAEA,YAAY,iBAAiB;AAC3B,SAAK,YAAY;AAAA,EAClB;AAAA;AAAA,EAED,YAAY;AACV,WAAO,KAAK;AAAA,EACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBD,SAAS,WAAW,cAAc,OAAO;AACvC,SAAK,UAAU,SAAS,WAAW,WAAW;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,sBAAsB;AACpB,SAAK,UAAU;EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASD,kBAAkB;AAChB,WAAO,KAAK,UAAU;EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASD,eAAe;AACb,WAAO,KAAK,UAAU;EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUD,wBAAwB;AACtB,WAAO,KAAK,UAAU;EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQD,eAAe;AACb,WAAO,KAAK,UAAU;EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQD,iBAAiB,gBAAgB,MAAM;AACrC,SAAK,UAAU,iBAAiB,aAAa;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,oBAAoB;AAClB,SAAK,UAAU;EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQD,uBAAuB;AACrB,WAAO,KAAK,UAAU;EACvB;AACH;AACA,MAAM,wBAAwB;AAC9B,MAAM,sBAAsB;AAE5B;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgCK,MAAC,cAAc;AAAA,EAClB,QAAQ;AAAA,EACR,OAAO;AAAA,IACL,MAAM;AAAA,IACN,WAAW;AAAA,IACX,WAAW;AAAA,IACX,UAAU;AAAA,IACV,iBAAiB;AAAA,IACjB,mBAAmB;AAAA,IACnB,SAAS;AAAA,IACT,WAAW;AAAA,IACX,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,eAAe;AAAA,EAChB;AAAA,EACD,MAAM,SAAS,EAAE,UAAU;AACzB,UAAM,QAAQ;AACd,QAAI,MAAM,aAAa,MAAM,MAAM;AACjC,YAAM,IAAI,MAAM,2DAA2D;AAAA,IAC5E;AACD,QAAI,MAAM,cAAc,IAAI;AAC1B,YAAM,IAAI,MAAM,wDAAwD;AAAA,IACzE;AACD,QAAI,MAAM,aAAa,MAAM,UAAU,QAAQ,GAAG,KAAK,GAAG;AACxD,YAAM,IAAI;AAAA,QACR,gDAAgD,MAAM,YAAY;AAAA,MAC1E;AAAA,IACK;AACD,QAAI,MAAM,QAAQ,MAAM,KAAK,QAAQ,GAAG,KAAK,GAAG;AAC9C,YAAM,IAAI;AAAA,QACR,2CAA2C,MAAM,OAAO;AAAA,MAChE;AAAA,IACK;AACD,QAAI,iBAAiB,CAAA;AACrB,QAAI,UAAU,WAAW,IAAI;AAC7B,QAAI,eAAe;AACnB,QAAI,MAAM,WAAW;AACnB,YAAM,kBAAkB,OAAO,mBAAmB;AAClD,UAAI;AACJ,UAAI,mBAAmB,MAAM;AAC3B,uBAAe,MAAM;AAAA,MAC7B,OAAa;AACL,uBAAe,GAAG,mBAAmB,MAAM;AAAA,MAC5C;AACD,cAAQ,qBAAqB,YAAY;AAAA,IAC1C;AACD,UAAM,cAAc,YAAY;AAC9B,YAAM,OAAO,MAAM,QAAQ,KAAK,GAAG;AACnC,YAAM,MAAM;AACZ,aAAO,MAAM;IACnB;AACI,UAAM,eAAe,OAAO,gBAAgB;AAC1C,YAAM,OAAO,MAAM,QAAQ,KAAK,GAAG;AACnC,YAAM,MAAM;AACZ,YAAM,aAAa,WAAW;AAAA,IACpC;AACI,UAAM,oBAAoB,CAAC,OAAO;AAChC,YAAM,QAAQ,KAAK,GAAG,aAAa,kBAAkB,EAAE;AAAA,IAC7D;AACI,UAAM,sBAAsB,CAAC,OAAO;AAClC,YAAM,QAAQ,KAAK,GAAG,aAAa,oBAAoB,EAAE;AAAA,IAC/D;AACI,UAAM,eAAe;AAAA,MACnB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACN;AACI,UAAM,sBAAsB,MAAM;AAChC,YAAM,YAAY,MAAM,QAAQ,KAAK,GAAG;AACxC,gBAAU,kBAAkB;AAC5B,qBAAe,oBAAoB,MAAM,qBAAqB,MAAM,UAAU;AAC9E,UAAI,eAAe,mBAAmB;AACpC,kBAAU,mBAAmB,kBAAkB;AAAA,MAChD;AACD,qBAAe,kBAAkB,MAAM,mBAAmB,MAAM,UAAU;AAC1E,UAAI,eAAe,iBAAiB;AAClC,kBAAU,iBAAiB,gBAAgB;AAAA,MAC5C;AACD,qBAAe,YAAY,MAAM,aAAa,MAAM,UAAU;AAC9D,UAAI,eAAe,WAAW;AAC5B,kBAAU,aAAa,UAAU;AAAA,MAClC;AACD,qBAAe,UAAU,MAAM,WAAW,MAAM,UAAU;AAC1D,UAAI,eAAe,SAAS;AAC1B,kBAAU,WAAW,QAAQ;AAAA,MAC9B;AACD,qBAAe,UAAU,MAAM,WAAW,MAAM,UAAU;AAC1D,UAAI,eAAe,SAAS;AAC1B,kBAAU,WAAW,QAAQ;AAAA,MAC9B;AACD,qBAAe,SAAS,MAAM,UAAU,MAAM,UAAU;AACxD,UAAI,eAAe,QAAQ;AACzB,kBAAU,UAAU,OAAO;AAAA,MAC5B;AACD,qBAAe,gBAAgB,MAAM,iBAAiB,MAAM,UAAU;AACtE,UAAI,eAAe,eAAe;AAChC,kBAAU,iBAAiB,cAAc;AAAA,MAC1C;AACD,UAAI,OAAO,MAAM,QAAQ,KAAK;AAC9B,UAAI,SAAS,KAAK;AAClB,aAAO,QAAQ;AACb,YAAI,KAAK,aAAa,iBAAiB;AACrC;AAAA,QACD;AACD,YAAI,OAAO,YAAY,QAAQ;AAC7B,mBAAS,OAAO;AAChB;AAAA,QACD;AACD,aAAK,aAAa,UAAU,OAAO,YAAY;AAC/C;AAAA,MACD;AAAA,IACP;AACI,UAAM,qBAAqB,CAAC,OAAO;AACjC,SAAG,YAAY;AACf,aAAO,gBAAgB,kBAAkB,EAAE,KAAK;AAAA,IACtD;AACI,UAAM,mBAAmB,CAAC,OAAO;AAC/B,SAAG,YAAY;AACf,aAAO,gBAAgB,gBAAgB,EAAE,KAAK;AAAA,IACpD;AACI,UAAM,aAAa,CAAC,OAAO;AACzB,SAAG,YAAY;AACf,aAAO,gBAAgB,UAAU,EAAE,KAAK;AAAA,IAC9C;AACI,UAAM,WAAW,CAAC,OAAO;AACvB,SAAG,YAAY;AACf,aAAO,gBAAgB,QAAQ,EAAE,KAAK;AAAA,IAC5C;AACI,UAAM,WAAW,MAAM;AACrB,sBAAgB,QAAQ,YAAY;AAAA,IAC1C;AACI,UAAM,UAAU,MAAM;AACpB,sBAAgB,OAAO,YAAY;AAAA,IACzC;AACI,UAAM,iBAAiB,CAAC,OAAO;AAC7B,aAAO,gBAAgB,cAAc,EAAE,KAAK;AAAA,IAClD;AACI,cAAU,MAAM;AACd,qBAAe,MAAM,QAAQ,KAAK,GAAG;AACrC;AACA,UAAI,CAAC,CAAC,MAAM,aAAa,MAAM,cAAc,IAAI;AAC/C,qBAAa,MAAM,cAAc,OAAO;AAAA,MACzC;AAAA,IACP,CAAK;AACD,gBAAY,MAAM;AAChB,oBAAc,UAAS;AACvB,UAAI,cAAc,iBAAiB;AACjC,qBAAa,kBAAkB;AAAA,MAChC;AACD,qBAAe;AAAA,IACrB,CAAK;AACD,gBAAY,MAAM;AAChB,qBAAe,MAAM,QAAQ,KAAK,GAAG;AACrC;AACA,UAAI,CAAC,CAAC,MAAM,aAAa,MAAM,cAAc,IAAI;AAC/C,qBAAa,MAAM,cAAc,OAAO;AAAA,MACzC;AAAA,IACP,CAAK;AACD,kBAAc,MAAM;AAClB,oBAAc,UAAU,IAAI;AAC5B,UAAI,cAAc,iBAAiB;AACjC,qBAAa,kBAAkB;AAAA,MAChC;AACD,qBAAe;AAAA,IACrB,CAAK;AACD,WAAO,YAAY;AACnB,WAAO,CAAC,MAAM,WAAW;AACvB,YAAM,kBAAkB,iBAAiB,MAAM;AAC/C,aAAO,UAAS,GAAI,YAAY,iBAAiB;AAAA,QAC/C,SAAS;AAAA,QACT,KAAK;AAAA,QACL,OAAO,QAAQ;AAAA,QACf,iBAAiB,QAAQ;AAAA,MACjC,GAAS;AAAA,QACD,SAAS,QAAQ,MAAM;AAAA,UACrB,WAAW,KAAK,QAAQ,SAAS;AAAA,QAC3C,CAAS;AAAA,QACD,GAAG;AAAA,MACJ,GAAE,GAAG,CAAC,SAAS,eAAe,CAAC;AAAA,IACtC;AAAA,EACG;AACH;AAEA;AACA;AACA;AACK,MAAC,cAAc,CAAC,kBAAkB;AACrC,MAAI,eAAe;AACjB,QAAI,YAAY,OAAO,mBAAmB;AAC1C,QAAI,aAAa,UAAU,SAAS,GAAG;AACrC,aAAO,IAAI,eAAe,OAAO,qBAAqB,EAAE,YAAY,kBAAkB,SAAS,CAAC;AAAA,IACjG;AAAA,EACF;AACD,SAAO,OAAO,qBAAqB;AACrC;AACA,MAAM,gBAAgB;AAAA,EACpB,cAAc;AAAA,EACb;AAAA,EACD,QAAQ,QAAQ,SAAS;AACvB,YAAQ,IAAI,yBAAyB;AACrC,QAAI,OAAO,QAAQ,CAAC,MAAM,UAAU;AAClC,YAAM,IAAI;AAAA,QACR;AAAA,MACR;AAAA,IACK;AACD,UAAM,aAAa,KAAK,YAAY,KAAK,QAAQ,CAAC,CAAC;AACnD,QAAI,QAAQ;AACZ,QAAI,UAAU,iBAAiB,WAAW;AAC1C,QAAI,OAAO,iBAAiB,mBAAmB;AAC/C,QAAI,QAAQ,qBAAqB,IAAI;AACrC,QAAI,QAAQ,uBAAuB,IAAI,eAAe,KAAK,UAAU,OAAQ,CAAA,CAAC;AAAA,EAC/E;AAAA,EACD,uBAAuB;AACrB,QAAI,cAAc,KAAK,WAAW,OAAQ,GAAE,qBAAoB;AAChE,WAAO,cAAc,cAAc;EACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmCD,YAAY,KAAK,YAAY;AAC3B,iBAAa,WAAW,QAAQ,KAAK,EAAE;AACvC,SAAK,YAAY,SAAS,gBAAgB,UAAU;AACpD,SAAK,aAAa,IAAI,MAAM,KAAK,GAAG;AACpC,WAAO,KAAK,aAAa,KAAK,IAAI;AAAA,EACnC;AAAA,EACD,aAAa,eAAe;AAC1B,UAAM,gBAAgB,KAAK,WAAW,aAAa;AACnD,SAAK,UAAU;AACf,WAAO;AAAA,EACR;AAAA;AAAA,EAED,aAAa;AAAA,EACb,YAAY;AACd;AACA,SAAS,wBAAwB;AAC/B,SAAO,IAAI,gBAAe;AAC5B;AAmNA;AACA;AACA;AACA,IAAI,eAAe;AAAA;AAAA,EAEjB,aAAa;AAAA,EACb,MAAM;AAAA,EACN,SAAS;AAAA;AAAA,EAET,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,YAAY;AAAA;AAAA,EAEZ,WAAW;AAAA;AAAA,EAEX,YAAY;AAAA;AAAA,EAEZ,UAAU;AAAA;AAAA,EAEV,WAAW;AAAA;AAAA,EAEX,KAAK;AACP;AAEA;AACA;AACA;AACA,SAAS,qBAAqB;AAC5B,MAAI,OAAO,OAAO,sBAAsB,eAAe,OAAO,qBAAqB,OAAO,OAAO,kBAAkB,qBAAqB,aAAa;AACnJ,QAAI,kBAAkB,OAAO,kBAAkB,iBAAgB;AAC/D,QAAI,iBAAiB;AACnB,mBAAa,eAAe,gBAAgB,gBAAgB,SAAS,CAAC,MAAM,MAAM,kBAAkB,kBAAkB,OAAO,aAAa,cAAc,gBAAgB,aAAa,iBAAiB,cAAc,aAAa;AAAA,IAClO;AAAA,EACF;AACH;AACA;AACA,SAAS,gBAAgB;AACvB,SAAO;AACT;AAEA;AACA;AACA;AACA,IAAI,oBAAoB;AACxB,IAAI,yBAAyB;AAC7B,IAAI,oBAAoB;AACxB,IAAI,oBAAoB;AACxB,IAAI,sBAAsB;AAC1B,IAAI,uBAAuB;AAC3B,IAAI,sBAAsB;AAC1B,IAAI,uBAAuB;AAC3B,IAAI,yBAAyB;AAC7B,IAAI,2BAA2B;AAC/B,IAAI,wBAAwB;AAC5B,IAAI,yBAAyB;AAC7B,IAAI,mBAAmB;AACvB,IAAI,kBAAkB,cAAa;AACnC,IAAI,aAAa,CAAA;AACjB,IAAI,qBAAqB,CAAA;AACzB,IAAI,iBAAiB;AACrB,IAAI,WAAW;AACf,IAAI,kBAAkB;AACtB,IAAI,kBAAkB;AACtB,IAAI,oBAAoB;AACxB,IAAI,kBAAkB;AACtB,IAAI,kBAAkB;AACtB,IAAI,WAAW;AACf,SAAS,SAAS,OAAO,SAAS;AAChC,MAAI,SAAS,UAAU;AACrB,YAAQ,IAAI,OAAO;AAAA,EACpB;AACH;AACA,SAAS,SAAS,SAAS;AACzB,WAAS,iBAAiB,OAAO;AACnC;AACA,SAAS,SAAS,SAAS;AACzB,WAAS,iBAAiB,OAAO;AACnC;AACA,SAAS,aAAa,SAAS;AAC7B,WAAS,mBAAmB,OAAO;AACrC;AACA,SAAS,SAAS,SAAS;AACzB,WAAS,iBAAiB,OAAO;AACnC;AACA,SAAS,SAAS,SAAS;AACzB,WAAS,iBAAiB,OAAO;AACnC;AAIA,IAAI,iCAAiC;AACrC,IAAI,+BAA+B;AACnC,IAAI,8BAA8B;AAClC,IAAI,gCAAgC;AACpC,IAAI,+BAA+B;AACnC,IAAI,kBAAkB;AACtB,SAAS,sBAAsB,QAAQ;AACrC,WAAS,4BAA4B,MAAM;AAC3C,MAAI,MAAM,KAAK,MAAM,MAAM;AAC3B,MAAI,aAAa,CAAA;AACjB,aAAW,SAAS;AACpB,MAAI,OAAO,IAAI,YAAY;AACzB,sBAAkB;AAClB,eAAW,OAAO;AAAA,EACtB,OAAS;AACL,sBAAkB;AAClB,eAAW,OAAO;AAAA,EACnB;AACD,WAAS,IAAI,GAAG,IAAI,mBAAmB,QAAQ,KAAK;AAClD,uBAAmB,CAAC,EAAE,UAAU;AAAA,EACjC;AACH;AACA,OAAO,IAAI,wBAAwB,SAAS,QAAQ;AAClD,wBAAsB,MAAM;AAC9B;AACA,SAAS,0BAA0B,QAAQ;AACzC,WAAS,gCAAgC,MAAM;AAC/C,MAAI,UAAU,KAAK,MAAM,MAAM;AAC/B,MAAI,aAAa,CAAA;AACjB,MAAI,YAAY,QAAQ,WAAW,KAAK,QAAQ,WAAW,IAAI;AAC7D,sBAAkB;AAClB,eAAW,SAAS;AACpB,eAAW,OAAO;AAAA,EACnB,WAAU,WAAW,QAAQ,WAAW,KAAK;AAC5C,sBAAkB;AAClB,eAAW,SAAS;AACpB,eAAW,OAAO,QAAQ;AAAA,EAC9B,OAAS;AACL,sBAAkB;AAClB,eAAW,SAAS;AACpB,QAAI,SAAS;AACX,iBAAW,OAAO,QAAQ;AAAA,IAChC,OAAW;AACL,iBAAW,OAAO;AAAA,IACnB;AAAA,EACF;AACD,MAAI,oBAAoB,GAAG;AACzB,aAAS,0EAA0E,QAAQ,SAAS,2BAA2B;AAAA,EAChI;AACD;AACA,MAAI,oBAAoB,GAAG;AACzB,QAAI,gBAAgB;AACpB,QAAI,kBAAkB,QAAQ,kBAAkB,IAAI;AAClD,UAAI,mBAAmB,KAAK,MAAM,aAAa;AAC/C,UAAI,qBAAqB,QAAQ,iBAAiB,eAAe,UAAU,GAAG;AAC5E,mBAAW,iBAAiB;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AACD,WAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AAC1C,eAAW,CAAC,EAAE;EACf;AACD,WAAS,IAAI,GAAG,IAAI,mBAAmB,QAAQ,KAAK;AAClD,uBAAmB,CAAC,EAAE,UAAU;AAAA,EACjC;AACH;AACA,OAAO,IAAI,4BAA4B,SAAS,QAAQ;AACtD,4BAA0B,MAAM;AAClC;AACA,OAAO,IAAI,qBAAqB,SAAS,QAAQ;AAC/C,WAAS,yBAAyB,MAAM;AACxC,MAAI,aAAa,KAAK,MAAM,MAAM;AAClC,MAAI,WAAW,QAAQ,GAAG;AACxB,aAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AAC1C,UAAI,WAAW,CAAC,EAAE,QAAQ,WAAW,KAAK;AACxC,mBAAW,CAAC,EAAE;AACd;AAAA,MACD;AAAA,IACF;AAAA,EACL,OAAS;AACL,aAAS,+BAA+B,WAAW,GAAG;AAAA,EACvD;AACH,EAAE,KAAK,UAAU;AACjB,SAAS,qBAAqB,MAAM;AAClC,UAAQ,IAAI,yBAAyB,IAAI;AACzC,MAAI,MAAM,KAAK,MAAM,IAAI;AACzB,MAAI,YAAY,KAAK,MAAM,IAAI,KAAK;AACpC,MAAI,UAAU,eAAe,QAAQ,GAAG;AACtC,QAAI,SAAS,UAAU;AACvB,QAAI,aAAa,CAAA;AACjB,YAAQ,QAAM;AAAA,MACZ,KAAK;AACH;AACE,cAAI,OAAO;AACX,cAAI,UAAU,eAAe,MAAM,GAAG;AACpC,mBAAO,UAAU;AAAA,UAClB;AACD,qBAAW,SAAS;AACpB,qBAAW,OAAO;AAClB,cAAI,SAAS,GAAG;AACd,8BAAkB;AAAA,UAC9B,OAAiB;AACL,8BAAkB;AAAA,UACnB;AAAA,QACF;AACD;AAAA,MACF,KAAK;AACH,mBAAW,SAAS;AACpB,mBAAW,OAAO;AAClB,mBAAW,WAAW;AACtB;AAAA,MACF,KAAK;AACH,mBAAW,SAAS;AACpB,mBAAW,OAAO;AAClB;AAAA,MACF,KAAK;AACH,mBAAW,SAAS;AACpB,mBAAW,OAAO;AAClB;AAAA,MACF,KAAK;AACH;AACE,cAAI,OAAO;AACX,cAAI,UAAU,eAAe,MAAM,GAAG;AACpC,mBAAO,UAAU;AAAA,UAClB;AACD,cAAI,SAAS,GAAG;AACd,uBAAW,SAAS;AACpB,uBAAW,OAAO;AAClB,8BAAkB;AAAA,UAC9B,OAAiB;AACL,uBAAW,SAAS;AACpB,uBAAW,OAAO;AAClB,8BAAkB;AAAA,UACnB;AACD;QACD;AACD;AAAA,MACF;AACE,qBAAa,yCAAyC,MAAM;AAC5D;AAAA,IACH;AACD,aAAS,IAAI,GAAG,IAAI,mBAAmB,QAAQ,KAAK;AAClD,yBAAmB,CAAC,EAAE,UAAU;AAAA,IACjC;AACD,QAAI,oBAAoB,GAAG;AACzB,UAAI,gBAAgB;AACpB,UAAI,kBAAkB,QAAQ,kBAAkB,IAAI;AAClD,YAAI,mBAAmB,KAAK,MAAM,aAAa;AAC/C,YAAI,qBAAqB,QAAQ,iBAAiB,eAAe,UAAU,GAAG;AAC5E,qBAAW,iBAAiB;AAAA,QAC7B;AAAA,MACF;AACD,eAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AAC1C,mBAAW,CAAC,EAAE;MACf;AAAA,IACF;AAAA,EACL,OAAS;AACL,QAAI,OAAO,UAAU;AACrB,QAAI,QAAQ,UAAU;AACtB,QAAI,SAAS,GAAG;AACd,4BAAsB,KAAK;AAAA,IACjC,WAAe,SAAS,GAAG;AACrB,gCAA0B,KAAK;AAAA,IACrC,OAAW;AACL,eAAS,mBAAmB,IAAI;AAAA,IACjC;AAAA,EACF;AACH;AACA,SAAS,+BAA+B;AACtC,SAAO,IAAI,UAAU,gBAAgB,oBAAoB;AAC3D;AACA,SAAS,iCAAiC;AACxC,SAAO,IAAI,YAAY,gBAAgB,oBAAoB;AAC7D;AACA,SAAS,4BAA4B,UAAU;AAC7C,WAAS,2BAA2B;AACpC,MAAI,aAAa,CAAA;AACjB,MAAI,OAAO,OAAO,yBAAyB,eAAe,CAAC,OAAO,sBAAsB;AACtF,eAAW,SAAS;AACpB,eAAW,OAAO;AAAA,EACtB,WAAa,oBAAoB,GAAG;AAChC,eAAW,SAAS;AACpB,eAAW,OAAO;AAAA,EACtB,WAAa,oBAAoB,GAAG;AAChC,eAAW,SAAS;AACpB,eAAW,OAAO;AAAA,EACtB,WAAa,oBAAoB,GAAG;AAChC,eAAW,SAAS;AACpB,eAAW,OAAO;AAAA,EACnB;AACD,MAAI,WAAW,eAAe,QAAQ,GAAG;AACvC,QAAI,OAAO,aAAa,eAAe,UAAU;AAC/C,iBAAW,MAAM;AACf,iBAAS,UAAU;AAAA,MACpB,GAAE,CAAC;AAAA,IACL;AAAA,EACF;AACD,MAAI,oBAAoB,KAAK,OAAO,OAAO,yBAAyB,eAAe,CAAC,OAAO,sBAAsB;AAC/G;AAAA,EACJ,WAAa,oBAAoB,GAAG;AAChC,sBAAkB;AAAA,EACnB;AACD,MAAI,OAAO,aAAa,eAAe,UAAU;AAC/C,uBAAmB,KAAK,QAAQ;AAAA,EACjC;AACD,MAAI,kBAAkB,GAAG;AACvB;AAAA,EACD;AACD,oBAAkB;AAClB;AACA,MAAI,OAAO,OAAO,qBAAqB,gBAAgB,aAAa;AAClE,WAAO,qBAAqB,YAAY,gBAAgB,KAAK,UAAU,eAAe,CAAC;AAAA,EAC3F,OAAS;AACL,WAAO,qBAAqB,WAAW,KAAK,UAAU,eAAe,CAAC;AAAA,EACvE;AACH;AAqHA,SAAS,qBAAqB,KAAK;AACjC,WAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AAC1C,QAAI,WAAW,CAAC,EAAE,QAAQ,KAAK;AAC7B,aAAO,WAAW,CAAC;AAAA,IACpB;AAAA,EACF;AACD,SAAO;AACT;AACA,MAAM,aAAa;AAAA,EACjB,YAAY,MAAM,aAAa,SAAS,aAAa,KAAK,YAAY,kBAAkB,aAAa;AACnG,aAAS,+BAA+B,OAAO,eAAe,UAAU,mBAAmB,cAAc,WAAW,MAAM,kBAAkB,aAAa,wBAAwB,mBAAmB,mBAAmB,WAAW;AAClO,SAAK,QAAQ;AAAA,MACX,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,cAAc;AAAA,MACd,UAAU;AAAA,MACV,WAAW;AAAA,MACX,aAAa;AAAA,MACb,aAAa;AAAA,MACb,eAAe;AAAA,MACf,gBAAgB;AAAA,MAChB,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,YAAY;AAAA,IAClB;AACI,SAAK,QAAQ;AAAA,MACX,aAAa;AAAA,MACb,kBAAkB;AAAA,MAClB,UAAU;AAAA,MACV,cAAc;AAAA,MACd,QAAQ;AAAA,IACd;AACI,SAAK,OAAO;AACZ,SAAK,eAAe;AACpB,SAAK,MAAM;AACX,SAAK,aAAa;AAClB,SAAK,aAAa;AAClB,SAAK,SAAS;AACd,SAAK,eAAe;AACpB,SAAK,aAAa;AAClB,SAAK,iBAAiB;AACtB,SAAK,aAAa;AAClB,SAAK,YAAY;AACjB,SAAK,MAAM;AACX,SAAK,aAAa,OAAO,UAAU,OAAO,OAAO,gBAAgB,OAAO,OAAO,oBAAoB,SAAS;AAC5G,SAAK,cAAc;AACnB,SAAK,qBAAqB;AAC1B,SAAK,iBAAiB;AACtB,SAAK,WAAW,KAAK,QAAQ,KAAK,IAAI;AACtC,SAAK,8BAA8B,KAAK,2BAA2B,KAAK,IAAI;AAC5E,QAAI,QAAQ;AACZ,aAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AAC1C,UAAI,WAAW,CAAC,EAAE,QAAQ,KAAK,KAAK;AAClC,gBAAQ;AACR;AAAA,MACD;AAAA,IACF;AACD,QAAI,CAAC,OAAO;AACV,iBAAW,KAAK,IAAI;AAAA,IACrB;AACD,QAAI,OAAO,OAAO,mBAAmB,eAAe,CAAC,OAAO,iBAAiB;AAC3E;IACN,OAAW;AACL,WAAK,sBAAqB;AAAA,IAC3B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAID,wBAAwB;AACtB,aAAS,gCAAgC,KAAK,GAAG;AACjD,QAAI,OAAO,OAAO,mBAAmB,eAAe,CAAC,OAAO,iBAAiB;AAC3E,eAAS,oBAAoB;AAC7B;AAAA,IACD;AACD,QAAI,aAAa;AACjB,WAAO,gBAAgB,cAAc,KAAK,KAAK,KAAK,YAAY,KAAK,QAAQ,KAAK,YAAY,KAAK,gBAAgB,YAAY,KAAK,YAAY,KAAK,UAAU,EAAE;AAAA,MAC/J,CAAC,WAAW;AACV,iBAAS,yBAAyB,MAAM;AACxC,YAAI,aAAa,KAAK,MAAM,MAAM;AAClC,YAAI,WAAW,QAAQ,GAAG;AACxB,mBAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AAC1C,gBAAI,WAAW,CAAC,EAAE,QAAQ,WAAW,KAAK;AACxC,yBAAW,CAAC,EAAE;AACd;AAAA,YACD;AAAA,UACF;AAAA,QACX,OAAe;AACL,mBAAS,+BAA+B,WAAW,GAAG;AAAA,QACvD;AAAA,MACF;AAAA,MACD,CAAC,SAAS;AACR,iBAAS,kCAAkC,OAAO,GAAG;AAAA,MACtD;AAAA,IACP;AAAA,EACG;AAAA;AAAA;AAAA;AAAA,EAID,aAAa;AACX,QAAI,KAAK;AACP;AACF,aAAS,uBAAuB,KAAK,GAAG;AACxC,SAAK,eAAe;AACpB,WAAO,IAAI,UAAU,KAAK,KAAK,KAAK,QAAQ;AAC5C,QAAI,OAAO,UAAU,OAAO,OAAO,oBAAoB;AACrD,eAAS,gBAAgB,KAAK,MAAM,+BAA+B;AACnE,aAAO,OAAO,mBAAmB,KAAK,2BAA2B;AAAA,IAClE;AACD,QAAI,KAAK,iBAAiB,KAAK,QAAQ;AACrC,aAAO,gBAAgB,UAAU,KAAK,KAAK,KAAK,YAAY;AAC5D,WAAK,SAAS,KAAK;AAAA,IACpB;AACD,SAAK,aAAa,OAAO,UAAU,OAAO,OAAO,gBAAgB,OAAO,OAAO,oBAAoB,SAAS;AAC5G,QAAI,KAAK,YAAY;AACnB,WAAK,WAAU;AAAA,IAChB;AAAA,EACF;AAAA,EACD,aAAa;AACX,aAAS,uBAAuB,KAAK,GAAG;AACxC,QAAI,KAAK,aAAa,GAAG;AACvB,WAAK,mBAAmB,KAAK,SAAS;AAAA,IACvC,WAAU,KAAK,MAAM,KAAK,GAAG;AAC5B,WAAK,SAAS,OAAO,KAAK,MAAM,KAAK,GAAG,QAAQ;AAChD,UAAI,KAAK,MAAM,aAAa,GAAG;AAC7B,aAAK,SAAS,eAAe,KAAK,MAAM,aAAa,GAAG,QAAQ;AAAA,MACjE,WAAU,KAAK,MAAM,WAAW,GAAG;AAClC,aAAK,SAAS,aAAa,KAAK,MAAM,WAAW,GAAG,QAAQ;AAAA,MAC7D;AAAA,IACF;AACD,QAAI,KAAK,MAAM,QAAQ,KAAK,OAAO;AACjC,WAAK,SAAS,UAAU,KAAK,MAAM,QAAQ,GAAG,SAAS;AAAA,IACxD;AACD,QAAI,KAAK,MAAM,UAAU,GAAG;AAC1B,WAAK,SAAS,YAAY,KAAK,MAAM,UAAU,GAAG,SAAS;AAAA,IAC5D;AACD,QAAI,KAAK,MAAM,QAAQ,GAAG;AACxB,WAAK,SAAS,UAAU,KAAK,MAAM,QAAQ,GAAG,SAAS;AAAA,IACxD;AACD,QAAI,KAAK,MAAM,OAAO,GAAG;AACvB,WAAK,SAAS,SAAS,KAAK,MAAM,OAAO,GAAG,SAAS;AAAA,IACtD;AACD,QAAI,KAAK,MAAM,gBAAgB,GAAG;AAChC,WAAK,SAAS,kBAAkB,KAAK,MAAM,gBAAgB,GAAG,SAAS;AAAA,IACxE;AACD,QAAI,KAAK,MAAM,eAAe,KAAK,OAAO;AACxC,WAAK,SAAS,iBAAiB,KAAK,MAAM,eAAe,GAAG,SAAS;AAAA,IACtE;AACD,QAAI,KAAK,MAAM,aAAa,MAAM,UAAU;AAC1C,WAAK,SAAS,eAAe,KAAK,MAAM,aAAa,GAAG,QAAQ;AAAA,IACjE;AACD,QAAI,KAAK,MAAM,WAAW,GAAG;AAC3B,WAAK,SAAS,aAAa,KAAK,MAAM,WAAW,GAAG,QAAQ;AAAA,IAC7D;AACD,QAAI,KAAK,MAAM,YAAY,MAAM,IAAI;AACnC,WAAK,SAAS,cAAc,KAAK,MAAM,YAAY,GAAG,QAAQ;AAAA,IAC/D;AAAA,EACF;AAAA,EACD,6BAA6B;AAC3B,QAAI,UAAU,OAAO,UAAU,OAAO,OAAO,gBAAgB,OAAO,OAAO,oBAAoB,SAAS;AACxG,SAAK,cAAc,OAAO;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA,EAKD,cAAc,SAAS;AACrB,aAAS,eAAe,KAAK,MAAM,gBAAgB,OAAO;AAC1D,QAAI,OAAO,YAAY,WAAW;AAChC,eAAS,eAAe,KAAK,MAAM,wCAAwC;AAC3E;AAAA,IACD;AACD,QAAI,YAAY,KAAK,YAAY;AAC/B,eAAS,eAAe,KAAK,MAAM,sBAAsB;AACzD;AAAA,IACD;AACD,QAAI,SAAS;AACX,WAAK,aAAa;AAClB,WAAK,MAAM,SAAS,KAAK,MAAM;AAC/B,WAAK,MAAM,cAAc,KAAK,MAAM;AACpC,eAAS,kBAAkB,KAAK,MAAM,WAAW;AACjD,WAAK,WAAU;AAAA,IACrB,OAAW;AACL,eAAS,eAAe,KAAK,MAAM,qBAAqB,KAAK,eAAe,kBAAkB,KAAK,YAAY,YAAY,KAAK,MAAM,KAAK,CAAC;AAC5I,UAAI,KAAK,cAAc;AACrB,aAAK,cAAc;AACnB,YAAI,KAAK,YAAY,GAAG;AACtB,mBAAS,cAAc;AACvB,iBAAO,gBAAgB,aAAa,KAAK,GAAG;AAAA,QAC7C,WAAU,KAAK,MAAM,KAAK,GAAG;AAC5B,mBAAS,QAAQ;AACjB,eAAK,MAAM,cAAc,KAAK;AAC9B,eAAK,MAAM,SAAS,KAAK;AACzB,mBAAS,kBAAkB,KAAK,MAAM,WAAW;AACjD,eAAK,cAAa;AAAA,QACnB;AAAA,MACF;AACD,WAAK,aAAa;AAAA,IACnB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAID,SAAS;AACP,SAAK;AAAA,EACN;AAAA;AAAA;AAAA;AAAA,EAID,gBAAgB;AACd,aAAS,wBAAwB,KAAK,MAAM,WAAW,KAAK,GAAG;AAC/D,SAAK;AACL,QAAI,KAAK,QAAQ,GAAG;AAClB,UAAI,OAAO,OAAO,mBAAmB,eAAe,OAAO,iBAAiB;AAC1E,aAAK,gBAAgB,KAAK;AAC1B,eAAO,IAAI,YAAY,KAAK,KAAK,KAAK,QAAQ;AAC9C,eAAO,gBAAgB,cAAc,KAAK,GAAG;AAC7C,YAAI,OAAO,UAAU,OAAO,OAAO,qBAAqB;AACtD,mBAAS,gBAAgB,KAAK,MAAM,iCAAiC;AACrE,iBAAO,OAAO,oBAAoB,KAAK,2BAA2B;AAAA,QACnE;AAAA,MACF;AACD,eAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AAC1C,YAAI,WAAW,CAAC,EAAE,QAAQ,KAAK,KAAK;AAClC,qBAAW,OAAO,GAAG,CAAC;AACtB;AAAA,QACD;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACD,UAAU,SAAS;AACjB,aAAS,oBAAoB,KAAK,MAAM,eAAe,OAAO;AAC9D,QAAI,KAAK,cAAc;AACrB,WAAK,SAAS;AACd,WAAK,eAAe;AACpB,aAAO,gBAAgB,UAAU,KAAK,KAAK,OAAO;AAAA,IACxD,OAAW;AACL,WAAK,eAAe;AAAA,IACrB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAKD,gBAAgB,QAAQ;AACtB,QAAI,KAAK,eAAe,UAAU,KAAK,eAAe,KAAK,aAAa,eAAe;AACrF,UAAI,KAAK,kBAAkB,QAAQ;AACjC,iBAAS,0BAA0B,KAAK,MAAM,cAAc,MAAM;AAClE,aAAK,iBAAiB;AACtB,YAAI,QAAQ;AACV,iBAAO,QAAQ,YAAY,EAAE;AAAA,QACvC,OAAe;AACL,iBAAO,QAAQ,YAAY,CAAC;AAAA,QAC7B;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACD,gBAAgB,OAAO;AACrB,QAAI,MAAM;AACV,QAAI,CAAC,KAAK,aAAa;AACrB,YAAM;AACN,cAAQ,KAAK,oBAAkB;AAAA,QAC7B,KAAK;AACH,eAAK,cAAc;AACnB,gBAAM;AACN;AAAA,QACF,KAAK;AACH,cAAI,SAAS,0BAA0B,SAAS,qBAAqB,SAAS,wBAAwB,SAAS,0BAA0B,SAAS,0BAA0B;AAC1K,iBAAK,cAAc;AAAA,UACpB;AACD,cAAI,SAAS,wBAAwB;AACnC,kBAAM;AAAA,UAClB,OAAiB;AACL,kBAAM;AAAA,UACP;AACD;AAAA,QACF,KAAK;AACH,cAAI,SAAS,qBAAqB,SAAS,wBAAwB,SAAS,0BAA0B,SAAS,0BAA0B;AACvI,iBAAK,cAAc;AAAA,UACpB;AACD,cAAI,SAAS,0BAA0B,SAAS,mBAAmB;AACjE,kBAAM;AAAA,UAClB,OAAiB;AACL,kBAAM;AAAA,UACP;AACD;AAAA,QACF,KAAK;AACH,cAAI,SAAS,wBAAwB,SAAS,0BAA0B,SAAS,0BAA0B;AACzG,iBAAK,cAAc;AAAA,UACpB;AACD,cAAI,SAAS,kBAAkB;AAC7B,kBAAM;AAAA,UAClB,OAAiB;AACL,kBAAM;AAAA,UACP;AACD;AAAA,QACF,KAAK;AACH,cAAI,SAAS,0BAA0B,SAAS,4BAA4B,SAAS,yBAAyB,SAAS,0BAA0B,SAAS,sBAAsB;AAC9K,iBAAK,cAAc;AAAA,UACpB;AACD,cAAI,SAAS,wBAAwB;AACnC,kBAAM;AAAA,UAClB,OAAiB;AACL,kBAAM;AAAA,UACP;AACD;AAAA,QACF,KAAK;AACH,cAAI,SAAS,4BAA4B,SAAS,yBAAyB,SAAS,0BAA0B,SAAS,sBAAsB;AAC3I,iBAAK,cAAc;AAAA,UACpB;AACD,cAAI,SAAS,0BAA0B,SAAS,0BAA0B;AACxE,kBAAM;AAAA,UAClB,OAAiB;AACL,kBAAM;AAAA,UACP;AACD;AAAA,QACF,KAAK;AACH,cAAI,SAAS,0BAA0B,SAAS,4BAA4B,SAAS,yBAAyB,SAAS,0BAA0B,SAAS,sBAAsB;AAC9K,iBAAK,cAAc;AAAA,UACpB;AACD,cAAI,SAAS,uBAAuB;AAClC,kBAAM;AAAA,UAClB,OAAiB;AACL,kBAAM;AAAA,UACP;AACD;AAAA,QACF,KAAK;AACH,cAAI,SAAS,4BAA4B,SAAS,0BAA0B,SAAS,0BAA0B,SAAS,sBAAsB;AAC5I,iBAAK,cAAc;AAAA,UACpB;AACD,cAAI,SAAS,yBAAyB,SAAS,wBAAwB;AACrE,kBAAM;AAAA,UAClB,OAAiB;AACL,kBAAM;AAAA,UACP;AACD;AAAA,QACF,KAAK;AACH,eAAK,cAAc;AACnB,gBAAM;AACN;AAAA,QACF;AACE,uBAAa,6BAA6B,KAAK,kBAAkB;AACjE,eAAK,cAAc;AACnB,gBAAM;AACN;AAAA,MACH;AACD,eAAS,iBAAiB,KAAK,cAAc,WAAW,GAAG;AAAA,IAC5D;AACD,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAID,QAAQ,WAAW;AACjB,aAAS,mBAAmB,SAAS;AACrC,QAAI,MAAM,KAAK,MAAM,SAAS;AAC9B,QAAI,YAAY,KAAK,MAAM,IAAI,KAAK;AACpC,QAAI,QAAQ,UAAU;AACtB,QAAI,OAAO,UAAU;AACrB,YAAQ,OAAK;AAAA,MACX,KAAK;AACH;AACE,cAAI,KAAK,MAAM,gBAAgB,OAAO;AACpC;AAAA,UACD;AACD,cAAI,cAAc,KAAK,MAAM,eAAe,KAAK;AACjD,eAAK,MAAM,cAAc,KAAK;AAC9B,cAAI,eAAe,KAAK,eAAe,cAAc,GAAG;AACtD,iBAAK,cAAc,EAAE,KAAK,WAAW;AAAA,UACtC;AACD,cAAI,kBAAkB,KAAK,MAAM,oBAAoB,KAAK;AAC1D,eAAK,MAAM,mBAAmB,KAAK;AACnC,cAAI,mBAAmB,KAAK,eAAe,YAAY,GAAG;AACxD,iBAAK,YAAY;UAClB;AACD,cAAI,kBAAkB,KAAK,MAAM,oBAAoB,KAAK,MAAM;AAChE,cAAI,mBAAmB,mBAAmB,KAAK,eAAe,kBAAkB,GAAG;AACjF,iBAAK,kBAAkB;UACxB;AAAA,QACF;AACD;AAAA,MACF,KAAK;AACH,YAAI,KAAK,gBAAgB,gBAAgB,GAAG;AAC1C,eAAK,MAAM,eAAe;AAC1B,eAAK,SAAS,UAAU,MAAM,SAAS;AACvC,cAAI,KAAK,eAAe,OAAO,GAAG;AAChC,iBAAK,OAAO;UACb;AACD,eAAK,qBAAqB;AAAA,QAC3B;AACD;AAAA,MACF,KAAK;AACH,iBAAS,iBAAiB,IAAI;AAC9B,YAAI,KAAK,gBAAgB,sBAAsB,GAAG;AAChD,cAAI,KAAK,eAAe,aAAa,GAAG;AACtC,iBAAK,aAAa;UACnB;AACD,eAAK,qBAAqB;AAAA,QAC3B;AACD;AAAA,MACF,KAAK;AACH,iBAAS,YAAY,IAAI;AACzB,YAAI,KAAK,gBAAgB,iBAAiB,GAAG;AAC3C,eAAK,MAAM,cAAc,KAAK;AAC9B,eAAK,MAAM,WAAW,KAAK;AAC3B,cAAI,KAAK,eAAe,kBAAkB,GAAG;AAC3C,iBAAK,kBAAkB;UACxB;AACD,cAAI,KAAK,eAAe,QAAQ,GAAG;AACjC,iBAAK,QAAQ;UACd;AACD,cAAI,KAAK,eAAe,kBAAkB,GAAG;AAC3C,iBAAK,kBAAkB;UACxB;AACD,eAAK,qBAAqB;AAAA,QAC3B;AACD;AAAA,MACF,KAAK;AACH,iBAAS,aAAa,IAAI;AAC1B,aAAK,MAAM,eAAe;AAC1B,YAAI,KAAK,eAAe,SAAS,GAAG;AAClC,gBAAMC,SAAQ;AAAA,YACZ,mBAAmB;AAAA,YACnB,mBAAmB;AAAA,YACnB,kBAAkB;AAAA,YAClB,6BAA6B;AAAA,YAC7B,uBAAuB;AAAA,YACvB,8BAA8B;AAAA,UAC1C;AACU,gBAAM,iBAAiB,KAAK,MAAM;AAClC,cAAI,IAAIA,OAAM;AACd,kBAAQ,gBAAc;AAAA,YACpB,KAAK;AACH,kBAAIA,OAAM;AACV;AAAA,YACF,KAAK;AACH,kBAAIA,OAAM;AACV;AAAA,YACF,KAAK;AACH,kBAAIA,OAAM;AACV;AAAA,YACF,KAAK;AACH,kBAAIA,OAAM;AACV;AAAA,YACF,KAAK;AACH,kBAAIA,OAAM;AACV;AAAA,UAGH;AACD,eAAK,SAAS,EAAE,CAAC;AAAA,QAClB;AACD;AAAA,MACF,KAAK;AACH,iBAAS,YAAY,IAAI;AACzB,YAAI,KAAK,gBAAgB,iBAAiB,GAAG;AAC3C,eAAK,MAAM,eAAe;AAC1B,cAAI,KAAK,eAAe,WAAW,GAAG;AACpC,iBAAK,WAAW;UACjB;AAAA,QACF;AACD;AAAA,MACF,KAAK;AACH,iBAAS,gBAAgB,IAAI;AAC7B,gBAAQ,KAAK,UAAQ;AAAA,UACnB,KAAK;AACH,gBAAI,KAAK,eAAe,kBAAkB,GAAG;AAC3C,mBAAK,kBAAkB;YACxB;AACD;AAAA,UACF,KAAK;AACH,gBAAI,KAAK,gBAAgB,mBAAmB,GAAG;AAC7C,kBAAI,KAAK,eAAe,UAAU,GAAG;AACnC,qBAAK,UAAU;cAChB;AAAA,YACF;AACD;AAAA,UACF;AACE,yBAAa,qCAAqC,KAAK,QAAQ;AAC/D;AAAA,QACH;AACD;AAAA,MACF,KAAK;AACH,iBAAS,sBAAsB,IAAI;AACnC,YAAI,KAAK,eAAe,kBAAkB,GAAG;AAC3C,eAAK,kBAAkB,EAAE,IAAI;AAAA,QAC9B;AACD;AAAA,MACF,KAAK;AACH,iBAAS,sBAAsB,IAAI;AACnC,YAAI,KAAK,eAAe,kBAAkB,GAAG;AAC3C,eAAK,kBAAkB,EAAE,IAAI;AAAA,QAC9B;AACD;AAAA,MACF,KAAK;AACH,YAAI,KAAK,gBAAgB,oBAAoB,GAAG;AAC9C,eAAK,MAAM,eAAe;AAC1B,cAAI,KAAK,eAAe,WAAW,GAAG;AACpC,iBAAK,WAAW;UACjB;AAAA,QACF;AACD;AAAA,MACF,KAAK;AACH,YAAI,KAAK,gBAAgB,mBAAmB,GAAG;AAC7C,eAAK,MAAM,eAAe;AAC1B,cAAI,KAAK,eAAe,WAAW,GAAG;AACpC,iBAAK,WAAW;UACjB;AAAA,QACF;AACD;AAAA,MACF,KAAK;AACH,aAAK,gBAAgB,IAAI;AACzB,YAAI,KAAK,gBAAgB,oBAAoB,GAAG;AAC9C,eAAK,MAAM,eAAe;AAC1B,cAAI,KAAK,eAAe,WAAW,GAAG;AACpC,iBAAK,WAAW;UACjB;AACD,eAAK,qBAAqB;AAAA,QAC3B;AACD;AAAA,MACF,KAAK;AACH,iBAAS,aAAa;AACtB,YAAI,KAAK,gBAAgB,sBAAsB,GAAG;AAChD,cAAI,KAAK,eAAe,aAAa,GAAG;AACtC,iBAAK,aAAa,EAAE,KAAK,QAAQ;AAAA,UAClC;AACD,eAAK,qBAAqB;AAAA,QAC3B;AACD;AAAA,MACF,KAAK;AACH,iBAAS,eAAe;AACxB,YAAI,KAAK,gBAAgB,wBAAwB,GAAG;AAClD,cAAI,KAAK,eAAe,eAAe,GAAG;AACxC,iBAAK,eAAe;UACrB;AACD,eAAK,qBAAqB;AAAA,QAC3B;AACD;AAAA,MACF,KAAK;AACH,iBAAS,YAAY;AACrB,YAAI,KAAK,gBAAgB,qBAAqB,GAAG;AAC/C,cAAI,KAAK,eAAe,YAAY,GAAG;AACrC,iBAAK,YAAY;UAClB;AACD,eAAK,qBAAqB;AAAA,QAC3B;AACD;AAAA,MACF,KAAK;AACH,iBAAS,aAAa;AACtB,YAAI,KAAK,gBAAgB,sBAAsB,GAAG;AAChD,cAAI,KAAK,eAAe,aAAa,GAAG;AACtC,iBAAK,aAAa;UACnB;AACD,eAAK,qBAAqB;AAAA,QAC3B;AACD;AAAA,IAGH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAID,IAAI,SAAS,OAAO;AAClB,SAAK,SAAS,YAAY,OAAO,SAAS;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA,EAID,IAAI,cAAc;AAChB,QAAI,CAAC,KAAK,YAAY;AACpB,aAAO,KAAK,MAAM;AAAA,IACnB;AACD,QAAI,SAAS,KAAK,YAAY,aAAa;AAC3C,QAAI,UAAU,MAAM;AAClB,WAAK,MAAM,cAAc;AACzB,aAAO;AAAA,IACR;AACD,WAAO;AAAA,EACR;AAAA,EACD,IAAI,YAAY,OAAO;AACrB,SAAK,MAAM,eAAe;AAC1B,SAAK,MAAM,cAAc;AACzB,SAAK,SAAS,eAAe,OAAO,QAAQ;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA,EAID,IAAI,WAAW;AACb,QAAI,CAAC,KAAK,YAAY;AACpB,aAAO,KAAK,MAAM;AAAA,IACnB;AACD,QAAI,SAAS,KAAK,YAAY,UAAU;AACxC,QAAI,UAAU;AACZ,aAAO;AACT,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAID,IAAI,KAAK,OAAO;AACd,QAAI,OAAO,SAAS,WAAW;AAC7B,WAAK,SAAS,UAAU,OAAO,SAAS;AAAA,IAC9C,WAAe,OAAO,SAAS,aAAa;AACtC,WAAK,SAAS,UAAU,OAAO,SAAS;AAAA,IAC9C,OAAW;AACL,WAAK,SAAS,UAAU,MAAM,SAAS;AAAA,IACxC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAID,IAAI,QAAQ;AACV,WAAO,KAAK,SAAS,OAAO;AAAA,EAC7B;AAAA,EACD,IAAI,MAAM,OAAO;AACf,SAAK,SAAS,SAAS,OAAO,SAAS;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA,EAID,IAAI,SAAS;AACX,WAAO,KAAK,SAAS,QAAQ;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAID,IAAI,eAAe;AACjB,WAAO,KAAK,SAAS,MAAM;AAAA,EAC5B;AAAA,EACD,IAAI,aAAa,OAAO;AACtB,aAAS,cAAc;AACvB,SAAK,SAAS,QAAQ,OAAO,QAAQ;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA,EAID,IAAI,UAAU;AACZ,WAAO,KAAK,eAAe,SAAS;AAAA,EACrC;AAAA,EACD,IAAI,QAAQ,OAAO;AACjB,QAAI,UAAU,QAAQ;AACpB,WAAK,KAAI;AAAA,IACV;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAID,IAAI,IAAI,OAAO;AACb,SAAK,OAAO,OAAO,MAAM,MAAM,CAAC;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAID,IAAI,SAAS;AACX,WAAO,KAAK,SAAS,QAAQ;AAAA,EAC9B;AAAA,EACD,IAAI,OAAO,OAAO;AAChB,SAAK,SAAS,UAAU,OAAO,QAAQ;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA,EAID,IAAI,YAAY;AACd,WAAO,KAAK,SAAS,WAAW;AAAA,EACjC;AAAA,EACD,IAAI,UAAU,OAAO;AACnB,SAAK,SAAS,aAAa,OAAO,QAAQ;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA,EAID,IAAI,mBAAmB;AACrB,WAAO,KAAK,MAAM;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA,EAID,IAAI,eAAe,OAAO;AACxB,SAAK,SAAS,kBAAkB,CAAC,CAAC,OAAO,SAAS;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA,EAID,IAAI,cAAc,OAAO;AACvB,SAAK,SAAS,iBAAiB,CAAC,CAAC,OAAO,SAAS;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeD,OAAO,KAAK,YAAY,MAAM,MAAM,WAAW,YAAY,OAAO;AAChE,QAAI,MAAM,CAAA;AACV,QAAI,MAAM;AACV,QAAI,MAAM;AACR,UAAI,OAAO;AAAA,IACZ;AACD,QAAI,YAAY;AACd,UAAI,aAAa;AAAA,IAClB;AACD,QAAI,MAAM;AACR,UAAI,OAAO;AAAA,IACjB,OAAW;AACL,UAAI,OAAO;AAAA,IACZ;AACD,QAAI,SAAS,KAAK,WAAW;AAC3B,UAAI,YAAY;AAAA,IACjB;AACD,QAAI,cAAc,OAAO,eAAe,UAAU;AAChD,UAAI,aAAa;AAAA,IAClB;AACD,QAAI,SAAS,OAAO,SAAS,UAAU;AACrC,UAAI,YAAY;AAAA,IACjB;AACD,SAAK,qBAAqB;AAC1B,SAAK,SAAS,OAAO,KAAK,UAAU,GAAG,GAAG,QAAQ;AAClD,SAAK,cAAc;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,iBAAiB,MAAM,UAAU;AAC/B,SAAK,OAAO,IAAI,IAAI;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA,EAID,OAAO;AACL,SAAK,SAAS,gBAAgB,MAAM,SAAS;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA,EAID,QAAQ;AACN,SAAK,MAAM,SAAS;AACpB,SAAK,SAAS,UAAU,MAAM,SAAS;AACvC,QAAI,KAAK,eAAe,SAAS,GAAG;AAClC,WAAK,SAAS;IACf;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAID,OAAO;AACL,SAAK,MAAM,SAAS;AACpB,SAAK,SAAS,UAAU,OAAO,SAAS;AACxC,QAAI,KAAK,eAAe,QAAQ,GAAG;AACjC,WAAK,QAAQ;IACd;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAKD,qBAAqB;AACnB,QAAI,QAAQ,KAAK,YAAY,iBAAiB;AAC9C,QAAI,UAAU,MAAM;AAClB,aAAO;AAAA,IACR;AACD,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA,EAKD,wBAAwB;AACtB,WAAO,KAAK,SAAS,YAAY;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA,EAKD,iBAAiB,OAAO;AACtB,SAAK,SAAS,cAAc,OAAO,QAAQ;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA,EAID,SAAS;AACP,SAAK,cAAa;AAClB,SAAK,qBAAqB;AAC1B,SAAK,cAAc;AAAA,EACpB;AAAA,EACD,gBAAgB;AACd,SAAK,SAAS,UAAU,MAAM,SAAS;AACvC,SAAK,MAAM,eAAe;AAC1B,SAAK,SAAS,gBAAgB,OAAO,SAAS;AAC9C,SAAK,gBAAgB,KAAK;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUD,YAAY,OAAO;AACjB,aAAS,sBAAsB,KAAK,MAAM,aAAa,KAAK;AAC5D,QAAI,KAAK,SAAS,SAAS;AACzB,mBAAa,0CAA0C;AACvD,aAAO;AAAA,IACR;AACD,QAAI,MAAM,KAAK,mBAAmB,KAAK;AACvC,QAAI,OAAO,GAAG;AACZ,WAAK,qBAAqB;AAC1B,WAAK,cAAc;AAAA,IACpB;AACD,WAAO;AAAA,EACR;AAAA,EACD,mBAAmB,OAAO;AACxB,QAAI,KAAK,SAAS,SAAS;AACzB,mBAAa,iDAAiD;AAC9D,aAAO;AAAA,IACR;AACD,QAAI,SAAS,GAAG;AACd,aAAO;AAAA,IACR;AACD,QAAI,MAAM;AACV,QAAI,KAAK,gBAAgB,KAAK,YAAY;AACxC,YAAM,OAAO,gBAAgB,YAAY,KAAK,KAAK,KAAK;AAAA,IACzD;AACD,QAAI,OAAO,GAAG;AACZ,WAAK,YAAY;AACjB,WAAK,MAAM,SAAS;AACpB,WAAK,SAAS,UAAU,OAAO,SAAS;AAAA,IACzC;AACD,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASD,eAAe;AACb,aAAS,uBAAuB,KAAK,MAAM,iBAAiB,KAAK,SAAS;AAC1E,QAAI,KAAK,SAAS,SAAS;AACzB,mBAAa,2CAA2C;AACxD,aAAO;AAAA,IACR;AACD,QAAI,MAAM,KAAK;AACf,SAAK,qBAAqB;AAC1B,SAAK,cAAc;AACnB,WAAO;AAAA,EACR;AAAA,EACD,sBAAsB;AACpB,QAAI,MAAM;AACV,QAAI,KAAK,SAAS,SAAS;AACzB,mBAAa,kDAAkD;AAC/D,aAAO;AAAA,IACR;AACD,QAAI,KAAK,gBAAgB,KAAK,YAAY;AACxC,YAAM,OAAO,gBAAgB,aAAa,KAAK,GAAG;AAAA,IACnD;AACD,SAAK,YAAY;AACjB,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBD,iBAAiB;AACf,aAAS,yBAAyB,KAAK,GAAG;AAC1C,QAAI,OAAO,OAAO,oBAAoB,aAAa;AACjD,aAAO,gBAAgB,eAAe,KAAK,GAAG;AAAA,IAC/C;AACD;AAAA,EACD;AAAA;AAAA;AAAA;AAAA,EAID,kBAAkB;AAChB,aAAS,0BAA0B,KAAK,GAAG;AAC3C,QAAI,OAAO,OAAO,oBAAoB,aAAa;AACjD,aAAO,OAAO,gBAAgB,gBAAgB,GAAG;AAAA,IAClD;AACD,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,gBAAgB,QAAQ,OAAO;AAC7B,aAAS,0BAA0B,KAAK,MAAM,cAAc,SAAS,aAAa,KAAK;AACvF,QAAI,OAAO,OAAO,oBAAoB,aAAa;AACjD,aAAO,OAAO,gBAAgB,gBAAgB,QAAQ,OAAO,SAAS,cAAc,QAAQ,GAAG,GAAG;AAAA,IACnG;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,mBAAmB,WAAW,OAAO;AACnC,aAAS,6BAA6B,KAAK,MAAM,iBAAiB,YAAY,aAAa,KAAK;AAChG,QAAI,OAAO,OAAO,oBAAoB,aAAa;AACjD,aAAO,OAAO,gBAAgB,mBAAmB,WAAW,OAAO,SAAS,cAAc,QAAQ,CAAC;AAAA,IACpG;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,eAAe,QAAQ,OAAO;AAC5B,aAAS,yBAAyB,KAAK,MAAM,cAAc,SAAS,aAAa,KAAK;AACtF,QAAI,OAAO,OAAO,oBAAoB,aAAa;AACjD,eAAS,cAAc,MAAM;AAC7B,aAAO,gBAAgB,eAAe,QAAQ,OAAO,SAAS,cAAc,QAAQ,CAAC;AAAA,IACtF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAKD,uBAAuB;AACrB,aAAS,+BAA+B,KAAK,GAAG;AAChD,QAAI,OAAO,OAAO,oBAAoB,aAAa;AACjD,aAAO,OAAO,gBAAgB;IAC/B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAID,YAAY;AACV,aAAS,oBAAoB,KAAK,GAAG;AACrC,QAAI,KAAK,gBAAgB,KAAK,YAAY;AACxC,aAAO,gBAAgB,UAAU,KAAK,GAAG;AAAA,IAC/C,OAAW;AACL,WAAK,MAAM,aAAa,IAAI;AAAA,IAC7B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAID,UAAU;AACR,aAAS,kBAAkB,KAAK,GAAG;AACnC,QAAI,KAAK,gBAAgB,KAAK,YAAY;AACxC,aAAO,gBAAgB,QAAQ,KAAK,GAAG;AAAA,IACxC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAKD,mBAAmB;AACjB,aAAS,2BAA2B,KAAK,GAAG;AAC5C,QAAI,SAAS,KAAK,YAAY,WAAW;AACzC,QAAI,UAAU,QAAQ,UAAU;AAC9B,aAAO,KAAK,MAAM,MAAM;AAC1B,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA,EAKD,aAAa,MAAM;AACjB,aAAS,uBAAuB,KAAK,MAAM,YAAY,IAAI;AAC3D,QAAI,KAAK,SAAS,SAAS;AACzB,mBAAa,2CAA2C;AACxD;AAAA,IACD;AACD,QAAI,KAAK,gBAAgB,KAAK,YAAY;AACxC,aAAO,gBAAgB,aAAa,KAAK,KAAK,IAAI;AAAA,IACnD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUD,aAAa,WAAW;AACtB,aAAS,uBAAuB,KAAK,MAAM,kBAAkB,KAAK,UAAU,SAAS,CAAC;AACtF,QAAI,KAAK,SAAS,SAAS;AACzB,mBAAa,2CAA2C;AACxD;AAAA,IACD;AACD,SAAK,SAAS,aAAa,KAAK,UAAU,SAAS,GAAG,QAAQ;AAAA,EAC/D;AAAA,EACD,aAAa,MAAM;AACjB,aAAS,uBAAuB,KAAK,MAAM,YAAY,IAAI;AAC3D,QAAI,OAAO,OAAO,oBAAoB,aAAa;AACjD,aAAO,OAAO,gBAAgB,aAAa,KAAK,KAAK,IAAI;AAAA,IAC1D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAKD,yBAAyB;AACvB,aAAS,iCAAiC,KAAK,GAAG;AAClD,QAAI,OAAO,OAAO,oBAAoB,aAAa;AACjD,aAAO,OAAO,gBAAgB,eAAe,KAAK,GAAG;AAAA,IACtD;AACD,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAID,SAAS,KAAK,OAAO,MAAM;AACzB,QAAI,OAAO,UAAU,MAAM;AACzB,mBAAa,kCAAkC,MAAM,oBAAoB,IAAI;AAC7E;AAAA,IACD;AACD,SAAK,MAAM,GAAG,IAAI;AAClB,aAAS,SAAS,MAAM,QAAQ,KAAK;AACrC,QAAI,QAAQ,CAAA;AACZ,UAAM,GAAG,IAAI;AACb,QAAI,KAAK,gBAAgB,KAAK,YAAY;AACxC,aAAO,gBAAgB,YAAY,KAAK,KAAK,KAAK,UAAU,KAAK,CAAC;AAAA,IACnE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAID,SAAS,KAAK;AACZ,QAAI,QAAQ,KAAK,MAAM,GAAG;AAC1B,aAAS,SAAS,MAAM,QAAQ,KAAK;AACrC,QAAI,OAAO,SAAS,eAAe,KAAK,gBAAgB,KAAK,YAAY;AACvE,cAAQ,OAAO,gBAAgB,YAAY,KAAK,KAAK,GAAG;AACxD,WAAK,MAAM,GAAG,IAAI;AAAA,IACnB;AACD,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAID,YAAY,KAAK;AACf,QAAI,KAAK,gBAAgB,OAAO,OAAO,mBAAmB,eAAe,KAAK,YAAY;AACxF,UAAI,aAAa,OAAO,gBAAgB,YAAY,KAAK,KAAK,GAAG;AACjE,UAAI,cAAc,QAAQ,cAAc;AACtC,eAAO;AACT,UAAI,SAAS,KAAK,MAAM,UAAU;AAClC,UAAI,OAAO,eAAe,GAAG;AAC3B,eAAO,OAAO,GAAG;AACnB,aAAO;AAAA,IACR;AACD,WAAO;AAAA,EACR;AACH;AACA,MAAM,iBAAiB,aAAa;AAAA,EAClC,YAAY,MAAM,aAAa,SAAS,aAAa,KAAK,YAAY,kBAAkB,aAAa;AACnG,UAAM,MAAM,aAAa,SAAS,aAAa,KAAK,YAAY,kBAAkB,WAAW;AAAA,EAC9F;AACH;AACA,MAAM,sBAAsB,SAAS;AAAA,EACnC,YAAY,KAAK,kBAAkB;AACjC,UAAM,SAAS,aAAa,GAAG,GAAG,KAAK,MAAM,kBAAkB,CAAC;AAAA,EACjE;AACH;AACA,MAAM,sBAAsB,SAAS;AAAA,EACnC,YAAY,SAAS,aAAa,aAAa,KAAK,YAAY,kBAAkB,aAAa;AAC7F,UAAM,SAAS,aAAa,SAAS,aAAa,KAAK,YAAY,kBAAkB,WAAW;AAChG,SAAK,MAAM,cAAc;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA,EAID,IAAI,OAAO,OAAO;AAChB,iBAAa,qBAAqB;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA;AAAA,EAKD,IAAI,mBAAmB;AACrB,WAAO,KAAK,SAAS,aAAa;AAAA,EACnC;AAAA,EACD,IAAI,iBAAiB,OAAO;AAC1B,SAAK,SAAS,eAAe,OAAO,QAAQ;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA,EAID,IAAI,cAAc;AAChB,WAAO,KAAK,SAAS,aAAa;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAID,IAAI,aAAa;AACf,WAAO,KAAK,SAAS,YAAY;AAAA,EAClC;AACH;AACA,SAAS,8BAA8B;AACrC,MAAI,OAAO,OAAO,oBAAoB,aAAa;AACjD,WAAO,OAAO,gBAAgB;EAC/B;AACD,SAAO;AACT;AAgCA;AACA;AACA;AACA;AACA,MAAM,iBAAiB;AAAA,EACrB,YAAY,cAAc;AACxB,SAAK,WAAW,IAAI,MAAM,YAAY,EAAE,KAAK,CAAC;AAC9C,SAAK,UAAU,IAAI,MAAM,YAAY,EAAE,KAAK,CAAC;AAC7C,SAAK,kBAAkB;AACvB,SAAK,cAAc;AACnB,SAAK,eAAe;AACpB,SAAK,iBAAiB;AACtB,SAAK,kBAAkB;AACvB,SAAK,kBAAkB;AACvB,SAAK,eAAe;AACpB,SAAK,mBAAmB;AACxB,SAAK,SAAS;AACd,SAAK,cAAc;AAAA,EACpB;AAAA,EACD,MAAM,cAAc,cAAc;AAChC,SAAK,mBAAmB;AACxB,SAAK,eAAe;AACpB,SAAK,kBAAkB;AACvB,SAAK,iBAAiB;AACtB,SAAK,kBAAiB;AAAA,EACvB;AAAA,EACD,MAAM,iBAAiB;AACrB,QAAI,KAAK,iBAAiB,QAAQ,KAAK,qBAAqB,MAAM;AAChE,WAAK,eAAe;AACpB,WAAK,mBAAmB;AAAA,IACzB;AACD,QAAI,KAAK,gBAAgB,GAAG;AAC1B,UAAI,iBAAiB;AACnB,aAAK;AAAA,UACH,KAAK;AAAA,UACL;AAAA,UACA,KAAK;AAAA;AAAA,QAEf;AAAA,MACO;AAAA,IACP,OAAW;AACL,UAAI,iBAAiB;AACnB,aAAK,kBAAkB;AAAA,MACxB;AACD,WAAK,kBAAiB;AAAA,IACvB;AAAA,EACF;AAAA,EACD,kBAAkB;AAChB,YAAQ,cAAc,iBAAiB,IAAI;AAAA,EAC5C;AAAA,EACD,iBAAiB;AACf,YAAQ,cAAc,iBAAiB,KAAK;AAAA,EAC7C;AAAA,EACD,sBAAsB,mBAAmB,MAAM;AAC7C,YAAQ,gBAAgB,SAAS,KAAK,aAAa,mBAAmB,IAAI;AAAA,EAC3E;AAAA,EACD,oBAAoB,oBAAoB,eAAe,WAAW,cAAc;AAC9E,YAAQ,KAAK,mBAAmB,oBAAoB,eAAe,WAAW,YAAY;AAAA,EAC3F;AAAA,EACD,sBAAsB,UAAU,cAAc;AAC5C,YAAQ,KAAK,mBAAmB,UAAU,YAAY;AAAA,EACvD;AAAA,EACD,cAAc,UAAU,UAAU,cAAc;AAC9C,YAAQ,KAAK,mBAAmB,UAAU,UAAU,YAAY;AAAA,EACjE;AAAA,EACD,wBAAwB,OAAO,KAAK,UAAU,cAAc;AAC1D,YAAQ,KAAK,mBAAmB,OAAO,KAAK,UAAU,YAAY;AAAA,EACnE;AAAA,EACD,mBAAmB,UAAU,UAAU,cAAc;AACnD,QAAI;AACF,WAAK,cAAc,UAAU,UAAU,YAAY;AAAA,IACpD,SAAQ,GAAP;AACA,cAAQ,MAAM,sBAAsB,CAAC;AAAA,IACtC;AAAA,EACF;AAAA,EACD,oBAAoB;AAClB,QAAI,KAAK,cAAc;AACrB;AAAA,IACD;AACD,QAAI,KAAK,gBAAgB,GAAG;AAC1B,UAAI,KAAK,gBAAgB;AACvB,aAAK,iBAAiB;AACtB,YAAI,KAAK,mBAAmB;AAC1B,eAAK,cAAc;AAAA,QACpB;AAAA,MACF;AAAA,IACP,WAAe,KAAK,gBAAgB,GAAG;AACjC,WAAK,eAAc;AAAA,IACpB;AAAA,EACF;AAAA,EACD,kBAAkB;AAChB,SAAK,eAAe,KAAK;AACzB,SAAK,mBAAmB;AACxB,UAAM,eAAe,KAAK;AAC1B,SAAK,kBAAkB;AACvB,UAAM,QAAQ,CAAC,GAAG,KAAK,QAAQ;AAC/B,UAAM,MAAM,KAAK;AACjB,UAAM,OAAO,KAAK,oBAAoB,OAAO,KAAK,YAAY;AAC9D,UAAM,WAAW,CAAC,GAAG,GAAG;AACxB,UAAM,OAAO;AACb,UAAM,WAAW,IAAI,QAAQ,kBAAmB,EAAC;AAAA,MAC/C,CAAC,aAAa;AACZ,aAAK;AAAA,UACH;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACV;AAAA,MACO;AAAA,IACP;AACI,QAAI,SAAS,MAAM;AACjB,iBAAW,MAAM;AACf,aAAK;AAAA,UACH;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACV;AAAA,MACO,GAAE,CAAC;AACJ;AAAA,IACD;AACD,SAAK,sBAAsB,UAAU,YAAY;AACjD,SAAK,qBAAqB,QAAQ;AAClC,SAAK,OAAO,QAAQ,gBAAgB,aAAa;AACjD,SAAK,YAAY,eAAe,IAAI;AACpC,WAAO;AAAA,EACR;AAAA,EACD,iBAAiB;AACf,SAAK,YAAY;EAClB;AAAA,EACD,UAAU,OAAO,KAAK,UAAU,cAAc;AAC5C,SAAK,wBAAwB,OAAO,KAAK,UAAU,YAAY;AAC/D,SAAK,eAAe;AACpB,SAAK,cAAc;AACnB,UAAM,kBAAkB,KAAK;AAC7B,UAAM,iBAAiB,KAAK;AAC5B,SAAK,kBAAkB;AACvB,SAAK,eAAe;AACpB,QAAI,iBAAiB;AACnB,WAAK,mBAAmB,KAAK,UAAU,iBAAiB,YAAY;AAAA,IACrE;AACD,QAAI,kBAAkB,aAAa,GAAG;AACpC,WAAK,mBAAmB,KAAK,UAAU,gBAAgB,YAAY;AAAA,IACpE;AACD,SAAK,eAAe;AACpB,SAAK,kBAAiB;AAAA,EACvB;AAAA,EACD,SAAS,UAAU;AACjB,SAAK,cAAc;AAAA,EACpB;AACH;AAEA;AACA;AACA;AACA,MAAM,sBAAsB;AAC5B,MAAM,0BAA0B;AAChC,MAAM,uBAAuB;AAC7B;AACA,MAAM,4BAA4B,iBAAiB;AAAA,EACjD,cAAc;AACZ,UAAM,CAAC;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA,EAKD,MAAM,iBAAiB;AACrB,UAAM,MAAM,eAAe;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOD,QAAQ,UAAU,OAAO,cAAc;AACrC,SAAK,aAAa,GAAG,UAAU,KAAK,OAAO,MAAM,YAAY;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOD,QAAQ,UAAU,OAAO,cAAc;AACrC,SAAK,aAAa,GAAG,KAAK,UAAU,OAAO,MAAM,YAAY;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQD,iBAAiB,mBAAmB,MAAM;AACxC,SAAK,sBAAsB,mBAAmB,IAAI;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASD,iBAAiB,UAAU,OAAO,cAAc,iBAAiB;AAC/D,SAAK;AAAA,MACH;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,QACE,OAAO;AAAA,QACP,gBAAgB;AAAA,MACjB;AAAA,MACD;AAAA,IACN;AAAA,EACG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASD,iBAAiB,UAAU,OAAO,cAAc,iBAAiB;AAC/D,SAAK;AAAA,MACH;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,QACE,OAAO;AAAA,QACP,gBAAgB;AAAA,MACjB;AAAA,MACD;AAAA,IACN;AAAA,EACG;AAAA,EACD,aAAa,QAAQ,UAAU,UAAU,OAAO,YAAY,cAAc;AACxE,UAAM,eAAe;AAAA,MACnB,MAAM;AAAA,MACN,MAAM;AAAA,MACN;AAAA,MACA,WAAW;AAAA,IACjB;AACI,SAAK,QAAQ,CAAC,IAAI;AAClB,SAAK,QAAQ,CAAC,IAAI;AAClB,UAAM,MAAM,cAAc,YAAY;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBD,YAAY,QAAQ,KAAK,eAAe,cAAc,eAAe;AACnE,SAAK,OAAO,GAAG,QAAQ,KAAK,eAAe,cAAc,aAAa;AAAA,EACvE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBD,YAAY,QAAQ,KAAK,eAAe,cAAc,eAAe;AACnE,SAAK,OAAO,GAAG,QAAQ,KAAK,eAAe,cAAc,aAAa;AAAA,EACvE;AAAA,EACD,OAAO,QAAQ,QAAQ,KAAK,eAAe,cAAc,eAAe;AACtE,QAAI,cAAc,MAAM,MAAM,KAAK,IAAI;AACvC,UAAM,MAAM,MAAM;AAChB,YAAM,eAAe,KAAK,yBAAyB,QAAQ,QAAQ,KAAK,eAAe,aAAa;AACpG,UAAI,iBAAiB,MAAM;AACzB,oBAAY,cAAc,YAAY;AAAA,MAEvC;AAAA,IACP,CAAK;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,OAAO,OAAO,OAAO;AACnB,SAAK,QAAQ,CAAC,IAAI;AAClB,SAAK,QAAQ,CAAC,IAAI;AAClB,UAAM,eAAe;AAAA,MACnB,MAAM;AAAA,IACZ;AACI,UAAM,MAAM,cAAc,IAAI;AAAA,EAC/B;AAAA,EACD,yBAAyB,QAAQ,QAAQ,KAAK,eAAe,eAAe;AAC1E,UAAM,eAAe;AAAA,MACnB,MAAM;AAAA,MACN,MAAM;AAAA,MACN,OAAO;AAAA,MACP;AAAA,MACA,SAAS;AAAA,MACT,cAAc;AAAA,MACd,cAAc;AAAA,MACd,gBAAgB,SAAS,KAAK,WAAW,KAAK,MAAM;AAAA,IAC1D;AACI,QAAI,YAAY,WAAW,IAAI,KAAK,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC;AACjE,QAAI,QAAQ,GAAG;AACb,cAAQ,MAAM,oCAAoC;AAClD,aAAO;AAAA,IACR;AACD,QAAI,mBAAmB;AACvB,QAAI,kBAAkB,cAAc;AACpC,QAAI,YAAY,OAAO,UAAU,eAAe,KAAK,eAAe,UAAU,IAAI,cAAc,WAAW,cAAc,SAAS;AAClI,QAAI,gBAAgB;AACpB,QAAI,qBAAqB;AACzB,QAAI,SAAS,KAAK,WAAW,KAAK,MAAM,GAAG;AACzC,yBAAmB;AACnB,eAAS,CAAC;AACV,YAAM,CAAC;AACP,kBAAY,CAAC;AACb,wBAAkB,CAAC;AACnB,kBAAY,CAAC;AAAA,IACd;AACD,QAAI,MAAM,SAAS,GAAG;AACpB,sBAAgB,YAAY,SAAS,SAAS,IAAI,CAAC;AACnD,UAAI,SAAS,kBAAkB,GAAG;AAChC,YAAI,YAAY,eAAe;AAC7B,kBAAQ,MAAM,gCAAgC,6BAA6B,WAAW;AACtF,iBAAO;AAAA,QACR;AACD,6BAAqB;AAAA,MAC7B,OAAa;AACL,YAAI,YAAY,iBAAiB,YAAY,WAAW;AACtD,kBAAQ,MAAM,+BAA+B,aAAa,6BAA6B,WAAW;AAClG,iBAAO;AAAA,QACR;AAAA,MACF;AAAA,IACP,OAAW;AACL,UAAI,MAAM,kBAAkB,GAAG;AAC7B,gBAAQ,MAAM,2CAA2C;AACzD,eAAO;AAAA,MACR;AACD,UAAI,YAAY,WAAW;AACzB,gBAAQ,MAAM,gCAAgC,yBAAyB,WAAW;AAClF,eAAO;AAAA,MACR;AAAA,IACF;AACD,QAAI,kBAAkB;AACpB,kBAAY,CAAC;AACb,sBAAgB,CAAC;AAAA,IAClB;AACD,iBAAa,UAAU;AACvB,iBAAa,eAAe;AAC5B,QAAI,WAAW,GAAG;AAChB,WAAK,QAAQ,CAAC,IAAI;AAClB,WAAK,QAAQ,CAAC,IAAI,KAAK,SAAS,CAAC;AAAA,IACvC,OAAW;AACL,WAAK,QAAQ,CAAC,IAAI,KAAK,SAAS,CAAC;AACjC,WAAK,QAAQ,CAAC,IAAI;AAAA,IACnB;AACD,WAAO;AAAA,EACR;AAAA,EACD,qBAAqB,eAAe,WAAW,cAAc;AAC3D,UAAM,OAAO,IAAI,QAAQ;AAAA,MACvB,cAAc,CAAC;AAAA,MACf,cAAc,CAAC;AAAA,MACf,aAAa;AAAA,MACb,aAAa;AAAA,MACb,aAAa;AAAA,MACb,aAAa,SAAS,IAAI,UAAU,CAAC,IAAI,UAAU,CAAC;AAAA,MACpD,aAAa;AAAA,MACb,aAAa;AAAA,IACnB;AACI,SAAK,gBAAgB,aAAa,YAAY;AAC9C,WAAO;AAAA,EACR;AAAA,EACD,2BAA2B,eAAe,WAAW,cAAc;AACjE,UAAM,WAAW,aAAa,SAAS;AACvC,UAAM,WAAW,WAAW,cAAc,CAAC,IAAI,cAAc,CAAC;AAC9D,UAAM,SAAS,WAAW,UAAU,CAAC,IAAI,UAAU,CAAC;AACpD,QAAI,OAAO;AACX,QAAI,YAAY,QAAQ;AACtB,aAAO;AAAA,IACR;AACD,QAAI,aAAa,cAAc,MAAM;AACnC,YAAM,aAAa,aAAa;AAChC,YAAM,iBAAiB,WAAW,WAAW,UAAU,SAAS,WAAW;AAC3E,UAAI,gBAAgB,KAAK,gBAAgB,GAAG;AAC1C,gBAAQ,MAAM,kBAAkB,gCAAgC,WAAW,SAAS,SAAS;AAC7F,eAAO;AAAA,MACR;AACD,aAAO,IAAI,QAAQ;AAAA,QACjB,WAAW;AAAA,QACX;AAAA,QACA,aAAa;AAAA,QACb;AAAA,QACA,cAAc,CAAC;AAAA,QACf,cAAc,CAAC;AAAA,MACvB;AACM,WAAK,YAAY,aAAa;AAC9B,WAAK,eAAc;AAAA,IACzB,OAAW;AACL,aAAO,IAAI,QAAQ;AAAA,QACjB;AAAA,QACA;AAAA,QACA,aAAa;AAAA,QACb;AAAA,QACA,cAAc,CAAC;AAAA,QACf,cAAc,CAAC;AAAA,MACvB;AAAA,IACK;AACD,WAAO;AAAA,EACR;AAAA,EACD,oBAAoB,eAAe,WAAW;AAC5C,UAAM,OAAO,IAAI,QAAQ;AAAA,MACvB,UAAU,CAAC;AAAA,MACX,UAAU,CAAC;AAAA,MACX,UAAU,CAAC;AAAA,MACX,UAAU,CAAC;AAAA,MACX;AAAA,MACA;AAAA,IACN;AACI,WAAO;AAAA,EACR;AAAA,EACD,yBAAyB,OAAO,KAAK,UAAU,cAAc;AAC3D,UAAM,WAAW,EAAE,GAAG,EAAE,OAAO,MAAM,CAAC,KAAK,GAAG,EAAE,OAAO,MAAM,CAAC,EAAG,EAAA;AACjE,QAAI,OAAO,aAAa,SAAS,IAAI,SAAS,EAAE,QAAQ,SAAS,EAAE;AACnE,QAAI,KAAK,aAAa,SAAS,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC;AACjD,UAAM,sBAAsB,aAAa,SAAS,IAAI,SAAS,IAAI,SAAS;AAC5E,QAAI,mBAAmB;AACvB,WAAO,aAAa,iBAAiB,OAAO,CAAC;AAC7C,SAAK,aAAa,iBAAiB,KAAK,CAAC;AACzC,UAAM,gBAAgB,aAAa,iBAAiB,aAAa,eAAe,CAAC,aAAa;AAC9F,QAAI,aAAa,SAAS;AACxB,YAAM,SAAS,gBAAgB,IAAI,OAAO,MAAM;AAChD,UAAI,QAAQ,gBAAgB,MAAM;AAChC,2BAAmB,iBAAiB,SAAS,gBAAgB;AAAA,MACrE,OAAa;AACL,2BAAmB,OAAO;AAAA,MAC3B;AAAA,IACP,OAAW;AACL,yBAAmB,QAAQ,KAAK,QAAQ;AAAA,IACzC;AACD,wBAAoB,QAAQ,KAAK,MAAM,aAAa,iBAAiB,mBAAmB,CAAC,gBAAgB;AACzG,SAAK,SAAS,CAAC,IAAI,SAAS,EAAE;AAC9B,SAAK,SAAS,CAAC,IAAI,SAAS,EAAE;AAAA,EAC/B;AAAA,EACD,yBAAyB,OAAO,KAAK,UAAU,cAAc;AAC3D,QAAI,eAAe,cAAc,WAAW;AAC5C,QAAI,aAAa,SAAS,GAAG;AAC3B,YAAM,CAAC,IAAI,eAAe,eAAe,MAAM,CAAC;AAChD,YAAM,SAAS,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,WAAW,MAAM,CAAC;AACtD,YAAM,YAAY,SAAS,IAAI,IAAI;AACnC,WAAK,SAAS,CAAC,IAAI,YAAY,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC;AAAA,IAC/D,OAAW;AACL,YAAM,CAAC,IAAI,eAAe,eAAe,MAAM,CAAC;AAChD,YAAM,SAAS,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,WAAW,MAAM,CAAC;AACtD,YAAM,YAAY,SAAS,IAAI,IAAI;AACnC,WAAK,SAAS,CAAC,IAAI,YAAY,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC;AAAA,IAC1D;AAAA,EACF;AAAA,EACD,wBAAwB,OAAO,KAAK;AAClC,SAAK,SAAS,CAAC,IAAI,IAAI,CAAC;AACxB,SAAK,SAAS,CAAC,IAAI,IAAI,CAAC;AAAA,EACzB;AAAA;AAAA,EAED,QAAQ;AAAA,EACP;AAAA;AAAA,EAED,oBAAoB,eAAe,WAAW,cAAc;AAC1D,QAAI,aAAa,SAAS,qBAAqB;AAC7C,aAAO,KAAK,qBAAqB,eAAe,WAAW,YAAY;AAAA,IACxE;AACD,QAAI,aAAa,SAAS,yBAAyB;AACjD,aAAO,KAAK,2BAA2B,eAAe,WAAW,YAAY;AAAA,IAC9E;AACD,QAAI,aAAa,SAAS,sBAAsB;AAC9C,aAAO,KAAK,oBAAoB,eAAe,SAAS;AAAA,IACzD;AACD,YAAQ,MAAM,qBAAqB;AAAA,EACpC;AAAA;AAAA,EAED,sBAAsB,UAAU,cAAc;AAC5C,QAAI,aAAa,SAAS,yBAAyB;AACjD,UAAI,aAAa,cAAc,QAAQ,aAAa,UAAU,gBAAgB;AAC5E,cAAM,kBAAkB,aAAa,UAAU;AAC/C,iBAAS,SAAS,CAAC,UAAU;AAC3B,0BAAgB,KAAK;AAAA,QAC/B,CAAS;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAED,cAAc,UAAU,UAAU,cAAc;AAC9C,QAAI,UAAU;AACZ,eAAS,SAAS,CAAC,GAAG,SAAS,CAAC,GAAG,YAAY;AAAA,IAChD;AAAA,EACF;AAAA;AAAA,EAED,wBAAwB,OAAO,KAAK,UAAU,cAAc;AAC1D,QAAI,aAAa,SAAS,qBAAqB;AAC7C,WAAK,yBAAyB,OAAO,KAAK,UAAU,YAAY;AAAA,IACtE,WAAe,aAAa,SAAS,yBAAyB;AACxD,aAAO,KAAK,yBAAyB,OAAO,KAAK,UAAU,YAAY;AAAA,IAC7E,WAAe,aAAa,SAAS,sBAAsB;AACrD,aAAO,KAAK,wBAAwB,OAAO,GAAG;AAAA,IACpD,OAAW;AACL,cAAQ,MAAM,qBAAqB;AAAA,IACpC;AAAA,EACF;AACH;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2CK,MAAC,cAAc;AAAA,EAClB,QAAQ;AAAA,EACR,OAAO;AAAA,IACL,SAAS;AAAA,MACP,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA,EACF;AAAA,EACD,MAAM,SAAS,EAAE,UAAU;AACzB,UAAM,QAAQ;AACd,QAAI,aAAa,WAAW,IAAI;AAChC,cAAU,MAAM;AACd,YAAM,QAAQ,SAAS,WAAW,MAAM,gBAAe,CAAE;AAAA,IAC/D,CAAK;AACD,WAAO;AAAA,MACL,SAAS;AAAA,IACf,CAAK;AACD,WAAO,CAAC,MAAM,WAAW;AACvB,aAAO,UAAS,GAAI,mBAAmB,OAAO;AAAA,QAC5C,SAAS;AAAA,QACT,KAAK;AAAA,MACb,GAAS;AAAA,QACD,WAAW,KAAK,QAAQ,SAAS;AAAA,MAClC,GAAE,GAAG;AAAA,IACZ;AAAA,EACG;AACH;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkBK,MAAC,cAAc;AAAA,EAClB,QAAQ;AAAA,EACR,OAAO;AAAA;AAAA,IAEL,KAAK;AAAA,MACH,SAAS;AAAA,MACT,MAAM;AAAA,IACP;AAAA,IACD,MAAM;AAAA,MACJ,SAAS;AAAA,MACT,MAAM;AAAA,IACP;AAAA;AAAA,IAED,OAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM;AAAA,IACP;AAAA,IACD,QAAQ;AAAA,MACN,SAAS;AAAA,MACT,MAAM;AAAA,IACP;AAAA,EACF;AAAA,EACD,MAAM,SAAS,EAAE,UAAU;AACzB,UAAM,QAAQ;AACd,QAAI,aAAa,WAAW,IAAI;AAChC,QAAI,aAAa,IAAI;AACrB,cAAU,MAAM;AACd,iBAAW,cAAc,WAAW,MAAM,gBAAiB,CAAA;AAAA,IACjE,CAAK;AACD,WAAO;AAAA,MACL,SAAS;AAAA,IACf,CAAK;AACD,WAAO,CAAC,MAAM,WAAW;AACvB,aAAO,UAAS,GAAI,mBAAmB,OAAO;AAAA,QAC5C,OAAO,eAAe;AAAA,UACpB,KAAK,MAAM;AAAA,UACX,MAAM,MAAM;AAAA,QACtB,CAAS;AAAA,MACT,GAAS;AAAA,QACDD,gBAAmB,OAAO;AAAA,UACxB,SAAS;AAAA,UACT,KAAK;AAAA,UACL,OAAO,eAAe;AAAA,YACpB,KAAK;AAAA,YACL,MAAM;AAAA,YACN,OAAO,MAAM;AAAA,YACb,QAAQ,MAAM;AAAA,UAC1B,CAAW;AAAA,QACX,GAAW;AAAA,UACD,WAAW,KAAK,QAAQ,SAAS;AAAA,QAClC,GAAE,CAAC;AAAA,MACL,GAAE,CAAC;AAAA,IACV;AAAA,EACG;AACH;AAEA;AACA;AACA;AACA,MAAM,YAAY;AAAA,EAChB,MAAM;AAAA,EACN,GAAG;AAAA,EACH,GAAG;AAAA,EACH,IAAI;AAAA;AAEN;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBK,MAAC,cAAc;AAAA,EAClB,QAAQ;AAAA,EACR,OAAO;AAAA;AAAA,IAEL,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,KAAK;AAAA,MACH,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,OAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA;AAAA,IAED,QAAQ;AAAA,MACN,MAAM;AAAA,IACP;AAAA,IACD,WAAW;AAAA,MACT,MAAM;AAAA,IACP;AAAA,IACD,SAAS;AAAA,MACP,MAAM;AAAA,IACP;AAAA,IACD,UAAU;AAAA,MACR,MAAM;AAAA,IACP;AAAA;AAAA,IAED,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,EACF;AAAA,EACD,MAAM,SAAS;AACb,UAAM,QAAQ;AACd,UAAM,UAAU,WAAW,IAAI;AAC/B,UAAM,cAAc,SAAS,EAAE,QAAQ,MAAO,CAAA;AAC9C,QAAI,YAAY;AAChB,gBAAY,MAAM;AAChB,UAAI,YAAY,QAAQ;AACtB,YAAI,CAAC,MAAM,MAAM,MAAM,GAAG;AACxB,oBAAU,YAAY,MAAM,MAAM;AAAA,QACnC;AACD,YAAI,CAAC,MAAM,MAAM,SAAS,GAAG;AAC3B,oBAAU,eAAe,MAAM,SAAS;AAAA,QACzC;AACD,YAAI,CAAC,MAAM,MAAM,OAAO,GAAG;AACzB,oBAAU,aAAa,MAAM,OAAO;AAAA,QACrC;AACD,YAAI,CAAC,MAAM,MAAM,QAAQ,GAAG;AAC1B,oBAAU,cAAc,MAAM,QAAQ;AAAA,QACvC;AAAA,MACF;AAAA,IACP,CAAK;AACD,gBAAY,MAAM;AAChB,UAAI,YAAY,QAAQ;AACtB,kBAAU,OAAO,MAAM,MAAM;AAAA,MAC9B;AAAA,IACP,CAAK;AACD,cAAU,MAAM;AACd,cAAQ,IAAI,2BAA2B;AACvC,kBAAY,IAAI,QAAQ;AAAA,QACtB,MAAM,QAAQ,KAAK,EAAE,gBAAiB;AAAA,MAC9C;AACM,kBAAY,SAAS;AAAA,IAC3B,CAAK;AACD,gBAAY,MAAM;AAChB,kBAAY,SAAS;AACrB,gBAAU,OAAO,KAAK;AAAA,IAC5B,CAAK;AACD,gBAAY,MAAM;AAChB,gBAAU,OAAO,MAAM,MAAM;AAAA,IACnC,CAAK;AACD,kBAAc,MAAM;AAClB,gBAAU,OAAO,KAAK;AAAA,IAC5B,CAAK;AACD,WAAO,CAAC,MAAM,WAAW;AACvB,aAAO,UAAS,GAAI,mBAAmB,OAAO;AAAA,QAC5C,SAAS;AAAA,QACT,KAAK;AAAA,QACL,OAAO,eAAe;AAAA,UACpB,KAAK,MAAM;AAAA,UACX,MAAM,MAAM;AAAA,UACZ,OAAO,MAAM;AAAA,UACb,QAAQ,MAAM;AAAA,QACxB,CAAS;AAAA,MACT,GAAS;AAAA,QACD,WAAW,KAAK,QAAQ,SAAS;AAAA,MAClC,GAAE,CAAC;AAAA,IACV;AAAA,EACG;AACH;AAEA;AACA;AACA;AACG,IAAC,cAAc;AAAA,EAChB;AAAA,EACA;AACF;AACG,IAAC,eAAe;AAAA,EACjB;AACF;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqCK,MAAC,cAAc;AAAA,EAClB,QAAQ;AAAA,EACR,OAAO;AAAA,IACL,OAAO;AAAA,IACP,SAAS;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,SAAS;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,EACF;AAAA,EACD,MAAM,SAAS,EAAE,UAAU;AACzB,UAAM,QAAQ;AACd,QAAI,SAAS,WAAW,CAAA,CAAE;AAC1B,WAAO,MAAM,yBAAyB,IAAI;AAC1C,gBAAY,MAAM;AAChB,aAAO,MAAM,QAAQ,EAAE,UAAU,UAAU,GAAG,MAAM,OAAO,UAAU;IAC3E,CAAK;AACD,QAAI,QAAQ,WAAW,MAAM;AAC7B,QAAI,QAAQ,WAAW,MAAM;AAC7B,QAAI,YAAY,WAAW,MAAM;AACjC,QAAI,aAAa,WAAW,MAAM;AAClC,QAAI,iBAAiB,CAAC,GAAG,GAAG,OAAO,WAAW;AAC5C,YAAM,QAAQ;AACd,YAAM,QAAQ;AACd,gBAAU,QAAQ;AAClB,iBAAW,QAAQ;AACnB,UAAI,SAAS,KAAK,UAAU,GAAG;AAC7B,cAAM,UAAU,OAAO,MAAM;AAAA,MAC9B;AAAA,IACP;AACI,QAAI,eAAe,WAAW,IAAI;AAClC,QAAI,uBAAuB;AAC3B,gBAAY,MAAM;AAChB,WAAK,MAAM,WAAW,MAAM,WAAW,SAAS,aAAa,SAAS,MAAM;AAC1E,YAAI,CAAC,sBAAsB;AACzB,uBAAa,MAAM,gBAAiB,EAAC,qBAAqB,cAAc;AACxE,iCAAuB;AAAA,QACxB;AAAA,MACT,OAAa;AACL,YAAI,sBAAsB;AACxB,uBAAa,MAAM,gBAAiB,EAAC,qBAAqB,IAAI;AAC9D,iCAAuB;AAAA,QACxB;AAAA,MACF;AAAA,IACP,CAAK;AACD,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASL,UAAU,MAAM;AACd,eAAO,UAAU;AAAA,MAClB;AAAA,MACD,WAAW,MAAM;AACf,eAAO,WAAW;AAAA,MACnB;AAAA,IACP,CAAK;AACD,WAAO,CAAC,MAAM,WAAW;AACvB,aAAO,UAAW,GAAE,mBAAmB,OAAO,WAAW;AAAA,QACvD,SAAS;AAAA,QACT,KAAK;AAAA,MACb,GAAS,EAAE,GAAG,KAAK,QAAQ,GAAG,MAAM,MAAM,EAAC,CAAE,GAAG;AAAA,QACxC,WAAW,KAAK,QAAQ,SAAS;AAAA,MAClC,GAAE,EAAE;AAAA,IACX;AAAA,EACG;AACH;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA,IAAI,UAAU;AAAA,EACZ,gBAAgB;AAAA,EAChB,UAAU;AAAA,EACV,cAAc;AAChB;AACA,OAAO,QAAQ,aAAa,cAAc,MAAM;AAC9C,UAAQ,iBAAiB,OAAO,QAAQ,aAAa;AACrD,UAAQ,WAAW,OAAO,QAAQ,aAAa;AAC/C,UAAQ,eAAe,OAAO,QAAQ,aAAa;AACrD,CAAC;AAED;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyBA,MAAM,cAAc;AAAA,EAClB,OAAO;AAAA,IACL,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS,SAAS;AAAA,IACnB;AAAA,IACD,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS,MAAM,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;AAAA,IAC7B;AAAA,IACD,SAAS;AAAA,IACT,OAAO;AAAA,IACP,QAAQ;AAAA,EACT;AAAA,EACD,QAAQ;AACN,WAAO;AAAA,MACL,SAAS,CAAE;AAAA,IACjB;AAAA,EACG;AAAA,EACD,OAAO;AACL,WAAO;AAAA,MACL,WAAW;AAAA,MACX,SAAS;AAAA,IACf;AAAA,EACG;AAAA,EACD,SAAS;AAAA,IACP,OAAO;AACL,UAAI,KAAK,MAAM,SAAS;AACtB,YAAI,kBAAkB,KAAK,MAAM,QAAQ;AAAA,UACvC,QAAQ;AAAA,QAClB;AACQ,YAAI,SAAS;AAAA,UACX,IAAI,KAAK;AAAA,UACT,IAAI,KAAK;AAAA,QACnB;AACQ,wBAAgB;AAAA,UACd,MAAM,eAAe;AAAA,UACrB,KAAK,UAAU,MAAM;AAAA,QAC/B;AACQ,wBAAgB,kBAAkB,KAAK,SAAS;AAChD,YAAI,KAAK,SAAS;AAChB,eAAK,YAAY,gBAAgB,gBAAgB,KAAK,OAAO;AAAA,QAC9D;AACD,wBAAgB,gBAAgB,KAAK,OAAO;AAC5C,YAAI,KAAK,OAAO;AACd,eAAK,UAAU,gBAAgB,cAAc,KAAK,KAAK;AAAA,QACxD;AAAA,MACF;AAAA,IACF;AAAA,IACD,OAAO;AACL,UAAI,KAAK,MAAM,SAAS;AACtB,YAAI,kBAAkB,KAAK,MAAM,QAAQ;AAAA,UACvC,QAAQ;AAAA,QAClB;AACQ,wBAAgB,gBAAgB,MAAM,eAAe,WAAW,EAAE;AAAA,MACnE;AAAA,IACF;AAAA,EACF;AAAA,EACD,UAAU;AACR,QAAI,KAAK,UAAU;AACjB,WAAK,KAAI;AAAA,IACV;AACD,QAAI,KAAK,QAAQ;AACf,UAAI,KAAK,MAAM,SAAS;AACtB,YAAI,kBAAkB,KAAK,MAAM,QAAQ;AAAA,UACvC,QAAQ;AAAA,QAClB;AACQ,wBAAgB,0BAA0B,MAAM,KAAK,QAAQ,IAAI;AAAA,MAClE;AAAA,IACF;AAAA,EACF;AAAA,EACD,gBAAgB;AACd,SAAK,KAAI;AACT,QAAI,KAAK,MAAM,SAAS;AACtB,UAAI,kBAAkB,KAAK,MAAM,QAAQ;AAAA,QACvC,QAAQ;AAAA,MAChB;AACM,UAAI,KAAK,SAAS;AAChB,wBAAgB,kBAAkB,KAAK,SAAS;AAAA,MACjD;AACD,UAAI,KAAK,OAAO;AACd,wBAAgB,gBAAgB,KAAK,OAAO;AAAA,MAC7C;AAAA,IACF;AAAA,EACF;AACH;AACA,SAAS,cAAc,MAAM,QAAQ,QAAQ,QAAQ,OAAO,UAAU;AACpE,SAAO,UAAS,GAAI,mBAAmB,OAAO;AAAA,IAC5C,kCAAkC;AAAA,IAClC,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK,OAAO;AAAA,IACZ,OAAO,eAAe,OAAO,KAAK;AAAA,EACnC,GAAE,MAAM,IAAI,CAAC,KAAK,CAAC;AACtB;AACA,MAAM,UAA0B,4BAAY,aAAa,CAAC,CAAC,UAAU,aAAa,CAAC,CAAC;AAEpF;AACA;AACA;AACA;AACA,IAAI;AACJ,IAAI,OAAO,QAAQ;AACjB,aAAW;AACb,OAAO;AACL,QAAM,cAAc,MAAM,OAAO,+BAA+B;AAChE,aAAW,YAAY;AACzB;AACK,MAAC,aAAa;AAEnB;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiCA,MAAM,cAAc;AAAA,EAClB,OAAO;AAAA,IACL,KAAK;AAAA,IACL,OAAO;AAAA,IACP,SAAS;AAAA,IACT,OAAO;AAAA,IACP,QAAQ;AAAA,EACT;AAAA,EACD,QAAQ;AACN,WAAO;AAAA,MACL,SAAS,CAAE;AAAA,IACjB;AAAA,EACG;AAAA,EACD,OAAO;AACL,WAAO;AAAA,MACL,WAAW;AAAA,MACX,SAAS;AAAA,IACf;AAAA,EACG;AAAA,EACD,SAAS;AAAA,IACP,KAAK,aAAa,GAAG;AACnB,UAAI,CAAC,MAAM,UAAU,GAAG;AACtB,aAAK,KAAK,SAAS,aAAa,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;AAAA,MACrD;AAAA,IACF;AAAA,IACD,KAAK,UAAU,UAAU,UAAU;AACjC,UAAI,SAAS;AAAA,QACX,IAAI;AAAA,QACJ,IAAI;AAAA,MACZ;AACM,UAAI,oBAAoB,OAAO;AAC7B,eAAO,KAAK;AAAA,MACpB,WAAiB,CAAC,MAAM,QAAQ,GAAG;AAC3B,eAAO,KAAK,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC;AAAA,MACrC,OAAa;AACL,eAAO,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;AAAA,MACvB;AACD,UAAI,KAAK,MAAM,SAAS;AACtB,YAAI,kBAAkB,KAAK,MAAM,QAAQ;AAAA,UACvC,QAAQ;AAAA,QAClB;AACQ,wBAAgB;AAAA,UACd,MAAM,eAAe;AAAA,UACrB,KAAK,UAAU,MAAM;AAAA,QAC/B;AACQ,wBAAgB,kBAAkB,KAAK,SAAS;AAChD,YAAI,KAAK,SAAS;AAChB,eAAK,YAAY,gBAAgB,gBAAgB,KAAK,OAAO;AAAA,QAC9D;AACD,wBAAgB,gBAAgB,KAAK,OAAO;AAC5C,YAAI,KAAK,OAAO;AACd,eAAK,UAAU,gBAAgB,cAAc,KAAK,KAAK;AAAA,QACxD;AAAA,MACF;AAAA,IACF;AAAA,IACD,OAAO;AACL,UAAI,KAAK,MAAM,SAAS;AACtB,YAAI,kBAAkB,KAAK,MAAM,QAAQ;AAAA,UACvC,QAAQ;AAAA,QAClB;AACQ,wBAAgB,gBAAgB,MAAM,eAAe,WAAW,EAAE;AAAA,MACnE;AAAA,IACF;AAAA,EACF;AAAA,EACD,UAAU;AACR,QAAI,KAAK,QAAQ;AACf,UAAI,KAAK,MAAM,SAAS;AACtB,YAAI,kBAAkB,KAAK,MAAM,QAAQ;AAAA,UACvC,QAAQ;AAAA,QAClB;AACQ,wBAAgB,0BAA0B,MAAM,KAAK,QAAQ,IAAI;AAAA,MAClE;AAAA,IACF;AAAA,EACF;AAAA,EACD,gBAAgB;AACd,SAAK,KAAI;AACT,QAAI,KAAK,MAAM,SAAS;AACtB,UAAI,kBAAkB,KAAK,MAAM,QAAQ;AAAA,QACvC,QAAQ;AAAA,MAChB;AACM,UAAI,KAAK,SAAS;AAChB,wBAAgB,kBAAkB,KAAK,SAAS;AAAA,MACjD;AACD,UAAI,KAAK,OAAO;AACd,wBAAgB,gBAAgB,KAAK,OAAO;AAAA,MAC7C;AAAA,IACF;AAAA,EACF;AACH;AACA,SAAS,cAAc,MAAM,QAAQ,QAAQ,QAAQ,OAAO,UAAU;AACpE,SAAO,UAAS,GAAI,mBAAmB,OAAO;AAAA,IAC5C,kCAAkC;AAAA,IAClC,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK,OAAO;AAAA,IACZ,OAAO,eAAe,OAAO,KAAK;AAAA,EACnC,GAAE,MAAM,IAAI,CAAC,KAAK,CAAC;AACtB;AACA,MAAM,WAA2B,4BAAY,aAAa,CAAC,CAAC,UAAU,aAAa,CAAC,CAAC;AAErF;AACA;AACA;AACA;AACA,IAAI;AACJ,IAAI,OAAO,QAAQ;AACjB,cAAY;AACd,OAAO;AACL,QAAM,eAAe,MAAM,OAAO,gCAAgC;AAClE,cAAY,aAAa;AAC3B;AACK,MAAC,cAAc;AAEpB;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,MAAM,cAAc;AAAA,EAClB,OAAO;AAAA,IACL,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,KAAK,EAAE,MAAM,QAAQ,SAAS,EAAG;AAAA,IACjC,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,OAAO;AAAA,EACR;AAAA,EACD,QAAQ;AACN,WAAO;AAAA,MACL,eAAe;AAAA,MACf,SAAS,IAAI,KAAK;AAAA,IACxB;AAAA,EACG;AAAA,EACD,SAAS;AAAA,IACP,iBAAiB;AACf,UAAI,KAAK,gBAAgB,GAAG;AAC1B,sBAAc,KAAK,aAAa;AAChC,aAAK,gBAAgB;AAAA,MACtB;AAAA,IACF;AAAA,IACD,aAAa;AACX,WAAK,eAAc;AACnB,WAAK,gBAAgB,YAAY,MAAM;AACrC,aAAK,UAAU,CAAC,KAAK;AAAA,MACtB,GAAE,GAAG;AAAA,IACP;AAAA,IACD,UAAU,MAAM;AACd,WAAK,eAAc;AACnB,WAAK,UAAU;AAAA,IAChB;AAAA,EACF;AAAA,EACD,UAAU;AACR,SAAK,WAAU;AAAA,EAChB;AAAA,EACD,gBAAgB;AACd,SAAK,eAAc;AAAA,EACpB;AACH;AACA,SAAS,cAAc,MAAM,QAAQ,QAAQ,QAAQ,OAAO,UAAU;AACpE,SAAO,UAAS,GAAI,mBAAmB,OAAO;AAAA,IAC5C,OAAO,eAAe;AAAA,MACpB,MAAM,OAAO;AAAA,MACb,KAAK,OAAO;AAAA,MACZ,OAAO,OAAO;AAAA,MACd,QAAQ,OAAO;AAAA,MACf,iBAAiB,OAAO;AAAA,MACxB,YAAY,OAAO,UAAU,YAAY;AAAA,IAC/C,CAAK;AAAA,EACL,GAAK,MAAM,CAAC;AACZ;AACA,MAAM,YAA4B,4BAAY,aAAa,CAAC,CAAC,UAAU,aAAa,CAAC,CAAC;AAEtF;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASK,MAAC,YAAY;AAAA,EAChB,MAAM,QAAQ,cAAc;AAAA,EAC5B,QAAQ,QAAQ,cAAc;AAAA,EAC9B,UAAU,QAAQ,cAAc;AAClC;AACA,MAAM,YAAY,CAAC,SAAS,IAAI,WAAY,KAAI,KAAK,WAAY,KAAI,KAAK,WAAU,KAAM,IAAI,WAAU;AACxG,MAAM,qBAAqB,CAAC,SAAS,QAAQ,MAAM,QAAQ;AAC3D,MAAM,UAAU;AAAA,EACd,IAAI,cAAc;AAAA,EAClB,IAAI,cAAc;AAAA,EAClB,IAAI,cAAc;AAAA,EAClB,IAAI,cAAc;AACpB;AACA,MAAM,YAAY;AAClB,MAAM,cAAc;AAAA,EAClB,YAAY;AAAA,IACV;AAAA,EACD;AAAA,EACD,OAAO;AAAA,IACL,MAAM;AAAA,MACJ,MAAM;AAAA,IACP;AAAA,IACD,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,KAAK;AAAA,MACH,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,OAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS,UAAU;AAAA,IACpB;AAAA,IACD,aAAa;AAAA,MACX,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,kBAAkB;AAAA,MAChB,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,WAAW;AAAA,MACT,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,OAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,WAAW;AAAA,MACT,MAAM,CAAC,QAAQ,KAAK;AAAA,MACpB,UAAU;AACR,eAAO;AAAA,UACL,WAAW;AAAA,UACX,UAAU;AAAA,UACV,OAAO;AAAA,QACjB;AAAA,MACO;AAAA,IACF;AAAA,IACD,YAAY;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,aAAa;AAAA,MACX,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,aAAa;AAAA,MACX,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,gBAAgB;AAAA,MACd,MAAM;AAAA,IACP;AAAA,IACD,cAAc;AAAA,MACZ,MAAM;AAAA,IACP;AAAA,IACD,QAAQ;AAAA,MACN,MAAM;AAAA,IACP;AAAA,EACF;AAAA,EACD,OAAO;AACL,WAAO;AAAA,MACL,YAAY,KAAK;AAAA,MACjB,WAAW,KAAK,MAAM;AAAA,MACtB,WAAW;AAAA,MACX,UAAU;AAAA,IAChB;AAAA,EACG;AAAA,EACD,QAAQ;AACN,WAAO;AAAA,MACL,iBAAiB;AAAA,MACjB,mBAAmB;AAAA,MACnB,SAAS;AAAA,MACT,qBAAqB;AAAA,MACrB,mBAAmB;AAAA,MACnB,mBAAmB;AAAA,MACnB,yBAAyB;AAAA,IAC/B;AAAA,EACG;AAAA,EACD,UAAU;AAAA,IACR,WAAW;AACT,aAAO,KAAK,SAAS,UAAU,WAAW,KAAK,WAAW,QAAQ,OAAO,GAAG,IAAI,KAAK;AAAA,IACtF;AAAA,IACD,qBAAqB;AACnB,aAAO,KAAK,WAAW,WAAW,KAAK,KAAK,YAAY,SAAS;AAAA,IAClE;AAAA,IACD,aAAa;AACX,aAAO,KAAK,yBAAyB,KAAK,UAAU,KAAK,SAAS,IAAI,KAAK;AAAA,IAC5E;AAAA,IACD,mBAAmB;AACjB,aAAO,KAAK,cAAc,KAAK,cAAc,KAAK,UAAU;AAAA,IAC7D;AAAA,EACF;AAAA,EACD,SAAS;AAAA,IACP,iBAAiB,MAAM;AACrB,UAAI,KAAK,WAAW,KAAK,WAAW,QAAQ;AAC1C,YAAI,KAAK,WAAW,GAAG;AACrB,eAAK,YAAY,KAAK;AAAA,QAChC,OAAe;AACL,eAAK,YAAY,KAAK,yBAAyB,MAAM,KAAK,MAAM;AAChE,cAAI,KAAK,YAAY,KAAK,OAAO;AAC/B,iBAAK,YAAY,KAAK;AAAA,UACvB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACD,eAAe,MAAM,YAAY,OAAO;AACtC,UAAI,OAAO;AACT,aAAK,iBAAgB;AAAA,MAC7B,OAAa;AACL,YAAI,KAAK,UAAU,KAAK,WAAW;AACjC,iBAAO,KAAK;AACZ,cAAI,KAAK,mBAAmB,KAAK,SAAS;AACxC,iBAAK,gBAAgB;AAAA,cACnB,KAAK;AAAA,cACL,KAAK;AAAA,YACnB;AAAA,UACW;AACD;AAAA,QACD;AAAA,MACF;AACD,UAAI,KAAK,SAAS,GAAG;AACnB,cAAM,QAAQ,aAAa;AAC3B,cAAM,MAAM;AACZ,cAAM,WAAW,KAAK,MAAM,OAAO,GAAG;AACtC,YAAI,YAAY,CAAC,UAAU,QAAQ,KAAK,KAAK,SAAS,UAAU,QAAQ;AACtE,cAAI,KAAK,iBAAiB;AACxB,iBAAK,gBAAgB;AAAA,cACnB,KAAK;AAAA,cACL,KAAK;AAAA,YACnB;AAAA,UACW;AACD;AAAA,QACD;AAAA,MACF;AACD,WAAK,iBAAiB,IAAI;AAC1B,WAAK,WAAW,KAAK;AAAA,QACnB,KAAK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,MACR;AACM,WAAK,aAAa;AAClB,WAAK,YAAY;AACjB,WAAK,eAAe,IAAI;AAAA,IACzB;AAAA;AAAA,IAED,iBAAiB,QAAQ;AAAA,IACxB;AAAA,IACD,mBAAmB,KAAK;AACtB,YAAM,OAAO,KAAK,UAAU,WAAW,KAAK,UAAU,WAAW;AACjE,YAAM,OAAO,KAAK,UAAU;AAC5B,YAAM,YAAY,KAAK,UAAU;AACjC,YAAM,SAAS,KAAK,UAAU,cAAc;AAC5C,YAAM,OAAO,KAAK,UAAU,eAAe;AAC3C,aAAO,QAAQ,WAAW;AAAA,QACxB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACR;AAAA,IACK;AAAA,IACD,qBAAqB,KAAK;AACxB,aAAO,QAAQ,WAAW,aAAa,KAAK,mBAAmB,GAAG,CAAC;AAAA,IACpE;AAAA,IACD,IAAI,QAAQ;AACV,UAAI,KAAK,SAAS,UAAU,UAAU,CAAC,UAAU,MAAM,GAAG;AACxD;AAAA,MACD;AACD,YAAM,eAAe,KAAK;AAC1B,YAAM,YAAY,KAAK;AACvB,UAAI,KAAK,WAAW,SAAS,KAAK,WAAW;AAC3C,cAAM,UAAU,aAAa,MAAM,GAAG,SAAS,IAAI,SAAS,aAAa,MAAM,SAAS;AACxF,cAAM,YAAY,YAAY,OAAO;AACrC,aAAK,eAAe,SAAS,SAAS;AAAA,MAC9C,OAAa;AACL,YAAI,KAAK,gBAAgB;AACvB,eAAK,eAAc;AAAA,QACpB;AAAA,MACF;AAAA,IACF;AAAA,IACD,SAAS;AACP,YAAM,eAAe,KAAK;AAC1B,YAAM,YAAY,KAAK;AACvB,UAAI,YAAY,GAAG;AACjB,cAAM,UAAU,aAAa,MAAM,GAAG,YAAY,CAAC,IAAI,aAAa,MAAM,SAAS;AACnF,cAAM,YAAY,YAAY;AAC9B,aAAK,eAAe,SAAS,SAAS;AAAA,MACvC;AAAA,IACF;AAAA,IACD,QAAQ;AACN,WAAK,eAAe,IAAI,CAAC;AAAA,IAC1B;AAAA,IACD,QAAQ,QAAQ;AACd,WAAK,eAAe,QAAQ,OAAO,MAAM;AAAA,IAC1C;AAAA,IACD,yBAAyB,UAAU,eAAe;AAChD,YAAM,aAAa,KAAK,aAAa,QAAQ;AAC7C,YAAM,cAAc,KAAK,mBAAmB,UAAU;AACtD,YAAM,YAAY;AAClB,YAAM,WAAW,IAAI,QAAQ,SAAS,GAAG,GAAG,WAAW,KAAK,MAAM;AAClE,YAAM,YAAY,QAAQ,WAAW,SAAS,QAAQ,MAAM;AAC5D,YAAM,UAAU,QAAQ,WAAW;AAAA,QACjC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,KAAK;AAAA,QACL;AAAA,MACR;AACM,aAAO,QAAQ;AAAA,IAChB;AAAA,IACD,oBAAoB,yBAAyB,YAAY;AACvD,UAAI,WAAW,KAAK;AACpB,UAAI,SAAS;AACb,UAAI,4BAA4B,GAAG;AACjC,iBAAS,CAAC;AACV,mBAAW;AAAA,MACnB,WAAiB,0BAA0B,KAAK,cAAc,KAAK,0BAA0B,KAAK,eAAe,KAAK,qBAAqB;AACnI,iBAAS,KAAK,oBAAoB;AAClC,YAAI,WAAW,KAAK,WAAW,SAAS,KAAK,YAAY,KAAK,OAAO;AACnE,mBAAS,KAAK,SAAS,WAAW,KAAK;AAAA,QACxC;AACD,oBAAY;AACZ,YAAI,WAAW,GAAG;AAChB,qBAAW;AAAA,QACrB,OAAe;AACL,cAAI,KAAK,UAAU,cAAc,SAAS;AACxC,kBAAM,kBAAkB,KAAK,qBAAqB,UAAU;AAC5D,gBAAI,WAAW,kBAAkB,WAAW;AAC1C,yBAAW,kBAAkB;AAC7B,uBAAS,KAAK,sBAAsB;AAAA,YACrC;AAAA,UACF;AAAA,QACF;AAAA,MACT,OAAa;AACL,YAAI,WAAW,KAAK,WAAW,KAAK,YAAY,KAAK,OAAO;AAC1D,mBAAS,KAAK,SAAS,WAAW,KAAK;AACvC,qBAAW,KAAK,QAAQ,KAAK;AAAA,QACvC,OAAe;AACL,cAAI,KAAK,UAAU,cAAc,SAAS;AACxC,kBAAM,kBAAkB,KAAK,qBAAqB,UAAU;AAC5D,gBAAI,mBAAmB,KAAK,OAAO;AACjC,kBAAI,WAAW,kBAAkB,WAAW;AAC1C,2BAAW,kBAAkB;AAC7B,yBAAS,KAAK,sBAAsB;AAAA,cACrC;AAAA,YACf,OAAmB;AACL,yBAAW,KAAK,QAAQ;AACxB,uBAAS,KAAK,sBAAsB;AAAA,YACrC;AAAA,UACF;AAAA,QACF;AAAA,MACF;AACD,WAAK,yBAAyB,CAAC,MAAM;AACrC,aAAO;AAAA,IACR;AAAA,IACD,wBAAwB;AACtB,UAAI,WAAW,KAAK;AACpB,UAAI,SAAS,KAAK,QAAQ;AAC1B,UAAI,KAAK,aAAa,WAAW,UAAU,KAAK,OAAO;AACrD,mBAAW,KAAK,QAAQ,KAAK;AAC7B,iBAAS,CAAC,WAAW,KAAK;AAAA,MAClC,OAAa;AACL,oBAAY;AAAA,MACb;AACD,WAAK,yBAAyB,MAAM;AACpC,aAAO;AAAA,IACR;AAAA,IACD,uBAAuB;AACrB,UAAI,WAAW,KAAK;AACpB,UAAI,SAAS,KAAK,QAAQ;AAC1B,kBAAY;AACZ,UAAI,WAAW,GAAG;AAChB,mBAAW;AACX,iBAAS,KAAK;AAAA,MACtB,OAAa;AACL,YAAI,KAAK,UAAU,cAAc,SAAS;AACxC,gBAAM,kBAAkB,KAAK;AAAA,YAC3B,KAAK,aAAc;AAAA,UAC/B;AACU,cAAI,WAAW,kBAAkB,WAAW;AAC1C,uBAAW,kBAAkB;AAC7B,qBAAS,KAAK,sBAAsB;AAAA,UACrC;AAAA,QACF;AAAA,MACF;AACD,WAAK,yBAAyB,CAAC,MAAM;AACrC,aAAO;AAAA,IACR;AAAA,IACD,yBAAyB,QAAQ;AAC/B,WAAK,uBAAuB;AAC5B,UAAI,KAAK,sBAAsB,GAAG;AAChC,aAAK,sBAAsB;AAAA,MAC5B;AACD,WAAK,oBAAoB,KAAK,sBAAsB,KAAK;AAAA,IAC1D;AAAA,IACD,oBAAoB,yBAAyB,SAAS;AACpD,UAAI,WAAW,KAAK;AACpB,UAAI,0BAA0B,KAAK,eAAe,KAAK,mBAAmB;AACxE,YAAI,SAAS,0BAA0B,KAAK;AAC5C,oBAAY;AACZ,YAAI,SAAS;AACX,cAAI,KAAK,UAAU,cAAc,SAAS;AACxC,uBAAW,KAAK,QAAQ;AACxB,qBAAS,CAAC,KAAK,sBAAsB;AAAA,UACjD,OAAiB;AACL,uBAAW,KAAK,QAAQ,KAAK;AAC7B,qBAAS,CAAC,KAAK,sBAAsB;AAAA,UACtC;AAAA,QACF;AACD,aAAK,yBAAyB,MAAM;AAAA,MACrC;AACD,aAAO;AAAA,IACR;AAAA,IACD,gBAAgB,SAAS,YAAY,WAAW,OAAO;AACrD,UAAI,WAAW,WAAW,GAAG;AAC3B,YAAI,KAAK,UAAU,cAAc,SAAS;AACxC,gBAAM,UAAU,YAAY,KAAK,QAAQ,KAAK;AAC9C,eAAK,yBAAyB,OAAO;AACrC,eAAK,oBAAoB,KAAK;AAC9B,iBAAO,KAAK,QAAQ;AAAA,QACrB;AACD,cAAM,SAAS,CAAC,KAAK;AACrB,aAAK,yBAAyB,MAAM;AACpC,aAAK,oBAAoB,KAAK;AAC9B,eAAO;AAAA,MACR;AACD,UAAI,WAAW,KAAK;AACpB,YAAM,0BAA0B,KAAK;AAAA,QACnC;AAAA,QACA;AAAA,MACR;AACM,UAAI,cAAc;AAClB,UAAI,QAAQ,SAAS,WAAW,QAAQ;AACtC,sBAAc;AAAA,MACf,WAAU,QAAQ,SAAS,WAAW,QAAQ;AAC7C,sBAAc;AAAA,MACtB,OAAa;AACL,YAAI,OAAO;AACT,cAAI,2BAA2B,KAAK,qBAAqB;AACvD,0BAAc;AAAA,UAC1B,WAAqB,2BAA2B,KAAK,mBAAmB;AAC5D,0BAAc;AAAA,UACf;AAAA,QACF;AAAA,MACF;AACD,cAAQ,aAAW;AAAA,QACjB,KAAK;AACH,qBAAW,KAAK;AAAA,YACd;AAAA,YACA;AAAA,UACZ;AACU;AAAA,QACF,KAAK;AACH,qBAAW,KAAK;AAAA,YACd;AAAA,YACA,WAAW,WAAW;AAAA,UAClC;AACU;AAAA,QACF,KAAK;AACH,qBAAW,KAAK,qBAAqB,uBAAuB;AAC5D;AAAA,QACF,KAAK;AACH,qBAAW,KAAK,sBAAsB,uBAAuB;AAC7D;AAAA,MAIH;AACD,WAAK,oBAAoB;AACzB,aAAO;AAAA,IACR;AAAA,IACD,UAAU;AACR,WAAK,UAAU;AACf,WAAK,MAAM,QAAQ;AACnB,UAAI,KAAK,mBAAmB,CAAC,KAAK,UAAU;AAC1C,aAAK,gBAAgB;AAAA,UACnB,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AAAA,QACf;AAAA,MACO;AAAA,IACF;AAAA,IACD,SAAS;AACP,WAAK,UAAU;AACf,UAAI,KAAK,mBAAmB,CAAC,KAAK,UAAU;AAC1C,aAAK,gBAAgB;MACtB;AAAA,IACF;AAAA,IACD,wBAAwB;AACtB,UAAI,KAAK,yBAAyB;AAChC,qBAAa,KAAK,uBAAuB;AACzC,aAAK,0BAA0B;AAAA,MAChC;AAAA,IACF;AAAA,IACD,mBAAmB;AACjB,UAAI,KAAK,MAAM,QAAQ;AACrB,aAAK,MAAM,QAAQ,UAAU,IAAI;AAAA,MAClC;AACD,WAAK,sBAAqB;AAC1B,WAAK,0BAA0B,WAAW,MAAM;AAC9C,aAAK,MAAM,QAAQ;MACpB,GAAE,GAAG;AAAA,IACP;AAAA,IACD,UAAU,UAAU;AAClB,UAAI,WAAW;AACf,UAAI,YAAY,KAAK;AACrB,UAAI;AACJ,UAAI,aAAa;AACjB,cAAQ,SAAS,SAAO;AAAA,QACtB,KAAK;AACH,eAAK,iBAAgB;AACrB,cAAI,cAAc,GAAG;AACnB,yBAAa;AACb,wBAAY,EAAE;AACd,uBAAW;AAAA,UACZ;AACD;AAAA,QACF,KAAK;AACH,eAAK,iBAAgB;AACrB,cAAI,YAAY,KAAK,WAAW,QAAQ;AACtC,yBAAa;AACb,wBAAY,EAAE;AACd,uBAAW;AAAA,UACZ;AACD;AAAA,QACF,KAAK;AAAA,QACL,KAAK;AACH;AAAA,QACF,KAAK;AACH,eAAK,gBAAgB;AAAA,YACnB,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,UACjB;AACU,qBAAW;AACX;AAAA,QACF,KAAK;AAAA,QACL,KAAK;AACH,qBAAW;AACX;AAAA,QACF;AACE,cAAI,CAAC,OAAO,QAAQ;AAClB,iBAAK,gBAAgB;AAAA,cACnB,KAAK;AAAA,cACL,KAAK;AAAA,cACL,KAAK;AAAA,YACnB;AACY,uBAAW;AAAA,UACZ;AACD;AAAA,MACH;AACD,UAAI,mBAAmB,SAAS,OAAO,GAAG;AACxC,YAAI,YAAY;AACd,eAAK,YAAY;AACjB,eAAK,WAAW,KAAK;AAAA,YACnB,KAAK;AAAA,YACL,KAAK;AAAA,YACL;AAAA,YACA;AAAA,UACZ;AACU,cAAI,KAAK,iBAAiB;AACxB,iBAAK,gBAAgB,mBAAmB,KAAK,YAAY,SAAS;AAAA,UACnE;AAAA,QACX,OAAe;AACL,cAAI,KAAK,UAAU,QAAQ,SAAS,OAAO,GAAG;AAC5C,iBAAK,OAAO;AAAA,cACV,WAAW,QAAQ,SAAS,OAAO;AAAA,cACnC,MAAM;AAAA,gBACJ,GAAG,KAAK;AAAA,gBACR,GAAG,KAAK;AAAA,gBACR,OAAO,KAAK;AAAA,gBACZ,QAAQ,KAAK;AAAA,cACd;AAAA,YACf,CAAa;AAAA,UACF;AAAA,QACF;AAAA,MACF;AACD,aAAO;AAAA,IACR;AAAA,IACD,aAAa,SAAS;AACpB,UAAI,QAAQ;AACZ,UAAI,KAAK,SAAS,QAAQ,cAAc,UAAU;AAChD,gBAAQ,MAAM,QAAQ,OAAO,GAAG;AAAA,MACjC;AACD,aAAO;AAAA,IACR;AAAA,IACD,eAAe;AACb,aAAO,KAAK,aAAa,KAAK,UAAU;AAAA,IACzC;AAAA,EACF;AAAA,EACD,UAAU;AACR,SAAK,kBAAkB,IAAI,QAAQ,gBAAe;AAClD,SAAK,gBAAgB,gBAAgB,KAAK;AAC1C,SAAK,gBAAgB,kBAAkB,KAAK;AAC5C,SAAK,oBAAoB,QAAQ,WAAW;AAAA,MAC1C,IAAI,QAAQ,SAAS,KAAK,eAAe;AAAA,IAC/C;AACI,UAAM,eAAe,KAAK;AAAA,MACxB,KAAK;AAAA,MACL,KAAK,MAAM;AAAA,IACjB;AACI,SAAK,oBAAoB,eAAe,KAAK,QAAQ,eAAe,KAAK;AACzE,SAAK,sBAAsB,KAAK,oBAAoB,KAAK;AACzD,SAAK,oBAAoB;AACzB,SAAK,YAAY,eAAe,KAAK,QAAQ,eAAe,KAAK;AACjE,SAAK,WAAW,KAAK,gBAAgB,IAAI,KAAK,OAAO,KAAK,MAAM,MAAM;AAAA,EACvE;AAAA,EACD,UAAU;AACR,SAAK,MAAM,QAAQ;EACpB;AAAA,EACD,gBAAgB;AACd,QAAI,KAAK,qBAAqB,IAAI;AAChC,cAAQ,WAAW,OAAO,KAAK,iBAAiB;AAChD,WAAK,oBAAoB;AAAA,IAC1B;AACD,SAAK,sBAAqB;AAAA,EAC3B;AACH;AACA,SAAS,cAAc,MAAM,QAAQ,QAAQ,QAAQ,OAAO,UAAU;AACpE,QAAM,wBAAwB,iBAAiB,YAAY;AAC3D,QAAM,6BAA6B,iBAAiB,iBAAiB;AACrE,SAAO,UAAS,GAAI,YAAY,4BAA4B;AAAA,IAC1D,MAAM,OAAO;AAAA,IACb,UAAU;AAAA,MACR,SAAS,SAAS;AAAA,MAClB,QAAQ,SAAS;AAAA,MACjB,WAAW,SAAS;AAAA,IACrB;AAAA,IACD,OAAO,eAAe;AAAA,MACpB,MAAM,OAAO;AAAA,MACb,KAAK,OAAO;AAAA,MACZ,OAAO,OAAO;AAAA,MACd,QAAQ,OAAO;AAAA,IACrB,CAAK;AAAA,EACL,GAAK;AAAA,IACD,SAAS,QAAQ,MAAM;AAAA,MACrBA,gBAAmB,OAAO;AAAA,QACxB,OAAO,eAAe;AAAA,UACpB,OAAO,OAAO;AAAA,UACd,QAAQ,OAAO;AAAA,UACf,UAAU;AAAA,QACpB,CAAS;AAAA,MACT,GAAS;AAAA,QACDA,gBAAmB,OAAO;AAAA,UACxB,OAAO,eAAe;AAAA,YACpB,MAAM,KAAK;AAAA,YACX,OAAO,KAAK;AAAA,YACZ,QAAQ,OAAO;AAAA,YACf,YAAY,OAAO;AAAA,YACnB,GAAG,KAAK;AAAA,UACpB,CAAW;AAAA,QACF,GAAE,gBAAgB,SAAS,QAAQ,GAAG,CAAC;AAAA,QACxC,SAAS,sBAAsB,aAAa,mBAAmB,OAAO;AAAA,UACpE,KAAK;AAAA,UACL,OAAO,eAAe;AAAA,YACpB,MAAM;AAAA,YACN,OAAO,OAAO;AAAA,YACd,QAAQ,OAAO;AAAA,YACf,YAAY,OAAO;AAAA,YACnB,GAAG,OAAO;AAAA,YACV,OAAO,OAAO;AAAA,UAC1B,CAAW;AAAA,QACX,GAAW,gBAAgB,OAAO,WAAW,GAAG,CAAC,KAAK,mBAAmB,IAAI,IAAI;AAAA,MAC1E,GAAE,CAAC;AAAA,MACJ,OAAO,cAAc,aAAa,YAAY,uBAAuB;AAAA,QACnE,KAAK;AAAA,QACL,KAAK;AAAA,QACL,MAAM,SAAS;AAAA,QACf,QAAQ,OAAO;AAAA,QACf,OAAO,SAAS;AAAA,QAChB,OAAO,OAAO;AAAA,MACf,GAAE,MAAM,GAAG,CAAC,QAAQ,UAAU,SAAS,OAAO,CAAC,KAAK,mBAAmB,IAAI,IAAI;AAAA,MAChFA,gBAAmB,OAAO,EAAE,yBAAyB,OAAO,kBAAmB,GAAE,MAAM,GAAG,CAAC,uBAAuB,CAAC;AAAA,IACzH,CAAK;AAAA,IACD,GAAG;AAAA,EACJ,GAAE,GAAG,CAAC,QAAQ,YAAY,OAAO,CAAC;AACrC;AACK,MAAC,WAA2B,4BAAY,aAAa,CAAC,CAAC,UAAU,aAAa,CAAC,CAAC;AAErF;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwCA,MAAM,qBAAqB;AAC3B,MAAM,qBAAqB,CAAC,KAAK,QAAQ,GAAG,SAAS,GAAG,aAAa,aAAa,cAAc,MAAM,kBAAkB;AACtH,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,YAAY;AAAA;AAAA,IAEZ,eAAe,iBAAiB;AAAA,EACpC;AACA;AACA,MAAM,sBAAsB,CAAC,KAAK,cAAc,MAAM,mBAAmB;AACvE,SAAO;AAAA,IACL;AAAA,IACA,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,YAAY;AAAA;AAAA,EAEhB;AACA;AACA,MAAM,cAAc;AAAA,EAClB,QAAQ;AAAA,EACR,OAAO;AAAA,IACL,aAAa;AAAA,IACb,cAAc;AAAA,IACd,cAAc;AAAA,IACd,eAAe;AAAA,IACf,gBAAgB;AAAA,EACjB;AAAA,EACD,MAAM,SAAS;AACb,UAAM,QAAQ;AACd,UAAM,sBAAsB;AAC5B,UAAM,eAAe,SAAS;AAAA,MAC5B,iBAAiB,CAAE;AAAA,MACnB,kBAAkB,CAAE;AAAA,IAC1B,CAAK;AACD,QAAI,mBAAmB,CAAA;AACvB,QAAI,oBAAoB,CAAA;AACxB,QAAI,oBAAoB,CAAA;AACxB,QAAI,mBAAmB,CAAA;AACvB,QAAI,mBAAmB;AACvB,QAAI,oBAAoB;AACxB,QAAI,eAAe;AACnB,QAAI,gBAAgB;AACpB,UAAM,sBAAsB,MAAM;AAChC,UAAI,OAAO,QAAQ;AACjB,YAAI,aAAa,gBAAgB,SAAS,GAAG;AAC3C,qBAAW,aAAa,aAAa,iBAAiB;AACpD,gBAAI,WAAW;AACb,oBAAM,KAAK,UAAU;AACrB,wBAAU,YAAY;AACtB,wBAAU,YAAY;AAAA,gBACpB,UAAU;AAAA,cAC1B;AACc,sBAAQ,WAAW,OAAO,EAAE;AAAA,YAC7B;AAAA,UACF;AAAA,QACF;AACD,qBAAa,kBAAkB;AAC/B,2BAAmB,CAAA;AAAA,MACpB;AAAA,IACP;AACI,UAAM,uBAAuB,MAAM;AACjC,UAAI,OAAO,QAAQ;AACjB,YAAI,aAAa,iBAAiB,SAAS,GAAG;AAC5C,qBAAW,aAAa,aAAa,kBAAkB;AACrD,gBAAI,WAAW;AACb,oBAAM,KAAK,UAAU;AACrB,wBAAU,YAAY;AACtB,wBAAU,YAAY;AAAA,gBACpB,UAAU;AAAA,cAC1B;AACc,sBAAQ,WAAW,OAAO,EAAE;AAAA,YAC7B;AAAA,UACF;AAAA,QACF;AAAA,MACF;AACD,mBAAa,mBAAmB;AAChC,0BAAoB,CAAA;AAAA,IAC1B;AACI,UAAM,oBAAoB,MAAM;AAC9B;AACA;IACN;AACI,UAAM,gBAAgB,MAAM;AAC1B,UAAI,YAAY;AAChB,uBAAiB,QAAQ,CAAC,UAAU;AAClC,oBAAY,QAAQ,EAAE,YAAY;AAAA,MAC1C,CAAO;AACD,UAAI,MAAM,cAAc;AACtB,cAAM,aAAa,YAAY,iBAAiB,MAAM;AAAA,MACvD;AACD,UAAI,MAAM,iBAAiB,cAAc,iBAAiB,SAAS,kBAAkB;AACnF,cAAM,cAAc,gBAAgB;AAAA,MACrC;AAAA,IACP;AACI,UAAM,wBAAwB,MAAM;AAClC,UAAI,CAAC,MAAM,aAAa;AACtB;AAAA,MACD;AACD,yBAAmB,IAAI,MAAM,MAAM,YAAY,MAAM,EAAE,KAAK,KAAK;AACjE,UAAI,kBAAkB,MAAM;AAC5B,eAAS,IAAI,GAAG,IAAI,gBAAgB,QAAQ,KAAK;AAC/C,YAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,KAAK;AAClD,0BAAgB,OAAO,GAAG,CAAC;AAC3B;AACA;AAAA,QACD;AAAA,MACF;AACD,mBAAa,kBAAkB,gBAAgB,IAAI,CAAC,MAAM,UAAU;AAClE,YAAI,KAAK,eAAe,qBAAqB;AAC3C,kBAAQ;AAAA,YACN;AAAA,UACZ;AAAA,QACS;AACD,cAAM,WAAW,KAAK;AACtB,YAAI,YAAY;AAChB,YAAI,YAAY,SAAS,QAAQ,MAAM,IAAI,GAAG;AAC5C,cAAI,OAAO,OAAO,IAAI,QAAQ;AAC5B,wBAAY,IAAI,OAAO,OAAO,IAAI,OAAO,QAAQ,EAAE;AAAA,UACpD;AAAA,QACF;AACD,YAAI,cAAc;AAClB,YAAI,KAAK,UAAU,KAAK,KAAK,WAAW,GAAG;AACzC,wBAAc,EAAE,OAAO,KAAK,OAAO,QAAQ,KAAK;QACjD;AACD,YAAI,UAAU;AACd,YAAI,cAAc,UAAU,YAAW,EAAG,QAAQ,OAAO,KAAK,KAAK,UAAU,YAAW,EAAG,QAAQ,MAAM,KAAK,IAAI;AAChH,oBAAU,QAAQ,eAAe,UAAU,WAAW,KAAK;AAAA,QACrE,OAAe;AACL,oBAAU,QAAQ,eAAe;AAAA,YAC/B;AAAA,YACA;AAAA,YACA;AAAA,YACA,KAAK;AAAA,YACL,KAAK,cAAc;AAAA,YACnB,KAAK;AAAA,UACjB;AAAA,QACS;AACD,YAAI,CAAC,SAAS;AACZ,kBAAQ;AAAA,YACN,kDAAkD;AAAA,UAC9D;AACU,2BAAiB,KAAK,IAAI;AAC1B;AAAA,QACD;AACD,cAAM,iBAAiB,QAAQ,0BAA0B,MAAM,CAAC,WAAW;AACzE,kBAAQ,IAAI,mBAAmB,aAAa,MAAM;AAClD,2BAAiB,KAAK,IAAI;AAC1B,2BAAiB,KAAK,GAAG,IAAI;AAAA,YAC3B,OAAO,OAAO;AAAA,YACd,QAAQ,OAAO;AAAA,UAC3B;AACU,kBAAQ,IAAI,mBAAmB,KAAK,eAAe,QAAQ;AAC3D;QACV,CAAS;AACD,gBAAQ,qBAAoB;AAC5B,cAAM,kBAAkB,IAAI,QAAQ,uBAAuB,OAAO;AAClE,cAAM,eAAe,IAAI,QAAQ,YAAY,eAAe;AAC5D,eAAO;AAAA,UACL,QAAQ,QAAQ,WAAW,IAAI,IAAI,QAAQ,SAAS,YAAY,CAAC;AAAA,UACjE,YAAY;AAAA,UACZ,WAAW;AAAA,QACrB;AAAA,MACA,CAAO;AAAA,IACP;AACI,UAAM,iBAAiB,MAAM;AAC3B,UAAI,YAAY;AAChB,wBAAkB,QAAQ,CAAC,UAAU;AACnC,oBAAY,QAAQ,EAAE,YAAY;AAAA,MAC1C,CAAO;AACD,UAAI,MAAM,kBAAkB,cAAc,kBAAkB,SAAS,mBAAmB;AACtF,cAAM,eAAe,mBAAmB,iBAAiB;AAAA,MAC1D;AAAA,IACP;AACI,UAAM,yBAAyB,MAAM;AACnC,UAAI,CAAC,MAAM,cAAc;AACvB;AAAA,MACD;AACD,0BAAoB,IAAI,MAAM,MAAM,aAAa,MAAM,EAAE,KAAK,IAAI;AAClE,UAAI,mBAAmB,MAAM;AAC7B,eAAS,IAAI,GAAG,IAAI,iBAAiB,QAAQ,KAAK;AAChD,YAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,KAAK;AACpD,2BAAiB,OAAO,GAAG,CAAC;AAC5B;AACA;AAAA,QACD;AAAA,MACF;AACD,mBAAa,mBAAmB,iBAAiB,IAAI,CAAC,MAAM,UAAU;AACpE,YAAI,KAAK,eAAe,qBAAqB;AAC3C,kBAAQ;AAAA,YACN;AAAA,UACZ;AAAA,QACS;AACD,gBAAQ,IAAI,iBAAiB,aAAa,KAAK,KAAK;AACpD,cAAM,WAAW,KAAK;AACtB,YAAI,YAAY;AAChB,YAAI,YAAY,SAAS,QAAQ,MAAM,IAAI,GAAG;AAC5C,cAAI,OAAO,OAAO,IAAI,QAAQ;AAC5B,wBAAY,IAAI,OAAO,OAAO,IAAI,OAAO,QAAQ,EAAE;AAAA,UACpD;AAAA,QACF;AACD,cAAM,UAAU,QAAQ,eAAe;AAAA,UACrC;AAAA,UACA;AAAA,UACA,KAAK;AAAA,QACf;AACQ,YAAI,CAAC,SAAS;AACZ,kBAAQ,MAAM,+CAA+C,SAAS;AACtE,4BAAkB,KAAK,IAAI;AAC3B;AAAA,QACD;AACD,cAAM,iBAAiB,QAAQ;AAAA,UAC7B;AAAA,UACA,CAAC,iBAAiB;AAChB,oBAAQ,IAAI,wBAAwB,OAAO;AAC3C,8BAAkB,KAAK,IAAI,aAAa,MAAM;AAC9C,gBAAI,KAAK,gBAAgB,aAAa,MAAM,SAAS,aAAa,MAAM,QAAQ;AAC9E,gCAAkB,aAAa,MAAM,YAAY,IAAI;AAAA,gBACnD,OAAO,aAAa,MAAM;AAAA,gBAC1B,QAAQ,aAAa,MAAM;AAAA,cAC3C;AAAA,YACa;AACD;UACD;AAAA,QACX;AACQ,gBAAQ,qBAAoB;AAC5B,cAAM,kBAAkB,IAAI,QAAQ,eAAe,OAAO;AAC1D,cAAM,eAAe,IAAI,QAAQ,YAAY,eAAe;AAC5D,eAAO;AAAA,UACL,QAAQ,QAAQ,WAAW,IAAI,IAAI,QAAQ,SAAS,YAAY,CAAC;AAAA,UACjE,YAAY;AAAA,UACZ,WAAW;AAAA,QACrB;AAAA,MACA,CAAO;AAAA,IACP;AACI;AACA,gBAAY,MAAM;AAChB,UAAI,MAAM,aAAa;AACrB,gBAAQ,IAAI,gCAAgC;AAC5C,2BAAmB;AACnB;AACA;AACA;AAAA,MACD;AAAA,IACP,CAAK;AACD,gBAAY,MAAM;AAChB,UAAI,MAAM,cAAc;AACtB,gBAAQ,IAAI,iCAAiC;AAC7C,4BAAoB;AACpB;AACA;AACA;AAAA,MACD;AAAA,IACP,CAAK;AACD,oBAAgB,MAAM;AACpB;IACN,CAAK;AACD,WAAO,CAAC,MAAM,WAAW;AACvB,aAAO,UAAW,GAAE,mBAAmB,OAAO,MAAM;AAAA,SACjD,UAAW,GAAE,mBAAmB,OAAO;AAAA,UACtC,KAAK,aAAa,MAAM,YAAY;AAAA,QAC9C,GAAW;AAAA,WACA,UAAU,IAAI,GAAG,mBAAmB,UAAU,MAAM,WAAW,aAAa,iBAAiB,CAAC,SAAS;AACtG,mBAAO,UAAS,GAAI,mBAAmB,OAAO;AAAA,cAC5C,KAAK,KAAK;AAAA,cACV,IAAI,KAAK;AAAA,YACvB,GAAe;AAAA,cACD,KAAK,UAAU,aAAa,mBAAmB,OAAO;AAAA,gBACpD,KAAK;AAAA,gBACL,yBAAyB,KAAK;AAAA,cAC9C,GAAiB,MAAM,GAAG,CAAC,uBAAuB,CAAC,KAAK,mBAAmB,IAAI,IAAI;AAAA,YACnF,GAAe,GAAG,CAAC,IAAI,CAAC;AAAA,UACb,CAAA,GAAG,GAAG;AAAA,QACjB,CAAS;AAAA,SACA,UAAW,GAAE,mBAAmB,OAAO;AAAA,UACtC,KAAK,cAAc,MAAM,aAAa;AAAA,QAChD,GAAW;AAAA,WACA,UAAU,IAAI,GAAG,mBAAmB,UAAU,MAAM,WAAW,aAAa,kBAAkB,CAAC,SAAS;AACvG,mBAAO,UAAS,GAAI,mBAAmB,OAAO;AAAA,cAC5C,KAAK,KAAK;AAAA,cACV,IAAI,KAAK;AAAA,YACvB,GAAe;AAAA,cACD,KAAK,UAAU,aAAa,mBAAmB,OAAO;AAAA,gBACpD,KAAK;AAAA,gBACL,yBAAyB,KAAK;AAAA,cAC9C,GAAiB,MAAM,GAAG,CAAC,uBAAuB,CAAC,KAAK,mBAAmB,IAAI,IAAI;AAAA,YACnF,GAAe,GAAG,CAAC,IAAI,CAAC;AAAA,UACb,CAAA,GAAG,GAAG;AAAA,QACjB,CAAS;AAAA,MACT,CAAO;AAAA,IACP;AAAA,EACG;AACH;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ,IAAI,OAAO,QAAQ;AACjB,gBAAc;AAChB,OAAO;AACL,QAAM,iBAAiB,MAAM,OAAO,kCAAkC;AACtE,gBAAc,eAAe;AAC/B;AACG,IAAC,mBAAmB;AACpB,IAAC,oBAAoB;AACnB,MAAC,aAAa;AAEnB;AACA;AACA;AACA,MAAM,mBAAmB;AAAA,EACvB,OAAO,OAAOE,QAAQ,mBAAmB;AAAA,EACzC,OAAO,OAAOA,QAAQ,mBAAmB;AAAA,EACzC,OAAO,QAAQA,QAAQ,mBAAmB;AAC5C;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBA,MAAM,cAAc;AAAA,EAClB,OAAO;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,SAAS;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,SAAS;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,OAAO;AAAA,MACL,MAAM;AAAA;AAAA,MAEN,SAAS;AAAA,IACV;AAAA,IACD,MAAM;AAAA;AAAA,MAEJ,MAAM;AAAA,MACN,SAAS;AAAA;AAAA,IAEV;AAAA,IACD,eAAe;AAAA,EAChB;AAAA,EACD,SAAS;AAAA,IACP,mBAAmB;AACjB,YAAM,gBAAgB,KAAK;AAC3B,UAAI,CAAC,eAAe;AAClB,eAAO;AAAA,MACR;AACD,YAAM,IAAI,cAAc;AACxB,YAAMH,KAAI,cAAc;AACxB,YAAM,IAAI,CAAC,cAAc,IAAI,KAAK,OAAO,IAAI,IAAI,IAAI,cAAc;AACnE,YAAM,IAAI,CAAC,cAAc,IAAI,KAAK,OAAO,IAAIA,KAAI,IAAI,cAAc;AACnE,aAAO,EAAE,GAAG,GAAG,GAAAA,IAAG,EAAC;AAAA,IACpB;AAAA,IACD,kBAAkB;AAChB,UAAI,KAAK,eAAe,MAAM;AAC5B,aAAK,YAAY,WAAW,KAAK,UAAU;AAAA,MAC5C;AACD,UAAI,OAAO;AACX,UAAI,YAAY;AAChB,YAAM,kBAAkB,QAAQ;AAChC,UAAI;AACJ,cAAQ,KAAK,MAAI;AAAA,QACf,KAAK;AACH,wBAAc,mBAAmB;AACjC;AAAA,QACF,KAAK;AACH,wBAAc,mBAAmB;AACjC;AAAA,QACF,KAAK;AAAA,QACL;AACE,wBAAc,mBAAmB;AAAA,MACpC;AACD,YAAM,iBAAiB,gBAAgB;AAAA,QACrC,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,QACA,QAAQ,YAAY,KAAK,KAAK;AAAA,QAC9B,KAAK;AAAA,QACL,KAAK;AAAA,MACb;AACM,aAAO,IAAI,QAAQ,WAAW,IAAI,QAAQ,eAAe,cAAc,CAAC;AACxE,YAAM,0BAA0B,KAAK;AACrC,UAAI,KAAK,iBAAiB,yBAAyB;AACjD,YAAI,MAAM,KAAK,cAAc;AAC7B,YAAI,OAAO,QAAQ,UAAU;AAC3B,gBAAM,IAAI,OAAO,OAAO,IAAI,OAAO,KAAK,cAAc,GAAG,EAAE;AAAA,QAC5D;AACD,cAAM,cAAc,gBAAgB,SAAS,GAAG;AAChD,cAAM,WAAW,IAAI,QAAQ;AAAA,UAC3B,IAAI,QAAQ,eAAe,WAAW;AAAA,QAChD;AACQ,aAAK;AAAA,UACH;AAAA,UACA,IAAI,QAAQ,aAAa;AAAA,YACvB,GAAG,wBAAwB;AAAA,YAC3B,GAAG,wBAAwB;AAAA,YAC3B,OAAO,wBAAwB;AAAA,YAC/B,QAAQ,wBAAwB;AAAA,UAC5C,CAAW;AAAA,QACX;AACQ,gBAAQ,IAAI,YAAY,IAAI;AAAA,MAC7B;AACD,kBAAY,IAAI,QAAQ,aAAa;AAAA,QACnC,GAAG;AAAA,QACH,GAAG;AAAA,QACH,OAAO,KAAK;AAAA,QACZ,QAAQ,KAAK;AAAA,MACrB,CAAO;AACD,WAAK,aAAa;AAClB,WAAK,YAAY,QAAQ,KAAK,YAAY,SAAS;AAAA,IACpD;AAAA,EACF;AAAA,EACD,UAAU;AACR,UAAM,YAAY;AAAA,MAChB,OAAO,KAAK;AAAA,MACZ,MAAM,KAAK;AAAA,MACX,OAAO,KAAK;AAAA,MACZ,SAAS,KAAK;AAAA,MACd,SAAS,KAAK;AAAA,MACd,eAAe,KAAK;AAAA,IAC1B;AACI,QAAI,KAAK,gBAAgB,MAAM;AAC7B,WAAK,cAAc,IAAI,QAAQ,WAAU;AACzC,WAAK,cAAc,QAAQ,WAAW;AAAA,QACpC,IAAI,QAAQ,SAAS,KAAK,WAAW;AAAA,MAC7C;AAAA,IACK;AACD,QAAI,KAAK,aAAa,WAAW;AAC/B,WAAK,gBAAe;AAAA,IACrB;AAAA,EACF;AAAA,EACD,OAAO;AACL,WAAO;AAAA,MACL,UAAU;AAAA,MACV,aAAa;AAAA,MACb,aAAa;AAAA,MACb,YAAY;AAAA,IAClB;AAAA,EACG;AAAA,EACD,UAAU;AACR,QAAI,KAAK,gBAAgB,IAAI;AAC3B,cAAQ,WAAW,OAAO,KAAK,WAAW;AAC1C,WAAK,cAAc;AACnB,WAAK,cAAc;AAAA,IACpB;AAAA,EACF;AACH;AACA,SAAS,cAAc,MAAM,QAAQ,QAAQ,QAAQ,OAAO,UAAU;AACpE,SAAO,UAAS,GAAI,mBAAmB,OAAO,EAAE,yBAAyB,MAAM,YAAW,GAAI,MAAM,GAAG,CAAC,uBAAuB,CAAC;AAClI;AACA,MAAM,YAA4B,4BAAY,aAAa,CAAC,CAAC,UAAU,aAAa,CAAC,CAAC;AAEtF;AACA;AACA;AACA;AACA,IAAI;AACJ,IAAI,OAAO,QAAQ;AACjB,eAAa;AACf,OAAO;AACL,QAAM,gBAAgB,MAAM,OAAO,iCAAiC;AACpE,eAAa,cAAc;AAC7B;AACK,MAAC,eAAe;AAErB;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuCA,IAAI,iBAAiB,CAAC,UAAU,YAAY,SAAS,eAAe;AAClE,MAAI,CAAC,UAAU;AACb,WAAO;AAAA,EACR;AACD,QAAM,kBAAkB,QAAQ;AAChC,MAAI;AACJ,MAAI,SAAS,OAAO,WAAW,GAAG,KAAK,SAAS,KAAM,EAAC,WAAW,MAAM,GAAG;AACzE,sBAAkB,IAAI,QAAQ;AAAA,MAC5B,gBAAgB,gBAAgB,QAAQ;AAAA,IAC9C;AAAA,EACA,OAAS;AACL,UAAM,WAAW;AACjB,QAAI,YAAY;AAChB,QAAI,YAAY,SAAS,QAAQ,MAAM,MAAM,GAAG;AAC9C,kBAAY;AAAA,IACb,WAAU,OAAO,OAAO,IAAI,QAAQ;AACnC,kBAAY,IAAI,OAAO,OAAO,IAAI,OAAO,QAAQ,EAAE;AAAA,IACpD;AACD,sBAAkB,IAAI,QAAQ;AAAA,MAC5B,gBAAgB,UAAU,WAAW,OAAO,MAAM,YAAY,IAAI;AAAA,IACxE;AAAA,EACG;AACD,QAAM,aAAa,IAAI,QAAQ,UAAU,eAAe;AACxD,QAAM,oBAAoB,WAAW,cAAc,WAAW,cAAc;AAC5E,QAAM,eAAe,OAAO,WAAW,gBAAgB,cAAc,WAAW,cAAc;AAC9F,QAAM,eAAe,OAAO,WAAW,gBAAgB,cAAc,WAAW,cAAc;AAC9F,MAAI,qBAAqB,GAAG,qBAAqB;AACjD,MAAI,OAAO,WAAW,uBAAuB,YAAY,OAAO,WAAW,uBAAuB,UAAU;AAC1G,yBAAqB,WAAW;AAChC,yBAAqB,WAAW;AAAA,EACjC;AACD,MAAI,WAAW,GAAG,WAAW;AAC7B,MAAI,OAAO,WAAW,aAAa,YAAY,OAAO,WAAW,aAAa,UAAU;AACtF,eAAW,WAAW;AACtB,eAAW,WAAW;AAAA,EACvB;AACD,MAAI,UAAU,WAAW,SAAS,UAAU,WAAW;AACvD,MAAI,WAAW,UAAU,KAAK,KAAK;AACjC,YAAQ,KAAK,oEAAoE,WAAW,OAAO;AACnG,cAAU,WAAW,UAAU,MAAM,MAAM,WAAW;AACtD,cAAU,WAAW,UAAU,MAAM,MAAM,WAAW;AAAA,EACvD;AACD,aAAW;AAAA,IACT,WAAW;AAAA,IACX,WAAW;AAAA,IACX;AAAA,IACA,WAAW,aAAa,MAAM;AAAA,IAC9B,WAAW;AAAA,IACX,WAAW;AAAA,IACX,WAAW;AAAA,IACX,WAAW;AAAA,IACX,WAAW;AAAA,IACX,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AACE,QAAM,aAAa,WAAW,eAAe,IAAI,IAAI,IAAI,WAAW;AACpE,QAAM,cAAc,WAAW,gBAAgB,IAAI,IAAI,IAAI,WAAW;AACtE,UAAQ,QAAQ;AAChB,UAAQ,SAAS;AACjB,SAAO,QAAQ,WAAW,IAAI,IAAI,QAAQ,SAAS,YAAY,IAAI,CAAC;AACtE;AACA,MAAM,cAAc;AAAA,EAClB,OAAO;AAAA,IACL,UAAU;AAAA,MACR,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA,IACD,YAAY;AAAA,MACV,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA,IACD,YAAY;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,EACF;AAAA,EACD,OAAO;AACL,WAAO;AAAA,MACL,MAAM;AAAA,QACJ,OAAO;AAAA,QACP,QAAQ;AAAA,MACT;AAAA,MACD,QAAQ;AAAA,IACd;AAAA,EACG;AAAA,EACD,SAAS;AAAA,IACP,aAAa;AACX,UAAI,KAAK,UAAU,IAAI;AACrB,gBAAQ,WAAW,OAAO,KAAK,MAAM;AACrC,aAAK,SAAS;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACD,UAAU;AACR,SAAK,SAAS;AAAA,MACZ,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,IACX;AAAA,EACG;AAAA,EACD,UAAU;AACR,SAAK,WAAU;AACf,SAAK,SAAS;AAAA,MACZ,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,IACX;AAAA,EACG;AAAA,EACD,gBAAgB;AACd,SAAK,WAAU;AAAA,EAChB;AACH;AACA,SAAS,cAAc,MAAM,QAAQ,QAAQ,QAAQ,OAAO,UAAU;AACpE,SAAO,UAAS,GAAI,mBAAmB,OAAO;AAAA,IAC5C,OAAO,eAAe,EAAE,OAAO,MAAM,KAAK,OAAO,QAAQ,MAAM,KAAK,OAAM,CAAE;AAAA,IAC5E,yBAAyB,MAAM;AAAA,EAChC,GAAE,MAAM,IAAI,CAAC,uBAAuB,CAAC;AACxC;AACA,MAAM,WAA2B,4BAAY,aAAa,CAAC,CAAC,UAAU,aAAa,CAAC,CAAC;AAErF;AACA;AACA;AACA;AACA,IAAI;AACJ,IAAI,OAAO,QAAQ;AACjB,cAAY;AACd,OAAO;AACL,QAAM,eAAe,MAAM,OAAO,gCAAgC;AAClE,cAAY,aAAa;AAC3B;AACK,MAAC,cAAc;AAEpB;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,kBAAkB,YAAY;AACrC,SAAO,OAAO,QAAQ,IAAI,iBAAiB,UAAU;AACvD;AAEA;AACA;AACA;AACA,IAAI,kBAAkB;AACtB,MAAM,qBAAqB,MAAM;AAC/B,SAAO;AACT;AAEA;AACA;AACA;AACA,IAAI,qBAAqB,kBAAkB,IAAI;AAC/C,MAAM,4BAA4B;AAClC,MAAM,oBAAoB;AAAA,EACxB,MAAM;AAAA,EACN,MAAM;AAAA,EACN,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,IAAI;AACN;AACA,MAAM,WAAW;AAAA,EACf,kBAAkB;AAAA,EAClB,mBAAmB;AAAA,EACnB,oBAAoB;AAAA,EACpB,YAAY;AAAA;AAAA,EAEZ,aAAa;AAAA;AAAA,EAEb,aAAa;AAAA;AAEf;AACA,SAAS,kBAAkB;AACzB,SAAO,oBAAoB,mBAAoB;AACjD;AAEA,SAAS,iBAAiB,YAAY,YAAY,cAAc,eAAe;AAC7E,QAAM,SAAS,IAAI;AACnB,QAAM,eAAe,WAAW,IAAI;AACpC,QAAM,eAAe,WAAW,IAAI;AACpC,SAAO,MAAM;AACb,SAAO,MAAM;AACb,SAAO,KAAK,WAAW,IAAI;AAC3B,SAAO,KAAK,WAAW,IAAI;AAC3B,SAAO,KAAK,WAAW,IAAI,WAAW,IAAI;AAC1C,SAAO,KAAK,WAAW,IAAI,WAAW,IAAI;AAC1C,SAAO,IAAI,CAAC,WAAW;AACvB,SAAO,IAAI,CAAC,WAAW;AACvB,SAAO;AACT;AAEA,SAAS,qBAAqB,SAAS,SAAS,GAAG,GAAG;AACpD,MAAI,SAAS;AACb,WAAS,GAAG,iBAAiB,WAAW,OAAO,EAAE,YAAY,CAAC,KAAK,WAAW,OAAO,EAAE,YAAY,CAAC,oBAAoB,WAAW,CAAC,EAAE,YAAY,CAAC,OAAO,WAAW,CAAC,EAAE,YAAY,CAAC;AACrL,SAAO;AACT;AAEA,SAAS,eAAe,eAAe;AACrC,MAAI,CAAC,eAAe;AAClB;AAAA,EACD;AACD,MAAI,kBAAkB,cAAc;AACpC,QAAM,cAAc,CAAC,GAAG,wBAAwB,GAAG,uBAAuB;AAC1E,MAAI,oBAAoB;AACtB,uBAAmB,iBAAiB,WAAW;AAAA,EAChD;AACH;AACA,SAAS,iBAAiB,WAAW,iBAAiB,cAAc,eAAe,cAAc,eAAe;AAC9G,MAAI,CAAC,mBAAmB,gBAAgB,UAAU,GAAG;AACnD,WAAO,IAAI,WAAU;AAAA,EACtB;AACD,MAAI,CAAC,oBAAoB;AACvB,YAAQ,MAAM,sCAAsC;AACpD,WAAO,IAAI,WAAU;AAAA,EACtB;AACD,QAAM,gBAAgB,KAAK,gBAAgB,SAAS;AACpD,QAAM,iBAAiB;AACvB,QAAM,iBAAiB,GAAG;AAC1B,QAAM,kBAAkB,GAAG;AAC3B,MAAI,iBAAiB,cAAc;AACnC,MAAI,gBAAgB,cAAc;AAClC,WAAS,IAAI,GAAG,IAAI,gBAAgB,QAAQ,KAAK;AAC/C,QAAI;AACJ,WAAO,gBAAgB,CAAC;AACxB,QAAI;AACJ,QAAI,MAAM,gBAAgB,QAAQ;AAChC,eAAS,GAAG,WAAW,gBAAgB,IAAI,GAAG,EAAE,QAAQ,CAAC;AAAA,IAC/D,OAAW;AACL,eAAS;AAAA,IACV;AACD,sBAAkB;AAClB,qBAAiB;AACjB,QAAI,KAAK,QAAQ;AACf,YAAM,KAAK;AAAA,QACT,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,QACA;AAAA,MACR;AACM,YAAM,aAAa,qBAAqB,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,GAAG,EAAE;AACpE,YAAM,cAAc,qBAAqB,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,CAAC;AACjE,UAAI,SAAS;AACb,eAAS,GAAG,mBAAmB;AAC/B,uBAAiB;AACjB,eAAS;AACT,eAAS,GAAG,mBAAmB;AAC/B,wBAAkB;AAAA,IACnB;AACD,sBAAkB;AAClB,qBAAiB;AAAA,EAClB;AACD,oBAAkB;AAClB,mBAAiB;AACjB,qBAAmB,WAAW,cAAc;AAC5C,qBAAmB,WAAW,aAAa;AAC3C,MAAI,YAAY,IAAI;AACpB,YAAU,kBAAkB;AAC5B,YAAU,mBAAmB;AAC7B,YAAU,YAAY;AAAA,IACpB,UAAU;AAAA,IACV,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,WAAW;AAAA;AAAA,IAEX,iBAAiB;AAAA,IACjB,WAAW;AAAA;AAAA,EAEf;AACE,YAAU,oBAAoB;AAC9B,YAAU,aAAa;AAAA,IACrB,WAAW;AAAA;AAAA,IAEX,iBAAiB;AAAA,IACjB,WAAW;AAAA;AAAA,IAEX,OAAO;AAAA,IACP,QAAQ;AAAA,EACZ;AACE,YAAU,aAAa;AAAA,IACrB,iBAAiB;AAAA,IACjB,OAAO;AAAA,IACP,QAAQ;AAAA,EACZ;AACE,SAAO;AACT;AACA,SAAS,cAAc,WAAW,iBAAiB,OAAO,cAAc,eAAe,cAAc,eAAe;AAClH,MAAI,cAAc,IAAI;AACtB,QAAM,KAAK;AAAA,IACT,gBAAgB,KAAK,EAAE;AAAA,IACvB,gBAAgB,KAAK,EAAE;AAAA,IACvB;AAAA,IACA;AAAA,EACJ;AACE,cAAY,YAAY;AAAA,IACtB,WAAW,qBAAqB,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,GAAG,EAAE;AAAA,IAC5D,iBAAiB;AAAA,IACjB,UAAU;AAAA,IACV,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,QAAQ;AAAA,EACZ;AACE,cAAY,aAAa;AAAA,IACvB,iBAAiB;AAAA,IACjB,WAAW,qBAAqB,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,CAAC;AAAA,IACxD,OAAO;AAAA,IACP,QAAQ;AAAA,EACZ;AACE,cAAY,aAAa;AAAA,IACvB,iBAAiB;AAAA,IACjB,OAAO;AAAA,IACP,QAAQ;AAAA,EACZ;AACE,SAAO;AACT;AAQA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA8CA,MAAM,cAAc;AAAA,EAClB,QAAQ;AAAA,EACR,OAAO;AAAA,IACL,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,UAAU;AAAA,IACV,UAAU,EAAE,MAAM,QAAQ,SAAS,EAAG;AAAA,IACtC,WAAW;AAAA,IACX,WAAW,EAAE,MAAM,CAAC,SAAS,MAAM,GAAG,SAAS,MAAO;AAAA,IACtD,MAAM,EAAE,MAAM,CAAC,QAAQ,MAAM,GAAG,SAAS,GAAI;AAAA,IAC7C,YAAY;AAAA,IACZ,YAAY;AAAA;AAAA,EAEb;AAAA,EACD,MAAM,SAAS,EAAE,UAAU;AACzB,UAAM,QAAQ;AACd,QAAI,UAAU,WAAW,CAAC;AAC1B,QAAI,iBAAiB,WAAW,MAAM,QAAQ;AAC9C,QAAI,sBAAsB;AAC1B,QAAI,aAAa,EAAE,OAAO,GAAG,QAAQ,EAAC;AACtC,QAAI,iBAAiB;AAAA,MACnB,WAAW,WAAW,EAAE;AAAA,MACxB,YAAY,WAAW,EAAE;AAAA,MACzB,YAAY,WAAW,EAAE;AAAA,IAC/B;AACI,QAAI,wBAAwB;AAC5B,QAAI,sBAAsB;AAC1B,QAAI,cAAc;AAAA,MAChB,YAAY,MAAM;AAAA,IACxB;AACI,UAAM,eAAe,MAAM;AACzB,UAAI,YAAY;AAChB,UAAI,OAAO,MAAM,cAAc,WAAW;AACxC,oBAAY,MAAM;AAAA,MACnB;AACD,UAAI,OAAO,MAAM,cAAc,YAAY,MAAM,cAAc,QAAQ;AACrE,oBAAY;AAAA,MACb;AACD,aAAO;AAAA,IACb;AACI,UAAM,oBAAoB,CAAC,gBAAgB;AACzC,UAAI,CAAC,uBAAuB;AAC1B,gCAAwB;AAAA,UACtB,OAAO;AAAA,YACL,YAAY;AAAA,UACb;AAAA,UACD,QAAQ;AAAA,QAClB;AAAA,MACO;AACD,UAAI,sBAAsB,UAAU,QAAQ,sBAAsB,MAAM,cAAc,aAAa;AACjG,YAAI,eAAe,MAAM,WAAW,OAAO;AAC3C,YAAI,cAAc,KAAK,eAAe,cAAc;AAClD,kBAAQ;AAAA,YACN,kCAAkC,mBAAmB;AAAA,UACjE;AACU,wBAAc;AAAA,QACf;AACD,YAAI,aAAa;AAAA,UACf,MAAM;AAAA,UACN,MAAM,WAAW;AAAA,UACjB;AAAA,UACA,WAAW;AAAA,UACX,WAAW;AAAA,UACX,MAAM,WAAW,KAAK,KAAK;AAAA,UAC3B,MAAM,WAAW,KAAK,KAAK;AAAA,QACrC;AACQ,8BAAsB,MAAM,aAAa;AACzC,8BAAsB,SAAS;AAAA,MAChC;AACD,aAAO,sBAAsB;AAAA,IACnC;AACI,UAAM,qBAAqB,CAAC,eAAe;AACzC,UAAI,MAAM,WAAW,UAAU,GAAG;AAChC,eAAO,kBAAkB,CAAC;AAAA,MAC3B;AACD,UAAI,CAAC,qBAAqB;AACxB,8BAAsB;AAAA,UACpB,OAAO;AAAA,YACL,YAAY;AAAA,UACb;AAAA,UACD,QAAQ;AAAA,QAClB;AAAA,MACO;AACD,UAAI,aAAa;AACjB,UAAI,oBAAoB,UAAU,MAAM;AACtC,qBAAa;AAAA,MACrB,OAAa;AACL,YAAI,cAAc,oBAAoB,MAAM;AAC5C,YAAI,cAAc,aAAa;AAC7B,cAAI,OAAO,cAAc,YAAY,OAAO,eAAe,UAAU;AACnE,yBAAa;AAAA,UACd;AACD,cAAI,WAAW,UAAU,YAAY,QAAQ;AAC3C,qBAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AAC1C,kBAAI,WAAW,CAAC,KAAK,YAAY,CAAC,GAAG;AACnC,6BAAa;AACb;AAAA,cACD;AAAA,YACF;AAAA,UACb,OAAiB;AACL,yBAAa;AAAA,UACd;AAAA,QACF;AAAA,MACF;AACD,UAAI,CAAC,YAAY;AACf,YAAI;AACJ,YAAI,cAAc,OAAO;AACvB,2BAAiB,MAAM,WAAW;AAAA,QAC5C,OAAe;AACL,2BAAiB,CAAA;AACjB,cAAI,iBAAiB;AACrB,cAAI,eAAe,MAAM,WAAW,OAAO;AAC3C,qBAAW,cAAc,YAAY;AACnC,gBAAI,cAAc;AAClB,gBAAI,aAAa,KAAK,cAAc,cAAc;AAChD,sBAAQ,KAAK,gBAAgB,qBAAqB,cAAc;AAChE,4BAAc;AAAA,YACf;AACD,2BAAe,KAAK,MAAM,WAAW,OAAO,WAAW,CAAC;AAAA,UACzD;AAAA,QACF;AACD,YAAI,oBAAoB,UAAU,MAAM;AACtC,yBAAe,oBAAoB,MAAM;AACzC,8BAAoB,SAAS;AAAA,QAC9B;AACD,YAAI,aAAa;AAAA,UACf,MAAM;AAAA,UACN;AAAA,UACA,WAAW;AAAA,UACX,WAAW;AAAA,UACX,MAAM,WAAW,KAAK,KAAK;AAAA,UAC3B,MAAM,WAAW,KAAK,KAAK;AAAA,QACrC;AACQ,4BAAoB,MAAM,aAAa;AACvC,4BAAoB,SAAS;AAAA,MAC9B;AACD,aAAO,oBAAoB;AAAA,IACjC;AACI,UAAM,mBAAmB,CAAC,eAAe;AACvC,qBAAe,UAAU,QAAQ,WAAW;AAC5C,qBAAe,WAAW,QAAQ,WAAW;AAC7C,qBAAe,WAAW,QAAQ,WAAW;AAC7C,cAAQ,SAAS;AAAA,IACvB;AACI,UAAM,WAAW,MAAM;AACrB,UAAI;AACJ,UAAI,aAAY,GAAI;AAClB,qBAAa,mBAAmB,KAAK;AACrC,mBAAW,UAAU,YAAY,GAAG,WAAW,oBAAoB,eAAe,uBAAuB,MAAM;AAC/G,mBAAW,WAAW,YAAY,GAAG,WAAW,qBAAqB,eAAe,uBAAuB,MAAM;AAAA,MACzH,OAAa;AACL,qBAAa,kBAAkB,CAAC;AAAA,MACjC;AACD,uBAAiB,UAAU;AAC3B,kBAAY,aAAa,MAAM;AAAA,IACrC;AACI,QAAI,MAAM,UAAU;AAClB,iBAAW,QAAQ,MAAM,SAAS;AAClC,iBAAW,SAAS,MAAM,SAAS;AAAA,IACzC,OAAW;AACL,UAAI,YAAY;AAChB,UAAI,aAAa;AACjB,eAAS,IAAI,GAAG,IAAI,MAAM,WAAW,OAAO,QAAQ,KAAK;AACvD,cAAM,SAAS,MAAM,WAAW,OAAO,CAAC,EAAE;AAC1C,cAAM,cAAc,OAAO,IAAI,OAAO;AACtC,cAAM,gBAAgB,OAAO,IAAI,OAAO;AACxC,YAAI,cAAc,WAAW;AAC3B,sBAAY;AAAA,QACb;AACD,YAAI,gBAAgB,YAAY;AAC9B,uBAAa;AAAA,QACd;AAAA,MACF;AACD,iBAAW,QAAQ;AACnB,iBAAW,SAAS;AAAA,IACrB;AACD,UAAM,OAAO,CAAC,aAAa;AACzB,UAAI,SAAS,cAAc,YAAY,YAAY;AACjD,gBAAQ,IAAI,qCAAqC;AACjD;MACD;AAAA,IACP,CAAK;AACD;AACA,QAAI,YAAY,WAAW,IAAI;AACV,aAAS,CAAA,CAAE;AAChC,gBAAY,MAAM;AAChB,UAAI,qBAAqB,UAAU,MAAM;AACvC,uBAAe,oBAAoB,MAAM;AACzC,4BAAoB,SAAS;AAAA,MAC9B;AAAA,IACP,CAAK;AACD,UAAM,oBAAoB,MAAM;AAC9B,UAAI,MAAM,WAAW;AACnB,cAAM,UAAS;AAAA,MAChB;AACD,UAAI,qBAAqB;AACvB,YAAI,KAAK;AACT,8BAAsB;AACtB;MACD;AAAA,IACP;AACI,UAAM,iBAAiB,MAAM;AAC3B,gBAAU,QAAQ;AAAA,IACxB;AACI,UAAM,KAAK;AAAA,MACT,OAAO,CAAC,YAAY,UAAU,UAAU,SAAS,eAAe;AAC9D,YAAI,MAAM,WAAW,UAAU,MAAM,WAAW,OAAO,WAAW,GAAG;AACnE,kBAAQ;AAAA,YACN,iDAAiD,MAAM,WAAW,OAAO;AAAA,UACrF;AACU;AAAA,QACD;AACD,YAAI,CAAC,YAAY;AACf,uBAAa;AAAA,QACd;AACD,YAAI,CAAC,SAAS;AACZ,oBAAU,MAAM;AAAA,QACjB;AACD,YAAI,CAAC,UAAU;AACb,qBAAW,MAAM;AAAA,QAClB;AACD,8BAAsB,MAAM;AAC1B,cAAI,WAAW;AACf,cAAI,sBAAsB,OAAO;AAC/B,uBAAW,YAAY,UAAU,WAAW,CAAC,IAAI,WAAW,WAAW,SAAS,CAAC;AAAA,UAC7F,OAAiB;AACL,uBAAW,YAAY,UAAU,IAAI,MAAM,WAAW,OAAO,SAAS;AAAA,UACvE;AACD,cAAI,gBAAgB,kBAAkB,QAAQ;AAC9C,2BAAiB,aAAa;AAC9B,cAAI,YAAY;AACd;UACD;AAAA,QACX;AACQ,YAAI,aAAa,mBAAmB,UAAU;AAC9C,mBAAW,UAAU,YAAY,GAAG,WAAW,oBAAoB,0BAA0B;AAC7F,mBAAW,WAAW,YAAY,GAAG,WAAW,qBAAqB,0BAA0B;AAC/F,yBAAiB,UAAU;AAAA,MAC5B;AAAA,MACD,MAAM,CAAC,UAAU;AACf,8BAAsB;AACtB,YAAI;AACJ,YAAI,OAAO,SAAS,aAAa;AAC/B,wBAAc;AAAA,QACxB,WAAmB,OAAO,SAAS,UAAU;AACnC,wBAAc,SAAS,UAAU,IAAI,MAAM,WAAW,OAAO,SAAS;AAAA,QAChF,OAAe;AACL,wBAAc;AAAA,QACf;AACD,YAAI,aAAa,kBAAkB,WAAW;AAC9C,yBAAiB,UAAU;AAAA,MAC5B;AAAA;AAAA,MAED,OAAO,CAAC,QAAQ,UAAU,MAAM,OAAO,WAAW;AAAA,MACjD;AAAA,IACP;AACI,UAAM,YAAY,cAAc,EAAE;AAClC,WAAO,EAAE;AACT,WAAO,CAAC,MAAM,WAAW;AACvB,aAAO,UAAS,GAAI,mBAAmB,OAAO;AAAA,QAC5C,IAAI;AAAA,QACJ,OAAO,eAAe,MAAM,cAAc,EAAE,UAAU,KAAK;AAAA,QAC3D,KAAK,MAAM,OAAO;AAAA,MAC1B,GAAS;AAAA,QACDC,gBAAmB,OAAO;AAAA,UACxB,IAAI;AAAA,UACJ,OAAO,eAAe,MAAM,cAAc,EAAE,WAAW,KAAK;AAAA,UAC5D,gBAAgB;AAAA,QAC1B,GAAW;AAAA,UACDA,gBAAmB,OAAO;AAAA,YACxB,IAAI;AAAA,YACJ,OAAO,eAAe,EAAE,GAAG,MAAM,cAAc,EAAE,WAAW,OAAO,WAAW,MAAM,SAAS,EAAC,CAAE;AAAA,YAChG,gBAAgB;AAAA,UAC5B,GAAa,MAAM,EAAE;AAAA,QACZ,GAAE,EAAE;AAAA,MACN,GAAE,CAAC;AAAA,IACV;AAAA,EACG;AACH;AACA,MAAM,uBAAuB,EAAE,KAAK,EAAE,uBAAuB,oCAAqC,EAAA;AAClG,OAAO,QAAQ,IAAI,mBAAmB,oBAAoB;AACrD,MAAC,gBAAgC,4BAAY,aAAa,CAAC,CAAC,aAAa,iBAAiB,CAAC,CAAC;AAEjG;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeK,MAAC,cAAc;AAAA,EAClB,QAAQ;AAAA,EACR,OAAO;AAAA,IACL,UAAU;AAAA,IACV,WAAW;AAAA,IACX,eAAe;AAAA,IACf,gBAAgB,EAAE,MAAM,SAAS,SAAS,MAAO;AAAA,EAClD;AAAA,EACD,MAAM,SAAS;AACb,UAAM,QAAQ;AACd,QAAI,UAAU,WAAW,CAAC;AAC1B,QAAI,YAAY,WAAW,KAAK;AAChC,QAAI,aAAa,WAAW,KAAK;AACjC,QAAI;AACJ,QAAI,eAAe;AACnB,QAAI,gBAAgB;AACpB,QAAI,eAAe,IAAI,QAAQ,CAAC,YAAY;AAC1C,qBAAe;AAAA,IACrB,CAAK;AACD,QAAI,gBAAgB,IAAI,QAAQ,CAAC,YAAY;AAC3C,sBAAgB;AAAA,IACtB,CAAK;AACD,QAAI,cAAc;AAAA,MAChB,UAAU,MAAM;AAAA,MAChB,gBAAgB,MAAM;AAAA,IAC5B;AACI,QAAI,iBAAiB,MAAM;AACzB;IACN;AACI,aAAS,YAAY,WAAW;AAC9B,UAAI,MAAM,IAAI;AACd,UAAI,KAAK,OAAO,WAAW,IAAI;AAC/B,UAAI,SAAS,WAAW;AACtB,YAAI,IAAI,UAAU,OAAO,IAAI,SAAS,KAAK;AACzC,cAAI,WAAW,KAAK,MAAM,IAAI,YAAY;AAC1C,gBAAM,cAAc,UAAU,aAAa;AAAA,QACrD,OAAe;AACL,kBAAQ,MAAM,qCAAqC,IAAI,MAAM;AAAA,QAC9D;AAAA,MACT;AACM,UAAI,UAAU,WAAW;AACvB,gBAAQ,MAAM,wBAAwB;AAAA,MAC9C;AACM,UAAI,KAAI;AAAA,IACT;AACD,QAAI,WAAW,MAAM;AACnB,gBAAU,QAAQ;AAClB,iBAAW,QAAQ,MAAM;AACzB,UAAI,CAAC,MAAM,kBAAkB,MAAM,UAAU;AAC3C,sBAAc,CAAC,iBAAiB,MAAM,QAAQ,CAAC;AAC/C,YAAI,MAAM,aAAa,MAAM,eAAe;AAC1C,sBAAY,MAAM,SAAS;AAAA,QACrC,OAAe;AACL,kBAAQ;AAAA,YACN,2BAA2B,MAAM,kBAAkB,MAAM;AAAA,UACrE;AAAA,QACS;AACD,gBAAQ,IAAI,CAAC,cAAc,aAAa,CAAC,EAAE,KAAK,MAAM;AACpD,oBAAU,QAAQ;AAAA,QAC5B,CAAS;AAAA,MACF;AACD,kBAAY,WAAW,MAAM;AAC7B,kBAAY,iBAAiB,MAAM;AACnC,cAAQ;AAAA,IACd;AACI;AACA,UAAM,OAAO,CAAC,aAAa;AACzB,UAAI,SAAS,YAAY,YAAY,YAAY,YAAY,kBAAkB,SAAS,gBAAgB;AACtG,gBAAQ,IAAI,gDAAgD;AAC5D;MACD;AAAA,IACP,CAAK;AACD,WAAO,CAAC,MAAM,WAAW;AACvB,aAAO,UAAS,GAAI,mBAAmB,OAAO;AAAA,QAC5C,IAAI;AAAA,QACJ,KAAK,MAAM,OAAO;AAAA,MAC1B,GAAS;AAAA,QACD,YAAY,MAAM,UAAU,GAAG;AAAA,UAC7B,aAAa,MAAM,WAAW;AAAA,UAC9B,eAAe,MAAM,cAAc;AAAA,QACpC,GAAE,MAAM,GAAG,CAAC,eAAe,eAAe,CAAC;AAAA,QAC5C,MAAM,SAAS,KAAK,MAAM,UAAU,IAAI,WAAW,KAAK,QAAQ,WAAW,EAAE,KAAK,EAAC,CAAE,IAAI,mBAAmB,IAAI,IAAI;AAAA,MAC5H,CAAO;AAAA,IACP;AAAA,EACG;AACH;AAEA;AACA;AACA;AACA,MAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMrB,cAAc;AACZ,SAAK,eAAe;AACpB,SAAK,OAAO;AAAA,EACb;AAAA,EACD,cAAc,QAAQ;AACpB,SAAK,eAAe;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOD,MAAM,WAAW,UAAU;AACzB,QAAI,CAAC,KAAK,MAAM;AACd,WAAK,OAAO;AAAA,IACb;AACD,QAAI,KAAK,cAAc;AACrB,WAAK,aAAa,MAAM,WAAW,QAAQ;AAAA,IAC5C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,KAAK,WAAW;AACd,QAAI,CAAC,KAAK,MAAM;AACd,WAAK,OAAO;AAAA,IACb;AACD,QAAI,KAAK,cAAc;AACrB,WAAK,aAAa,KAAK,SAAS;AAAA,IACjC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUD,MAAM,OAAO,UAAU,MAAM,OAAO,QAAQ;AAC1C,QAAI,CAAC,KAAK,MAAM;AACd,WAAK,OAAO;AAAA,IACb;AACD,QAAI,KAAK,cAAc;AACrB,WAAK,aAAa,MAAM,OAAO,UAAU,MAAM,OAAO,MAAM;AAAA,IAC7D;AAAA,EACF;AACH;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuBA,MAAM,cAAc;AAAA,EAClB,QAAQ;AAAA,EACR,OAAO;AAAA;AAAA,IAEL,cAAc;AAAA,IACd,eAAe;AAAA;AAAA,IAEf,WAAW;AAAA;AAAA,IAEX,UAAU;AAAA;AAAA,IAEV,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,KAAK;AAAA,MACH,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,OAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA;AAAA,IAED,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,EACF;AAAA,EACD,MAAM,SAAS,EAAE,UAAU;AACzB,UAAM,QAAQ;AACd,UAAM,UAAU,WAAW,IAAI;AAC/B,UAAM,cAAc,SAAS,EAAE,QAAQ,MAAO,CAAA;AAC9C,QAAI,YAAY;AAChB,gBAAY,MAAM;AAChB,UAAI,YAAY,QAAQ;AACtB,YAAI,UAAU,aAAa,MAAM,YAAY;AAC7C,YAAI,WAAW,aAAa,MAAM,aAAa;AAC/C,kBAAU,UAAU,EAAE,SAAS,SAAU,CAAA;AAAA,MAC1C;AAAA,IACP,CAAK;AACD,gBAAY,MAAM;AAChB,UAAI,YAAY,QAAQ;AACtB,kBAAU,OAAO,MAAM,MAAM;AAAA,MAC9B;AAAA,IACP,CAAK;AACD,gBAAY,MAAM;AAChB,UAAI,YAAY,QAAQ;AACtB,YAAI,MAAM,WAAW;AACnB,iBAAO,kBAAkB,MAAM,MAAM,SAAS;AAC9C,cAAI,oBAAoB,MAAM,MAAM,SAAS,EAAE,gBAAe;AAC9D,cAAI,mBAAmB;AACrB,sBAAU,eAAe,iBAAiB;AAAA,UACtD,OAAiB;AACL,oBAAQ,MAAM,+BAA+B;AAAA,UAC9C;AAAA,QACX,OAAe;AACL,oBAAU,eAAe,IAAI;AAAA,QAC9B;AAAA,MACF;AAAA,IACP,CAAK;AACE,QAAO,MAAY;AACtB,UAAM,gBAAgB,CAAC,OAAO,OAAO,OAAO,UAAU;AAEpD,aAAO;AAEP,aAAO;AACP,YAAM,WAAW,OAAO,OAAO,OAAO,KAAK;AAAA,IACjD;AACI,cAAU,MAAM;AACd,cAAQ,IAAI,8BAA8B;AAC1C,kBAAY,IAAI,QAAQ;AAAA,QACtB,MAAM,QAAQ,KAAK,EAAE,gBAAiB;AAAA,QACtC,CAAC,OAAO,OAAO,OAAO,UAAU;AAC9B,wBAAc,OAAO,OAAO,OAAO,KAAK;AAAA,QACzC;AAAA,MACT;AACM,kBAAY,SAAS;AAAA,IAC3B,CAAK;AACD,gBAAY,MAAM;AAChB,gBAAU,OAAO,MAAM,MAAM;AAAA,IACnC,CAAK;AACD,kBAAc,MAAM;AAClB,UAAI,QAAQ,MAAM;AAChB,sBAAc,MAAM,OAAO,MAAM,KAAK;AAAA,MACvC;AACD,gBAAU,OAAO,KAAK;AAAA,IAC5B,CAAK;AACD,WAAO,CAAE,CAAA;AACT,aAAS,aAAa,cAAc;AAClC,UAAI,eAAe,GAAG;AACpB,gBAAQ,KAAK,4BAA4B,cAAc;AACvD,eAAO;AAAA,MACf,WAAiB,eAAe,GAAG;AAC3B,gBAAQ,KAAK,4BAA4B,cAAc;AACvD,eAAO;AAAA,MACf,OAAa;AACL,eAAO;AAAA,MACR;AAAA,IACF;AACD,WAAO,CAAC,MAAM,WAAW;AACvB,aAAO,UAAS,GAAI,mBAAmB,OAAO;AAAA,QAC5C,SAAS;AAAA,QACT,KAAK;AAAA,QACL,OAAO,eAAe;AAAA,UACpB,KAAK,MAAM;AAAA,UACX,MAAM,MAAM;AAAA,UACZ,OAAO,MAAM;AAAA,UACb,QAAQ,MAAM;AAAA,QACxB,CAAS;AAAA,MACT,GAAS;AAAA,QACD,WAAW,KAAK,QAAQ,SAAS;AAAA,MAClC,GAAE,CAAC;AAAA,IACV;AAAA,EACG;AACH;AAEA,IAAI,qBAAkC,uBAAO,OAAO;AAAA,EAClD,WAAW;AAAA,EACX,SAAS;AACX,CAAC;AAED;AACA;AACA;AACA;AACA,IAAI,oBAAoB;AACnB,MAAC,mBAAmB,kBAAkB;AAE3C;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqCA,MAAM,WAAW;AACjB,SAAS,WAAW,OAAO,KAAK,QAAQ,GAAG;AACzC,MAAI,IAAI,QAAQ;AAChB,MAAI,IAAI,OAAO;AACb,SAAK;AAAA,EACT,WAAa,KAAK,QAAQ,KAAK;AAC3B,SAAK;AAAA,EACN;AACD,SAAO;AACT;AACA,MAAM,wBAAwB,CAAC,YAAY;AACzC,UAAQ,SAAO;AAAA,IACb,KAAK;AACH,aAAO,cAAc;AAAA,IACvB,KAAK;AACH,aAAO,cAAc;AAAA,IACvB,KAAK;AACH,aAAO,cAAc;AAAA,IACvB,KAAK;AACH,aAAO,cAAc;AAAA,IACvB;AACE,cAAQ,MAAM,qBAAqB,OAAO;AAC1C,aAAO;AAAA,EACV;AACH;AACA,MAAM,cAAc;AAAA,EAClB,YAAY,EAAE,cAAc,aAAa,iBAAkB;AAAA,EAC3D,OAAO;AAAA,IACL,eAAe;AAAA,MACb,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,SAAS;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,cAAc;AAAA,MACZ,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,gBAAgB;AAAA,MACd,MAAM;AAAA,MACN,UAAU,OAAO;AACf,eAAO,CAAC,SAAS,UAAU,KAAK,EAAE,SAAS,KAAK;AAAA,MACjD;AAAA,MACD,SAAS;AAAA,IACV;AAAA,IACD,YAAY;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,YAAY;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,YAAY;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,SAAS;AAAA,MACP,MAAM;AAAA,IACP;AAAA,IACD,UAAU;AAAA,MACR,MAAM;AAAA,IACP;AAAA,IACD,QAAQ;AAAA,MACN,MAAM;AAAA,IACP;AAAA,IACD,kBAAkB;AAAA,MAChB,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,WAAW;AAAA,MACT,MAAM;AAAA,MACN,UAAU;AACR,eAAO;AAAA,UACL,UAAU;AAAA,UACV,QAAQ;AAAA,QAClB;AAAA,MACO;AAAA,IACF;AAAA,IACD,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,MAAM;AAAA,MACJ,MAAM;AAAA,IACP;AAAA,IACD,SAAS;AAAA,MACP,MAAM;AAAA,IACP;AAAA,IACD,QAAQ;AAAA,MACN,MAAM;AAAA,IACP;AAAA,IACD,WAAW;AAAA,MACT,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,iBAAiB;AAAA,MACf,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,cAAc;AAAA,MACZ,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,sBAAsB;AAAA,MACpB,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,EACF;AAAA,EACD,UAAU;AAAA,IACR,YAAY;AACV,aAAO,IAAI,MAAM,KAAK,UAAU,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,GAAG,UAAU;AAC1D,eAAO;AAAA,MACf,CAAO;AAAA,IACF;AAAA,IACD,kBAAkB;AAChB,UAAI,gBAAgB,KAAK,cAAc,KAAK,UAAU,KAAK,UAAU,KAAK;AAC1E,UAAI,KAAK,UAAU;AACjB,YAAI;AACJ,YAAI,KAAK,mBAAmB,SAAS;AACnC,gBAAM,KAAK;AAAA,QACrB,WAAmB,KAAK,mBAAmB,OAAO;AACxC,gBAAM,KAAK,WAAW,SAAS,gBAAgB,KAAK;AAAA,QAC9D,OAAe;AACL,iBAAO,KAAK,WAAW,SAAS,iBAAiB;AAAA,QAClD;AACD,eAAO;AAAA,UACL,MAAM,KAAK,eAAe,IAAI,KAAK,WAAW,QAAQ,MAAM,KAAK;AAAA,UACjE;AAAA,UACA,QAAQ;AAAA,QAClB;AAAA,MACA,OAAa;AACL,YAAI;AACJ,YAAI,KAAK,mBAAmB,SAAS;AACnC,iBAAO,KAAK;AAAA,QACtB,WAAmB,KAAK,mBAAmB,OAAO;AACxC,iBAAO,KAAK,WAAW,QAAQ,gBAAgB,KAAK;AAAA,QAC9D,OAAe;AACL,kBAAQ,KAAK,WAAW,QAAQ,iBAAiB;AAAA,QAClD;AACD,eAAO;AAAA,UACL;AAAA,UACA,KAAK,KAAK,eAAe,IAAI,KAAK,WAAW,SAAS,MAAM,KAAK;AAAA,UACjE,QAAQ;AAAA,QAClB;AAAA,MACO;AAAA,IACF;AAAA,IACD,mBAAmB;AACjB,aAAO,KAAK,UAAU,KAAK;AAAA,IAC5B;AAAA,IACD,mBAAmB;AACjB,aAAO,WAAW,KAAK,aAAa,KAAK,QAAQ,KAAK,UAAU;AAAA,IACjE;AAAA,IACD,mBAAmB;AACjB,aAAO,WAAW,KAAK,SAAS,GAAG,QAAQ;AAAA,IAC5C;AAAA,IACD,eAAe;AACb,UAAI,YAAY;AAAA,QACd;AAAA,UACE,KAAK;AAAA,UACL,MAAM;AAAA,UACN,OAAO,KAAK,WAAW;AAAA,UACvB,QAAQ,KAAK,WAAW;AAAA,QACzB;AAAA,QACD;AAAA,UACE,KAAK;AAAA,UACL,MAAM;AAAA,UACN,OAAO,KAAK,WAAW;AAAA,UACvB,QAAQ,KAAK,WAAW;AAAA,QACzB;AAAA,QACD;AAAA,UACE,KAAK;AAAA,UACL,MAAM;AAAA,UACN,OAAO,KAAK,WAAW;AAAA,UACvB,QAAQ,KAAK,WAAW;AAAA,QACzB;AAAA,MACT;AACM,cAAQ,KAAK,WAAS;AAAA,QACpB,KAAK;AACH,oBAAU,CAAC,EAAE,MAAM,KAAK,WAAW,CAAC,KAAK,WAAW,SAAS;AAC7D,oBAAU,CAAC,EAAE,OAAO,KAAK,WAAW,IAAI,CAAC,KAAK,WAAW;AACzD,oBAAU,CAAC,EAAE,MAAM,KAAK,WAAW,KAAK,WAAW,SAAS;AAC5D,oBAAU,CAAC,EAAE,OAAO,KAAK,WAAW,IAAI,KAAK,WAAW;AACxD;AAAA,QACF,KAAK;AACH,oBAAU,CAAC,EAAE,UAAU;AACvB,oBAAU,CAAC,EAAE,UAAU;AACvB,oBAAU,CAAC,EAAE,UAAU;AACvB;AAAA,MAGH;AACD,UAAI,WAAW,CAAA;AACf,eAAS,IAAI,GAAG,IAAI,UAAU,KAAK;AACjC,iBAAS,KAAK;AAAA,UACZ,WAAW;AAAA,YACT,KAAK,mBAAmB,WAAW,IAAI,KAAK,kBAAkB,UAAU,EAAE;AAAA,YAC1E,KAAK;AAAA,UACN;AAAA,UACD,OAAO,UAAU,WAAW,IAAI,KAAK,QAAQ,QAAQ,CAAC;AAAA,QAChE,CAAS;AAAA,MACF;AACD,aAAO;AAAA,IACR;AAAA,EACF;AAAA,EACD,MAAM,OAAO;AACX,QAAI,iBAAiB,IAAI,MAAM,QAAQ;AACvC,QAAI,MAAM,iBAAiB;AACzB,eAAS,IAAI,GAAG,IAAI,eAAe,QAAQ,KAAK;AAC9C,uBAAe,CAAC,IAAI,IAAI;MACzB;AAAA,IACF;AACD,QAAI,YAAY;AAChB,QAAI,SAAS,IAAI,CAAC;AAClB,QAAI,UAAU,IAAI,KAAK;AACvB,QAAI,iBAAiB;AACrB,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,UAAU;AAAA,IAChB;AAAA,EACG;AAAA,EACD,OAAO;AAAA,IACL,OAAO,UAAU;AACf,WAAK,WAAW,WAAW,KAAK,aAAa,UAAU,KAAK,UAAU,CAAC;AAAA,IACxE;AAAA,EACF;AAAA,EACD,SAAS;AAAA,IACP,eAAe;AACb,WAAK,WAAW;AAChB,oBAAc,KAAK,cAAc;AACjC,WAAK,iBAAiB;AAAA,IACvB;AAAA,IACD,gBAAgB;AACd,UAAI,KAAK,mBAAmB,KAAK,KAAK,aAAa,GAAG;AACpD,aAAK,WAAW;AAChB,YAAI,KAAK,iBAAiB,GAAG;AAC3B,wBAAc,KAAK,cAAc;AAAA,QAClC;AACD,aAAK,iBAAiB,YAAY,MAAM;AACtC,eAAK,SAAS,KAAK,eAAe,KAAK,CAAC;AAAA,QAClD,GAAW,KAAK,gBAAgB;AAAA,MACzB;AAAA,IACF;AAAA,IACD,QAAQ,IAAI,YAAY,GAAG;AACzB,YAAM,QAAQ,WAAW,KAAK,aAAa,KAAK,QAAQ,KAAK,UAAU;AACvE,UAAI,SAAS,IAAI;AACf,YAAI;AACJ,YAAI,aAAa,GAAG;AAClB,cAAI;AAAA,QACd,OAAe;AACL,cAAI,KAAK;AAAA,QACV;AACD,aAAK,SAAS,WAAW,KAAK,OAAO,KAAK,YAAY,IAAI,IAAI,IAAI,CAAC,KAAK,aAAa,CAAC,CAAC;AAAA,MACxF;AAAA,IACF;AAAA,IACD,WAAW,IAAI;AACb,UAAI,YAAY;AAChB,cAAQ,GAAG,SAAO;AAAA,QAChB,KAAK;AACH,cAAI,CAAC,KAAK,UAAU;AAClB,wBAAY;AAAA,UACb;AACD;AAAA,QACF,KAAK;AACH,cAAI,KAAK,UAAU;AACjB,wBAAY;AAAA,UACb;AACD;AAAA,QACF,KAAK;AACH,cAAI,CAAC,KAAK,UAAU;AAClB,wBAAY;AAAA,UACb;AACD;AAAA,QACF,KAAK;AACH,cAAI,KAAK,UAAU;AACjB,wBAAY;AAAA,UACb;AACD;AAAA,QACF,KAAK;AACH,eAAK,UAAU,KAAK,gBAAgB;AACpC,iBAAO;AAAA,QACT;AACE,iBAAO;AAAA,MACV;AACD,UAAI,cAAc,GAAG;AACnB,YAAI,CAAC,KAAK,sBAAsB;AAC9B,eAAK,SAAS,SAAS;AACvB,iBAAO;AAAA,QACjB,OAAe;AACL,cAAI,KAAK,mBAAmB,aAAa,KAAK,KAAK,mBAAmB,YAAY,KAAK,YAAY;AACjG,iBAAK,SAAS,SAAS;AACvB,mBAAO;AAAA,UACR;AAAA,QACF;AAAA,MACF;AACD,WAAK,SAAS;AAAA,QACZ,WAAW,sBAAsB,GAAG,OAAO;AAAA,QAC3C,MAAM;AAAA,UACJ,GAAG,KAAK,WAAW;AAAA,UACnB,GAAG,KAAK,WAAW;AAAA,UACnB,OAAO,KAAK,WAAW;AAAA,UACvB,QAAQ,KAAK,WAAW;AAAA,QACzB;AAAA,MACT,CAAO;AACD,aAAO;AAAA,IACR;AAAA,IACD,kBAAkB;AAAA,IACjB;AAAA,IACD,WAAW;AACT,WAAK,UAAU;AACf,WAAK,aAAY;AACjB,WAAK,UAAO;AAAA,IACb;AAAA,IACD,UAAU;AACR,WAAK,UAAU;AACf,WAAK,cAAa;AAClB,WAAK,SAAM;AAAA,IACZ;AAAA,IACD,gBAAgB,WAAW,SAAS,OAAO;AACzC,UAAI,WAAW,KAAK,UAAU;AAC9B,UAAI;AACJ,UAAI;AACJ,cAAQ,KAAK,WAAS;AAAA,QACpB,KAAK;AACH,cAAI,QAAQ;AACV,kBAAM,SAAS,KAAK,WAAW,KAAK,WAAW,SAAS,KAAK,WAAW,SAAS,KAAK,UAAU,WAAW;AAC3G,+BAAmB,IAAI,QAAQ;AAAA,cAC7B,KAAK,WAAW,YAAY,KAAK,WAAW,SAAS,YAAY,KAAK,WAAW;AAAA,cACjF;AAAA,cACA;AAAA,cACA,CAAC,KAAK;AAAA,cACN,KAAK,WAAW,IAAI,YAAY,KAAK,WAAW;AAAA,cAChD,KAAK,WAAW,YAAY,KAAK,WAAW,SAAS;AAAA,YACnE;AACY,+BAAmB,IAAI,QAAQ;AAAA,cAC7B,KAAK,WAAW,YAAY,KAAK,WAAW,SAAS,YAAY,KAAK,WAAW;AAAA,cACjF;AAAA,cACA;AAAA,cACA,CAAC,KAAK;AAAA,cACN,KAAK,WAAW,IAAI,YAAY,KAAK,WAAW;AAAA,cAChD,KAAK,WAAW,YAAY,KAAK,WAAW,SAAS;AAAA,YACnE;AAAA,UACA,OAAiB;AACL,+BAAmB,IAAI,QAAQ;AAAA,cAC7B,KAAK,WAAW,IAAI,YAAY,KAAK,WAAW;AAAA,cAChD;AAAA,cACA,KAAK,WAAW,YAAY,KAAK,WAAW,SAAS;AAAA,cACrD;AAAA,cACA;AAAA,cACA;AAAA,YACd;AACY,+BAAmB,IAAI,QAAQ;AAAA,cAC7B,KAAK,WAAW,IAAI,YAAY,KAAK,WAAW;AAAA,cAChD;AAAA,cACA,KAAK,WAAW,YAAY,KAAK,WAAW,SAAS;AAAA,cACrD;AAAA,cACA;AAAA,cACA;AAAA,YACd;AAAA,UACW;AACD;AAAA,MAKH;AACD,uBAAiB;AAAA,QACf,IAAI,QAAQ,kBAAkB,MAAM,KAAK,iBAAiB,IAAI;AAAA,MACtE;AACM,WAAK,MAAM,UAAU,KAAK,gBAAgB,GAAG,gBAAgB,IAAI,EAAE,eAAe,gBAAgB;AAClG,WAAK,MAAM,UAAU,WAAW,KAAK,mBAAmB,WAAW,QAAQ,CAAC,GAAG,gBAAgB,IAAI,EAAE,eAAe,gBAAgB;AAAA,IACrI;AAAA,IACD,SAAS,WAAW;AAClB,UAAI,KAAK,cAAc;AACrB;AACF,WAAK,YAAY,KAAK;AACtB,WAAK,UAAU;AACf,WAAK,gBAAgB,YAAY,IAAI,IAAI,IAAI,KAAK,eAAe;AAAA,IAClE;AAAA,IACD,YAAY,OAAO,OAAO,OAAO,OAAO;AACtC,UAAI,SAAS,CAAC,SAAS,SAAS,CAAC,OAAO;AACtC,aAAK,aAAY;AAAA,MAClB,WAAU,CAAC,SAAS,SAAS,CAAC,SAAS,OAAO;AAC7C,YAAI,CAAC,KAAK,SAAS;AACjB,eAAK,cAAa;AAAA,QACnB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACD,UAAU;AACR,QAAI,CAAC,KAAK,SAAS;AACjB,WAAK,cAAa;AAAA,IACnB;AAAA,EACF;AAAA,EACD,gBAAgB;AACd,SAAK,aAAY;AAAA,EAClB;AACH;AACA,SAAS,cAAc,MAAM,QAAQ,QAAQ,QAAQ,OAAO,UAAU;AACpE,QAAM,gCAAgC,iBAAiB,oBAAoB;AAC3E,QAAM,6BAA6B,iBAAiB,iBAAiB;AACrE,SAAO,UAAW,GAAE,mBAAmB,UAAU,MAAM;AAAA,IACrD,YAAY,+BAA+B;AAAA,MACzC,cAAc;AAAA,MACd,eAAe;AAAA,MACf,OAAO,OAAO,WAAW;AAAA,MACzB,QAAQ,OAAO,WAAW;AAAA,MAC1B,QAAQ;AAAA,MACR,UAAU,SAAS;AAAA,IACzB,GAAO,MAAM,GAAG,CAAC,gBAAgB,iBAAiB,SAAS,UAAU,UAAU,CAAC;AAAA,IAC5E,YAAY,4BAA4B;AAAA,MACtC,MAAM,OAAO;AAAA,MACb,OAAO,eAAe;AAAA,QACpB,MAAM,OAAO,WAAW;AAAA,QACxB,KAAK,OAAO,WAAW;AAAA,QACvB,OAAO,OAAO,WAAW;AAAA,QACzB,QAAQ,OAAO,WAAW;AAAA,MAClC,CAAO;AAAA,MACD,UAAU;AAAA,QACR,SAAS,SAAS;AAAA,QAClB,QAAQ,SAAS;AAAA,QACjB,WAAW,SAAS;AAAA,MACrB;AAAA,IACP,GAAO;AAAA,MACD,SAAS,QAAQ,MAAM;AAAA,QACrB,OAAO,cAAc,KAAK,UAAW,GAAE,mBAAmB,OAAO,EAAE,KAAK,KAAK;AAAA,UAC3E,WAAW,KAAK,QAAQ,YAAY;AAAA,YAClC,cAAc;AAAA,YACd,WAAW;AAAA,YACX,SAAS,OAAO;AAAA,UAC5B,CAAW;AAAA,QACF,CAAA,MAAM,UAAS,GAAI,mBAAmB,OAAO;AAAA,UAC5C,KAAK;AAAA,UACL,OAAO,eAAe;AAAA,YACpB,OAAO,OAAO,WAAW;AAAA,YACzB,QAAQ,OAAO,WAAW;AAAA,YAC1B,UAAU;AAAA,UACtB,CAAW;AAAA,QACX,GAAW;AAAA,UACDA,gBAAmB,OAAO,EAAE,OAAO;AAAA,YACjC,QAAQ;AAAA,UACpB,KAAe;AAAA,YACHA,gBAAmB,OAAO,MAAM;AAAA,eAC7B,UAAU,IAAI,GAAG,mBAAmB,UAAU,MAAM,WAAW,SAAS,cAAc,CAAC,MAAM,UAAU;AACtG,uBAAO,UAAS,GAAI,mBAAmB,OAAO;AAAA,kBAC5C,KAAK;AAAA,kBACL,OAAO,eAAe,KAAK,KAAK;AAAA,kBAChC,SAAS;AAAA,kBACT,KAAK;AAAA,gBACvB,GAAmB;AAAA,mBACA,UAAW,GAAE,mBAAmB,OAAO;AAAA,oBACtC,KAAK,KAAK;AAAA,kBAC9B,GAAqB;AAAA,oBACD,WAAW,KAAK,QAAQ,YAAY;AAAA,sBAClC,cAAc,SAAS;AAAA,sBACvB,WAAW,KAAK;AAAA,sBAChB,SAAS,OAAO;AAAA,oBACtC,CAAqB;AAAA,kBACrB,CAAmB;AAAA,gBACF,GAAE,CAAC;AAAA,cACL,CAAA,GAAG,GAAG;AAAA,YACrB,CAAa;AAAA,UACb,CAAW;AAAA,UACD,OAAO,iBAAiB,aAAa,mBAAmB,OAAO;AAAA,YAC7D,KAAK;AAAA,YACL,OAAO,eAAe,SAAS,eAAe;AAAA,UAC1D,GAAa;AAAA,aACA,UAAU,IAAI,GAAG,mBAAmB,UAAU,MAAM,WAAW,SAAS,WAAW,CAAC,UAAU;AAC7F,qBAAO,UAAS,GAAI,mBAAmB,OAAO;AAAA,gBAC5C,KAAK;AAAA,gBACL,OAAO;AAAA,kBACL,OAAO,WAAW,EAAE,KAAK,SAAS,mBAAmB,MAAO,IAAG,EAAE,MAAM,SAAS,mBAAmB,MAAO;AAAA,gBAC3G;AAAA,cACjB,GAAiB;AAAA,gBACD,WAAW,KAAK,QAAQ,gBAAgB;AAAA,kBACtC,WAAW;AAAA,kBACX,cAAc,SAAS;AAAA,kBACvB,SAAS,OAAO;AAAA,gBAClC,GAAmB,MAAM;AAAA,kBACPA,gBAAmB,OAAO;AAAA,oBACxB,OAAO,eAAe;AAAA,sBACpB,OAAO,OAAO;AAAA,sBACd,QAAQ,OAAO;AAAA,sBACf,iBAAiB,SAAS,SAAS,mBAAmB,0BAA0B;AAAA,sBAChF,cAAc,KAAK,MAAM,OAAO,UAAU,CAAC,IAAI;AAAA,oBACrE,CAAqB;AAAA,kBACrB,GAAqB,MAAM,CAAC;AAAA,gBAC5B,CAAiB;AAAA,cACF,GAAE,CAAC;AAAA,YACL,CAAA,GAAG,GAAG;AAAA,UACR,GAAE,CAAC,KAAK,mBAAmB,IAAI,IAAI;AAAA,QACrC,GAAE,CAAC;AAAA,MACZ,CAAO;AAAA,MACD,GAAG;AAAA,IACJ,GAAE,GAAG,CAAC,QAAQ,SAAS,UAAU,CAAC;AAAA,EACpC,GAAE,EAAE;AACP;AACK,MAAC,YAA4B,4BAAY,aAAa,CAAC,CAAC,UAAU,aAAa,CAAC,CAAC;AAEtF;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwBK,MAAC,cAAc;AAAA,EAClB,QAAQ;AAAA,EACR,OAAO;AAAA,IACL,YAAY,EAAE,MAAM,QAAQ,SAAS,KAAM;AAAA,IAC3C,WAAW,EAAE,MAAM,OAAQ;AAAA,IAC3B,YAAY,EAAE,MAAM,QAAQ,SAAS,KAAM;AAAA,IAC3C,UAAU,EAAE,MAAM,QAAQ,SAAS,KAAM;AAAA,IACzC,WAAW,EAAE,MAAM,QAAQ,SAAS,KAAM;AAAA,IAC1C,MAAM,EAAE,MAAM,QAAQ,SAAS,KAAM;AAAA,IACrC,WAAW,EAAE,MAAM,OAAO,SAAS,KAAM;AAAA,IACzC,eAAe,EAAE,MAAM,QAAQ,SAAS,KAAM;AAAA,IAC9C,SAAS,EAAE,MAAM,SAAU;AAAA,IAC3B,QAAQ,EAAE,MAAM,SAAU;AAAA,IAC1B,SAAS,EAAE,MAAM,SAAU;AAAA,IAC3B,UAAU,EAAE,MAAM,SAAU;AAAA,EAC7B;AAAA,EACD,MAAM,SAAS;AACb,UAAM,QAAQ;AACd,QAAI,aAAa,MAAM,aAAa,IAAI,IAAI,MAAM;AAClD,QAAI,aAAa,KAAK,GAAG;AACvB,mBAAa,aAAa;AAAA,IAC3B;AACD,QAAI,QAAQ,gBAAgB,IAAI,MAAM,aAAa,CAAC,CAAC;AACrD,QAAI;AACJ,QAAI;AACJ,QAAI,MAAM,aAAa,QAAQ;AAC7B,kBAAY,KAAK,MAAM,aAAa,CAAC;AAAA,IAC3C,OAAW;AACL,kBAAY,MAAM;AAAA,IACnB;AACD,QAAI,WAAW,CAAA;AACf,QAAI,SAAS,MAAM,UAAU;AAC7B,QAAI,SAAS,MAAM,YAAY;AAC7B,YAAM,IAAI,MAAM,MAAM;AAAA,IAC5B,OAAW;AACL,eAAS,IAAI,GAAG,IAAI,MAAM,UAAU,QAAQ,KAAK;AAC/C,iBAAS,KAAK;AAAA,UACZ,WAAW,MAAM,UAAU,CAAC;AAAA,UAC5B,WAAW;AAAA,UACX,YAAY;AAAA,YACV,KAAK;AAAA,YACL,OAAO;AAAA,YACP,QAAQ;AAAA,UACT;AAAA,QACX,CAAS;AAAA,MACF;AAAA,IACF;AACD,QAAI,QAAQ,WAAW,CAAC;AACxB,QAAI,YAAY;AAChB,QAAI,aAAa;AACjB,QAAI,aAAa,KAAK,MAAM,aAAa,CAAC,IAAI;AAC9C,UAAM,QAAQ,MAAM;AAClB,eAAS,IAAI,GAAG,IAAI,aAAa,GAAG,KAAK;AACvC,YAAI,UAAU,aAAa,aAAa;AACxC,YAAI,UAAU,GAAG;AACf,qBAAW,MAAM,UAAU;AAAA,QAC5B,WAAU,WAAW,MAAM,UAAU,QAAQ;AAC5C,qBAAW,MAAM,UAAU;AAAA,QAC5B;AACD,cAAM,CAAC,IAAI,SAAS,OAAO;AAAA,MAC5B;AAAA,IACP;AACI;AACA,QAAI,SAAS,WAAW,EAAE;AAC1B,QAAI,WAAW,WAAW,EAAE;AAC5B,QAAI,aAAa,WAAW,EAAE;AAC9B,QAAI,UAAU,WAAW,EAAE;AAC3B,QAAI,YAAY,SAAS,CAAA,CAAE;AAC3B,QAAI,WAAW,KAAK,MAAM,MAAM,SAAS,CAAC;AAC1C,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,gBAAU,KAAK;AAAA,QACb,OAAO;AAAA,QACP,OAAO;AAAA,QACP,MAAM;AAAA,MACd,CAAO;AAAA,IACF;AACD,aAAS,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS;AACjD,UAAI,eAAe,KAAK,IAAI,QAAQ,KAAK,MAAM,MAAM,SAAS,CAAC,CAAC;AAChE,UAAI,QAAQ,IAAI,eAAe,MAAM;AACrC,YAAM,QAAQ,MAAM,cAAc,QAAQ;AAC1C,UAAI,SAAS,MAAM,SAAS,GAAG;AAC7B,YAAI,YAAY,MAAM,WAAW,QAAQ;AACzC,YAAI,UAAU,MAAM,WAAW,QAAQ,QAAQ;AAC/C,cAAM,SAAS,UAAU,eAAe,aAAa,KAAK;AAAA,MAC3D;AACD,gBAAU,KAAK,IAAI,EAAE,OAAO,MAAK;AAAA,IAClC;AACD,aAAS,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS;AACjD,UAAI,YAAY,MAAM,WAAW,QAAQ;AACzC,UAAI,SAAS,KAAK,MAAM,MAAM,SAAS,CAAC,GAAG;AACzC,kBAAU,KAAK,EAAE,OAAO,YAAY,UAAU,KAAK,EAAE,QAAQ;AAAA,MAC9D;AAAA,IACF;AACD,aAAS,IAAI,WAAW,GAAG,KAAK,GAAG,KAAK;AACtC,UAAI,YAAY,UAAU,IAAI,CAAC,EAAE,OAAO,UAAU,IAAI,CAAC,EAAE,QAAQ;AACjE,gBAAU,CAAC,EAAE,OAAO,YAAY,MAAM,QAAQ,UAAU,CAAC,EAAE,QAAQ;AAAA,IACpE;AACD,QAAI,cAAc,UAAU,QAAQ,EAAE,OAAO,UAAU,WAAW,CAAC,EAAE;AACrE,aAAS,IAAI,WAAW,GAAG,IAAI,MAAM,QAAQ,KAAK;AAChD,UAAI,YAAY,UAAU,IAAI,CAAC,EAAE,OAAO,UAAU,IAAI,CAAC,EAAE,QAAQ;AACjE,gBAAU,CAAC,EAAE,OAAO,YAAY,MAAM,QAAQ,UAAU,CAAC,EAAE,QAAQ;AAAA,IACpE;AACD,UAAM,eAAe,CAAC,UAAU;AAC9B,UAAI;AACJ,UAAI;AACJ,UAAI;AACJ,UAAI;AACJ,UAAI;AACJ,UAAI;AACJ,UAAI;AACJ,qBAAe,KAAK,IAAI,QAAQ,KAAK,MAAM,MAAM,SAAS,CAAC,CAAC;AAC5D,cAAQ,IAAI,eAAe,MAAM;AACjC,eAAS,MAAM,SAAS;AACxB,aAAO,MAAM,cAAc,SAAS,MAAM,cAAc,SAAS,SAAS;AAC1E,cAAQ,UAAU,KAAK,EAAE;AACzB,eAAS,MAAM,cAAc,SAAS;AACtC,UAAI,SAAS,MAAM,SAAS,GAAG;AAC7B,YAAI,YAAY,MAAM,WAAW,QAAQ;AACzC,YAAI,UAAU,MAAM,WAAW,QAAQ,QAAQ;AAC/C,cAAM,SAAS,UAAU,eAAe,aAAa,KAAK;AAAA,MAC3D;AACD,aAAO,UAAU,KAAK,EAAE;AACxB,YAAM,KAAK,EAAE,WAAW,MAAM;AAC9B,YAAM,KAAK,EAAE,WAAW,QAAQ;AAChC,YAAM,KAAK,EAAE,WAAW,SAAS;AACjC,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW,OAAO;AAAA,MAC1B;AAAA,IACA;AACI,UAAM,iBAAiB,CAAC,UAAU;AAChC,YAAM,eAAe,KAAK,IAAI,QAAQ,KAAK,MAAM,MAAM,SAAS,CAAC,CAAC;AAClE,YAAM,QAAQ,IAAI,eAAe,MAAM;AACvC,YAAM,QAAQ,MAAM,cAAc,QAAQ;AAC1C,YAAM,SAAS,MAAM,cAAc,SAAS;AAC5C,UAAI,aAAa,QAAQ;AACvB,eAAO;AAAA,UACL;AAAA,UACA;AAAA,UACA,WAAW,SAAS,MAAM,SAAS,KAAK,IAAI,SAAS,QAAQ,WAAW;AAAA,QAClF;AAAA,MACA,OAAa;AACL,eAAO;AAAA,UACL;AAAA,UACA;AAAA,UACA,WAAW,SAAS,MAAM,SAAS,KAAK,IAAI,SAAS,QAAQ,WAAW;AAAA,QAClF;AAAA,MACO;AAAA,IACP;AACI,UAAM,YAAY,CAAC,OAAO;AACxB,cAAQ,GAAG,SAAO;AAAA,QAChB,KAAK;AACH,sBAAY;AACZ,cAAI,OAAO,SAAS,IAAI;AACtB,mBAAO,QAAQ,gBAAgB,MAAM;AAAA,UACjD,WAAqB,OAAO,SAAS,gBAAgB,MAAM,aAAa;AAC5D,mBAAO,QAAQ,gBAAgB,MAAM;AAAA,UACjD,OAAiB;AACL,mBAAO,QAAQ,gBAAgB,MAAM;AAAA,UACtC;AACD,cAAI,QAAQ,SAAS,IAAI;AACvB,oBAAQ,QAAQ,iBAAiB,MAAM;AAAA,UACnD,WAAqB,QAAQ,SAAS,iBAAiB,MAAM,aAAa;AAC9D,oBAAQ,QAAQ,iBAAiB,MAAM;AAAA,UACnD,OAAiB;AACL,oBAAQ,QAAQ,iBAAiB,MAAM;AAAA,UACxC;AACD,0BAAgB;AAChB;AACA,cAAI,aAAa,GAAG;AAClB,yBAAa,MAAM,UAAU,SAAS;AAAA,UACvC,WAAU,cAAc,MAAM,UAAU,QAAQ;AAC/C,yBAAa;AAAA,UACd;AACD;AACA;AACA,gBAAM,WAAW,eAAe,UAAU;AAC1C;AAAA,QACF,KAAK;AACH,sBAAY;AACZ,cAAI,OAAO,SAAS,IAAI;AACtB,mBAAO,QAAQ,iBAAiB,MAAM;AAAA,UAClD,WAAqB,OAAO,SAAS,iBAAiB,MAAM,aAAa;AAC7D,mBAAO,QAAQ,iBAAiB,MAAM;AAAA,UAClD,OAAiB;AACL,mBAAO,QAAQ,iBAAiB,MAAM;AAAA,UACvC;AACD,cAAI,QAAQ,SAAS,IAAI;AACvB,oBAAQ,QAAQ,kBAAkB,MAAM;AAAA,UACpD,WAAqB,QAAQ,SAAS,kBAAkB,MAAM,aAAa;AAC/D,oBAAQ,QAAQ,kBAAkB,MAAM;AAAA,UACpD,OAAiB;AACL,oBAAQ,QAAQ,kBAAkB,MAAM;AAAA,UACzC;AACD,0BAAgB;AAChB;AACA,cAAI,aAAa,GAAG;AAClB,yBAAa,MAAM,UAAU,SAAS;AAAA,UACvC,WAAU,cAAc,MAAM,UAAU,QAAQ;AAC/C,yBAAa;AAAA,UACd;AACD;AACA;AACA,gBAAM,WAAW,eAAe,UAAU;AAC1C;AAAA,QACF,KAAK;AACH,gBAAM,UAAU,UAAU;AAAA,MAG7B;AAAA,IACP;AACI,QAAI,aAAa;AACjB,QAAI,eAAe;AAAA;AAAA,uCAEgB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAMpC,eAAW,WAAW,YAAY;AAClC,QAAI,eAAe;AAAA;AAAA,uCAEgB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAMpC,eAAW,WAAW,YAAY;AAClC,QAAI,gBAAgB;AAAA;AAAA,uCAEe;AAAA;AAAA;AAAA;AAAA;AAAA;AAMnC,eAAW,WAAW,aAAa;AACnC,QAAI,gBAAgB;AAAA;AAAA,uCAEe;AAAA;AAAA;AAAA;AAAA;AAAA;AAMnC,eAAW,WAAW,aAAa;AACnC,QAAI,SAAS;AAAA;AAAA,mCAEkB,IAAI,MAAM,aAAa,IAAI,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAMhE,eAAW,WAAW,MAAM;AAC5B,QAAI,SAAS;AAAA;AAAA,mCAEkB,IAAI,MAAM,aAAa,IAAI,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAMhE,eAAW,WAAW,MAAM;AAC5B,QAAI,UAAU;AAAA;AAAA,mCAEiB,KAAK,IAAI,MAAM,cAAc,KAAK,IAAI,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAM3E,eAAW,WAAW,OAAO;AAC7B,QAAI,UAAU;AAAA;AAAA,mCAEiB,KAAK,IAAI,MAAM,cAAc,KAAK,IAAI,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAM3E,eAAW,WAAW,OAAO;AAC7B,QAAI,gBAAgB;AAAA;AAAA,uCAEe;AAAA;AAAA;AAAA;AAAA;AAAA;AAMnC,eAAW,WAAW,aAAa;AACnC,QAAI,gBAAgB;AAAA;AAAA,uCAEe;AAAA;AAAA;AAAA;AAAA;AAAA;AAMnC,eAAW,WAAW,aAAa;AACnC,QAAI,iBAAiB;AAAA;AAAA,uCAEc,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAMpC,eAAW,WAAW,cAAc;AACpC,QAAI,iBAAiB;AAAA;AAAA,uCAEc,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAMpC,eAAW,WAAW,cAAc;AACpC,UAAM,kBAAkB,MAAM;AAC5B,UAAI,WAAW,SAAS,IAAI;AAC1B,mBAAW,QAAQ,WAAW,MAAM;AAAA,MAC5C,WAAiB,WAAW,SAAS,WAAW,MAAM,aAAa;AAC3D,mBAAW,QAAQ,WAAW,MAAM;AAAA,MAC5C,WAAiB,WAAW,SAAS,WAAW,MAAM,aAAa;AAC3D,mBAAW,QAAQ,WAAW,MAAM;AAAA,MAC5C,OAAa;AACL,mBAAW,SAAS,WAAW,MAAM;AAAA,MACtC;AACD,UAAI,SAAS,SAAS,IAAI;AACxB,iBAAS,QAAQ,UAAU,MAAM;AAAA,MACzC,WAAiB,SAAS,SAAS,UAAU,MAAM,aAAa;AACxD,iBAAS,QAAQ,UAAU,MAAM;AAAA,MACzC,WAAiB,SAAS,SAAS,UAAU,MAAM,aAAa;AACxD,iBAAS,QAAQ,UAAU,MAAM;AAAA,MACzC,OAAa;AACL,iBAAS,SAAS,UAAU,MAAM;AAAA,MACnC;AAAA,IACP;AACI,UAAM,cAAc;AAAA,MAClB;AAAA,MACA,SAAS,MAAM;AAAA,MACf,QAAQ,MAAM;AAAA,IACpB;AACI,oBAAgB,MAAM;AACpB,iBAAW,WAAW,cAAc;AACpC,iBAAW,WAAW,cAAc;AACpC,iBAAW,WAAW,eAAe;AACrC,iBAAW,WAAW,eAAe;AACrC,iBAAW,WAAW,eAAe;AACrC,iBAAW,WAAW,eAAe;AACrC,iBAAW,WAAW,gBAAgB;AACtC,iBAAW,WAAW,gBAAgB;AACtC,iBAAW,WAAW,QAAQ;AAC9B,iBAAW,WAAW,QAAQ;AAC9B,iBAAW,WAAW,SAAS;AAC/B,iBAAW,WAAW,SAAS;AAAA,IACrC,CAAK;AACD,WAAO,CAAC,MAAM,WAAW;AACvB,YAAM,6BAA6B,iBAAiB,iBAAiB;AACrE,aAAO,UAAS,GAAI,YAAY,4BAA4B;AAAA,QAC1D,UAAU;AAAA,QACV,MAAM,MAAM;AAAA,MACpB,GAAS;AAAA,QACD,SAAS,QAAQ,MAAM;AAAA,UACrBA,gBAAmB,OAAO;AAAA,YACxB,OAAO,eAAe;AAAA,cACpB,UAAU;AAAA,cACV,OAAO,MAAM,WAAW;AAAA,cACxB,QAAQ,MAAM,WAAW;AAAA,cACzB,MAAM,MAAM,WAAW;AAAA,cACvB,KAAK,MAAM,WAAW;AAAA,YACpC,CAAa;AAAA,UACb,GAAa;AAAA,YACDA,gBAAmB,OAAO;AAAA,cACxB,OAAO,eAAe;AAAA,gBACpB,OAAO,MAAM,KAAK,EAAE,SAAS,MAAM,KAAK;AAAA,gBACxC,QAAQ,MAAM,WAAW;AAAA,gBACzB,MAAM;AAAA,cACtB,CAAe;AAAA,YACf,GAAe;AAAA,eACA,UAAU,IAAI,GAAG,mBAAmB,UAAU,MAAM,WAAW,MAAM,KAAK,GAAG,CAAC,MAAM,UAAU;AAC7F,uBAAO,UAAS,GAAI,mBAAmB,OAAO;AAAA,kBAC5C,KAAK,OAAO,GAAG;AAAA,kBACf,OAAO,eAAe,aAAa,KAAK,CAAC;AAAA,gBAC3D,GAAmB;AAAA,kBACDA,gBAAmB,OAAO;AAAA,oBACxB,OAAO,eAAe,eAAe,KAAK,CAAC;AAAA,kBAC/D,GAAqB;AAAA,oBACD,WAAW,KAAK,QAAQ,YAAY;AAAA,sBAClC,WAAW,KAAK;AAAA,sBAChB,WAAW,KAAK;AAAA,sBAChB,YAAY,KAAK;AAAA,oBACvC,CAAqB;AAAA,kBACF,GAAE,CAAC;AAAA,gBACL,GAAE,CAAC;AAAA,cACL,CAAA,GAAG,GAAG;AAAA,YACR,GAAE,CAAC;AAAA,UACL,GAAE,CAAC;AAAA,QACd,CAAS;AAAA,QACD,GAAG;AAAA,MACX,GAAS,GAAG,CAAC,MAAM,CAAC;AAAA,IACpB;AAAA,EACG;AACH;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA,IAAI,qBAAqB,IAAI,aAAa,CAAC;AAC3C,SAAS,eAAe,QAAQ;AAC9B,qBAAmB,CAAC,IAAI;AACxB,MAAI,CAAC,MAAM,mBAAmB,CAAC,CAAC,GAAG;AACjC,WAAO,mBAAmB,CAAC;AAAA,EAC/B,OAAS;AACL,YAAQ,KAAK,GAAG,4CAA4C;AAC5D,WAAO;AAAA,EACR;AACH;AACA,SAAS,YAAY,YAAY;AAC/B,MAAI,cAAc,WAAW,QAAQ,MAAM,MAAM,GAAG;AAClD,WAAO;AAAA,EACR,WAAU,OAAO,OAAO,IAAI,QAAQ;AACnC,WAAO,IAAI,OAAO,OAAO,IAAI,OAAO,UAAU,EAAE;AAAA,EACpD,OAAS;AACL,YAAQ,KAAK,GAAG,qDAAqD;AACrE,WAAO;AAAA,EACR;AACH;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,SAAS,wBAAwB,YAAY,aAAa,eAAe,cAAc;AACrF,MAAI,wBAAwB,gBAAgB,IAAI,gBAAgB;AAChE,MAAI,8BAA8B,KAAK,KAAK,eAAe,wBAAwB,UAAU;AAC7F,MAAI,gCAAgC,KAAK,IAAI,GAAG,KAAK,KAAK,cAAc,wBAAwB,UAAU,CAAC;AAC3G,MAAI,6BAA6B,KAAK,OAAO,wBAAwB,iCAAiC,CAAC;AACvG,SAAO;AAAA,IACL,SAAS;AAAA,MACP,OAAO;AAAA,MACP,OAAO,KAAK,IAAI,GAAG,wBAAwB,IAAI,2BAA2B;AAAA,IAC3E;AAAA,IACD,QAAQ,CAAC;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,IACb,CAAK;AAAA,IACD,cAAc;AAAA,EAClB;AACA;AAEA;AACA;AACA;AACA,MAAM,yBAAyB;AAC1B,MAAC,+BAA+B;AA2BrC,MAAM,cAAc;AAAA,EAClB,OAAO;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,cAAc,CAAC,QAAQ,MAAM;AAAA,IAC7B,UAAU;AAAA,IACV,WAAW;AAAA,IACX,UAAU;AAAA,IACV,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,gBAAgB;AAAA,IAChB,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,OAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,WAAW;AAAA,MACT,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,UAAU;AAAA,MACR,MAAM;AAAA,IACP;AAAA,EACF;AAAA,EACD,OAAO;AAAA,IACL,UAAU;AAAA,MACR,QAAQ,UAAU,UAAU;AAC1B,aAAK,gBAAe;AAAA,MACrB;AAAA,MACD,MAAM;AAAA,IACP;AAAA,EACF;AAAA,EACD,QAAQ;AACN,WAAO;AAAA,MACL,gBAAgB;AAAA,MAChB,aAAa;AAAA,IACnB;AAAA,EACG;AAAA,EACD,SAAS;AAAA,IACP,iBAAiB,cAAc,kBAAkB;AAC/C,UAAI,kBAAkB;AACpB,eAAO,KAAK;AAAA,UACV;AAAA,UACA;AAAA,QACV;AAAA,MACA,OAAa;AACL,YAAI,cAAc,IAAI,QAAQ,uBAAuB,YAAY;AACjE,eAAO,IAAI,QAAQ,WAAW,WAAW;AAAA,MAC1C;AAAA,IACF;AAAA,IACD,YAAY,SAAS;AACnB,UAAI,OAAO,WAAW,UAAU;AAC9B,eAAO;AAAA,UACL,MAAM;AAAA,UACN,SAAS;AAAA,UACT,UAAU;AAAA,UACV,aAAa;AAAA,UACb,YAAY;AAAA,QACtB;AAAA,MACA,WAAiB,OAAO,WAAW,YAAY,QAAQ,SAAS,GAAG;AAC3D,cAAM,UAAU;AAChB,YAAI,QAAQ,QAAQ,MAAM,OAAO;AACjC,YAAI,OAAO,SAAS,GAAG;AACrB,cAAI,WAAW,MAAM,CAAC;AACtB,cAAI,YAAY,MAAM,SAAS,IAAI,MAAM,CAAC,IAAI;AAC9C,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,SAAS;AAAA,YACT,UAAU;AAAA,YACV,aAAa,MAAM,SAAS,IAAI,MAAM,CAAC,IAAI;AAAA,YAC3C,YAAY,MAAM,SAAS,IAAI,MAAM,CAAC,IAAI;AAAA,UACtD;AAAA,QACS;AAAA,MACF;AACD,aAAO;AAAA,IACR;AAAA,IACD,8BAA8B,cAAc,kBAAkB;AAC5D,UAAI,oBAAoB,OAAO,oBAAoB,UAAU;AAC3D,gBAAQ,iBAAiB,MAAI;AAAA,UAC3B,KAAK,8BAA8B;AACjC,mBAAO,KAAK;AAAA,cACV;AAAA,cACA;AAAA,YACd;AAAA,UACW;AAAA,UACD,KAAK,wBAAwB;AAC3B,mBAAO,KAAK,oBAAoB,cAAc,gBAAgB;AAAA,UAC/D;AAAA,UACD;AACE,oBAAQ,MAAM,gBAAgB,gBAAgB;AAC9C,mBAAO;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAAA,IACD,6BAA6B,cAAc,kBAAkB;AAC3D,YAAM,iBAAiB,QAAQ;AAC/B,UAAI,cAAc,IAAI,QAAQ,uBAAuB,YAAY;AACjE,UAAI,kBAAkB,IAAI,QAAQ,cAAc,WAAW;AAC3D,UAAI,iBAAiB,KAAK;AACxB,YAAI,gBAAgB,YAAY,iBAAiB,GAAG;AACpD,YAAI,gBAAgB,eAAe,UAAU,aAAa;AAC1D,wBAAgB,eAAe,aAAa;AAAA,MACpD,OAAa;AACL,gBAAQ,MAAM,uBAAuB;AACrC,eAAO;AAAA,MACR;AACD,UAAI,WAAW;AAAA,QACb,eAAe,iBAAiB,UAAU;AAAA,QAC1C,eAAe,iBAAiB,WAAW;AAAA,QAC3C,iBAAiB;AAAA,QACjB,eAAe,iBAAiB,YAAY;AAAA,MACpD;AACM,sBAAgB,WAAW,SAAS,SAAS,SAAS,OAAO;AAC7D,sBAAgB,UAAU,SAAS,QAAQ,SAAS,MAAM;AAC1D,sBAAgB;AAAA,QACd,SAAS;AAAA,QACT,SAAS;AAAA,MACjB;AACM,aAAO;AAAA,IACR;AAAA,IACD,oBAAoB,cAAc,kBAAkB;AAClD,UAAI,eAAe,IAAI,QAAQ;AAAA,QAC7B,eAAe,iBAAiB,OAAO;AAAA,QACvC,eAAe,iBAAiB,QAAQ;AAAA,QACxC,eAAe,iBAAiB,UAAU;AAAA,QAC1C,eAAe,iBAAiB,WAAW;AAAA,MACnD;AACM,UAAI,cAAc,IAAI,QAAQ;AAAA,QAC5B;AAAA,QACA;AAAA,MACR;AACM,aAAO,IAAI,QAAQ,WAAW,WAAW;AAAA,IAC1C;AAAA,IACD,kBAAkB;AAChB,WAAK,iBAAc;AAAA,IACpB;AAAA,IACD,kBAAkB;AAChB,UAAI,KAAK,UAAU;AACjB,YAAI,KAAK,SAAS,QAAQ,KAAK,KAAK,SAAS,SAAS,GAAG;AACvD,gBAAM,aAAa,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,OAAO,CAAC,KAAK,SAAS,QAAQ;AAC5F,gBAAM,YAAY,CAAC,MAAM,KAAK,SAAS,GAAG,IAAI,KAAK,SAAS,MAAM,CAAC,KAAK,SAAS,SAAS;AAC1F,gBAAM,SAAS,OAAO,UAAU,KAAK,SAAS,WAAW,IAAI,KAAK,SAAS,cAAc;AACzF,eAAK,UAAU;AAAA,YACb;AAAA,YACA;AAAA,YACA,KAAK,SAAS;AAAA,YACd,KAAK,SAAS;AAAA,YACd;AAAA,UACZ;AAAA,QACA,OAAe;AACL,kBAAQ,MAAM,gBAAgB;AAAA,QAC/B;AAAA,MACF;AAAA,IACF;AAAA,IACD,QAAQ;AACN,UAAI,KAAK,kBAAkB,KAAK,WAAW;AACzC,aAAK,UAAU,sBAAsB,KAAK,cAAc;AAAA,MACzD;AAAA,IACF;AAAA,IACD,gBAAgB;AACd,UAAI,aAAa;AACjB,UAAI,WAAW,KAAK;AACpB,UAAI,YAAY,SAAS,QAAQ,gCAAgC,SAAS,WAAW,GAAG;AACtF,YAAI,YAAY,SAAS;AACzB,qBAAa,QAAQ,mBAAmB,qBAAqB,sBAAsB;AAAA,MACpF;AACD,aAAO;AAAA,IACR;AAAA,EACF;AAAA,EACD,UAAU;AACR,QAAI,OAAO,QAAQ;AACjB,YAAM,iBAAiB,QAAQ;AAC/B,UAAI,YAAY,YAAY,KAAK,GAAG;AACpC,UAAI,eAAe,eAAe;AAAA,QAChC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACR;AACM,UAAI,WAAW,KAAK,OAAO;AAC3B,UAAI,KAAK,OAAO,cAAc;AAC5B,mBAAW,KAAK,YAAY,KAAK,OAAO,YAAY;AAAA,MACrD;AACD,WAAK,YAAY,KAAK,iBAAiB,cAAc,QAAQ;AAC7D,UAAI,KAAK,WAAW;AAClB,aAAK,UAAU;AAAA,UACb,KAAK;AAAA,UACL,KAAK;AAAA,QACf;AAAA,MACO;AACD,WAAK,gBAAe;AACpB,UAAI,KAAK,WAAW;AAClB,aAAK,iBAAiB,IAAI,QAAQ;AAAA,UAChC,0BAA0B,KAAK;AAAA,UAC/B,KAAK;AAAA,UACL;AAAA,UACA;AAAA,UACA;AAAA,QACV;AACQ,aAAK,eAAe,YAAY,KAAK,KAAK,EAAE,UAAU,KAAK,MAAM;AACjE,aAAK,eAAe;AAAA,UAClB,IAAI,QAAQ,kBAAkB,MAAM,KAAK,iBAAiB,IAAI;AAAA,QACxE;AAAA,MACA,OAAa;AACL,aAAK,iBAAiB;AAAA,MACvB;AACD,WAAK,cAAc,QAAQ,WAAW;AAAA,QACpC,IAAI,QAAQ,SAAS,KAAK,SAAS;AAAA,MAC3C;AAAA,IACK;AAAA,EACF;AAAA,EACD,gBAAgB;AACd,QAAI,KAAK,gBAAgB,IAAI;AAC3B,cAAQ,WAAW,OAAO,KAAK,WAAW;AAC1C,WAAK,cAAc;AAAA,IACpB;AAAA,EACF;AAAA,EACD,UAAU;AACR,QAAI,KAAK,WAAW;AAClB,WAAK,MAAK;AAAA,IACX;AAAA,EACF;AAAA,EACD,YAAY;AACV,QAAI,KAAK,WAAW;AAClB,UAAI,KAAK,aAAa,KAAK,kBAAkB,MAAM;AACjD,aAAK,iBAAiB,IAAI,QAAQ;AAAA,UAChC,0BAA0B,KAAK;AAAA,UAC/B,KAAK;AAAA,UACL;AAAA,UACA;AAAA,UACA;AAAA,QACV;AACQ,aAAK,eAAe,YAAY,KAAK,KAAK,EAAE,UAAU,KAAK,MAAM;AACjE,aAAK,eAAe;AAAA,UAClB,IAAI,QAAQ,kBAAkB,MAAM,KAAK,iBAAiB,IAAI;AAAA,QACxE;AACQ,aAAK,UAAU,sBAAsB,KAAK,cAAc;AAAA,MAChE,OAAa;AACL,aAAK,iBAAiB;AAAA,MACvB;AAAA,IACF;AAAA,EACF;AAAA,EACD,cAAc;AACZ,QAAI,KAAK,WAAW;AAClB,WAAK,UAAU;IAChB;AACD,SAAK,iBAAiB;AAAA,EACvB;AACH;AACA,SAAS,cAAc,MAAM,QAAQ,QAAQ,QAAQ,OAAO,UAAU;AACpE,SAAO,UAAS,GAAI,mBAAmB,OAAO;AAAA,IAC5C,OAAO,eAAe;AAAA,MACpB,KAAK,OAAO;AAAA,MACZ,MAAM,OAAO;AAAA,MACb,OAAO,OAAO;AAAA,MACd,QAAQ,OAAO;AAAA,MACf,YAAY,SAAS,cAAe;AAAA,IAC1C,CAAK;AAAA,IACD,yBAAyB,OAAO;AAAA,EACjC,GAAE,MAAM,IAAI,CAAC,uBAAuB,CAAC;AACxC;AACA,MAAM,iBAAiC,4BAAY,aAAa,CAAC,CAAC,UAAU,aAAa,CAAC,CAAC;AAE3F;AACA;AACA;AACA,IAAI;AACJ,IAAI,OAAO,QAAQ;AACjB,oBAAkB;AACpB,OAAO;AACL,QAAM,qBAAqB,MAAM,OAAO,sCAAsC;AAC9E,oBAAkB,mBAAmB;AACvC;AACK,MAAC,oBAAoB;AAG1B;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeK,MAAC,cAAc;AAAA,EAClB,QAAQ;AAAA,EACR,OAAO;AAAA,IACL,OAAO;AAAA,MACL,MAAM;AAAA,IACP;AAAA,IACD,QAAQ;AAAA,MACN,MAAM;AAAA,IACP;AAAA,IACD,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,KAAK;AAAA,MACH,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,YAAY;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,EACF;AAAA,EACD,MAAM,SAAS;AACb,UAAM,QAAQ;AACd,QAAI,aAAa,IAAI,QAAQ;AAC7B,QAAI,SAAS,QAAQ,WAAW,IAAI,IAAI,QAAQ,SAAS,YAAY,IAAI,CAAC;AAC1E,gBAAY,MAAM;AAChB,UAAI,YAAY;AACd,gBAAQ,IAAI,wBAAwB,MAAM,YAAY;AACtD,gBAAQ,MAAM,YAAU;AAAA,UACtB,KAAK;AACH,uBAAW,aAAa,IAAI;AAC5B;AAAA,UACF;AACE,uBAAW,aAAa,KAAK;AAAA,QAChC;AAAA,MACF;AAAA,IACP,CAAK;AACD,oBAAgB,MAAM;AACpB,UAAI,SAAS,GAAG;AACd,gBAAQ,WAAW,OAAO,MAAM;AAChC,iBAAS;AAAA,MACV;AAAA,IACP,CAAK;AACD,WAAO,CAAC,MAAM,WAAW;AACvB,aAAO,UAAS,GAAI,mBAAmB,OAAO;AAAA,QAC5C,OAAO,eAAe;AAAA,UACpB,MAAM,QAAQ;AAAA,UACd,KAAK,QAAQ;AAAA,UACb,OAAO,QAAQ;AAAA,UACf,QAAQ,QAAQ;AAAA,QAC1B,CAAS;AAAA,QACD,yBAAyB,MAAM,MAAM;AAAA,MAC7C,GAAS;AAAA,QACD,WAAW,KAAK,QAAQ,SAAS;AAAA,MACzC,GAAS,IAAI,CAAC,uBAAuB,CAAC;AAAA,IACtC;AAAA,EACG;AACH;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsEA,MAAM,QAAQ;AACd,MAAM,aAAa;AACnB,MAAM,WAAW;AACjB,MAAM,WAAW;AAAA,EACf,YAAY,MAAM;AAChB,SAAK,OAAO;AAAA,EACb;AACH;AACA,MAAM,iBAAiB,WAAW;AAAA,EAChC,cAAc;AACZ,UAAM,UAAU;AAAA,EACjB;AACH;AACA,MAAM,iBAAiB,WAAW;AAAA,EAChC,YAAY,OAAO,KAAK;AACtB,UAAM,QAAQ;AACd,SAAK,QAAQ;AACb,SAAK,MAAM;AAAA,EACZ;AACH;AACA,MAAM,cAAc;AAAA,EAClB,OAAO;AAAA,IACL,MAAM;AAAA,MACJ,MAAM;AAAA,IACP;AAAA,IACD,KAAK;AAAA,MACH,MAAM;AAAA,IACP;AAAA,IACD,MAAM;AAAA,MACJ,MAAM;AAAA,IACP;AAAA,IACD,aAAa;AAAA,MACX,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,KAAK;AAAA,MACH,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,YAAY;AAAA,MACV,MAAM;AAAA,MACN,UAAU;AACR,eAAO,IAAI,SAAQ;AAAA,MACpB;AAAA,IACF;AAAA,IACD,aAAa;AAAA,MACX,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,SAAS;AAAA,MACP,MAAM;AAAA,MACN,UAAU;AACR,eAAO;AAAA,UACL,KAAK;AAAA,UACL,QAAQ;AAAA,QAClB;AAAA,MACO;AAAA,IACF;AAAA,IACD,gBAAgB;AAAA,MACd,MAAM;AAAA,IACP;AAAA,IACD,aAAa;AAAA,MACX,MAAM;AAAA,IACP;AAAA,IACD,QAAQ;AAAA,MACN,MAAM;AAAA,IACP;AAAA,IACD,YAAY;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,eAAe;AAAA,MACb,MAAM;AAAA,MACN,SAAS,cAAc;AAAA,IACxB;AAAA,EACF;AAAA,EACD,MAAM,OAAO;AACX,WAAO;AAAA,MACL,gBAAgB,CAAE;AAAA,MAClB,aAAa,CAAE;AAAA,MACf,YAAY;AAAA,MACZ,UAAU,CAAE;AAAA,MACZ,UAAU;AAAA,QACR,UAAU;AAAA,MACX;AAAA,MACD,gBAAgB;AAAA,MAChB,mBAAmB;AAAA,MACnB,SAAS;AAAA,IACf;AAAA,EACG;AAAA,EACD,UAAU;AACR,SAAK,YAAW;AAChB,SAAK,iBAAgB;AACrB,QAAI,KAAK,eAAe,KAAK,KAAK,cAAc,KAAK,eAAe,QAAQ;AAC1E,WAAK,iBAAiB,KAAK,cAAc,KAAK,WAAW;AAAA,IAC1D;AACD,SAAK,YAAY,KAAK,eAAe,KAAK,gBAAgB,CAAC,CAAC;AAC5D,QAAI,KAAK,YAAY,KAAK,aAAa,KAAK,cAAc,CAAC,GAAG;AAC5D,WAAK,YAAY,KAAK,aAAa,KAAK,cAAc,CAAC,EAAE,WAAW,WAAW;AAAA,IAChF;AAAA,EACF;AAAA,EACD,SAAS;AAAA,IACP,qBAAqB;AACnB,aAAO,KAAK,SAAS,KAAK,cAAc,EAAE;AAAA,IAC3C;AAAA,IACD,aAAa,WAAW;AACtB,aAAO,YAAY,KAAK;AAAA,IACzB;AAAA,IACD,mBAAmB;AACjB,WAAK,cAAc,IAAI,MAAM,KAAK,MAAM,KAAK,MAAM;AACnD,YAAM,YAAY,KAAK,SAAS,QAAQ,KAAK,QAAQ;AACrD,YAAM,aAAa,KAAK,SAAS,SAAS,KAAK,QAAQ;AACvD,UAAI,KAAK,gBAAgB;AACvB,iBAAS,IAAI,GAAG,IAAI,KAAK,YAAY,QAAQ,KAAK;AAChD,eAAK,YAAY,CAAC,IAAI;AAAA,YACpB,MAAM,IAAI,KAAK,SAAS;AAAA,YACxB,KAAK,KAAK,MAAM,IAAI,KAAK,MAAM,IAAI;AAAA,YACnC,UAAU;AAAA,cACR,SAAS,MAAM,MAAM;AACnB,qBAAK,IAAI,IAAI;AAAA,cACd;AAAA,cACD,WAAW,MAAM;AACf,uBAAO,KAAK,IAAI;AAAA,cACjB;AAAA,YACF;AAAA,YACD,YAAY,SAAS;AAAA,cACnB,YAAY;AAAA,cACZ,WAAW;AAAA,cACX,WAAW;AAAA,cACX,mBAAmB,KAAK;AAAA,cACxB,WAAW;AAAA,gBACT,QAAQ,IAAI,KAAK;AAAA,gBACjB,KAAK,KAAK,MAAM,IAAI,KAAK,MAAM;AAAA,cAChC;AAAA,cACD,UAAU;AAAA,YACxB,CAAa;AAAA,YACD,UAAU,SAAS,EAAE;AAAA,UACjC;AAAA,QACS;AAAA,MACT,OAAa;AACL,iBAAS,IAAI,GAAG,IAAI,KAAK,YAAY,QAAQ,KAAK;AAChD,eAAK,YAAY,CAAC,IAAI;AAAA,YACpB,MAAM,KAAK,MAAM,IAAI,KAAK,GAAG,IAAI;AAAA,YACjC,KAAK,IAAI,KAAK,MAAM;AAAA,YACpB,UAAU;AAAA,cACR,SAAS,MAAM,MAAM;AACnB,qBAAK,IAAI,IAAI;AAAA,cACd;AAAA,cACD,WAAW,MAAM;AACf,uBAAO,KAAK,IAAI;AAAA,cACjB;AAAA,YACF;AAAA,YACD,YAAY,SAAS;AAAA,cACnB,YAAY;AAAA,cACZ,WAAW;AAAA,cACX,WAAW;AAAA,cACX,mBAAmB,KAAK;AAAA,cACxB,WAAW;AAAA,gBACT,QAAQ,KAAK,MAAM,IAAI,KAAK,GAAG;AAAA,gBAC/B,KAAK,IAAI,KAAK;AAAA,cACf;AAAA,cACD,UAAU;AAAA,YACxB,CAAa;AAAA,YACD,UAAU,SAAS,EAAE;AAAA,UACjC;AAAA,QACS;AAAA,MACF;AAAA,IACF;AAAA,IACD,gBAAgB;AACd,eAAS,IAAI,GAAG,IAAI,KAAK,YAAY,QAAQ,KAAK;AAChD,aAAK,YAAY,CAAC,EAAE,WAAW,aAAa;AAC5C,aAAK,YAAY,CAAC,EAAE,WAAW,YAAY;AAC3C,iBAAS,OAAO,KAAK,YAAY,CAAC,EAAE,UAAU;AAC5C,eAAK,YAAY,CAAC,EAAE,SAAS,GAAG,IAAI;AAAA,QACrC;AAAA,MACF;AAAA,IACF;AAAA,IACD,cAAc,GAAG;AACf,YAAM,iBAAiB,KAAK,MAAM,KAAK;AACvC,YAAM,YAAY,IAAI,IAAI;AAC1B,YAAM,YAAY,IAAI;AACtB,UAAI,KAAK,kBAAkB,KAAK,aAAa;AAC3C,cAAM,IAAI,YAAY,KAAK;AAC3B,cAAM,IAAI,KAAK,MAAM,YAAY,KAAK,GAAG;AACzC,eAAO,IAAI,IAAI,KAAK,SAAS;AAAA,MAC9B,WAAU,CAAC,KAAK,kBAAkB,CAAC,KAAK,aAAa;AACpD,cAAM,IAAI,KAAK,MAAM,YAAY,KAAK,MAAM;AAC5C,cAAM,IAAI,YAAY,KAAK;AAC3B,eAAO,IAAI,KAAK,MAAM,IAAI;AAAA,MAClC,OAAa;AACL,eAAO;AAAA,MACR;AAAA,IACF;AAAA,IACD,cAAc;AACZ,WAAK,iBAAiB,KAAK;AAC3B,YAAM,YAAY,KAAK;AAAA,QACrB,KAAK,eAAe,SAAS,KAAK,MAAM,KAAK;AAAA,MACrD;AACM,WAAK,WAAW,IAAI,MAAM,YAAY,KAAK,MAAM,KAAK,MAAM,EAAE,KAAK,IAAI;AACvE,UAAI,WAAW;AACf,eAAS,IAAI,GAAG,IAAI,KAAK,eAAe,QAAQ,KAAK;AACnD,cAAM,WAAW,KAAK,cAAc,CAAC;AACrC,aAAK,SAAS,QAAQ,IAAI;AAAA,UACxB,MAAM,KAAK,eAAe,CAAC;AAAA,UAC3B,aAAa;AAAA,QACvB;AACQ,YAAI,WAAW,UAAU;AACvB,qBAAW;AAAA,QACZ;AAAA,MACF;AACD,WAAK,SAAS,WAAW;AAAA,IAC1B;AAAA,IACD,YAAY,YAAY;AACtB,UAAI,KAAK,eAAe;AACtB;AACF,UAAI,aAAa,KAAK,MAAM,KAAK,UAAU,KAAK,SAAS,QAAQ;AAC/D,aAAK,aAAa,KAAK,SAAS,SAAS,KAAK,MAAM,KAAK;AAAA,MACjE,OAAa;AACL,aAAK,aAAa;AAAA,MACnB;AACD,eAAS,IAAI,GAAG,IAAI,KAAK,YAAY,QAAQ,KAAK;AAChD,cAAM,OAAO,KAAK,YAAY,CAAC;AAC/B,cAAM,OAAO,KAAK,SAAS,IAAI,KAAK,UAAU;AAC9C,YAAI,QAAQ,MAAM;AAChB,eAAK,WAAW,aAAa;AAAA,QACvC,OAAe;AACL,eAAK,WAAW,YAAY,KAAK;AACjC,mBAAS,OAAO,KAAK,MAAM;AACzB,iBAAK,SAAS,GAAG,IAAI,KAAK,KAAK,GAAG;AAAA,UACnC;AACD,cAAI,CAAC,KAAK,WAAW,YAAY;AAC/B,iBAAK,WAAW,aAAa;AAAA,UAC9B;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACD,eAAe,aAAa,WAAW;AACrC,YAAM,OAAO,KAAK,WAAW;AAC7B,UAAI,gBAAgB,KAAK,aAAa,IAAI,IAAI,KAAK;AACnD,UAAI,aAAa;AACjB,UAAI,QAAQ,YAAY;AACtB,qBAAa,cAAc,eAAe,KAAK,MAAM,KAAK;AAAA,MAClE,WAAiB,QAAQ,UAAU;AAC3B,cAAM,UAAU,KAAK,iBAAiB,KAAK,SAAS,KAAK;AACzD,cAAM,iBAAiB,KAAK;AAAA,UAC1B;AAAA,UACA,KAAK,SAAS,WAAW,UAAU,KAAK,SAAS,WAAW,UAAU,KAAK,MAAM,KAAK;AAAA,QAChG;AACQ,cAAM,kBAAkB,cAAc,cAAc;AACpD,YAAI,mBAAmB,gBAAgB,KAAK,WAAW,MAAM,SAAS;AACpE,uBAAa,kBAAkB,KAAK,WAAW,MAAM;AAAA,QACtD;AACD,YAAI,mBAAmB,gBAAgB,KAAK,WAAW,QAAQ,SAAS;AACtE,uBAAa,kBAAkB,KAAK,WAAW,QAAQ;AAAA,QACxD;AACD,qBAAa,KAAK,IAAI,KAAK,IAAI,GAAG,UAAU,GAAG,cAAc;AAAA,MAC9D;AACD,aAAO;AAAA,IACR;AAAA,IACD,YAAY,eAAe,UAAU;AACnC,UAAI;AACJ,UAAI,YAAY,GAAG;AACjB,YAAI,WAAW,KAAK,YAAY,QAAQ;AACxC,eAAO;AAAA,UACL,GAAG,SAAS;AAAA,UACZ,GAAG,SAAS;AAAA,UACZ,OAAO,KAAK,SAAS;AAAA,UACrB,QAAQ,KAAK,SAAS;AAAA,QAChC;AAAA,MACA,OAAa;AACL,eAAO;AAAA,UACL,GAAG;AAAA,UACH,GAAG;AAAA,UACH,OAAO;AAAA,UACP,QAAQ;AAAA,QAClB;AAAA,MACO;AACD,WAAK,OAAO,EAAE,WAAW,eAAe,KAAM,CAAA;AAAA,IAC/C;AAAA,IACD,QAAQ,SAAS,SAAS;AACxB,UAAI,YAAY;AAChB,UAAI,YAAY,WAAW,SAAS,cAAc,aAAa;AAC/D,UAAI,KAAK,gBAAgB;AACvB,qBAAa;AACb,oBAAY;AACZ,kBAAU,KAAK;AACf,uBAAe,KAAK,gBAAgB,cAAc;AAClD,sBAAc,KAAK,gBAAgB,cAAc;AACjD,mBAAW,KAAK,gBAAgB,cAAc;AAAA,MACtD,OAAa;AACL,qBAAa;AACb,oBAAY;AACZ,kBAAU,KAAK;AACf,uBAAe,KAAK,gBAAgB,cAAc;AAClD,sBAAc,KAAK,gBAAgB,cAAc;AACjD,mBAAW,KAAK,gBAAgB,cAAc;AAAA,MAC/C;AACD,UAAI,cAAc,GAAG;AACnB,YAAI,IAAI,KAAK,iBAAiB,aAAa;AAC3C,YAAI,KAAK,SAAS,CAAC,GAAG;AACpB,sBAAY;AAAA,QACtB,WAAmB,KAAK,GAAG;AACjB,cAAI,cAAc;AAChB,gBAAI,IAAI,IAAI,KAAK;AACjB,gBAAI,KAAK,SAAS,CAAC,GAAG;AACpB,qBAAO,KAAK,SAAS,CAAC,GAAG;AACvB,4BAAY;AACZ;AAAA,cACD;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AACD,UAAI,aAAa,GAAG;AAClB,YAAI,IAAI,KAAK,iBAAiB,UAAU;AACxC,YAAI,KAAK,KAAK,IAAI,WAAW,KAAK,SAAS,KAAK,iBAAiB,SAAS,GAAG;AAC3E,sBAAY,KAAK,iBAAiB;AAAA,QAC5C,OAAe;AACL,cAAI,UAAU;AACZ,gBAAI,KAAK,iBAAiB,YAAY,UAAU,KAAK,iBAAiB;AACtE,gBAAI,YAAY,GAAG;AACjB,kBAAI,IAAI,UAAU;AAAA,YACnB;AACD,gBAAI,KAAK,SAAS,CAAC,GAAG;AACpB,0BAAY;AAAA,YACb;AAAA,UACF,WAAU,aAAa;AACtB,gBAAI,KAAK,KAAK,IAAI,SAAS;AACzB,mBAAK,IAAI,KAAK,iBAAiB,WAAW,KAAK,KAAK,YAAY,KAAK,SAAS;AAC5E,oBAAI,KAAK,SAAS,CAAC,GAAG;AACpB,8BAAY;AACZ;AAAA,gBACD;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AACD,UAAI,YAAY,KAAK,KAAK,YAAY;AACpC,YAAI,KAAK,kBAAkB,WAAW,GAAG;AACvC,sBAAY,UAAU,IAAI,IAAI,KAAK,SAAS;AAAA,QAC7C,WAAU,CAAC,KAAK,kBAAkB,WAAW,GAAG;AAC/C,sBAAY,UAAU,IAAI,IAAI,KAAK,SAAS;AAAA,QAC7C;AAAA,MACF;AACD,UAAI,aAAa,GAAG;AAClB,YAAI;AACJ,YAAI,YAAY,GAAG;AACjB,mBAAS;AAAA,QACV;AACD,YAAI,WAAW,GAAG;AAChB,mBAAS;AAAA,QACV;AACD,aAAK,oBAAoB,KAAK;AAC9B,aAAK,iBAAiB;AACtB,YAAI,KAAK,qBAAqB,GAAG;AAC/B,eAAK,YAAY,KAAK,aAAa,KAAK,iBAAiB,CAAC,GAAG,SAAS;QACvE;AACD,aAAK,YAAY,KAAK,aAAa,KAAK,iBAAiB,CAAC,EAAE,WAAW,WAAW;AAClF,aAAK,YAAY,KAAK,eAAe,WAAW,MAAM,CAAC;AACvD,aAAK,YAAY,KAAK,aAAa,KAAK,cAAc,CAAC,GAAG,SAAS;AACnE,aAAK,YAAY,KAAK,aAAa,KAAK,cAAc,CAAC,EAAE,WAAW,WAAW;AAAA,MACvF,OAAa;AACL,YAAI;AACJ,YAAI,UAAU,GAAG;AACf,0BAAgB,cAAc;AAAA,QAC/B;AACD,YAAI,UAAU,GAAG;AACf,0BAAgB,cAAc;AAAA,QAC/B;AACD,YAAI,UAAU,GAAG;AACf,0BAAgB,cAAc;AAAA,QAC/B;AACD,YAAI,UAAU,GAAG;AACf,0BAAgB,cAAc;AAAA,QAC/B;AACD,aAAK,YAAY,eAAe,KAAK,aAAa,KAAK,cAAc,CAAC;AAAA,MACvE;AAAA,IACF;AAAA,IACD,WAAW;AACT,WAAK,UAAU;AACf,UAAI,KAAK,kBAAkB,KAAK,eAAe,SAAS,GAAG;AACzD,aAAK,YAAY,KAAK,aAAa,KAAK,cAAc,CAAC,GAAG,SAAS;MAC3E,OAAa;AACL,gBAAQ,KAAK,GAAG,UAAU,KAAK,gCAAgC;AAAA,MAChE;AAAA,IACF;AAAA,IACD,UAAU;AACR,WAAK,UAAU;AACf,UAAI,KAAK,kBAAkB,KAAK,eAAe,SAAS,GAAG;AACzD,aAAK,YAAY,KAAK,aAAa,KAAK,cAAc,CAAC,GAAG,SAAS;MACpE;AAAA,IACF;AAAA,IACD,WAAW,IAAI;AACb,UAAI,CAAC,KAAK,kBAAkB,KAAK,eAAe,UAAU,GAAG;AAC3D,cAAM,mBAAmB;AAAA,UACvB,IAAI,cAAc;AAAA,UAClB,IAAI,cAAc;AAAA,UAClB,IAAI,cAAc;AAAA,UAClB,IAAI,cAAc;AAAA,QAC5B;AACQ,YAAI,OAAO,iBAAiB,GAAG,OAAO,MAAM,aAAa;AACvD,eAAK,YAAY,iBAAiB,GAAG,OAAO,GAAG,EAAE;AACjD,iBAAO;AAAA,QACR;AACD,eAAO;AAAA,MACR;AACD,cAAQ,GAAG,SAAO;AAAA,QAChB,KAAK;AACH,eAAK,QAAQ,IAAI,CAAC;AAClB,iBAAO;AAAA,QACT,KAAK;AACH,eAAK,QAAQ,GAAG,CAAC;AACjB,iBAAO;AAAA,QACT,KAAK;AACH,eAAK,QAAQ,GAAG,EAAE;AAClB,iBAAO;AAAA,QACT,KAAK;AACH,eAAK,QAAQ,GAAG,CAAC;AACjB,iBAAO;AAAA,QACT,KAAK;AACH,eAAK,YAAY,KAAK,aAAa,KAAK,cAAc,CAAC,GAAG,SAAS;AACnE,iBAAO;AAAA,QACT;AACE,iBAAO;AAAA,MACV;AAAA,IACF;AAAA,IACD,mBAAmB;AACjB,aAAO,KAAK,MAAM;AAAA,IACnB;AAAA,IACD,WAAW,IAAI;AACb,UAAI,MAAM,KAAK,KAAK,KAAK,eAAe,QAAQ;AAC9C,YAAI,WAAW,KAAK;AACpB,aAAK,oBAAoB;AACzB,aAAK,iBAAiB,KAAK,cAAc,EAAE;AAC3C,YAAI,KAAK,SAAS;AAChB,eAAK,YAAY,KAAK,aAAa,QAAQ,CAAC,GAAG,SAAS;QACzD;AACD,YAAI,KAAK,YAAY,KAAK,aAAa,QAAQ,CAAC,GAAG;AACjD,eAAK,YAAY,KAAK,aAAa,QAAQ,CAAC,EAAE,WAAW,WAAW;AAAA,QACrE;AACD,aAAK,YAAY,KAAK,eAAe,KAAK,gBAAgB,CAAC,CAAC;AAC5D,YAAI,KAAK,SAAS;AAChB,eAAK,YAAY,KAAK,aAAa,KAAK,cAAc,CAAC,GAAG,SAAS;QACpE;AACD,YAAI,KAAK,YAAY,KAAK,aAAa,KAAK,cAAc,CAAC,GAAG;AAC5D,eAAK,YAAY,KAAK,aAAa,KAAK,cAAc,CAAC,EAAE,WAAW,WAAW;AAAA,QAChF;AAAA,MACF;AAAA,IACF;AAAA,IACD,cAAc;AACZ,UAAI,KAAK,SAAS;AAChB,aAAK,YAAY,KAAK,aAAa,KAAK,cAAc,CAAC,GAAG,SAAS;MACpE;AACD,UAAI,KAAK,YAAY,KAAK,aAAa,KAAK,cAAc,CAAC,GAAG;AAC5D,aAAK,YAAY,KAAK,aAAa,KAAK,cAAc,CAAC,EAAE,WAAW,WAAW;AAAA,MAChF;AACD,WAAK,YAAW;AAChB,WAAK,aAAa;AAClB,WAAK,cAAa;AAClB,UAAI,KAAK,iBAAiB,KAAK,eAAe,QAAQ;AACpD,aAAK,iBAAiB;AACtB,aAAK,oBAAoB;AAAA,MAC1B;AACD,WAAK,YAAY,KAAK,eAAe,KAAK,gBAAgB,CAAC,CAAC;AAC5D,UAAI,KAAK,SAAS;AAChB,aAAK,YAAY,KAAK,aAAa,KAAK,cAAc,CAAC,GAAG,SAAS;MACpE;AACD,UAAI,KAAK,YAAY,KAAK,aAAa,KAAK,cAAc,CAAC,GAAG;AAC5D,aAAK,YAAY,KAAK,aAAa,KAAK,cAAc,CAAC,EAAE,WAAW,WAAW;AAAA,MAChF;AAAA,IACF;AAAA,EACF;AACH;AACA,SAAS,cAAc,MAAM,QAAQ,QAAQ,QAAQ,OAAO,UAAU;AACpE,QAAM,6BAA6B,iBAAiB,iBAAiB;AACrE,SAAO,UAAS,GAAI,YAAY,4BAA4B;AAAA,IAC1D,KAAK;AAAA,IACL,MAAM,OAAO;AAAA,IACb,UAAU;AAAA,MACR,SAAS,SAAS;AAAA,MAClB,QAAQ,SAAS;AAAA,MACjB,WAAW,SAAS;AAAA,IACrB;AAAA,IACD,OAAO,eAAe;AAAA,MACpB,MAAM,OAAO;AAAA,MACb,KAAK,OAAO;AAAA,IAClB,CAAK;AAAA,EACL,GAAK;AAAA,IACD,SAAS,QAAQ,MAAM;AAAA,OACpB,UAAU,IAAI,GAAG,mBAAmB,UAAU,MAAM,WAAW,OAAO,aAAa,CAAC,MAAM,UAAU;AACnG,eAAO,UAAS,GAAI,mBAAmB,OAAO;AAAA,UAC5C,KAAK;AAAA,UACL,OAAO,eAAe;AAAA,YACpB,MAAM,KAAK;AAAA,YACX,KAAK,KAAK;AAAA,YACV,OAAO,OAAO,SAAS;AAAA,YACvB,QAAQ,OAAO,SAAS;AAAA,YACxB,YAAY,KAAK,WAAW,aAAa,YAAY;AAAA,UACjE,CAAW;AAAA,QACX,GAAW;AAAA,UACD,WAAW,KAAK,QAAQ,cAAc;AAAA,YACpC,UAAU,KAAK;AAAA,YACf,YAAY,KAAK;AAAA,YACjB,UAAU,KAAK;AAAA,UAC3B,CAAW;AAAA,QACF,GAAE,CAAC;AAAA,MACL,CAAA,GAAG,GAAG;AAAA,IACb,CAAK;AAAA,IACD,GAAG;AAAA,EACJ,GAAE,GAAG,CAAC,QAAQ,YAAY,OAAO,CAAC;AACrC;AACK,MAAC,UAA0B,4BAAY,aAAa,CAAC,CAAC,UAAU,aAAa,CAAC,CAAC;AAEpF;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYA,MAAM,cAAc;AAAA,EAClB,OAAO;AAAA,IACL,OAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS,MAAM;AACb,eAAO;MACR;AAAA,IACF;AAAA,IACD,OAAO;AAAA,IACP,OAAO;AAAA,IACP,YAAY;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,EACF;AAAA,EACD,QAAQ;AACN,WAAO;AAAA,MACL,gBAAgB,OAAO;AAAA,MACvB,aAAa;AAAA,MACb,aAAa;AAAA,IACnB;AAAA,EACG;AAAA,EACD,cAAc;AACZ,QAAI,KAAK,gBAAgB;AACvB;AAAA,IACD;AACD,QAAI,iBAAiB;AACrB,QAAI,KAAK,YAAY;AACnB,YAAM,oBAAoB,QAAQ,eAAe,gBAAgB,eAAe;AAChF,uBAAiB,IAAI,QAAQ;AAAA,QAC3B;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACR;AAAA,IACK;AACD,SAAK,cAAc,IAAI,QAAQ,iBAAiB,cAAc;AAC9D,SAAK,cAAc,QAAQ,WAAW;AAAA,MACpC,IAAI,QAAQ,SAAS,KAAK,WAAW;AAAA,IAC3C;AACI,QAAI,OAAO,KAAK,eAAe,eAAe,KAAK,aAAa;AAC9D,UAAI,KAAK,OAAO;AACd,aAAK,YAAY,WAAW,KAAK,KAAK;AAAA,MACvC;AACD,WAAK,QAAQ,KAAK,YAAY,WAAY,CAAA;AAAA,IAC3C;AAAA,EACF;AAAA,EACD,gBAAgB;AACd,QAAI,KAAK,gBAAgB;AACvB;AAAA,IACD;AACD,QAAI,KAAK,gBAAgB,IAAI;AAC3B,cAAQ,WAAW,OAAO,KAAK,WAAW;AAC1C,WAAK,cAAc;AACnB,WAAK,cAAc;AAAA,IACpB;AAAA,EACF;AACH;AACA,SAAS,cAAc,MAAM,QAAQ,QAAQ,QAAQ,OAAO,UAAU;AACpE,SAAO,CAAC,OAAO,kBAAkB,UAAS,GAAI,mBAAmB,OAAO;AAAA,IACtE,KAAK;AAAA,IACL,OAAO,eAAe;AAAA,MACpB,MAAM,OAAO,MAAM;AAAA,MACnB,KAAK,OAAO,MAAM;AAAA,MAClB,OAAO,OAAO,MAAM;AAAA,MACpB,QAAQ,OAAO,MAAM;AAAA,IAC3B,CAAK;AAAA,IACD,yBAAyB,OAAO;AAAA,EACpC,GAAK;AAAA,IACD,WAAW,KAAK,QAAQ,SAAS;AAAA,EACrC,GAAK,IAAI,CAAC,uBAAuB,CAAC,MAAM,UAAW,GAAE,mBAAmB,OAAO;AAAA,IAC3E,KAAK;AAAA,IACL,OAAO,eAAe,EAAE,GAAG,OAAO,MAAK,CAAE;AAAA,EAC7C,GAAK;AAAA,IACD,WAAW,KAAK,QAAQ,SAAS;AAAA,EACrC,GAAK,CAAC;AACN;AACK,MAAC,qBAAqC,4BAAY,aAAa,CAAC,CAAC,UAAU,aAAa,CAAC,CAAC;AAE/F;AACA;AACA;AAEA;AACA;AACA;AACA,MAAM,eAAe;AAAA,EACnB,YAAY,MAAM;AAChB,QAAI,OAAO,mBAAmB;AAC5B,WAAK,WAAW,qBAAqB,IAAI;AAAA,IAC/C,OAAW;AACL,WAAK,WAAW,KAAK,uBAAuB,IAAI;AAAA,IACjD;AAAA,EACF;AAAA,EACD,IAAI,WAAW;AACb,WAAO,KAAK,SAAS;AAAA,EACtB;AAAA,EACD,IAAI,QAAQ;AACV,WAAO,KAAK,SAAS;AAAA,EACtB;AAAA,EACD,IAAI,OAAO;AACT,WAAO,KAAK,SAAS;AAAA,EACtB;AAAA,EACD,WAAW,WAAW;AACpB,WAAO,KAAK,SAAS,WAAW,SAAS;AAAA,EAC1C;AAAA,EACD,OAAO,UAAU;AACf,WAAO,KAAK,SAAS,OAAO,QAAQ;AAAA,EACrC;AAAA,EACD,QAAQ,IAAI,MAAM;AAChB,SAAK,SAAS,QAAQ,IAAI,IAAI;AAC9B,SAAK,gBAAgB,KAAK,SAAS,QAAQ;AAAA,EAC5C;AAAA,EACD,KAAK,IAAI,MAAM;AACb,SAAK,SAAS,KAAK,IAAI,IAAI;AAC3B,SAAK,gBAAgB,KAAK,SAAS,QAAQ;AAAA,EAC5C;AAAA,EACD,GAAG,OAAO,kBAAkB;AAC1B,SAAK,SAAS,GAAG,OAAO,gBAAgB;AACxC,SAAK,gBAAgB,KAAK,SAAS,QAAQ;AAAA,EAC5C;AAAA,EACD,UAAU;AACR,SAAK,SAAS;EACf;AAAA,EACD,uBAAuB,MAAM;AAC3B,WAAO,SAAS,QAAQ,SAAS,aAAa,UAAU,QAAQ,SAAS,WAAW,SAAS,SAAS;AACtG,QAAI,CAAC,KAAK,SAAS,GAAG;AACpB,cAAQ;AACV,QAAI,CAAC,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,SAAS,GAAG,GAAG;AAC/C,cAAQ,KAAK;AAAA,GAChB,oBAAoB,KAAK,QAAQ,QAAQ,GAAG,KAAK;AAAA,IAC/C;AACD,SAAK,UAAU,OAAO,SAAS,SAAS;AACxC,UAAMZ,WAAU,oBAAoB,IAAI;AACxC,UAAM,WAAW,KAAK;AACtB,QAAI,UAAU;AACZ,YAAM,YAAY;AAAA,QAChB,MAAM,SAAS,UAAU,CAAC;AAAA;AAAA,QAE1B,OAAO;AAAA,MACf;AACM,YAAM,WAAW,SAAS,QAAQ,GAAG;AACrC,UAAI,YAAY,GAAG;AACjB,kBAAU,OAAO,UAAU,KAAK,UAAU,GAAG,WAAW,CAAC,GAAG,UAAU,QAAQ,KAAK,kBAAkB,SAAS,UAAU,QAAQ,CAAC;AAAA,MAClI;AACD,MAAAA,SAAQ,QAAQ,SAAS;AAAA,IAC/B,OAAW;AACL,WAAK,gBAAgBA,SAAQ,QAAQ;AAAA,IACtC;AACD,WAAOA;AAAA,EACR;AAAA,EACD,eAAe;AACb,QAAI;AACJ,QAAI,OAAO,OAAO,sBAAsB;AACtC,iBAAW,OAAO,OAAO,qBAAqB;AAAA;AAAA,MAEpD,CAAO;AACD,UAAI,YAAY,MAAM;AACpB,gBAAQ,IAAI,wCAAwC,QAAQ;AAAA,MACpE,OAAa;AACL,mBAAW,OAAO,SAAS;AAAA,MAC5B;AAAA,IACF;AACD,WAAO;AAAA,EACR;AAAA,EACD,gBAAgB,WAAW;AACzB,QAAI,CAAC,OAAO,mBAAmB;AAC7B,YAAM,MAAM,IAAI,OAAO,OAAO,IAAI;AAAA,QAChC,YAAY,KAAK,UAAU,YAAY,KAAK;AAAA,QAC5C;AAAA,MACR;AACM,aAAO,SAAS,aAAa,GAAG;AAAA,IACjC;AAAA,EACF;AAAA,EACD,kBAAkB,OAAO;AACvB,UAAM,kBAAkB,MAAM,QAAQ,GAAG;AACzC,QAAI,mBAAmB,GAAG;AACxB,cAAQ,MAAM,OAAO,kBAAkB,CAAC;AAAA,IACzC;AACD,QAAI,aAAa,MAAM,MAAM,GAAG;AAChC,QAAI,SAAS,CAAA;AACb,eAAW,SAAS,YAAY;AAC9B,YAAM,CAAC,KAAK,MAAM,IAAI,MAAM,MAAM,GAAG;AACrC,UAAI,OAAO,eAAe,GAAG,GAAG;AAC9B,YAAI,CAAC,MAAM,QAAQ,OAAO,GAAG,CAAC,GAAG;AAC/B,iBAAO,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC;AAAA,QAC3B;AACD,eAAO,GAAG,EAAE,KAAK,MAAM;AAAA,MAC/B,OAAa;AACL,eAAO,GAAG,IAAI;AAAA,MACf;AAAA,IACF;AAED,WAAO;AAAA,EACR;AAAA,EACD;AACF;AACA,SAAS,qBAAqB,MAAM;AAClC,SAAO,IAAI,eAAe,IAAI;AAChC;AAoBA;AACA;AACA;AACA,IAAI,mBAAmB;AACvB,IAAI,kBAAkB,CAAA;AACtB,SAAS,YAAY,SAAS,MAAM;AAClC,MAAI,gBAAgB,eAAe,IAAI,GAAG;AACxC,QAAI,OAAO,gBAAgB,IAAI;AAC/B,QAAI,MAAM;AACR,aAAO,KAAK,GAAG,IAAI;AAAA,IACpB;AAAA,EACL,OAAS;AACL,QAAI,OAAO;AACX,QAAI,OAAO,qBAAqB,OAAO,OAAO,kBAAkB,IAAI,MAAM,YAAY;AACpF,aAAO,OAAO,kBAAkB,IAAI;AAAA,IAC1C,WAAe,OAAO,wBAAwB,OAAO,OAAO,qBAAqB,IAAI,MAAM,YAAY;AACjG,aAAO,OAAO,qBAAqB,IAAI;AAAA,IACxC;AACD,oBAAgB,IAAI,IAAI;AACxB,QAAI,MAAM;AACR,aAAO,KAAK,GAAG,IAAI;AAAA,IACpB;AAAA,EACF;AACD,SAAO;AACT;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA,SAAS,wBAAwB;AAC/B,MAAI,CAAC,kBAAkB;AACrB,uBAAmB,YAAY,uBAAuB;AAAA,EACvD;AACD,SAAO;AACT;AACA;AAAA;AAAA;AAAA;AAAA;AAKA,SAAS,SAAS;AAChB,SAAO,YAAY,QAAQ;AAC7B;AACA;AAAA;AAAA;AAAA;AAAA;AAKA,SAAS,aAAa;AACpB,SAAO,YAAY,YAAY;AACjC;AACA;AAAA;AAAA;AAAA;AAAA;AAKA,SAAS,aAAa;AACpB,SAAO,YAAY,YAAY;AACjC;AACA;AAAA;AAAA;AAAA;AAAA;AAKA,SAAS,gBAAgB;AACvB,SAAO,YAAY,eAAe;AACpC;AACA;AAAA;AAAA;AAAA;AAAA;AAKA,SAAS,eAAe;AACtB,SAAO,YAAY,cAAc;AACnC;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,SAAS,WAAW,KAAK,eAAe,eAAe,kBAAkB,aAAa;AACpF,MAAI,UAAU,CAAA;AACd,MAAI,OAAO,kBAAkB,UAAU,kBAAkB,QAAQ,kBAAkB;AACjF,YAAQ,eAAe;AACzB,MAAI,OAAO,kBAAkB,UAAU,kBAAkB,QAAQ,kBAAkB,IAAI;AACrF,YAAQ,eAAe;AAAA,EACxB;AACD,UAAQ,kBAAkB;AAC1B,UAAQ,aAAa,cAAc,IAAI;AACvC,cAAY,cAAc,KAAK,KAAK,UAAU,OAAO,CAAC;AACxD;AACA;AAAA;AAAA;AAAA;AAIA,SAAS,YAAY;AACnB,cAAY,WAAW;AACzB;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,kBAAkB,KAAK;AAC9B,SAAO,YAAY,qBAAqB,GAAG;AAC7C;AACA;AAAA;AAAA;AAAA;AAAA;AAKA,SAAS,mBAAmB;AAC1B,SAAO,YAAY,kBAAkB;AACvC;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUA,SAAS,eAAe,cAAc,UAAU,QAAQ,KAAK,OAAO,OAAO;AACzE,MAAI,MAAM,CAAA;AACV,MAAI,OAAO,gBAAgB,UAAU,iBAAiB,QAAQ,iBAAiB;AAC7E,QAAI,cAAc;AACpB,MAAI,OAAO,YAAY,UAAU,aAAa,QAAQ,aAAa;AACjE,QAAI,WAAW;AACjB,MAAI,OAAO,UAAU,UAAU,WAAW,QAAQ,WAAW;AAC3D,QAAI,SAAS;AACf,MAAI,OAAO,OAAO,UAAU,QAAQ,QAAQ,QAAQ;AAClD,QAAI,MAAM;AACZ,MAAI,OAAO,SAAS,UAAU,UAAU,QAAQ,MAAM,SAAS;AAC7D,QAAI,QAAQ;AACd,MAAI,OAAO,SAAS,UAAU,UAAU,QAAQ,MAAM,SAAS;AAC7D,QAAI,QAAQ;AACd,cAAY,kBAAkB,KAAK,UAAU,GAAG,CAAC;AACnD;AACA,SAAS,oBAAoB,cAAc,WAAW,QAAQ,KAAK,OAAO,OAAO;AAC/E,MAAI,MAAM,CAAA;AACV,MAAI,OAAO,gBAAgB,UAAU,iBAAiB,QAAQ,iBAAiB;AAC7E,QAAI,cAAc;AACpB,MAAI,OAAO,aAAa,UAAU,cAAc,QAAQ,cAAc;AACpE,QAAI,YAAY;AAClB,MAAI,OAAO,UAAU,UAAU,WAAW,QAAQ,WAAW;AAC3D,QAAI,SAAS;AACf,MAAI,OAAO,OAAO,UAAU,QAAQ,QAAQ,QAAQ;AAClD,QAAI,MAAM;AACZ,MAAI,OAAO,SAAS,UAAU,UAAU,QAAQ,MAAM,SAAS;AAC7D,QAAI,QAAQ;AACd,MAAI,OAAO,SAAS,UAAU,UAAU,QAAQ,MAAM,SAAS;AAC7D,QAAI,QAAQ;AACd,cAAY,uBAAuB,KAAK,UAAU,GAAG,CAAC;AACxD;AACA;AAAA;AAAA;AAAA;AAAA;AAKA,SAAS,gBAAgB;AACvB,SAAO,YAAY,eAAe;AACpC;AACA;AAAA;AAAA;AAAA;AAIA,SAAS,aAAa;AACpB,SAAO,YAAY,YAAY;AACjC;AACA;AAAA;AAAA;AAAA;AAIA,SAAS,qBAAqB;AAC5B;AACF;AACA,SAAS,mBAAmB;AAC1B,SAAO,QAAQ;AACf,cAAY,kBAAkB;AAChC;AACA;AAAA;AAAA;AAAA;AAAA;AAKA,SAAS,uBAAuB;AAC9B,MAAI,WAAW;AACf,MAAI,YAAY,SAAS,QAAQ,WAAW,KAAK,GAAG;AAClD,WAAO;AAAA,EACR;AACD,SAAO;AACT;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,iBAAiB;AACxB,MAAI,OAAO,YAAY,gBAAgB;AACvC,MAAI,MAAM;AACR,WAAO,KAAK,MAAM,IAAI;AAAA,EAC1B,OAAS;AACL,WAAO;AAAA,EACR;AACH;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,aAAa,KAAK,UAAU;AACnC,MAAI,OAAO,qBAAqB,OAAO,OAAO,kBAAkB,iBAAiB,YAAY;AAC3F,QAAI,gBAAgB,OAAO,kBAAkB,aAAa,GAAG;AAC7D,kBAAc,KAAK,CAAC,WAAW;AAC7B,UAAI,UAAU;AACZ,iBAAS,MAAM;AAAA,MAChB;AAAA,IACP,CAAK,EAAE,MAAM,CAAC,WAAW;AACnB,UAAI,UAAU;AACZ,iBAAS,MAAM;AAAA,MAChB;AAAA,IACP,CAAK;AAAA,EACF;AACH;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,gBAAgB,KAAK,UAAU;AACtC,MAAI,OAAO,qBAAqB,OAAO,OAAO,kBAAkB,oBAAoB,YAAY;AAC9F,QAAI,gBAAgB,OAAO,kBAAkB,gBAAgB,GAAG;AAChE,kBAAc,KAAK,CAAC,WAAW;AAC7B,UAAI,UAAU;AACZ,iBAAS,MAAM;AAAA,MAChB;AAAA,IACP,CAAK,EAAE,MAAM,CAAC,WAAW;AACnB,UAAI,UAAU;AACZ,iBAAS,MAAM;AAAA,MAChB;AAAA,IACP,CAAK;AAAA,EACF;AACH;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,gBAAgB,UAAU,UAAU;AAC3C,MAAI,OAAO,qBAAqB,OAAO,OAAO,kBAAkB,oBAAoB,YAAY;AAC9F,QAAI,gBAAgB,OAAO,kBAAkB,gBAAgB,QAAQ;AACrE,kBAAc,KAAK,CAAC,WAAW;AAC7B,UAAI,UAAU;AACZ,iBAAS,MAAM;AAAA,MAChB;AAAA,IACP,CAAK,EAAE,MAAM,CAAC,WAAW;AACnB,UAAI,UAAU;AACZ,iBAAS,MAAM;AAAA,MAChB;AAAA,IACP,CAAK;AAAA,EACF;AACH;AACA;AAAA;AAAA;AAAA;AAIA,SAAS,aAAa,UAAU;AAC9B,MAAI,OAAO,qBAAqB,OAAO,OAAO,kBAAkB,iBAAiB,YAAY;AAC3F,WAAO,OAAO,kBAAkB,aAAa,QAAQ;AAAA,EACtD;AACD,SAAO;AACT;AACA;AAAA;AAAA;AAAA;AAIA,SAAS,kBAAkB;AACzB,MAAI,OAAO,qBAAqB,OAAO,OAAO,kBAAkB,oBAAoB,YAAY;AAC9F,WAAO,OAAO,kBAAkB;EACjC;AACD,SAAO;AACT;AACA;AAAA;AAAA;AAAA;AAAA;AAKA,SAAS,iBAAiB,MAAM;AAC9B,cAAY,oBAAoB,IAAI;AACtC;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,SAAS,oBAAoB,OAAO,WAAW,YAAY,QAAQ;AACjE,cAAY,uBAAuB,OAAO,WAAW,YAAY,MAAM;AACzE;AACA;AAAA;AAAA;AAGA,SAAS,iBAAiB;AACxB,cAAY,gBAAgB;AAC9B;AACA,SAAS,oBAAoB;AAC3B,cAAY,gBAAgB;AAC9B;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA,SAAS,WAAW,MAAM,SAAS;AACjC,MAAI,SAAS,KAAK,SAAS,GAAG;AAC5B,YAAQ,MAAM,oBAAoB,OAAO;AACzC,WAAO;AAAA,EACR;AACD,MAAI,SAAS,MAAM,YAAY,QAAQ,QAAQ,WAAW,IAAI;AAC5D,YAAQ,MAAM,sBAAsB,QAAQ,UAAU;AACtD,WAAO;AAAA,EACR;AACD,SAAO,YAAY,cAAc,MAAM,OAAO;AAChD;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,SAAS,aAAa,eAAe,SAAS,aAAa;AACzD,cAAY,gBAAgB,eAAe,SAAS,CAAC,CAAC,WAAW;AACnE;AACA;AAAA;AAAA;AAAA;AAIA,SAAS,gBAAgB,eAAe;AACtC,cAAY,mBAAmB,aAAa;AAC9C;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,eAAe,cAAc;AACpC,SAAO,YAAY,kBAAkB,YAAY;AACnD;AACA;AACK,MAAC,SAAS;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AA0GA;AACA,IAAI,OAAO,OAAO,yBAAyB,aAAa;AACtD,SAAO,uBAAuB;AAChC;AAC2B,OAAO;AA0IlC;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWA,MAAM,uBAAuB;AAAA,EAC3B,OAAO,aAAa,WAAW,iBAAiB;AAC9C,UAAM,oBAAoB;AAAA,MACxB,GAAG,CAAE;AAAA,IACX;AACI,QAAI,UAAU,WAAW,GAAG,KAAK,OAAO;AACtC,kBAAY,MAAM;AAAA,IACnB;AACD,sBAAkB,CAAC,EAAE,SAAS,IAAI,KAAK,UAAU,eAAe;AAChE,WAAO,QAAQ,IAAI,mBAAmB,iBAAiB;AAAA,EACxD;AAAA,EACD,OAAO,eAAe,WAAW;AAC/B,UAAM,oBAAoB;AAAA,MACxB,GAAG,CAAE;AAAA,IACX;AACI,QAAI,UAAU,WAAW,GAAG,KAAK,OAAO;AACtC,kBAAY,MAAM;AAAA,IACnB;AACD,sBAAkB,CAAC,EAAE,SAAS,IAAI;AAClC,WAAO,QAAQ,IAAI,qBAAqB,iBAAiB;AAAA,EAC1D;AACH;AAkBA;AACA;AACA;AACA;AACA,IAAI,mBAAmB;AAAA,EACrB,YAAY;AACd;AACA,IAAI,aAAa;AAAA;AAAA,EAEf,iBAAiB,MAAM;AACrB,qBAAiB,WAAW;EAC7B;AACH;AAiBA;AACA,OAAO,gBAAgB;AAEvB;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,SAAS,qBAAqB,YAAY,gBAAgB;AACxD,SAAO,IAAI,QAAQ,qBAAqB,SAAS,YAAY,cAAc;AAC7E;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,SAAS,mBAAmB,MAAM,MAAM,UAAU,YAAY;AAC5D,SAAO,QAAQ,qBAAqB,WAAW,KAAK,mBAAmB,KAAK,gBAAe,GAAI,UAAU,UAAU;AACrH;AACA;AACA;AACA,SAAS,oBAAoB,gBAAgB;AAC3C,QAAM,cAAc,CAAA;AACpB,MAAI,gBAAgB;AAClB,eAAW,OAAO,gBAAgB;AAChC,kBAAY,KAAK,IAAI,gBAAiB,CAAA;AAAA,IACvC;AAAA,EACF;AACD,SAAO;AACT;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYA,SAAS,sBAAsB,+BAA+B,8BAA8B;AAC1F,MAAI,CAAC,iCAAiC,CAAC,8BAA8B;AACnE;AAAA,EACD;AACD,QAAM,kBAAkB,oBAAoB,6BAA6B;AACzE,QAAM,iBAAiB,oBAAoB,4BAA4B;AACvE,SAAO,IAAI,QAAQ,qBAAqB;AAAA,IACtC,gBAAgB,SAAS,IAAI,kBAAkB;AAAA,IAC/C,eAAe,SAAS,IAAI,iBAAiB;AAAA,EACjD;AACA;AAoBA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOK,MAAC,eAAe,CAAC,MAAM,UAAU;AACpC,QAAM,aAAa;AAAA,IACjB,KAAK,OAAO,OAAO;AAAA,IACnB,MAAM,MAAM,aAAa,MAAM,aAAa,MAAM,UAAU;AAAA,IAC5D,MAAM,MAAM,WAAW,MAAM,WAAW,MAAM,UAAU;AAAA,IACxD,QAAQ,MAAM,cAAc,WAAW,WAAW;AAAA,IAClD,MAAM,MAAM,eAAe,SAAS,SAAS;AAAA,EACjD;AACE,SAAO,OAAO,cAAc,aAAa,UAAU;AACrD;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,MAAM,0BAA0B,CAAC,MAAM,UAAU;AAC/C,QAAM,OAAO,OAAO,cAAc;AAAA,IAChC,QAAQ;AAAA,IACR,MAAM,cAAc,MAAM,UAAU;AAAA,IACpC,MAAM,YAAY,MAAM,UAAU;AAAA,IAClC,MAAM,cAAc,WAAW,WAAW;AAAA,IAC1C,MAAM,eAAe,SAAS,SAAS;AAAA,EAC3C;AACE,QAAM,SAAS;AAAA,IACb,YAAY,KAAK,CAAC;AAAA,IAClB,WAAW,CAAE;AAAA,EACjB;AACE,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK,GAAG;AACvC,WAAO,UAAU,KAAK;AAAA,MACpB,OAAO,KAAK,CAAC;AAAA,MACb,KAAK,KAAK,IAAI,CAAC;AAAA,MACf,OAAO,KAAK,IAAI,CAAC;AAAA,IACvB,CAAK;AAAA,EACF;AACD,SAAO;AACT;AACA,MAAM,QAAQ,CAAC,QAAQ;AACrB,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,QAAI,IAAI,IAAI,WAAW,CAAC;AACxB,QAAI,KAAK,IAAI;AACX,UAAI,KAAK,QAAQ,KAAK,MAAM;AAC1B,eAAO;AAAA,MACf,OAAa;AACL,eAAO;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACD,SAAO;AACT;AACA,MAAM,YAAY;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AACF;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA,MAAM,QAAQ;AACd,IAAI,eAAe;AACnB,IAAI,aAAa;AACjB,MAAM,qBAAqB;AAAA,EACzB,SAAS,KAAK,aAAa,IAAI,UAAU,OAAO;AAC9C,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,UAAI,OAAO,QAAQ,UAAU;AAC3B,aAAK,cAAc,KAAK,YAAY,OAAO,EAAE,KAAK,SAAS,MAAM;AAAA,MACzE,WAAiB,MAAM,QAAQ,GAAG,KAAK,IAAI,SAAS,GAAG;AAC/C,cAAM,iBAAiB,IAAI,MAAM,IAAI,MAAM;AAC3C,cAAM,QAAQ,MAAM;AAClB,cAAI,UAAU;AACd,cAAI,aAAa;AACjB,mBAAS,KAAK,gBAAgB;AAC5B,gBAAI,CAAC,GAAG,SAAS;AACf,2BAAa;AAAA,YACd;AAAA,UACF;AACD,cAAI,eAAe,cAAc,IAAI,QAAQ;AAC3C,sBAAU;AAAA,UACX;AACD,cAAI,SAAS;AACX,gBAAI,YAAY;AACd,sBAAQ,cAAc;AAAA,YACpC,OAAmB;AACL,qBAAO,cAAc;AAAA,YACtB;AAAA,UACF;AAAA,QACX;AACQ,iBAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,EAAE,GAAG;AACnC,cAAI,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,EAAE,OAAO,MAAM;AACxC,2BAAe,CAAC,IAAI;AAAA,cAClB,SAAS;AAAA,cACT,MAAM;AAAA,gBACJ,WAAW;AAAA,gBACX,WAAW;AAAA,gBACX,KAAK;AAAA,cACN;AAAA,YACf;AACY,4BAAgB;AAAA,UAC5B,OAAiB;AACL,iBAAK,cAAc,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE;AAAA,cAClE,CAAC,SAAS;AACR,+BAAe,CAAC,IAAI;AAAA,kBAClB,SAAS;AAAA,kBACT;AAAA,gBAClB;AACgB,8BAAc;AACd;cACD;AAAA,cACD,CAAC,cAAc;AACb,+BAAe,CAAC,IAAI;AAAA,kBAClB,SAAS;AAAA,kBACT,MAAM;AAAA,gBACxB;AACgB,8BAAc;AACd;cACD;AAAA,YACf;AAAA,UACW;AAAA,QACF;AAAA,MACT,OAAa;AACL,gBAAQ,MAAM,OAAO,wBAAwB,GAAG;AAChD,eAAO,uBAAuB;AAAA,MAC/B;AAAA,IACP,CAAK;AAAA,EACF;AAAA,EACD,kBAAkB,KAAK,aAAa,IAAI,UAAU,OAAO;AACvD,UAAM,OAAO;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,IACN;AACI,WAAO;AAAA,EACR;AACH;AACA,MAAM,iCAAiC,qBAAqB;AAAA,EAC1D,cAAc,KAAK,aAAa,IAAI,UAAU,OAAO;AACnD,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,UAAI,OAAO,OAAO,mBAAmB,eAAe,OAAO,OAAO,eAAe,kBAAkB;AACjG,cAAM,UAAU;AAAA,UACd;AAAA,UACA,UAAU,UAAU,UAAU;AAAA,QACxC;AACQ,eAAO,eAAe,iBAAiB,KAAK,KAAK,UAAU,OAAO,GAAG,CAAC,SAAS;AAC7E,cAAI;AACF,kBAAM,MAAM,KAAK,MAAM,IAAI;AAC3B,kBAAM,SAAS,KAAK,MAAM,IAAI,IAAI;AAClC,gBAAI,IAAI,UAAU,GAAG;AACnB,sBAAQ,MAAM;AAAA,YAC5B,OAAmB;AACL,sBAAQ,KAAK,mCAAmC,MAAM;AACtD,qBAAO,MAAM;AAAA,YACd;AAAA,UACF,SAAQ,GAAP;AACA,mBAAO,iDAAiD,IAAI;AAAA,UAC7D;AAAA,QACX,CAAS;AAAA,MACT,OAAa;AACL,gBAAQ,MAAM,mEAAmE;AACjF,eAAO,mDAAmD;AAAA,MAC3D;AAAA,IACP,CAAK;AAAA,EACF;AACH;AACA,MAAM,kCAAkC,qBAAqB;AAAA,EAC3D,cAAc,KAAK,aAAa,IAAI,UAAU,OAAO;AACnD,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,UAAI,SAAS;AACX,cAAM,QAAQ,IAAI;AAClB,cAAM,SAAS,MAAM;AACnB,kBAAQ,IAAI,YAAY;AACxB,kBAAQ;AAAA,YACN;AAAA,YACA,MAAM;AAAA,YACN,UAAU;AAAA,YACV,WAAW;AAAA,cACT,OAAO,MAAM;AAAA,cACb,QAAQ,MAAM;AAAA,YACf;AAAA,UACb,CAAW;AAAA,QACX;AACQ,cAAM,UAAU,MAAM;AACpB,kBAAQ,MAAM,OAAO,4BAA4B;AACjD,iBAAO;AAAA,YACL;AAAA,YACA,WAAW;AAAA,YACX,WAAW;AAAA,UACvB,CAAW;AAAA,QACX;AACQ,cAAM,MAAM;AAAA,MACpB,OAAa;AACL,gBAAQ;AAAA,UACN;AAAA,UACA,MAAM;AAAA,UACN,UAAU;AAAA,QACpB,CAAS;AAAA,MACF;AAAA,IACP,CAAK;AAAA,EACF;AACH;AACK,MAAC,YAAY,OAAO,SAAS,2BAA2B;AAC7D,OAAO,OAAO;AAgBd;AACA;AACA;AACA,IAAI,kBAAkB;AACtB,IAAI,eAAe;AACnB,IAAI,cAAc,CAAA;AAClB,MAAM,kBAAkB,MAAM;AAC5B,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,QAAI,iBAAiB;AACnB;AACA;AAAA,IACD;AACD,QAAI,OAAO,QAAQ;AACjB,UAAI,KAAK,MAAM;AACb,YAAI,OAAO,gBAAgB;AACzB,kBAAQ,IAAI,6BAA6B;AAAA,QACnD,OAAe;AACL,kBAAQ,IAAI,8BAA8B;AAAA,QAC3C;AACD,gBAAQ,IAAI,eAAe,EAAE;AAC7B,eAAO,OAAO,oBAAoB,EAAE;AACpC,0BAAkB;AAClB;MACR;AACM,aAAO,OAAO,iBAAiB,qBAAqB,EAAE;AACtD,aAAO,OAAO;IACpB,OAAW;AACL,wBAAkB;AAClB;IACD;AAAA,EACL,CAAG;AACH;AACK,MAAC,2BAA2B,CAAC,cAAc,SAAS;AACvD,MAAI,aAAa;AACjB;AACA,cAAY,UAAU,IAAI;AAAA,IACxB,eAAe,CAAC,QAAQ;AACtB,WAAK,QAAQ,IAAI;AACjB,cAAQ,IAAI,iCAAiC,KAAK,OAAO;AAAA,IAC1D;AAAA,EACL;AACE,GAAC,YAAY;AACX,UAAM,gBAAe;AACrB,QAAI,YAAY,eAAe,UAAU,GAAG;AAC1C,UAAI,YAAY,gCAAgC;AAChD,aAAO,QAAQ,iBAAiB,WAAW,YAAY,UAAU,EAAE,aAAa;AAChF,aAAO,gBAAgB,yBAAyB,cAAc,YAAY,SAAS;AAAA,IACpF;AAAA,EACL;AACE,SAAO;AACT;AACK,MAAC,4BAA4B,CAAC,eAAe;AAChD,GAAC,YAAY;AACX,UAAM,gBAAe;AACrB,QAAI,YAAY,eAAe,UAAU,GAAG;AAC1C,aAAO,QAAQ,oBAAoB,YAAY,UAAU,EAAE,aAAa;AACxE,aAAO,gBAAgB,0BAA0B,UAAU;AAC3D,aAAO,YAAY,UAAU;AAAA,IACnC,OAAW;AACL,cAAQ,KAAK,mCAAmC;AAAA,IACjD;AAAA,EACL;AACA;AAeA;AACA;AACA;AACA,MAAM,gBAAgB;AAAA,EACpB,aAA6B,oBAAI;EACjC,cAAc;AAAA,EACb;AAAA,EACD,WAAW,WAAW,YAAY;AAChC,SAAK,WAAW,IAAI,WAAW,UAAU;AAAA,EAC1C;AAAA,EACD,aAAa,WAAW;AACtB,WAAO,KAAK,WAAW,IAAI,SAAS;AAAA,EACrC;AAAA,EACD,gBAAgB,WAAW;AACzB,QAAI,KAAK,WAAW,IAAI,SAAS,GAAG;AAClC,UAAI,iBAAiB,KAAK,WAAW,IAAI,SAAS;AAClD,WAAK,WAAW,OAAO,SAAS;AAChC,aAAO;AAAA,IACb,OAAW;AACL,cAAQ,MAAM,eAAe,sBAAsB;AACnD,aAAO;AAAA,IACR;AAAA,EACF;AACH;AACA,IAAI,SAAS,IAAI;AAEjB;AACA;AACA;AACA,MAAM,YAAY;AAAA,EAChB,WAAW;AAAA,EACX,aAAa;AAAA;AAAA,EAEb,YAAY;AAAA,EACZ,YAAY,UAAU;AACpB,QAAI,UAAU;AACZ,WAAK,WAAW;AAAA,IACjB;AAAA,EACF;AAAA,EACD,aAAa;AACX,SAAK,YAAY,GAAG,KAAK,YAAY,KAAK,YAAY,aAAc;AACpE,WAAO,WAAW,KAAK,WAAW,IAAI;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOD,SAAS;AACP,WAAO,KAAK;AAAA,EACb;AAAA,EACD,UAAU;AACR,QAAI,aAAa,OAAO,gBAAgB,KAAK,SAAS;AACtD,QAAI,YAAY;AACd,WAAK,YAAY;IAClB;AAAA,EACF;AACH;AAMA;AACA,MAAM,mBAAmB;AACzB;AACA,MAAM,oBAAoB;AAC1B;AACA,MAAM,mBAAmB;AACzB;AACA,MAAM,mBAAmB;AACzB,MAAM,iBAAiB;AACvB,MAAM,6BAA6B;AACnC,MAAM,2BAA2B;AACjC,MAAM,2BAA2B;AACjC,MAAM,gBAAgB;AACtB,MAAM,gCAAgC;AACtC;AACA,MAAM,mBAAmB;AACzB,MAAM,mBAAmB;AACzB,MAAM,kBAAkB;AACxB,MAAM,iBAAiB;AAEvB;AACA;AACA;AACA,MAAM,YAAY;AAAA,EAChB,mBAAmB,CAAA;AAAA,EACnB,eAAe;AAAA;AAAA,EAEf,YAAY,UAAU;AACpB,SAAK,mBAAmB;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQD,OAAO,WAAW,OAAO;AACvB,QAAI,KAAK,cAAc;AACrB,cAAQ,MAAM,gCAAgC;AAC9C;AAAA,IACD;AACD,SAAK,iBAAiB,KAAK;AAAA,MACzB,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,OAAO;AAAA,IACb,CAAK;AACD,SAAK,aAAY;AACjB,SAAK,eAAe;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOD,KAAK,OAAO;AACV,QAAI,KAAK,cAAc;AACrB,cAAQ,MAAM,gCAAgC;AAC9C;AAAA,IACD;AACD,SAAK,iBAAiB,KAAK;AAAA,MACzB,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,OAAO;AAAA,IACb,CAAK;AACD,SAAK,aAAY;AACjB,SAAK,eAAe;AAAA,EACrB;AAAA,EACD,eAAe;AAAA,EACd;AACH;AACA,MAAM,iBAAiB,YAAY;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY,UAAU,MAAM,KAAK,OAAO,QAAQ;AAC9C,UAAM,QAAQ;AACd,SAAK,WAAW;AAChB,SAAK,UAAU;AACf,SAAK,YAAY;AACjB,SAAK,aAAa;AAAA,EACnB;AAAA;AAAA,EAED,eAAe;AACb,SAAK,iBAAiB,KAAK;AAAA,MACzB,OAAO;AAAA,MACP,QAAQ,KAAK;AAAA,MACb,OAAO,KAAK;AAAA,MACZ,SAAS,KAAK;AAAA,MACd,UAAU,KAAK;AAAA,IACrB,CAAK;AAAA,EACF;AACH;AACA,MAAM,mBAAmB,YAAY;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY,UAAU,SAAS,SAAS,QAAQ;AAC9C,UAAM,QAAQ;AACd,SAAK,gBAAgB;AACrB,SAAK,gBAAgB;AACrB,SAAK,eAAe;AAAA,EACrB;AAAA;AAAA,EAED,eAAe;AACb,SAAK,iBAAiB,KAAK;AAAA,MACzB,OAAO;AAAA,MACP,KAAK,KAAK;AAAA,MACV,KAAK,KAAK;AAAA,MACV,UAAU,KAAK;AAAA,IACrB,CAAK;AAAA,EACF;AACH;AACA,MAAM,mBAAmB,YAAY;AAAA,EACnC,eAAe,CAAA;AAAA,EACf,YAAY,UAAU;AACpB,UAAM,QAAQ;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQD,OAAO,SAAS,SAAS;AACvB,SAAK,cAAc,KAAK;AAAA,MACtB,OAAO;AAAA,MACP,KAAK;AAAA,MACL,KAAK;AAAA,IACX,CAAK;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQD,OAAO,SAAS,SAAS;AACvB,SAAK,cAAc,KAAK;AAAA,MACtB,OAAO;AAAA,MACP,KAAK;AAAA,MACL,KAAK;AAAA,IACX,CAAK;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYD,MAAM,MAAM,KAAK,OAAO,QAAQ,YAAY,YAAY;AACtD,SAAK,cAAc,KAAK;AAAA,MACtB,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,SAAS;AAAA,MACT,UAAU;AAAA,MACV,cAAc;AAAA,MACd,cAAc;AAAA,IACpB,CAAK;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAKD,QAAQ;AACN,SAAK,cAAc,KAAK;AAAA,MACtB,OAAO;AAAA,IACb,CAAK;AAAA,EACF;AAAA;AAAA,EAED,eAAe;AACb,QAAI,KAAK,cAAc;AACrB,WAAK,iBAAiB,KAAK;AAAA,QACzB,OAAO;AAAA,MACf,CAAO;AACD,WAAK,iBAAiB,KAAK,GAAG,KAAK,YAAY;AAC/C,WAAK,iBAAiB,KAAK;AAAA,QACzB,OAAO;AAAA,MACf,CAAO;AACD,WAAK,eAAe;AAAA,IACrB;AAAA,EACF;AACH;AAEA;AACA;AACA;AACA,MAAM,sBAAsB,YAAY;AAAA,EACtC,eAAe,CAAA;AAAA,EACf,WAAW;AAAA;AAAA,EAEX,cAAc,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQjC,YAAY,OAAO,QAAQ,UAAU;AACnC,UAAM,QAAQ;AACd,SAAK,cAAc,KAAK;AAAA,MACtB,OAAO;AAAA,MACP,KAAK;AAAA,MACL,KAAK;AAAA,IACX,CAAK;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAKD,cAAc;AACZ,SAAK,cAAc,KAAK;AAAA,MACtB,OAAO;AAAA,IACb,CAAK;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOD,UAAU,OAAO;AACf,SAAK,cAAc,KAAK;AAAA,MACtB,OAAO;AAAA,MACP,OAAO;AAAA,IACb,CAAK;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQD,aAAa;AACX,QAAI,KAAK,cAAc;AACrB,aAAO,IAAI,WAAW,KAAK,YAAY;AAAA,IAC7C,OAAW;AACL,cAAQ,MAAM,kBAAkB;AAChC,aAAO;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWD,SAAS,MAAM,KAAK,OAAO,QAAQ;AACjC,QAAI,KAAK,cAAc;AACrB,aAAO,IAAI,SAAS,KAAK,cAAc,MAAM,KAAK,OAAO,MAAM;AAAA,IACrE,OAAW;AACL,cAAQ,MAAM,kBAAkB;AAChC,aAAO;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUD,WAAW,SAAS,SAAS,QAAQ;AACnC,QAAI,KAAK,cAAc;AACrB,aAAO,IAAI,WAAW,KAAK,cAAc,SAAS,SAAS,MAAM;AAAA,IACvE,OAAW;AACL,cAAQ,MAAM,kBAAkB;AAChC,aAAO;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYD,SAAS,OAAO,OAAO,KAAK,KAAK,WAAW,OAAO;AACjD,SAAK,cAAc,KAAK;AAAA,MACtB,OAAO;AAAA,MACP,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,MACN,aAAa;AAAA,MACb,OAAO;AAAA,IACb,CAAK;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYD,uBAAuB,OAAO,OAAO,KAAK,KAAK,YAAY,YAAY;AACrE,QAAI,CAAC,cAAc,CAAC,cAAc,WAAW,WAAW,WAAW,QAAQ;AACzE,cAAQ,MAAM,uHAAuH,MAAM,KAAK,UAAU,GAAG,MAAM,KAAK,UAAU,CAAC;AACnL;AAAA,IACD;AACD,SAAK,cAAc,KAAK;AAAA,MACtB,OAAO;AAAA,MACP,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,SAAS;AAAA,IACf,CAAK;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYD,eAAe;AACb,SAAK,cAAc,mBAAmB;AAAA,EACvC;AAAA;AAAA,EAED,SAAS;AACP,QAAI,CAAC,KAAK,UAAU;AAClB,WAAK,aAAa,QAAQ,eAAe;AAAA,QACvC,KAAK,UAAU,KAAK,YAAY;AAAA,QAChC,KAAK;AAAA,MACb;AACM,WAAK,WAAU;AACf,WAAK,WAAW;AAChB,WAAK,eAAe;AAAA,IAC1B,OAAW;AACL,cAAQ,MAAM,gCAAgC;AAAA,IAC/C;AACD,WAAO,MAAM;EACd;AACH;AA2BG,IAAC,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWrB,eAAe,CAAC,OAAO,QAAQ,aAAa;AAC1C,WAAO,IAAI,cAAc,OAAO,QAAQ,QAAQ;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOD,eAAe,CAAC,cAAc;AAC5B,QAAI,aAAa,OAAO,aAAa,SAAS;AAC9C,QAAI,YAAY;AACd,iBAAW,QAAO;AAAA,IACnB;AAAA,EACF;AACH;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmBK,MAAC,cAAc;AAAA,EAClB,QAAQ;AAAA,EACR,OAAO;AAAA,IACL,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,OAAO;AAAA,MACL,MAAM;AAAA,MACN,UAAU;AACR,eAAO;AAAA,UACL,MAAM;AAAA,UACN,KAAK;AAAA,UACL,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,OAAO;AAAA,UACP,UAAU;AAAA,UACV,WAAW;AAAA,UACX,YAAY;AAAA,UACZ,YAAY;AAAA,UACZ,WAAW;AAAA,QACrB;AAAA,MACO;AAAA,IACF;AAAA,IACD,YAAY;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,gBAAgB;AAAA,MACd,MAAM;AAAA,MACN,UAAU,OAAO;AACf,eAAO,CAAC,OAAO,OAAO,OAAO,KAAK,EAAE,SAAS,KAAK;AAAA,MACnD;AAAA,MACD,SAAS;AAAA,IACV;AAAA,IACD,YAAY;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,SAAS;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,SAAS;AAAA,MACP,MAAM;AAAA,IACP;AAAA,EACF;AAAA,EACD,MAAM,SAAS;AACb,UAAM,QAAQ;AACd,UAAM,mBAAmB,MAAM;AAC7B,aAAO;AAAA,QACL,OAAO;AAAA,QACP,UAAU;AAAA,QACV,WAAW;AAAA,QACX,YAAY;AAAA,QACZ,WAAW;AAAA,MACnB;AAAA,IACA;AACI,QAAI,YAAY,WAAW,CAAC;AAC5B,QAAI,MAAM,WAAW,QAAQ;AAC3B,gBAAU,QAAQ,MAAM,MAAM;AAAA,IACpC,OAAW;AACL,gBAAU,QAAQ,MAAM;AAAA,IACzB;AACD,UAAM,QAAQ,WAAW,MAAM,IAAI;AACnC,UAAM,QAAQ,WAAW,IAAI;AAC7B,UAAM,WAAW,WAAW,IAAI;AAChC,UAAM,YAAY,WAAW,IAAI;AACjC,UAAM,UAAU,WAAW,IAAI;AAC/B,UAAM,WAAW,WAAW,IAAI;AAChC,UAAM,WAAW,WAAW,KAAK;AACjC,UAAM,aAAa,WAAW,CAAC;AAC/B,UAAM,YAAY,WAAW,CAAC;AAC9B,UAAM,UAAU,WAAW,KAAK;AAChC,UAAM,cAAc,WAAW,KAAK;AACpC,QAAI,kBAAkB;AACtB,QAAI,aAAa,WAAW,CAAC;AAC7B,UAAM,aAAa,SAAS,MAAM;AAChC,UAAI,MAAM,OAAO,aAAa,SAAS,MAAM,MAAM,aAAa,OAAO;AACrE,eAAO,MAAM,MAAM;AAAA,MAC3B,OAAa;AACL,eAAO,UAAU,MAAM,MAAM,IAAI,IAAI,QAAQ;AAAA,MAC9C;AAAA,IACP,CAAK;AACD,UAAM,YAAY,SAAS,MAAM;AAC/B,UAAI,EAAE,KAAK,OAAO,QAAQ,GAAG,KAAM,IAAG,MAAM;AAC5C,UAAI,IAAI;AACR,aAAO,OAAO,GAAG,IAAI;AACrB,UAAI,MAAM,YAAY;AACpB,UAAE,YAAY;AAAA,MACf;AACD,QAAE,YAAY,WAAW;AACzB,aAAO;AAAA,IACb,CAAK;AACD,QAAI,YAAY,WAAW,aAAa,MAAM,MAAM,UAAU,KAAK,CAAC;AACpE,UAAM,eAAe;AAAA,MACnB,MAAM,UAAU,MAAM,aAAa,QAAQ,IAAI;AAAA,IACrD;AACI,UAAM,UAAU,MAAM;AACpB,UAAI,UAAU,QAAQ,MAAM,MAAM,MAAM,OAAO;AAC7C,iBAAS,QAAQ;AACjB,gBAAQ,QAAQ;AAChB,oBAAY,QAAQ;AACpB,YAAI,aAAa,KAAK,MAAM,MAAM,KAAK,SAAS,CAAC;AACjD,cAAM,QAAQ,MAAM,KAAK,MAAM,GAAG,UAAU;AAC5C,cAAM,QAAQ,MAAM,KAAK,MAAM,UAAU;AACzC,kBAAU,QAAQ,UAAU;AAAA,UAC1B,MAAM;AAAA,UACN,UAAU;AAAA,QACX,EAAC;AACF,mBAAW,QAAQ,UAAU,wBAAwB,MAAM,OAAO,UAAU,KAAK,EAAE,aAAa,UAAU;AAC1G,YAAI,WAAW,SAAS,OAAO;AAC7B,qBAAW,QAAQ,MAAM,MAAM,QAAQ,UAAU;AAAA,QAC3D,OAAe;AACL,qBAAW,QAAQ;AAAA,QACpB;AAAA,MACT,WAAiB,UAAU,QAAQ,UAAU,QAAQ,MAAM,MAAM,OAAO;AAChE,cAAM,QAAQ,MAAM;AACpB,cAAM,QAAQ;AACd,gBAAQ,QAAQ;AAChB,iBAAS,QAAQ;AACjB,oBAAY,QAAQ;AAAA,MACrB,WAAU,MAAM,cAAc,UAAU,QAAQ,MAAM,MAAM,MAAM,SAAS,UAAU,QAAQ,MAAM,MAAM,OAAO;AAC/G,kBAAU,QAAQ,UAAU,QAAQ,UAAU;AAC9C,cAAM,QAAQ,MAAM;AACpB,cAAM,QAAQ,MAAM;AACpB,iBAAS,QAAQ;AACjB,gBAAQ,QAAQ;AAChB,oBAAY,QAAQ;AACpB,YAAI,UAAU,wBAAwB,MAAM,MAAM,UAAU,KAAK,EAAE,aAAa,MAAM,MAAM,OAAO;AACjG,cAAI,WAAW,SAAS,OAAO;AAC7B,uBAAW,QAAQ,MAAM,MAAM,QAAQ,UAAU,QAAQ,UAAU;AAAA,UAC/E,OAAiB;AACL,uBAAW,QAAQ;AAAA,UACpB;AAAA,QACX,OAAe;AACL,qBAAW,QAAQ;AAAA,QACpB;AAAA,MACT,OAAa;AACL,cAAM,QAAQ,MAAM;AACpB,cAAM,QAAQ;AACd,gBAAQ,QAAQ;AAChB,iBAAS,QAAQ;AACjB,oBAAY,QAAQ;AAAA,MACrB;AAAA,IACP;AACI;AACA,UAAM,YAAY,CAAC,QAAQ,UAAU,QAAQ,aAAa;AACxD,YAAM,OAAO,IAAI,QAAQ;AAAA,QACvB;AAAA,QACA;AAAA,QACA,MAAM;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,MACR;AACM,WAAK;AAAA,QACH,IAAI,QAAQ;AAAA,UACV;AAAA,UACA,CAAC,UAAU;AACT,gBAAI,OAAO;AACT;YACD;AAAA,UACF;AAAA,UACD;AAAA,QACD;AAAA,MACT;AACM,WAAK,OAAO,QAAQ,gBAAgB,uBAAuB;AAC3D,YAAM,OAAO,KAAK,GAAG,gBAAgB,IAAI,EAAE,eAAe,IAAI;AAAA,IACpE;AACI,UAAM,aAAa,MAAM;AACvB,wBAAkB;AAClB,wBAAkB,WAAW,MAAM;AACjC,YAAI,WAAW,SAAS,SAAS,MAAM,kBAAkB,OAAO;AAC9D;QACV,WAAmB,WAAW,SAAS,SAAS,MAAM,kBAAkB,OAAO;AACrE;QACV,WAAmB,WAAW,SAAS,SAAS,MAAM,kBAAkB,OAAO;AACrE;QACV,WAAmB,WAAW,SAAS,SAAS,MAAM,kBAAkB,OAAO;AACrE;QACD;AAAA,MACT,GAAS,MAAM,OAAO;AAAA,IACtB;AACI,UAAM,iBAAiB,MAAM;AAC3B,wBAAkB;AAClB,wBAAkB,WAAW,MAAM;AACjC,YAAI,WAAW,SAAS,SAAS,MAAM,kBAAkB,OAAO;AAC9D;QACV,WAAmB,WAAW,SAAS,SAAS,MAAM,kBAAkB,OAAO;AACrE;QACV,WAAmB,WAAW,SAAS,SAAS,MAAM,kBAAkB,OAAO;AACrE;QACV,WAAmB,WAAW,SAAS,SAAS,MAAM,kBAAkB,OAAO;AACrE;QACD;AAAA,MACT,GAAS,MAAM,OAAO;AAAA,IACtB;AACI,UAAM,eAAe,MAAM;AACzB,gBAAU,UAAU,GAAG,CAAC,UAAU,OAAO,IAAI;AAC7C,gBAAU,WAAW,GAAG,CAAC,UAAU,OAAO,UAAU;AAAA,IAC1D;AACI,UAAM,mBAAmB,MAAM;AAC7B,gBAAU,UAAU,GAAG,UAAU,OAAO,IAAI;AAC5C,gBAAU,WAAW,KAAK,UAAU,OAAO,CAAC,UAAU,OAAO,UAAU;AAAA,IAC7E;AACI,UAAM,gBAAgB,MAAM;AAC1B,gBAAU,UAAU,GAAG,UAAU,OAAO,IAAI;AAC5C,gBAAU,WAAW,GAAG,UAAU,OAAO,UAAU;AAAA,IACzD;AACI,UAAM,oBAAoB,MAAM;AAC9B,gBAAU,UAAU,GAAG,CAAC,UAAU,OAAO,IAAI;AAC7C,gBAAU,WAAW,IAAI,UAAU,OAAO,UAAU,OAAO,UAAU;AAAA,IAC3E;AACI,UAAM,mBAAmB,MAAM;AAC7B,gBAAU,UAAU,GAAG,CAAC,UAAU,OAAO,MAAM;AAC7C,kBAAU,UAAU,WAAW,OAAO,GAAG,cAAc;AAAA,MAC/D,CAAO;AACD,gBAAU,WAAW,GAAG,EAAE,WAAW,QAAQ,UAAU,QAAQ,IAAI;AAAA,IACzE;AACI,UAAM,uBAAuB,MAAM;AACjC,gBAAU,UAAU,GAAG,UAAU,OAAO,MAAM;AAC5C,kBAAU,UAAU,CAAC,WAAW,OAAO,GAAG,cAAc;AAAA,MAChE,CAAO;AACD,gBAAU,WAAW,EAAE,WAAW,QAAQ,UAAU,QAAQ,GAAG,IAAI;AAAA,IACzE;AACI,UAAM,oBAAoB,MAAM;AAC9B,gBAAU,UAAU,GAAG,UAAU,OAAO,MAAM;AAC5C,kBAAU,UAAU,CAAC,WAAW,OAAO,GAAG,cAAc;AAAA,MAChE,CAAO;AACD,gBAAU,WAAW,GAAG,WAAW,QAAQ,UAAU,OAAO,IAAI;AAAA,IACtE;AACI,UAAM,wBAAwB,MAAM;AAClC,gBAAU,UAAU,GAAG,CAAC,UAAU,OAAO,MAAM;AAC7C,kBAAU,UAAU,WAAW,OAAO,GAAG,cAAc;AAAA,MAC/D,CAAO;AACD,gBAAU,WAAW,WAAW,QAAQ,UAAU,OAAO,GAAG,IAAI;AAAA,IACtE;AACI,UAAM,YAAY,MAAM;AACtB,UAAI,kBAAkB,GAAG;AACvB,qBAAa,eAAe;AAC5B,0BAAkB;AAAA,MACnB;AACD,YAAM,SAAS,OAAO,gBAAgB,IAAI,CAAC,GAAG;AAC9C,YAAM,UAAU,OAAO,gBAAgB,IAAI,CAAC,GAAG;IACrD;AACI,UAAM,kBAAkB,MAAM;AAC5B,UAAI,MAAM,YAAY;AACpB,gBAAQ,MAAM,uBAAuB;AACrC,cAAM,QAAQ,MAAM;AAAA,MAC5B,OAAa;AACL,cAAM,QAAQ,MAAM;AAAA,MACrB;AAAA,IACP;AACI,UAAM,cAAc,CAAC,WAAW,cAAc;AAC5C,UAAI,MAAM,kBAAkB,OAAO;AACjC;MACR,OAAa;AACL;MACD;AAAA,IACP;AACI,UAAM,gBAAgB,CAAC,OAAO,OAAO,OAAO,UAAU;AACpD,UAAI,SAAS,OAAO;AAClB;MACR,WAAiB,CAAC,SAAS,CAAC,OAAO;AAC3B;MACD;AAAA,IACP;AACI,UAAM,eAAe,MAAM;AACzB,UAAI,UAAU,MAAM,aAAa,OAAO;AACtC,YAAI,SAAS,OAAO;AAClB,sBAAY,sBAAsB,gBAAgB;AAAA,QAC5D,WAAmB,QAAQ,OAAO;AACxB;QACV,WAAmB,YAAY,OAAO;AAC5B,sBAAY,kBAAkB,YAAY;AAAA,QACpD,OAAe;AACL,gBAAM,QAAQ,MAAM;AAAA,QACrB;AAAA,MACT,OAAa;AACL,YAAI,SAAS,OAAO;AAClB,sBAAY,uBAAuB,iBAAiB;AACpD,oBAAU,QAAQ,aAAa,QAAQ,WAAW,QAAQ,UAAU;AAAA,QAC9E,WAAmB,QAAQ,OAAO;AACxB;QACV,WAAmB,YAAY,OAAO;AAC5B,sBAAY,mBAAmB,aAAa;AAC5C,oBAAU,QAAQ,aAAa,QAAQ,UAAU;AAAA,QAC3D,OAAe;AACL,gBAAM,QAAQ,MAAM;AAAA,QACrB;AAAA,MACF;AAAA,IACP;AACI,QAAI,gBAAgB;AACpB,gBAAY,MAAM;AAChB,UAAI,MAAM,SAAS,eAAe;AAChC,wBAAgB,MAAM;AACtB,cAAM,UAAU,MAAM;AACtB,cAAM,aAAa,MAAM;AACzB,cAAM,eAAe,UAAU;AAAA,UAC7B;AAAA,UACA,UAAU;AAAA,QACX,EAAC;AACF,kBAAU,QAAQ;AAClB,kBAAU,QAAQ,cAAc,SAAS,UAAU,QAAQ;AAC3D;AACA;AACA;MACD;AAAA,IACP,CAAK;AACD,oBAAgB,MAAM;AACpB;IACN,CAAK;AACD,WAAO,CAAC,MAAM,WAAW;AACvB,aAAO,UAAS,GAAI,YAAY,MAAM,gBAAgB,GAAG;AAAA,QACvD,cAAc;AAAA,QACd,eAAe;AAAA,QACf,MAAM,MAAM,MAAM;AAAA,QAClB,KAAK,MAAM,MAAM;AAAA,QACjB,OAAO,MAAM,MAAM;AAAA,QACnB,QAAQ,MAAM,MAAM;AAAA,QACpB,WAAW;AAAA,QACX,UAAU;AAAA,MAClB,GAAS;AAAA,QACD,SAAS,QAAQ,MAAM;AAAA,UACrBY,gBAAmB,OAAO;AAAA,YACxB,OAAO,eAAe;AAAA,cACpB,MAAM;AAAA,cACN,KAAK;AAAA,cACL,OAAO,QAAQ,MAAM;AAAA,cACrB,QAAQ,QAAQ,MAAM;AAAA,cACtB,UAAU;AAAA,YACxB,CAAa;AAAA,UACb,GAAa;AAAA,YACDA,gBAAmB,OAAO;AAAA,cACxB,SAAS;AAAA,cACT,KAAK;AAAA,cACL,OAAO,eAAe;AAAA,gBACpB,MAAM,MAAM,YAAY;AAAA,gBACxB,KAAK;AAAA,gBACL,OAAO,QAAQ,MAAM;AAAA,gBACrB,QAAQ,QAAQ,MAAM;AAAA,cACtC,CAAe;AAAA,YACf,GAAe;AAAA,cACDA,gBAAmB,OAAO;AAAA,gBACxB,SAAS;AAAA,gBACT,KAAK;AAAA,gBACL,OAAO,eAAe;AAAA,kBACpB,GAAG,MAAM,SAAS;AAAA,kBAClB,QAAQ,QAAQ,MAAM;AAAA,kBACtB,sBAAsB,QAAQ,MAAM;AAAA,kBACpC,MAAM,MAAM,UAAU;AAAA,kBACtB,KAAK;AAAA,gBACvB,CAAiB;AAAA,cACF,GAAE,gBAAgB,MAAM,KAAK,CAAC,GAAG,CAAC;AAAA,YACpC,GAAE,CAAC;AAAA,YACJA,gBAAmB,OAAO;AAAA,cACxB,SAAS;AAAA,cACT,KAAK;AAAA,cACL,OAAO,eAAe;AAAA,gBACpB,MAAM,MAAM,UAAU,KAAK,QAAQ,MAAM,SAAS,IAAI,MAAM,SAAS;AAAA,gBACrE,KAAK;AAAA,gBACL,OAAO,MAAM,QAAQ,IAAI,MAAM,UAAU,IAAI,MAAM,SAAS,IAAI,QAAQ,MAAM;AAAA,gBAC9E,QAAQ,QAAQ,MAAM;AAAA,cACtC,CAAe;AAAA,YACf,GAAe;AAAA,cACDA,gBAAmB,OAAO;AAAA,gBACxB,SAAS;AAAA,gBACT,KAAK;AAAA,gBACL,OAAO,eAAe;AAAA,kBACpB,GAAG,MAAM,SAAS;AAAA,kBAClB,QAAQ,QAAQ,MAAM;AAAA,kBACtB,MAAM,MAAM,UAAU;AAAA,kBACtB,KAAK;AAAA,kBACL,sBAAsB,MAAM,QAAQ,IAAI,MAAM,UAAU,IAAI,MAAM,SAAS,IAAI,QAAQ,MAAM;AAAA,gBAC/G,CAAiB;AAAA,cACF,GAAE,gBAAgB,MAAM,KAAK,CAAC,GAAG,CAAC;AAAA,YACpC,GAAE,CAAC;AAAA,UACL,GAAE,CAAC;AAAA,QACd,CAAS;AAAA,QACD,GAAG;AAAA,MACX,GAAS,GAAG,CAAC,QAAQ,OAAO,SAAS,QAAQ,CAAC;AAAA,IAC9C;AAAA,EACG;AACH;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiBA,MAAM,cAAc;AAAA,EAClB,OAAO;AAAA,IACL,OAAO;AAAA,MACL,MAAM;AAAA,IACP;AAAA,IACD,OAAO;AAAA,MACL,MAAM,CAAC,OAAO,MAAM;AAAA,IACrB;AAAA,IACD,SAAS;AAAA,MACP,MAAM;AAAA,IACP;AAAA,IACD,SAAS;AAAA,MACP,MAAM;AAAA,IACP;AAAA,IACD,SAAS;AAAA,MACP,MAAM;AAAA,IACP;AAAA,IACD,YAAY;AAAA,MACV,MAAM;AAAA,IACP;AAAA,IACD,UAAU;AAAA,MACR,MAAM;AAAA,IACP;AAAA,IACD,WAAW;AAAA,MACT,MAAM;AAAA,IACP;AAAA,IACD,WAAW;AAAA,MACT,MAAM;AAAA,IACP;AAAA,IACD,YAAY;AAAA,MACV,MAAM;AAAA,IACP;AAAA,EACF;AAAA,EACD,QAAQ;AACN,WAAO;AAAA,MACL,WAAW;AAAA,MACX,aAAa;AAAA,MACb,aAAa;AAAA,MACb,MAAM,CAAC,OAAO;AAAA,MACd,OAAO;AAAA,QACL,SAAS;AAAA,QACT,SAAS;AAAA,QACT,SAAS;AAAA,QACT,UAAU;AAAA,QACV,WAAW;AAAA,QACX,YAAY;AAAA,QACZ,WAAW;AAAA,MACZ;AAAA,IACP;AAAA,EACG;AAAA,EACD,SAAS;AAAA,IACP,UAAU,QAAQ,YAAY,YAAY,UAAU,UAAU;AAC5D,YAAM,MAAM,OAAO,WAAW,IAAI;AAClC,UAAI,CAAC,cAAc,CAAC,UAAU;AAC5B;AAAA,MACD;AACD,YAAM,UAAU,KAAK,YAAY,SAAS;AAC1C,YAAM,UAAU,KAAK,aAAa,SAAS;AAC3C,aAAO,QAAQ;AACf,aAAO,SAAS;AAChB,UAAI,UAAU,YAAY,GAAG,GAAG,SAAS,OAAO;AAChD,UAAI,2BAA2B;AAC/B,UAAI;AAAA,QACF;AAAA,QACA,CAAC,KAAK,WAAW,SAAS;AAAA,QAC1B,CAAC,KAAK,UAAU,SAAS;AAAA,QACzB,SAAS;AAAA,QACT,SAAS;AAAA,MACjB;AACM,cAAQ,IAAI,KAAK,SAAS,WAAW,SAAS,QAAQ;AAAA,IACvD;AAAA,IACD,4BAA4B;AAC1B,YAAM,cAAc,IAAI,KAAK;AAC7B,YAAM,eAAe,IAAI,KAAK;AAC9B,YAAM,SAAS,CAAC,KAAK;AACrB,YAAM,SAAS,KAAK;AACpB,WAAK,UAAU;AAAA,QACb,WAAW,eAAe,+BAA+B,aAAa;AAAA,QACtE;AAAA,MACR;AACM,WAAK,MAAM,UAAU,KAAK;AAC1B,WAAK,MAAM,WAAW,KAAK;AAC3B,WAAK,MAAM,YAAY,KAAK;AAC5B,WAAK,MAAM,aAAa,KAAK;AAAA,IAC9B;AAAA,IACD,eAAe;AACb,UAAI,QAAQ;AACZ,WAAK,MAAM,cAAc,gBAAgB,IAAI,EAAE,qBAAqB,MAAM;AACxE,cAAM,SAAS,OAAO,eAAe,cAAc,QAAQ;AAC3D,eAAO,MAAM,QAAQ,MAAM,MAAM,QAAQ;AACzC,eAAO,MAAM,SAAS,MAAM,MAAM,SAAS;AAC3C,cAAM,MAAM,cAAc,gBAAgB,IAAI,EAAE,eAAgB,EAAC,YAAY,MAAM;AACnF,cAAM,aAAa,IAAI;AACvB,cAAM,WAAW,IAAI;AACrB,mBAAW,MAAM,MAAM;AACvB,iBAAS,MAAM,MAAM;AACrB,YAAI,aAAa;AACjB,YAAI,WAAW;AACf,mBAAW,SAAS,MAAM;AACxB,uBAAa;AACb,gBAAM,UAAU,QAAQ,YAAY,YAAY,UAAU,QAAQ;AAAA,QAC5E;AACQ,iBAAS,SAAS,MAAM;AACtB,qBAAW;AACX,gBAAM,UAAU,QAAQ,YAAY,YAAY,UAAU,QAAQ;AAAA,QAC5E;AAAA,MACA,CAAO;AAAA,IACF;AAAA,IACD,mBAAmB;AACjB,UAAI,KAAK,cAAc,MAAM;AAC3B,aAAK,YAAY,IAAI,QAAQ,WAAU;AACvC,aAAK,cAAc,QAAQ,WAAW;AAAA,UACpC,IAAI,QAAQ,SAAS,KAAK,WAAW,IAAI;AAAA,QACnD;AAAA,MACO;AACD,UAAI,KAAK,YAAY,KAAK,MAAM,WAAW,KAAK,YAAY,KAAK,MAAM,SAAS;AAC9E,uBAAe;AAAA,UACb,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AAAA,QACf;AACQ,aAAK,MAAM,UAAU,KAAK;AAC1B,aAAK,MAAM,UAAU,KAAK;AAAA,MAC3B;AACD,WAAK,UAAU,kBAAkB;AAAA,QAC/B,OAAO,KAAK,MAAM;AAAA,QAClB,QAAQ,KAAK,MAAM;AAAA,MAC3B,CAAO;AACD,UAAI,KAAK,YAAY,KAAK,MAAM,WAAW,KAAK,aAAa,KAAK,MAAM,YAAY,KAAK,cAAc,KAAK,MAAM,aAAa,KAAK,eAAe,KAAK,MAAM,YAAY;AACxK,aAAK,0BAAyB;AAAA,MAC/B;AAAA,IACF;AAAA,EACF;AAAA,EACD,UAAU;AACR,QAAI,OAAO,QAAQ;AACjB,WAAK,iBAAgB;AAAA,IACtB;AAAA,EACF;AAAA,EACD,UAAU;AACR,QAAI,CAAC,OAAO,QAAQ;AAClB,WAAK,aAAY;AAAA,IAClB;AAAA,EACF;AAAA,EACD,UAAU;AACR,QAAI,OAAO,QAAQ;AACjB,WAAK,iBAAgB;AAAA,IACtB;AAAA,EACF;AAAA,EACD,gBAAgB;AACd,QAAI,KAAK,gBAAgB,IAAI;AAC3B,cAAQ,WAAW,OAAO,KAAK,WAAW;AAC1C,WAAK,cAAc;AACnB,WAAK,YAAY;AAAA,IAClB;AAAA,EACF;AACH;AACA,SAAS,cAAc,MAAM,QAAQ,QAAQ,QAAQ,OAAO,UAAU;AACpE,SAAO,OAAO,QAAQ,UAAS,GAAI,mBAAmB,OAAO;AAAA,IAC3D,KAAK;AAAA,IACL,KAAK;AAAA,IACL,OAAO,eAAe;AAAA,MACpB,KAAK,OAAO,MAAM;AAAA,MAClB,MAAM,OAAO,MAAM;AAAA,IACzB,CAAK;AAAA,EACL,GAAK,MAAM,CAAC,MAAM,UAAS,GAAI,mBAAmB,OAAO;AAAA,IACrD,KAAK;AAAA,IACL,yBAAyB,OAAO;AAAA,IAChC,OAAO,eAAe;AAAA,MACpB,KAAK,OAAO,MAAM;AAAA,MAClB,MAAM,OAAO,MAAM;AAAA,MACnB,OAAO,OAAO,MAAM;AAAA,MACpB,QAAQ,OAAO,MAAM;AAAA,IAC3B,CAAK;AAAA,EACF,GAAE,MAAM,IAAI,CAAC,uBAAuB,CAAC;AACxC;AACK,MAAC,iBAAiC,4BAAY,aAAa,CAAC,CAAC,UAAU,aAAa,CAAC,CAAC;AAE3F;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuBK,MAAC,cAAc;AAAA,EAClB,QAAQ;AAAA,EACR,OAAO;AAAA,IACL,OAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS,MAAM;AACb,eAAO;MACR;AAAA,IACF;AAAA,IACD,KAAK,EAAE,MAAM,QAAQ,SAAS,EAAG;AAAA,IACjC,MAAM,EAAE,MAAM,QAAQ,SAAS,EAAG;AAAA,IAClC,aAAa,EAAE,MAAM,SAAS,SAAS,KAAM;AAAA,IAC7C,UAAU,EAAE,MAAM,QAAQ,UAAU,KAAM;AAAA,IAC1C,YAAY,EAAE,MAAM,QAAQ,UAAU,KAAM;AAAA,IAC5C,eAAe,EAAE,MAAM,QAAQ,SAAS,EAAG;AAAA,IAC3C,cAAc,EAAE,MAAM,QAAQ,SAAS,GAAI;AAAA,IAC3C,aAAa,EAAE,MAAM,QAAQ,SAAS,IAAI,UAAU,KAAM;AAAA,IAC1D,cAAc,EAAE,MAAM,QAAQ,UAAU,KAAM;AAAA,IAC9C,UAAU,EAAE,MAAM,QAAQ,SAAS,EAAG;AAAA,IACtC,iBAAiB,EAAE,MAAM,SAAU;AAAA,IACnC,WAAW,EAAE,MAAM,OAAQ;AAAA,EAC5B;AAAA,EACD,MAAM,SAAS;AACb,UAAM,QAAQ;AACd,UAAM,UAAU,MAAM;AACpB,UAAI,CAAC,MAAM,aAAa;AACtB,eAAO;AAAA,MACR;AACD,aAAO,MAAM,SAAS,MAAM,MAAM,UAAU,KAAK,MAAM,MAAM,WAAW;AAAA,IAC9E;AACI,UAAM,gBAAgB,MAAM;AAC1B,UAAI,aAAa;AACjB,UAAI,MAAM,YAAY,MAAM,WAAW,GAAG;AACxC,qBAAa,QAAQ,MAAM,kBAAkB,MAAM,oBAAoB,MAAM,qBAAqB,MAAM;AAAA,MACzG;AACD,aAAO;AAAA,IACb;AACI,QAAI,cAAc,MAAM,eAAe,IAAI,MAAM,eAAe;AAChE,QAAI,MAAM,eAAe,GAAG;AAC1B,oBAAc,MAAM,cAAc,IAAI,MAAM,cAAc;AAAA,IAC3D;AACD,UAAM,qBAAqB;AAAA,MACzB,MAAM,MAAM,gBAAgB,IAAI,MAAM,gBAAgB,MAAM;AAAA,IAClE;AACI,UAAM,aAAa;AAAA,MACjB,KAAK,KAAK,KAAK,IAAI,IAAI,MAAM,aAAa,eAAe,CAAC,CAAC;AAAA,IACjE;AACI,UAAM,iBAAiB;AAAA,MACrB,KAAK,KAAK,WAAW,QAAQ,mBAAmB,QAAQ,MAAM,UAAU;AAAA,IAC9E;AACI,UAAM,wBAAwB;AAAA,MAC5B,KAAK,KAAK,MAAM,eAAe,mBAAmB,QAAQ,MAAM,UAAU;AAAA,IAChF;AACI,gBAAY,MAAM;AAChB,UAAI,MAAM,OAAO,SAAS,MAAM,MAAM,SAAS,mBAAmB,SAAS,MAAM,OAAO,UAAU,MAAM,MAAM,UAAU,mBAAmB,OAAO;AAChJ,gBAAQ;AAAA,UACN;AAAA,UACA,MAAM;AAAA,UACN;AAAA,UACA,mBAAmB;AAAA,QAC7B;AAAA,MACO;AAAA,IACP,CAAK;AACD,WAAO,CAAC,MAAM,WAAW;AACvB,aAAO,QAAO,KAAM,aAAa,mBAAmB,OAAO;AAAA,QACzD,KAAK;AAAA,QACL,OAAO,eAAe;AAAA,UACpB,GAAG,QAAQ;AAAA,UACX,YAAY,CAAC,CAAC,QAAQ,YAAY,OAAO,cAAe;AAAA,UACxD,WAAW,QAAQ;AAAA,UACnB,aAAa,OAAO,QAAQ,aAAa,WAAW;AAAA,UACpD,kBAAkB,GAAG,eAAe;AAAA,UACpC,mBAAmB,GAAG,sBAAsB;AAAA,QACtD,CAAS;AAAA,QACD,iBAAiB,OAAO,CAAC,MAAM,OAAO,CAAC,IAAI,IAAI,SAAS,MAAM,mBAAmB,MAAM,gBAAgB,GAAG,IAAI;AAAA,MACtH,GAAS,MAAM,EAAE,KAAK,mBAAmB,IAAI,IAAI;AAAA,IACjD;AAAA,EACG;AACH;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAcK,MAAC,cAAc;AAAA,EAClB,QAAQ;AAAA,EACR,OAAO;AAAA,IACL,OAAO;AAAA,EACR;AAAA,EACD,MAAM,SAAS;AACb,UAAM,QAAQ;AACd,QAAI,eAAe,SAAS,CAAA,CAAE;AAC9B,QAAI,cAAc,SAAS,CAAA,CAAE;AAC7B,gBAAY,MAAM;AAChB,UAAI,MAAM,OAAO;AACf,YAAI,EAAE,MAAM,KAAK,OAAO,QAAQ,GAAG,OAAM,IAAK,MAAM;AACpD,qBAAa,OAAO;AACpB,qBAAa,MAAM;AACnB,oBAAY,QAAQ;AACpB,oBAAY,SAAS;AACrB,eAAO,OAAO,aAAa,MAAM;AAAA,MAClC;AAAA,IACP,CAAK;AACD,WAAO,CAAC,MAAM,WAAW;AACvB,aAAO,UAAS,GAAI,mBAAmB,OAAO;AAAA,QAC5C,OAAO,eAAe,MAAM,YAAY,CAAC;AAAA,MACjD,GAAS;AAAA,QACD,WAAW,KAAK,QAAQ,SAAS;AAAA,QACjCA,gBAAmB,OAAO,WAAW;AAAA,UACnC,2BAA2B;AAAA,UAC3B,kCAAkC;AAAA,UAClC,OAAO,MAAM,WAAW;AAAA,QACzB,GAAE,KAAK,MAAM,GAAG,MAAM,EAAE;AAAA,MAC1B,GAAE,CAAC;AAAA,IACV;AAAA,EACG;AACH;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAaK,MAAC,cAAc;AAAA,EAClB,QAAQ;AAAA,EACR,OAAO;AAAA,IACL,YAAY;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,eAAe;AAAA,MACb,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,eAAe;AAAA,MACb,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,KAAK;AAAA,MACH,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,OAAO;AAAA,EACR;AAAA,EACD,MAAM,SAAS;AACb,UAAM,QAAQ;AACd,UAAM,aAAa,SAAS,MAAM;AAChC,aAAO,MAAM,gBAAgB,SAAS;AAAA,IAC5C,CAAK;AACD,UAAM,gBAAgB,SAAS,MAAM;AACnC,aAAuD,MAAM,gBAAgB,SAAS;AAAA,IAC5F,CAAK;AACD,QAAI,eAAe,SAAS,CAAA,CAAE;AAC9B,QAAI,cAAc,SAAS,CAAA,CAAE;AAC7B,QAAI,yBAAyB,CAAC,CAAC,OAAO;AACtC,gBAAY,MAAM;AAChB,UAAI,MAAM,OAAO;AACf,YAAI,EAAE,MAAM,KAAK,OAAO,QAAQ,iBAAiB,iBAAiB,GAAG,WAAW,MAAM;AACtF,qBAAa,OAAO;AACpB,qBAAa,MAAM;AACnB,oBAAY,QAAQ;AACpB,oBAAY,SAAS;AACrB,eAAO,OAAO,aAAa,MAAM;AAAA,MAClC;AAAA,IACP,CAAK;AACD,WAAO,CAAC,MAAM,WAAW;AACvB,aAAO,UAAS,GAAI,mBAAmB,OAAO;AAAA,QAC5C,OAAO,eAAe,MAAM,YAAY,CAAC;AAAA,MACjD,GAAS;AAAA,QACD,MAAM,sBAAsB,IAAI,WAAW,KAAK,QAAQ,WAAW,EAAE,KAAK,EAAG,CAAA,IAAI,mBAAmB,IAAI,IAAI;AAAA,QAC5G,CAAC,CAAC,MAAM,OAAO,UAAW,GAAE,mBAAmB,OAAO,WAAW;AAAA,UAC/D,KAAK;AAAA,UACL,2BAA2B,MAAM;AAAA,UACjC,kCAAkC;AAAA,UAClC,8BAA8B,MAAM,UAAU;AAAA,UAC9C,4BAA4B,QAAQ;AAAA,UACpC,6BAA6B,MAAM,aAAa;AAAA,UAChD,OAAO,MAAM,WAAW;AAAA,UACxB,KAAK,MAAM;AAAA,QACrB,GAAW,KAAK,MAAM,GAAG,MAAM,IAAI,CAAC,2BAA2B,8BAA8B,4BAA4B,6BAA6B,KAAK,CAAC,KAAK,mBAAmB,IAAI,IAAI;AAAA,MACrL,GAAE,CAAC;AAAA,IACV;AAAA,EACG;AACH;AAiCA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmCA,MAAM,mBAAmB,CAAC,CAAC,OAAO;AAClC,MAAM,gBAAgB;AAAA,EACpB,YAAY,WAAW,SAAS,KAAK;AACnC,SAAK,aAAa;AAClB,SAAK,WAAW;AAChB,SAAK,OAAO;AACZ,SAAK,YAAY;AACjB,SAAK,QAAQ;AACb,SAAK,QAAQ;AACb,SAAK,cAAc;AACnB,SAAK,eAAe;AACpB,SAAK,YAAY;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA,EAID,OAAO;AACL,QAAI,KAAK,cAAc,IAAI;AACzB,WAAK,WAAW,KAAK,KAAK,SAAS;AAAA,IACpC;AACD,SAAK,YAAY,KAAK,WAAW,KAAK,KAAK,UAAU,KAAK,aAAa,KAAK,cAAc,KAAK,WAAW,KAAK,OAAO,KAAK,KAAK;AAAA,EACjI;AAAA;AAAA;AAAA;AAAA,EAID,QAAQ;AACN,QAAI,KAAK,cAAc,IAAI;AACzB,WAAK,WAAW,MAAM,KAAK,SAAS;AAAA,IACrC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAID,SAAS;AACP,QAAI,KAAK,cAAc,IAAI;AACzB,WAAK,WAAW,OAAO,KAAK,SAAS;AAAA,IACtC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAID,OAAO;AACL,QAAI,KAAK,cAAc,IAAI;AACzB,WAAK,WAAW,KAAK,KAAK,SAAS;AACnC,WAAK,YAAY;AAAA,IAClB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAKD,QAAQ,MAAM;AACZ,SAAK,QAAQ;AACb,QAAI,KAAK,cAAc,IAAI;AACzB,WAAK,WAAW,QAAQ,KAAK,WAAW,KAAK,KAAK;AAAA,IACnD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,UAAU,YAAY,aAAa;AACjC,SAAK,cAAc;AACnB,SAAK,eAAe;AACpB,QAAI,KAAK,cAAc,IAAI;AACzB,WAAK,WAAW,UAAU,KAAK,WAAW,KAAK,aAAa,KAAK,YAAY;AAAA,IAC9E;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAKD,QAAQ,MAAM;AACZ,SAAK,QAAQ;AACb,QAAI,KAAK,cAAc,IAAI;AACzB,WAAK,WAAW,QAAQ,KAAK,WAAW,KAAK,KAAK;AAAA,IACnD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAKD,YAAY,UAAU;AACpB,SAAK,YAAY;AACjB,QAAI,KAAK,cAAc,IAAI;AACzB,WAAK,WAAW,YAAY,KAAK,WAAW,KAAK,SAAS;AAAA,IAC3D;AAAA,EACF;AACH;AACA,MAAM,aAAa;AAAA;AAAA;AAAA;AAAA,EAIjB,YAAY,KAAK;AACf,QAAI,CAAC;AACH;AACF,SAAK,aAAa,IAAI,OAAO,UAAU,GAAG;AAC1C,SAAK,cAAc;AACnB,SAAK,eAA+B,oBAAI;EACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQD,QAAQ,KAAK,YAAY,UAAU,UAAU;AAC3C,QAAI,CAAC,kBAAkB;AACrB,eAAS,IAAI,IAAI;AACjB,cAAQ,IAAI,yBAAyB;AACrC;AAAA,IACD;AACD,QAAI;AACJ,QAAI,OAAO,QAAQ;AACjB,gBAAU,IAAI,OAAO,OAAO,IAAI,OAAO,GAAG,EAAE;AAAA,IAClD,OAAW;AACL,gBAAU;AAAA,IACX;AACD,QAAI,KAAK,YAAY,OAAO,GAAG;AAC7B,WAAK,YAAY,OAAO,EAAE;AAC1B,YAAM,aAAa,IAAI,gBAAgB,KAAK,YAAY,KAAK,YAAY,OAAO,EAAE,OAAO;AACzF,WAAK,aAAa,IAAI,UAAU;AAChC,eAAS,GAAG,UAAU;AAAA,IAC5B,OAAW;AACL,WAAK,WAAW,KAAK,SAAS,YAAY,UAAU,CAAC,UAAU,UAAU;AACvE,YAAI,UAAU,GAAG;AACf,eAAK,YAAY,OAAO,IAAI;AAAA,YAC1B,SAAS;AAAA,YACT,YAAY;AAAA,UACxB;AACU,gBAAM,aAAa,IAAI,gBAAgB,KAAK,YAAY,UAAU,OAAO;AACzE,eAAK,aAAa,IAAI,UAAU;AAChC,mBAAS,OAAO,UAAU;AAAA,QACpC,OAAe;AACL,mBAAS,OAAO,IAAI;AACpB,kBAAQ,MAAM,QAAQ,gBAAgB;AAAA,QACvC;AAAA,MACT,CAAO;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAKD,QAAQ,YAAY;AAClB,QAAI,CAAC;AACH;AACF,eAAW,KAAI;AACf,SAAK,aAAa,OAAO,UAAU;AACnC,QAAI,KAAK,YAAY,WAAW,IAAI,GAAG;AACrC,YAAM,OAAO,KAAK,YAAY,WAAW,IAAI;AAC7C,WAAK;AACL,UAAI,KAAK,cAAc,GAAG;AACxB,aAAK,WAAW,OAAO,KAAK,OAAO;AAAA,MACpC;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAID,UAAU;AACR,QAAI,CAAC;AACH;AACF,SAAK,WAAW;EACjB;AAAA;AAAA;AAAA;AAAA,EAID,YAAY;AACV,QAAI,CAAC;AACH;AACF,SAAK,WAAW;EACjB;AAAA;AAAA;AAAA;AAAA,EAID,aAAa;AACX,QAAI,CAAC;AACH;AACF,SAAK,WAAW;EACjB;AACH;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAGK,MAAC,cAAc;AAAA,EAClB,QAAQ;AAAA,EACR,OAAO;AAAA,IACL,OAAO;AAAA,IACP,eAAe;AAAA,MACb,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,WAAW;AAAA,MACT,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,aAAa;AAAA,IACb,WAAW;AAAA,IACX,eAAe;AAAA,MACb,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,EACF;AAAA,EACD,MAAM,SAAS;AACb,UAAM,QAAQ;AACd,UAAM,oBAAoB,SAAS,MAAM;AACvC,cAAQ,MAAM,eAAa;AAAA,QACzB,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO;AAAA,QACT;AAAA,QACA,KAAK;AACH,iBAAO;AAAA,MACV;AAAA,IACP,CAAK;AACD,WAAO,CAAC,MAAM,WAAW;AACvB,aAAO,UAAS,GAAI,YAAY,MAAM,WAAW,GAAG;AAAA,QAClD,OAAO,eAAe;AAAA,UACpB,GAAG,MAAM;AAAA,UACT,eAAe;AAAA,UACf,YAAY,MAAM,iBAAiB;AAAA,QAC7C,CAAS;AAAA,MACT,GAAS;AAAA,QACD,SAAS,QAAQ,MAAM;AAAA,UACrBA,gBAAmB,OAAO;AAAA,YACxB,OAAO,eAAe;AAAA,cACpB,OAAO,MAAM,MAAM;AAAA,cACnB,cAAc,QAAQ,cAAc,IAAI;AAAA,cACxC,kBAAkB,QAAQ;AAAA,cAC1B,uBAAuB,QAAQ;AAAA,YAC7C,CAAa;AAAA,UACb,GAAa;AAAA,YACD,WAAW,KAAK,QAAQ,SAAS;AAAA,UAClC,GAAE,CAAC;AAAA,QACd,CAAS;AAAA,QACD,GAAG;AAAA,MACX,GAAS,GAAG,CAAC,OAAO,CAAC;AAAA,IACrB;AAAA,EACG;AACH;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmBK,MAAC,cAAc;AAAA,EAClB,QAAQ;AAAA,EACR,OAAO;AAAA,IACL,OAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS,MAAM;AACb,eAAO;MACR;AAAA,IACF;AAAA,IACD,eAAe,EAAE,MAAM,QAAQ,UAAU,KAAM;AAAA,IAC/C,eAAe,EAAE,MAAM,QAAQ,UAAU,KAAM;AAAA,IAC/C,MAAM,EAAE,MAAM,OAAO,UAAU,MAAM,SAAS,MAAM,IAAI,CAAC,EAAE,OAAO,IAAI,OAAO,GAAE,CAAE,CAAC,EAAG;AAAA,IACrF,UAAU,EAAE,MAAM,QAAQ,UAAU,MAAM,SAAS,GAAI;AAAA,IACvD,WAAW,EAAE,MAAM,QAAQ,SAAS,UAAW;AAAA,IAC/C,QAAQ,EAAE,MAAM,QAAQ,UAAU,KAAM;AAAA,IACxC,cAAc,EAAE,MAAM,QAAQ,UAAU,KAAM;AAAA,EAC/C;AAAA,EACD,MAAM,SAAS;AACb,UAAM,QAAQ;AACd,UAAM,QAAQ,MAAM,KAAK,MAAM,CAAC,MAAM,UAAU;AAC9C,UAAI,KAAK,QAAQ,KAAK,KAAK,SAAS,KAAK;AACvC,eAAO;AAAA,MACf,OAAa;AACL,eAAO;AAAA,MACR;AAAA,IACP,CAAK;AACD,UAAM,OAAO,WAAW,MAAM,IAAI;AAClC,UAAM,MAAM,MAAM,CAAC,GAAG,MAAM;AAC1B,YAAM,KAAK,QAAQ;AAAA,IACzB,CAAK;AACD,UAAM,QAAQ,EAAE,IAAI,GAAE;AACtB,UAAM,UAAU,MAAM;AACpB,UAAI,CAAC,MAAM,KAAK,OAAO;AACrB,eAAO;AAAA,MACf,WAAiB,CAAC,OAAO;AACjB,gBAAQ,KAAK,0BAA0B;AACvC,eAAO;AAAA,MACR;AACD,aAAO,MAAM,SAAS,MAAM,WAAW;AAAA,IAC7C;AACI,QAAI,WAAW,WAAW,IAAI;AAC9B,aAAS,QAAQ,KAAK,MAAM,IAAI,CAAC,SAAS;AACxC,aAAO;AAAA,QACL,GAAG;AAAA,QACH,QAAQ;AAAA,QACR,OAAO;AAAA,MACf;AAAA,IACA,CAAK;AACD,UAAM,mBAAmB,MAAM;AAC7B,UAAI,aAAa;AACjB,aAAO;AAAA,IACb;AACI,UAAM,kBAAkB,KAAK,MAAM,OAAO,CAAC,aAAa,eAAe;AACrE,aAAO,YAAY,MAAM,SAAS,WAAW,MAAM,SAAS,cAAc;AAAA,IAC3E,GAAE,KAAK,MAAM,CAAC,CAAC;AAChB,QAAI,YAAY,WAAW,IAAI;AAC/B,cAAU,QAAQ,aAAa,gBAAgB,OAAO,EAAE,UAAU,MAAM,SAAQ,CAAE;AAClF,UAAM,aAAa,MAAM,KAAK,IAAI,CAAC,MAAM,UAAU;AACjD,WAAK,MAAM,KAAK,MAAM,SAAS,MAAM,gBAAgB,KAAK,IAAI,SAAS,MAAM,MAAM,KAAK,SAAS,MAAM,KAAK,GAAG;AAC/G,WAAK,OAAO,KAAK,MAAM,SAAS,MAAM,gBAAgB,KAAK,IAAI,SAAS,MAAM,MAAM,KAAK,SAAS,MAAM,KAAK,GAAG;AAChH,aAAO;AAAA,QACL,GAAG;AAAA,MACX;AAAA,IACA,CAAK;AACD,UAAM,MAAM,KAAK,IAAI,KAAK,EAAE;AAC5B,UAAM,MAAM,KAAK,IAAI,KAAK,EAAE;AAC5B,UAAM,UAAU,WAAW,IAAI,CAAC,MAAM,UAAU;AAC9C,YAAM,KAAK;AACX,YAAM,KAAK;AACX,YAAM,IAAI,KAAK;AACf,YAAM,IAAI,KAAK;AACf,YAAM,OAAO,OAAO,IAAI,MAAM,OAAO,IAAI,MAAM;AAC/C,YAAM,OAAO,OAAO,IAAI,MAAM,OAAO,IAAI,MAAM;AAC/C,aAAO;AAAA,QACL,GAAG;AAAA,QACH,KAAK;AAAA,QACL,MAAM;AAAA,MACd;AAAA,IACA,CAAK;AACD,UAAM,OAAO,QAAQ,QAAQ,SAAS,CAAC,EAAE;AACzC,aAAS,IAAI,QAAQ,SAAS,GAAG,KAAK,GAAG,KAAK;AAC5C,cAAQ,CAAC,EAAE,QAAQ,QAAQ,IAAI,CAAC,EAAE;AAAA,IACnC;AACD,YAAQ,CAAC,EAAE,QAAQ;AACnB,UAAM,QAAQ,QAAQ,IAAI,CAAC,MAAM,UAAU;AACzC,YAAM,QAAQ,QAAQ,QAAQ,SAAS,CAAC,EAAE;AAC1C,eAAS,IAAI,KAAK,QAAQ,QAAQ,KAAK,QAAQ,QAAQ,QAAQ,SAAS,CAAC,EAAE;AAC3E,UAAI,SAAS,KAAK,SAAS,MAAM,KAAK,SAAS,GAAG;AAChD,aAAK,YAAY,UAAU,KAAK,QAAQ,UAAU,QAAQ;AAC1D,YAAI,SAAS,MAAM,KAAK,SAAS,GAAG;AAClC,eAAK,OAAO,MAAM;AAAA,QACnB;AAAA,MACT,WAAiB,KAAK,OAAO,KAAK,KAAK,MAAM,GAAG;AACxC,aAAK,YAAY;AAAA,MACzB,WAAiB,KAAK,OAAO,GAAG;AACxB,aAAK,YAAY;AACjB,aAAK,QAAQ,UAAU;AAAA,MACxB;AACD,aAAO;AAAA,QACL,GAAG;AAAA,QACH,WAAW,KAAK;AAAA,MACxB;AAAA,IACA,CAAK;AACD,cAAU,MAAM;AACd,UAAI,MAAM,KAAK,MAAM,UAAU,GAAG;AAChC,gBAAQ,MAAM,YAAY;AAAA,MAClC,OAAa;AACL,aAAK,QAAQ,SAAS;AACtB,cAAM,KAAK,WAAW,MAAM;AAC1B,cAAI,MAAM,KAAK,OAAO;AACpB,iBAAK,QAAQ,MAAM,KAAK,MAAM,IAAI,CAAC,MAAM,UAAU;AACjD,oBAAM,YAAY,UAAU,IAAI,MAAM,KAAK,SAAS,IAAI,QAAQ;AAChE,oBAAM,YAAY,MAAM,KAAK,MAAM,SAAS,EAAE;AAC9C,qBAAO;AAAA,gBACL,GAAG;AAAA,gBACH,QAAQ;AAAA,cACxB;AAAA,YACA,CAAa;AAAA,UACF;AAAA,QACF,GAAE,GAAG;AAAA,MACP;AAAA,IACP,CAAK;AACD,mBAAe,MAAM;AACnB,YAAM,KAAK,WAAW,MAAM;AAC1B,YAAI,MAAM,KAAK,OAAO;AACpB,eAAK,QAAQ,MAAM,KAAK,MAAM,IAAI,CAAC,MAAM,UAAU;AACjD,kBAAM,YAAY,UAAU,IAAI,MAAM,KAAK,SAAS,IAAI,QAAQ;AAChE,kBAAM,YAAY,MAAM,KAAK,MAAM,SAAS,EAAE;AAC9C,mBAAO;AAAA,cACL,GAAG;AAAA,cACH,QAAQ;AAAA,YACtB;AAAA,UACA,CAAW;AAAA,QACF;AAAA,MACF,GAAE,GAAG;AAAA,IACZ,CAAK;AACD,oBAAgB,MAAM;AACpB,UAAI,MAAM,KAAK,GAAG;AAChB,qBAAa,MAAM,EAAE;AACrB,cAAM,KAAK;AAAA,MACZ;AAAA,IACP,CAAK;AACD,WAAO,CAAC,MAAM,WAAW;AACvB,aAAO,QAAO,KAAM,aAAa,mBAAmB,OAAO;AAAA,QACzD,KAAK;AAAA,QACL,OAAO,eAAe,EAAE,KAAK,MAAM,MAAM,KAAK,MAAM,MAAM,MAAM,KAAI,CAAE;AAAA,MAC9E,GAAS;AAAA,QACDA,gBAAmB,OAAO;AAAA,UACxB,OAAO,eAAe,EAAE,WAAW,yBAAwB,CAAE;AAAA,QACvE,GAAW;AAAA,WACA,UAAU,IAAI,GAAG,mBAAmB,UAAU,MAAM,WAAW,MAAM,IAAI,GAAG,CAAC,MAAM,UAAU;AAC5F,mBAAO,UAAS,GAAI,mBAAmB,OAAO;AAAA,cAC5C,KAAK,GAAG;AAAA,cACR,OAAO,eAAe;AAAA,gBACpB,OAAO,MAAM;AAAA,gBACb,QAAQ,MAAM,SAAS,KAAK,IAAI,KAAK,MAAM,KAAK,MAAM,MAAM,KAAK,UAAU,GAAG;AAAA,gBAC9E,WAAW,kBAAkB,CAAC,SAAS,MAAM,MAAM,KAAK,sBAAsB,KAAK,MAAM,MAAM,KAAK;AAAA,gBACpG,iBAAiB;AAAA,gBACjB,iBAAiB,MAAM;AAAA,cACvC,CAAe;AAAA,YACf,GAAe;AAAA,cACDA,gBAAmB,OAAO;AAAA,gBACxB,OAAO,eAAe;AAAA,kBACpB,OAAO,KAAK,KAAK,MAAM,SAAS,KAAK,QAAQ,GAAG;AAAA,kBAChD,QAAQ,KAAK,KAAK,MAAM,SAAS,KAAK,IAAI,KAAK,MAAM,KAAK,MAAM,MAAM,KAAK,UAAU,GAAG,IAAI,KAAK,SAAS,GAAG;AAAA,kBAC7G,iBAAiB,MAAM;AAAA,kBACvB,YAAY,iBAAkB;AAAA,gBAChD,CAAiB;AAAA,cACjB,GAAiB,MAAM,CAAC;AAAA,YACX,GAAE,CAAC;AAAA,UACL,CAAA,GAAG,GAAG;AAAA,QACR,GAAE,CAAC;AAAA,SACH,UAAU,IAAI,GAAG,mBAAmB,UAAU,MAAM,WAAW,MAAM,KAAK,GAAG,CAAC,MAAM,UAAU;AAC7F,iBAAO,UAAS,GAAI,mBAAmB,OAAO;AAAA,YAC5C,KAAK,GAAG;AAAA,YACR,OAAO,eAAe;AAAA,cACpB,MAAM,KAAK;AAAA,cACX,KAAK,KAAK;AAAA,cACV,OAAO,MAAM,SAAS;AAAA,cACtB,QAAQ,MAAM,WAAW;AAAA,cACzB,OAAO,MAAM;AAAA,cACb,UAAU,MAAM;AAAA,cAChB,WAAW,KAAK;AAAA,YAC9B,CAAa;AAAA,UACF,GAAE,gBAAgB,KAAK,KAAK,GAAG,CAAC;AAAA,QAClC,CAAA,GAAG,GAAG;AAAA,MACR,GAAE,CAAC,KAAK,mBAAmB,IAAI,IAAI;AAAA,IAC1C;AAAA,EACG;AACH;AAEA;AACA;AACA;AACK,MAAC,iBAAiB;AAAA,EACrB,QAAQ,MAAM,WAAW,KAAK;AAAA,EAC9B,WAAW,MAAM,WAAW,KAAK;AACnC;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0CK,MAAC,cAAc;AAAA,EAClB,QAAQ;AAAA,EACR,OAAO;AAAA,IACL,OAAO;AAAA,MACL,MAAM;AAAA,IACP;AAAA,IACD,QAAQ;AAAA,MACN,MAAM;AAAA,IACP;AAAA,IACD,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,KAAK;AAAA,MACH,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,EACF;AAAA,EACD,MAAM,SAAS,EAAE,UAAU;AACzB,UAAM,QAAQ;AACd,UAAMG,OAAM;AACZ,QAAI,aAAa,IAAI,QAAQ,WAAW,MAAM,QAAQ,WAAW,KAAK,IAAI;AAC1E,QAAI,SAAS,QAAQ,WAAW,IAAI,IAAI,QAAQ,SAAS,YAAY,IAAI,CAAC;AAC1E,gBAAY,MAAM;AAChB,UAAI,YAAY;AACd,mBAAW,aAAa,CAAC,CAAC,MAAM,MAAM;AAAA,MACvC;AAAA,IACP,CAAK;AACD,oBAAgB,MAAM;AACpB,UAAI,SAAS,GAAG;AACd,gBAAQ,WAAW,OAAO,MAAM;AAChC,iBAAS;AAAA,MACV;AAAA,IACP,CAAK;AACD,UAAM,sBAAsB;AAAA,MAC1B,WAAW;AAAA,MACX,eAAe;AAAA,MACf,OAAO;AAAA,MACP,WAAW;AAAA,MACX,SAAS;AAAA,IACf;AACI,UAAM,YAAY,CAAC,GAAG,GAAG,WAAW,cAAc;AAAA,MAChD,MAAM,eAAe;AAAA,IAC3B,GAAO,eAAe,CAAA,MAAO;AACvB,UAAI,YAAY;AACd,cAAM,SAAS,OAAO,OAAO,CAAE,GAAE,mBAAmB;AACpD,cAAM,IAAI,OAAO,OAAO,QAAQ,YAAY;AAC5C,eAAO,WAAW,oBAAoB,GAAG,GAAG,WAAW,aAAa,CAAC;AAAA,MAC7E,OAAa;AACL,gBAAQ,KAAKA,MAAK,qCAAqC;AAAA,MACxD;AAAA,IACP;AACI,UAAM,eAAe,CAAC,OAAO;AAC3B,UAAI,YAAY;AACd,mBAAW,aAAa,EAAE;AAAA,MAClC,OAAa;AACL,gBAAQ,KAAKA,MAAK,uCAAuC;AAAA,MAC1D;AAAA,IACP;AACI,WAAO;AAAA,MACL;AAAA,MACA;AAAA,IACN,CAAK;AACD,WAAO,CAAC,MAAM,WAAW;AACvB,aAAO,UAAS,GAAI,mBAAmB,OAAO;AAAA,QAC5C,OAAO,eAAe;AAAA,UACpB,MAAM,QAAQ;AAAA,UACd,KAAK,QAAQ;AAAA,UACb,OAAO,QAAQ;AAAA,UACf,QAAQ,QAAQ;AAAA,QAC1B,CAAS;AAAA,QACD,yBAAyB,MAAM,MAAM;AAAA,MAC7C,GAAS;AAAA,QACD,WAAW,KAAK,QAAQ,SAAS;AAAA,MACzC,GAAS,IAAI,CAAC,uBAAuB,CAAC;AAAA,IACtC;AAAA,EACG;AACH;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA,IAAI,SAAyB,oBAAI;AACjC,MAAM,kBAAkB,CAAC,WAAW,UAAU;AAC5C,MAAI,QAAQ,GAAG,YAAY;AAC3B,MAAI,OAAO,QAAQ,GAAG;AACpB,QAAI,IAAI,IAAI,YAAY,WAAW,KAAK;AACxC,MAAE,MAAK;AACP,WAAO,IAAI,OAAO,CAAC;AACnB,WAAO;AAAA,EACX,OAAS;AACL,QAAI,WAAW;AACf,aAAS,OAAO,OAAO,QAAQ;AAC7B,UAAI,OAAO,OAAO;AAChB,mBAAW;AACX,eAAO,IAAI,GAAG,EAAE,MAAK;AACrB,eAAO,OAAO,IAAI,KAAK;AAAA,MACxB;AAAA,IACF;AACD,QAAI,CAAC,UAAU;AACb,UAAI,IAAI,IAAI,YAAY,WAAW,KAAK;AACxC,QAAE,MAAK;AACP,aAAO,IAAI,OAAO,CAAC;AACnB,aAAO;AAAA,IACR;AAAA,EACF;AACH;AACA,MAAM,YAAY;AAAA,EAChB,YAAY,WAAW,OAAO;AAC5B,SAAK,MAAM,GAAG,YAAY;AAC1B,QAAI,YAAY,GAAG;AACjB,kBAAY;AAAA,IACb;AACD,SAAK,SAAS;AAAA,MACZ,OAAO;AAAA,MACP,QAAQ,YAAY;AAAA,IAC1B;AACI,SAAK,QAAQ;AACb,SAAK,eAAe,KAAK,MAAM,YAAY,CAAC;AAC5C,SAAK,gBAAgB,iBAAiB,cAAc,KAAK,OAAO,OAAO,KAAK,OAAO,MAAM;AACzF,SAAK,cAAc,SAAS,IAAI,KAAK,eAAe,GAAG,GAAG,KAAK,eAAe,GAAG,WAAW,KAAK;AACjG,SAAK,WAAW,KAAK,cAAc,OAAM;AAAA,EAC1C;AAAA,EACD,cAAc;AACZ,WAAO,KAAK;AAAA,EACb;AAAA,EACD,QAAQ;AACN,SAAK;AAAA,EACN;AAAA,EACD,QAAQ;AACN,SAAK;AACL,QAAI,KAAK,UAAU,GAAG;AACpB,uBAAiB,cAAc,KAAK,QAAQ;AAC5C,aAAO,OAAO,KAAK,GAAG;AAAA,IACvB;AAAA,EACF;AACH;AAOA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoBA,MAAM,cAAc;AAAA,EAClB,QAAQ;AAAA,EACR,OAAO;AAAA,IACL,UAAU,EAAE,MAAM,QAAQ,SAAS,KAAM;AAAA,IACzC,QAAQ,EAAE,MAAM,QAAQ,SAAS,KAAM;AAAA,IACvC,WAAW,EAAE,MAAM,QAAQ,SAAS,KAAM;AAAA,IAC1C,QAAQ,EAAE,MAAM,OAAQ;AAAA,IACxB,iBAAiB,EAAE,MAAM,OAAQ;AAAA,IACjC,iBAAiB,EAAE,MAAM,QAAQ,SAAS,KAAM;AAAA,IAChD,cAAc,EAAE,MAAM,OAAQ;AAAA,EAC/B;AAAA,EACD,MAAM,SAAS;AACb,UAAM,QAAQ;AACd,QAAI,SAAS,WAAW,IAAI;AAC5B,UAAM,cAAc,CAAC,QAAQ,WAAW;AACtC,YAAM,IAAI,KAAK,IAAI,OAAO,IAAI,OAAO,CAAC;AACtC,YAAMJ,KAAI,KAAK,IAAI,OAAO,IAAI,OAAO,CAAC;AACtC,aAAO,KAAK,KAAK,IAAI,IAAIA,KAAIA,EAAC;AAAA,IACpC;AACI,UAAM,QAAQ,YAAY,MAAM,UAAU,MAAM,MAAM;AACtD,QAAI,QAAQ,MAAM,KAAK,KAAK,KAAK,MAAM,MAAM,OAAO,IAAI,MAAM,SAAS,KAAK,KAAK;AACjF,QAAI,MAAM,OAAO,IAAI,MAAM,SAAS,GAAG;AACrC,cAAQ,MAAM;AAAA,IACf;AACD,UAAM,UAAU,MAAM;AACpB,UAAI,MAAM,UAAU,WAAW;AAC7B,eAAO,QAAQ;AAAA,MAChB;AAAA,IACP;AACI,QAAI,gBAAgB;AACpB,QAAI,WAAW;AACf,QAAI,MAAM,iBAAiB;AACzB,sBAAgB,gBAAgB,MAAM,WAAW,MAAM,eAAe;AACtE,iBAAW,cAAc;IAC1B;AACD,oBAAgB,MAAM;AACpB,UAAI,MAAM,iBAAiB;AACzB,sBAAc,MAAK;AAAA,MACpB;AAAA,IACP,CAAK;AACD,WAAO,CAAC,MAAM,WAAW;AACvB,aAAO,MAAM,MAAM,KAAK,UAAS,GAAI,mBAAmB,OAAO;AAAA,QAC7D,KAAK;AAAA,QACL,OAAO,eAAe;AAAA,UACpB,MAAM,MAAM,SAAS;AAAA,UACrB,KAAK,MAAM,SAAS,IAAI,QAAQ,YAAY;AAAA,UAC5C,OAAO,MAAM,KAAK;AAAA,UAClB,QAAQ,MAAM,YAAY;AAAA,UAC1B,cAAc,MAAM;AAAA,UACpB,WAAW,mBAAmB,MAAM,KAAK;AAAA,UACzC,iBAAiB;AAAA,UACjB,iBAAiB,MAAM,kBAAkB,qBAAqB,MAAM,QAAQ,MAAM,MAAM;AAAA,UACxF,WAAW,MAAM,SAAS,GAAG,MAAM,0BAA0B;AAAA,QACvE,CAAS;AAAA,QACD,gBAAgB;AAAA,MACxB,GAAS,MAAM,EAAE,KAAK,mBAAmB,IAAI,IAAI;AAAA,IACjD;AAAA,EACG;AACH;AACA,MAAM,qBAAqB,EAAE,KAAK,EAAE,mBAAmB,+DAA+D,oBAAoB,+DAA8D;AACxM,OAAO,QAAQ,IAAI,mBAAmB,kBAAkB;AACnD,MAAC,UAA0B,4BAAY,aAAa,CAAC,CAAC,aAAa,iBAAiB,CAAC,CAAC;AAE3F;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiBA,MAAM,cAAc;AAAA,EAClB,QAAQ;AAAA,EACR,OAAO;AAAA,IACL,gBAAgB,EAAE,MAAM,QAAQ,SAAS,KAAM;AAAA,IAC/C,QAAQ,EAAE,MAAM,QAAQ,SAAS,KAAM;AAAA,IACvC,QAAQ,EAAE,MAAM,QAAQ,SAAS,KAAM;AAAA,IACvC,eAAe,EAAE,MAAM,QAAQ,SAAS,EAAG;AAAA,IAC3C,WAAW,EAAE,MAAM,QAAQ,SAAS,EAAG;AAAA,EACxC;AAAA,EACD,MAAM,SAAS;AACb,UAAM,QAAQ;AACd,QAAI,WAAW,WAAW,EAAE;AAC5B,QAAI,YAAY,iBAAiB;AAAA,MAC/B,IAAI,MAAM;AAAA,MACV,IAAI,MAAM;AAAA,IAChB;AACI,QAAI,aAAa,UAAU;AAC3B,eAAW,MAAM,GAAG,CAAC,MAAM,QAAQ,IAAI,MAAM,QAAQ,MAAM,QAAQ,GAAG,GAAG;AACzE,eAAW,MAAK;AAChB,eAAW,KAAK,MAAM,OAAO,KAAK;AAClC,aAAS,QAAQ,UAAU;AAC3B,QAAI,UAAU,WAAW,CAAC;AAC1B,QAAI,YAAY,WAAW,CAAC;AAC5B,UAAM,QAAQ,MAAM;AAClB,gBAAU,QAAQ,EAAE,MAAM,MAAM,OAAO,aAAa;AACpD,cAAQ,QAAQ,MAAM,OAAO,aAAa;AAAA,IAChD;AACI;AACA,UAAM,OAAO,CAAC,GAAG,MAAM;AACrB;IACN,CAAK;AACD,oBAAgB,MAAM;AACpB,uBAAiB,cAAc,SAAS,KAAK;AAAA,IACnD,CAAK;AACD,WAAO,CAAC,MAAM,WAAW;AACvB,aAAO,UAAS,GAAI,mBAAmB,OAAO;AAAA,QAC5C,OAAO,eAAe;AAAA,UACpB,OAAO,MAAM;AAAA,UACb,QAAQ,MAAM;AAAA,UACd,WAAW,kBAAkB,MAAM,OAAO;AAAA,UAC1C,iBAAiB;AAAA,UACjB,YAAY,aAAa,MAAM;AAAA,UAC/B,MAAM,MAAM,eAAe,IAAI;AAAA,UAC/B,KAAK,MAAM,eAAe,IAAI;AAAA,QACxC,CAAS;AAAA,MACT,GAAS;AAAA,QACDC,gBAAmB,OAAO;AAAA,UACxB,OAAO,eAAe;AAAA,YACpB,OAAO,MAAM;AAAA,YACb,QAAQ,MAAM,SAAS;AAAA,YACvB,KAAK,MAAM,SAAS;AAAA,YACpB,MAAM;AAAA,YACN,WAAW,kBAAkB,MAAM,OAAO;AAAA,YAC1C,iBAAiB;AAAA,YACjB,UAAU;AAAA,YACV,YAAY,aAAa,MAAM;AAAA,UAC3C,CAAW;AAAA,QACX,GAAW;AAAA,UACDA,gBAAmB,OAAO;AAAA,YACxB,OAAO,eAAe;AAAA,cACpB,OAAO,MAAM;AAAA,cACb,QAAQ,MAAM;AAAA,cACd,iBAAiB,qBAAqB,MAAM,QAAQ;AAAA,cACpD,WAAW,kBAAkB,MAAM,SAAS;AAAA,cAC5C,iBAAiB;AAAA,cACjB,YAAY,aAAa,MAAM,gBAAgB,MAAM;AAAA,YACnE,CAAa;AAAA,UACb,GAAa,MAAM,CAAC;AAAA,QACX,GAAE,CAAC;AAAA,QACJA,gBAAmB,OAAO;AAAA,UACxB,OAAO,eAAe;AAAA,YACpB,OAAO,MAAM;AAAA,YACb,QAAQ,MAAM,SAAS;AAAA,YACvB,KAAK,MAAM,SAAS;AAAA,YACpB,MAAM;AAAA,YACN,UAAU;AAAA,UACtB,CAAW;AAAA,QACX,GAAW;AAAA,UACDA,gBAAmB,OAAO;AAAA,YACxB,OAAO,eAAe;AAAA,cACpB,OAAO,MAAM;AAAA,cACb,QAAQ,MAAM;AAAA,cACd,iBAAiB,qBAAqB,MAAM,QAAQ;AAAA,cACpD,WAAW,kBAAkB,MAAM,SAAS;AAAA,cAC5C,iBAAiB;AAAA,cACjB,YAAY,aAAa,MAAM,gBAAgB,MAAM;AAAA,YACnE,CAAa;AAAA,UACb,GAAa,MAAM,CAAC;AAAA,QACX,GAAE,CAAC;AAAA,MACL,GAAE,CAAC;AAAA,IACV;AAAA,EACG;AACH;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiBK,MAAC,cAAc;AAAA,EAClB,QAAQ;AAAA,EACR,OAAO;AAAA,IACL,gBAAgB,EAAE,MAAM,QAAQ,UAAU,KAAM;AAAA,IAChD,MAAM,EAAE,MAAM,OAAO,UAAU,KAAM;AAAA,IACrC,QAAQ,EAAE,MAAM,QAAQ,UAAU,KAAM;AAAA,IACxC,eAAe,EAAE,MAAM,QAAQ,SAAS,EAAG;AAAA,EAC5C;AAAA,EACD,MAAM,SAAS;AACb,UAAM,QAAQ;AACd,QAAI,SAAS,MAAM;AACnB,QAAI,kBAAkB,CAAA;AACtB,QAAI,iBAAiB,CAAA;AACrB,WAAO,QAAQ,CAAC,MAAM,UAAU;AAC9B,sBAAgB,KAAK,KAAK,OAAO;AACjC,qBAAe,KAAK,CAAC;AAAA,IAC3B,CAAK;AACD,UAAM,YAAY,CAAC,SAAS;AAC1B,UAAI,eAAe;AACnB,WAAK,QAAQ,CAAC,SAAS;AACrB,YAAI,CAAC,KAAK,eAAe,SAAS,GAAG;AACnC,kBAAQ,MAAM,kBAAkB;AAAA,QACjC;AACD,YAAI,KAAK,UAAU,KAAK,KAAK,UAAU,KAAK;AAC1C,kBAAQ,MAAM,2BAA2B;AAAA,QAC1C;AACD,wBAAgB,KAAK;AAAA,MAC7B,CAAO;AACD,UAAI,eAAe,MAAM,eAAe,KAAK;AAC3C,gBAAQ,MAAM,sBAAsB;AAAA,MACrC;AACD,aAAO;AAAA,IACb;AACI,cAAU,MAAM,IAAI;AACpB,QAAI,YAAY,SAAS,CAAA,CAAE;AAC3B,UAAM,aAAa,CAAC,SAAS;AAC3B,WAAK,QAAQ,CAAC,MAAM,UAAU;AAC5B,YAAI,KAAK,UAAU,gBAAgB,KAAK,GAAG;AACzC,yBAAe,KAAK,IAAI;AAAA,QACzB,WAAU,KAAK,UAAU,gBAAgB,KAAK,GAAG;AAChD,yBAAe,KAAK,IAAI;AAAA,QAClC,OAAe;AACL,yBAAe,KAAK,IAAI;AAAA,QACzB;AACD,aAAK,SAAS,KAAK,UAAU,MAAM,KAAK,QAAQ,CAAC;AACjD,YAAI,SAAS,GAAG;AACd,oBAAU,KAAK;AAAA,YACb,YAAY,OAAO,CAAC,EAAE,QAAQ,CAAC;AAAA,YAC/B,YAAY,OAAO,KAAK,UAAU,MAAM,GAAG,EAAE,QAAQ,CAAC;AAAA,YACtD,OAAO,KAAK;AAAA,YACZ;AAAA,YACA,WAAW,eAAe,CAAC;AAAA,UACvC,CAAW;AAAA,QACX,OAAe;AACL,oBAAU,KAAK;AAAA,YACb,aAAa,OAAO,UAAU,QAAQ,CAAC,EAAE,UAAU,IAAI,OAAO,UAAU,QAAQ,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAC;AAAA,YACzG,YAAY,OAAO,KAAK,KAAK,EAAE,QAAQ,CAAC;AAAA,YACxC,OAAO,KAAK;AAAA,YACZ;AAAA,YACA,WAAW,eAAe,KAAK;AAAA,UAC3C,CAAW;AAAA,QACF;AAAA,MACT,CAAO;AAAA,IACP;AACI,eAAW,MAAM;AACjB;AAAA,MACE,MAAM;AAAA,MACN,CAAC,GAAG,MAAM;AACR,YAAI,UAAU,CAAC,GAAG;AAChB,oBAAU,OAAO,GAAG,UAAU,MAAM;AACpC,qBAAW,CAAC;AACZ,mBAAS;AAAA,QACV;AAAA,MACF;AAAA,MACD,EAAE,MAAM,KAAM;AAAA,IACpB;AACI,UAAM,QAAQ,CAAC,GAAG,MAAM;AACtB,wBAAkB,CAAA;AAClB,uBAAiB,CAAA;AACjB,aAAO,QAAQ,CAAC,MAAM,UAAU;AAC9B,wBAAgB,KAAK,KAAK,OAAO;AACjC,uBAAe,KAAK,CAAC;AAAA,MAC7B,CAAO;AACD,QAAE,QAAQ,CAAC,MAAM,UAAU;AACzB,wBAAgB,KAAK,KAAK,OAAO;AAAA,MACzC,CAAO;AAAA,IACP,CAAK;AACD,WAAO,CAAC,MAAM,WAAW;AACvB,aAAO,UAAS,GAAI,mBAAmB,OAAO;AAAA,QAC5C,KAAK,SAAS,MAAM,SAAS,EAAE;AAAA,MACvC,GAAS;AAAA,SACA,UAAU,IAAI,GAAG,mBAAmB,UAAU,MAAM,WAAW,MAAM,SAAS,EAAE,MAAK,EAAG,QAAS,GAAE,CAAC,MAAM,UAAU;AACnH,iBAAO,UAAW,GAAE,mBAAmB,OAAO,MAAM;AAAA,aACjD,UAAW,GAAE,YAAY,aAAa;AAAA,cACrC,QAAQ,MAAM;AAAA,cACd,QAAQ;AAAA,gBACN,YAAY,OAAO,KAAK,UAAU;AAAA,gBAClC,YAAY,MAAM,SAAS,EAAE,UAAU,KAAK,KAAK,cAAc,MAAM,OAAO,KAAK,UAAU,IAAI,OAAO,KAAK,UAAU,IAAI;AAAA,gBACzH,OAAO,KAAK;AAAA,cACb;AAAA,cACD,KAAK,SAAS;AAAA,cACd,eAAe,MAAM;AAAA,cACrB,gBAAgB,MAAM;AAAA,cACtB,WAAW,KAAK;AAAA,YAC9B,GAAe,MAAM,GAAG,CAAC,UAAU,UAAU,iBAAiB,kBAAkB,WAAW,CAAC;AAAA,UAC5F,CAAW;AAAA,QACF,CAAA,GAAG,GAAG;AAAA,MACf,CAAO;AAAA,IACP;AAAA,EACG;AACH;AAEA;AACA;AACA;AACA,IAAI,OAAuB,oBAAI;AAC/B,MAAM,gBAAgB,CAAC,WAAW,OAAO,WAAW;AAClD,MAAI,QAAQ,GAAG,YAAY,QAAQ;AACnC,MAAI,KAAK,QAAQ,GAAG;AAClB,QAAI,IAAI,IAAI,mBAAmB,WAAW,OAAO,MAAM;AACvD,MAAE,MAAK;AACP,SAAK,IAAI,OAAO,CAAC;AACjB,WAAO;AAAA,EACX,OAAS;AACL,QAAI,WAAW;AACf,aAAS,OAAO,KAAK,QAAQ;AAC3B,UAAI,OAAO,OAAO;AAChB,mBAAW;AACX,aAAK,IAAI,GAAG,EAAE,MAAK;AACnB,eAAO,KAAK,IAAI,KAAK;AAAA,MACtB;AAAA,IACF;AACD,QAAI,CAAC,UAAU;AACb,UAAI,IAAI,IAAI,mBAAmB,WAAW,OAAO,MAAM;AACvD,QAAE,MAAK;AACP,WAAK,IAAI,OAAO,CAAC;AACjB,aAAO;AAAA,IACR;AAAA,EACF;AACH;AACA,MAAM,mBAAmB;AAAA,EACvB,YAAY,WAAW,OAAO,QAAQ;AACpC,SAAK,MAAM,GAAG,YAAY,QAAQ;AAClC,SAAK,SAAS;AAAA,MACZ,OAAO,SAAS,YAAY,IAAI;AAAA,MAChC,QAAQ,SAAS,YAAY,IAAI;AAAA,IACvC;AACI,SAAK,UAAU;AACf,SAAK,UAAU;AACf,SAAK,QAAQ;AACb,SAAK,gBAAgB,iBAAiB,cAAc,KAAK,OAAO,OAAO,KAAK,OAAO,MAAM;AACzF,SAAK,aAAa,KAAK,cAAc,WAAU;AAC/C,SAAK,WAAW;AAAA,MACd,KAAK,UAAU;AAAA,MACf,KAAK,UAAU;AAAA,MACf,KAAK,UAAU;AAAA,MACf,KAAK,UAAU;AAAA,MACf;AAAA,MACA;AAAA,IACN;AACI,SAAK,WAAW,OAAO,YAAY,GAAG,KAAK;AAC3C,SAAK,WAAW,KAAK,cAAc,OAAM;AAAA,EAC1C;AAAA,EACD,cAAc;AACZ,WAAO,KAAK;AAAA,EACb;AAAA,EACD,QAAQ;AACN,SAAK;AAAA,EACN;AAAA,EACD,QAAQ;AACN,SAAK;AACL,QAAI,KAAK,UAAU,GAAG;AACpB,uBAAiB,cAAc,KAAK,QAAQ;AAC5C,WAAK,OAAO,KAAK,GAAG;AAAA,IACrB;AAAA,EACF;AACH;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoBK,MAAC,cAAc;AAAA,EAClB,QAAQ;AAAA,EACR,OAAO;AAAA,IACL,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,WAAW;AAAA,MACT,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,YAAY;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,SAAS;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,iBAAiB;AAAA,MACf,MAAM;AAAA,IACP;AAAA,IACD,QAAQ;AAAA,MACN,MAAM;AAAA,IACP;AAAA,IACD,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,QACP,OAAO;AAAA,QACP,KAAK;AAAA,MACN;AAAA,IACF;AAAA,EACF;AAAA,EACD,MAAM,SAAS;AACb,UAAM,QAAQ;AACd,QAAI,MAAM,UAAU,KAAK,MAAM,UAAU,KAAK;AAC5C,YAAM,IAAI,MAAM,mBAAmB;AAAA,IACpC;AACD,QAAI,WAAW,WAAW,KAAK;AAC/B,QAAI,iBAAiB,WAAW,KAAK;AACrC,QAAI,aAAa;AACjB,QAAI,WAAW;AACf,QAAI,QAAQ,WAAW,KAAK;AAC5B,QAAI,MAAM,WAAW,KAAK;AAC1B,QAAI,UAAU,CAAA;AACd,QAAI,YAAY,CAAA;AAChB,QAAI,UAAU,CAAA;AACd,QAAI,YAAY,CAAA;AAChB,QAAI,gBAAgB;AACpB,QAAI,eAAe;AACnB,QAAI,kBAAkB;AACtB,QAAI,iBAAiB;AACrB,QAAI;AACJ,QAAI,MAAM,YAAY,KAAK,GAAG;AAC5B,kBAAY,MAAM;AAAA,IACxB,OAAW;AACL,kBAAY,MAAM,YAAY;AAAA,IAC/B;AACD,QAAI,MAAM,SAAS,KAAK,MAAM,OAAO,KAAK,MAAM,SAAS,KAAK,MAAM,OAAO,GAAG;AAC5E,qBAAe,QAAQ;AAAA,IAC7B,OAAW;AACL,qBAAe,QAAQ;AAAA,IACxB;AACD,QAAI,gBAAgB;AACpB,QAAI,WAAW;AACf,oBAAgB,cAAc,WAAW,MAAM,iBAAiB,MAAM,MAAM;AAC5E,eAAW,cAAc;AACzB,QAAI,kBAAkB;AAAA,MACpB,GAAG,MAAM,aAAa,MAAM,SAAS,IAAI,MAAM,SAAS,KAAK,MAAM,OAAO,IAAI,MAAM,SAAS,KAAK,MAAM,UAAU;AAAA,MAClH,GAAG,MAAM,aAAa,MAAM,SAAS,KAAK,MAAM,OAAO,IAAI,MAAM,SAAS,KAAK,MAAM,UAAU,MAAM,MAAM,SAAS;AAAA,IAC1H;AACI,QAAI;AACJ,QAAI;AACJ,QAAI;AACJ,QAAI;AACJ,QAAI,MAAM,YAAY;AACpB,UAAI,MAAM,SAAS,IAAI,MAAM,OAAO,GAAG;AACrC,iBAAS,QAAQ;AACjB,qBAAa;AACb,mBAAW;AAAA,MACnB,OAAa;AACL,iBAAS,QAAQ;AACjB,qBAAa;AACb,mBAAW;AAAA,MACZ;AACD,qBAAe,iBAAiB,KAAK,IAAI,MAAM,SAAS,IAAI,MAAM,OAAO,CAAC,IAAI;AAC9E,uBAAiB,KAAK,IAAI,MAAM,SAAS,IAAI,gBAAgB,CAAC;AAC9D,qBAAe,KAAK,IAAI,MAAM,OAAO,IAAI,gBAAgB,CAAC;AAAA,IAChE,OAAW;AACL,UAAI,MAAM,SAAS,IAAI,MAAM,OAAO,GAAG;AACrC,iBAAS,QAAQ;AACjB,qBAAa;AACb,mBAAW;AAAA,MACnB,OAAa;AACL,iBAAS,QAAQ;AACjB,qBAAa;AACb,mBAAW;AAAA,MACZ;AACD,uBAAiB,KAAK,IAAI,MAAM,SAAS,IAAI,gBAAgB,CAAC;AAC9D,qBAAe,KAAK,IAAI,MAAM,OAAO,IAAI,gBAAgB,CAAC;AAC1D,qBAAe,iBAAiB,KAAK,IAAI,MAAM,SAAS,IAAI,MAAM,OAAO,CAAC,IAAI;AAAA,IAC/E;AACD,QAAI,MAAM,QAAQ;AAChB,UAAI,MAAM,SAAS,OAAO;AACxB,YAAI,MAAM,SAAS,YAAY,IAAI,KAAK,kBAAkB,MAAM,SAAS,YAAY,IAAI,KAAK,gBAAgB;AAC5G,gBAAM,QAAQ;AACd,kBAAQ,IAAI,MAAM,aAAa,MAAM,SAAS,IAAI,gBAAgB,IAAI,MAAM;AAC5E,cAAI,MAAM,YAAY;AACpB,oBAAQ,IAAI,SAAS,QAAQ,gBAAgB,IAAI,MAAM,SAAS,IAAI,gBAAgB,IAAI,MAAM,SAAS;AAAA,UACnH,OAAiB;AACL,oBAAQ,IAAI,MAAM,SAAS;AAAA,UAC5B;AACD,cAAI,iBAAiB,SAAS,QAAQ,MAAM,SAAS,CAAC,MAAM;AAC5D,oBAAU,IAAI,MAAM,aAAa,MAAM,SAAS,IAAI,MAAM,SAAS,gBAAgB;AACnF,oBAAU,IAAI,MAAM,aAAa,gBAAgB,IAAI,MAAM,SAAS,IAAI;AACxE,4BAAkB,MAAM,aAAa,MAAM,SAAS,IAAI,MAAM,SAAS,gBAAgB,IAAI,MAAM;AACjG,cAAI,MAAM,YAAY;AACpB,6BAAiB,SAAS,QAAQ,gBAAgB,IAAI,MAAM,SAAS,IAAI,gBAAgB,IAAI,MAAM,SAAS;AAAA,UACxH,OAAiB;AACL,6BAAiB,SAAS,QAAQ,MAAM,SAAS,IAAI,MAAM,SAAS,IAAI,MAAM,SAAS,IAAI,MAAM,SAAS;AAAA,UAC3G;AAAA,QACX,OAAe;AACL,cAAI,iBAAiB,SAAS,QAAQ,CAAC,YAAY,IAAI,IAAI,YAAY,IAAI;AAC3E,cAAI,eAAe,SAAS,QAAQ,YAAY,IAAI,IAAI,CAAC,YAAY,IAAI;AACzE,kBAAQ,IAAI,MAAM,aAAa,MAAM,SAAS,IAAI,gBAAgB;AAClE,kBAAQ,IAAI,MAAM,aAAa,gBAAgB,IAAI,eAAe,MAAM,SAAS;AACjF,oBAAU,IAAI,MAAM,aAAa,MAAM,SAAS,IAAI,gBAAgB;AACpE,oBAAU,IAAI,MAAM,aAAa,gBAAgB,IAAI,MAAM,SAAS,IAAI;AAAA,QACzE;AAAA,MACT,OAAa;AACL,YAAI,iBAAiB,SAAS,QAAQ,CAAC,YAAY,IAAI,IAAI,YAAY,IAAI;AAC3E,YAAI,eAAe,SAAS,QAAQ,YAAY,IAAI,IAAI,CAAC,YAAY,IAAI;AACzE,gBAAQ,IAAI,MAAM,aAAa,MAAM,SAAS,IAAI,gBAAgB;AAClE,gBAAQ,IAAI,MAAM,aAAa,gBAAgB,IAAI,eAAe,MAAM,SAAS;AACjF,kBAAU,IAAI,MAAM,aAAa,MAAM,SAAS,IAAI,gBAAgB;AACpE,kBAAU,IAAI,MAAM,aAAa,gBAAgB,IAAI,MAAM,SAAS,IAAI;AAAA,MACzE;AACD,UAAI,MAAM,SAAS,KAAK;AACtB,YAAI,MAAM,SAAS,YAAY,IAAI,KAAK,gBAAgB,MAAM,SAAS,YAAY,IAAI,KAAK,cAAc;AACxG,cAAI,iBAAiB,SAAS,QAAQ,MAAM,SAAS,CAAC,MAAM;AAC5D,cAAI,QAAQ;AACZ,kBAAQ,IAAI,MAAM,aAAa,MAAM,OAAO,IAAI,MAAM,SAAS,gBAAgB;AAC/E,cAAI,eAAe,SAAS,QAAQ,CAAC,MAAM,SAAS,IAAI,MAAM,SAAS;AACvE,kBAAQ,IAAI,MAAM,aAAa,gBAAgB,IAAI,MAAM,OAAO,IAAI;AACpE,oBAAU,IAAI,MAAM,aAAa,MAAM,OAAO,IAAI,gBAAgB,IAAI,MAAM;AAC5E,oBAAU,IAAI,MAAM,aAAa,gBAAgB,IAAI,iBAAiB,MAAM,OAAO;AACnF,0BAAgB,MAAM,aAAa,MAAM,OAAO,IAAI,MAAM,SAAS,gBAAgB,IAAI,MAAM;AAC7F,cAAI,MAAM,YAAY;AACpB,2BAAe,SAAS,QAAQ,gBAAgB,IAAI,MAAM,SAAS,IAAI,gBAAgB,IAAI,MAAM,SAAS;AAAA,UACtH,OAAiB;AACL,2BAAe,SAAS,QAAQ,MAAM,OAAO,IAAI,MAAM,SAAS,IAAI,MAAM,OAAO,IAAI,MAAM,SAAS;AAAA,UACrG;AAAA,QACX,OAAe;AACL,cAAI,eAAe,SAAS,QAAQ,YAAY,IAAI,IAAI,CAAC,YAAY,IAAI;AACzE,cAAI,iBAAiB,SAAS,QAAQ,CAAC,YAAY,IAAI,IAAI,YAAY,IAAI;AAC3E,kBAAQ,IAAI,MAAM,aAAa,MAAM,OAAO,IAAI,gBAAgB;AAChE,kBAAQ,IAAI,MAAM,aAAa,gBAAgB,IAAI,MAAM,OAAO,IAAI;AACpE,oBAAU,IAAI,MAAM,aAAa,MAAM,OAAO,IAAI,gBAAgB;AAClE,oBAAU,IAAI,MAAM,aAAa,gBAAgB,IAAI,iBAAiB,MAAM,OAAO;AAAA,QACpF;AAAA,MACT,OAAa;AACL,YAAI,eAAe,SAAS,QAAQ,YAAY,IAAI,IAAI,CAAC,YAAY,IAAI;AACzE,YAAI,iBAAiB,SAAS,QAAQ,CAAC,YAAY,IAAI,IAAI,YAAY,IAAI;AAC3E,gBAAQ,IAAI,MAAM,aAAa,MAAM,OAAO,IAAI,gBAAgB;AAChE,gBAAQ,IAAI,MAAM,aAAa,gBAAgB,IAAI,MAAM,OAAO,IAAI;AACpE,kBAAU,IAAI,MAAM,aAAa,MAAM,OAAO,IAAI,gBAAgB;AAClE,kBAAU,IAAI,MAAM,aAAa,gBAAgB,IAAI,iBAAiB,MAAM,OAAO;AAAA,MACpF;AAAA,IACP,OAAW;AACL,UAAI,iBAAiB,SAAS,QAAQ,CAAC,YAAY,IAAI,IAAI,YAAY,IAAI;AAC3E,UAAI,eAAe,SAAS,QAAQ,YAAY,IAAI,IAAI,CAAC,YAAY,IAAI;AACzE,cAAQ,IAAI,MAAM,aAAa,MAAM,SAAS,IAAI,gBAAgB;AAClE,cAAQ,IAAI,MAAM,aAAa,gBAAgB,IAAI,eAAe,MAAM,SAAS;AACjF,gBAAU,IAAI,MAAM,aAAa,MAAM,SAAS,IAAI,gBAAgB;AACpE,gBAAU,IAAI,MAAM,aAAa,gBAAgB,IAAI,MAAM,SAAS,IAAI;AACxE,UAAI,eAAe,SAAS,QAAQ,YAAY,IAAI,IAAI,CAAC,YAAY,IAAI;AACzE,UAAI,iBAAiB,SAAS,QAAQ,CAAC,YAAY,IAAI,IAAI,YAAY,IAAI;AAC3E,cAAQ,IAAI,MAAM,aAAa,MAAM,OAAO,IAAI,gBAAgB;AAChE,cAAQ,IAAI,MAAM,aAAa,gBAAgB,IAAI,MAAM,OAAO,IAAI;AACpE,gBAAU,IAAI,MAAM,aAAa,MAAM,OAAO,IAAI,gBAAgB;AAClE,gBAAU,IAAI,MAAM,aAAa,gBAAgB,IAAI,iBAAiB,MAAM,OAAO;AAAA,IACpF;AACD,WAAO,CAAC,MAAM,WAAW;AACvB,aAAO,MAAM,cAAc,KAAK,UAAW,GAAE,mBAAmB,OAAO,EAAE,KAAK,KAAK;AAAA,QACjF,YAAY,MAAM,OAAO,GAAG;AAAA,UAC1B,UAAU,MAAM;AAAA,UAChB,QAAQ,MAAM;AAAA,UACd,WAAW,MAAM,SAAS;AAAA,UAC1B,iBAAiB,MAAM;AAAA,QACjC,GAAW,MAAM,GAAG,CAAC,YAAY,UAAU,aAAa,iBAAiB,CAAC;AAAA,MAC1E,CAAO,MAAM,UAAS,GAAI,mBAAmB,OAAO,EAAE,KAAK,KAAK;AAAA,QACxD,YAAY,MAAM,OAAO,GAAG;AAAA,UAC1B,UAAU,MAAM;AAAA,UAChB,QAAQ,MAAM,OAAO;AAAA,UACrB,WAAW,MAAM,SAAS;AAAA,UAC1B,iBAAiB,MAAM;AAAA,QACjC,GAAW,MAAM,GAAG,CAAC,YAAY,UAAU,aAAa,iBAAiB,CAAC;AAAA,QAClE,YAAY,MAAM,OAAO,GAAG;AAAA,UAC1B,UAAU,MAAM,SAAS;AAAA,UACzB,QAAQ,MAAM,OAAO;AAAA,UACrB,WAAW,MAAM,SAAS;AAAA,UAC1B,iBAAiB,MAAM;AAAA,QACjC,GAAW,MAAM,GAAG,CAAC,YAAY,UAAU,aAAa,iBAAiB,CAAC;AAAA,QAClE,YAAY,MAAM,OAAO,GAAG;AAAA,UAC1B,UAAU,MAAM,SAAS;AAAA,UACzB,QAAQ,MAAM;AAAA,UACd,WAAW,MAAM,SAAS;AAAA,UAC1B,iBAAiB,MAAM;AAAA,QACjC,GAAW,MAAM,GAAG,CAAC,YAAY,UAAU,aAAa,iBAAiB,CAAC;AAAA,QAClE,MAAM,KAAK,KAAK,UAAS,GAAI,mBAAmB,OAAO;AAAA,UACrD,KAAK;AAAA,UACL,OAAO,eAAe;AAAA,YACpB,OAAO,MAAM,SAAS,MAAM,SAAS,IAAI,IAAI;AAAA,YAC7C,QAAQ,MAAM,SAAS,MAAM,SAAS,IAAI,IAAI;AAAA,YAC9C,MAAM,MAAM,eAAe;AAAA,YAC3B,KAAK,MAAM,cAAc;AAAA,YACzB,iBAAiB,qBAAqB,MAAM,QAAQ;AAAA,YACpD,WAAW,mBAAmB,MAAM,UAAU;AAAA,YAC9C,iBAAiB;AAAA,UAC7B,CAAW;AAAA,QACF,GAAE,MAAM,CAAC,KAAK,mBAAmB,IAAI,IAAI;AAAA,QAC1C,MAAM,GAAG,KAAK,UAAS,GAAI,mBAAmB,OAAO;AAAA,UACnD,KAAK;AAAA,UACL,OAAO,eAAe;AAAA,YACpB,OAAO,MAAM,SAAS,MAAM,SAAS,IAAI,IAAI;AAAA,YAC7C,QAAQ,MAAM,SAAS,MAAM,SAAS,IAAI,IAAI;AAAA,YAC9C,MAAM,MAAM,aAAa;AAAA,YACzB,KAAK,MAAM,YAAY;AAAA,YACvB,iBAAiB,qBAAqB,MAAM,QAAQ;AAAA,YACpD,WAAW,mBAAmB,MAAM,QAAQ;AAAA,YAC5C,iBAAiB;AAAA,UAC7B,CAAW;AAAA,QACF,GAAE,MAAM,CAAC,KAAK,mBAAmB,IAAI,IAAI;AAAA,MAC3C,CAAA;AAAA,IACP;AAAA,EACG;AACH;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmBK,MAAC,cAAc;AAAA,EAClB,QAAQ;AAAA,EACR,OAAO;AAAA,IACL,OAAO,EAAE,MAAM,QAAQ,UAAU,KAAM;AAAA,IACvC,QAAQ,EAAE,MAAM,QAAQ,UAAU,KAAM;AAAA,IACxC,WAAW,EAAE,MAAM,QAAQ,UAAU,KAAM;AAAA,IAC3C,WAAW,EAAE,MAAM,QAAQ,UAAU,KAAM;AAAA,IAC3C,SAAS,EAAE,MAAM,QAAQ,SAAS,EAAG;AAAA,IACrC,UAAU,EAAE,MAAM,QAAQ,UAAU,KAAM;AAAA,IAC1C,UAAU,EAAE,MAAM,SAAS,SAAS,KAAM;AAAA,EAC3C;AAAA,EACD,MAAM,SAAS;AACb,UAAM,QAAQ;AACd,QAAI;AACJ,QAAI;AACJ,QAAI,WAAW,WAAW,EAAE;AAC5B,QAAI,YAAY,WAAW,EAAE;AAC7B,QAAI,SAAS;AAAA,MACX,OAAO,MAAM;AAAA,MACb,QAAQ,MAAM;AAAA,IACpB;AACI,QAAI,SAAS,KAAK,MAAM,MAAM,SAAS,CAAC,IAAI;AAC5C,gBAAY,iBAAiB,cAAc,OAAO,OAAO,OAAO,MAAM;AACtE,iBAAa,iBAAiB,cAAc,OAAO,OAAO,OAAO,MAAM;AACvE,QAAI,aAAa,WAAW,MAAM,QAAQ;AAC1C,QAAI,YAAY,WAAW,CAAC;AAC5B,QAAI,SAAS,WAAW,IAAI;AAC5B,QAAI,aAAa,UAAU,WAAW,SAAS,GAAG,SAAS,GAAG,MAAM;AACpE,QAAI,cAAc,WAAW,WAAW,SAAS,GAAG,SAAS,GAAG,MAAM;AACtE,eAAW,KAAK,MAAM,SAAS;AAC/B,gBAAY,KAAK,MAAM,SAAS;AAChC,aAAS,QAAQ,UAAU;AAC3B,cAAU,QAAQ,WAAW;AAC7B,UAAM,kBAAkB,MAAM;AAC5B,UAAI,WAAW,SAAS,GAAG;AACzB,eAAO,QAAQ;AAAA,MAChB;AAAA,IACP;AACI,UAAM,eAAe,MAAM;AACzB,UAAI,MAAM,YAAY,GAAG;AACvB,eAAO,SAAS,MAAM;AAAA,MAC9B,OAAa;AACL,eAAO;AAAA,MACR;AAAA,IACP;AACI,gBAAY,MAAM;AAChB,UAAI,MAAM,YAAY,KAAK;AACzB,mBAAW,QAAQ;AACnB,kBAAU,QAAQ,MAAM;AACxB,eAAO,QAAQ;AAAA,MACvB,WAAiB,MAAM,YAAY,GAAG;AAC9B,mBAAW,QAAQ;AACnB,YAAI,MAAM,UAAU;AAClB,oBAAU,QAAQ,MAAM;AAAA,QAClC,OAAe;AACL,oBAAU,QAAQ;AAAA,QACnB;AAAA,MACT,OAAa;AACL,mBAAW,QAAQ,MAAM;AACzB,YAAI,MAAM,UAAU;AAClB,oBAAU,QAAQ,KAAK;AAAA,aACpB,MAAM,QAAQ,MAAM,UAAU,WAAW,QAAQ,OAAO,MAAM;AAAA,UAC3E;AACU,iBAAO,QAAQ;AAAA,QACzB,OAAe;AACL,oBAAU,QAAQ,KAAK,MAAM,MAAM,QAAQ,WAAW,QAAQ,IAAI;AAAA,QACnE;AAAA,MACF;AAAA,IACP,CAAK;AACD,oBAAgB,MAAM;AACpB,wBAAkB,cAAc,SAAS,KAAK;AAC9C,wBAAkB,cAAc,UAAU,KAAK;AAAA,IACrD,CAAK;AACD,WAAO,CAAC,MAAM,WAAW;AACvB,aAAO,UAAW,GAAE,mBAAmB,UAAU,MAAM;AAAA,QACrD,MAAM,YAAY,aAAa,mBAAmB,OAAO,EAAE,KAAK,KAAK;AAAA,UACnE,eAAeA,gBAAmB,OAAO,MAAM;AAAA,YAC7C,YAAY,aAAa;AAAA,cACvB,OAAO,eAAe;AAAA,gBACpB,MAAM;AAAA,gBACN,KAAK;AAAA,gBACL,OAAO,MAAM,SAAS;AAAA,gBACtB,QAAQ,MAAM;AAAA,cAC9B,CAAe;AAAA,cACD,UAAU,qBAAqB,MAAM,QAAQ;AAAA,cAC7C,YAAY,MAAM;AAAA,cAClB,aAAa;AAAA,cACb,eAAe,MAAM,SAAS;AAAA,cAC9B,cAAc;AAAA,cACd,UAAU,MAAM;AAAA,cAChB,iBAAiB;AAAA,YAC/B,GAAe,MAAM,GAAG,CAAC,SAAS,YAAY,cAAc,iBAAiB,UAAU,CAAC;AAAA,UAC7E,GAAE,GAAG,GAAG;AAAA,YACP,CAAC,OAAO,MAAM,MAAM,CAAC;AAAA,UACjC,CAAW;AAAA,QACX,CAAS,MAAM,UAAS,GAAI,mBAAmB,OAAO,EAAE,KAAK,KAAK;AAAA,UACxDA,gBAAmB,OAAO;AAAA,YACxB,OAAO,eAAe;AAAA,cACpB,OAAO,MAAM,SAAS;AAAA,cACtB,QAAQ,MAAM;AAAA,cACd,KAAK;AAAA,cACL,MAAM;AAAA,cACN,cAAc,MAAM,MAAM;AAAA,cAC1B,YAAY,aAAc;AAAA,cAC1B,UAAU;AAAA,YACxB,CAAa;AAAA,UACb,GAAa;AAAA,YACDA,gBAAmB,OAAO;AAAA,cACxB,OAAO,eAAe;AAAA,gBACpB,MAAM;AAAA,gBACN,OAAO,MAAM;AAAA,gBACb,QAAQ,MAAM;AAAA,gBACd,KAAK;AAAA,gBACL,cAAc,MAAM,MAAM;AAAA,gBAC1B,iBAAiB,MAAM;AAAA,cACvC,CAAe;AAAA,YACf,GAAe,MAAM,CAAC;AAAA,UACX,GAAE,CAAC;AAAA,QACd,CAAS;AAAA,QACD,YAAY,aAAa;AAAA,UACvB,OAAO,eAAe;AAAA,YACpB,MAAM;AAAA,YACN,KAAK;AAAA,YACL,OAAO,MAAM;AAAA,YACb,QAAQ,MAAM;AAAA,UAC1B,CAAW;AAAA,UACD,UAAU,qBAAqB,MAAM,SAAS;AAAA,UAC9C,YAAY,MAAM;AAAA,UAClB,aAAa;AAAA,UACb,eAAe,MAAM,SAAS;AAAA,UAC9B,cAAc;AAAA,UACd,UAAU;AAAA,QACpB,GAAW,MAAM,GAAG,CAAC,SAAS,YAAY,cAAc,eAAe,CAAC;AAAA,MACjE,GAAE,EAAE;AAAA,IACX;AAAA,EACG;AACH;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAGK,MAAC,cAAc;AAAA,EAClB,QAAQ;AAAA,EACR,MAAM,SAAS;AACb,UAAM,cAAc,WAAW,KAAK;AACpC,UAAM,UAAU,CAAC,UAAU;AACzB,kBAAY,QAAQ,CAAC,CAAC;AAAA,IAC5B;AACI,WAAO,CAAC,MAAM,WAAW;AACvB,aAAO,UAAW,GAAE,mBAAmB,UAAU,MAAM;AAAA,SACpD,UAAW,GAAE,mBAAmB,OAAO;AAAA,UACtC,KAAK,MAAM,qBAAqB;AAAA,UAChC,KAAK;AAAA,QACf,GAAW;AAAA,UACD,WAAW,KAAK,QAAQ,cAAc,EAAE,KAAK,MAAM,qBAAqB,GAAG;AAAA,QACrF,CAAS;AAAA,QACD,CAAC,MAAM,WAAW,KAAK,UAAW,GAAE,mBAAmB,OAAO,EAAE,KAAK,KAAK;AAAA,UACxE,WAAW,KAAK,QAAQ,aAAa;AAAA,QAC/C,CAAS,KAAK,mBAAmB,IAAI,IAAI;AAAA,MAClC,GAAE,EAAE;AAAA,IACX;AAAA,EACG;AACH;AAEA;AACA;AACA;AACA,MAAM,OAAO;AACb,MAAM,MAAM;AACZ,MAAM,QAAQ;AACd,MAAM,SAAS;AACf,MAAM,WAAW;AACjB,MAAM,UAAU;AAChB,MAAM,YAAY;AAClB,MAAM,aAAa;AACnB,SAAS,YAAY,KAAK;AACxB,UAAQ,KAAG;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACV;AACH;AAEA;AACA;AACA;AACA,SAAS,SAAS,KAAK;AACrB,UAAQ,KAAG;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,EACV;AACH;AACA,MAAM,MAAM;AAAA,EACV,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,YAAY,GAAG,GAAG;AAChB,SAAK,IAAI;AACT,SAAK,IAAI;AAAA,EACV;AAAA,EACD,SAAS,GAAG,OAAO,OAAO;AACxB,UAAM,MAAM,EAAE,IAAI,KAAK,MAAM,KAAK,EAAE,IAAI,KAAK,MAAM;AACnD,QAAI,MAAM;AACR,aAAO;AAAA,IACb,OAAW;AACL,aAAO,KAAK,KAAK,EAAE;AAAA,IACpB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,WAAW,GAAG;AACZ,UAAM,KAAK,KAAK,IAAI,EAAE;AACtB,UAAM,KAAK,KAAK,IAAI,EAAE;AACtB,UAAM,QAAQ,KAAK,IAAI,EAAE;AACzB,UAAM,QAAQ,KAAK,IAAI,EAAE;AACzB,QAAI,QAAQ,OAAO;AACjB,aAAO,KAAK,IAAI,SAAS;AAAA,IAC/B,OAAW;AACL,aAAO,KAAK,IAAI,QAAQ;AAAA,IACzB;AAAA,EACF;AAAA,EACD,QAAQ;AACN,WAAO,IAAI,MAAM,KAAK,GAAG,KAAK,CAAC;AAAA,EAChC;AACH;AACA,MAAM,KAAK;AAAA,EACT;AAAA,EACA;AAAA,EACA,YAAY,IAAI,IAAI;AAClB,SAAK,KAAK;AACV,SAAK,KAAK;AAAA,EACX;AAAA,EACD,IAAI,SAAS;AACX,WAAO,IAAI,MAAM,KAAK,OAAO,KAAK,GAAG,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,KAAK,OAAO,KAAK,GAAG,IAAI,KAAK,GAAG,KAAK,CAAC,CAAC;AAAA,EAClG;AACH;AACA,MAAM,KAAK;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY,GAAG,GAAG,OAAO,QAAQ;AAC/B,SAAK,IAAI;AACT,SAAK,IAAI;AACT,SAAK,QAAQ;AACb,SAAK,SAAS;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOD,SAAS,MAAM,OAAO,OAAO;AAC3B,UAAM,UAAU,KAAK;AACrB,UAAM,UAAU,KAAK;AACrB,UAAM,SAAS,KAAK,IAAI,QAAQ,IAAI,QAAQ,CAAC;AAC7C,UAAM,SAAS,KAAK,IAAI,QAAQ,IAAI,QAAQ,CAAC;AAC7C,UAAM,aAAa,KAAK,QAAQ;AAChC,UAAM,cAAc,KAAK,SAAS;AAClC,UAAM,aAAa,KAAK,QAAQ;AAChC,UAAM,cAAc,KAAK,SAAS;AAClC,UAAM,WAAW,KAAK,IAAI,GAAG,SAAS,aAAa,UAAU;AAC7D,UAAM,WAAW,KAAK,IAAI,GAAG,SAAS,cAAc,WAAW;AAC/D,QAAI,MAAM;AACR,aAAO,WAAW,WAAW,WAAW;AAAA,IAC9C,OAAW;AACL,aAAO,KAAK,KAAK,WAAW,WAAW,WAAW,QAAQ;AAAA,IAC3D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,WAAW,MAAM,eAAe,MAAM;AACpC,QAAI,KAAK,SAAS,MAAM,IAAI,KAAK,GAAG;AAClC,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAChB,UAAI,cAAc;AAChB,qBAAa,QAAQ;AACrB,YAAI,GAAG,IAAI,GAAG,GAAG;AACf,uBAAa,SAAS;AAAA,QAChC,OAAe;AACL,uBAAa,SAAS;AAAA,QACvB;AACD,YAAI,GAAG,IAAI,GAAG,GAAG;AACf,uBAAa,SAAS;AAAA,QAChC,OAAe;AACL,uBAAa,SAAS;AAAA,QACvB;AAAA,MACF;AACD,aAAO,GAAG,WAAW,EAAE;AAAA,IAC7B,OAAW;AACL,UAAI,KAAK,IAAI,KAAK,IAAI,KAAK,SAAS,KAAK,KAAK,IAAI,KAAK,IAAI,KAAK,SAAS,GAAG;AAC1E,YAAI,cAAc;AAChB,uBAAa,QAAQ,KAAK,IAAI,KAAK,IAAI,WAAW;AAAA,QACnD;AACD,eAAO,KAAK,IAAI,KAAK,IAAI,OAAO;AAAA,MACxC,WAAiB,KAAK,IAAI,KAAK,IAAI,KAAK,QAAQ,KAAK,KAAK,IAAI,KAAK,IAAI,KAAK,QAAQ,GAAG;AAC/E,YAAI,cAAc;AAChB,uBAAa,QAAQ,KAAK,IAAI,KAAK,IAAI,UAAU;AAAA,QAClD;AACD,eAAO,KAAK,IAAI,KAAK,IAAI,MAAM;AAAA,MACvC,OAAa;AACL,YAAI,KAAK,IAAI,KAAK,GAAG;AACnB,cAAI,KAAK,IAAI,KAAK,GAAG;AACnB,gBAAI,cAAc;AAChB,2BAAa,QAAQ,WAAW;AAAA,YACjC;AACD,mBAAO,KAAK,OAAO,WAAW,KAAK,UAAU;AAAA,UACzD,OAAiB;AACL,gBAAI,cAAc;AAChB,2BAAa,QAAQ,UAAU;AAAA,YAChC;AACD,mBAAO,KAAK,OAAO,WAAW,KAAK,OAAO;AAAA,UAC3C;AAAA,QACX,OAAe;AACL,cAAI,KAAK,IAAI,KAAK,GAAG;AACnB,gBAAI,cAAc;AAChB,2BAAa,QAAQ,aAAa;AAAA,YACnC;AACD,mBAAO,KAAK,OAAO,WAAW,KAAK,WAAW;AAAA,UAC1D,OAAiB;AACL,gBAAI,cAAc;AAChB,2BAAa,QAAQ,UAAU;AAAA,YAChC;AACD,mBAAO,KAAK,OAAO,WAAW,KAAK,QAAQ;AAAA,UAC5C;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACD,QAAQ,KAAK;AACX,YAAQ,KAAG;AAAA,MACT,KAAK;AACH,eAAO,KAAK;AAAA,MACd,KAAK;AACH,eAAO,KAAK;AAAA,MACd,KAAK;AACH,eAAO,KAAK;AAAA,MACd,KAAK;AACH,eAAO,KAAK;AAAA,IACf;AAAA,EACF;AAAA,EACD,aAAa,OAAO;AAClB,WAAO,KAAK,KAAK,MAAM,KAAK,KAAK,IAAI,KAAK,QAAQ,KAAK,MAAM,KAAK,KAAK,KAAK,MAAM,KAAK,KAAK,IAAI,KAAK,SAAS,KAAK,MAAM;AAAA,EAC1H;AAAA,EACD,YAAY,MAAM;AAChB,WAAO,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,KAAK,QAAQ,KAAK,KAAK,IAAI,KAAK,QAAQ,KAAK,KAAK,IAAI,KAAK,SAAS,KAAK,KAAK,IAAI,KAAK,SAAS;AAAA,EACzJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAKD,gBAAgB,OAAO;AACrB,QAAI,KAAK,aAAa,KAAK,GAAG;AAC5B,aAAO,MAAM;IACd,WAAU,KAAK,KAAK,MAAM,KAAK,KAAK,IAAI,KAAK,QAAQ,KAAK,MAAM,GAAG;AAClE,aAAO,IAAI,MAAM,MAAM,GAAG,MAAM,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,QAAQ,CAAC;AAAA,IAC9E,WAAU,KAAK,KAAK,MAAM,KAAK,KAAK,IAAI,KAAK,SAAS,KAAK,MAAM,GAAG;AACnE,aAAO,IAAI,MAAM,MAAM,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,QAAQ,GAAG,MAAM,CAAC;AAAA,IACnF,OAAW;AACL,UAAI,MAAM,IAAI,KAAK,GAAG;AACpB,eAAO,MAAM,IAAI,KAAK,IAAI,KAAK,UAAU,KAAK;AAAA,MACtD,OAAa;AACL,eAAO,MAAM,IAAI,KAAK,IAAI,KAAK,WAAW,KAAK;AAAA,MAChD;AAAA,IACF;AAAA,EACF;AAAA,EACD,IAAI,UAAU;AACZ,WAAO,IAAI,MAAM,KAAK,GAAG,KAAK,CAAC;AAAA,EAChC;AAAA,EACD,IAAI,WAAW;AACb,WAAO,IAAI,MAAM,KAAK,IAAI,KAAK,QAAQ,GAAG,KAAK,CAAC;AAAA,EACjD;AAAA,EACD,IAAI,aAAa;AACf,WAAO,IAAI,MAAM,KAAK,GAAG,KAAK,IAAI,KAAK,SAAS,CAAC;AAAA,EAClD;AAAA,EACD,IAAI,cAAc;AAChB,WAAO,IAAI,MAAM,KAAK,IAAI,KAAK,QAAQ,GAAG,KAAK,IAAI,KAAK,SAAS,CAAC;AAAA,EACnE;AAAA,EACD,IAAI,SAAS;AACX,WAAO,IAAI,MAAM,KAAK,MAAM,KAAK,IAAI,KAAK,QAAQ,CAAC,GAAG,KAAK,MAAM,KAAK,IAAI,KAAK,SAAS,CAAC,CAAC;AAAA,EAC3F;AAAA,EACD,IAAI,WAAW;AACb,WAAO,IAAI,KAAK,KAAK,SAAS,KAAK,UAAU;AAAA,EAC9C;AAAA,EACD,IAAI,UAAU;AACZ,WAAO,IAAI,KAAK,KAAK,SAAS,KAAK,QAAQ;AAAA,EAC5C;AAAA,EACD,IAAI,YAAY;AACd,WAAO,IAAI,KAAK,KAAK,UAAU,KAAK,WAAW;AAAA,EAChD;AAAA,EACD,IAAI,aAAa;AACf,WAAO,IAAI,KAAK,KAAK,YAAY,KAAK,WAAW;AAAA,EAClD;AAAA,EACD,IAAI,OAAO;AACT,WAAO,KAAK;AAAA,EACb;AAAA,EACD,IAAI,MAAM;AACR,WAAO,KAAK;AAAA,EACb;AAAA,EACD,IAAI,QAAQ;AACV,WAAO,KAAK,IAAI,KAAK,QAAQ;AAAA,EAC9B;AAAA,EACD,IAAI,SAAS;AACX,WAAO,KAAK,IAAI,KAAK,SAAS;AAAA,EAC/B;AAAA,EACD,IAAI,OAAO;AACT,WAAO,KAAK;AAAA,EACb;AAAA,EACD,IAAI,OAAO;AACT,WAAO,KAAK,IAAI,KAAK,QAAQ;AAAA,EAC9B;AAAA,EACD,IAAI,OAAO;AACT,WAAO,KAAK;AAAA,EACb;AAAA,EACD,IAAI,OAAO;AACT,WAAO,KAAK,IAAI,KAAK,SAAS;AAAA,EAC/B;AACH;AAEA;AACA;AACA;AACA,MAAM,cAAc,OAAO,YAAY;AACvC,IAAI,QAAQ;AACZ,MAAM,SAAS;AAAA,EACb,UAAU;AAAA,EACV,OAAO,oBAAoB;AAAA,EAC3B,SAAS;AAAA,EACT,WAAW,CAAA;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,WAAW,CAAA;AAAA;AAAA,EAEX,gBAAgB;AAAA,IACd,UAAU;AAAA,IACV,WAAW;AAAA,IACX,UAAU;AAAA,IACV,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,QAAQ;AAAA,EACZ;AAAA,EACE,YAAY,MAAM,OAAO,IAAI,MAAM,WAAW,WAAW;AACvD,SAAK,OAAO;AACZ,SAAK,QAAQ;AACb,SAAK,eAAe;AACpB,SAAK,WAAW;AAChB,SAAK,aAAa;AAAA,EACnB;AAAA;AAAA,EAED,IAAI,OAAO;AACT,WAAO,KAAK,KAAK;AAAA,EAClB;AAAA,EACD,IAAI,OAAO;AACT,WAAO,KAAK,KAAK;AAAA,EAClB;AAAA,EACD,IAAI,OAAO;AACT,WAAO,KAAK,KAAK;AAAA,EAClB;AAAA,EACD,IAAI,OAAO;AACT,WAAO,KAAK,KAAK;AAAA,EAClB;AAAA;AAAA,EAED,QAAQ,SAAS;AACf,SAAK,SAAS,KAAK,OAAO;AAAA,EAC3B;AAAA,EACD,cAAc;AACZ,WAAO,KAAK;AAAA,EACb;AAAA,EACD,eAAe;AACb,WAAO,KAAK,cAAc;AAAA,EAC3B;AAAA,EACD,OAAO,GAAG;AACR,SAAK,SAAS,KAAK,CAAC;AACpB,MAAE,SAAS;AAAA,EACZ;AAAA,EACD,KAAK,WAAW;AACd,QAAI,UAAU,IAAI,GAAG;AACnB,aAAO;AAAA,IACR,WAAU,KAAK,SAAS,SAAS,GAAG;AACnC,eAAS,KAAK,KAAK,UAAU;AAC3B,cAAM,SAAS,EAAE,KAAK,SAAS;AAC/B,YAAI,QAAQ;AACV,iBAAO;AAAA,QACR;AAAA,MACF;AAAA,IACF;AACD,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAID,MAAM;AACJ,UAAM,WAAW,CAAA;AACjB,UAAM,QAAQ,CAAA;AACd,UAAM,KAAK,IAAI;AACf,WAAO,MAAM,SAAS,GAAG;AACvB,YAAM,IAAI,MAAM;AAChB,UAAI,GAAG;AACL,iBAAS,KAAK,CAAC;AACf,YAAI,EAAE,SAAS,SAAS,GAAG;AACzB,gBAAM,KAAK,GAAG,EAAE,QAAQ;AAAA,QACzB;AAAA,MACF;AAAA,IACF;AACD,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOD,SAAS,WAAW;AAClB,QAAI,KAAK,cAAc,SAAS,KAAK,MAAM;AACzC,WAAK,kBAAiB;AAAA,IACvB;AACD,WAAO,KAAK,cAAc,SAAS,KAAK,cAAc,OAAO,KAAK,cAAc,SAAS;AAAA,EAC1F;AAAA,EACD,oBAAoB;AAClB,UAAM,aAA6B,oBAAI,IAAI,CAAC,MAAM,KAAK,OAAO,MAAM,CAAC;AACrE,QAAI,KAAK,cAAc,aAAa,MAAM;AACxC,UAAI,KAAK,QAAQ;AACf,cAAM,YAAY,KAAK,OAAO,YAAW;AACzC,YAAI,aAAa,SAAS;AACxB,gBAAM,MAAM,SAAS,KAAK,OAAO,kBAAmB,CAAA;AACpD,eAAK,OAAO,SAAS,QAAQ,CAAC,MAAM;AAClC,cAAE,cAAc,YAAY;AAC5B,cAAE,cAAc,GAAG,IAAI,KAAK;AAAA,UACxC,CAAW;AAAA,QACX,OAAe;AACL,gBAAM,MAAM,KAAK,OAAO,KAAK,WAAW,KAAK,IAAI;AACjD,eAAK,cAAc,YAAY;AAC/B,eAAK,cAAc,GAAG,IAAI,KAAK;AAAA,QAChC;AAAA,MACF;AAAA,IACF;AACD,QAAI,KAAK,cAAc,WAAW;AAChC,iBAAW,OAAO,KAAK,cAAc,SAAS;AAAA,IAC/C;AACD,UAAM,WAAW,KAAK;AACtB,QAAI,KAAK,SAAS,UAAU,GAAG;AAC7B,UAAI,KAAK,cAAc,WAAW;AAChC,cAAM,MAAM,SAAS,KAAK,cAAc,SAAS;AACjD,aAAK,cAAc,GAAG,IAAI;AAC1B,mBAAW,OAAO,GAAG;AAAA,MAEtB;AAAA,IACP,OAAW;AACL,UAAI,YAAY,SAAS;AACvB,cAAM,MAAM,KAAK;AACjB,cAAM,UAAU,KAAK,YAAY,KAAK,QAAQ;AAC9C,aAAK,cAAc,GAAG,IAAI;AAC1B,cAAM,cAAc,SAAS,GAAG;AAChC,aAAK,SAAS,QAAQ,CAAC,MAAM;AAC3B,YAAE,cAAc,YAAY;AAC5B,YAAE,cAAc,WAAW,IAAI;AAAA,QACzC,CAAS;AACD,mBAAW,OAAO,GAAG;AAAA,MAC7B,OAAa;AACL,cAAM,cAAc,CAAA;AACpB,iBAAS,QAAQ,KAAK,UAAU;AAC9B,gBAAM,MAAM,KAAK,KAAK,WAAW,KAAK,IAAI;AAC1C,gBAAM,WAAW,KAAK,KAAK,SAAS,KAAK,MAAM,IAAI;AACnD,cAAI,OAAO,YAAY,GAAG,KAAK,eAAe,YAAY,GAAG,IAAI,UAAU;AACzE,wBAAY,GAAG,IAAI;AACnB,iBAAK,cAAc,GAAG,IAAI;AAAA,UAC3B;AACD,qBAAW,OAAO,GAAG;AAAA,QACtB;AAAA,MACF;AAAA,IACF;AACD,aAAS,KAAK,YAAY;AACxB,UAAI,KAAK,cAAc,CAAC,KAAK,MAAM;AACjC,cAAM,OAAO,KAAK,mBAAmB,CAAC;AACtC,aAAK,cAAc,CAAC,IAAI,QAAQ,OAAO,cAAc;AAAA,MACtD;AAAA,IACF;AAAA,EACF;AAAA,EACD,oBAAoB;AAClB,UAAM,YAAY,KAAK,kBAAkB,KAAK,QAAQ;AACtD,QAAI;AACJ,QAAI,aAAa,MAAM;AACrB,YAAM;AAAA,IACZ,OAAW;AACL,cAAQ,KAAK,gEAAgE;AAC7E,YAAM,UAAU,KAAK,YAAY,KAAK,QAAQ;AAC9C,YAAM,QAAQ,KAAK,WAAW,KAAK,IAAI;AAAA,IACxC;AACD,WAAO;AAAA,EACR;AAAA,EACD,kBAAkB,MAAM;AACtB,QAAI,SAAS;AACb,QAAI,SAAS,EAAE,OAAO;AACtB,SAAK,QAAQ,CAAC,SAAS;AACrB,aAAO,QAAQ;AACf,WAAK,KAAK,WAAW,KAAK,MAAM,MAAM;AACtC,gBAAU,OAAO;AAAA,IACvB,CAAK;AACD,QAAI,SAAS,UAAU;AACrB,aAAO;AAAA,IACb,WAAe,SAAS,SAAS;AAC3B,aAAO;AAAA,IACb,WAAe,SAAS,WAAW;AAC7B,aAAO;AAAA,IACb,WAAe,SAAS,YAAY;AAC9B,aAAO;AAAA,IACb,OAAW;AACL,aAAO;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOD,mBAAmB,WAAW;AAC5B,QAAI,SAAS;AACb,QAAI,QAAQ,CAAC,IAAI;AACjB,WAAO,MAAM,SAAS,GAAG;AACvB,YAAM,SAAS,MAAM,MAAM,SAAS,CAAC;AACrC,UAAI,OAAO,QAAQ;AACjB,YAAI,OAAO,OAAO,SAAS,SAAS,GAAG;AACrC,gBAAM,cAAc,OAAO,eAAe,OAAO,OAAO,UAAU,SAAS;AAC3E,cAAI,eAAe,MAAM;AACvB,qBAAS;AACT,kBAAM,IAAG;AACT,mBAAO,MAAM,SAAS,KAAK,OAAO,SAAS,SAAS,GAAG;AACrD,oBAAM,IAAI,MAAM;AAChB,oBAAM,IAAI,EAAE,eAAe,OAAO,UAAU,SAAS;AACrD,kBAAI,GAAG;AACL,yBAAS;AAAA,cACV;AAAA,YACF;AACD;AAAA,UACZ,OAAiB;AACL,kBAAM,KAAK,OAAO,MAAM;AAAA,UACzB;AAAA,QACX,OAAe;AACL,gBAAM,KAAK,OAAO,MAAM;AAAA,QACzB;AAAA,MACT,OAAa;AACL;AAAA,MACD;AAAA,IACF;AACD,WAAO;AAAA,EACR;AAAA,EACD,qBAAqB;AACnB,SAAK,cAAc,OAAO;AAC1B,SAAK,cAAc,MAAM;AACzB,SAAK,cAAc,QAAQ;AAC3B,SAAK,cAAc,SAAS;AAC5B,SAAK,cAAc,WAAW;AAC9B,SAAK,cAAc,YAAY;AAC/B,QAAI,KAAK,UAAU;AACjB,WAAK,SAAS,QAAQ,CAAC,MAAM,EAAE,mBAAkB,CAAE;AAAA,IACpD;AAAA,EACF;AAAA,EACD,cAAc;AACZ,QAAI,KAAK,cAAc;AACrB,aAAO,KAAK,cAAc;AAC5B,QAAI,OAAO,KAAK;AAChB,QAAI,QAAQ,WAAW;AACrB,aAAO,SAAS;AAChB,UAAI,OAAO,KAAK;AAChB,aAAO,MAAM;AACX,YAAI,KAAK,YAAY,WAAW;AAC9B,iBAAO,KAAK;AACZ;AAAA,QACD;AAAA,MACF;AAAA,IACF;AACD,SAAK,cAAc,WAAW;AAC9B,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAID,YAAY,MAAM,cAAc,UAAU;AACxC,QAAI,KAAK,SAAS,UAAU;AAC1B,aAAO;AACT,QAAI,cAAc;AAClB,aAAS,KAAK,MAAM;AAClB,UAAI,KAAK,MAAM;AACb,cAAM,IAAI,KAAK,KAAK,SAAS,EAAE,IAAI;AACnC,YAAI,IAAI,aAAa;AACnB,wBAAc;AACd,wBAAc;AAAA,QACf;AAAA,MACF;AAAA,IACF;AACD,WAAO;AAAA,EACR;AAAA;AAAA,EAED,eAAe,MAAM,WAAW;AAC9B,QAAI,CAAC,QAAQ,KAAK,UAAU;AAC1B,aAAO;AACT,QAAI,cAAc;AAClB,QAAI,YAAY,EAAE,OAAO;AACzB,QAAI,cAAc;AAClB,UAAM,SAAS,YAAY,SAAS;AACpC,aAAS,KAAK,MAAM;AAClB,UAAI,KAAK,MAAM;AACb,kBAAU,QAAQ;AAClB,UAAE,KAAK,WAAW,KAAK,MAAM,SAAS;AACtC,YAAI,UAAU,QAAQ,QAAQ;AAC5B,gBAAM,IAAI,EAAE,KAAK,SAAS,KAAK,MAAM,IAAI;AACzC,cAAI,IAAI,aAAa;AACnB,0BAAc;AACd,0BAAc;AAAA,UACf;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACD,WAAO;AAAA,EACR;AAAA;AAAA,EAED,mBAAmB,CAAA;AAAA,EACnB,UAAU;AAAA,EACV,UAAU;AAAA,EACV,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,aAAa,OAAO;AAClB,SAAK,YAAY;AAAA,EAClB;AAAA,EACD,eAAe;AACb,WAAO,KAAK;AAAA,EACb;AAAA,EACD,UAAU;AACR,SAAK,UAAU;AACf,SAAK,iBAAiB;EACvB;AAAA,EACD,SAAS;AACP,SAAK,UAAU;AACf,SAAK,iBAAiB;EACvB;AAAA,EACD,UAAU;AACR,SAAK,iBAAiB;EACvB;AAAA,EACD,cAAc;AACZ,WAAO;AAAA,MACL,UAAU,CAAC,MAAM,SAAS;AACxB,aAAK,iBAAiB,IAAI,IAAI;AAAA,MAC/B;AAAA,IACP;AAAA,EACG;AAAA,EACD,QAAQ,CAAC,WAAW;AAClB,QAAI,KAAK,UAAU,QAAQ,CAAC,CAAC,QAAQ;AACnC,WAAK,UAAU;AACf,WAAK,SAAS;AACd,UAAI,KAAK,SAAS;AAChB,aAAK,iBAAiB;MACvB;AAAA,IACF,WAAU,KAAK,UAAU,QAAQ,CAAC,QAAQ;AACzC,WAAK,SAAS;AACd,WAAK,UAAU;AACf,WAAK,mBAAmB;IACzB;AAAA,EACL;AACA;AAEA;AACA;AACA;AACA,SAAS,YAAY,KAAK,GAAG,MAAM,OAAO,SAAS;AACjD,kBAAgB,KAAK,GAAG,QAAQ,GAAG,SAAS,IAAI,SAAS,GAAG,WAAW,cAAc;AACvF;AACA,SAAS,gBAAgB,KAAK,GAAG,MAAM,OAAO,SAAS;AACrD,SAAO,QAAQ,MAAM;AACnB,QAAI,QAAQ,OAAO,KAAK;AACtB,UAAI,IAAI,QAAQ,OAAO;AACvB,UAAI,IAAI,IAAI,OAAO;AACnB,UAAI,IAAI,KAAK,IAAI,CAAC;AAClB,UAAI,IAAI,MAAM,KAAK,IAAI,IAAI,IAAI,CAAC;AAChC,UAAI,KAAK,MAAM,KAAK,KAAK,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,IAAI,IAAI,IAAI,IAAI,KAAK;AACtE,UAAI,UAAU,KAAK,IAAI,MAAM,KAAK,MAAM,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;AAC3D,UAAI,WAAW,KAAK,IAAI,OAAO,KAAK,MAAM,KAAK,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;AACnE,sBAAgB,KAAK,GAAG,SAAS,UAAU,OAAO;AAAA,IACnD;AACD,QAAI,IAAI,IAAI,CAAC;AACb,QAAI,IAAI;AACR,QAAI,IAAI;AACR,SAAK,KAAK,MAAM,CAAC;AACjB,QAAI,QAAQ,IAAI,KAAK,GAAG,CAAC,IAAI,GAAG;AAC9B,WAAK,KAAK,MAAM,KAAK;AAAA,IACtB;AACD,WAAO,IAAI,GAAG;AACZ,WAAK,KAAK,GAAG,CAAC;AACd;AACA;AACA,aAAO,QAAQ,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG;AAC7B;AAAA,MACD;AACD,aAAO,QAAQ,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG;AAC7B;AAAA,MACD;AAAA,IACF;AACD,QAAI,QAAQ,IAAI,IAAI,GAAG,CAAC,MAAM,GAAG;AAC/B,WAAK,KAAK,MAAM,CAAC;AAAA,IACvB,OAAW;AACL;AACA,WAAK,KAAK,GAAG,KAAK;AAAA,IACnB;AACD,QAAI,KAAK,GAAG;AACV,aAAO,IAAI;AAAA,IACZ;AACD,QAAI,KAAK,GAAG;AACV,cAAQ,IAAI;AAAA,IACb;AAAA,EACF;AACH;AACA,SAAS,KAAK,KAAK,GAAG,GAAG;AACvB,MAAI,MAAM,IAAI,CAAC;AACf,MAAI,CAAC,IAAI,IAAI,CAAC;AACd,MAAI,CAAC,IAAI;AACX;AACA,SAAS,eAAe,GAAG,GAAG;AAC5B,SAAO,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI;AAClC;AACA,IAAI,QAAQ,SAAS,OAAO,YAAY;AACtC,MAAI,eAAe;AACjB,iBAAa;AACf,OAAK,cAAc,KAAK,IAAI,GAAG,UAAU;AACzC,OAAK,cAAc,KAAK,IAAI,GAAG,KAAK,KAAK,KAAK,cAAc,GAAG,CAAC;AAChE,OAAK,MAAK;AACZ;AACA,MAAM,UAAU,MAAM,SAAS,MAAM;AACnC,SAAO,KAAK,KAAK,KAAK,MAAM,CAAE,CAAA;AAChC;AACA,MAAM,UAAU,SAAS,SAAS,OAAO,MAAM;AAC7C,MAAI,OAAO,KAAK;AAChB,MAAI,SAAS,CAAA;AACb,MAAI,CAAC,WAAW,MAAM,IAAI,GAAG;AAC3B,WAAO;AAAA,EACR;AACD,MAAI,UAAU,KAAK;AACnB,MAAI,gBAAgB,CAAA;AACpB,SAAO,MAAM;AACX,aAAS,IAAI,GAAG,IAAI,KAAK,SAAS,QAAQ,KAAK;AAC7C,UAAI,QAAQ,KAAK,SAAS,CAAC;AAC3B,UAAI,YAAY,KAAK,OAAO,QAAQ,KAAK,IAAI;AAC7C,UAAI,WAAW,MAAM,SAAS,GAAG;AAC/B,YAAI,KAAK,MAAM;AACb,iBAAO,KAAK,KAAK;AAAA,QAClB,WAAU,SAAS,MAAM,SAAS,GAAG;AACpC,eAAK,KAAK,OAAO,MAAM;AAAA,QACjC,OAAe;AACL,wBAAc,KAAK,KAAK;AAAA,QACzB;AAAA,MACF;AAAA,IACF;AACD,WAAO,cAAc;EACtB;AACD,SAAO;AACT;AACA,MAAM,UAAU,WAAW,SAAS,SAAS,MAAM;AACjD,MAAI,OAAO,KAAK;AAChB,MAAI,CAAC,WAAW,MAAM,IAAI,GAAG;AAC3B,WAAO;AAAA,EACR;AACD,MAAI,gBAAgB,CAAA;AACpB,SAAO,MAAM;AACX,aAAS,IAAI,GAAG,IAAI,KAAK,SAAS,QAAQ,KAAK;AAC7C,UAAI,QAAQ,KAAK,SAAS,CAAC;AAC3B,UAAI,YAAY,KAAK,OAAO,KAAK,OAAO,KAAK,IAAI;AACjD,UAAI,WAAW,MAAM,SAAS,GAAG;AAC/B,YAAI,KAAK,QAAQ,SAAS,MAAM,SAAS,GAAG;AAC1C,iBAAO;AAAA,QACR;AACD,sBAAc,KAAK,KAAK;AAAA,MACzB;AAAA,IACF;AACD,WAAO,cAAc;EACtB;AACD,SAAO;AACT;AACA,MAAM,UAAU,OAAO,SAAS,KAAK,MAAM;AACzC,MAAI,EAAE,QAAQ,KAAK,SAAS;AAC1B,WAAO;AAAA,EACR;AACD,MAAI,KAAK,SAAS,KAAK,aAAa;AAClC,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,WAAK,OAAO,KAAK,CAAC,CAAC;AAAA,IACpB;AACD,WAAO;AAAA,EACR;AACD,MAAI,OAAO,KAAK,OAAO,KAAK,MAAK,GAAI,GAAG,KAAK,SAAS,GAAG,CAAC;AAC1D,MAAI,CAAC,KAAK,KAAK,SAAS,QAAQ;AAC9B,SAAK,OAAO;AAAA,EACb,WAAU,KAAK,KAAK,WAAW,KAAK,QAAQ;AAC3C,SAAK,WAAW,KAAK,MAAM,IAAI;AAAA,EACnC,OAAS;AACL,QAAI,KAAK,KAAK,SAAS,KAAK,QAAQ;AAClC,UAAI,UAAU,KAAK;AACnB,WAAK,OAAO;AACZ,aAAO;AAAA,IACR;AACD,SAAK,QAAQ,MAAM,KAAK,KAAK,SAAS,KAAK,SAAS,GAAG,IAAI;AAAA,EAC5D;AACD,SAAO;AACT;AACA,MAAM,UAAU,SAAS,SAAS,OAAO,MAAM;AAC7C,MAAI,MAAM;AACR,SAAK,QAAQ,MAAM,KAAK,KAAK,SAAS,CAAC;AAAA,EACxC;AACD,SAAO;AACT;AACA,MAAM,UAAU,QAAQ,SAAS,QAAQ;AACvC,OAAK,OAAO,WAAW,CAAA,CAAE;AACzB,SAAO;AACT;AACA,MAAM,UAAU,QAAQ,SAAS,MAAM,MAAM,UAAU,cAAc,MAAM;AACzE,MAAI,CAAC,MAAM;AACT,WAAO;EACR;AACD,MAAI,OAAO,KAAK;AAChB,MAAI,OAAO,KAAK,OAAO,IAAI;AAC3B,MAAI,OAAO,CAAA;AACX,MAAI,UAAU,CAAA;AACd,MAAI,GAAG,QAAQ;AACf,MAAI,QAAQ;AACZ,SAAO,QAAQ,KAAK,QAAQ;AAC1B,QAAI,CAAC,MAAM;AACT,aAAO,KAAK;AACZ,eAAS,KAAK,KAAK,SAAS,CAAC;AAC7B,UAAI,QAAQ;AACZ,gBAAU;AAAA,IACX;AACD,QAAI,KAAK,MAAM;AACb,UAAI,QAAQ,SAAS,MAAM,KAAK,UAAU,QAAQ;AAClD,UAAI,UAAU,IAAI;AAChB,YAAI,aAAa;AACf,sBAAY,QAAQ;AAAA,QACrB;AACD,aAAK,KAAK,IAAI;AACd,gBAAQ;AACR;AAAA,MACD;AAAA,IACF;AACD,QAAI,CAAC,WAAW,CAAC,KAAK,QAAQ,SAAS,MAAM,IAAI,GAAG;AAClD,WAAK,KAAK,IAAI;AACd,cAAQ,KAAK,CAAC;AACd,UAAI;AACJ,eAAS;AACT,aAAO,KAAK,SAAS,CAAC;AAAA,IACvB,WAAU,QAAQ;AACjB;AACA,aAAO,OAAO,SAAS,CAAC;AACxB,gBAAU;AAAA,IAChB,OAAW;AACL,aAAO;AAAA,IACR;AAAA,EACF;AACD,SAAO,QAAQ,OAAO;AACxB;AACA,MAAM,UAAU,SAAS,SAAS,OAAO,MAAM,UAAU;AACvD,MAAI,CAAC,MAAM;AACT,WAAO;AAAA,EACR;AACD,QAAM,QAAQ,CAAA;AACd,QAAM,SAAS,KAAK,MAAM,MAAM,UAAU,KAAK;AAC/C,MAAI,OAAO,SAAS,GAAG;AACrB,WAAO,OAAO,SAAS,CAAC,EAAE,OAAO,MAAM,KAAK;AAC5C,SAAK,UAAU,MAAM;AAAA,EACtB;AACD,SAAO;AACT;AACA,MAAM,UAAU,SAAS,SAAS,OAAO,MAAM;AAC7C,SAAO;AACT;AACA,MAAM,UAAU,cAAc,SAAS,YAAY,GAAG,GAAG;AACvD,SAAO,EAAE,OAAO,EAAE;AACpB;AACA,MAAM,UAAU,cAAc,SAAS,YAAY,GAAG,GAAG;AACvD,SAAO,EAAE,OAAO,EAAE;AACpB;AACA,MAAM,UAAU,SAAS,SAAS,SAAS;AACzC,SAAO,KAAK;AACd;AACA,MAAM,UAAU,WAAW,SAAS,SAAS,MAAM;AACjD,OAAK,OAAO;AACZ,SAAO;AACT;AACA,MAAM,UAAU,OAAO,SAAS,KAAK,MAAM,QAAQ;AACjD,MAAI,gBAAgB,CAAA;AACpB,SAAO,MAAM;AACX,QAAI,KAAK,MAAM;AACb,aAAO,KAAK,MAAM,QAAQ,KAAK,QAAQ;AAAA,IAC7C,OAAW;AACL,oBAAc,KAAK,MAAM,eAAe,KAAK,QAAQ;AAAA,IACtD;AACD,WAAO,cAAc;EACtB;AACD,SAAO;AACT;AACA,MAAM,UAAU,SAAS,SAAS,OAAO,OAAO,MAAM,OAAO,QAAQ;AACnE,MAAI,IAAI,QAAQ,OAAO;AACvB,MAAI,IAAI,KAAK;AACb,MAAI;AACJ,MAAI,KAAK,GAAG;AACV,WAAO,WAAW,MAAM,MAAM,MAAM,QAAQ,CAAC,CAAC;AAC9C,aAAS,MAAM,KAAK,MAAM;AAC1B,WAAO;AAAA,EACR;AACD,MAAI,CAAC,QAAQ;AACX,aAAS,KAAK,KAAK,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAC5C,QAAI,KAAK,KAAK,IAAI,KAAK,IAAI,GAAG,SAAS,CAAC,CAAC;AAAA,EAC1C;AACD,SAAO,WAAW,CAAA,CAAE;AACpB,OAAK,OAAO;AACZ,OAAK,SAAS;AACd,MAAI,KAAK,KAAK,KAAK,IAAI,CAAC;AACxB,MAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,CAAC,CAAC;AACpC,cAAY,OAAO,MAAM,OAAO,IAAI,KAAK,WAAW;AACpD,WAAS,IAAI,MAAM,KAAK,OAAO,KAAK,IAAI;AACtC,QAAI,SAAS,KAAK,IAAI,IAAI,KAAK,GAAG,KAAK;AACvC,gBAAY,OAAO,GAAG,QAAQ,IAAI,KAAK,WAAW;AAClD,aAAS,IAAI,GAAG,KAAK,QAAQ,KAAK,IAAI;AACpC,UAAI,SAAS,KAAK,IAAI,IAAI,KAAK,GAAG,MAAM;AACxC,WAAK,SAAS,KAAK,KAAK,OAAO,OAAO,GAAG,QAAQ,SAAS,CAAC,CAAC;AAAA,IAC7D;AAAA,EACF;AACD,WAAS,MAAM,KAAK,MAAM;AAC1B,SAAO;AACT;AACA,MAAM,UAAU,iBAAiB,SAAS,eAAe,MAAM,MAAM,OAAO,MAAM;AAChF,SAAO,MAAM;AACX,SAAK,KAAK,IAAI;AACd,QAAI,KAAK,QAAQ,KAAK,SAAS,MAAM,OAAO;AAC1C;AAAA,IACD;AACD,QAAI,UAAU;AACd,QAAI,iBAAiB;AACrB,QAAI,aAAa;AACjB,aAAS,IAAI,GAAG,IAAI,KAAK,SAAS,QAAQ,KAAK;AAC7C,UAAI,QAAQ,KAAK,SAAS,CAAC;AAC3B,UAAI,OAAO,SAAS,KAAK;AACzB,UAAI,cAAc,aAAa,MAAM,KAAK,IAAI;AAC9C,UAAI,cAAc,gBAAgB;AAChC,yBAAiB;AACjB,kBAAU,OAAO,UAAU,OAAO;AAClC,qBAAa;AAAA,MACrB,WAAiB,gBAAgB,gBAAgB;AACzC,YAAI,OAAO,SAAS;AAClB,oBAAU;AACV,uBAAa;AAAA,QACd;AAAA,MACF;AAAA,IACF;AACD,WAAO,cAAc,KAAK,SAAS,CAAC;AAAA,EACrC;AACD,SAAO;AACT;AACA,MAAM,UAAU,UAAU,SAAS,QAAQ,MAAM,OAAO,QAAQ;AAC9D,MAAI,OAAO,SAAS,OAAO,KAAK,OAAO,IAAI;AAC3C,MAAI,aAAa,CAAA;AACjB,MAAI,OAAO,KAAK,eAAe,MAAM,KAAK,MAAM,OAAO,UAAU;AACjE,OAAK,SAAS,KAAK,IAAI;AACvB,SAAO,MAAM,IAAI;AACjB,SAAO,SAAS,GAAG;AACjB,QAAI,WAAW,KAAK,EAAE,SAAS,SAAS,KAAK,aAAa;AACxD,WAAK,OAAO,YAAY,KAAK;AAC7B;AAAA,IACN,OAAW;AACL;AAAA,IACD;AAAA,EACF;AACD,OAAK,oBAAoB,MAAM,YAAY,KAAK;AAClD;AACA,MAAM,UAAU,SAAS,SAAS,OAAO,YAAY,OAAO;AAC1D,MAAI,OAAO,WAAW,KAAK;AAC3B,MAAI,IAAI,KAAK,SAAS;AACtB,MAAI,IAAI,KAAK;AACb,OAAK,iBAAiB,MAAM,GAAG,CAAC;AAChC,MAAI,aAAa,KAAK,kBAAkB,MAAM,GAAG,CAAC;AAClD,MAAI,UAAU,WAAW,KAAK,SAAS,OAAO,YAAY,KAAK,SAAS,SAAS,UAAU,CAAC;AAC5F,UAAQ,SAAS,KAAK;AACtB,UAAQ,OAAO,KAAK;AACpB,WAAS,MAAM,KAAK,MAAM;AAC1B,WAAS,SAAS,KAAK,MAAM;AAC7B,MAAI,OAAO;AACT,eAAW,QAAQ,CAAC,EAAE,SAAS,KAAK,OAAO;AAAA,EAC/C,OAAS;AACL,SAAK,WAAW,MAAM,OAAO;AAAA,EAC9B;AACH;AACA,MAAM,UAAU,aAAa,SAAS,WAAW,MAAM,SAAS;AAC9D,OAAK,OAAO,WAAW,CAAC,MAAM,OAAO,CAAC;AACtC,OAAK,KAAK,SAAS,KAAK,SAAS;AACjC,OAAK,KAAK,OAAO;AACjB,WAAS,KAAK,MAAM,KAAK,MAAM;AACjC;AACA,MAAM,UAAU,oBAAoB,SAAS,kBAAkB,MAAM,GAAG,GAAG;AACzE,MAAI;AACJ,MAAI,aAAa;AACjB,MAAI,UAAU;AACd,WAAS,IAAI,GAAG,KAAK,IAAI,GAAG,KAAK;AAC/B,QAAI,QAAQ,SAAS,MAAM,GAAG,GAAG,KAAK,MAAM;AAC5C,QAAI,QAAQ,SAAS,MAAM,GAAG,GAAG,KAAK,MAAM;AAC5C,QAAI,UAAU,iBAAiB,OAAO,KAAK;AAC3C,QAAI,OAAO,SAAS,KAAK,IAAI,SAAS,KAAK;AAC3C,QAAI,UAAU,YAAY;AACxB,mBAAa;AACb,cAAQ;AACR,gBAAU,OAAO,UAAU,OAAO;AAAA,IACxC,WAAe,YAAY,YAAY;AACjC,UAAI,OAAO,SAAS;AAClB,kBAAU;AACV,gBAAQ;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACD,SAAO,SAAS,IAAI;AACtB;AACA,MAAM,UAAU,mBAAmB,SAAS,iBAAiB,MAAM,GAAG,GAAG;AACvE,MAAI,eAAe,KAAK,OAAO,KAAK,cAAc;AAClD,MAAI,eAAe,KAAK,OAAO,KAAK,cAAc;AAClD,MAAI,UAAU,KAAK,eAAe,MAAM,GAAG,GAAG,YAAY;AAC1D,MAAI,UAAU,KAAK,eAAe,MAAM,GAAG,GAAG,YAAY;AAC1D,MAAI,UAAU,SAAS;AACrB,SAAK,SAAS,KAAK,YAAY;AAAA,EAChC;AACH;AACA,MAAM,UAAU,iBAAiB,SAAS,eAAe,MAAM,GAAG,GAAG,SAAS;AAC5E,OAAK,SAAS,KAAK,OAAO;AAC1B,MAAI,UAAU,KAAK;AACnB,MAAI,WAAW,SAAS,MAAM,GAAG,GAAG,OAAO;AAC3C,MAAI,YAAY,SAAS,MAAM,IAAI,GAAG,GAAG,OAAO;AAChD,MAAI,SAAS,WAAW,QAAQ,IAAI,WAAW,SAAS;AACxD,WAAS,IAAI,GAAG,IAAI,IAAI,GAAG,KAAK;AAC9B,QAAI,QAAQ,KAAK,SAAS,CAAC;AAC3B,WAAO,UAAU,KAAK,OAAO,QAAQ,KAAK,IAAI,KAAK;AACnD,cAAU,WAAW,QAAQ;AAAA,EAC9B;AACD,WAAS,MAAM,IAAI,IAAI,GAAG,OAAO,GAAG,OAAO;AACzC,QAAI,UAAU,KAAK,SAAS,GAAG;AAC/B,WAAO,WAAW,KAAK,OAAO,QAAQ,OAAO,IAAI,OAAO;AACxD,cAAU,WAAW,SAAS;AAAA,EAC/B;AACD,SAAO;AACT;AACA,MAAM,UAAU,sBAAsB,SAAS,oBAAoB,MAAM,MAAM,OAAO;AACpF,WAAS,IAAI,OAAO,KAAK,GAAG,KAAK;AAC/B,WAAO,KAAK,CAAC,GAAG,IAAI;AAAA,EACrB;AACH;AACA,MAAM,UAAU,YAAY,SAAS,UAAU,MAAM;AACnD,WAAS,IAAI,KAAK,SAAS,GAAG,WAAW,QAAQ,KAAK,GAAG,KAAK;AAC5D,QAAI,KAAK,CAAC,EAAE,SAAS,WAAW,GAAG;AACjC,UAAI,IAAI,GAAG;AACT,mBAAW,KAAK,IAAI,CAAC,EAAE;AACvB,iBAAS,OAAO,SAAS,QAAQ,KAAK,CAAC,CAAC,GAAG,CAAC;AAAA,MACpD,OAAa;AACL,aAAK,MAAK;AAAA,MACX;AAAA,IACP,OAAW;AACL,eAAS,KAAK,CAAC,GAAG,KAAK,MAAM;AAAA,IAC9B;AAAA,EACF;AACH;AACA,SAAS,SAAS,MAAM,OAAO,UAAU;AACvC,MAAI,CAAC,UAAU;AACb,WAAO,MAAM,QAAQ,IAAI;AAAA,EAC1B;AACD,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,QAAI,SAAS,MAAM,MAAM,CAAC,CAAC,GAAG;AAC5B,aAAO;AAAA,IACR;AAAA,EACF;AACD,SAAO;AACT;AACA,SAAS,SAAS,MAAM,SAAS;AAC/B,WAAS,MAAM,GAAG,KAAK,SAAS,QAAQ,SAAS,IAAI;AACvD;AACA,SAAS,SAAS,MAAM,GAAG,GAAG,SAAS,UAAU;AAC/C,MAAI,CAAC,UAAU;AACb,eAAW,WAAW,IAAI;AAAA,EAC3B;AACD,WAAS,OAAO;AAChB,WAAS,OAAO;AAChB,WAAS,OAAO;AAChB,WAAS,OAAO;AAChB,WAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,QAAI,QAAQ,KAAK,SAAS,CAAC;AAC3B,WAAO,UAAU,KAAK,OAAO,QAAQ,KAAK,IAAI,KAAK;AAAA,EACpD;AACD,SAAO;AACT;AACA,SAAS,OAAO,GAAG,GAAG;AACpB,IAAE,OAAO,KAAK,IAAI,EAAE,MAAM,EAAE,IAAI;AAChC,IAAE,OAAO,KAAK,IAAI,EAAE,MAAM,EAAE,IAAI;AAChC,IAAE,OAAO,KAAK,IAAI,EAAE,MAAM,EAAE,IAAI;AAChC,IAAE,OAAO,KAAK,IAAI,EAAE,MAAM,EAAE,IAAI;AAChC,SAAO;AACT;AACA,SAAS,gBAAgB,GAAG,GAAG;AAC7B,SAAO,EAAE,OAAO,EAAE;AACpB;AACA,SAAS,gBAAgB,GAAG,GAAG;AAC7B,SAAO,EAAE,OAAO,EAAE;AACpB;AACA,SAAS,SAAS,GAAG;AACnB,UAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE;AACzC;AACA,SAAS,WAAW,GAAG;AACrB,SAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE;AACvC;AACA,SAAS,aAAa,GAAG,GAAG;AAC1B,UAAQ,KAAK,IAAI,EAAE,MAAM,EAAE,IAAI,IAAI,KAAK,IAAI,EAAE,MAAM,EAAE,IAAI,MAAM,KAAK,IAAI,EAAE,MAAM,EAAE,IAAI,IAAI,KAAK,IAAI,EAAE,MAAM,EAAE,IAAI;AACpH;AACA,SAAS,iBAAiB,GAAG,GAAG;AAC9B,MAAI,OAAO,KAAK,IAAI,EAAE,MAAM,EAAE,IAAI;AAClC,MAAI,OAAO,KAAK,IAAI,EAAE,MAAM,EAAE,IAAI;AAClC,MAAI,OAAO,KAAK,IAAI,EAAE,MAAM,EAAE,IAAI;AAClC,MAAI,OAAO,KAAK,IAAI,EAAE,MAAM,EAAE,IAAI;AAClC,SAAO,KAAK,IAAI,GAAG,OAAO,IAAI,IAAI,KAAK,IAAI,GAAG,OAAO,IAAI;AAC3D;AACA,SAAS,SAAS,GAAG,GAAG;AACtB,SAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE;AACjF;AACA,SAAS,WAAW,GAAG,GAAG;AACxB,SAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE;AACjF;AACA,SAAS,WAAW,UAAU;AAC5B,SAAO;AAAA,IACL;AAAA,IACA,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,EACV;AACA;AACA,SAAS,YAAY,KAAK,MAAM,OAAO,GAAG,SAAS;AACjD,MAAI,QAAQ,CAAC,MAAM,KAAK;AACxB,SAAO,MAAM,QAAQ;AACnB,YAAQ,MAAM;AACd,WAAO,MAAM;AACb,QAAI,QAAQ,QAAQ,GAAG;AACrB;AAAA,IACD;AACD,QAAI,MAAM,OAAO,KAAK,MAAM,QAAQ,QAAQ,IAAI,CAAC,IAAI;AACrD,gBAAY,KAAK,KAAK,MAAM,OAAO,OAAO;AAC1C,UAAM,KAAK,MAAM,KAAK,KAAK,KAAK;AAAA,EACjC;AACH;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmFK,MAAC,cAAc;AAAA,EAClB,QAAQ;AAAA,EACR,OAAO;AAAA,IACL,MAAM;AAAA;AAAA,MAEJ,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA,IACD,aAAa;AAAA;AAAA,MAEX,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA,IACD,OAAO;AAAA;AAAA,MAEL,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA,IACD,QAAQ;AAAA;AAAA,MAEN,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA,IACD,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAoBV,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA,IACD,MAAM;AAAA;AAAA,MAEJ,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,KAAK;AAAA;AAAA,MAEH,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,WAAW;AAAA,MACT,MAAM;AAAA,IACP;AAAA,IACD,QAAQ;AAAA;AAAA,MAEN,MAAM;AAAA,IACP;AAAA,IACD,kBAAkB;AAAA;AAAA,MAEhB,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,kBAAkB;AAAA;AAAA,MAEhB,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,EACF;AAAA,EACD,MAAM,SAAS,EAAE,UAAU;AACzB,UAAM,QAAQ;AACd,UAAMG,OAAM;AACZ,UAAM,SAAS;AAAA,MACb,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IACV;AACI,UAAM,mBAAmB;AAAA,MACvB,IAAI,cAAc;AAAA,MAClB,IAAI,cAAc;AAAA,MAClB,IAAI,cAAc;AAAA,MAClB,IAAI,cAAc;AAAA,IACxB;AACI,UAAM,eAAe;AAAA,MACnB,MAAM;AAAA,MACN,KAAK;AAAA,MACL,OAAO;AAAA,MACP,QAAQ;AAAA,IACd;AACI,UAAM,mBAAmB;AAAA,MACvB,WAAW;AAAA,MACX,iBAAiB;AAAA,IACvB;AACI,QAAI,WAAW;AACf,UAAM,iBAAiB,IAAI,CAAC;AAC5B,QAAI,eAAe;AACnB,QAAI,eAAe;AACnB,UAAM,YAAY,WAAW,IAAI;AACjC,UAAM,iBAAiB,WAAW,CAAA,CAAE;AACpC,UAAM,iBAAiB,WAAW,CAAA,CAAE;AACpC,UAAM,cAAc;AACpB,UAAM,eAAe;AACrB,QAAI,gBAAgB;AACpB,QAAI,QAAQ;AACZ,UAAM,gBAAgB;AAAA,MACpB,UAAU,MAAM,WAAW,YAAY;AAAA,MACvC,QAAQ,MAAM,WAAW,UAAU;AAAA,MACnC,OAAO,MAAM,WAAW,WAAW,MAAM;AAAA,MAC/C;AAAA,IACA;AACI,UAAM,eAAe,IAAI,KAAK,GAAG,GAAG,aAAa,YAAY;AAC7D,UAAM,gBAAgB,MAAM;AAC1B,aAAO,IAAI;AAAA,QACT,aAAa,IAAI,MAAM;AAAA,QACvB,aAAa,IAAI,MAAM;AAAA,QACvB,aAAa,QAAQ,IAAI,MAAM;AAAA,QAC/B,aAAa,SAAS,IAAI,MAAM;AAAA,MACxC;AAAA,IACA;AACI,UAAM,eAAe,MAAM;AACzB,aAAO,IAAI;AAAA,QACT,aAAa,IAAI,MAAM;AAAA,QACvB,aAAa,IAAI,MAAM;AAAA,QACvB,aAAa,QAAQ,IAAI,MAAM;AAAA,QAC/B,aAAa,SAAS,IAAI,MAAM;AAAA,MACxC;AAAA,IACA;AACI,UAAM,YAAY,CAAC,MAAM,SAAS;AAChC,UAAI,QAAQ;AACZ,UAAI,QAAQ,MAAM;AAChB,gBAAQ,KAAK,QAAQ;AAAA,MACtB;AACD,YAAM,eAAe,MAAM,WAAW,MAAM,OAAO,KAAK,QAAQ,IAAI,CAAC;AACrE,YAAM,WAAW,IAAI;AAAA,QACnB,IAAI;AAAA,UACF,aAAa;AAAA,UACb,aAAa;AAAA,UACb,aAAa;AAAA,UACb,aAAa;AAAA,QACd;AAAA,QACD;AAAA,QACA,aAAa;AAAA,QACb;AAAA,QACA,aAAa,YAAY;AAAA,MACjC;AACM,eAAS,aAAa,aAAa,aAAa,gBAAgB;AAChE,UAAI,QAAQ,MAAM;AAChB,mBAAW;AAAA,MACnB,OAAa;AACL,aAAK,OAAO,QAAQ;AAAA,MACrB;AACD,UAAI,aAAa,cAAc,SAAS,GAAG;AACzC,iBAAS,SAAS,aAAa,cAAc;AAC3C,oBAAU,UAAU,KAAK;AAAA,QAC1B;AAAA,MACF;AAAA,IACP;AACI,UAAM,YAAY,MAAM;AACtB,iBAAW;AACX,cAAQ;AACR,gBAAU,MAAM,MAAM,YAAa,CAAA;AACnC,YAAM,cAAc,SAAS;AAC7B,kBAAY,QAAQ,CAAC,MAAM,EAAE,kBAAmB,CAAA;AAChD,cAAQ,IAAI;AACZ,kBAAY,QAAQ,CAAC,SAAS,MAAM,OAAO,IAAI,CAAC;AAChD,eAAS,IAAI,GAAG,IAAI,YAAY,QAAQ,EAAE,GAAG;AAC3C,cAAM,OAAO,YAAY,CAAC;AAC1B,cAAM,YAAY,KAAK;AACvB,cAAM,YAAY,KAAK,OAAO,aAAY;AAC1C,cAAM,UAAU;AAAA,UACd,UAAU,KAAK,OAAO,KAAK,QAAQ,SAAS,SAAS,CAAC,EAAE;AAAA,UACxD,QAAQ,KAAK,KAAK,QAAQ,SAAS,EAAE;AAAA,UACrC,SAAS,KAAK,OAAO,UAAU,MAAM,KAAK;AAAA,UAC1C,GAAG;AAAA,QACb;AACQ,aAAK,QAAQ,OAAO;AACpB,aAAK,OAAO,QAAQ,OAAO;AAAA,MAC5B;AACD,qBAAe;AAAA,IACrB;AACI,UAAM,mBAAmB;AAAA,MACvB,UAAU,CAAE;AAAA,MACZ,UAAU,CAAE;AAAA,MACZ,OAAO,IAAI,IAAI;AACb,cAAM,MAAM,GAAG;AACf,cAAM,MAAM,IAAI,IAAI,GAAG;AACvB,WAAG,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC;AAC5B,eAAO,MAAM,KAAK,GAAG;AAAA,MACtB;AAAA,MACD,WAAW,MAAM;AACf,cAAM,SAAS,KAAK,OAAO,KAAK,UAAU,IAAI;AAC9C,aAAK,WAAW,KAAK,OAAO,KAAK,UAAU,MAAM;AACjD,aAAK,WAAW;AAAA,MACjB;AAAA,MACD,SAAS;AACP,eAAO,KAAK;AAAA,MACb;AAAA,MACD,SAAS;AACP,aAAK,WAAW,KAAK;AACrB,eAAO,KAAK;AAAA,MACb;AAAA,IACP;AACI,UAAM,eAAe,CAAC,SAAS;AAC7B,UAAI,CAAC;AACH;AACF,qBAAe;AACf,qBAAe;AACf,qBAAe,QAAQ,aAAa;AACpC,UAAI,eAAe;AACjB,sBAAc,OAAM;AACpB,sBAAc,QAAO;AAAA,MACtB;AAAA,IACP;AACI,UAAM,aAAa,CAAC,MAAM,aAAa;AACrC,UAAI,MAAM;AACR,cAAM,aAAa,YAAY,IAAI;AACnC,YAAI,YAAY;AACd,iBAAO,YAAY,QAAQ;AAAA,QAC5B;AAAA,MACF;AAAA,IACP;AACI,UAAM,cAAc,CAAC,YAAY;AAC/B,YAAM,SAAS,OAAO,OAAO;AAC7B,YAAM,WAAW,aAAa,SAAS,MAAM;AAC7C,UAAI,UAAU;AACZ,qBAAa,QAAQ;AACrB,mBAAW,cAAc;AAAA,UACvB,UAAU,cAAc;AAAA,QAClC,CAAS;AAAA,MACT,OAAa;AACL,YAAI,MAAM,QAAQ;AAChB,gBAAM,OAAO;AAAA,YACX,WAAW,iBAAiB,OAAO;AAAA,YACnC,MAAM;AAAA,cACJ,GAAG,cAAc,KAAK,KAAK;AAAA,cAC3B,GAAG,cAAc,KAAK,KAAK;AAAA,cAC3B,OAAO,cAAc,KAAK,SAAS;AAAA,cACnC,QAAQ,cAAc,KAAK,UAAU;AAAA,YACtC;AAAA,UACb,CAAW;AAAA,QACF;AAAA,MACF;AAAA,IACP;AACI,UAAM,eAAe,SAAS;AAAA,MAC5B,MAAM,aAAa;AAAA,MACnB,KAAK,aAAa;AAAA,IACxB,CAAK;AACD,UAAM,SAAS,CAAC,MAAM,aAAa;AACjC,UAAI,CAAC;AACH;AACF,UAAI,KAAK,KAAK,aAAa,KAAK,KAAK,KAAK,aAAa,GAAG;AACxD,qBAAa,IAAI,KAAK;AACtB,qBAAa,IAAI,KAAK;AACtB,cAAM,UAAU,aAAa,MAAM,SAAS,aAAa;AACzD,qBAAa,OAAO,CAAC,aAAa;AAClC,qBAAa,MAAM,CAAC,aAAa;AACjC,yBAAiB,WAAW,MAAM,OAAO,cAAa,CAAE,CAAC;AACzD,YAAI,YAAY,CAAC,MAAM,SAAS,QAAQ,GAAG;AACzC,gBAAM,YAAY,IAAI,MAAM;AAAA,YAC1B,UAAU,aAAa;AAAA,YACvB;AAAA,YACA,SAAS,aAAa;AAAA,YACtB;AAAA,YACA,SAAS;AAAA,YACT,SAAS;AAAA,UACrB;AACU,oBAAU;AAAA,YACR,IAAI,MAAM;AAAA,cACR;AAAA,cACA,MAAM;AACJ,8BAAc,iBAAiB,OAAM,CAAE;AACvC,yBAAS,QAAK;AAAA,cACf;AAAA,cACD;AAAA,YACD;AAAA,UACb;AACU,oBAAU,OAAO,gBAAgB,IAAI,EAAE,eAAe,SAAS;AAC/D,wBAAc,iBAAiB,OAAM,CAAE;AAAA,QACjD,OAAe;AACL,wBAAc,iBAAiB,OAAM,CAAE;AAAA,QACxC;AAAA,MACF;AAAA,IACP;AACI,UAAM,cAAc,CAAC,SAAS;AAC5B,YAAM,OAAO,KAAK;AAClB,YAAM,aAAa,KAAK;AACxB,YAAM,YAAY;AAClB,YAAM,mBAAmB,IAAI;AAAA,QAC3B,UAAU,IAAI,KAAK,MAAM,KAAK,QAAQ,CAAC;AAAA,QACvC,UAAU,IAAI,KAAK,MAAM,KAAK,SAAS,CAAC;AAAA,QACxC,UAAU,QAAQ,KAAK;AAAA,QACvB,UAAU,SAAS,KAAK;AAAA,MAChC;AACM,UAAI,CAAC,iBAAiB,aAAa,UAAU,GAAG;AAC9C,cAAM,QAAQ,iBAAiB,gBAAgB,UAAU;AACzD,eAAO;AAAA,UACL,GAAG,aAAa,IAAI,WAAW,IAAI,MAAM;AAAA,UACzC,GAAG,aAAa,IAAI,WAAW,IAAI,MAAM;AAAA,QACnD;AAAA,MACO;AACD,aAAO;AAAA,IACb;AACI,UAAM,gBAAgB,CAAC,SAAS;AAC9B,qBAAe,QAAQ;AACvB,YAAM,UAA0B,oBAAI;AACpC,eAAS,QAAQ,MAAM;AACrB,YAAI,QAAQ,KAAK;AACjB,iBAAS,QAAQ,OAAO;AACtB,kBAAQ,IAAI,IAAI;AAAA,QACjB;AAAA,MACF;AACD,qBAAe,QAAQ,MAAM,KAAK,OAAO;AAAA,IAC/C;AACI,UAAM,oBAAoB,MAAM;AAC9B,sBAAgB;AAChB,oBAAc,QAAO;AAAA,IAC3B;AACI,UAAM,mBAAmB,MAAM;AAC7B,sBAAgB;AAChB,oBAAc,OAAM;AAAA,IAC1B;AACI,UAAM,YAAY,CAAC,OAAO;AACxB,cAAQ,GAAG,SAAO;AAAA,QAChB,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACH;AACE,wBAAY,GAAG,OAAO;AAAA,UACvB;AACD,iBAAO;AAAA,QACT,KAAK;AACH,wBAAc,QAAO;AACrB,iBAAO;AAAA,QACT;AACE,iBAAO;AAAA,MACV;AAAA,IACP;AACI;AACE;AACA,YAAM,SAAS,aAAa,KAAK;AACjC,YAAM,cAAc;AAAA,QAClB,GAAG,KAAK,MAAM,OAAO,IAAI,aAAa,QAAQ,CAAC;AAAA,QAC/C,GAAG,KAAK,MAAM,OAAO,IAAI,aAAa,SAAS,CAAC;AAAA,MACxD;AACM,aAAO,WAAW;AAAA,IACnB;AACD,UAAM,gBAAgB,MAAM;AAC1B,aAAO,eAAe;AAAA,IAC5B;AACI,UAAM,kBAAkB,MAAM;AAC5B,aAAO,aAAa;AAAA,IAC1B;AACI,UAAM,oBAAoB,MAAM;AAC9B,aAAO;AAAA,IACb;AACI,UAAM,UAAU,CAAC,GAAG,GAAG,aAAa;AAClC,UAAI,MAAM,CAAC,KAAK,MAAM,CAAC,GAAG;AACxB,gBAAQ,KAAKA,MAAK,yCAAyC;AAC3D;AAAA,MACD;AACD,aAAO,EAAE,GAAG,EAAG,GAAE,QAAQ;AAAA,IAC/B;AACI,UAAM,aAAa,CAAC,IAAI,YAAY,MAAM,aAAa;AACrD,YAAM,OAAO,SAAS,KAAK,CAAC,MAAM,EAAE,cAAc,EAAE;AACpD,UAAI,CAAC,MAAM;AACT,gBAAQ,KAAKA,MAAK,2BAA2B,eAAe;AAC5D;AAAA,MACD;AACD,mBAAa,IAAI;AACjB,UAAI,WAAW;AACb,mBAAW,MAAM,QAAQ;AAAA,MAC1B;AAAA,IACP;AACI,UAAM,aAAa,CAAC,IAAI,aAAa;AACnC,YAAM,OAAO,SAAS,KAAK,CAAC,MAAM,EAAE,cAAc,EAAE;AACpD,UAAI,CAAC,MAAM;AACT,gBAAQ,KAAKA,MAAK,2BAA2B,eAAe;AAC5D;AAAA,MACD;AACD,iBAAW,MAAM,QAAQ;AAAA,IAC/B;AACI,UAAM,4BAA4B,MAAM;AACtC,YAAM,OAAO,MAAM;AACnB,aAAO;AAAA,QACL,OAAO,KAAK,OAAO,KAAK,OAAO;AAAA,QAC/B,QAAQ,KAAK,OAAO,KAAK,OAAO;AAAA,MACxC;AAAA,IACA;AACI,UAAM,YAAY,CAAC,cAAc;AAC/B,UAAI,CAAC,aAAa,cAAc;AAC9B,gBAAQ,KAAKA,MAAK,2CAA2C,SAAS;AAAA,MACvE;AACD,kBAAY,aAAa,SAAS,CAAC;AAAA,IACzC;AACI,UAAM,cAAc,MAAM;AACxB;AACA,YAAM,SAAS,aAAa,KAAK;AACjC,YAAM,cAAc;AAAA,QAClB,GAAG,KAAK,MAAM,OAAO,IAAI,aAAa,QAAQ,CAAC;AAAA,QAC/C,GAAG,KAAK,MAAM,OAAO,IAAI,aAAa,SAAS,CAAC;AAAA,MACxD;AACM,aAAO,WAAW;AAAA,IACxB;AACI,UAAM,YAAY;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACN;AACI,WAAO,SAAS;AAChB,WAAO,CAAC,MAAM,WAAW;AACvB,YAAM,6BAA6B,iBAAiB,iBAAiB;AACrE,aAAO,UAAS,GAAI,mBAAmB,OAAO;AAAA,QAC5C,OAAO,eAAe;AAAA,UACpB,MAAM,MAAM;AAAA,UACZ,KAAK,MAAM;AAAA,UACX,OAAO,MAAM,YAAY,EAAE;AAAA,UAC3B,QAAQ,MAAM,YAAY,EAAE;AAAA,UAC5B,UAAU;AAAA,QACpB,CAAS;AAAA,MACT,GAAS;AAAA,QACDH,gBAAmB,OAAO;AAAA,UACxB,SAAS;AAAA,UACT,KAAK;AAAA,UACL,OAAO,eAAe;AAAA,YACpB,MAAM,aAAa;AAAA,YACnB,KAAK,aAAa;AAAA,YAClB,OAAO,MAAM,YAAY,EAAE;AAAA,YAC3B,QAAQ,MAAM,YAAY,EAAE;AAAA,UACxC,CAAW;AAAA,QACX,GAAW;AAAA,UACD,WAAW,KAAK,QAAQ,YAAY;AAAA,UACpC,YAAY,4BAA4B;AAAA,YACtC,WAAW;AAAA,YACX,UAAU;AAAA,cACR;AAAA,cACA,SAAS;AAAA,cACT,QAAQ;AAAA,YACT;AAAA,UACb,GAAa;AAAA,YACD,SAAS,QAAQ,MAAM;AAAA,eACpB,UAAU,IAAI,GAAG,mBAAmB,UAAU,MAAM,WAAW,MAAM,cAAc,GAAG,CAAC,SAAS;AAC/F,uBAAO,UAAW,GAAE,YAAY,MAAM,OAAO,GAAG,WAAW,MAAM;AAAA,kBAC/D,KAAK,KAAK;AAAA,gBAC5B,CAAiB,GAAG,MAAM,EAAE;AAAA,cACb,CAAA,GAAG,GAAG;AAAA,eACN,UAAU,IAAI,GAAG,mBAAmB,UAAU,MAAM,WAAW,MAAM,cAAc,GAAG,CAAC,SAAS;AAC/F,uBAAO,UAAS,GAAI,mBAAmB,OAAO;AAAA,kBAC5C,KAAK,KAAK;AAAA,kBACV,SAAS;AAAA,kBACT,KAAK,KAAK;AAAA,kBACV,OAAO,eAAe;AAAA,oBACpB,MAAM,KAAK,KAAK;AAAA,oBAChB,KAAK,KAAK,KAAK;AAAA,oBACf,OAAO,KAAK,KAAK;AAAA,oBACjB,QAAQ,KAAK,KAAK;AAAA,kBACtC,CAAmB;AAAA,gBACnB,GAAmB;AAAA,kBACD,WAAW,KAAK,QAAQ,WAAW;AAAA,oBACjC,MAAM,KAAK;AAAA,oBACX,SAAS;AAAA,oBACT,UAAU,KAAK,YAAa;AAAA,kBAChD,CAAmB;AAAA,gBACF,GAAE,CAAC;AAAA,cACL,CAAA,GAAG,GAAG;AAAA,YACrB,CAAa;AAAA,YACD,GAAG;AAAA,UACf,GAAa,GAAG,CAAC,UAAU,CAAC;AAAA,QACnB,GAAE,CAAC;AAAA,MACL,GAAE,CAAC;AAAA,IACV;AAAA,EACG;AACH;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,MAAM,cAAc;AAAA,EAClB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,IAKL,OAAO,EAAE,MAAM,UAAU,SAAS,MAAM;AAAA,IAC5C,EAAO;AAAA;AAAA;AAAA;AAAA,IAIH,UAAU,EAAE,MAAM,SAAS,SAAS,MAAO;AAAA;AAAA;AAAA;AAAA,IAI3C,WAAW,EAAE,MAAM,QAAQ,SAAS,KAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAO1C,YAAY,EAAE,MAAM,QAAQ,SAAS,YAAa;AAAA;AAAA;AAAA;AAAA,IAIlD,YAAY,EAAE,MAAM,QAAQ,SAAS,EAAG;AAAA;AAAA;AAAA;AAAA,IAIxC,YAAY,EAAE,MAAM,QAAQ,SAAS,EAAG;AAAA;AAAA;AAAA;AAAA,IAIxC,YAAY,EAAE,MAAM,SAAS,SAAS,KAAM;AAAA;AAAA;AAAA;AAAA,IAI5C,OAAO,EAAE,MAAM,SAAS,SAAS,MAAO;AAAA;AAAA;AAAA;AAAA,IAIxC,MAAM,EAAE,MAAM,SAAS,SAAS,MAAO;AAAA;AAAA;AAAA;AAAA,IAIvC,KAAK,EAAE,MAAM,QAAQ,SAAS,GAAI;AAAA;AAAA;AAAA;AAAA,IAIlC,aAAa,EAAE,MAAM,QAAQ,SAAS,EAAG;AAAA;AAAA;AAAA;AAAA,IAIzC,eAAe,EAAE,MAAM,SAAS,SAAS,KAAM;AAAA;AAAA;AAAA;AAAA,IAI/C,kBAAkB,EAAE,MAAM,QAAQ,SAAS,SAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUrD,WAAW,EAAE,MAAM,QAAQ,SAAS,KAAM;AAAA;AAAA;AAAA;AAAA,IAI1C,SAAS,EAAE,MAAM,UAAU,SAAS,MAAM;AACxC,aAAO;IACb,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA,IAKH,SAAS,EAAE,MAAM,UAAU,SAAS,MAAM;AACxC,aAAO;IACb,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMH,cAAc,EAAE,MAAM,UAAU,SAAS,MAAM;AAC7C,aAAO;IACb,EAAO;AAAA;AAAA;AAAA;AAAA,IAIH,aAAa,EAAE,MAAM,UAAU,SAAS,MAAM;AAC5C,aAAO;IACb,EAAO;AAAA;AAAA;AAAA;AAAA,IAIH,kBAAkB,EAAE,MAAM,UAAU,SAAS,MAAM;AACjD,aAAO;IACb,EAAO;AAAA;AAAA;AAAA;AAAA,IAIH,YAAY,EAAE,MAAM,UAAU,SAAS,MAAM;AAC3C,aAAO;IACb,EAAO;AAAA;AAAA;AAAA;AAAA,IAIH,kBAAkB,EAAE,MAAM,UAAU,SAAS,MAAM;AACjD,aAAO;IACb,EAAO;AAAA;AAAA;AAAA;AAAA,IAIH,QAAQ,EAAE,MAAM,UAAU,SAAS,MAAM;AACvC,aAAO;IACb,EAAO;AAAA;AAAA;AAAA;AAAA,IAIH,kBAAkB,EAAE,MAAM,UAAU,SAAS,MAAM;AACjD,aAAO;IACb,EAAO;AAAA;AAAA;AAAA;AAAA,IAIH,WAAW,EAAE,MAAM,UAAU,SAAS,MAAM;AAC1C,aAAO;IACb,EAAO;AAAA;AAAA;AAAA;AAAA,IAIH,UAAU,EAAE,MAAM,UAAU,SAAS,MAAM;AACzC,aAAO;IACb,EAAO;AAAA;AAAA;AAAA;AAAA,IAIH,WAAW,EAAE,MAAM,UAAU,SAAS,MAAM;AAC1C,aAAO;IACb,EAAO;AAAA;AAAA;AAAA;AAAA,IAIH,WAAW,EAAE,MAAM,UAAU,SAAS,MAAM;AAC1C,aAAO;IACb,EAAO;AAAA;AAAA;AAAA;AAAA,IAIH,WAAW,EAAE,MAAM,UAAU,SAAS,MAAM;AAC1C,aAAO;IACb,EAAO;AAAA;AAAA;AAAA;AAAA,IAIH,kBAAkB,EAAE,MAAM,UAAU,SAAS,MAAM;AACjD,aAAO;IACb,EAAO;AAAA;AAAA;AAAA;AAAA,IAIH,kBAAkB,EAAE,MAAM,UAAU,SAAS,MAAM;AACjD,aAAO;IACb,EAAO;AAAA;AAAA;AAAA;AAAA,IAIH,aAAa,EAAE,MAAM,UAAU,SAAS,MAAM;AAC5C,aAAO;IACb,EAAO;AAAA;AAAA;AAAA;AAAA,IAIH,eAAe,EAAE,MAAM,UAAU,SAAS,MAAM;AAC9C,aAAO;IACb,EAAO;AAAA;AAAA;AAAA;AAAA,IAIH,YAAY,EAAE,MAAM,UAAU,SAAS,MAAM;AAC3C,aAAO;IACb,EAAO;AAAA;AAAA;AAAA;AAAA,IAIH,aAAa,EAAE,MAAM,UAAU,SAAS,MAAM;AAC5C,aAAO;IACb,EAAO;AAAA;AAAA;AAAA;AAAA,IAIH,OAAO,EAAE,MAAM,QAAQ,SAAS,MAAM;AACpC,aAAO;IACb,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA,IAKH,QAAQ,EAAE,MAAM,SAAS,SAAS,KAAM;AAAA,EACzC;AAAA,EACD,YAAY;AAAA,IACV;AAAA,EACD;AAAA,EACD,OAAO;AAAA,IACL,OAAO,UAAU;AACf,eAAS,sBAAsB,QAAQ;AACvC,UAAI,KAAK,SAAS,KAAK,eAAe,GAAG;AACvC,YAAI,UAAU;AACZ,eAAK,cAAa;AAClB,eAAK,MAAM,UAAU,KAAK,MAAM;AAChC,eAAK,YAAY;AAAA,YACf,MAAM;AAAA,YACN,KAAK;AAAA,YACL,OAAO,KAAK,MAAM;AAAA,YAClB,QAAQ,KAAK,MAAM;AAAA,UAC/B;AAAA,QACA,OAAe;AACL,eAAK,YAAY;AAAA,YACf,MAAM;AAAA,YACN,KAAK;AAAA,YACL,OAAO;AAAA,YACP,QAAQ;AAAA,UACpB;AAAA,QACS;AAAA,MACF;AAAA,IACF;AAAA,IACD,MAAM,UAAU;AACd,eAAS,8BAA8B,SAAS,OAAO,WAAW,SAAS,MAAM,aAAa,SAAS,QAAQ,cAAc,SAAS,MAAM;AAC5I,UAAI,KAAK,UAAU,KAAK,eAAe,GAAG;AACxC,aAAK,YAAY;AAAA,UACf,MAAM;AAAA,UACN,KAAK;AAAA,UACL,OAAO,SAAS;AAAA,UAChB,QAAQ,SAAS;AAAA,QAC3B;AAAA,MACO;AAAA,IACF;AAAA,IACD,cAAc,UAAU;AACtB,eAAS,6BAA6B,QAAQ;AAC9C,UAAI,KAAK,SAAS,KAAK,QAAQ;AAC7B,aAAK,MAAM,gBAAgB,KAAK;AAAA,MACjC;AAAA,IACF;AAAA,EACF;AAAA,EACD,QAAQ;AACN,WAAO;AAAA,MACL,OAAO;AAAA,MACP,QAAQ;AAAA,IACd;AAAA,EACG;AAAA,EACD,OAAO;AACL,WAAO;AAAA,MACL,WAAW,CAAE;AAAA,IACnB;AAAA,EACG;AAAA,EACD,UAAU;AAAA,EACT;AAAA,EACD,UAAU;AACR,aAAS,cAAc,KAAK,KAAK;AACjC,QAAI,MAAM,SAAS,KAAK,MAAM,KAAK,OAAM,IAAK,GAAG;AACjD,QAAI,KAAK,WAAW;AAClB,YAAM,KAAK;AAAA,IACZ;AACD,aAAS,gBAAgB,GAAG;AAC5B,QAAI,cAAc;AAClB,QAAI,KAAK;AACP,oBAAc,KAAK;AACrB,QAAI,aAAa;AACjB,QAAI,CAAC,KAAK;AACR,mBAAa,KAAK;AACpB,aAAS,0BAA0B,UAAU;AAC7C,UAAM,YAAY,OAAO,MAAM,UAAS;AACxC,aAAS,cAAc,KAAK,MAAM;AAClC,SAAK,QAAQ,qBAAqB,GAAG;AACrC,QAAI,eAAe;AACnB,QAAI,CAAC,KAAK,OAAO;AACf,UAAI,gBAAgB,GAAG;AACrB,aAAK,QAAQ,IAAI,cAAc,KAAK,UAAU,KAAK;AAAA,MAC3D,OAAa;AACL,aAAK,QAAQ,IAAI,cAAc,KAAK,QAAQ,KAAK,YAAY,aAAa,KAAK,YAAY,UAAU,OAAO,KAAK,UAAU;AAAA,MAC5H;AAAA,IACP,OAAW;AACL,WAAK,MAAM;AACX,qBAAe;AAAA,IAChB;AACD,QAAI,KAAK,SAAS,MAAM;AACtB,UAAI,KAAK,QAAQ;AACf,aAAK,cAAa;AAClB,YAAI,KAAK,OAAO,KAAK,QAAQ;AAC3B,eAAK,MAAM,MAAM,KAAK;AACxB,YAAI,KAAK,gBAAgB;AACvB,eAAK,MAAM,cAAc,KAAK;AAChC,YAAI,KAAK,UAAU;AACjB,eAAK,MAAM,WAAW,KAAK;AAAA,QAC5B;AACD,YAAI,KAAK,OAAO;AACd,eAAK,MAAM,QAAQ,KAAK;AAAA,QACzB;AACD,YAAI,KAAK,MAAM;AACb,eAAK,MAAM,OAAO,KAAK;AAAA,QACxB;AACD,YAAI,CAAC,KAAK,eAAe;AACvB,eAAK,MAAM,gBAAgB,KAAK;AAAA,QACjC;AACD,YAAI,KAAK,qBAAqB,UAAU;AACtC,eAAK,MAAM,mBAAmB,KAAK;AAAA,QACpC;AACD,YAAI,KAAK,aAAa,KAAK,cAAc,IAAI;AAC3C,eAAK,MAAM,aAAa,KAAK,SAAS;AAAA,QACvC;AACD,YAAI,CAAC,cAAc;AACjB,eAAK,MAAM,UAAU,KAAK,MAAM;AAChC,cAAI,KAAK,eAAe,GAAG;AACzB,iBAAK,YAAY;AAAA,cACf,MAAM;AAAA,cACN,KAAK;AAAA,cACL,OAAO,KAAK,MAAM;AAAA,cAClB,QAAQ,KAAK,MAAM;AAAA,YACjC;AAAA,UACW;AAAA,QACF;AAAA,MACF;AACD,WAAK,QAAQ,KAAK,KAAK;AAAA,IACxB;AAAA,EACF;AAAA,EACD,YAAY;AACV,QAAI,KAAK,SAAS,MAAM;AACtB,WAAK,MAAM;AACX,WAAK,QAAQ,IAAI;AAAA,IAClB;AAAA,EACF;AAAA,EACD,SAAS;AAAA,IACP,UAAU,IAAI;AACZ,eAAS,YAAgB;AACzB,WAAK,SAAS;AAAA,IACf;AAAA,IACD,gBAAgB;AACd,UAAI,KAAK,SAAS,KAAK,QAAQ;AAC7B,aAAK,MAAM,iBAAiB,OAAO,KAAK,OAAO;AAC/C,aAAK,MAAM,iBAAiB,SAAS,KAAK,OAAO;AACjD,aAAK,MAAM,iBAAiB,cAAc,KAAK,YAAY;AAC3D,aAAK,MAAM,iBAAiB,aAAa,MAAM;AAC7C,mBAAS,qCAAqC;AAC9C,cAAI,KAAK,eAAe,GAAG;AACzB,iBAAK,YAAY;AAAA,cACf,MAAM;AAAA,cACN,KAAK;AAAA,cACL,OAAO,KAAK,MAAM;AAAA,cAClB,QAAQ,KAAK,MAAM;AAAA,YACjC;AAAA,UACW;AACD,eAAK,YAAW;AAAA,QAC1B,CAAS;AACD,aAAK,MAAM,iBAAiB,kBAAkB,KAAK,gBAAgB;AACnE,aAAK,MAAM,iBAAiB,YAAY,KAAK,UAAU;AACvD,aAAK,MAAM,iBAAiB,kBAAkB,KAAK,gBAAgB;AACnE,aAAK,MAAM,iBAAiB,QAAQ,KAAK,MAAM;AAC/C,aAAK,MAAM,iBAAiB,kBAAkB,KAAK,gBAAgB;AACnE,aAAK,MAAM,iBAAiB,WAAW,KAAK,SAAS;AACrD,aAAK,MAAM,iBAAiB,UAAU,KAAK,QAAQ;AACnD,aAAK,MAAM,iBAAiB,WAAW,KAAK,SAAS;AACrD,aAAK,MAAM,iBAAiB,WAAW,KAAK,SAAS;AACrD,aAAK,MAAM,iBAAiB,WAAW,KAAK,SAAS;AACrD,aAAK,MAAM,iBAAiB,kBAAkB,KAAK,gBAAgB;AACnE,aAAK,MAAM,iBAAiB,kBAAkB,KAAK,gBAAgB;AACnE,aAAK,MAAM,iBAAiB,aAAa,KAAK,WAAW;AACzD,aAAK,MAAM,iBAAiB,eAAe,KAAK,aAAa;AAC7D,aAAK,MAAM,iBAAiB,YAAY,KAAK,UAAU;AACvD,aAAK,MAAM,iBAAiB,aAAa,KAAK,WAAW;AAAA,MAC1D;AAAA,IACF;AAAA,EACF;AACH;AACA,SAAS,YAAY,MAAM,QAAQ,QAAQ,QAAQ,OAAO,UAAU;AAClE,QAAM,gCAAgC,iBAAiB,oBAAoB;AAC3E,SAAO,OAAO,cAAc,KAAK,UAAW,GAAE,mBAAmB,OAAO;AAAA,IACtE,KAAK;AAAA,IACL,OAAO,eAAe,OAAO,KAAK;AAAA,IAClC,iBAAiB;AAAA,EACrB,GAAK;AAAA,IACD,YAAY,+BAA+B;AAAA,MACzC,OAAO,eAAe,MAAM,SAAS;AAAA,MACrC,OAAO,SAAS;AAAA,IACjB,GAAE,MAAM,GAAG,CAAC,SAAS,OAAO,CAAC;AAAA,EAC/B,GAAE,CAAC,KAAK,mBAAmB,IAAI,IAAI;AACtC;AACA,MAAM,YAA4B,4BAAY,aAAa,CAAC,CAAC,UAAU,WAAW,CAAC,CAAC;AAEpF;AACA;AACA;AACA;AACG,IAAC,aAAa;AACd,IAAC,4BAA4B;AAMhC,IAAI,OAAO,mBAAmB;AAC5B,QAAM,gBAAgB,MAAM,OAAO,oCAAoC;AACvE,eAAa,cAAc;AAC3B,8BAA4B,CAAC,aAAa;AACxC,YAAQ,IAAI,uBAAuB;AACnC,eAAW,MAAM;AACf;IACD,GAAE,CAAC;AAAA,EACR;AAmBA;AAEA;AACA;AACA;AACA,IAAI,eAAe;AAAA;AAAA,EAEjB,aAAa;AAAA,EACb,MAAM;AAAA,EACN,SAAS;AAAA;AAAA,EAET,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,YAAY;AAAA;AAAA,EAEZ,WAAW;AAAA;AAAA,EAEX,YAAY;AAAA;AAAA,EAEZ,UAAU;AAAA;AAAA,EAEV,WAAW;AAAA;AAAA;AAGb;AAEA;AACA;AACA;AACA,IAAI,iBAAiB,MAAM,aAAa;AAAA,EACtC,cAAc;AACZ,SAAK,iBAAiB;AACtB,SAAK,qBAAqB;AAC1B,SAAK,aAAa,KAAK;AACvB,SAAK,SAAS;AAAA,EACf;AAAA,EACD,gBAAgB;AACd,QAAI,OAAO;AACX,QAAI,OAAO,OAAO,sBAAsB,eAAe,OAAO,qBAAqB,OAAO,OAAO,kBAAkB,qBAAqB,aAAa;AACnJ,UAAI,kBAAkB,OAAO,kBAAkB,iBAAgB;AAC/D,UAAI,iBAAiB;AACnB,aAAK,eAAe,gBAAgB,gBAAgB,SAAS,CAAC,MAAM,MAAM,kBAAkB,kBAAkB,OAAO,KAAK,cAAc,eAAe,KAAK,iBAAiB,cAAc,KAAK;AAAA,MACjM;AAAA,IACF;AACD,WAAO;AAAA,EACR;AAAA,EACD,uBAAuB,UAAU;AAC/B,QAAI,UAAU;AACZ,WAAK,eAAe,KAAK,QAAQ;AAAA,IAClC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaD,WAAW,UAAU;AACnB,YAAQ,IAAI,0BAA0B;AACtC,QAAI,gBAAgB;AACpB,QAAI,OAAO,OAAO,yBAAyB,eAAe,CAAC,OAAO,sBAAsB;AACtF,sBAAgB;AAAA,IACtB,WAAe,KAAK,WAAW,GAAG;AAC5B,sBAAgB;AAAA,IACtB,WAAe,KAAK,WAAW,GAAG;AAC5B,sBAAgB;AAAA,IACtB,WAAe,KAAK,WAAW,GAAG;AAC5B,sBAAgB;AAAA,IACtB,WAAe,KAAK,WAAW,GAAG;AAC5B,sBAAgB;AAAA,IACjB;AACD,QAAI,kBAAkB,GAAG;AACvB,UAAI,OAAO,aAAa,eAAe,UAAU;AAC/C,mBAAW,MAAM;AACf,mBAAS,aAAa;AAAA,QACvB,GAAE,CAAC;AAAA,MACL;AACD;AAAA,IACD;AACD,QAAI,OAAO,aAAa,eAAe,UAAU;AAC/C,WAAK,mBAAmB,KAAK,QAAQ;AAAA,IACtC;AACD,QAAI,KAAK,SAAS,GAAG;AACnB;AAAA,IACD;AACD,SAAK,SAAS;AACd,WAAO,qBAAqB,WAAW,KAAK,UAAU,KAAK,UAAU,CAAC;AAAA,EACvE;AAAA,EACD,eAAe,QAAQ;AACrB,YAAQ,IAAI,2BAA2B,MAAM;AAC7C,QAAI,MAAM,KAAK,MAAM,MAAM;AAC3B,QAAI,gBAAgB;AACpB,QAAI,OAAO,IAAI,YAAY;AACzB,WAAK,SAAS;AACd,sBAAgB;AAAA,IACtB,OAAW;AACL,WAAK,SAAS;AAAA,IACf;AACD,aAAS,IAAI,GAAG,IAAI,KAAK,mBAAmB,QAAQ,KAAK;AACvD,WAAK,mBAAmB,CAAC,EAAE,aAAa;AAAA,IACzC;AAAA,EACF;AAAA,EACD,WAAW,QAAQ;AACjB,YAAQ,IAAI,+BAA+B,MAAM;AACjD,QAAI,UAAU,KAAK,MAAM,MAAM;AAC/B,QAAI,gBAAgB;AACpB,QAAI,YAAY,QAAQ,WAAW,KAAK,QAAQ,WAAW,IAAI;AAC7D,WAAK,SAAS;AACd,sBAAgB;AAAA,IACjB,WAAU,WAAW,QAAQ,WAAW,KAAK;AAC5C,WAAK,SAAS;AACd,sBAAgB;AAAA,IACtB,OAAW;AACL,WAAK,SAAS;AAAA,IACf;AACD,QAAI,KAAK,WAAW,GAAG;AACrB,cAAQ,IAAI,yEAAyE,QAAQ,SAAS,2BAA2B;AAAA,IAClI;AACD,aAAS,IAAI,GAAG,IAAI,KAAK,mBAAmB,QAAQ,KAAK;AACvD,WAAK,mBAAmB,CAAC,EAAE,aAAa;AAAA,IACzC;AACD,aAAS,YAAY,KAAK,gBAAgB;AACxC,eAAS,aAAa;AAAA,IACvB;AAAA,EACF;AAAA,EACD,yBAAyB;AACvB,WAAO,IAAI,uBAAuB,KAAK,eAAe,KAAK,IAAI;AAC/D,WAAO,IAAI,2BAA2B,KAAK,WAAW,KAAK,IAAI;AAAA,EAChE;AACH;AACA,MAAM,kBAAkB,IAAI;AAC5B,gBAAgB,uBAAsB;AAEtC;AACA;AACA;AACA,MAAM,oBAAoB;AAAA,EACxB,OAAO,UAAU;AACf,WAAO,OAAO,OAAO,kBAAkB,eAAe,CAAC,CAAC,OAAO;AAAA,EAChE;AAAA,EACD,OAAO,YAAY,KAAK;AACtB,QAAI,OAAO,OAAO,kBAAkB,eAAe,OAAO,OAAO,eAAe,eAAe,aAAa;AAC1G,aAAO,OAAO,eAAe,YAAY,GAAG;AAAA,IAC7C;AACD,WAAO,QAAQ,OAAO,KAAK,UAAU;AAAA,MACnC,OAAO;AAAA,MACP,WAAW;AAAA,IACZ,CAAA,CAAC;AAAA,EACH;AAAA,EACD,OAAO,cAAc,KAAK;AACxB,QAAI,OAAO,OAAO,kBAAkB,eAAe,OAAO,OAAO,eAAe,iBAAiB,aAAa;AAC5G,aAAO,OAAO,eAAe,cAAc,GAAG;AAAA,IAC/C;AACD,WAAO;AAAA,EACR;AAAA,EACD,OAAO,YAAY,KAAK,MAAM;AAC5B,QAAI,OAAO,OAAO,kBAAkB,eAAe,OAAO,OAAO,eAAe,eAAe,aAAa;AAC1G,aAAO,OAAO,eAAe,YAAY,KAAK,IAAI;AAAA,IACnD;AACD,WAAO;AAAA,EACR;AAAA,EACD,OAAO,YAAY,KAAK,QAAQ;AAC9B,QAAI,OAAO,OAAO,kBAAkB,eAAe,OAAO,OAAO,eAAe,eAAe,aAAa;AAC1G,aAAO,OAAO,eAAe,YAAY,KAAK,MAAM;AAAA,IACrD;AAAA,EACF;AAAA,EACD,OAAO,eAAe,MAAM;AAC1B,QAAI,OAAO,OAAO,kBAAkB,eAAe,OAAO,OAAO,eAAe,kBAAkB,aAAa;AAC7G,aAAO,eAAe,eAAe,IAAI;AAAA,IAC1C;AAAA,EACF;AACH;AAEA;AACA;AACA;AACA,MAAM,UAAU,MAAM;AAOtB,MAAM,WAAW,CAAC,QAAQ,QAAQ,QAAQ,OAAO,QAAQ;AACzD,SAAS,QAAQ,MAAM;AACrB,QAAM,QAAQ,QAAQ,KAAK,SAAQ,EAAG,MAAM,oBAAoB;AAChE,SAAO,QAAQ,MAAM,CAAC,IAAI,SAAS,OAAO,SAAS;AACrD;AACA,MAAM,iBAAiB,OAAO,UAAU;AACxC,MAAM,eAAe,CAAC,UAAU,eAAe,KAAK,KAAK;AACzD,MAAM,YAAY,CAAC,UAAU;AAC3B,SAAO,aAAa,KAAK,EAAE,MAAM,GAAG,EAAE;AACxC;AACA,SAAS,QAAQ,KAAK,kBAAkB;AACtC,QAAM,MAAsB,uBAAO,OAAO,IAAI;AAC9C,QAAM,OAAO,IAAI,MAAM,GAAG;AAC1B,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,QAAI,KAAK,CAAC,CAAC,IAAI;AAAA,EAChB;AACD,SAAO,mBAAmB,CAAC,QAAQ,CAAC,CAAC,IAAI,IAAI,YAAa,CAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,GAAG;AAClF;AACA,MAAM,eAA+B,wBAAQ,8CAA8C;AAC3F,SAAS,UAAU,OAAO,MAAM;AAC9B,MAAI,OAAO,SAAS,eAAe,SAAS,MAAM;AAChD,WAAO;AAAA,EACR;AACD,MAAI;AACJ,QAAM,eAAe,QAAQ,IAAI;AACjC,MAAI,aAAa,YAAY,GAAG;AAC9B,UAAM,IAAI,OAAO;AACjB,YAAQ,MAAM,aAAa;AAC3B,QAAI,CAAC,SAAS,MAAM,UAAU;AAC5B,cAAQ,iBAAiB;AAAA,IAC1B;AAAA,EACL,WAAa,iBAAiB,UAAU;AACpC,YAAQ,SAAS,KAAK;AAAA,EAC1B,WAAa,iBAAiB,SAAS;AACnC,YAAQ,QAAQ,KAAK;AAAA,EACzB,WAAa,iBAAiB,QAAQ;AAClC,YAAQ,UAAU;AAAA,EACtB,OAAS;AACL,YAAQ,iBAAiB;AAAA,EAC1B;AACD,SAAO;AACT;AAEA;AACA;AACA;AACA,MAAM,SAAS;AAAA,EACb,WAAW;AAAA;AAAA,EAEX,kBAAkB;AAAA,EAClB,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,gBAAgB;AAAA,EAChB,WAAW;AAAA,EACX,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,wBAAwB;AAAA,EACxB,wBAAwB;AAC1B;AAEA;AACA;AACA;AACA,MAAM,kBAAkB;AAAA,EACtB,OAAO,WAAW;AAAA,EAClB,OAAO,OAAO;AACZ,sBAAkB;AAClB,wBAAoB,eAAe,IAAI;AAAA,EACxC;AAAA,EACD,OAAO,SAAS;AACd,sBAAkB,WAAW,KAAK,IAAI,GAAG,kBAAkB,WAAW,CAAC;AACvE,QAAI,kBAAkB,YAAY,GAAG;AACnC,0BAAoB,eAAe,KAAK;AAAA,IACzC;AAAA,EACF;AACH;AAEA;AACA;AACA;AACA,MAAM,MAAM;AACZ,IAAI,WAAW;AACf,MAAM,cAAc,MAAM;AACxB,SAAO,EAAE;AACX;AACA,MAAM,aAAa;AAAA,EACjB,cAAc;AACZ,SAAK,WAAW;AAChB,oBAAgB,uBAAuB,KAAK,iBAAiB,KAAK,IAAI,CAAC;AAAA,EACxE;AAAA,EACD,YAAY,IAAI;AACd,QAAI,CAAC,OAAO,OAAO,KAAK,UAAU,EAAE,GAAG;AACrC,WAAK,SAAS,EAAE,IAAI,IAAI,WAAW,IAAI,IAAI;AAAA,IACjD,OAAW;AACL,WAAK,SAAS,EAAE,EAAE,IAAG;AAAA,IACtB;AACD,QAAI,CAAC,oBAAoB,WAAW;AAClC,sBAAgB,WAAU;AAAA,IAChC,OAAW;AACL,WAAK,SAAS,EAAE,EAAE,sBAAqB;AAAA,IACxC;AACD,WAAO,KAAK,SAAS,EAAE;AAAA,EACxB;AAAA,EACD,aAAa,IAAI;AACf,WAAO,KAAK,SAAS,EAAE;AAAA,EACxB;AAAA,EACD,iBAAiB,QAAQ;AACvB,aAAS,MAAM,KAAK,UAAU;AAC5B,WAAK,SAAS,EAAE,EAAE,sBAAqB;AAAA,IACxC;AAAA,EACF;AACH;AACA,MAAM,gBAAgB,IAAI;AAC1B,MAAM,cAAc;AAAA,EAClB,OAAO,EAAE,MAAM,OAAQ;AAAA,EACvB,UAAU,EAAE,MAAM,QAAS;AAAA,EAC3B,YAAY,EAAE,MAAM,QAAS;AAAA,EAC7B,UAAU,EAAE,MAAM,OAAQ;AAAA,EAC1B,SAAS,EAAE,MAAM,QAAS;AAAA,EAC1B,QAAQ,EAAE,MAAM,QAAS;AAAA,EACzB,gBAAgB,EAAE,MAAM,QAAS;AACnC;AACA,MAAM,WAAW;AAAA,EACf,YAAY,IAAI,cAAc;AAC5B,SAAK,WAAW,KAAK,QAAQ,KAAK,IAAI;AACtC,SAAK,YAAY;AACjB,SAAK,OAAO;AACZ,SAAK,gBAAgB;AACrB,SAAK,WAAW;AAChB,SAAK,iBAAiB;AACtB,SAAK,aAAa;AAClB,SAAK,sBAAsB,KAAK,mBAAmB,KAAK,IAAI;AAC5D,WAAO,QAAQ,mBAAmB,KAAK,mBAAmB;AAAA,EAC3D;AAAA;AAAA,EAED,wBAAwB;AACtB,YAAQ,IAAI,gCAAgC,KAAK,SAAS;AAC1D,QAAI,CAAC,oBAAoB,WAAW;AAClC,cAAQ,MAAM,mBAAmB;AACjC;AAAA,IACD;AACD,wBAAoB,YAAY,KAAK,SAAS,EAAE,KAAK,CAAC,SAAS;AAC7D,YAAM,OAAO,KAAK,MAAM,IAAI;AAC5B,UAAI,KAAK,SAAS,GAAG;AACnB,aAAK,WAAU;AAAA,MACvB,OAAa;AACL,gBAAQ,MAAM,KAAK,uBAAuB,KAAK,SAAS;AAAA,MACzD;AAAA,IACP,CAAK;AAAA,EACF;AAAA,EACD,aAAa;AACX,QAAI,KAAK;AACP;AACF,YAAQ,IAAI,uBAAuB,KAAK,SAAS;AACjD,SAAK,WAAW;AAChB,WAAO,IAAI,UAAU,KAAK,WAAW,KAAK,QAAQ;AAClD,SAAK,WAAU;AAAA,EAChB;AAAA,EACD,aAAa;AACX,QAAI,KAAK,WAAW,KAAK,GAAG;AAC1B,WAAK,YAAY,OAAO,KAAK,WAAW,KAAK,CAAC;AAAA,IAC/C;AACD,QAAI,KAAK,WAAW,QAAQ,KAAK,OAAO;AACtC,WAAK,YAAY,UAAU,KAAK,WAAW,QAAQ,CAAC;AAAA,IACrD;AACD,QAAI,KAAK,WAAW,UAAU,GAAG;AAC/B,WAAK,YAAY,YAAY,KAAK,WAAW,UAAU,CAAC;AAAA,IACzD;AACD,QAAI,KAAK,WAAW,MAAM,GAAG;AAC3B,WAAK,YAAY,QAAQ,KAAK,WAAW,MAAM,CAAC;AAAA,IACjD;AACD,QAAI,KAAK,WAAW,OAAO,GAAG;AAC5B,WAAK,YAAY,SAAS,KAAK,WAAW,OAAO,CAAC;AAAA,IACnD;AAAA,EACF;AAAA;AAAA;AAAA,EAGD,iBAAiB,MAAM,UAAU;AAC/B,QAAI,UAAU;AACZ,WAAK,eAAe,OAAO,IAAI,IAAI;AAAA,IACpC;AAAA,EACF;AAAA,EACD,kBAAkB,SAAS,QAAQ;AACjC,SAAK,eAAe,IAAI,IAAI,GAAG,MAAM;AAAA,EACtC;AAAA,EACD,QAAQ,UAAU;AAChB,YAAQ,IAAI,kBAAkB,QAAQ;AACtC,QAAI,MAAM,KAAK,MAAM,QAAQ;AAC7B,QAAI,YAAY,KAAK,MAAM,IAAI,KAAK;AACpC,QAAI,QAAQ,UAAU;AACtB,QAAI,OAAO,UAAU;AACrB,YAAQ,OAAK;AAAA,MACX,KAAK,OAAO;AACV,aAAK,YAAY,UAAU,IAAI;AAC/B,aAAK,kBAAkB,SAAS;AAChC;AAAA,MACF,KAAK,OAAO;AACV,aAAK,kBAAkB,aAAa;AACpC;AAAA,MACF,KAAK,OAAO;AACV,aAAK,kBAAkB,kBAAkB;AACzC,aAAK,kBAAkB,QAAQ;AAC/B,aAAK,kBAAkB,kBAAkB;AACzC;AAAA,MACF,KAAK,OAAO;AACV,cAAMC,SAAQ;AAAA,UACZ,mBAAmB;AAAA,UACnB,mBAAmB;AAAA,UACnB,kBAAkB;AAAA,UAClB,6BAA6B;AAAA,UAC7B,8BAA8B;AAAA,QACxC;AACQ,cAAM,iBAAiB,KAAK,MAAM;AAClC,YAAI,IAAIA,OAAM;AACd,gBAAQ,gBAAc;AAAA,UACpB,KAAK;AACH,gBAAIA,OAAM;AACV;AAAA,UACF,KAAK;AACH,gBAAIA,OAAM;AACV;AAAA,UACF,KAAK;AACH,gBAAIA,OAAM;AACV;AAAA,UACF,KAAK;AACH,gBAAIA,OAAM;AACV;AAAA,QAGH;AACD,aAAK,kBAAkB,WAAW,CAAC;AACnC;AAAA,MACF,KAAK,OAAO;AACV,gBAAQ,KAAK,UAAQ;AAAA,UACnB,KAAK;AACH,iBAAK,kBAAkB,kBAAkB;AACzC;AAAA,UACF;AACE,uBAAW,qCAAqC,KAAK,QAAQ;AAC7D;AAAA,QACH;AACD;AAAA,IAGH;AAAA,EACF;AAAA;AAAA,EAED,OAAO;AACL,SAAK,YAAY,gBAAgB,IAAI;AAAA,EACtC;AAAA,EACD,OAAO;AACL,SAAK,YAAY,UAAU,KAAK;AAAA,EACjC;AAAA,EACD,QAAQ;AACN,SAAK,YAAY,UAAU,IAAI;AAAA,EAChC;AAAA,EACD,SAAS;AACP,SAAK,MAAK;AACV,SAAK,YAAY,gBAAgB,KAAK;AAAA,EACvC;AAAA;AAAA;AAAA,EAGD,IAAI,IAAI,OAAO;AACb,SAAK,OAAO,OAAO,IAAI;AAAA,EACxB;AAAA;AAAA,EAED,IAAI,OAAO,OAAO;AAChB,SAAK,YAAY,UAAU,KAAK;AAAA,EACjC;AAAA,EACD,IAAI,SAAS;AACX,WAAO,KAAK,YAAY,QAAQ;AAAA,EACjC;AAAA;AAAA,EAED,IAAI,MAAM,OAAO;AACf,SAAK,YAAY,SAAS,KAAK;AAAA,EAChC;AAAA,EACD,IAAI,QAAQ;AACV,WAAO,KAAK,YAAY,OAAO;AAAA,EAChC;AAAA;AAAA,EAED,IAAI,KAAK,OAAO;AACd,SAAK,YAAY,QAAQ,KAAK;AAAA,EAC/B;AAAA;AAAA,EAED,IAAI,SAAS;AACX,WAAO,KAAK,YAAY,QAAQ;AAAA,EACjC;AAAA;AAAA,EAED,IAAI,SAAS,OAAO;AAClB,SAAK,YAAY,YAAY,KAAK;AAAA,EACnC;AAAA;AAAA,EAED,IAAI,WAAW;AACb,WAAO,KAAK,YAAY,UAAU;AAAA,EACnC;AAAA;AAAA,EAED,IAAI,cAAc;AAChB,WAAO,KAAK,YAAY,aAAa;AAAA,EACtC;AAAA,EACD,OAAO,KAAK,MAAM;AAChB,QAAI,CAAC,KAAK;AACR,cAAQ,MAAM,uBAAuB;AACrC;AAAA,IACD;AACD,QAAI;AACJ,QAAI,OAAO,QAAQ;AACjB,gBAAU,IAAI,OAAO,OAAO,IAAI,OAAO,GAAG,EAAE;AAAA,IAClD,OAAW;AACL,gBAAU;AAAA,IACX;AACD,UAAM,QAAQ;AAAA,MACZ,KAAK;AAAA,MACL,MAAM,KAAK,UAAU,IAAI;AAAA,IAC/B;AACI,SAAK,YAAY,OAAO,KAAK;AAAA,EAC9B;AAAA,EACD,YAAY,KAAK,OAAO;AACtB,QAAI,YAAY,eAAe,GAAG,GAAG;AACnC,UAAI,UAAU,OAAO,YAAY,GAAG,EAAE,IAAI,GAAG;AAC3C,gBAAQ,IAAI,KAAK,eAAe,KAAK,KAAK;AAC1C,aAAK,WAAW,GAAG,IAAI;AACvB,YAAI,KAAK,UAAU;AACjB,gBAAM,QAAQ,EAAE,CAAC,GAAG,GAAG,MAAK;AAC5B,8BAAoB,YAAY,KAAK,WAAW,KAAK,UAAU,KAAK,CAAC;AAAA,QACtE;AAAA,MACT,OAAa;AACL,gBAAQ,MAAM,KAAK,6CAA6C,kBAAkB,UAAU,YAAY,GAAG,EAAE,IAAI,UAAU,UAAU,KAAK,gBAAgB,QAAQ;AAAA,MACnK;AAAA,IACP,OAAW;AACL,cAAQ,MAAM,KAAK,YAAY,mBAAmB;AAAA,IACnD;AAAA,EACF;AAAA,EACD,YAAY,KAAK;AACf,QAAI,KAAK,UAAU;AACjB,YAAM,UAAU,oBAAoB,YAAY,KAAK,WAAW,GAAG;AACnE,UAAI,SAAS;AACX,cAAM,MAAM,KAAK,MAAM,OAAO;AAC9B,eAAO,IAAI,GAAG;AAAA,MACf;AAAA,IACF;AACD,WAAO;AAAA,EACR;AAAA,EACD,MAAM;AACJ,SAAK;AACL,YAAQ,IAAI,mBAAmB,KAAK,IAAI;AAAA,EACzC;AAAA,EACD,UAAU;AACR,SAAK;AACL,YAAQ,IAAI,oBAAoB,KAAK,IAAI;AACzC,QAAI,KAAK,SAAS,GAAG;AACnB,aAAO,IAAI,YAAY,KAAK,WAAW,KAAK,QAAQ;AACpD,0BAAoB,cAAc,KAAK,SAAS;AAChD,WAAK,cAAc,aAAa,KAAK,SAAS;AAC9C,aAAO,QAAQ,oBAAoB,KAAK,mBAAmB;AAAA,IAC5D;AAAA,EACF;AAAA,EACD,mBAAmB,OAAO;AACxB,YAAQ,IAAI,KAAK,2BAA2B,KAAK,UAAU,KAAK,CAAC;AACjE,QAAI,MAAM,UAAU,QAAQ;AAC1B,UAAI,OAAO,KAAK,WAAW,eAAe,KAAK,aAAa;AAC1D,cAAM,gBAAgB,KAAK,WAAW,eAAe;AACrD,eAAO,KAAK,WAAW,eAAe;AACtC,YAAI,CAAC,eAAe;AAClB,eAAK,KAAI;AAAA,QACV;AAAA,MACF;AAAA,IACP,OAAW;AACL,WAAK,WAAW,eAAe,IAAI,KAAK,WAAW,QAAQ;AAC3D,WAAK,MAAK;AAAA,IACX;AAAA,EACF;AAAA;AAAA,EAED,mBAAmB;AACjB,sBAAkB,KAAI;AAAA,EACvB;AAAA,EACD,kBAAkB;AAChB,sBAAkB,OAAM;AAAA,EACzB;AACH;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAIA,MAAM,cAAc;AAAA,EAClB,QAAQ;AAAA,EACR,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,IAKL,OAAO,EAAE,MAAM,UAAU,SAAS,MAAM;AAAA,IAC5C,EAAO;AAAA;AAAA;AAAA;AAAA,IAIH,UAAU,EAAE,MAAM,SAAS,SAAS,MAAO;AAAA;AAAA;AAAA;AAAA,IAI3C,WAAW,EAAE,MAAM,QAAQ,SAAS,KAAM;AAAA;AAAA;AAAA;AAAA,IAI1C,OAAO,EAAE,MAAM,SAAS,SAAS,MAAO;AAAA;AAAA;AAAA;AAAA,IAIxC,MAAM,EAAE,MAAM,SAAS,SAAS,MAAO;AAAA;AAAA;AAAA;AAAA,IAIvC,KAAK,EAAE,MAAM,QAAQ,SAAS,GAAI;AAAA;AAAA;AAAA;AAAA,IAIlC,SAAS;AAAA,MACP,MAAM;AAAA,MACN,SAAS,MAAM;AACb,eAAO;MACR;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA,IAKD,SAAS;AAAA,MACP,MAAM;AAAA,MACN,SAAS,MAAM;AACb,eAAO;MACR;AAAA,IACF;AAAA;AAAA;AAAA;AAAA,IAID,aAAa;AAAA,MACX,MAAM;AAAA,MACN,SAAS,MAAM;AACb,eAAO;MACR;AAAA,IACF;AAAA;AAAA;AAAA;AAAA,IAID,kBAAkB;AAAA,MAChB,MAAM;AAAA,MACN,SAAS,MAAM;AACb,eAAO;MACR;AAAA,IACF;AAAA;AAAA;AAAA;AAAA,IAID,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,SAAS,MAAM;AACb,eAAO;MACR;AAAA,IACF;AAAA;AAAA;AAAA;AAAA,IAID,kBAAkB;AAAA,MAChB,MAAM;AAAA,MACN,SAAS,MAAM;AACb,eAAO;MACR;AAAA,IACF;AAAA;AAAA;AAAA;AAAA,IAID,kBAAkB;AAAA,MAChB,MAAM;AAAA,MACN,SAAS,MAAM;AACb,eAAO;MACR;AAAA,IACF;AAAA,EACF;AAAA,EACD,MAAM,SAAS;AACb,UAAM,QAAQ;AACd,UAAM,iBAAiB,OAAO,QAAQ,iBAAkB,IAAG,MAAM,OAAO,OAAO;AAC/E,QAAI,MAAM,cAAc,iBAAiB,MAAM,YAAW;AAC1D,QAAI,MAAM,WAAW;AACnB,YAAM,MAAM,YAAY,MAAM;AAAA,IAC/B;AACD,YAAQ,IAAI,gBAAgB,GAAG;AAC/B,UAAM,QAAQ,cAAc,YAAY,GAAG;AAC3C,UAAM,iBAAiB,SAAS,MAAM,OAAO;AAC7C,UAAM,iBAAiB,SAAS,MAAM,OAAO;AAC7C,UAAM,iBAAiB,aAAa,MAAM,WAAW;AACrD,UAAM,iBAAiB,kBAAkB,MAAM,gBAAgB;AAC/D,UAAM,iBAAiB,QAAQ,MAAM,MAAM;AAC3C,UAAM,iBAAiB,kBAAkB,MAAM,gBAAgB;AAC/D,UAAM,iBAAiB,kBAAkB,MAAM,gBAAgB;AAC/D,QAAI,MAAM,OAAO,MAAM,QAAQ,IAAI;AACjC,YAAM,MAAM,MAAM;AAAA,IACnB;AACD,QAAI,MAAM,UAAU;AAClB,YAAM,WAAW,MAAM;AAAA,IACxB;AACD,QAAI,MAAM,OAAO;AACf,YAAM,QAAQ,MAAM;AAAA,IACrB;AACD,QAAI,MAAM,MAAM;AACd,YAAM,OAAO,MAAM;AAAA,IACpB;AACD,UAAM,QAAQ,KAAK;AACnB,oBAAgB,MAAM;AACpB,UAAI,SAAS,MAAM;AACjB,cAAM,gBAAe;AACrB,cAAM,QAAO;AACb,cAAM,QAAQ,IAAI;AAAA,MACnB;AAAA,IACP,CAAK;AACD,WAAO,CAAC,MAAM,WAAW;AACvB,aAAO,UAAS,GAAI,mBAAmB,OAAO;AAAA,QAC5C,OAAO,EAAE,OAAO,GAAG,QAAQ,EAAG;AAAA,QAC9B,iBAAiB;AAAA,MACzB,CAAO;AAAA,IACP;AAAA,EACG;AACH;AAEA;AACA;AACA;AACG,IAAC;AACD,IAAC;AACJ,IAAI,CAAC,OAAO,QAAQ;AAClB,QAAM,kBAAkB,MAAM,OAAO,gCAAgC;AACrE,6BAA2B,CAAC,aAAa;AACvC,eAAW,UAAU,CAAC;AAAA,EAC1B;AACE,cAAY,gBAAgB;AAC9B,OAAO;AACL,6BAA2B,gBAAgB,WAAW,KAAK,eAAe;AAC1E,cAAY;AACd;AAEA;AACA;AACA;AACA,IAAI,aAAa;AAAA;AAAA,EAEf,aAAa;AAAA,EACb,MAAM;AAAA,EACN,SAAS;AAAA;AAAA,EAET,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,YAAY;AAAA;AAAA,EAEZ,WAAW;AAAA;AAAA,EAEX,YAAY;AAAA;AAAA,EAEZ,UAAU;AAAA;AAAA,EAEV,WAAW;AAAA;AAAA;AAGb;AAEA;AACA;AACA;AACA,MAAM,oBAAoB;AAAA,EACxB,OAAO,aAAa;AAClB,QAAI,OAAO,OAAO,kBAAkB,eAAe,OAAO,OAAO,eAAe,cAAc,aAAa;AACzG,aAAO,OAAO,eAAe;IACnC,OAAW;AACL,cAAQ,MAAM,sCAAsC;AACpD,aAAO;AAAA,IACR;AAAA,EACF;AACH;AAEA;AACA;AACA;AACA,MAAMG,cAAa;AAAA,EACjB,cAAc;AACZ,SAAK,iBAAiB;AACtB,SAAK,qBAAqB;AAC1B,SAAK,aAAa,KAAK;AACvB,SAAK,WAAW;AAChB,SAAK,cAAc;AACnB,SAAK,SAAS;AAAA,EACf;AAAA,EACD,gBAAgB;AACd,QAAI,OAAO;AACX,QAAI,OAAO,OAAO,sBAAsB,eAAe,OAAO,qBAAqB,OAAO,OAAO,kBAAkB,qBAAqB,aAAa;AACnJ,UAAI,kBAAkB,OAAO,kBAAkB,iBAAgB;AAC/D,UAAI,iBAAiB;AACnB,aAAK,eAAe,gBAAgB,gBAAgB,SAAS,CAAC,MAAM,MAAM,kBAAkB,kBAAkB,OAAO,KAAK,cAAc,eAAe,KAAK,iBAAiB,cAAc,KAAK;AAAA,MACjM;AAAA,IACF;AACD,WAAO;AAAA,EACR;AAAA,EACD,uBAAuB,UAAU;AAC/B,QAAI,UAAU;AACZ,WAAK,eAAe,KAAK,QAAQ;AAAA,IAClC;AAAA,EACF;AAAA,EACD,cAAc;AACZ,WAAO;AAAA,MACL,MAAM,KAAK;AAAA,MACX,SAAS,KAAK;AAAA,IACpB;AAAA,EACG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaD,WAAW,UAAU;AACnB,YAAQ,IAAI,0BAA0B;AACtC,QAAI,gBAAgB;AACpB,QAAI,OAAO,OAAO,yBAAyB,eAAe,CAAC,OAAO,sBAAsB;AACtF,sBAAgB;AAAA,IACtB,WAAe,KAAK,WAAW,GAAG;AAC5B,sBAAgB;AAAA,IACtB,WAAe,KAAK,WAAW,GAAG;AAC5B,sBAAgB;AAAA,IACtB,WAAe,KAAK,WAAW,GAAG;AAC5B,sBAAgB;AAAA,IACtB,WAAe,KAAK,WAAW,GAAG;AAC5B,sBAAgB;AAAA,IACjB;AACD,QAAI,kBAAkB,GAAG;AACvB,UAAI,OAAO,aAAa,eAAe,UAAU;AAC/C,mBAAW,MAAM;AACf,mBAAS,aAAa;AAAA,QACvB,GAAE,CAAC;AAAA,MACL;AACD;AAAA,IACD;AACD,QAAI,OAAO,aAAa,eAAe,UAAU;AAC/C,WAAK,mBAAmB,KAAK,QAAQ;AAAA,IACtC;AACD,QAAI,KAAK,SAAS,GAAG;AACnB;AAAA,IACD;AACD,SAAK,SAAS;AACd,WAAO,qBAAqB,WAAW,KAAK,UAAU,KAAK,UAAU,CAAC;AAAA,EACvE;AAAA,EACD,eAAe,QAAQ;AACrB,YAAQ,IAAI,2BAA2B,MAAM;AAC7C,QAAI,MAAM,KAAK,MAAM,MAAM;AAC3B,QAAI,gBAAgB;AACpB,QAAI,OAAO,IAAI,YAAY;AACzB,WAAK,SAAS;AACd,sBAAgB;AAAA,IACtB,OAAW;AACL,WAAK,SAAS;AAAA,IACf;AACD,aAAS,IAAI,GAAG,IAAI,KAAK,mBAAmB,QAAQ,KAAK;AACvD,WAAK,mBAAmB,CAAC,EAAE,aAAa;AAAA,IACzC;AAAA,EACF;AAAA,EACD,WAAW,QAAQ;AACjB,YAAQ,IAAI,+BAA+B,MAAM;AACjD,SAAK,WAAW;AAChB,QAAI,UAAU,KAAK,MAAM,MAAM;AAC/B,QAAI,gBAAgB;AACpB,QAAI,YAAY,QAAQ,WAAW,KAAK,QAAQ,WAAW,IAAI;AAC7D,WAAK,SAAS;AACd,sBAAgB;AAAA,IACjB,WAAU,WAAW,QAAQ,WAAW,KAAK;AAC5C,WAAK,SAAS;AACd,sBAAgB;AAAA,IACtB,OAAW;AACL,WAAK,SAAS;AAAA,IACf;AACD,QAAI,KAAK,WAAW,GAAG;AACrB,WAAK,cAAc;AACnB,cAAQ,IAAI,yEAAyE,QAAQ,SAAS,2BAA2B;AAAA,IACvI,OAAW;AACL,WAAK,cAAc;AAAA,IACpB;AACD,QAAI,OAAO,QAAQ;AACjB,YAAM,UAAU,oBAAoB;AACpC,cAAQ,IAAI,oBAAoB,OAAO;AACvC,UAAI,SAAS;AACX,eAAO,OAAO;AAAA,UACZ;AAAA,UACA;AAAA,UACA;AAAA,QACV;AAAA,MACA,OAAa;AACL,gBAAQ,MAAM,2CAA2C;AAAA,MAC1D;AAAA,IACF;AACD,aAAS,IAAI,GAAG,IAAI,KAAK,mBAAmB,QAAQ,KAAK;AACvD,WAAK,mBAAmB,CAAC,EAAE,aAAa;AAAA,IACzC;AACD,aAAS,YAAY,KAAK,gBAAgB;AACxC,eAAS,aAAa;AAAA,IACvB;AAAA,EACF;AAAA,EACD,yBAAyB;AACvB,WAAO,IAAI,uBAAuB,KAAK,eAAe,KAAK,IAAI;AAC/D,WAAO,IAAI,2BAA2B,KAAK,WAAW,KAAK,IAAI;AAAA,EAChE;AACH;AACA,MAAM,gBAAgB,IAAIA;AAC1B,cAAc,uBAAsB;AAEpC;AACA;AACA;AACA,MAAM,mBAAmB,CAAC,aAAa;AACrC,MAAI,aAAa;AACjB,MAAI,OAAO,YAAY,YAAY,SAAS,CAAC,KAAK,KAAK;AACrD,UAAM,YAAY,SAAS,MAAM,CAAC;AAClC,QAAI,UAAU,UAAU,GAAG;AACzB,UAAI;AACF,cAAM,cAAc,SAAS,WAAW,EAAE;AAC1C,qBAAa;AACb,YAAI,OAAO,eAAe,IAAI,MAAM;AACpC,YAAI,SAAS,eAAe,IAAI,MAAM;AACtC,YAAI,QAAQ,cAAc,MAAM;AAChC,eAAO,OAAO,KAAK,OAAO,KAAK,SAAS,IAAI;AAAA,MAC7C,SAAQ,GAAP;AAAA,MACD;AAAA,IACP,WAAe,UAAU,UAAU,GAAG;AAChC,UAAI;AACF,cAAM,cAAc,SAAS,WAAW,EAAE;AAC1C,qBAAa;AACb,YAAI,MAAM,eAAe,KAAK;AAC9B,YAAI,QAAQ,eAAe,IAAI;AAC/B,YAAI,OAAO,cAAc;AACzB,eAAO,OAAO,KAAK,OAAO,KAAK,SAAS,IAAI;AAAA,MAC7C,SAAQ,GAAP;AAAA,MACD;AAAA,IACP,WAAe,UAAU,UAAU,GAAG;AAChC,UAAI;AACF,cAAM,cAAc,SAAS,WAAW,EAAE;AAC1C,qBAAa;AACb,YAAI,MAAM,eAAe,KAAK;AAC9B,YAAI,QAAQ,eAAe,KAAK;AAChC,YAAI,OAAO,eAAe,IAAI;AAC9B,YAAI,QAAQ,cAAc;AAC1B,eAAO,SAAS,KAAK,OAAO,KAAK,SAAS,IAAI;AAAA,MAC/C,SAAQ,GAAP;AAAA,MACD;AAAA,IACF;AAAA,EACF;AACD,MAAI,CAAC,YAAY;AACf,YAAQ,MAAM,IAAI,MAAM,mBAAmB,QAAQ,CAAC;AAAA,EACrD;AACD,SAAO;AACT;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0BA,MAAM,YAAY;AAAA,EAChB,QAAQ;AAAA,EACR,OAAO;AAAA,IACL,UAAU;AAAA,MACR,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA,IACD,OAAO;AAAA,MACL,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA,IACD,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,WAAW;AAAA,MACT,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,OAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,KAAK;AAAA,MACH,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,EACF;AAAA,EACD,MAAM,SAAS,EAAE,UAAU;AACzB,UAAM,QAAQ;AACd,UAAM,OAAO,IAAI,KAAK;AACtB,QAAI,cAAc;AAClB,QAAI,cAAc,MAAM;AACxB,QAAI,eAAe,MAAM;AACzB,UAAM,gBAAgB,MAAM;AAC1B,aAAO;AAAA,QACL,OAAO;AAAA,QACP,QAAQ;AAAA,MAChB;AAAA,IACA;AACI,UAAM,WAAW,MAAM;AACrB,WAAK,QAAQ;AACb,YAAM,iBAAiB,QAAQ;AAC/B,YAAM,gBAAgB,eAAe;AAAA,QACnC;AAAA,QACA,KAAK,UAAU;AAAA,UACb,aAAa,oBAAoB,WAAY;AAAA,UAC7C,UAAU,MAAM;AAAA,UAChB,OAAO,MAAM;AAAA,UACb,UAAU,MAAM;AAAA,UAChB,WAAW,MAAM;AAAA,UACjB,OAAO,iBAAiB,MAAM,KAAK;AAAA,QAC7C,CAAS;AAAA,MACT;AACM,oBAAc,0BAA0B,MAAM,CAAC,SAAS;AACtD,4BAAoB,KAAK,OAAO,KAAK,MAAM;AAAA,MACnD,CAAO;AACD,YAAM,sBAAsB,CAAC,UAAU,aAAa;AAClD,YAAI,MAAM,SAAS,KAAK,MAAM,UAAU,GAAG;AACzC,yBAAe,KAAK,MAAM,MAAM,SAAS,WAAW,SAAS;AAAA,QACvE,WAAmB,MAAM,UAAU,KAAK,MAAM,SAAS,GAAG;AAChD,wBAAc,KAAK,MAAM,MAAM,UAAU,WAAW,SAAS;AAAA,QAC9D;AAAA,MACT;AACM,UAAI,aAAa,IAAI,QAAQ;AAAA,QAC3B,IAAI,QAAQ,eAAe,aAAa;AAAA,MAChD;AACM,iBAAW,eAAc;AACzB,oBAAc,QAAQ,WAAW,IAAI,IAAI,QAAQ,SAAS,UAAU,CAAC;AAAA,IAC3E;AACI,UAAM,WAAW,cAAc;AAC/B,QAAI,SAAS,MAAM;AACjB,UAAI,SAAS,SAAS;AACpB;MACD;AAAA,IACP,OAAW;AACL,oBAAc,uBAAuB,CAAC,WAAW;AAC/C,YAAI,UAAU,MAAM;AAClB;QACD;AAAA,MACT,CAAO;AAAA,IACF;AACD,oBAAgB,MAAM;AACpB,UAAI,gBAAgB,IAAI;AACtB,gBAAQ,WAAW,OAAO,WAAW;AACrC,sBAAc;AAAA,MACf;AAAA,IACP,CAAK;AACD,WAAO;AAAA,MACL;AAAA,IACN,CAAK;AACD,WAAO,CAAC,MAAM,WAAW;AACvB,aAAO,KAAK,SAAS,UAAS,GAAI,mBAAmB,OAAO;AAAA,QAC1D,KAAK;AAAA,QACL,yBAAyB,MAAM,WAAW;AAAA,QAC1C,OAAO,eAAe;AAAA,UACpB,MAAM,QAAQ;AAAA,UACd,KAAK,QAAQ;AAAA,UACb,OAAO,QAAQ;AAAA,UACf,QAAQ,QAAQ;AAAA,QAC1B,CAAS;AAAA,MACT,GAAS,MAAM,IAAI,CAAC,uBAAuB,CAAC,KAAK,mBAAmB,IAAI,IAAI;AAAA,IAC5E;AAAA,EACG;AACH;AAEA;AACA;AACA;AACG,IAAC;AACD,IAAC;AACJ,IAAI,CAAC,OAAO,QAAQ;AAClB,QAAM,kBAAkB,MAAM,OAAO,mCAAmC;AACxE,6BAA2B,CAAC,aAAa;AACvC,eAAW,UAAU,CAAC;AAAA,EAC1B;AACE,cAAY,gBAAgB;AAC9B,OAAO;AACL,6BAA2B,cAAc,WAAW,KAAK,aAAa;AACtE,cAAY;AACd;"}
|