wonder-image 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (223) hide show
  1. package/DOCS.md +12 -0
  2. package/LICENSE +21 -0
  3. package/README.md +1 -0
  4. package/babel.config.json +3 -0
  5. package/demo/backend/body-end.php +10 -0
  6. package/demo/backend/head.php +93 -0
  7. package/demo/frontend/body-end.php +19 -0
  8. package/demo/frontend/head.php +244 -0
  9. package/demo/wonder-image.php +41 -0
  10. package/dist/0d01fa889dc2b0202b98.png +0 -0
  11. package/dist/203d1199e7aef04c0a34.gif +0 -0
  12. package/dist/26d6ed3fa1c815e4c78f.png +0 -0
  13. package/dist/39795c0b4513de014cf8.woff +0 -0
  14. package/dist/40b30ca122107c2852be.png +0 -0
  15. package/dist/4a7b4107b62ef059ba65.png +0 -0
  16. package/dist/4dce7f71b08755f19759.png +0 -0
  17. package/dist/60af14fddca897f348bb.png +0 -0
  18. package/dist/67172a36bcdeaca8592a.png +0 -0
  19. package/dist/a85c6dc53638f894de38.png +0 -0
  20. package/dist/b7bcc075b395c14ce8c2.woff2 +0 -0
  21. package/dist/backend/body-end.js +3 -0
  22. package/dist/backend/body-end.js.LICENSE.txt +44 -0
  23. package/dist/backend/body-end.js.map +1 -0
  24. package/dist/backend/head.css +2 -0
  25. package/dist/backend/head.css.map +1 -0
  26. package/dist/backend/head.js +3 -0
  27. package/dist/backend/head.js.LICENSE.txt +46 -0
  28. package/dist/backend/head.js.map +1 -0
  29. package/dist/backend/lib.js +2 -0
  30. package/dist/backend/lib.js.LICENSE.txt +1 -0
  31. package/dist/frontend/body-end.js +3 -0
  32. package/dist/frontend/body-end.js.LICENSE.txt +46 -0
  33. package/dist/frontend/body-end.js.map +1 -0
  34. package/dist/frontend/head.css +2 -0
  35. package/dist/frontend/head.css.map +1 -0
  36. package/dist/frontend/head.js +3 -0
  37. package/dist/frontend/head.js.LICENSE.txt +46 -0
  38. package/dist/frontend/head.js.map +1 -0
  39. package/dist/frontend/lib.css +2 -0
  40. package/dist/frontend/lib.css.map +1 -0
  41. package/dist/frontend/lib.js +3 -0
  42. package/dist/frontend/lib.js.LICENSE.txt +151 -0
  43. package/dist/frontend/lib.js.map +1 -0
  44. package/dist/lib/autonumeric/autonumeric.js +3 -0
  45. package/dist/lib/autonumeric/autonumeric.js.LICENSE.txt +47 -0
  46. package/dist/lib/autonumeric/autonumeric.js.map +1 -0
  47. package/dist/lib/bootstrap/bootstrap-datepicker.css +2 -0
  48. package/dist/lib/bootstrap/bootstrap-datepicker.css.map +1 -0
  49. package/dist/lib/bootstrap/bootstrap-datepicker.js +3 -0
  50. package/dist/lib/bootstrap/bootstrap-datepicker.js.LICENSE.txt +42 -0
  51. package/dist/lib/bootstrap/bootstrap-datepicker.js.map +1 -0
  52. package/dist/lib/bootstrap/bootstrap-icons.css +2 -0
  53. package/dist/lib/bootstrap/bootstrap-icons.css.map +1 -0
  54. package/dist/lib/bootstrap/bootstrap-icons.js +3 -0
  55. package/dist/lib/bootstrap/bootstrap-icons.js.LICENSE.txt +13 -0
  56. package/dist/lib/bootstrap/bootstrap-icons.js.map +1 -0
  57. package/dist/lib/bootstrap/bootstrap.css +2 -0
  58. package/dist/lib/bootstrap/bootstrap.css.map +1 -0
  59. package/dist/lib/bootstrap/bootstrap.js +3 -0
  60. package/dist/lib/bootstrap/bootstrap.js.LICENSE.txt +44 -0
  61. package/dist/lib/bootstrap/bootstrap.js.map +1 -0
  62. package/dist/lib/chartjs/chart.js +3 -0
  63. package/dist/lib/chartjs/chart.js.LICENSE.txt +1467 -0
  64. package/dist/lib/chartjs/chart.js.map +1 -0
  65. package/dist/lib/datatables/datatables.css +2 -0
  66. package/dist/lib/datatables/datatables.css.map +1 -0
  67. package/dist/lib/datatables/datatables.js +3 -0
  68. package/dist/lib/datatables/datatables.js.LICENSE.txt +8988 -0
  69. package/dist/lib/datatables/datatables.js.map +1 -0
  70. package/dist/lib/editorjs/editor.js +3 -0
  71. package/dist/lib/editorjs/editor.js.LICENSE.txt +5812 -0
  72. package/dist/lib/editorjs/editor.js.map +1 -0
  73. package/dist/lib/fancyapps/fancyapps.css +2 -0
  74. package/dist/lib/fancyapps/fancyapps.css.map +1 -0
  75. package/dist/lib/fancyapps/fancyapps.js +3 -0
  76. package/dist/lib/fancyapps/fancyapps.js.LICENSE.txt +19 -0
  77. package/dist/lib/fancyapps/fancyapps.js.map +1 -0
  78. package/dist/lib/filepond/filepond.css +2 -0
  79. package/dist/lib/filepond/filepond.css.map +1 -0
  80. package/dist/lib/filepond/filepond.js +3 -0
  81. package/dist/lib/filepond/filepond.js.LICENSE.txt +2797 -0
  82. package/dist/lib/filepond/filepond.js.map +1 -0
  83. package/dist/lib/fullcalendar/fullcalendar.js +3 -0
  84. package/dist/lib/fullcalendar/fullcalendar.js.LICENSE.txt +3787 -0
  85. package/dist/lib/fullcalendar/fullcalendar.js.map +1 -0
  86. package/dist/lib/jquery/jquery-plugin.css +2 -0
  87. package/dist/lib/jquery/jquery-plugin.css.map +1 -0
  88. package/dist/lib/jquery/jquery-plugin.js +3 -0
  89. package/dist/lib/jquery/jquery-plugin.js.LICENSE.txt +60 -0
  90. package/dist/lib/jquery/jquery-plugin.js.map +1 -0
  91. package/dist/lib/jquery/jquery.js +3 -0
  92. package/dist/lib/jquery/jquery.js.LICENSE.txt +3240 -0
  93. package/dist/lib/jquery/jquery.js.map +1 -0
  94. package/dist/lib/jstree/jstree.css +2 -0
  95. package/dist/lib/jstree/jstree.css.map +1 -0
  96. package/dist/lib/jstree/jstree.js +3 -0
  97. package/dist/lib/jstree/jstree.js.LICENSE.txt +42 -0
  98. package/dist/lib/jstree/jstree.js.map +1 -0
  99. package/dist/lib/moment/moment.js +3 -0
  100. package/dist/lib/moment/moment.js.LICENSE.txt +772 -0
  101. package/dist/lib/moment/moment.js.map +1 -0
  102. package/dist/lib/quilljs/quill.css +2 -0
  103. package/dist/lib/quilljs/quill.css.map +1 -0
  104. package/dist/lib/quilljs/quill.js +3 -0
  105. package/dist/lib/quilljs/quill.js.LICENSE.txt +3038 -0
  106. package/dist/lib/quilljs/quill.js.map +1 -0
  107. package/dist/lib/swiperjs/swiper-plugin.css +2 -0
  108. package/dist/lib/swiperjs/swiper-plugin.css.map +1 -0
  109. package/dist/lib/swiperjs/swiper-plugin.js +3 -0
  110. package/dist/lib/swiperjs/swiper-plugin.js.LICENSE.txt +1113 -0
  111. package/dist/lib/swiperjs/swiper-plugin.js.map +1 -0
  112. package/dist/lib/swiperjs/swiper.css +2 -0
  113. package/dist/lib/swiperjs/swiper.css.map +1 -0
  114. package/dist/lib/swiperjs/swiper.js +3 -0
  115. package/dist/lib/swiperjs/swiper.js.LICENSE.txt +651 -0
  116. package/dist/lib/swiperjs/swiper.js.map +1 -0
  117. package/dist/lib/videojs/video.css +2 -0
  118. package/dist/lib/videojs/video.css.map +1 -0
  119. package/dist/lib/videojs/video.js +3 -0
  120. package/dist/lib/videojs/video.js.LICENSE.txt +23391 -0
  121. package/dist/lib/videojs/video.js.map +1 -0
  122. package/package.json +95 -0
  123. package/src/build/backend/css/header.css +252 -0
  124. package/src/build/backend/css/input.css +295 -0
  125. package/src/build/backend/css/list.css +57 -0
  126. package/src/build/backend/css/order.css +99 -0
  127. package/src/build/backend/js/ajax.js +96 -0
  128. package/src/build/backend/js/alert.js +78 -0
  129. package/src/build/backend/js/bootstrap.js +52 -0
  130. package/src/build/backend/js/form/editor.js +293 -0
  131. package/src/build/backend/js/form/file.js +142 -0
  132. package/src/build/backend/js/form/filepond.js +11 -0
  133. package/src/build/backend/js/form/input.js +313 -0
  134. package/src/build/backend/js/form/inputRow.js +164 -0
  135. package/src/build/backend/js/form/send.js +14 -0
  136. package/src/build/backend/js/form/set.js +314 -0
  137. package/src/build/backend/js/jquery.js +15 -0
  138. package/src/build/backend/js/list.js +19 -0
  139. package/src/build/backend/js/modal.js +31 -0
  140. package/src/build/backend/js/pageSetUp.js +125 -0
  141. package/src/build/backend/js/utility.js +38 -0
  142. package/src/build/frontend/css/class/dimension.css +3376 -0
  143. package/src/build/frontend/css/class/function.css +316 -0
  144. package/src/build/frontend/css/class/grid.css +240 -0
  145. package/src/build/frontend/css/class/margin.css +823 -0
  146. package/src/build/frontend/css/class/padding.css +760 -0
  147. package/src/build/frontend/css/class/position.css +351 -0
  148. package/src/build/frontend/css/class/resize.css +24 -0
  149. package/src/build/frontend/css/class/section.css +41 -0
  150. package/src/build/frontend/css/class/text.css +244 -0
  151. package/src/build/frontend/css/components/alert.css +42 -0
  152. package/src/build/frontend/css/components/button.css +107 -0
  153. package/src/build/frontend/css/components/dropdown.css +118 -0
  154. package/src/build/frontend/css/components/form/address.css +26 -0
  155. package/src/build/frontend/css/components/form/checkbox.css +65 -0
  156. package/src/build/frontend/css/components/form/date.css +133 -0
  157. package/src/build/frontend/css/components/form/input.css +176 -0
  158. package/src/build/frontend/css/components/form/select.css +69 -0
  159. package/src/build/frontend/css/components/header/hamburger/hamburger-1.css +56 -0
  160. package/src/build/frontend/css/components/header/hamburger/hamburger.css +58 -0
  161. package/src/build/frontend/css/components/header/header.css +57 -0
  162. package/src/build/frontend/css/components/header/mobile-nav.css +79 -0
  163. package/src/build/frontend/css/components/modal.css +76 -0
  164. package/src/build/frontend/css/components/spinner.css +37 -0
  165. package/src/build/frontend/css/generator/dimension.php +93 -0
  166. package/src/build/frontend/css/generator/margin.php +48 -0
  167. package/src/build/frontend/css/generator/padding.php +48 -0
  168. package/src/build/frontend/css/lib.css +3 -0
  169. package/src/build/frontend/css/main.css +37 -0
  170. package/src/build/frontend/js/alert.js +64 -0
  171. package/src/build/frontend/js/aos.js +9 -0
  172. package/src/build/frontend/js/dropdown.js +73 -0
  173. package/src/build/frontend/js/form/input.js +211 -0
  174. package/src/build/frontend/js/form/list.js +155 -0
  175. package/src/build/frontend/js/form/select.js +108 -0
  176. package/src/build/frontend/js/form/send.js +137 -0
  177. package/src/build/frontend/js/header.js +12 -0
  178. package/src/build/frontend/js/modal.js +26 -0
  179. package/src/build/frontend/js/pageSetUp.js +35 -0
  180. package/src/build/frontend/js/scroll.js +70 -0
  181. package/src/build/frontend/js/utility.js +21 -0
  182. package/src/build/global/js/canvas.js +82 -0
  183. package/src/build/global/js/fetch.js +47 -0
  184. package/src/build/global/js/form/autonumeric.js +136 -0
  185. package/src/build/global/js/form/phone.js +19 -0
  186. package/src/build/global/js/utility.js +88 -0
  187. package/src/build/global/js/video.js +7 -0
  188. package/src/build/lib/editorjs/gallery.js +39 -0
  189. package/src/build/lib/editorjs/hyperlink.js +170 -0
  190. package/src/build/lib/editorjs/video.js +61 -0
  191. package/src/build/lib/swiperjs/effect-carousel.css +24 -0
  192. package/src/build/lib/swiperjs/effect-carousel.esm.js +102 -0
  193. package/src/build/lib/swiperjs/effect-shutters.css +33 -0
  194. package/src/build/lib/swiperjs/effect-shutters.esm.js +114 -0
  195. package/src/build/lib/swiperjs/effect-slicer.css +39 -0
  196. package/src/build/lib/swiperjs/effect-slicer.esm.js +198 -0
  197. package/src/build/lib/swiperjs/swiper-gl.css +44 -0
  198. package/src/build/lib/swiperjs/swiper-gl.esm.js +6063 -0
  199. package/src/export/backend/body-end.js +4 -0
  200. package/src/export/backend/head.js +25 -0
  201. package/src/export/backend/lib.js +0 -0
  202. package/src/export/frontend/body-end.js +9 -0
  203. package/src/export/frontend/head.js +42 -0
  204. package/src/export/frontend/lib.js +17 -0
  205. package/src/export/lib/autonumeric/autonumeric.js +3 -0
  206. package/src/export/lib/bootstrap/bootstrap-datepicker.js +4 -0
  207. package/src/export/lib/bootstrap/bootstrap-icons.js +2 -0
  208. package/src/export/lib/bootstrap/bootstrap.js +3 -0
  209. package/src/export/lib/chartjs/chart.js +4 -0
  210. package/src/export/lib/datatables/datatables.js +6 -0
  211. package/src/export/lib/editorjs/editor.js +48 -0
  212. package/src/export/lib/fancyapps/fancyapps.js +7 -0
  213. package/src/export/lib/filepond/filepond.js +51 -0
  214. package/src/export/lib/fullcalendar/fullcalendar.js +29 -0
  215. package/src/export/lib/jquery/jquery-plugin.js +14 -0
  216. package/src/export/lib/jquery/jquery.js +4 -0
  217. package/src/export/lib/jstree/jstree.js +2 -0
  218. package/src/export/lib/moment/moment.js +12 -0
  219. package/src/export/lib/quilljs/quill.js +4 -0
  220. package/src/export/lib/swiperjs/swiper-plugin.js +20 -0
  221. package/src/export/lib/swiperjs/swiper.js +4 -0
  222. package/src/export/lib/videojs/video.js +3 -0
  223. package/webpack.config.js +79 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lib/swiperjs/swiper-plugin.js","mappings":";mBACA,IAAIA,EAAsB,CCA1BA,EAAyBC,IACH,oBAAXC,QAA0BA,OAAOC,aAC1CC,OAAOC,eAAeJ,EAASC,OAAOC,YAAa,CAAEG,MAAO,WAE7DF,OAAOC,eAAeJ,EAAS,aAAc,CAAEK,OAAO,GAAO,QCe9D,SAAS,EAAOC,GACZ,IAAIC,EAAID,EAAE,GACNE,EAAIF,EAAE,GACNG,EAAIH,EAAE,GACV,OAAOI,KAAKC,KAAKJ,EAAIA,EAAIC,EAAIA,EAAIC,EAAIA,EACzC,CASA,SAASG,EAAOC,EAAKP,GAIjB,OAHAO,EAAI,GAAKP,EAAE,GACXO,EAAI,GAAKP,EAAE,GACXO,EAAI,GAAKP,EAAE,GACJO,CACX,CA0BA,SAASC,EAAID,EAAKP,EAAGS,GAIjB,OAHAF,EAAI,GAAKP,EAAE,GAAKS,EAAE,GAClBF,EAAI,GAAKP,EAAE,GAAKS,EAAE,GAClBF,EAAI,GAAKP,EAAE,GAAKS,EAAE,GACXF,CACX,CAUA,SAASG,EAASH,EAAKP,EAAGS,GAItB,OAHAF,EAAI,GAAKP,EAAE,GAAKS,EAAE,GAClBF,EAAI,GAAKP,EAAE,GAAKS,EAAE,GAClBF,EAAI,GAAKP,EAAE,GAAKS,EAAE,GACXF,CACX,CAwCA,SAASI,EAAQJ,EAAKP,EAAGS,GAIrB,OAHAF,EAAI,GAAKP,EAAE,GAAKS,EAChBF,EAAI,GAAKP,EAAE,GAAKS,EAChBF,EAAI,GAAKP,EAAE,GAAKS,EACTF,CACX,CAoCA,SAASK,EAAcZ,GACnB,IAAIC,EAAID,EAAE,GACNE,EAAIF,EAAE,GACNG,EAAIH,EAAE,GACV,OAAOC,EAAIA,EAAIC,EAAIA,EAAIC,EAAIA,CAC/B,CAqCA,SAASU,EAAYN,EAAKP,GACtB,IAAIC,EAAID,EAAE,GACNE,EAAIF,EAAE,GACNG,EAAIH,EAAE,GACNc,EAAMb,EAAIA,EAAIC,EAAIA,EAAIC,EAAIA,EAQ9B,OAPIW,EAAM,IAENA,EAAM,EAAIV,KAAKC,KAAKS,IAExBP,EAAI,GAAKP,EAAE,GAAKc,EAChBP,EAAI,GAAKP,EAAE,GAAKc,EAChBP,EAAI,GAAKP,EAAE,GAAKc,EACTP,CACX,CASA,SAASQ,EAAMf,EAAGS,GACd,OAAOT,EAAE,GAAKS,EAAE,GAAKT,EAAE,GAAKS,EAAE,GAAKT,EAAE,GAAKS,EAAE,EAChD,CAUA,SAASO,EAAMT,EAAKP,EAAGS,GACnB,IAAIQ,EAAKjB,EAAE,GACPkB,EAAKlB,EAAE,GACPmB,EAAKnB,EAAE,GACPoB,EAAKX,EAAE,GACPY,EAAKZ,EAAE,GACPa,EAAKb,EAAE,GAKX,OAHAF,EAAI,GAAKW,EAAKI,EAAKH,EAAKE,EACxBd,EAAI,GAAKY,EAAKC,EAAKH,EAAKK,EACxBf,EAAI,GAAKU,EAAKI,EAAKH,EAAKE,EACjBb,CACX,QC/OsB,oBAAXgB,QAA0BA,OAAOC,6BAC1CD,OAAOC,4BAA4B,CAAC,iBD0WtC,MAAMC,EAAQ,WACV,MAAMC,EAAQ,CAAC,EAAG,EAAG,GACfC,EAAQ,CAAC,EAAG,EAAG,GAErB,OAAO,SAAU3B,EAAGS,GAChBH,EAAOoB,EAAO1B,GACdM,EAAOqB,EAAOlB,GAEdI,EAAYa,EAAOA,GACnBb,EAAYc,EAAOA,GAEnB,IAAIC,EAASb,EAAMW,EAAOC,GAE1B,OAAIC,EAAS,EACF,EACAA,GAAU,EACVxB,KAAKyB,GAELzB,KAAK0B,KAAKF,EAEzB,CACH,CArBa,GAkCd,MAAMG,UAAaC,MACf,WAAAC,CAAYhC,EAAI,EAAGC,EAAID,EAAGE,EAAIF,GAE1B,OADAiC,MAAMjC,EAAGC,EAAGC,GACLgC,IACX,CAEA,KAAIlC,GACA,OAAOkC,KAAK,EAChB,CAEA,KAAIjC,GACA,OAAOiC,KAAK,EAChB,CAEA,KAAIhC,GACA,OAAOgC,KAAK,EAChB,CAEA,KAAIlC,CAAEmC,GACFD,KAAK,GAAKC,CACd,CAEA,KAAIlC,CAAEkC,GACFD,KAAK,GAAKC,CACd,CAEA,KAAIjC,CAAEiC,GACFD,KAAK,GAAKC,CACd,CAEA,GAAAC,CAAIpC,EAAGC,EAAID,EAAGE,EAAIF,GACd,OAAIA,EAAEqC,OAAeH,KAAKI,KAAKtC,IAzYvC,SAAeM,EAAKN,EAAGC,EAAGC,GACtBI,EAAI,GAAKN,EACTM,EAAI,GAAKL,EACTK,EAAI,GAAKJ,CAEb,CAqYQqC,CAAML,KAAMlC,EAAGC,EAAGC,GACXgC,KACX,CAEA,IAAAI,CAAKH,GAED,OADA9B,EAAO6B,KAAMC,GACND,IACX,CAEA,GAAA3B,CAAIiC,EAAIC,GAGJ,OAFIA,EAAIlC,EAAI2B,KAAMM,EAAIC,GACjBlC,EAAI2B,KAAMA,KAAMM,GACdN,IACX,CAEA,GAAAQ,CAAIF,EAAIC,GAGJ,OAFIA,EAAIhC,EAASyB,KAAMM,EAAIC,GACtBhC,EAASyB,KAAMA,KAAMM,GACnBN,IACX,CAEA,QAAAS,CAASR,GAlXb,IAAoB7B,EAAKP,EAAGS,EAqXpB,OAFI2B,EAAEE,QAnXWtC,EAmXcmC,KAnXX1B,EAmXiB2B,GAnXzB7B,EAmXa4B,MAlXzB,GAAKnC,EAAE,GAAKS,EAAE,GAClBF,EAAI,GAAKP,EAAE,GAAKS,EAAE,GAClBF,EAAI,GAAKP,EAAE,GAAKS,EAAE,IAiXTE,EAAQwB,KAAMA,KAAMC,GAClBD,IACX,CAEA,MAAAU,CAAOT,GAzWX,IAAgB7B,EAAKP,EAAGS,EA4WhB,OAFI2B,EAAEE,QA1WOtC,EA0WcmC,KA1WX1B,EA0WiB2B,GA1WzB7B,EA0Wa4B,MAzWrB,GAAKnC,EAAE,GAAKS,EAAE,GAClBF,EAAI,GAAKP,EAAE,GAAKS,EAAE,GAClBF,EAAI,GAAKP,EAAE,GAAKS,EAAE,IAwWTE,EAAQwB,KAAMA,KAAM,EAAIC,GACtBD,IACX,CAEA,OAAAW,CAAQV,EAAID,MA3RhB,IAAiB5B,EAAKP,EA6Rd,OA7RcA,EA4RAoC,GA5RL7B,EA4RD4B,MA3RR,GAAK,EAAMnC,EAAE,GACjBO,EAAI,GAAK,EAAMP,EAAE,GACjBO,EAAI,GAAK,EAAMP,EAAE,GA0RNmC,IACX,CAGA,GAAArB,GACI,OAAO,EAAOqB,KAClB,CAEA,QAAAY,CAASX,GACL,OAAIA,EA7VZ,SAAkBpC,EAAGS,GACjB,IAAIR,EAAIQ,EAAE,GAAKT,EAAE,GACbE,EAAIO,EAAE,GAAKT,EAAE,GACbG,EAAIM,EAAE,GAAKT,EAAE,GACjB,OAAOI,KAAKC,KAAKJ,EAAIA,EAAIC,EAAIA,EAAIC,EAAIA,EACzC,CAwVsB4C,CAASZ,KAAMC,GACjB,EAAOD,KACvB,CAEA,UAAAa,GACI,OAAOpC,EAAcuB,KACzB,CAEA,eAAAc,CAAgBb,GACZ,OAAIA,EAxVZ,SAAyBpC,EAAGS,GACxB,IAAIR,EAAIQ,EAAE,GAAKT,EAAE,GACbE,EAAIO,EAAE,GAAKT,EAAE,GACbG,EAAIM,EAAE,GAAKT,EAAE,GACjB,OAAOC,EAAIA,EAAIC,EAAIA,EAAIC,EAAIA,CAC/B,CAmVsB8C,CAAgBd,KAAMC,GACxBxB,EAAcuB,KAC9B,CAEA,MAAAe,CAAOd,EAAID,MAjUf,IAAgB5B,EAAKP,EAmUb,OAnUaA,EAkUAoC,GAlUL7B,EAkUD4B,MAjUP,IAAMnC,EAAE,GACZO,EAAI,IAAMP,EAAE,GACZO,EAAI,IAAMP,EAAE,GAgUDmC,IACX,CAEA,KAAAnB,CAAMyB,EAAIC,GAGN,OAFIA,EAAI1B,EAAMmB,KAAMM,EAAIC,GACnB1B,EAAMmB,KAAMA,KAAMM,GAChBN,IACX,CAEA,KAAAgB,CAAMf,GAEF,OADAzB,EAAQwB,KAAMA,KAAMC,GACbD,IACX,CAEA,SAAAiB,GAEI,OADAvC,EAAYsB,KAAMA,MACXA,IACX,CAEA,GAAAkB,CAAIjB,GACA,OAAOrB,EAAMoB,KAAMC,EACvB,CAEA,MAAAkB,CAAOlB,GACH,OAvHgB3B,EAuHS2B,GAvHZpC,EAuHMmC,MAtHd,KAAO1B,EAAE,IAAMT,EAAE,KAAOS,EAAE,IAAMT,EAAE,KAAOS,EAAE,GADxD,IAAqBT,EAAGS,CAwHpB,CAEA,YAAA8C,CAAaC,GAET,OApNR,SAAuBjD,EAAKP,EAAGyD,GAC3B,IAAIxD,EAAID,EAAE,GACNE,EAAIF,EAAE,GACNG,EAAIH,EAAE,GACVO,EAAI,GAAKN,EAAIwD,EAAE,GAAKvD,EAAIuD,EAAE,GAAKtD,EAAIsD,EAAE,GACrClD,EAAI,GAAKN,EAAIwD,EAAE,GAAKvD,EAAIuD,EAAE,GAAKtD,EAAIsD,EAAE,GACrClD,EAAI,GAAKN,EAAIwD,EAAE,GAAKvD,EAAIuD,EAAE,GAAKtD,EAAIsD,EAAE,EAEzC,CA2MQC,CAAcvB,KAAMA,KAAMqB,GACnBrB,IACX,CAEA,YAAAwB,CAAaC,GAET,OA7PR,SAAuBrD,EAAKP,EAAGyD,GAC3B,IAAIxD,EAAID,EAAE,GACNE,EAAIF,EAAE,GACNG,EAAIH,EAAE,GACN6D,EAAIJ,EAAE,GAAKxD,EAAIwD,EAAE,GAAKvD,EAAIuD,EAAE,IAAMtD,EAAIsD,EAAE,IAC5CI,EAAIA,GAAK,EACTtD,EAAI,IAAMkD,EAAE,GAAKxD,EAAIwD,EAAE,GAAKvD,EAAIuD,EAAE,GAAKtD,EAAIsD,EAAE,KAAOI,EACpDtD,EAAI,IAAMkD,EAAE,GAAKxD,EAAIwD,EAAE,GAAKvD,EAAIuD,EAAE,GAAKtD,EAAIsD,EAAE,KAAOI,EACpDtD,EAAI,IAAMkD,EAAE,GAAKxD,EAAIwD,EAAE,GAAKvD,EAAIuD,EAAE,IAAMtD,EAAIsD,EAAE,KAAOI,CAEzD,CAkPQC,CAAc3B,KAAMA,KAAMyB,GACnBzB,IACX,CAEA,kBAAA4B,CAAmBH,GAEf,OAlPR,SAAyBrD,EAAKP,EAAGyD,GAC7B,IAAIxD,EAAID,EAAE,GACNE,EAAIF,EAAE,GACNG,EAAIH,EAAE,GACN6D,EAAIJ,EAAE,GAAKxD,EAAIwD,EAAE,GAAKvD,EAAIuD,EAAE,IAAMtD,EAAIsD,EAAE,IAC5CI,EAAIA,GAAK,EACTtD,EAAI,IAAMkD,EAAE,GAAKxD,EAAIwD,EAAE,GAAKvD,EAAIuD,EAAE,GAAKtD,GAAK0D,EAC5CtD,EAAI,IAAMkD,EAAE,GAAKxD,EAAIwD,EAAE,GAAKvD,EAAIuD,EAAE,GAAKtD,GAAK0D,EAC5CtD,EAAI,IAAMkD,EAAE,GAAKxD,EAAIwD,EAAE,GAAKvD,EAAIuD,EAAE,IAAMtD,GAAK0D,CAEjD,CAuOQG,CAAgB7B,KAAMA,KAAMyB,GACrBzB,IACX,CAEA,eAAA8B,CAAgBC,GAEZ,OAjNR,SAAuB3D,EAAKP,EAAGkE,GAG3B,IAAIjE,EAAID,EAAE,GACNE,EAAIF,EAAE,GACNG,EAAIH,EAAE,GACNmE,EAAKD,EAAE,GACPE,EAAKF,EAAE,GACPG,EAAKH,EAAE,GAGPI,EAAMF,EAAKjE,EAAIkE,EAAKnE,EACpBqE,EAAMF,EAAKpE,EAAIkE,EAAKhE,EACpBqE,EAAML,EAAKjE,EAAIkE,EAAKnE,EAEpBwE,EAAOL,EAAKI,EAAMH,EAAKE,EACvBG,EAAOL,EAAKC,EAAMH,EAAKK,EACvBG,EAAOR,EAAKI,EAAMH,EAAKE,EAEvBM,EAAU,EAVLV,EAAE,GAWXI,GAAOM,EACPL,GAAOK,EACPJ,GAAOI,EAEPH,GAAQ,EACRC,GAAQ,EACRC,GAAQ,EAERpE,EAAI,GAAKN,EAAIqE,EAAMG,EACnBlE,EAAI,GAAKL,EAAIqE,EAAMG,EACnBnE,EAAI,GAAKJ,EAAIqE,EAAMG,CAEvB,CAgLQE,CAAc1C,KAAMA,KAAM+B,GACnB/B,IACX,CAEA,KAAAV,CAAMW,GACF,OAAOX,EAAMU,KAAMC,EACvB,CAEA,IAAA0C,CAAK1C,EAAG2C,GAEJ,OAnSR,SAAcxE,EAAKP,EAAGS,EAAGsE,GACrB,IAAI9D,EAAKjB,EAAE,GACPkB,EAAKlB,EAAE,GACPmB,EAAKnB,EAAE,GACXO,EAAI,GAAKU,EAAK8D,GAAKtE,EAAE,GAAKQ,GAC1BV,EAAI,GAAKW,EAAK6D,GAAKtE,EAAE,GAAKS,GAC1BX,EAAI,GAAKY,EAAK4D,GAAKtE,EAAE,GAAKU,EAE9B,CA0RQ2D,CAAK3C,KAAMA,KAAMC,EAAG2C,GACb5C,IACX,CAEA,KAAA6C,GACI,OAAO,IAAIjD,EAAKI,KAAK,GAAIA,KAAK,GAAIA,KAAK,GAC3C,CAEA,SAAA8C,CAAUjF,EAAGkF,EAAI,GAIb,OAHA/C,KAAK,GAAKnC,EAAEkF,GACZ/C,KAAK,GAAKnC,EAAEkF,EAAI,GAChB/C,KAAK,GAAKnC,EAAEkF,EAAI,GACT/C,IACX,CAEA,OAAAgD,CAAQnF,EAAI,GAAIkF,EAAI,GAIhB,OAHAlF,EAAEkF,GAAK/C,KAAK,GACZnC,EAAEkF,EAAI,GAAK/C,KAAK,GAChBnC,EAAEkF,EAAI,GAAK/C,KAAK,GACTnC,CACX,CAEA,kBAAAoF,CAAmBxB,GACf,MAAM3D,EAAIkC,KAAK,GACTjC,EAAIiC,KAAK,GACThC,EAAIgC,KAAK,GAMf,OAJAA,KAAK,GAAKyB,EAAK,GAAK3D,EAAI2D,EAAK,GAAK1D,EAAI0D,EAAK,GAAKzD,EAChDgC,KAAK,GAAKyB,EAAK,GAAK3D,EAAI2D,EAAK,GAAK1D,EAAI0D,EAAK,GAAKzD,EAChDgC,KAAK,GAAKyB,EAAK,GAAK3D,EAAI2D,EAAK,GAAK1D,EAAI0D,EAAK,IAAMzD,EAE1CgC,KAAKiB,WAChB,EAKJ,MAAMiC,EAAa,IAAItD,EAEvB,IAAIuD,EAAO,EACPC,EAAU,EAGVC,GAAiB,EAErB,MAAMC,EACF,WAAAxD,CAAYyD,EAAIC,EAAa,CAAC,GACrBD,EAAGE,QAAQC,QAAQC,MAAM,+CAC9B3D,KAAKuD,GAAKA,EACVvD,KAAKwD,WAAaA,EAClBxD,KAAK4D,GAAKT,IAGVnD,KAAK6D,KAAO,CAAC,EAEb7D,KAAK8D,UAAY,CAAEC,MAAO,EAAGC,MAAO,GACpChE,KAAKiE,eAAiB,EAGtBjE,KAAKuD,GAAGW,SAASC,gBAAgB,MACjCnE,KAAKuD,GAAGW,SAASE,gBAAkB,KAGnCpE,KAAKqE,QAAUrE,KAAKuD,GAAGW,SAASI,MAGhC,IAAK,IAAIC,KAAOf,EACZxD,KAAKwE,aAAaD,EAAKf,EAAWe,GAE1C,CAEA,YAAAC,CAAaD,EAAKE,GA4Bd,GA3BAzE,KAAKwD,WAAWe,GAAOE,EAGvBA,EAAKb,GAAKR,IACVqB,EAAKC,KAAOD,EAAKC,MAAQ,EACzBD,EAAKE,KACDF,EAAKE,OACJF,EAAKG,KAAK9E,cAAgB+E,aACrB7E,KAAKuD,GAAGuB,MACRL,EAAKG,KAAK9E,cAAgBiF,YAC1B/E,KAAKuD,GAAGyB,eACRhF,KAAKuD,GAAG0B,cAClBR,EAAKS,OAAiB,UAARX,EAAkBvE,KAAKuD,GAAG4B,qBAAuBnF,KAAKuD,GAAG6B,aACvEX,EAAKY,WAAaZ,EAAKY,aAAc,EACrCZ,EAAKa,OAASb,EAAKa,QAAU,EAC7Bb,EAAKc,OAASd,EAAKc,QAAU,EAC7Bd,EAAKT,MAAQS,EAAKT,QAAUS,EAAKa,OAASb,EAAKG,KAAKY,WAAaf,EAAKa,OAASb,EAAKG,KAAKzE,OAASsE,EAAKC,MACvGD,EAAKgB,QAAUhB,EAAKiB,WAAa,EACjCjB,EAAKkB,aAAc,EACnBlB,EAAKmB,MAAQnB,EAAKmB,OAAS5F,KAAKuD,GAAGsC,YAE9BpB,EAAKqB,QAEN9F,KAAK+F,gBAAgBtB,GAIrBA,EAAKgB,QAAS,CAEd,GADAzF,KAAKgG,aAAc,EACfhG,KAAKiE,gBAAkBjE,KAAKiE,iBAAmBQ,EAAKT,MAAQS,EAAKgB,QAEjE,OADA/B,QAAQuC,KAAK,+DACLjG,KAAKiE,eAAiBhG,KAAKiI,IAAIlG,KAAKiE,eAAgBQ,EAAKT,MAAQS,EAAKgB,SAElFzF,KAAKiE,eAAiBQ,EAAKT,MAAQS,EAAKgB,OAC5C,KAAmB,UAARlB,EACPvE,KAAK8D,UAAUE,MAAQS,EAAKT,MACpBhE,KAAKwD,WAAW2C,QACxBnG,KAAK8D,UAAUE,MAAQ/F,KAAKmI,IAAIpG,KAAK8D,UAAUE,MAAOS,EAAKT,OAEnE,CAEA,eAAA+B,CAAgBtB,GACZ,MAAM4B,GAAe5B,EAAKqB,OACtBO,IAAa5B,EAAKqB,OAAS9F,KAAKuD,GAAG+C,gBACnCtG,KAAKqE,QAAQkC,cAAgB9B,EAAKqB,SAClC9F,KAAKuD,GAAGiD,WAAW/B,EAAKS,OAAQT,EAAKqB,QACrC9F,KAAKqE,QAAQkC,YAAc9B,EAAKqB,QAEhCO,EACArG,KAAKuD,GAAGkD,WAAWhC,EAAKS,OAAQT,EAAKG,KAAMH,EAAKmB,OAEhD5F,KAAKuD,GAAGmD,cAAcjC,EAAKS,OAAQ,EAAGT,EAAKG,MAE/CH,EAAKkB,aAAc,CACvB,CAEA,QAAAgB,CAAS/I,GACLoC,KAAKwE,aAAa,QAAS5G,EAC/B,CAEA,YAAAgJ,CAAa7C,EAAOC,GAChBhE,KAAK8D,UAAUC,MAAQA,EACvB/D,KAAK8D,UAAUE,MAAQA,CAC3B,CAEA,iBAAA6C,CAAkBjJ,GACdoC,KAAKiE,eAAiBrG,CAC1B,CAEA,SAAAkJ,CAAUC,GACN/G,KAAK6D,KAAKkD,EAAQC,gBAAkBhH,KAAKuD,GAAGW,SAAS+C,oBACrDjH,KAAKuD,GAAGW,SAASC,gBAAgBnE,KAAK6D,KAAKkD,EAAQC,iBACnDhH,KAAKkH,eAAeH,EACxB,CAEA,cAAAG,CAAeH,GAEXA,EAAQI,mBAAmBC,SAAQ,CAACC,GAAYC,OAAM3C,WAElD,IAAK3E,KAAKwD,WAAW8D,GAEjB,YADA5D,QAAQuC,KAAK,oBAAoBqB,wBAIrC,MAAM7C,EAAOzE,KAAKwD,WAAW8D,GAE7BtH,KAAKuD,GAAGiD,WAAW/B,EAAKS,OAAQT,EAAKqB,QACrC9F,KAAKqE,QAAQkC,YAAc9B,EAAKqB,OAGhC,IAAIyB,EAAS,EACA,QAAT5C,IAAgB4C,EAAS,GAChB,QAAT5C,IAAgB4C,EAAS,GAChB,QAAT5C,IAAgB4C,EAAS,GAE7B,MAAM7C,EAAOD,EAAKC,KAAO6C,EACnBjC,EAAoB,IAAXiC,EAAe,EAAIA,EAASA,EAASA,EAC9ChC,EAAoB,IAAXgC,EAAe,EAAIA,EAASA,EAE3C,IAAK,IAAIC,EAAI,EAAGA,EAAID,EAAQC,IACxBxH,KAAKuD,GAAGkE,oBAAoBJ,EAAWG,EAAG9C,EAAMD,EAAKE,KAAMF,EAAKY,WAAYZ,EAAKa,OAASA,EAAQb,EAAKc,OAASiC,EAAIjC,GACpHvF,KAAKuD,GAAGmE,wBAAwBL,EAAWG,GAI3CxH,KAAKuD,GAAGW,SAASyD,oBAAoBN,EAAWG,EAAG/C,EAAKgB,QAC5D,IAIAzF,KAAKwD,WAAW2C,OAAOnG,KAAKuD,GAAGiD,WAAWxG,KAAKuD,GAAG4B,qBAAsBnF,KAAKwD,WAAW2C,MAAML,OACtG,CAEA,IAAA8B,EAAK,QAAEb,EAAO,KAAEc,EAAO7H,KAAKuD,GAAGuE,YACvB9H,KAAKuD,GAAGW,SAASE,kBAAoB,GAAGpE,KAAK4D,MAAMmD,EAAQC,mBACtDhH,KAAK6D,KAAKkD,EAAQC,iBAAiBhH,KAAK8G,UAAUC,GACvD/G,KAAKuD,GAAGW,SAASC,gBAAgBnE,KAAK6D,KAAKkD,EAAQC,iBACnDhH,KAAKuD,GAAGW,SAASE,gBAAkB,GAAGpE,KAAK4D,MAAMmD,EAAQC,kBAI7DD,EAAQI,mBAAmBC,SAAQ,CAACC,GAAYC,WAC5C,MAAM7C,EAAOzE,KAAKwD,WAAW8D,GACzB7C,EAAKkB,aAAa3F,KAAK+F,gBAAgBtB,EAAK,IAGhDzE,KAAKgG,YACDhG,KAAKwD,WAAW2C,MAChBnG,KAAKuD,GAAGW,SAAS6D,sBACbF,EACA7H,KAAK8D,UAAUE,MACfhE,KAAKwD,WAAW2C,MAAMxB,KACtB3E,KAAKwD,WAAW2C,MAAMZ,OAAgC,EAAvBvF,KAAK8D,UAAUC,MAC9C/D,KAAKiE,gBAGTjE,KAAKuD,GAAGW,SAAS8D,oBAAoBH,EAAM7H,KAAK8D,UAAUC,MAAO/D,KAAK8D,UAAUE,MAAOhE,KAAKiE,gBAG5FjE,KAAKwD,WAAW2C,MAChBnG,KAAKuD,GAAG0E,aAAaJ,EAAM7H,KAAK8D,UAAUE,MAAOhE,KAAKwD,WAAW2C,MAAMxB,KAAM3E,KAAKwD,WAAW2C,MAAMZ,OAAgC,EAAvBvF,KAAK8D,UAAUC,OAE3H/D,KAAKuD,GAAG2E,WAAWL,EAAM7H,KAAK8D,UAAUC,MAAO/D,KAAK8D,UAAUE,MAG1E,CAEA,WAAAmE,GAEI,MAAM1D,EAAOzE,KAAKwD,WAAW4E,SAE7B,OAAI3D,EAAKG,KAAaH,EAClBpB,OAAJ,GACAK,QAAQuC,KAAK,mDACL5C,GAAiB,EAC7B,CAEA,kBAAAgF,CAAmB5D,GACVA,IAAMA,EAAOzE,KAAKmI,eACvB,MAAMG,EAAQ7D,EAAKG,KACbU,EAASb,EAAKa,OAASb,EAAKa,OAASgD,EAAMC,kBAAoB9D,EAAKC,KAErE1E,KAAKwI,SACNxI,KAAKwI,OAAS,CACVtC,IAAK,IAAItG,EACTwG,IAAK,IAAIxG,EACT6I,OAAQ,IAAI7I,EACZoB,MAAO,IAAIpB,EACX8I,OAAQC,MAIhB,MAAMzC,EAAMlG,KAAKwI,OAAOtC,IAClBE,EAAMpG,KAAKwI,OAAOpC,IAClBqC,EAASzI,KAAKwI,OAAOC,OACrBzH,EAAQhB,KAAKwI,OAAOxH,MAE1BkF,EAAIhG,IAAKyI,KACTvC,EAAIlG,KAAKyI,KAGT,IAAK,IAAInB,EAAI,EAAGoB,EAAIN,EAAMnI,OAAQqH,EAAIoB,EAAGpB,GAAKlC,EAAQ,CAClD,MAAMxH,EAAIwK,EAAMd,GACVzJ,EAAIuK,EAAMd,EAAI,GACdxJ,EAAIsK,EAAMd,EAAI,GAEpBtB,EAAIpI,EAAIG,KAAKiI,IAAIpI,EAAGoI,EAAIpI,GACxBoI,EAAInI,EAAIE,KAAKiI,IAAInI,EAAGmI,EAAInI,GACxBmI,EAAIlI,EAAIC,KAAKiI,IAAIlI,EAAGkI,EAAIlI,GAExBoI,EAAItI,EAAIG,KAAKmI,IAAItI,EAAGsI,EAAItI,GACxBsI,EAAIrI,EAAIE,KAAKmI,IAAIrI,EAAGqI,EAAIrI,GACxBqI,EAAIpI,EAAIC,KAAKmI,IAAIpI,EAAGoI,EAAIpI,EAC5B,CAEAgD,EAAMR,IAAI4F,EAAKF,GACfuC,EAAOpK,IAAI6H,EAAKE,GAAK1F,OAAO,EAChC,CAEA,qBAAAmI,CAAsBpE,GACbA,IAAMA,EAAOzE,KAAKmI,eACvB,MAAMG,EAAQ7D,EAAKG,KACbU,EAASb,EAAKa,OAASb,EAAKa,OAASgD,EAAMC,kBAAoB9D,EAAKC,KAErE1E,KAAKwI,QAAQxI,KAAKqI,mBAAmB5D,GAE1C,IAAIqE,EAAc,EAClB,IAAK,IAAItB,EAAI,EAAGoB,EAAIN,EAAMnI,OAAQqH,EAAIoB,EAAGpB,GAAKlC,EAC1CpC,EAAWJ,UAAUwF,EAAOd,GAC5BsB,EAAc7K,KAAKmI,IAAI0C,EAAa9I,KAAKwI,OAAOC,OAAO3H,gBAAgBoC,IAG3ElD,KAAKwI,OAAOE,OAASzK,KAAKC,KAAK4K,EACnC,CAEA,MAAAC,GACI,IAAK,IAAIxE,KAAOvE,KAAK6D,KACjB7D,KAAKuD,GAAGW,SAAS8E,kBAAkBhJ,KAAK6D,KAAKU,WACtCvE,KAAK6D,KAAKU,GAErB,IAAK,IAAIA,KAAOvE,KAAKwD,WACjBxD,KAAKuD,GAAG0F,aAAajJ,KAAKwD,WAAWe,GAAKuB,eACnC9F,KAAKwD,WAAWe,EAE/B,EAOJ,IAAI2E,EAAO,EAGX,MAAMC,EAAgB,CAAC,EAEvB,MAAMC,EACF,WAAAtJ,CACIyD,GACA,OACI8F,EAAM,SACNC,EAAQ,SACRC,EAAW,CAAC,EAAC,YAEbC,GAAc,EAAK,SACnBC,EAAWlG,EAAGmG,KAAI,UAClBC,EAAYpG,EAAGqG,IAAG,UAClBC,GAAY,EAAI,WAChBC,GAAa,EAAI,UACjBC,EAAYxG,EAAGyG,MACf,CAAC,GAEAzG,EAAGE,QAAQC,QAAQC,MAAM,6CAC9B3D,KAAKuD,GAAKA,EACVvD,KAAKuJ,SAAWA,EAChBvJ,KAAK4D,GAAKsF,IAELG,GAAQ3F,QAAQuC,KAAK,8BACrBqD,GAAU5F,QAAQuC,KAAK,gCAG5BjG,KAAKwJ,YAAcA,EACnBxJ,KAAKyJ,SAAWA,EAChBzJ,KAAK2J,UAAYA,EACjB3J,KAAK6J,UAAYA,EACjB7J,KAAK8J,WAAaA,EAClB9J,KAAK+J,UAAYA,EACjB/J,KAAKiK,UAAY,CAAC,EAClBjK,KAAKkK,cAAgB,CAAC,EAGlBlK,KAAKwJ,cAAgBxJ,KAAKiK,UAAUE,MAChCnK,KAAKuD,GAAGW,SAASkG,mBAAoBpK,KAAKqK,aAAarK,KAAKuD,GAAG+G,IAAKtK,KAAKuD,GAAGgH,qBAC3EvK,KAAKqK,aAAarK,KAAKuD,GAAGiH,UAAWxK,KAAKuD,GAAGgH,sBAItD,MAAME,EAAelH,EAAGmH,aAAanH,EAAGoH,eACxCpH,EAAGqH,aAAaH,EAAcpB,GAC9B9F,EAAGsH,cAAcJ,GACyB,KAAtClH,EAAGuH,iBAAiBL,IACpB/G,QAAQuC,KAAK,GAAG1C,EAAGuH,iBAAiBL,sBAAiCM,EAAe1B,MAIxF,MAAM2B,EAAiBzH,EAAGmH,aAAanH,EAAG0H,iBAY1C,GAXA1H,EAAGqH,aAAaI,EAAgB1B,GAChC/F,EAAGsH,cAAcG,GAC2B,KAAxCzH,EAAGuH,iBAAiBE,IACpBtH,QAAQuC,KAAK,GAAG1C,EAAGuH,iBAAiBE,wBAAqCD,EAAezB,MAI5FtJ,KAAK+G,QAAUxD,EAAG2H,gBAClB3H,EAAG4H,aAAanL,KAAK+G,QAAS0D,GAC9BlH,EAAG4H,aAAanL,KAAK+G,QAASiE,GAC9BzH,EAAG6H,YAAYpL,KAAK+G,UACfxD,EAAG8H,oBAAoBrL,KAAK+G,QAASxD,EAAG+H,aACzC,OAAO5H,QAAQuC,KAAK1C,EAAGgI,kBAAkBvL,KAAK+G,UAIlDxD,EAAGiI,aAAaf,GAChBlH,EAAGiI,aAAaR,GAGhBhL,KAAKyL,iBAAmB,IAAIC,IAC5B,IAAIC,EAAcpI,EAAG8H,oBAAoBrL,KAAK+G,QAASxD,EAAGqI,iBAC1D,IAAK,IAAIC,EAAS,EAAGA,EAASF,EAAaE,IAAU,CACjD,IAAIC,EAAUvI,EAAGwI,iBAAiB/L,KAAK+G,QAAS8E,GAChD7L,KAAKyL,iBAAiBvL,IAAI4L,EAASvI,EAAGyI,mBAAmBhM,KAAK+G,QAAS+E,EAAQxE,OAG/E,MAAM2E,EAAQH,EAAQxE,KAAK4E,MAAM,UAEjCJ,EAAQK,YAAcF,EAAM,GAEP,IAAjBA,EAAM9L,QACN2L,EAAQM,eAAgB,EACxBN,EAAQO,YAAcC,OAAOL,EAAM,IACnCH,EAAQS,eAAiBN,EAAM,IACP,IAAjBA,EAAM9L,QAAgBqM,MAAMF,OAAOL,EAAM,OAChDH,EAAQW,UAAW,EACnBX,EAAQS,eAAiBN,EAAM,GAEvC,CAGAjM,KAAKmH,mBAAqB,IAAIuE,IAC9B,MAAMgB,EAAY,GACZC,EAAapJ,EAAG8H,oBAAoBrL,KAAK+G,QAASxD,EAAGqJ,mBAC3D,IAAK,IAAIC,EAAS,EAAGA,EAASF,EAAYE,IAAU,CAChD,MAAMC,EAAYvJ,EAAGwJ,gBAAgB/M,KAAK+G,QAAS8F,GAC7CxF,EAAW9D,EAAGyJ,kBAAkBhN,KAAK+G,QAAS+F,EAAUxF,OAE5C,IAAdD,IACJqF,EAAUrF,GAAYyF,EAAUxF,KAChCtH,KAAKmH,mBAAmBjH,IAAI4M,EAAWzF,GAC3C,CACArH,KAAKgH,eAAiB0F,EAAUO,KAAK,GACzC,CAEA,YAAA5C,CAAaF,EAAK+C,EAAKC,EAAUC,GAC7BpN,KAAKiK,UAAUE,IAAMA,EACrBnK,KAAKiK,UAAUiD,IAAMA,EACrBlN,KAAKiK,UAAUkD,SAAWA,EAC1BnN,KAAKiK,UAAUmD,SAAWA,EACtBjD,IAAKnK,KAAKwJ,aAAc,EAChC,CAEA,gBAAA6D,CAAiBC,EAASC,GACtBvN,KAAKkK,cAAcoD,QAAUA,EAC7BtN,KAAKkK,cAAcqD,UAAYA,CACnC,CAEA,UAAAC,GACQxN,KAAK6J,UAAW7J,KAAKuD,GAAGW,SAASuJ,OAAOzN,KAAKuD,GAAGmK,YAC/C1N,KAAKuD,GAAGW,SAASyJ,QAAQ3N,KAAKuD,GAAGmK,YAElC1N,KAAKyJ,SAAUzJ,KAAKuD,GAAGW,SAASuJ,OAAOzN,KAAKuD,GAAGqK,WAC9C5N,KAAKuD,GAAGW,SAASyJ,QAAQ3N,KAAKuD,GAAGqK,WAElC5N,KAAKiK,UAAUE,IAAKnK,KAAKuD,GAAGW,SAASuJ,OAAOzN,KAAKuD,GAAGsK,OACnD7N,KAAKuD,GAAGW,SAASyJ,QAAQ3N,KAAKuD,GAAGsK,OAElC7N,KAAKyJ,UAAUzJ,KAAKuD,GAAGW,SAAS4J,YAAY9N,KAAKyJ,UACrDzJ,KAAKuD,GAAGW,SAAS6J,aAAa/N,KAAK2J,WACnC3J,KAAKuD,GAAGW,SAAS8J,aAAahO,KAAK8J,YACnC9J,KAAKuD,GAAGW,SAAS+J,aAAajO,KAAK+J,WAC/B/J,KAAKiK,UAAUE,KACfnK,KAAKuD,GAAGW,SAASmG,aAAarK,KAAKiK,UAAUE,IAAKnK,KAAKiK,UAAUiD,IAAKlN,KAAKiK,UAAUkD,SAAUnN,KAAKiK,UAAUmD,UAClHpN,KAAKuD,GAAGW,SAASmJ,iBAAiBrN,KAAKkK,cAAcoD,QAAStN,KAAKkK,cAAcqD,UACrF,CAEA,GAAAW,EAAI,UAAEC,GAAY,GAAU,CAAC,GACzB,IAAIC,GAAe,EACGpO,KAAKuD,GAAGW,SAASI,MAAM+J,iBAAmBrO,KAAK4D,KAIjE5D,KAAKuD,GAAG+K,WAAWtO,KAAK+G,SACxB/G,KAAKuD,GAAGW,SAASI,MAAM+J,eAAiBrO,KAAK4D,IAIjD5D,KAAKyL,iBAAiBrE,SAAQ,CAACC,EAAUkH,KACrC,IAAIjH,EAAOiH,EAAcpC,YAGrBL,EAAU9L,KAAKuJ,SAASjC,GAY5B,GATIiH,EAAc9B,WACdX,EAAUA,EAAQyC,EAAchC,gBAChCjF,GAAQ,IAAIiH,EAAchC,kBAE1BgC,EAAcnC,gBACdN,EAAUA,EAAQyC,EAAclC,aAAakC,EAAchC,gBAC3DjF,GAAQ,IAAIiH,EAAclC,gBAAgBkC,EAAchC,mBAGvDT,EACD,OAAO7F,EAAK,kBAAkBqB,2BAGlC,GAAIwE,QAA6B0C,IAAlB1C,EAAQlO,MACnB,OAAOqI,EAAK,GAAGqB,0CAGnB,GAAIwE,EAAQlO,MAAM6Q,QAKd,OAJAL,GAA4B,EAG5BtC,EAAQlO,MAAM8Q,OAAON,GACdO,EAAW3O,KAAKuD,GAAIgL,EAAc5J,KAAM0C,EAAU+G,GAI7D,GAAItC,EAAQlO,MAAMuC,QAAU2L,EAAQlO,MAAM,GAAG6Q,QAAS,CAClD,MAAMG,EAAe,GAOrB,OANA9C,EAAQlO,MAAMwJ,SAASxJ,IACnBwQ,GAA4B,EAC5BxQ,EAAM8Q,OAAON,GACbQ,EAAaC,KAAKT,EAAY,IAG3BO,EAAW3O,KAAKuD,GAAIgL,EAAc5J,KAAM0C,EAAUuH,EAC7D,CAEAD,EAAW3O,KAAKuD,GAAIgL,EAAc5J,KAAM0C,EAAUyE,EAAQlO,MAAM,IAGpEoC,KAAKwN,aACDW,GAAWnO,KAAKuD,GAAGW,SAAS6J,aAAa/N,KAAK2J,YAAc3J,KAAKuD,GAAGqG,IAAM5J,KAAKuD,GAAGuL,GAAK9O,KAAKuD,GAAGqG,IACvG,CAEA,MAAAb,GACI/I,KAAKuD,GAAGwL,cAAc/O,KAAK+G,QAC/B,EAGJ,SAAS4H,EAAWpL,EAAIoB,EAAM0C,EAAUzJ,GACpCA,EAAQA,EAAMuC,OA4DlB,SAAiBtC,GACb,MAAMmR,EAAWnR,EAAEsC,OACb8O,EAAWpR,EAAE,GAAGsC,OACtB,QAAiBqO,IAAbS,EAAwB,OAAOpR,EACnC,MAAMsC,EAAS6O,EAAWC,EAC1B,IAAIrR,EAAQuL,EAAchJ,GACrBvC,IAAOuL,EAAchJ,GAAUvC,EAAQ,IAAIiH,aAAa1E,IAC7D,IAAK,IAAIqH,EAAI,EAAGA,EAAIwH,EAAUxH,IAAK5J,EAAMsC,IAAIrC,EAAE2J,GAAIA,EAAIyH,GACvD,OAAOrR,CACX,CArE2BsR,CAAQtR,GAASA,EACxC,MAAMuR,EAAW5L,EAAGW,SAASI,MAAMmH,iBAAiB2D,IAAI/H,GAGxD,GAAIzJ,EAAMuC,OACN,QAAiBqO,IAAbW,GAA0BA,EAAShP,SAAWvC,EAAMuC,OAEpDoD,EAAGW,SAASI,MAAMmH,iBAAiBvL,IAAImH,EAAUzJ,EAAMyR,MAAM,QAC1D,CACH,GA8DZ,SAAqBxR,EAAGS,GACpB,GAAIT,EAAEsC,SAAW7B,EAAE6B,OAAQ,OAAO,EAClC,IAAK,IAAIqH,EAAI,EAAGoB,EAAI/K,EAAEsC,OAAQqH,EAAIoB,EAAGpB,IACjC,GAAI3J,EAAE2J,KAAOlJ,EAAEkJ,GAAI,OAAO,EAE9B,OAAO,CACX,CApEgB8H,CAAYH,EAAUvR,GAAQ,OAGlCuR,EAASjP,IAAMiP,EAASjP,IAAItC,GAmExC,SAAkBC,EAAGS,GACjB,IAAK,IAAIkJ,EAAI,EAAGoB,EAAI/K,EAAEsC,OAAQqH,EAAIoB,EAAGpB,IACjC3J,EAAE2J,GAAKlJ,EAAEkJ,EAEjB,CAvEiD+H,CAASJ,EAAUvR,GACxD2F,EAAGW,SAASI,MAAMmH,iBAAiBvL,IAAImH,EAAU8H,EACrD,KACG,CACH,GAAIA,IAAavR,EAAO,OACxB2F,EAAGW,SAASI,MAAMmH,iBAAiBvL,IAAImH,EAAUzJ,EACrD,CAEA,OAAQ+G,GACJ,KAAK,KACD,OAAO/G,EAAMuC,OAASoD,EAAGiM,WAAWnI,EAAUzJ,GAAS2F,EAAGkM,UAAUpI,EAAUzJ,GAClF,KAAK,MACD,OAAO2F,EAAGmM,WAAWrI,EAAUzJ,GACnC,KAAK,MACD,OAAO2F,EAAGoM,WAAWtI,EAAUzJ,GACnC,KAAK,MACD,OAAO2F,EAAGqM,WAAWvI,EAAUzJ,GACnC,KAAK,MACL,KAAK,KACL,KAAK,MACL,KAAK,MACD,OAAOA,EAAMuC,OAASoD,EAAGsM,WAAWxI,EAAUzJ,GAAS2F,EAAGuM,UAAUzI,EAAUzJ,GAClF,KAAK,MACL,KAAK,MACD,OAAO2F,EAAGwM,WAAW1I,EAAUzJ,GACnC,KAAK,MACL,KAAK,MACD,OAAO2F,EAAGyM,WAAW3I,EAAUzJ,GACnC,KAAK,MACL,KAAK,MACD,OAAO2F,EAAG0M,WAAW5I,EAAUzJ,GACnC,KAAK,MACD,OAAO2F,EAAG2M,iBAAiB7I,GAAU,EAAOzJ,GAChD,KAAK,MACD,OAAO2F,EAAG4M,iBAAiB9I,GAAU,EAAOzJ,GAChD,KAAK,MACD,OAAO2F,EAAG6M,iBAAiB/I,GAAU,EAAOzJ,GAExD,CAEA,SAASmN,EAAesF,GACpB,IAAIC,EAAQD,EAAOpE,MAAM,MACzB,IAAK,IAAIzE,EAAI,EAAGA,EAAI8I,EAAMnQ,OAAQqH,IAC9B8I,EAAM9I,GAAKA,EAAI,EAAI,KAAO8I,EAAM9I,GAEpC,OAAO8I,EAAMrD,KAAK,KACtB,CA2BA,IAAIsD,EAAY,EAChB,SAAStK,EAAKuK,GACND,EAAY,MAChB7M,QAAQuC,KAAKuK,GACbD,IACIA,EAAY,KAAK7M,QAAQuC,KAAK,mDACtC,CAYA,MAAMwK,EAAW,IAAI7Q,EACrB,IAAI8Q,EAAO,EAEX,MAAMC,EACF,WAAA7Q,EAAY,OACR2D,EAASmN,SAASC,cAAc,UAAS,MACzCC,EAAQ,IAAG,OACXC,EAAS,IAAG,IACZC,EAAM,EAAC,MACPC,GAAQ,EAAK,MACbC,GAAQ,EAAI,QACZC,GAAU,EAAK,UACfC,GAAY,EAAK,mBACjBhH,GAAqB,EAAK,sBAC1BiH,GAAwB,EAAK,gBAC7BC,EAAkB,UAAS,UAC3BC,GAAY,EAAI,MAChBC,EAAQ,GACR,CAAC,GACD,MAAMhO,EAAa,CAAEyN,QAAOC,QAAOC,UAASC,YAAWhH,qBAAoBiH,wBAAuBC,mBAClGtR,KAAKgR,IAAMA,EACXhR,KAAKiR,MAAQA,EACbjR,KAAKyR,OAAQ,EACbzR,KAAKkR,MAAQA,EACblR,KAAKmR,QAAUA,EACfnR,KAAKoK,mBAAqBA,EAC1BpK,KAAKuR,UAAYA,EACjBvR,KAAK4D,GAAK8M,IAGI,IAAVc,IAAaxR,KAAKuD,GAAKE,EAAOiO,WAAW,SAAUlO,IACvDxD,KAAK2R,WAAa3R,KAAKuD,GAClBvD,KAAKuD,KAAIvD,KAAKuD,GAAKE,EAAOiO,WAAW,QAASlO,IAC9CxD,KAAKuD,IAAIG,QAAQC,MAAM,kCAG5B3D,KAAKuD,GAAGW,SAAWlE,KAGnBA,KAAK4R,QAAQd,EAAOC,GAGpB/Q,KAAKsE,MAAQ,CAAC,EACdtE,KAAKsE,MAAM2F,UAAY,CAAEE,IAAKnK,KAAKuD,GAAG+G,IAAK4C,IAAKlN,KAAKuD,GAAGsO,MACxD7R,KAAKsE,MAAM4F,cAAgB,CAAEoD,QAAStN,KAAKuD,GAAGuO,UAC9C9R,KAAKsE,MAAMmF,SAAW,KACtBzJ,KAAKsE,MAAMqF,UAAY3J,KAAKuD,GAAGqG,IAC/B5J,KAAKsE,MAAMyN,WAAY,EACvB/R,KAAKsE,MAAMyF,UAAY/J,KAAKuD,GAAGyG,KAC/BhK,KAAKsE,MAAM0N,kBAAmB,EAC9BhS,KAAKsE,MAAM2N,OAAQ,EACnBjS,KAAKsE,MAAM4N,gBAAkB,EAC7BlS,KAAKsE,MAAM6N,YAAc,KACzBnS,KAAKsE,MAAM8N,SAAW,CAAEtU,EAAG,EAAGC,EAAG,EAAG+S,MAAO,KAAMC,OAAQ,MACzD/Q,KAAKsE,MAAMsK,aAAe,GAC1B5O,KAAKsE,MAAM+N,kBAAoB,EAC/BrS,KAAKsE,MAAMiC,YAAc,KACzBvG,KAAKsE,MAAMmH,iBAAmB,IAAIC,IAClC1L,KAAKsE,MAAM+J,eAAiB,KAG5BrO,KAAKsS,WAAa,CAAC,EAGftS,KAAK2R,UACL3R,KAAKuS,aAAa,0BAClBvS,KAAKuS,aAAa,8BAElBvS,KAAKuS,aAAa,qBAClBvS,KAAKuS,aAAa,4BAClBvS,KAAKuS,aAAa,0BAClBvS,KAAKuS,aAAa,iCAClBvS,KAAKuS,aAAa,0BAClBvS,KAAKuS,aAAa,4BAClBvS,KAAKuS,aAAa,YAClBvS,KAAKuS,aAAa,uBAClBvS,KAAKuS,aAAa,uBAEtBvS,KAAKuS,aAAa,iCAClBvS,KAAKuS,aAAa,gCAClBvS,KAAKuS,aAAa,iCAClBvS,KAAKuS,aAAa,iCAClBvS,KAAKuS,aAAa,kCAClBvS,KAAKuS,aAAa,yCAGlBvS,KAAK2H,oBAAsB3H,KAAKuS,aAAa,yBAA0B,sBAAuB,4BAC9FvS,KAAKgI,oBAAsBhI,KAAKuS,aAAa,yBAA0B,sBAAuB,4BAC9FvS,KAAK+H,sBAAwB/H,KAAKuS,aAAa,yBAA0B,wBAAyB,8BAClGvS,KAAKiH,kBAAoBjH,KAAKuS,aAAa,0BAA2B,oBAAqB,wBAC3FvS,KAAKmE,gBAAkBnE,KAAKuS,aAAa,0BAA2B,kBAAmB,sBACvFvS,KAAKgJ,kBAAoBhJ,KAAKuS,aAAa,0BAA2B,oBAAqB,wBAC3FvS,KAAKwS,YAAcxS,KAAKuS,aAAa,qBAAsB,cAAe,oBAG1EvS,KAAKyS,WAAa,CAAC,EACnBzS,KAAKyS,WAAWC,gBAAkB1S,KAAKuD,GAAGoP,aAAa3S,KAAKuD,GAAGqP,kCAC/D5S,KAAKyS,WAAWI,cAAgB7S,KAAKuS,aAAa,kCAC5CvS,KAAKuD,GAAGoP,aAAa3S,KAAKuS,aAAa,kCAAkCO,gCACzE,CACV,CAEA,OAAAlB,CAAQd,EAAOC,GACX/Q,KAAK8Q,MAAQA,EACb9Q,KAAK+Q,OAASA,EAEd/Q,KAAKuD,GAAGE,OAAOqN,MAAQA,EAAQ9Q,KAAKgR,IACpChR,KAAKuD,GAAGE,OAAOsN,OAASA,EAAS/Q,KAAKgR,IAEtCtT,OAAOqV,OAAO/S,KAAKuD,GAAGE,OAAOuP,MAAO,CAChClC,MAAOA,EAAQ,KACfC,OAAQA,EAAS,MAEzB,CAEA,WAAAkC,CAAYnC,EAAOC,EAAQjT,EAAI,EAAGC,EAAI,GAC9BiC,KAAKsE,MAAM8N,SAAStB,QAAUA,GAAS9Q,KAAKsE,MAAM8N,SAASrB,SAAWA,IAC1E/Q,KAAKsE,MAAM8N,SAAStB,MAAQA,EAC5B9Q,KAAKsE,MAAM8N,SAASrB,OAASA,EAC7B/Q,KAAKsE,MAAM8N,SAAStU,EAAIA,EACxBkC,KAAKsE,MAAM8N,SAASrU,EAAIA,EACxBiC,KAAKuD,GAAG6O,SAAStU,EAAGC,EAAG+S,EAAOC,GAClC,CAEA,UAAAmC,CAAWpC,EAAOC,EAAQjT,EAAI,EAAGC,EAAI,GACjCiC,KAAKuD,GAAG4P,QAAQrV,EAAGC,EAAG+S,EAAOC,EACjC,CAEA,MAAAtD,CAAO7J,IACoB,IAAnB5D,KAAKsE,MAAMV,KACf5D,KAAKuD,GAAGkK,OAAO7J,GACf5D,KAAKsE,MAAMV,IAAM,EACrB,CAEA,OAAA+J,CAAQ/J,IACmB,IAAnB5D,KAAKsE,MAAMV,KACf5D,KAAKuD,GAAGoK,QAAQ/J,GAChB5D,KAAKsE,MAAMV,IAAM,EACrB,CAEA,YAAAyG,CAAaF,EAAK+C,EAAKC,EAAUC,GAEzBpN,KAAKsE,MAAM2F,UAAUE,MAAQA,GAC7BnK,KAAKsE,MAAM2F,UAAUiD,MAAQA,GAC7BlN,KAAKsE,MAAM2F,UAAUkD,WAAaA,GAClCnN,KAAKsE,MAAM2F,UAAUmD,WAAaA,IAGtCpN,KAAKsE,MAAM2F,UAAUE,IAAMA,EAC3BnK,KAAKsE,MAAM2F,UAAUiD,IAAMA,EAC3BlN,KAAKsE,MAAM2F,UAAUkD,SAAWA,EAChCnN,KAAKsE,MAAM2F,UAAUmD,SAAWA,OACfoB,IAAbrB,EAAwBnN,KAAKuD,GAAG6P,kBAAkBjJ,EAAK+C,EAAKC,EAAUC,GACrEpN,KAAKuD,GAAG0G,UAAUE,EAAK+C,GAChC,CAEA,gBAAAG,CAAiBC,EAASC,GACtBD,EAAUA,GAAWtN,KAAKuD,GAAGuO,SACzB9R,KAAKsE,MAAM4F,cAAcoD,UAAYA,GAAWtN,KAAKsE,MAAM4F,cAAcqD,YAAcA,IAC3FvN,KAAKsE,MAAM4F,cAAcoD,QAAUA,EACnCtN,KAAKsE,MAAM4F,cAAcqD,UAAYA,OACnBiB,IAAdjB,EAAyBvN,KAAKuD,GAAG8P,sBAAsB/F,EAASC,GAC/DvN,KAAKuD,GAAG2G,cAAcoD,GAC/B,CAEA,WAAAQ,CAAYlQ,GACJoC,KAAKsE,MAAMmF,WAAa7L,IAC5BoC,KAAKsE,MAAMmF,SAAW7L,EACtBoC,KAAKuD,GAAGkG,SAAS7L,GACrB,CAEA,YAAAmQ,CAAanQ,GACLoC,KAAKsE,MAAMqF,YAAc/L,IAC7BoC,KAAKsE,MAAMqF,UAAY/L,EACvBoC,KAAKuD,GAAGoG,UAAU/L,GACtB,CAEA,YAAAoQ,CAAapQ,GACLoC,KAAKsE,MAAMyN,YAAcnU,IAC7BoC,KAAKsE,MAAMyN,UAAYnU,EACvBoC,KAAKuD,GAAGwO,UAAUnU,GACtB,CAEA,YAAAqQ,CAAarQ,GACLoC,KAAKsE,MAAMyF,YAAcnM,IAC7BoC,KAAKsE,MAAMyF,UAAYnM,EACvBoC,KAAKuD,GAAGwG,UAAUnM,GACtB,CAEA,aAAA0V,CAAc1V,GACNoC,KAAKsE,MAAM+N,oBAAsBzU,IACrCoC,KAAKsE,MAAM+N,kBAAoBzU,EAC/BoC,KAAKuD,GAAG+P,cAActT,KAAKuD,GAAGgQ,SAAW3V,GAC7C,CAEA,eAAA4V,EAAgB,OAAEtO,EAASlF,KAAKuD,GAAGkQ,YAAW,OAAE3N,EAAS,MAAS,CAAC,GAC3D9F,KAAKsE,MAAM6N,cAAgBrM,IAC/B9F,KAAKsE,MAAM6N,YAAcrM,EACzB9F,KAAKuD,GAAGiQ,gBAAgBtO,EAAQY,GACpC,CAEA,YAAAyM,CAAamB,EAAWC,EAAYC,GAEhC,OAAID,GAAc3T,KAAKuD,GAAGoQ,GAAoB3T,KAAKuD,GAAGoQ,GAAYE,KAAK7T,KAAKuD,KAGvEvD,KAAKsS,WAAWoB,KACjB1T,KAAKsS,WAAWoB,GAAa1T,KAAKuD,GAAGgP,aAAamB,IAIjDC,EAGA3T,KAAKsS,WAAWoB,GAGd1T,KAAKsS,WAAWoB,GAAWE,GAASC,KAAK7T,KAAKsS,WAAWoB,IAHxB,KAHhB1T,KAAKsS,WAAWoB,GAO5C,CAEA,UAAAI,CAAWjW,EAAGS,GACV,OAAIT,EAAEkW,cAAgBzV,EAAEyV,YACblW,EAAEkW,YAAczV,EAAEyV,YAClBlW,EAAEkJ,QAAQnD,KAAOtF,EAAEyI,QAAQnD,GAC3B/F,EAAEkJ,QAAQnD,GAAKtF,EAAEyI,QAAQnD,GACzB/F,EAAEmW,SAAW1V,EAAE0V,OACfnW,EAAEmW,OAAS1V,EAAE0V,OAEb1V,EAAEsF,GAAK/F,EAAE+F,EAExB,CAEA,eAAAqQ,CAAgBpW,EAAGS,GACf,OAAIT,EAAEkW,cAAgBzV,EAAEyV,YACblW,EAAEkW,YAAczV,EAAEyV,YAEzBlW,EAAEmW,SAAW1V,EAAE0V,OACR1V,EAAE0V,OAASnW,EAAEmW,OAEb1V,EAAEsF,GAAK/F,EAAE+F,EAExB,CAEA,MAAAsQ,CAAOrW,EAAGS,GACN,OAAIT,EAAEkW,cAAgBzV,EAAEyV,YACblW,EAAEkW,YAAczV,EAAEyV,YAClBlW,EAAEkJ,QAAQnD,KAAOtF,EAAEyI,QAAQnD,GAC3B/F,EAAEkJ,QAAQnD,GAAKtF,EAAEyI,QAAQnD,GAEzBtF,EAAEsF,GAAK/F,EAAE+F,EAExB,CAEA,aAAAuQ,EAAc,MAAEC,EAAK,OAAEC,EAAM,YAAEC,EAAW,KAAEC,IACxC,IAAIC,EAAa,GAgBjB,GAdIH,GAAUC,GAAaD,EAAOI,gBAGlCL,EAAMM,UAAUC,IACZ,IAAKA,EAAKC,QAAS,OAAO,EACrBD,EAAK/M,OAEN0M,GAAeK,EAAKE,eAAiBR,IAChCA,EAAOS,sBAAsBH,IAGtCH,EAAW3F,KAAK8F,GAAK,IAGrBJ,EAAM,CACN,MAAMQ,EAAS,GACTvL,EAAc,GACdwL,EAAK,GAEXR,EAAWpN,SAASuN,IAEXA,EAAK5N,QAAQyC,YAEPmL,EAAK5N,QAAQ8C,UACpBL,EAAYqF,KAAK8F,GAEjBK,EAAGnG,KAAK8F,GAJRI,EAAOlG,KAAK8F,GAOhBA,EAAKX,OAAS,EAGW,IAArBW,EAAKZ,aAAsBY,EAAK5N,QAAQ8C,WAAcwK,IAG1DM,EAAKM,YAAYC,eAAezE,GAChCA,EAASjP,aAAa6S,EAAOc,sBAC7BR,EAAKX,OAASvD,EAASzS,EAAC,IAG5B+W,EAAOR,KAAKvU,KAAK8T,YACjBtK,EAAY+K,KAAKvU,KAAKiU,iBACtBe,EAAGT,KAAKvU,KAAKkU,QAEbM,EAAaO,EAAOK,OAAO5L,EAAawL,EAC5C,CAEA,OAAOR,CACX,CAEA,MAAAa,EAAO,MAAEjB,EAAK,OAAEC,EAAM,OAAEnP,EAAS,KAAI,OAAEwJ,GAAS,EAAI,KAAE6F,GAAO,EAAI,YAAED,GAAc,EAAI,MAAEgB,IACpE,OAAXpQ,GAEAlF,KAAKwT,kBACLxT,KAAKiT,YAAYjT,KAAK8Q,MAAQ9Q,KAAKgR,IAAKhR,KAAK+Q,OAAS/Q,KAAKgR,OAG3DhR,KAAKwT,gBAAgBtO,GACrBlF,KAAKiT,YAAY/N,EAAO4L,MAAO5L,EAAO6L,UAGtCuE,GAAUtV,KAAKuR,YAAuB,IAAV+D,MAExBtV,KAAKkR,OAAWhM,IAAUA,EAAOgM,QACjClR,KAAKyN,OAAOzN,KAAKuD,GAAGmK,YACpB1N,KAAKgO,cAAa,IAEtBhO,KAAKuD,GAAG+R,OACHtV,KAAKyR,MAAQzR,KAAKuD,GAAGgS,iBAAmB,IACpCvV,KAAKkR,MAAQlR,KAAKuD,GAAGiS,iBAAmB,IACxCxV,KAAKmR,QAAUnR,KAAKuD,GAAGkS,mBAAqB,KAKrD/G,GAAQ0F,EAAMsB,oBAGdrB,GAAQA,EAAOqB,oBAGA1V,KAAKmU,cAAc,CAAEC,QAAOC,SAAQC,cAAaC,SAEzDnN,SAASuN,IAChBA,EAAK/M,KAAK,CAAEyM,UAAS,GAE7B,EAUJ,SAASsB,EAAOvX,EAAKP,GAKjB,OAJAO,EAAI,GAAKP,EAAE,GACXO,EAAI,GAAKP,EAAE,GACXO,EAAI,GAAKP,EAAE,GACXO,EAAI,GAAKP,EAAE,GACJO,CACX,CAYA,SAASwX,EAAMxX,EAAKN,EAAGC,EAAGC,EAAG0D,GAKzB,OAJAtD,EAAI,GAAKN,EACTM,EAAI,GAAKL,EACTK,EAAI,GAAKJ,EACTI,EAAI,GAAKsD,EACFtD,CACX,CAyBA,SAASyX,EAAYzX,EAAKP,GACtB,IAAIC,EAAID,EAAE,GACNE,EAAIF,EAAE,GACNG,EAAIH,EAAE,GACN6D,EAAI7D,EAAE,GACNc,EAAMb,EAAIA,EAAIC,EAAIA,EAAIC,EAAIA,EAAI0D,EAAIA,EAQtC,OAPI/C,EAAM,IACNA,EAAM,EAAIV,KAAKC,KAAKS,IAExBP,EAAI,GAAKN,EAAIa,EACbP,EAAI,GAAKL,EAAIY,EACbP,EAAI,GAAKJ,EAAIW,EACbP,EAAI,GAAKsD,EAAI/C,EACNP,CACX,CASA,SAAS0X,EAAMjY,EAAGS,GACd,OAAOT,EAAE,GAAKS,EAAE,GAAKT,EAAE,GAAKS,EAAE,GAAKT,EAAE,GAAKS,EAAE,GAAKT,EAAE,GAAKS,EAAE,EAC9D,CA2CA,SAASyX,EAAW3X,EAAKP,EAAGS,GACxB,IAAIQ,EAAKjB,EAAE,GACPkB,EAAKlB,EAAE,GACPmB,EAAKnB,EAAE,GACPmY,EAAKnY,EAAE,GACPoB,EAAKX,EAAE,GACPY,EAAKZ,EAAE,GACPa,EAAKb,EAAE,GACP2X,EAAK3X,EAAE,GAMX,OAJAF,EAAI,GAAKU,EAAKmX,EAAKD,EAAK/W,EAAKF,EAAKI,EAAKH,EAAKE,EAC5Cd,EAAI,GAAKW,EAAKkX,EAAKD,EAAK9W,EAAKF,EAAKC,EAAKH,EAAKK,EAC5Cf,EAAI,GAAKY,EAAKiX,EAAKD,EAAK7W,EAAKL,EAAKI,EAAKH,EAAKE,EAC5Cb,EAAI,GAAK4X,EAAKC,EAAKnX,EAAKG,EAAKF,EAAKG,EAAKF,EAAKG,EACrCf,CACX,CAoRA,MAAM8X,EAASP,EAaTQ,EAAQP,EAUR1U,EAAM4U,EAUN7U,EAAY4U,EAElB,MAAMO,UAAavW,MACf,WAAAC,CAAYhC,EAAI,EAAGC,EAAI,EAAGC,EAAI,EAAG0D,EAAI,GAGjC,OAFA3B,MAAMjC,EAAGC,EAAGC,EAAG0D,GACf1B,KAAKqW,SAAW,OACTrW,IACX,CAEA,KAAIlC,GACA,OAAOkC,KAAK,EAChB,CAEA,KAAIjC,GACA,OAAOiC,KAAK,EAChB,CAEA,KAAIhC,GACA,OAAOgC,KAAK,EAChB,CAEA,KAAI0B,GACA,OAAO1B,KAAK,EAChB,CAEA,KAAIlC,CAAEmC,GACFD,KAAK,GAAKC,EACVD,KAAKqW,UACT,CAEA,KAAItY,CAAEkC,GACFD,KAAK,GAAKC,EACVD,KAAKqW,UACT,CAEA,KAAIrY,CAAEiC,GACFD,KAAK,GAAKC,EACVD,KAAKqW,UACT,CAEA,KAAI3U,CAAEzB,GACFD,KAAK,GAAKC,EACVD,KAAKqW,UACT,CAEA,QAAAC,GApZJ,IAAoBlY,EAuZZ,OAvZYA,EAqZD4B,MApZX,GAAK,EACT5B,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EAkZL4B,KAAKqW,WACErW,IACX,CAEA,GAAAE,CAAIpC,EAAGC,EAAGC,EAAG0D,GACT,OAAI5D,EAAEqC,OAAeH,KAAKI,KAAKtC,IAC/BqY,EAAMnW,KAAMlC,EAAGC,EAAGC,EAAG0D,GACrB1B,KAAKqW,WACErW,KACX,CAEA,OAAAuW,CAAQ1Y,GAGJ,OAxWR,SAAiBO,EAAKP,EAAG2Y,GACrBA,GAAO,GAEP,IAAI1X,EAAKjB,EAAE,GACPkB,EAAKlB,EAAE,GACPmB,EAAKnB,EAAE,GACPmY,EAAKnY,EAAE,GACPoB,EAAKhB,KAAKwY,IAAID,GACdP,EAAKhY,KAAKyY,IAAIF,GAElBpY,EAAI,GAAKU,EAAKmX,EAAKD,EAAK/W,EACxBb,EAAI,GAAKW,EAAKkX,EAAKjX,EAAKC,EACxBb,EAAI,GAAKY,EAAKiX,EAAKlX,EAAKE,EACxBb,EAAI,GAAK4X,EAAKC,EAAKnX,EAAKG,CAE5B,CAuVQsX,CAAQvW,KAAMA,KAAMnC,GACpBmC,KAAKqW,WACErW,IACX,CAEA,OAAA2W,CAAQ9Y,GAGJ,OArVR,SAAiBO,EAAKP,EAAG2Y,GACrBA,GAAO,GAEP,IAAI1X,EAAKjB,EAAE,GACPkB,EAAKlB,EAAE,GACPmB,EAAKnB,EAAE,GACPmY,EAAKnY,EAAE,GACPqB,EAAKjB,KAAKwY,IAAID,GACdP,EAAKhY,KAAKyY,IAAIF,GAElBpY,EAAI,GAAKU,EAAKmX,EAAKjX,EAAKE,EACxBd,EAAI,GAAKW,EAAKkX,EAAKD,EAAK9W,EACxBd,EAAI,GAAKY,EAAKiX,EAAKnX,EAAKI,EACxBd,EAAI,GAAK4X,EAAKC,EAAKlX,EAAKG,CAE5B,CAoUQyX,CAAQ3W,KAAMA,KAAMnC,GACpBmC,KAAKqW,WACErW,IACX,CAEA,OAAA4W,CAAQ/Y,GAGJ,OAlUR,SAAiBO,EAAKP,EAAG2Y,GACrBA,GAAO,GAEP,IAAI1X,EAAKjB,EAAE,GACPkB,EAAKlB,EAAE,GACPmB,EAAKnB,EAAE,GACPmY,EAAKnY,EAAE,GACPsB,EAAKlB,KAAKwY,IAAID,GACdP,EAAKhY,KAAKyY,IAAIF,GAElBpY,EAAI,GAAKU,EAAKmX,EAAKlX,EAAKI,EACxBf,EAAI,GAAKW,EAAKkX,EAAKnX,EAAKK,EACxBf,EAAI,GAAKY,EAAKiX,EAAKD,EAAK7W,EACxBf,EAAI,GAAK4X,EAAKC,EAAKjX,EAAKG,CAE5B,CAiTQyX,CAAQ5W,KAAMA,KAAMnC,GACpBmC,KAAKqW,WACErW,IACX,CAEA,OAAAW,CAAQoB,EAAI/B,MAGR,OAzPR,SAAkB5B,EAAKP,GACnB,IAAIgZ,EAAKhZ,EAAE,GACPiZ,EAAKjZ,EAAE,GACPkZ,EAAKlZ,EAAE,GACPmZ,EAAKnZ,EAAE,GACPqD,EAAM2V,EAAKA,EAAKC,EAAKA,EAAKC,EAAKA,EAAKC,EAAKA,EACzCC,EAAS/V,EAAM,EAAMA,EAAM,EAI/B9C,EAAI,IAAMyY,EAAKI,EACf7Y,EAAI,IAAM0Y,EAAKG,EACf7Y,EAAI,IAAM2Y,EAAKE,EACf7Y,EAAI,GAAK4Y,EAAKC,CAElB,CAwOQC,CAASlX,KAAM+B,GACf/B,KAAKqW,WACErW,IACX,CAEA,SAAAmX,CAAUpV,EAAI/B,MAnOlB,IAAmB5B,EAAKP,EAsOhB,OAtOgBA,EAoOAkE,GApOL3D,EAoOD4B,MAnOV,IAAMnC,EAAE,GACZO,EAAI,IAAMP,EAAE,GACZO,EAAI,IAAMP,EAAE,GACZO,EAAI,GAAKP,EAAE,GAiOPmC,KAAKqW,WACErW,IACX,CAEA,IAAAI,CAAK2B,GAGD,OAFAmU,EAAOlW,KAAM+B,GACb/B,KAAKqW,WACErW,IACX,CAEA,SAAAiB,CAAUc,EAAI/B,MAGV,OAFAiB,EAAUjB,KAAM+B,GAChB/B,KAAKqW,WACErW,IACX,CAEA,QAAAS,CAAS2W,EAAIC,GAOT,OANIA,EACAtB,EAAW/V,KAAMoX,EAAIC,GAErBtB,EAAW/V,KAAMA,KAAMoX,GAE3BpX,KAAKqW,WACErW,IACX,CAEA,GAAAkB,CAAIjB,GACA,OAAOiB,EAAIlB,KAAMC,EACrB,CAEA,WAAAqX,CAAYC,GAGR,OAnPR,SAAkBnZ,EAAKkD,GAGnB,IACIkW,EADAC,EAASnW,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAG7B,GAAImW,EAAS,EAETD,EAAQvZ,KAAKC,KAAKuZ,EAAS,GAC3BrZ,EAAI,GAAK,GAAMoZ,EACfA,EAAQ,GAAMA,EACdpZ,EAAI,IAAMkD,EAAE,GAAKA,EAAE,IAAMkW,EACzBpZ,EAAI,IAAMkD,EAAE,GAAKA,EAAE,IAAMkW,EACzBpZ,EAAI,IAAMkD,EAAE,GAAKA,EAAE,IAAMkW,MACtB,CAEH,IAAIhQ,EAAI,EACJlG,EAAE,GAAKA,EAAE,KAAIkG,EAAI,GACjBlG,EAAE,GAAKA,EAAM,EAAJkG,EAAQA,KAAIA,EAAI,GAC7B,IAAIkQ,GAAKlQ,EAAI,GAAK,EACdmQ,GAAKnQ,EAAI,GAAK,EAElBgQ,EAAQvZ,KAAKC,KAAKoD,EAAM,EAAJkG,EAAQA,GAAKlG,EAAM,EAAJoW,EAAQA,GAAKpW,EAAM,EAAJqW,EAAQA,GAAK,GAC/DvZ,EAAIoJ,GAAK,GAAMgQ,EACfA,EAAQ,GAAMA,EACdpZ,EAAI,IAAMkD,EAAM,EAAJoW,EAAQC,GAAKrW,EAAM,EAAJqW,EAAQD,IAAMF,EACzCpZ,EAAIsZ,IAAMpW,EAAM,EAAJoW,EAAQlQ,GAAKlG,EAAM,EAAJkG,EAAQkQ,IAAMF,EACzCpZ,EAAIuZ,IAAMrW,EAAM,EAAJqW,EAAQnQ,GAAKlG,EAAM,EAAJkG,EAAQmQ,IAAMH,CAC7C,CAGJ,CAkNQI,CAAS5X,KAAMuX,GACfvX,KAAKqW,WACErW,IACX,CAEA,SAAA6X,CAAUC,GAEN,OA9MR,SAAmB1Z,EAAK0Z,EAAOC,EAAQ,OACnC,IAAIC,EAAK/Z,KAAKwY,IAAe,GAAXqB,EAAM,IACpBG,EAAKha,KAAKyY,IAAe,GAAXoB,EAAM,IACpBI,EAAKja,KAAKwY,IAAe,GAAXqB,EAAM,IACpBK,EAAKla,KAAKyY,IAAe,GAAXoB,EAAM,IACpBM,EAAKna,KAAKwY,IAAe,GAAXqB,EAAM,IACpBO,EAAKpa,KAAKyY,IAAe,GAAXoB,EAAM,IAEV,QAAVC,GACA3Z,EAAI,GAAK4Z,EAAKG,EAAKE,EAAKJ,EAAKC,EAAKE,EAClCha,EAAI,GAAK6Z,EAAKC,EAAKG,EAAKL,EAAKG,EAAKC,EAClCha,EAAI,GAAK6Z,EAAKE,EAAKC,EAAKJ,EAAKE,EAAKG,EAClCja,EAAI,GAAK6Z,EAAKE,EAAKE,EAAKL,EAAKE,EAAKE,GACjB,QAAVL,GACP3Z,EAAI,GAAK4Z,EAAKG,EAAKE,EAAKJ,EAAKC,EAAKE,EAClCha,EAAI,GAAK6Z,EAAKC,EAAKG,EAAKL,EAAKG,EAAKC,EAClCha,EAAI,GAAK6Z,EAAKE,EAAKC,EAAKJ,EAAKE,EAAKG,EAClCja,EAAI,GAAK6Z,EAAKE,EAAKE,EAAKL,EAAKE,EAAKE,GACjB,QAAVL,GACP3Z,EAAI,GAAK4Z,EAAKG,EAAKE,EAAKJ,EAAKC,EAAKE,EAClCha,EAAI,GAAK6Z,EAAKC,EAAKG,EAAKL,EAAKG,EAAKC,EAClCha,EAAI,GAAK6Z,EAAKE,EAAKC,EAAKJ,EAAKE,EAAKG,EAClCja,EAAI,GAAK6Z,EAAKE,EAAKE,EAAKL,EAAKE,EAAKE,GACjB,QAAVL,GACP3Z,EAAI,GAAK4Z,EAAKG,EAAKE,EAAKJ,EAAKC,EAAKE,EAClCha,EAAI,GAAK6Z,EAAKC,EAAKG,EAAKL,EAAKG,EAAKC,EAClCha,EAAI,GAAK6Z,EAAKE,EAAKC,EAAKJ,EAAKE,EAAKG,EAClCja,EAAI,GAAK6Z,EAAKE,EAAKE,EAAKL,EAAKE,EAAKE,GACjB,QAAVL,GACP3Z,EAAI,GAAK4Z,EAAKG,EAAKE,EAAKJ,EAAKC,EAAKE,EAClCha,EAAI,GAAK6Z,EAAKC,EAAKG,EAAKL,EAAKG,EAAKC,EAClCha,EAAI,GAAK6Z,EAAKE,EAAKC,EAAKJ,EAAKE,EAAKG,EAClCja,EAAI,GAAK6Z,EAAKE,EAAKE,EAAKL,EAAKE,EAAKE,GACjB,QAAVL,IACP3Z,EAAI,GAAK4Z,EAAKG,EAAKE,EAAKJ,EAAKC,EAAKE,EAClCha,EAAI,GAAK6Z,EAAKC,EAAKG,EAAKL,EAAKG,EAAKC,EAClCha,EAAI,GAAK6Z,EAAKE,EAAKC,EAAKJ,EAAKE,EAAKG,EAClCja,EAAI,GAAK6Z,EAAKE,EAAKE,EAAKL,EAAKE,EAAKE,EAI1C,CAoKQP,CAAU7X,KAAM8X,EAAOA,EAAMC,OACtB/X,IACX,CAEA,aAAAsY,CAAcC,EAAM1a,GAEhB,OArdR,SAAsBO,EAAKma,EAAM/B,GAC7BA,GAAY,GACZ,IAAIgC,EAAIva,KAAKwY,IAAID,GACjBpY,EAAI,GAAKoa,EAAID,EAAK,GAClBna,EAAI,GAAKoa,EAAID,EAAK,GAClBna,EAAI,GAAKoa,EAAID,EAAK,GAClBna,EAAI,GAAKH,KAAKyY,IAAIF,EAEtB,CA4cQiC,CAAazY,KAAMuY,EAAM1a,GAClBmC,IACX,CAEA,KAAA0Y,CAAM3W,EAAGa,GAEL,OAnWR,SAAexE,EAAKP,EAAGS,EAAGsE,GAGtB,IASI+V,EAAOC,EAAOC,EAAOC,EAAQC,EAT7Bja,EAAKjB,EAAE,GACPkB,EAAKlB,EAAE,GACPmB,EAAKnB,EAAE,GACPmY,EAAKnY,EAAE,GACPoB,EAAKX,EAAE,GACPY,EAAKZ,EAAE,GACPa,EAAKb,EAAE,GACP2X,EAAK3X,EAAE,GAKXsa,EAAQ9Z,EAAKG,EAAKF,EAAKG,EAAKF,EAAKG,EAAK6W,EAAKC,EAEvC2C,EAAQ,IACRA,GAASA,EACT3Z,GAAMA,EACNC,GAAMA,EACNC,GAAMA,EACN8W,GAAMA,GAGN,EAAM2C,EAAQ,MAEdD,EAAQ1a,KAAK0B,KAAKiZ,GAClBC,EAAQ5a,KAAKwY,IAAIkC,GACjBG,EAAS7a,KAAKwY,KAAK,EAAM7T,GAAK+V,GAASE,EACvCE,EAAS9a,KAAKwY,IAAI7T,EAAI+V,GAASE,IAI/BC,EAAS,EAAMlW,EACfmW,EAASnW,GAGbxE,EAAI,GAAK0a,EAASha,EAAKia,EAAS9Z,EAChCb,EAAI,GAAK0a,EAAS/Z,EAAKga,EAAS7Z,EAChCd,EAAI,GAAK0a,EAAS9Z,EAAK+Z,EAAS5Z,EAChCf,EAAI,GAAK0a,EAAS9C,EAAK+C,EAAS9C,CAGpC,CAsTQyC,CAAM1Y,KAAMA,KAAM+B,EAAGa,GACd5C,IACX,CAEA,SAAA8C,CAAUjF,EAAGkF,EAAI,GAKb,OAJA/C,KAAK,GAAKnC,EAAEkF,GACZ/C,KAAK,GAAKnC,EAAEkF,EAAI,GAChB/C,KAAK,GAAKnC,EAAEkF,EAAI,GAChB/C,KAAK,GAAKnC,EAAEkF,EAAI,GACT/C,IACX,CAEA,OAAAgD,CAAQnF,EAAI,GAAIkF,EAAI,GAKhB,OAJAlF,EAAEkF,GAAK/C,KAAK,GACZnC,EAAEkF,EAAI,GAAK/C,KAAK,GAChBnC,EAAEkF,EAAI,GAAK/C,KAAK,GAChBnC,EAAEkF,EAAI,GAAK/C,KAAK,GACTnC,CACX,EAuMJ,SAASmb,EAAW5a,EAAKP,EAAGS,GACxB,IAAI2a,EAAMpb,EAAE,GACRqb,EAAMrb,EAAE,GACRsb,EAAMtb,EAAE,GACRub,EAAMvb,EAAE,GACRwb,EAAMxb,EAAE,GACRyb,EAAMzb,EAAE,GACR0b,EAAM1b,EAAE,GACR2b,EAAM3b,EAAE,GACR4b,EAAM5b,EAAE,GACR6b,EAAM7b,EAAE,GACR8b,EAAM9b,EAAE,IACR+b,EAAM/b,EAAE,IACRgc,EAAMhc,EAAE,IACRic,EAAMjc,EAAE,IACRkc,EAAMlc,EAAE,IACRmc,EAAMnc,EAAE,IAGRoc,EAAK3b,EAAE,GACP4b,EAAK5b,EAAE,GACP6b,EAAK7b,EAAE,GACP8b,EAAK9b,EAAE,GAgCX,OA/BAF,EAAI,GAAK6b,EAAKhB,EAAMiB,EAAKb,EAAMc,EAAKV,EAAMW,EAAKP,EAC/Czb,EAAI,GAAK6b,EAAKf,EAAMgB,EAAKZ,EAAMa,EAAKT,EAAMU,EAAKN,EAC/C1b,EAAI,GAAK6b,EAAKd,EAAMe,EAAKX,EAAMY,EAAKR,EAAMS,EAAKL,EAC/C3b,EAAI,GAAK6b,EAAKb,EAAMc,EAAKV,EAAMW,EAAKP,EAAMQ,EAAKJ,EAE/CC,EAAK3b,EAAE,GACP4b,EAAK5b,EAAE,GACP6b,EAAK7b,EAAE,GACP8b,EAAK9b,EAAE,GACPF,EAAI,GAAK6b,EAAKhB,EAAMiB,EAAKb,EAAMc,EAAKV,EAAMW,EAAKP,EAC/Czb,EAAI,GAAK6b,EAAKf,EAAMgB,EAAKZ,EAAMa,EAAKT,EAAMU,EAAKN,EAC/C1b,EAAI,GAAK6b,EAAKd,EAAMe,EAAKX,EAAMY,EAAKR,EAAMS,EAAKL,EAC/C3b,EAAI,GAAK6b,EAAKb,EAAMc,EAAKV,EAAMW,EAAKP,EAAMQ,EAAKJ,EAE/CC,EAAK3b,EAAE,GACP4b,EAAK5b,EAAE,GACP6b,EAAK7b,EAAE,IACP8b,EAAK9b,EAAE,IACPF,EAAI,GAAK6b,EAAKhB,EAAMiB,EAAKb,EAAMc,EAAKV,EAAMW,EAAKP,EAC/Czb,EAAI,GAAK6b,EAAKf,EAAMgB,EAAKZ,EAAMa,EAAKT,EAAMU,EAAKN,EAC/C1b,EAAI,IAAM6b,EAAKd,EAAMe,EAAKX,EAAMY,EAAKR,EAAMS,EAAKL,EAChD3b,EAAI,IAAM6b,EAAKb,EAAMc,EAAKV,EAAMW,EAAKP,EAAMQ,EAAKJ,EAEhDC,EAAK3b,EAAE,IACP4b,EAAK5b,EAAE,IACP6b,EAAK7b,EAAE,IACP8b,EAAK9b,EAAE,IACPF,EAAI,IAAM6b,EAAKhB,EAAMiB,EAAKb,EAAMc,EAAKV,EAAMW,EAAKP,EAChDzb,EAAI,IAAM6b,EAAKf,EAAMgB,EAAKZ,EAAMa,EAAKT,EAAMU,EAAKN,EAChD1b,EAAI,IAAM6b,EAAKd,EAAMe,EAAKX,EAAMY,EAAKR,EAAMS,EAAKL,EAChD3b,EAAI,IAAM6b,EAAKb,EAAMc,EAAKV,EAAMW,EAAKP,EAAMQ,EAAKJ,EACzC5b,CACX,CAyMA,SAASic,EAAWjc,EAAKkc,GACrB,IAAIC,EAAMD,EAAI,GACVE,EAAMF,EAAI,GACVG,EAAMH,EAAI,GACVI,EAAMJ,EAAI,GACVK,EAAML,EAAI,GACVM,EAAMN,EAAI,GACVO,EAAMP,EAAI,GACVQ,EAAMR,EAAI,GACVS,EAAMT,EAAI,IAMd,OAJAlc,EAAI,GAAKH,KAAK+c,MAAMT,EAAKC,EAAKC,GAC9Brc,EAAI,GAAKH,KAAK+c,MAAMN,EAAKC,EAAKC,GAC9Bxc,EAAI,GAAKH,KAAK+c,MAAMH,EAAKC,EAAKC,GAEvB3c,CACX,CA6BA,MAAM6c,EAAc,WAChB,MAAMC,EAAO,CAAC,EAAG,EAAG,GAEpB,OAAO,SAAU9c,EAAKkc,GAClB,IAAIa,EAAUD,EACdb,EAAWc,EAASb,GAEpB,IAAIc,EAAM,EAAID,EAAQ,GAClBE,EAAM,EAAIF,EAAQ,GAClBG,EAAM,EAAIH,EAAQ,GAElBI,EAAOjB,EAAI,GAAKc,EAChBI,EAAOlB,EAAI,GAAKe,EAChBI,EAAOnB,EAAI,GAAKgB,EAChBI,EAAOpB,EAAI,GAAKc,EAChBO,EAAOrB,EAAI,GAAKe,EAChBO,EAAOtB,EAAI,GAAKgB,EAChBO,EAAOvB,EAAI,GAAKc,EAChBU,EAAOxB,EAAI,GAAKe,EAChBU,EAAOzB,EAAI,IAAMgB,EAEjBU,EAAQT,EAAOI,EAAOI,EACtBE,EAAI,EA4BR,OA1BID,EAAQ,GACRC,EAA6B,EAAzBhe,KAAKC,KAAK8d,EAAQ,GACtB5d,EAAI,GAAK,IAAO6d,EAChB7d,EAAI,IAAMwd,EAAOE,GAAQG,EACzB7d,EAAI,IAAMyd,EAAOJ,GAAQQ,EACzB7d,EAAI,IAAMod,EAAOE,GAAQO,GAClBV,EAAOI,GAAQJ,EAAOQ,GAC7BE,EAA0C,EAAtChe,KAAKC,KAAK,EAAMqd,EAAOI,EAAOI,GAClC3d,EAAI,IAAMwd,EAAOE,GAAQG,EACzB7d,EAAI,GAAK,IAAO6d,EAChB7d,EAAI,IAAMod,EAAOE,GAAQO,EACzB7d,EAAI,IAAMyd,EAAOJ,GAAQQ,GAClBN,EAAOI,GACdE,EAA0C,EAAtChe,KAAKC,KAAK,EAAMyd,EAAOJ,EAAOQ,GAClC3d,EAAI,IAAMyd,EAAOJ,GAAQQ,EACzB7d,EAAI,IAAMod,EAAOE,GAAQO,EACzB7d,EAAI,GAAK,IAAO6d,EAChB7d,EAAI,IAAMwd,EAAOE,GAAQG,IAEzBA,EAA0C,EAAtChe,KAAKC,KAAK,EAAM6d,EAAOR,EAAOI,GAClCvd,EAAI,IAAMod,EAAOE,GAAQO,EACzB7d,EAAI,IAAMyd,EAAOJ,GAAQQ,EACzB7d,EAAI,IAAMwd,EAAOE,GAAQG,EACzB7d,EAAI,GAAK,IAAO6d,GAGb7d,CACX,CACH,CApDmB,GAkTpB,MAAM8d,UAAarc,MACf,WAAAC,CACIqc,EAAM,EACNC,EAAM,EACNC,EAAM,EACNC,EAAM,EACNC,EAAM,EACNhC,EAAM,EACNC,EAAM,EACNC,EAAM,EACN+B,EAAM,EACN9B,EAAM,EACNC,EAAM,EACNC,EAAM,EACN6B,EAAM,EACN5B,EAAM,EACNC,EAAM,EACNC,EAAM,GAGN,OADAhb,MAAMoc,EAAKC,EAAKC,EAAKC,EAAKC,EAAKhC,EAAKC,EAAKC,EAAK+B,EAAK9B,EAAKC,EAAKC,EAAK6B,EAAK5B,EAAKC,EAAKC,GAC1E/a,IACX,CAEA,KAAIlC,GACA,OAAOkC,KAAK,GAChB,CAEA,KAAIjC,GACA,OAAOiC,KAAK,GAChB,CAEA,KAAIhC,GACA,OAAOgC,KAAK,GAChB,CAEA,KAAI0B,GACA,OAAO1B,KAAK,GAChB,CAEA,KAAIlC,CAAEmC,GACFD,KAAK,IAAMC,CACf,CAEA,KAAIlC,CAAEkC,GACFD,KAAK,IAAMC,CACf,CAEA,KAAIjC,CAAEiC,GACFD,KAAK,IAAMC,CACf,CAEA,KAAIyB,CAAEzB,GACFD,KAAK,IAAMC,CACf,CAEA,GAAAC,CAAIic,EAAKC,EAAKC,EAAKC,EAAKC,EAAKhC,EAAKC,EAAKC,EAAK+B,EAAK9B,EAAKC,EAAKC,EAAK6B,EAAK5B,EAAKC,EAAKC,GAC3E,OAAIoB,EAAIhc,OAAeH,KAAKI,KAAK+b,IAxzBzC,SAAe/d,EAAK+d,EAAKC,EAAKC,EAAKC,EAAKC,EAAKhC,EAAKC,EAAKC,EAAK+B,EAAK9B,EAAKC,EAAKC,EAAK6B,EAAK5B,EAAKC,EAAKC,GAC3F3c,EAAI,GAAK+d,EACT/d,EAAI,GAAKge,EACThe,EAAI,GAAKie,EACTje,EAAI,GAAKke,EACTle,EAAI,GAAKme,EACTne,EAAI,GAAKmc,EACTnc,EAAI,GAAKoc,EACTpc,EAAI,GAAKqc,EACTrc,EAAI,GAAKoe,EACTpe,EAAI,GAAKsc,EACTtc,EAAI,IAAMuc,EACVvc,EAAI,IAAMwc,EACVxc,EAAI,IAAMqe,EACVre,EAAI,IAAMyc,EACVzc,EAAI,IAAM0c,EACV1c,EAAI,IAAM2c,CAEd,CAuyBQ2B,CAAM1c,KAAMmc,EAAKC,EAAKC,EAAKC,EAAKC,EAAKhC,EAAKC,EAAKC,EAAK+B,EAAK9B,EAAKC,EAAKC,EAAK6B,EAAK5B,EAAKC,EAAKC,GAChF/a,KACX,CAEA,SAAA2c,CAAU1c,EAAGqB,EAAItB,MAEb,OA7lBR,SAAqB5B,EAAKP,EAAGoC,GACzB,IAGIgZ,EAAKC,EAAKC,EAAKC,EACfC,EAAKC,EAAKC,EAAKC,EACfC,EAAKC,EAAKC,EAAKC,EALf9b,EAAImC,EAAE,GACNlC,EAAIkC,EAAE,GACNjC,EAAIiC,EAAE,GAKNpC,IAAMO,GACNA,EAAI,IAAMP,EAAE,GAAKC,EAAID,EAAE,GAAKE,EAAIF,EAAE,GAAKG,EAAIH,EAAE,IAC7CO,EAAI,IAAMP,EAAE,GAAKC,EAAID,EAAE,GAAKE,EAAIF,EAAE,GAAKG,EAAIH,EAAE,IAC7CO,EAAI,IAAMP,EAAE,GAAKC,EAAID,EAAE,GAAKE,EAAIF,EAAE,IAAMG,EAAIH,EAAE,IAC9CO,EAAI,IAAMP,EAAE,GAAKC,EAAID,EAAE,GAAKE,EAAIF,EAAE,IAAMG,EAAIH,EAAE,MAE9Cob,EAAMpb,EAAE,GACRqb,EAAMrb,EAAE,GACRsb,EAAMtb,EAAE,GACRub,EAAMvb,EAAE,GACRwb,EAAMxb,EAAE,GACRyb,EAAMzb,EAAE,GACR0b,EAAM1b,EAAE,GACR2b,EAAM3b,EAAE,GACR4b,EAAM5b,EAAE,GACR6b,EAAM7b,EAAE,GACR8b,EAAM9b,EAAE,IACR+b,EAAM/b,EAAE,IAERO,EAAI,GAAK6a,EACT7a,EAAI,GAAK8a,EACT9a,EAAI,GAAK+a,EACT/a,EAAI,GAAKgb,EACThb,EAAI,GAAKib,EACTjb,EAAI,GAAKkb,EACTlb,EAAI,GAAKmb,EACTnb,EAAI,GAAKob,EACTpb,EAAI,GAAKqb,EACTrb,EAAI,GAAKsb,EACTtb,EAAI,IAAMub,EACVvb,EAAI,IAAMwb,EAEVxb,EAAI,IAAM6a,EAAMnb,EAAIub,EAAMtb,EAAI0b,EAAMzb,EAAIH,EAAE,IAC1CO,EAAI,IAAM8a,EAAMpb,EAAIwb,EAAMvb,EAAI2b,EAAM1b,EAAIH,EAAE,IAC1CO,EAAI,IAAM+a,EAAMrb,EAAIyb,EAAMxb,EAAI4b,EAAM3b,EAAIH,EAAE,IAC1CO,EAAI,IAAMgb,EAAMtb,EAAI0b,EAAMzb,EAAI6b,EAAM5b,EAAIH,EAAE,IAIlD,CA6iBQ+e,CAAY5c,KAAMsB,EAAGrB,GACdD,IACX,CAEA,MAAA6c,CAAO5c,EAAGsY,EAAMjX,EAAItB,MAEhB,OAxgBR,SAAkB5B,EAAKP,EAAG2Y,EAAK+B,GAC3B,IAIIC,EAAGsE,EAAGla,EACNqW,EAAKC,EAAKC,EAAKC,EACfC,EAAKC,EAAKC,EAAKC,EACfC,EAAKC,EAAKC,EAAKC,EACfmD,EAAKC,EAAKC,EACVC,EAAKC,EAAKC,EACVC,EAAKC,EAAKC,EAVVzf,EAAIya,EAAK,GACTxa,EAAIwa,EAAK,GACTva,EAAIua,EAAK,GACT5Z,EAAMV,KAAK+c,MAAMld,EAAGC,EAAGC,GASvBC,KAAKuf,IAAI7e,GA5WD,OAgXZA,EAAM,EAAIA,EACVb,GAAKa,EACLZ,GAAKY,EACLX,GAAKW,EAEL6Z,EAAIva,KAAKwY,IAAID,GACbsG,EAAI7e,KAAKyY,IAAIF,GACb5T,EAAI,EAAIka,EAER7D,EAAMpb,EAAE,GACRqb,EAAMrb,EAAE,GACRsb,EAAMtb,EAAE,GACRub,EAAMvb,EAAE,GACRwb,EAAMxb,EAAE,GACRyb,EAAMzb,EAAE,GACR0b,EAAM1b,EAAE,GACR2b,EAAM3b,EAAE,GACR4b,EAAM5b,EAAE,GACR6b,EAAM7b,EAAE,GACR8b,EAAM9b,EAAE,IACR+b,EAAM/b,EAAE,IAGRkf,EAAMjf,EAAIA,EAAI8E,EAAIka,EAClBE,EAAMjf,EAAID,EAAI8E,EAAI5E,EAAIwa,EACtByE,EAAMjf,EAAIF,EAAI8E,EAAI7E,EAAIya,EACtB0E,EAAMpf,EAAIC,EAAI6E,EAAI5E,EAAIwa,EACtB2E,EAAMpf,EAAIA,EAAI6E,EAAIka,EAClBM,EAAMpf,EAAID,EAAI6E,EAAI9E,EAAI0a,EACtB6E,EAAMvf,EAAIE,EAAI4E,EAAI7E,EAAIya,EACtB8E,EAAMvf,EAAIC,EAAI4E,EAAI9E,EAAI0a,EACtB+E,EAAMvf,EAAIA,EAAI4E,EAAIka,EAGlB1e,EAAI,GAAK6a,EAAM8D,EAAM1D,EAAM2D,EAAMvD,EAAMwD,EACvC7e,EAAI,GAAK8a,EAAM6D,EAAMzD,EAAM0D,EAAMtD,EAAMuD,EACvC7e,EAAI,GAAK+a,EAAM4D,EAAMxD,EAAMyD,EAAMrD,EAAMsD,EACvC7e,EAAI,GAAKgb,EAAM2D,EAAMvD,EAAMwD,EAAMpD,EAAMqD,EACvC7e,EAAI,GAAK6a,EAAMiE,EAAM7D,EAAM8D,EAAM1D,EAAM2D,EACvChf,EAAI,GAAK8a,EAAMgE,EAAM5D,EAAM6D,EAAMzD,EAAM0D,EACvChf,EAAI,GAAK+a,EAAM+D,EAAM3D,EAAM4D,EAAMxD,EAAMyD,EACvChf,EAAI,GAAKgb,EAAM8D,EAAM1D,EAAM2D,EAAMvD,EAAMwD,EACvChf,EAAI,GAAK6a,EAAMoE,EAAMhE,EAAMiE,EAAM7D,EAAM8D,EACvCnf,EAAI,GAAK8a,EAAMmE,EAAM/D,EAAMgE,EAAM5D,EAAM6D,EACvCnf,EAAI,IAAM+a,EAAMkE,EAAM9D,EAAM+D,EAAM3D,EAAM4D,EACxCnf,EAAI,IAAMgb,EAAMiE,EAAM7D,EAAM8D,EAAM1D,EAAM2D,EAEpC1f,IAAMO,IAENA,EAAI,IAAMP,EAAE,IACZO,EAAI,IAAMP,EAAE,IACZO,EAAI,IAAMP,EAAE,IACZO,EAAI,IAAMP,EAAE,KAGpB,CA+bQ4f,CAASzd,KAAMsB,EAAGrB,EAAGsY,GACdvY,IACX,CAEA,KAAAgB,CAAMf,EAAGqB,EAAItB,MAET,OA9iBR,SAAiB5B,EAAKP,EAAGoC,GACrB,IAAInC,EAAImC,EAAE,GACNlC,EAAIkC,EAAE,GACNjC,EAAIiC,EAAE,GAEV7B,EAAI,GAAKP,EAAE,GAAKC,EAChBM,EAAI,GAAKP,EAAE,GAAKC,EAChBM,EAAI,GAAKP,EAAE,GAAKC,EAChBM,EAAI,GAAKP,EAAE,GAAKC,EAChBM,EAAI,GAAKP,EAAE,GAAKE,EAChBK,EAAI,GAAKP,EAAE,GAAKE,EAChBK,EAAI,GAAKP,EAAE,GAAKE,EAChBK,EAAI,GAAKP,EAAE,GAAKE,EAChBK,EAAI,GAAKP,EAAE,GAAKG,EAChBI,EAAI,GAAKP,EAAE,GAAKG,EAChBI,EAAI,IAAMP,EAAE,IAAMG,EAClBI,EAAI,IAAMP,EAAE,IAAMG,EAClBI,EAAI,IAAMP,EAAE,IACZO,EAAI,IAAMP,EAAE,IACZO,EAAI,IAAMP,EAAE,IACZO,EAAI,IAAMP,EAAE,GAEhB,CAuhBQ6f,CAAQ1d,KAAMsB,EAAgB,iBAANrB,EAAiB,CAACA,EAAGA,EAAGA,GAAKA,GAC9CD,IACX,CAEA,QAAAS,CAASkd,EAAIC,GAMT,OALIA,EACA5E,EAAWhZ,KAAM2d,EAAIC,GAErB5E,EAAWhZ,KAAMA,KAAM2d,GAEpB3d,IACX,CAEA,QAAAsW,GA3zBJ,IAAoBlY,EA6zBZ,OA7zBYA,EA4zBD4B,MA3zBX,GAAK,EACT5B,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EA6yBC4B,IACX,CAEA,IAAAI,CAAKkB,GAp3BT,IAAgBlD,EAAKP,EAs3Bb,OAt3BaA,EAq3BAyD,GAr3BLlD,EAq3BD4B,MAp3BP,GAAKnC,EAAE,GACXO,EAAI,GAAKP,EAAE,GACXO,EAAI,GAAKP,EAAE,GACXO,EAAI,GAAKP,EAAE,GACXO,EAAI,GAAKP,EAAE,GACXO,EAAI,GAAKP,EAAE,GACXO,EAAI,GAAKP,EAAE,GACXO,EAAI,GAAKP,EAAE,GACXO,EAAI,GAAKP,EAAE,GACXO,EAAI,GAAKP,EAAE,GACXO,EAAI,IAAMP,EAAE,IACZO,EAAI,IAAMP,EAAE,IACZO,EAAI,IAAMP,EAAE,IACZO,EAAI,IAAMP,EAAE,IACZO,EAAI,IAAMP,EAAE,IACZO,EAAI,IAAMP,EAAE,IAs2BDmC,IACX,CAEA,eAAA6d,EAAgB,IAAEC,EAAG,OAAEC,EAAM,KAAEC,EAAI,IAAEC,GAAQ,CAAC,GAE1C,OArOR,SAAqB7f,EAAK8f,EAAMH,EAAQC,EAAMC,GAC1C,IAAIE,EAAI,EAAMlgB,KAAKmgB,IAAIF,EAAO,GAC1BG,EAAK,GAAKL,EAAOC,GACrB7f,EAAI,GAAK+f,EAAIJ,EACb3f,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK+f,EACT/f,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,KAAO6f,EAAMD,GAAQK,EACzBjgB,EAAI,KAAO,EACXA,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EAAI6f,EAAMD,EAAOK,EAC3BjgB,EAAI,IAAM,CAEd,CAgNQkgB,CAAYte,KAAM8d,EAAKC,EAAQC,EAAMC,GAC9Bje,IACX,CAEA,cAAAue,EAAe,KAAEC,EAAI,MAAEC,EAAK,OAAEC,EAAM,IAAEC,EAAG,KAAEX,EAAI,IAAEC,IAE7C,OAxMR,SAAe7f,EAAKogB,EAAMC,EAAOC,EAAQC,EAAKX,EAAMC,GAChD,IAAIW,EAAK,GAAKJ,EAAOC,GACjBI,EAAK,GAAKH,EAASC,GACnBN,EAAK,GAAKL,EAAOC,GACrB7f,EAAI,IAAM,EAAIwgB,EACdxgB,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,IAAM,EAAIygB,EACdzgB,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,IAAM,EAAIigB,EACdjgB,EAAI,IAAM,EACVA,EAAI,KAAOogB,EAAOC,GAASG,EAC3BxgB,EAAI,KAAOugB,EAAMD,GAAUG,EAC3BzgB,EAAI,KAAO6f,EAAMD,GAAQK,EACzBjgB,EAAI,IAAM,CAEd,CAkLQ0gB,CAAM9e,KAAMwe,EAAMC,EAAOC,EAAQC,EAAKX,EAAMC,GACrCje,IACX,CAEA,cAAA+e,CAAehd,GAEX,OAnSR,SAAoB3D,EAAK2D,GACrB,IAAIjE,EAAIiE,EAAE,GACNhE,EAAIgE,EAAE,GACN/D,EAAI+D,EAAE,GACNL,EAAIK,EAAE,GACNid,EAAKlhB,EAAIA,EACTmhB,EAAKlhB,EAAIA,EACTmhB,EAAKlhB,EAAIA,EAETmhB,EAAKrhB,EAAIkhB,EACTI,EAAKrhB,EAAIihB,EACTK,EAAKthB,EAAIkhB,EACTK,EAAKthB,EAAIghB,EACTO,EAAKvhB,EAAIihB,EACTO,EAAKxhB,EAAIkhB,EACTO,EAAK/d,EAAIsd,EACTU,EAAKhe,EAAIud,EACTU,EAAKje,EAAIwd,EAEb9gB,EAAI,GAAK,EAAIihB,EAAKG,EAClBphB,EAAI,GAAKghB,EAAKO,EACdvhB,EAAI,GAAKkhB,EAAKI,EACdthB,EAAI,GAAK,EAETA,EAAI,GAAKghB,EAAKO,EACdvhB,EAAI,GAAK,EAAI+gB,EAAKK,EAClBphB,EAAI,GAAKmhB,EAAKE,EACdrhB,EAAI,GAAK,EAETA,EAAI,GAAKkhB,EAAKI,EACdthB,EAAI,GAAKmhB,EAAKE,EACdrhB,EAAI,IAAM,EAAI+gB,EAAKE,EACnBjhB,EAAI,IAAM,EAEVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,CAGd,CA0PQwhB,CAAW5f,KAAM+B,GACV/B,IACX,CAEA,WAAA6f,CAAY5f,GAIR,OAHAD,KAAKlC,EAAImC,EAAE,GACXD,KAAKjC,EAAIkC,EAAE,GACXD,KAAKhC,EAAIiC,EAAE,GACJD,IACX,CAEA,OAAAW,CAAQW,EAAItB,MAER,OAl0BR,SAAkB5B,EAAKP,GACnB,IAAIob,EAAMpb,EAAE,GACRqb,EAAMrb,EAAE,GACRsb,EAAMtb,EAAE,GACRub,EAAMvb,EAAE,GACRwb,EAAMxb,EAAE,GACRyb,EAAMzb,EAAE,GACR0b,EAAM1b,EAAE,GACR2b,EAAM3b,EAAE,GACR4b,EAAM5b,EAAE,GACR6b,EAAM7b,EAAE,GACR8b,EAAM9b,EAAE,IACR+b,EAAM/b,EAAE,IACRgc,EAAMhc,EAAE,IACRic,EAAMjc,EAAE,IACRkc,EAAMlc,EAAE,IACRmc,EAAMnc,EAAE,IAERkf,EAAM9D,EAAMK,EAAMJ,EAAMG,EACxB2D,EAAM/D,EAAMM,EAAMJ,EAAME,EACxB4D,EAAMhE,EAAMO,EAAMJ,EAAMC,EACxByG,EAAM5G,EAAMK,EAAMJ,EAAMG,EACxByG,EAAM7G,EAAMM,EAAMJ,EAAME,EACxB0G,EAAM7G,EAAMK,EAAMJ,EAAMG,EACxB0G,EAAMxG,EAAMK,EAAMJ,EAAMG,EACxBqG,EAAMzG,EAAMM,EAAMJ,EAAME,EACxBsG,EAAM1G,EAAMO,EAAMJ,EAAMC,EACxBuG,EAAM1G,EAAMK,EAAMJ,EAAMG,EACxBoD,EAAMxD,EAAMM,EAAMJ,EAAME,EACxBqD,EAAMxD,EAAMK,EAAMJ,EAAMG,EAGxBsG,EAAMtD,EAAMI,EAAMH,EAAME,EAAMD,EAAMmD,EAAMN,EAAMK,EAAMJ,EAAMG,EAAMF,EAAMC,EAEvEI,IAGLA,EAAM,EAAMA,EAEZjiB,EAAI,IAAMkb,EAAM6D,EAAM5D,EAAM2D,EAAM1D,EAAM4G,GAAOC,EAC/CjiB,EAAI,IAAM+a,EAAM+D,EAAMhE,EAAMiE,EAAM/D,EAAMgH,GAAOC,EAC/CjiB,EAAI,IAAM0b,EAAMkG,EAAMjG,EAAMgG,EAAM/F,EAAM8F,GAAOO,EAC/CjiB,EAAI,IAAMub,EAAMoG,EAAMrG,EAAMsG,EAAMpG,EAAMkG,GAAOO,EAC/CjiB,EAAI,IAAMmb,EAAM4G,EAAM9G,EAAM8D,EAAM3D,EAAM0G,GAAOG,EAC/CjiB,EAAI,IAAM6a,EAAMkE,EAAMhE,EAAMgH,EAAM/G,EAAM8G,GAAOG,EAC/CjiB,EAAI,IAAM2b,EAAMkD,EAAMpD,EAAMmG,EAAMhG,EAAMgD,GAAOqD,EAC/CjiB,EAAI,IAAMqb,EAAMuG,EAAMrG,EAAMsD,EAAMrD,EAAMoD,GAAOqD,EAC/CjiB,EAAI,IAAMib,EAAM6D,EAAM5D,EAAM6G,EAAM3G,EAAMyG,GAAOI,EAC/CjiB,EAAI,IAAM8a,EAAMiH,EAAMlH,EAAMiE,EAAM9D,EAAM6G,GAAOI,EAC/CjiB,EAAI,KAAOyb,EAAMkG,EAAMjG,EAAMmD,EAAMjD,EAAM+C,GAAOsD,EAChDjiB,EAAI,KAAOsb,EAAMuD,EAAMxD,EAAMsG,EAAMnG,EAAMmD,GAAOsD,EAChDjiB,EAAI,KAAOkb,EAAM4G,EAAM7G,EAAM+G,EAAM7G,EAAM0G,GAAOI,EAChDjiB,EAAI,KAAO6a,EAAMmH,EAAMlH,EAAMgH,EAAM/G,EAAM8G,GAAOI,EAChDjiB,EAAI,KAAO0b,EAAMkD,EAAMnD,EAAMiG,EAAM/F,EAAMgD,GAAOsD,EAChDjiB,EAAI,KAAOqb,EAAMqG,EAAMpG,EAAMsD,EAAMrD,EAAMoD,GAAOsD,EAGpD,CAwwBQC,CAAStgB,KAAMsB,GACRtB,IACX,CAEA,OAAAugB,CAAQxe,EAAGye,EAAKxf,GAEZ,OAvWR,SAAsC5C,EAAK2D,EAAG9B,EAAGuY,GAE7C,IAAI1a,EAAIiE,EAAE,GACNhE,EAAIgE,EAAE,GACN/D,EAAI+D,EAAE,GACNL,EAAIK,EAAE,GACNid,EAAKlhB,EAAIA,EACTmhB,EAAKlhB,EAAIA,EACTmhB,EAAKlhB,EAAIA,EAETmhB,EAAKrhB,EAAIkhB,EACTyB,EAAK3iB,EAAImhB,EACTyB,EAAK5iB,EAAIohB,EACTG,EAAKthB,EAAIkhB,EACT0B,EAAK5iB,EAAImhB,EACTM,EAAKxhB,EAAIkhB,EACTO,EAAK/d,EAAIsd,EACTU,EAAKhe,EAAIud,EACTU,EAAKje,EAAIwd,EACTlH,EAAKQ,EAAE,GACPN,EAAKM,EAAE,GACPJ,EAAKI,EAAE,GAEXpa,EAAI,IAAM,GAAKihB,EAAKG,IAAOxH,EAC3B5Z,EAAI,IAAMqiB,EAAKd,GAAM3H,EACrB5Z,EAAI,IAAMsiB,EAAKhB,GAAM1H,EACrB5Z,EAAI,GAAK,EACTA,EAAI,IAAMqiB,EAAKd,GAAMzH,EACrB9Z,EAAI,IAAM,GAAK+gB,EAAKK,IAAOtH,EAC3B9Z,EAAI,IAAMuiB,EAAKlB,GAAMvH,EACrB9Z,EAAI,GAAK,EACTA,EAAI,IAAMsiB,EAAKhB,GAAMtH,EACrBha,EAAI,IAAMuiB,EAAKlB,GAAMrH,EACrBha,EAAI,KAAO,GAAK+gB,EAAKE,IAAOjH,EAC5Bha,EAAI,IAAM,EACVA,EAAI,IAAM6B,EAAE,GACZ7B,EAAI,IAAM6B,EAAE,GACZ7B,EAAI,IAAM6B,EAAE,GACZ7B,EAAI,IAAM,CAGd,CA6TQwiB,CAA6B5gB,KAAM+B,EAAGye,EAAKxf,GACpChB,IACX,CAEA,WAAAib,CAAYlZ,GAER,OADAkZ,EAAYlZ,EAAG/B,MACRA,IACX,CAEA,cAAAkV,CAAesL,GArfnB,IAAwBpiB,EAAKkc,EAufrB,OAvfqBA,EAsfDta,MAtfJ5B,EAsfDoiB,GArff,GAAKlG,EAAI,IACblc,EAAI,GAAKkc,EAAI,IACblc,EAAI,GAAKkc,EAAI,IAofFta,IACX,CAEA,UAAAqa,CAAWrZ,GAEP,OADAqZ,EAAWrZ,EAAOhB,MACXA,IACX,CAEA,iBAAA6gB,GACI,OA5dR,SAA2BvG,GACvB,IAAIC,EAAMD,EAAI,GACVE,EAAMF,EAAI,GACVG,EAAMH,EAAI,GACVI,EAAMJ,EAAI,GACVK,EAAML,EAAI,GACVM,EAAMN,EAAI,GACVO,EAAMP,EAAI,GACVQ,EAAMR,EAAI,GACVS,EAAMT,EAAI,IAEd,MAAMxc,EAAIyc,EAAMA,EAAMC,EAAMA,EAAMC,EAAMA,EAClC1c,EAAI2c,EAAMA,EAAMC,EAAMA,EAAMC,EAAMA,EAClC5c,EAAI6c,EAAMA,EAAMC,EAAMA,EAAMC,EAAMA,EAExC,OAAO9c,KAAKC,KAAKD,KAAKmI,IAAItI,EAAGC,EAAGC,GACpC,CA4ce6iB,CAAkB7gB,KAC7B,CAEA,MAAA8gB,CAAOC,EAAK7b,EAAQ8b,GAEhB,OAtNR,SAAkB5iB,EAAK2iB,EAAK7b,EAAQ8b,GAChC,IAAIC,EAAOF,EAAI,GACXG,EAAOH,EAAI,GACXI,EAAOJ,EAAI,GACXK,EAAMJ,EAAG,GACTK,EAAML,EAAG,GACTM,EAAMN,EAAG,GAETO,EAAKN,EAAO/b,EAAO,GACnBsc,EAAKN,EAAOhc,EAAO,GACnBga,EAAKiC,EAAOjc,EAAO,GAEnBvG,EAAM4iB,EAAKA,EAAKC,EAAKA,EAAKtC,EAAKA,EACvB,IAARvgB,EAEAugB,EAAK,GAELvgB,EAAM,EAAIV,KAAKC,KAAKS,GACpB4iB,GAAM5iB,EACN6iB,GAAM7iB,EACNugB,GAAMvgB,GAGV,IAAI8iB,EAAKJ,EAAMnC,EAAKoC,EAAME,EACtBE,EAAKJ,EAAMC,EAAKH,EAAMlC,EACtBF,EAAKoC,EAAMI,EAAKH,EAAME,EAE1B5iB,EAAM8iB,EAAKA,EAAKC,EAAKA,EAAK1C,EAAKA,EACnB,IAARrgB,IAEI2iB,EACAF,GAAO,KACAC,EACPC,GAAO,KAEPD,GAAO,KAEVI,EAAKJ,EAAMnC,EAAKoC,EAAME,EAAME,EAAKJ,EAAMC,EAAKH,EAAMlC,EAAMF,EAAKoC,EAAMI,EAAKH,EAAME,EAE/E5iB,EAAM8iB,EAAKA,EAAKC,EAAKA,EAAK1C,EAAKA,GAGnCrgB,EAAM,EAAIV,KAAKC,KAAKS,GACpB8iB,GAAM9iB,EACN+iB,GAAM/iB,EACNqgB,GAAMrgB,EAENP,EAAI,GAAKqjB,EACTrjB,EAAI,GAAKsjB,EACTtjB,EAAI,GAAK4gB,EACT5gB,EAAI,GAAK,EACTA,EAAI,GAAKojB,EAAKxC,EAAKE,EAAKwC,EACxBtjB,EAAI,GAAK8gB,EAAKuC,EAAKF,EAAKvC,EACxB5gB,EAAI,GAAKmjB,EAAKG,EAAKF,EAAKC,EACxBrjB,EAAI,GAAK,EACTA,EAAI,GAAKmjB,EACTnjB,EAAI,GAAKojB,EACTpjB,EAAI,IAAM8gB,EACV9gB,EAAI,IAAM,EACVA,EAAI,IAAM6iB,EACV7iB,EAAI,IAAM8iB,EACV9iB,EAAI,IAAM+iB,EACV/iB,EAAI,IAAM,CAEd,CAqJQujB,CAAS3hB,KAAM+gB,EAAK7b,EAAQ8b,GACrBhhB,IACX,CAEA,WAAA4hB,GACI,OAlyBR,SAAqB/jB,GACjB,IAAIob,EAAMpb,EAAE,GACRqb,EAAMrb,EAAE,GACRsb,EAAMtb,EAAE,GACRub,EAAMvb,EAAE,GACRwb,EAAMxb,EAAE,GACRyb,EAAMzb,EAAE,GACR0b,EAAM1b,EAAE,GACR2b,EAAM3b,EAAE,GACR4b,EAAM5b,EAAE,GACR6b,EAAM7b,EAAE,GACR8b,EAAM9b,EAAE,IACR+b,EAAM/b,EAAE,IACRgc,EAAMhc,EAAE,IACRic,EAAMjc,EAAE,IACRkc,EAAMlc,EAAE,IACRmc,EAAMnc,EAAE,IAgBZ,OAdUob,EAAMK,EAAMJ,EAAMG,IAWlBM,EAAMK,EAAMJ,EAAMG,IAVlBd,EAAMM,EAAMJ,EAAME,IASlBK,EAAMM,EAAMJ,EAAME,IARlBb,EAAMO,EAAMJ,EAAMC,IAOlBK,EAAMK,EAAMJ,EAAMG,IANlBZ,EAAMK,EAAMJ,EAAMG,IAKlBG,EAAMO,EAAMJ,EAAMC,IAJlBX,EAAMM,EAAMJ,EAAME,IAGlBG,EAAMM,EAAMJ,EAAME,IAFlBV,EAAMK,EAAMJ,EAAMG,IAClBE,EAAMK,EAAMJ,EAAMG,EAShC,CAiwBe+H,CAAY5hB,KACvB,CAEA,SAAA8C,CAAUjF,EAAGkF,EAAI,GAiBb,OAhBA/C,KAAK,GAAKnC,EAAEkF,GACZ/C,KAAK,GAAKnC,EAAEkF,EAAI,GAChB/C,KAAK,GAAKnC,EAAEkF,EAAI,GAChB/C,KAAK,GAAKnC,EAAEkF,EAAI,GAChB/C,KAAK,GAAKnC,EAAEkF,EAAI,GAChB/C,KAAK,GAAKnC,EAAEkF,EAAI,GAChB/C,KAAK,GAAKnC,EAAEkF,EAAI,GAChB/C,KAAK,GAAKnC,EAAEkF,EAAI,GAChB/C,KAAK,GAAKnC,EAAEkF,EAAI,GAChB/C,KAAK,GAAKnC,EAAEkF,EAAI,GAChB/C,KAAK,IAAMnC,EAAEkF,EAAI,IACjB/C,KAAK,IAAMnC,EAAEkF,EAAI,IACjB/C,KAAK,IAAMnC,EAAEkF,EAAI,IACjB/C,KAAK,IAAMnC,EAAEkF,EAAI,IACjB/C,KAAK,IAAMnC,EAAEkF,EAAI,IACjB/C,KAAK,IAAMnC,EAAEkF,EAAI,IACV/C,IACX,CAEA,OAAAgD,CAAQnF,EAAI,GAAIkF,EAAI,GAiBhB,OAhBAlF,EAAEkF,GAAK/C,KAAK,GACZnC,EAAEkF,EAAI,GAAK/C,KAAK,GAChBnC,EAAEkF,EAAI,GAAK/C,KAAK,GAChBnC,EAAEkF,EAAI,GAAK/C,KAAK,GAChBnC,EAAEkF,EAAI,GAAK/C,KAAK,GAChBnC,EAAEkF,EAAI,GAAK/C,KAAK,GAChBnC,EAAEkF,EAAI,GAAK/C,KAAK,GAChBnC,EAAEkF,EAAI,GAAK/C,KAAK,GAChBnC,EAAEkF,EAAI,GAAK/C,KAAK,GAChBnC,EAAEkF,EAAI,GAAK/C,KAAK,GAChBnC,EAAEkF,EAAI,IAAM/C,KAAK,IACjBnC,EAAEkF,EAAI,IAAM/C,KAAK,IACjBnC,EAAEkF,EAAI,IAAM/C,KAAK,IACjBnC,EAAEkF,EAAI,IAAM/C,KAAK,IACjBnC,EAAEkF,EAAI,IAAM/C,KAAK,IACjBnC,EAAEkF,EAAI,IAAM/C,KAAK,IACVnC,CACX,EAgEJ,MAAMgkB,EAAU,IAAI3F,EAEpB,MAAM4F,UAAcjiB,MAChB,WAAAC,CAAYhC,EAAI,EAAGC,EAAID,EAAGE,EAAIF,EAAGia,EAAQ,OAIrC,OAHAhY,MAAMjC,EAAGC,EAAGC,GACZgC,KAAK+X,MAAQA,EACb/X,KAAKqW,SAAW,OACTrW,IACX,CAEA,KAAIlC,GACA,OAAOkC,KAAK,EAChB,CAEA,KAAIjC,GACA,OAAOiC,KAAK,EAChB,CAEA,KAAIhC,GACA,OAAOgC,KAAK,EAChB,CAEA,KAAIlC,CAAEmC,GACFD,KAAK,GAAKC,EACVD,KAAKqW,UACT,CAEA,KAAItY,CAAEkC,GACFD,KAAK,GAAKC,EACVD,KAAKqW,UACT,CAEA,KAAIrY,CAAEiC,GACFD,KAAK,GAAKC,EACVD,KAAKqW,UACT,CAEA,GAAAnW,CAAIpC,EAAGC,EAAID,EAAGE,EAAIF,GACd,OAAIA,EAAEqC,OAAeH,KAAKI,KAAKtC,IAC/BkC,KAAK,GAAKlC,EACVkC,KAAK,GAAKjC,EACViC,KAAK,GAAKhC,EACVgC,KAAKqW,WACErW,KACX,CAEA,IAAAI,CAAKH,GAKD,OAJAD,KAAK,GAAKC,EAAE,GACZD,KAAK,GAAKC,EAAE,GACZD,KAAK,GAAKC,EAAE,GACZD,KAAKqW,WACErW,IACX,CAEA,OAAA+hB,CAAQhK,GAGJ,OAFA/X,KAAK+X,MAAQA,EACb/X,KAAKqW,WACErW,IACX,CAEA,kBAAAgiB,CAAmB1gB,EAAGyW,EAAQ/X,KAAK+X,OAE/B,OA1HR,SAA4B3Z,EAAKkD,EAAGyW,EAAQ,OAC1B,QAAVA,GACA3Z,EAAI,GAAKH,KAAKgkB,KAAKhkB,KAAKiI,IAAIjI,KAAKmI,IAAI9E,EAAE,IAAK,GAAI,IAC5CrD,KAAKuf,IAAIlc,EAAE,IAAM,QACjBlD,EAAI,GAAKH,KAAKikB,OAAO5gB,EAAE,GAAIA,EAAE,KAC7BlD,EAAI,GAAKH,KAAKikB,OAAO5gB,EAAE,GAAIA,EAAE,MAE7BlD,EAAI,GAAKH,KAAKikB,MAAM5gB,EAAE,GAAIA,EAAE,IAC5BlD,EAAI,GAAK,IAEI,QAAV2Z,GACP3Z,EAAI,GAAKH,KAAKgkB,MAAMhkB,KAAKiI,IAAIjI,KAAKmI,IAAI9E,EAAE,IAAK,GAAI,IAC7CrD,KAAKuf,IAAIlc,EAAE,IAAM,QACjBlD,EAAI,GAAKH,KAAKikB,MAAM5gB,EAAE,GAAIA,EAAE,KAC5BlD,EAAI,GAAKH,KAAKikB,MAAM5gB,EAAE,GAAIA,EAAE,MAE5BlD,EAAI,GAAKH,KAAKikB,OAAO5gB,EAAE,GAAIA,EAAE,IAC7BlD,EAAI,GAAK,IAEI,QAAV2Z,GACP3Z,EAAI,GAAKH,KAAKgkB,KAAKhkB,KAAKiI,IAAIjI,KAAKmI,IAAI9E,EAAE,IAAK,GAAI,IAC5CrD,KAAKuf,IAAIlc,EAAE,IAAM,QACjBlD,EAAI,GAAKH,KAAKikB,OAAO5gB,EAAE,GAAIA,EAAE,KAC7BlD,EAAI,GAAKH,KAAKikB,OAAO5gB,EAAE,GAAIA,EAAE,MAE7BlD,EAAI,GAAK,EACTA,EAAI,GAAKH,KAAKikB,MAAM5gB,EAAE,GAAIA,EAAE,MAEf,QAAVyW,GACP3Z,EAAI,GAAKH,KAAKgkB,MAAMhkB,KAAKiI,IAAIjI,KAAKmI,IAAI9E,EAAE,IAAK,GAAI,IAC7CrD,KAAKuf,IAAIlc,EAAE,IAAM,QACjBlD,EAAI,GAAKH,KAAKikB,MAAM5gB,EAAE,GAAIA,EAAE,KAC5BlD,EAAI,GAAKH,KAAKikB,MAAM5gB,EAAE,GAAIA,EAAE,MAE5BlD,EAAI,GAAK,EACTA,EAAI,GAAKH,KAAKikB,OAAO5gB,EAAE,GAAIA,EAAE,MAEhB,QAAVyW,GACP3Z,EAAI,GAAKH,KAAKgkB,KAAKhkB,KAAKiI,IAAIjI,KAAKmI,IAAI9E,EAAE,IAAK,GAAI,IAC5CrD,KAAKuf,IAAIlc,EAAE,IAAM,QACjBlD,EAAI,GAAKH,KAAKikB,OAAO5gB,EAAE,GAAIA,EAAE,IAC7BlD,EAAI,GAAKH,KAAKikB,OAAO5gB,EAAE,GAAIA,EAAE,MAE7BlD,EAAI,GAAK,EACTA,EAAI,GAAKH,KAAKikB,MAAM5gB,EAAE,GAAIA,EAAE,OAEf,QAAVyW,IACP3Z,EAAI,GAAKH,KAAKgkB,MAAMhkB,KAAKiI,IAAIjI,KAAKmI,IAAI9E,EAAE,IAAK,GAAI,IAC7CrD,KAAKuf,IAAIlc,EAAE,IAAM,QACjBlD,EAAI,GAAKH,KAAKikB,MAAM5gB,EAAE,GAAIA,EAAE,IAC5BlD,EAAI,GAAKH,KAAKikB,MAAM5gB,EAAE,GAAIA,EAAE,MAE5BlD,EAAI,GAAKH,KAAKikB,OAAO5gB,EAAE,GAAIA,EAAE,KAC7BlD,EAAI,GAAK,GAKrB,CA+DQ4jB,CAAmBhiB,KAAMsB,EAAGyW,GACrB/X,IACX,CAEA,cAAA+e,CAAehd,EAAGgW,EAAQ/X,KAAK+X,OAE3B,OADA8J,EAAQ9C,eAAehd,GAChB/B,KAAKgiB,mBAAmBH,EAAS9J,EAC5C,CAEA,OAAA/U,CAAQnF,EAAI,GAAIkF,EAAI,GAIhB,OAHAlF,EAAEkF,GAAK/C,KAAK,GACZnC,EAAEkF,EAAI,GAAK/C,KAAK,GAChBnC,EAAEkF,EAAI,GAAK/C,KAAK,GACTnC,CACX,EAGJ,MAAMskB,EACF,WAAAriB,GACIE,KAAKoiB,OAAS,KACdpiB,KAAKqiB,SAAW,GAChBriB,KAAK4U,SAAU,EAEf5U,KAAKsiB,OAAS,IAAIpG,EAClBlc,KAAKiV,YAAc,IAAIiH,EACvBlc,KAAKuiB,kBAAmB,EAExBviB,KAAKoI,SAAW,IAAIxI,EACpBI,KAAKwiB,WAAa,IAAIpM,EACtBpW,KAAKgB,MAAQ,IAAIpB,EAAK,GACtBI,KAAKyiB,SAAW,IAAIX,EACpB9hB,KAAKghB,GAAK,IAAIphB,EAAK,EAAG,EAAG,GAEzBI,KAAKyiB,SAASpM,SAAW,IAAMrW,KAAKwiB,WAAW3K,UAAU7X,KAAKyiB,UAC9DziB,KAAKwiB,WAAWnM,SAAW,IAAMrW,KAAKyiB,SAAS1D,eAAe/e,KAAKwiB,WACvE,CAEA,SAAAE,CAAUN,EAAQO,GAAe,GACzB3iB,KAAKoiB,QAAUA,IAAWpiB,KAAKoiB,QAAQpiB,KAAKoiB,OAAOQ,YAAY5iB,MAAM,GACzEA,KAAKoiB,OAASA,EACVO,GAAgBP,GAAQA,EAAOS,SAAS7iB,MAAM,EACtD,CAEA,QAAA6iB,CAASC,EAAOC,GAAc,IACpB/iB,KAAKqiB,SAASW,QAAQF,IAAQ9iB,KAAKqiB,SAASxT,KAAKiU,GACnDC,GAAaD,EAAMJ,UAAU1iB,MAAM,EAC3C,CAEA,WAAA4iB,CAAYE,EAAOC,GAAc,IACtB/iB,KAAKqiB,SAASW,QAAQF,IAAQ9iB,KAAKqiB,SAASY,OAAOjjB,KAAKqiB,SAASW,QAAQF,GAAQ,GACpFC,GAAaD,EAAMJ,UAAU,MAAM,EAC3C,CAEA,iBAAAhN,CAAkBwN,GACVljB,KAAKuiB,kBAAkBviB,KAAKmjB,gBAC5BnjB,KAAKojB,wBAA0BF,KACX,OAAhBljB,KAAKoiB,OAAiBpiB,KAAKiV,YAAY7U,KAAKJ,KAAKsiB,QAChDtiB,KAAKiV,YAAYxU,SAAST,KAAKoiB,OAAOnN,YAAajV,KAAKsiB,QAC7DtiB,KAAKojB,wBAAyB,EAC9BF,GAAQ,GAGZ,IAAK,IAAI1b,EAAI,EAAGoB,EAAI5I,KAAKqiB,SAASliB,OAAQqH,EAAIoB,EAAGpB,IAC7CxH,KAAKqiB,SAAS7a,GAAGkO,kBAAkBwN,EAE3C,CAEA,YAAAC,GACInjB,KAAKsiB,OAAO/B,QAAQvgB,KAAKwiB,WAAYxiB,KAAKoI,SAAUpI,KAAKgB,OACzDhB,KAAKojB,wBAAyB,CAClC,CAEA,QAAA1O,CAAS2O,GAEL,IAAIA,EAASrjB,MACb,IAAK,IAAIwH,EAAI,EAAGoB,EAAI5I,KAAKqiB,SAASliB,OAAQqH,EAAIoB,EAAGpB,IAC7CxH,KAAKqiB,SAAS7a,GAAGkN,SAAS2O,EAElC,CAEA,SAAAC,GACItjB,KAAKsiB,OAAOpN,eAAelV,KAAKoI,UAChCpI,KAAKsiB,OAAOrH,YAAYjb,KAAKwiB,YAC7BxiB,KAAKsiB,OAAOjI,WAAWra,KAAKgB,OAC5BhB,KAAKyiB,SAAS1D,eAAe/e,KAAKwiB,WACtC,CAEA,MAAA1B,CAAO5b,EAAQqe,GAAS,GAChBA,EAAQvjB,KAAKsiB,OAAOxB,OAAO9gB,KAAKoI,SAAUlD,EAAQlF,KAAKghB,IACtDhhB,KAAKsiB,OAAOxB,OAAO5b,EAAQlF,KAAKoI,SAAUpI,KAAKghB,IACpDhhB,KAAKsiB,OAAOrH,YAAYjb,KAAKwiB,YAC7BxiB,KAAKyiB,SAAS1D,eAAe/e,KAAKwiB,WACtC,EAGJ,MAAMgB,EAAW,IAAItH,EACfuH,EAAY,IAAI7jB,EAChB8jB,EAAY,IAAI9jB,EAEtB,MAAM+jB,UAAexB,EACjB,WAAAriB,CAAYyD,GAAI,KAAEya,EAAO,GAAG,IAAEC,EAAM,IAAG,IAAEH,EAAM,GAAE,OAAEC,EAAS,EAAC,KAAES,EAAI,MAAEC,EAAK,OAAEC,EAAM,IAAEC,EAAG,KAAEiF,EAAO,GAAM,CAAC,GACnG7jB,QAEArC,OAAOqV,OAAO/S,KAAM,CAAEge,OAAMC,MAAKH,MAAKC,SAAQS,OAAMC,QAAOC,SAAQC,MAAKiF,SAExE5jB,KAAK6jB,iBAAmB,IAAI3H,EAC5Blc,KAAK8jB,WAAa,IAAI5H,EACtBlc,KAAKmV,qBAAuB,IAAI+G,EAChClc,KAAK+jB,cAAgB,IAAInkB,EAGzBI,KAAK2E,KAAO6Z,GAAQC,EAAQ,eAAiB,cAE3B,iBAAdze,KAAK2E,KAAyB3E,KAAKgkB,eAClChkB,KAAKse,aACd,CAEA,WAAAA,EAAY,KAAEN,EAAOhe,KAAKge,KAAI,IAAEC,EAAMje,KAAKie,IAAG,IAAEH,EAAM9d,KAAK8d,IAAG,OAAEC,EAAS/d,KAAK+d,QAAW,CAAC,GAItF,OAHArgB,OAAOqV,OAAO/S,KAAM,CAAEge,OAAMC,MAAKH,MAAKC,WACtC/d,KAAK6jB,iBAAiBhG,gBAAgB,CAAEC,IAAKA,GAAO7f,KAAKyB,GAAK,KAAMqe,SAAQC,OAAMC,QAClFje,KAAK2E,KAAO,cACL3E,IACX,CAEA,YAAAgkB,EAAa,KACThG,EAAOhe,KAAKge,KAAI,IAChBC,EAAMje,KAAKie,IAAG,KACdO,EAAOxe,KAAKwe,KAAI,MAChBC,EAAQze,KAAKye,MAAK,OAClBC,EAAS1e,KAAK0e,OAAM,IACpBC,EAAM3e,KAAK2e,IAAG,KACdiF,EAAO5jB,KAAK4jB,MACZ,CAAC,GAQD,OAPAlmB,OAAOqV,OAAO/S,KAAM,CAAEge,OAAMC,MAAKO,OAAMC,QAAOC,SAAQC,MAAKiF,SAC3DpF,GAAQoF,EACRnF,GAASmF,EACTlF,GAAUkF,EACVjF,GAAOiF,EACP5jB,KAAK6jB,iBAAiBtF,eAAe,CAAEC,OAAMC,QAAOC,SAAQC,MAAKX,OAAMC,QACvEje,KAAK2E,KAAO,eACL3E,IACX,CAEA,iBAAA0V,GAOI,OANA3V,MAAM2V,oBACN1V,KAAK8jB,WAAWnjB,QAAQX,KAAKiV,aAC7BjV,KAAKiV,YAAYC,eAAelV,KAAK+jB,eAGrC/jB,KAAKmV,qBAAqB1U,SAAST,KAAK6jB,iBAAkB7jB,KAAK8jB,YACxD9jB,IACX,CAEA,MAAA8gB,CAAO5b,GAEH,OADAnF,MAAM+gB,OAAO5b,GAAQ,GACdlF,IACX,CAGA,OAAAikB,CAAQhkB,GAGJ,OAFAA,EAAEuB,aAAaxB,KAAK8jB,YACpB7jB,EAAEuB,aAAaxB,KAAK6jB,kBACb7jB,IACX,CAGA,SAAAkkB,CAAUjkB,GAGN,OAFAA,EAAEuB,aAAagiB,EAAS7iB,QAAQX,KAAK6jB,mBACrC5jB,EAAEuB,aAAaxB,KAAKiV,aACbjV,IACX,CAEA,aAAAyU,GACSzU,KAAKmkB,UACNnkB,KAAKmkB,QAAU,CAAC,IAAIvkB,EAAQ,IAAIA,EAAQ,IAAIA,EAAQ,IAAIA,EAAQ,IAAIA,EAAQ,IAAIA,IAGpF,MAAM0B,EAAItB,KAAKmV,qBACfnV,KAAKmkB,QAAQ,GAAGjkB,IAAIoB,EAAE,GAAKA,EAAE,GAAIA,EAAE,GAAKA,EAAE,GAAIA,EAAE,IAAMA,EAAE,IAAI8iB,SAAW9iB,EAAE,IAAMA,EAAE,IACjFtB,KAAKmkB,QAAQ,GAAGjkB,IAAIoB,EAAE,GAAKA,EAAE,GAAIA,EAAE,GAAKA,EAAE,GAAIA,EAAE,IAAMA,EAAE,IAAI8iB,SAAW9iB,EAAE,IAAMA,EAAE,IACjFtB,KAAKmkB,QAAQ,GAAGjkB,IAAIoB,EAAE,GAAKA,EAAE,GAAIA,EAAE,GAAKA,EAAE,GAAIA,EAAE,IAAMA,EAAE,IAAI8iB,SAAW9iB,EAAE,IAAMA,EAAE,IACjFtB,KAAKmkB,QAAQ,GAAGjkB,IAAIoB,EAAE,GAAKA,EAAE,GAAIA,EAAE,GAAKA,EAAE,GAAIA,EAAE,IAAMA,EAAE,IAAI8iB,SAAW9iB,EAAE,IAAMA,EAAE,IACjFtB,KAAKmkB,QAAQ,GAAGjkB,IAAIoB,EAAE,GAAKA,EAAE,GAAIA,EAAE,GAAKA,EAAE,GAAIA,EAAE,IAAMA,EAAE,KAAK8iB,SAAW9iB,EAAE,IAAMA,EAAE,IAClFtB,KAAKmkB,QAAQ,GAAGjkB,IAAIoB,EAAE,GAAKA,EAAE,GAAIA,EAAE,GAAKA,EAAE,GAAIA,EAAE,IAAMA,EAAE,KAAK8iB,SAAW9iB,EAAE,IAAMA,EAAE,IAElF,IAAK,IAAIkG,EAAI,EAAGA,EAAI,EAAGA,IAAK,CACxB,MAAM6c,EAAS,EAAMrkB,KAAKmkB,QAAQ3c,GAAG5G,WACrCZ,KAAKmkB,QAAQ3c,GAAG/G,SAAS4jB,GACzBrkB,KAAKmkB,QAAQ3c,GAAG4c,UAAYC,CAChC,CACJ,CAEA,qBAAAvP,CAAsBH,GAElB,IAAKA,EAAK2P,SAAS9gB,WAAW4E,SAAU,OAAO,EAI/C,GAFKuM,EAAK2P,SAAS9b,QAAUmM,EAAK2P,SAAS9b,OAAOE,SAAWC,KAAUgM,EAAK2P,SAASzb,yBAEhF8L,EAAK2P,SAAS9b,OAAQ,OAAO,EAElC,MAAMC,EAASgb,EACfhb,EAAOrI,KAAKuU,EAAK2P,SAAS9b,OAAOC,QACjCA,EAAOjH,aAAamT,EAAKM,aAEzB,MAAMvM,EAASiM,EAAK2P,SAAS9b,OAAOE,OAASiM,EAAKM,YAAY4L,oBAE9D,OAAO7gB,KAAKukB,wBAAwB9b,EAAQC,EAChD,CAEA,uBAAA6b,CAAwB9b,EAAQC,GAC5B,MAAM8b,EAASd,EAEf,IAAK,IAAIlc,EAAI,EAAGA,EAAI,EAAGA,IAAK,CACxB,MAAMid,EAAQzkB,KAAKmkB,QAAQ3c,GAE3B,GADiBgd,EAAOpkB,KAAKqkB,GAAOvjB,IAAIuH,GAAUgc,EAAML,UACxC1b,EAAQ,OAAO,CACnC,CACA,OAAO,CACX,EA6KJ,SAASjI,EAASrC,EAAKP,EAAGS,GACtB,IAAI2a,EAAMpb,EAAE,GACRqb,EAAMrb,EAAE,GACRsb,EAAMtb,EAAE,GACRwb,EAAMxb,EAAE,GACRyb,EAAMzb,EAAE,GACR0b,EAAM1b,EAAE,GACR4b,EAAM5b,EAAE,GACR6b,EAAM7b,EAAE,GACR8b,EAAM9b,EAAE,GAERkf,EAAMze,EAAE,GACR0e,EAAM1e,EAAE,GACR2e,EAAM3e,EAAE,GACR4e,EAAM5e,EAAE,GACR6e,EAAM7e,EAAE,GACR8e,EAAM9e,EAAE,GACR+e,EAAM/e,EAAE,GACRgf,EAAMhf,EAAE,GACRif,EAAMjf,EAAE,GAaZ,OAXAF,EAAI,GAAK2e,EAAM9D,EAAM+D,EAAM3D,EAAM4D,EAAMxD,EACvCrb,EAAI,GAAK2e,EAAM7D,EAAM8D,EAAM1D,EAAM2D,EAAMvD,EACvCtb,EAAI,GAAK2e,EAAM5D,EAAM6D,EAAMzD,EAAM0D,EAAMtD,EAEvCvb,EAAI,GAAK8e,EAAMjE,EAAMkE,EAAM9D,EAAM+D,EAAM3D,EACvCrb,EAAI,GAAK8e,EAAMhE,EAAMiE,EAAM7D,EAAM8D,EAAM1D,EACvCtb,EAAI,GAAK8e,EAAM/D,EAAMgE,EAAM5D,EAAM6D,EAAMzD,EAEvCvb,EAAI,GAAKif,EAAMpE,EAAMqE,EAAMjE,EAAMkE,EAAM9D,EACvCrb,EAAI,GAAKif,EAAMnE,EAAMoE,EAAMhE,EAAMiE,EAAM7D,EACvCtb,EAAI,GAAKif,EAAMlE,EAAMmE,EAAM/D,EAAMgE,EAAM5D,EAChCvb,CACX,CAgKA,MAAMsmB,UAAa7kB,MACf,WAAAC,CAAYqc,EAAM,EAAGC,EAAM,EAAGC,EAAM,EAAGE,EAAM,EAAGhC,EAAM,EAAGC,EAAM,EAAGgC,EAAM,EAAG9B,EAAM,EAAGC,EAAM,GAEtF,OADA5a,MAAMoc,EAAKC,EAAKC,EAAKE,EAAKhC,EAAKC,EAAKgC,EAAK9B,EAAKC,GACvC3a,IACX,CAEA,GAAAE,CAAIic,EAAKC,EAAKC,EAAKE,EAAKhC,EAAKC,EAAKgC,EAAK9B,EAAKC,GACxC,OAAIwB,EAAIhc,OAAeH,KAAKI,KAAK+b,IA1RzC,SAAa/d,EAAK+d,EAAKC,EAAKC,EAAKE,EAAKhC,EAAKC,EAAKgC,EAAK9B,EAAKC,GACtDvc,EAAI,GAAK+d,EACT/d,EAAI,GAAKge,EACThe,EAAI,GAAKie,EACTje,EAAI,GAAKme,EACTne,EAAI,GAAKmc,EACTnc,EAAI,GAAKoc,EACTpc,EAAI,GAAKoe,EACTpe,EAAI,GAAKsc,EACTtc,EAAI,GAAKuc,CAEb,CAgRQza,CAAIF,KAAMmc,EAAKC,EAAKC,EAAKE,EAAKhC,EAAKC,EAAKgC,EAAK9B,EAAKC,GAC3C3a,KACX,CAEA,SAAA2c,CAAU1c,EAAGqB,EAAItB,MAEb,OApKR,SAAmB5B,EAAKP,EAAGoC,GACvB,IAAIgZ,EAAMpb,EAAE,GACRqb,EAAMrb,EAAE,GACRsb,EAAMtb,EAAE,GACRwb,EAAMxb,EAAE,GACRyb,EAAMzb,EAAE,GACR0b,EAAM1b,EAAE,GACR4b,EAAM5b,EAAE,GACR6b,EAAM7b,EAAE,GACR8b,EAAM9b,EAAE,GACRC,EAAImC,EAAE,GACNlC,EAAIkC,EAAE,GAEV7B,EAAI,GAAK6a,EACT7a,EAAI,GAAK8a,EACT9a,EAAI,GAAK+a,EAET/a,EAAI,GAAKib,EACTjb,EAAI,GAAKkb,EACTlb,EAAI,GAAKmb,EAETnb,EAAI,GAAKN,EAAImb,EAAMlb,EAAIsb,EAAMI,EAC7Brb,EAAI,GAAKN,EAAIob,EAAMnb,EAAIub,EAAMI,EAC7Btb,EAAI,GAAKN,EAAIqb,EAAMpb,EAAIwb,EAAMI,CAEjC,CA0IQgD,CAAU3c,KAAMsB,EAAGrB,GACZD,IACX,CAEA,MAAA6c,CAAO5c,EAAGqB,EAAItB,MAEV,OAtIR,SAAgB5B,EAAKP,EAAG2Y,GACpB,IAAIyC,EAAMpb,EAAE,GACRqb,EAAMrb,EAAE,GACRsb,EAAMtb,EAAE,GACRwb,EAAMxb,EAAE,GACRyb,EAAMzb,EAAE,GACR0b,EAAM1b,EAAE,GACR4b,EAAM5b,EAAE,GACR6b,EAAM7b,EAAE,GACR8b,EAAM9b,EAAE,GACR2a,EAAIva,KAAKwY,IAAID,GACbsG,EAAI7e,KAAKyY,IAAIF,GAEjBpY,EAAI,GAAK0e,EAAI7D,EAAMT,EAAIa,EACvBjb,EAAI,GAAK0e,EAAI5D,EAAMV,EAAIc,EACvBlb,EAAI,GAAK0e,EAAI3D,EAAMX,EAAIe,EAEvBnb,EAAI,GAAK0e,EAAIzD,EAAMb,EAAIS,EACvB7a,EAAI,GAAK0e,EAAIxD,EAAMd,EAAIU,EACvB9a,EAAI,GAAK0e,EAAIvD,EAAMf,EAAIW,EAEvB/a,EAAI,GAAKqb,EACTrb,EAAI,GAAKsb,EACTtb,EAAI,GAAKub,CAEb,CA4GQkD,CAAO7c,KAAMsB,EAAGrB,GACTD,IACX,CAEA,KAAAgB,CAAMf,EAAGqB,EAAItB,MAET,OAxGR,SAAe5B,EAAKP,EAAGoC,GACnB,IAAInC,EAAImC,EAAE,GACNlC,EAAIkC,EAAE,GAEV7B,EAAI,GAAKN,EAAID,EAAE,GACfO,EAAI,GAAKN,EAAID,EAAE,GACfO,EAAI,GAAKN,EAAID,EAAE,GAEfO,EAAI,GAAKL,EAAIF,EAAE,GACfO,EAAI,GAAKL,EAAIF,EAAE,GACfO,EAAI,GAAKL,EAAIF,EAAE,GAEfO,EAAI,GAAKP,EAAE,GACXO,EAAI,GAAKP,EAAE,GACXO,EAAI,GAAKP,EAAE,EAEf,CAuFQmD,CAAMhB,KAAMsB,EAAGrB,GACRD,IACX,CAEA,QAAAS,CAASkd,EAAIC,GAMT,OALIA,EACAnd,EAAST,KAAM2d,EAAIC,GAEnBnd,EAAST,KAAMA,KAAM2d,GAElB3d,IACX,CAEA,QAAAsW,GApSJ,IAAkBlY,EAsSV,OAtSUA,EAqSD4B,MApST,GAAK,EACT5B,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EA6RE4B,IACX,CAEA,IAAAI,CAAKkB,GA/UT,IAAclD,EAAKP,EAiVX,OAjVWA,EAgVAyD,GAhVLlD,EAgVD4B,MA/UL,GAAKnC,EAAE,GACXO,EAAI,GAAKP,EAAE,GACXO,EAAI,GAAKP,EAAE,GACXO,EAAI,GAAKP,EAAE,GACXO,EAAI,GAAKP,EAAE,GACXO,EAAI,GAAKP,EAAE,GACXO,EAAI,GAAKP,EAAE,GACXO,EAAI,GAAKP,EAAE,GACXO,EAAI,GAAKP,EAAE,GAwUAmC,IACX,CAEA,WAAA2kB,CAAYrjB,GAlZhB,IAAkBlD,EAAKP,EAoZf,OApZeA,EAmZAyD,GAnZLlD,EAmZD4B,MAlZT,GAAKnC,EAAE,GACXO,EAAI,GAAKP,EAAE,GACXO,EAAI,GAAKP,EAAE,GACXO,EAAI,GAAKP,EAAE,GACXO,EAAI,GAAKP,EAAE,GACXO,EAAI,GAAKP,EAAE,GACXO,EAAI,GAAKP,EAAE,GACXO,EAAI,GAAKP,EAAE,GACXO,EAAI,GAAKP,EAAE,IA2YAmC,IACX,CAEA,cAAA+e,CAAehd,GAEX,OApYR,SAAkB3D,EAAK2D,GACnB,IAAIjE,EAAIiE,EAAE,GACNhE,EAAIgE,EAAE,GACN/D,EAAI+D,EAAE,GACNL,EAAIK,EAAE,GACNid,EAAKlhB,EAAIA,EACTmhB,EAAKlhB,EAAIA,EACTmhB,EAAKlhB,EAAIA,EAETmhB,EAAKrhB,EAAIkhB,EACTI,EAAKrhB,EAAIihB,EACTK,EAAKthB,EAAIkhB,EACTK,EAAKthB,EAAIghB,EACTO,EAAKvhB,EAAIihB,EACTO,EAAKxhB,EAAIkhB,EACTO,EAAK/d,EAAIsd,EACTU,EAAKhe,EAAIud,EACTU,EAAKje,EAAIwd,EAEb9gB,EAAI,GAAK,EAAIihB,EAAKG,EAClBphB,EAAI,GAAKghB,EAAKO,EACdvhB,EAAI,GAAKkhB,EAAKI,EAEdthB,EAAI,GAAKghB,EAAKO,EACdvhB,EAAI,GAAK,EAAI+gB,EAAKK,EAClBphB,EAAI,GAAKmhB,EAAKE,EAEdrhB,EAAI,GAAKkhB,EAAKI,EACdthB,EAAI,GAAKmhB,EAAKE,EACdrhB,EAAI,GAAK,EAAI+gB,EAAKE,CAGtB,CAmWQuF,CAAS5kB,KAAM+B,GACR/B,IACX,CAEA,SAAA6kB,CAAUC,EAAOC,EAAOC,GAEpB,OADAhlB,KAAKE,IAAI4kB,EAAM,GAAIA,EAAM,GAAIA,EAAM,GAAIC,EAAM,GAAIA,EAAM,GAAIA,EAAM,GAAIC,EAAM,GAAIA,EAAM,GAAIA,EAAM,IACxFhlB,IACX,CAEA,OAAAW,CAAQW,EAAItB,MAER,OA3SR,SAAgB5B,EAAKP,GACjB,IAAIob,EAAMpb,EAAE,GACRqb,EAAMrb,EAAE,GACRsb,EAAMtb,EAAE,GACRwb,EAAMxb,EAAE,GACRyb,EAAMzb,EAAE,GACR0b,EAAM1b,EAAE,GACR4b,EAAM5b,EAAE,GACR6b,EAAM7b,EAAE,GACR8b,EAAM9b,EAAE,GAERmf,EAAMrD,EAAML,EAAMC,EAAMG,EACxByD,GAAOxD,EAAMN,EAAME,EAAME,EACzB6D,EAAM5D,EAAML,EAAMC,EAAMG,EAGxB4G,EAAMpH,EAAM+D,EAAM9D,EAAMiE,EAAMhE,EAAMmE,EAEnC+C,IAGLA,EAAM,EAAMA,EAEZjiB,EAAI,GAAK4e,EAAMqD,EACfjiB,EAAI,KAAOub,EAAMT,EAAMC,EAAMO,GAAO2G,EACpCjiB,EAAI,IAAMmb,EAAML,EAAMC,EAAMG,GAAO+G,EACnCjiB,EAAI,GAAK+e,EAAMkD,EACfjiB,EAAI,IAAMub,EAAMV,EAAME,EAAMM,GAAO4G,EACnCjiB,EAAI,KAAOmb,EAAMN,EAAME,EAAME,GAAOgH,EACpCjiB,EAAI,GAAKkf,EAAM+C,EACfjiB,EAAI,KAAOsb,EAAMT,EAAMC,EAAMO,GAAO4G,EACpCjiB,EAAI,IAAMkb,EAAML,EAAMC,EAAMG,GAAOgH,EAEvC,CAyQQkD,CAAOvjB,KAAMsB,GACNtB,IACX,CAEA,eAAAilB,CAAgB3jB,GAEZ,OA1HR,SAAwBlD,EAAKP,GACzB,IAAIob,EAAMpb,EAAE,GACRqb,EAAMrb,EAAE,GACRsb,EAAMtb,EAAE,GACRub,EAAMvb,EAAE,GACRwb,EAAMxb,EAAE,GACRyb,EAAMzb,EAAE,GACR0b,EAAM1b,EAAE,GACR2b,EAAM3b,EAAE,GACR4b,EAAM5b,EAAE,GACR6b,EAAM7b,EAAE,GACR8b,EAAM9b,EAAE,IACR+b,EAAM/b,EAAE,IACRgc,EAAMhc,EAAE,IACRic,EAAMjc,EAAE,IACRkc,EAAMlc,EAAE,IACRmc,EAAMnc,EAAE,IAERkf,EAAM9D,EAAMK,EAAMJ,EAAMG,EACxB2D,EAAM/D,EAAMM,EAAMJ,EAAME,EACxB4D,EAAMhE,EAAMO,EAAMJ,EAAMC,EACxByG,EAAM5G,EAAMK,EAAMJ,EAAMG,EACxByG,EAAM7G,EAAMM,EAAMJ,EAAME,EACxB0G,EAAM7G,EAAMK,EAAMJ,EAAMG,EACxB0G,EAAMxG,EAAMK,EAAMJ,EAAMG,EACxBqG,EAAMzG,EAAMM,EAAMJ,EAAME,EACxBsG,EAAM1G,EAAMO,EAAMJ,EAAMC,EACxBuG,EAAM1G,EAAMK,EAAMJ,EAAMG,EACxBoD,EAAMxD,EAAMM,EAAMJ,EAAME,EACxBqD,EAAMxD,EAAMK,EAAMJ,EAAMG,EAGxBsG,EAAMtD,EAAMI,EAAMH,EAAME,EAAMD,EAAMmD,EAAMN,EAAMK,EAAMJ,EAAMG,EAAMF,EAAMC,EAEvEI,IAGLA,EAAM,EAAMA,EAEZjiB,EAAI,IAAMkb,EAAM6D,EAAM5D,EAAM2D,EAAM1D,EAAM4G,GAAOC,EAC/CjiB,EAAI,IAAMmb,EAAM4G,EAAM9G,EAAM8D,EAAM3D,EAAM0G,GAAOG,EAC/CjiB,EAAI,IAAMib,EAAM6D,EAAM5D,EAAM6G,EAAM3G,EAAMyG,GAAOI,EAE/CjiB,EAAI,IAAM+a,EAAM+D,EAAMhE,EAAMiE,EAAM/D,EAAMgH,GAAOC,EAC/CjiB,EAAI,IAAM6a,EAAMkE,EAAMhE,EAAMgH,EAAM/G,EAAM8G,GAAOG,EAC/CjiB,EAAI,IAAM8a,EAAMiH,EAAMlH,EAAMiE,EAAM9D,EAAM6G,GAAOI,EAE/CjiB,EAAI,IAAM0b,EAAMkG,EAAMjG,EAAMgG,EAAM/F,EAAM8F,GAAOO,EAC/CjiB,EAAI,IAAM2b,EAAMkD,EAAMpD,EAAMmG,EAAMhG,EAAMgD,GAAOqD,EAC/CjiB,EAAI,IAAMyb,EAAMkG,EAAMjG,EAAMmD,EAAMjD,EAAM+C,GAAOsD,EAGnD,CAqEQ6E,CAAellB,KAAMsB,GACdtB,IACX,EAGJ,IAAImlB,EAAO,EAEX,MAAMC,UAAajD,EACf,WAAAriB,CAAYyD,GAAI,SAAE+gB,EAAQ,QAAEvd,EAAO,KAAEc,EAAOtE,EAAGuE,UAAS,cAAE+M,GAAgB,EAAI,YAAEd,EAAc,GAAM,CAAC,GACjGhU,QACKwD,EAAGE,QAAQC,QAAQC,MAAM,2CAC9B3D,KAAKuD,GAAKA,EACVvD,KAAK4D,GAAKuhB,IACVnlB,KAAKskB,SAAWA,EAChBtkB,KAAK+G,QAAUA,EACf/G,KAAK6H,KAAOA,EAGZ7H,KAAK6U,cAAgBA,EAGrB7U,KAAK+T,YAAcA,EACnB/T,KAAKqlB,gBAAkB,IAAInJ,EAC3Blc,KAAKslB,aAAe,IAAIZ,EACxB1kB,KAAKulB,sBAAwB,GAC7BvlB,KAAKwlB,qBAAuB,EAChC,CAEA,cAAAC,CAAetH,GAEX,OADAne,KAAKulB,sBAAsB1W,KAAKsP,GACzBne,IACX,CAEA,aAAA0lB,CAAcvH,GAEV,OADAne,KAAKwlB,qBAAqB3W,KAAKsP,GACxBne,IACX,CAEA,IAAA4H,EAAK,OAAEyM,GAAW,CAAC,GACfrU,KAAKulB,sBAAsBne,SAAS+W,GAAMA,GAAKA,EAAE,CAAEwH,KAAM3lB,KAAMqU,aAC3DA,IAEKrU,KAAK+G,QAAQwC,SAASqc,aACvBloB,OAAOqV,OAAO/S,KAAK+G,QAAQwC,SAAU,CACjCqc,YAAa,CAAEhoB,MAAO,MACtBkmB,WAAY,CAAElmB,MAAO,MACrBynB,gBAAiB,CAAEznB,MAAO,MAC1B0nB,aAAc,CAAE1nB,MAAO,MACvBimB,iBAAkB,CAAEjmB,MAAO,MAC3BioB,eAAgB,CAAEjoB,MAAO,QAKjCoC,KAAK+G,QAAQwC,SAASsa,iBAAiBjmB,MAAQyW,EAAOwP,iBACtD7jB,KAAK+G,QAAQwC,SAASsc,eAAejoB,MAAQyW,EAAO0P,cACpD/jB,KAAK+G,QAAQwC,SAASua,WAAWlmB,MAAQyW,EAAOyP,WAChD9jB,KAAKqlB,gBAAgB5kB,SAAS4T,EAAOyP,WAAY9jB,KAAKiV,aACtDjV,KAAKslB,aAAaL,gBAAgBjlB,KAAKqlB,iBACvCrlB,KAAK+G,QAAQwC,SAASqc,YAAYhoB,MAAQoC,KAAKiV,YAC/CjV,KAAK+G,QAAQwC,SAAS8b,gBAAgBznB,MAAQoC,KAAKqlB,gBACnDrlB,KAAK+G,QAAQwC,SAAS+b,aAAa1nB,MAAQoC,KAAKslB,cAIpD,IAAInX,EAAYnO,KAAK+G,QAAQ0C,UAAYzJ,KAAKiV,YAAY2M,cAAgB,EAC1E5hB,KAAK+G,QAAQmH,IAAI,CAAEC,cACnBnO,KAAKskB,SAAS1c,KAAK,CAAEC,KAAM7H,KAAK6H,KAAMd,QAAS/G,KAAK+G,UACpD/G,KAAKwlB,qBAAqBpe,SAAS+W,GAAMA,GAAKA,EAAE,CAAEwH,KAAM3lB,KAAMqU,YAClE,EAQJ,MAAMyR,EAAa,IAAIC,WAAW,GAElC,SAASC,GAAWpoB,GAChB,QAAQA,EAASA,EAAQ,EAC7B,CAEA,IAAIqoB,GAAK,EAET,MAAMC,GACF,WAAApmB,CACIyD,GACA,MACI4iB,EAAK,OACLjhB,EAAS3B,EAAG6iB,WAAU,KACtBzhB,EAAOpB,EAAG8iB,cAAa,OACvBC,EAAS/iB,EAAGgjB,KAAI,eAChBC,EAAiBF,EAAM,MACvBG,EAAQljB,EAAGmjB,cAAa,MACxBC,EAAQpjB,EAAGmjB,cAAa,gBACxBE,GAAkB,EAAI,UACtBC,GAAYD,EAAkBrjB,EAAGujB,sBAAwBvjB,EAAGwjB,QAAM,UAClEC,EAAYzjB,EAAGwjB,OAAM,iBACrB/U,GAAmB,EAAK,gBACxBE,EAAkB,EAAC,MACnBD,EAAQ/M,GAAU3B,EAAG6iB,WAAyB,WAC9Ca,EAAa,EAAC,MACdC,EAAQ,EAAC,MACTpW,EAAK,OACLC,EAASD,GACT,CAAC,GAEL9Q,KAAKuD,GAAKA,EACVvD,KAAK4D,GAAKqiB,KAEVjmB,KAAKmmB,MAAQA,EACbnmB,KAAKkF,OAASA,EACdlF,KAAK2E,KAAOA,EACZ3E,KAAKsmB,OAASA,EACdtmB,KAAKwmB,eAAiBA,EACtBxmB,KAAK6mB,UAAYA,EACjB7mB,KAAKgnB,UAAYA,EACjBhnB,KAAKymB,MAAQA,EACbzmB,KAAK2mB,MAAQA,EACb3mB,KAAK4mB,gBAAkBA,EACvB5mB,KAAKgS,iBAAmBA,EACxBhS,KAAKkS,gBAAkBA,EACvBlS,KAAKiS,MAAQA,EACbjS,KAAKinB,WAAahpB,KAAKiI,IAAI+gB,EAAYjnB,KAAKuD,GAAGW,SAASuO,WAAWI,eACnE7S,KAAKknB,MAAQA,EACblnB,KAAK8Q,MAAQA,EACb9Q,KAAK+Q,OAASA,EACd/Q,KAAKyO,QAAUzO,KAAKuD,GAAG4jB,gBAEvBnnB,KAAKonB,MAAQ,CACTjB,MAAO,MAIXnmB,KAAKqE,QAAUrE,KAAKuD,GAAGW,SAASI,MAGhCtE,KAAKsE,MAAQ,CAAC,EACdtE,KAAKsE,MAAMuiB,UAAY7mB,KAAKuD,GAAGujB,sBAC/B9mB,KAAKsE,MAAM0iB,UAAYhnB,KAAKuD,GAAGwjB,OAC/B/mB,KAAKsE,MAAMmiB,MAAQzmB,KAAKuD,GAAG8jB,OAC3BrnB,KAAKsE,MAAMqiB,MAAQ3mB,KAAKuD,GAAG8jB,OAC3BrnB,KAAKsE,MAAM2iB,WAAa,CAC5B,CAEA,IAAApT,GAEQ7T,KAAKqE,QAAQuK,aAAa5O,KAAKqE,QAAQgO,qBAAuBrS,KAAK4D,KACvE5D,KAAKuD,GAAG+jB,YAAYtnB,KAAKkF,OAAQlF,KAAKyO,SACtCzO,KAAKqE,QAAQuK,aAAa5O,KAAKqE,QAAQgO,mBAAqBrS,KAAK4D,GACrE,CAEA,MAAA8K,CAAON,EAAc,GACjB,MAAMzI,IAAgB3F,KAAKmmB,QAAUnmB,KAAKonB,MAAMjB,QAAUnmB,KAAK2F,aAS/D,IANIA,GAAe3F,KAAKqE,QAAQuK,aAAaR,KAAiBpO,KAAK4D,MAE/D5D,KAAKuD,GAAGW,SAASoP,cAAclF,GAC/BpO,KAAK6T,QAGJlO,EAAL,CA+CA,GA9CA3F,KAAK2F,aAAc,EAEf3F,KAAKiS,QAAUjS,KAAKqE,QAAQ4N,QAC5BjS,KAAKuD,GAAGgkB,YAAYvnB,KAAKuD,GAAGikB,oBAAqBxnB,KAAKiS,OACtDjS,KAAKqE,QAAQ4N,MAAQjS,KAAKiS,OAG1BjS,KAAKgS,mBAAqBhS,KAAKqE,QAAQ2N,mBACvChS,KAAKuD,GAAGgkB,YAAYvnB,KAAKuD,GAAGkkB,+BAAgCznB,KAAKgS,kBACjEhS,KAAKqE,QAAQ2N,iBAAmBhS,KAAKgS,kBAGrChS,KAAKkS,kBAAoBlS,KAAKqE,QAAQ6N,kBACtClS,KAAKuD,GAAGgkB,YAAYvnB,KAAKuD,GAAGmkB,iBAAkB1nB,KAAKkS,iBACnDlS,KAAKqE,QAAQ6N,gBAAkBlS,KAAKkS,iBAGpClS,KAAK6mB,YAAc7mB,KAAKsE,MAAMuiB,YAC9B7mB,KAAKuD,GAAGokB,cAAc3nB,KAAKkF,OAAQlF,KAAKuD,GAAGqkB,mBAAoB5nB,KAAK6mB,WACpE7mB,KAAKsE,MAAMuiB,UAAY7mB,KAAK6mB,WAG5B7mB,KAAKgnB,YAAchnB,KAAKsE,MAAM0iB,YAC9BhnB,KAAKuD,GAAGokB,cAAc3nB,KAAKkF,OAAQlF,KAAKuD,GAAGskB,mBAAoB7nB,KAAKgnB,WACpEhnB,KAAKsE,MAAM0iB,UAAYhnB,KAAKgnB,WAG5BhnB,KAAKymB,QAAUzmB,KAAKsE,MAAMmiB,QAC1BzmB,KAAKuD,GAAGokB,cAAc3nB,KAAKkF,OAAQlF,KAAKuD,GAAGukB,eAAgB9nB,KAAKymB,OAChEzmB,KAAKsE,MAAMmiB,MAAQzmB,KAAKymB,OAGxBzmB,KAAK2mB,QAAU3mB,KAAKsE,MAAMqiB,QAC1B3mB,KAAKuD,GAAGokB,cAAc3nB,KAAKkF,OAAQlF,KAAKuD,GAAGwkB,eAAgB/nB,KAAK2mB,OAChE3mB,KAAKsE,MAAMqiB,MAAQ3mB,KAAK2mB,OAGxB3mB,KAAKinB,YAAcjnB,KAAKinB,aAAejnB,KAAKsE,MAAM2iB,aAClDjnB,KAAKuD,GAAGykB,cACJhoB,KAAKkF,OACLlF,KAAKuD,GAAGW,SAASqO,aAAa,kCAAkC0V,2BAChEjoB,KAAKinB,YAETjnB,KAAKsE,MAAM2iB,WAAajnB,KAAKinB,YAG7BjnB,KAAKmmB,MAAO,CAMZ,GALInmB,KAAKmmB,MAAMrV,QACX9Q,KAAK8Q,MAAQ9Q,KAAKmmB,MAAMrV,MACxB9Q,KAAK+Q,OAAS/Q,KAAKmmB,MAAMpV,QAGzB/Q,KAAKkF,SAAWlF,KAAKuD,GAAG2kB,iBAExB,IAAK,IAAI1gB,EAAI,EAAGA,EAAI,EAAGA,IACnBxH,KAAKuD,GAAG4kB,WACJnoB,KAAKuD,GAAG6kB,4BAA8B5gB,EACtCxH,KAAKknB,MACLlnB,KAAKwmB,eACLxmB,KAAKsmB,OACLtmB,KAAK2E,KACL3E,KAAKmmB,MAAM3e,SAGhB,GAAI6gB,YAAYC,OAAOtoB,KAAKmmB,OAE/BnmB,KAAKuD,GAAG4kB,WAAWnoB,KAAKkF,OAAQlF,KAAKknB,MAAOlnB,KAAKwmB,eAAgBxmB,KAAK8Q,MAAO9Q,KAAK+Q,OAAQ,EAAG/Q,KAAKsmB,OAAQtmB,KAAK2E,KAAM3E,KAAKmmB,YACvH,GAAInmB,KAAKmmB,MAAMoC,oBAElB,IAAK,IAAIrB,EAAQ,EAAGA,EAAQlnB,KAAKmmB,MAAMhmB,OAAQ+mB,IAC3ClnB,KAAKuD,GAAGilB,qBACJxoB,KAAKkF,OACLgiB,EACAlnB,KAAKwmB,eACLxmB,KAAKmmB,MAAMe,GAAOpW,MAClB9Q,KAAKmmB,MAAMe,GAAOnW,OAClB,EACA/Q,KAAKmmB,MAAMe,GAAOtiB,WAK1B5E,KAAKuD,GAAG4kB,WAAWnoB,KAAKkF,OAAQlF,KAAKknB,MAAOlnB,KAAKwmB,eAAgBxmB,KAAKsmB,OAAQtmB,KAAK2E,KAAM3E,KAAKmmB,OAG9FnmB,KAAK4mB,kBAEA5mB,KAAKuD,GAAGW,SAASyN,UAAcqU,GAAWhmB,KAAKmmB,MAAMrV,QAAWkV,GAAWhmB,KAAKmmB,MAAMpV,QAKvF/Q,KAAKuD,GAAGklB,eAAezoB,KAAKkF,SAJ5BlF,KAAK4mB,iBAAkB,EACvB5mB,KAAKymB,MAAQzmB,KAAK2mB,MAAQ3mB,KAAKuD,GAAGmjB,cAClC1mB,KAAK6mB,UAAY7mB,KAAKuD,GAAGwjB,SAOjC/mB,KAAK0oB,UAAY1oB,KAAK0oB,UAC1B,MACI,GAAI1oB,KAAKkF,SAAWlF,KAAKuD,GAAG2kB,iBAExB,IAAK,IAAI1gB,EAAI,EAAGA,EAAI,EAAGA,IACnBxH,KAAKuD,GAAG4kB,WACJnoB,KAAKuD,GAAG6kB,4BAA8B5gB,EACtC,EACAxH,KAAKuD,GAAGgjB,KACR,EACA,EACA,EACAvmB,KAAKuD,GAAGgjB,KACRvmB,KAAKuD,GAAG8iB,cACRP,QAGD9lB,KAAK8Q,MAEZ9Q,KAAKuD,GAAG4kB,WAAWnoB,KAAKkF,OAAQlF,KAAKknB,MAAOlnB,KAAKwmB,eAAgBxmB,KAAK8Q,MAAO9Q,KAAK+Q,OAAQ,EAAG/Q,KAAKsmB,OAAQtmB,KAAK2E,KAAM,MAGrH3E,KAAKuD,GAAG4kB,WAAWnoB,KAAKkF,OAAQ,EAAGlF,KAAKuD,GAAGgjB,KAAM,EAAG,EAAG,EAAGvmB,KAAKuD,GAAGgjB,KAAMvmB,KAAKuD,GAAG8iB,cAAeP,GAGvG9lB,KAAKonB,MAAMjB,MAAQnmB,KAAKmmB,KA3HA,CA4H5B,EAGJ,MAAMwC,WAAa9oB,MACf,WAAAC,CAAYhC,EAAI,EAAGC,EAAID,EAAGE,EAAIF,EAAG4D,EAAI5D,GAEjC,OADAiC,MAAMjC,EAAGC,EAAGC,EAAG0D,GACR1B,IACX,CAEA,KAAIlC,GACA,OAAOkC,KAAK,EAChB,CAEA,KAAIjC,GACA,OAAOiC,KAAK,EAChB,CAEA,KAAIhC,GACA,OAAOgC,KAAK,EAChB,CAEA,KAAI0B,GACA,OAAO1B,KAAK,EAChB,CAEA,KAAIlC,CAAEmC,GACFD,KAAK,GAAKC,CACd,CAEA,KAAIlC,CAAEkC,GACFD,KAAK,GAAKC,CACd,CAEA,KAAIjC,CAAEiC,GACFD,KAAK,GAAKC,CACd,CAEA,KAAIyB,CAAEzB,GACFD,KAAK,GAAKC,CACd,CAEA,GAAAC,CAAIpC,EAAGC,EAAGC,EAAG0D,GACT,OAAI5D,EAAEqC,OAAeH,KAAKI,KAAKtC,IAC/B8X,EAAM5V,KAAMlC,EAAGC,EAAGC,EAAG0D,GACd1B,KACX,CAEA,IAAAI,CAAKH,GAED,OADA0V,EAAO3V,KAAMC,GACND,IACX,CAEA,SAAAiB,GAEI,OADA4U,EAAY7V,KAAMA,MACXA,IACX,CAEA,QAAAS,CAASR,GAnnFb,IAAiB7B,EAAKP,EAAGS,EAqnFjB,OArnFcT,EAonFAmC,KApnFG1B,EAonFG2B,GApnFX7B,EAonFD4B,MAnnFR,GAAKnC,EAAE,GAAKS,EAChBF,EAAI,GAAKP,EAAE,GAAKS,EAChBF,EAAI,GAAKP,EAAE,GAAKS,EAChBF,EAAI,GAAKP,EAAE,GAAKS,EAinFL0B,IACX,CAEA,GAAAkB,CAAIjB,GACA,OAAO6V,EAAM9V,KAAMC,EACvB,CAEA,SAAA6C,CAAUjF,EAAGkF,EAAI,GAKb,OAJA/C,KAAK,GAAKnC,EAAEkF,GACZ/C,KAAK,GAAKnC,EAAEkF,EAAI,GAChB/C,KAAK,GAAKnC,EAAEkF,EAAI,GAChB/C,KAAK,GAAKnC,EAAEkF,EAAI,GACT/C,IACX,CAEA,OAAAgD,CAAQnF,EAAI,GAAIkF,EAAI,GAKhB,OAJAlF,EAAEkF,GAAK/C,KAAK,GACZnC,EAAEkF,EAAI,GAAK/C,KAAK,GAChBnC,EAAEkF,EAAI,GAAK/C,KAAK,GAChBnC,EAAEkF,EAAI,GAAK/C,KAAK,GACTnC,CACX,EAGJ,MAAM+qB,WAActlB,EAChB,WAAAxD,CAAYyD,GAAI,MAAEuN,EAAQ,EAAC,OAAEC,EAAS,EAAC,cAAE8X,EAAgB,EAAC,eAAEC,EAAiB,EAAC,WAAEtlB,EAAa,CAAC,GAAM,CAAC,GACjG,MAAMulB,EAAQF,EACRG,EAAQF,EAGRG,GAAOF,EAAQ,IAAMC,EAAQ,GAC7BE,EAAaH,EAAQC,EAAQ,EAG7B5gB,EAAW,IAAIvD,aAAmB,EAANokB,GAC5BzE,EAAS,IAAI3f,aAAmB,EAANokB,GAC1BE,EAAK,IAAItkB,aAAmB,EAANokB,GACtB9iB,EAAQ+iB,EAAa,MAAQ,IAAIE,YAAYF,GAAc,IAAInkB,YAAYmkB,GAEjFN,GAAMS,WAAWjhB,EAAUoc,EAAQ2E,EAAIhjB,EAAO2K,EAAOC,EAAQ,EAAGgY,EAAOC,GAEvEtrB,OAAOqV,OAAOvP,EAAY,CACtB4E,SAAU,CAAE1D,KAAM,EAAGE,KAAMwD,GAC3Boc,OAAQ,CAAE9f,KAAM,EAAGE,KAAM4f,GACzB2E,GAAI,CAAEzkB,KAAM,EAAGE,KAAMukB,GACrBhjB,MAAO,CAAEvB,KAAMuB,KAGnBpG,MAAMwD,EAAIC,EACd,CAEA,iBAAO6lB,CAAWjhB,EAAUoc,EAAQ2E,EAAIhjB,EAAO2K,EAAOC,EAAQG,EAAO6X,EAAOC,EAAOM,EAAI,EAAGrpB,EAAI,EAAGyB,EAAI,EAAG6nB,EAAO,EAAGC,GAAO,EAAIhiB,EAAI,EAAGiiB,EAAK,GACrI,MAAMC,EAAKliB,EACLmiB,EAAO7Y,EAAQiY,EACfa,EAAO7Y,EAASiY,EAEtB,IAAK,IAAIa,EAAK,EAAGA,GAAMb,EAAOa,IAAM,CAChC,IAAI9rB,EAAI8rB,EAAKD,EAAO7Y,EAAS,EAC7B,IAAK,IAAI+Y,EAAK,EAAGA,GAAMf,EAAOe,IAAMtiB,IAAK,CACrC,IAAI1J,EAAIgsB,EAAKH,EAAO7Y,EAAQ,EAa5B,GAXA1I,EAAa,EAAJZ,EAAQ8hB,GAAKxrB,EAAIyrB,EAC1BnhB,EAAa,EAAJZ,EAAQvH,GAAKlC,EAAIyrB,EAC1BphB,EAAa,EAAJZ,EAAQ9F,GAAKwP,EAAQ,EAE9BsT,EAAW,EAAJhd,EAAQ8hB,GAAK,EACpB9E,EAAW,EAAJhd,EAAQvH,GAAK,EACpBukB,EAAW,EAAJhd,EAAQ9F,GAAKwP,GAAS,EAAI,GAAK,EAEtCiY,EAAO,EAAJ3hB,GAASsiB,EAAKf,EACjBI,EAAO,EAAJ3hB,EAAQ,GAAK,EAAIqiB,EAAKb,EAErBa,IAAOb,GAASc,IAAOf,EAAO,SAClC,IAAIlrB,EAAI6rB,EAAKI,EAAKD,GAAMd,EAAQ,GAC5BzqB,EAAIorB,EAAKI,GAAMD,EAAK,IAAMd,EAAQ,GAClCjM,EAAI4M,EAAKI,GAAMD,EAAK,IAAMd,EAAQ,GAAK,EACvCgB,EAAIL,EAAKI,EAAKD,GAAMd,EAAQ,GAAK,EAErC5iB,EAAW,EAALsjB,GAAU5rB,EAChBsI,EAAW,EAALsjB,EAAS,GAAKnrB,EACpB6H,EAAW,EAALsjB,EAAS,GAAKM,EACpB5jB,EAAW,EAALsjB,EAAS,GAAKnrB,EACpB6H,EAAW,EAALsjB,EAAS,GAAK3M,EACpB3W,EAAW,EAALsjB,EAAS,GAAKM,EACpBN,GACJ,CACJ,CACJ,EAIJ,MAAMO,GAAe,03mBAgCfC,GAAM,IAAOhsB,KAAKC,KAAK,GAAO,GAC9BgsB,IAAO,EAAMjsB,KAAKC,KAAK,IAAQ,EAI/BisB,GAAarsB,GAAsB,EAAhBG,KAAKmsB,MAAMtsB,GAC9BusB,GAAsB,IAAIC,aAAa,CAAC,EAAG,GAC5C,EAAG,EACJ,GAAI,GACH,GAAI,EACL,EAAG,GACF,EAAG,EACJ,EAAG,GACF,EAAG,EACJ,EAAG,EACH,GAAI,EACJ,EAAG,EACH,GAAI,IAuGR,SAASC,GAAgBC,GACvB,OAAOA,GAAS,GAAMvsB,KAAKwsB,SAC7B,CAEA,SAASC,GAAUC,EAAKC,GACtB,OAAOD,EAAM1sB,KAAKwsB,UAAYG,EAAOD,EACvC,CAEA,MAAME,GAzGN,SAAuBJ,EAASxsB,KAAKwsB,QACjC,MAAMK,EA8EV,SAA+BL,GAC3B,MAAMM,EAAY,IACZC,EAAI,IAAIjF,WAAWgF,GACzB,IAAK,IAAIvjB,EAAI,EAAGA,EAAIujB,EAAY,EAAGvjB,IAC/BwjB,EAAExjB,GAAKA,EAEX,IAAK,IAAIA,EAAI,EAAGA,EAAIujB,EAAY,EAAI,EAAGvjB,IAAK,CACxC,MAAMyjB,EAAIzjB,KAAOijB,KAAY,IAAMjjB,IAC7B0jB,EAAMF,EAAExjB,GACdwjB,EAAExjB,GAAKwjB,EAAEC,GACTD,EAAEC,GAAKC,CACX,CACA,IAAK,IAAI1jB,EAAI,IAAKA,EAAIujB,EAAWvjB,IAC7BwjB,EAAExjB,GAAKwjB,EAAExjB,EAAI,KAEjB,OAAOwjB,CACX,CA9FiBG,CAAsBV,GAE7BW,EAAa,IAAId,aAAaQ,GAAMO,KAAIprB,GAAKoqB,GAAOpqB,EAAI,GAAM,KAC9DqrB,EAAa,IAAIhB,aAAaQ,GAAMO,KAAIprB,GAAKoqB,GAAOpqB,EAAI,GAAM,EAAI,KACxE,OAAO,SAAiBnC,EAAGC,GAEvB,IAAIwtB,EAAK,EACLC,EAAK,EACLC,EAAK,EAET,MAAMjT,GAAK1a,EAAIC,GAAKksB,GACdziB,EAAI2iB,GAAUrsB,EAAI0a,GAClBd,EAAIyS,GAAUpsB,EAAIya,GAClB5V,GAAK4E,EAAIkQ,GAAKwS,GAGdzI,EAAK3jB,GAFA0J,EAAI5E,GAGT8oB,EAAK3tB,GAFA2Z,EAAI9U,GAKf,IAAI+oB,EAAIC,EACJnK,EAAKiK,GACLC,EAAK,EACLC,EAAK,IAGLD,EAAK,EACLC,EAAK,GAKT,MAAMlK,EAAKD,EAAKkK,EAAKzB,GACf2B,EAAKH,EAAKE,EAAK1B,GACflL,EAAKyC,EAAK,EAAM,EAAMyI,GACtBjL,EAAKyM,EAAK,EAAM,EAAMxB,GAEtBT,EAAS,IAAJjiB,EACLskB,EAAS,IAAJpU,EAEX,IAAIqU,EAAK,GAAMtK,EAAKA,EAAKiK,EAAKA,EAC9B,GAAIK,GAAM,EAAG,CACT,MAAMC,EAAMvC,EAAKqB,EAAKgB,GAGtBC,GAAMA,EAENR,EAAKQ,EAAKA,GAJEX,EAAWY,GAIDvK,EAHV6J,EAAWU,GAGUN,EACrC,CACA,IAAIO,EAAK,GAAMvK,EAAKA,EAAKmK,EAAKA,EAC9B,GAAII,GAAM,EAAG,CACT,MAAMC,EAAMzC,EAAKkC,EAAKb,EAAKgB,EAAKF,GAGhCK,GAAMA,EAENT,EAAKS,EAAKA,GAJEb,EAAWc,GAIDxK,EAHV4J,EAAWY,GAGUL,EACrC,CACA,IAAIM,EAAK,GAAMnN,EAAKA,EAAKC,EAAKA,EAC9B,GAAIkN,GAAM,EAAG,CACT,MAAMC,EAAM3C,EAAK,EAAIqB,EAAKgB,EAAK,GAG/BK,GAAMA,EAENV,EAAKU,EAAKA,GAJEf,EAAWgB,GAIDpN,EAHVsM,EAAWc,GAGUnN,EACrC,CAGA,OAAO,IAAQsM,EAAKC,EAAKC,EAC7B,CACJ,CAiCgBY,CAAcpuB,KAAKwsB,QAEnC,SAAS6B,GAAMzuB,GACb,OAAOI,KAAKmI,IAAI,EAAGnI,KAAKiI,IAAI,EAAGrI,GACjC,CAwKA,MAAM6B,GAAK,mCACL6sB,GAA4B,oLAU5BC,GAA0B,6UAiB1BC,GAA0B,2xBAqvB1BC,GAAU,CACd,KA7DW,CACXnjB,SAAU,CAAC,EACXD,SAAqB,SACjBijB,2kBA2DJ,OApCa,CACbhjB,SAAU,CAAC,EACXD,SAAqB,SACjBijB,m0BAkCJ,UAtuBa,CACbhjB,SAAU,CACRojB,UAAW,CAAE/uB,MAAO,EAAG+G,KAAM,IAAKuB,IAAK,EAAGE,IAAK,IAEjDkD,SAAqB,OACnBijB,uyBAkuBF,UA1sBa,CACbhjB,SAAU,CACRojB,UAAW,CAAE/uB,MAAO,GAAK+G,KAAM,IAAKuB,IAAK,EAAGE,IAAK,IAEnDkD,SAAqB,OACnBijB,8kBAssBF,YArrBe,CACfhjB,SAAU,CAAC,EACXD,SAAqB,SACjBijB,wzLAmrBJ,SA7fY,CACZhjB,SAAU,CAAC,EACXD,SAAqB,SACjBijB,6VA2fJ,SA5eY,CACZhjB,SAAU,CAAC,EACXD,SAAqB,SACjBijB,6VA0eJ,gBAhcmB,CACnBhjB,SAAU,CAAC,EACXqjB,OAAQ,GACRC,UAAW,EACXxjB,OAAmB,SACfmjB,4CAGAC,kCAGE/sB,ikBAgBN4J,SAAqB,SACjBijB,wEAGA7sB,8oBAkaJ,iBA5YoB,CACpB6J,SAAU,CAAC,EACXqjB,OAAQ,GACRC,UAAW,GACXxjB,OAAmB,SACfmjB,WACAC,kCAGE/sB,iXAaN4J,SAAqB,SACjBijB,wEAGA7sB,mmBAmXJ,gBA9VmB,CACnB6J,SAAU,CAAC,EACXqjB,OAAQ,GACRC,UAAW,EACXxjB,OAAmB,SACfmjB,yEAIAC,sQAWE/sB,6bAcN4J,SAAqB,SACjBijB,wEAGA7sB,qrBAyTJ,SA9de,CACf6J,SAAU,CAAC,EACXD,SAAqB,SACjBijB,6lBA4dJ,OAnSa,CACbhjB,SAAU,CACRb,OAAQ,CAAE9K,MAAO,GAAK+G,KAAM,IAAKuB,IAAK,GAAKE,IAAK,GAChD0K,MAAO,CAAElT,MAAO,IAAM+G,KAAM,IAAKuB,IAAK,EAAGE,IAAK,IAEhDkD,SAAqB,SACjBijB,u4BA8RJ,SArQe,CACfhjB,SAAU,CACRojB,UAAW,CAAE/uB,MAAO,GAAI+G,KAAM,IAAKuB,IAAK,EAAGE,IAAK,MAElDkD,SAAqB,SACjBijB,mtBAiQJ,OArOa,CACbhjB,SAAU,CACR7E,KAAM,CAAE9G,MAAO,IAAM+G,KAAM,IAAKuB,IAAK,GAAKE,IAAK,IAEjDkD,SAAqB,SACjBijB,+gBAiOJ,QA5Mc,CACdhjB,SAAU,CAAC,EACXD,SAAqB,SACjBijB,g+BA0MJ,QA5Kc,CACdhjB,SAAU,CACRojB,UAAW,CAAE/uB,MAAO,GAAI+G,KAAM,IAAKuB,IAAK,EAAGE,IAAK,MAElDkD,SAAqB,SACjBijB,u7CAwKJ,SAhIY,CACZhjB,SAAU,CAEV,EACAD,SAAqB,OACnBijB,qnBA4HF,KAzGW,CACXhjB,SAAU,CAAC,EACXD,SAAqB,SACjBijB,+iBAyGAO,GAAgB,iPAahBC,GAAkB,CAACC,EAAKC,KAC5B,MAAM,eAAEC,EAAc,OAAEC,GAAWF,EAC7B9mB,EAAQgnB,EAAOC,OAAOC,KAAOF,EAAOG,UAAYH,EAAOI,YAC7D,IAAIC,EAAad,GACjB,GAAI7sB,MAAM4tB,QAAQT,IAAQA,EAAI7sB,OAAQ,CACpC,GAAI+sB,EACF,YAA0B,IAAfF,EAAI7mB,GAA+BumB,GAAQM,EAAI,IACnDN,GAAQM,EAAI7mB,IAErBqnB,EAAa,CAAC,EACd9vB,OAAOgwB,KAAKhB,IAAStlB,SAAS7C,IACxByoB,EAAIW,SAASppB,KAAMipB,EAAWjpB,GAAOmoB,GAAQnoB,GAAI,GAEzD,CACA,MAAMqpB,EAAW3vB,KAAKmsB,MAAMnsB,KAAKwsB,SAAW/sB,OAAOgwB,KAAKF,GAAYrtB,QACpE,OAAOqtB,EAAW9vB,OAAOgwB,KAAKF,GAAYI,GAAU,EAGtD,MAAMC,GACJ,WAAA/tB,CAAYmtB,GACV,MAAMa,EACY,WAAhBb,EAAKa,QAAuBjuB,MAAM4tB,QAAQR,EAAKa,QAC3Cf,GAAgBE,EAAKa,OAAQb,GAC7BP,GAAQO,EAAKa,QACnB9tB,KAAK8tB,OAASA,EACd9tB,KAAKgqB,aAAeiD,EAAKc,iBAAmB/D,GAC5ChqB,KAAKoU,MAAQ,IAAI+N,EACjBniB,KAAKmtB,OAASF,EAAKE,OACnBntB,KAAKqJ,OAASykB,EAAOzkB,QAAUyjB,GAC/B9sB,KAAKsJ,SAAWwkB,EAAOxkB,SACvBtJ,KAAKuJ,SAAWukB,EAAOvkB,UAAY,CAAC,EACpCvJ,KAAKkE,SAAW,IAAIyM,EAAS,CAAEK,IAAK,EAAGQ,MAAO,EAAGP,OAAO,IACxDjR,KAAKuD,GAAKvD,KAAKkE,SAASX,GACxBvD,KAAK8Q,MAAQ1R,OAAO4uB,WACpBhuB,KAAK+Q,OAAS3R,OAAO6uB,YACrBjuB,KAAKkE,SAAS0N,QAAQ5R,KAAK8Q,MAAO9Q,KAAK+Q,QACvC/Q,KAAKuD,GAAG2qB,WAAW,EAAG,EAAG,EAAG,GAC5BluB,KAAKuD,GAAG+R,MAAMtV,KAAKuD,GAAGgS,kBACtBvV,KAAKitB,KAAOA,EAEZjtB,KAAKmuB,UAAYnuB,KAAKmtB,OAAOiB,GAC7BpuB,KAAKquB,oBAAsB,KAE3BruB,KAAK8Q,MAAQ9Q,KAAKmtB,OAAOrc,MACzB9Q,KAAK+Q,OAAS/Q,KAAKmtB,OAAOpc,OACtB/Q,KAAKmtB,OAAOmB,WACdtuB,KAAKuD,GAAGE,OAAO8qB,aAAa,OAAQ,mBAEtCvuB,KAAKmuB,UAAUK,QAAQxuB,KAAKuD,GAAGE,QAE/BzD,KAAKqU,OAAS,IAAIsP,EAAO3jB,KAAKuD,GAAI,CAAEua,IAAK,KACzC9d,KAAKqU,OAAOiK,YAAY,CACtBP,OAAQ/d,KAAKuD,GAAGE,OAAOqN,MAAQ9Q,KAAKuD,GAAGE,OAAOsN,SAGhD/Q,KAAKqU,OAAOjM,SAASlI,IAAI,EAAG,EAAG,GAC/BF,KAAKyuB,KAAO,EACZzuB,KAAK0uB,QAAU,EAEf1uB,KAAK2uB,MAAK,KACR3uB,KAAK4uB,aACL5uB,KAAK6uB,SACL7uB,KAAKqV,QAAQ,GAEjB,CAEA,cAAAyZ,CAAehjB,EAASijB,EAAaC,GACnC,MAAMC,EAAgBnjB,EAAQlO,MAC9B,IACI6wB,EADAS,EAAY,KAGhB9vB,OAAO+vB,qBAAqBnvB,KAAKovB,qBAEjC,MAAMC,EAAMN,EAAcjjB,EAAQlO,MAAQ,OAAS,OAE7C0xB,EAAe,CAACZ,EAASxpB,IACpB,SAARmqB,GAAkBX,GAAWxpB,GACrB,SAARmqB,GAAkBX,GAAWxpB,EAE1BqqB,EAAU,KACd,GAAIvvB,KAAKwvB,UAAW,OACpBf,GAAO,IAAIgB,MAAOC,UACA,OAAdR,IACFA,EAAYT,GAGd,MAAMkB,EAAW1xB,KAAKmI,IACpBnI,KAAKiI,KAAKuoB,EAAOS,GAAalvB,KAAKmtB,OAAOC,OAAOwC,MAAO,GACxD,GAEIC,EAAe,GAAM5xB,KAAKyY,IAAIiZ,EAAW1xB,KAAKyB,IAAM,EAC1D,IAAIowB,EACFb,EAAgBY,GAAgBd,EAAcE,GAMhD,GAJIK,EAAaQ,EAAiBf,KAChCe,EAAkBf,GAEpBjjB,EAAQlO,MAAQkyB,EACZR,EAAaQ,EAAiBf,GAGhC,OAFAI,qBAAqBnvB,KAAKovB,0BACtBJ,GAAIA,KAGVhvB,KAAKovB,oBAAsBW,sBAAsBR,EAAQ,EAE3DA,GACF,CAEA,YAAAS,GACE,MAAMC,EAAW,GACXC,EAAOlwB,KAoCb,OAnCAA,KAAKmwB,OAAS,GACdnwB,KAAKowB,SAAW,GAEhBpwB,KAAKmuB,UAAUkC,iBAAiB,oBAAoBjpB,SAASkpB,IAC3DtwB,KAAKmwB,OAAOthB,KAAKyhB,EAAInmB,IAAI,IAG3BnK,KAAKmwB,OAAO/oB,SAAQ,CAACmpB,EAAK/oB,KACxB,MAAMgpB,EAAU,IAAIC,SAASC,IAC3B,MAAMJ,EAAM,IAAIK,MAChBL,EAAIM,YAAc,YAClB,MAAMniB,EAAU,IAAIyX,GAAQlmB,KAAKuD,IACjC+sB,EAAIO,OAAS,KACXpiB,EAAQ0X,MAAQmK,EAChBJ,EAAKE,SAAS5oB,GAAKiH,EACnBiiB,GAAS,EAEXJ,EAAInmB,IAAMomB,CAAG,IAEfN,EAASphB,KAAK2hB,EAAQ,IAExBP,EAASphB,KACP,IAAI4hB,SAASC,IACX,MAAMJ,EAAM,IAAIK,MAChBL,EAAIM,YAAc,YAClB,MAAMniB,EAAU,IAAIyX,GAAQlmB,KAAKuD,IACjC+sB,EAAIO,OAAS,KACXpiB,EAAQ0X,MAAQmK,EAChBJ,EAAK7B,oBAAsB5f,EAC3BiiB,GAAS,EAEXJ,EAAInmB,IAAM6f,EAAY,KAInByG,QAAQK,IAAIb,EACrB,CAEA,IAAAtB,CAAKK,GACHhvB,KAAKgwB,eAAee,MAAK,KACvB/wB,KAAKgxB,aAAc,EACfhxB,KAAKixB,QAAQjxB,KAAKixB,SACtBjC,GAAI,GAER,CAEA,MAAAH,GACE,IAAK7uB,KAAKgxB,aAAehxB,KAAKwvB,UAAW,OACzC,MAAM,MAAE1e,EAAK,OAAEC,GAAW/Q,KAAKmtB,OAC/BntB,KAAK8Q,MAAQA,EACb9Q,KAAK+Q,OAASA,EACd/Q,KAAKkE,SAAS0N,QAAQd,EAAOC,GAC7B,MAAMmgB,EAAOlxB,KAAKqU,OAAOjM,SAASpK,EAMlC,GAJAgC,KAAKqU,OAAOiK,YAAY,CACtBP,OAAQjN,EAAQC,EAChB+M,IAAU,IAAM7f,KAAKyB,GAAhB,EAAsBzB,KAAKkzB,KAAK,GAAK,EAAID,OAE3ClxB,KAAKowB,SAAS,GAAGjK,MAAO,OAC7B,MAAMiL,EACJpxB,KAAKowB,SAAS,GAAGjK,MAAMpV,OAAS/Q,KAAKowB,SAAS,GAAGjK,MAAMrV,MACzD,IAAIgG,EACAC,EACAhG,EAASD,EAAQsgB,GACnBta,EAAMhG,EAAQC,EAAUqgB,EACxBra,EAAK,IAELD,EAAK,EACLC,EAAKhG,EAASD,EAAQsgB,GAGxBpxB,KAAKqxB,SAAS9nB,SAAS+nB,WAAW1zB,MAAME,EAAIgT,EAC5C9Q,KAAKqxB,SAAS9nB,SAAS+nB,WAAW1zB,MAAMG,EAAIgT,EAC5C/Q,KAAKqxB,SAAS9nB,SAAS+nB,WAAW1zB,MAAMI,EAAI8Y,EAC5C9W,KAAKqxB,SAAS9nB,SAAS+nB,WAAW1zB,MAAM8D,EAAIqV,EAExC/W,KAAK8tB,OAAOzkB,QAAUrJ,KAAKuxB,iBAC7BvxB,KAAKuxB,eAAehoB,SAAS+nB,WAAW1zB,MAAME,EAAIgT,EAClD9Q,KAAKuxB,eAAehoB,SAAS+nB,WAAW1zB,MAAMG,EAAIgT,EAClD/Q,KAAKuxB,eAAehoB,SAAS+nB,WAAW1zB,MAAMI,EAAI8Y,EAClD9W,KAAKuxB,eAAehoB,SAAS+nB,WAAW1zB,MAAM8D,EAAIqV,GAGhD/W,KAAK8tB,OAAOzkB,QACdrJ,KAAKwxB,SAASxwB,MAAMd,IAAIF,KAAKqU,OAAO0J,OAAS,EAAG,GAAO,IACvD/d,KAAKyxB,YAAYzwB,MAAMd,IAAIF,KAAKqU,OAAO0J,OAAS,EAAG,GAAO,MAE1D/d,KAAKykB,MAAMzjB,MAAMlD,EAAIkC,KAAKqU,OAAO0J,OACjC/d,KAAKykB,MAAMzjB,MAAMjD,EAAI,EAEzB,CAEA,cAAA2zB,GACE,OAAO,IAAItoB,EAAQpJ,KAAKuD,GAAI,CAC1B+O,WAAY,CACVqf,YAAa,mDAGfpoB,SAAU,CACRklB,KAAM,CAAE9pB,KAAM,IAAK/G,MAAO,GAC1B+xB,SAAU,CAAEhrB,KAAM,IAAK/G,MAAO,GAC9B+uB,UAAW,CAAEhoB,KAAM,IAAK/G,MAAO,GAC/BkT,MAAO,CAAEnM,KAAM,IAAK/G,MAAO,GAC3B8K,OAAQ,CAAE/D,KAAM,IAAK/G,MAAO,GAC5B8G,KAAM,CAAEC,KAAM,IAAK/G,MAAO,GAC1Bg0B,SAAU,CAAEjtB,KAAM,IAAK/G,MAAOoC,KAAKowB,SAAS,IAC5CyB,SAAU,CAAEltB,KAAM,IAAK/G,MAAOoC,KAAKowB,SAAS,IAE5CpG,aAAc,CACZrlB,KAAM,IACN/G,MAAOoC,KAAKquB,qBAEdiD,WAAY,CAAE3sB,KAAM,KAAM/G,MAAO,IAAI+qB,KAEvCtf,OAAQrJ,KAAK8tB,OAAOzkB,QAAUyjB,GAC9BxjB,SAAUtJ,KAAK8tB,OAAOxkB,YAClBtJ,KAAK8tB,OAAOzkB,OACZ,CACEG,aAAa,EACbM,YAAY,GAEd,CAAC,GAET,CAEA,UAAA8kB,GASE,GARA5uB,KAAKoU,MAAMiO,SAASjb,SAAS0b,IAC3B9iB,KAAKoU,MAAMwO,YAAYE,EAAM,IAE/B9iB,KAAKoU,MAAMiO,SAASjb,SAAS0b,IAC3B9iB,KAAKoU,MAAMwO,YAAYE,EAAM,IAE/B9iB,KAAKqxB,SAAWrxB,KAAK0xB,iBAEjB1xB,KAAK8tB,OAAOzkB,OAAQ,CACtB,MAAMib,EA9sCZ,SAAqB/gB,EAAIqpB,EAAQC,GAC/BA,EAAYA,GAAa,EACzB,MAAMiF,EAASlF,EAITmF,EAHQ,EAGOD,EACfE,EAASD,EAAO9zB,KAAKC,KAAK,GAAM,EAChC+zB,EAJS,EAIOD,EAEhBE,EAAU,GACVC,EAAY,GACZC,EAAY,GACZC,EAAW,GACXC,EAAW,GACXC,EAAU,GACVC,EAAM,GACZ,IAAIC,EAAe,EACnB,MAAMC,EAAO,GACb,IAAIC,EAAgB,EAGpB,IAAK,IAAIjb,EAAI,EAAGA,EAAIua,EAAMva,GAAK,EAAG,CAChCib,EAAgBjb,EAAIsa,EAElBS,EADE/a,EAAI,GAAM,GACIqa,EAAO,EAER,EAEjB,IAAK,IAAIvqB,EAAI,EAAGA,GAAKsqB,EAAQtqB,GAAK,EAAG,CACnC,MAAMorB,EAAO30B,KAAK20B,KAAKprB,EAAIuqB,EAAOU,EAAe3hB,GAGjDqhB,EAAUtjB,KACRrH,EAAIuqB,EAAOU,EAAe3hB,EAC1B6hB,EAAgB5hB,EAChB,GAEFyhB,EAAI3jB,MAAMrH,EAAIuqB,EAAOU,GAnCX,EAmCkCE,EAlCjC,GAmCXR,EAAUtjB,KACRrH,EAAIuqB,EAAOA,EAAO,EAAIU,EAAe3hB,EACrCkhB,EAAQW,EAAgB5hB,EACxB,GAEFyhB,EAAI3jB,MACDrH,EAAIuqB,EAAOA,EAAO,EAAIU,GA1Cf,GA2CPT,EAAQW,GA1CA,GA4CXR,EAAUtjB,KACRrH,EAAIuqB,EAAOA,EAAO,EAAIU,EAAe3hB,EACrCkhB,EAAQW,EAAgB5hB,EACxB,GAEFyhB,EAAI3jB,MACDrH,EAAIuqB,EAAOA,EAAO,EAAIU,GAnDf,GAoDPT,EAAQW,GAnDA,GAsDX,IAAIE,EAAOhI,GAAQrjB,EAAIyqB,EAAMva,EAAIua,GAAQh0B,KAAKwsB,SAC9C,MAAM1nB,EAAIupB,GAAMqG,EAvDL,EAuD+B,EAAIE,EAAQjG,GACtD,IAAI3B,EAAIhtB,KAAKwsB,SACbyH,EAAQrjB,KAAK9L,EAAGupB,GAAMvpB,EAAI,GAAM8pB,GAAYP,GAAMvpB,EAAI,GAAM8pB,IAC5D0F,EAAQ1jB,KAAKoc,EAAGA,EAAGA,GACnB,MAAMnO,EAAI,CACRtV,EAAIuqB,EAAOU,EAAe3hB,EAC1B6hB,EAAgB5hB,EAChB,GAEFqhB,EAAUvjB,QAAQiO,KAAMA,KAAMA,GAE9B,MAAMgW,EAAQ,CAlDJ,EAmDAF,EAAOlI,IAAW,GAAK,KAnDvB,EAoDCA,IAAW,GAAK,IAAO,KAC/BH,GAAgB,KAEbwI,EAAQ,CAvDJ,EAwDAH,EAAOlI,GAAU,GAAK,KAxDtB,EAyDCA,GAAU,GAAK,IAAO,KAC9BH,GAAgB,KAEnB8H,EAASxjB,QAAQikB,KAAUA,KAAUA,GACrCR,EAASzjB,QAAQkkB,KAAUA,KAAUA,GAErCL,EAAK7jB,KAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAElCsjB,EAAUtjB,KACRrH,EAAIuqB,EAAOU,EAAe3hB,EAC1B6hB,EAAgB5hB,EAChB,GAEFyhB,EAAI3jB,MAAMrH,EAAIuqB,EAAOU,GAvFX,EAuFkCE,EAtFjC,GAuFXR,EAAUtjB,KACRrH,EAAIuqB,EAAOA,EAAOU,EAAe3hB,EACjC6hB,EAAgB5hB,EAChB,GAEFyhB,EAAI3jB,MACDrH,EAAIuqB,EAAOA,EAAOU,GA9FX,EA+FRE,EA9FS,GAgGXR,EAAUtjB,KACRrH,EAAIuqB,EAAOA,EAAO,EAAIU,EAAe3hB,EACrCkhB,EAAQW,EAAgB5hB,EACxB,GAEFyhB,EAAI3jB,MACDrH,EAAIuqB,EAAOA,EAAO,EAAIU,GAvGf,GAwGPT,EAAQW,GAvGA,GA0GXE,EAAOhI,IAASrjB,EAAI,GAAKyqB,EAAMva,EAAIua,GAAQh0B,KAAKwsB,SAChD,MAAMuI,EAAK1G,GAAMqG,EA3GN,EA2GgC,EAAIE,EAAQjG,GACvD3B,EAAIhtB,KAAKwsB,SACTyH,EAAQrjB,KAAKmkB,EAAIA,EAAI1G,GAAM0G,EAAK,GAAMnG,IACtC0F,EAAQ1jB,KAAKoc,EAAGA,EAAGA,GACnB,MAAMgI,EAAK,CACTzrB,EAAIuqB,EAAOU,EAAe3hB,EAC1B6hB,EAAgB5hB,EAChB,GAGFshB,EAASxjB,QAAQikB,KAAUA,KAAUA,GACrCR,EAASzjB,QAAQkkB,KAAUA,KAAUA,GAErCX,EAAUvjB,QAAQokB,KAAOA,KAAOA,GAChCP,EAAK7jB,KAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EACpC,CACF,CACA,MAAMyV,EAAW,IAAIhhB,EAASC,GAkC9B,OAhCA+gB,EAAS9f,aAAa,WAAY,CAChCE,KAAM,EACNE,KAAM,IAAIC,aAAastB,KAEzB7N,EAAS9f,aAAa,OAAQ,CAC5BE,KAAM,EACNE,KAAM,IAAIC,aAAa6tB,KAEzBpO,EAAS9f,aAAa,KAAM,CAC1BE,KAAM,EACNE,KAAM,IAAIC,aAAa2tB,KAEzBlO,EAAS9f,aAAa,SAAU,CAC9BE,KAAM,EACNE,KAAM,IAAIC,aAAaqtB,KAEzB5N,EAAS9f,aAAa,YAAa,CACjCE,KAAM,EACNE,KAAM,IAAIC,aAAautB,KAEzB9N,EAAS9f,aAAa,WAAY,CAChCE,KAAM,EACNE,KAAM,IAAIC,aAAawtB,KAEzB/N,EAAS9f,aAAa,WAAY,CAChCE,KAAM,EACNE,KAAM,IAAIC,aAAaytB,KAEzBhO,EAAS9f,aAAa,SAAU,CAC9BE,KAAM,EACNE,KAAM,IAAIC,aAAa0tB,KAElBjO,CACT,CA2iCuB4O,CACflzB,KAAKuD,GACLvD,KAAK8tB,OAAOlB,OACZ5sB,KAAK8tB,OAAOjB,WAERpe,EAAUzO,KAAKowB,SAAS,GAC9BpwB,KAAKuxB,eAAiBvxB,KAAK0xB,iBAC3B1xB,KAAKuxB,eAAehoB,SAASqoB,SAASh0B,MAAQ6Q,EAC9CzO,KAAKyxB,YAAc,IAAIrM,EAAKplB,KAAKuD,GAAI,CACnC+gB,WACAvd,QAAS/G,KAAKqxB,WAEhBrxB,KAAKwxB,SAAW,IAAIpM,EAAKplB,KAAKuD,GAAI,CAChC+gB,WACAvd,QAAS/G,KAAKuxB,iBAEhBvxB,KAAKwxB,SAASppB,SAASpK,GAAK,KAC5BgC,KAAKyxB,YAAY/O,UAAU1iB,KAAKoU,OAChCpU,KAAKwxB,SAAS9O,UAAU1iB,KAAKoU,MAC/B,KAAO,CACL,MAAMkQ,EAAW,IAAIsE,GAAM5oB,KAAKuD,GAAI,CAClCuN,MAAO,EACPC,OAAQ,EACR8X,cAAe,EACfC,eAAgB,IAElB9oB,KAAKykB,MAAQ,IAAIW,EAAKplB,KAAKuD,GAAI,CAAE+gB,WAAUvd,QAAS/G,KAAKqxB,WACzDrxB,KAAKykB,MAAM/B,UAAU1iB,KAAKoU,MAC5B,CACF,CAEA,aAAA+e,CAAcC,GACZ,IAAIC,EACAC,EACAtzB,KAAK8tB,OAAOzkB,QACdgqB,EAAcrzB,KAAKqxB,SAAS9nB,SAASqoB,SAASh0B,MAC9C01B,EAAatzB,KAAKuxB,eAAehoB,SAASqoB,SAASh0B,QAEnDy1B,EAAcrzB,KAAKqxB,SAAS9nB,SAASqoB,SAASh0B,MAC9C01B,EAAatzB,KAAKqxB,SAAS9nB,SAASsoB,SAASj0B,OAE/C,MAAMkwB,EACc,WAAlBsF,GAA8BvzB,MAAM4tB,QAAQ2F,GACxCrG,GAAgBqG,EAAepzB,KAAKitB,MACpCP,GAAQ0G,IACR,SAAE9pB,EAAQ,SAAEC,EAAQ,OAAEF,GAAWykB,EACvC9tB,KAAK8tB,OAASA,EACd9tB,KAAKqJ,OAASA,GAAUyjB,GACxB9sB,KAAKsJ,SAAWA,GAAY,GAC5BtJ,KAAKuJ,SAAWA,GAAY,CAAC,EAC7BvJ,KAAK4uB,aACD5uB,KAAK8tB,OAAOzkB,QACdrJ,KAAKqxB,SAAS9nB,SAASqoB,SAASh0B,MAAQ01B,EACxCtzB,KAAKuxB,eAAehoB,SAASqoB,SAASh0B,MAAQ01B,IAE9CtzB,KAAKqxB,SAAS9nB,SAASqoB,SAASh0B,MAAQy1B,EACxCrzB,KAAKqxB,SAAS9nB,SAASsoB,SAASj0B,MAAQ01B,EACxCtzB,KAAKqxB,SAAS9nB,SAASomB,SAAS/xB,MAAQ,GAG1CoC,KAAK6uB,SACL7uB,KAAKmtB,OAAOC,OAAO7pB,GAAGuqB,OAASsF,CACjC,CAEA,mBAAAG,GACE,MAAMzF,EAASf,GAAgB/sB,KAAKitB,KAAKa,OAAQ9tB,KAAKitB,OAChD,SAAE3jB,EAAQ,SAAEC,EAAQ,OAAEF,GAAWykB,EACvC9tB,KAAK8tB,OAASA,EACd9tB,KAAKsJ,SAAWA,GAAY,GAC5BtJ,KAAKuJ,SAAWA,GAAY,CAAC,EAC7BvJ,KAAKqJ,OAASA,GAAUyjB,GACxB9sB,KAAK4uB,aACL5uB,KAAK6uB,QACP,CAEA,WAAA2E,CACEC,EACAC,EACA/D,EACAgE,EACAC,GAEA,GAAI5zB,KAAKwvB,WAAaxvB,KAAKmtB,OAAO0G,YAAa,OAC/C,IAAK7zB,KAAKgxB,YAWR,YAVAhxB,KAAKixB,OAAS,KACZlB,uBAAsB,KACpB/vB,KAAKwzB,YACHC,EACAC,EACA/D,EACAgE,EACD,GACD,GAKJ3zB,KAAKmtB,OAAOC,OAAOC,MACnBrtB,KAAKmtB,OAAO2G,OAAOL,IACnBzzB,KAAKmtB,OAAO2G,OAAOJ,KAEnBD,EAAYM,SACV/zB,KAAKmtB,OAAO2G,OAAOL,GAAWO,aAAa,2BAC3C,IAEFN,EAAUK,SACR/zB,KAAKmtB,OAAO2G,OAAOJ,GAASM,aAAa,2BACzC,KAGJ,MAAMV,EAAatzB,KAAKowB,SAASsD,GAC3BL,EAAcrzB,KAAKowB,SAASqD,GAQlC,GANAzzB,KAAKqxB,SAAS9nB,SAASqoB,SAASh0B,MAAQy1B,EACnCrzB,KAAK8tB,OAAOzkB,OAGfrJ,KAAKuxB,eAAehoB,SAASqoB,SAASh0B,MAAQ01B,EAF9CtzB,KAAKqxB,SAAS9nB,SAASsoB,SAASj0B,MAAQ01B,EAItCM,EAAmB,CACrB,GAAI5zB,KAAKi0B,qBAEP,YADAj0B,KAAKqxB,SAAS9nB,SAASomB,SAAS/xB,MAAQK,KAAKuf,IAAImS,IAGnD3vB,KAAKi0B,sBAAuB,EAC5BlE,uBAAsB,KACpB/vB,KAAKi0B,sBAAuB,CAAK,IAIA,WAAjCj0B,KAAKmtB,OAAOC,OAAO7pB,GAAGuqB,QACtBjuB,MAAM4tB,QAAQztB,KAAKmtB,OAAOC,OAAO7pB,GAAGuqB,SAEpC9tB,KAAKuzB,sBACLvzB,KAAKqxB,SAAS9nB,SAASqoB,SAASh0B,MAAQy1B,EACxCrzB,KAAKqxB,SAAS9nB,SAASsoB,SAASj0B,MAAQ01B,EACxCtzB,KAAKqxB,SAAS9nB,SAASomB,SAAS/xB,MAAQK,KAAKuf,IAAImS,IAEjD3vB,KAAKqxB,SAAS9nB,SAASomB,SAAS/xB,MAAQK,KAAKuf,IAAImS,EAErD,MAAWgE,GACQ,IAAbhE,GAA4D,IAA1C3vB,KAAKqxB,SAAS9nB,SAASomB,SAAS/xB,QACpDoC,KAAKqxB,SAAS9nB,SAASomB,SAAS/xB,MAAQ,GAEzB,IAAb+xB,GAA4D,IAA1C3vB,KAAKqxB,SAAS9nB,SAASomB,SAAS/xB,QACpDoC,KAAKqxB,SAAS9nB,SAASomB,SAAS/xB,MAAQ,GAE1CoC,KAAK8uB,eAAe9uB,KAAKqxB,SAAS9nB,SAASomB,SAAUA,GAAU,MAE1B,WAAjC3vB,KAAKmtB,OAAOC,OAAO7pB,GAAGuqB,QACtBjuB,MAAM4tB,QAAQztB,KAAKmtB,OAAOC,OAAO7pB,GAAGuqB,WAEpC9tB,KAAKuzB,sBACLvzB,KAAKqxB,SAAS9nB,SAASqoB,SAASh0B,MAAQy1B,EACxCrzB,KAAKqxB,SAAS9nB,SAASsoB,SAASj0B,MAAQ01B,EACxCtzB,KAAKqxB,SAAS9nB,SAASomB,SAAS/xB,MAAQ+xB,GAEzB,IAAbA,IACF3vB,KAAKqxB,SAAS9nB,SAASqoB,SAASh0B,MAAQ01B,GAE1CtzB,KAAKqxB,SAAS9nB,SAASomB,SAAS/xB,MAAQ,CAAC,KAG3CoC,KAAKqxB,SAAS9nB,SAASomB,SAAS/xB,MAAQK,KAAKuf,IAAImS,EAErD,CAEA,MAAAta,GACMrV,KAAKmtB,OAAOqC,WAAaxvB,KAAKwvB,YAClCxvB,KAAKyuB,MAAQ,IACbzuB,KAAKqxB,SAAS9nB,SAASklB,KAAK7wB,MAAQoC,KAAKyuB,KAEzC/wB,OAAOgwB,KAAK1tB,KAAKuJ,UAAUnC,SAAS8sB,IAClCl0B,KAAKqxB,SAAS9nB,SAAS2qB,GAAMt2B,MAAQoC,KAAKuJ,SAAS2qB,GAAMt2B,KAAK,IAGhEmyB,sBAAsB/vB,KAAKqV,OAAOxB,KAAK7T,OACvCA,KAAKkE,SAASmR,OAAO,CAAEjB,MAAOpU,KAAKoU,MAAOC,OAAQrU,KAAKqU,SACzD,CAEA,OAAA8f,GACEn0B,KAAKgxB,aAAc,EACnBhxB,KAAKwvB,WAAY,EACbxvB,KAAKuD,IAAMvD,KAAKuD,GAAGE,QAAQzD,KAAKmuB,UAAUvL,YAAY5iB,KAAKuD,GAAGE,OACpE,EAGoB,oBAAXrE,QAA0BA,OAAOC,6BAC1CD,OAAOC,4BAA4B,CAAC,OEzwLhB,oBAAXD,QAA0BA,OAAOC,6BAC1CD,OAAOC,4BAA4B,CAAC,mBCZtCD,OAAOg1B,aFgBQ,UAAsB,OAAEjH,EAAM,aAAEkH,EAAY,GAAEC,EAAE,KAAEC,IAC/DF,EAAa,CACXG,aAAc,CACZvoB,MAAO,KAiCX,MAAMwoB,EAAe,KACnBtH,EAAO2G,OAAO1sB,SAASstB,IACrB,GAAIA,EAAQC,cAAc,+BAAgC,OAC1D,MAAMC,EAAUF,EAAQC,cAAc,wBACtC,IAAKC,EAAS,OACd,MAAMC,EAASD,EAAQE,mBACjBC,EAAmBnkB,SAASC,cAAc,OAChDkkB,EAAiBC,UAAU32B,IAAI,8BAC/B,IAAK,IAAImJ,EAAI,EAAGA,EAAI2lB,EAAOC,OAAOoH,aAAavoB,MAAOzE,GAAK,EAAG,CAC5D,MAAMytB,EAAMrkB,SAASC,cAAc,OACnCokB,EAAID,UAAU32B,IAAI,6BAClB42B,EAAIC,YAAYN,EAAQO,aACxBJ,EAAiBG,YAAYD,EAC/B,CACIJ,EACFD,EAAQQ,WAAWC,aAAaN,EAAkBF,GAElDD,EAAQQ,WAAWF,YAAYH,EACjC,GACA,EAGEO,EAAY,KAChBnI,EAAO2G,OAAO1sB,SAASstB,GACrBA,EAAQrE,iBAAiB,wBAAwBjpB,SAASwtB,IACxDA,EAAQ5hB,MAAMlC,MAAQ,GAAGqc,EAAOrc,UAChC8jB,EAAQ5hB,MAAMjC,OAAS,GAAGoc,EAAOpc,UAAU,MAG/Coc,EAAO2G,OAAO1sB,SAASstB,IACrBA,EACGrE,iBAAiB,8BACjBjpB,SAAQ,CAACmuB,EAASC,KACjB,MAAMC,EAAWF,EAAQZ,cAAc,wBACP,eAA5BxH,EAAOC,OAAOsI,WAChBH,EAAQviB,MAAMjC,OAAY,IAAMoc,EAAOC,OAAOoH,aAAavoB,MAApC,IACvBspB,EAAQviB,MAAM2L,IACX,IAAMwO,EAAOC,OAAOoH,aAAavoB,MAASupB,EADzB,IAGpBC,EAASziB,MAAM2L,IAAM,IAAI,IAAM6W,OAE/BD,EAAQviB,MAAMlC,MAAW,IAAMqc,EAAOC,OAAOoH,aAAavoB,MAApC,IACtBspB,EAAQviB,MAAMwL,KACX,IAAM2O,EAAOC,OAAOoH,aAAavoB,MAASupB,EADxB,IAGrBC,EAASziB,MAAMwL,KAAO,IAAI,IAAMgX,KAClC,GACA,GACJ,EAsBEG,EAAiBC,IACrBzI,EAAO2G,OAAO1sB,SAASstB,IACrB,MAAMvE,EAASuE,EAAQrE,iBAAiB,8BAClCwF,EAAYnB,EAAQC,cAAc,yBACpCkB,IACFA,EAAU7iB,MAAM8iB,mBAAqB,GAAGF,OAI1CzF,EAAO/oB,SAAQ,CAACwtB,EAASmB,KACN,IAAbH,GACFhB,EAAQ5hB,MAAMgjB,yBAA2B,WACzCpB,EAAQ5hB,MAAM8iB,mBAAqB,GACjC3I,EAAOC,OAAOwC,MACbzC,EAAOC,OAAOwC,OAASO,EAAOhwB,OAAS,IACrCgwB,EAAOhwB,OAAS41B,EAAa,SAGlCnB,EAAQ5hB,MAAMgjB,yBAA2B,GACzCpB,EAAQ5hB,MAAM8iB,mBAAqB,GACjCF,EACCA,GAAYzF,EAAOhwB,OAAS,IAAOgwB,EAAOhwB,OAAS41B,EAAa,OAErE,GACA,IA3HN,UAAoC,SAAEH,IACpC,MAAM,OAAE9B,EAAM,YAAEvG,GAAgBJ,EAChC,GAAiB,IAAbyI,EAAgB,CAClB,IAAIK,GAAiB,EACrB,MAAMC,EAAsBpC,EAAOvG,GAAaoH,cAC9C,2CAEF,IAAKuB,EAAqB,OAC1B,MAAMC,EAAmBC,IACvB,GAAIA,EAAElxB,SAAWgxB,EAAqB,OAKtC,GAJAA,EAAoBG,oBAClB,gBACAF,GAEEF,EAAgB,OACpB,IAAK9I,GAAUA,EAAOqC,UAAW,OACjCyG,GAAiB,EACjB9I,EAAOmJ,WAAY,EAEnB,MAAMC,EAAM,IAAIn3B,OAAOo3B,YAAY,gBAAiB,CAClDC,SAAS,EACTC,YAAY,IAEdvJ,EAAOwJ,UAAUC,cAAcL,EAAI,EAErCL,EAAoBW,iBAAiB,gBAAiBV,EACxD,CACF,CAmGEW,CAA2B,CAAElB,YAAW,EAG1CtB,EAAG,gBAAgB,KACY,WAAzBnH,EAAOC,OAAO2J,QAlDC,MACnB,MAAMxe,EAAmC,aAA5B4U,EAAOC,OAAOsI,UAA2B,IAAM,IAC5DvI,EAAO2G,OAAO1sB,SAAQ,CAACstB,EAASsC,KAC9BtC,EAAQ1hB,MAAMikB,UAAY,YAAY1e,MAAsB,IAAbye,MAC/C,MAAME,EAAgBxC,EAAQ/E,SACxBkG,EAAYnB,EAAQC,cAAc,yBACpCkB,IACFA,EAAU7iB,MAAMikB,UAAY,YAAY1e,KACtC4U,EAAOzoB,MAAQwyB,EAAgB,UAGpBxC,EAAQrE,iBAAiB,8BACjCjpB,SAASwtB,IACd,MAAMjF,GAAYuH,EAClBtC,EAAQ5hB,MAAMikB,UAAY,YAAY1e,KAAmB,IAAXoX,KAAkB,GAChE,GACF,EAoCFwH,EAAc,IAGhB7C,EAAG,iBAAiB,CAAC8C,EAAIxB,KACM,WAAzBzI,EAAOC,OAAO2J,QAClBpB,EAAcC,EAAS,IAGzBtB,EAAG,sBAAsB,KACvBG,IACAa,GAAW,IAGbhB,EAAG,cAAc,KACf,GAA6B,WAAzBnH,EAAOC,OAAO2J,OAAqB,OAEvC5J,EAAOkK,WAAWxoB,KAAK,iBAEvB,MAAMyoB,EAAkB,CACtBC,cAAe,EACfC,eAAgB,EAChBC,qBAAqB,EACrBC,aAAc,EACdC,kBAAkB,GAGpBj6B,OAAOqV,OAAOoa,EAAOC,OAAQkK,GAC7B55B,OAAOqV,OAAOoa,EAAOyK,eAAgBN,EAAgB,IAEvDhD,EAAG,QAAQ,KACoB,WAAzBnH,EAAOC,OAAO2J,SAClBtC,IACAF,EAAK,eAAgBpH,EAAQA,EAAOxQ,WAAU,IAGhD2X,EAAG,eAAe,KACa,WAAzBnH,EAAOC,OAAO2J,QAClBzB,GAAW,GAEf,EE7LAl2B,OAAOy4B,SHkxLP,UAAkB,OAAE1K,EAAM,GAAEmH,EAAE,aAAED,IAC9BlH,EAAO5pB,GAAK,KACZ,IAAIu0B,GAAiB,EAcrBzD,EAAa,CACX9wB,GAAI,CACFuqB,OAAQ,SACRZ,gBAAgB,EAChBa,qBAAiBvf,KAIrB,MAAMupB,EAAS,KACb5K,EAAO5pB,GAAK,IAAIsqB,GAAG,CACjBV,SACAW,OAAQX,EAAOC,OAAO7pB,GAAGuqB,OACzBZ,eAAgBC,EAAOC,OAAO7pB,GAAG2pB,gBACjC,EAGJ,IAAIyG,EACAqE,EAEJ1D,EAAG,cAAc,KACf,GAA6B,OAAzBnH,EAAOC,OAAO2J,OAAiB,OACnC,IAjCF,WACE,IACE,MAAMtzB,EAASmN,SAASC,cAAc,UACtC,QACIzR,OAAO64B,wBACRx0B,EAAOiO,WAAW,UAAYjO,EAAOiO,WAAW,sBAErD,CAAE,MAAO0kB,GACP,OAAO,CACT,CACF,CAuBO8B,GAEH,YADAJ,GAAiB,GAInB3K,EAAOkK,WAAWxoB,KAAK,GAAGse,EAAOC,OAAO+K,4BACxC,MAAMb,EAAkB,CACtBG,qBAAqB,GAEvB/5B,OAAOqV,OAAOoa,EAAOC,OAAQkK,GAC7B55B,OAAOqV,OAAOoa,EAAOyK,eAAgBN,EAAgB,IAEvDhD,EAAG,QAAQ,KACoB,OAAzBnH,EAAOC,OAAO2J,QAAmBe,GAAkB3K,EAAO0G,aAEzD1G,EAAO5pB,IACVw0B,GACF,IAEFzD,EAAG,UAAU,KACkB,OAAzBnH,EAAOC,OAAO2J,QAAmBe,GAAkB3K,EAAO0G,aAE9D1G,EAAO5pB,GAAGsrB,QAAQ,IAGpByF,EAAG,gBAAgB,KACjB,GAA6B,OAAzBnH,EAAOC,OAAO2J,QAAmBe,GAAkB3K,EAAO0G,YAC5D,OAIF,IAAIuE,EACAC,EACAC,EALCnL,EAAO5pB,IACVw0B,IAKF,IACIQ,EADA3E,GAAoB,EA6BxB,GA3BAzG,EAAO2G,OAAO1sB,SAAQ,CAACstB,EAASsC,KAE9B,MAAMrH,EAAW+E,EAAQ/E,SACrBxC,EAAOC,OAAOoL,SAA0C,IAA/Bv6B,KAAKw6B,MAAiB,IAAX9I,KACtCiE,GAAoB,IAGnBjE,EAAW,GAAKA,EAAW,GACd,IAAbA,GAAkBxC,EAAOwC,SAAWqI,KAErCI,EAAOpB,EACPqB,EAAKrB,EAAa,EAClBsB,EAAqB3I,EACrB4I,EAAcH,IAGbzI,EAAW,GAAKA,GAAY,GACf,IAAbA,GAAkBxC,EAAOwC,SAAWqI,KAErCI,EAAOpB,EAAa,EACpBqB,EAAKrB,EACLsB,EAAqB,EAAI3I,EACzB4I,EAAcF,EAChB,IAGFL,EAAmB7K,EAAOwC,UAAY,OAClB,IAATyI,QAAsC,IAAPC,EACxC,OAEFzE,EACEA,GACA31B,KAAKw6B,MAAMH,KAAwBA,EACrC,MAAMI,EAAUz6B,KAAKiI,IAAIqyB,EAAapL,EAAOI,aACvCoL,EAAQ16B,KAAKmI,IAAImyB,EAAapL,EAAOI,aACtCJ,EAAOC,OAAOC,MAAQsL,IAAUD,IACnCN,EAAOM,EACPL,EAAKM,GAGPxL,EAAO5pB,GAAGiwB,YACR4E,EACAC,EACAC,EACA3E,EACAC,EACD,IAEHU,EAAG,iBAAiB,CAAC8C,EAAIxB,KACM,OAAzBzI,EAAOC,OAAO2J,QAAmBe,GAAkB3K,EAAO0G,cAE9DF,EAA0BiC,EAAW,IAAMzI,EAAOC,OAAOoL,QAAO,IAElElE,EAAG,0BAA0B,KAEA,OAAzBnH,EAAOC,OAAO2J,QACde,IACC3K,EAAO6D,aACR7D,EAAO0G,aAGL1G,EAAO5pB,IAAM4pB,EAAO5pB,GAAGysB,cACzB7C,EAAO5pB,GAAGysB,cACZ,IAEFsE,EAAG,iBAAiB,KACW,OAAzBnH,EAAOC,OAAO2J,QAAmBe,GACjC3K,EAAO5pB,KACT4pB,EAAO0G,aAAc,EACrB1G,EAAO5pB,GAAG4wB,UACVhH,EAAO5pB,GAAK,KACd,GAEJ,EG/5LAnE,OAAOw5B,eDKQ,UAAwB,OAAEzL,EAAM,aAAEkH,EAAY,GAAEC,IAC7DD,EAAa,CACXwE,eAAgB,CACd5sB,MAAO,KAsEXqoB,EAAG,cAAc,KACf,GAA6B,aAAzBnH,EAAOC,OAAO2J,OAAuB,OAEzC5J,EAAOkK,WAAWxoB,KAAK,mBAEvB,MAAMyoB,EAAkB,CACtBG,qBAAqB,EACrBqB,SAAU,CAAEC,SAAS,IAGvBr7B,OAAOqV,OAAOoa,EAAOC,OAAQkK,GAC7B55B,OAAOqV,OAAOoa,EAAOyK,eAAgBN,EAAgB,IAEvDhD,EAAG,QAAQ,KACoB,aAAzBnH,EAAOC,OAAO2J,QA/ElB5J,EAAO2G,OAAO1sB,SAASstB,IACrB,MAAME,EAAUF,EAAQC,cAAc,0BACtC,IAAKC,EAAS,OACd,MAAMC,EAASD,EAAQE,mBACjBC,EAAmBnkB,SAASC,cAAc,OAChDkkB,EAAiBC,UAAU32B,IAAI,gCAC/B,IAAK,IAAImJ,EAAI,EAAGA,EAAI2lB,EAAOC,OAAOyL,eAAe5sB,MAAOzE,GAAK,EAAG,CAC9D,MAAMytB,EAAMrkB,SAASC,cAAc,OACnCokB,EAAID,UAAU32B,IAAI,+BAClB42B,EAAIC,YAAYN,EAAQO,aACxBJ,EAAiBG,YAAYD,EAC/B,CACIJ,EACFD,EAAQQ,WAAWC,aAAaN,EAAkBF,GAElDD,EAAQQ,WAAWF,YAAYH,EACjC,GAgEY,IAGhBT,EAAG,eAAe,KACa,aAAzBnH,EAAOC,OAAO2J,SA/DlB5J,EAAOiB,GAAGiC,iBAAiB,0BAA0BjpB,SAASwtB,IAC5DA,EAAQ5hB,MAAMlC,MAAQ,GAAGqc,EAAOrc,UAChC8jB,EAAQ5hB,MAAMjC,OAAS,GAAGoc,EAAOpc,UAAU,IAE7Coc,EAAOiB,GACJiC,iBAAiB,+BACjBjpB,SAASstB,IACRA,EACGrE,iBAAiB,gCACjBjpB,SAAQ,CAACmuB,EAASC,KACjB,MAAMwD,EAAoB,IAAM7L,EAAOC,OAAOyL,eAAe5sB,MACvDwpB,EAAWF,EAAQZ,cAAc,0BACP,aAA5BxH,EAAOC,OAAOsI,WAChBH,EAAQviB,MAAMjC,OACZ,IAAMoc,EAAOC,OAAOyL,eAAe5sB,MADd,IAGvBspB,EAAQviB,MAAM2L,IACX,IAAMwO,EAAOC,OAAOyL,eAAe5sB,MAASupB,EAD3B,IAGpBC,EAASziB,MAAM2L,IAAM,IAAI,IAAM6W,OAE/BD,EAAQviB,MAAMlC,MACZ,IAAMqc,EAAOC,OAAOyL,eAAe5sB,MADf,IAGtBspB,EAAQviB,MAAMwL,KACX,IAAM2O,EAAOC,OAAOyL,eAAe5sB,MAASupB,EAD1B,IAGrBC,EAASziB,MAAMwL,KAAO,IAAI,IAAMgX,MAGlCC,EAASlH,aAAa,uBAAwB,OAE9CgH,EAAQhH,aACN,uBAEEyK,GACCxD,EAAe,IACfA,EAAe,GAAM,EAAI,IAAO,GAHnC,IAKD,GACD,IAwBG,GAEf,EC/FAp2B,OAAO65B,eCJQ,UAAwB,OAAE9L,EAAM,GAAEmH,EAAE,aAAED,IACnDA,EAAa,CACX6E,eAAgB,CACdC,YAAa,IACbC,UAAW,GACXC,WAAY,KAGhB/E,EAAG,cAAc,KACf,GAA6B,aAAzBnH,EAAOC,OAAO2J,OAAuB,OACzC5J,EAAOkK,WAAWxoB,KAAK,GAAGse,EAAOC,OAAO+K,kCACxC,MAAMb,EAAkB,CACtBG,qBAAqB,EACrB6B,gBAAgB,GAGlB57B,OAAOqV,OAAOoa,EAAOC,OAAQkK,GAC7B55B,OAAOqV,OAAOoa,EAAOyK,eAAgBN,EAAgB,IAEvDhD,EAAG,YAAY,KACb,GAA6B,aAAzBnH,EAAOC,OAAO2J,OAAuB,OACzC,MAAM,UAAEqC,EAAS,YAAED,GAAgBhM,EAAOC,OAAO8L,eAC3CG,EAAap7B,KAAKmI,IACtBnI,KAAKiI,IAAIinB,EAAOC,OAAO8L,eAAeG,WAAY,GAClD,GAEIE,EAAmB,CACvB,EAAG,EACH,EAAG,EACH,EAAG,IACHF,GACIG,EAAoB,CACxB,EAAG,GACH,EAAG,GACH,EAAG,IACHH,GAEII,EAAYtM,EAAO2G,OAAO3zB,OAEhC,IAAK,IAAIqH,EAAI,EAAGA,EAAI2lB,EAAO2G,OAAO3zB,OAAQqH,GAAK,EAAG,CAChD,MAAMktB,EAAUvH,EAAO2G,OAAOtsB,GACxB0vB,EAAgB/J,EAAO2G,OAAOtsB,GAAGmoB,SACjC+J,EAAcz7B,KAAKuf,IAAI0Z,GAC7B,IAAIyC,EAAS,EAETD,EAAc,IAChBC,EAA6B,IAAnBD,EAAc,GAAWH,EAAmB,GAExD,MAAMK,EAAalF,EAAQrE,iBACzB,oCAEI1T,EACJua,EACAyC,EACAH,GACCrM,EAAO0M,cAAgB,EAAI,GAJZ,IAOZ74B,EAAQ,EAAI04B,EAAcN,EAC1BU,EAASL,EAAYx7B,KAAKuf,IAAIvf,KAAKw6B,MAAMvB,IAC/CxC,EAAQ1hB,MAAMikB,UAAY,cAActa,YAAoB3b,KAC5D0zB,EAAQ1hB,MAAM8mB,OAASA,EAErBpF,EAAQ1hB,MAAM+mB,QADZL,EAAcL,EAAa,EACL,EAEA,EAG1BO,EAAWxyB,SAAS4yB,IAClBA,EAAUhnB,MAAM+mB,QAAU,EAAIL,EAAcP,CAAW,GAE3D,KAGF7E,EAAG,iBAAiB,CAAC9b,EAAGod,KACtB,GAA6B,aAAzBzI,EAAOC,OAAO2J,OAClB,IAAK,IAAIvvB,EAAI,EAAGA,EAAI2lB,EAAO2G,OAAO3zB,OAAQqH,GAAK,EAAG,CAChD,MAAMktB,EAAUvH,EAAO2G,OAAOtsB,GACxBoyB,EAAalF,EAAQrE,iBACzB,oCAEFqE,EAAQ1hB,MAAM8iB,mBAAqB,GAAGF,MACtCgE,EAAWxyB,SAAS4yB,IAClBA,EAAUhnB,MAAM8iB,mBAAqB,GAAGF,KAAY,GAExD,IAEJ","sources":["webpack://wonder/webpack/bootstrap","webpack://wonder/webpack/runtime/make namespace object","webpack://wonder/./src/build/lib/swiperjs/swiper-gl.esm.js","webpack://wonder/./src/build/lib/swiperjs/effect-slicer.esm.js","webpack://wonder/./src/build/lib/swiperjs/effect-shutters.esm.js","webpack://wonder/./src/export/lib/swiperjs/swiper-plugin.js","webpack://wonder/./src/build/lib/swiperjs/effect-carousel.esm.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/**\n * UI Initiative Swiper GL\n *\n * Stunning WebGL image transitions\n *\n * https://uiinitiative.com\n *\n * Copyright 2024 UI Initiative\n *\n * Released under the UI Initiative Regular License\n *\n * April 25, 2024\n */\n\n/**\n * Calculates the length of a vec3\n *\n * @param {vec3} a vector to calculate length of\n * @returns {Number} length of a\n */\nfunction length(a) {\n let x = a[0];\n let y = a[1];\n let z = a[2];\n return Math.sqrt(x * x + y * y + z * z);\n}\n\n/**\n * Copy the values from one vec3 to another\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the source vector\n * @returns {vec3} out\n */\nfunction copy$4(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n return out;\n}\n\n/**\n * Set the components of a vec3 to the given values\n *\n * @param {vec3} out the receiving vector\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @returns {vec3} out\n */\nfunction set$4(out, x, y, z) {\n out[0] = x;\n out[1] = y;\n out[2] = z;\n return out;\n}\n\n/**\n * Adds two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {vec3} out\n */\nfunction add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n return out;\n}\n\n/**\n * Subtracts vector b from vector a\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {vec3} out\n */\nfunction subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n return out;\n}\n\n/**\n * Multiplies two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {vec3} out\n */\nfunction multiply$3(out, a, b) {\n out[0] = a[0] * b[0];\n out[1] = a[1] * b[1];\n out[2] = a[2] * b[2];\n return out;\n}\n\n/**\n * Divides two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {vec3} out\n */\nfunction divide(out, a, b) {\n out[0] = a[0] / b[0];\n out[1] = a[1] / b[1];\n out[2] = a[2] / b[2];\n return out;\n}\n\n/**\n * Scales a vec3 by a scalar number\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the vector to scale\n * @param {Number} b amount to scale the vector by\n * @returns {vec3} out\n */\nfunction scale$3(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n return out;\n}\n\n/**\n * Calculates the euclidian distance between two vec3's\n *\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {Number} distance between a and b\n */\nfunction distance(a, b) {\n let x = b[0] - a[0];\n let y = b[1] - a[1];\n let z = b[2] - a[2];\n return Math.sqrt(x * x + y * y + z * z);\n}\n\n/**\n * Calculates the squared euclidian distance between two vec3's\n *\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {Number} squared distance between a and b\n */\nfunction squaredDistance(a, b) {\n let x = b[0] - a[0];\n let y = b[1] - a[1];\n let z = b[2] - a[2];\n return x * x + y * y + z * z;\n}\n\n/**\n * Calculates the squared length of a vec3\n *\n * @param {vec3} a vector to calculate squared length of\n * @returns {Number} squared length of a\n */\nfunction squaredLength(a) {\n let x = a[0];\n let y = a[1];\n let z = a[2];\n return x * x + y * y + z * z;\n}\n\n/**\n * Negates the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a vector to negate\n * @returns {vec3} out\n */\nfunction negate(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n out[2] = -a[2];\n return out;\n}\n\n/**\n * Returns the inverse of the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a vector to invert\n * @returns {vec3} out\n */\nfunction inverse(out, a) {\n out[0] = 1.0 / a[0];\n out[1] = 1.0 / a[1];\n out[2] = 1.0 / a[2];\n return out;\n}\n\n/**\n * Normalize a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a vector to normalize\n * @returns {vec3} out\n */\nfunction normalize$2(out, a) {\n let x = a[0];\n let y = a[1];\n let z = a[2];\n let len = x * x + y * y + z * z;\n if (len > 0) {\n //TODO: evaluate use of glm_invsqrt here?\n len = 1 / Math.sqrt(len);\n }\n out[0] = a[0] * len;\n out[1] = a[1] * len;\n out[2] = a[2] * len;\n return out;\n}\n\n/**\n * Calculates the dot product of two vec3's\n *\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {Number} dot product of a and b\n */\nfunction dot$2(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\n/**\n * Computes the cross product of two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {vec3} out\n */\nfunction cross(out, a, b) {\n let ax = a[0],\n ay = a[1],\n az = a[2];\n let bx = b[0],\n by = b[1],\n bz = b[2];\n\n out[0] = ay * bz - az * by;\n out[1] = az * bx - ax * bz;\n out[2] = ax * by - ay * bx;\n return out;\n}\n\n/**\n * Performs a linear interpolation between two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @param {Number} t interpolation amount between the two inputs\n * @returns {vec3} out\n */\nfunction lerp(out, a, b, t) {\n let ax = a[0];\n let ay = a[1];\n let az = a[2];\n out[0] = ax + t * (b[0] - ax);\n out[1] = ay + t * (b[1] - ay);\n out[2] = az + t * (b[2] - az);\n return out;\n}\n\n/**\n * Transforms the vec3 with a mat4.\n * 4th vector component is implicitly '1'\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the vector to transform\n * @param {mat4} m matrix to transform with\n * @returns {vec3} out\n */\nfunction transformMat4(out, a, m) {\n let x = a[0],\n y = a[1],\n z = a[2];\n let w = m[3] * x + m[7] * y + m[11] * z + m[15];\n w = w || 1.0;\n out[0] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w;\n out[1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w;\n out[2] = (m[2] * x + m[6] * y + m[10] * z + m[14]) / w;\n return out;\n}\n\n/**\n * Same as above but doesn't apply translation.\n * Useful for rays.\n */\nfunction scaleRotateMat4(out, a, m) {\n let x = a[0],\n y = a[1],\n z = a[2];\n let w = m[3] * x + m[7] * y + m[11] * z + m[15];\n w = w || 1.0;\n out[0] = (m[0] * x + m[4] * y + m[8] * z) / w;\n out[1] = (m[1] * x + m[5] * y + m[9] * z) / w;\n out[2] = (m[2] * x + m[6] * y + m[10] * z) / w;\n return out;\n}\n\n/**\n * Transforms the vec3 with a mat3.\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the vector to transform\n * @param {mat3} m the 3x3 matrix to transform with\n * @returns {vec3} out\n */\nfunction transformMat3(out, a, m) {\n let x = a[0],\n y = a[1],\n z = a[2];\n out[0] = x * m[0] + y * m[3] + z * m[6];\n out[1] = x * m[1] + y * m[4] + z * m[7];\n out[2] = x * m[2] + y * m[5] + z * m[8];\n return out;\n}\n\n/**\n * Transforms the vec3 with a quat\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the vector to transform\n * @param {quat} q quaternion to transform with\n * @returns {vec3} out\n */\nfunction transformQuat(out, a, q) {\n // benchmarks: https://jsperf.com/quaternion-transform-vec3-implementations-fixed\n\n let x = a[0],\n y = a[1],\n z = a[2];\n let qx = q[0],\n qy = q[1],\n qz = q[2],\n qw = q[3];\n\n let uvx = qy * z - qz * y;\n let uvy = qz * x - qx * z;\n let uvz = qx * y - qy * x;\n\n let uuvx = qy * uvz - qz * uvy;\n let uuvy = qz * uvx - qx * uvz;\n let uuvz = qx * uvy - qy * uvx;\n\n let w2 = qw * 2;\n uvx *= w2;\n uvy *= w2;\n uvz *= w2;\n\n uuvx *= 2;\n uuvy *= 2;\n uuvz *= 2;\n\n out[0] = x + uvx + uuvx;\n out[1] = y + uvy + uuvy;\n out[2] = z + uvz + uuvz;\n return out;\n}\n\n/**\n * Get the angle between two 3D vectors\n * @param {vec3} a The first operand\n * @param {vec3} b The second operand\n * @returns {Number} The angle in radians\n */\nconst angle = (function () {\n const tempA = [0, 0, 0];\n const tempB = [0, 0, 0];\n\n return function (a, b) {\n copy$4(tempA, a);\n copy$4(tempB, b);\n\n normalize$2(tempA, tempA);\n normalize$2(tempB, tempB);\n\n let cosine = dot$2(tempA, tempB);\n\n if (cosine > 1.0) {\n return 0;\n } else if (cosine < -1.0) {\n return Math.PI;\n } else {\n return Math.acos(cosine);\n }\n };\n})();\n\n/**\n * Returns whether or not the vectors have exactly the same elements in the same position (when compared with ===)\n *\n * @param {vec3} a The first vector.\n * @param {vec3} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\nfunction exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2];\n}\n\nclass Vec3 extends Array {\n constructor(x = 0, y = x, z = x) {\n super(x, y, z);\n return this;\n }\n\n get x() {\n return this[0];\n }\n\n get y() {\n return this[1];\n }\n\n get z() {\n return this[2];\n }\n\n set x(v) {\n this[0] = v;\n }\n\n set y(v) {\n this[1] = v;\n }\n\n set z(v) {\n this[2] = v;\n }\n\n set(x, y = x, z = x) {\n if (x.length) return this.copy(x);\n set$4(this, x, y, z);\n return this;\n }\n\n copy(v) {\n copy$4(this, v);\n return this;\n }\n\n add(va, vb) {\n if (vb) add(this, va, vb);\n else add(this, this, va);\n return this;\n }\n\n sub(va, vb) {\n if (vb) subtract(this, va, vb);\n else subtract(this, this, va);\n return this;\n }\n\n multiply(v) {\n if (v.length) multiply$3(this, this, v);\n else scale$3(this, this, v);\n return this;\n }\n\n divide(v) {\n if (v.length) divide(this, this, v);\n else scale$3(this, this, 1 / v);\n return this;\n }\n\n inverse(v = this) {\n inverse(this, v);\n return this;\n }\n\n // Can't use 'length' as Array.prototype uses it\n len() {\n return length(this);\n }\n\n distance(v) {\n if (v) return distance(this, v);\n else return length(this);\n }\n\n squaredLen() {\n return squaredLength(this);\n }\n\n squaredDistance(v) {\n if (v) return squaredDistance(this, v);\n else return squaredLength(this);\n }\n\n negate(v = this) {\n negate(this, v);\n return this;\n }\n\n cross(va, vb) {\n if (vb) cross(this, va, vb);\n else cross(this, this, va);\n return this;\n }\n\n scale(v) {\n scale$3(this, this, v);\n return this;\n }\n\n normalize() {\n normalize$2(this, this);\n return this;\n }\n\n dot(v) {\n return dot$2(this, v);\n }\n\n equals(v) {\n return exactEquals(this, v);\n }\n\n applyMatrix3(mat3) {\n transformMat3(this, this, mat3);\n return this;\n }\n\n applyMatrix4(mat4) {\n transformMat4(this, this, mat4);\n return this;\n }\n\n scaleRotateMatrix4(mat4) {\n scaleRotateMat4(this, this, mat4);\n return this;\n }\n\n applyQuaternion(q) {\n transformQuat(this, this, q);\n return this;\n }\n\n angle(v) {\n return angle(this, v);\n }\n\n lerp(v, t) {\n lerp(this, this, v, t);\n return this;\n }\n\n clone() {\n return new Vec3(this[0], this[1], this[2]);\n }\n\n fromArray(a, o = 0) {\n this[0] = a[o];\n this[1] = a[o + 1];\n this[2] = a[o + 2];\n return this;\n }\n\n toArray(a = [], o = 0) {\n a[o] = this[0];\n a[o + 1] = this[1];\n a[o + 2] = this[2];\n return a;\n }\n\n transformDirection(mat4) {\n const x = this[0];\n const y = this[1];\n const z = this[2];\n\n this[0] = mat4[0] * x + mat4[4] * y + mat4[8] * z;\n this[1] = mat4[1] * x + mat4[5] * y + mat4[9] * z;\n this[2] = mat4[2] * x + mat4[6] * y + mat4[10] * z;\n\n return this.normalize();\n }\n}\n\n// attribute params\n\nconst tempVec3$1 = new Vec3();\n\nlet ID$4 = 1;\nlet ATTR_ID = 1;\n\n// To stop inifinite warnings\nlet isBoundsWarned = false;\n\nclass Geometry {\n constructor(gl, attributes = {}) {\n if (!gl.canvas) console.error('gl not passed as first argument to Geometry');\n this.gl = gl;\n this.attributes = attributes;\n this.id = ID$4++;\n\n // Store one VAO per program attribute locations order\n this.VAOs = {};\n\n this.drawRange = { start: 0, count: 0 };\n this.instancedCount = 0;\n\n // Unbind current VAO so that new buffers don't get added to active mesh\n this.gl.renderer.bindVertexArray(null);\n this.gl.renderer.currentGeometry = null;\n\n // Alias for state store to avoid redundant calls for global state\n this.glState = this.gl.renderer.state;\n\n // create the buffers\n for (let key in attributes) {\n this.addAttribute(key, attributes[key]);\n }\n }\n\n addAttribute(key, attr) {\n this.attributes[key] = attr;\n\n // Set options\n attr.id = ATTR_ID++; // TODO: currently unused, remove?\n attr.size = attr.size || 1;\n attr.type =\n attr.type ||\n (attr.data.constructor === Float32Array\n ? this.gl.FLOAT\n : attr.data.constructor === Uint16Array\n ? this.gl.UNSIGNED_SHORT\n : this.gl.UNSIGNED_INT); // Uint32Array\n attr.target = key === 'index' ? this.gl.ELEMENT_ARRAY_BUFFER : this.gl.ARRAY_BUFFER;\n attr.normalized = attr.normalized || false;\n attr.stride = attr.stride || 0;\n attr.offset = attr.offset || 0;\n attr.count = attr.count || (attr.stride ? attr.data.byteLength / attr.stride : attr.data.length / attr.size);\n attr.divisor = attr.instanced || 0;\n attr.needsUpdate = false;\n attr.usage = attr.usage || this.gl.STATIC_DRAW;\n\n if (!attr.buffer) {\n // Push data to buffer\n this.updateAttribute(attr);\n }\n\n // Update geometry counts. If indexed, ignore regular attributes\n if (attr.divisor) {\n this.isInstanced = true;\n if (this.instancedCount && this.instancedCount !== attr.count * attr.divisor) {\n console.warn('geometry has multiple instanced buffers of different length');\n return (this.instancedCount = Math.min(this.instancedCount, attr.count * attr.divisor));\n }\n this.instancedCount = attr.count * attr.divisor;\n } else if (key === 'index') {\n this.drawRange.count = attr.count;\n } else if (!this.attributes.index) {\n this.drawRange.count = Math.max(this.drawRange.count, attr.count);\n }\n }\n\n updateAttribute(attr) {\n const isNewBuffer = !attr.buffer;\n if (isNewBuffer) attr.buffer = this.gl.createBuffer();\n if (this.glState.boundBuffer !== attr.buffer) {\n this.gl.bindBuffer(attr.target, attr.buffer);\n this.glState.boundBuffer = attr.buffer;\n }\n if (isNewBuffer) {\n this.gl.bufferData(attr.target, attr.data, attr.usage);\n } else {\n this.gl.bufferSubData(attr.target, 0, attr.data);\n }\n attr.needsUpdate = false;\n }\n\n setIndex(value) {\n this.addAttribute('index', value);\n }\n\n setDrawRange(start, count) {\n this.drawRange.start = start;\n this.drawRange.count = count;\n }\n\n setInstancedCount(value) {\n this.instancedCount = value;\n }\n\n createVAO(program) {\n this.VAOs[program.attributeOrder] = this.gl.renderer.createVertexArray();\n this.gl.renderer.bindVertexArray(this.VAOs[program.attributeOrder]);\n this.bindAttributes(program);\n }\n\n bindAttributes(program) {\n // Link all attributes to program using gl.vertexAttribPointer\n program.attributeLocations.forEach((location, { name, type }) => {\n // If geometry missing a required shader attribute\n if (!this.attributes[name]) {\n console.warn(`active attribute ${name} not being supplied`);\n return;\n }\n\n const attr = this.attributes[name];\n\n this.gl.bindBuffer(attr.target, attr.buffer);\n this.glState.boundBuffer = attr.buffer;\n\n // For matrix attributes, buffer needs to be defined per column\n let numLoc = 1;\n if (type === 35674) numLoc = 2; // mat2\n if (type === 35675) numLoc = 3; // mat3\n if (type === 35676) numLoc = 4; // mat4\n\n const size = attr.size / numLoc;\n const stride = numLoc === 1 ? 0 : numLoc * numLoc * numLoc;\n const offset = numLoc === 1 ? 0 : numLoc * numLoc;\n\n for (let i = 0; i < numLoc; i++) {\n this.gl.vertexAttribPointer(location + i, size, attr.type, attr.normalized, attr.stride + stride, attr.offset + i * offset);\n this.gl.enableVertexAttribArray(location + i);\n\n // For instanced attributes, divisor needs to be set.\n // For firefox, need to set back to 0 if non-instanced drawn after instanced. Else won't render\n this.gl.renderer.vertexAttribDivisor(location + i, attr.divisor);\n }\n });\n\n // Bind indices if geometry indexed\n if (this.attributes.index) this.gl.bindBuffer(this.gl.ELEMENT_ARRAY_BUFFER, this.attributes.index.buffer);\n }\n\n draw({ program, mode = this.gl.TRIANGLES }) {\n if (this.gl.renderer.currentGeometry !== `${this.id}_${program.attributeOrder}`) {\n if (!this.VAOs[program.attributeOrder]) this.createVAO(program);\n this.gl.renderer.bindVertexArray(this.VAOs[program.attributeOrder]);\n this.gl.renderer.currentGeometry = `${this.id}_${program.attributeOrder}`;\n }\n\n // Check if any attributes need updating\n program.attributeLocations.forEach((location, { name }) => {\n const attr = this.attributes[name];\n if (attr.needsUpdate) this.updateAttribute(attr);\n });\n\n if (this.isInstanced) {\n if (this.attributes.index) {\n this.gl.renderer.drawElementsInstanced(\n mode,\n this.drawRange.count,\n this.attributes.index.type,\n this.attributes.index.offset + this.drawRange.start * 2,\n this.instancedCount\n );\n } else {\n this.gl.renderer.drawArraysInstanced(mode, this.drawRange.start, this.drawRange.count, this.instancedCount);\n }\n } else {\n if (this.attributes.index) {\n this.gl.drawElements(mode, this.drawRange.count, this.attributes.index.type, this.attributes.index.offset + this.drawRange.start * 2);\n } else {\n this.gl.drawArrays(mode, this.drawRange.start, this.drawRange.count);\n }\n }\n }\n\n getPosition() {\n // Use position buffer, or min/max if available\n const attr = this.attributes.position;\n // if (attr.min) return [...attr.min, ...attr.max];\n if (attr.data) return attr;\n if (isBoundsWarned) return;\n console.warn('No position buffer data found to compute bounds');\n return (isBoundsWarned = true);\n }\n\n computeBoundingBox(attr) {\n if (!attr) attr = this.getPosition();\n const array = attr.data;\n const stride = attr.stride ? attr.stride / array.BYTES_PER_ELEMENT : attr.size;\n\n if (!this.bounds) {\n this.bounds = {\n min: new Vec3(),\n max: new Vec3(),\n center: new Vec3(),\n scale: new Vec3(),\n radius: Infinity,\n };\n }\n\n const min = this.bounds.min;\n const max = this.bounds.max;\n const center = this.bounds.center;\n const scale = this.bounds.scale;\n\n min.set(+Infinity);\n max.set(-Infinity);\n\n // TODO: check size of position (eg triangle with Vec2)\n for (let i = 0, l = array.length; i < l; i += stride) {\n const x = array[i];\n const y = array[i + 1];\n const z = array[i + 2];\n\n min.x = Math.min(x, min.x);\n min.y = Math.min(y, min.y);\n min.z = Math.min(z, min.z);\n\n max.x = Math.max(x, max.x);\n max.y = Math.max(y, max.y);\n max.z = Math.max(z, max.z);\n }\n\n scale.sub(max, min);\n center.add(min, max).divide(2);\n }\n\n computeBoundingSphere(attr) {\n if (!attr) attr = this.getPosition();\n const array = attr.data;\n const stride = attr.stride ? attr.stride / array.BYTES_PER_ELEMENT : attr.size;\n\n if (!this.bounds) this.computeBoundingBox(attr);\n\n let maxRadiusSq = 0;\n for (let i = 0, l = array.length; i < l; i += stride) {\n tempVec3$1.fromArray(array, i);\n maxRadiusSq = Math.max(maxRadiusSq, this.bounds.center.squaredDistance(tempVec3$1));\n }\n\n this.bounds.radius = Math.sqrt(maxRadiusSq);\n }\n\n remove() {\n for (let key in this.VAOs) {\n this.gl.renderer.deleteVertexArray(this.VAOs[key]);\n delete this.VAOs[key];\n }\n for (let key in this.attributes) {\n this.gl.deleteBuffer(this.attributes[key].buffer);\n delete this.attributes[key];\n }\n }\n}\n\n// TODO: upload empty texture if null ? maybe not\n// TODO: upload identity matrix if null ?\n// TODO: sampler Cube\n\nlet ID$3 = 1;\n\n// cache of typed arrays used to flatten uniform arrays\nconst arrayCacheF32 = {};\n\nclass Program {\n constructor(\n gl,\n {\n vertex,\n fragment,\n uniforms = {},\n\n transparent = false,\n cullFace = gl.BACK,\n frontFace = gl.CCW,\n depthTest = true,\n depthWrite = true,\n depthFunc = gl.LESS,\n } = {}\n ) {\n if (!gl.canvas) console.error('gl not passed as fist argument to Program');\n this.gl = gl;\n this.uniforms = uniforms;\n this.id = ID$3++;\n\n if (!vertex) console.warn('vertex shader not supplied');\n if (!fragment) console.warn('fragment shader not supplied');\n\n // Store program state\n this.transparent = transparent;\n this.cullFace = cullFace;\n this.frontFace = frontFace;\n this.depthTest = depthTest;\n this.depthWrite = depthWrite;\n this.depthFunc = depthFunc;\n this.blendFunc = {};\n this.blendEquation = {};\n\n // set default blendFunc if transparent flagged\n if (this.transparent && !this.blendFunc.src) {\n if (this.gl.renderer.premultipliedAlpha) this.setBlendFunc(this.gl.ONE, this.gl.ONE_MINUS_SRC_ALPHA);\n else this.setBlendFunc(this.gl.SRC_ALPHA, this.gl.ONE_MINUS_SRC_ALPHA);\n }\n\n // compile vertex shader and log errors\n const vertexShader = gl.createShader(gl.VERTEX_SHADER);\n gl.shaderSource(vertexShader, vertex);\n gl.compileShader(vertexShader);\n if (gl.getShaderInfoLog(vertexShader) !== '') {\n console.warn(`${gl.getShaderInfoLog(vertexShader)}\\nVertex Shader\\n${addLineNumbers(vertex)}`);\n }\n\n // compile fragment shader and log errors\n const fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);\n gl.shaderSource(fragmentShader, fragment);\n gl.compileShader(fragmentShader);\n if (gl.getShaderInfoLog(fragmentShader) !== '') {\n console.warn(`${gl.getShaderInfoLog(fragmentShader)}\\nFragment Shader\\n${addLineNumbers(fragment)}`);\n }\n\n // compile program and log errors\n this.program = gl.createProgram();\n gl.attachShader(this.program, vertexShader);\n gl.attachShader(this.program, fragmentShader);\n gl.linkProgram(this.program);\n if (!gl.getProgramParameter(this.program, gl.LINK_STATUS)) {\n return console.warn(gl.getProgramInfoLog(this.program));\n }\n\n // Remove shader once linked\n gl.deleteShader(vertexShader);\n gl.deleteShader(fragmentShader);\n\n // Get active uniform locations\n this.uniformLocations = new Map();\n let numUniforms = gl.getProgramParameter(this.program, gl.ACTIVE_UNIFORMS);\n for (let uIndex = 0; uIndex < numUniforms; uIndex++) {\n let uniform = gl.getActiveUniform(this.program, uIndex);\n this.uniformLocations.set(uniform, gl.getUniformLocation(this.program, uniform.name));\n\n // split uniforms' names to separate array and struct declarations\n const split = uniform.name.match(/(\\w+)/g);\n\n uniform.uniformName = split[0];\n\n if (split.length === 3) {\n uniform.isStructArray = true;\n uniform.structIndex = Number(split[1]);\n uniform.structProperty = split[2];\n } else if (split.length === 2 && isNaN(Number(split[1]))) {\n uniform.isStruct = true;\n uniform.structProperty = split[1];\n }\n }\n\n // Get active attribute locations\n this.attributeLocations = new Map();\n const locations = [];\n const numAttribs = gl.getProgramParameter(this.program, gl.ACTIVE_ATTRIBUTES);\n for (let aIndex = 0; aIndex < numAttribs; aIndex++) {\n const attribute = gl.getActiveAttrib(this.program, aIndex);\n const location = gl.getAttribLocation(this.program, attribute.name);\n // Ignore special built-in inputs. eg gl_VertexID, gl_InstanceID\n if (location === -1) continue;\n locations[location] = attribute.name;\n this.attributeLocations.set(attribute, location);\n }\n this.attributeOrder = locations.join('');\n }\n\n setBlendFunc(src, dst, srcAlpha, dstAlpha) {\n this.blendFunc.src = src;\n this.blendFunc.dst = dst;\n this.blendFunc.srcAlpha = srcAlpha;\n this.blendFunc.dstAlpha = dstAlpha;\n if (src) this.transparent = true;\n }\n\n setBlendEquation(modeRGB, modeAlpha) {\n this.blendEquation.modeRGB = modeRGB;\n this.blendEquation.modeAlpha = modeAlpha;\n }\n\n applyState() {\n if (this.depthTest) this.gl.renderer.enable(this.gl.DEPTH_TEST);\n else this.gl.renderer.disable(this.gl.DEPTH_TEST);\n\n if (this.cullFace) this.gl.renderer.enable(this.gl.CULL_FACE);\n else this.gl.renderer.disable(this.gl.CULL_FACE);\n\n if (this.blendFunc.src) this.gl.renderer.enable(this.gl.BLEND);\n else this.gl.renderer.disable(this.gl.BLEND);\n\n if (this.cullFace) this.gl.renderer.setCullFace(this.cullFace);\n this.gl.renderer.setFrontFace(this.frontFace);\n this.gl.renderer.setDepthMask(this.depthWrite);\n this.gl.renderer.setDepthFunc(this.depthFunc);\n if (this.blendFunc.src)\n this.gl.renderer.setBlendFunc(this.blendFunc.src, this.blendFunc.dst, this.blendFunc.srcAlpha, this.blendFunc.dstAlpha);\n this.gl.renderer.setBlendEquation(this.blendEquation.modeRGB, this.blendEquation.modeAlpha);\n }\n\n use({ flipFaces = false } = {}) {\n let textureUnit = -1;\n const programActive = this.gl.renderer.state.currentProgram === this.id;\n\n // Avoid gl call if program already in use\n if (!programActive) {\n this.gl.useProgram(this.program);\n this.gl.renderer.state.currentProgram = this.id;\n }\n\n // Set only the active uniforms found in the shader\n this.uniformLocations.forEach((location, activeUniform) => {\n let name = activeUniform.uniformName;\n\n // get supplied uniform\n let uniform = this.uniforms[name];\n\n // For structs, get the specific property instead of the entire object\n if (activeUniform.isStruct) {\n uniform = uniform[activeUniform.structProperty];\n name += `.${activeUniform.structProperty}`;\n }\n if (activeUniform.isStructArray) {\n uniform = uniform[activeUniform.structIndex][activeUniform.structProperty];\n name += `[${activeUniform.structIndex}].${activeUniform.structProperty}`;\n }\n\n if (!uniform) {\n return warn(`Active uniform ${name} has not been supplied`);\n }\n\n if (uniform && uniform.value === undefined) {\n return warn(`${name} uniform is missing a value parameter`);\n }\n\n if (uniform.value.texture) {\n textureUnit = textureUnit + 1;\n\n // Check if texture needs to be updated\n uniform.value.update(textureUnit);\n return setUniform(this.gl, activeUniform.type, location, textureUnit);\n }\n\n // For texture arrays, set uniform as an array of texture units instead of just one\n if (uniform.value.length && uniform.value[0].texture) {\n const textureUnits = [];\n uniform.value.forEach((value) => {\n textureUnit = textureUnit + 1;\n value.update(textureUnit);\n textureUnits.push(textureUnit);\n });\n\n return setUniform(this.gl, activeUniform.type, location, textureUnits);\n }\n\n setUniform(this.gl, activeUniform.type, location, uniform.value);\n });\n\n this.applyState();\n if (flipFaces) this.gl.renderer.setFrontFace(this.frontFace === this.gl.CCW ? this.gl.CW : this.gl.CCW);\n }\n\n remove() {\n this.gl.deleteProgram(this.program);\n }\n}\n\nfunction setUniform(gl, type, location, value) {\n value = value.length ? flatten(value) : value;\n const setValue = gl.renderer.state.uniformLocations.get(location);\n\n // Avoid redundant uniform commands\n if (value.length) {\n if (setValue === undefined || setValue.length !== value.length) {\n // clone array to store as cache\n gl.renderer.state.uniformLocations.set(location, value.slice(0));\n } else {\n if (arraysEqual(setValue, value)) return;\n\n // Update cached array values\n setValue.set ? setValue.set(value) : setArray(setValue, value);\n gl.renderer.state.uniformLocations.set(location, setValue);\n }\n } else {\n if (setValue === value) return;\n gl.renderer.state.uniformLocations.set(location, value);\n }\n\n switch (type) {\n case 5126:\n return value.length ? gl.uniform1fv(location, value) : gl.uniform1f(location, value); // FLOAT\n case 35664:\n return gl.uniform2fv(location, value); // FLOAT_VEC2\n case 35665:\n return gl.uniform3fv(location, value); // FLOAT_VEC3\n case 35666:\n return gl.uniform4fv(location, value); // FLOAT_VEC4\n case 35670: // BOOL\n case 5124: // INT\n case 35678: // SAMPLER_2D\n case 35680:\n return value.length ? gl.uniform1iv(location, value) : gl.uniform1i(location, value); // SAMPLER_CUBE\n case 35671: // BOOL_VEC2\n case 35667:\n return gl.uniform2iv(location, value); // INT_VEC2\n case 35672: // BOOL_VEC3\n case 35668:\n return gl.uniform3iv(location, value); // INT_VEC3\n case 35673: // BOOL_VEC4\n case 35669:\n return gl.uniform4iv(location, value); // INT_VEC4\n case 35674:\n return gl.uniformMatrix2fv(location, false, value); // FLOAT_MAT2\n case 35675:\n return gl.uniformMatrix3fv(location, false, value); // FLOAT_MAT3\n case 35676:\n return gl.uniformMatrix4fv(location, false, value); // FLOAT_MAT4\n }\n}\n\nfunction addLineNumbers(string) {\n let lines = string.split('\\n');\n for (let i = 0; i < lines.length; i++) {\n lines[i] = i + 1 + ': ' + lines[i];\n }\n return lines.join('\\n');\n}\n\nfunction flatten(a) {\n const arrayLen = a.length;\n const valueLen = a[0].length;\n if (valueLen === undefined) return a;\n const length = arrayLen * valueLen;\n let value = arrayCacheF32[length];\n if (!value) arrayCacheF32[length] = value = new Float32Array(length);\n for (let i = 0; i < arrayLen; i++) value.set(a[i], i * valueLen);\n return value;\n}\n\nfunction arraysEqual(a, b) {\n if (a.length !== b.length) return false;\n for (let i = 0, l = a.length; i < l; i++) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n}\n\nfunction setArray(a, b) {\n for (let i = 0, l = a.length; i < l; i++) {\n a[i] = b[i];\n }\n}\n\nlet warnCount = 0;\nfunction warn(message) {\n if (warnCount > 100) return;\n console.warn(message);\n warnCount++;\n if (warnCount > 100) console.warn('More than 100 program warnings - stopping logs.');\n}\n\n// TODO: Handle context loss https://www.khronos.org/webgl/wiki/HandlingContextLost\n\n// Not automatic - devs to use these methods manually\n// gl.colorMask( colorMask, colorMask, colorMask, colorMask );\n// gl.clearColor( r, g, b, a );\n// gl.stencilMask( stencilMask );\n// gl.stencilFunc( stencilFunc, stencilRef, stencilMask );\n// gl.stencilOp( stencilFail, stencilZFail, stencilZPass );\n// gl.clearStencil( stencil );\n\nconst tempVec3 = new Vec3();\nlet ID$2 = 1;\n\nclass Renderer {\n constructor({\n canvas = document.createElement('canvas'),\n width = 300,\n height = 150,\n dpr = 1,\n alpha = false,\n depth = true,\n stencil = false,\n antialias = false,\n premultipliedAlpha = false,\n preserveDrawingBuffer = false,\n powerPreference = 'default',\n autoClear = true,\n webgl = 2,\n } = {}) {\n const attributes = { alpha, depth, stencil, antialias, premultipliedAlpha, preserveDrawingBuffer, powerPreference };\n this.dpr = dpr;\n this.alpha = alpha;\n this.color = true;\n this.depth = depth;\n this.stencil = stencil;\n this.premultipliedAlpha = premultipliedAlpha;\n this.autoClear = autoClear;\n this.id = ID$2++;\n\n // Attempt WebGL2 unless forced to 1, if not supported fallback to WebGL1\n if (webgl === 2) this.gl = canvas.getContext('webgl2', attributes);\n this.isWebgl2 = !!this.gl;\n if (!this.gl) this.gl = canvas.getContext('webgl', attributes);\n if (!this.gl) console.error('unable to create webgl context');\n\n // Attach renderer to gl so that all classes have access to internal state functions\n this.gl.renderer = this;\n\n // initialise size values\n this.setSize(width, height);\n\n // gl state stores to avoid redundant calls on methods used internally\n this.state = {};\n this.state.blendFunc = { src: this.gl.ONE, dst: this.gl.ZERO };\n this.state.blendEquation = { modeRGB: this.gl.FUNC_ADD };\n this.state.cullFace = null;\n this.state.frontFace = this.gl.CCW;\n this.state.depthMask = true;\n this.state.depthFunc = this.gl.LESS;\n this.state.premultiplyAlpha = false;\n this.state.flipY = false;\n this.state.unpackAlignment = 4;\n this.state.framebuffer = null;\n this.state.viewport = { x: 0, y: 0, width: null, height: null };\n this.state.textureUnits = [];\n this.state.activeTextureUnit = 0;\n this.state.boundBuffer = null;\n this.state.uniformLocations = new Map();\n this.state.currentProgram = null;\n\n // store requested extensions\n this.extensions = {};\n\n // Initialise extra format types\n if (this.isWebgl2) {\n this.getExtension('EXT_color_buffer_float');\n this.getExtension('OES_texture_float_linear');\n } else {\n this.getExtension('OES_texture_float');\n this.getExtension('OES_texture_float_linear');\n this.getExtension('OES_texture_half_float');\n this.getExtension('OES_texture_half_float_linear');\n this.getExtension('OES_element_index_uint');\n this.getExtension('OES_standard_derivatives');\n this.getExtension('EXT_sRGB');\n this.getExtension('WEBGL_depth_texture');\n this.getExtension('WEBGL_draw_buffers');\n }\n this.getExtension('WEBGL_compressed_texture_astc');\n this.getExtension('EXT_texture_compression_bptc');\n this.getExtension('WEBGL_compressed_texture_s3tc');\n this.getExtension('WEBGL_compressed_texture_etc1');\n this.getExtension('WEBGL_compressed_texture_pvrtc');\n this.getExtension('WEBKIT_WEBGL_compressed_texture_pvrtc');\n\n // Create method aliases using extension (WebGL1) or native if available (WebGL2)\n this.vertexAttribDivisor = this.getExtension('ANGLE_instanced_arrays', 'vertexAttribDivisor', 'vertexAttribDivisorANGLE');\n this.drawArraysInstanced = this.getExtension('ANGLE_instanced_arrays', 'drawArraysInstanced', 'drawArraysInstancedANGLE');\n this.drawElementsInstanced = this.getExtension('ANGLE_instanced_arrays', 'drawElementsInstanced', 'drawElementsInstancedANGLE');\n this.createVertexArray = this.getExtension('OES_vertex_array_object', 'createVertexArray', 'createVertexArrayOES');\n this.bindVertexArray = this.getExtension('OES_vertex_array_object', 'bindVertexArray', 'bindVertexArrayOES');\n this.deleteVertexArray = this.getExtension('OES_vertex_array_object', 'deleteVertexArray', 'deleteVertexArrayOES');\n this.drawBuffers = this.getExtension('WEBGL_draw_buffers', 'drawBuffers', 'drawBuffersWEBGL');\n\n // Store device parameters\n this.parameters = {};\n this.parameters.maxTextureUnits = this.gl.getParameter(this.gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS);\n this.parameters.maxAnisotropy = this.getExtension('EXT_texture_filter_anisotropic')\n ? this.gl.getParameter(this.getExtension('EXT_texture_filter_anisotropic').MAX_TEXTURE_MAX_ANISOTROPY_EXT)\n : 0;\n }\n\n setSize(width, height) {\n this.width = width;\n this.height = height;\n\n this.gl.canvas.width = width * this.dpr;\n this.gl.canvas.height = height * this.dpr;\n\n Object.assign(this.gl.canvas.style, {\n width: width + 'px',\n height: height + 'px',\n });\n }\n\n setViewport(width, height, x = 0, y = 0) {\n if (this.state.viewport.width === width && this.state.viewport.height === height) return;\n this.state.viewport.width = width;\n this.state.viewport.height = height;\n this.state.viewport.x = x;\n this.state.viewport.y = y;\n this.gl.viewport(x, y, width, height);\n }\n\n setScissor(width, height, x = 0, y = 0) {\n this.gl.scissor(x, y, width, height);\n }\n\n enable(id) {\n if (this.state[id] === true) return;\n this.gl.enable(id);\n this.state[id] = true;\n }\n\n disable(id) {\n if (this.state[id] === false) return;\n this.gl.disable(id);\n this.state[id] = false;\n }\n\n setBlendFunc(src, dst, srcAlpha, dstAlpha) {\n if (\n this.state.blendFunc.src === src &&\n this.state.blendFunc.dst === dst &&\n this.state.blendFunc.srcAlpha === srcAlpha &&\n this.state.blendFunc.dstAlpha === dstAlpha\n )\n return;\n this.state.blendFunc.src = src;\n this.state.blendFunc.dst = dst;\n this.state.blendFunc.srcAlpha = srcAlpha;\n this.state.blendFunc.dstAlpha = dstAlpha;\n if (srcAlpha !== undefined) this.gl.blendFuncSeparate(src, dst, srcAlpha, dstAlpha);\n else this.gl.blendFunc(src, dst);\n }\n\n setBlendEquation(modeRGB, modeAlpha) {\n modeRGB = modeRGB || this.gl.FUNC_ADD;\n if (this.state.blendEquation.modeRGB === modeRGB && this.state.blendEquation.modeAlpha === modeAlpha) return;\n this.state.blendEquation.modeRGB = modeRGB;\n this.state.blendEquation.modeAlpha = modeAlpha;\n if (modeAlpha !== undefined) this.gl.blendEquationSeparate(modeRGB, modeAlpha);\n else this.gl.blendEquation(modeRGB);\n }\n\n setCullFace(value) {\n if (this.state.cullFace === value) return;\n this.state.cullFace = value;\n this.gl.cullFace(value);\n }\n\n setFrontFace(value) {\n if (this.state.frontFace === value) return;\n this.state.frontFace = value;\n this.gl.frontFace(value);\n }\n\n setDepthMask(value) {\n if (this.state.depthMask === value) return;\n this.state.depthMask = value;\n this.gl.depthMask(value);\n }\n\n setDepthFunc(value) {\n if (this.state.depthFunc === value) return;\n this.state.depthFunc = value;\n this.gl.depthFunc(value);\n }\n\n activeTexture(value) {\n if (this.state.activeTextureUnit === value) return;\n this.state.activeTextureUnit = value;\n this.gl.activeTexture(this.gl.TEXTURE0 + value);\n }\n\n bindFramebuffer({ target = this.gl.FRAMEBUFFER, buffer = null } = {}) {\n if (this.state.framebuffer === buffer) return;\n this.state.framebuffer = buffer;\n this.gl.bindFramebuffer(target, buffer);\n }\n\n getExtension(extension, webgl2Func, extFunc) {\n // if webgl2 function supported, return func bound to gl context\n if (webgl2Func && this.gl[webgl2Func]) return this.gl[webgl2Func].bind(this.gl);\n\n // fetch extension once only\n if (!this.extensions[extension]) {\n this.extensions[extension] = this.gl.getExtension(extension);\n }\n\n // return extension if no function requested\n if (!webgl2Func) return this.extensions[extension];\n\n // Return null if extension not supported\n if (!this.extensions[extension]) return null;\n\n // return extension function, bound to extension\n return this.extensions[extension][extFunc].bind(this.extensions[extension]);\n }\n\n sortOpaque(a, b) {\n if (a.renderOrder !== b.renderOrder) {\n return a.renderOrder - b.renderOrder;\n } else if (a.program.id !== b.program.id) {\n return a.program.id - b.program.id;\n } else if (a.zDepth !== b.zDepth) {\n return a.zDepth - b.zDepth;\n } else {\n return b.id - a.id;\n }\n }\n\n sortTransparent(a, b) {\n if (a.renderOrder !== b.renderOrder) {\n return a.renderOrder - b.renderOrder;\n }\n if (a.zDepth !== b.zDepth) {\n return b.zDepth - a.zDepth;\n } else {\n return b.id - a.id;\n }\n }\n\n sortUI(a, b) {\n if (a.renderOrder !== b.renderOrder) {\n return a.renderOrder - b.renderOrder;\n } else if (a.program.id !== b.program.id) {\n return a.program.id - b.program.id;\n } else {\n return b.id - a.id;\n }\n }\n\n getRenderList({ scene, camera, frustumCull, sort }) {\n let renderList = [];\n\n if (camera && frustumCull) camera.updateFrustum();\n\n // Get visible\n scene.traverse((node) => {\n if (!node.visible) return true;\n if (!node.draw) return;\n\n if (frustumCull && node.frustumCulled && camera) {\n if (!camera.frustumIntersectsMesh(node)) return;\n }\n\n renderList.push(node);\n });\n\n if (sort) {\n const opaque = [];\n const transparent = []; // depthTest true\n const ui = []; // depthTest false\n\n renderList.forEach((node) => {\n // Split into the 3 render groups\n if (!node.program.transparent) {\n opaque.push(node);\n } else if (node.program.depthTest) {\n transparent.push(node);\n } else {\n ui.push(node);\n }\n\n node.zDepth = 0;\n\n // Only calculate z-depth if renderOrder unset and depthTest is true\n if (node.renderOrder !== 0 || !node.program.depthTest || !camera) return;\n\n // update z-depth\n node.worldMatrix.getTranslation(tempVec3);\n tempVec3.applyMatrix4(camera.projectionViewMatrix);\n node.zDepth = tempVec3.z;\n });\n\n opaque.sort(this.sortOpaque);\n transparent.sort(this.sortTransparent);\n ui.sort(this.sortUI);\n\n renderList = opaque.concat(transparent, ui);\n }\n\n return renderList;\n }\n\n render({ scene, camera, target = null, update = true, sort = true, frustumCull = true, clear }) {\n if (target === null) {\n // make sure no render target bound so draws to canvas\n this.bindFramebuffer();\n this.setViewport(this.width * this.dpr, this.height * this.dpr);\n } else {\n // bind supplied render target and update viewport\n this.bindFramebuffer(target);\n this.setViewport(target.width, target.height);\n }\n\n if (clear || (this.autoClear && clear !== false)) {\n // Ensure depth buffer writing is enabled so it can be cleared\n if (this.depth && (!target || target.depth)) {\n this.enable(this.gl.DEPTH_TEST);\n this.setDepthMask(true);\n }\n this.gl.clear(\n (this.color ? this.gl.COLOR_BUFFER_BIT : 0) |\n (this.depth ? this.gl.DEPTH_BUFFER_BIT : 0) |\n (this.stencil ? this.gl.STENCIL_BUFFER_BIT : 0)\n );\n }\n\n // updates all scene graph matrices\n if (update) scene.updateMatrixWorld();\n\n // Update camera separately, in case not in scene graph\n if (camera) camera.updateMatrixWorld();\n\n // Get render list - entails culling and sorting\n const renderList = this.getRenderList({ scene, camera, frustumCull, sort });\n\n renderList.forEach((node) => {\n node.draw({ camera });\n });\n }\n}\n\n/**\n * Copy the values from one vec4 to another\n *\n * @param {vec4} out the receiving vector\n * @param {vec4} a the source vector\n * @returns {vec4} out\n */\nfunction copy$3(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n return out;\n}\n\n/**\n * Set the components of a vec4 to the given values\n *\n * @param {vec4} out the receiving vector\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @param {Number} w W component\n * @returns {vec4} out\n */\nfunction set$3(out, x, y, z, w) {\n out[0] = x;\n out[1] = y;\n out[2] = z;\n out[3] = w;\n return out;\n}\n\n/**\n * Scales a vec4 by a scalar number\n *\n * @param {vec4} out the receiving vector\n * @param {vec4} a the vector to scale\n * @param {Number} b amount to scale the vector by\n * @returns {vec4} out\n */\nfunction scale$2(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n out[3] = a[3] * b;\n return out;\n}\n\n/**\n * Normalize a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {vec4} a vector to normalize\n * @returns {vec4} out\n */\nfunction normalize$1(out, a) {\n let x = a[0];\n let y = a[1];\n let z = a[2];\n let w = a[3];\n let len = x * x + y * y + z * z + w * w;\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n }\n out[0] = x * len;\n out[1] = y * len;\n out[2] = z * len;\n out[3] = w * len;\n return out;\n}\n\n/**\n * Calculates the dot product of two vec4's\n *\n * @param {vec4} a the first operand\n * @param {vec4} b the second operand\n * @returns {Number} dot product of a and b\n */\nfunction dot$1(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];\n}\n\n/**\n * Set a quat to the identity quaternion\n *\n * @param {quat} out the receiving quaternion\n * @returns {quat} out\n */\nfunction identity$2(out) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n out[3] = 1;\n return out;\n}\n\n/**\n * Sets a quat from the given angle and rotation axis,\n * then returns it.\n *\n * @param {quat} out the receiving quaternion\n * @param {vec3} axis the axis around which to rotate\n * @param {Number} rad the angle in radians\n * @returns {quat} out\n **/\nfunction setAxisAngle(out, axis, rad) {\n rad = rad * 0.5;\n let s = Math.sin(rad);\n out[0] = s * axis[0];\n out[1] = s * axis[1];\n out[2] = s * axis[2];\n out[3] = Math.cos(rad);\n return out;\n}\n\n/**\n * Multiplies two quats\n *\n * @param {quat} out the receiving quaternion\n * @param {quat} a the first operand\n * @param {quat} b the second operand\n * @returns {quat} out\n */\nfunction multiply$2(out, a, b) {\n let ax = a[0],\n ay = a[1],\n az = a[2],\n aw = a[3];\n let bx = b[0],\n by = b[1],\n bz = b[2],\n bw = b[3];\n\n out[0] = ax * bw + aw * bx + ay * bz - az * by;\n out[1] = ay * bw + aw * by + az * bx - ax * bz;\n out[2] = az * bw + aw * bz + ax * by - ay * bx;\n out[3] = aw * bw - ax * bx - ay * by - az * bz;\n return out;\n}\n\n/**\n * Rotates a quaternion by the given angle about the X axis\n *\n * @param {quat} out quat receiving operation result\n * @param {quat} a quat to rotate\n * @param {number} rad angle (in radians) to rotate\n * @returns {quat} out\n */\nfunction rotateX(out, a, rad) {\n rad *= 0.5;\n\n let ax = a[0],\n ay = a[1],\n az = a[2],\n aw = a[3];\n let bx = Math.sin(rad),\n bw = Math.cos(rad);\n\n out[0] = ax * bw + aw * bx;\n out[1] = ay * bw + az * bx;\n out[2] = az * bw - ay * bx;\n out[3] = aw * bw - ax * bx;\n return out;\n}\n\n/**\n * Rotates a quaternion by the given angle about the Y axis\n *\n * @param {quat} out quat receiving operation result\n * @param {quat} a quat to rotate\n * @param {number} rad angle (in radians) to rotate\n * @returns {quat} out\n */\nfunction rotateY(out, a, rad) {\n rad *= 0.5;\n\n let ax = a[0],\n ay = a[1],\n az = a[2],\n aw = a[3];\n let by = Math.sin(rad),\n bw = Math.cos(rad);\n\n out[0] = ax * bw - az * by;\n out[1] = ay * bw + aw * by;\n out[2] = az * bw + ax * by;\n out[3] = aw * bw - ay * by;\n return out;\n}\n\n/**\n * Rotates a quaternion by the given angle about the Z axis\n *\n * @param {quat} out quat receiving operation result\n * @param {quat} a quat to rotate\n * @param {number} rad angle (in radians) to rotate\n * @returns {quat} out\n */\nfunction rotateZ(out, a, rad) {\n rad *= 0.5;\n\n let ax = a[0],\n ay = a[1],\n az = a[2],\n aw = a[3];\n let bz = Math.sin(rad),\n bw = Math.cos(rad);\n\n out[0] = ax * bw + ay * bz;\n out[1] = ay * bw - ax * bz;\n out[2] = az * bw + aw * bz;\n out[3] = aw * bw - az * bz;\n return out;\n}\n\n/**\n * Performs a spherical linear interpolation between two quat\n *\n * @param {quat} out the receiving quaternion\n * @param {quat} a the first operand\n * @param {quat} b the second operand\n * @param {Number} t interpolation amount between the two inputs\n * @returns {quat} out\n */\nfunction slerp(out, a, b, t) {\n // benchmarks:\n // http://jsperf.com/quaternion-slerp-implementations\n let ax = a[0],\n ay = a[1],\n az = a[2],\n aw = a[3];\n let bx = b[0],\n by = b[1],\n bz = b[2],\n bw = b[3];\n\n let omega, cosom, sinom, scale0, scale1;\n\n // calc cosine\n cosom = ax * bx + ay * by + az * bz + aw * bw;\n // adjust signs (if necessary)\n if (cosom < 0.0) {\n cosom = -cosom;\n bx = -bx;\n by = -by;\n bz = -bz;\n bw = -bw;\n }\n // calculate coefficients\n if (1.0 - cosom > 0.000001) {\n // standard case (slerp)\n omega = Math.acos(cosom);\n sinom = Math.sin(omega);\n scale0 = Math.sin((1.0 - t) * omega) / sinom;\n scale1 = Math.sin(t * omega) / sinom;\n } else {\n // \"from\" and \"to\" quaternions are very close\n // ... so we can do a linear interpolation\n scale0 = 1.0 - t;\n scale1 = t;\n }\n // calculate final values\n out[0] = scale0 * ax + scale1 * bx;\n out[1] = scale0 * ay + scale1 * by;\n out[2] = scale0 * az + scale1 * bz;\n out[3] = scale0 * aw + scale1 * bw;\n\n return out;\n}\n\n/**\n * Calculates the inverse of a quat\n *\n * @param {quat} out the receiving quaternion\n * @param {quat} a quat to calculate inverse of\n * @returns {quat} out\n */\nfunction invert$2(out, a) {\n let a0 = a[0],\n a1 = a[1],\n a2 = a[2],\n a3 = a[3];\n let dot = a0 * a0 + a1 * a1 + a2 * a2 + a3 * a3;\n let invDot = dot ? 1.0 / dot : 0;\n\n // TODO: Would be faster to return [0,0,0,0] immediately if dot == 0\n\n out[0] = -a0 * invDot;\n out[1] = -a1 * invDot;\n out[2] = -a2 * invDot;\n out[3] = a3 * invDot;\n return out;\n}\n\n/**\n * Calculates the conjugate of a quat\n * If the quaternion is normalized, this function is faster than quat.inverse and produces the same result.\n *\n * @param {quat} out the receiving quaternion\n * @param {quat} a quat to calculate conjugate of\n * @returns {quat} out\n */\nfunction conjugate(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n out[2] = -a[2];\n out[3] = a[3];\n return out;\n}\n\n/**\n * Creates a quaternion from the given 3x3 rotation matrix.\n *\n * NOTE: The resultant quaternion is not normalized, so you should be sure\n * to renormalize the quaternion yourself where necessary.\n *\n * @param {quat} out the receiving quaternion\n * @param {mat3} m rotation matrix\n * @returns {quat} out\n * @function\n */\nfunction fromMat3(out, m) {\n // Algorithm in Ken Shoemake's article in 1987 SIGGRAPH course notes\n // article \"Quaternion Calculus and Fast Animation\".\n let fTrace = m[0] + m[4] + m[8];\n let fRoot;\n\n if (fTrace > 0.0) {\n // |w| > 1/2, may as well choose w > 1/2\n fRoot = Math.sqrt(fTrace + 1.0); // 2w\n out[3] = 0.5 * fRoot;\n fRoot = 0.5 / fRoot; // 1/(4w)\n out[0] = (m[5] - m[7]) * fRoot;\n out[1] = (m[6] - m[2]) * fRoot;\n out[2] = (m[1] - m[3]) * fRoot;\n } else {\n // |w| <= 1/2\n let i = 0;\n if (m[4] > m[0]) i = 1;\n if (m[8] > m[i * 3 + i]) i = 2;\n let j = (i + 1) % 3;\n let k = (i + 2) % 3;\n\n fRoot = Math.sqrt(m[i * 3 + i] - m[j * 3 + j] - m[k * 3 + k] + 1.0);\n out[i] = 0.5 * fRoot;\n fRoot = 0.5 / fRoot;\n out[3] = (m[j * 3 + k] - m[k * 3 + j]) * fRoot;\n out[j] = (m[j * 3 + i] + m[i * 3 + j]) * fRoot;\n out[k] = (m[k * 3 + i] + m[i * 3 + k]) * fRoot;\n }\n\n return out;\n}\n\n/**\n * Creates a quaternion from the given euler angle x, y, z.\n *\n * @param {quat} out the receiving quaternion\n * @param {vec3} euler Angles to rotate around each axis in degrees.\n * @param {String} order detailing order of operations. Default 'XYZ'.\n * @returns {quat} out\n * @function\n */\nfunction fromEuler(out, euler, order = 'YXZ') {\n let sx = Math.sin(euler[0] * 0.5);\n let cx = Math.cos(euler[0] * 0.5);\n let sy = Math.sin(euler[1] * 0.5);\n let cy = Math.cos(euler[1] * 0.5);\n let sz = Math.sin(euler[2] * 0.5);\n let cz = Math.cos(euler[2] * 0.5);\n\n if (order === 'XYZ') {\n out[0] = sx * cy * cz + cx * sy * sz;\n out[1] = cx * sy * cz - sx * cy * sz;\n out[2] = cx * cy * sz + sx * sy * cz;\n out[3] = cx * cy * cz - sx * sy * sz;\n } else if (order === 'YXZ') {\n out[0] = sx * cy * cz + cx * sy * sz;\n out[1] = cx * sy * cz - sx * cy * sz;\n out[2] = cx * cy * sz - sx * sy * cz;\n out[3] = cx * cy * cz + sx * sy * sz;\n } else if (order === 'ZXY') {\n out[0] = sx * cy * cz - cx * sy * sz;\n out[1] = cx * sy * cz + sx * cy * sz;\n out[2] = cx * cy * sz + sx * sy * cz;\n out[3] = cx * cy * cz - sx * sy * sz;\n } else if (order === 'ZYX') {\n out[0] = sx * cy * cz - cx * sy * sz;\n out[1] = cx * sy * cz + sx * cy * sz;\n out[2] = cx * cy * sz - sx * sy * cz;\n out[3] = cx * cy * cz + sx * sy * sz;\n } else if (order === 'YZX') {\n out[0] = sx * cy * cz + cx * sy * sz;\n out[1] = cx * sy * cz + sx * cy * sz;\n out[2] = cx * cy * sz - sx * sy * cz;\n out[3] = cx * cy * cz - sx * sy * sz;\n } else if (order === 'XZY') {\n out[0] = sx * cy * cz - cx * sy * sz;\n out[1] = cx * sy * cz - sx * cy * sz;\n out[2] = cx * cy * sz + sx * sy * cz;\n out[3] = cx * cy * cz + sx * sy * sz;\n }\n\n return out;\n}\n\n/**\n * Copy the values from one quat to another\n *\n * @param {quat} out the receiving quaternion\n * @param {quat} a the source quaternion\n * @returns {quat} out\n * @function\n */\nconst copy$2 = copy$3;\n\n/**\n * Set the components of a quat to the given values\n *\n * @param {quat} out the receiving quaternion\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @param {Number} w W component\n * @returns {quat} out\n * @function\n */\nconst set$2 = set$3;\n\n/**\n * Calculates the dot product of two quat's\n *\n * @param {quat} a the first operand\n * @param {quat} b the second operand\n * @returns {Number} dot product of a and b\n * @function\n */\nconst dot = dot$1;\n\n/**\n * Normalize a quat\n *\n * @param {quat} out the receiving quaternion\n * @param {quat} a quaternion to normalize\n * @returns {quat} out\n * @function\n */\nconst normalize = normalize$1;\n\nclass Quat extends Array {\n constructor(x = 0, y = 0, z = 0, w = 1) {\n super(x, y, z, w);\n this.onChange = () => {};\n return this;\n }\n\n get x() {\n return this[0];\n }\n\n get y() {\n return this[1];\n }\n\n get z() {\n return this[2];\n }\n\n get w() {\n return this[3];\n }\n\n set x(v) {\n this[0] = v;\n this.onChange();\n }\n\n set y(v) {\n this[1] = v;\n this.onChange();\n }\n\n set z(v) {\n this[2] = v;\n this.onChange();\n }\n\n set w(v) {\n this[3] = v;\n this.onChange();\n }\n\n identity() {\n identity$2(this);\n this.onChange();\n return this;\n }\n\n set(x, y, z, w) {\n if (x.length) return this.copy(x);\n set$2(this, x, y, z, w);\n this.onChange();\n return this;\n }\n\n rotateX(a) {\n rotateX(this, this, a);\n this.onChange();\n return this;\n }\n\n rotateY(a) {\n rotateY(this, this, a);\n this.onChange();\n return this;\n }\n\n rotateZ(a) {\n rotateZ(this, this, a);\n this.onChange();\n return this;\n }\n\n inverse(q = this) {\n invert$2(this, q);\n this.onChange();\n return this;\n }\n\n conjugate(q = this) {\n conjugate(this, q);\n this.onChange();\n return this;\n }\n\n copy(q) {\n copy$2(this, q);\n this.onChange();\n return this;\n }\n\n normalize(q = this) {\n normalize(this, q);\n this.onChange();\n return this;\n }\n\n multiply(qA, qB) {\n if (qB) {\n multiply$2(this, qA, qB);\n } else {\n multiply$2(this, this, qA);\n }\n this.onChange();\n return this;\n }\n\n dot(v) {\n return dot(this, v);\n }\n\n fromMatrix3(matrix3) {\n fromMat3(this, matrix3);\n this.onChange();\n return this;\n }\n\n fromEuler(euler) {\n fromEuler(this, euler, euler.order);\n return this;\n }\n\n fromAxisAngle(axis, a) {\n setAxisAngle(this, axis, a);\n return this;\n }\n\n slerp(q, t) {\n slerp(this, this, q, t);\n return this;\n }\n\n fromArray(a, o = 0) {\n this[0] = a[o];\n this[1] = a[o + 1];\n this[2] = a[o + 2];\n this[3] = a[o + 3];\n return this;\n }\n\n toArray(a = [], o = 0) {\n a[o] = this[0];\n a[o + 1] = this[1];\n a[o + 2] = this[2];\n a[o + 3] = this[3];\n return a;\n }\n}\n\nconst EPSILON = 0.000001;\n\n/**\n * Copy the values from one mat4 to another\n *\n * @param {mat4} out the receiving matrix\n * @param {mat4} a the source matrix\n * @returns {mat4} out\n */\nfunction copy$1(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n}\n\n/**\n * Set the components of a mat4 to the given values\n *\n * @param {mat4} out the receiving matrix\n * @returns {mat4} out\n */\nfunction set$1(out, m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {\n out[0] = m00;\n out[1] = m01;\n out[2] = m02;\n out[3] = m03;\n out[4] = m10;\n out[5] = m11;\n out[6] = m12;\n out[7] = m13;\n out[8] = m20;\n out[9] = m21;\n out[10] = m22;\n out[11] = m23;\n out[12] = m30;\n out[13] = m31;\n out[14] = m32;\n out[15] = m33;\n return out;\n}\n\n/**\n * Set a mat4 to the identity matrix\n *\n * @param {mat4} out the receiving matrix\n * @returns {mat4} out\n */\nfunction identity$1(out) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n\n/**\n * Inverts a mat4\n *\n * @param {mat4} out the receiving matrix\n * @param {mat4} a the source matrix\n * @returns {mat4} out\n */\nfunction invert$1(out, a) {\n let a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n let a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n let a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n let a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15];\n\n let b00 = a00 * a11 - a01 * a10;\n let b01 = a00 * a12 - a02 * a10;\n let b02 = a00 * a13 - a03 * a10;\n let b03 = a01 * a12 - a02 * a11;\n let b04 = a01 * a13 - a03 * a11;\n let b05 = a02 * a13 - a03 * a12;\n let b06 = a20 * a31 - a21 * a30;\n let b07 = a20 * a32 - a22 * a30;\n let b08 = a20 * a33 - a23 * a30;\n let b09 = a21 * a32 - a22 * a31;\n let b10 = a21 * a33 - a23 * a31;\n let b11 = a22 * a33 - a23 * a32;\n\n // Calculate the determinant\n let det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n\n if (!det) {\n return null;\n }\n det = 1.0 / det;\n\n out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\n out[1] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\n out[2] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\n out[3] = (a22 * b04 - a21 * b05 - a23 * b03) * det;\n out[4] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\n out[5] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\n out[6] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\n out[7] = (a20 * b05 - a22 * b02 + a23 * b01) * det;\n out[8] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\n out[9] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\n out[10] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\n out[11] = (a21 * b02 - a20 * b04 - a23 * b00) * det;\n out[12] = (a11 * b07 - a10 * b09 - a12 * b06) * det;\n out[13] = (a00 * b09 - a01 * b07 + a02 * b06) * det;\n out[14] = (a31 * b01 - a30 * b03 - a32 * b00) * det;\n out[15] = (a20 * b03 - a21 * b01 + a22 * b00) * det;\n\n return out;\n}\n\n/**\n * Calculates the determinant of a mat4\n *\n * @param {mat4} a the source matrix\n * @returns {Number} determinant of a\n */\nfunction determinant(a) {\n let a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n let a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n let a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n let a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15];\n\n let b00 = a00 * a11 - a01 * a10;\n let b01 = a00 * a12 - a02 * a10;\n let b02 = a00 * a13 - a03 * a10;\n let b03 = a01 * a12 - a02 * a11;\n let b04 = a01 * a13 - a03 * a11;\n let b05 = a02 * a13 - a03 * a12;\n let b06 = a20 * a31 - a21 * a30;\n let b07 = a20 * a32 - a22 * a30;\n let b08 = a20 * a33 - a23 * a30;\n let b09 = a21 * a32 - a22 * a31;\n let b10 = a21 * a33 - a23 * a31;\n let b11 = a22 * a33 - a23 * a32;\n\n // Calculate the determinant\n return b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n}\n\n/**\n * Multiplies two mat4s\n *\n * @param {mat4} out the receiving matrix\n * @param {mat4} a the first operand\n * @param {mat4} b the second operand\n * @returns {mat4} out\n */\nfunction multiply$1(out, a, b) {\n let a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n let a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n let a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n let a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15];\n\n // Cache only the current line of the second matrix\n let b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3];\n out[0] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[1] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[2] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[3] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n\n b0 = b[4];\n b1 = b[5];\n b2 = b[6];\n b3 = b[7];\n out[4] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[5] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[6] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[7] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n\n b0 = b[8];\n b1 = b[9];\n b2 = b[10];\n b3 = b[11];\n out[8] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[9] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[10] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[11] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n\n b0 = b[12];\n b1 = b[13];\n b2 = b[14];\n b3 = b[15];\n out[12] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[13] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[14] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[15] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n return out;\n}\n\n/**\n * Translate a mat4 by the given vector\n *\n * @param {mat4} out the receiving matrix\n * @param {mat4} a the matrix to translate\n * @param {vec3} v vector to translate by\n * @returns {mat4} out\n */\nfunction translate$1(out, a, v) {\n let x = v[0],\n y = v[1],\n z = v[2];\n let a00, a01, a02, a03;\n let a10, a11, a12, a13;\n let a20, a21, a22, a23;\n\n if (a === out) {\n out[12] = a[0] * x + a[4] * y + a[8] * z + a[12];\n out[13] = a[1] * x + a[5] * y + a[9] * z + a[13];\n out[14] = a[2] * x + a[6] * y + a[10] * z + a[14];\n out[15] = a[3] * x + a[7] * y + a[11] * z + a[15];\n } else {\n a00 = a[0];\n a01 = a[1];\n a02 = a[2];\n a03 = a[3];\n a10 = a[4];\n a11 = a[5];\n a12 = a[6];\n a13 = a[7];\n a20 = a[8];\n a21 = a[9];\n a22 = a[10];\n a23 = a[11];\n\n out[0] = a00;\n out[1] = a01;\n out[2] = a02;\n out[3] = a03;\n out[4] = a10;\n out[5] = a11;\n out[6] = a12;\n out[7] = a13;\n out[8] = a20;\n out[9] = a21;\n out[10] = a22;\n out[11] = a23;\n\n out[12] = a00 * x + a10 * y + a20 * z + a[12];\n out[13] = a01 * x + a11 * y + a21 * z + a[13];\n out[14] = a02 * x + a12 * y + a22 * z + a[14];\n out[15] = a03 * x + a13 * y + a23 * z + a[15];\n }\n\n return out;\n}\n\n/**\n * Scales the mat4 by the dimensions in the given vec3 not using vectorization\n *\n * @param {mat4} out the receiving matrix\n * @param {mat4} a the matrix to scale\n * @param {vec3} v the vec3 to scale the matrix by\n * @returns {mat4} out\n **/\nfunction scale$1(out, a, v) {\n let x = v[0],\n y = v[1],\n z = v[2];\n\n out[0] = a[0] * x;\n out[1] = a[1] * x;\n out[2] = a[2] * x;\n out[3] = a[3] * x;\n out[4] = a[4] * y;\n out[5] = a[5] * y;\n out[6] = a[6] * y;\n out[7] = a[7] * y;\n out[8] = a[8] * z;\n out[9] = a[9] * z;\n out[10] = a[10] * z;\n out[11] = a[11] * z;\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n}\n\n/**\n * Rotates a mat4 by the given angle around the given axis\n *\n * @param {mat4} out the receiving matrix\n * @param {mat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @param {vec3} axis the axis to rotate around\n * @returns {mat4} out\n */\nfunction rotate$1(out, a, rad, axis) {\n let x = axis[0],\n y = axis[1],\n z = axis[2];\n let len = Math.hypot(x, y, z);\n let s, c, t;\n let a00, a01, a02, a03;\n let a10, a11, a12, a13;\n let a20, a21, a22, a23;\n let b00, b01, b02;\n let b10, b11, b12;\n let b20, b21, b22;\n\n if (Math.abs(len) < EPSILON) {\n return null;\n }\n\n len = 1 / len;\n x *= len;\n y *= len;\n z *= len;\n\n s = Math.sin(rad);\n c = Math.cos(rad);\n t = 1 - c;\n\n a00 = a[0];\n a01 = a[1];\n a02 = a[2];\n a03 = a[3];\n a10 = a[4];\n a11 = a[5];\n a12 = a[6];\n a13 = a[7];\n a20 = a[8];\n a21 = a[9];\n a22 = a[10];\n a23 = a[11];\n\n // Construct the elements of the rotation matrix\n b00 = x * x * t + c;\n b01 = y * x * t + z * s;\n b02 = z * x * t - y * s;\n b10 = x * y * t - z * s;\n b11 = y * y * t + c;\n b12 = z * y * t + x * s;\n b20 = x * z * t + y * s;\n b21 = y * z * t - x * s;\n b22 = z * z * t + c;\n\n // Perform rotation-specific matrix multiplication\n out[0] = a00 * b00 + a10 * b01 + a20 * b02;\n out[1] = a01 * b00 + a11 * b01 + a21 * b02;\n out[2] = a02 * b00 + a12 * b01 + a22 * b02;\n out[3] = a03 * b00 + a13 * b01 + a23 * b02;\n out[4] = a00 * b10 + a10 * b11 + a20 * b12;\n out[5] = a01 * b10 + a11 * b11 + a21 * b12;\n out[6] = a02 * b10 + a12 * b11 + a22 * b12;\n out[7] = a03 * b10 + a13 * b11 + a23 * b12;\n out[8] = a00 * b20 + a10 * b21 + a20 * b22;\n out[9] = a01 * b20 + a11 * b21 + a21 * b22;\n out[10] = a02 * b20 + a12 * b21 + a22 * b22;\n out[11] = a03 * b20 + a13 * b21 + a23 * b22;\n\n if (a !== out) {\n // If the source and destination differ, copy the unchanged last row\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n }\n return out;\n}\n\n/**\n * Returns the translation vector component of a transformation\n * matrix. If a matrix is built with fromRotationTranslation,\n * the returned vector will be the same as the translation vector\n * originally supplied.\n * @param {vec3} out Vector to receive translation component\n * @param {mat4} mat Matrix to be decomposed (input)\n * @return {vec3} out\n */\nfunction getTranslation(out, mat) {\n out[0] = mat[12];\n out[1] = mat[13];\n out[2] = mat[14];\n\n return out;\n}\n\n/**\n * Returns the scaling factor component of a transformation\n * matrix. If a matrix is built with fromRotationTranslationScale\n * with a normalized Quaternion paramter, the returned vector will be\n * the same as the scaling vector\n * originally supplied.\n * @param {vec3} out Vector to receive scaling factor component\n * @param {mat4} mat Matrix to be decomposed (input)\n * @return {vec3} out\n */\nfunction getScaling(out, mat) {\n let m11 = mat[0];\n let m12 = mat[1];\n let m13 = mat[2];\n let m21 = mat[4];\n let m22 = mat[5];\n let m23 = mat[6];\n let m31 = mat[8];\n let m32 = mat[9];\n let m33 = mat[10];\n\n out[0] = Math.hypot(m11, m12, m13);\n out[1] = Math.hypot(m21, m22, m23);\n out[2] = Math.hypot(m31, m32, m33);\n\n return out;\n}\n\nfunction getMaxScaleOnAxis(mat) {\n let m11 = mat[0];\n let m12 = mat[1];\n let m13 = mat[2];\n let m21 = mat[4];\n let m22 = mat[5];\n let m23 = mat[6];\n let m31 = mat[8];\n let m32 = mat[9];\n let m33 = mat[10];\n\n const x = m11 * m11 + m12 * m12 + m13 * m13;\n const y = m21 * m21 + m22 * m22 + m23 * m23;\n const z = m31 * m31 + m32 * m32 + m33 * m33;\n\n return Math.sqrt(Math.max(x, y, z));\n}\n\n/**\n * Returns a quaternion representing the rotational component\n * of a transformation matrix. If a matrix is built with\n * fromRotationTranslation, the returned quaternion will be the\n * same as the quaternion originally supplied.\n * @param {quat} out Quaternion to receive the rotation component\n * @param {mat4} mat Matrix to be decomposed (input)\n * @return {quat} out\n */\nconst getRotation = (function () {\n const temp = [0, 0, 0];\n\n return function (out, mat) {\n let scaling = temp;\n getScaling(scaling, mat);\n\n let is1 = 1 / scaling[0];\n let is2 = 1 / scaling[1];\n let is3 = 1 / scaling[2];\n\n let sm11 = mat[0] * is1;\n let sm12 = mat[1] * is2;\n let sm13 = mat[2] * is3;\n let sm21 = mat[4] * is1;\n let sm22 = mat[5] * is2;\n let sm23 = mat[6] * is3;\n let sm31 = mat[8] * is1;\n let sm32 = mat[9] * is2;\n let sm33 = mat[10] * is3;\n\n let trace = sm11 + sm22 + sm33;\n let S = 0;\n\n if (trace > 0) {\n S = Math.sqrt(trace + 1.0) * 2;\n out[3] = 0.25 * S;\n out[0] = (sm23 - sm32) / S;\n out[1] = (sm31 - sm13) / S;\n out[2] = (sm12 - sm21) / S;\n } else if (sm11 > sm22 && sm11 > sm33) {\n S = Math.sqrt(1.0 + sm11 - sm22 - sm33) * 2;\n out[3] = (sm23 - sm32) / S;\n out[0] = 0.25 * S;\n out[1] = (sm12 + sm21) / S;\n out[2] = (sm31 + sm13) / S;\n } else if (sm22 > sm33) {\n S = Math.sqrt(1.0 + sm22 - sm11 - sm33) * 2;\n out[3] = (sm31 - sm13) / S;\n out[0] = (sm12 + sm21) / S;\n out[1] = 0.25 * S;\n out[2] = (sm23 + sm32) / S;\n } else {\n S = Math.sqrt(1.0 + sm33 - sm11 - sm22) * 2;\n out[3] = (sm12 - sm21) / S;\n out[0] = (sm31 + sm13) / S;\n out[1] = (sm23 + sm32) / S;\n out[2] = 0.25 * S;\n }\n\n return out;\n };\n})();\n\n/**\n * Creates a matrix from a quaternion rotation, vector translation and vector scale\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.translate(dest, vec);\n * let quatMat = mat4.create();\n * quat4.toMat4(quat, quatMat);\n * mat4.multiply(dest, quatMat);\n * mat4.scale(dest, scale)\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {quat4} q Rotation quaternion\n * @param {vec3} v Translation vector\n * @param {vec3} s Scaling vector\n * @returns {mat4} out\n */\nfunction fromRotationTranslationScale(out, q, v, s) {\n // Quaternion math\n let x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n let x2 = x + x;\n let y2 = y + y;\n let z2 = z + z;\n\n let xx = x * x2;\n let xy = x * y2;\n let xz = x * z2;\n let yy = y * y2;\n let yz = y * z2;\n let zz = z * z2;\n let wx = w * x2;\n let wy = w * y2;\n let wz = w * z2;\n let sx = s[0];\n let sy = s[1];\n let sz = s[2];\n\n out[0] = (1 - (yy + zz)) * sx;\n out[1] = (xy + wz) * sx;\n out[2] = (xz - wy) * sx;\n out[3] = 0;\n out[4] = (xy - wz) * sy;\n out[5] = (1 - (xx + zz)) * sy;\n out[6] = (yz + wx) * sy;\n out[7] = 0;\n out[8] = (xz + wy) * sz;\n out[9] = (yz - wx) * sz;\n out[10] = (1 - (xx + yy)) * sz;\n out[11] = 0;\n out[12] = v[0];\n out[13] = v[1];\n out[14] = v[2];\n out[15] = 1;\n\n return out;\n}\n\n/**\n * Calculates a 4x4 matrix from the given quaternion\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {quat} q Quaternion to create matrix from\n *\n * @returns {mat4} out\n */\nfunction fromQuat$1(out, q) {\n let x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n let x2 = x + x;\n let y2 = y + y;\n let z2 = z + z;\n\n let xx = x * x2;\n let yx = y * x2;\n let yy = y * y2;\n let zx = z * x2;\n let zy = z * y2;\n let zz = z * z2;\n let wx = w * x2;\n let wy = w * y2;\n let wz = w * z2;\n\n out[0] = 1 - yy - zz;\n out[1] = yx + wz;\n out[2] = zx - wy;\n out[3] = 0;\n\n out[4] = yx - wz;\n out[5] = 1 - xx - zz;\n out[6] = zy + wx;\n out[7] = 0;\n\n out[8] = zx + wy;\n out[9] = zy - wx;\n out[10] = 1 - xx - yy;\n out[11] = 0;\n\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n\n return out;\n}\n\n/**\n * Generates a perspective projection matrix with the given bounds\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {number} fovy Vertical field of view in radians\n * @param {number} aspect Aspect ratio. typically viewport width/height\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum\n * @returns {mat4} out\n */\nfunction perspective(out, fovy, aspect, near, far) {\n let f = 1.0 / Math.tan(fovy / 2);\n let nf = 1 / (near - far);\n out[0] = f / aspect;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = f;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = (far + near) * nf;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[14] = 2 * far * near * nf;\n out[15] = 0;\n return out;\n}\n\n/**\n * Generates a orthogonal projection matrix with the given bounds\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {number} left Left bound of the frustum\n * @param {number} right Right bound of the frustum\n * @param {number} bottom Bottom bound of the frustum\n * @param {number} top Top bound of the frustum\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum\n * @returns {mat4} out\n */\nfunction ortho(out, left, right, bottom, top, near, far) {\n let lr = 1 / (left - right);\n let bt = 1 / (bottom - top);\n let nf = 1 / (near - far);\n out[0] = -2 * lr;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = -2 * bt;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 2 * nf;\n out[11] = 0;\n out[12] = (left + right) * lr;\n out[13] = (top + bottom) * bt;\n out[14] = (far + near) * nf;\n out[15] = 1;\n return out;\n}\n\n/**\n * Generates a matrix that makes something look at something else.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {vec3} eye Position of the viewer\n * @param {vec3} target Point the viewer is looking at\n * @param {vec3} up vec3 pointing up\n * @returns {mat4} out\n */\nfunction targetTo(out, eye, target, up) {\n let eyex = eye[0],\n eyey = eye[1],\n eyez = eye[2],\n upx = up[0],\n upy = up[1],\n upz = up[2];\n\n let z0 = eyex - target[0],\n z1 = eyey - target[1],\n z2 = eyez - target[2];\n\n let len = z0 * z0 + z1 * z1 + z2 * z2;\n if (len === 0) {\n // eye and target are in the same position\n z2 = 1;\n } else {\n len = 1 / Math.sqrt(len);\n z0 *= len;\n z1 *= len;\n z2 *= len;\n }\n\n let x0 = upy * z2 - upz * z1,\n x1 = upz * z0 - upx * z2,\n x2 = upx * z1 - upy * z0;\n\n len = x0 * x0 + x1 * x1 + x2 * x2;\n if (len === 0) {\n // up and z are parallel\n if (upz) {\n upx += 1e-6;\n } else if (upy) {\n upz += 1e-6;\n } else {\n upy += 1e-6;\n }\n (x0 = upy * z2 - upz * z1), (x1 = upz * z0 - upx * z2), (x2 = upx * z1 - upy * z0);\n\n len = x0 * x0 + x1 * x1 + x2 * x2;\n }\n\n len = 1 / Math.sqrt(len);\n x0 *= len;\n x1 *= len;\n x2 *= len;\n\n out[0] = x0;\n out[1] = x1;\n out[2] = x2;\n out[3] = 0;\n out[4] = z1 * x2 - z2 * x1;\n out[5] = z2 * x0 - z0 * x2;\n out[6] = z0 * x1 - z1 * x0;\n out[7] = 0;\n out[8] = z0;\n out[9] = z1;\n out[10] = z2;\n out[11] = 0;\n out[12] = eyex;\n out[13] = eyey;\n out[14] = eyez;\n out[15] = 1;\n return out;\n}\n\nclass Mat4 extends Array {\n constructor(\n m00 = 1,\n m01 = 0,\n m02 = 0,\n m03 = 0,\n m10 = 0,\n m11 = 1,\n m12 = 0,\n m13 = 0,\n m20 = 0,\n m21 = 0,\n m22 = 1,\n m23 = 0,\n m30 = 0,\n m31 = 0,\n m32 = 0,\n m33 = 1\n ) {\n super(m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33);\n return this;\n }\n\n get x() {\n return this[12];\n }\n\n get y() {\n return this[13];\n }\n\n get z() {\n return this[14];\n }\n\n get w() {\n return this[15];\n }\n\n set x(v) {\n this[12] = v;\n }\n\n set y(v) {\n this[13] = v;\n }\n\n set z(v) {\n this[14] = v;\n }\n\n set w(v) {\n this[15] = v;\n }\n\n set(m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {\n if (m00.length) return this.copy(m00);\n set$1(this, m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33);\n return this;\n }\n\n translate(v, m = this) {\n translate$1(this, m, v);\n return this;\n }\n\n rotate(v, axis, m = this) {\n rotate$1(this, m, v, axis);\n return this;\n }\n\n scale(v, m = this) {\n scale$1(this, m, typeof v === 'number' ? [v, v, v] : v);\n return this;\n }\n\n multiply(ma, mb) {\n if (mb) {\n multiply$1(this, ma, mb);\n } else {\n multiply$1(this, this, ma);\n }\n return this;\n }\n\n identity() {\n identity$1(this);\n return this;\n }\n\n copy(m) {\n copy$1(this, m);\n return this;\n }\n\n fromPerspective({ fov, aspect, near, far } = {}) {\n perspective(this, fov, aspect, near, far);\n return this;\n }\n\n fromOrthogonal({ left, right, bottom, top, near, far }) {\n ortho(this, left, right, bottom, top, near, far);\n return this;\n }\n\n fromQuaternion(q) {\n fromQuat$1(this, q);\n return this;\n }\n\n setPosition(v) {\n this.x = v[0];\n this.y = v[1];\n this.z = v[2];\n return this;\n }\n\n inverse(m = this) {\n invert$1(this, m);\n return this;\n }\n\n compose(q, pos, scale) {\n fromRotationTranslationScale(this, q, pos, scale);\n return this;\n }\n\n getRotation(q) {\n getRotation(q, this);\n return this;\n }\n\n getTranslation(pos) {\n getTranslation(pos, this);\n return this;\n }\n\n getScaling(scale) {\n getScaling(scale, this);\n return this;\n }\n\n getMaxScaleOnAxis() {\n return getMaxScaleOnAxis(this);\n }\n\n lookAt(eye, target, up) {\n targetTo(this, eye, target, up);\n return this;\n }\n\n determinant() {\n return determinant(this);\n }\n\n fromArray(a, o = 0) {\n this[0] = a[o];\n this[1] = a[o + 1];\n this[2] = a[o + 2];\n this[3] = a[o + 3];\n this[4] = a[o + 4];\n this[5] = a[o + 5];\n this[6] = a[o + 6];\n this[7] = a[o + 7];\n this[8] = a[o + 8];\n this[9] = a[o + 9];\n this[10] = a[o + 10];\n this[11] = a[o + 11];\n this[12] = a[o + 12];\n this[13] = a[o + 13];\n this[14] = a[o + 14];\n this[15] = a[o + 15];\n return this;\n }\n\n toArray(a = [], o = 0) {\n a[o] = this[0];\n a[o + 1] = this[1];\n a[o + 2] = this[2];\n a[o + 3] = this[3];\n a[o + 4] = this[4];\n a[o + 5] = this[5];\n a[o + 6] = this[6];\n a[o + 7] = this[7];\n a[o + 8] = this[8];\n a[o + 9] = this[9];\n a[o + 10] = this[10];\n a[o + 11] = this[11];\n a[o + 12] = this[12];\n a[o + 13] = this[13];\n a[o + 14] = this[14];\n a[o + 15] = this[15];\n return a;\n }\n}\n\n// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\nfunction fromRotationMatrix(out, m, order = 'YXZ') {\n if (order === 'XYZ') {\n out[1] = Math.asin(Math.min(Math.max(m[8], -1), 1));\n if (Math.abs(m[8]) < 0.99999) {\n out[0] = Math.atan2(-m[9], m[10]);\n out[2] = Math.atan2(-m[4], m[0]);\n } else {\n out[0] = Math.atan2(m[6], m[5]);\n out[2] = 0;\n }\n } else if (order === 'YXZ') {\n out[0] = Math.asin(-Math.min(Math.max(m[9], -1), 1));\n if (Math.abs(m[9]) < 0.99999) {\n out[1] = Math.atan2(m[8], m[10]);\n out[2] = Math.atan2(m[1], m[5]);\n } else {\n out[1] = Math.atan2(-m[2], m[0]);\n out[2] = 0;\n }\n } else if (order === 'ZXY') {\n out[0] = Math.asin(Math.min(Math.max(m[6], -1), 1));\n if (Math.abs(m[6]) < 0.99999) {\n out[1] = Math.atan2(-m[2], m[10]);\n out[2] = Math.atan2(-m[4], m[5]);\n } else {\n out[1] = 0;\n out[2] = Math.atan2(m[1], m[0]);\n }\n } else if (order === 'ZYX') {\n out[1] = Math.asin(-Math.min(Math.max(m[2], -1), 1));\n if (Math.abs(m[2]) < 0.99999) {\n out[0] = Math.atan2(m[6], m[10]);\n out[2] = Math.atan2(m[1], m[0]);\n } else {\n out[0] = 0;\n out[2] = Math.atan2(-m[4], m[5]);\n }\n } else if (order === 'YZX') {\n out[2] = Math.asin(Math.min(Math.max(m[1], -1), 1));\n if (Math.abs(m[1]) < 0.99999) {\n out[0] = Math.atan2(-m[9], m[5]);\n out[1] = Math.atan2(-m[2], m[0]);\n } else {\n out[0] = 0;\n out[1] = Math.atan2(m[8], m[10]);\n }\n } else if (order === 'XZY') {\n out[2] = Math.asin(-Math.min(Math.max(m[4], -1), 1));\n if (Math.abs(m[4]) < 0.99999) {\n out[0] = Math.atan2(m[6], m[5]);\n out[1] = Math.atan2(m[8], m[0]);\n } else {\n out[0] = Math.atan2(-m[9], m[10]);\n out[1] = 0;\n }\n }\n\n return out;\n}\n\nconst tmpMat4 = new Mat4();\n\nclass Euler extends Array {\n constructor(x = 0, y = x, z = x, order = 'YXZ') {\n super(x, y, z);\n this.order = order;\n this.onChange = () => {};\n return this;\n }\n\n get x() {\n return this[0];\n }\n\n get y() {\n return this[1];\n }\n\n get z() {\n return this[2];\n }\n\n set x(v) {\n this[0] = v;\n this.onChange();\n }\n\n set y(v) {\n this[1] = v;\n this.onChange();\n }\n\n set z(v) {\n this[2] = v;\n this.onChange();\n }\n\n set(x, y = x, z = x) {\n if (x.length) return this.copy(x);\n this[0] = x;\n this[1] = y;\n this[2] = z;\n this.onChange();\n return this;\n }\n\n copy(v) {\n this[0] = v[0];\n this[1] = v[1];\n this[2] = v[2];\n this.onChange();\n return this;\n }\n\n reorder(order) {\n this.order = order;\n this.onChange();\n return this;\n }\n\n fromRotationMatrix(m, order = this.order) {\n fromRotationMatrix(this, m, order);\n return this;\n }\n\n fromQuaternion(q, order = this.order) {\n tmpMat4.fromQuaternion(q);\n return this.fromRotationMatrix(tmpMat4, order);\n }\n\n toArray(a = [], o = 0) {\n a[o] = this[0];\n a[o + 1] = this[1];\n a[o + 2] = this[2];\n return a;\n }\n}\n\nclass Transform {\n constructor() {\n this.parent = null;\n this.children = [];\n this.visible = true;\n\n this.matrix = new Mat4();\n this.worldMatrix = new Mat4();\n this.matrixAutoUpdate = true;\n\n this.position = new Vec3();\n this.quaternion = new Quat();\n this.scale = new Vec3(1);\n this.rotation = new Euler();\n this.up = new Vec3(0, 1, 0);\n\n this.rotation.onChange = () => this.quaternion.fromEuler(this.rotation);\n this.quaternion.onChange = () => this.rotation.fromQuaternion(this.quaternion);\n }\n\n setParent(parent, notifyParent = true) {\n if (this.parent && parent !== this.parent) this.parent.removeChild(this, false);\n this.parent = parent;\n if (notifyParent && parent) parent.addChild(this, false);\n }\n\n addChild(child, notifyChild = true) {\n if (!~this.children.indexOf(child)) this.children.push(child);\n if (notifyChild) child.setParent(this, false);\n }\n\n removeChild(child, notifyChild = true) {\n if (!!~this.children.indexOf(child)) this.children.splice(this.children.indexOf(child), 1);\n if (notifyChild) child.setParent(null, false);\n }\n\n updateMatrixWorld(force) {\n if (this.matrixAutoUpdate) this.updateMatrix();\n if (this.worldMatrixNeedsUpdate || force) {\n if (this.parent === null) this.worldMatrix.copy(this.matrix);\n else this.worldMatrix.multiply(this.parent.worldMatrix, this.matrix);\n this.worldMatrixNeedsUpdate = false;\n force = true;\n }\n\n for (let i = 0, l = this.children.length; i < l; i++) {\n this.children[i].updateMatrixWorld(force);\n }\n }\n\n updateMatrix() {\n this.matrix.compose(this.quaternion, this.position, this.scale);\n this.worldMatrixNeedsUpdate = true;\n }\n\n traverse(callback) {\n // Return true in callback to stop traversing children\n if (callback(this)) return;\n for (let i = 0, l = this.children.length; i < l; i++) {\n this.children[i].traverse(callback);\n }\n }\n\n decompose() {\n this.matrix.getTranslation(this.position);\n this.matrix.getRotation(this.quaternion);\n this.matrix.getScaling(this.scale);\n this.rotation.fromQuaternion(this.quaternion);\n }\n\n lookAt(target, invert = false) {\n if (invert) this.matrix.lookAt(this.position, target, this.up);\n else this.matrix.lookAt(target, this.position, this.up);\n this.matrix.getRotation(this.quaternion);\n this.rotation.fromQuaternion(this.quaternion);\n }\n}\n\nconst tempMat4 = new Mat4();\nconst tempVec3a = new Vec3();\nconst tempVec3b = new Vec3();\n\nclass Camera extends Transform {\n constructor(gl, { near = 0.1, far = 100, fov = 45, aspect = 1, left, right, bottom, top, zoom = 1 } = {}) {\n super();\n\n Object.assign(this, { near, far, fov, aspect, left, right, bottom, top, zoom });\n\n this.projectionMatrix = new Mat4();\n this.viewMatrix = new Mat4();\n this.projectionViewMatrix = new Mat4();\n this.worldPosition = new Vec3();\n\n // Use orthographic if left/right set, else default to perspective camera\n this.type = left || right ? 'orthographic' : 'perspective';\n\n if (this.type === 'orthographic') this.orthographic();\n else this.perspective();\n }\n\n perspective({ near = this.near, far = this.far, fov = this.fov, aspect = this.aspect } = {}) {\n Object.assign(this, { near, far, fov, aspect });\n this.projectionMatrix.fromPerspective({ fov: fov * (Math.PI / 180), aspect, near, far });\n this.type = 'perspective';\n return this;\n }\n\n orthographic({\n near = this.near,\n far = this.far,\n left = this.left,\n right = this.right,\n bottom = this.bottom,\n top = this.top,\n zoom = this.zoom,\n } = {}) {\n Object.assign(this, { near, far, left, right, bottom, top, zoom });\n left /= zoom;\n right /= zoom;\n bottom /= zoom;\n top /= zoom;\n this.projectionMatrix.fromOrthogonal({ left, right, bottom, top, near, far });\n this.type = 'orthographic';\n return this;\n }\n\n updateMatrixWorld() {\n super.updateMatrixWorld();\n this.viewMatrix.inverse(this.worldMatrix);\n this.worldMatrix.getTranslation(this.worldPosition);\n\n // used for sorting\n this.projectionViewMatrix.multiply(this.projectionMatrix, this.viewMatrix);\n return this;\n }\n\n lookAt(target) {\n super.lookAt(target, true);\n return this;\n }\n\n // Project 3D coordinate to 2D point\n project(v) {\n v.applyMatrix4(this.viewMatrix);\n v.applyMatrix4(this.projectionMatrix);\n return this;\n }\n\n // Unproject 2D point to 3D coordinate\n unproject(v) {\n v.applyMatrix4(tempMat4.inverse(this.projectionMatrix));\n v.applyMatrix4(this.worldMatrix);\n return this;\n }\n\n updateFrustum() {\n if (!this.frustum) {\n this.frustum = [new Vec3(), new Vec3(), new Vec3(), new Vec3(), new Vec3(), new Vec3()];\n }\n\n const m = this.projectionViewMatrix;\n this.frustum[0].set(m[3] - m[0], m[7] - m[4], m[11] - m[8]).constant = m[15] - m[12]; // -x\n this.frustum[1].set(m[3] + m[0], m[7] + m[4], m[11] + m[8]).constant = m[15] + m[12]; // +x\n this.frustum[2].set(m[3] + m[1], m[7] + m[5], m[11] + m[9]).constant = m[15] + m[13]; // +y\n this.frustum[3].set(m[3] - m[1], m[7] - m[5], m[11] - m[9]).constant = m[15] - m[13]; // -y\n this.frustum[4].set(m[3] - m[2], m[7] - m[6], m[11] - m[10]).constant = m[15] - m[14]; // +z (far)\n this.frustum[5].set(m[3] + m[2], m[7] + m[6], m[11] + m[10]).constant = m[15] + m[14]; // -z (near)\n\n for (let i = 0; i < 6; i++) {\n const invLen = 1.0 / this.frustum[i].distance();\n this.frustum[i].multiply(invLen);\n this.frustum[i].constant *= invLen;\n }\n }\n\n frustumIntersectsMesh(node) {\n // If no position attribute, treat as frustumCulled false\n if (!node.geometry.attributes.position) return true;\n\n if (!node.geometry.bounds || node.geometry.bounds.radius === Infinity) node.geometry.computeBoundingSphere();\n\n if (!node.geometry.bounds) return true;\n\n const center = tempVec3a;\n center.copy(node.geometry.bounds.center);\n center.applyMatrix4(node.worldMatrix);\n\n const radius = node.geometry.bounds.radius * node.worldMatrix.getMaxScaleOnAxis();\n\n return this.frustumIntersectsSphere(center, radius);\n }\n\n frustumIntersectsSphere(center, radius) {\n const normal = tempVec3b;\n\n for (let i = 0; i < 6; i++) {\n const plane = this.frustum[i];\n const distance = normal.copy(plane).dot(center) + plane.constant;\n if (distance < -radius) return false;\n }\n return true;\n }\n}\n\n/**\n * Copies the upper-left 3x3 values into the given mat3.\n *\n * @param {mat3} out the receiving 3x3 matrix\n * @param {mat4} a the source 4x4 matrix\n * @returns {mat3} out\n */\nfunction fromMat4(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[4];\n out[4] = a[5];\n out[5] = a[6];\n out[6] = a[8];\n out[7] = a[9];\n out[8] = a[10];\n return out;\n}\n\n/**\n * Calculates a 3x3 matrix from the given quaternion\n *\n * @param {mat3} out mat3 receiving operation result\n * @param {quat} q Quaternion to create matrix from\n *\n * @returns {mat3} out\n */\nfunction fromQuat(out, q) {\n let x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n let x2 = x + x;\n let y2 = y + y;\n let z2 = z + z;\n\n let xx = x * x2;\n let yx = y * x2;\n let yy = y * y2;\n let zx = z * x2;\n let zy = z * y2;\n let zz = z * z2;\n let wx = w * x2;\n let wy = w * y2;\n let wz = w * z2;\n\n out[0] = 1 - yy - zz;\n out[3] = yx - wz;\n out[6] = zx + wy;\n\n out[1] = yx + wz;\n out[4] = 1 - xx - zz;\n out[7] = zy - wx;\n\n out[2] = zx - wy;\n out[5] = zy + wx;\n out[8] = 1 - xx - yy;\n\n return out;\n}\n\n/**\n * Copy the values from one mat3 to another\n *\n * @param {mat3} out the receiving matrix\n * @param {mat3} a the source matrix\n * @returns {mat3} out\n */\nfunction copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n return out;\n}\n\n/**\n * Set the components of a mat3 to the given values\n *\n * @param {mat3} out the receiving matrix\n * @returns {mat3} out\n */\nfunction set(out, m00, m01, m02, m10, m11, m12, m20, m21, m22) {\n out[0] = m00;\n out[1] = m01;\n out[2] = m02;\n out[3] = m10;\n out[4] = m11;\n out[5] = m12;\n out[6] = m20;\n out[7] = m21;\n out[8] = m22;\n return out;\n}\n\n/**\n * Set a mat3 to the identity matrix\n *\n * @param {mat3} out the receiving matrix\n * @returns {mat3} out\n */\nfunction identity(out) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 1;\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n out[8] = 1;\n return out;\n}\n\n/**\n * Inverts a mat3\n *\n * @param {mat3} out the receiving matrix\n * @param {mat3} a the source matrix\n * @returns {mat3} out\n */\nfunction invert(out, a) {\n let a00 = a[0],\n a01 = a[1],\n a02 = a[2];\n let a10 = a[3],\n a11 = a[4],\n a12 = a[5];\n let a20 = a[6],\n a21 = a[7],\n a22 = a[8];\n\n let b01 = a22 * a11 - a12 * a21;\n let b11 = -a22 * a10 + a12 * a20;\n let b21 = a21 * a10 - a11 * a20;\n\n // Calculate the determinant\n let det = a00 * b01 + a01 * b11 + a02 * b21;\n\n if (!det) {\n return null;\n }\n det = 1.0 / det;\n\n out[0] = b01 * det;\n out[1] = (-a22 * a01 + a02 * a21) * det;\n out[2] = (a12 * a01 - a02 * a11) * det;\n out[3] = b11 * det;\n out[4] = (a22 * a00 - a02 * a20) * det;\n out[5] = (-a12 * a00 + a02 * a10) * det;\n out[6] = b21 * det;\n out[7] = (-a21 * a00 + a01 * a20) * det;\n out[8] = (a11 * a00 - a01 * a10) * det;\n return out;\n}\n\n/**\n * Multiplies two mat3's\n *\n * @param {mat3} out the receiving matrix\n * @param {mat3} a the first operand\n * @param {mat3} b the second operand\n * @returns {mat3} out\n */\nfunction multiply(out, a, b) {\n let a00 = a[0],\n a01 = a[1],\n a02 = a[2];\n let a10 = a[3],\n a11 = a[4],\n a12 = a[5];\n let a20 = a[6],\n a21 = a[7],\n a22 = a[8];\n\n let b00 = b[0],\n b01 = b[1],\n b02 = b[2];\n let b10 = b[3],\n b11 = b[4],\n b12 = b[5];\n let b20 = b[6],\n b21 = b[7],\n b22 = b[8];\n\n out[0] = b00 * a00 + b01 * a10 + b02 * a20;\n out[1] = b00 * a01 + b01 * a11 + b02 * a21;\n out[2] = b00 * a02 + b01 * a12 + b02 * a22;\n\n out[3] = b10 * a00 + b11 * a10 + b12 * a20;\n out[4] = b10 * a01 + b11 * a11 + b12 * a21;\n out[5] = b10 * a02 + b11 * a12 + b12 * a22;\n\n out[6] = b20 * a00 + b21 * a10 + b22 * a20;\n out[7] = b20 * a01 + b21 * a11 + b22 * a21;\n out[8] = b20 * a02 + b21 * a12 + b22 * a22;\n return out;\n}\n\n/**\n * Translate a mat3 by the given vector\n *\n * @param {mat3} out the receiving matrix\n * @param {mat3} a the matrix to translate\n * @param {vec2} v vector to translate by\n * @returns {mat3} out\n */\nfunction translate(out, a, v) {\n let a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a10 = a[3],\n a11 = a[4],\n a12 = a[5],\n a20 = a[6],\n a21 = a[7],\n a22 = a[8],\n x = v[0],\n y = v[1];\n\n out[0] = a00;\n out[1] = a01;\n out[2] = a02;\n\n out[3] = a10;\n out[4] = a11;\n out[5] = a12;\n\n out[6] = x * a00 + y * a10 + a20;\n out[7] = x * a01 + y * a11 + a21;\n out[8] = x * a02 + y * a12 + a22;\n return out;\n}\n\n/**\n * Rotates a mat3 by the given angle\n *\n * @param {mat3} out the receiving matrix\n * @param {mat3} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat3} out\n */\nfunction rotate(out, a, rad) {\n let a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a10 = a[3],\n a11 = a[4],\n a12 = a[5],\n a20 = a[6],\n a21 = a[7],\n a22 = a[8],\n s = Math.sin(rad),\n c = Math.cos(rad);\n\n out[0] = c * a00 + s * a10;\n out[1] = c * a01 + s * a11;\n out[2] = c * a02 + s * a12;\n\n out[3] = c * a10 - s * a00;\n out[4] = c * a11 - s * a01;\n out[5] = c * a12 - s * a02;\n\n out[6] = a20;\n out[7] = a21;\n out[8] = a22;\n return out;\n}\n\n/**\n * Scales the mat3 by the dimensions in the given vec2\n *\n * @param {mat3} out the receiving matrix\n * @param {mat3} a the matrix to rotate\n * @param {vec2} v the vec2 to scale the matrix by\n * @returns {mat3} out\n **/\nfunction scale(out, a, v) {\n let x = v[0],\n y = v[1];\n\n out[0] = x * a[0];\n out[1] = x * a[1];\n out[2] = x * a[2];\n\n out[3] = y * a[3];\n out[4] = y * a[4];\n out[5] = y * a[5];\n\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n return out;\n}\n\n/**\n * Calculates a 3x3 normal matrix (transpose inverse) from the 4x4 matrix\n *\n * @param {mat3} out mat3 receiving operation result\n * @param {mat4} a Mat4 to derive the normal matrix from\n *\n * @returns {mat3} out\n */\nfunction normalFromMat4(out, a) {\n let a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n let a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n let a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n let a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15];\n\n let b00 = a00 * a11 - a01 * a10;\n let b01 = a00 * a12 - a02 * a10;\n let b02 = a00 * a13 - a03 * a10;\n let b03 = a01 * a12 - a02 * a11;\n let b04 = a01 * a13 - a03 * a11;\n let b05 = a02 * a13 - a03 * a12;\n let b06 = a20 * a31 - a21 * a30;\n let b07 = a20 * a32 - a22 * a30;\n let b08 = a20 * a33 - a23 * a30;\n let b09 = a21 * a32 - a22 * a31;\n let b10 = a21 * a33 - a23 * a31;\n let b11 = a22 * a33 - a23 * a32;\n\n // Calculate the determinant\n let det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n\n if (!det) {\n return null;\n }\n det = 1.0 / det;\n\n out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\n out[1] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\n out[2] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\n\n out[3] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\n out[4] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\n out[5] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\n\n out[6] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\n out[7] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\n out[8] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\n\n return out;\n}\n\nclass Mat3 extends Array {\n constructor(m00 = 1, m01 = 0, m02 = 0, m10 = 0, m11 = 1, m12 = 0, m20 = 0, m21 = 0, m22 = 1) {\n super(m00, m01, m02, m10, m11, m12, m20, m21, m22);\n return this;\n }\n\n set(m00, m01, m02, m10, m11, m12, m20, m21, m22) {\n if (m00.length) return this.copy(m00);\n set(this, m00, m01, m02, m10, m11, m12, m20, m21, m22);\n return this;\n }\n\n translate(v, m = this) {\n translate(this, m, v);\n return this;\n }\n\n rotate(v, m = this) {\n rotate(this, m, v);\n return this;\n }\n\n scale(v, m = this) {\n scale(this, m, v);\n return this;\n }\n\n multiply(ma, mb) {\n if (mb) {\n multiply(this, ma, mb);\n } else {\n multiply(this, this, ma);\n }\n return this;\n }\n\n identity() {\n identity(this);\n return this;\n }\n\n copy(m) {\n copy(this, m);\n return this;\n }\n\n fromMatrix4(m) {\n fromMat4(this, m);\n return this;\n }\n\n fromQuaternion(q) {\n fromQuat(this, q);\n return this;\n }\n\n fromBasis(vec3a, vec3b, vec3c) {\n this.set(vec3a[0], vec3a[1], vec3a[2], vec3b[0], vec3b[1], vec3b[2], vec3c[0], vec3c[1], vec3c[2]);\n return this;\n }\n\n inverse(m = this) {\n invert(this, m);\n return this;\n }\n\n getNormalMatrix(m) {\n normalFromMat4(this, m);\n return this;\n }\n}\n\nlet ID$1 = 0;\n\nclass Mesh extends Transform {\n constructor(gl, { geometry, program, mode = gl.TRIANGLES, frustumCulled = true, renderOrder = 0 } = {}) {\n super();\n if (!gl.canvas) console.error('gl not passed as first argument to Mesh');\n this.gl = gl;\n this.id = ID$1++;\n this.geometry = geometry;\n this.program = program;\n this.mode = mode;\n\n // Used to skip frustum culling\n this.frustumCulled = frustumCulled;\n\n // Override sorting to force an order\n this.renderOrder = renderOrder;\n this.modelViewMatrix = new Mat4();\n this.normalMatrix = new Mat3();\n this.beforeRenderCallbacks = [];\n this.afterRenderCallbacks = [];\n }\n\n onBeforeRender(f) {\n this.beforeRenderCallbacks.push(f);\n return this;\n }\n\n onAfterRender(f) {\n this.afterRenderCallbacks.push(f);\n return this;\n }\n\n draw({ camera } = {}) {\n this.beforeRenderCallbacks.forEach((f) => f && f({ mesh: this, camera }));\n if (camera) {\n // Add empty matrix uniforms to program if unset\n if (!this.program.uniforms.modelMatrix) {\n Object.assign(this.program.uniforms, {\n modelMatrix: { value: null },\n viewMatrix: { value: null },\n modelViewMatrix: { value: null },\n normalMatrix: { value: null },\n projectionMatrix: { value: null },\n cameraPosition: { value: null },\n });\n }\n\n // Set the matrix uniforms\n this.program.uniforms.projectionMatrix.value = camera.projectionMatrix;\n this.program.uniforms.cameraPosition.value = camera.worldPosition;\n this.program.uniforms.viewMatrix.value = camera.viewMatrix;\n this.modelViewMatrix.multiply(camera.viewMatrix, this.worldMatrix);\n this.normalMatrix.getNormalMatrix(this.modelViewMatrix);\n this.program.uniforms.modelMatrix.value = this.worldMatrix;\n this.program.uniforms.modelViewMatrix.value = this.modelViewMatrix;\n this.program.uniforms.normalMatrix.value = this.normalMatrix;\n }\n\n // determine if faces need to be flipped - when mesh scaled negatively\n let flipFaces = this.program.cullFace && this.worldMatrix.determinant() < 0;\n this.program.use({ flipFaces });\n this.geometry.draw({ mode: this.mode, program: this.program });\n this.afterRenderCallbacks.forEach((f) => f && f({ mesh: this, camera }));\n }\n}\n\n// TODO: delete texture\n// TODO: use texSubImage2D for updates (video or when loaded)\n// TODO: need? encoding = linearEncoding\n// TODO: support non-compressed mipmaps uploads\n\nconst emptyPixel = new Uint8Array(4);\n\nfunction isPowerOf2(value) {\n return (value & (value - 1)) === 0;\n}\n\nlet ID = 1;\n\nclass Texture {\n constructor(\n gl,\n {\n image,\n target = gl.TEXTURE_2D,\n type = gl.UNSIGNED_BYTE,\n format = gl.RGBA,\n internalFormat = format,\n wrapS = gl.CLAMP_TO_EDGE,\n wrapT = gl.CLAMP_TO_EDGE,\n generateMipmaps = true,\n minFilter = generateMipmaps ? gl.NEAREST_MIPMAP_LINEAR : gl.LINEAR,\n magFilter = gl.LINEAR,\n premultiplyAlpha = false,\n unpackAlignment = 4,\n flipY = target == gl.TEXTURE_2D ? true : false,\n anisotropy = 0,\n level = 0,\n width, // used for RenderTargets or Data Textures\n height = width,\n } = {}\n ) {\n this.gl = gl;\n this.id = ID++;\n\n this.image = image;\n this.target = target;\n this.type = type;\n this.format = format;\n this.internalFormat = internalFormat;\n this.minFilter = minFilter;\n this.magFilter = magFilter;\n this.wrapS = wrapS;\n this.wrapT = wrapT;\n this.generateMipmaps = generateMipmaps;\n this.premultiplyAlpha = premultiplyAlpha;\n this.unpackAlignment = unpackAlignment;\n this.flipY = flipY;\n this.anisotropy = Math.min(anisotropy, this.gl.renderer.parameters.maxAnisotropy);\n this.level = level;\n this.width = width;\n this.height = height;\n this.texture = this.gl.createTexture();\n\n this.store = {\n image: null,\n };\n\n // Alias for state store to avoid redundant calls for global state\n this.glState = this.gl.renderer.state;\n\n // State store to avoid redundant calls for per-texture state\n this.state = {};\n this.state.minFilter = this.gl.NEAREST_MIPMAP_LINEAR;\n this.state.magFilter = this.gl.LINEAR;\n this.state.wrapS = this.gl.REPEAT;\n this.state.wrapT = this.gl.REPEAT;\n this.state.anisotropy = 0;\n }\n\n bind() {\n // Already bound to active texture unit\n if (this.glState.textureUnits[this.glState.activeTextureUnit] === this.id) return;\n this.gl.bindTexture(this.target, this.texture);\n this.glState.textureUnits[this.glState.activeTextureUnit] = this.id;\n }\n\n update(textureUnit = 0) {\n const needsUpdate = !(this.image === this.store.image && !this.needsUpdate);\n\n // Make sure that texture is bound to its texture unit\n if (needsUpdate || this.glState.textureUnits[textureUnit] !== this.id) {\n // set active texture unit to perform texture functions\n this.gl.renderer.activeTexture(textureUnit);\n this.bind();\n }\n\n if (!needsUpdate) return;\n this.needsUpdate = false;\n\n if (this.flipY !== this.glState.flipY) {\n this.gl.pixelStorei(this.gl.UNPACK_FLIP_Y_WEBGL, this.flipY);\n this.glState.flipY = this.flipY;\n }\n\n if (this.premultiplyAlpha !== this.glState.premultiplyAlpha) {\n this.gl.pixelStorei(this.gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, this.premultiplyAlpha);\n this.glState.premultiplyAlpha = this.premultiplyAlpha;\n }\n\n if (this.unpackAlignment !== this.glState.unpackAlignment) {\n this.gl.pixelStorei(this.gl.UNPACK_ALIGNMENT, this.unpackAlignment);\n this.glState.unpackAlignment = this.unpackAlignment;\n }\n\n if (this.minFilter !== this.state.minFilter) {\n this.gl.texParameteri(this.target, this.gl.TEXTURE_MIN_FILTER, this.minFilter);\n this.state.minFilter = this.minFilter;\n }\n\n if (this.magFilter !== this.state.magFilter) {\n this.gl.texParameteri(this.target, this.gl.TEXTURE_MAG_FILTER, this.magFilter);\n this.state.magFilter = this.magFilter;\n }\n\n if (this.wrapS !== this.state.wrapS) {\n this.gl.texParameteri(this.target, this.gl.TEXTURE_WRAP_S, this.wrapS);\n this.state.wrapS = this.wrapS;\n }\n\n if (this.wrapT !== this.state.wrapT) {\n this.gl.texParameteri(this.target, this.gl.TEXTURE_WRAP_T, this.wrapT);\n this.state.wrapT = this.wrapT;\n }\n\n if (this.anisotropy && this.anisotropy !== this.state.anisotropy) {\n this.gl.texParameterf(\n this.target,\n this.gl.renderer.getExtension('EXT_texture_filter_anisotropic').TEXTURE_MAX_ANISOTROPY_EXT,\n this.anisotropy\n );\n this.state.anisotropy = this.anisotropy;\n }\n\n if (this.image) {\n if (this.image.width) {\n this.width = this.image.width;\n this.height = this.image.height;\n }\n\n if (this.target === this.gl.TEXTURE_CUBE_MAP) {\n // For cube maps\n for (let i = 0; i < 6; i++) {\n this.gl.texImage2D(\n this.gl.TEXTURE_CUBE_MAP_POSITIVE_X + i,\n this.level,\n this.internalFormat,\n this.format,\n this.type,\n this.image[i]\n );\n }\n } else if (ArrayBuffer.isView(this.image)) {\n // Data texture\n this.gl.texImage2D(this.target, this.level, this.internalFormat, this.width, this.height, 0, this.format, this.type, this.image);\n } else if (this.image.isCompressedTexture) {\n // Compressed texture\n for (let level = 0; level < this.image.length; level++) {\n this.gl.compressedTexImage2D(\n this.target,\n level,\n this.internalFormat,\n this.image[level].width,\n this.image[level].height,\n 0,\n this.image[level].data\n );\n }\n } else {\n // Regular texture\n this.gl.texImage2D(this.target, this.level, this.internalFormat, this.format, this.type, this.image);\n }\n\n if (this.generateMipmaps) {\n // For WebGL1, if not a power of 2, turn off mips, set wrapping to clamp to edge and minFilter to linear\n if (!this.gl.renderer.isWebgl2 && (!isPowerOf2(this.image.width) || !isPowerOf2(this.image.height))) {\n this.generateMipmaps = false;\n this.wrapS = this.wrapT = this.gl.CLAMP_TO_EDGE;\n this.minFilter = this.gl.LINEAR;\n } else {\n this.gl.generateMipmap(this.target);\n }\n }\n\n // Callback for when data is pushed to GPU\n this.onUpdate && this.onUpdate();\n } else {\n if (this.target === this.gl.TEXTURE_CUBE_MAP) {\n // Upload empty pixel for each side while no image to avoid errors while image or video loading\n for (let i = 0; i < 6; i++) {\n this.gl.texImage2D(\n this.gl.TEXTURE_CUBE_MAP_POSITIVE_X + i,\n 0,\n this.gl.RGBA,\n 1,\n 1,\n 0,\n this.gl.RGBA,\n this.gl.UNSIGNED_BYTE,\n emptyPixel\n );\n }\n } else if (this.width) {\n // image intentionally left null for RenderTarget\n this.gl.texImage2D(this.target, this.level, this.internalFormat, this.width, this.height, 0, this.format, this.type, null);\n } else {\n // Upload empty pixel if no image to avoid errors while image or video loading\n this.gl.texImage2D(this.target, 0, this.gl.RGBA, 1, 1, 0, this.gl.RGBA, this.gl.UNSIGNED_BYTE, emptyPixel);\n }\n }\n this.store.image = this.image;\n }\n}\n\nclass Vec4 extends Array {\n constructor(x = 0, y = x, z = x, w = x) {\n super(x, y, z, w);\n return this;\n }\n\n get x() {\n return this[0];\n }\n\n get y() {\n return this[1];\n }\n\n get z() {\n return this[2];\n }\n\n get w() {\n return this[3];\n }\n\n set x(v) {\n this[0] = v;\n }\n\n set y(v) {\n this[1] = v;\n }\n\n set z(v) {\n this[2] = v;\n }\n\n set w(v) {\n this[3] = v;\n }\n\n set(x, y, z, w) {\n if (x.length) return this.copy(x);\n set$3(this, x, y, z, w);\n return this;\n }\n\n copy(v) {\n copy$3(this, v);\n return this;\n }\n\n normalize() {\n normalize$1(this, this);\n return this;\n }\n\n multiply(v) {\n scale$2(this, this, v);\n return this;\n }\n\n dot(v) {\n return dot$1(this, v);\n }\n\n fromArray(a, o = 0) {\n this[0] = a[o];\n this[1] = a[o + 1];\n this[2] = a[o + 2];\n this[3] = a[o + 3];\n return this;\n }\n\n toArray(a = [], o = 0) {\n a[o] = this[0];\n a[o + 1] = this[1];\n a[o + 2] = this[2];\n a[o + 3] = this[3];\n return a;\n }\n}\n\nclass Plane extends Geometry {\n constructor(gl, { width = 1, height = 1, widthSegments = 1, heightSegments = 1, attributes = {} } = {}) {\n const wSegs = widthSegments;\n const hSegs = heightSegments;\n\n // Determine length of arrays\n const num = (wSegs + 1) * (hSegs + 1);\n const numIndices = wSegs * hSegs * 6;\n\n // Generate empty arrays once\n const position = new Float32Array(num * 3);\n const normal = new Float32Array(num * 3);\n const uv = new Float32Array(num * 2);\n const index = numIndices > 65536 ? new Uint32Array(numIndices) : new Uint16Array(numIndices);\n\n Plane.buildPlane(position, normal, uv, index, width, height, 0, wSegs, hSegs);\n\n Object.assign(attributes, {\n position: { size: 3, data: position },\n normal: { size: 3, data: normal },\n uv: { size: 2, data: uv },\n index: { data: index },\n });\n\n super(gl, attributes);\n }\n\n static buildPlane(position, normal, uv, index, width, height, depth, wSegs, hSegs, u = 0, v = 1, w = 2, uDir = 1, vDir = -1, i = 0, ii = 0) {\n const io = i;\n const segW = width / wSegs;\n const segH = height / hSegs;\n\n for (let iy = 0; iy <= hSegs; iy++) {\n let y = iy * segH - height / 2;\n for (let ix = 0; ix <= wSegs; ix++, i++) {\n let x = ix * segW - width / 2;\n\n position[i * 3 + u] = x * uDir;\n position[i * 3 + v] = y * vDir;\n position[i * 3 + w] = depth / 2;\n\n normal[i * 3 + u] = 0;\n normal[i * 3 + v] = 0;\n normal[i * 3 + w] = depth >= 0 ? 1 : -1;\n\n uv[i * 2] = ix / wSegs;\n uv[i * 2 + 1] = 1 - iy / hSegs;\n\n if (iy === hSegs || ix === wSegs) continue;\n let a = io + ix + iy * (wSegs + 1);\n let b = io + ix + (iy + 1) * (wSegs + 1);\n let c = io + ix + (iy + 1) * (wSegs + 1) + 1;\n let d = io + ix + iy * (wSegs + 1) + 1;\n\n index[ii * 6] = a;\n index[ii * 6 + 1] = b;\n index[ii * 6 + 2] = d;\n index[ii * 6 + 3] = b;\n index[ii * 6 + 4] = c;\n index[ii * 6 + 5] = d;\n ii++;\n }\n }\n }\n}\n\n// eslint-disable-next-line\nconst displacement = `data:image/jpeg;base64,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`;\n\n/*\n * A fast javascript implementation of simplex noise by Jonas Wagner\n\nBased on a speed-improved simplex noise algorithm for 2D, 3D and 4D in Java.\nWhich is based on example code by Stefan Gustavson (stegu@itn.liu.se).\nWith Optimisations by Peter Eastman (peastman@drizzle.stanford.edu).\nBetter rank ordering method by Stefan Gustavson in 2012.\n\n Copyright (c) 2022 Jonas Wagner\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n */\n\n// \nconst F2 = 0.5 * (Math.sqrt(3.0) - 1.0);\nconst G2 = (3.0 - Math.sqrt(3.0)) / 6.0;\n// I'm really not sure why this | 0 (basically a coercion to int)\n// is making this faster but I get ~5 million ops/sec more on the\n// benchmarks across the board or a ~10% speedup.\nconst fastFloor = (x) => Math.floor(x) | 0;\nconst grad2 = /*#__PURE__*/ new Float64Array([1, 1,\n -1, 1,\n 1, -1,\n -1, -1,\n 1, 0,\n -1, 0,\n 1, 0,\n -1, 0,\n 0, 1,\n 0, -1,\n 0, 1,\n 0, -1]);\n/**\n * Creates a 2D noise function\n * @param random the random function that will be used to build the permutation table\n * @returns {NoiseFunction2D}\n */\nfunction createNoise2D(random = Math.random) {\n const perm = buildPermutationTable(random);\n // precalculating this yields a little ~3% performance improvement.\n const permGrad2x = new Float64Array(perm).map(v => grad2[(v % 12) * 2]);\n const permGrad2y = new Float64Array(perm).map(v => grad2[(v % 12) * 2 + 1]);\n return function noise2D(x, y) {\n // if(!isFinite(x) || !isFinite(y)) return 0;\n let n0 = 0; // Noise contributions from the three corners\n let n1 = 0;\n let n2 = 0;\n // Skew the input space to determine which simplex cell we're in\n const s = (x + y) * F2; // Hairy factor for 2D\n const i = fastFloor(x + s);\n const j = fastFloor(y + s);\n const t = (i + j) * G2;\n const X0 = i - t; // Unskew the cell origin back to (x,y) space\n const Y0 = j - t;\n const x0 = x - X0; // The x,y distances from the cell origin\n const y0 = y - Y0;\n // For the 2D case, the simplex shape is an equilateral triangle.\n // Determine which simplex we are in.\n let i1, j1; // Offsets for second (middle) corner of simplex in (i,j) coords\n if (x0 > y0) {\n i1 = 1;\n j1 = 0;\n } // lower triangle, XY order: (0,0)->(1,0)->(1,1)\n else {\n i1 = 0;\n j1 = 1;\n } // upper triangle, YX order: (0,0)->(0,1)->(1,1)\n // A step of (1,0) in (i,j) means a step of (1-c,-c) in (x,y), and\n // a step of (0,1) in (i,j) means a step of (-c,1-c) in (x,y), where\n // c = (3-sqrt(3))/6\n const x1 = x0 - i1 + G2; // Offsets for middle corner in (x,y) unskewed coords\n const y1 = y0 - j1 + G2;\n const x2 = x0 - 1.0 + 2.0 * G2; // Offsets for last corner in (x,y) unskewed coords\n const y2 = y0 - 1.0 + 2.0 * G2;\n // Work out the hashed gradient indices of the three simplex corners\n const ii = i & 255;\n const jj = j & 255;\n // Calculate the contribution from the three corners\n let t0 = 0.5 - x0 * x0 - y0 * y0;\n if (t0 >= 0) {\n const gi0 = ii + perm[jj];\n const g0x = permGrad2x[gi0];\n const g0y = permGrad2y[gi0];\n t0 *= t0;\n // n0 = t0 * t0 * (grad2[gi0] * x0 + grad2[gi0 + 1] * y0); // (x,y) of grad3 used for 2D gradient\n n0 = t0 * t0 * (g0x * x0 + g0y * y0);\n }\n let t1 = 0.5 - x1 * x1 - y1 * y1;\n if (t1 >= 0) {\n const gi1 = ii + i1 + perm[jj + j1];\n const g1x = permGrad2x[gi1];\n const g1y = permGrad2y[gi1];\n t1 *= t1;\n // n1 = t1 * t1 * (grad2[gi1] * x1 + grad2[gi1 + 1] * y1);\n n1 = t1 * t1 * (g1x * x1 + g1y * y1);\n }\n let t2 = 0.5 - x2 * x2 - y2 * y2;\n if (t2 >= 0) {\n const gi2 = ii + 1 + perm[jj + 1];\n const g2x = permGrad2x[gi2];\n const g2y = permGrad2y[gi2];\n t2 *= t2;\n // n2 = t2 * t2 * (grad2[gi2] * x2 + grad2[gi2 + 1] * y2);\n n2 = t2 * t2 * (g2x * x2 + g2y * y2);\n }\n // Add contributions from each corner to get the final noise value.\n // The result is scaled to return values in the interval [-1,1].\n return 70.0 * (n0 + n1 + n2);\n };\n}\n/**\n * Builds a random permutation table.\n * This is exported only for (internal) testing purposes.\n * Do not rely on this export.\n * @private\n */\nfunction buildPermutationTable(random) {\n const tableSize = 512;\n const p = new Uint8Array(tableSize);\n for (let i = 0; i < tableSize / 2; i++) {\n p[i] = i;\n }\n for (let i = 0; i < tableSize / 2 - 1; i++) {\n const r = i + ~~(random() * (256 - i));\n const aux = p[i];\n p[i] = p[r];\n p[r] = aux;\n }\n for (let i = 256; i < tableSize; i++) {\n p[i] = p[i - 256];\n }\n return p;\n}\n\nfunction randFloatSpread(range) {\n return range * (0.5 - Math.random());\n}\n\nfunction randFloat(low, high) {\n return low + Math.random() * (high - low);\n}\n\nconst noise2D = createNoise2D(Math.random);\n\nfunction clamp(a) {\n return Math.max(0, Math.min(1, a));\n}\n\n// eslint-disable-next-line\nfunction getGeometry(gl, detail, offsetTop) {\n offsetTop = offsetTop || 0;\n const number = detail;\n const width = 2;\n const height = 2;\n\n const gran = width / number;\n const granH = (gran * Math.sqrt(3)) / 2;\n const rows = height / granH;\n\n const offsets = [];\n const positions = [];\n const centroids = [];\n const control0 = [];\n const control1 = [];\n const randoms = [];\n const uvs = [];\n let currentShift = 0;\n const bary = [];\n let currentHeight = 0;\n const scale = 2;\n\n for (let j = 0; j < rows; j += 1) {\n currentHeight = j * granH;\n if (j % 2 === 1) {\n currentShift = -gran / 2;\n } else {\n currentShift = 0;\n }\n for (let i = 0; i <= number; i += 1) {\n const sign = Math.sign(i * gran + currentShift - width / 2);\n // sign =1\n // first triangle\n positions.push(\n i * gran + currentShift - width / 2,\n currentHeight - height / 2,\n 0,\n );\n uvs.push((i * gran + currentShift) / width, currentHeight / height);\n positions.push(\n i * gran + gran / 2 + currentShift - width / 2,\n granH + currentHeight - height / 2,\n 0,\n );\n uvs.push(\n (i * gran + gran / 2 + currentShift) / width,\n (granH + currentHeight) / height,\n );\n positions.push(\n i * gran - gran / 2 + currentShift - width / 2,\n granH + currentHeight - height / 2,\n 0,\n );\n uvs.push(\n (i * gran - gran / 2 + currentShift) / width,\n (granH + currentHeight) / height,\n );\n\n let simp = noise2D(i / rows, j / rows) + Math.random();\n const o = clamp(currentHeight / height + (2 * simp) / detail);\n let r = Math.random();\n offsets.push(o, clamp(o + 0.1 * offsetTop), clamp(o + 0.1 * offsetTop));\n randoms.push(r, r, r);\n const c = [\n i * gran + currentShift - width / 2,\n currentHeight - height / 2,\n 0,\n ];\n centroids.push(...c, ...c, ...c);\n\n const ctrl0 = [\n scale * sign * randFloat(-0.3, 0.3),\n -scale * randFloat(-0.3, 0.3) * 1.5,\n -randFloatSpread(0.5),\n ];\n const ctrl1 = [\n scale * sign * randFloat(0.3, 0.6),\n -scale * randFloat(0.3, 0.6) * 1.5,\n -randFloatSpread(0.5),\n ];\n control0.push(...ctrl0, ...ctrl0, ...ctrl0);\n control1.push(...ctrl1, ...ctrl1, ...ctrl1);\n\n bary.push(0, 0, 1, 0, 1, 0, 1, 0, 0);\n // second triangle\n positions.push(\n i * gran + currentShift - width / 2,\n currentHeight - height / 2,\n 0,\n );\n uvs.push((i * gran + currentShift) / width, currentHeight / height);\n positions.push(\n i * gran + gran + currentShift - width / 2,\n currentHeight - height / 2,\n 0,\n );\n uvs.push(\n (i * gran + gran + currentShift) / width,\n currentHeight / height,\n );\n positions.push(\n i * gran + gran / 2 + currentShift - width / 2,\n granH + currentHeight - height / 2,\n 0,\n );\n uvs.push(\n (i * gran + gran / 2 + currentShift) / width,\n (granH + currentHeight) / height,\n );\n\n simp = noise2D((i + 1) / rows, j / rows) + Math.random();\n const o1 = clamp(currentHeight / height + (2 * simp) / detail);\n r = Math.random();\n offsets.push(o1, o1, clamp(o1 + 0.1 * offsetTop));\n randoms.push(r, r, r);\n const c1 = [\n i * gran + currentShift - width / 2,\n currentHeight - height / 2,\n 0,\n ];\n\n control0.push(...ctrl0, ...ctrl0, ...ctrl0);\n control1.push(...ctrl1, ...ctrl1, ...ctrl1);\n\n centroids.push(...c1, ...c1, ...c1);\n bary.push(0, 0, 1, 0, 1, 0, 1, 0, 0);\n }\n }\n const geometry = new Geometry(gl);\n\n geometry.addAttribute('position', {\n size: 3,\n data: new Float32Array(positions),\n });\n geometry.addAttribute('bary', {\n size: 3,\n data: new Float32Array(bary),\n });\n geometry.addAttribute('uv', {\n size: 2,\n data: new Float32Array(uvs),\n });\n geometry.addAttribute('offset', {\n size: 1,\n data: new Float32Array(offsets),\n });\n geometry.addAttribute('centroid1', {\n size: 3,\n data: new Float32Array(centroids),\n });\n geometry.addAttribute('control0', {\n size: 3,\n data: new Float32Array(control0),\n });\n geometry.addAttribute('control1', {\n size: 3,\n data: new Float32Array(control1),\n });\n geometry.addAttribute('random', {\n size: 1,\n data: new Float32Array(randoms),\n });\n return geometry;\n}\n\nconst PI = `float PI = 3.141592653589793238;`;\nconst fragmentCommon = /* glsl */ `\nprecision highp float;\n\nuniform float time;\nuniform float progress;\nuniform sampler2D texture1;\nuniform sampler2D texture2;\nuniform vec4 resolution;\nvarying vec2 vUv;\n`;\nconst vertexCommon = /* glsl */ `\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec2 uv;\nattribute float offset;\nattribute vec3 bary;\n\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform float progress;\nuniform vec4 resolution;\n\nvarying vec2 vUv;\nvarying float vProgress;\nvarying float vProgress1;\nvarying vec3 vBary;\n`;\nconst vertexRotate = /* glsl */ `\nmat4 rotationMatrix(vec3 axis, float angle) {\n axis = normalize(axis);\n float s = sin(angle);\n float c = cos(angle);\n float oc = 1.0 - c;\n\n return mat4(oc * axis.x * axis.x + c, oc * axis.x * axis.y - axis.z * s, oc * axis.z * axis.x + axis.y * s, 0.0,\n oc * axis.x * axis.y + axis.z * s, oc * axis.y * axis.y + c, oc * axis.y * axis.z - axis.x * s, 0.0,\n oc * axis.z * axis.x - axis.y * s, oc * axis.y * axis.z + axis.x * s, oc * axis.z * axis.z + c, 0.0,\n 0.0, 0.0, 0.0, 1.0);\n}\nvec3 rotate(vec3 v, vec3 axis, float angle) {\n mat4 m = rotationMatrix(axis, angle);\n return (m * vec4(v, 1.0)).xyz;\n}\n`;\n\nconst morphX = {\n uniforms: {\n intensity: { value: 1, type: 'f', min: 0, max: 3 },\n },\n fragment: /* glsl */ `\n ${fragmentCommon}\n uniform float intensity;\n uniform sampler2D displacement;\n mat2 getRotM(float angle) {\n float s = sin(angle);\n float c = cos(angle);\n return mat2(c, -s, s, c);\n }\n const float PI = 3.1415;\n const float angle1 = PI *0.25;\n const float angle2 = -PI *0.75;\n void main()\t{\n vec2 newUV = (vUv - vec2(0.5))*resolution.zw + vec2(0.5);\n vec4 disp = texture2D(displacement, newUV);\n vec2 dispVec = vec2(disp.r, disp.g);\n vec2 distortedPosition1 = newUV + getRotM(angle1) * dispVec * intensity * progress;\n vec4 t1 = texture2D(texture1, distortedPosition1);\n vec2 distortedPosition2 = newUV + getRotM(angle2) * dispVec * intensity * (1.0 - progress);\n vec4 t2 = texture2D(texture2, distortedPosition2);\n gl_FragColor = mix(t1, t2, progress);\n }\n`,\n};\n\nconst morphY = {\n uniforms: {\n intensity: { value: 0.3, type: 'f', min: 0, max: 2 },\n },\n fragment: /* glsl */ `\n ${fragmentCommon}\n uniform float intensity;\n uniform sampler2D displacement;\n void main()\t{\n vec2 newUV = (vUv - vec2(0.5))*resolution.zw + vec2(0.5);\n vec4 d1 = texture2D(texture1, newUV);\n vec4 d2 = texture2D(texture2, newUV);\n float displace1 = (d1.r + d1.g + d1.b)*0.33;\n float displace2 = (d2.r + d2.g + d2.b)*0.33;\n\n vec4 t1 = texture2D(texture1, vec2(newUV.x, newUV.y + progress * (displace2 * intensity)));\n vec4 t2 = texture2D(texture2, vec2(newUV.x, newUV.y + (1.0 - progress) * (displace1 * intensity)));\n gl_FragColor = mix(t1, t2, progress);\n }\n`,\n};\n\nconst pageCurl = {\n uniforms: {},\n fragment: /* glsl */ `\n ${fragmentCommon}\n const float MIN_AMOUNT = -0.16;\n const float MAX_AMOUNT = 1.5;\n\n const float PI = 3.141592653589793;\n\n const float scale = 512.0;\n const float sharpness = 3.0;\n\n const float cylinderRadius = 1.0 / PI / 2.0;\n\n vec4 getFromColor(vec2 p) {\n return texture2D(texture1, p);\n }\n\n vec4 getToColor(vec2 p) {\n return texture2D(texture2, p);\n }\n\n vec3 hitPoint(float hitAngle, float yc, vec3 point, mat3 rrotation) {\n float hitPoint = hitAngle / (2.0 * PI);\n point.y = hitPoint;\n return rrotation * point;\n }\n\n vec4 antiAlias(vec4 color1, vec4 color2, float distanc) {\n distanc *= scale;\n if(distanc < 0.0)\n return color2;\n if(distanc > 2.0)\n return color1;\n float dd = pow(1.0 - distanc / 2.0, sharpness);\n return ((color2 - color1) * dd) + color1;\n }\n\n float distanceToEdge(vec3 point) {\n float dx = abs(point.x > 0.5 ? 1.0 - point.x : point.x);\n float dy = abs(point.y > 0.5 ? 1.0 - point.y : point.y);\n if(point.x < 0.0)\n dx = -point.x;\n if(point.x > 1.0)\n dx = point.x - 1.0;\n if(point.y < 0.0)\n dy = -point.y;\n if(point.y > 1.0)\n dy = point.y - 1.0;\n if((point.x < 0.0 || point.x > 1.0) && (point.y < 0.0 || point.y > 1.0))\n return sqrt(dx * dx + dy * dy);\n return min(dx, dy);\n }\n\n vec4 seeThrough(float yc, vec2 p, mat3 rotation, mat3 rrotation, float cylinderAngle) {\n float hitAngle = PI - (acos(yc / cylinderRadius) - cylinderAngle);\n vec3 point = hitPoint(hitAngle, yc, rotation * vec3(p, 1.0), rrotation);\n if(yc <= 0.0 && (point.x < 0.0 || point.y < 0.0 || point.x > 1.0 || point.y > 1.0)) {\n return getToColor(p);\n }\n\n if(yc > 0.0)\n return getFromColor(p);\n\n vec4 color = getFromColor(point.xy);\n vec4 tcolor = vec4(0.0);\n\n return antiAlias(color, tcolor, distanceToEdge(point));\n }\n\n vec4 seeThroughWithShadow(float yc, vec2 p, vec3 point, mat3 rotation, mat3 rrotation, float cylinderAngle, float amount) {\n float shadow = distanceToEdge(point) * 30.0;\n shadow = (1.0 - shadow) / 3.0;\n\n if(shadow < 0.0)\n shadow = 0.0;\n else\n shadow *= amount;\n\n vec4 shadowColor = seeThrough(yc, p, rotation, rrotation, cylinderAngle);\n shadowColor.r -= shadow;\n shadowColor.g -= shadow;\n shadowColor.b -= shadow;\n\n return shadowColor;\n }\n\n vec4 backside(float yc, vec3 point) {\n vec4 color = getFromColor(point.xy);\n float gray = (color.r + color.b + color.g) / 15.0;\n gray += (8.0 / 10.0) * (pow(1.0 - abs(yc / cylinderRadius), 2.0 / 10.0) / 2.0 + (5.0 / 10.0));\n color.rgb = vec3(gray);\n return color;\n }\n\n vec4 behindSurface(vec2 p, float yc, vec3 point, mat3 rrotation, float cylinderAngle, float amount) {\n float shado = (1.0 - ((-cylinderRadius - yc) / amount * 7.0)) / 6.0;\n shado *= 1.0 - abs(point.x - 0.5);\n\n yc = (-cylinderRadius - cylinderRadius - yc);\n\n float hitAngle = (acos(yc / cylinderRadius) + cylinderAngle) - PI;\n point = hitPoint(hitAngle, yc, point, rrotation);\n\n if(yc < 0.0 && point.x >= 0.0 && point.y >= 0.0 && point.x <= 1.0 && point.y <= 1.0 && (hitAngle < PI || amount > 0.5)) {\n shado = 1.0 - (sqrt(pow(point.x - 0.5, 2.0) + pow(point.y - 0.5, 2.0)) / (71.0 / 100.0));\n shado *= pow(-yc / cylinderRadius, 3.0);\n shado *= 0.5;\n } else {\n shado = 0.0;\n }\n return vec4(getToColor(p).rgb - shado, 1.0);\n }\n\n void main() {\n vec2 newUV = (vUv - vec2(0.5)) * resolution.zw + vec2(0.5);\n\n float amount = progress * (MAX_AMOUNT - MIN_AMOUNT) + MIN_AMOUNT;\n float cylinderCenter = amount;\n // 360 degrees * amount\n float cylinderAngle = 2.0 * PI * amount;\n\n const float angle = 100.0 * PI / 180.0;\n float c = cos(-angle);\n float s = sin(-angle);\n\n mat3 rotation = mat3(c, s, 0, -s, c, 0, -0.801, 0.8900, 1);\n c = cos(angle);\n s = sin(angle);\n\n mat3 rrotation = mat3(c, s, 0, -s, c, 0, 0.98500, 0.985, 1);\n\n vec3 point = rotation * vec3(newUV, 1.0);\n\n float yc = point.y - cylinderCenter;\n\n if(yc < -cylinderRadius) {\n // Behind surface\n gl_FragColor = behindSurface(newUV, yc, point, rrotation, cylinderAngle, amount);\n return;\n }\n\n if(yc > cylinderRadius) {\n // Flat surface\n gl_FragColor = getFromColor(newUV);\n return;\n }\n\n float hitAngle = (acos(yc / cylinderRadius) + cylinderAngle) - PI;\n\n float hitAngleMod = mod(hitAngle, 2.0 * PI);\n if((hitAngleMod > PI && amount < 0.5) || (hitAngleMod > PI / 2.0 && amount < 0.0)) {\n gl_FragColor = seeThrough(yc, newUV, rotation, rrotation, cylinderAngle);\n return;\n }\n\n point = hitPoint(hitAngle, yc, point, rrotation);\n\n if(point.x < 0.0 || point.y < 0.0 || point.x > 1.0 || point.y > 1.0) {\n gl_FragColor = seeThroughWithShadow(yc, newUV, point, rotation, rrotation, cylinderAngle, amount);\n return;\n }\n\n vec4 color = backside(yc, point);\n\n vec4 otherColor;\n if(yc < 0.0) {\n float shado = 1.0 - (sqrt(pow(point.x - 0.5, 2.0) + pow(point.y - 0.5, 2.0)) / 0.71);\n shado *= pow(-yc / cylinderRadius, 3.0);\n shado *= 0.5;\n otherColor = vec4(0.0, 0.0, 0.0, shado);\n } else {\n otherColor = getFromColor(newUV);\n }\n\n color = antiAlias(color, otherColor, cylinderRadius - abs(yc));\n\n vec4 cl = seeThroughWithShadow(yc, newUV, point, rotation, rrotation, cylinderAngle, amount);\n float dist = distanceToEdge(point);\n\n gl_FragColor = antiAlias(color, cl, dist);\n }\n `,\n};\n\nconst peelX = {\n uniforms: {},\n fragment: /* glsl */ `\n ${fragmentCommon}\n void main()\t{\n vec2 newUV = (vUv - vec2(0.5))*resolution.zw + vec2(0.5);\n vec2 p = newUV;\n float x = progress;\n x = smoothstep(.0,1.0,(x*2.0+p.x-1.0));\n vec4 f = mix(\n texture2D(texture1, (p-.5)*(1.-x)+.5),\n texture2D(texture2, (p-.5)*x+.5),\n x);\n gl_FragColor = f;\n }\n `,\n};\n\nconst peelY = {\n uniforms: {},\n fragment: /* glsl */ `\n ${fragmentCommon}\n void main()\t{\n vec2 newUV = (vUv - vec2(0.5))*resolution.zw + vec2(0.5);\n vec2 p = newUV;\n float x = progress;\n x = smoothstep(.0,1.0,(x*2.0+p.y-1.0));\n vec4 f = mix(\n texture2D(texture1, (p-.5)*(1.-x)+.5),\n texture2D(texture2, (p-.5)*x+.5),\n x);\n gl_FragColor = f;\n }\n `,\n};\n\nconst pixelize = {\n uniforms: {},\n fragment: /* glsl */ `\n ${fragmentCommon}\n ivec2 squaresMin = ivec2(50);\n int steps = 20;\n\n void main()\t{\n vec2 newUV = (vUv - vec2(0.5))*resolution.zw + vec2(0.5);\n\n float d = min(progress, 1.0 - progress);\n float dist = steps>0 ? ceil(d * float(steps)) / float(steps) : d;\n vec2 squareSize = 2.0 * dist / vec2(squaresMin);\n\n vec2 p = dist>0.0 ? (floor(newUV / squareSize) + 0.5) * squareSize : newUV;\n\n vec2 uv1 = newUV;\n vec2 uv2 = newUV;\n\n vec4 t1 = texture2D(texture1,p);\n vec4 t2 = texture2D(texture2,p);\n\n gl_FragColor = mix(t1, t2, progress);\n }\n `,\n};\n\nconst polygonsFall = {\n uniforms: {},\n detail: 12,\n offsetTop: 0,\n vertex: /* glsl */ `\n ${vertexCommon}\n attribute vec3 centroid1;\n\n ${vertexRotate}\n\n void main() {\n ${PI}\n vUv = uv;\n vBary = bary;\n\n vec3 newpos = position;\n\n float o = 1. - offset;\n float pr = (progress - 0.5) * (0. + resolution.y / resolution.x) + 0.5;\n pr = progress;\n float prog = clamp((pr - o * 0.9) / 0.1, 0., 1.);\n vProgress = prog;\n vProgress1 = clamp((pr - clamp(o - 0.1, 0., 1.) * 0.9) / 0.1, 0., 1.);\n newpos = rotate((newpos - centroid1), vec3(1., 0., 0.), -prog * PI) + centroid1 + vec3(0., -1., 0.) * prog * 0.;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(newpos, 1.0);\n }\n `,\n fragment: /* glsl */ `\n ${fragmentCommon}\n varying float vProgress;\n varying float vProgress1;\n ${PI}\n varying vec3 vBary;\n\n void main()\t{\n float width = 2.5 * vProgress1;\n vec3 d;\n #ifdef GL_OES_standard_derivatives\n d = fwidth(vBary);\n #endif\n vec3 s = smoothstep(d * (width + 0.5), d * (width - 0.5), vBary);\n float alpha = max(max(s.x, s.y), s.z);\n vec3 color = vec3(alpha);\n vec2 newUV = (vUv - vec2(0.5)) * resolution.zw + vec2(0.5);\n vec4 t = texture2D(texture1, newUV);\n float opa = smoothstep(1., 0.5, vProgress);\n opa = 1. - vProgress;\n gl_FragColor = vec4(vUv, 0.0, opa);\n gl_FragColor = vec4(t.rgb + .5 * color * vProgress1, opa);\n }\n `,\n};\n\nconst polygonsMorph = {\n uniforms: {},\n detail: 20,\n offsetTop: 0.4,\n vertex: /* glsl */ `\n ${vertexCommon}\n ${vertexRotate}\n\n void main() {\n ${PI}\n vUv = uv;\n vBary = bary;\n\n vec3 newpos = position;\n\n float o = 1. - offset;\n float prog = clamp((progress - o * 0.6) / 0.4, 0., 1.);\n vProgress = prog;\n vProgress1 = clamp((progress - clamp(o - 0.1, -0., 1.) * 0.9) / 0.1, 0., 1.);\n gl_Position = projectionMatrix * modelViewMatrix * vec4(newpos, 1.0);\n }\n `,\n fragment: /* glsl */ `\n ${fragmentCommon}\n varying float vProgress;\n varying float vProgress1;\n ${PI}\n varying vec3 vBary;\n void main()\t{\n float width = 2.5 * vProgress1;\n vec3 d;\n #ifdef GL_OES_standard_derivatives\n d = fwidth(vBary);\n #endif\n vec3 s = smoothstep(d * (width + 0.5), d * (width - 0.5), vBary);\n float alpha = max(max(s.x, s.y), s.z);\n vec3 color = vec3(alpha);\n\n vec2 newUV = (vUv - vec2(0.5)) * resolution.zw + vec2(0.5);\n vec4 t = texture2D(texture1, newUV);\n float opa = smoothstep(1., 0.5, vProgress);\n opa = 1. - vProgress;\n gl_FragColor = vec4(t.rgb + 1. * color * vProgress1, opa);\n }\n `,\n};\n\nconst polygonsWind = {\n uniforms: {},\n detail: 40,\n offsetTop: 1,\n vertex: /* glsl */ `\n ${vertexCommon}\n attribute vec3 control0;\n attribute vec3 control1;\n\n ${vertexRotate}\n\n float easeOut(float t){\n return t * t * t;\n }\n\n vec3 bezier4(vec3 a, vec3 b, vec3 c, vec3 d, float t) {\n return mix(mix(mix(a, b, t), mix(b, c, t), t), mix(mix(b, c, t), mix(c, d, t), t), t);\n }\n\n void main() {\n ${PI}\n vUv = uv;\n vBary = bary;\n\n vec3 newpos = position;\n\n float o = 1. - offset;\n float prog = clamp((progress - o * 0.6) / 0.4, 0., 1.);\n vProgress = prog;\n vProgress1 = clamp((progress - clamp(o - 0.2, -0., 1.) * 0.6) / 0.4, 0., 1.);\n newpos = bezier4(newpos, control0, control1, newpos, easeOut(prog));\n gl_Position = projectionMatrix * modelViewMatrix * vec4(newpos, 1.0);\n }\n `,\n fragment: /* glsl */ `\n ${fragmentCommon}\n varying float vProgress;\n varying float vProgress1;\n ${PI}\n varying vec3 vBary;\n void main()\t{\n float width = 2.5 * vProgress1;\n vec3 d;\n #ifdef GL_OES_standard_derivatives\n d = fwidth(vBary);\n #endif\n vec3 s = smoothstep(d * (width + 0.5), d * (width - 0.5), vBary);\n float alpha = max(max(s.x, s.y), s.z);\n vec3 color = vec3(alpha);\n\n vec2 newUV = (vUv - vec2(0.5)) * resolution.zw + vec2(0.5);\n vec4 t = texture2D(texture1, newUV);\n float opa = smoothstep(1., 0.5, vProgress);\n opa = 1. - vProgress;\n gl_FragColor = vec4(vUv, 0.0, opa);\n opa = smoothstep(0.5, 1., opa);\n gl_FragColor = vec4(t.rgb + 1. * color * vProgress1, opa);\n }\n `,\n};\n\nconst ripple = {\n uniforms: {\n radius: { value: 0.9, type: 'f', min: 0.1, max: 2 },\n width: { value: 0.35, type: 'f', min: 0, max: 1 },\n },\n fragment: /* glsl */ `\n ${fragmentCommon}\n uniform float width;\n uniform float radius;\n uniform sampler2D displacement;\n float parabola( float x, float k ) {\n return pow( 4. * x * ( 1. - x ), k );\n }\n void main()\t{\n vec2 newUV = (vUv - vec2(0.5))*resolution.zw + vec2(0.5);\n vec2 p = newUV;\n vec2 start = vec2(0.5,0.5);\n vec2 aspect = resolution.wz;\n vec2 uv = newUV;\n float dt = parabola(progress, 1.);\n vec4 noise = texture2D(displacement, fract(vUv+time*0.04));\n float prog = progress*0.66 + noise.g * 0.04;\n float circ = 1. - smoothstep(-width, 0.0, radius * distance(start*aspect, uv*aspect) - prog*(1.+width));\n float intpl = pow(abs(circ), 1.);\n vec4 t1 = texture2D( texture1, (uv - 0.5) * (1.0 - intpl) + 0.5 ) ;\n vec4 t2 = texture2D( texture2, (uv - 0.5) * intpl + 0.5 );\n gl_FragColor = mix( t1, t2, intpl );\n }\n `,\n};\n\nconst shutters = {\n uniforms: {\n intensity: { value: 50, type: 'f', min: 1, max: 100 },\n },\n fragment: /* glsl */ `\n ${fragmentCommon}\n uniform float intensity;\n mat2 rotate(float a) {\n float s = sin(a);\n float c = cos(a);\n return mat2(c, -s, s, c);\n }\n const float PI = 3.1415;\n const float angle1 = PI *0.25;\n const float angle2 = PI *0.25;\n\n void main()\t{\n vec2 newUV = (vUv - vec2(0.5))*resolution.zw + vec2(0.5);\n\n vec2 uvDivided = fract(newUV*vec2(intensity,1.));\n\n vec2 uvDisplaced1 = newUV + rotate(angle1)*uvDivided*progress*0.1;\n vec2 uvDisplaced2 = newUV + rotate(angle2)*uvDivided*(1. - progress)*0.1;\n\n vec4 t1 = texture2D(texture1,uvDisplaced1);\n vec4 t2 = texture2D(texture2,uvDisplaced2);\n\n gl_FragColor = mix(t1, t2, progress);\n }\n\n `,\n};\n\nconst slices = {\n uniforms: {\n size: { value: 0.25, type: 'f', min: 0.1, max: 1 },\n },\n fragment: /* glsl */ `\n ${fragmentCommon}\n uniform float size; // = 0.2\n float count = 20.; // = 10.0\n float smoothness = .5; // = 0.5\n void main()\t{\n vec2 newUV = (vUv - vec2(0.5))*resolution.zw + vec2(0.5);\n\n float pr = smoothstep(-smoothness, 0.0, newUV.x - progress * (1.0 + smoothness));\n float s = step(pr, fract(count * newUV.x));\n\n vec2 uv1 = newUV;\n vec2 uv2 = newUV;\n\n vec4 t1 = texture2D(texture1,uv1);\n vec4 t2 = texture2D(texture2,uv2);\n gl_FragColor = mix(t1, t2, s);\n\n }\n `,\n};\n\nconst squares = {\n uniforms: {},\n fragment: /* glsl */ `\n ${fragmentCommon}\n ivec2 squares = ivec2(10,10);\n vec2 direction = vec2(1.0, -0.5);\n float smoothness = 1.6;\n\n const vec2 center = vec2(0.5, 0.5);\n void main() {\n vec2 newUV = (vUv - vec2(0.5))*resolution.zw + vec2(0.5);\n\n vec2 v = normalize(direction);\n v /= abs(v.x)+abs(v.y);\n float d = v.x * center.x + v.y * center.y;\n float offset = smoothness;\n float pr = smoothstep(-offset, 0.0, v.x * newUV.x + v.y * newUV.y - (d-0.5+progress*(1.+offset)));\n vec2 squarep = fract(newUV*vec2(squares));\n vec2 squaremin = vec2(pr/2.0);\n vec2 squaremax = vec2(1.0 - pr/2.0);\n float a = (1.0 - step(progress, 0.0)) * step(squaremin.x, squarep.x) * step(squaremin.y, squarep.y) * step(squarep.x, squaremax.x) * step(squarep.y, squaremax.y);\n\n vec2 uv1 = newUV;\n vec2 uv2 = newUV;\n\n vec4 t1 = texture2D(texture1,newUV);\n vec4 t2 = texture2D(texture2,newUV);\n\n gl_FragColor = mix(t1, t2, a);\n }\n `,\n};\n\nconst stretch = {\n uniforms: {\n intensity: { value: 50, type: 'f', min: 1, max: 100 },\n },\n fragment: /* glsl */ `\n ${fragmentCommon}\n uniform float intensity;\n mat2 rotate(float a) {\n float s = sin(a);\n float c = cos(a);\n return mat2(c, -s, s, c);\n }\n const float PI = 3.1415;\n const float angle1 = PI *0.25;\n const float angle2 = -PI *0.75;\n const float noiseSeed = 2.;\n float random() {\n return fract(sin(noiseSeed + dot(gl_FragCoord.xy / resolution.xy / 10.0, vec2(12.9898, 4.1414))) * 43758.5453);\n }\n float hash(float n) { return fract(sin(n) * 1e4); }\n float hash(vec2 p) { return fract(1e4 * sin(17.0 * p.x + p.y * 0.1) * (0.1 + abs(sin(p.y * 13.0 + p.x)))); }\n float hnoise(vec2 x) {\n vec2 i = floor(x);\n vec2 f = fract(x);\n float a = hash(i);\n float b = hash(i + vec2(1.0, 0.0));\n float c = hash(i + vec2(0.0, 1.0));\n float d = hash(i + vec2(1.0, 1.0));\n vec2 u = f * f * (3.0 - 2.0 * f);\n return mix(a, b, u.x) + (c - a) * u.y * (1.0 - u.x) + (d - b) * u.x * u.y;\n }\n void main()\t{\n vec2 newUV = (vUv - vec2(0.5))*resolution.zw + vec2(0.5);\n\n float hn = hnoise(newUV.xy * resolution.xy / 100.0);\n vec2 d = vec2(0.,normalize(vec2(0.5,0.5) - newUV.xy).y);\n vec2 uv1 = newUV + d * progress / 5.0 * (1.0 + hn / 2.0);\n vec2 uv2 = newUV - d * (1.0 - progress) / 5.0 * (1.0 + hn / 2.0);\n vec4 t1 = texture2D(texture1,uv1);\n vec4 t2 = texture2D(texture2,uv2);\n gl_FragColor = mix(t1, t2, progress);\n }\n `,\n};\n\nconst waveX = {\n uniforms: {\n // width: {value: 0.35, type:'f', min:0., max:1},\n },\n fragment: /* glsl */ `\n ${fragmentCommon}\n uniform sampler2D displacement;\n vec2 mirrored(vec2 v) {\n vec2 m = mod(v,2.);\n return mix(m,2.0 - m, step(1.0 ,m));\n }\n void main()\t{\n vec2 newUV = (vUv - vec2(0.5))*resolution.zw + vec2(0.5);\n vec4 noise = texture2D(displacement, mirrored(newUV+time*0.04));\n float prog = (1.0 - progress)*0.8 -0.05 + noise.g * 0.06;\n float intpl = pow(abs(smoothstep(0., 1., (prog*2. - vUv.x + 0.5))), 10.);\n\n vec4 t1 = texture2D( texture2, (newUV - 0.5) * (1.0 - intpl) + 0.5 ) ;\n vec4 t2 = texture2D( texture1, (newUV - 0.5) * intpl + 0.5 );\n gl_FragColor = mix( t1, t2, intpl );\n }\n `,\n};\n\nconst wind = {\n uniforms: {},\n fragment: /* glsl */ `\n ${fragmentCommon}\n float size = 0.2;\n\n float rand (vec2 co) {\n return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453);\n }\n\n void main()\t{\n vec2 newUV = (vUv - vec2(0.5))*resolution.zw + vec2(0.5);\n\n float r = rand(vec2(0, newUV.y));\n float m = smoothstep(0.0, -size, newUV.x*(1.0-size) + size*r - ((progress) * (1.0 + size)));\n\n vec2 uv1 = newUV;\n vec2 uv2 = newUV;\n\n vec4 t1 = texture2D(texture1,uv1);\n vec4 t2 = texture2D(texture2,uv2);\n gl_FragColor = mix(t1, t2, m);\n\n }\n `,\n};\n\nconst dots = {\n uniforms: {},\n fragment: /* glsl */ `\n ${fragmentCommon}\n const float SQRT_2 = 1.414213562373;\n const vec2 center = vec2(0, 0);// = vec2(0, 0);\n const float dots = 20.0;// = 20.0;\n\n vec4 getFromColor(vec2 p) {\n return texture2D(texture1, p);\n }\n\n vec4 getToColor(vec2 p) {\n return texture2D(texture2, p);\n }\n\n void main()\t{\n vec2 newUV = (vUv - vec2(0.5))*resolution.zw + vec2(0.5);\n\n bool nextImage = distance(fract(newUV * dots), vec2(0.5, 0.5)) < ( progress / distance(newUV, center));\n gl_FragColor = nextImage ? getToColor(newUV) : getFromColor(newUV);\n }\n\n `,\n};\n\nconst flyeye = {\n uniforms: {},\n fragment: /* glsl */ `\n ${fragmentCommon}\n const float size = 0.04; // = 0.04\n const float zoom = 100.0; // = 50.0\n const float colorSeparation = 0.3; // = 0.3\n\n vec4 getFromColor(vec2 p) {\n return texture2D(texture1, p);\n }\n\n vec4 getToColor(vec2 p) {\n return texture2D(texture2, p);\n }\n\n void main()\t{\n vec2 newUV = (vUv - vec2(0.5))*resolution.zw + vec2(0.5);\n\n float inv = 1. - progress;\n vec2 disp = size*vec2(cos(zoom*newUV.x), sin(zoom*newUV.y));\n vec4 texTo = getToColor(newUV + inv*disp);\n vec4 texFrom = vec4(\n getFromColor(newUV + progress*disp*(1.0 - colorSeparation)).r,\n getFromColor(newUV + progress*disp).g,\n getFromColor(newUV + progress*disp*(1.0 + colorSeparation)).b,\n 1.0);\n gl_FragColor = texTo*progress + texFrom*inv;\n }\n\n `,\n};\n\n// prettier-ignore\nconst shaders = {\n 'dots': dots,\n 'flyeye': flyeye,\n 'morph-x': morphX,\n 'morph-y': morphY,\n 'page-curl': pageCurl,\n 'peel-x': peelX,\n 'peel-y': peelY,\n 'polygons-fall': polygonsFall,\n 'polygons-morph': polygonsMorph,\n 'polygons-wind': polygonsWind,\n 'pixelize': pixelize,\n 'ripple': ripple,\n 'shutters': shutters,\n 'slices': slices,\n 'squares': squares,\n 'stretch': stretch,\n 'wave-x': waveX,\n 'wind': wind,\n};\n\nconst defaultVertex = `\nattribute vec2 uv;\nattribute vec3 position;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nvarying vec2 vUv;\n\nvoid main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n}\n`;\n\nconst getRandomShader = (arr, opts) => {\n const { shaderPerSlide, swiper } = opts;\n const index = swiper.params.loop ? swiper.realIndex : swiper.activeIndex;\n let allShaders = shaders;\n if (Array.isArray(arr) && arr.length) {\n if (shaderPerSlide) {\n if (typeof arr[index] === 'undefined') return shaders[arr[0]];\n return shaders[arr[index]];\n }\n allShaders = {};\n Object.keys(shaders).forEach((key) => {\n if (arr.includes(key)) allShaders[key] = shaders[key];\n });\n }\n const keyIndex = Math.floor(Math.random() * Object.keys(allShaders).length);\n return allShaders[Object.keys(allShaders)[keyIndex]];\n};\n\nclass GL {\n constructor(opts) {\n const shader =\n opts.shader === 'random' || Array.isArray(opts.shader)\n ? getRandomShader(opts.shader, opts)\n : shaders[opts.shader];\n this.shader = shader;\n this.displacement = opts.displacementMap || displacement;\n this.scene = new Transform();\n this.swiper = opts.swiper;\n this.vertex = shader.vertex || defaultVertex;\n this.fragment = shader.fragment;\n this.uniforms = shader.uniforms || {};\n this.renderer = new Renderer({ dpr: 2, webgl: 2, alpha: true });\n this.gl = this.renderer.gl;\n this.width = window.innerWidth;\n this.height = window.innerHeight;\n this.renderer.setSize(this.width, this.height);\n this.gl.clearColor(1, 1, 1, 0);\n this.gl.clear(this.gl.COLOR_BUFFER_BIT);\n this.opts = opts;\n\n this.container = this.swiper.el;\n this.displacementTexture = null;\n\n this.width = this.swiper.width;\n this.height = this.swiper.height;\n if (this.swiper.isElement) {\n this.gl.canvas.setAttribute('slot', 'container-start');\n }\n this.container.prepend(this.gl.canvas);\n\n this.camera = new Camera(this.gl, { fov: 45 });\n this.camera.perspective({\n aspect: this.gl.canvas.width / this.gl.canvas.height,\n });\n\n this.camera.position.set(0, 0, 2);\n this.time = 0;\n this.current = 0;\n\n this.init(() => {\n this.addObjects();\n this.resize();\n this.render();\n });\n }\n\n animateUniform(uniform, targetValue, cb) {\n const startPosition = uniform.value;\n let startTime = null;\n let time;\n\n window.cancelAnimationFrame(this.animateUniformFrame);\n\n const dir = targetValue > uniform.value ? 'next' : 'prev';\n\n const isOutOfBound = (current, target) =>\n (dir === 'next' && current >= target) ||\n (dir === 'prev' && current <= target);\n\n const animate = () => {\n if (this.destroyed) return;\n time = new Date().getTime();\n if (startTime === null) {\n startTime = time;\n }\n\n const progress = Math.max(\n Math.min((time - startTime) / this.swiper.params.speed, 1),\n 0,\n );\n const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2;\n let currentPosition =\n startPosition + easeProgress * (targetValue - startPosition);\n\n if (isOutOfBound(currentPosition, targetValue)) {\n currentPosition = targetValue;\n }\n uniform.value = currentPosition;\n if (isOutOfBound(currentPosition, targetValue)) {\n cancelAnimationFrame(this.animateUniformFrame);\n if (cb) cb();\n return;\n }\n this.animateUniformFrame = requestAnimationFrame(animate);\n };\n animate();\n }\n\n loadTextures() {\n const promises = [];\n const that = this;\n this.images = [];\n this.textures = [];\n\n this.container.querySelectorAll('.swiper-gl-image').forEach((img) => {\n this.images.push(img.src);\n });\n\n this.images.forEach((url, i) => {\n const promise = new Promise((resolve) => {\n const img = new Image();\n img.crossOrigin = 'anonymous';\n const texture = new Texture(this.gl);\n img.onload = () => {\n texture.image = img;\n that.textures[i] = texture;\n resolve();\n };\n img.src = url;\n });\n promises.push(promise);\n });\n promises.push(\n new Promise((resolve) => {\n const img = new Image();\n img.crossOrigin = 'anonymous';\n const texture = new Texture(this.gl);\n img.onload = () => {\n texture.image = img;\n that.displacementTexture = texture;\n resolve();\n };\n img.src = displacement;\n }),\n );\n\n return Promise.all(promises);\n }\n\n init(cb) {\n this.loadTextures().then(() => {\n this.initialized = true;\n if (this.onInit) this.onInit();\n cb();\n });\n }\n\n resize() {\n if (!this.initialized || this.destroyed) return;\n const { width, height } = this.swiper;\n this.width = width;\n this.height = height;\n this.renderer.setSize(width, height);\n const dist = this.camera.position.z;\n\n this.camera.perspective({\n aspect: width / height,\n fov: 2 * (180 / Math.PI) * Math.atan(1 / (2 * dist)),\n });\n if (!this.textures[0].image) return;\n const imageAspect =\n this.textures[0].image.height / this.textures[0].image.width;\n let a1;\n let a2;\n if (height / width > imageAspect) {\n a1 = (width / height) * imageAspect;\n a2 = 1;\n } else {\n a1 = 1;\n a2 = height / width / imageAspect;\n }\n\n this.material.uniforms.resolution.value.x = width;\n this.material.uniforms.resolution.value.y = height;\n this.material.uniforms.resolution.value.z = a1;\n this.material.uniforms.resolution.value.w = a2;\n\n if (this.shader.vertex && this.vertexMaterial) {\n this.vertexMaterial.uniforms.resolution.value.x = width;\n this.vertexMaterial.uniforms.resolution.value.y = height;\n this.vertexMaterial.uniforms.resolution.value.z = a1;\n this.vertexMaterial.uniforms.resolution.value.w = a2;\n }\n\n if (this.shader.vertex) {\n this.nextMesh.scale.set(this.camera.aspect / 2, 1 / 2, 1 / 2);\n this.currentMesh.scale.set(this.camera.aspect / 2, 1 / 2, 1 / 2);\n } else {\n this.plane.scale.x = this.camera.aspect;\n this.plane.scale.y = 1;\n }\n }\n\n createMaterial() {\n return new Program(this.gl, {\n extensions: {\n derivatives: '#extension GL_OES_standard_derivatives : enable',\n },\n // side: DoubleSide,\n uniforms: {\n time: { type: 'f', value: 0 },\n progress: { type: 'f', value: 0 },\n intensity: { type: 'f', value: 0 },\n width: { type: 'f', value: 0 },\n radius: { type: 'f', value: 0 },\n size: { type: 'f', value: 0 },\n texture1: { type: 'f', value: this.textures[0] },\n texture2: { type: 'f', value: this.textures[1] },\n\n displacement: {\n type: 'f',\n value: this.displacementTexture,\n },\n resolution: { type: 'v4', value: new Vec4() },\n },\n vertex: this.shader.vertex || defaultVertex,\n fragment: this.shader.fragment,\n ...(this.shader.vertex\n ? {\n transparent: true,\n depthWrite: false,\n }\n : {}),\n });\n }\n\n addObjects() {\n this.scene.children.forEach((child) => {\n this.scene.removeChild(child);\n });\n this.scene.children.forEach((child) => {\n this.scene.removeChild(child);\n });\n this.material = this.createMaterial();\n\n if (this.shader.vertex) {\n const geometry = getGeometry(\n this.gl,\n this.shader.detail,\n this.shader.offsetTop,\n );\n const texture = this.textures[1];\n this.vertexMaterial = this.createMaterial();\n this.vertexMaterial.uniforms.texture1.value = texture;\n this.currentMesh = new Mesh(this.gl, {\n geometry,\n program: this.material,\n });\n this.nextMesh = new Mesh(this.gl, {\n geometry,\n program: this.vertexMaterial,\n });\n this.nextMesh.position.z = -0.0001;\n this.currentMesh.setParent(this.scene);\n this.nextMesh.setParent(this.scene);\n } else {\n const geometry = new Plane(this.gl, {\n width: 1,\n height: 1,\n widthSegments: 2,\n heightSegments: 2,\n });\n this.plane = new Mesh(this.gl, { geometry, program: this.material });\n this.plane.setParent(this.scene);\n }\n }\n\n replaceShader(newShaderName) {\n let fromTexture;\n let newTexture;\n if (this.shader.vertex) {\n fromTexture = this.material.uniforms.texture1.value;\n newTexture = this.vertexMaterial.uniforms.texture1.value;\n } else {\n fromTexture = this.material.uniforms.texture1.value;\n newTexture = this.material.uniforms.texture2.value;\n }\n const shader =\n newShaderName === 'random' || Array.isArray(newShaderName)\n ? getRandomShader(newShaderName, this.opts)\n : shaders[newShaderName];\n const { fragment, uniforms, vertex } = shader;\n this.shader = shader;\n this.vertex = vertex || defaultVertex;\n this.fragment = fragment || ``;\n this.uniforms = uniforms || {};\n this.addObjects();\n if (this.shader.vertex) {\n this.material.uniforms.texture1.value = newTexture;\n this.vertexMaterial.uniforms.texture1.value = newTexture;\n } else {\n this.material.uniforms.texture1.value = fromTexture;\n this.material.uniforms.texture2.value = newTexture;\n this.material.uniforms.progress.value = 1;\n }\n\n this.resize();\n this.swiper.params.gl.shader = newShaderName;\n }\n\n replaceRandomShader() {\n const shader = getRandomShader(this.opts.shader, this.opts);\n const { fragment, uniforms, vertex } = shader;\n this.shader = shader;\n this.fragment = fragment || ``;\n this.uniforms = uniforms || {};\n this.vertex = vertex || defaultVertex;\n this.addObjects();\n this.resize();\n }\n\n setProgress(\n fromIndex,\n toIndex,\n progress,\n needsTransitionDuration,\n needShaderReplace,\n ) {\n if (this.destroyed || this.swiper.glDestroyed) return;\n if (!this.initialized) {\n this.onInit = () => {\n requestAnimationFrame(() => {\n this.setProgress(\n fromIndex,\n toIndex,\n progress,\n needsTransitionDuration,\n );\n });\n };\n return;\n }\n if (\n this.swiper.params.loop &&\n this.swiper.slides[fromIndex] &&\n this.swiper.slides[toIndex]\n ) {\n fromIndex = parseInt(\n this.swiper.slides[fromIndex].getAttribute('data-swiper-slide-index'),\n 10,\n );\n toIndex = parseInt(\n this.swiper.slides[toIndex].getAttribute('data-swiper-slide-index'),\n 10,\n );\n }\n const newTexture = this.textures[toIndex];\n const fromTexture = this.textures[fromIndex];\n\n this.material.uniforms.texture1.value = fromTexture;\n if (!this.shader.vertex) {\n this.material.uniforms.texture2.value = newTexture;\n } else {\n this.vertexMaterial.uniforms.texture1.value = newTexture;\n }\n if (needShaderReplace) {\n if (this.preventShaderReplace) {\n this.material.uniforms.progress.value = Math.abs(progress);\n return;\n }\n this.preventShaderReplace = true;\n requestAnimationFrame(() => {\n this.preventShaderReplace = false;\n });\n\n if (\n this.swiper.params.gl.shader === 'random' ||\n Array.isArray(this.swiper.params.gl.shader)\n ) {\n this.replaceRandomShader();\n this.material.uniforms.texture1.value = fromTexture;\n this.material.uniforms.texture2.value = newTexture;\n this.material.uniforms.progress.value = Math.abs(progress);\n } else {\n this.material.uniforms.progress.value = Math.abs(progress);\n }\n } else if (needsTransitionDuration) {\n if (progress === 0 && this.material.uniforms.progress.value === 0) {\n this.material.uniforms.progress.value = 1;\n }\n if (progress === 1 && this.material.uniforms.progress.value === 1) {\n this.material.uniforms.progress.value = 0;\n }\n this.animateUniform(this.material.uniforms.progress, progress, () => {\n if (\n this.swiper.params.gl.shader === 'random' ||\n Array.isArray(this.swiper.params.gl.shader)\n ) {\n this.replaceRandomShader();\n this.material.uniforms.texture1.value = fromTexture;\n this.material.uniforms.texture2.value = newTexture;\n this.material.uniforms.progress.value = progress;\n }\n if (progress === 1) {\n this.material.uniforms.texture1.value = newTexture;\n }\n this.material.uniforms.progress.value = 0;\n });\n } else {\n this.material.uniforms.progress.value = Math.abs(progress);\n }\n }\n\n render() {\n if (this.swiper.destroyed || this.destroyed) return;\n this.time += 0.05;\n this.material.uniforms.time.value = this.time;\n\n Object.keys(this.uniforms).forEach((item) => {\n this.material.uniforms[item].value = this.uniforms[item].value;\n });\n\n requestAnimationFrame(this.render.bind(this));\n this.renderer.render({ scene: this.scene, camera: this.camera });\n }\n\n destroy() {\n this.initialized = false;\n this.destroyed = true;\n if (this.gl && this.gl.canvas) this.container.removeChild(this.gl.canvas);\n }\n}\n\nif (typeof window !== 'undefined' && window.SwiperElementRegisterParams) {\n window.SwiperElementRegisterParams(['gl']);\n}\n\nfunction SwiperGL({ swiper, on, extendParams }) {\n swiper.gl = null;\n let noWebGLSupport = false;\n\n function supportsWebGL() {\n try {\n const canvas = document.createElement('canvas');\n return (\n !!window.WebGLRenderingContext &&\n (canvas.getContext('webgl') || canvas.getContext('experimental-webgl'))\n );\n } catch (e) {\n return false;\n }\n }\n\n extendParams({\n gl: {\n shader: 'random',\n shaderPerSlide: false,\n displacementMap: undefined,\n },\n });\n\n const glInit = () => {\n swiper.gl = new GL({\n swiper,\n shader: swiper.params.gl.shader,\n shaderPerSlide: swiper.params.gl.shaderPerSlide,\n });\n };\n\n let needsTransitionDuration;\n let previousProgress;\n\n on('beforeInit', () => {\n if (swiper.params.effect !== 'gl') return;\n if (!supportsWebGL()) {\n noWebGLSupport = true;\n return;\n }\n\n swiper.classNames.push(`${swiper.params.containerModifierClass}gl`);\n const overwriteParams = {\n watchSlidesProgress: true,\n };\n Object.assign(swiper.params, overwriteParams);\n Object.assign(swiper.originalParams, overwriteParams);\n });\n on('init', () => {\n if (swiper.params.effect !== 'gl' || noWebGLSupport || swiper.glDestroyed)\n return;\n if (!swiper.gl) {\n glInit();\n }\n });\n on('resize', () => {\n if (swiper.params.effect !== 'gl' || noWebGLSupport || swiper.glDestroyed)\n return;\n swiper.gl.resize();\n });\n\n on('setTranslate', () => {\n if (swiper.params.effect !== 'gl' || noWebGLSupport || swiper.glDestroyed)\n return;\n if (!swiper.gl) {\n glInit();\n }\n let from;\n let to;\n let transitionProgress;\n let needShaderReplace = false;\n let targetIndex;\n swiper.slides.forEach((slideEl, slideIndex) => {\n // eslint-disable-next-line\n const progress = slideEl.progress;\n if (swiper.params.cssMode && Math.round(progress * 100) === 0) {\n needShaderReplace = true;\n }\n if (\n (progress > 0 && progress < 1) ||\n (progress === 0 && swiper.progress < previousProgress)\n ) {\n from = slideIndex;\n to = slideIndex + 1;\n transitionProgress = progress;\n targetIndex = from;\n }\n if (\n (progress < 0 && progress > -1) ||\n (progress === 0 && swiper.progress > previousProgress)\n ) {\n from = slideIndex - 1;\n to = slideIndex;\n transitionProgress = 1 + progress;\n targetIndex = to;\n }\n });\n\n previousProgress = swiper.progress || 0;\n if (typeof from === 'undefined' && typeof to === 'undefined') {\n return;\n }\n needShaderReplace =\n needShaderReplace &&\n Math.round(transitionProgress) === transitionProgress;\n const newFrom = Math.min(targetIndex, swiper.activeIndex);\n const newTo = Math.max(targetIndex, swiper.activeIndex);\n if (!swiper.params.loop && newTo !== newFrom) {\n from = newFrom;\n to = newTo;\n }\n\n swiper.gl.setProgress(\n from,\n to,\n transitionProgress,\n needsTransitionDuration,\n needShaderReplace,\n );\n });\n on('setTransition', (_s, duration) => {\n if (swiper.params.effect !== 'gl' || noWebGLSupport || swiper.glDestroyed)\n return;\n needsTransitionDuration = duration > 0 && !swiper.params.cssMode;\n });\n on('slidesGridLengthChange', () => {\n if (\n swiper.params.effect !== 'gl' ||\n noWebGLSupport ||\n !swiper.initialized ||\n swiper.glDestroyed\n )\n return;\n if (swiper.gl && swiper.gl.loadTextures) {\n swiper.gl.loadTextures();\n }\n });\n on('beforeDestroy', () => {\n if (swiper.params.effect !== 'gl' || noWebGLSupport) return;\n if (swiper.gl) {\n swiper.glDestroyed = true;\n swiper.gl.destroy();\n swiper.gl = null;\n }\n });\n}\n\nexport { SwiperGL as default };\n","/**\n * UI Initiative Slicer Slider\n *\n * Images slicer slider\n *\n * https://uiinitiative.com\n *\n * Copyright 2023 UI Initiative\n *\n * Released under the UI Initiative Regular License\n *\n * October 25, 2023\n *\n */\n\nif (typeof window !== 'undefined' && window.SwiperElementRegisterParams) {\n window.SwiperElementRegisterParams(['slicerEffect']);\n}\n\nexport default function EffectSlicer({ swiper, extendParams, on, emit }) {\n extendParams({\n slicerEffect: {\n split: 5,\n },\n });\n\n function effectVirtualTransitionEnd({ duration }) {\n const { slides, activeIndex } = swiper;\n if (duration !== 0) {\n let eventTriggered = false;\n const transitionEndTarget = slides[activeIndex].querySelector(\n '.swiper-slicer-image-clone:nth-child(1)',\n );\n if (!transitionEndTarget) return;\n const onTransitionEnd = (e) => {\n if (e.target !== transitionEndTarget) return;\n transitionEndTarget.removeEventListener(\n 'transitionend',\n onTransitionEnd,\n );\n if (eventTriggered) return;\n if (!swiper || swiper.destroyed) return;\n eventTriggered = true;\n swiper.animating = false;\n\n const evt = new window.CustomEvent('transitionend', {\n bubbles: true,\n cancelable: true,\n });\n swiper.wrapperEl.dispatchEvent(evt);\n };\n transitionEndTarget.addEventListener('transitionend', onTransitionEnd);\n }\n }\n\n const createImages = () => {\n swiper.slides.forEach((slideEl) => {\n if (slideEl.querySelector('.swiper-slicer-image-clones')) return;\n const imageEl = slideEl.querySelector('.swiper-slicer-image');\n if (!imageEl) return;\n const nextEl = imageEl.nextElementSibling;\n const cloneContainerEl = document.createElement('div');\n cloneContainerEl.classList.add('swiper-slicer-image-clones');\n for (let i = 0; i < swiper.params.slicerEffect.split; i += 1) {\n const div = document.createElement('div');\n div.classList.add('swiper-slicer-image-clone');\n div.appendChild(imageEl.cloneNode());\n cloneContainerEl.appendChild(div);\n }\n if (nextEl) {\n imageEl.parentNode.insertBefore(cloneContainerEl, nextEl);\n } else {\n imageEl.parentNode.appendChild(cloneContainerEl);\n }\n });\n };\n\n const setImages = () => {\n swiper.slides.forEach((slideEl) =>\n slideEl.querySelectorAll('.swiper-slicer-image').forEach((imageEl) => {\n imageEl.style.width = `${swiper.width}px`;\n imageEl.style.height = `${swiper.height}px`;\n }),\n );\n swiper.slides.forEach((slideEl) => {\n slideEl\n .querySelectorAll('.swiper-slicer-image-clone')\n .forEach((cloneEl, cloneElIndex) => {\n const cloneImg = cloneEl.querySelector('.swiper-slicer-image');\n if (swiper.params.direction === 'horizontal') {\n cloneEl.style.height = `${100 / swiper.params.slicerEffect.split}%`;\n cloneEl.style.top = `${\n (100 / swiper.params.slicerEffect.split) * cloneElIndex\n }%`;\n cloneImg.style.top = `-${100 * cloneElIndex}%`;\n } else {\n cloneEl.style.width = `${100 / swiper.params.slicerEffect.split}%`;\n cloneEl.style.left = `${\n (100 / swiper.params.slicerEffect.split) * cloneElIndex\n }%`;\n cloneImg.style.left = `-${100 * cloneElIndex}%`;\n }\n });\n });\n };\n\n const setTranslate = () => {\n const axis = swiper.params.direction === 'vertical' ? 'Y' : 'X';\n swiper.slides.forEach((slideEl, slideIndex) => {\n slideEl.style.transform = `translate${axis}(-${slideIndex * 100}%)`;\n const slideProgress = slideEl.progress;\n const contentEl = slideEl.querySelector('.swiper-slide-content');\n if (contentEl) {\n contentEl.style.transform = `translate${axis}(${\n swiper.size * -slideProgress * 1.2\n }px)`;\n }\n const images = slideEl.querySelectorAll('.swiper-slicer-image-clone');\n images.forEach((imageEl) => {\n const progress = -slideProgress;\n imageEl.style.transform = `translate${axis}(${progress * 100}%)`;\n });\n });\n };\n\n const setTransition = (duration) => {\n swiper.slides.forEach((slideEl) => {\n const images = slideEl.querySelectorAll('.swiper-slicer-image-clone');\n const contentEl = slideEl.querySelector('.swiper-slide-content');\n if (contentEl) {\n contentEl.style.transitionDuration = `${duration}ms`;\n }\n // eslint-disable-next-line\n\n images.forEach((imageEl, imageIndex) => {\n if (duration === 0) {\n imageEl.style.transitionTimingFunction = 'ease-out';\n imageEl.style.transitionDuration = `${\n swiper.params.speed +\n (swiper.params.speed / (images.length - 1)) *\n (images.length - imageIndex - 1)\n }ms`;\n } else {\n imageEl.style.transitionTimingFunction = '';\n imageEl.style.transitionDuration = `${\n duration +\n (duration / (images.length - 1)) * (images.length - imageIndex - 1)\n }ms`;\n }\n });\n });\n\n effectVirtualTransitionEnd({ duration });\n };\n\n on('setTranslate', () => {\n if (swiper.params.effect !== 'slicer') return;\n\n setTranslate();\n });\n\n on('setTransition', (_s, duration) => {\n if (swiper.params.effect !== 'slicer') return;\n setTransition(duration);\n });\n\n on('slidesLengthChange', () => {\n createImages();\n setImages();\n });\n\n on('beforeInit', () => {\n if (swiper.params.effect !== 'slicer') return;\n\n swiper.classNames.push('swiper-slicer');\n\n const overwriteParams = {\n slidesPerView: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n spaceBetween: 0,\n virtualTranslate: true,\n };\n\n Object.assign(swiper.params, overwriteParams);\n Object.assign(swiper.originalParams, overwriteParams);\n });\n on('init', () => {\n if (swiper.params.effect !== 'slicer') return;\n createImages();\n emit('setTranslate', swiper, swiper.translate);\n });\n\n on('resize init', () => {\n if (swiper.params.effect !== 'slicer') return;\n setImages();\n });\n}\n","/**\n * UI Initiative Shutters Slider\n *\n * Infinite 3D carousel slider\n *\n * https://uiinitiative.com\n *\n * Copyright 2023 UI Initiative\n *\n * Released under the UI Initiative Regular License\n *\n * October 25, 2023\n */\n\nif (typeof window !== 'undefined' && window.SwiperElementRegisterParams) {\n window.SwiperElementRegisterParams(['shuttersEffect']);\n}\n\nexport default function EffectShutters({ swiper, extendParams, on }) {\n extendParams({\n shuttersEffect: {\n split: 5,\n },\n });\n\n const createImages = () => {\n swiper.slides.forEach((slideEl) => {\n const imageEl = slideEl.querySelector('.swiper-shutters-image');\n if (!imageEl) return;\n const nextEl = imageEl.nextElementSibling;\n const cloneContainerEl = document.createElement('div');\n cloneContainerEl.classList.add('swiper-shutters-image-clones');\n for (let i = 0; i < swiper.params.shuttersEffect.split; i += 1) {\n const div = document.createElement('div');\n div.classList.add('swiper-shutters-image-clone');\n div.appendChild(imageEl.cloneNode());\n cloneContainerEl.appendChild(div);\n }\n if (nextEl) {\n imageEl.parentNode.insertBefore(cloneContainerEl, nextEl);\n } else {\n imageEl.parentNode.appendChild(cloneContainerEl);\n }\n });\n };\n\n const setImages = () => {\n swiper.el.querySelectorAll('.swiper-shutters-image').forEach((imageEl) => {\n imageEl.style.width = `${swiper.width}px`;\n imageEl.style.height = `${swiper.height}px`;\n });\n swiper.el\n .querySelectorAll('.swiper-slide, swiper-slide')\n .forEach((slideEl) => {\n slideEl\n .querySelectorAll('.swiper-shutters-image-clone')\n .forEach((cloneEl, cloneElIndex) => {\n const percentagePerItem = 100 / swiper.params.shuttersEffect.split;\n const cloneImg = cloneEl.querySelector('.swiper-shutters-image');\n if (swiper.params.direction === 'vertical') {\n cloneEl.style.height = `${\n 100 / swiper.params.shuttersEffect.split\n }%`;\n cloneEl.style.top = `${\n (100 / swiper.params.shuttersEffect.split) * cloneElIndex\n }%`;\n cloneImg.style.top = `-${100 * cloneElIndex}%`;\n } else {\n cloneEl.style.width = `${\n 100 / swiper.params.shuttersEffect.split\n }%`;\n cloneEl.style.left = `${\n (100 / swiper.params.shuttersEffect.split) * cloneElIndex\n }%`;\n cloneImg.style.left = `-${100 * cloneElIndex}%`;\n }\n\n cloneImg.setAttribute('data-swiper-parallax', '10%');\n\n cloneEl.setAttribute(\n 'data-swiper-parallax',\n `${\n percentagePerItem *\n (cloneElIndex + 1) *\n (cloneElIndex % 2 === 0 ? 0.5 : -1)\n }%`,\n );\n });\n });\n };\n\n on('beforeInit', () => {\n if (swiper.params.effect !== 'shutters') return;\n\n swiper.classNames.push('swiper-shutters');\n\n const overwriteParams = {\n watchSlidesProgress: true,\n parallax: { enabled: true },\n };\n\n Object.assign(swiper.params, overwriteParams);\n Object.assign(swiper.originalParams, overwriteParams);\n });\n on('init', () => {\n if (swiper.params.effect !== 'shutters') return;\n createImages();\n });\n\n on('resize init', () => {\n if (swiper.params.effect !== 'shutters') return;\n setImages();\n });\n}\n","// Swiper JS Plugin\n// [ https://uiinitiative.com/catalog/slicer-slider ]\nimport EffectSlicer from '/src/build/lib/swiperjs/effect-slicer.esm.js';\nwindow.EffectSlicer = EffectSlicer;\nimport '/src/build/lib/swiperjs/effect-slicer.css';\n\n// [ https://uiinitiative.com/catalog/shaders-slider ]\nimport SwiperGL from '/src/build/lib/swiperjs/swiper-gl.esm.js';\nwindow.SwiperGL = SwiperGL;\nimport '/src/build/lib/swiperjs/swiper-gl.css';\n\n// [ https://uiinitiative.com/catalog/shutters-slider ]\nimport EffectShutters from '/src/build/lib/swiperjs/effect-shutters.esm.js';\nwindow.EffectShutters = EffectShutters;\nimport '/src/build/lib/swiperjs/effect-shutters.css';\n\n// [ https://uiinitiative.com/catalog/carousel-slider ]\nimport EffectCarousel from '/src/build/lib/swiperjs/effect-carousel.esm.js';\nwindow.EffectCarousel = EffectCarousel;\nimport '/src/build/lib/swiperjs/effect-carousel.css';","/**\n * UI Initiative Carousel Slider\n *\n * Infinite 3D carousel slider\n *\n * https://uiinitiative.com\n *\n * Copyright 2023 UI Initiative\n *\n * Released under the UI Initiative Regular License\n *\n * December 27, 2023\n */\n\nexport default function CarouselSlider({ swiper, on, extendParams }) {\n extendParams({\n carouselEffect: {\n opacityStep: 0.33,\n scaleStep: 0.2,\n sideSlides: 2,\n },\n });\n on('beforeInit', () => {\n if (swiper.params.effect !== 'carousel') return;\n swiper.classNames.push(`${swiper.params.containerModifierClass}carousel`);\n const overwriteParams = {\n watchSlidesProgress: true,\n centeredSlides: true,\n };\n\n Object.assign(swiper.params, overwriteParams);\n Object.assign(swiper.originalParams, overwriteParams);\n });\n on('progress', () => {\n if (swiper.params.effect !== 'carousel') return;\n const { scaleStep, opacityStep } = swiper.params.carouselEffect;\n const sideSlides = Math.max(\n Math.min(swiper.params.carouselEffect.sideSlides, 3),\n 1,\n );\n const modifyMultiplier = {\n 1: 2,\n 2: 1,\n 3: 0.2,\n }[sideSlides];\n const translateModifier = {\n 1: 50,\n 2: 50,\n 3: 67,\n }[sideSlides];\n\n const zIndexMax = swiper.slides.length;\n\n for (let i = 0; i < swiper.slides.length; i += 1) {\n const slideEl = swiper.slides[i];\n const slideProgress = swiper.slides[i].progress;\n const absProgress = Math.abs(slideProgress);\n let modify = 1;\n\n if (absProgress > 1) {\n modify = (absProgress - 1) * 0.3 * modifyMultiplier + 1;\n }\n const opacityEls = slideEl.querySelectorAll(\n '.swiper-carousel-animate-opacity',\n );\n const translate = `${\n slideProgress *\n modify *\n translateModifier *\n (swiper.rtlTranslate ? -1 : 1)\n }%`;\n\n const scale = 1 - absProgress * scaleStep;\n const zIndex = zIndexMax - Math.abs(Math.round(slideProgress));\n slideEl.style.transform = `translateX(${translate}) scale(${scale})`;\n slideEl.style.zIndex = zIndex;\n if (absProgress > sideSlides + 1) {\n slideEl.style.opacity = 0;\n } else {\n slideEl.style.opacity = 1;\n }\n\n opacityEls.forEach((opacityEl) => {\n opacityEl.style.opacity = 1 - absProgress * opacityStep;\n });\n }\n });\n\n on('setTransition', (s, duration) => {\n if (swiper.params.effect !== 'carousel') return;\n for (let i = 0; i < swiper.slides.length; i += 1) {\n const slideEl = swiper.slides[i];\n const opacityEls = slideEl.querySelectorAll(\n '.swiper-carousel-animate-opacity',\n );\n slideEl.style.transitionDuration = `${duration}ms`;\n opacityEls.forEach((opacityEl) => {\n opacityEl.style.transitionDuration = `${duration}ms`;\n });\n }\n });\n}\n"],"names":["__webpack_require__","exports","Symbol","toStringTag","Object","defineProperty","value","a","x","y","z","Math","sqrt","copy$4","out","add","b","subtract","scale$3","squaredLength","normalize$2","len","dot$2","cross","ax","ay","az","bx","by","bz","window","SwiperElementRegisterParams","angle","tempA","tempB","cosine","PI","acos","Vec3","Array","constructor","super","this","v","set","length","copy","set$4","va","vb","sub","multiply","divide","inverse","distance","squaredLen","squaredDistance","negate","scale","normalize","dot","equals","applyMatrix3","mat3","m","transformMat3","applyMatrix4","mat4","w","transformMat4","scaleRotateMatrix4","scaleRotateMat4","applyQuaternion","q","qx","qy","qz","uvx","uvy","uvz","uuvx","uuvy","uuvz","w2","transformQuat","lerp","t","clone","fromArray","o","toArray","transformDirection","tempVec3$1","ID$4","ATTR_ID","isBoundsWarned","Geometry","gl","attributes","canvas","console","error","id","VAOs","drawRange","start","count","instancedCount","renderer","bindVertexArray","currentGeometry","glState","state","key","addAttribute","attr","size","type","data","Float32Array","FLOAT","Uint16Array","UNSIGNED_SHORT","UNSIGNED_INT","target","ELEMENT_ARRAY_BUFFER","ARRAY_BUFFER","normalized","stride","offset","byteLength","divisor","instanced","needsUpdate","usage","STATIC_DRAW","buffer","updateAttribute","isInstanced","warn","min","index","max","isNewBuffer","createBuffer","boundBuffer","bindBuffer","bufferData","bufferSubData","setIndex","setDrawRange","setInstancedCount","createVAO","program","attributeOrder","createVertexArray","bindAttributes","attributeLocations","forEach","location","name","numLoc","i","vertexAttribPointer","enableVertexAttribArray","vertexAttribDivisor","draw","mode","TRIANGLES","drawElementsInstanced","drawArraysInstanced","drawElements","drawArrays","getPosition","position","computeBoundingBox","array","BYTES_PER_ELEMENT","bounds","center","radius","Infinity","l","computeBoundingSphere","maxRadiusSq","remove","deleteVertexArray","deleteBuffer","ID$3","arrayCacheF32","Program","vertex","fragment","uniforms","transparent","cullFace","BACK","frontFace","CCW","depthTest","depthWrite","depthFunc","LESS","blendFunc","blendEquation","src","premultipliedAlpha","setBlendFunc","ONE","ONE_MINUS_SRC_ALPHA","SRC_ALPHA","vertexShader","createShader","VERTEX_SHADER","shaderSource","compileShader","getShaderInfoLog","addLineNumbers","fragmentShader","FRAGMENT_SHADER","createProgram","attachShader","linkProgram","getProgramParameter","LINK_STATUS","getProgramInfoLog","deleteShader","uniformLocations","Map","numUniforms","ACTIVE_UNIFORMS","uIndex","uniform","getActiveUniform","getUniformLocation","split","match","uniformName","isStructArray","structIndex","Number","structProperty","isNaN","isStruct","locations","numAttribs","ACTIVE_ATTRIBUTES","aIndex","attribute","getActiveAttrib","getAttribLocation","join","dst","srcAlpha","dstAlpha","setBlendEquation","modeRGB","modeAlpha","applyState","enable","DEPTH_TEST","disable","CULL_FACE","BLEND","setCullFace","setFrontFace","setDepthMask","setDepthFunc","use","flipFaces","textureUnit","currentProgram","useProgram","activeUniform","undefined","texture","update","setUniform","textureUnits","push","CW","deleteProgram","arrayLen","valueLen","flatten","setValue","get","slice","arraysEqual","setArray","uniform1fv","uniform1f","uniform2fv","uniform3fv","uniform4fv","uniform1iv","uniform1i","uniform2iv","uniform3iv","uniform4iv","uniformMatrix2fv","uniformMatrix3fv","uniformMatrix4fv","string","lines","warnCount","message","tempVec3","ID$2","Renderer","document","createElement","width","height","dpr","alpha","depth","stencil","antialias","preserveDrawingBuffer","powerPreference","autoClear","webgl","color","getContext","isWebgl2","setSize","ZERO","FUNC_ADD","depthMask","premultiplyAlpha","flipY","unpackAlignment","framebuffer","viewport","activeTextureUnit","extensions","getExtension","drawBuffers","parameters","maxTextureUnits","getParameter","MAX_COMBINED_TEXTURE_IMAGE_UNITS","maxAnisotropy","MAX_TEXTURE_MAX_ANISOTROPY_EXT","assign","style","setViewport","setScissor","scissor","blendFuncSeparate","blendEquationSeparate","activeTexture","TEXTURE0","bindFramebuffer","FRAMEBUFFER","extension","webgl2Func","extFunc","bind","sortOpaque","renderOrder","zDepth","sortTransparent","sortUI","getRenderList","scene","camera","frustumCull","sort","renderList","updateFrustum","traverse","node","visible","frustumCulled","frustumIntersectsMesh","opaque","ui","worldMatrix","getTranslation","projectionViewMatrix","concat","render","clear","COLOR_BUFFER_BIT","DEPTH_BUFFER_BIT","STENCIL_BUFFER_BIT","updateMatrixWorld","copy$3","set$3","normalize$1","dot$1","multiply$2","aw","bw","copy$2","set$2","Quat","onChange","identity","rotateX","rad","sin","cos","rotateY","rotateZ","a0","a1","a2","a3","invDot","invert$2","conjugate","qA","qB","fromMatrix3","matrix3","fRoot","fTrace","j","k","fromMat3","fromEuler","euler","order","sx","cx","sy","cy","sz","cz","fromAxisAngle","axis","s","setAxisAngle","slerp","omega","cosom","sinom","scale0","scale1","multiply$1","a00","a01","a02","a03","a10","a11","a12","a13","a20","a21","a22","a23","a30","a31","a32","a33","b0","b1","b2","b3","getScaling","mat","m11","m12","m13","m21","m22","m23","m31","m32","m33","hypot","getRotation","temp","scaling","is1","is2","is3","sm11","sm12","sm13","sm21","sm22","sm23","sm31","sm32","sm33","trace","S","Mat4","m00","m01","m02","m03","m10","m20","m30","set$1","translate","translate$1","rotate","c","b00","b01","b02","b10","b11","b12","b20","b21","b22","abs","rotate$1","scale$1","ma","mb","fromPerspective","fov","aspect","near","far","fovy","f","tan","nf","perspective","fromOrthogonal","left","right","bottom","top","lr","bt","ortho","fromQuaternion","x2","y2","z2","xx","yx","yy","zx","zy","zz","wx","wy","wz","fromQuat$1","setPosition","b03","b04","b05","b06","b07","b08","b09","det","invert$1","compose","pos","xy","xz","yz","fromRotationTranslationScale","getMaxScaleOnAxis","lookAt","eye","up","eyex","eyey","eyez","upx","upy","upz","z0","z1","x0","x1","targetTo","determinant","tmpMat4","Euler","reorder","fromRotationMatrix","asin","atan2","Transform","parent","children","matrix","matrixAutoUpdate","quaternion","rotation","setParent","notifyParent","removeChild","addChild","child","notifyChild","indexOf","splice","force","updateMatrix","worldMatrixNeedsUpdate","callback","decompose","invert","tempMat4","tempVec3a","tempVec3b","Camera","zoom","projectionMatrix","viewMatrix","worldPosition","orthographic","project","unproject","frustum","constant","invLen","geometry","frustumIntersectsSphere","normal","plane","Mat3","fromMatrix4","fromQuat","fromBasis","vec3a","vec3b","vec3c","getNormalMatrix","normalFromMat4","ID$1","Mesh","modelViewMatrix","normalMatrix","beforeRenderCallbacks","afterRenderCallbacks","onBeforeRender","onAfterRender","mesh","modelMatrix","cameraPosition","emptyPixel","Uint8Array","isPowerOf2","ID","Texture","image","TEXTURE_2D","UNSIGNED_BYTE","format","RGBA","internalFormat","wrapS","CLAMP_TO_EDGE","wrapT","generateMipmaps","minFilter","NEAREST_MIPMAP_LINEAR","LINEAR","magFilter","anisotropy","level","createTexture","store","REPEAT","bindTexture","pixelStorei","UNPACK_FLIP_Y_WEBGL","UNPACK_PREMULTIPLY_ALPHA_WEBGL","UNPACK_ALIGNMENT","texParameteri","TEXTURE_MIN_FILTER","TEXTURE_MAG_FILTER","TEXTURE_WRAP_S","TEXTURE_WRAP_T","texParameterf","TEXTURE_MAX_ANISOTROPY_EXT","TEXTURE_CUBE_MAP","texImage2D","TEXTURE_CUBE_MAP_POSITIVE_X","ArrayBuffer","isView","isCompressedTexture","compressedTexImage2D","generateMipmap","onUpdate","Vec4","Plane","widthSegments","heightSegments","wSegs","hSegs","num","numIndices","uv","Uint32Array","buildPlane","u","uDir","vDir","ii","io","segW","segH","iy","ix","d","displacement","F2","G2","fastFloor","floor","grad2","Float64Array","randFloatSpread","range","random","randFloat","low","high","noise2D","perm","tableSize","p","r","aux","buildPermutationTable","permGrad2x","map","permGrad2y","n0","n1","n2","y0","i1","j1","y1","jj","t0","gi0","t1","gi1","t2","gi2","createNoise2D","clamp","fragmentCommon","vertexCommon","vertexRotate","shaders","intensity","detail","offsetTop","defaultVertex","getRandomShader","arr","opts","shaderPerSlide","swiper","params","loop","realIndex","activeIndex","allShaders","isArray","keys","includes","keyIndex","GL","shader","displacementMap","innerWidth","innerHeight","clearColor","container","el","displacementTexture","isElement","setAttribute","prepend","time","current","init","addObjects","resize","animateUniform","targetValue","cb","startPosition","startTime","cancelAnimationFrame","animateUniformFrame","dir","isOutOfBound","animate","destroyed","Date","getTime","progress","speed","easeProgress","currentPosition","requestAnimationFrame","loadTextures","promises","that","images","textures","querySelectorAll","img","url","promise","Promise","resolve","Image","crossOrigin","onload","all","then","initialized","onInit","dist","atan","imageAspect","material","resolution","vertexMaterial","nextMesh","currentMesh","createMaterial","derivatives","texture1","texture2","number","gran","granH","rows","offsets","positions","centroids","control0","control1","randoms","uvs","currentShift","bary","currentHeight","sign","simp","ctrl0","ctrl1","o1","c1","getGeometry","replaceShader","newShaderName","fromTexture","newTexture","replaceRandomShader","setProgress","fromIndex","toIndex","needsTransitionDuration","needShaderReplace","glDestroyed","slides","parseInt","getAttribute","preventShaderReplace","item","destroy","EffectSlicer","extendParams","on","emit","slicerEffect","createImages","slideEl","querySelector","imageEl","nextEl","nextElementSibling","cloneContainerEl","classList","div","appendChild","cloneNode","parentNode","insertBefore","setImages","cloneEl","cloneElIndex","cloneImg","direction","setTransition","duration","contentEl","transitionDuration","imageIndex","transitionTimingFunction","eventTriggered","transitionEndTarget","onTransitionEnd","e","removeEventListener","animating","evt","CustomEvent","bubbles","cancelable","wrapperEl","dispatchEvent","addEventListener","effectVirtualTransitionEnd","effect","slideIndex","transform","slideProgress","setTranslate","_s","classNames","overwriteParams","slidesPerView","slidesPerGroup","watchSlidesProgress","spaceBetween","virtualTranslate","originalParams","SwiperGL","noWebGLSupport","glInit","previousProgress","WebGLRenderingContext","supportsWebGL","containerModifierClass","from","to","transitionProgress","targetIndex","cssMode","round","newFrom","newTo","EffectShutters","shuttersEffect","parallax","enabled","percentagePerItem","EffectCarousel","carouselEffect","opacityStep","scaleStep","sideSlides","centeredSlides","modifyMultiplier","translateModifier","zIndexMax","absProgress","modify","opacityEls","rtlTranslate","zIndex","opacity","opacityEl"],"sourceRoot":""}